summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArvinder Bhathal <arvinder.bhathal@gmail.com>2017-06-27 20:29:10 -0400
committerArvinder Bhathal <arvinder.bhathal@gmail.com>2017-06-27 20:29:10 -0400
commit23ba1aa0dd3e0af915afb0215d510e54a35524db (patch)
tree4125328be21ffa7774c6b08b3f0323dc6b2ddc35
parentd5e6fde7040c0d472cb08bbfa1e4c64df780b882 (diff)
downloadfreetype2-23ba1aa0dd3e0af915afb0215d510e54a35524db.tar.gz
Move files to root
-rw-r--r--CMakeLists.txt452
-rw-r--r--ChangeLog4689
-rw-r--r--ChangeLog.202613
-rw-r--r--ChangeLog.219438
-rw-r--r--ChangeLog.222837
-rw-r--r--ChangeLog.237948
-rw-r--r--ChangeLog.246360
-rw-r--r--ChangeLog.255161
-rw-r--r--ChangeLog.265711
-rw-r--r--Jamfile222
-rw-r--r--Jamrules71
-rw-r--r--Makefile34
-rw-r--r--README84
-rw-r--r--README.git50
-rwxr-xr-xautogen.sh165
-rw-r--r--bitmap.c (renamed from glyphtest/bitmap.c)0
-rw-r--r--bitmap.h (renamed from glyphtest/bitmap.h)0
-rw-r--r--builds/amiga/README110
-rw-r--r--builds/amiga/include/config/ftconfig.h55
-rw-r--r--builds/amiga/include/config/ftmodule.h160
-rw-r--r--builds/amiga/makefile299
-rw-r--r--builds/amiga/makefile.os4303
-rw-r--r--builds/amiga/smakefile303
-rw-r--r--builds/amiga/src/base/ftdebug.c297
-rw-r--r--builds/amiga/src/base/ftsystem.c530
-rw-r--r--builds/ansi/ansi-def.mk74
-rw-r--r--builds/ansi/ansi.mk21
-rw-r--r--builds/atari/ATARI.H20
-rw-r--r--builds/atari/FNames.SIC37
-rw-r--r--builds/atari/FREETYPE.PRJ32
-rw-r--r--builds/atari/README.TXT51
-rw-r--r--builds/atari/deflinejoiner.awk181
-rwxr-xr-xbuilds/atari/gen-purec-patch.sh40
-rw-r--r--builds/beos/beos-def.mk76
-rw-r--r--builds/beos/beos.mk19
-rw-r--r--builds/beos/detect.mk41
-rw-r--r--builds/cmake/FindHarfBuzz.cmake72
-rw-r--r--builds/cmake/iOS.cmake270
-rwxr-xr-xbuilds/cmake/testbuild.sh157
-rw-r--r--builds/compiler/ansi-cc.mk80
-rw-r--r--builds/compiler/bcc-dev.mk86
-rw-r--r--builds/compiler/bcc.mk86
-rw-r--r--builds/compiler/emx.mk77
-rw-r--r--builds/compiler/gcc-dev.mk95
-rw-r--r--builds/compiler/gcc.mk77
-rw-r--r--builds/compiler/intelc.mk85
-rw-r--r--builds/compiler/unix-lcc.mk83
-rw-r--r--builds/compiler/visualage.mk76
-rw-r--r--builds/compiler/visualc.mk82
-rw-r--r--builds/compiler/watcom.mk81
-rw-r--r--builds/compiler/win-lcc.mk81
-rw-r--r--builds/detect.mk154
-rw-r--r--builds/dos/detect.mk142
-rw-r--r--builds/dos/dos-def.mk45
-rw-r--r--builds/dos/dos-emx.mk21
-rw-r--r--builds/dos/dos-gcc.mk21
-rw-r--r--builds/dos/dos-wat.mk20
-rw-r--r--builds/exports.mk80
-rw-r--r--builds/freetype.mk339
-rw-r--r--builds/link_dos.mk42
-rw-r--r--builds/link_std.mk42
-rw-r--r--builds/mac/FreeType.m68k_cfm.make.txt212
-rw-r--r--builds/mac/FreeType.m68k_far.make.txt211
-rw-r--r--builds/mac/FreeType.ppc_carbon.make.txt215
-rw-r--r--builds/mac/FreeType.ppc_classic.make.txt216
-rw-r--r--builds/mac/README401
-rwxr-xr-xbuilds/mac/ascii2mpw.py24
-rw-r--r--builds/mac/freetype-Info.plist36
-rw-r--r--builds/mac/ftlib.prj.xml1194
-rw-r--r--builds/mac/ftmac.c1542
-rw-r--r--builds/modules.mk79
-rw-r--r--builds/newline1
-rw-r--r--builds/os2/detect.mk73
-rw-r--r--builds/os2/os2-def.mk44
-rw-r--r--builds/os2/os2-dev.mk30
-rw-r--r--builds/os2/os2-gcc.mk26
-rw-r--r--builds/symbian/bld.inf66
-rw-r--r--builds/symbian/freetype.mmp148
-rw-r--r--builds/toplevel.mk276
-rw-r--r--builds/unix/.gitignore17
-rw-r--r--builds/unix/configure.raw1032
-rw-r--r--builds/unix/detect.mk93
-rw-r--r--builds/unix/freetype-config.in211
-rw-r--r--builds/unix/freetype2.in14
-rw-r--r--builds/unix/freetype2.m4194
-rw-r--r--builds/unix/ft-munmap.m432
-rw-r--r--builds/unix/ftconfig.in523
-rw-r--r--builds/unix/ftsystem.c420
-rw-r--r--builds/unix/install.mk95
-rw-r--r--builds/unix/pkg.m4199
-rw-r--r--builds/unix/unix-cc.in114
-rw-r--r--builds/unix/unix-def.in150
-rw-r--r--builds/unix/unix-dev.mk26
-rw-r--r--builds/unix/unix-lcc.mk24
-rw-r--r--builds/unix/unix.mk62
-rw-r--r--builds/unix/unixddef.mk45
-rw-r--r--builds/vms/ftconfig.h464
-rw-r--r--builds/vms/ftsystem.c328
-rw-r--r--builds/wince/ftdebug.c255
-rw-r--r--builds/wince/vc2005-ce/freetype.sln157
-rw-r--r--builds/wince/vc2005-ce/freetype.vcproj3839
-rw-r--r--builds/wince/vc2005-ce/index.html47
-rw-r--r--builds/wince/vc2008-ce/freetype.sln157
-rw-r--r--builds/wince/vc2008-ce/freetype.vcproj13495
-rw-r--r--builds/wince/vc2008-ce/index.html47
-rw-r--r--builds/windows/.gitignore5
-rw-r--r--builds/windows/detect.mk184
-rw-r--r--builds/windows/ftdebug.c237
-rw-r--r--builds/windows/vc2005/freetype.sln31
-rw-r--r--builds/windows/vc2005/freetype.vcproj646
-rw-r--r--builds/windows/vc2005/index.html37
-rw-r--r--builds/windows/vc2008/freetype.sln31
-rw-r--r--builds/windows/vc2008/freetype.vcproj2180
-rw-r--r--builds/windows/vc2008/index.html37
-rw-r--r--builds/windows/vc2010/freetype.sln49
-rw-r--r--builds/windows/vc2010/freetype.user.props68
-rw-r--r--builds/windows/vc2010/freetype.vcxproj1718
-rw-r--r--builds/windows/vc2010/freetype.vcxproj.filters155
-rw-r--r--builds/windows/vc2010/index.html52
-rw-r--r--builds/windows/visualc/freetype.dsp400
-rw-r--r--builds/windows/visualc/freetype.dsw29
-rw-r--r--builds/windows/visualc/freetype.sln31
-rw-r--r--builds/windows/visualc/freetype.vcproj2179
-rw-r--r--builds/windows/visualc/index.html37
-rw-r--r--builds/windows/visualce/freetype.dsp400
-rw-r--r--builds/windows/visualce/freetype.dsw29
-rw-r--r--builds/windows/visualce/freetype.vcproj13885
-rw-r--r--builds/windows/visualce/index.html47
-rw-r--r--builds/windows/w32-bcc.mk28
-rw-r--r--builds/windows/w32-bccd.mk26
-rw-r--r--builds/windows/w32-dev.mk32
-rw-r--r--builds/windows/w32-gcc.mk31
-rw-r--r--builds/windows/w32-icc.mk28
-rw-r--r--builds/windows/w32-intl.mk28
-rw-r--r--builds/windows/w32-lcc.mk24
-rw-r--r--builds/windows/w32-mingw32.mk33
-rw-r--r--builds/windows/w32-vcc.mk28
-rw-r--r--builds/windows/w32-wat.mk28
-rw-r--r--builds/windows/win32-def.mk47
-rw-r--r--compare-new-to-old.c (renamed from glyphtest/compare-new-to-old.c)0
-rwxr-xr-xconfigure135
-rw-r--r--devel/ft2build.h40
-rw-r--r--devel/ftoption.h962
-rw-r--r--docs/CHANGES4807
-rw-r--r--docs/CMAKE2
-rw-r--r--docs/CUSTOMIZE152
-rw-r--r--docs/DEBUG204
-rw-r--r--docs/FTL.TXT169
-rw-r--r--docs/GPLv2.TXT340
-rw-r--r--docs/INSTALL90
-rw-r--r--docs/INSTALL.ANY156
-rw-r--r--docs/INSTALL.CROSS177
-rw-r--r--docs/INSTALL.GNU161
-rw-r--r--docs/INSTALL.MAC32
-rw-r--r--docs/INSTALL.UNIX118
-rw-r--r--docs/INSTALL.VMS62
-rw-r--r--docs/LICENSE.TXT39
-rw-r--r--docs/MAKEPP5
-rw-r--r--docs/PROBLEMS90
-rw-r--r--docs/TODO40
-rw-r--r--docs/VERSIONS.TXT124
-rw-r--r--docs/formats.txt209
-rw-r--r--docs/freetype-config.1146
-rw-r--r--docs/raster.txt635
-rw-r--r--docs/reference/.gitignore1
-rw-r--r--docs/reference/README5
-rw-r--r--docs/release202
-rw-r--r--generate-old-hashes.c (renamed from glyphtest/generate-old-hashes.c)0
-rw-r--r--include/freetype/config/ftconfig.h491
-rw-r--r--include/freetype/config/ftheader.h846
-rw-r--r--include/freetype/config/ftmodule.h32
-rw-r--r--include/freetype/config/ftoption.h993
-rw-r--r--include/freetype/config/ftstdlib.h175
-rw-r--r--include/freetype/freetype.h4549
-rw-r--r--include/freetype/ftadvanc.h187
-rw-r--r--include/freetype/ftautoh.h533
-rw-r--r--include/freetype/ftbbox.h101
-rw-r--r--include/freetype/ftbdf.h210
-rw-r--r--include/freetype/ftbitmap.h240
-rw-r--r--include/freetype/ftbzip2.h102
-rw-r--r--include/freetype/ftcache.h1057
-rw-r--r--include/freetype/ftcffdrv.h321
-rw-r--r--include/freetype/ftchapters.h136
-rw-r--r--include/freetype/ftcid.h168
-rw-r--r--include/freetype/fterrdef.h278
-rw-r--r--include/freetype/fterrors.h226
-rw-r--r--include/freetype/ftfntfmt.h95
-rw-r--r--include/freetype/ftgasp.h137
-rw-r--r--include/freetype/ftglyph.h614
-rw-r--r--include/freetype/ftgxval.h357
-rw-r--r--include/freetype/ftgzip.h148
-rw-r--r--include/freetype/ftimage.h1205
-rw-r--r--include/freetype/ftincrem.h354
-rw-r--r--include/freetype/ftlcdfil.h321
-rw-r--r--include/freetype/ftlist.h276
-rw-r--r--include/freetype/ftlzw.h99
-rw-r--r--include/freetype/ftmac.h274
-rw-r--r--include/freetype/ftmm.h490
-rw-r--r--include/freetype/ftmodapi.h710
-rw-r--r--include/freetype/ftmoderr.h194
-rw-r--r--include/freetype/ftotval.h204
-rw-r--r--include/freetype/ftoutln.h582
-rw-r--r--include/freetype/ftpcfdrv.h105
-rw-r--r--include/freetype/ftpfr.h172
-rw-r--r--include/freetype/ftrender.h233
-rw-r--r--include/freetype/ftsizes.h159
-rw-r--r--include/freetype/ftsnames.h287
-rw-r--r--include/freetype/ftstroke.h785
-rw-r--r--include/freetype/ftsynth.h84
-rw-r--r--include/freetype/ftsystem.h355
-rw-r--r--include/freetype/fttrigon.h350
-rw-r--r--include/freetype/ftttdrv.h328
-rw-r--r--include/freetype/fttypes.h602
-rw-r--r--include/freetype/ftwinfnt.h275
-rw-r--r--include/freetype/internal/autohint.h244
-rw-r--r--include/freetype/internal/ftcalc.h444
-rw-r--r--include/freetype/internal/ftdebug.h255
-rw-r--r--include/freetype/internal/ftdriver.h400
-rw-r--r--include/freetype/internal/ftgloadr.h154
-rw-r--r--include/freetype/internal/fthash.h136
-rw-r--r--include/freetype/internal/ftmemory.h393
-rw-r--r--include/freetype/internal/ftobjs.h1610
-rw-r--r--include/freetype/internal/ftpic.h71
-rw-r--r--include/freetype/internal/ftrfork.h267
-rw-r--r--include/freetype/internal/ftserv.h927
-rw-r--r--include/freetype/internal/ftstream.h536
-rw-r--r--include/freetype/internal/fttrace.h154
-rw-r--r--include/freetype/internal/ftvalid.h159
-rw-r--r--include/freetype/internal/internal.h63
-rw-r--r--include/freetype/internal/psaux.h879
-rw-r--r--include/freetype/internal/pshints.h722
-rw-r--r--include/freetype/internal/services/svbdf.h82
-rw-r--r--include/freetype/internal/services/svcid.h90
-rw-r--r--include/freetype/internal/services/svfntfmt.h55
-rw-r--r--include/freetype/internal/services/svgldict.h91
-rw-r--r--include/freetype/internal/services/svgxval.h72
-rw-r--r--include/freetype/internal/services/svkern.h51
-rw-r--r--include/freetype/internal/services/svmetric.h153
-rw-r--r--include/freetype/internal/services/svmm.h159
-rw-r--r--include/freetype/internal/services/svotval.h55
-rw-r--r--include/freetype/internal/services/svpfr.h66
-rw-r--r--include/freetype/internal/services/svpostnm.h81
-rw-r--r--include/freetype/internal/services/svprop.h82
-rw-r--r--include/freetype/internal/services/svpscmap.h177
-rw-r--r--include/freetype/internal/services/svpsinfo.h111
-rw-r--r--include/freetype/internal/services/svsfnt.h103
-rw-r--r--include/freetype/internal/services/svttcmap.h106
-rw-r--r--include/freetype/internal/services/svtteng.h53
-rw-r--r--include/freetype/internal/services/svttglyf.h69
-rw-r--r--include/freetype/internal/services/svwinfnt.h50
-rw-r--r--include/freetype/internal/sfnt.h784
-rw-r--r--include/freetype/internal/t1types.h257
-rw-r--r--include/freetype/internal/tttypes.h1691
-rw-r--r--include/freetype/t1tables.h761
-rw-r--r--include/freetype/ttnameid.h1236
-rw-r--r--include/freetype/tttables.h846
-rw-r--r--include/freetype/tttags.h115
-rw-r--r--include/freetype/ttunpat.h63
-rw-r--r--include/ft2build.h42
-rw-r--r--index.html (renamed from glyphtest/index.html)0
-rw-r--r--modules.cfg270
-rw-r--r--murmur3.c (renamed from glyphtest/murmur3.c)0
-rw-r--r--murmur3.h (renamed from glyphtest/murmur3.h)0
-rw-r--r--objs/.gitignore15
-rw-r--r--objs/README2
-rw-r--r--readme.txt (renamed from glyphtest/readme.txt)0
-rw-r--r--src/Jamfile19
-rw-r--r--src/autofit/Jamfile53
-rw-r--r--src/autofit/afangles.c285
-rw-r--r--src/autofit/afangles.h7
-rw-r--r--src/autofit/afblue.c733
-rw-r--r--src/autofit/afblue.cin39
-rw-r--r--src/autofit/afblue.dat1066
-rw-r--r--src/autofit/afblue.h412
-rw-r--r--src/autofit/afblue.hin146
-rw-r--r--src/autofit/afcjk.c2381
-rw-r--r--src/autofit/afcjk.h141
-rw-r--r--src/autofit/afcover.h105
-rw-r--r--src/autofit/afdummy.c75
-rw-r--r--src/autofit/afdummy.h40
-rw-r--r--src/autofit/aferrors.h42
-rw-r--r--src/autofit/afglobal.c503
-rw-r--r--src/autofit/afglobal.h173
-rw-r--r--src/autofit/afhints.c1646
-rw-r--r--src/autofit/afhints.h481
-rw-r--r--src/autofit/afindic.c157
-rw-r--r--src/autofit/afindic.h41
-rw-r--r--src/autofit/aflatin.c3585
-rw-r--r--src/autofit/aflatin.h194
-rw-r--r--src/autofit/aflatin2.c2427
-rw-r--r--src/autofit/aflatin2.h46
-rw-r--r--src/autofit/afloader.c721
-rw-r--r--src/autofit/afloader.h91
-rw-r--r--src/autofit/afmodule.c600
-rw-r--r--src/autofit/afmodule.h58
-rw-r--r--src/autofit/afpic.c152
-rw-r--r--src/autofit/afpic.h105
-rw-r--r--src/autofit/afranges.c1026
-rw-r--r--src/autofit/afranges.h47
-rw-r--r--src/autofit/afscript.h390
-rw-r--r--src/autofit/afshaper.c683
-rw-r--r--src/autofit/afshaper.h72
-rw-r--r--src/autofit/afstyles.h475
-rw-r--r--src/autofit/aftypes.h651
-rw-r--r--src/autofit/afwarp.c373
-rw-r--r--src/autofit/afwarp.h64
-rw-r--r--src/autofit/afwrtsys.h52
-rw-r--r--src/autofit/autofit.c39
-rw-r--r--src/autofit/module.mk23
-rw-r--r--src/autofit/rules.mk89
-rw-r--r--src/base/Jamfile88
-rw-r--r--src/base/basepic.c108
-rw-r--r--src/base/basepic.h91
-rw-r--r--src/base/ftadvanc.c171
-rw-r--r--src/base/ftapi.c121
-rw-r--r--src/base/ftbase.c39
-rw-r--r--src/base/ftbase.h74
-rw-r--r--src/base/ftbbox.c515
-rw-r--r--src/base/ftbdf.c91
-rw-r--r--src/base/ftbitmap.c809
-rw-r--r--src/base/ftcalc.c1017
-rw-r--r--src/base/ftcid.c118
-rw-r--r--src/base/ftdbgmem.c999
-rw-r--r--src/base/ftdebug.c266
-rw-r--r--src/base/ftfntfmt.c55
-rw-r--r--src/base/ftfstype.c62
-rw-r--r--src/base/ftgasp.c61
-rw-r--r--src/base/ftgloadr.c406
-rw-r--r--src/base/ftglyph.c646
-rw-r--r--src/base/ftgxval.c142
-rw-r--r--src/base/fthash.c339
-rw-r--r--src/base/ftinit.c376
-rw-r--r--src/base/ftlcdfil.c362
-rw-r--r--src/base/ftmac.c1088
-rw-r--r--src/base/ftmm.c405
-rw-r--r--src/base/ftobjs.c5223
-rw-r--r--src/base/ftotval.c91
-rw-r--r--src/base/ftoutln.c1109
-rw-r--r--src/base/ftpatent.c51
-rw-r--r--src/base/ftpfr.c153
-rw-r--r--src/base/ftpic.c55
-rw-r--r--src/base/ftrfork.c937
-rw-r--r--src/base/ftsnames.c148
-rw-r--r--src/base/ftstream.c860
-rw-r--r--src/base/ftstroke.c2469
-rw-r--r--src/base/ftsynth.c163
-rw-r--r--src/base/ftsystem.c320
-rw-r--r--src/base/fttrigon.c526
-rw-r--r--src/base/fttype1.c127
-rw-r--r--src/base/ftutil.c441
-rw-r--r--src/base/ftwinfnt.c53
-rw-r--r--src/base/md5.c291
-rw-r--r--src/base/md5.h45
-rw-r--r--src/base/rules.mk106
-rw-r--r--src/bdf/Jamfile31
-rw-r--r--src/bdf/README148
-rw-r--r--src/bdf/bdf.c35
-rw-r--r--src/bdf/bdf.h280
-rw-r--r--src/bdf/bdfdrivr.c986
-rw-r--r--src/bdf/bdfdrivr.h80
-rw-r--r--src/bdf/bdferror.h45
-rw-r--r--src/bdf/bdflib.c2462
-rw-r--r--src/bdf/module.mk34
-rw-r--r--src/bdf/rules.mk84
-rw-r--r--src/bzip2/Jamfile18
-rw-r--r--src/bzip2/ftbzip2.c525
-rw-r--r--src/bzip2/rules.mk64
-rw-r--r--src/cache/Jamfile37
-rw-r--r--src/cache/ftcache.c32
-rw-r--r--src/cache/ftcbasic.c602
-rw-r--r--src/cache/ftccache.c621
-rw-r--r--src/cache/ftccache.h352
-rw-r--r--src/cache/ftccback.h92
-rw-r--r--src/cache/ftccmap.c327
-rw-r--r--src/cache/ftcerror.h42
-rw-r--r--src/cache/ftcglyph.c219
-rw-r--r--src/cache/ftcglyph.h329
-rw-r--r--src/cache/ftcimage.c164
-rw-r--r--src/cache/ftcimage.h107
-rw-r--r--src/cache/ftcmanag.c704
-rw-r--r--src/cache/ftcmanag.h175
-rw-r--r--src/cache/ftcmru.c357
-rw-r--r--src/cache/ftcmru.h248
-rw-r--r--src/cache/ftcsbits.c423
-rw-r--r--src/cache/ftcsbits.h103
-rw-r--r--src/cache/rules.mk85
-rw-r--r--src/cff/Jamfile45
-rw-r--r--src/cff/cf2arrst.c241
-rw-r--r--src/cff/cf2arrst.h100
-rw-r--r--src/cff/cf2blues.c580
-rw-r--r--src/cff/cf2blues.h185
-rw-r--r--src/cff/cf2error.c52
-rw-r--r--src/cff/cf2error.h119
-rw-r--r--src/cff/cf2fixed.h95
-rw-r--r--src/cff/cf2font.c562
-rw-r--r--src/cff/cf2font.h130
-rw-r--r--src/cff/cf2ft.c755
-rw-r--r--src/cff/cf2ft.h159
-rw-r--r--src/cff/cf2glue.h144
-rw-r--r--src/cff/cf2hints.c1873
-rw-r--r--src/cff/cf2hints.h289
-rw-r--r--src/cff/cf2intrp.c1959
-rw-r--r--src/cff/cf2intrp.h83
-rw-r--r--src/cff/cf2read.c112
-rw-r--r--src/cff/cf2read.h68
-rw-r--r--src/cff/cf2stack.c328
-rw-r--r--src/cff/cf2stack.h121
-rw-r--r--src/cff/cf2types.h78
-rw-r--r--src/cff/cff.c41
-rw-r--r--src/cff/cffcmap.c229
-rw-r--r--src/cff/cffcmap.h67
-rw-r--r--src/cff/cffdrivr.c1244
-rw-r--r--src/cff/cffdrivr.h38
-rw-r--r--src/cff/cfferrs.h42
-rw-r--r--src/cff/cffgload.c3234
-rw-r--r--src/cff/cffgload.h246
-rw-r--r--src/cff/cffload.c2554
-rw-r--r--src/cff/cffload.h128
-rw-r--r--src/cff/cffobjs.c1208
-rw-r--r--src/cff/cffobjs.h185
-rw-r--r--src/cff/cffparse.c1681
-rw-r--r--src/cff/cffparse.h136
-rw-r--r--src/cff/cffpic.c138
-rw-r--r--src/cff/cffpic.h118
-rw-r--r--src/cff/cfftoken.h150
-rw-r--r--src/cff/cfftypes.h405
-rw-r--r--src/cff/module.mk23
-rw-r--r--src/cff/rules.mk89
-rw-r--r--src/cid/Jamfile34
-rw-r--r--src/cid/ciderrs.h41
-rw-r--r--src/cid/cidgload.c458
-rw-r--r--src/cid/cidgload.h51
-rw-r--r--src/cid/cidload.c846
-rw-r--r--src/cid/cidload.h53
-rw-r--r--src/cid/cidobjs.c492
-rw-r--r--src/cid/cidobjs.h154
-rw-r--r--src/cid/cidparse.c277
-rw-r--r--src/cid/cidparse.h123
-rw-r--r--src/cid/cidriver.c238
-rw-r--r--src/cid/cidriver.h43
-rw-r--r--src/cid/cidtoken.h112
-rw-r--r--src/cid/module.mk23
-rw-r--r--src/cid/rules.mk73
-rw-r--r--src/cid/type1cid.c29
-rw-r--r--src/gxvalid/Jamfile52
-rw-r--r--src/gxvalid/README532
-rw-r--r--src/gxvalid/gxvalid.c47
-rw-r--r--src/gxvalid/gxvalid.h108
-rw-r--r--src/gxvalid/gxvbsln.c334
-rw-r--r--src/gxvalid/gxvcommn.c1746
-rw-r--r--src/gxvalid/gxvcommn.h582
-rw-r--r--src/gxvalid/gxverror.h51
-rw-r--r--src/gxvalid/gxvfeat.c339
-rw-r--r--src/gxvalid/gxvfeat.h173
-rw-r--r--src/gxvalid/gxvfgen.c483
-rw-r--r--src/gxvalid/gxvjust.c719
-rw-r--r--src/gxvalid/gxvkern.c920
-rw-r--r--src/gxvalid/gxvlcar.c224
-rw-r--r--src/gxvalid/gxvmod.c285
-rw-r--r--src/gxvalid/gxvmod.h51
-rw-r--r--src/gxvalid/gxvmort.c300
-rw-r--r--src/gxvalid/gxvmort.h94
-rw-r--r--src/gxvalid/gxvmort0.c152
-rw-r--r--src/gxvalid/gxvmort1.c260
-rw-r--r--src/gxvalid/gxvmort2.c312
-rw-r--r--src/gxvalid/gxvmort4.c126
-rw-r--r--src/gxvalid/gxvmort5.c234
-rw-r--r--src/gxvalid/gxvmorx.c199
-rw-r--r--src/gxvalid/gxvmorx.h68
-rw-r--r--src/gxvalid/gxvmorx0.c112
-rw-r--r--src/gxvalid/gxvmorx1.c278
-rw-r--r--src/gxvalid/gxvmorx2.c331
-rw-r--r--src/gxvalid/gxvmorx4.c56
-rw-r--r--src/gxvalid/gxvmorx5.c226
-rw-r--r--src/gxvalid/gxvopbd.c218
-rw-r--r--src/gxvalid/gxvprop.c330
-rw-r--r--src/gxvalid/gxvtrak.c288
-rw-r--r--src/gxvalid/module.mk23
-rw-r--r--src/gxvalid/rules.mk98
-rw-r--r--src/gzip/Jamfile16
-rw-r--r--src/gzip/adler32.c48
-rw-r--r--src/gzip/ftgzip.c816
-rw-r--r--src/gzip/ftzconf.h284
-rw-r--r--src/gzip/infblock.c387
-rw-r--r--src/gzip/infblock.h36
-rw-r--r--src/gzip/infcodes.c250
-rw-r--r--src/gzip/infcodes.h31
-rw-r--r--src/gzip/inffixed.h151
-rw-r--r--src/gzip/inflate.c273
-rw-r--r--src/gzip/inftrees.c468
-rw-r--r--src/gzip/inftrees.h63
-rw-r--r--src/gzip/infutil.c86
-rw-r--r--src/gzip/infutil.h98
-rw-r--r--src/gzip/rules.mk83
-rw-r--r--src/gzip/zlib.h830
-rw-r--r--src/gzip/zutil.c181
-rw-r--r--src/gzip/zutil.h215
-rw-r--r--src/lzw/Jamfile16
-rw-r--r--src/lzw/ftlzw.c420
-rw-r--r--src/lzw/ftzopen.c424
-rw-r--r--src/lzw/ftzopen.h172
-rw-r--r--src/lzw/rules.mk72
-rw-r--r--src/otvalid/Jamfile37
-rw-r--r--src/otvalid/module.mk23
-rw-r--r--src/otvalid/otvalid.c32
-rw-r--r--src/otvalid/otvalid.h78
-rw-r--r--src/otvalid/otvbase.c318
-rw-r--r--src/otvalid/otvcommn.c1086
-rw-r--r--src/otvalid/otvcommn.h437
-rw-r--r--src/otvalid/otverror.h42
-rw-r--r--src/otvalid/otvgdef.c224
-rw-r--r--src/otvalid/otvgpos.c1021
-rw-r--r--src/otvalid/otvgpos.h36
-rw-r--r--src/otvalid/otvgsub.c587
-rw-r--r--src/otvalid/otvjstf.c259
-rw-r--r--src/otvalid/otvmath.c453
-rw-r--r--src/otvalid/otvmod.c282
-rw-r--r--src/otvalid/otvmod.h43
-rw-r--r--src/otvalid/rules.mk81
-rw-r--r--src/pcf/Jamfile32
-rw-r--r--src/pcf/README96
-rw-r--r--src/pcf/module.mk34
-rw-r--r--src/pcf/pcf.c36
-rw-r--r--src/pcf/pcf.h247
-rw-r--r--src/pcf/pcfdrivr.c869
-rw-r--r--src/pcf/pcfdrivr.h48
-rw-r--r--src/pcf/pcferror.h41
-rw-r--r--src/pcf/pcfread.c1663
-rw-r--r--src/pcf/pcfread.h45
-rw-r--r--src/pcf/pcfutil.c104
-rw-r--r--src/pcf/pcfutil.h55
-rw-r--r--src/pcf/rules.mk82
-rw-r--r--src/pfr/Jamfile35
-rw-r--r--src/pfr/module.mk23
-rw-r--r--src/pfr/pfr.c30
-rw-r--r--src/pfr/pfrcmap.c177
-rw-r--r--src/pfr/pfrcmap.h46
-rw-r--r--src/pfr/pfrdrivr.c213
-rw-r--r--src/pfr/pfrdrivr.h43
-rw-r--r--src/pfr/pfrerror.h41
-rw-r--r--src/pfr/pfrgload.c847
-rw-r--r--src/pfr/pfrgload.h49
-rw-r--r--src/pfr/pfrload.c1049
-rw-r--r--src/pfr/pfrload.h123
-rw-r--r--src/pfr/pfrobjs.c600
-rw-r--r--src/pfr/pfrobjs.h96
-rw-r--r--src/pfr/pfrsbit.c808
-rw-r--r--src/pfr/pfrsbit.h37
-rw-r--r--src/pfr/pfrtypes.h332
-rw-r--r--src/pfr/rules.mk76
-rw-r--r--src/psaux/Jamfile35
-rw-r--r--src/psaux/afmparse.c986
-rw-r--r--src/psaux/afmparse.h89
-rw-r--r--src/psaux/module.mk23
-rw-r--r--src/psaux/psaux.c30
-rw-r--r--src/psaux/psauxerr.h42
-rw-r--r--src/psaux/psauxmod.c143
-rw-r--r--src/psaux/psauxmod.h42
-rw-r--r--src/psaux/psconv.c611
-rw-r--r--src/psaux/psconv.h71
-rw-r--r--src/psaux/psobjs.c1782
-rw-r--r--src/psaux/psobjs.h212
-rw-r--r--src/psaux/rules.mk76
-rw-r--r--src/psaux/t1cmap.c371
-rw-r--r--src/psaux/t1cmap.h105
-rw-r--r--src/psaux/t1decode.c1648
-rw-r--r--src/psaux/t1decode.h64
-rw-r--r--src/pshinter/Jamfile34
-rw-r--r--src/pshinter/module.mk23
-rw-r--r--src/pshinter/pshalgo.c2195
-rw-r--r--src/pshinter/pshalgo.h241
-rw-r--r--src/pshinter/pshglob.c795
-rw-r--r--src/pshinter/pshglob.h196
-rw-r--r--src/pshinter/pshinter.c29
-rw-r--r--src/pshinter/pshmod.c121
-rw-r--r--src/pshinter/pshmod.h39
-rw-r--r--src/pshinter/pshnterr.h41
-rw-r--r--src/pshinter/pshpic.c76
-rw-r--r--src/pshinter/pshpic.h63
-rw-r--r--src/pshinter/pshrec.c1220
-rw-r--r--src/pshinter/pshrec.h172
-rw-r--r--src/pshinter/rules.mk76
-rw-r--r--src/psnames/Jamfile31
-rw-r--r--src/psnames/module.mk23
-rw-r--r--src/psnames/psmodule.c619
-rw-r--r--src/psnames/psmodule.h38
-rw-r--r--src/psnames/psnamerr.h42
-rw-r--r--src/psnames/psnames.c26
-rw-r--r--src/psnames/pspic.c97
-rw-r--r--src/psnames/pspic.h68
-rw-r--r--src/psnames/pstables.h4238
-rw-r--r--src/psnames/rules.mk74
-rw-r--r--src/raster/Jamfile32
-rw-r--r--src/raster/ftmisc.h142
-rw-r--r--src/raster/ftraster.c3225
-rw-r--r--src/raster/ftraster.h46
-rw-r--r--src/raster/ftrend1.c249
-rw-r--r--src/raster/ftrend1.h38
-rw-r--r--src/raster/module.mk23
-rw-r--r--src/raster/raster.c27
-rw-r--r--src/raster/rasterrs.h42
-rw-r--r--src/raster/rastpic.c89
-rw-r--r--src/raster/rastpic.h63
-rw-r--r--src/raster/rules.mk73
-rw-r--r--src/sfnt/Jamfile40
-rw-r--r--src/sfnt/module.mk23
-rw-r--r--src/sfnt/pngshim.c389
-rw-r--r--src/sfnt/pngshim.h51
-rw-r--r--src/sfnt/rules.mk81
-rw-r--r--src/sfnt/sfdriver.c1285
-rw-r--r--src/sfnt/sfdriver.h38
-rw-r--r--src/sfnt/sferrors.h41
-rw-r--r--src/sfnt/sfnt.c35
-rw-r--r--src/sfnt/sfntpic.c143
-rw-r--r--src/sfnt/sfntpic.h112
-rw-r--r--src/sfnt/sfobjs.c1759
-rw-r--r--src/sfnt/sfobjs.h59
-rw-r--r--src/sfnt/ttbdf.c257
-rw-r--r--src/sfnt/ttbdf.h46
-rw-r--r--src/sfnt/ttcmap.c3809
-rw-r--r--src/sfnt/ttcmap.h158
-rw-r--r--src/sfnt/ttcmapc.h56
-rw-r--r--src/sfnt/ttkern.c305
-rw-r--r--src/sfnt/ttkern.h52
-rw-r--r--src/sfnt/ttload.c1427
-rw-r--r--src/sfnt/ttload.h112
-rw-r--r--src/sfnt/ttmtx.c326
-rw-r--r--src/sfnt/ttmtx.h55
-rw-r--r--src/sfnt/ttpost.c575
-rw-r--r--src/sfnt/ttpost.h46
-rw-r--r--src/sfnt/ttsbit.c1674
-rw-r--r--src/sfnt/ttsbit.h63
-rw-r--r--src/smooth/Jamfile32
-rw-r--r--src/smooth/ftgrays.c2051
-rw-r--r--src/smooth/ftgrays.h58
-rw-r--r--src/smooth/ftsmerrs.h42
-rw-r--r--src/smooth/ftsmooth.c555
-rw-r--r--src/smooth/ftsmooth.h42
-rw-r--r--src/smooth/ftspic.c118
-rw-r--r--src/smooth/ftspic.h75
-rw-r--r--src/smooth/module.mk27
-rw-r--r--src/smooth/rules.mk74
-rw-r--r--src/smooth/smooth.c27
-rw-r--r--src/tools/Jamfile5
-rw-r--r--src/tools/afblue.pl551
-rw-r--r--src/tools/apinames.c466
-rwxr-xr-xsrc/tools/chktrcmp.py114
-rw-r--r--src/tools/cordic.py33
-rw-r--r--src/tools/docmaker/.gitignore1
-rw-r--r--src/tools/docmaker/content.py655
-rw-r--r--src/tools/docmaker/docbeauty.py113
-rw-r--r--src/tools/docmaker/docmaker.py115
-rw-r--r--src/tools/docmaker/formatter.py228
-rw-r--r--src/tools/docmaker/sources.py410
-rw-r--r--src/tools/docmaker/tohtml.py725
-rw-r--r--src/tools/docmaker/utils.py127
-rw-r--r--src/tools/ftfuzzer/README77
-rw-r--r--src/tools/ftfuzzer/ftfuzzer.cc429
-rw-r--r--src/tools/ftfuzzer/ftmutator.cc314
-rw-r--r--src/tools/ftfuzzer/rasterfuzzer.cc129
-rw-r--r--src/tools/ftfuzzer/runinput.cc58
-rw-r--r--src/tools/ftrandom/Makefile45
-rw-r--r--src/tools/ftrandom/README69
-rw-r--r--src/tools/ftrandom/ftrandom.c720
-rw-r--r--src/tools/glnames.py5540
-rw-r--r--src/tools/no-copyright65
-rw-r--r--src/tools/test_afm.c157
-rw-r--r--src/tools/test_bbox.c188
-rw-r--r--src/tools/test_trig.c258
-rwxr-xr-xsrc/tools/update-copyright14
-rwxr-xr-xsrc/tools/update-copyright-year135
-rw-r--r--src/truetype/Jamfile37
-rw-r--r--src/truetype/module.mk23
-rw-r--r--src/truetype/rules.mk77
-rw-r--r--src/truetype/truetype.c32
-rw-r--r--src/truetype/ttdriver.c665
-rw-r--r--src/truetype/ttdriver.h38
-rw-r--r--src/truetype/tterrors.h42
-rw-r--r--src/truetype/ttgload.c2767
-rw-r--r--src/truetype/ttgload.h62
-rw-r--r--src/truetype/ttgxvar.c3741
-rw-r--r--src/truetype/ttgxvar.h445
-rw-r--r--src/truetype/ttinterp.c8495
-rw-r--r--src/truetype/ttinterp.h539
-rw-r--r--src/truetype/ttobjs.c1403
-rw-r--r--src/truetype/ttobjs.h425
-rw-r--r--src/truetype/ttpic.c101
-rw-r--r--src/truetype/ttpic.h88
-rw-r--r--src/truetype/ttpload.c642
-rw-r--r--src/truetype/ttpload.h75
-rw-r--r--src/truetype/ttsubpix.c1014
-rw-r--r--src/truetype/ttsubpix.h111
-rw-r--r--src/type1/Jamfile35
-rw-r--r--src/type1/module.mk23
-rw-r--r--src/type1/rules.mk76
-rw-r--r--src/type1/t1afm.c415
-rw-r--r--src/type1/t1afm.h54
-rw-r--r--src/type1/t1driver.c756
-rw-r--r--src/type1/t1driver.h42
-rw-r--r--src/type1/t1errors.h41
-rw-r--r--src/type1/t1gload.c524
-rw-r--r--src/type1/t1gload.h53
-rw-r--r--src/type1/t1load.c2449
-rw-r--r--src/type1/t1load.h113
-rw-r--r--src/type1/t1objs.c607
-rw-r--r--src/type1/t1objs.h160
-rw-r--r--src/type1/t1parse.c525
-rw-r--r--src/type1/t1parse.h129
-rw-r--r--src/type1/t1tokens.h143
-rw-r--r--src/type1/type1.c30
-rw-r--r--src/type42/Jamfile32
-rw-r--r--src/type42/module.mk23
-rw-r--r--src/type42/rules.mk73
-rw-r--r--src/type42/t42drivr.c246
-rw-r--r--src/type42/t42drivr.h43
-rw-r--r--src/type42/t42error.h41
-rw-r--r--src/type42/t42objs.c688
-rw-r--r--src/type42/t42objs.h124
-rw-r--r--src/type42/t42parse.c1299
-rw-r--r--src/type42/t42parse.h91
-rw-r--r--src/type42/t42types.h57
-rw-r--r--src/type42/type42.c27
-rw-r--r--src/winfonts/Jamfile16
-rw-r--r--src/winfonts/fnterrs.h42
-rw-r--r--src/winfonts/module.mk23
-rw-r--r--src/winfonts/rules.mk68
-rw-r--r--src/winfonts/winfnt.c1200
-rw-r--r--src/winfonts/winfnt.h171
-rw-r--r--version.sed5
-rw-r--r--vms_make.com1286
730 files changed, 0 insertions, 330428 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
deleted file mode 100644
index d1b053e2b..000000000
--- a/CMakeLists.txt
+++ /dev/null
@@ -1,452 +0,0 @@
-# CMakeLists.txt
-#
-# Copyright 2013-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# Written originally by John Cary <cary@txcorp.com>
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-#
-#
-# As a preliminary, create a compilation directory and change into it, for
-# example
-#
-# mkdir ~/freetype2.compiled
-# cd ~/freetype2.compiled
-#
-# Now you can say
-#
-# cmake <path-to-freetype2-src-dir>
-#
-# to create a Makefile that builds a static version of the library.
-#
-# For a dynamic library, use
-#
-# cmake <path-to-freetype2-src-dir> -D BUILD_SHARED_LIBS:BOOL=true
-#
-# For a framework on OS X, use
-#
-# cmake <path-to-freetype2-src-dir> -D BUILD_FRAMEWORK:BOOL=true -G Xcode
-#
-# instead.
-#
-# For an iOS static library, use
-#
-# cmake -D IOS_PLATFORM=OS -G Xcode <path-to-freetype2-src-dir>
-#
-# or
-#
-# cmake -D IOS_PLATFORM=SIMULATOR -G Xcode <path-to-freetype2-src-dir>
-#
-# Please refer to the cmake manual for further options, in particular, how
-# to modify compilation and linking parameters.
-#
-# Some notes.
-#
-# . `cmake' creates configuration files in
-#
-# <build-directory>/include/freetype/config
-#
-# which should be further modified if necessary.
-#
-# . You can use `cmake' directly on a freshly cloned FreeType git
-# repository.
-#
-# . `CMakeLists.txt' is provided as-is since it is normally not used by the
-# developer team.
-#
-# . If you want to disable the automatic generation of the distribution
-# targets, add the `-D FREETYPE_NO_DIST=true' command line argument.
-#
-# . Set the `WITH_ZLIB', `WITH_BZip2', `WITH_PNG', and `WITH_HarfBuzz'
-# CMake variables to `ON' or `OFF' to force or skip using a dependency.
-# Leave a variable undefined (which is the default) to use the dependency
-# only if it is available. Example:
-#
-# cmake ... -DWITH_ZLIB=ON -DWITH_HarfBuzz=OFF ...
-#
-# . Installation of FreeType can be controlled with the CMake variables
-# `SKIP_INSTALL_HEADERS', `SKIP_INSTALL_LIBRARIES', and `SKIP_INSTALL_ALL'
-# (this is compatible with the same CMake variables in zlib's CMake
-# support).
-
-
-cmake_minimum_required(VERSION 2.6)
-
-
-include(CheckIncludeFile)
-
-
-# CMAKE_TOOLCHAIN_FILE must be set before `project' is called, which
-# configures the base build environment and references the toolchain file
-if (APPLE)
- if (DEFINED IOS_PLATFORM)
- if (NOT "${IOS_PLATFORM}" STREQUAL "OS"
- AND NOT "${IOS_PLATFORM}" STREQUAL "SIMULATOR")
- message(FATAL_ERROR
- "IOS_PLATFORM must be set to either OS or SIMULATOR")
- endif ()
- if (NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode")
- message(AUTHOR_WARNING
- "You should use Xcode generator with IOS_PLATFORM enabled to get Universal builds.")
- endif ()
- if (BUILD_SHARED_LIBS)
- message(FATAL_ERROR
- "BUILD_SHARED_LIBS can not be on with IOS_PLATFORM enabled")
- endif ()
- if (BUILD_FRAMEWORK)
- message(FATAL_ERROR
- "BUILD_FRAMEWORK can not be on with IOS_PLATFORM enabled")
- endif ()
-
- # iOS only uses static libraries
- set(BUILD_SHARED_LIBS OFF)
-
- set(CMAKE_TOOLCHAIN_FILE
- ${CMAKE_SOURCE_DIR}/builds/cmake/iOS.cmake)
- endif ()
-else ()
- if (DEFINED IOS_PLATFORM)
- message(FATAL_ERROR "IOS_PLATFORM is not supported on this platform")
- endif ()
-endif ()
-
-
-project(freetype)
-
-
-if (WIN32 AND NOT MINGW AND BUILD_SHARED_LIBS)
- message(FATAL_ERROR "Building shared libraries on Windows needs MinGW")
-endif ()
-
-# Disallow in-source builds
-if ("${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
- message(FATAL_ERROR
- "
-In-source builds are not permitted! Make a separate folder for"
- " building, e.g.,"
- "
- mkdir build; cd build; cmake .."
- "
-Before that, remove the files created by this failed run with"
- "
- rm -rf CMakeCache.txt CMakeFiles")
-endif ()
-
-
-# Add local cmake modules
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/builds/cmake)
-
-
-if (BUILD_FRAMEWORK)
- if (NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode")
- message(FATAL_ERROR
- "You should use Xcode generator with BUILD_FRAMEWORK enabled")
- endif ()
- set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)")
- set(BUILD_SHARED_LIBS ON)
-endif ()
-
-
-set(VERSION_MAJOR "2")
-set(VERSION_MINOR "8")
-set(VERSION_PATCH "0")
-
-set(PROJECT_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
-set(SHARED_LIBRARY_VERSION ${VERSION_MAJOR}.${VERSION_MINOR})
-
-
-# Compiler definitions for building the library
-add_definitions(-DFT2_BUILD_LIBRARY)
-
-
-# Find dependencies
-foreach (d ZLIB BZip2 PNG HarfBuzz)
- string(TOUPPER "${d}" D)
-
- if (DEFINED WITH_${d} OR DEFINED WITH_${D})
- if (WITH_${d} OR WITH_${D})
- find_package(${d} QUIET REQUIRED)
- endif ()
- else ()
- find_package(${d} QUIET)
- endif ()
-
- if (${d}_FOUND OR ${D}_FOUND)
- message(STATUS "Building with ${d}")
- endif ()
-endforeach ()
-
-
-message(STATUS
- "Creating directory ${PROJECT_BINARY_DIR}/include/freetype/config")
-file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/include/freetype/config")
-
-
-# Create the configuration file
-message(STATUS
- "Creating file ${PROJECT_BINARY_DIR}/include/freetype/config/ftconfig.h")
-
-if (UNIX)
- check_include_file("unistd.h" HAVE_UNISTD_H)
- check_include_file("fcntl.h" HAVE_FCNTL_H)
- check_include_file("stdint.h" HAVE_STDINT_H)
-
- file(READ "${PROJECT_SOURCE_DIR}/builds/unix/ftconfig.in"
- FTCONFIG_H)
- if (HAVE_UNISTD_H)
- string(REGEX REPLACE
- "#undef +(HAVE_UNISTD_H)" "#define \\1"
- FTCONFIG_H "${FTCONFIG_H}")
- endif ()
- if (HAVE_FCNTL_H)
- string(REGEX REPLACE
- "#undef +(HAVE_FCNTL_H)" "#define \\1"
- FTCONFIG_H "${FTCONFIG_H}")
- endif ()
- if (HAVE_STDINT_H)
- string(REGEX REPLACE
- "#undef +(HAVE_STDINT_H)" "#define \\1"
- FTCONFIG_H "${FTCONFIG_H}")
- endif ()
- string(REPLACE "/undef " "#undef "
- FTCONFIG_H "${FTCONFIG_H}")
- file(WRITE "${PROJECT_BINARY_DIR}/include/freetype/config/ftconfig.h-new"
- "${FTCONFIG_H}")
-else ()
- file(READ "${PROJECT_SOURCE_DIR}/include/freetype/config/ftconfig.h"
- FTCONFIG_H)
- file(WRITE "${PROJECT_BINARY_DIR}/include/freetype/config/ftconfig.h-new"
- "${FTCONFIG_H}")
-endif ()
-execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${PROJECT_BINARY_DIR}/include/freetype/config/ftconfig.h-new"
- "${PROJECT_BINARY_DIR}/include/freetype/config/ftconfig.h")
-
-
-# Create the options file
-message(STATUS
- "Creating file ${PROJECT_BINARY_DIR}/include/freetype/config/ftoption.h")
-
-file(READ "${PROJECT_SOURCE_DIR}/include/freetype/config/ftoption.h"
- FTOPTION_H)
-if (ZLIB_FOUND)
- string(REGEX REPLACE
- "/\\* +(#define +FT_CONFIG_OPTION_SYSTEM_ZLIB) +\\*/" "\\1"
- FTOPTION_H "${FTOPTION_H}")
-endif ()
-if (BZIP2_FOUND)
- string(REGEX REPLACE
- "/\\* +(#define +FT_CONFIG_OPTION_USE_BZIP2) +\\*/" "\\1"
- FTOPTION_H "${FTOPTION_H}")
-endif ()
-if (PNG_FOUND)
- string(REGEX REPLACE
- "/\\* +(#define +FT_CONFIG_OPTION_USE_PNG) +\\*/" "\\1"
- FTOPTION_H "${FTOPTION_H}")
-endif ()
-if (HARFBUZZ_FOUND)
- string(REGEX REPLACE
- "/\\* +(#define +FT_CONFIG_OPTION_USE_HARFBUZZ) +\\*/" "\\1"
- FTOPTION_H "${FTOPTION_H}")
-endif ()
-file(WRITE "${PROJECT_BINARY_DIR}/include/freetype/config/ftoption.h-new"
- "${FTOPTION_H}")
-execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${PROJECT_BINARY_DIR}/include/freetype/config/ftoption.h-new"
- "${PROJECT_BINARY_DIR}/include/freetype/config/ftoption.h")
-
-
-# Specify library include directories
-include_directories("${PROJECT_SOURCE_DIR}/include")
-include_directories(BEFORE "${PROJECT_BINARY_DIR}/include")
-
-
-file(GLOB PUBLIC_HEADERS "include/ft2build.h" "include/freetype/*.h")
-file(GLOB PUBLIC_CONFIG_HEADERS "include/freetype/config/*.h")
-file(GLOB PRIVATE_HEADERS "include/freetype/internal/*.h")
-
-
-set(BASE_SRCS
- src/autofit/autofit.c
- src/base/ftbase.c
- src/base/ftbbox.c
- src/base/ftbdf.c
- src/base/ftbitmap.c
- src/base/ftcid.c
- src/base/ftfntfmt.c
- src/base/ftfstype.c
- src/base/ftgasp.c
- src/base/ftglyph.c
- src/base/ftgxval.c
- src/base/ftinit.c
- src/base/ftlcdfil.c
- src/base/ftmm.c
- src/base/ftotval.c
- src/base/ftpatent.c
- src/base/ftpfr.c
- src/base/ftstroke.c
- src/base/ftsynth.c
- src/base/ftsystem.c
- src/base/fttype1.c
- src/base/ftwinfnt.c
- src/bdf/bdf.c
- src/bzip2/ftbzip2.c
- src/cache/ftcache.c
- src/cff/cff.c
- src/cid/type1cid.c
- src/gzip/ftgzip.c
- src/lzw/ftlzw.c
- src/pcf/pcf.c
- src/pfr/pfr.c
- src/psaux/psaux.c
- src/pshinter/pshinter.c
- src/psnames/psnames.c
- src/raster/raster.c
- src/sfnt/sfnt.c
- src/smooth/smooth.c
- src/truetype/truetype.c
- src/type1/type1.c
- src/type42/type42.c
- src/winfonts/winfnt.c
-)
-
-if (WIN32)
- set(BASE_SRCS ${BASE_SRCS} builds/windows/ftdebug.c)
-elseif (WINCE)
- set(BASE_SRCS ${BASE_SRCS} builds/wince/ftdebug.c)
-else ()
- set(BASE_SRCS ${BASE_SRCS} src/base/ftdebug.c)
-endif ()
-
-
-if (BUILD_FRAMEWORK)
- set(BASE_SRCS
- ${BASE_SRCS}
- builds/mac/freetype-Info.plist
- )
-endif ()
-
-set(CMAKE_DEBUG_POSTFIX d)
-
-add_library(freetype
- ${PUBLIC_HEADERS}
- ${PUBLIC_CONFIG_HEADERS}
- ${PRIVATE_HEADERS}
- ${BASE_SRCS}
-)
-
-
-if (BUILD_SHARED_LIBS)
- set_target_properties(freetype PROPERTIES
- VERSION ${PROJECT_VERSION}
- SOVERSION ${SHARED_LIBRARY_VERSION}
- COMPILE_DEFINITIONS freetype_EXPORTS
- )
-endif ()
-
-
-if (BUILD_FRAMEWORK)
- set_property(SOURCE ${PUBLIC_CONFIG_HEADERS}
- PROPERTY MACOSX_PACKAGE_LOCATION Headers/config
- )
- set_target_properties(freetype PROPERTIES
- FRAMEWORK TRUE
- MACOSX_FRAMEWORK_INFO_PLIST builds/mac/freetype-Info.plist
- PUBLIC_HEADER "${PUBLIC_HEADERS}"
- XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
- )
-endif ()
-
-if (NOT CMAKE_VERSION VERSION_LESS 2.8.12)
- target_include_directories(freetype
- PUBLIC $<INSTALL_INTERFACE:include/freetype2>)
-endif ()
-
-if (CMAKE_VERSION VERSION_LESS 2.8.12)
- set(MAYBE_PRIVATE "")
-else ()
- set(MAYBE_PRIVATE "PRIVATE")
-endif ()
-
-if (ZLIB_FOUND)
- target_link_libraries(freetype ${MAYBE_PRIVATE} ${ZLIB_LIBRARIES})
- include_directories(${ZLIB_INCLUDE_DIRS})
-endif ()
-if (BZIP2_FOUND)
- target_link_libraries(freetype ${MAYBE_PRIVATE} ${BZIP2_LIBRARIES})
- include_directories(${BZIP2_INCLUDE_DIR}) # not BZIP2_INCLUDE_DIRS
-endif ()
-if (PNG_FOUND)
- add_definitions(${PNG_DEFINITIONS})
- target_link_libraries(freetype ${MAYBE_PRIVATE} ${PNG_LIBRARIES})
- include_directories(${PNG_INCLUDE_DIRS})
-endif ()
-if (HARFBUZZ_FOUND)
- target_link_libraries(freetype ${MAYBE_PRIVATE} ${HARFBUZZ_LIBRARIES})
- include_directories(${HARFBUZZ_INCLUDE_DIRS})
-endif ()
-
-
-# Installations
-# Note the trailing slash in the argument to the `DIRECTORY' directive
-if (NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL)
- install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/
- DESTINATION include/freetype2
- PATTERN "internal" EXCLUDE
- PATTERN "ftconfig.h" EXCLUDE
- PATTERN "ftoption.h" EXCLUDE
- )
- install(FILES
- ${PROJECT_BINARY_DIR}/include/freetype/config/ftconfig.h
- ${PROJECT_BINARY_DIR}/include/freetype/config/ftoption.h
- DESTINATION include/freetype2/freetype/config
- )
-endif ()
-
-if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
- install(TARGETS freetype
- EXPORT freetype-targets
- RUNTIME DESTINATION bin
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib
- FRAMEWORK DESTINATION Library/Frameworks
- )
- install(EXPORT freetype-targets
- DESTINATION lib/cmake/freetype
- FILE freetype-config.cmake
- )
-endif ()
-
-
-# Packaging
-# CPack version numbers for release tarball name.
-set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR})
-set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR})
-set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH}})
-if (NOT DEFINED CPACK_PACKAGE_DESCRIPTION_SUMMARY)
- set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${CMAKE_PROJECT_NAME}")
-endif ()
-if (NOT DEFINED CPACK_SOURCE_PACKAGE_FILE_NAME)
- set(CPACK_SOURCE_PACKAGE_FILE_NAME
- "${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}-r${PROJECT_REV}"
- CACHE INTERNAL "tarball basename"
- )
-endif ()
-set(CPACK_SOURCE_GENERATOR TGZ)
-set(CPACK_SOURCE_IGNORE_FILES
- "/CVS/;/.svn/;.swp$;.#;/#;/build/;/serial/;/ser/;/parallel/;/par/;~;/preconfig.out;/autom4te.cache/;/.config")
-set(CPACK_GENERATOR TGZ)
-include(CPack)
-
-
-# Add `make dist' target if FREETYPE_DIST is set (which is the default)
-if (NOT DEFINED FREETYPE_NO_DIST)
- add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
-endif ()
-
-# eof
diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644
index bc65cbb67..000000000
--- a/ChangeLog
+++ /dev/null
@@ -1,4689 +0,0 @@
-2017-06-20 Tony Theodore <tonyt@logyst.com>
-
- Fix pkg-config in freetype-config for cross-compiling (#51274).
-
- * builds/unix/unix-def.in (PKG_CONFIG): New variable.
- (freetype-config): Use it in sed expression.
-
- * builds/unix/freetype-config.in: s/pkg-config/%PKG_CONFIG%/.
-
-2017-06-20 Werner Lemberg <wl@gnu.org>
-
- [cff, truetype] Integer overflows.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2300
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2313
-
- * src/cff/cf2hints.c (cf2_hintmap_adjustHints): Use ADD_INT32.
-
- * src/truetype/ttinterp.c (Ins_ABS): Avoid FT_ABS.
-
-2017-06-17 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base, smooth] LCD filtering cleanups.
-
- * src/base/ftlcdlil.c (ft_lcd_filter_fir, _ft_lcd_filter_legacy):
- Clean up, start filtering from the bottom-left origin.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Updated.
-
-2017-06-16 Werner Lemberg <wl@gnu.org>
-
- [truetype] Integer overflows.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2270
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2278
-
- * src/truetype/ttinterp.c (Ins_MDRP, _iup_worker_interpolate): Use
- ADD_LONG and SUB_LONG.
-
-2017-06-15 Werner Lemberg <wl@gnu.org>
-
- [bdf, cff] Integer overflows.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2244
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2261
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Replace calls to FT_ABS with
- direct code to avoid value negation.
-
- * src/cff/cf2blues.c (cf2_blues_capture): Use SUB_INT32 and
- ADD_INT32.
-
-2017-06-13 Werner Lemberg <wl@gnu.org>
-
- * src/winfonts/winfnt.c (FNT_Face_Init): Don't set active encoding.
-
- FreeType only sets a default active encoding for Unicode.
-
-2017-06-13 Werner Lemberg <wl@gnu.org>
-
- [cff, truetype] Integer overflows.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2216
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2218
-
- * src/cff/cf2fixed.h (cf2_fixedAbs): Use NEG_INT32.
-
- * src/truetype/ttinterp.c (Ins_IP): Use SUB_LONG.
-
-2017-06-11 Werner Lemberg <wl@gnu.org>
-
- [cff] Integer overflows.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2200
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2210
-
- * src/cff/cf2hints.c (cf2_hintmap_insertHint): Use SUB_INT32 and
- ADD_INT32.
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdVMOVETO>: Use
- ADD_INT32.
-
-2017-06-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix TT_Set_Var_Design.
-
- Reported by Nikolaus Waxweiler <madigens@gmail.com>.
-
- * src/truetype/ttgxvar.c (TT_Set_Var_Design): Correctly handle the
- case where we have less input coordinates than axes.
-
-2017-06-10 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftcalc.c (FT_DivFix): Fix embarrassing typo.
-
- Bug introduced 2017-05-28.
-
-2017-06-09 Werner Lemberg <wl@gnu.org>
-
- [cff, truetype] Integer overflows.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2144
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2151
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2153
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2173
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2186
-
- * src/cff/cf2blues.c (cf2_blues_init): Use SUB_INT32.
-
- * src/truetype/ttinterp.c (Round_None, Round_To_Grid,
- Round_To_Half_Grid, Round_Down_To_Grid, Round_Up_To_Grid,
- Round_To_Double_Grid, Round_Super, Round_Super_45): Use ADD_LONG,
- SUB_LONG, NEG_LONG, FT_PIX_ROUND_LONG, FT_PIX_CEIL_LONG,
- FT_PAD_ROUND_LONG
- (Ins_SxVTL, Ins_MIRP): Use SUB_LONG.
- (_iup_worker_shift): Use SUB_LONG and ADD_LONG.
-
-2017-06-09 Werner Lemberg <wl@gnu.org>
-
- Provide more macros for flooring, ceiling, and rounding.
-
- These versions don't produce run-time errors due to integer
- overflow.
-
- * include/freetype/internal/ftobjs.h: Include FT_INTERNAL_CALC_H.
- (FT_PAD_ROUND_LONG, FT_PAD_CEIL_LONG, FT_PIX_ROUND_LONG,
- FT_PIX_CEIL_LONG): New macros.
- (FT_PAD_ROUND_INT32, FT_PAD_CEIL_INT32, FT_PIX_ROUND_INT32,
- FT_PIX_CEIL_INT32): New macros.
-
-2017-06-09 Werner Lemberg <wl@gnu.org>
-
- Remove unused macros.
-
- * include/freetype/internal/ftcalc.h (ADD_INT, SUB_INT, MUL_INT,
- NEG_INT): Deleted.
-
-2017-06-09 Werner Lemberg <wl@gnu.org>
-
- */*: Remove `OVERFLOW_' prefix.
-
- This increases readability.
-
-2017-06-07 Werner Lemberg <wl@gnu.org>
-
- [cff, truetype] Integer overflows.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2133
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2137
-
- * src/cff/cf2hints.c (cf2_hint_init): Use OVERFLOW_SUB_INT32.
-
- * src/truetype/ttinterp.c (PROJECT, DUALPROJ): Use
- OVERFLOW_SUB_LONG.
-
-2017-06-06 Werner Lemberg <wl@gnu.org>
-
- [cff] Integer overflows.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2109
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2110
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2122
-
- * src/cff/cf2blues.c (cf2_blues_init): Use OVERFLOW_SUB_INT32.
-
- * src/cff/cf2hints.c (cf2_hintmap_map): Synchronize if-else
- branches.
-
-2017-06-05 Werner Lemberg <wl@gnu.org>
-
- [cff] Integer overflow.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2089
-
- * src/cff/cffload.c (cff_blend_doBlend): User OVERFLOW_ADD_INT32.
-
-2017-06-04 Werner Lemberg <wl@gnu.org>
-
- [cff, truetype] Integer overflows.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2075
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2088
-
- * src/cff/cf2font.c (cf2_font_setup): Use OVERFLOW_MUL_INT32.
-
- * src/truetype/ttinterp.c (Ins_ISECT): Use OVERFLOW_MUL_LONG,
- OVERFLOW_ADD_LONG, and OVERFLOW_SUB_LONG.
-
-2017-06-03 Werner Lemberg <wl@gnu.org>
-
- [base, cff, truetype] Integer overflows.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2060
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2062
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2063
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2068
-
- * src/base/ftobjs.c (ft_glyphslot_grid_fit_metrics): Use
- OVERFLOW_ADD_LONG and OVERFLOW_SUB_LONG.
-
- * src/cff/cf2blues.c (cf2_blues_capture), src/cff/cf2hints.c
- (cf2_hintmap_adjustHints): Use OVERFLOW_SUB_INT32.
-
- * src/truetype/ttgload.c (compute_glyph_metrics): User
- OVERFLOW_SUB_LONG.
-
- * src/truetype/ttinterp.c (Direct_Move, Direct_Move_Orig,
- Direct_Move_X, Direct_Move_Y, Direct_Move_Orig_X,
- Direct_Move_Orig_Y, Move_Zp2_Point, Ins_MSIRP): Use
- OVERFLOW_ADD_LONG and OVERFLOW_SUB_LONG.
-
-2017-06-03 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/freetype-config.in: Fix pkg-config test (#51162).
-
- Patch directly taken from bug report.
-
-2017-06-03 Werner Lemberg <wl@gnu.org>
-
- [bdf] Synchronize sanity checks with pcf driver.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2054
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2058
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Check font ascent and descent.
- Check AVERAGE_WIDTH, POINT_SIZE, PIXEL_SIZE, RESOLUTION_X, and
- RESOLUTION_Y properties.
-
-2017-06-03 Werner Lemberg <wl@gnu.org>
-
- [cff, truetype] Integer overflows.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2047
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2057
-
- * src/cff/cf2hints.c (cf2_hintmap_map): Use OVERFLOW_SUB_INT32.
-
- * src/truetype/ttinterp.c (Ins_ADD): Use OVERFLOW_ADD_LONG.
- (Ins_SUB): Use OVERFLOW_SUB_LONG.
- (Ins_NEG): Use NEG_LONG.
-
-2017-06-03 Werner Lemberg <wl@gnu.org>
-
- ftcalc.h: Avoid left-shift of negative numbers.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2055
-
- * include/freetype/internal/ftcalc.h (INT_TO_F26DOT6,
- INT_TO_F2DOT14, INT_TO_FIXED, F2DOT14_TO_FIXED): Use multiplication.
-
-2017-06-02 Werner Lemberg <wl@gnu.org>
-
- [cff] Even more integer overflows.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2046
-
- * src/cff/cf2intrp.c (cf2_doStems, cf2_interpT2CharString): Use
- OVERFLOW_ADD_INT32.
-
-2017-06-02 Werner Lemberg <wl@gnu.org>
-
- [cff] More integer overflows.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2032
-
- * src/cff/cf2blues.c (cf2_blues_init): Use OVERFLOW_SUB_INT32.
-
-2017-06-02 Werner Lemberg <wl@gnu.org>
-
- [bdf] Don't left-shift negative numbers.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2031
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Use multiplication.
-
-2017-06-02 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix integer scanning routines.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2029
-
- * src/bdf/bdflib.c (_bdf_atoul, _bdf_atol, _bdf_atous, _bdf_atos):
- Stop scanning if result would overflow.
-
-2017-06-02 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix integer overflows.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2027
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2028
-
- * src/cff/cf2hints.c (cf2_hintmap_insertHint), src/cff/cf2intrp.c
- (cf2_doFlex): Use OVERFLOW_ADD_INT32 and OVERFLOW_SUB_INT32.
-
-2017-06-01 Werner Lemberg <wl@gnu.org>
-
- [smooth] Some 32bit integer overflow run-time errors.
-
- * src/smooth/ftgrays.c [STANDALONE] (OVERFLOW_ADD_LONG,
- OVERFLOW_SUB_LONG, OVERFLOW_MUL_LONG, NEG_LONG): New macros.
- [!STANDALONE]: Include FT_INTERNAL_CALC_H.
- (gray_render_cubic): Use those macros where appropriate.
-
-2017-06-01 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftglyph.c (FT_Get_Glyph): Check `slot->advance'.
-
-2017-06-01 Werner Lemberg <wl@gnu.org>
-
- [psaux] 32bit integer overflow tun-time errors (#46149).
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Use
- OVERFLOW_ADD_LONG and OVERFLOW_SUB_LONG where appropriate.
-
-2017-06-01 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (TT_RunIns): Adjust loop counter again.
-
- Problem reported by Marek Kašík <mkasik@redhat.com>.
-
- The problematic font that exceeds the old limit is Padauk-Bold,
- version 3.002, containing bytecode generated by a buggy version of
- ttfautohint.
-
-2017-05-31 Werner Lemberg <wl@gnu.org>
-
- [cff] 32bit integer overflow run-time errors 2/2 (#46149).
-
- This commit handles the new engine.
-
- * include/freetype/internal/ftcalc.h (OVERFLOW_ADD_INT32,
- OVERFLOW_SUB_INT32, OVERFLOW_MUL_INT32, NEG_INT, NEG_LONG,
- NEG_INT32): New macros.
-
- * src/cff/cf2ft.c (cf2_getScaleAndHintFlag): Use OVERFLOW_ADD_INT32.
-
- * src/cff/cf2hints.c (cf2_getWindingMomentum, cf2_hint_init,
- cf2_hintmap_map, cf2_glyphpath_hintPoint,
- cf2_glyphpath_computeIntersection, cf2_glyphpath_computeOffset,
- cf2_glyphpath_lineTo, cf2_glyphpath_curveTo): Use
- OVERFLOW_ADD_INT32, OVERFLOW_SUB_INT32, OVERFLOW_MUL_INT32, and
- NEG_INT32 where appropriate.
-
- * src/cff/cf2intrp.c (cf2_doFlex, cf2_doBlend,
- cf2_interpT2CharString): Ditto.
- Also add some other code where needed to avoid overflow.
-
-2017-05-30 Werner Lemberg <wl@gnu.org>
-
- [cff] 32bit integer overflow run-time errors 1/2 (#46149).
-
- This commit handles the old engine.
-
- * src/cff/cffgload.c: Include FT_INTERNAL_CALC_H.
- (cff_decoder_parse_charstrings): Use OVERFLOW_ADD_LONG and
- OVERFLOW_SUB_LONG where needed.
-
- * src/cff/cffparse.c: Include FT_INTERNAL_CALC_H.
- (power_ten_limits): New static array.
- (do_fixed): Use it to prevent multiplication overflow.
- (cff_parser_run): Use OVERFLOW_ADD_LONG.
-
-2017-05-30 Werner Lemberg <wl@gnu.org>
-
- [psaux] Correctly handle sequences of multiple number signs.
-
- * src/psaux/psconv.c (PS_Conv_Strtol, PS_Conv_ToFixed): Return zero
- if we encounter more than a single sign.
-
-2017-05-29 Werner Lemberg <wl@gnu.org>
-
- [pcf] 32bit integer overflow run-time errors (#46149).
-
- * src/pcf/pcfread.c (pcf_get_accel): Add sanity checks for
- `fontAscent' and `fontDescent'.
- (pcf_load_font): Add sanity checks for global height.
- Add sanity checks for AVERAGE_WIDTH, POINT_SIZE, PIXEL_SIZE,
- RESOLUTION_X, and RESOLUTION_Y properties.
-
-2017-05-29 Werner Lemberg <wl@gnu.org>
-
- Handle some integer overflow run-time errors (#46149, #48979).
-
- This commit (mainly for 32bit CPUs) is the first of a series of
- similar commits to handle known integer overflows. Basically, all
- of them are harmless, since they affect rendering of glyphs only,
- not posing security threats. It is expected that fuzzying will show
- up more overflows, to be fixed in due course.
-
- The idea is to mark places where overflows can occur, using macros
- that simply cast to unsigned integers, because overflow arithmetic
- is well defined in this case. Doing so suppresses run-time errors
- of sanitizers without adding computational overhead.
-
- * include/freetype/internal/ftcalc.h (OVERFLOW_ADD_INT,
- OVERFLOW_SUB_INT, OVERFLOW_MUL_INT, OVERFLOW_ADD_LONG,
- OVERFLOW_SUB_LONG, OVERFLOW_MUL_LONG): New macros.
-
- * src/base/ftcalc.c (FT_RoundFix, FT_CeilFix, FT_Matrix_Multiply,
- FT_Matrix_Multiply_Scaled, FT_Vector_Transform_Scaled,
- ft_corner_orientation): Use new macros.
-
- * src/base/ftoutln.c (FT_Outline_Get_Orientation): Use new macros.
-
-2017-05-28 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/ftcalc.h (FLOAT_TO_FIXED): Remove.
-
- This macro is not used.
-
-2017-05-28 Werner Lemberg <wl@gnu.org>
-
- [cff] s/cf2_floatToFixed/cf2_doubleToFixed/.
-
- The new name better describes what the macro actually does;
- additionally, we don't need a trailing `f' for literals (there was
- only a single such instance in the code, but this caused a clang
- warning because the macro itself uses `double' literals).
-
- * src/cff/cf2blues.c, src/cff/cf2blues.h, src/cff/cf2fixed.h,
- src/cff/cf2font.c, src/cff/cf2hints.c: Updated.
-
-2017-05-28 Werner Lemberg <wl@gnu.org>
-
- Fix negation of INT_MIN and LONG_MIN (#46149).
-
- * src/base/ftcalc.c (FT_MOVE_SIGN): Add argument to pass unsigned
- value, to be used as the result.
- (FT_MulDiv, FT_MulDiv_No_Round, FT_DivFix, FT_MulFix,
- FT_Vector_NormLen): Updated.
-
-2017-05-27 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix handling of design coordinates (#51127).
-
- * src/truetype/ttgxvar.c (tt_set_mm_blend): Compute all design
- coordinates if we have to create the `blends->coord' array.
- (TT_Get_MM_Blend, TT_Get_Var_Design): Select default instance
- coordinates if no instance is selected yet.
-
-2017-05-24 Werner Lemberg <wl@gnu.org>
-
- [bdf, pcf] Support ISO646.1991-IRV character encoding (aka ASCII).
-
- Problem reported by Marek Kašík <mkasik@redhat.com>, cf.
-
- https://bugzilla.redhat.com/show_bug.cgi?id=1451795
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init), src/pcf/pcfdrivr.c
- (PCF_Face_Init): Implement it.
-
-2017-05-20 Nikolaus Waxweiler <madigens@gmail.com>
-
- [truetype] Always use interpreter v35 for B/W rendering (#51051).
-
- * src/truetype/ttgload.c (tt_loader_init)
- [TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL]: Adjust
- `subpixel_hinting_lean', `grayscale_cleartype', and
- `vertical_lcd_lean' accordingly.
-
- * src/truetype/ttinterp.c (Ins_GETINFO): Updated.
- (TT_RunIns): Update `backward_compatibility' flag.
-
-2017-05-20 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Implement minimal dynamic padding for LCD filtering.
-
- Extra bitmap padding for LCD filtering depends on the filter. The
- default 5-tap filter needs 2 extra subpixels. The light 3-tap filter
- needs only 1 extra subpixel. This space could be already available
- due to rounding. In order to optimize the padding, we now expand
- CBox for the given filter weights before rounding.
-
- This change breakes current Skia (and Firefox).
-
- * include/freetype/internal/ftobjs.h (FT_LibraryRec)
- [FT_CONFIG_OPTION_SUBPIXEL_RENDERING]: Remove `lcd_extra' field.
-
- * src/base/ftlcdfil.c (FT_Library_SetLcdFilterWeights,
- FT_Library_SetLcdFilter): Remove `lcd_extra' initializations.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Implement dymanic
- LCD padding.
-
-2017-05-15 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Return proper scaling values for SBIX bitmaps.
-
- Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.
-
- * src/sfnt/ttsbit.c (tt_face_load_strike_metrics): Implement it.
-
-2017-05-15 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix error handling for embedded bitmaps.
-
- Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.
-
- * src/truetype/ttgload.c (TT_Load_Glyph)
- [TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: Handle error if font is not
- scalable.
-
-2017-05-15 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [autofit] Make autohint warping NORMAL option.
-
- This moves warping option from LIGHT to NORMAL mode. This makes LIGHT
- truly void of hinting in x-direction, with left side bearing never
- changed and right side bearing only altered by advance rounding.
- Therefore, LIGHT is now ready to return fractional advance. As a
- NORMAL option, warping substitutes normal hinting.
-
- * src/autofit/afcjk.c (af_cjk_hints_apply): Updated.
- * src/autofit/aflatin.c (af_latin_hints_apply): Updated.
- * src/autofit/aflatin2.c (af_latin2_hints_apply): Updated.
-
- * src/autofit/afloader.c (af_loader_load_glyph): Handle warping
- phantom points as normal.
-
-2017-05-14 Werner Lemberg <wl@gnu.org>
-
- Remove remnants of raster pool.
-
- * include/freetype/internal/ftobjs.h (FT_LibraryRec): Remove
- `raster_pool' and `raster_pool_size' fields.
-
- * src/base/ftobjs.c (FT_New_Library), src/raster/ftrend1.c
- (ft_raster1_init), src/smooth/ftsmooth.c (ft_smooth_init): Updated.
-
-2017-05-13 Werner Lemberg <wl@gnu.org>
-
- * Version 2.8 released.
- =======================
-
-
- Tag sources with `VER-2-8'.
-
- * docs/VERSION.TXT: Add entry for version 2.8.
- * docs/CHANGES: Updated.
-
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/index.html,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualc/index.html,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj,
- builds/windows/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.7.1/2.8/, s/271/28/.
-
- * include/freetype/freetype.h (FREETYPE_MINOR): Set to 8.
- (FREETYPE_PATCH): Set to 0.
-
- * builds/unix/configure.raw (version_info): Set to 20:0:14.
- * CMakeLists.txt (VERSION_MINOR): Set to 8.
- (VERSION_PATCH): Set to 0.
-
-2017-05-12 Hin-Tak Leung <htl10@users.sourceforge.net>
-
- Fix `FT_UINT_TO_POINTER' macro for Windows.
-
- * builds/unix/ftconfig.in, builds/vms/ftconfig.h,
- include/freetype/config/ftconfig.h (FT_UINT_TO_POINTER) [_WIN64]:
- Fix definition.
-
-2017-05-11 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Chakma script.
-
- * src/autofit/afblue.dat: Add blue zone data for Chakma.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Chakma standard character.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Chakma data.
-
-2017-05-10 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Kayah Li script.
-
- * src/autofit/afblue.dat: Add blue zone data for Kayah Li.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Kayah Li standard character.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Kayah Li data.
-
-2017-05-10 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Bamum script.
-
- * src/autofit/afblue.dat: Add blue zone data for Bamum.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Bamum standard character.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Bamum data.
-
-2017-05-10 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Saurashtra script.
-
- * src/autofit/afblue.dat: Add blue zone data for Saurashtra.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Saurashtra standard character.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Saurashtra
- data.
-
-2017-05-10 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Buhid script.
-
- * src/autofit/afblue.dat: Add blue zone data for Buhid.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Buhid standard character.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Buhid data.
-
-2017-05-08 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Shavian script.
-
- * src/autofit/afblue.dat: Add blue zone data for Shavian.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Shavian standard character.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Shavian data.
-
-2017-05-08 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Vai script.
-
- * src/autofit/afblue.dat: Add blue zone data for Vai.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Vai standard character.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Vai data.
-
-2017-05-08 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Osmanya script.
-
- * src/autofit/afblue.dat: Add blue zone data for Osmanya.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Osmanya standard character.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Osmanya data.
-
-2017-05-08 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Coptic script.
-
- * src/autofit/afblue.dat: Add blue zone data for Coptic.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Coptic standard character.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Coptic data.
-
-2017-05-08 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Carian script.
-
- * src/autofit/afblue.dat: Add blue zone data for Carian.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Carian standard character.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Carian data.
-
-2017-05-07 Werner Lemberg <wl@gnu.org>
-
- [truetype] Add tricky font `DFGirl-W6-WIN-BF' (from Dynalab).
-
- Reported by Roy Tam <roytam@gmail.com>.
-
- * src/truetype/ttobjs.c (tt_check_trickyness_family): Implement it.
-
-2017-05-07 Roy Tam <roytam@gmail.com>
- Werner Lemberg <wl@gnu.org>
-
- [truetype] More tricky fonts (mainly from Dynalab).
-
- * src/truetype/ttobjs.c (tt_check_trickyness_family,
- tt_check_trickyness_sfnt_ids): Add them.
-
-2017-05-07 Werner Lemberg <wl@gnu.org>
-
- [truetype] Add tricky font `DLCHayMedium' (from Dynalab).
-
- Reported by Roy Tam <roytam@gmail.com>.
-
- * src/truetype/ttobjs.c (tt_check_trickyness_family): Implement it.
-
-2017-05-03 Werner Lemberg <wl@gnu.org>
-
- */*: s/backwards compatibility/backward compatibility/.
-
-2017-05-03 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Unified Canadian Syllabics script.
-
- * src/autofit/afblue.dat: Add blue zone data for Unified Canadian
- Syllabics.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Unified Canadian Syllabics standard
- character.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Unified
- Canadian Syllabics data.
-
-2017-05-03 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org>
-
- [autofit] Add blue-zone support for Sundanese script.
-
- This essentially moves the Sundanese script from the `Indic' hinter
- to the `Latin' hinter.
-
- * src/autofit/afblue.dat: Add blue zone data for Sundanese.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Sundanese standard character and move
- data out of AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afranges.c: Move Sundanese data out of
- AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afstyles.h: Update Sundanese data; in particular, use
- AF_WRITING_SYSTEM_LATIN.
-
-2017-05-03 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Avestan script.
-
- * src/autofit/afblue.dat: Add blue zone data for Avestan.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Avestan standard character.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Avestan data.
-
-2017-05-02 Behdad Esfahbod <behdad@behdad.org>
-
- [truetype] Make `IUP' gvar deltas do the same as Apple (#50832).
-
- When points are not touched by gvar interpolation deltas, FreeType
- gave a slightly different result than Apple's CoreText.
-
- The OpenType working group will update the specification to document
- the following behaviour: If the two points with deltas to the `left'
- and `right' of the untouched point have the same coordinate, then
- the inferred delta for the untouched point should be zero.
-
- * src/truetype/ttgxvar.c (tt_delta_interpolate): Implement new
- behaviour.
-
-2017-05-02 Werner Lemberg <wl@gnu.org>
-
- [autofit] Remove `slight' auto-hint mode again.
-
- A poll on freetype-devel favoured changes directly applied to
- `light'.
-
- * include/freetype/freetype.h (FT_LOAD_TARGET_SLIGHT,
- FT_RENDER_MODE_SLIGHT): Removed.
-
- * src/autofit/afcjk.c (af_cjk_hints_init), src/autofit/aflatin.c
- (af_latin_hints_init), src/autofit/aflatin2.c
- (af_latin2_hints_init): Revert change from 2017-04-22.
-
- * src/autofit/afloader.c (af_loader_load_glyph) Remove references to
- FT_RENDER_MODE_SLIGHT.
- [AF_CONFIG_OPTION_TT_SIZE_METRICS]: Enable TrueType-like metrics
- unconditionally.
-
- * src/base/ftadvanc.c (LOAD_ADVANCE_FAST_CHECK): Revert change from
- 2017-04-22.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Revert change from 2017-04-22.
-
- * src/pshinter/pshalgo.c (ps_hints_apply): Revert change from
- 2017-04-22.
-
- * src/smooth/ftsmooth.c (ft_smooth_render): Revert change from
- 2017-04-22.
-
- * docs/CHANGES: Updated.
-
-2017-04-30 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix metrics computation.
-
- Problem reported by Markus Trippelsdorf <markus@trippelsdorf.de> and
- Nikolaus Waxweiler <madigens@gmail.com>.
-
- * src/base/ftobjs.c (FT_Request_Size): Trigger recomputation of
- auto-hinter metrics. Without this change, multiple size changing
- calls for a single face fail.
-
-2017-04-29 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttdriver.c (tt_size_request): Properly check `error'.
-
- Reported by Earnestly <zibeon@googlemail.com> in
-
- http://lists.nongnu.org/archive/html/freetype/2017-04/msg00031.html
-
-2017-04-27 Werner Lemberg <wl@gnu.org>
-
- Introduce AF_CONFIG_OPTION_TT_SIZE_METRICS configuration option.
-
- * include/freetype/config/ftoption.h
- (AF_CONFIG_OPTION_TT_SIZE_METRICS): New option, commented out by
- default.
-
- * src/autofit/afloader.c (af_loader_load_glyph): Use
- AF_CONFIG_OPTION_TT_SIZE_METRICS to guard the corresponding code.
-
-2017-04-26 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/freetype.h (FT_Render_Mode): Fix order.
-
- This retains backward compatibility.
-
- Noted by Alexei.
-
-2017-04-22 Werner Lemberg <wl@gnu.org>
-
- [truetype] Do linear scaling for FT_LOAD_NO_HINTING (#50470).
-
- * src/truetype/ttobs.h (TT_SizeRec): Add field `hinted_metrics' to
- hold hinted metrics.
- Make `metrics' a pointer so that `tt_glyph_load' can easily switch
- between metrics.
-
- * src/truetype/ttdriver.c (tt_size_request): Updated.
- (tt_glyph_load): Use top-level metrics if FT_LOAD_NO_HINTING is
- used.
-
- * src/truetype/ttgload.c (TT_Hint_Glyph, TT_Process_Simple_Glyph,
- TT_Process_Composite_Component, load_truetype_glyph,
- compute_glyph_metrics, TT_Load_Glyph): Updated.
-
- * src/truetype/ttinterp.c (TT_Load_Context): Updated.
-
- * src/truetype/ttobjs.c (tt_size_reset): Updated.
-
- * src/truetype/ttsubpix.c (sph_set_tweaks): Updated.
-
-2017-04-22 Werner Lemberg <wl@gnu.org>
-
- Add new `slight' auto-hinting mode.
-
- This mode uses fractional advance widths and doesn't scale glyphs
- horizontally, only applying vertical scaling and hinting.
-
- At the same time, the behaviour of the `light' auto-hinter gets
- restored for backward compatibility: Both vertical and horizontal
- scaling is again based on rounded metrics values (this was changed
- in a commit from 2017-03-30 as a side effect). To be more precise,
- the behaviour is restored for TrueType fonts only; for other font
- formats like Type 1, this is a new feature of the `light' hinting
- mode.
-
- * include/freetype/freetype.h (FT_LOAD_TARGET_SLIGHT): New macro.
- (FT_RENDER_MODE_SLIGHT): New render mode.
-
- * include/freetype/internal/ftobjs.h (FT_Size_InternalRec): Add
- `autohint_mode' and `autohint_metrics' fields.
-
- * src/autofit/afcjk.c (af_cjk_hints_init), src/autofit/aflatin.c
- (af_latin_hints_init), src/autofit/aflatin2 (af_latin2_hints_init):
- Updated.
-
- * src/autofit/afloader.c (af_loader_embolden_glyph_in_slot): Use
- `autohint_metrics'.
- (af_loader_load_glyph): s/internal/slot_internal/.
- Initialize `autohint_metrics' and `autohint_mode' depending on
- current auto-hint mode.
- Use `autohint_metrics'.
- Updated.
-
- * src/base/ftadvanc.c (LOAD_ADVANCE_FAST_CHECK): Updated.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Updated.
- (FT_New_Size): Allocate `internal' object.
-
- * src/pshinter/pshalgo.c (ps_hints_apply): Updated.
-
- * src/smooth/ftsmooth.c (ft_smooth_render): Updated.
-
-2017-04-22 Werner Lemberg <wl@gnu.org>
-
- Introduce `FT_Size_InternalRec' structure.
-
- We are going to extend this later on.
-
- * include/freetype/internal/ftobjs.h (FT_Size_InternalRec): New
- structure with a single field `module_data'.
-
- * src/base/ftobjs.c (FT_New_Size): Allocate `internal' field of
- `FT_Size' structure.
-
- * src/cff/cffgload.c (cff_builder_init, cff_decoder_prepare): Use
- `size->internal->module_data' instead of `size->internal'.
-
- * src/cff/cffobjs.c (cff_size_done): Deallocate `module_data'.
- (cff_size_init, cff_size_select, cff_size_request): Use
- `size->internal->module_data' instead of `size->internal'.
-
- * src/cif/cidobjs.c (cid_size_done, cid_size_init,
- cid_size_request): Use `size->internal->module_data' instead of
- `size->internal'.
-
- * src/psaux/psobjs.c (t1_builder_ini): Use
- `size->internal->module_data' instead of `size->internal'.
-
- * src/type1/t1objs.c (T1_Size_Done, T1_Size_Init, T1_Size_Request):
- Use `size->internal->module_data' instead of `size->internal'.
-
-2017-04-21 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/smooth/ftsmooth.h: Remove unused guards and declaration.
-
-2017-04-16 Hin-Tak Leung <htl10@users.sourceforge.net>
-
- Fix tracing messages.
-
- * src/base/ftobjs.c (FT_Face_GetCharVariantIndex,
- FT_Face_GetCharVariantIsDefault, FT_Face_GetVariantsOfChar): Print
- correct function name.
-
-2017-04-08 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Old Turkic script.
-
- * src/autofit/afblue.dat: Add blue zone data for Old Turkic.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Old Turkic standard characters.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Old Turkic data.
-
-2017-04-08 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Gothic script.
-
- * src/autofit/afblue.dat: Add blue zone data for Gothic.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Gothic standard characters.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Gothic data.
-
-2017-04-08 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Cypriot script.
-
- * src/autofit/afblue.dat: Add blue zone data for Cypriot.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Cypriot standard characters.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Cypriot data.
-
-2017-04-08 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Deseret script.
-
- * src/autofit/afblue.dat: Add blue zone data for Deseret.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Deseret standard characters.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Deseret data.
-
-2017-04-07 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix invalid character range description (#50745).
-
- Also reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=1034
-
- * src/autofit/afranges.c (af_glag_nonbase_uniranges): Fix typo in
- recent commit.
-
-2017-04-07 Werner Lemberg <wl@gnu.org>
-
- [ftfuzzer] Fix clang warnings.
-
- * src/tools/ftfuzzer/ftfuzzer.cc (LLVMFuzzerTestOneInput): Add
- casts.
-
-2017-04-06 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Lisu script.
-
- * src/autofit/afblue.dat: Add blue zone data for Lisu.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Lisu standard characters.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Lisu data.
-
-2017-04-06 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Osage script.
-
- * src/autofit/afblue.dat: Add blue zone data for Osage.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Osage standard characters.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Osage data.
-
-2017-04-06 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Glagolitic script.
-
- * src/autofit/afblue.dat: Add blue zone data for Glagolitic.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Glagolitic standard characters.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Glagolitic data.
-
-2017-04-06 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Tai Viet script.
-
- * src/autofit/afblue.dat: Add blue zone data for Tai Viet.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Tai Viet standard characters.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Tai Viet data.
-
-2017-04-06 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for Tifinagh script.
-
- * src/autofit/afblue.dat: Add blue zone data for Tifinagh.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Tifinagh standard characters.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Tifinagh data.
-
-2017-04-06 Sascha Brawer <sascha@google.com>
- Werner Lemberg <wl@gnu.org
-
- [autofit] Add support for N'Ko script.
-
- * src/autofit/afblue.dat: Add blue zone data for N'Ko.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add N'Ko standard characters.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add N'Ko data.
-
-2017-04-06 Sascha Brawer <sascha@google.com>
-
- [autofit] Add support for Adlam script.
-
- * src/autofit/afblue.dat: Add blue zone data for Adlam.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Adlam standard characters.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Adlam data.
-
-2017-04-06 Sascha Brawer <sascha@google.com>
-
- [autofit] Add support for Ol Chiki script.
-
- * src/autofit/afblue.dat: Add blue zone data for Ol Chiki.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Ol Chiki standard character.
-
- * src/autofit/afranges.c, src/autofit/afstyles.h: Add Ol Chiki data.
-
-2017-04-03 Werner Lemberg <wl@gnu.org>
-
- [truetype] Avoid reexecution of `fpgm' and `prep' in case of error.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=981
-
- * include/freetype/fterrdef.h (FT_Err_DEF_In_Glyf_Bytecode): New
- error code.
-
- * src/truetype/ttinterp.c (Ins_FDEF, Ins_IDEF): Prohibit execution
- of these two opcodes in `glyf' bytecode.
- (TT_RunIns): Don't enforce reexecution of `fpgm' and `prep' bytecode
- in case of error since function tables can no longer be modified
- (due to the changes in `Ins_FDEF' and `Ins_IDEF'). This change can
- enormously speed up handling of broken fonts.
-
-2017-04-02 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [autofit] Disable metrics adjustment for `FT_LOAD_TARGET_LCD'.
-
- * src/autofit/aflatin.c (af_latin_hints_init): Updated.
- * src/autofit/aflatin2.c (af_latin2_hints_init): Ditto.
-
-2017-04-01 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c: Include FT_CONFIG_CONFIG_H.
-
- Otherwise FT_UINT_TO_POINTER might not be defined.
-
- Problem reported by Alexei.
-
-2017-03-31 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [autofit] Disable stem adjustment for `FT_LOAD_TARGET_LCD'.
-
- * include/freetype/freetype.h (FT_LOAD_TARGET_LCD): Document it.
- * src/autofit/afcjk.c (af_cjk_hints_init): Updated.
- * src/autofit/aflatin.c (af_latin_hints_init): Ditto.
- * src/autofit/aflatin2.c (af_latin2_hints_init): Ditto.
-
-2017-03-31 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffload.c (cff_font_load): Improve fix from 2017-01-04.
-
- Allow CFFs containing a single font to have an empty font name.
-
- Problem reported by å¼µä¿ŠèŠ <418092625@qq.com> in
-
- http://lists.nongnu.org/archive/html/freetype-devel/2017-03/msg00074.html
-
-2017-03-30 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffparse.h (CFF2_DEFAULT_STACK): Set to 513 also.
-
- Requested by Dave Arnold.
-
-2017-03-30 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix HVAR and VVAR handling (#50678).
-
- * src/truetype/ttgxvar.c (tt_hvadvance_adjust): Handle
- glyph indices larger than `mapCount' as described in the
- specification.
-
-2017-03-30 Werner Lemberg <wl@gnu.org>
-
- [truetype] Allow linear scaling for unhinted rendering (#50470).
-
- * src/truetype/ttdriver.c (tt_size_request): Revert change from
- 2011-07-16; the intended metrics fix seems now to be implemented in
- a different way, making the patch unnecessary. Note that this
- change was usually patched out by all major GNU/Linux distributions
- due to heavy side effects.
-
- * src/truetype/ttgload.c (compute_glyph_metrics, TT_Load_Glyph):
- Refer to the metrics of the `TT_Size' object.
-
-2017-03-29 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix thinko related to PS name of default named instance.
-
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): `strid' and `psid' are
- name ID values, not indices into the array of name entries.
-
-2017-03-27 Werner Lemberg <wl@gnu.org>
-
- [cid, truetype] Don't use `index' as a variable name.
-
- At least on FreeBSD there is a global declaration of `index' in file
- `/usr/include/strings.h'.
-
- * src/cff/cf2intrp.c, src/truetype/ttgload.c: s/index/idx/ where
- appropriate.
-
-2017-03-27 Wojciech Mamrak <wmamrak@gmail.com>
-
- [sfnt] Minor improvement for handling kern tables.
-
- * src/sfnt/ttkern.c (tt_face_load_kern): Don't check for
- cross-stream kerning tables since we reject format 2 tables later
- on anyways.
- Modify code for limit test...
- (tt_face_get_kerning): ... to avoid a limit test here.
-
-2017-03-27 Werner Lemberg <wl@gnu.org>
-
- [pcf] Fix compiler warnings.
-
- Reported by Alexander Hedges <ahedges@student.ethz.ch>.
-
- * src/pcf/pcfdrivr.c (pcf_property_set, pcf_property_get): Tag
- `property_name' with `FT_UNUSED' where necessary.
-
-2017-03-26 Werner Lemberg <wl@gnu.org>
-
- * src/psaux/psobjs.c (t1_builder_close_contour): Add safety guard.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=941
-
-2017-03-23 Werner Lemberg <wl@gnu.org>
-
- [psaux] Better protect `flex' handling.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=935
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
- <callothersubr>: Since there is not a single flex operator but a
- series of subroutine calls, malformed fonts can call arbitrary other
- operators after the start of a flex, possibly adding points. For
- this reason we have to check the available number of points before
- inserting a point.
-
-2017-03-23 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix check for default named instance.
-
- * src/sfnt/sfobjs.c (sfnt_init_face): A `fixed' number needs four
- bytes, not two...
-
-2017-03-23 Werner Lemberg <wl@gnu.org>
-
- Make MM fonts work (again).
-
- * src/base/ftmm.c (FT_Set_Var_Design_Coordinates,
- FT_Set_MM_Blend_Coordinates, FT_Set_Var_Blend_Coordinates): Ignore
- return value of `ft_face_get_mvar_service'; instead, check whether a
- service is actually returned.
-
-2017-03-20 Werner Lemberg <wl@gnu.org>
-
- [truetype] Some variable renamings.
-
- Too much local variables holding different structures were called
- `metrics'.
-
- * src/truetype/ttdriver.c (tt_size_select): s/metrics/size_metrics/.
-
- * src/truetype/ttgload.c (tt_get_metrics_incr_overrides,
- compute_glyph_metrics): s/metrics/incr_metrics/.
- (load_sbit_image): s/metrics/sbit_metrics/.
-
- * src/truetype/ttobjs.c (tt_size_run_fpgm): s/metrics/size_metrics/.
- (tt_size_init_bytecode): s/metrics/tt_metrics/.
- (tt_size_reset): s/metrics/size_metrics/.
-
-2017-03-20 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Don't add instances to non-variation fonts.
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Fix it.
-
-2017-03-20 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffgload.c (cff_builder_init): Add safety guard (#50578).
-
-2017-03-18 Werner Lemberg <wl@gnu.org>
-
- Introduce FT_UINT_TO_POINTER macro (#50560).
-
- We have to make a separate case for Windows 64's LLP64 data model.
-
- * builds/unix/ftconfig.in, builds/vms/ftconfig.h,
- include/freetype/config/ftconfig.h (FT_UINT_TO_POINTER): New macro.
-
- * src/truetype/ttgload.c (load_truetype_glyph): Use it.
-
-2017-03-18 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (TT_RunIns): Adjust loop counter (#50573).
-
- The problematic font that exceeds the old limit is Lato-Regular,
- version 2.007, containing bytecode generated by a buggy version of
- ttfautohint.
-
-2017-03-18 Werner Lemberg <wl@gnu.org>
-
- [truetype] Another limitation for bytecode loop count maximum.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=900
-
- * src/truetype/ttinterp.c (TT_RunIns): Limit `loopcall_counter_max'
- by number of glyphs also.
-
-2017-03-18 Werner Lemberg <wl@gnu.org>
-
- [ftfuzzer] Minor improvement.
-
- * src/tools/ftfuzzer/ftfuzzer.cc: Don't set intermediate axis if
- bitmap strikes are active.
-
-2017-03-18 Werner Lemberg <wl@gnu.org>
-
- Improve `make multi'.
-
- * src/autofit/aflatin2.c: Guard file with FT_OPTION_AUTOFIT2.
-
- * src/base/ftmac.c: Guard more parts of the file with FT_MACINTOSH.
-
- * src/psaux/afmparse.c: Guard file with T1_CONFIG_OPTION_NO_AFM.
-
- * src/sfnt/pngshim.c: Guard file with
- TT_CONFIG_OPTION_EMBEDDED_BITMAPS also.
-
- * src/sfnt/ttbdf.c: Avoid empty source file.
- * src/sfnt/ttpost.c: Guard file with
- TT_CONFIG_OPTION_POSTSCRIPT_NAMES.
- * src/sfnt/ttsbit.c: Guard file with
- TT_CONFIG_OPTION_EMBEDDED_BITMAPS.
-
- * src/truetype/ttgxvar.c, src/truetype/ttinterp.c: Avoid empty
- source file.
-
- * src/truetype/ttsubpix.c: Guard file with
- TT_USE_BYTECODE_INTERPRETER also.
-
- * src/type1/t1afm.c: Guard file with T1_CONFIG_OPTION_NO_AFM.
-
- * src/autofit/autofit.c, src/base/ftbase.c, src/cache/ftcache.c,
- src/cff/cff.c, src/cid/type1cid.c, src/gxvalid/gxvalid.c,
- src/pcf/pcf.c, src/pfr/pfr.c, src/psaux/psaux.c,
- src/pshinter/pshinter.c, src/psnames/psnames.c, src/raster/raster.c,
- src/sfnt/sfnt.c, src/smooth/smooth.c, src/truetype/truetype.c,
- src/type1/type1.c, src/type42/type42.c: Remove conditionals; sort
- entries.
-
-2017-03-17 Werner Lemberg <wl@gnu.org>
-
- Fixes for conditional compilation.
-
- * src/autofit/afcjk.c, src/autofit/afindic.c: Include `afcjk.h'
- earlier.
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Put `memory' variable into
- TT_CONFIG_OPTION_GX_VAR_SUPPORT block.
- (sfnt_done_face): Protect some code with
- TT_CONFIG_OPTION_GX_VAR_SUPPORT.
-
- * src/sfnt/ttsbit.c (tt_face_load_sbix_image): Remove compiler
- warning.
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Put `tmp' variable
- into TT_USE_BYTECODE_INTERPRETER block.
-
- (tt_loader_init): Put `error' variable into
- TT_USE_BYTECODE_INTERPRETER block.
-
-2017-03-17 Werner Lemberg <wl@gnu.org>
-
- Fix preprocessor warning.
-
- * devel/ftoption.h, include/freetype/config/ftoption.h: Test whether
- TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined before checking its
- value.
-
-2017-03-17 Werner Lemberg <wl@gnu.org>
-
- `make multi' fixes; compiler warnings.
-
- * src/base/ftsnames.c: Include FT_INTERNAL_DEBUG_H.
-
- * src/cff/cffobjs.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
- FT_MULTIPLE_MASTERS_H and FT_SERVICE_MULTIPLE_MASTERS_H.
-
- * src/sfnt/sfdriver.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
- FT_MULTIPLE_MASTERS_H and FT_SERVICE_MULTIPLE_MASTERS_H.
- (get_win_string, get_apple_string): Initialize `result'.
-
-2017-03-17 Dave Arnold <darnold@adobe.com>
-
- [cff] Fix potential bugs in default NDV for CFF2.
-
- * src/cff/cffload.c (cff_blend_build_vector): Explicitly build blend
- vector when `lenNDV' is zero; don't rely on zero-init.
- Save `lenNDV' as part of cache key even when `lenNDV' is zero.
-
-2017-03-17 Dave Arnold <darnold@adobe.com>
-
- [cff] Fix CFF2 stack allocation.
-
- * src/cff/cffparse.c (cff_parser_init) add 1 for operator.
-
-2017-03-16 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgxvar.c (tt_done_blend): Free `vvar_table'.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=883
-
-2017-03-15 Werner Lemberg <wl@gnu.org>
-
- Remove clang compiler warnings (#50548).
-
- * include/freetype/internal/tttypes.h (TT_FaceRec): Make
- `var_postscript_prefix_len' unsigned.
-
- * src/autofit/afwarp.c (af_warper_compute_line_best): Remove
- redundant assignment.
-
- * src/cff/cffload.c (cff_subfont_load): Add casts.
-
- * src/cff/cffparse.c (cff_parse_blend): Remove redundant assignment.
-
- * src/sfnt/sfdriver.c (fmix32, murmur_hash_3_128): Add `static'
- keyword.
- Add casts.
- (fixed2float): Add cast.
- (sfnt_get_var_ps_name): Make `p' always initialized.
- Add casts.
-
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): Add casts.
-
-2017-03-15 Werner Lemberg <wl@gnu.org>
-
- [ftfuzzer] Limit number of tested faces and instances.
-
- This is inspired by the discussion in and analysis of
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=859
-
- * src/tools/ftfuzzer/ftfuzzer.cc (LLVMFuzzerTestOneInput): Use only
- up to 20 face indices.
- Use only up to 20 instance indices.
-
-2017-03-15 Werner Lemberg <wl@gnu.org>
-
- * src/tools/ftfuzzer/ftfuzzer.cc: Improve readability; formatting.
-
-2017-03-14 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Implement PS names for font instances [3/3].
-
- Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
-
- * include/freetype/internal/tttypes.h (TT_FaceRec): New fields
- `var_postscript_prefix' and `var_postscript_prefix_len'.
-
- * src/sfnt/sfdriver.c: Include FT_TRUETYPE_IDS_H.
- (sfnt_is_alphanumeric): New wrapperfunction for `ft_isalnum'.
- (get_win_string, get_apple_string): Remove `const' from return
- value.
- (MAX_VALUE_DESCRIPTOR_LEN, MAX_PS_NAME_LEN): New macros.
- (hexdigits): New array.
- (sfnt_get_var_ps_name): New function, implementing Adobe TechNote
- 5902 to construct a PS name for a variation font instance.
- (sfnt_get_ps_name): Call `sfnt_get_var_ps_name' for font instances.
-
- * src/sfnt/sfobjs.c (sfnt_done_face): Updated.
-
- * src/truetype/ttgxvar.c (tt_set_mm_blend): Reset
- `face->postscript_name' to trigger recalculation for new instance
- parameters.
-
-2017-03-14 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Implement PS names for font instances [2/3].
-
- * src/sfnt/sfdriver.c (fix2float) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]:
- New function to find the shortest representation of a 16.16
- fractional number.
-
-2017-03-14 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Implement PS names for font instances [1/3].
-
- Add 128bit MurmurHash 3 function.
-
- Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
-
- * src/sfnt/sfdriver.c (ROTL32): New macro.
- (fmix32, murmur_hash_3_128): New functions.
-
-2017-03-13 Werner Lemberg <wl@gnu.org>
-
- [truetype] Ignore invalid MVAR tags.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=838
-
- * src/truetype/ttgxvar.c (ft_var_load_mvar): Ignore value and emit
- warning for invalid tags.
- (tt_apply_mvar): Ignore invalid tags.
-
-2017-03-12 Werner Lemberg <wl@gnu.org>
-
- [truetype] Store and use design coordinates also.
-
- * include/freetype/internal/services/svmm.h (FT_Get_Var_Blend_Func):
- Add `normalizedcoords' argument.
-
- * src/truetype/ttgxvar.h (GX_BlendRec): Add `coords' field to store
- the design coordinates of the current instance.
- Updated.
-
- * src/truetype/ttgxvar.c (TT_Set_MM_Blend): Move functionality to...
- (tt_set_mm_blend): ... New function.
- Convert data in `normalizedcoords' array to `coords' array on
- demand.
- (TT_Set_Var_Design): Store argument data in `coords' array.
- (TT_Get_Var_Design): Get data from `coords' array.
- (tt_get_var_blend): Updated.
- (tt_done_blend): Updated.
-
- * src/cff/cffload.c, src/cff/cffload.h (cff_get_var_blend): Updated.
-
- * src/cff/cf2ft.c (cf2_getNormalizedVector): Updated.
-
- * src/cff/cffobjs.c (cff_face_init): Updated.
-
-2017-03-12 Werner Lemberg <wl@gnu.org>
-
- src/truetype/ttgxvar.[ch]: s/avar_checked/avar_loaded/.
-
-2017-03-08 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Another fix for buggy variation fonts.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=759
-
- * src/sfnt/sfobjs.c (sfnt_init_face): While setting number of
- instances to zero for `CFF' fonts table, ensure that there is no
- `CFF2' present also (which gets priority).
-
-2017-03-07 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Improve handling for buggy variation fonts.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=738
-
- * src/sfnt/sfobjs.c (sfnt_init_face): While setting number of
- instances to zero for `CFF' fonts table, ensure that there is no
- `glyf' table present also (which gets priority).
-
-2017-03-06 Werner Lemberg <wl@gnu.org>
-
- [sfnt, truetype] Always provide default instance.
-
- As documented in the OpenType specification, an entry for the
- default instance may be omitted in the named instance table. In
- particular this means that even if there is no named instance table
- in the font we actually do have a named instance, namely the default
- instance.
-
- For consistency, we always want the default instance in our list of
- named instances. If it is missing, we try to synthesize it.
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Check whether the default
- instance is in the table of named instances. Otherwise adjust
- number of instances.
-
- * src/truetype/ttgxvar.c: Include FT_TRUETYPE_IDS_H.
- (TT_Get_MM_Var): Use `face->root.style_flags' as the number of named
- instances.
- Sythesize a named instance entry if necessary.
- (tt_done_blend): Free `normalized_stylecoords'.
-
-2017-03-05 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Remove redundant code.
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Remove second test for
- `num_instances', which will always succeed.
-
-2017-03-04 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Add `get_name_id' service.
-
- * include/freetype/internal/sfnt.h (TT_Get_Name_ID_Func): New
- typedef.
- (SFNT_Interface): Add `get_name_id' field.
- (FT_DEFINE_SFNT_INTERFACE): Updated.
-
- * src/sfnt/sfdriver.c (search_name_id): Rename to...
- (sfnt_get_name_id): ... this.
- (sfnt_get_ps_name, sfnt_interface): Udpated.
-
-2017-03-04 Werner Lemberg <wl@gnu.org>
-
- [truetype] Make `TT_Set_MM_Blend' set named instance index.
-
- * src/truetype/ttgxvar.h (GX_Blend): New array
- `normalized_stylecoords'.
-
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): Allocate and fill
- `normalized_stylecoords'.
- (TT_Set_MM_Blend): Check instance tuple and adjust `face_index'
- accordingly.
-
-2017-03-02 Werner Lemberg <wl@gnu.org>
-
- [truetype] Split off designer/normalized conversion routines.
-
- * src/truetype/ttgxvar.c (TT_Set_Var_Design): Split off conversion
- code designer->normalized coordinates to...
- (ft_var_to_normalized): ... New function.
- (TT_Get_Var_Design): Split off conversion code normalized->designer
- coordinates to...
- (ft_var_to_design): ... New function.
-
-2017-02-28 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Further generalize `sfnt_get_ps_name'; report invalid data.
-
- * src/sfnt/sfdriver.c (sfnt_ps_map): New array.
- (sfnt_is_postscript): New function.
- (char_type_func): New typedef.
- (get_win_string, get_apple_string): Add argument to specify
- character checking function.
- Add argument whether argument checking failures should be reported.
- Update callers.
- (search_name_id): Fix return value.
-
-2017-02-23 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Split off another bit of `sfnt_get_ps_name'.
-
- * src/sfnt/sfdriver.c (sfnt_get_ps_name): Split off some
- functionality into...
- (search_name_id): ... New function.
-
-2017-02-23 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Modularize `sfnt_get_ps_name'.
-
- * src/sfnt/sfdriver.c (sfnt_get_ps_name): Split off some
- functionality into...
- (IS_WIN, IS_APPLE): ... New macros.
- (get_win_string, get_apple_string): ... New functions.
-
-2017-02-23 Werner Lemberg <wl@gnu.org>
-
- [truetype] Minor improvement.
-
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
- load_truetype_glyph): Remove unnecessary tests.
-
-2017-02-23 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/tttypes.h (TT_Face): s/isCFF2/is_cff2/.
-
- For orthogonality with other structure field names.
-
- Update all users.
-
-2017-02-22 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/smooth/ftgrays.c (gray_hline): Improve code.
-
-2017-02-20 Dominik Röttsches <drott@google.com>
-
- Fix some `ttnameid.h' entries (#50313).
-
- * include/freetype/ttnameid.h:
- s/TT_MS_LANGID_SPANISH_INTERNATIONAL_SORT/TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT/,
- s/TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIA/TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN/.
-
-2017-02-20 Werner Lemberg <wl@gnu.org>
-
- [cff] Finish support for `random' operator.
-
- * src/cff/cfftypes.h (CFF_SubFontRec): Add `random' field.
-
- * src/cff/cffobjs.c: Updated.
- (cff_driver_init): Initialize random seed value.
-
- * src/cff/cffload.c (cff_random): New function.
- (cff_subfont_load): Add `face' argument.
- Update all callers.
- Initialize random number generator with a proper seed value.
- (cff_font_load): Add `face' argument.
- Update all callers.
-
- * src/cff/cffload.h: Updated.
-
- * src/cff/cf2intrp.c (CF2_FIXME): Removed.
- (cf2_interpT2CharString) <cf2_escRANDOM>: Implement opcode.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings): Don't
- initialize random seed value.
- <cff_op_random>: Use new random seed framework.
-
-2017-02-20 Werner Lemberg <wl@gnu.org>
-
- [cff] Sanitize `initialRandomSeed'.
-
- * src/cff/cffload.c (cff_load_private_dict): Make
- `initial_random_seed' value always positive.
-
-2017-02-20 Werner Lemberg <wl@gnu.org>
-
- [cff] Introduce `random-seed' property (2/2).
-
- * src/base/ftobjs.c: Include `FT_CFF_DRIVER_H'.
- (open_face): Initialize `face->internal->random_seed'.
- (FT_Face_Properties): Handle `FT_PARAM_TAG_RANDOM_SEED'.
-
- * src/cff/cffdrivr.c (cff_property_set): Handle `random-seed'
- property.
-
-2017-02-20 Werner Lemberg <wl@gnu.org>
-
- [cff] Introduce `random-seed' property (1/2).
-
- We need this for support of the `random' operator.
-
- * include/freetype/ftcffdrv.h (FT_PARAM_TAG_RANDOM_SEED): New macro.
-
- * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): New
- field `random_seed'.
-
- * src/cff/cffobjs.h (CFF_DriverRec): New field `random_seed'.
-
-2017-02-17 Werner Lemberg <wl@gnu.org>
-
- Remove clang warnings.
-
- * src/autofit/aflatin.c (af_latin_sort_blue): Add missing `static'
- keyword.
-
- * src/base/ftmm.c (FT_Set_Var_Design_Coordinates,
- FT_Set_MM_Blend_Coordinates, FT_Set_Var_Blend_Coordinates):
- Initialize some variables.
-
-2017-02-16 Nikolaus Waxweiler <madigens@gmail.com>
- Werner Lemberg <wl@gnu.org>
-
- Add face property for stem darkening.
-
- * include/freetype/ftautoh.h (FT_PARAM_TAG_STEM_DARKENING): New
- macro.
-
- * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): Add
- `no_stem_darkening' field.
-
- * src/autofit/afloader.c (af_loader_load_glyph),
- src/autofit/afmodule.c (af_property_set): Updated.
-
- * src/base/ftobjs.c: Include FT_AUTOHINTER_H.
- (ft_open_face_internal): Updated.
- (FT_Face_Properties): Handle FT_PARAM_TAG_STEM_DARKENING.
-
- * src/cff/cf2ft.c (cf2_decoder_parse_charstrings): Updated.
-
- * src/cff/cffdrivr.c (cff_property_set): Updated.
-
-2017-02-16 Nikolaus Waxweiler <madigens@gmail.com>
- Werner Lemberg <wl@gnu.org>
-
- Add face property for LCD filter weights.
-
- * include/freetype/ftlcdfil.h (FT_PARAM_TAG_LCD_FILTER_WEIGHTS,
- FT_LCD_FILTER_FIVE_TAPS): New macros.
- (FT_LcdFiveTapFilter): New typedef.
-
- * include/freetype/ftobjs.h (FT_Face_InternalRec)
- [FT_CONFIG_OPTION_SUBPIXEL_RENDERING]: Add `lcd_weights' field.
- (FT_Bitmap_LcdFilterFunc): Change third argument to weights array.
- (ft_lcd_filter_fir): New prototype.
- (FT_LibraryRec): Updated.
-
- * src/base/ftlcdfil.c (_ft_lcd_filter_fir): Renamed to...
- (ft_lcd_filter_fir): ... this base function.
- Updated.
- (_ft_lcd_filter_legacy): Updated.
- (FT_Library_SetLcdFilterWeights, FT_Library_SetLcdFilter): Updated.
-
- * src/base/ftobjs.c (ft_open_face_internal): Updated.
- (FT_Face_Properties): Handle FT_PARAM_TAG_LCD_FILTER_WEIGHTS.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic)
- [FT_CONFIG_OPTION_SUBPIXEL_RENDERING]: Handle LCD weights from
- `FT_Face_Internal'.
-
-2017-02-14 Nikolaus Waxweiler <madigens@gmail.com>
- Werner Lemberg <wl@gnu.org>
-
- Add new function `FT_Face_Properties'.
-
- This commit provides the framework, to be filled with something
- useful in the next commits.
-
- * include/freetype/freetype.h (FT_Face_Properties): Declare.
-
- * src/base/ftobjs.c (FT_Face_Properties): New function.
-
-2017-02-13 Werner Lemberg <wl@gnu.org>
-
- [autofit] Prevent overlapping blue zones.
-
- Problem reported as
-
- https://github.com/google/fonts/issues/632
-
- The font in question (Nunito) has values 705 and 713 for the
- reference and overshoot values, respectively, of the first blue
- zone. Blue zone 2, however, has value 710 for both the reference
- and overshoot. At 12ppem, reference and overshoot of blue zone 0
- becomes 8px, while blue zone 2 becomes 9px.
-
- A peculiarity of this font is that the tops of isolated vertical
- stems like `N' have a slight overshoot also. The auto-hinter tries
- to find the nearest blue zone using the *original* coordinates. For
- vertical stems, this is value 713. For normal horizontal tops like
- in character `E', this is value 710. Since value 713 is mapped to
- 8px but value 710 to 9px, `N' and similar characters are one pixel
- higher than `E', which looks very bad.
-
- This commit sanitizes blue zones to avoid such a behaviour.
-
- * src/autofit/aflatin.c (af_latin_sort_blue): New function.
- (af_latin_metrics_init_blues): Sort blue values and remove overlaps.
-
-2017-02-12 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/smooth/ftgrays.c (gray_sweep): Improve code.
-
-2017-02-06 Werner Lemberg <wl@gnu.org>
-
- [truetype] Implement `VVAR' table support.
-
- * src/truetype/ttgxvar.h (GX_HVarTable): Renamed to...
- (GX_HVVarTable): ...This.
- (GX_Blend): Add fields for `VVAR' table handling.
- Other minor updates.
-
- * src/truetype/ttgxvar.c (ft_var_load_hvar): Renamed to...
- (ft_var_load_hvvar): ...This.
- Handle VVAR loading also (controlled by an additional parameter).
- (tt_hadvance_adjust): Renamed to...
- (tt_hvadvance_adjust): ...This.
- Handle application of advance height also (controlled by an
- additional parameter).
- (tt_hadvance_adjust, tt_vadvance_adjust): Wrappers for
- `tt_hvadvance_adjust'.
-
- * src/truetype/ttdriver.c (tt_service_metrics_variations): Updated.
-
-2017-02-05 Werner Lemberg <wl@gnu.org>
-
- [autofit] Use better blue zone characters for lowercase latin.
-
- The number of lowercase characters for computing the top flat blue
- zone value was too small (in most cases only `x' and `z'). If one
- of the two characters has a large serif, say, it can happen that
- FreeType must select between two different values, having a 50%
- chance to use the wrong one. As a result, rendering at larger PPEM
- values could yield uneven lowercase glyph heights.
-
- Problem reported by Christoph Koeberlin <christoph@koe.berlin>.
-
- * src/autofit/afblue.dat (AF_BLUE_STRING_LATIN_SMALL): Replaced
- with...
- (AF_BLUE_STRING_LATIN_SMALL_TOP, AF_BLUE_STRING_LATIN_SMALL_BOTTOM):
- ... New, extended sets.
- (AF_BLUE_STRINGSET_LATN): Updated.
-
- * src/autofit/afblue.c, scr/autofit/afblue.h: Regenerated.
-
-2017-02-04 Werner Lemberg <wl@gnu.org>
-
- Make `freetype-config' a wrapper of `pkg-config' if possible.
-
- Based on ideas taken from
-
- http://pkgs.fedoraproject.org/cgit/rpms/freetype.git/tree/freetype-multilib.patch
- http://pkgs.fedoraproject.org/cgit/rpms/freetype.git/tree/freetype-2.5.3-freetype-config-prefix.patch
-
- * builds/unix/freetype-config.in: Rewritten. Use `pkg-config' to
- set output variables if program is available.
-
- * docs/CHANGES, docs/freetype-config.1: Updated.
-
-2017-02-04 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/unix-def.in (freetype-config): Fix permissions.
-
-2017-02-03 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afglobal.c (af_face_globals_free): Erase useless code.
-
-2017-02-03 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftgasp.h (FT_GASP_SYMMETRIC_GRIDFIT): Fix value.
-
- Reported by Behdad.
-
-2017-02-02 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix MVAR post-action handling.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=509
-
- * src/truetype/ttobjs.c (tt_size_reset): Do nothing for CFF2. This
- is important to make `tt_size_reset_iterator' (called in
- `tt_apply_mvar') always work.
-
-2017-02-02 Werner Lemberg <wl@gnu.org>
-
- Make compilation with FT_CONFIG_OPTION_PIC work again.
-
- All code committed here is guarded with `FT_CONFIG_OPTION_PIC'.
-
- * include/freetype/internal/services/svmetric.h
- (FT_DEFINE_SERVICE_METRICSVARIATIONSREC): Remove trailing semicolon.
-
- * src/autofit/aflatin.c (af_latin_hints_compute_edges,
- af_latin_hint_edges): Provide `globals' variable.
-
- * src/autofit/afloader.c (af_loader_load_glyph): Remove shadowing
- variable.
-
- * src/autofit/afmodule.c (AF_SCRIPT_CLASSES_GET,
- AF_STYLE_CLASSES_GET): Redefine.
-
- * src/autofit/aftypes.h (AF_DEFINE_WRITING_SYSTEM_CLASS): Fix typo.
-
- * src/cff/cffparse.c (CFF_FIELD_BLEND): Provide it.
-
- * src/cff/cffpic.h (CffModulePIC): Fix typo.
-
-2017-01-31 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/smooth/ftgrays.c (gray_render_scanline): Improve code.
-
-2017-01-31 Werner Lemberg <wl@gnu.org>
-
- [cff] Provide metrics variation service interface (#50196).
-
- Only now I've got an OTF with an HVAR table for testing...
-
- The code in `ftmm.c' uses `FT_FACE_LOOKUP_SERVICE' to get the
- metrics variations interface. However, this didn't work with
- `FT_FACE_FIND_GLOBAL_SERVICE' used in `sfnt_init_face'.
-
- * src/cff/cffdrivr.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
- (cff_hadvance_adjust, cff_metrics_adjust): Wrapper functions for
- metric service functions from the `truetype' module.
- (cff_service_metrics_variations): New service.
- (cff_services): Updated.
-
- * src/cff/cffpic.h (CFF_SERVICE_METRICS_VAR_GET): New macro.
- [FT_CONFIG_OPTION_PIC]: Synchronize code.
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Replace call to
- FT_FACE_FIND_GLOBAL_SERVICE with `ft_module_get_service' to always
- load the service from the `truetype' module.
-
-2017-01-31 Werner Lemberg <wl@gnu.org>
-
- Add framework to support services with 9 functions.
-
- * include/freetype/internal/ftserv.h (FT_DEFINE_SERVICEDESCREC9):
- New macro.
-
-2017-01-31 Werner Lemberg <wl@gnu.org>
-
- [base] Fix error handing in MM functions.
-
- * src/base/ftmm.c (FT_Set_Var_Design_Coordinates,
- FT_Set_MM_Blend_Coordinates, FT_Set_Var_Blend_Coordinates):
- Implement it.
-
-2017-01-31 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix sanity check for `gvar' table (#50184).
-
- * src/truetype/ttgxvar.c (ft_var_load_gvar): There might be missing
- variation data for some glyphs.
-
-2017-01-31 Werner Lemberg <wl@gnu.org>
-
- [autofit] Avoid uninitialized jumps (#50191).
-
- * src/autofit/afcjk.c (af_cjk_metrics_check_digits),
- src/autofit/aflatin.c (af_latin_metrics_check_digits): Initialize
- `advance'.
-
-2017-01-27 Werner Lemberg <wl@gnu.org>
-
- s/GB2312/PRC/.
-
- * include/freetype/freetype.h (FT_ENCODING_PRC): New enum value.
- (FT_ENCODING_GB2312): Deprecated.
-
- * include/freetype/ttnameid.h (TT_MS_ID_PRC): New macro.
- (TT_MS_ID_GB2312): Deprecated.
-
- * src/sfnt/sfobjs.c (sfnt_find_encoding): Updated.
-
- * docs/CHANGES: Updated.
-
-2017-01-26 Werner Lemberg <wl@gnu.org>
-
- [base] Add `FT_Get_Sfnt_LangTag' function.
-
- * include/freetype/ftsnames.h (FT_SfntLangTag): New structure.
- (FT_Get_Sfnt_LangTag): New declaration.
-
- * src/base/ftsnames.c (FT_Get_Sfnt_LangTag): New funtion.
-
- * docs/CHANGES: Updated.
-
-2017-01-26 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Support `name' table format 1.
-
- * include/freetype/internal/tttypes.h (TT_LangTagRec): New
- structure.
- (TT_NameTableRec): Add fields `numLangTagRecords' and `langTags'.
-
- * src/sfnt/ttload.c (tt_face_load_name): Add support for language
- tags.
- Reduce array size of name strings in case of invalid entries.
- (tt_face_free_name): Updated.
-
- * docs/CHANGES: Updated.
-
-2017-01-25 Werner Lemberg <wl@gnu.org>
-
- [sfnt] s/TT_NameEntry/TT_Name/.
-
- * include/freetype/internal/tttypes.h (TT_NameEntryRec): Renamed
- to...
- (TT_NameRec): This.
- (TT_NameTableRec): Updated.
-
- * src/base/ftsnames.c (FT_Get_Sfnt_Name): Updated.
-
- * src/sfnt/sfdriver.c (sfnt_get_ps_name): Updated.
-
- * src/sfnt/sfobjs.c (tt_name_entry_ascii_from_utf16,
- tt_name_entry_ascii_from_other): Renamed to...
- (tt_name_ascii_from_utf16, tt_name_entry_ascii_from_other): This,
- respectively.
- (TT_NameEntry_ConvertFunc): Renamed to...
- (TT_Name_ConvertFunc): This.
- (tt_face_get_name): Updated.
-
- * src/sfnt/ttload.c (tt_face_load_name, tt_face_free_name):
- Updated.
-
-2017-01-24 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Postscript name service for symbol fonts.
-
- * src/sfnt/sfdriver.c (sfnt_get_ps_name): Accept PID/EID=3/0
- entries also.
-
-2017-01-24 Werner Lemberg <wl@gnu.org>
-
- [truetype] For OpenType 1.7: s/preferred/typographic/ (sub)family.
-
- * include/freetype/ftsnames.h
- (FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY,
- FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY): New macros.
- (FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY,
- FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY): Deprecated.
-
- * include/freetype/ttnameid.h (TT_NAME_ID_TYPOGRAPHIC_FAMILY,
- TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY): New macros.
- (TT_NAME_ID_PREFERRED_FAMILY, TT_NAME_ID_PREFERRED_SUBFAMILY):
- Deprecated.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Updated.
-
- * docs/CHANGES: Updated.
-
-2017-01-23 Werner Lemberg <wl@gnu.org>
-
- [base] Add `FT_Set_Default_Properties' (#49187).
-
- * include/freetype/ftmodapi.h: Add declaration.
-
- * src/base/ftinit.c (ft_set_default_properties): Renamed to...
- (FT_Set_Default_Properties): ... this.
- (FT_Init_FreeType): Updated.
-
- * docs/CHANGES: Updated.
-
-2017-01-23 Werner Lemberg <wl@gnu.org>
-
- [truetype] Minor updates for OpenType 1.8.1.
-
- * src/truetype/ttgxvar.h (GX_MVarTable): `axisCount' has been
- removed from the specification; it is now reserved.
-
- * src/truetype/ttgxvar.c (ft_var_load_mvar): Updated.
- (GX_FVar_Head): Remove `countSizePairs'; the corresponding data
- field in the `MVAR' table is now reserved.
- (fvar_fields): Updated.
-
-2017-01-23 Werner Lemberg <wl@gnu.org>
-
- [truetype] Avoid segfault for invalid variation data.
-
- * src/truetype/ttgxvar.c (ft_var_load_item_variation_store): Assure
- `itemCount' is not zero.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=441
-
-2017-01-20 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (TT_RunIns): Adjust loop detector limits.
-
-2017-01-17 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ttnameid.h: Updated to OpenType 1.8.1.
-
- (TT_APPLE_ID_FULL_UNICODE): New macro.
-
- (TT_MS_LANGID_BOSNIAN_BOSNIA_HERZ_CYRILLIC,
- TT_MS_LANGID_UPPER_SORBIAN_GERMANY,
- TT_MS_LANGID_LOWER_SORBIAN_GERMANY, TT_MS_LANGID_IRISH_IRELAND,
- TT_MS_LANGID_INUKTITUT_CANADA_LATIN, TT_MS_LANGID_BASHKIR_RUSSIA,
- TT_MS_LANGID_LUXEMBOURGISH_LUXEMBOURG,
- TT_MS_LANGID_GREENLANDIC_GREENLAND, TT_MS_LANGID_MAPUDUNGUN_CHILE,
- TT_MS_LANGID_MOHAWK_MOHAWK, TT_MS_LANGID_BRETON_FRANCE,
- TT_MS_LANGID_OCCITAN_FRANCE, TT_MS_LANGID_CORSICAN_FRANCE,
- TT_MS_LANGID_ALSATIAN_FRANCE, TT_MS_LANGID_YAKUT_RUSSIA,
- TT_MS_LANGID_KICHE_GUATEMALA, TT_MS_LANGID_KINYARWANDA_RWANDA,
- TT_MS_LANGID_WOLOF_SENEGAL, TT_MS_LANGID_DARI_AFGHANISTAN): New
- macros.
-
- (TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC): Fix value.
-
- (TT_MS_LANGID_GERMAN_LIECHTENSTEIN, TT_MS_LANGID_CATALAN_CATALAN,
- TT_MS_LANGID_CHINESE_MACAO, TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT,
- TT_MS_LANGID_KOREAN_KOREA, TT_MS_LANGID_ROMANSH_SWITZERLAND,
- TT_MS_LANGID_SLOVENIAN_SLOVENIA, TT_MS_LANGID_BASQUE_BASQUE,
- TT_MS_LANGID_SETSWANA_SOUTH_AFRICA,
- TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA,
- TT_MS_LANGID_ISIZULU_SOUTH_AFRICA, TT_MS_LANGID_KAZAKH_KAZAKHSTAN,
- TT_MS_LANGID_KYRGYZ_KYRGYZSTAN, TT_MS_LANGID_KISWAHILI_KENYA,
- TT_MS_LANGID_TATAR_RUSSIA, TT_MS_LANGID_ODIA_INDIA,
- TT_MS_LANGID_MONGOLIAN_PRC, TT_MS_LANGID_TIBETAN_PRC,
- TT_MS_LANGID_WELSH_UNITED_KINGDOM, TT_MS_LANGID_GALICIAN_GALICIAN,
- TT_MS_LANGID_SINHALA_SRI_LANKA, TT_MS_LANGID_TAMAZIGHT_ALGERIA,
- TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA, TT_MS_LANGID_YI_PRC,
- TT_MS_LANGID_UIGHUR_PRC): New aliases.
-
- Remove commented out code.
-
- (TT_NAME_ID_LIGHT_BACKGROUND, TT_NAME_ID_DARK_BACKGROUND,
- TT_NAME_ID_VARIATIONS_PREFIX): New macros.
-
- (HAVE_LIMIT_ON_IDENTS): Remove macro (which was useless since many
- years), use guarded long macros by default and define short versions
- as aliases for the long ones.
-
-2017-01-15 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgxvar.c (tt_apply_var): Handle underline parameters
- also.
-
-2017-01-11 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (ft_open_face_internal): Improve tracing.
-
-2017-01-11 Werner Lemberg <wl@gnu.org>
-
- [truetype] Actually use metrics variation service.
-
- * src/base/ftmm.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
- (ft_face_get_mvar_service): New auxiliary function to look up
- metrics variation service.
- (FT_Set_Var_Design_Coordinates, FT_Set_MM_Blend_Coordinates,
- FT_Set_Var_Blend_Coordinates): Call metrics variation service.
-
- * src/truetype/ttobjs.c (tt_face_init): Use metrics variations for
- named instances.
-
-2017-01-11 Werner Lemberg <wl@gnu.org>
-
- [truetype] Provide metrics variation service.
-
- * include/freetype/internal/services/svmetric.h
- (FT_Metrics_Adjust_Func): Reduce number of necessary parameters.
-
- * src/truetype/ttgxvar.c: Include FT_LIST_H.
- (tt_size_reset_iterator): New auxiliary function for...
- (tt_apply_var): New function.
-
- * src/truetype/ttgxvar.h: Updated.
-
- * src/truetype/ttdriver.c (tt_service_metrics_variations): Add
- `tt_apply_mvar'.
-
- * include/freetype/internal/ftserv.h (FT_ServiceCache): Add metrics
- variation service.
-
-2017-01-11 Werner Lemberg <wl@gnu.org>
-
- [truetype] Parse `MVAR' table.
-
- * src/truetype/ttgxvar.h (MVAR_TAG_XXX): New macros for MVAR tags.
- (GX_Value, GX_MVarTable): New structures.
- (GX_Blend): Add it.
-
- * src/truetype/ttgxvar.c (GX_VALUE_SIZE, GX_VALUE_CASE,
- GX_GASP_CASE): New macros.
- (ft_var_get_value_pointer): New auxiliary function to get a pointer
- to a value from various SFNT tables already stored in `TT_Face'.
- (ft_var_load_mvar): New function.
- (TT_Get_MM_Var): Call it.
- (tt_done_blend): Updated.
-
-2017-01-11 Werner Lemberg <wl@gnu.org>
-
- [truetype] More preparations for MVAR support.
-
- * src/truetype/ttobjs.c (tt_size_reset): Add argument to make
- function only recompute ascender, descender, and height.
-
- * src/truetype/ttobjs.h: Updated.
-
- * src/truetype/ttdriver.c (tt_size_select, tt_size_request):
- Updated.
-
-2017-01-09 Werner Lemberg <wl@gnu.org>
-
- [pcf] Disable long family names by default.
-
- * include/freetype/config/ftoption.h
- (PCF_CONFIG_OPTION_LONG_FAMILY_NAMES): Comment out.
-
-2017-01-09 Werner Lemberg <wl@gnu.org>
-
- [pcf] Make long family names configurable.
-
- The change from 2016-09-29 was too radical (except for people using
- the openSuSE GNU/Linux distribution). To ameliorate the situation,
- PCF_CONFIG_OPTION_LONG_FAMILY_NAMES gets introduced which controls
- the feature; if set, a new PCF property option
- `no-long-family-names' can be used to switch this feature off.
-
- * include/freetype/config/ftoption.h, devel/ftoption.h
- (PCF_CONFIG_OPTION_LONG_FAMILY_NAMES): New option.
-
- * include/freetype/ftpcfdrv.h: New header file (only containing
- comments currently, used for building the documentation).
-
- * include/freetype/config/ftheader.h (FT_PCF_DRIVER_H): New macro.
-
- * src/pcf/pcf.h (PCF_Driver): Add `no_long_family_names' field.
-
- * src/pcf/pcfdrivr.c: Include FT_SERVICE_PROPERTIES_H and
- FT_PCF_DRIVER_H.
- (pcf_property_set, pcf_property_get): New functions.
- (pcf_service_properties): New service.
- (pcf_services): Updated.
- (pcf_driver_init) [PCF_CONFIG_OPTION_LONG_FAMILY_NAMES]: Handle
- `no_long_family_names'.
-
- * src/pcf/pcfread.c (pcf_load_font): Handle `no_long_family_names'
- and PCF_CONFIG_OPTION_LONG_FAMILY_NAMES.
-
- * docs/CHANGES: Updated.
-
-2017-01-09 Werner Lemberg <wl@gnu.org>
-
- [pcf] Introduce a driver structure.
-
- To be filled later on with something useful.
-
- * src/pcf/pcf.h (PCF_Driver): New structure.
-
- * src/pcf/pcfdrivr.c (pcf_driver_init, pcf_driver_done): New dummy
- functions.
- (pcf_driver_class): Updated.
-
-2017-01-08 Werner Lemberg <wl@gnu.org>
-
- [truetype] Again some GX code shuffling.
-
- We need this later on for MVAR also.
-
- * src/truetype/ttgxvar.c (tt_hadvance_adjust): Split off computing
- an item store variation delta into...
- (ft_var_get_item_delta): ...new function.
-
-2017-01-08 Werner Lemberg <wl@gnu.org>
-
- [truetype] Adjust font variation flags for MVAR.
-
- * include/freetype/internal/tttypes.h (TT_FACE_FLAG_VAR_XXX):
- Remove all flags related to MVAR; replace it with...
- (TT_FACE_FLAG_VAR_MVAR): ...this new macro.
- (TT_Face): Remove `mvar_support' field (which was still unused).
-
-2017-01-06 Werner Lemberg <wl@gnu.org>
-
- [truetype] More GX code shuffling.
-
- We need this later on for MVAR also.
-
- * src/truetype/ttgxvar.c (tt_done_blend): Split off handling of item
- variation store into...
- (ft_var_done_item_variation_store): ...new function.
-
-2017-01-06 Werner Lemberg <wl@gnu.org>
-
- [truetype] More generalization of GX stuff.
-
- We need this later on for MVAR also.
-
- * src/truetype/ttgxvar.c (ft_var_load_delta_set_index_mapping): Add
- parameters for delta-set index mapping and item variation store.
- (ft_var_load_item_variation_store): Add parameter for item variation
- store.
- s/hvarData/varData/.
- Move allocation of `hvar_table' to...
- (ft_var_load_hvar): ...this function.
- Updated.
-
-2017-01-06 Werner Lemberg <wl@gnu.org>
-
- [truetype] Some GX structure renames for generalization.
-
- We need this later on for MVAR also.
-
- * src/truetype/ttgxvar.h (GX_HVarData): Renamed to...
- (GX_ItemVarData): ...this.
- (GX_HVarRegion): Renamed to...
- (GX_VarRegion): ...this.
- (GX_HVStore): Renamed to...
- (GX_ItemVarStore): ...this.
- (GX_WidthMap): Renamed to...
- (GX_DeltaSetIdxMap): ...this.
-
- (GX_HVarTable): Updated.
-
- * src/truetype/ttgxvar.c: Updated.
-
-2017-01-06 Werner Lemberg <wl@gnu.org>
-
- [truetype] Code shuffling.
-
- * src/truetype/ttgxvar.c (ft_var_load_hvar): Split off loading of
- item variation store and delta set index mapping into...
- (ft_var_load_item_variation_store,
- ft_var_load_delta_set_index_mapping): ...new functions.
-
-2017-01-06 Werner Lemberg <wl@gnu.org>
-
- [truetype] Add HVAR access without advance width map.
-
- * src/truetype/ttgxvar.c (ft_var_load_hvar): Handle case where
- `offsetToAdvanceWidthMapping' is zero.
- (tt_hadvance_adjust): Implement direct deltaSet access by glyph
- index.
-
-2017-01-06 Werner Lemberg <wl@gnu.org>
-
- [pcf] Revise driver.
-
- This commit improves tracing and handling of malformed fonts. In
- particular, the changes to `pcf_get_properties' fix
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=379
-
- * src/pcf/pcfread.c (tableNames): Use long names for better
- readability.
- (pcf_read_TOC): Allow at most 9 tables.
- (pcf_get_properties): Allow at most 256 properties.
- Limit strings array length to 256 * (65536 + 1) bytes.
- Better tracing.
- (pcf_get_metric): Trace metric data.
- (pcf_get_metrics): Allow at most 65536 metrics.
- Fix comparison of `metrics->ascent' and `metrics->descent' to avoid
- potential overflow.
- Better tracing.
- (pcf_get_bitmaps): Allow at most 65536 bitmaps.
- Better tracing.
- (pcf_get_encodings, pcf_get_accel): Better tracing.
-
- * src/pcf/pcfdrivr.c (PCF_Glyph_Load): Don't trace `format' details.
- These are now shown by `pcf_get_bitmaps'.
-
-2017-01-04 Werner Lemberg <wl@gnu.org>
-
- * src/pcf/pcfdrivr.c (PCF_Face_Init): Trace compression format.
-
-2017-01-04 Werner Lemberg <wl@gnu.org>
-
- [cff] More consistency checks for pure CFFs.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=378
-
- * src/cff/cffload.c (cff_font_load): Check element number and size
- of Name and Top DICT indices.
-
-2017-01-04 Werner Lemberg <wl@gnu.org>
-
- [cff, truetype] Minor tracing improvement.
-
- * src/cff/cffobjs.c (cff_face_init), src/truetype/ttobjs.c
- (tt_face_init): Indent first tracing message from SFNT driver.
-
-2017-01-03 Werner Lemberg <wl@gnu.org>
-
- [truetype] Various minor fixes.
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Check instruction
- size only if we do native hinting.
- (TT_Load_Glyph): Trace returned error code.
-
- * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): Trace
- returned error code.
- (tt_size_ready_bytecode): Don't run `prep' table if `fpgm' table is
- invalid.
-
-2017-01-03 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Don't fail if PCLT, EBLC (and similar tables) are invalid.
-
- These tables are optional.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Implement it.
-
-2017-01-03 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffparse.c (cff_parse_num): Simplify.
-
-2017-01-03 Werner Lemberg <wl@gnu.org>
-
- Various fixes for clang's undefined behaviour sanitizer.
-
- * src/cff/cffload.c (FT_fdot14ToFixed): Fix casting.
- (cff_blend_doBlend): Don't left-shift negative numbers.
- Handle 5-byte numbers byte by byte to avoid alignment issues.
-
- * src/cff/cffparse.c (cff_parse_num): Handle 5-byte numbers byte by
- byte to avoid alignment issues.
-
- * src/cid/cidload (cid_read_subrs): Do nothing if we don't have any
- subrs.
-
- * src/psaux/t1decode.c (t1_decode_parse_charstring): Fix tracing.
-
- * src/tools/glnames.py (main): Put `DEFINE_PSTABLES' guard around
- definition of `ft_get_adobe_glyph_index'.
-
- * src/psnames/pstables.h: Regenerated.
-
- * src/psnames/psmodule.c: Include `pstables.h' twice to get both
- declaration and definition.
-
- * src/truetype/ttgxvar.c (FT_fdot14ToFixed, FT_intToFixed): Fix
- casting.
-
-2017-01-01 Werner Lemberg <wl@gnu.org>
-
- [cff] Handle multiple `blend' operators in a row correctly.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=368
-
- * src/cff/cffload.c (cff_blend_doBlend): Adjust `parser->stack'
- pointers into `subFont->blend_stack' after reallocation.
-
-2017-01-01 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Return correct number of named instances for TTCs.
-
- Without this patch, requesting information for face index N returned
- the data for face index N+1 (or index 0).
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Correctly adjust `face_index'
- for negative `face_instance_index' values.
-
-2016-12-31 Werner Lemberg <wl@gnu.org>
-
- */*: Use hex numbers for errors in tracing messages.
-
-2016-12-31 Werner Lemberg <wl@gnu.org>
-
- [truetype] Check axis count in HVAR table.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=362
-
- * src/truetype/ttgxvar.c (ft_var_load_hvar): Check axis count.
- (ft_var_load_avar): Fix tracing message.
-
-2016-12-30 Werner Lemberg <wl@gnu.org>
-
- * Version 2.7.1 released.
- =========================
-
-
- Tag sources with `VER-2-7-1'.
-
- * docs/VERSION.TXT: Add entry for version 2.7.1.
-
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/index.html,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualc/index.html,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj,
- builds/windows/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.7/2.7.1/, s/27/271/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
-
- * builds/unix/configure.raw (version_info): Set to 19:0:13.
- * CMakeLists.txt (VERSION_PATCH): Set to 1.
-
-2016-12-30 Werner Lemberg <wl@gnu.org>
-
- [ftfuzzer] Replace `rand' with an xorshift algorithm.
-
- * src/tools/ftfuzzer/ftfuzzer.cc: Don't include `stdlib.h'.
- (Random): Implement and use a 32bit `xorshift' algorithm.
-
-2016-12-30 Werner Lemberg <wl@gnu.org>
-
- [ftfuzzer] Restrict number of tested bitmap strikes.
-
- Malformed fonts often have large values for the number of bitmap
- strikes, and FreeType doesn't check the validity of all bitmap
- strikes in advance.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=353
-
- * src/tools/ftfuzzer/ftfuzzer.cc: Include `stdlib.h' for `rand'.
- (Random): Small class to provide n randomly selected numbers
- (without repetition) out of the value set [1,N].
- (LLVMFuzzerTestOneInput): Use it to test only up to 10 bitmap
- strikes.
-
-2016-12-29 Werner Lemberg <wl@gnu.org>
-
- [truetype] Variation font API stability issues.
-
- Make some functions work before a call to `TT_Set_MM_Blend'.
-
- * src/truetype/ttgxvar.c (tt_hadvance_adjust): Exit immediately if
- we don't blend.
- (TT_Get_MM_Blend, TT_Get_Var_Design): Return default values if we
- don't blend.
-
-2016-12-29 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): Check axis data.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=348
-
-2016-12-29 Werner Lemberg <wl@gnu.org>
-
- [truetype] Tracing fixes.
-
- * src/truetype/ttgxvar.c (tt_hadvance_adjust): Emit correct
- information.
- (TT_Set_Var_Design): Fix typo.
- (TT_Get_Var_Design): Fix typos.
-
-2016-12-29 Werner Lemberg <wl@gnu.org>
-
- */*: Use `0.5f' for tracing 16.16 numbers.
-
-2016-12-29 Werner Lemberg <wl@gnu.org>
-
- [pcf] Protect against gzip bombs.
-
- Fix suggested by Kostya; reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=345
-
- * src/pcf/pcfread.c (pcf_read_TOC): Limit number of TOC entries to
- 1024.
-
-2016-12-28 Werner Lemberg <wl@gnu.org>
-
- [psnames] Only declare, not define, data in `pstables.h' (#49949).
-
- Pdfium includes `pstables.h' a second time; moving the definition
- from `pstables.h' to `psmodule.c' saves more than 60kByte data
- segment space for this case.
-
- * src/tools/glnames.py (StringTable::dump,
- StringTable::dump_sublist, dump_encoding, dump_array): Emit
- additional code to only define tables if `DEFINE_PS_TABLES' is set.
-
- * src/psnames/pstables.h: Regenerated.
- * src/psnames/psmodule.c (DEFINE_PS_TABLES): Define.
-
-2016-12-28 Werner Lemberg <wl@gnu.org>
-
- [cff] Catch `blend' op in non-variant fonts.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=334
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdBLEND>: Don't
- allow `blend' op for non-variant fonts.
-
-2016-12-28 Werner Lemberg <wl@gnu.org>
-
- [cff] Better check of number of blends.
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdBLEND>,
- src/cff/cffparse.c (cff_parse_blend): Compare number of blends with
- stack size.
-
-2016-12-27 Werner Lemberg <wl@gnu.org>
-
- Documentation updates.
-
- * docs/CHANGES: Add missing information.
-
- * docs/formats.txt: Rewritten and updated.
-
-2016-12-27 Werner Lemberg <wl@gnu.org>
-
- [truetype, type1] Implement `FT_Get_Var_Design_Coordinates'.
-
- * src/truetype/ttgxvar.c (TT_Get_Var_Design): Implement.
- (TT_Set_Var_Design): Fix tracing.
-
- * src/type1/t1load.c (T1_Get_Var_Design): Implement.
-
-2016-12-24 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttpload.c (tt_face_load_hdmx): Ignore `version'.
-
- Problem reported by å¼µä¿ŠèŠ <418092625@qq.com>.
-
-2016-12-24 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttsbit.c (tt_face_load_sbit): Allow more version values.
-
- Some fonts seem to have the `version' field in the wrong byte order.
-
- Problem reported by å¼µä¿ŠèŠ <418092625@qq.com>.
-
-2016-12-24 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttpload.c (tt_face_load_loca): Sanitize table length.
-
- This trivial fix allows us to accept more fonts.
-
- Problem reported by å¼µä¿ŠèŠ <418092625@qq.com>.
-
-2016-12-24 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Fix tracing.
-
-2016-12-22 Werner Lemberg <wl@gnu.org>
-
- * CMakeLists.txt: Make it work with cmake 2.8.11.2 (#49909).
-
-2016-12-22 Werner Lemberg <wl@gnu.org>
-
- Ensure used preprocessor symbols are defined (#49790).
-
- * builds/unix/ftconfig.in, builds/vms/ftconfig.h,
- include/freetype/config/ftconfig.h: Check `__GNUC__', `__IBMC__',
- and `__SUNPRO_C' correctly.
-
-2016-12-22 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftrfork.c (FT_Raccess_Get_DataOffsets): Check `count'.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=308
-
-2016-12-22 Werner Lemberg <wl@gnu.org>
-
- [cff] Protect against invalid `vsindex' and `blend' values.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=305
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdVSINDEX,
- cf2_cmdBLEND>: Implement it.
-
-2016-12-22 Werner Lemberg <wl@gnu.org>
-
- [ftfuzzer] Always use Adobe CFF engine.
-
- * src/tools/ftfuzzer/ftfuzzer.cc (FT_Global::FT_Global): Implement
- it.
-
-2016-12-21 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Thinko.
-
- I should really stop coding late in the evening...
-
- Thanks again to Ben for checking.
-
-2016-12-21 Werner Lemberg <wl@gnu.org>
-
- [autofit] Support variation fonts.
-
- (This ChangeLog entry was added later on.)
-
- * src/autofit/afglobal.c (af_face_globals_free): Remove useless
- code.
-
- * src/base/ftmm.c (FT_Set_MM_Design_Coordinates,
- * FT_Set_Var_Design_Coordinates, FT_Set_MM_Blend_Coordinates,
- FT_Set_Var_Blend_Coordinates): Finalize
- auto-hinter data to enforce recomputation. Note that this is a
- brute-force method which should be improved.
-
-2016-12-21 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Thinko.
-
- Don't apply deltas twice for non-phantom points.
-
- Spotted by Ben Wagner.
-
-2016-12-21 Werner Lemberg <wl@gnu.org>
-
- [cff, truetype] Another try for #49829.
-
- * src/cff/cffdrivr.c: Don't include
- `FT_SERVICE_METRICS_VARIATIONS_H'.
- (cff_get_advances): Use `ttface->variation_support'.
-
- * src/truetype/ttdriver.c (tt_get_advances): Use
- `ttface->variation_support'.
-
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
- load_truetype_glyph): Use `ttface->variation_support'.
-
-2016-12-21 Werner Lemberg <wl@gnu.org>
-
- [truetype, sfnt] Introduce font variation flags to `TT_Face'.
-
- * include/freetype/internal/tttypes.h (TT_FACE_FLAG_VAR_XXX):
- New macros describing available functionality of various OpenType
- tables related to font variation.
- (TT_Face): New fields `variation_support' and `mvar_support',
- replacing and extending `use_fvar'.
-
- * src/sfnt/sfobjs.c (sfnt_init_face, sfnt_load_face): Use
- `variation_support'.
-
- * src/truetype/ttgxvar.c (ft_var_load_hvar): Set `variation_support'
- field.
- (TT_Vary_Apply_Glyph_Deltas): Updated.
-
-2016-12-21 Werner Lemberg <wl@gnu.org>
-
- [base] Improve sanity check for Mac resources (#49888).
-
- * src/base/ftobjs.c (Mac_Read_sfnt_Resource): Abort if `rlen' is not
- positive.
-
-2016-12-20 Werner Lemberg <wl@gnu.org>
-
- [base] More sanity checks for Mac resources.
-
- We use
-
- https://github.com/kreativekorp/ksfl/wiki/Macintosh-Resource-File-Format
-
- and
-
- https://developer.apple.com/legacy/library/documentation/mac/pdf/MoreMacintoshToolbox.pdf#page=151
-
- as references.
-
- * include/freetype/internal/ftrfork.h (FT_RFork_Ref): Use FT_Short
- for `res_id'.
-
- * src/base/ftrfork.c (FT_Raccess_Get_HeaderInfo): Extract map length
- and use it to improve sanity checks.
- Follow the specification more closely;in particular, all data types
- are signed, not unsigned.
- (FT_Raccess_Get_DataOffsets): Follow the specification more closely;
- in particular, all data types are signed, not unsigned.
- Add some sanity checks.
-
-2016-12-20 Werner Lemberg <wl@gnu.org>
-
- [truetype] Improve logic for getting fast advance widths.
-
- * src/cff/cffdrivr.c (cff_get_advances), src/truetype/ttdriver.c
- (tt_get_advances): Use `is_default_instance' for test; this gets
- recomputed after changing blend coordinates.
-
-2016-12-20 Ben Wagner <bungeman@google.com>
- Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix linear metrics of GX variation fonts (#49829).
-
- When asking for an unhinted non-default variations,
- `linearVertAdvance' is currently the value from the `hmtx' table
- instead of the actual value after applying the variation. `HVAR'
- support fixes this, but fonts will exist without that table and will
- need sane fallback.
-
- Problem also reported as
-
- https://bugs.chromium.org/p/skia/issues/detail?id=5917
-
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
- load_truetype_glyph): Implement linear advance adjustments if `HVAR'
- or `VVAR' tables are missing.
-
-2016-12-20 Werner Lemberg <wl@gnu.org>
-
- [cff, truetype] Fast advance width retrieval for fonts with HVAR.
-
- Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
-
- * src/base/ftadvanc.c (LOAD_ADVANCE_FAST_CHECK): Don't handle MM.
-
- * src/cff/cffdrivr.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
- (cff_get_advances): Test for HVAR and VVAR.
-
- * src/truetype/ttdriver.c (tt_get_advances): Test for HVAR and VVAR.
-
-2016-12-18 Werner Lemberg <wl@gnu.org>
-
- [base] Fix invalid mac font recursion.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=304
-
- * src/base/ftobjs.c (FT_Open_Face): Code moved to...
- (ft_open_face_internal): ... this function.
- Add a parameter to control whether we try special Mac font handling
- in case of failure.
- (FT_Open_Face, FT_New_Face, FT_New_Memory_Face,
- open_face_from_buffer): Use `ft_open_face_internal'.
-
-2016-12-18 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffobjs.c (cff_face_init): Make named instances work.
-
-2016-12-18 Werner Lemberg <wl@gnu.org>
-
- [truetype, cff] Extend `get_var_blend' function of MM service.
-
- In particular, we need access to named instance data.
-
- * include/freetype/internal/services/svmm.h (FT_Get_Var_Blend_Func):
- Add argument for `FT_MM_Var'.
-
- * src/cff/cffload.c (cff_get_var_blend): Updated.
- * src/cff/cffload.h: Updated.
-
- * src/cff/cf2ft.c (cf2_getNormalizedVector): Updated.
-
- * src/truetype/ttgxvar.c (tt_get_var_blend): Updated.
- Accept value `NULL' for arguments.
- * src/truetype/ttgxvar.h: Updated.
-
-2016-12-18 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Handle `fvar' with zero axes as a non-MM font.
-
- This is better behaviour than exiting with an error.
-
- * include/freetype/internal/tttypes.h (TT_Face): Add `use_fvar'
- field.
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Compute `use_fvar', also
- updating the validation code.
- Use `use_fvar' to compute FT_FACE_FLAG_MULTIPLE_MASTERS.
-
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): Remove `fvar' validation
- code.
-
-2016-12-18 Werner Lemberg <wl@gnu.org>
-
- Minor GX code shuffling.
-
- * include/freetype/internal/tttypes.h (TT_Face): Move
- `is_default_instance' into TT_CONFIG_OPTION_GX_VAR_SUPPORT
- block.
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Updated.
- * src/truetype/ttgload.c (IS_DEFAULT_INSTANCE): New macro.
- (TT_Load_Glyph): Use it.
-
-2016-12-18 Werner Lemberg <wl@gnu.org>
-
- [cff] Better handling of non-CFF font formats.
-
- * src/cff/cffload.c (cff_font_load): Pure CFFs don't have a
- signature, so return `FT_Err_Unknown_File_Format' more often.
-
-2016-12-17 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffload.c (cff_build_blend_vector): Remove redundant code.
-
-2016-12-17 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttobjs.c (tt_face_init): Simplify conditional code.
-
-2016-12-17 Werner Lemberg <wl@gnu.org>
-
- [sfnt, truetype] Various sanitizing fixes.
-
- * src/sfnt/sfobjs.c (sfnt_init_face): If the axis count in `fvar' is
- zero, set `num_instances' to zero.
-
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): Handle `fvar' table with
- zero axes as invalid.
-
- * src/truetype/ttobjs.c (tt_face_init): Improve logic of loading
- `loca', `cvt', `fpgm', and `prep' table.
-
-2016-12-17 Werner Lemberg <wl@gnu.org>
-
- Improve tracing of `FT_Open_Face'.
-
- * src/base/ftobjs.c (FT_Open_Face): Return info on number of
- available faces and numbered instances, or the indices of the
- requested face and numbered instance.
-
- * src/sfnt/sfobjs. (sfnt_open_font): Trace number of subfonts.
-
-2016-12-17 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffload.c (cff_load_private_dict): Always init `blend'.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=295
-
-2016-12-16 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix `cvar' sanity test.
-
- Reported by Dave Arnold.
-
- * src/truetype/ttgxvar.c (tt_face_vary_cvt): Use tuple count mask.
-
-2016-12-16 Werner Lemberg <wl@gnu.org>
-
- [cff, truetype] Remove compiler warnings; fix `make multi'.
-
- * src/cff/cf2font.h: Include `cffload.h'.
-
- * src/cff/cffload.c: Include FT_MULTIPLE_MASTERS_H and
- FT_SERVICE_MULTIPLE_MASTERS_H.
- (cff_vstore_load): Eliminate `vsSize'.
- (cff_load_private_dict): Tag as `FT_LOCAL_DEF'.
-
- * src/cff/cffload.h: Include `cffobjs.h'.
- Provide declaration for `cff_load_private_dict'.
-
- * src/truetype/ttgxvar.c (ft_var_load_hvar): Eliminate
- `minorVersion' and `map_offset'.
-
-2016-12-16 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix heap buffer overflow (#49858).
-
- * src/cff/cffparse.c (cff_parser_run): Add one more stack size
- check.
-
-2016-12-15 Werner Lemberg <wl@gnu.org>
-
- Fix clang warnings.
-
- * src/cff/cffload.c (cff_blend_doBlend): Add cast.
- (cff_subfont_load): Set `error' correctly.
-
- * src/sfnt/ttmtx.c (tt_face_get_metrics): Typo.
-
-2016-12-15 Dave Arnold <darnold@adobe.com>
- Werner Lemberg <wl@gnu.org>
-
- [cff] Implement CFF2 support (2/2).
-
- The font variation code. All parts dependent on the GX code in the
- `truetype' module are guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
- In other words, you can still compile the `cff' module without
- defining TT_CONFIG_OPTION_GX_VAR_SUPPORT (which brings you CFF2
- support without font variation).
-
- * src/cff/cf2font.c (cf2_font_setup): Add support for font
- variation.
- * src/cff/cf2font.h (CF2_Font): Add fields for variation data.
-
- * src/cff/cf2ft.c (cf2_free_instance): Free blend data.
- (cf2_getVStore, cf2_getNormalizedVector): New functions.
- * src/cff/cf2ft.h: Updated.
-
- * src/cff/cf2intrp.c: Include `cffload.h'.
- (cf2_cmdRESERVED_15, cf2_cmdRESERVED_16): Replace with...
- (cf2_cmdVSINDEX, cf2_cmdBLEND): ... this new enum values.
- (cf2_doBlend): New function.
- (cf2_interpT2CharString): Handle `vsindex' and `blend' opcodes.
-
- * src/cff/cffload.c (FT_fdot14ToFixed): New macro.
- (cff_vstore_done, cff_vstore_load): New functions.
- (cff_blend_clear, cff_blend_doBlend, cff_blend_build_vector,
- cff_blend_check_vector): New functions.
- (cff_load_private_dict): Add arguments for blend vector.
- Handle blend data.
- (cff_subfont_load, cff_subfont_done): Updated.
- (cff_font_load): Handle CFF2 variation store data.
- (cff_font_done): Updated.
- * src/cff/cffload.h: Include `cffparse.h'.
- Updated.
-
- * src/cff/cffobjs.c (cff_face_done): Updated.
-
- * src/cff/cffparse.c: Include `cffload.h'.
- (cff_parse_num): Handle internal value 255.
- (cff_parse_vsindex, cff_parse_blend): New functions.
- (CFF_FIELD_BLEND): New macro.
- (cff_parser_run): Updated.
- * src/cff/cffparse.h (cff_kind_blend): New enum value.
-
- * src/cff/cfftoken.h: Handle `vstore', `vsindex', and `blend'
- dictionary values.
-
- * src/cff/cfftypes.h (CFF_VarData, CFF_AxisCoords, CFF_VarRegion,
- CFF_VStore, CFF_Blend): New structures.
- (CFF_FontRecDict): Add `vstore_offset' field.
- (CFF_Private): Add `vsindex' field.
- (CFF_SubFont): Add fields for blend data.
- (CFF_Font): Add `vstore' field.
-
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): `CFF2' is equal to `gvar',
- since glyph variation data is directly embedded.
- (TT_Set_MM_Blend): Don't load `gvar' table for CFF2 fonts.
-
-2016-12-15 Dave Arnold <darnold@adobe.com>
- Werner Lemberg <wl@gnu.org>
-
- [cff] Implement CFF2 support (1/2).
-
- This commit does not contain the blend code for font variation
- support, which follows in another commit.
-
- You should ignore whitespace while inspecting this commit.
-
- * include/freetype/internal/tttypes.h (TT_Face): Add `isCFF2'
- member.
-
- * src/cff/cf2font.h (CF2_Font): Add `isCFF2' member.
-
- * src/cff/cf2ft.c (cf2_decoder_parse_charstrings): Handle `isCFF2'
- flag.
- (cf2_getMaxstack): New function.
- * src/cff/cf2ft.h: Updated.
-
- * src/cff/cf2intrp.c (cf2_escRESERVED_38): New enum.
- (cf2_interpT2CharString): Handle CFF2 differences.
- Add tracing message for errors.
-
- * src/cff/cffdrivr.c (cff_get_glyph_name, cff_get_name_index):
- Update for CFF2.
-
- * src/cff/cffload.c (FT_FIXED_ONE): New macro.
- (cff_index_init, cff_index_load_offsets, cff_index_access_element,
- cff_index_get_name, cff_ft_select_get, cff_load_private_dict,
- cff_subfont_load, cff_font_load): Handle CFF2.
- * src/cff/cffload.h: Updated.
-
- * src/cff/cffobjs.c (cff_face_init): Handle CFF2.
-
- * src/cff/cffparse.c (cff_parse_maxstack): New function.
- (CFFCODE_TOPDICT, CFFCODE_PRIVATE): Removed
- * src/cff/cffparse.h (CFF2_MAX_STACK, CFF2_DEFAULT_STACK): New
- macros.
- (CFF2_CODE_TOPDICT, CFF2_CODE_FONTDICT, CFF2_CODE_PRIVATE): New
- macros.
-
- * src/cff/cfftoken.h: Add fields for CFF2 dictionaries (but no blend
- stuff).
-
- * src/cff/cfftypes.h (CFF_Index): Add `hdr_size' field.
- (CFF_FontRecDict): Add `maxstack' field.
- (CFF_Private): Add `subfont' field.
- (CFF_Font): Add `top_dict_length' and `cff2' fields.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Handle `CFF2' table.
-
-2016-12-15 Werner Lemberg <wl@gnu.org>
- Dave Arnold <darnold@adobe.com>
-
- [truetype] Provide HVAR advance width variation as a service.
-
- Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
-
- * src/truetype/ttdriver.c (tt_service_metrics_variations): Updated.
-
- * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Prevent
- double adjustment of advance width.
-
- * src/sfnt/ttmtx.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
- (tt_face_get_metrics): Apply metrics variations.
-
-2016-12-15 Dave Arnold <darnold@adobe.com>
- Werner Lemberg <wl@gnu.org>
-
- [truetype] Provide function to apply `HVAR' advance width variation.
-
- Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
-
- * src/truetype/ttgxvar.c (tt_hadvance_adjust): New function.
- * src/truetype/ttgxvar.h: Updated.
-
-2016-12-15 Dave Arnold <darnold@adobe.com>
- Werner Lemberg <wl@gnu.org>
-
- [truetype] Add `HVAR' table parsing.
-
- Note that this is not complete yet; it only handles advance width
- variation.
-
- Activation of the code follows in another commit.
-
- Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
-
- * include/freetype/ftmm.h (FT_Var_Named_Style): Add `psid' member.
-
- * src/truetype/ttgxvar.h (GX_HVarData, GX_AxisCoords, GX_HVarRegion,
- GX_HVStore, GX_WidthMap): New auxiliary structures for...
- (GX_HVarTable): ... HVAR main structure.
- (GX_BlendRec): Add data for HVAR loading.
-
- * src/truetype/ttgxvar.c (FT_FIXED_ONE, FT_fdot14ToFixed,
- FT_intToFixed, FT_fixedToInt): New macros.
- (ft_var_load_hvar): New function.
- (TT_Get_MM_Var): Updated.
- (tt_done_blend): Deallocate HVAR data.
-
-2016-12-15 Dave Arnold <darnold@adobe.com>
-
- [cff] Extend number parsing.
-
- The forthcoming CFF2 support needs a dynamic parsing limit.
-
- * src/cff/cffparse.c (cff_parse_num, do_fixed, cff_parse_fixed,
- cff_parse_fixed_scaled, cff_parse_fixed_dynamic): Add argument for
- parser.
- (cff_parse_font_matrix, cff_parse_font_bbox, cff_parse_private_dict,
- cff_parse_multiple_master, cff_parse_cid_ros, cff_parser_run): Updated.
-
- * src/cff/cffparse.h (cff_parse_num): Export locally.
-
-2016-12-15 Dave Arnold <darnold@adobe.com>
-
- [cff] Implement dynamic stack size for Adobe engine.
-
- This also adds `cf2_stack_setReal' and `cf2_stack_pop', needed for
- the forthcoming CFF2 support.
-
- * src/cff/cf2stack.c (cf2_stack_init): Add argument for stack size.
- (cf2_stack_free): Deallocate stack.
- (cf2_stack_count, cf2_stack_pushInt, cf2_stack_pushFixed,
- cf2_stack_popInt, cf2_stack_popFixed, cf2_stack_getReal,
- cf2_stack_clear): Updated.
- (cf2_stack_setReal, cf2_stack_pop): New functions.
-
- * src/cff/cf2stack.h (CF2_Stack): Add `stackSize' member.
- Update function declarations.
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString): Updated.
-
- * src/cff/cffparse.c (cff_parser_init): Add parameter for stack
- size; return error code.
- (cff_parser_done): New function.
- (cff_parser_run): Updated.
-
- * src/cff/cffparse.h (CFF_Parser): Add `stackSize' member and make
- `stack' a pointer.
- Update function declarations.
-
- * src/cff/cffload.c (cff_load_private_dict, cff_subfont_load):
- Updated.
-
-2016-12-15 Dave Arnold <darnold@adobe.com>
- Werner Lemberg <wl@gnu.org>
-
- [cff] Code shuffling.
-
- * src/cff/cfftypes.h (CFF_Font): Add `library' and `base_offset'
- fields.
-
- * src/cff/cffload.c (cff_subfont_load): Change last argument to
- `CFF_Font'
- Split off parsing of private dictionary into...
- (cff_load_private_dict): ...this new function.
- (cff_font_load): Updated.
-
-2016-12-14 Werner Lemberg <wl@gnu.org>
-
- [sfnt, truetype] Add framework for Metrics Variations service.
-
- No effect yet; service functions will be implemented later on.
-
- Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
-
- * include/freetype/internal/services/svmetric.h: New file.
-
- * include/freetype/internal/ftserv.h
- (FT_SERVICE_METRICS_VARIATIONS_H): New macro.
-
- * include/freetype/internal/tttypes.h (TT_Face): New field `var'.
-
- * src/sfnt/sfobjs.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
- (sfnt_init_face): Initialize `face->var'.
-
- * src/truetype/ttdriver.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
- (tt_service_metrics_variations): New service.
- (tt_services): Updated.
-
- * src/truetype/ttpic.h: Updated.
-
-2016-12-14 Werner Lemberg <wl@gnu.org>
-
- [cff] Add Multiple Masters service.
-
- The code simply uses the MM functions from the `truetype' module.
-
- Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
-
- * include/freetype/internal/tttypes.h (TT_Face): New field `mm'.
-
- * src/cff/cffdrivr.c: Include FT_SERVICE_MULTIPLE_MASTERS_H.
- (cff_set_mm_blend, cff_get_mm_blend, cff_get_mm_var,
- cff_set_var_design, cff_get_var_design): New functions.
- (cff_service_multi_masters): New service.
- (cff_services): Updated.
-
- * src/cff/cffload.c (cff_get_var_blend, cff_done_blend): New
- functions.
- * src/cff/cffload.h: Updated.
-
- * src/cff/cffpic.h (CFF_SERVICE_MULTI_MASTERS_GET): New macro.
-
- * src/sfnt/sfobjs.c: Include FT_SERVICE_MULTIPLE_MASTERS_H.
- (sfnt_init_face): Initialize `face->mm'.
-
-2016-12-14 Werner Lemberg <wl@gnu.org>
-
- Extend functionality of `ft_module_get_service'.
-
- It can now differentiate between local and global searches.
-
- * src/base/ftobjs.c (ft_module_get_service): Add `global' argument.
- (FT_Get_TrueType_Engine_Type): Updated.
-
- * src/cff/cffdrivr.c (cff_get_ps_name, cff_get_cmap_info): Updated.
-
- * include/freetype/internal/ftobjs.h: Updated.
- * include/freetype/internal/ftserv.h (FT_FACE_FIND_GLOBAL_SERVICE):
- Updated.
-
-2016-12-14 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgxvar.c (tt_get_var_blend): Fix compiler warning.
-
-2016-12-14 Dave Arnold <darnold@adobe.com>
- Werner Lemberg <wl@gnu.org>
-
- [sfnt, cff] Minor preparations.
-
- * include/freetype/tttags.h (TTAG_CFF2, TTAG_HVAR, TTAG_MVAR,
- TTAG_VVAR): New SFNT table tags.
-
- * src/cff/cf2fixed.h (CF2_FIXED_ONE, CF2_FIXED_EPSILON): Add cast.
-
-2016-12-10 Werner Lemberg <wl@gnu.org>
-
- [truetype, type1] Add `get_var_blend' to MM service.
-
- For internal use; we want to share code between the forthcoming CFF2
- support and TrueType.
-
- * include/freetype/internal/services/svmm.h (FT_Get_Var_Blend_Func):
- New typedef.
- (MultiMasters): Add `get_var_blend'.
- (FT_Service_MultiMasters): Updated.
-
- * src/truetype/ttgxvar.c (tt_get_var_blend): New function.
- * src/truetype/ttgxvar.h: Updated.
-
- * src/truetype/ttdriver.c (tt_service_gx_multi_masters): Updated.
- * src/type1/t1driver.c (t1_service_multi_masters): Updated.
-
-2016-12-10 Werner Lemberg <wl@gnu.org>
-
- [truetype, type1] Add `done_blend' to MM service.
-
- For internal use; we want to share code between the forthcoming CFF2
- support and TrueType.
-
- * include/freetype/internal/services/svmm.h (FT_Done_Blend_Func):
- New typedef.
- (MultiMasters): Add `done_blend'.
- (FT_Service_MultiMasters): Updated.
-
- * src/truetype/ttgxvar.c (tt_done_blend): Use `TT_Face' as argument.
- * src/truetype/ttgxvar.h: Updated.
-
- * src/truetype/ttobjs.c (TT_Face_Done): Updated.
-
- * src/truetype/ttdriver.c (tt_service_gx_multi_masters): Updated.
- * src/type1/t1driver.c (t1_service_multi_masters): Updated.
-
-2016-12-09 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Revert change from 2016-12-08.
-
- I missed the functionality of `ft_module_get_service', which makes
- the change unnecessary.
-
-2016-12-08 Werner Lemberg <wl@gnu.org>
-
- Add framework to support services with 8 functions.
-
- We will need this for CFF variation font support.
-
- * include/freetype/internal/ftserv.h (FT_DEFINE_SERVICEDESCREC8):
- New macro.
-
-2016-12-08 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Add `get_glyph_name' and `get_name_index' to SFNT interface.
-
- CFF2 fonts will need access to those two functions.
-
- * include/freetype/internal/sfnt.h: Include FT_SERVICE_GLYPH_DICT_H.
- (SFNT_Interface): Add `get_glyph_name' and `get_name_index' members.
- (FT_DEFINE_SFNT_INTERFACE): Updated.
-
- * src/sfnt/sfdriver.c (sfnt_get_glyph_name, sfnt_get_name_index):
- Fix signatures to exactly correspond to the glyph dict service
- function typedefs.
- (sfnt_interface): Updated.
-
-2016-12-06 Dave Arnold <darnold@adobe.com>
-
- Add `FT_Get_Var_Design_Coordinates' function.
-
- Note that the low-level functions aren't implemented yet.
-
- * include/freetype/ftmm.h: Declare.
-
- * include/freetype/internal/services/svmm.h
- (FT_Get_Var_Design_Func): New typedef.
- (MultiMasters): New MM service function `get_var_design'.
- (FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated.
- Update all callers.
-
- * src/base/ftmm.c (FT_Get_Var_Design_Coordinates): Implement.
-
- * src/truetype/ttdriver.c: Updated.
-
- * src/truetype/ttgxvar.c (TT_Get_Var_Design): New dummy function to
- handle `get_var_design' service.
- * src/truetype/ttgxvar.h: Updated.
-
- * src/type1/t1driver.c: Updated.
-
- * src/type1/t1load.c (T1_Get_Var_Design): New dump function to
- handle `get_var_design' service.
- * src/type1/t1load.h: Updated.
-
-2016-12-06 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_subrs): Fix memory leak.
-
- The `subrs' keyword might erroneously occur multiple times.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=231
-
-2016-12-01 Werner Lemberg <wl@gnu.org>
-
- [gzip] Improve building with external zlib (#49673).
-
- Building FreeType with external zlib 1.2.8 makes msvc 14 stop with
- the following error.
-
- ftgzip.c
- zlib-1.2.8\zlib.h(86): error C2061:
- syntax error: identifier 'z_const'
- zlib-1.2.8\zlib.h(94): error C2054:
- expected '(' to follow 'z_const'
- zlib-1.2.8\zlib.h(94): error C2085:
- 'msg': not in formal parameter list
- ...
- zlib-1.2.8\zlib.h(877): fatal error C1003:
- error count exceeds 100; stopping compilation
-
- The error happens because FreeType keeps an own copy of zlib-1.1.4
- under `src/gzip'. When building `src/gzip/ftgzip.c' with
- FT_CONFIG_OPTION_SYSTEM_ZLIB defined, it uses
-
- #include <zlib.h>
-
- which correctly finds an external `zlib.h', but `zlib.h' itself has
- a line
-
- #include "zconf.h"
-
- which makes Visual Studio 2015 find `src/gzip/zconf.h' while
- compiling the files in `src/gzip'.
-
- * src/gzip/zconf.h: Rename to...
- * src/gzip/ftzconf.h: ... this.
- * src/gzip/zlib.h, src/gzip/rules.mk (GZIP_DRV_SRCS): Updated.
-
-2016-12-01 Oleksandr Chekhovskyi <oleksandr.chekhovskyi@gmail.com>
-
- [autofit] Fix Emscripten crash (patch #9180).
-
- Function calls through pointers must use a matching signature to
- work on Emscripten, since such calls are dispatched through lookup
- tables grouped by signature.
-
- * src/autofit/aftypes.h (AF_WritingSystem_ApplyHintsFunc): Fix
- typedef.
-
-2016-11-29 Werner Lemberg <wl@gnu.org>
-
- [smooth] Revert previous commit. Already fixed with 6ca54c64.
-
-2016-11-29 Werner Lemberg <wl@gnu.org>
-
- [smooth] Avoid conditional jump on uninitialized value (#49711).
-
- * src/smooth/ftgrays.c (gray_raster_render): Initialize `worker'.
-
-2016-11-27 Nikolaus Waxweiler <madigens@gmail.com>
-
- [autofit] Code shuffling.
-
- Also improve some comments and remove unused code.
-
- No functional change.
-
- * src/autofit/afloader.c (af_loader_load_g): Merged with...
- (af_loader_load_glyph): ...this function.
- Split off emboldening code into...
- (af_loader_embolden_glyph_in_slot): ... this function.
-
-2016-11-17 Werner Lemberg <wl@gnu.org>
-
- Better support of LLP64 systems with gcc (and clang).
-
- * builds/unix/configure.raw: Call `AC_TYPE_LONG_LONG_INT'.
-
- * builds/unix/ftconfig.in (FT_LONG64): Enable for LLP64 systems (and
- suppress warnings) even without `FT_CONFIG_OPTION_FORCE_INT64'.
-
-2016-11-10 Werner Lemberg <wl@gnu.org>
-
- Fix `lcd_weights' array size.
-
- * include/freetype/internal/ftobjs.h (FT_LibraryRec): Do it.
-
- Reported by Nikolaus.
-
-2016-11-06 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_Render_Glyph_Internal): Fix tracing.
-
-2016-11-06 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Improve FT_LOAD_BITMAP_METRICS_ONLY for `sbix' format.
-
- It's unavoidable to call the PNG engine, but to get the metrics it
- is sufficient to read the PNG image's header only.
-
- * src/sfnt/pngshim.c (Load_SBit_Png): Add argument to control the
- allocation of the glyph slot.
- * src/sfnt/pngshim.h: Updated.
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_png,
- tt_face_load_sbix_image, tt_face_load_sbit_image): Updated.
-
-2016-11-06 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Speed up `sbix' lookup.
-
- This also fixes a bug introduced in 2016-10-01 which prevents
- display of embedded bitmap fonts that use the `sbix' format.
-
- * src/sfnt/ttsbit.c (tt_face_load_sbit): Store `sbix' size and
- offset also in `ebdt_size' and `ebdt_start', respectively. This
- makes the test for an embedded bitmap data table succeed for this
- format.
-
- (tt_face_load_strike_metrics) <TT_SBIT_TABLE_TYPE_SBIX>: Use
- `ebdt_size' and `ebdt_start'
- (tt_face_load_sbix_image): Ditto.
-
-2016-11-06 Seigo Nonaka <nona@google.com>
- Werner Lemberg <wl@gnu.org>
-
- Introduce a way of quickly retrieving (embedded) bitmap metrics.
-
- `FT_Load_Glyph' doesn't generate a bitmap for a non-bitmap glyph
- until the user calls `FT_Render_Glyph'. However, it always
- allocates memory for bitmaps and copies or decodes the contents of a
- bitmap glyph, which can be quite slow for PNG data.
-
- * include/freetype/freetype.h (FT_LOAD_BITMAP_METRICS_ONLY): New
- macro.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Unset FT_LOAD_RENDER if
- FT_LOAD_BITMAP_METRICS_ONLY is used.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_alloc_bitmap,
- tt_sbit_decoder_load_bitmap): Add argument to control allocation of
- the glyph slot.
- (tt_sbit_decoder_load_image, tt_sbit_decoder_load_compound,
- tt_face_load_sbit_image): Updated.
-
- * src/pcf/pcfdrivr.c (PCF_Glyph_Load): Quickly exit if
- `FT_LOAD_BITMAP_METRICS_ONLY' is set.
-
- * src/pfr/pfrsbit.c, src/pfr/pfrsbit.h (pfr_slot_load_bitmap): Add
- argument to control allocation of the glyph slot.
- * src/pfr/pfrobjs (pfr_slot_load): Updated.
-
- * src/winfonts/winfnt.c (FNT_Load_Glyph): Ditto.
-
- * docs/CHANGES: Updated.
-
-2016-11-06 Werner Lemberg <wl@gnu.org>
-
- Synchronize with gnulib (#49448).
-
- * include/freetype/config/ftconfig.h, builds/unix/ftconfig.in,
- builds/vms/ftconfig.h (FT_TYPEOF): Update code to use definition in
- current version of `intprops.h'.
- Other minor synchronization to reduce code differences between the
- three files.
-
-2016-11-03 Behdad Esfahbod <behdad@behdad.org>
-
- [truetype] Clamp variation requests to valid range.
-
- This is required by OpenType 1.8; it also avoids rounding surprises.
-
- * src/truetype/ttgxvar.c (TT_Set_Var_Design): Clamp design coordinates
- outside of the allowed range to always stay within the range instead
- of producing an error.
-
-2016-10-29 Werner Lemberg <wl@gnu.org>
-
- [truetype] Remove clang warnings.
-
- * src/truetype/ttinterp.h (TT_ExecContextRec): Using `FT_ULong' for
- loop counter handling.
-
- * src/truetype/ttinterp.c: Updated.
- (Ins_SCANTYPE): Use signed constant.
- (TT_RunIns): Ensure `num_twilight_points' is 16bit.
-
-2016-10-27 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix commit from 2014-11-24.
-
- Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.
-
- * src/truetype/ttpload.c (tt_face_load_hdmx): Fix file checking
- logic.
-
-2016-10-26 Werner Lemberg <wl@gnu.org>
-
- Add `FT_Get_{MM,Var}_Blend_Coordinates' functions.
-
- * include/freetype/ftmm.h: Declare.
-
- * include/freetype/internal/services/svmm.h (FT_Get_MM_Blend_Func):
- New typedef.
- (MultiMasters): New MM service function `get_mm_blend'.
- (FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated.
- Update all callers.
-
- * src/base/ftmm.c (FT_Get_MM_Blend_Coordinates,
- FT_Get_Var_Blend_Coordinates): Implement.
-
- * src/truetype/ttdriver.c: Updated.
-
- * src/truetype/ttgxvar.c (TT_Get_MM_Blend): New function to handle
- `get_mm_blend' service.
- * src/truetype/ttgxvar.h: Updated.
-
- * src/type1/t1driver.c: Updated.
-
- * src/type1/t1load.c (T1_Get_MM_Blend): New function to handle
- `get_mm_blend' service.
- * src/type1/t1load.h: Updated.
-
- * docs/CHANGES: Document.
-
-2016-10-26 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_subrs): Fix limit check.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=81
-
-2016-10-25 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [cff] Correct cmap format reporting (#24819).
-
- * src/cff/cffdrivr.c (cff_get_cmap_info): Throw an error on synthetic
- charmap instead of guessing its format and language.
-
-2016-10-22 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix SCANTYPE instruction (#49394).
-
- * src/truetype/ttinterp.c (Ins_SCANTYPE): Only use lower 16bits.
-
-2016-10-22 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Improve handling of invalid post 2.5 tables [#49393].
-
- * src/sfnt/ttpost.c (load_format_25): We need at least a single
- table entry.
-
-2016-10-14 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix handling of `cvar' table data.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=53
-
- * src/truetype/ttgxvar.c (tt_face_vary_cvt): Ignore invalid CVT
- indices.
-
-2016-10-11 Werner Lemberg <wl@gnu.org>
-
- [psaux] Fix handling of invalid flex subrs.
-
- Problem reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=52
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
- <op_callothersubr>: Set `flex_state' after error checking.
-
-2016-10-11 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgxvar.c (tt_done_blend): Fix deallocation.
-
-2016-10-08 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidload.c (cid_face_open): Properly propagate `error'.
-
-2016-10-08 Werner Lemberg <wl@gnu.org>
-
- [cid] Fix parsing of subr offsets.
-
- Bug introduced 2016-05-16.
-
- * src/cid/cidparse.c (cid_parser_new): Fix off-by-one error.
-
-2016-10-01 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Disable bitmap strikes if we don't have a bitmap data table.
-
- * src/sfnt/ttsbit.c (tt_face_load_sbit): Check whether we have
- a bitmap data table.
-
-2016-10-01 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Remove impossibility.
-
- * src/smooth/ftgrays.c (TWorker): Rearrange fields.
- (gray_convert_glyph): Remove impossible condition and clean up.
-
-2016-09-29 Werner Lemberg <wl@gnu.org>
-
- [pcf] Enrich family name with foundry name and glyph width info.
-
- This is a very old patch from openSuSE (from 2006, submitted to
- FreeType in 2011) that I forgot to apply.
-
- https://build.opensuse.org/package/view_file/openSUSE:Factory/freetype2/freetype2-bitmap-foundry.patch
-
- Prepend the foundry name plus a space to the family name. There are
- many fonts just called `Fixed' which look completely different, and
- which have nothing to do with each other. When selecting `Fixed' in
- KDE or Gnome one gets results that appear rather random, the style
- changes often if one changes the size and one cannot select some
- fonts at all.
-
- We also check whether we have `wide' characters; all put together,
- we get family names like `Sony Fixed' or `Misc Fixed Wide'.
-
- * src/pcf/pcfread.c (pcf_load_font): Implement it.
-
- * docs/CHANGES: Document it.
-
-2016-09-29 Werner Lemberg <wl@gnu.org>
-
- [ftfuzzer] Speed up.
-
- * src/tools/ftfuzzer/ftfuzzer.cc (LLVMFuzzerTestOneInput): Don't
- check for embedded bitmaps if we have a non-default instance.
-
-2016-09-29 Werner Lemberg <wl@gnu.org>
-
- [truetype] Disallow bitmap strikes for non-default instances.
-
- Also speed up access of default instances if GX variations are
- active.
-
- * include/freetype/internal/tttypes.h (TT_FaceRec): Add
- `is_default_instance' member.
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Initialize
- `is_default_instance'.
-
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
- load_truetype_glyph): Add test for default instance.
- (TT_Load_Glyph): Load embedded bitmaps for default instance only.
-
- * src/truetype/ttgxvar.c (TT_Set_MM_Blend): Compute
- `is_default_instance'.
-
-2016-09-29 Werner Lemberg <wl@gnu.org>
-
- [truetype] Clean up `TT_Face' structure.
-
- * include/freetype/internal/tttypes.h (TT_FaceRec): Remove unused
- fields `horz_metrics' and `vert_metrics'.
- Update documentation.
-
- * src/sfnt/sfobjs.c (sfnt_done_face): Updated.
-
-2016-09-28 Werner Lemberg <wl@gnu.org>
-
- More FT_ZERO usage.
-
- * src/gxvalid/gxvcommn.c (gxv_ClassTable_validate):
- s/ft_memset/FT_MEM_ZERO/.
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings):
- s/ft_memset/FT_ARRAY_ZERO/.
-
- * src/raster/ftraster.c (FT_ZERO): Define.
- (ft_black_new): Use it.
- * src/raster/ftrend1.c (ft_raster1_get_cbox):
- s/FT_MEM_ZERO/FT_ZERO/.
-
- * src/smooth/ftgrays.c (FT_ZERO): Define.
- (gray_raster_new): Use it.
- * src/smooth/ftsmooth.c (ft_smooth_get_cbox):
- s/FT_MEM_ZERO/FT_ZERO/.
-
-2016-09-28 Werner Lemberg <wl@gnu.org>
-
- */*: s/FT_MEM_ZERO/FT_ZERO/ where appropriate.
-
-2016-09-27 Werner Lemberg <wl@gnu.org>
-
- [truetype] Trace number of executed opcodes.
-
- * src/truetype/ttinterp.c (TT_RunIns): Implement it.
-
-2016-09-27 Werner Lemberg <wl@gnu.org>
-
- [truetype] Speed up `TT_Load_Glyph'.
-
- This avoids additional calls to `tt_face_lookup_table' for the
- `glyf' table, which can be expensive.
-
- * include/freetype/internal/tttypes.h (TT_LoaderRec): Move
- `glyf_offset' field to ...
- (TT_FaceRec): ... this structure.
- * src/truetype/ttgload.c (load_truetype_glyph): Updated.
- (tt_loader_init): Move initialization of `glyf_offset' to ...
- * src/truetype/ttpload.c (tt_face_load_loca): ... this function.
-
-2016-09-27 Werner Lemberg <wl@gnu.org>
-
- [truetype] Introduce dynamic limits for some bytecode opcodes.
-
- This speeds up FreeType's handling of malformed fonts.
-
- * src/truetype/ttinterp.c (TT_RunIns): Set up limits for the number
- of twilight points, the total number of negative jumps, and the
- total number of loops in LOOPCALL opcodes. The values are based on
- the number of points and entries in the CVT table.
- (Ins_JMPR): Test negative jump counter.
- (Ins_LOOPCALL): Test loopcall counter.
-
- * src/truetype/ttinterp.h (TT_ExecContext): Updated.
-
- * docs/CHANGES: Updated.
-
-2016-09-25 Werner Lemberg <wl@gnu.org>
-
- [truetype] Sanitize only last entry of `loca' table.
-
- Without this patch, a loca sequence like `0 100000 0 100000 ...',
- where value 100000 is larger than the `glyf' table size, makes
- FreeType handle the whole `glyf' table as a single glyph again and
- again, which is certainly invalid (and can be very slow, too).
-
- * src/truetype/ttpload.c (tt_face_get_location): Implement.
- Improve tracing messages.
-
-2016-09-25 Werner Lemberg <wl@gnu.org>
-
- * src/tools/ftfuzzer/ftfuzzer.cc (LLVMFuzzerTestOneInput): Fix typo.
-
-2016-09-24 Werner Lemberg <wl@gnu.org>
-
- [autofit] Tracing fixes.
-
- * src/autofit/afmodule.c (af_autofitter_load_glyph): Call dumping
- functions only if we actually do tracing.
-
-2016-09-22 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Reduce divisions in the line renderer.
-
- We don't need some divisions if a line segments stays within a single
- row or a single column of pixels.
-
- * src/smooth/ftgrays.c (gray_render_line) [FT_LONG64]: Make divisions
- conditional.
-
-2016-09-15 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/smooth/ftgrays.c (gray_sweep): Remove check for empty table.
-
-2016-09-14 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Another tiny speed-up.
-
- * src/smooth/ftgrays.c (gray_find_cell): Merge into...
- (gray_record_cell): ... this function.
-
-2016-09-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/smooth/ftgrays.c (gray_{find,set}_cell): Remove dubious code.
-
-2016-09-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Fix valgrind warning and reoptimize.
-
- The algorithm calls `gray_set_cell' at the start of each new contour
- or when the contours cross the cell boundaries. Double-checking for
- that is wasteful.
-
- * src/smooth/ftgrays.c (gray_set_cell): Remove check for a new cell.
- (gray_convert_glyph): Remove initialization introduced by 44b172e88.
-
-2016-09-10 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix previous commit.
-
- Problems reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=40
-
- We now map the strike index right before accessing the physical
- data, not earlier.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Set `face->sbit_strike_map'
- after creating the map so that...
-
- * src/sfnt/ttsbit.c (tt_face_load_strike_metrics): ... this function
- can be used before and after setting up `sbit_strike_map'.
- (tt_face_set_sbit_strike): Revert change.
- (tt_sbit_decoder_init, tt_face_load_sbix_image): Map strike index.
-
- * src/truetype/ttdriver.c (tt_size_select): Revert change.
-
-2016-09-09 Werner Lemberg <wl@gnu.org>
-
- [ftfuzzer] Minor improvements.
-
- * src/tools/ftfuzzer/ftfuzzer.cc (LLVMFuzzerTestOneInput): Ignore
- invalid strikes.
- Use better values for call to `FT_Set_Char_Size'.
-
-2016-09-09 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Don't provide (completely) broken strike data.
-
- FreeType tries to sanitize strike header data; we now reject
- completely broken ones.
-
- * include/freetype/internal/tttypes.h (TT_FaceRec): New
- `sbit_strike_map' array pointer.
-
- * src/base/ftobjs.c (FT_Match_Size): Reject matches where either
- width or height would be zero.
- Add tracing message in case of error.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Populate `sbit_strike_map',
- only using (more or less) valid strike header data for
- FT_Face's `available_sizes' array.
- (sfnt_done_face): Updated.
-
- * src/sfnt/ttsbit.c (tt_face_set_sbit_strike): Use
- `sbit_strike_map'.
- (tt_face_load_strike_metrics): Improve tracing.
-
- * src/truetype/ttdriver.c (tt_size_select): Use `sbit_strike_map'.
-
-2016-09-08 Werner Lemberg <wl@gnu.org>
-
- * Version 2.7 released.
- =======================
-
-
- Tag sources with `VER-2-7'.
-
- * docs/VERSION.TXT: Add entry for version 2.7.
-
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/index.html,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualc/index.html,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj,
- builds/windows/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.6.5/2.7/, s/265/27/.
-
- * include/freetype/freetype.h (FREETYPE_MINOR): Set to 7.
- (FREETYPE_PATCH): Set to 0.
-
- * builds/unix/configure.raw (version_info): Set to 18:6:12.
- * CMakeLists.txt (VERSION_MINOR): Set to 7.
- (VERSION_PATCH): Set to 0.
-
- * docs/CHANGES: Updated.
-
-2016-09-08 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c: Include `ttgxvar.h'.
-
- This fixes the `multi' build.
-
-2016-09-08 Werner Lemberg <wl@gnu.org>
-
- [autofit] Another improvement to Armenian support.
-
- Suggested by Hrant H Papazian <hpapazian@gmail.com>.
-
- * src/autofit/afscript.h: Use better suited characters to derive
- default stem widths.
-
-2016-09-07 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/smooth/ftgrays.c (gray_hline): Micro-optimize.
-
-2016-09-06 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Operate in absolute bitmap coordinates.
-
- Simpler bitmap addressing improves performance by 1.5%.
-
- * src/smooth/ftgrays.c (gray_TWorker): Remove count fields.
- (gray_dump_cells, gray_find_cell, gray_set_cell, gray_hline,
- gray_sweep, gray_convert_glyph, gray_raster_render): Updated.
-
-2016-09-06 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Improve contour start (take 2).
-
- * src/smooth/ftgrays.c (gray_move_to): Call `gray_set_cell' directly
- instead of...
- (gray_start_cell): ... this function, which is removed.
- (gray_convert_glyph): Make initial y-coordinate invalid.
-
-2016-09-06 Werner Lemberg <wl@gnu.org>
-
- [type1] MM fonts support exactly zero named instances (#48748).
-
- * src/type1/t1load.c (T1_Get_MM_Var): Set `num_namedstyles' to zero.
-
-2016-09-06 Jonathan Kew <jfkthame@gmail.com>
-
- [cff] Fix uninitialized memory.
-
- Problem reported as
-
- https://bugzilla.mozilla.org/show_bug.cgi?id=1270288
-
- * src/cff/cf2interp.c (cf2_interpT2CharString): Initialize `storage'
- array to handle a `get' opcode without a previous `put'.
-
-2016-09-05 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/smooth/ftgrays.c (gray_move_to, gray_start_cell): Revert.
-
-2016-09-05 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Improve contour start.
-
- * src/smooth/ftgrays.c (gray_move_to): Call `gray_set_cell' directly
- instead of...
- (gray_start_cell): ... this function, which is removed.
-
-2016-09-05 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix memory initialization.
-
- * src/cff/cf2stack.c (cf2_stack_init): Use `FT_NEW'. The `Q'
- variants of FreeType's memory allocation macros don't do zeroing.
-
-2016-09-05 Werner Lemberg <wl@gnu.org>
-
- [ftrandom] Minor improvements.
-
- * src/tools/ftrandom/ftrandom.c (_XOPEN_SOURCE): New macro, set to
- 500.
-
- * src/tools/ftrandom/Makefile (CFLAGS): Split off include
- directories to ...
- (INCLUDES): ... this new variable.
- (LDFLAGS): New variable.
- (ftrandom.o, ftrandom): Updated.
-
-2016-09-05 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve Armenian support.
-
- Thanks to Hrant H Papazian <hpapazian@gmail.com> for help.
-
- * src/autofit/afblue.dat (AF_BLUE_STRING_ARMENIAN_*): Improve
- selection of characters.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
-2016-09-04 Werner Lemberg <wl@gnu.org>
-
- [ftrandom] Improve Makefile.
-
- It now supports both a normal build (`./configure && make') and a
- development build (`make devel').
-
- * src/tools/ftrandom/Makefile (VPATH): Set it so that
- `libfreetype.a' gets searched in both `objs' (for the development
- build) and `objs/.libs' (for a normal build which uses libtool).
- (LIBS): Add missing libraries.
- (ftrandom.o): New rule.
- (ftrandom): Use automatic variables.
-
-2016-09-03 Werner Lemberg <wl@gnu.org>
-
- [truetype] More fixes for handling of GX deltas.
-
- Problems reported by Bob Taylor <Bob.Taylor@monotype.com>.
-
- * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Fix rough
- sanity test for glyph variation array header size.
- Always set stream position before reading packed x and y deltas.
- Fix thinko w.r.t. `localpoints' array.
-
-2016-09-03 Werner Lemberg <wl@gnu.org>
-
- [ftrandom] Various fixes.
-
- * src/tools/ftrandom/ftrandom.c (GOOD_FONTS_DIR): Provide better
- default.
- (error_fraction): Make it of type `double' to work as advertized –
- this was completely broken.
- Update all related code.
- (error_count, fcnt): Make it unsigned to fix compiler warnings.
- Update all related code.
- (fontlist): Change `len' member to `long' to fix compiler warnings.
- (FT_MoveTo, FT_LineTo, FT_ConicTo, FT_CubicTo, abort_test): Tag
- unused variables.
- (TestFace, FindFonts, copyfont, do_test): Fix compiler warnings.
- (ExecuteTest): Ditto.
- Call `FT_Done_FreeType'.
- (getErrorCnt): Replace `ceil' with an ordinary cast to `unsigned
- int'.
- (usage): Improve output.
- (main): Fix compiler warnings.
-
- * src/tools/ftrandom/README: Updated.
-
-2016-09-03 Werner Lemberg <wl@gnu.org>
-
- [base] Avoid negative bitmap strike dimensions (#48985).
-
- * src/base/ftobjs.c (FT_Open_Face): Check whether negation was
- actually successful. For example, this can fail for value
- -32768 if the type is `signed short'. If there are problems,
- disable the strike.
-
-2016-09-03 Werner Lemberg <wl@gnu.org>
-
- [cff] Avoid null pointer passed to FT_MEM_COPY (#48984).
-
- * src/cff/cffload.c (cff_index_get_name): Check `byte_len'.
-
-2016-09-02 Werner Lemberg <wl@gnu.org>
-
- [unix] Enable 64bit support in file system access (#48962).
-
- * builds/unix/configure.raw: Call `AC_SYS_LARGEFILE'.
-
-2016-09-02 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Avoid left shift of negative value (#48980).
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bit_aligned): Use unsigned
- constant.
-
-2016-09-02 Werner Lemberg <wl@gnu.org>
-
- * src/smooth/ftgrays.c (gray_hline): Fix clang compiler warnings.
-
-2016-09-02 Werner Lemberg <wl@gnu.org>
-
- Some preparations for the next release.
-
- * include/freetype/config/ftoption.h
- (TT_CONFIG_OPTION_SUBPIXEL_HINTING): Enable.
-
- * docs/CHANGES: Updated.
-
-2016-09-01 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Simplify span rendering more.
-
- It turns out that there is significant cost associated with `FT_Span'
- creation and calls to `gray_render_span' because it happens so
- frequently. This removes these steps from our internal use but leaves
- it alone for `FT_RASTER_FLAG_DIRECT" to preserve API. The speed gain
- is about 5%.
-
- * src/smooth/ftgrays.c (gray_render_span): Removed. The code is
- migrated to...
- (gray_hline): ... here.
-
-2016-08-30 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Streamline pixmap drawing a bit more.
-
- Zero coverage is unlikely (1 out of 256) to warrant checking. This
- gives 0.5% speed improvement in rendering simple glyphs.
-
- * src/smooth/ftgrays.c (gray_hline, gray_render_span): Remove checks.
-
-2016-08-29 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Streamline pixmap drawing.
-
- This gives 2% speed improvement in rendering simple glyphs.
-
- * src/smooth/ftgrays.c (TPixmap): Reduced pixmap descriptor with a
- pointer to its bottom-left and pitch to be used in...
- (gray_TWorker): ... here.
- (gray_render_span): Move pixmap flow check from here...
- (gray_raster_render): .. to here.
-
-2016-08-27 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Reduce stack of band boundaries.
-
- * src/smooth/ftgrays.c (gray_TBand): Removed.
- (gray_convert_glyph): Updated to stack band boundaries concisely.
-
-2016-08-26 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidload.c (cid_face_open): Improve handling of `SDBytes'.
-
-2016-08-26 Werner Lemberg <wl@gnu.org>
-
- [cid] Fix commit from 2016-05-16.
-
- * src/cid/cidparse.c (cid_parser_new): Fix off-by-one errors.
-
-2016-08-26 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Cache offset and size to bitmap data table.
-
- This commit avoids `EBDT' and friends being looked up again and
- again while loading a single embedded bitmap.
-
- * include/freetype/internal/tttypes.h (TT_FaceRec)
- [TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: New fields `ebdt_start' and
- `ebdt_size'.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_init): Move table lookup to ...
- (tt_face_load_sbit): ... this function; also store the table size
- and offset.
-
-2016-08-26 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/smooth/ftgrays.c (gray_raster_render): Minor tweaks.
-
-2016-08-26 Werner Lemberg <wl@gnu.org>
-
- [type1] Fix heap buffer overflow.
-
- Reported as
-
- https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=36
-
- * src/type1/t1load.c (parse_charstrings): Reject fonts that don't
- contain glyph names.
-
-2016-08-25 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix previous commit (#48901).
-
- * src/sfnt/ttcmap.c (tt_cmap4_char_map_binary): Thinkos.
-
-2016-08-25 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Speed up handling of invalid format 4 cmaps.
-
- * src/sfnt/ttcmap.c (tt_cmap4_next, tt_cmap4_char_map_binary): Add
- tests for `num_glyph' from `tt_cmap4_char_map_linear'.
-
-2016-08-25 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/ftdriver.h: Remove unused typedefs.
-
-2016-08-22 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Simplify span rendering.
-
- This removes unnecessary complexity of span merging and buffering.
- Instead, the spans are rendered as they come, speeding up the
- rendering by about 5% as a result.
-
- * src/smooth/ftgrays.c [FT_MAX_GRAY_SPANS]: Macro removed.
- (gray_TWorker): Remove span buffer and related fields.
- (gray_sweep, gray_hline): Updated.
-
- * include/freetype/ftimage.h: Remove documentation note about
- `FT_MAX_GRAY_SPANS', which was never in `ftoption.h' and is now gone.
-
-2016-08-16 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix `MPS' instruction.
-
- According to Greg Hitchcock, MPS in DWrite really returns the point
- size.
-
- * src/truetype/ttobjs.h (TT_SizeRec): Add `point_size' member.
-
- * src/truetype/ttdriver.c (tt_size_request): Set `point_size'.
-
- * src/truetype/ttinterp.h (TT_ExecContextRec): Add `pointSize'
- member.
-
- * src/truetype/ttinterp.c (TT_Load_Context): Updated.
- (Ins_MPS): Fix instruction.
-
-2016-08-16 Werner Lemberg <wl@gnu.org>
-
- [lzw] Optimize last commit.
-
- * src/lzw/ftzopen.c (ft_lzwstate_get_code): Move check into
- conditional clause.
-
-2016-08-16 Werner Lemberg <wl@gnu.org>
-
- [lzw] Avoid invalid left shift.
-
- Reported as
-
- https://bugzilla.mozilla.org/show_bug.cgi?id=1295366
-
- * src/lzw/ftzopen.c (ft_lzwstate_get_code): Limit `num_bits'.
-
-2016-08-16 Werner Lemberg <wl@gnu.org>
-
- [lzw] Avoid buffer overrun.
-
- Reported as
-
- https://bugzilla.mozilla.org/show_bug.cgi?id=1273283
-
- * src/lzw/ftzopen.c (ft_lzwstate_refill): Ensure `buf_size' doesn't
- underflow.
-
-2016-08-16 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix compiler warning.
-
- * src/truetype/ttgload.c (load_truetype_glyph): Add cast.
-
-2016-08-13 Werner Lemberg <wl@gnu.org>
-
- [winfonts] Avoid zero bitmap width and height.
-
- Reported as
-
- https://bugzilla.mozilla.org/show_bug.cgi?id=1272173
-
- * src/winfonts/winfnt.c (FNT_Face_Init): Check zero pixel height.
- (FNT_Load_Glyph): Check for zero pitch.
-
-2016-08-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/truetype/ttinterp.c (Pop_Push_Count): Revert changes.
-
-2016-08-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/truetype/ttinterp.c (TT_RunIns): Minor and formatting.
-
-2016-08-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/truetype/ttinterp.c (Pop_Push_Count): Fix some entries.
-
-2016-08-10 Peter Klotz <Peter.Klotz@ith-icoserve.com>
-
- * src/smooth/ftgrays.c (gray_hline): Fix uninitialized access.
-
-2016-08-10 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Use correct type for `italicAngle' field (#48732).
-
- * src/sfnt/ttload.c (tt_face_load_post): Fix types.
-
-2016-08-06 Jon Spencer <jon@jonspencer.ca>
-
- [sfnt] Fix `FT_Get_Advance' for bitmap strikes.
-
- `FT_Get_Advance' returns 0 for bitmap fonts. It first gets the
- advance value from the font table and then scales it by the
- `font->size->metrics->x_scale' field. But `FT_Select_Size' doesn't
- set that value for bitmap fonts and the advance gets scaled to zero.
-
- Taken from
-
- https://github.com/behdad/harfbuzz/issues/252
-
- * src/sfnt/ttsbit.c (tt_face_load_strike_metrics)
- <TT_SBIT_TABLE_TYPE_EBLC>: Set scale values.
-
-2016-08-06 Behdad Esfahbod <behdad@behdad.org>
-
- [truetype] Fix GX variation handling of composites.
-
- * src/truetype/ttgload.c (load_truetype_glyph)
- [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Check `ARGS_ARE_XY_VALUES' flag.
-
-2016-08-05 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Minor refactoring.
-
- * src/smooth/ftgrays.c (gray_render_scanline, gray_render_line):
- Updated.
-
-2016-07-29 Werner Lemberg <wl@gnu.org>
-
- [sfnt, truetype] Don't abort on invalid `maxComponentDepth'.
-
- Since 2016-05-16 we detect infinite recursion directly.
-
- * src/sfnt/ttload.c (tt_face_load_maxp): Don't adjust
- `maxComponentDepth'.
- * src/truetype/ttgload.c (load_truetype_glyph): Don't abort if
- `maxComponentDepth' is not valid. Instead, simply adjust its value
- and emit a tracing message.
-
-2016-07-26 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Minor.
-
- No functional change.
-
-2016-07-22 Hin-Tak Leung <htl10@users.sourceforge.net>
-
- [truetype] Record the end of IDEFs.
-
- To match the logic in FDEF. The value of the end is only used for
- bound-checking in `Ins_JMPR', so it may not have been obvious that
- it was not recorded. Tested (as part of Font Validator 2.0) all the
- fonts on Fedora and did not see any change.
-
- * src/truetype/ttinterp.c (Ins_IDEF): Updated.
-
-2016-07-19 Werner Lemberg <wl@gnu.org>
-
- [truetype] Sanitizer fix, second try.
-
- * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Fix boundary
- tests and use only one slot more.
-
-2016-07-19 Werner Lemberg <wl@gnu.org>
-
- [truetype] Sanitizer fix.
-
- * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Increase array
- to fix nested loops.
-
-2016-07-18 Werner Lemberg <wl@gnu.org>
-
- [truetype] Make GETDATA work only for GX fonts.
-
- * src/truetype/ttinterp.c (opcode_name): Updated.
- (Ins_GETDATA): Only define for `TT_CONFIG_OPTION_GX_VAR_SUPPORT'.
- (TT_RunIns): Updated.
-
-2016-07-17 Werner Lemberg <wl@gnu.org>
-
- [truetype] Add support for Apple's
-
- GETDATA[], opcode 0x92
-
- bytecode instruction. It always returns 17, and we have absolutely
- no idea what it is good for...
-
- * src/truetype/ttinterp.c (Pop_Push_Count, opcode_name): Updated.
- (Ins_GETDATA): New function.
- (TT_RunIns): Add it.
-
-2016-07-16 Werner Lemberg <wl@gnu.org>
-
- [truetype] Add bytecode support for GX variation fonts.
-
- This commit implements undocumented (but confirmed) stuff from
- Apple's old bytecode engine.
-
- GETVARIATION[], opcode 0x91
- This opcode pushes normalized variation coordinates for all axes
- onto the stack (in 2.14 format). Coordinate of first axis gets
- pushed first.
-
- GETINFO[], selector bit 3
- If GX variation support is enabled, bit 10 of the result is set
- to 1.
-
- * src/truetype/ttinterp.c: Include FT_MULTIPLE_MASTERS_H.
- (opcode_name) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Updated.
- (Ins_GETINFO) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Handle selector
- bit 3, checking support for variation glyph hinting.
- (Ins_GETVARIATION) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: New function
- to implement opcode 0x91.
- (TT_RunIns) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Handle opcode 0x91.
-
-2016-07-16 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix GETINFO bytecode instruction.
-
- * src/truetype/ttinterp.c (Ins_GETINFO): Fix return value for
- stretching information.
-
-2016-07-16 Behdad Esfahbod <behdad@behdad.org>
-
- [truetype] Make all glyphs in `Zycon' GX font work.
-
- * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Fix boundary
- tests.
-
-2016-07-16 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix GX delta tracing.
-
- * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Trace
- relative point movements.
-
-2016-07-16 Behdad Esfahbod <behdad@behdad.org>
-
- [truetype] More fixes for GX.
-
- This finally fixes the rendering of the cyclist and the lizard in
- the `Zycon' font.
-
- * src/truetype/ttgxvar.c (ft_var_readpackedpoints): `first' point
- index is always cumulative.
-
- (tt_handle_deltas): Rename to...
- (tt_interpolate_deltas): ... This.
- Add new parameter for output point array.
- Update caller.
-
- (TT_Vary_Apply_Glyph_Deltas): Add `points_out' array; it now holds
- the intermediate results of `tt_interpolate_deltas' that are to be
- added to `outline->points'.
-
-2016-07-15 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/aflatin.c (af_latin_hints_compute_segments): Thinko.
-
- `max_pos' is always larger than `min_pos' so `FT_ABS' is not needed.
-
- Reported by Alexei.
-
-2016-07-16 Nikolaus Waxweiler <madigens@gmail.com>
-
- * src/truetype/ttinterp.c (Ins_MIRP): Fix copy-and-paste error.
-
- Problem reported by Hin-Tak Leung.
-
-2016-07-15 Werner Lemberg <wl@gnu.org>
-
- [autofit] Update and improve segment and edge tracing.
-
- * src/autofit/afhints.c (af_glyph_hints_dump_segments): Trace
- `delta' also.
- Don't show first point of segment as a replacement for `pos'; this
- is (a) misleading, since the difference to `pos' can be almost
- arbitrarily large in corner cases, and (b) it is better to have all
- segment data in font units instead of a single value given in output
- space coordinates.
- Improve layout.
- (af_glyph_hints_dump_edges): Show px->units and units->px conversion
- values for convenience.
- Improve layout.
-
-2016-07-15 Werner Lemberg <wl@gnu.org>
-
- [autofit] For edges, reject segments wider than 1px (#41334).
-
- * src/autofit/afhints.h (AF_SegmentRec): New member `delta'.
-
- * src/autofit/aflatin.c (af_latin_hints_compute_segments): Compute
- `delta'.
- (af_latin_hints_compute_edges): Reject segments with a delta larger
- than 0.5px.
-
-2016-07-14 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/freetype.h (FT_IS_NAMED_INSTANCE): New macro.
-
-2016-07-14 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix `face_index' value in `FT_Face' for named instances.
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Don't strip off higher 16bits.
-
-2016-07-14 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Fix tracing.
-
-2016-07-14 Behdad Esfahbod <behdad@behdad.org>
-
- [truetype] Fix gxvar delta interpolation.
-
- The coordinates of the base font should be used for interpolation
- purposes, NOT the current points (i.e., the result of accumulation
- of previous deltas).
-
- * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Initialize
- `points_org' before looping over all tuples.
-
-
-----------------------------------------------------------------------------
-
-Copyright 2016-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used, modified,
-and distributed under the terms of the FreeType project license,
-LICENSE.TXT. By continuing to use, modify, or distribute this file you
-indicate that you have read the license and understand and accept it
-fully.
-
-
-Local Variables:
-version-control: never
-coding: utf-8
-End:
diff --git a/ChangeLog.20 b/ChangeLog.20
deleted file mode 100644
index 11376e863..000000000
--- a/ChangeLog.20
+++ /dev/null
@@ -1,2613 +0,0 @@
-2002-02-09 Werner Lemberg <wl@gnu.org>
-
- * README: Fix typo.
- * docs/CHANGES: Minor fixes.
-
-
- * Version 2.0.8 released.
- =========================
-
-
-2002-02-08 David Turner <david@freetype.org>
-
- * docs/CHANGES: Updating for 2.0.8.
-
- * include/freetype/freetype.h: Setting `PATCH_LEVEL' to 8 and
- removing `FT_Get_Next_Char' from the API (temporarily).
-
- * include/freetype/freetype.h: Adding comments to FT_Get_Next_Char;
- note that this function might temporarily be removed for the 2.0.8
- release.
-
-2002-02-07 David Turner <david@freetype.org>
-
- * src/pcf/pcfread.c (pcf_load_font): Removed immature support of
- the AVERAGE_WIDTH property.
-
-2002-02-06 David Turner <david@freetype.org>
-
- * src/sfnt/sfobjs.c (SFNT_Load_Face): Since many fonts embedded in
- PDF documents do not include 'cmap', 'post' and 'name' tables, the
- SFNT face loader has been changed to not immediately report an
- error if these are not present.
-
- Note that the specification _requires_ these tables, but Adobe
- seems to ignore it completely.
-
- * src/sfnt/ttcmap.c: Removing compiler warnings.
-
- * src/pcf/pcfread.c (pcf_read_TOC): Use FT_UInt.
- (pcf_parse_metric, pcf_parse_compressed_metric): Removed. Code
- is now in ...
- (pcf_get_metric): Here.
- (pcfSeekToType): Renamed to ...
- (pcf_seek_to_table_type): This.
- Use FT_Int.
- (pcfHasType): Renamed to ...
- (pcf_has_table_type): This.
- Use FT_Int.
- (find_property): Renamed to ...
- (pcf_find_property): This.
- Use FT_Int.
- (pcf_get_bitmaps, pcf_get_encodings): Handle invalid PCF fonts
- better (delaying format checks out of FT_Access_Frame ..
- FT_Forget_Frame blocks to avoid leaving the stream in an incorrect
- state when encountering an invalid PCF font).
-
- * src/pcf/pcfdriver.c (PCF_Done_Face): Renamed to ...
- (PCF_Face_Done): This.
- (PCF_Init_Face): Renamed to ...
- (PCF_Face_Init): This.
- (PCF_Get_Char_Index): Renamed to ...
- (PCF_Char_Get_Index): This.
- (PCF_Get_Next_Char): Renamed to ...
- (PCF_Char_Get_Next): This.
- (pcf_driver_class): Updated.
-
- * src/pcf/pcf.h (PCF_Done_Face): Removed.
-
-2002-02-06 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * src/pcf/pcfdriver.c (FT_Done_Face): Fixed small memory leak.
-
- * src/pcf/pcfread.c (pcf_load_font): Now handles the `AVERAGE_WIDTH'
- property to return correct character pixel (width/height) pairs for
- embedded bitmaps.
-
-2002-02-04 Keith Packard <keithp@keithp.com>
-
- Adding the function `FT_Get_Next_Char', doing the obvious thing
- w.r.t. the selected charmap.
-
- * include/freetype/freetype.h: Add prototype.
- * include/freetype/internal/ftdriver.h: Add `FTDriver_getNextChar'
- typedef.
- (FT_Driver_Class): Use it.
- * include/freetype/internal/psnames.h: Add `PS_Next_Unicode_Func'
- typedef.
- (PSNames_Interface): Use it.
- * include/freetype/internal/tttypes.h: Add `TT_CharNext_Func'
- typedef.
- (TT_CMapTable): Use it.
-
- * src/base/ftobjs.c (FT_Get_Next_Char): New function, implementing
- high-level API.
- * src/cff/cffdrivr.c (cff_get_next_char): New function.
- (cff_driver_class): Add it.
- * src/cid/cidriver.c (Cid_Get_Next_Char): New function.
- (t1cid_driver_class): Add it.
- * src/pcf/pcfdriver.c (PCF_Get_Next_Char): New function.
- (pcf_driver_class): Add it.
- * src/psnames/psmodule.c (PS_Next_Unicode): New function.
- (psnames_interface): Add it.
- * src/sfnt/ttcmap.c (code_to_next0, code_to_next2, code_to_next4,
- code_to_next6, code_to_next_8_12, code_to_next_10): New auxiliary
- functions.
- (TT_CharMap_Load): Use them.
- * src/truetype/ttdriver.c (Get_Next_Char): New function.
- (tt_driver_class): Add it.
- * src/type1/t1driver.c (Get_Next_Char): New function.
- (t1_driver_class): Add it.
- * src/winfonts/winfnt.c (FNT_Get_Next_Char): New function.
- (winfnt_driver_class): Add it.
-
- * src/pcf/pcfread.c (pcf_load_font): For now, report Unicode for
- Unicode and Latin 1 encodings.
-
-2002-02-02 Keith Packard <keithp@keithp.com>
-
- * builds/unix/freetype-config.in: Add missing `fi'.
-
-
- * Version 2.0.7 released.
- =========================
-
-
-2002-02-01 David Turner <david@freetype.org>
-
- * include/freetype/freetype.h: Increasing FREETYPE_PATCH to 7
- for the new release.
-
-2002-01-31 David Turner <david@freetype.org>
-
- * README, README.UNX, docs/CHANGES: Updating documentation for the
- 2.0.7 release.
-
-2002-01-30 David Turner <david@freetype.org>
-
- * INSTALL: Moved to ...
- * docs/INSTALL: Here to avoid conflicts with the `install' script on
- Windows, where the filesystem doesn't preserve case.
-
-2002-01-29 David Turner <david@freetype.org>
-
- * configure: Fixed the script. It previously didn't accept more
- than one argument correctly. For example, when typing:
-
- ./configure --disable-shared --disable-nls
-
- the `--disable-nls' was incorrectly sent to the `make' program.
-
-2002-01-29 Werner Lemberg <wl@gnu.org>
-
- * README.UNX: Fix typo.
- * builds/unix/install.mk (uninstall): Fix library name for libtool.
-
-2002-01-28 Francesco Zappa Nardelli <Francesco.Zappa.Nardelli@ens.fr>
-
- * src/pcf/pcfdriver.c (PCF_Done_Face): Fix incorrect destruction of
- the face object (face->toc.tables, face->root.family_name,
- face->root.available_size, face->charset_encoding,
- face->charset_registry are now freed). Thanks to Niels Moseley.
-
-2002-01-28 Roberto Alameda <ojancano@geekmail.de>
-
- * src/type1/t1load.c (parse_encoding): Set `loader->num_chars'.
-
-2002-01-28 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_subrs, parse_charstrings): Use copy
- of `base' string for decrypting to not modify the original data.
- Based on a patch by Jakub Bogusz <qboosh@pld.org.pl>.
-
-2002-01-27 Giuliano Pochini <pochini@shiny.it>
-
- * src/smooth/ftgrays.c (gray_render_scanline): Fix bug which caused
- bad rendering of thin lines (less than one pixel thick).
-
-2002-01-25 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffdrivr.c (cff_get_name_index): Make last patch work
- actually.
-
-2002-01-25 Martin Zinser <zinser@decus.de>
-
- * src/cache/ftccache.c (ftc_node_done, ftc_node_destroy): Fix
- compilation warnings.
- * src/base/descrip.mms (OBJS): Add `ftmm.obj'.
- * src/cache/descrip.mms (ftcache.obj): Dependencies added.
-
-2002-01-25 WANG Yi <wangyi@founder.com.cn>
-
- * src/cff/cffdrivr.c (cff_get_name_index): Fix deallocation bug.
-
-2002-01-21 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
-
- * docs/PATENTS: Typo fixed (thanks to Detlef `Hawkeye' Würkner) in
- the URL for the online resource.
-
-2002-01-18 Ian Brown <ian.brown@printsoft.de>
-
- * builds/win32/ftdebug.c: New file.
- * builds/win32/visualc/freetype.dsp: Updated.
-
-2002-01-18 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * builds/amiga/src/base/ftsystem.c: Updated for AmigaOS 3.9.
- * builds/amiga/README: Updated.
-
-2002-01-18 Ian Brown <ian.brown@printsoft.de>
-
- * builds/win32/visualc/freetype.dsp: Updated.
-
-2002-01-13 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/freetype2.a4: The script was still buggy.
- * builds/unix/freetype-config.in: Make it really work for any install
- prefix.
-
-2002-01-10 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/freetype2.a4: Fix some serious bugs.
-
-2002-01-09 David Turner <david@freetype.org>
-
- * builds/unix/configure.ac: Build top-level Jamfile.
-
-2002-01-09 Maxim Shemanarev <mcseemagg@yahoo.com>
-
- * src/smooth/ftgrays.c (gray_render_line): Small optimization to
- the smooth anti-aliased renderer that deals with vertical segments.
- This results in a 5-7% speedup in rendering speed.
-
-2002-01-08 David Turner <david@freetype.org>
-
- Added some wrapper scripts to make the installation more
- Unix-friendly.
-
- * configure, install: New files.
-
- * INSTALL, README.UNX: Updated installation documentation to use the
- new 'configure' and 'install' scripts.
-
-2002-01-07 David Turner <david@freetype.org>
-
-
- * Version 2.0.6 released.
- =========================
-
-
- * docs/BUGS, docs/CHANGES: Updating documentation for 2.0.6 release.
-
- * src/tools/docmaker.py: Fixed HTML quoting in sources.
- (html_format): Replaced with ...
- (html_quote): New function.
- (html_quote0): New function.
- (DocCode::dump_html): Small improvement.
- (DocParagraph::dump, DocBlock::html): Use html_quote0 and html_quote.
-
- * include/freetype/config/ftoption.h: Setting default options for
- a release build (debugging off, bytecode interpreter off).
-
- * src/base/ftobjs.c, src/base/ftoutln.c, src/cache/ftccmap.c,
- src/cff/cffload.c, src/cff/cffobjs.c, src/pshinter/pshalgo2.c,
- src/sfnt/ttload.c, src/sfnt/ttsbit.c: Removing small compiler
- warnings (in pedantic compilation modes).
-
-2002-01-05 David Turner <david@freetype.org>
-
- * src/autohint/ahhint.c (ah_align_linked_edge): Modified computation
- of auto-hinted stem widths; this avoids color fringes in
- `ClearType-like' rendering.
-
- * src/truetype/ttgload.c (TT_Load_Glyph_Header,
- TT_Load_Simple_Glyph, TT_Load_Composite_Glyph, load_truetype_glyph):
- Modified the TrueType loader to make it more paranoid; this avoids
- nasty buffer overflows in the case of invalid glyph data (as
- encountered in the output of some buggy font converters).
-
-2002-01-04 David Turner <david@freetype.org>
-
- * README.UNX: Added special README file for Unix users.
-
- * builds/unix/ftsystem.c (FT_New_Stream): Fixed typo.
-
- * src/base/ftobjs.c: Added #include FT_OUTLINE_H to get rid
- of compiler warnings.
-
- * src/base/ftoutln.c (FT_Outline_Check): Remove compiler warning.
-
-2002-01-03 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1objs.c (T1_Face_Init): Add cast to avoid compiler
- warning.
-
-2002-01-03 Keith Packard <keithp@keithp.com>
-
- * builds/unix/ftsystem.c (FT_New_Stream): Added a fix to ensure that
- all FreeType input streams are closed in child processes of a `fork'
- on Unix systems. This is important to avoid (potential) access
- control issues.
-
-2002-01-03 David Turner <david@freetype.org>
-
- * src/type1/t1objs.c (T1_Face_Init): Fixed a bug that crashed the
- library when dealing with certain weird fonts like `Stalingrad', in
- `sadn.pfb' (this font has no full font name entry).
-
- * src/base/ftoutln.c, include/freetype/ftoutln.h (FT_Outline_Check):
- New function to check the consistency of outline data.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Use `FT_Outline_Check' to
- ensure that loaded glyphs are valid. This allows certain fonts like
- `tt1095m_.ttf' to be loaded even though it appears they contain
- really funky glyphs.
-
- There still is a bug there, though.
-
- * src/truetype/ttgload.c (load_truetype_glyph): Fix error condition.
-
-2001-12-30 David Turner <david@freetype.org>
-
- * src/autohint/ahhint.c (ah_hinter_load): Fix advance width
- computation of auto-hinted glyphs. This noticeably improves the
- spacing of letters in KDE and Gnome.
-
-2001-12-25 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
-
- * builds/dos/detect.mk: Correcting the order for Borland compilers:
- 16-bit bcc was never selected, always overridden by 32-bit bcc32.
-
-2001-12-22 Francesco Zappa Nardelli <Francesco.Zappa.Nardelli@ens.fr>
-
- * src/pcf/pcfread.c (pcf_load_font): Handle property `POINT_SIZE'
- and fix incorrect computation of `available_sizes'.
-
-2001-12-22 David Turner <david@freetype.org>
-
- * src/autohint/ahhint.c (ah_hinter_load): Auto-hinted glyphs had an
- incorrect glyph advance in the case of mono-width fonts (like
- Courier, Andale Mono, and others).
-
-2001-12-22 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * builds/amiga/*: Adaptations to latest changes.
- Support added for MorphOS.
-
-2001-12-22 Werner Lemberg <wl@gnu.org>
-
- * src/pshinter/pshrec.c (FT_COMPONENT): Redefine to `trace_pshrec'.
- (ps_mask_table_merge, ps_hints_open, ps_hints_stem,
- ps_hints_t1stem3, ps_hints_t2mask, ps_hints_t2counter): Fix
- FT_ERROR messages.
- * src/pshinter/pshalgo1.c (FT_COMPONENT): Define as
- `trace_pshalgo1'.
- * src/pshinter/pshalgo2.c (FT_COMPONENT): Define as
- `trace_pshalgo2'.
- * include/freetype/internal/ftdebug.h (FT_Trace): Updated.
-
- * docs/modules.txt: New file.
-
-2001-12-21 David Turner <david@freetype.org>
-
- * src/pshinter/pshrec.c (ps_hints_t2mask, ps_hints_t2counter):
- Ignore invalid `hintmask' and `cntrmask' operators (instead of
- returning an error). Glyph 2028 of the CFF font `MSung-Light-Acro'
- couldn't be rendered otherwise (it seems its charstring is buggy,
- though this requires more analysis).
- (FT_COMPONENT): Define.
-
- * src/cff/cffgload.c (CFF_Parse_CharStrings), src/psaux/t1decode.c
- (T1_Decoder_Parse_Charstrings), src/pshinter/pshalgo2.c (*), Fixed a
- bug where the X and Y axis where inverted in the postscript hinter.
- This caused problem when displaying on non-square surfaces.
-
- * src/pshinter/pshalgo2.c: s/vertical/dimension/.
-
- * src/pshinter/pshglob.c (psh_globals_new): Replaced a floating
- point constant with a fixed-float equivalent. For some reasons not
- all compilers are capable of directly computing a floating pointer
- constant casted to FT_Fixed, and will link a math library instead.
-
-2001-12-20 Werner Lemberg <wl@gnu.org>
-
- * src/cache/ftccache.c (ftc_node_destroy, ftc_cache_lookup): Fix
- tracing strings.
- * src/cache/ftccmap.c (ftc_cmap_family_init): Ditto.
- * src/cache/ftcmanag.c (ftc_family_table_alloc,
- ftc_family_table_free, FTC_Manager_Check): Ditto.
- * src/cache/ftcsbits.c (ftc_sbit_node_load): Ditto.
-
- * src/base/ftobjs.c (FT_Done_Library): Remove compiler warning.
-
-2001-12-20 David Turner <david@freetype.org>
-
- Added PostScript hinter support to the CFF and CID drivers.
-
- * include/freetype/internal/cfftypes.h (CFF_Font): New member
- `pshinter'.
- * src/cff/cffload.c (CFF_Get_Standard_Encoding): New function.
- * src/cff/cffload.h: Updated.
- * src/cff/cffgload.c (CFF_Init_Builder): Renamed to ...
- (CFF_Builder_Init): This.
- Added new argument `hinting'.
- (CFF_Done_Builder): Renamed to ...
- (CFF_Builder_Done): This.
- (CFF_Init_Decoder): Added new argument `hinting'.
- (CFF_Parse_CharStrings): Implement vstem support.
- (CFF_Load_Glyph): Updated.
- Add hinting support.
- (cff_lookup_glyph_by_stdcharcode): Use CFF_Get_Standard_Encoding().
- (cff_argument_counts): Updated.
- * src/cff/cffgload.h: Updated.
- * src/cff/cffobjs.c: Include FT_INTERNAL_POSTSCRIPT_HINTS_H.
- (CFF_Size_Get_Globals_Funcs, CFF_Size_Done, CFF_Size_Init,
- CFF_Size_Reset, CFF_GlyphSlot_Done, CFF_GlyphSlot_Init): New
- functions.
- (CFF_Init_Face): Renamed to ...
- (CFF_Face_Init): This.
- Add hinter support.
- (CFF_Done_Face): Renamed to ...
- (CFF_Face_Done): This.
- (CFF_Init_Driver): Renamed to ...
- (CFF_Driver_Init): This.
- (CFF_Done_Driver): Renamed to ...
- (CFF_Driver_Done): This.
- * src/cff/cffobjs.h: Updated.
- * src/cff/cffdrivr.c (cff_driver_class): Updated.
-
- * include/freetype/internal/t1types.h (CID_FaceRec): New member
- `pshinter'.
- * src/cid/cidgload.c (CID_Load_Glyph): Add hinter support.
- * src/cid/cidobjs.c: Include FT_INTERNAL_POSTSCRIPT_HINTS_H.
- (CID_GlyphSlot_Done, CID_GlyphSlot_Init, CID_Size_Get_Globals_Funcs,
- CID_Size_Done, CID_Size_Init, CID_Size_Reset): New functions.
- (CID_Done_Face): Renamed to ...
- (CID_Face_Done): This.
- (CID_Init_Face): Renamed to ...
- (CID_Face_Init): This.
- Add hinting support.
- (CID_Init_Driver): Renamed to ...
- (CID_Driver_Init): This.
- (CID_Done_Driver): Renamed to ...
- (CID_Driver_Done): This.
- * src/cid/cidobjs.h: Updated.
- * src/cidriver.c: Updated.
-
- * src/pshinter/pshrec.c (t2_hint_stems): Fixed.
-
- * src/base/ftobjs.c (FT_Done_Library): Fixed a stupid bug that
- crashed the library on exit.
-
- * src/type1/t1gload.c (T1_Load_Glyph): Enable font matrix
- transformation of hinted glyphs.
-
- * src/cid/cidload.c (cid_read_subrs): Fix error condition.
-
- * src/cid/cidobjs.c (CID_Face_Done): Fixed a memory leak; the subrs
- routines were never released when CID faces were destroyed.
-
- * src/cff/cffload.h, src/cff/cffload.c, src/cff/cffgload.c: Updated
- to move the definition of encoding tables back within `cffload.c'
- instead of making them part of a shared header (causing problems in
- `multi' builds). This reverts change 2001-08-08.
-
- * docs/CHANGES: Updated for 2.0.6 release.
- * docs/TODO: Added `stem3 and counter hints support' to the TODO
- list for the Postscript hinter.
- * docs/BUGS: Closed the AUTOHINT-NO-SBITS bug.
-
-2001-12-19 David Turner <david@freetype.org>
-
- * include/freetype/cache/ftcache.h: Added comments to indicate that
- some of the exported functions should only be used by applications
- that need to implement custom cache types.
-
- * src/truetype/ttgload.c (cur_to_org, org_to_cur): Fixed a nasty bug
- that prevented composites from loading correctly, due to missing
- parentheses around macro parameters.
-
- * src/sfnt/sfobjs.c (SFNT_Load_Face): Make the `post' and `name'
- tables optional to load PCL fonts properly.
-
- * src/truetype/ttgload.c (TT_Load_Glyph), src/base/ftobjs.c
- (FT_Load_Glyph), include/freetype/freetype.h (FT_LOAD_SBITS_ONLY):
- `Fixed' the bug that prevented embedded bitmaps to be loaded when
- the auto-hinter is used. This actually is a hack but will be enough
- until the internal re-design scheduled for FreeType 2.1.
-
- * src/raster/ftrend1.c (ft_raster1_render): Fixed a nasty outline
- shifting bug in the monochrome renderer.
-
- * README: Updated version numbers to 2.0.6.
-
-2001-12-17 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (load_truetype_glyph): Fix test for invalid
- glyph header.
-
-2001-12-15 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Remove compiler warning.
- * include/freetype/ftcache.h (FTC_Node_Unref): Removed. It is
- already in ftcmanag.h.
- * src/cache/ftcsbits.c (ftc_sbit_node_load): Remove unused variable
- `gfam'.
- * src/cache/ftcmanag.c (ftc_family_table_alloc,
- * ftc_family_table_free): Use FT_EXPORT_DEF.
- * include/freetype/cache/ftcmanag.h: Updated.
- * src/cache/ftccache.c (ftc_node_destroy): Use FT_EXPORT_DEF.
- * src/cache/ftccmap.c (ftc_cmap_node_init): Remove unused variable
- `cfam'.
- Remove compiler warning.
- (FTC_CMapCache_Lookup): Remove compiler warnings.
- (ftc_cmap_family_init): Ditto.
- (FTC_CMapCache_Lookup): Ditto.
-
- * builds/unix/configure.ac: Increase `version_info' to 8:0:2.
- * builds/unix/configure: Regenerated.
-
-2001-12-14 Werner Lemberg <wl@gnu.org>
-
- * builds/mac/README: Updated.
-
-2001-12-14 Scott Long <scott@swiftview.com>
-
- * src/truetype/ttgload.c (load_truetype_glyph): Fixing crash when
- dealing with invalid fonts (i.e. glyph size < 10 bytes).
-
-2001-12-14 Sam Latinga <slouken@devolution.com>
-
- * builds/mac/freetype.make: A new Makefile to build with MPW on
- MacOS classic.
-
-2001-12-14 David Turner <david@freetype.org>
-
- * src/truetype/ttgload.c (TT_Load_Glyph), src/type1/t1gload.c
- (T1_Load_Glyph), src/cid/cidgload.c (CID_Load_Glyph),
- src/cff/cffgload.c (CFF_Load_Glyph): Fixed a serious bug common to
- all font drivers (the advance width was never hinted when it
- should).
-
- * include/freetype/freetype.h (FREETYPE_PATCH): New macro.
- * src/base/ftdbgmem.c (debug_mem_dummy) [!FT_DEBUG_MEMORY]: Don't
- use `extern' keyword.
-
-2001-12-12 David Turner <david@freetype.org>
-
- * src/pshinter/pshglob.c (psh_blues_scale_zones, psh_blues_snap_stem
- psh_globals_new): Adding correct BlueScale/BlueShift support, plus
- family blues processing.
- * src/pshinter/pshglob.h (PSH_BluesRec): Updated.
-
- Started adding support for the Postscript hinter in the CFF module.
-
- * src/cff/cffgload.c: Include FT_INTERNAL_POSTSCRIPT_HINTS_H.
- (CFF_Parse_CharStrings): Implement it.
- * src/cff/cffgload.h: Updated.
-
-2001-12-12 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/freetype2.m4: Some portability fixes.
-
-2001-12-11 Jouk Jansen <joukj@hrem.stm.tudelft.nl>
-
- * src/base/descrip.mms (OBJS): Add ftdebug.obj.
-
-2001-12-11 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttload.c (TT_Load_Generic_Header): Typos.
-
-2001-12-11 David Turner <david@freetype.org>
-
- * builds/unix/freetype-config.in: Modified the script to prevent
- passing `-L/usr/lib' to gcc.
-
- * docs/FTL.TXT: Simple fix (change `LICENSE.TXT' to `FTL.TXT').
-
- * builds/unix/freetype2.m4: New file for checking configure paths.
- We need to install it in $(prefix)/share/aclocal/freetype2.m4 but I
- didn't modify builds/unix/install.mk yet.
-
- * INSTALL: Updated the instructions to build shared libraries with
- Jam. They were simply wrong.
-
- * src/base/fttrigon.c (FT_Cos): Fixed a small bug that caused
- slightly improper results for `FT_Cos' and `FT_Sin' (example:
- FT_Sin(0) == -1!).
-
-2001-12-11 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * include/freetype/internal/ftstream.h (GET_LongLE, GET_ULongLE):
- Fixed incorrect argument types.
-
-2001-12-10 Francesco Zappa Nardelli <Francesco.Zappa.Nardelli@ens.fr>
-
- * src/pcf/pcfdriver.c (PCF_Init_Face): Allow Xft to use PCF fonts
- by setting the `face->metrics.max_advance' correctly.
-
-2001-12-07 David Turner <david@freetype.org>
-
- * include/freetype/cache/ftccmap.h, src/cache/ftccmap.c: Added new
- charmap cache.
- * src/cache/ftcache.c: Updated.
-
- * src/autohint/ahhint.c (ah_hinter_hint_edges): s/UNUSED/FT_UNUSED/.
-
-2001-12-06 Leonard Rosenthol <leonardr@lazerware.com>
-
- Added support for reading .dfont files on Mac OS X. Also added a
- new routine which looks up a given font by name in the Mac OS and
- returns the disk file where it resides.
-
- * src/base/ftmac.c: Include <Files.h> and <TextUtils.h>.
- (is_dfont): New auxiliary function.
- (FT_New_Face_From_dfont): New function.
- (FT_GetFile_From_Mac_Name): New exported function.
- (FT_New_Face): Updated.
- * include/freetype/ftmac.h: Updated.
-
-2001-12-06 David Turner <david@freetype.org>
-
- * src/cache/Jamfile, src/cache/rules.mk: Updated.
-
-2001-12-06 Werner Lemberg <wl@gnu.org>
-
- * INSTALL: Small update.
-
-2001-12-05 David Turner <david@freetype.org>
-
- * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Re-ordered code for
- debugging purposes.
- Comment out use of `origin'.
-
- * src/smooth/ftsmooth.c (ft_smooth_render): Fixed a nasty hidden bug
- where outline shifting wasn't correctly undone after bitmap
- rasterization. This created problems with certain glyphs (like '"'
- of certain fonts) and the cache system.
-
- * src/pshinter/pshalgo1.c (psh1_hint_table_init): Fix typo.
- * src/pshinter/pshalgo2.c (psh2_hint_table_init): Fix typo.
- (ps2_hints_apply): Small fix.
-
-2001-12-05 David Turner <david@freetype.org>
-
- * src/pshinter/pshalgo2.c (psh2_hint_table_init),
- src/pshinter/pshalgo1.c (psh1_hint_table_init): Removed compiler
- warnings.
-
- * include/freetype/ftcache.h, include/freetype/cache/*, src/cache/*:
- Yet another massive rewrite of the caching sub-system in order to
- both increase performance and allow simpler cache sub-classing. As
- an example, the code for the image and sbit caches is now much
- simpler.
-
- I still need to update the documentation in
- www/freetype2/docs/cache.html to reflect the new design though.
-
- * include/freetype/config/ftheader.h (FT_CACHE_CHARMAP_H): New
- macro.
- (FT_CACHE_INTERNAL_CACHE_H): Updated.
-
-2001-12-05 David Krause <freetype@davidkrause.com>
-
- * docs/license.txt: s/X Windows/X Window System/.
-
-2001-12-04 Werner Lemberg <wl@gnu.org>
-
- * src/raster/ftraster.c: Fix definition condition of MEM_Set().
- * src/smooth/ftgrays.c (M_Y): Change value to 192.
- * src/base/ftdbgmem.c (ft_mem_table_destroy): Fix printf() parameter.
- Remove unused variable.
- * src/cache/ftcimage.c (ftc_image_node_init,
- ftc_image_node_compare): Remove unused variables.
- * src/cache/ftcsbits.c (ftc_sbit_node_weight): Remove unused
- variable.
- * src/raster/ftraster.c (MEM_Set): Move definition down to avoid
- compiler warning.
- * src/autohint/ahhint.c (ah_hinter_hint_edges): Use UNUSED() to
- avoid compiler warnings.
- * src/pcf/pcfread.c (tableNames): Use `const'.
- (pcf_read_TOC): Change counter name to avoid compiler warning.
- Use `const'.
- * src/pshinter/pshrec.c (ps_hints_close): Remove redundant
- declaration.
- * src/pshinter/pshalgo1.c (psh1_hint_table_init): Rename variables
- to avoid shadowing.
- * src/pshinter/pshalgo2.c (psh2_hint_table_activate_mask): Ditto.
- * src/type1/t1objs.h: Remove double declarations of `T1_Size_Init()'
- and `T1_Size_Done()'.
-
-2001-11-20 Antoine Leca <antoineleca@multimania.com>
-
- * include/freetype/ttnameid.h: Added some new Microsoft language
- codes and LCIDs as found in MSDN (Passport SDK). Also added
- comments about the meaning of bit 57 of the `OS/2' table
- (TT_UCR_SURROGATES) which (with OpenType v.1.3) now means `there is
- a character beyond 0xFFFF in this font'. Thanks to Detlef Würkner
- <TetiSoft@apg.lahn.de> for noticing this.
-
-2001-11-20 David Turner <david@freetype.org>
-
- * src/pshinter/{pshalgo2.c, pshalgo1.c}: Fixed stupid bug in sorting
- routine that created nasty alignment artefacts.
-
- * src/pshinter/pshrec.c, tests/gview.c: Debugging updates.
-
- * src/smooth/ftgrays.c: De-activated experimental gamma support.
- Apparently, `optimal' gamma tables depend on the monitor type,
- resolution and general karma, so it's better to compute them outside
- of the rasterizer itself.
- (gray_convert_glyph): Use `volatile' keyword.
-
-2001-10-29 David Turner <david@freetype.org>
-
- Adding experimental `gamma' support. This produces smoother glyphs
- at small sizes for very little cost.
-
- * src/smooth/ftgrays.c (grays_init_gamma): New function.
- (gray_raster_new): Use it.
-
- Various fixes to the auto-hinter. They merely improve the output of
- sans-serif fonts. Note that there are still problems with serifed
- fonts and composites (accented characters).
-
- * src/autohint/ahglyph.c (ah_outline_load,
- ah_outline_link_segments): Implement it.
- Fix typos.
- (ah_outline_save, ah_outline_compute_segments): Fix typos.
- * src/autohint/ahhint.c (ah_align_serif_edge): New argument
- `vertical'. Implement improvement.
- (ah_hint_edges_3, ah_hinter_hint_edges): Implement it.
- Fix typos.
- (ah_hinter_align_strong_points, ah_hinter_align_weak_points): Fix
- typos.
- (ah_hinter_load): Set `ah_debug_hinter' if DEBUG_HINTER is defined.
- * src/autohint/ahmodule.c: Implement support for DEBUG_HINTER macro.
- * src/autohint/ahtypes.h: Ditto.
- (AH_Hinter): Remove `disable_horz_edges' and `disable_vert_edges'
- (making them global as `ah_debug_disable_horz' and
- `ah_debug_disable_vert').
- Fix typos.
-
- * tests/gview.c: Updated the debugging glyph viewer to show the
- hints generated by the `autohint' module.
-
-2001-10-27 David Turner <david@freetype.org>
-
- * src/cache/ftcchunk.c (ftc_chunk_cache_lookup): Fixed a bug that
- considerably lowered the performance of the abstract chunk cache.
-
-2001-10-26 David Turner <david@freetype.org>
-
- * include/freetype/ftcache.h, include/freetype/cache/*.h,
- src/cache/*.c: Major re-design of the cache sub-system to provide
- better performance as well as an `Acquire'/`Release' API. Seems to
- work well here, but probably needs a bit more testing.
-
-2001-10-26 Leonard Rosenthol <leonardr@lazerware.com>
-
- * builds/mac/README: Updated to reflect my taking over the project
- and that is now being actively maintained.
-
- * src/base/ftmac.c (parse_fond): Applied patches from Paul Miller
- <paulm@profoundeffects.com> to support loading a face other than the
- first from a FOND resource.
- (FT_New_Face_From_FOND): Updated.
-
-2001-10-25 Leonard Rosenthol <leonardr@lazerware.com>
-
- * builds/mac/ftlib.prj: Update of CodeWarrior project file for Mac
- OS for latest version (7) of CWPro and for recent changes to the FT
- source tree.
-
-2001-10-25 David Turner <david@freetype.org>
-
- * include/freetype/config/ftoption.h: Updated comments to explain
- precisely how to use project-specific macro definitions without
- modifying this file manually.
-
- (FT_CONFIG_FORCE_INT64): Define.
-
- (FT_DEBUG_MEMORY): New macro.
-
-2001-10-24 Tom Kacvinsky <tkacvins@freetype.org>
-
- * builds/unix/ftsystem.c (FT_New_Memory): Added a missing `{'.
-
-2001-10-23 David Turner <david@freetype.org>
-
- * include/freetype/internal/ftmemory.h, src/base/ftdbgmem.c:
- Improvements to the memory debugger to report more information in
- case of errors. Also, some allocations that occurred through REALLOC
- couldn't be previously caught correctly.
-
- * src/autohint/ahglyph.c (ah_outline_compute_segments,
- ah_outline_compute_edges), src/raster/ftraster.c (ft_black_new),
- src/smooth/ftgrays.c (gray_render_span, gray_raster_new): Replaced
- liberal uses of memset() by the MEM_Set() macro.
-
-2001-10-23 David Turner <david@freetype.org>
-
- * src/raster/ftraster.c (Update): Removed to be inlined in ...
- (Sort): Updated.
-
-2001-10-22 David Turner <david@freetype.org>
-
- * builds/unix/ftsystem.c (FT_New_Memory, FT_Done_Memory),
- builds/vms/ftsystem.c (FT_New_Memory, FT_Done_Memory),
- builds/amiga/ftsystem.c (FT_New_Memory, FT_Done_Memory),
- src/base/ftdbgmem.c: Updated the memory debugger and
- platform-specific implementations of `ftsystem' in order to be able
- to debug memory allocations on Unix, VMS and Amiga too!
-
- * src/pshinter/pshalgo2.c (psh2_hint_table_record_mask): Removed
- some bogus warnings.
-
- * include/freetype/internal/ftmemory.h, src/base/ftdbgmem.c:
- Modified the debugging memory manager to report the location (source
- file name + line number) where leaked memory blocks are allocated in
- the source file.
-
- * src/base/ftdbgmem.c: New debugging memory manager. You must
- define the FT_DEBUG_MEMORY macro in `ftoption.h' to enable it. It
- will record every memory block allocated and report simple errors
- like memory leaks and double deletes.
-
- * src/base/Jamfile: Include ftdbgmem.
- * src/base/rules.mk: Ditto.
- * src/base/ftbase.c: Include ftdbgmem.c.
-
- * include/freetype/config/ftoption.h: Added the FT_DEBUG_MEMORY
- macro definition.
-
- * src/base/ftsystem.c (FT_New_Memory, FT_Done_Memory): Modified the
- base component to use the debugging memory manager when the macro
- FT_DEBUG_MEMORY is defined.
-
-2001-10-21 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/cff/cffload.c (CFF_Done_Font): Free subfonts array only if
- we are working with a CID keyed CFF font. Otherwise, a variable
- that was never allocated memory might freed. This is a correction
- to the previous patch for freeing subfonts.
-
-2001-10-21 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/cff/cffload.c (CFF_Done_Font): Free the subfonts array to
- avoid a memory leak.
-
-2001-10-21 David Turner <david@freetype.org>
-
- * src/pshinter/pshalgo2.c, src/pshinter/pshalgo1.c,
- src/pshinter/pshglob.c: Removing compiler warnings in pedantic modes
- (in multi-object compilation mode, mainly).
-
-2001-10-20 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/type1/t1load.c (parse_encoding): Add a test to make sure
- that custom encodings (i.e., neither StandardEncoding nor
- ExpertEncoding) are not loaded twice when the Type 1 font is
- synthetic.
-
- * src/type1/t1load.c (parse_font_name, parse_subrs): Added a test
- for when loading synthetic fonts to make sure that the font name
- and subroutines are not loaded twice. This is to remove a memory
- leak that occurred because the original memory blocks for these
- objects were not deallocated when the objects were parsed the
- second time.
-
-2001-10-19 David Turner <david@freetype.org>
-
- * src/smooth/ftgrays.c, src/pshinter/pshglob.h,
- src/pshinter/pshrec.c, src/pshinter/pshalgo2.c: Getting rid of
- compiler warnings.
-
- * src/pshinter/module.mk, src/pshinter/rules.mk: Adding control
- files to build the PostScript hinter with the `old' build system.
-
-2001-10-19 Jacob Jansen <joukj@hrem.stm.tudelft.nl>
-
- * descrip.mms, src/pshinter/descrip.mms: Updates to the VMS build
- files.
-
-2001-10-18 David Turner <david@freetype.org>
-
- * src/psnames/pstables.h, src/tools/glnames.py: Rewrote the
- `glnames.py' script used to generate the `pstables.h' header file.
- The old one contained a serious bug that made FreeType return
- incorrect glyph names for certain glyphs.
-
- * src/truetype/ttdriver.c (Set_Char_Sizes): Changing computation of
- pixel size from character size to use rounding. This is an
- experiment to see whether this gives values similar to Windows for
- scaled ascent/descent/etc.
-
- * src/base/ftcalc.c (FT_Div64by32): Changed the implementation
- slightly since the original code was mis-compiled on Mac machines
- using the MPW C compiler.
-
- * src/base/ftobjs.c (FT_Realloc): When a memory block was grown
- through FT_Realloc(), the new bytes were not set to 0, which created
- some strange bugs in the PostScript hinter.
- (destroy_face): Don't deallocate unconditionally.
-
- * src/cid/cidgload.c (CID_Compute_Max_Advance, CID_Load_Glyph):
- Adding support to new PostScript hinter.
-
- * include/freetype/internal/psglobal.h,
- include/freetype/internal/pshints.h,
- include/freetype/config/ftmodule.h, src/pshinter/Jamfile,
- src/pshinter/pshalgo.h, src/pshinter/pshalgo1.h,
- src/pshinter/pshalgo1.c, src/pshinter/pshalgo2.h,
- src/pshinter/pshalgo2.c, src/pshinter/pshglob.h,
- src/pshinter/pshglob.c, src/pshinter/pshinter.c,
- src/pshinter/pshmod.c, src/pshinter/pshmod.h, src/pshinter/pshrec.c,
- src/pshinter/pshrec.h: Adding new PostScript hinter module.
-
- * include/freetype/internal/ftobjs.h,
- include/freetype/internal/internal.h,
- include/freetype/internal/psaux.h,
- include/freetype/internal/t1types.h, src/psaux/psobjs.c,
- src/psaux/psobjs.h, src/psaux/t1decode.h, src/psaux/t1decode.c,
- src/type1/t1driver.c, src/type1/t1gload.c, src/type1/t1objs.c,
- src/type1/t1objs.h: Updates to use the new PostScript hinter.
-
- * tests/Jamfile, tests/gview.c: Adding a new glyph hinting
- viewer/debugger to the source tree. Note that you will _not_ be
- able to compile it since it depends on an unavailable graphics
- library named `Nirvana' to render vector images.
-
-2001-10-17 David Turner <david@freetype.org>
-
-
- * Version 2.0.5 released.
- =========================
-
-
- * include/freetype/freetype.h, include/internal/ftobjs.h,
- src/base/ftobjs.c, src/type1/t1driver.c: Adding a new function named
- 'FT_Get_Postscript_Name' to retrieve the PostScript name of a given
- font. Should work with all formats except pure CFF/CEF fonts (this
- will be added soon).
-
- * src/cid/cidriver (cid_get_postscript_name): New function.
- (CID_Get_Interface): Handle `postscript_name' interface.
-
- * src/sfnt/sfdriver.c (get_sfnt_postscript_name): New function.
- (SFNT_Get_Interface): Handle `postscript_name' interface.
-
- * src/type1/t1driver.c (t1_get_ps_name): New function.
- (Get_Interface): Handle `postscript_name' interface.
-
- * README, docs/CHANGES: Updated for 2.0.5 release.
-
-2001-10-08 David Turner <david@freetype.org>
-
- Fixed a bug in `glnames.py' that prevented it from generating
- correct glyph names tables. This resulted in the unavailability of
- certain glyphs like `Cacute', `cacute' and `lslash' in Unicode
- charmaps, even if these were present in the font (causing problems
- for Polish users).
-
- * src/tools/glnames.py (mac_standard_names): Fixed.
- (t1_standard_strings): Some fixes and renamed to ...
- (sid_standard_names): This.
- (t1_expert_encoding): Fixed.
- (the_adobe_glyph_list): Renamed to ...
- (adobe_glyph_names): This.
- (the_adobe_glyphs): Renamed to ...
- (adobe_glyph_values): This.
- (dump_mac_indices, dump_glyph_list, dump_unicode_values, main):
- Updated.
- * src/psnames/pstables.h: Regenerated.
- * src/psnames/psmodule.c (PS_Unicode_Value): Fix offset.
- Fix return value.
- Use `sid_standard_table' and `ps_names_to_unicode' instead of
- `t1_standard_glyphs' and `names_to_unicode'.
- (PS_Macintosh_Name): Use `ps_glyph_names' instead of
- `standard_glyph_names'.
- (PS_Standard_Strings): Use `sid_standard_names' instead of
- `t1_standard_glyphs'.
-
- * doc/BUGS, doc/TODO: New documents.
-
-2001-10-07 Richard Barber <rich@solutionuk.com>
-
- * src/cache/ftlru.c (FT_Lru_Lookup_Node): Fixed a bug that prevented
- correct LRU behaviour.
-
-2001-10-07 David Turner <david@freetype.org>
-
- setjmp() and longjmp() are now used for rollback (i.e. when memory
- pool overflow occurs).
-
- Function names are now all uniformly prefixed with `gray_'.
-
- * src/smooth/ftgrays.c: Include <setjmp.h>.
- (ErrRaster_MemoryOverflow): New macro.
- (TArea): New type to store area values in each cell (using `int' was
- too small on 16-bit systems). <limits.h> is included to properly
- get the needed data type.
- (TCell, TRaster): Use it.
- (TRaster): New element `jump_buffer'.
- (gray_compute_cbox): Use `RAS_ARG' as the only parameter and get
- `outline' from it.
- (gray_record_cell): Use longjmp().
- (gray_set_cell): Use gray_record_cell() for error handling.
- (gray_render_line, gray_render_conic, gray_render_cubic): Simplify.
- (gray_convert_glyph_inner): New function, using setjmp().
- (gray_convert_glyph): Use it.
-
-2001-10-07 David Turner <david@freetype.org>
-
- Provide a public API to manage multiple size objects for a given
- FT_Face in the new header file `ftsizes.h'.
-
- * include/freetype/ftsizes.h: New header file,
- * include/freetype/internal/ftobjs.h: Use it.
- Remove declarations of FT_New_Size and FT_Done_Size (moved to
- ftsizes.h).
- * include/freetype/config/ftheader.h (FT_SIZES_H): New macro.
- * src/base/ftobjs.c (FT_Activate_Size): New function.
- * src/cache/ftcmanag.c: Include ftsizes.h.
- (ftc_manager_init_size, ftc_manager_flush_size): Use
- FT_Activate_Size.
-
-2001-09-20 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * builds/amiga/*: Added port to Amiga with the SAS/C compiler.
-
-2001-09-15 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * src/type1/t1afm.c (T1_Done_AFM): Free `afm'.
-
-2001-09-10 Yao Zhang <yzhang@sharemedia.com>
-
- * src/sfnt/ttcmap.c (code_to_index2): Handle code values with
- hi-byte == 0 correctly.
-
-2001-09-10 Werner Lemberg <wl@gnu.org>
-
- * builds/link-std.mk ($(PROJECT_LIBRARY)): Fix typo.
-
-2001-08-30 Martin Muskens <mmuskens@aurelon.com>
-
- * src/type1/t1load.c (parse_font_matrix): A new way to compute the
- units per EM with greater accuracy (important for embedded T1 fonts
- in PDF documents that were automatically generated from TrueType
- ones).
-
- * src/type1/t1load.c (is_alpha): Now supports `+' in font names;
- this is used in embedded fonts.
-
- * src/psaux/psobjs.c (PS_Table_Add): Fixed a reallocation bug that
- generated a dangling pointer reference.
-
-2001-08-30 Anthony Feik <afeick@hotmail.com>
-
- * src/type1/t1afm.c (T1_Read_AFM): Now correctly sets the flag
- FT_FACE_FLAG_KERNING when appropriate for Type1 + AFM files.
-
-2001-08-25 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttload.c (TT_Load_CMap): Fix frame length of
- `cmap_rec_fields'.
-
- * include/freetype/fterrors.h [!FT_CONFIG_OPTION_USE_MODULE_ERRORS]:
- Undefine FT_ERR_BASE before defining again.
-
-2001-08-22 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.h: Fix prototype of TT_Move_Func.
-
-2001-08-21 Werner Lemberg <wl@gnu.org>
-
- * builds/dos/dos-def.mk (NO_OUTPUT): Don't use `&>' but `>'.
-
-2001-08-21 David Turner <david@freetype.org>
-
- * include/freetype/config/ftoption.h: Changed the default setting
- for FT_CONFIG_OPTION_USE_MODULE_ERRORS to undefined, since it breaks
- source compatibility in a few cases. Updated the comment to explain
- that too.
-
-2001-08-17 Martin Muskens <mmuskens@aurelon.com>
-
- * src/base/ftcalc.c (FT_MulDiv): Fixed serious typo.
-
-2001-08-12 Werner Lemberg <wl@gnu.org>
-
- Updating to OpenType 1.3.
-
- * include/freetype/internal/tttypes.h (TT_CMap0, TT_CMap2, TT_CMap4,
- TT_CMap6): Adding field `language'.
- (TT_CMapTable): Removing field `language'.
- Type of `length' field changed to FT_ULong.
- Adding fields for cmaps format 8, 10, and 12.
- (TT_CMapGroup): New auxiliary structure.
- (TT_CMap8_12, TT_CMap10): New structures.
- * include/freetype/tttables.h (TT_HoriHeader, TT_VertHeader):
- Removed last element of `Reserved' array.
- * include/freetype/ttnameid.h (TT_PLATFORM_CUSTOM, TT_MS_ID_UCS_4,
- TT_NAME_ID_CID_FINDFONT_NAME): New macros.
-
- * src/sfnt/ttcmap.c (TT_CharMap_Load): Updated loading of `language'
- field to the new structures.
- Fixed freeing of arrays in case of unsuccessful loads.
- Added support for loading format 8, 10, and 12 cmaps.
- (TT_CharMap_Free): Added support for freeing format 8, 10, and 12
- cmaps.
- (code_to_index4): Small improvement.
- (code_to_index6): Ditto.
- (code_to_index8_12, code_to_index10): New functions.
- * src/sfnt/ttload.c (TT_Load_Metrics_Header): Updated to new
- structure.
- (TT_Load_CMap): Ditto.
-
- * src/sfnt/sfobjs.c (tt_encodings): Add MS UCS4 table (before MS
- Unicode).
-
-2001-08-11 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1driver.c (t1_get_name_index): Fix compiler warning.
-
-2001-08-09 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/cff/cffdrivr.c (get_cff_glyph_name): Renamed to
- cff_get_glyph_name for consistency.
-
- (cff_get_glyph_index): Minor documentation change.
-
- * src/type1/t1driver.c (t1_get_name_index): New function used in
- Get_Interface as the function returned when the `name_index'
- function is requested.
-
- (get_t1_glyph_name): Renamed to t1_get_glyph_name for consistency.
-
-2001-08-08 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/cff/cffload.c: Removed definitions of cff_isoadobe_charset,
- cff_expert_charset, cff_expertsubset_charset, cff_standard_encoding,
- and cff_expert_encoding arrays to cffload.h.
-
- * src/cff/cffload.h: Added definitions of cff_isoadobe_charset,
- cff_expert_charset, cff_expertsubset_charset, cff_standard_encoding,
- and cff_expert_encoding arrays.
-
- * src/cff/cffdrivr.c (cff_get_name_index): New function, returned
- when `cff_get_interface' is called with a request for the
- `name_index' function.
-
- (cff_get_interface): Modified so that it returns the function
- `cff_get_name_index' when the `name_index' function is requested.
-
- * src/base/ftobjs.c (FT_Get_Name_Index): New function, used to
- return a glyph index for a given glyph name only if the driver
- supports glyph names.
-
- * include/freetype/internal/ftobjs.h (FT_Name_Index_Requester):
- New function pointer type definition used in the function
- FT_Get_Name_Index.
-
- * include/freetype/freetype.h (FT_Get_Name_Index): Added
- documentation and prototype.
-
-2001-07-26 Werner Lemberg <wl@gnu.org>
-
- * builds/cygwin/*: Removed. Use the unix stuff instead.
-
-2001-07-26 Jouk Jansen <joukj@hrem.stm.tudelft.nl>
-
- * builds/vms/ftconfig.h (FT_CALLBACK_DEF): Updated to change dated
- 2001-06-27.
-
-2001-07-17 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/psaux.h (PS_Table): Use FT_Offset for
- `cursor' and `capacity'.
- * src/psaux/psobjs.c (reallocate_t1_table): Use FT_Long for second
- parameter.
- (PS_Table_Add): Use FT_Offset for `new_size'.
-
- Add support for version 0.5 maxp tables.
-
- * src/sfnt/ttload.c (TT_Load_MaxProfile): Implement it.
- (TT_Load_OS2): Initialize some values.
-
-2001-07-13 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftsynth.c: Include ftcalc.h unconditionally.
-
-2001-07-07 David Turner <david@freetype.org>
-
- * src/truetype/ttgload.c, src/truetype/ttinterp.c, src/pcf/pcfread:
- Removed pedantic compiler warnings when the bytecode interpreter is
- compiled in.
-
-2001-07-03 Werner Lemberg <wl@gnu.org>
-
- * src/autohint/ahhint.c (ah_hinter_align_weak_points): Remove
- unused variable `edges'.
- (ah_hinter_load): Remove unused variables `old_width' and
- `new_width'.
- * src/cid/cidload.c (cid_decrypt): Use `U' for constant (again).
- * src/psaux/psobjs.c (T1_Decrypt): Ditto.
- * src/type1/t1parse.c (T1_Get_Private_Dict): Ditto.
-
-2001-06-28 David Turner <david@freetype.org>
-
- * include/internal/ftstream.h: Modified the definitions
- of the FT_GET_XXXX and NEXT_XXXX macros for 16-bit correctness.
-
-2001-06-26 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidload.c, src/cid/cidload.h (cid_decrypt): Use FT_Offset
- instead of FT_Int as type for `length' parameter.
- * include/freetype/internal/psaux.h (PSAux_Interface): Updated.
-
-2001-06-27 Wolfgang Domröse <porthos.domroese@harz.de>
-
- * src/psaux/psobjs.c, src/psaux/psobjs.h (T1_Decrypt): Use FT_Offset
- instead of FT_Int as type for `length' parameter.
-
-
- * Version 2.0.4 released.
- =========================
-
-
-2001-06-27 David Turner <david@freetype.org>
-
- * builds/unix/ftconfig.in: Changed the definition of the
- FT_CALLBACK_DEF macro.
-
- * include/freetype/ftconfig.h, src/*/*.c: Changed the definition and
- use of the FT_CALLBACK_DEF macro in order to support 16-bit
- compilers.
-
- * builds/unix/ftconfig.in: Changed the definition of the
- FT_CALLBACK_DEF macro.
-
- * src/sfnt/ttload.c (TT_Load_Kern): The kern table loader now ensures
- that the kerning table is correctly sorted (some problem fonts don't
- have a correct kern table).
-
-2001-06-26 Wolfgang Domröse <porthos.domroese@harz.de>
-
- * include/freetype/internal/ftstream.h (FT_GET_OFF3_LE): Fix typo.
-
-2001-06-24 David Turner <david@freetype.org>
-
- * src/base/ftcalc.c (ft_div64by32): Fixed the source to work
- correctly on 16-bit systems.
-
-2001-06-23 Anthony Fok <fok@debian.org>
-
- * debian/*: Added Debian package build directory for 2.0.4.
-
-2001-06-22 David Turner <david@freetype.org>
-
- * docs/PATENTS: Added patents disclaimer. This one was missing!
-
- * docs/CHANGES, docs/todo: Updated for the upcoming 2.0.4 release.
-
-2001-06-20 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/config/ftconfig.h: Add two more `L's to
- constants.
- Add missing semicolons.
-
- * builds/toplevel.mk: Do similar change as for
- builds/unix/detect.mk.
-
- * include/freetype/freetype.h (FT_ENC_TAG): New version to make it
- easier to redefine.
- * include/freetype/ftimage.h (FT_IMAGE_TAG): Ditto.
-
- * src/pcf/pcfread.c (pcf_get_encodings): Add cast.
-
-2001-06-19 David Turner <david@freetype.org>
-
- * builds/win32/visualc/freetype.dsp, builds/win32/visualc/index.html:
- Updated the Visual C++ project (for the 2.0.4 release).
-
- * builds/unix/detect.mk: Added rule for AIX detection (which uses
- /usr/sbin/init instead of /sbin/init).
-
- * include/freetype/fterrors.h, src/*/*err*.h: Updated some of the
- error macros to simplify handling of new error scheme.
-
-2001-06-19 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/fttypes.h (FT_ERROR_MODULE): New macro.
-
-2001-06-19 David Turner <david@freetype.org>
-
- Removing _lots_ of compiler warnings when the most pedantic warning
- levels of Visual C++ and Borland C++ are used. Too many files to be
- listed here, but FT2 now compiles without warnings with VC++ and the
- `/W4' warning level (lint-style).
-
- * include/freetype/freetype.h (FT_New_Memory_Face): Updated
- documentation.
- * include/freetype/fttypes.h (FT_BOOL): New macro.
- * include/freetype/internal/ftdebug.h: Add #pragma for Visual C++
- to suppress warning.
- * include/freetype/internal/ftstream.h (FT_GET_SHORT_{BE,LE},
- FT_GET_OFF3_{BE,LE}, FT_GET_LONG_{BE,LE}): New macros.
- (NEXT_*): Use them.
- * src/autohint/ahglobal.c: Include FT_INTERNAL_DEBUG_H.
- (FT_New_Memory_Face): Add `const' to function declaration.
-
-2001-06-18 Werner Lemberg <wl@gnu.org>
-
- Minor cleanups to remove compiler warnings.
-
- * include/freetype/cache/ftcmanag.h (FTC_MAX_BYTES_DEFAULT): Use
- `L' for constant.
- * include/freetype/config/ftoption.h (FT_RENDER_POOL_SIZE): Ditto.
- * src/base/ftcalc.c (FT_MulDiv): Use `L' for constant.
- * src/base/ftglyph.c (FT_Glyph_Get_CBox): Remove `error' variable.
- * src/base/fttrigon.c (ft_trig_arctan_table): Use `L' for constants.
- * src/base/ftobjs.c (FT_Done_Size): Fix return value.
- (FT_Set_Char_Size, FT_Set_Pixel_Sizes, FT_Get_Kerning): Remove
- unused `memory' variable.
- * src/autohint/ahglyph.c (ah_get_orientation): Use `L' for constant.
- * src/autohint/ahhint.c (ah_hint_edges_3,
- ah_hinter_align_edge_points): Remove unused `before' and `after'
- variables.
- (ah_hinter_align_weak_points): Remove unused `edge_limit' variable.
- (ah_hinter_load): Remove unused `new_advance', `start_contour',
- and `metrics' variables.
- * src/cff/cffload.c (CFF_Load_Encoding): Remove dead code to avoid
- compiler warning.
- * src/cff/cffobjs.c (CFF_Init_Face): Remove unused `base_offset'
- variable.
- * src/cff/cffgload.c (CFF_Parse_CharStrings): Remove unused
- `outline' variable.
- (cff_compute_bias): Use `U' for constant.
- * src/cid/cidload.c (cid_decrypt): Ditto.
- * src/psaux/psobjs.c (T1_Decrypt): Ditto.
- * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings): Ditto.
- * src/sfnt/ttload.c (TT_Load_Kern): Remove unused `version'
- variable.
- * src/sfnt/ttsbit.c (TT_Load_SBit_Image): Remove unused `top'
- variable.
- * src/truetype/ttgload.c (load_truetype_glyph): Remove unused
- `num_contours' and `ins_offset' variables.
- (compute_glyph_metrics): Remove unused `Top' and `x_scale'
- variables.
- (TT_Load_Glyph): Remove unused `memory' variable.
- * src/smooth/ftgrays.c (grays_raster_render): Use `L' for constants.
-
-2001-06-18 Werner Lemberg <wl@gnu.org>
-
- Make the new error scheme source compatible with older FT versions
- by introducing another layer.
-
- * include/freetype/fterrors.h (FT_ERRORDEF_, FT_NOERRORDEF_): New
- macros.
- (FT_NOERRORDEF): Removed.
- * include/*/*err*.h: Use FT_ERRORDEF_ and FT_NOERRORDEF_.
-
-2001-06-16 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/freetype.h (FT_ENC_TAG): New macro.
- (FT_Encoding_): Use it.
- * include/freetype/ftimage.h (FT_IMAGE_TAG): Define it
- conditionally.
-
-2001-06-14 David Turner <david@freetype.org>
-
- Modified the TrueType interpreter to let it use the new
- trigonometric functions provided in `fttrigon.h'. This gets rid of
- some old 64-bit computation routines, as well as many warnings when
- compiling the library with the `long long' 64-bit integer type.
-
- * include/freetype/config/ftoption.h: Undefine
- FT_CONFIG_OPTION_OLD_CALCS.
- * include/freetype/internal/ftcalc.h: Rearrange use of
- FT_CONFIG_OPTION_OLD_CALCS.
- * src/base/ftcalc.c: Add declaration of FT_Int64 if
- FT_CONFIG_OPTION_OLD_CALCS isn't defined.
- * src/truetype/ttinterp.c: Use FT_TRIGONOMETRY_H.
- (Norm): Add a special version if FT_CONFIG_OPTION_OLD_CALCS isn't
- defined.
- (Current_Ratio, Normalize): Simplify code.
-
-2001-06-11 Mike Owens <MOwens@amtdatasouth.com>
-
- * src/base/ftcalc.c (FT_MulDiv, FT_DivFix, FT_Sqrt64): Remove
- compiler warnings.
-
-2001-06-08 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/configure.in: Renamed to ...
- * builds/unix/configure.ac: This to make sure that autoconf 2.50 is
- needed.
- Run `autoupdate' on it.
- Increase `version_info' to 7:0:1.
- * builds/unix/configure: Regenerated.
-
-2001-06-08 David Turner <david@freetype.org>
-
- * src/autohint/ahhint.c (ah_hinter_load_glyph): Fixed a bug that
- corrupted transformed glyphs that were auto-hinted (the transform
- was applied twice).
-
- Fixed a bug that returned an invalid linear width for composite
- TrueType glyphs.
-
- * include/internal/tttypes.h (TT_Loader_): Two new elements `linear'
- and `linear_def'.
- * src/truetype/ttgload.c (load_truetype_glyph,
- compute_glyph_metrics): Use it.
-
- * include/fttypes.h (FT_ERROR_BASE): New macro.
- * src/base/ftobjs.c (FT_Open_Face, FT_Render_Glyph_Internal): Use it
- to make source code work with the new error scheme implemented by
- Werner.
- * src/base/ftoutln.c (FT_Outline_Render): Ditto.
-
-2001-06-07 Werner Lemberg <wl@gnu.org>
-
- Updating to libtool 1.4.0 and autoconf 2.50.
-
- * builds/unix/ltconfig: Removed.
- * builds/unix/ltmain.sh, builds/unix/configure.in,
- builds/unix/aclocal.m4: Updated.
- * builds/unix/configure: Regenerated.
-
-2001-06-06 Werner Lemberg <wl@gnu.org>
-
- Complete redesign of error codes. Please check ftmoderr.h for more
- details.
-
- * include/freetype/internal/cfferrs.h,
- include/freetype/internal/tterrors.h,
- include/freetype/internal/t1errors.h: Removed. Replaced with files
- local to the module. All extra error codes have been moved to
- `fterrors.h'.
-
- * src/sfnt/ttpost.h: Move error codes to `fterrors.h'.
-
- * src/autohint/aherrors.h, src/cache/ftcerror.h, src/cff/cfferrs.h,
- src/cid/ciderrs.h, src/pcf/pcferror.h, src/psaux/psauxerr.h,
- src/psnames/psnamerr.h, src/raster/rasterrs.h, src/sfnt/sferrors.h,
- src/smooth/ftsmerrs.h, src/truetype/tterrors.h,
- src/type1/t1errors.h, src/winfonts/fnterrs.h: New files defining the
- error names for the module it belongs to.
-
- * include/freetype/ftmoderr.h: New file, defining the module error
- offsets. Its structure is similar to `fterrors.h'.
-
- * include/freetype/fterrors.h (FT_NOERRORDEF): New macro.
- (FT_ERRORDEF): Redefined to use module error offsets.
- All internal error codes are now public; unused error codes have
- been removed, some are new.
-
- * include/freetype/config/ftheader.h (FT_MODULE_ERRORS_H): New
- macro.
- * include/freetype/config/ftoption.h
- (FT_CONFIG_OPTION_USE_MODULE_ERRORS): New macro.
-
- All other source files have been updated to use the new error codes;
- some already existing (internal) error codes local to a module have
- been renamed to give them the same name as in the base module.
-
- All make files have been updated to include the local error files.
-
-2001-06-06 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidtokens.h: Replaced with...
- * src/cid/cidtoken.h: This file for 8+3 consistency.
-
- * src/raster/ftraster.c: Use macros for header file names.
-
- * src/include/freetype/tttables.h (TT_HoriHeader_, TT_VertHeader_):
- Fix length of `Reserved' array. Note that this isn't the real fix
- since recent OpenType specs have introduced a `CaretOffset' field
- instead of the first reserved byte.
-
-2001-05-29 Werner Lemberg <wl@gnu.org>
-
- * INSTALL: Minor fixes.
-
-
- * Version 2.0.3 released.
- =========================
-
-
-2001-05-29 David Turner <david@freetype.org>
-
- * INSTALL, docs/CHANGES: Updated.
-
-2001-05-25 David Turner <david@freetype.org>
-
- Moved several documents from the top-level to the `docs' directory.
-
- * src/base/ftcalc.c (FT_DivFix): Small fix to return value.
-
-2001-05-16 David Turner <david@freetype.org>
-
- * src/truetype/ttgload.c (load_truetype_glyph): Fixed a bug in the
- composite loader. Spotted by Keith Packard.
- * src/base/ftobjs.c (FT_GlyphLoader_Check_Points,
- FT_GlyphLoader_Check_Subglyphs): Ditto.
-
-2001-05-14 David Turner <david@freetype.org>
-
- Fixed the incorrect blue zone computations, and improved the
- composite support. Note that these changes result in improved
- rendering, while sometimes introducing their own artefacts. This is
- probably the last big change to the autohinter before the
- introduction of a complete replacement.
-
- * src/autohint/ahglobal.c (sort_values): Fix loop.
- * src/autohint/ahglyph.c: Removed some obsolete code.
- (ah_outline_compute_edges): Modify code to set the ah_edge_round
- flag.
- (ah_outline_compute_blue_edges): Add code to compute active blue
- zones.
- * src/autohint/ahhint.c (ah_hinter_glyph_load): Change load_flags
- value.
-
- * src/base/ftcalc.c (FT_DivFix): Fixed a bug in the 64-bit code that
- created incorrect scale factors!
- (FT_RoundFix, FT_CeilFix, FT_FloorFix): Minor improvements.
-
-2001-05-12 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftbbox.h: FTBBOX_H -> __FTBBOX_H__.
- * include/freetype/fttrigon.h: __FT_TRIGONOMETRY_H__ ->
- __FTTRIGON_H__.
- Include FT_FREETYPE_H.
- Beautified; added copyright.
- * src/base/fttrigon.c: Beautified; added copyright.
-
-2001-05-11 David Turner <david@freetype.org>
-
- * src/cff/cffparse.c (cff_parse_font_matrix), src/cid/cidload.c
- (parse_font_matrix), src/type1/t1load.c (parse_font_matrix): Fixed
- the incorrect EM size computation.
-
- * include/freetype/fttrigon.h, src/base/fttrigon.c: New files,
- adding trigonometric functions to the core API (using Cordic
- algorithms).
- * src/base/ftbase.c, src/base/Jamfile, src/base/rules.mk: Use them.
-
- * builds/newline: New file.
- * builds/top_level.mk, builds/detect.mk: Use it. This fixes
- problems with Make on Windows 2000, as well as problems when `make
- distclean' is invoked on a non-Unix platform when there is no
- `config.mk' in the current directory.
-
- * builds/freetype.mk: Fixed a problem with object deletions under
- Dos/Windows/OS/2 systems.
-
- Added new directory to hold tools and test programs.
-
- * docs/docmaker.py, docs/glnames.py: Moved to...
- * src/tools/docmaker.py, src/tools/glnames.py: This place.
- * src/tools/cordic.py: New file used to compute arctangent table
- needed by fttrigon.c.
- * src/tools/test_bbox.c, src/tools/test_trig.c: New test files.
-
- * src/tools/docmaker.py: Improved the script to add the current date
- at the footer of each web page (useful to distinguish between
- versions).
-
- * Jamfile: Fixed incorrect HDRMACRO argument.
-
- * TODO: Removed the cubic arc bbox computation note, since it has been
- fixed recently.
- * src/base/ftbbox.c (test_cubic_zero): Renamed to...
- (test_cubic_extrema): This function. Use `UL' for unsigned long
- constants.
-
- * include/freetype/t1tables.h, include/freetype/config/ftoption.h:
- Formatting.
-
-2001-05-10 David Turner <david@freetype.org>
-
- * src/base/ftobjs.c (FT_Open_Face): Fixed a small memory leak
- which happened when trying to open 0-size font files!
-
-2001-05-09 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/ftcalc.h: Move declaration of
- FT_SqrtFixed() out of `#ifdef FT_LONG64'.
-
-2001-05-08 Francesco Zappa Nardelli <Francesco.Zappa.Nardelli@ens.fr>
-
- * src/pcfdriver.c (PCF_Load_Glyph): Fixed incorrect bitmap width
- computation.
-
-2001-05-08 David Turner <david@freetype.org>
-
- * docs/docmaker.py: Updated the DocMaker script in order to add
- command line options (--output,--prefix,--title), fix the erroneous
- line numbers reported during errors and warnings, and other
- formatting issues.
-
- * src/base/ftcalc.c (FT_MulDiv, FT_MulFix, FT_DivFix): Various tiny
- fixes related to rounding in 64-bits routines and
- pseudo-`optimizations'.
-
-2001-04-27 David Turner <david@freetype.org>
-
- * src/base/ftbbox.c (BBox_Cubic_Check): Fixed the coefficient
- normalization algorithm (invalid final bit position, and invalid
- shift computation).
-
-2001-04-26 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/config.guess, builds/unix/config.sub: Updated to
- latest versions from gnu.org.
-
- * builds/compiler/gcc-dev.mk: Add `-Wno-long-long' flag.
-
- * include/freetype/internal/ftcalc.h: Define FT_SqrtFixed()
- unconditionally.
- * src/base/ftbbox.c: Include FT_INTERNAL_CALC_H.
- Fix compiler warnings.
- * src/base/ftcalc.c: Fix (potential) compiler warnings.
-
-2001-04-26 David Turner <david@freetype.org>
-
- * src/base/ftcalc.c (FT_SqrtFixed): Corrected/optimized the 32-bit
- fixed-point square root computation. It is now used even with
- 64-bits integers, as it is _much_ faster than calling FT_Sqrt64 :-)
-
- * src/base/ftbbox.c: Removed invalid `#include FT_BEZIER_H' line.
-
-2001-04-25 David Turner <david@freetype.org>
-
- * src/base/ftbbox.c (BBox_Cubic_Check): Rewrote function to use
- direct computations with 16.16 values instead of sub-divisions. It
- is now slower, but proves a point :-)
-
- * src/raster/ftraster.c, src/smooth/ftgrays.c, src/base/ftbbox.c:
- Fixed the Bézier stack depths.
-
- * src/base/ftcalc.c (FT_MulFix): Minor rounding fix.
-
- * builds/beos: Added BeOS-specific files to the old build system
- (no changes were necessary to support BeOS in the Jamfile though).
-
-2001-04-20 David Turner <david@freetype.org>
-
- * ftconfig.h, ftoption.h: Updated `ftconfig.h' to detect 64-bit int
- types on platforms where Autoconf is not available). Also removed
- FTCALC_USE_LONG_LONG and replaced it with
- FT_CONFIG_OPTION_FORCE_INT64.
-
- * builds/win32/freetype.dsp: Updated the Visual C++ project file.
- Doesn't create a DLL yet.
-
- * cffgload.c: Removed a compilation warning.
-
-2001-04-10 Tom Kacvinsky <tkacvins@freetype.org>
-
- * t1load.c (parse_charstrings): Changed code for placing .notdef
- glyph into slot 0 so that we no longer have a memory access
- violation.
-
- * t1load.h: In structure T1_Loader, added swap_table (of type
- PS_Table) to facilitate placing the .notdef glyph into slot 0.
-
-2001-04-10 Francesco Zappa Nardelli <francesco.zappa.nardelli@ens.fr>
-
- * src/pcf/pcfdriver.c (PCF_Get_Char_Index): Fix return value.
-
-2001-04-09 Laurence Withers <lwithers@lwithers.demon.co.uk>
-
- * builds/dos/detect.mk: Add support for bash.
-
-2001-04-05 Werner Lemberg <wl@gnu.org>
-
- * builds/os2/*.mk: These files have been forgotten to update to
- the structure of similar makefiles.
- * builds/dos/*.mk: Ditto.
- * builds/ansi/*.mk: Ditto.
-
- * builds/win32/win32-def.mk (BUILD): Fix typo.
-
- * builds/compiler/*.mk (CLEAN_LIBRARY): Don't use NO_OUTPUT.
- This is already used in the link_*.mk files.
-
-2001-04-03 Werner Lemberg <wl@gnu.org>
-
- * src/*/Jamfile: Slight changes to make files more cryptic.
-
-2001-04-03 Werner Lemberg <wl@gnu.org>
-
- * Jamfile, src/Jamfile, src/*/Jamfile: Formatted. Slight changes
- to give files identical structure.
-
-2001-04-02 Werner Lemberg <wl@gnu.org>
-
- * CHANGES: Reformatted, minor fixes.
- * TODO: Updated.
- * README: Formatting.
- * include/freetype/freetype.h: Formatting.
-
- * Jamfile: Fix typo.
-
- * src/cff/cffparse.c: Move error code #defines to...
- * include/freetype/internal/cfferrs.h: This file.
- * src/cff/cffdrivr.c, src/cff/cffobjs.c, src/cff/cffload.c: Replaced
- `FT_Err_*' with `CFF_Err_*'.
- * src/cid/cidparse.c: Replaced `FT_Err_*' with `T1_Err_*'.
- * src/psaux/psobjs.c, src/psaux/t1decode.c: Ditto.
- * src/sfnt/sfobjs.c, src/sfnt/ttload.c: Replaced `FT_Err_*' with
- `TT_Err_*'.
- * src/truetype/ttgload.c, src/truetype/ttobjs.c: Ditto.
- * src/type1/t1gload.c, src/type1/t1load.c, src/type1/t1objs.c,
- src/type1/t1parse.c: Replaced `FT_Err_*' with `T1_Err_*'.
-
- * include/freetype/internal/cfferrs.h: Add
- `CFF_Err_Unknown_File_Format'.
- * include/freetype/internal/t1errors.h: Add
- `T1_Err_Unknown_File_Format'.
- * include/freetype/internal/tterrors.h: Add
- `TT_Err_Unknown_File_Format'.
-
- * src/cff/cffload.h: Add `cff_*_encoding' and `cff_*_charset'
- references.
- * src/psaux/psobjs.c: Include `FT_INTERNAL_TYPE1_ERRORS_H'.
-
- * src/cff/cffobjs.c (CFF_Init_Face, CFF_Done_Face): Use
- FT_LOCAL_DEF.
- * src/cid/cidobjs.c (CID_Done_Driver): Ditto.
- * src/truetype/ttobjs.c (TT_Init_Face, TT_Done_Face, TT_Init_Size):
- Ditto.
- * src/type1/t1objs.c (T1_Done_Driver): Ditto.
- * src/pcf/pcfdriver.c (PCF_Done_Face): Ditto.
- * src/pcf/pcf.h: Use FT_LOCAL for `PCF_Done_Face'.
-
-2001-04-02 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/sfnt/ttload.c (TT_Load_Metrics): Fix an improper pointer
- dereference. Submitted by Herbert Duerr <duerr@sun.com>.
-
-2001-03-26 Tom Kacvinsky <tkacvins@freetype.org>
-
- * include/freetype/config/ftconfig.h: Changed hexadecimal
- constants to use suffix U to avoid problems with HP-UX's c89
- compiler. Submitted by G.W. Lucas <glucas@sonalysts.com>.
-
-2001-03-24 David Turner <david.turner@freetype.org>
-
- * Jamrules, Jamfile, src/Jamfile, src/*/Jamfile: Adding jamfiles to
- the source tree. See www.freetype.org/jam/index.html for details.
-
-
- * Version 2.0.2 released.
- =========================
-
-
-2001-03-20 Werner Lemberg <wl@gnu.org>
-
- * builds/win32/detect.mk: Fix .PHONY target for Intel compiler.
-
-2001-03-20 David Turner <david.turner@freetype.org>
-
- * include/freetype/config/ftheader.h, include/freetype/ftsnames.h:
- Renamed `ftnames.h' to `ftsnames.h', and FT_NAMES_H to
- FT_SFNT_NAMES_H.
-
- * docs/docmaker.py: Added generation of INDEX link in table of
- contents.
-
- * INSTALL, docs/BUILD: Updated documentation to indicate that the
- compilation process has changed slightly (no more `src' required in
- the include path).
-
- * builds/*/*-def.mk: Changed the objects directory from `obj' to
- `objs'.
-
- * include/freetype/config/ftheader.h: Removed obsolete macros like
- FT_SOURCE_FILE, etc. and added cache-specific macro definitions that
- were previously defined in <freetype/ftcache.h>. Added comments to
- be included in a new API Reference section.
-
- * src/*/*: Removed the use of FT_SOURCE_FILE, etc. Now, each
- component needs to add its own directory to the include path at
- compile time. Modified all `rules.mk' and `descrip.mms'
- accordingly.
-
-2001-03-20 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/configure.in: Add $ft_version.
- * builds/unix/freetype-config.in: Use it.
- * builds/unix/configure: Updated.
-
-2001-03-19 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/type1/t1load.c (parse_font_matrix): Assign the units per em
- value an unsigned short value, first by shifting right 16 bits,
- then by casting the results to FT_UShort.
-
- * src/cff/cffparse.c (cff_parse_font_bbox): Assign the units per em
- value an unsigned short value, first by shifting right 16 bits,
- then by casting the results to FT_UShort.
-
-2001-03-17 David Turner <david.turner@freetype.org>
-
- * src/cid/cidobjs.c, src/cid/cidload.c, src/pcf/pcfread.c,
- src/type1/t1load.c, src/type1/t1objs.c: Added a few casts to remove
- compiler warnings in pedantic modes.
-
- * include/config/ft2build.h, include/config/ftheader.h: The file
- `ft2build.h' was renamed to `ftheader.h' to avoid conflicts with the
- top-level <ft2build.h>.
-
- * include/config/ftheader.h: Added new section describing the #include
- macros.
-
-2001-03-17 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/cff/cffparse.c (cff_parse_font_bbox): Obtain rounded FT_Fixed
- values for the bounding box numbers.
-
- * src/cff/cffobjs.c (CFF_Init_Face): When processing a CFF/CEF font,
- set `root->ascender' (`root->descender') to the integer part of
- `root->bbox.yMax' (`root->bbox.yMin', respectively).
-
-2001-03-16 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/cff/cffdrivr.c (get_cff_glyph_name): New function. Used in
- cff_get_interface to facilitate getting a glyph name for glyph index
- via FT_Get_Glyph_Name().
-
- (cff_get_interface): Added support for getting a glyph name via the
- `glyph_name' module interface. Uses the new function
- get_cff_glyph_name().
- Submitted by Sander van der Wal <svdwal@xs4all.nl>.
-
- * src/cff/cffobjs.c (CFF_Init_Face): Logical or the face flags with
- FT_FACE_FLAG_GLYPH_NAMES only if FT_CONFIG_OPTION_NO_GLYPH_NAMES is
- not defined. This is to add support for getting a glyph name from a
- glyph index via FT_Get_Glyph_Name().
- Submitted by Sander van der Wal <svdwal@xs4all.nl>.
-
- * src/cff/cffgload.c (CFF_Parse_CharStrings): Added support for
- deprecated operator `dotsection'.
- Submitted by Sander van der Wal <svdwal@xs4all.nl>.
-
-2001-03-12 Werner Lemberg <wl@gnu.org>
-
- * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings): Fix error
- messages.
-
- * INSTALL, docs/BUILD: We need GNU make 3.78.1 or newer.
-
-2001-03-12 Tom Kacvinsky <tkacvins@freetype.org>
-
- * include/freetype/internal/psaux.h: Changed the lenIV member of
- the T1_Decoder_ struct to be an FT_Int instead of an FT_UInt.
-
- * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings): Adjust
- for lenIV seed bytes at the start of a decrypted subroutine.
-
- * src/cid/cidload.c (cid_read_subrs): Decrypt subroutines only
- if lenIV >= 0.
-
- * src/cid/cidgload.c (cid_load_glyph): Decrypt charstrings only
- if lenIV >= 0.
-
-2001-03-11 Werner Lemberg <wl@gnu.org>
-
- * TODO: Updated.
-
- * src/pcf/pcfread.c: Put READ_Fields() always in a conditional to
- avoid compiler warnings.
-
-2001-03-10 Tom Kacvinsky <tkacvins@freetype.org>
-
- * TODO: New file.
-
- * include/freetype/freetype.h: Added prototypes and notes for
- three new functions: FT_RoundFix, FT_CeilFix, and FT_FloorFix.
- * src/base/ftcalc.c (FT_RoundFix, FT_CeilFix, FT_FloorFix): Added
- implementation code.
-
- * src/cid/cidobjs.c (CID_Init_Face): Use calculated units_per_EM,
- and if that is not available, default to 1000 units per EM. Changed
- assignment code for ascender and descender values.
- * src/cid/cidload.c (parse_font_matrix): Added units_per_EM
- processing.
- (parse_font_bbox): Changed to use FT_Fixed number handling.
-
- * src/type1/t1objs.c (T1_Init_Face): Changed the assignment code
- for ascender, descender, and max_advance_width.
- * src/type1/t1load.c (parse_font_bbox): Changed to use FT_Fixed
- number handling.
-
-2001-03-10 Henrik Grubbström <grubba@roxen.com>
-
- * src/*/*.c: Added many casts to make code more 64bit-safe.
-
-2001-03-07 Werner Lemberg <wl@gnu.org>
-
- * INSTALL, docs/BUILD: We need GNU make 3.78 or newer.
-
-2001-03-07 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/type1/t1objs.c (T1_Init_Face): Minor correction: We must wait
- until parse_font_bbox is changed before we use logical shift rights
- in the assignments of `root->ascender', `root->descender', and
- `root->max_advance_width'.
-
- (T1_Done_Face): Free `char_name' table to avoid a memory leak.
- Submitted by Sander van der Wal <svdwal@xs4all.nl>.
-
-2001-03-05 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/cff/cffgload.c (CFF_Load_Glyph): Set glyph control data to the
- the Type 2 glyph charstring (used by conversion programs).
- Submitted by Ha Shao <hashao@chinese.com>.
-
-2001-03-04 Antoine Leca <Antoine.Leca@renault.fr>
-
- * include/freetype/ttnameid.h: Correct a stupid typo which prevented
- correct compilation (TT_MS_LANGID_TIGRIGNA_ETHIOPIA appeared twice).
-
-2001-03-04 Werner Lemberg <wl@gnu.org>
-
- * src/autohint/ahtypes.h (AH_Hinter): Add elements
- `disable_horz_edges', `disable_vert_edges'.
- * src/autohint/ahhint.c (ah_hint_edges_3, ah_hinter_hint_edges): Use
- them (and remove static variables with the same names).
- * src/pcf/pcfutil.c (BitOrderInvert): Add `const'.
- * docs/glnames.py: Updated to latest pstables.h changes.
-
- * builds/unix/detect.mk: Add test for Hurd.
- * builds/hurd/detect.mk: Removed.
-
-2001-03-04 Sander van der Wal <svdwal@xs4all.nl>
-
- * src/psnames/pstables.h: Add more `const'.
- * src/pcf/pcfutil.c: Ditto.
-
-2001-03-04 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Fixing typo
- (FT_Glyph_Done -> FT_Done_Glyph).
-
-2001-03-01 Antoine Leca <Antoine.Leca@renault.fr>
-
- * include/freetype/ttnameid.h: Added some new Microsoft language
- codes and LCIDs as found in Office Xp.
-
-2001-02-28 David Turner <david.turner@freetype.org>
-
- * builds/hurd/detect.mk: New file. Added support to detect the GNU
- Hurd operating system as Unix-like. Fix submitted by Anthony Fok
- <foka@debian.org>.
-
- * src/type1/t1gload.c (T1_Load_Glyph): Set glyph control data to the
- the Type 1 glyph charstring (used by conversion programs).
- Submitted by Ha Shao <hashao@chinese.com>.
-
-2001-02-22 David Turner <david.turner@freetype.org>
-
- * src/base/ftgrays.c (grays_sweep): The function didn't exit
- immediately if `num_cells' was 0 as it should. Thanks to Boris for
- finding this out.
-
- * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Fixed memory leak when
- bitmap rendering fails (thanks to Graham Asher).
-
-2001-02-13 Werner Lemberg <wl@gnu.org>
-
- * docs/docmaker.py (DocSection::add_element): Use
- `self.print_error()'.
-
- * builds/unix/config.{guess,sub}: Updated (from ftp.gnu.org).
-
-2001-02-13 David Turner <david.turner@freetype.org>
-
- * docs/docmaker.py, include/freetype/*.h: Updated the DocMaker
- script to support chapters and section block ordering. Updated the
- public header files accordingly.
-
- * src/base/ftglyph.c (FT_Glyph_Copy): Advance width and glyph format
- were not correctly copied.
-
-2001-02-08 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/cff/cffparse.c (cff_parse_font_matrix): Removed an
- unnecessary fprintf( stderr, ... ).
-
-2001-02-07 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/type1/t1objs.c (T1_Init_Face): Added code to get the
- units_per_EM from the value assigned in parse_font_matrix, if
- available. Default to 1000 if not available.
-
- * src/cff/cffparse.c (cff_parse_font_matrix): Added logic to get
- the units_per_EM from the FontMatrix.
-
- (cff_parse_fixed_thousand): New function. Gets a real number from
- the CFF font, but multiplies by 1000 (this is to avoid rounding
- errors when placing this real number into a 16.16 fixed number).
-
- (cff_parse_real): Added code so that the integer part is moved
- into the high sixteen bits of the 16.16 fixed number.
-
- * src/cff/cffobjs.c (CFF_Init_Face): Added logic to get the units
- per EM from the CFF dictionary, if available.
-
- * include/freetype/internal/cfftypes.h: In struct CFF_Font_Dict_,
- added a units_per_em member to facilitate passing of units_per_em
- from function cff_parse_font_matrix.
-
- * src/type1/t1load.c (is_alpha): Make `-' a legal alphanumeric
- character. This is so that font names with `-' are fully parsed,
- etc...
-
-2001-02-02 Werner Lemberg <wl@gnu.org>
-
- * src/psaux/psobjs.c (shift_elements): Remove if clause (which is
- obsolete now).
-
- (reallocate_t1_table, PS_Table_Done): Replace REALLOC() with ALLOC()
- + MEM_Copy() to avoid a memory bug.
-
-2001-02-01 David Turner <david.turner@freetype.org>
-
- * docs/docmaker.py: Improved the index sorting routine to place
- capital letters before small ones. Added the `<order>' marker to
- section blocks in order to give the order of blocks.
-
-2001-01-30 Antoine Leca <Antoine.Leca@renault.fr>
-
- * include/freetype/ttnameid.h: Latest updates to Microsoft language
- ID codes.
-
-2001-01-24 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/cff/t1load.c (parse_font_matrix): Added heuristic to get
- units_per_EM from the font matrix.
-
- (parse_dict): Deleted test to see whether the FontInfo keyword has
- been seen. Deletion of this test allows fonts without FontInfo
- dictionaries to be parsed by the Type 1 driver.
-
- (T1_Open_Face): Deleted empty subroutines array test to make sure
- fonts with no subroutines still are parsed.
-
-2001-01-17 Francesco Zappa Nardelli <francesco.zappa.nardelli@ens.fr>
-
- * src/pcfread.c (pcf_get_properties, pcf_get_metrics,
- pcf_get_bitmaps): Fix compiler errors.
-
-2001-01-11 David Turner <david.turner@freetype.org>
-
- * src/pcf/pcfread.c: Removed some compilation warnings related
- to comparison of signed vs. unsigned integers.
-
- * include/freetype/internal/ftdebug.h: Changed the debug trace
- constants from trace_t2xxxx to trace_cffxxxx to be able to compile
- the CFF driver in debug mode.
-
-2001-01-11 Matthew Crosby <mcrosby@marthon.org>
-
- * builds/unix/freetype-config.in: Fix problems with separate
- --prefix and --exec-prefix.
-
-2001-01-11 David Turner <david.turner@freetype.org>
-
- * docs/docmaker.py: Added cross-references generation as well as
- more robust handling of pathname wildcard matching.
-
-2001-01-10 Werner Lemberg <wl@gnu.org>
-
- * docs/docmaker.py: Minor improvements to reduce unwanted spaces
- and empty lines in output.
-
-2001-01-09 David Turner <david.turner@freetype.org>
-
- * docs/docmaker.py: Improved script to generate table of contents
- and index pages. It also supports wildcards on non Unix systems.
-
- * include/freetype/*.h, include/freetype/cache/*.h: Updated comments
- to include section definitions/delimitations for the API Reference
- generator.
-
- * include/freetype/freetype.h: Moved declaration of
- `FT_Generic_Finalizer' and the `FT_Generic' structure to...
- * include/freetype/fttypes.h: here.
-
-2001-01-04 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ttnameid.h: Updated Unicode code range comments.
-
-2001-01-03 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/cff/rules.mk: Use cffgload.{c,h} instead of t2gload.{c,h}.
-
- * include/freetype/internal/internal.h: Changed to use cfftypes.h
- (cfferrs.h) instead of t2types.h (t2errors.h, respectively).
-
- * include/freetype/internal/cfftypes.h: Merged in changes from
- t2types.h and made this the canonical `types' header for the CFF
- driver.
-
- * include/freetype/internal/t2types.h: This file was merged with
- cfftypes.h and is no longer necessary.
-
- * include/freetype/internal/t2errors.h: Renamed to cfferrs.h.
-
- * src/cff/cffobjs.c, src/cff/cffobjs.h, src/cff/cffparse.c,
- src/cff/cffdrivr.c, src/cff/cff.c, src/cff/cffload.c,
- src/cff/cffgload.c, src/cff/cffgload.h: Changed to use
- cffgload.{c,h} instead of t2gload.{c,h}. All occurrences of t2_
- (T2_) were replaced with cff_ (CFF_, respectively).
-
- * src/cff/t2gload.h: Renamed cffgload.h.
-
- * src/cff/t2gload.c: Renamed cffgload.c
-
-2000-01-02 Jouk Jansen <joukj@hrem.stm.tudelft.nl>
-
- * builds/vms: Support files for VMS architecture added.
- * descrip.mms, src/*/descrip.mms: VMS makefiles added.
- * README.VMS: New file.
-
-2000-01-01 Werner Lemberg <wl@gnu.org>
-
- * LICENSE.TXT: Added info about PCF driver license.
-
-2001-01-01 Francesco Zappa Nardelli <francesco.zappa.nardelli@ens.fr>
-
- * src/pcf/*: New driver module for PCF font format (used in
- X Window System).
- * include/freetype/internal/ftdebug.h (FT_Trace): Added values for
- PCF driver.
- * include/freetype/internal/pcftypes.h: New file.
- * include/freetype/config/ftmodule.h: Added PCF driver module.
-
-2001-01-01 Werner Lemberg <wl@gnu.org>
-
- * src/winfonts/winfnt.c (FNT_Get_Char_Index): Fix parameter type.
-
-2000-12-31 Werner Lemberg <wl@gnu.org>
-
- * builds/modules.mk (clean_module_list): Fixed deletion of module
- file in case `make make_module_list' is called before `make setup'.
-
-2000-12-30 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffload.c (CFF_Load_Charset): Improved error messages.
- (CFF_Load_Charset, CFF_Load_Encoding): Remove unnecessary variable
- definition.
-
-2000-12-30 Tom Kacvinsky <tkacvins@freetype.org>
-
- * include/freetype/internal/t2types.h,
- include/freetype/internal/cfftypes.h: Changed the structures for
- CFF_Charset and CFF_Encoding for the new implementations of the
- charset and encoding parsers in the CFF driver.
-
- * src/cff/t2gload.c (t2_lookup_glyph_by_stdcharcode,
- t2_operator_seac): Added these functions for use in implementing the
- seac emulation provided by the Type 2 endchar operator.
- (T2_Parse_CharStrings): Added seac emulation for the endchar
- operator.
-
- * src/cff/cffload.c (CFF_Load_Encoding, CFF_Load_Charset,
- CFF_Done_Encoding, CFF_Done_Charset): Extended to load and parse the
- charset/encoding tables, and free the memory used by them when the
- CFF driver is finished with them. Added tables
-
- cff_isoadobe_charset
- cff_expert_charset
- cff_expertsubset_charset
- cff_standard_encoding
- cff_expert_encoding
-
- so that the encoding/charset parser can handle predefined encodings and
- charsets.
-
-2000-12-24 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/cff/t2gload.c (T2_Load_Glyph): Added code so that the font
- transform is applied.
-
- * src/cff/cffparse.c (cff_parse_font_matrix): Added code so that
- the font matrix numbers are scaled by 1/(matrix->yy). Also, the
- offset vector now contains integer values instead of 16.16 fixed
- numbers.
-
-2000-12-22 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/autohint/ahhint.c (ah_hinter_load_glyph):
- Removed unnecessary comments and commented-out code.
-
-2000-12-21 David Turner <david.turner@freetype.org>
-
- * src/cid/cidafm.c, src/cid/cidafm.h: removed un-needed files,
- we'll work on supporting CID AFM files later I guess :-)
-
-2000-12-21 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/autohint/ahhint.c (ah_hinter_load, ah_hinter_load_glyph):
- Changed so that fonts with a non-standard FontMatrix render
- correctly. Previously, the first glyph rendered from such a
- font did not have the transformation matrix applied.
-
-2000-12-17 Werner Lemberg <wl@gnu.org>
-
- * *.mk: Added lots of `.PHONY' targets.
-
-2000-12-17 Karsten Fleischer <kfleisc1@ford.com>
-
- * *.mk: Implemented `platform' target to disable auto-detection.
-
-2000-12-14 Werner Lemberg <wl@gnu.org>
-
- * docs/design/modules.html: Removed. Covered by design-*.html.
-
- * INSTALL: Added info about makepp.
-
-2000-12-14 David Turner <david.turner@freetype.org>
-
- Added support for clipped direct rendering in the smooth renderer.
- This should not break binary compatibility of existing applications.
-
- * include/freetype/fttypes.h, include/freetype/ftimage.h: Move
- definition of the FT_BBox structure from the former to the latter.
- * include/freetype/ftimage.h: Add `ft_raster_flag_clip' value to
- FT_Raster_Flag enumeration.
- Add `clip_box' element to FT_Raster_Params structure.
- * src/smooth/ftgrays.c (grays_convert_glyph): Implement it.
-
- * INSTALL: Updated installation instructions on Win32, listing the
- new `make setup list' target used to list supported
- compilers/targets.
-
- * src/raster/ftraster.c (ft_black_render): Test for unsupported
- direct rendering before testing arguments.
-
-2000-12-13 David Turner <david.turner@freetype.org>
-
- * include/freetype/config/ft2build.h,
- include/freetype/internal/internal.h: Fixed header inclusion macros
- to use direct definitions. This is the only way to do these things
- in a portable way :-( The rest of the code should follow shortly
- though everything compiles now.
-
- * builds/compiler/intelc.mk, builds/compiler/watcom.mk: New files.
-
- * builds/win32/detect.mk: Added support for the Intel C/C++
- compiler, as well as _preliminary_ (read: doesn't work!) support for
- Watcom. Also added a new setup target. Type `make setup list' for
- a list of supported command-line compilers on Win32.
-
- * src/base/ftdebug.c: Added dummy symbol to avoid empty file if
- conditionals are off.
-
-2000-12-13 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/ftsystem.c: Fixed typos. Fixed inclusion of wrong
- ftconfig.h file.
-
-2000-12-12 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/config/ft2build.h (FT2_ROOT, FT2_CONFIG_ROOT):
- Removed. ANSI C doesn't (explicitly) allow macro expansion in
- arguments using `##'.
- (FT2_PUBLIC_FILE, FT2_CONFIG_FILE, FT2_INTERNAL_FILE): Use directory
- names directly. Make them configurable. Use `##' to strip leading
- and trailing spaces from arguments.
-
- * builds/unix/ft2unix.h: Adapted.
-
- * src/base/ftsystem.c (ft_alloc, ft_realloc, ft_free, ft_io_stream,
- ft_close_stream): Use FT_CALLBACK_DEF.
-
- * builds/unix/ftsystem.c: Use new header scheme.
- (FT_Done_Memory): Use free() from FT_Memory structure.
-
- * src/base/ftinit.c, src/base/ftmac.c: Header scheme fixes.
-
-2000-12-11 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/config/ft2build.h (FT2_CONFIG_ROOT,
- FT2_PUBLIC_FILE, FT2_CONFIG_FILE, FT2_INTERNAL_FILE,
- FT_SOURCE_FILE): Use `##' operator to be really ANSI C compliant.
-
-2000-12-09 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/detect.mk: Remove unused USE_CFLAGS variable.
-
-2000-12-08 Werner Lemberg <wl@gnu.org>
-
- * */*.h: Changed body inclusion macro names to start and end with
- `__' (those which haven't converted yet). Fixed minor conversion
- issues.
-
- * src/winfonts/winfnt.c: Updated to new header inclusion scheme.
-
- * src/truetype/ttinterp.c: Remove unused CALC_Length() macro.
-
-2000-12-07 David Turner <david.turner@freetype.org>
-
- * */*.[ch]: Changed source files to adhere to the new
- header inclusion scheme. Not completely tested but works for now
- here.
-
- * src/cff/t2driver.c: Renamed and updated to...
- * src/cff/cffdrivr.c: New file.
- * src/cff/t2driver.h: Renamed and updated to...
- * src/cff/cffdrivr.h: New file.
- * src/cff/t2load.c: Renamed and updated to...
- * src/cff/cffload.c: New file.
- * src/cff/t2load.h: Renamed and updated to...
- * src/cff/cffload.h: New file.
- * src/cff/t2objs.c: Renamed and updated to...
- * src/cff/cffobjs.c: New file.
- * src/cff/t2objs.h: Renamed and updated to...
- * src/cff/cffobjs.h: New file.
- * src/cff/t2parse.c: Renamed and updated to...
- * src/cff/cffparse.c: New file.
- * src/cff/t2parse.h: Renamed and updated to...
- * src/cff/cffparse.h: New file.
- * src/cff/t2tokens.h: Renamed and updated to...
- * src/cff/cfftoken.h: New file.
-
- * src/cff/cff.c, src/cff/rules.mk: Updated.
-
-2000-12-06 David Turner <david.turner@freetype.org>
-
- * src/cache/ftlru.c (FT_Lru_Done): Fixed memory leak.
-
-2000-12-06 Werner Lemberg <wl@gnu.org>
-
- * builds/module.mk: Replaced `xxx #' with `xxx$(space).
- * builds/os2/detect.mk, builds/win32/detect.mk: Moved comment to
- avoid trailing spaces in variable.
- * builds/freetype.mk: Use $(D) instead of $D to make statement more
- readable.
-
- * docs/docmaker.py: Formatting.
-
-2000-12-05 David Turner <david.turner@freetype.org>
-
- * src/psaux/psauxmod.c: Fixed a broken inclusion of component
- header files (an FT_FLAT_COMPILE test was missing).
-
- * src/cache/ftcmanag.c (FTC_Manager_Done): Fixed a bug that caused
- an occasional crash when the function was called (due to a dangling
- pointer).
-
- * src/base/ftsystem.c (FT_Done_Memory): Fixed an obvious bug:
- The ANSI `free()' function was called instead of `memory->free()'.
-
- * docs/docmaker.py: Added section filtering, multi-page generation
- (index page generation is still missing though).
-
-2000-12-04 David Turner <david.turner@freetype.org>
-
- * builds/unix/install.mk, builds/unix/ft2unix.h: The file `ft2unix.h'
- is now installed as <ft2build.h> for Unix systems. Note that we
- still use the `freetype2/freetype' installation path for now.
-
- * */*.[ch]: Now using <ft2build.h> as the default build and setup
- configuration file in all public headers. Internal source files
- still need some changes though.
-
- * builds/devel/ft2build.h, builds/devel/ftoption.h: Created a new
- directory to hold all development options for both the Unix and
- Win32 developer builds.
-
- * builds/win32/detect.mk, builds/win32/w32-bccd.mk,
- builds/win32/w32-dev.mk: Changed the developer build targets to
- `devel-gcc' and `devel-bcc' in order to be able to develop with the
- Borland C++ compiler.
-
-2000-12-01 David Turner <david.turner@freetype.org>
-
-
- * Version 2.0.1 released.
- =========================
-
-
- * builds/unix/configure.in, builds/unix/configure,
- builds/cygwin/configure.in, builds/cygwin/configure: Setting
- `version_info' to 6:1:0 for the 2.0.1 release.
-
- * CHANGES: Added a summary of changes between 2.0.1 and 2.0.
-
- * builds/unix/ftconfig.in, builds/cygwin/ftconfig.in: Changes
- to allow compilation under Unix with the Unix-specific config
- files.
-
-2000-12-01 Werner Lemberg <wl@gnu.org>
-
- * INSTALL: Revised.
- * builds/compiler/bcc-dev.mk, builds/compiler/visualage.mk,
- builds/compiler/bcc.mk, builds/win32/w32-bcc.mk,
- builds/win32/w32-bccd.mk: Revised.
- * include/freetype/config/ftbuild.h,
- include/freetype/internal/internal.h: Revised.
- * include/freetype/ftimage.h: Updated to new header inclusion scheme.
-
-2000-11-30 Werner Lemberg <wl@gnu.org>
-
- * builds/toplevel.mk (.PHONY): Adding `distclean'.
- * builds/unix/detect.mk (.PHONY): Adding `devel', `unix', `lcc',
- `setup'.
-
-2000-11-30 David Turner <david.turner@freetype.org>
-
- * INSTALL: Slightly updated the quick starter documentation to
- include IDE compilation, prevent against BSD Make, and specify `make
- setup' instead of a single `make' for build configuration.
-
- * include/config/ftbuild.h, include/internal/internal.h: Added new
- configuration files used to determine the location of all public,
- configuration, and internal header files for FreeType 2. Modified
- all headers under `include/freetype' to reflect this change. Note
- that we still need to change the library source files themselves
- though.
-
- * builds/compiler/bcc.mk, builds/compiler/bcc-dev.mk,
- builds/win32/w32-bcc.mk, builds/win32/w32-bccd.mk,
- builds/win32/detect.mk: Added new files to support compilation with
- the free Borland C++ command-line compiler. Modified the detection
- rules to recognize the new `bcc32' target in `make setup bcc32'.
-
- * src/sfnt/ttcmap.c, src/sfnt/ttpost.c, src/sfnt/ttsbit.c,
- src/truetype/ttobjs.c, src/truetype/ttgload.c,
- src/truetype/ttinterp.c: Fixed a few comparisons that Borland C++
- didn't really like. Basically, this compiler complains when FT_UInt
- is compared to FT_UShort (apparently, it promotes `UShort' to `Int'
- in these cases).
-
-2000-11-30 Tom Kacvinsky <tkacvins@freetype.org>
-
- * t2objs.c (T2_Init_Face): Added calculation of `face->height' for
- pure CFF fonts.
-
- * t1objs.c (T1_Init_Face): Fixed computation of `face->height'.
-
-2000-11-29 David Turner <david.turner@freetype.org>
-
- * src/base/ftbbox.c (BBox_Conic_Check): Fixed a really stupid
- bug in the formula used to compute the conic Bézier extrema
- of non-monotonous arcs.
-
-2000-11-29 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftcalc.c (FT_SqrtFixed), src/base/ftobjs.c
- (FT_Set_Renderer): Use FT_EXPORT_DEF.
- * src/cache/ftcimage.c (FTC_Image_Cache_Lookup),
- src/cache/ftcmanag.c (FTC_Manager_Done, FTC_Manager_Reset,
- FTC_Manager_Lookup_Face, FTC_Manager_Lookup_Size,
- FTC_Manager_Register_Cache), src/cache/ftcsbits.c
- (FTC_SBit_Cache_Lookup): Ditto.
-
- * src/include/freetype/cache/ftcglyph.h (FTC_GlyphNode_Init),
- src/include/freetype/ftmac.h (FT_New_Face_From_FOND): Use FT_EXPORT.
-
-2000-11-29 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfdriver.c: Include ttsbit.h and ttpost.h only
- conditionally.
-
- * src/truetype/ttdriver.c (Set_Char_Sizes, Set_Pixel_Sizes): Set
- `size->strike_index' only conditionally.
-
- * src/type1/t1driver.c, src/type1/t1objs.c: Include t1afm.h only
- conditionally.
-
- * src/winfonts/winfnt.h: Move all type definitions to...
- * src/include/freetype/internal/fnttypes.h: New file.
- * src/winfonts/winfnt.c: Use it.
-
-2000-11-29 ??? ??? <darin@eazel.com>
-
- * include/freetype/internal/ftdebug.h: Replaced FT_CAT and FT_XCAT
- with a direct solution (which also satisfies picky compilers).
-
-2000-11-28 YAMANO-UCHI Hidetoshi <mer@din.or.jp>
-
- * src/truetype/ttobjs.c (TT_Init_Size): Fix #ifdef's to work with
- disabled interpreter also.
-
- * src/base/ftnames.c (FT_Get_Sfnt_Name_Count): Fix incorrect
- parentheses.
-
-2000-11-26 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/cff/t2gload.c (T2_Parse_CharStrings): Added logic to glyph
- width setting code to take into account even/odd argument counts
- and glyph width operand before endchar/hmoveto/vmoveto.
-
-2000-11-26 Werner Lemberg <wl@gnu.org>
-
- * builds/ansi/ansi.mk: Fix inclusion order of files.
-
-2000-11-26 Keith Packard <keithp@keithp.com>
-
- * src/type1/t1objs.c (T1_Init_Face): Compute style flags.
-
-2000-11-26 Werner Lemberg <wl@gnu.org>
-
- * builds/compiler/ansi-cc.mk (CLEAN_LIBRARY): Fix rule and
- conditional.
-
-2000-11-23 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_subrs, parse_charstrings): Use decrypt
- function from PSAux module.
-
- * src/type1/t1parse.c (T1_Done_Parse): Renamed to...
- (T1_Finalize_Parser): New function (to avoid name clash with a
- function in the PSAux module).
- (T1_Decrypt): Removed since it is duplicated in the PSAux module.
- (T1_Get_Private_Dict): Added `psaux' as new parameter; use decrypt
- function from PSAux module.
-
- * src/type1/t1parse.h: Adapted.
-
-2000-11-22 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/cff/t2objs.c (T2_Init_Face): For pure CFF fonts, set
- `root->num_faces' to `cff->num_faces' and set `units_per_EM'
- to 1000.
-
- * src/cff/t2parse.c (parse_t2_real): Fixed real number parsing
- loop.
-
- * src/cff/t2load.c (T2_Get_String): Called T2_Get_Name with a
- sid that was off by one.
-
-2000-11-16 David Turner <david@freetype.org>
-
- * src/autohint/ahtypes.h (AH_Hinter): Added new fields to control
- auto-hinting of synthetic Type 1 fonts.
-
- * src/autohint/ahhint.c (ah_hinter_load, ah_hinter_load_glyph):
- Added auto-hinting support of synthetic Type 1 fonts.
-
-2000-11-12 Tom Kacvinsky <tkacvins@freetype.org>
-
- * src/sfnt/ttload.c (TT_LookUp_Table, TT_Load_Generic_Table): Change
- tracing output.
-
- * src/sfnt/sfobjs.c (SFNT_Load_Face): Set boolean variable
- `has-outline' to true only if the font has a `glyf' or `CFF ' table.
-
-2000-11-11 Werner Lemberg <wl@gnu.org>
-
- * builds/win32/visualc/freetype.dsp: Fix raster1->raster and
- type1z->type1.
-
-2000-11-11 Tom Kacvinsky <tkacvins@freetype.org>
-
- * builds/unix/freetype-config.in, builds/cygwin/freetype-config.in:
- Added a --libtool option. When freetype-config --libtool is
- invoked, the absolute path to the libtool convenience library
- is returned.
-
-2000-11-11 Werner Lemberg <wl@gnu.org>
-
- * builds/cygwin/cygwin-def.in: Same fix as previous.
-
-2000-11-10 Tom Kacvinsky <tkacvins@freetype.org>
-
- * builds/unix/unix-def.in: Add
-
- INSTALL_PROGRAM := @INSTALL_PROGRAM@
- INSTALL_SCRIPT := @INSTALL_SCRIPT@
-
- so that installation of freetype-config does not fail.
-
-2000-11-10 Werner Lemberg <wl@gnu.org>
-
- * builds/cygwin/freetype-config.in, builds/unix/freetype-config.in:
- Move test down for empty --exec-prefix.
- Fix --version.
-
- * builds/cygwin/install.mk, builds/unix/install.mk: Use
- $(INSTALL_SCRIPT) for installation of freetype-config.
-
- * builds/cygwin/install.mk: Fix clean target names.
-
-2000-11-09 David Turner <david@freetype.org>
-
-
- * Version 2.0 released.
- =======================
-
-----------------------------------------------------------------------------
-
-Copyright 2000-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used, modified,
-and distributed under the terms of the FreeType project license,
-LICENSE.TXT. By continuing to use, modify, or distribute this file you
-indicate that you have read the license and understand and accept it
-fully.
-
-
-Local Variables:
-version-control: never
-coding: utf-8
-End:
diff --git a/ChangeLog.21 b/ChangeLog.21
deleted file mode 100644
index eff9f799d..000000000
--- a/ChangeLog.21
+++ /dev/null
@@ -1,9438 +0,0 @@
-2005-06-08 Werner Lemberg <wl@gnu.org>
-
-
- * Version 2.1.10 released.
- ==========================
-
-
- * src/pcf/readme: Renamed to...
- * src/pcf/README: This.
-
-2005-06-07 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * builds/amiga/*: Added copyright notes, reworked some comments.
-
-2005-06-05 Werner Lemberg <wl@gnu.org>
-
- * Add copyright notices to all files which don't have one.
-
- * docs/license.txt: Renamed to...
- * docs/LICENSE.TXT: This.
- * docs/FTL.txt: Renamed to...
- * docs/FTL.TXT: This.
- * docs/GPL.txt: Renamed to...
- * docs/GPL.TXT: This.
-
- * docs/PATENTS: Slightly reworded. Suggested by Sylvain Beucler
- <beuc@gnu.org>.
-
-2005-06-04 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftimage.h (FT_Outline_MoveToFunc,
- FT_Outline_LineToFunc, FT_Outline_ConicToFunc,
- FT_Outline_CubicToFunc, FT_Raster_RenderFunc),
- include/freetype/ftrender.h (FT_Glyph_TransformFunc,
- FT_Renderer_RenderFunc, FT_Renderer_TransformFunc): Don't use
- `const' to stay compatible with FreeType 2.1.9.
-
-2005-06-01 Adam D. Moss <adam@gimp.org>
-
- * src/base/ftstroke.c (ft_stroker_inside): Revert `sigma' patch from
- 2004-07-11; this gives much better results under normal
- circumstances.
-
-2005-05-30 Chia I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/ftbitmap.h (FT_Bitmap_Embolden): Minor
- documentation improvements.
-
- * include/freetype/ftoutln.h (FT_Outline_Embolden): Fix typos.
-
- * src/base/ftbitmap.c (FT_Bitmap_Embolden): Add support for bitmap
- of pixel_mode FT_PIXEL_MODE_GRAY2 or FT_PIXEL_MODE_GRAY4.
- If xstr is larger than 8 and bitmap is of pixel_mode
- FT_PIXEL_MODE_MONO, set xstr to 8 instead of returning error.
-
-2005-05-29 Chia I Wu <b90201047@ntu.edu.tw>
-
- * src/base/ftbitmap.c (FT_Bitmap_Embolden): Fix emboldening bitmap
- of mode FT_PIXEL_MODE_GRAY. Also add support for mode
- FT_PIXEL_MODE_LCD and FT_PIXEL_MODE_LCD_V.
- (ft_bitmap_assure_buffer): FT_PIXEL_MODE_LCD and FT_PIXEL_MODE_LCD_V
- should have ppb (pixel per byte) 1.
- Zero the padding when there's no need to allocate memory.
-
- * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Handle slot->advance
- too.
- More suited emboldening strength.
-
-2005-05-28 Chia I Wu <b90201047@ntu.edu.tw>
-
- * src/base/ftbitmap.c (FT_Bitmap_Embolden): Handle negative pitch.
- Handle FT_PIXEL_MODE_GRAY with num_gray != 256.
- Improve speed for FT_PIXEL_MODE_GRAY.
- (ft_bitmap_assure_buffer): Accept FT_PIXEL_MODE_LCD and
- FT_PIXEL_MODE_LCD_V.
-
-2005-05-27 Chia I Wu <b90201047@ntu.edu.tw>
-
- * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Initialize `error'.
-
- * src/base/ftobjs.c (ft_cmap_done_internal): New function.
- (FT_CMap_Done): Remove cmap from cmap list.
- (destroy_charmaps, FT_CMap_New): Don't call FT_CMap_Done but
- ft_cmap_done_internal.
-
-2005-05-26 Werner Lemberg <wl@gnu.org>
-
- * docs/GPL.txt: Update postal address of FSF.
-
-2005-05-26 Chia I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/ftbitmap.h (FT_Bitmap_Embolden): Improve
- documentation.
-
- * src/base/ftsynth.c (FT_BOLD_THRESHOLD): Removed.
- (FT_GlyphSlot_Embolden): Check whether slot is bitmap owner.
- Always modify the metrics.
-
-2005-05-24 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2005-05-24 Chia I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/ftbitmap.h (FT_Bitmap_Embolden): New declaration.
-
- * include/freetype/ftoutln.h (FT_Outline_Embolden): New declaration.
-
- * src/base/ftbitmap.c (ft_bitmap_assure_buffer): New auxiliary
- function.
- (FT_Bitmap_Embolden): New function.
-
- * src/base/ftoutln.c (FT_Outline_Embolden): New function.
-
- * src/base/ftsynth.c: Don't include FT_INTERNAL_CALC_H and
- FT_TRIGONOMETRY_H but FT_BITMAP_H.
- (FT_GlyphSlot_Embolden): Use FT_Outline_Embolden or
- FT_Bitmap_Embolden.
-
-2005-05-24 Werner Lemberg <wl@gnu.org>
-
- * configure: Always remove config.mk, builds/unix/unix-def.mk, and
- builds/unix/unix-cc.mk. This fixes repeated calls of the script.
- Reported by Nelson Beebe and Behdad Esfahbod.
-
- * README.CVS: Mention file permissions.
-
-2005-05-23 Werner Lemberg <wl@gnu.org>
-
- * builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk
- (CFLAGS), builds/compiler/gcc.mk (CFLAGS): Remove
- -fno-strict-aliasing.
-
- * src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c --
- it is currently loaded from ttsbit.c.
-
-2005-05-23 Behdad Esfahbod <behdad@cs.toronto.edu>
-
- Say you have `(Foo*)x' and want to assign, pass, or return it as
- `(Bar*)'. If you simply say `x' or `(Bar*)x', then the C compiler
- would warn you that type casting incompatible pointer types breaks
- strict-aliasing. The solution is to cast to `(void*)' instead which
- is the generic pointer type, so the compiler knows that it should
- make no strict-aliasing assumption on `x'. But the problem with
- `(void*)x' is that seems like in C++, unlike C, `void*' is not a
- generic pointer type and assigning `void*' to `Bar*' without a cast
- causes an error. The solution is to cast to `Bar*' too, with
- `(Bar*)(void*)x' as the result -- this is what the patch does.
-
- * include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP),
- include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Remove
- cast on lvalue, use a temporary pointer instead.
- Cast temporarily to (void*) to not break strict aliasing.
-
- * include/freetype/internal/ftmemory.h (FT_MEM_ALLOC,
- FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC, FT_MEM_FREE),
- src/base/ftglyph.c (FT_Glyph_To_Bitmap): Cast temporarily to (void*)
- to not break strict aliasing.
-
- * src/base/ftinit.c (FT_USE_MODULE): Fix wrong type information.
-
- * builds/unix/configure.ac (XX_CFLAGS): Remove -fno-strict-aliasing.
-
-2005-05-23 David Turner <dturner@freetype.org>
-
- Fix Savannah bug #12213 (incorrect behaviour of the cache sub-system
- in low-memory conditions).
-
- * include/freetype/cache/ftccache.h (FTC_CACHE_TRYLOOP,
- FTC_CACHE_TRYLOOP_END): New macros.
-
- * src/cache/ftccache.c (FTC_Cache_NewNode), src/cache/ftcsbits.c
- (ftc_snode_compare): Use FT_CACHE_TRYLOOP and FTC_CACHE_TRYLOOP_END.
-
-2005-05-23 Werner Lemberg <wl@gnu.org>
-
- * src/base/rules.mk (BASE_SRC): Don't add ftsynth.c here but...
- (BASE_EXT_SRC): Here.
-
-2005-05-22 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftrfork.c (raccess_guess_apple_generic): Mark
- `version_number' and `entry_length' as unused.
- (raccess_guess_linux_double_from_file_name): Remove `memory'.
- (raccess_make_file_name): Mark `error' as unused.
-
- * src/bdf/bdflib.c (_bdf_parse_properties): Remove `memory'.
-
- * src/cid/cidobjs.c (cid_face_init): Remove `psnames'.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Remove `memory'.
-
- * src/truetype/ttgxvar.c (ft_var_readpackedpoints,
- ft_var_readpackeddeltas, ft_var_load_avar): Mark `error' as unused.
-
- * src/base/rules.mk (BASE_SRC): Add ftsynth.c.
-
-2005-05-21 David Turner <david@freetype.org>
-
- * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Fix a bug that
- produced unpleasant artefacts when trying to embolden very sharp
- corners.
-
-2005-05-20 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2005-05-20 Chia I Wu <b90201047@ntu.edu.tw>
-
- * src/base/ftbitmap.c: Don't include FT_FREETYPE_H and FT_IMAGE_H
- but FT_BITMAP_H.
- (FT_Bitmap_Copy): New function (from ftglyph.c).
-
- * include/freetype/ftbitmap.h (FT_Bitmap_Copy): New public
- definition.
-
- * src/base/ftglyph.c: Include FT_BITMAP_H.
- (ft_bitmap_copy): Move to ftbitmap.c.
- (ft_bitmap_glyph_init): Remove `memory' variable.
- Create new bitmap object if FT_GLYPH_OWN_BITMAP isn't set.
- (ft_bitmap_glyph_copy): Use FT_Bitmap_Copy.
- (ft_bitmap_glyph_done): Use FT_Bitmap_Done.
- (ft_outline_glyph_init): Use FT_Outline_Copy.
-
- * src/base/ftoutln.c (FT_Outline_Copy): Handle source == target.
- (FT_Outline_Done_Internal): Check for valid `memory' pointer.
- (FT_Outline_Translate, FT_Outline_Reverse, FT_Outline_Render,
- FT_Outline_Transform): Check for valid `outline' pointer.
-
- * src/base/ftobjs.c (FT_New_GlyphSlot): Prepend glyph slot to
- face->glyph, otherwise a new second glyph slot cannot be created.
- (FT_Done_GlyphSlot): Fix memory leak.
- (FT_Open_Face): Updated -- face->glyph is already managed by
- FT_New_GlyphSlot.
-
- * src/type42/t42objs.c (T42_GlyphSlot_Done): Updated.
-
-2005-05-20 Kirill Smelkov <kirr@mns.spb.ru>
-
- * include/freetype/ftimage.h (FT_Raster_Params),
- include/freetype/ftoutln.h (FT_Outline_Translate,
- FT_Outline_Transform), src/base/ftoutln.c (FT_Outline_Translate,
- FT_Outline_Transform): Decorate parameters with `const' where
- appropriate.
- Update all callers.
-
- * src/raster/ftraster.c (ft_black_reset), src/smooth/ftgrays.c
- (gray_raster_reset): Remove `const' from `pool_base' argument.
-
-2005-05-18 Kirill Smelkov <kirr@mns.spb.ru>
-
- * src/raster/ftmisc.h: New file. Only needed if ftraster.c is
- compiled as stand-alone.
-
- * src/raster/ftraster.c: Add comment how to compile as stand-alone.
- s/FT_CONFIG_OPTION_STATIC_RASTER/FT_STATIC_RASTER/.
- s/TT_STATIC_RASTER/FT_STATIC_RASTER/.
- [_STANDALONE_]: Include ftimage.h and ftmisc.h.
- (FT_TRACE1, FT_TRACE6, ft_memset, FT_MEM_ZERO): Define
- conditionally.
- (Render_Glyph, Render_Gray_Glyph): Return Raster_Err_None (or
- Raster_Err_Unsupported).
- (ft_black_new) [_STANDALONE_]: Fix type of `the_raster'.
- (ft_black_init, ft_black_reset, ft_black_set_mode, ft_black_render):
- Use `ras', not `raster'.
- (ft_black_done): Use FT_UNUSED_RASTER.
- (Horizontal_Sweep_Init, Horizontal_Sweep_Step,
- Horizontal_Gray_Sweep_Span): Use FT_UNUSED_RASTER.
-
-2005-05-18 Werner Lemberg <wl@gnu.org>
-
- * docs/announce: Start updating.
-
- * docs/CHANGES: Updated.
-
-2005-05-16 Vitaliy Pasternak <v_a_pasternak@mail.ru>
-
- * builds/win32/visualc/freetype.vcproj: Updated.
- Exclude debug info for `Release' versions to reduce library size.
-
-2005-05-16 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_Open_Face): Make it work as documented, this
- is, ignore `aface' completely if face_index < 0. Reported by David
- Osborn <spam@habitualhiatus.com>.
-
-2005-05-16 Kirill Smelkov <kirr@mns.spb.ru>
-
- * include/freetype/ftimage.h (FT_Outline_MoveToFunc,
- FT_Outline_LineTo_Func, FT_Outline_ConicToFunc,
- FT_Outline_CubicToFunc), src/smooth/ftgrays.c (gray_render_conic,
- gray_render_cubic, gray_move_to, gray_line_to, gray_conic_to,
- gray_cubic_to, gray_render_span, gray_sweep): Decorate parameters
- with `const' where appropriate.
-
-2005-05-11 Kirill Smelkov <kirr@mns.spb.ru>
-
- * include/freetype/ftimage.h (FT_Raster_RenderFunc),
- include/freetype/ftrender.h (FT_Glyph_TransformFunc,
- FT_Renderer_Render_Func, FT_Renderer_TransformFunc),
- src/base/ftglyph.c (ft_outline_glyph_transform),
- src/raster/ftrend1.c (ft_raster1_transform, ft_raster1_render),
- src/smooth/ftgrays.c (FT_Outline_Decompose, gray_raster_render),
- src/smooth/ftsmooth.c (ft_smooth_transform,
- ft_smooth_render_generic, ft_smooth_render, ft_smooth_render_lcd,
- ft_smooth_render_lcd_v): Decorate parameters with `const' where
- appropriate.
-
- * src/raster/ftraster.c (RASTER_RENDER_POOL): Removed. Obsolete.
- (ft_black_render): Decorate parameters with `const' where
- appropriate.
-
-2005-05-11 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttcmap.c (tt_cmap4_set_range): Fix typo (FT_PEEK_SHORT ->
- FT_PEEK_USHORT) which caused crashes. Reported by Ismail Donmez
- <ismail@kde.org.tr>.
-
-2005-05-08 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/ftserv.h (FT_FACE_FIND_GLOBAL_SERVICE)
- [__cplusplus]: Fix typo.
-
-2005-05-07 Werner Lemberg <wl@gnu.org>
-
- Handle unsorted SFNT type 4 cmaps correctly (reported by Dirck
- Blaskey <listtarget@danbala.com>).
-
- * src/sfnt/ttcmap.h (TT_CMap): Add member `unsorted'.
- * src/sfnt/ttcmap.c: Use SFNT_Err_Ok where appropriate.
-
- (tt_cmap0_validate, tt_cmap2_validate, tt_cmap6_validate,
- tt_cmap8_validate, tt_cmap10_validate, tt_cmap12_validate): Use
- `FT_Error' as return type.
- (tt_cmap4_validate): Use `FT_Error' as return type.
- Return error code for unsorted cmap.
- (tt_cmap4_char_index, tt_cmap4_char_next): Use old code for unsorted
- cmaps.
- (tt_face_build_cmaps): Set `unsorted' variable in cmap.
-
-2005-05-07 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttpload.c (tt_face_get_location): Fix typo.
-
-2005-05-06 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffobjs.c (cff_face_init): Set ppem value in top
- dictionary for SFNT-based CFF.
-
-2005-05-05 Werner Lemberg <wl@gnu.org>
-
- Handle malformed `loca' table entries.
-
- * docs/TODO: Add some bugs which should be fixed.
-
- * include/freetype/internal/tttypes.h (TT_FaceRec): Add `glyf_len'
- element.
-
- * src/truetype/ttpload.c (tt_face_load_loca): Get length of `glyf'
- table.
- (tt_face_get_location): Fix computation of `asize' for malformed
- `loca' entries.
-
-2005-05-01 David Turner <david@freetype.org>
-
- * Jamfile: Remove `otvalid' from the list of compiled modules.
-
- * include/freetype/internal/ftserv.h: Add compiler pragmas to get
- rid of annoying warnings with Visual C++ compiler in maximum warning
- mode.
-
- * src/autofit/afhints.c, src/autofit/aflatin.c, src/base/ftstroke.c,
- src/bdf/bdfdrivr.c, src/cache/ftcbasic.c, src/cache/ftccmap.c,
- src/cache/ftcmanag.c, src/cff/cffload.c, src/cid/cidload.c,
- src/lzw/zopen.c, src/otvalid/otvgdef.c, src/pcf/pcfread.c,
- src/sfnt/sfobjs.c, src/truetype/ttgxvar.c: Remove compiler warnings.
-
-2005-04-28 Werner Lemberg <wl@gnu.org>
-
- * docs/TODO: Updated.
-
-2005-04-24 Werner Lemberg <wl@gnu.org>
-
- * src/otvalid/otvcommn.c
- (otv_GSUBGPOS_have_MarkAttachmentType_flag): Handle table == 0.
-
-2005-04-16 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffobjs.c (cff_face_init): Set default upem value in top
- font dict also.
- Handle font matrix settings in subfonts.
-
- * src/cff/cffgload.c (cff_slot_load): Use the correct font matrix
- for CID-keyed fonts with subfonts.
-
- * docs/formats.txt: Updated.
-
-2005-04-14 Kirill Smelkov <kirr@mns.spb.ru>
-
- * include/freetype/freetype.h (FT_Vector_Transform),
- include/freetype/ftimage.h (FT_Raster_Params),
- include/freetype/ftoutln.h, src/base/ftoutln.c (FT_Outline_Get_CBox,
- FT_Outline_Copy, FT_Outline_Transform, FT_Vector_Transform,
- FT_Outline_Get_Bitmap), src/raster/ftraster.c (ft_black_render),
- src/smooth/ftgrays.c (gray_raster_render): Decorate parameters with
- `const' where appropriate.
-
-2005-04-14 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_charstrings): Catch this non-standard
- beginning of the /CharStrings dictionary:
-
- /CharStrings 118 dict def
- Private begin
- CharStrings begin
-
- * src/sfnt/ttsbit0.c (tt_sbit_decoder_load_image): Fix arguments
- to call of tt_sbit_decoder_load_bitmap.
-
-2005-04-13 Werner Lemberg <wl@gnu.org>
-
- * docs/TODO: Updated.
-
- * autogen.sh: Use `--force' for all commands.
-
-2005-04-09 Werner Lemberg <wl@gnu.org>
-
- * src/pshinter/pshalgo.c (ps_hints_apply): Change scaling values
- only if `fitted' is not zero.
-
-2005-04-06 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (tt_face_get_metrics) [FT_OPTIMIZE_MEMORY]:
- Fix typo which sometimes causes wrong metrics for the last glyph.
-
-2005-04-04 David Turner <david@freetype.org>
-
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (FT_OPTIMIZE_MEMORY): Comment out this macro for the upcoming 2.1.10
- release.
- (*_CHESTER_*): Removed. No longer used.
-
- * src/autofit/afhints.c (af_axis_hints_new_segment,
- af_axis_hints_new_edge): Small tweak to use less heap memory.
-
-2005-04-03 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1parse.c (T1_New_Parser): Relax the check for a valid
- first line in the font.
-
-2005-04-03 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES, include/freetype/freetype.h: Improve documentation
- of FT_Set_Pixel_Sizes and FT_Set_Char_Size.
-
-2005-03-26 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * builds/amiga/src/base/ftsystem.c (ft_amiga_stream_io): Fix buffer
- offsets after a large read.
-
-2005-03-26 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afglobal.c (af_face_globals_get_metrics):
- s/index/gidx/.
-
- * src/sfnt/ttsbit0.c (tt_sbit_decoder_load_image): Fix compiler
- warnings.
-
- * src/sfnt/rules.mk (SFNT_DRV_SRC): Add ttsbit0.c.
-
- * src/sfnt/ttsbit0.h: Dummy file for build with `make'.
-
-2005-03-26 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- Update of the Amiga port.
-
- * builds/amiga/makefile, builds/amiga/makefile.os4,
- builds/amiga/smakefile: Included the base extension files
- (ftbitmap.c, ftotval.c, ftpfr.c, ftstroke.c, ftxf86.c).
-
-2005-03-25 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- Update of the Amiga port.
-
- * builds/amiga/makefile, builds/amiga/smakefile: Handle new modules.
-
- * builds/amiga/makefile.os4: Makefile for AmigaOS4 SDK.
-
- * builds/amiga/README: Updated.
-
- * builds/amiga/include/freetype/config/ftconfig.h: Handle gcc for
- AmigaOS4.
-
- * builds/amiga/include/freetype/config/ftmodule.h: Handle new
- modules.
-
- * builds/amiga/src/base/ftdebug.c: Updated to current version of
- default ftdebug.c.
- Add various include files and macros to have proper support for
- both AmigaOS4 and older AmigaOS versions.
- Don't declare KVPrintF explicitly.
- Replace getenv with GetVar.
- Actually enable debugging code.
-
- * builds/amiga/src/base/ftsystem.c: Major rewrite.
-
-2005-03-23 Werner Lemberg <wl@gnu.org>
-
- * tests/*: Removed.
-
-2005-03-23 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES, docs/INSTALL.ANY: Updated.
-
- * include/freetype/ftmoderr.h: Replace `Autohint' with `Autofit'.
- Add `OTvalid'.
-
- * src/autofit/aferrors.h: New file.
-
- * src/autofit/afglobal.c, src/autofit/afhints.c,
- src/autofit/aflatin.c, src/autofit/afloader.c: s/FT_Err_/AF_Err_/.
- Include aferrors.h.
-
- * src/autofit/rules.mk (AUTOF_DRV_H): Include aferrors.h.
-
- * src/otvalid/otverror.h: s/FT_Mod_Err_OTV/FT_Mod_Err_OTvalid/.
-
-2005-03-22 David Turner <david@freetype.org>
-
- * src/autohint/*: Removed.
- * Jamfile: Updated.
-
-2005-03-15 David Turner <david@freetype.org>
-
- * src/bdf/bdflib.c: Remove compiler warnings.
- (hash_rehash, hash_init): Don't call FT_MEM_ZERO.
- (_bdf_list_t): Add `memory' field.
- (_bdf_list_init, _bdf_list_done, _bdf_list_ensure): New functions.
- (_bdf_shift, _bdf_join): Rename to...
- (_bdf_list_shift, _bdf_list_join): This.
- (_bdf_split): Renamed to...
- (_bdf_list_split): This. Use new functions.
- (bdf_internal_readstream): Removed.
- (NO_SKIP): New macro.
- (_bdf_readstream): Rewritten.
- (bdf_create_property, _bdf_add_comment): Improve allocation.
- (_bdf_set_default_spacing, _bdf_parse_glyphs): Updated. Improve
- allocation.
- (_bdf_parse_properties, _bdf_parse_start): Updated.
- (bdf_load_font): Updated to use new functions.
-
- * src/type1/t1parse.c (check_type1_format): New function.
- (T1_New_Parser): Use it to check font header before allocating
- anything on the heap.
-
- * src/type42/t42parse.c (t42_parser_init): Modify functions to check
- the font header before allocating anything on the heap.
-
- * include/freetype/internal/ftmemory.h (FT_ARRAY_MAX,
- FT_ARRAY_CHECK): New macros.
-
- * src/base/ftstream.c (FT_Stream_TryRead): New function.
- * include/freetype/internal/ftstream.h: Updated.
-
- * src/pcf/pcfread.c (pcf_read_TOC), src/pcf/pcfutil.c
- (BitOrderInvert, TwoByteSwap, FourByteSwap): Minor fixes and
- simplifications. Try to protect the PCF driver from doing stupid
- things with broken fonts.
-
- * src/lzw/ftlzw.c (FT_Stream_OpenLZW): Check the LZW header before
- doing anything else. This avoids unnecessary heap allocations
- (400KByte of heap memory for the LZW decoder).
-
- * src/gzip/ftgzip.c (FT_Stream_OpenGzip): Ditto for the gzip
- decoder, although the code savings are smaller.
-
- * docs/CHANGES: Updated.
-
-2005-03-10 David Turner <david@freetype.org>
-
- * src/tools/glnames.py: Add comment to explain the compression
- being used for the Adobe Glyph List.
-
-2005-03-10 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttpload.c (tt_face_load_cvt, tt_face_load_fpgm):
- Fix serious typo which prevented correct TT rendering.
-
- * include/freetype/internal/ftmemory.h: Undo change from 2005-03-03.
- To suppress warnings it is sufficient to use `-fno-strict-aliasing'.
-
-2005-03-10 Werner Lemberg <wl@gnu.org>
-
- * src/tools/glnames.py: Formatted.
- Format output to be in sync with other FreeType code.
- Import `re' and `os.path'.
- (StringTable) <__init__>: Add parameter to initialize master table
- name.
- (StringTable) <dump>: Don't pass master table name.
- (StringTable) <dump_sublist>: Emit explanatory comment.
- Simplify and make output more human readable.
- (t1_bias, glyph_list, adobe_glyph_names): Removed. Unused.
- (main): Use `basename' for file name in header.
-
- * src/psnames/pstables.h: Regenerated.
-
-2005-03-09 David Turner <david@freetype.org>
-
- * src/tools/glnames.py: Rewrite the generator for the `pstables.h'
- header file which contains various constant tables related to glyph
- names. It now uses a different, more compact storage scheme that
- saves about 20KB. This also closes Savannah bug #12262.
-
- * src/psnames/pstables.h: Regenerated.
-
- * src/psnames/psmodule.c (ps_unicode_value): Use
- `ft_get_adobe_glyph_index', a new function defined in `pstables.h'.
- (ps_get_macintosh_name, ps_get_standard_strings): Updated.
-
- * src/base/ftobjs.c (FT_Set_Char_Size): Handle fractional sizes
- more carefully. This fixes Savannah bug #12263.
-
-2005-03-06 David Turner <david@freetype.org>
-
- * src/otvalid/otvgsub.c, src/otvalid/otvgpos.c: Make static tables
- constant.
-
- * src/autofit/aflatin.c (af_latin_metrics_init): Fix Savannah bug
- #12212 (auto-hinter refuses to work if no Unicode charmap in font).
-
-2005-03-05 Werner Lemberg <wl@gnu.org>
-
- * autogen.sh: New script for bootstrapping.
-
- * README.CVS: New file which documents bootstrapping.
-
- * builds/unix/aclocal.m4, builds/unix/config.guess,
- builds/unix/config.sub, builds/unix/configure,
- builds/unix/ltmain.sh: Removed.
-
-2005-03-04 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftutil.c: Include FT_INTERNAL_OBJECTS_H.
-
-2005-03-03 Werner Lemberg <wl@gnu.org>
-
- Various fixes for C and C++ compiling.
-
- * src/autofit/*: Add copyright messages.
-
- * src/autofit/afhints.c (af_glyph_hints_done): Don't use
- `AF_Dimension' but `int' for loop counter.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_widths): Don't use
- `AF_Dimension' but `int' for loop counter.
- Use proper enumeration value for `render_mode'.
- (af_latin_metrics_scale_dim): Don't shadow variables.
- (af_latin_hints_compute_segments): Use proper cast for `major_dir'
- and `segment_dir'.
- (af_latin_align_linked_edge, af_latin_hint_edges): Fix arguments of call to
- `af_latin_compute_stem_width'.
- (af_latin_hints_apply): Don't use `AF_Dimension' but `int' for loop
- counter.
-
- * src/base/ftdbgmem.c (ft_mem_table_get_source, FT_DumpMemory): Use
- proper cast for memory allocation.
-
- * src/cff/cffdrivr.c (cff_get_kerning): Use proper cast for
- initialization of `sfnt'.
-
- * src/sfnt/sfdriver.c: Include `ttkern.h'.
-
- * src/sfnt/ttkern.c (tt_face_get_kerning): Don't shadow variables.
-
- * src/truetype/ttgload.c: Include `ttpload.h'.
-
-2005-03-03 David Turner <david@freetype.org>
-
- * include/freetype/internal/ftmemory.h (FT_ALLOC, FT_REALLOC,
- FT_QALLOC, FT_QREALLOC) [gcc >= 3.3]: Provide macro versions which
- avoid compiler warnings.
- (FT_NEW, FT_NEW_ARRAY, FT_RENEW_ARRAY, FT_QNEW, FT_QNEW_ARRAY,
- FT_QRENEW_ARRAY, FT_ALLOC_ARRAY, FT_REALLOC_ARRAY): Updated.
-
- * include/freetype/internal/ftserv.h (FT_FACE_FIND_SERVICE,
- FT_FACE_FIND_GLOBAL_SERVICE, FT_FACE_LOOKUP_SERVICE) [__cplusplus]:
- Provide macro versions which avoid compiler warnings.
-
- * src/base/ftutil.c (ft_highpow2): New utility function.
-
- * include/freetype/internal/ftobjs.h: Updated.
-
- * src/pfr/pfrload.c (pfr_get_gindex, pfr_compare_kern_pairs,
- pfr_sort_kerning_pairs): Don't define if FT_OPTIMIZE_MEMORY is set.
- (pfr_phy_font_done): Don't handle `kern_pairs' if FT_OPTIMIZE_MEMORY
- is set.
- (pfr_phy_font_load): Don't call `pfr_sort_kerning_pairs' if
- FT_OPTIMIZE_MEMORY is set.
-
- * src/pfr/pfrobjs.c (pfr_slot_load): Comment out some code which
- doesn't work with broken fonts.
- (pfr_face_get_kerning) [FT_OPTIMIZE_MEMORY]: Implement.
-
- * src/pfr/pfrtypes.h (PFR_KernItemRec): Optimize member types.
- (PFR_NEXT_KPAIR): New macro.
- (PFR_PhyFontRec): Don't define `kern_pairs' if FT_OPTIMIZE_MEMORY is
- set.
-
- * src/sfnt/ttsbit0.c (tt_sbit_decoder_load_image): Introduce
- temporary variable to avoid gcc warning.
- (tt_face_load_sbit_image): Mark unused variables with FT_UNUSED.
-
- * src/truetype/ttpload.c (tt_face_load_loca) [FT_OPTIMIZE_MEMORY]:
- Remove redundant variable.
-
- * include/freetype/config/ftmodule.h: Moving the order of drivers to
- speed up font loading. The PCF and BDF loaders are still slow and
- consume far too much memory.
-
-2005-03-03 Werner Lemberg <wl@gnu.org>
-
- * devel/ftoption.h: Updated to recent changes.
-
-2005-03-02 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afdummy.c, src/autofit/afdummy.h
- (af_dummy_script_class): Fix type.
-
- * src/autofit/aflatin.c, src/autofit/aflatin.h
- (af_latin_script_class): Fix type.
-
- * src/autofit/rules.mk (AUTOF_DRV_SRC): Fix typo.
-
-2005-03-01 David Turner <david@freetype.org>
-
- * src/sfnt/ttkern.c (tt_face_load_kern, tt_face_get_kerning),
- src/sfnt/ttsbit0.c (tt_face_load_sbit_strikes,
- tt_sbit_decoder_load_byte_aligned, tt_sbit_decoder_load_compound,
- tt_sbit_decoder_load_image), src/sfnt/ttload.c
- (tt_face_load_metrics): Remove compiler warnings
- -- redundant variables, missing initializations, etc.
-
- * src/sfnt/ttsbit.h: Handle FT_OPTIMIZE_MEMORY.
-
- * src/autofit/rules.mk, src/autofit/module.mk,
- src/autofit/afangles.h: New files.
-
- * src/autofit/afhints.c (af_axis_hints_new_segment,
- af_axis_hints_new_edge): New functions.
- (af_glyph_hints_done): Do proper deallocation.
- (af_glyph_hints_reload): Only reallocate points array. This
- drastically reduces heap usage.
-
- * src/autofit/afhints.h (AF_PointRec, AF_SegmentRec): Optimize
- member types and positions.
- (AF_AxisHintsRec): Add `max_segments' and `max_edges'.
- (af_axis_hints_new_segment, af_axis_hints_new_edge): New prototypes.
-
- * src/autofit/aflatin.c (af_latin_metrics_scale): Don't call
- AF_SCALER_EQUAL_SCALES.
- (af_latin_hints_compute_segments): Change return type to FT_Error.
- Update all callers.
- Improve segment allocation.
- (af_latin_hints_compute_edges): Change return type to FT_Error.
- Update all callers.
- Improve edge allocation and link handling.
- (af_latin_hints_detect_features): Change return type to FT_Error.
- Update all callers.
-
- * src/autofit/aflatin.h: Updated.
-
- * src/autofit/afloader.c (af_loader_load_g)
- <FT_GLYPH_FORMAT_OUTLINE>: Assure axis->num_edges > 1. This fixes
- a bug with certain fonts.
-
- * include/freetype/config/ftmodule.h: The auto-fitter is now the
- only supported auto-hinting module.
-
- * include/freetype/config/ftstdlib.h (FT_INT_MAX): New macro.
-
-2005-02-28 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttpload.c (tt_face_load_loca): Fix typo.
-
- * src/sfnt/ttkern.c: Include `ttkern.h'.
- (FT_COMPONENT): Updated.
-
- * include/freetype/internal/fttrace.h: Add entry for `ttkern'.
-
- * src/sfnt/ttsbit0.c: s/FT_Err_/SFNT_Err_/.
- Decorate constants with `U' and `L' where necessary.
-
- * src/sfnt/ttcmap.c (tt_cmap4_next): Remove unused variable.
-
-2005-02-28 David Turner <david@freetype.org>
-
- * src/base/ftdbgmem.c (FT_DumpMemory): Added sorting of memory
- sources according to decreasing maximum cumulative allocations.
- (ft_mem_source_compare): New auxiliary function.
-
- * src/sfnt/ttsbit0.c: New file, implementing a heap-optimized
- embedded bitmap loader.
-
- * src/sfnt/ttsbit.c: Include `ft2build.h', FT_INTERNAL_DEBUG_H,
- FT_INTERNAL_STREAM_H, FT_TRUETYPE_TAGS_H.
- Load `ttsbit0.c' if FT_OPTIMIZE_MEMORY is set, otherwise use
- file contents.
- (tt_face_load_sbit_strikes): Set up root fields to indicate the
- strikes. This fixes Savannah bug #12107.
- Use `static' keyword for `sbit_line_metrics_field',
- `strike_start_fields', `strike_end_fields'.
-
- * include/freetype/internal/tttypes.h (TT_FaceRec): Define
- `sbit_table', `sbit_table_size', `sbit_num_strikes' if
- FT_OPTIMIZE_MEMORY is set.
- Don't define `num_sbit_strikes' and `sbit_strikes' if
- FT_OPTIMIZE_MEMORY is set.
-
- * src/cff/cffobjs.c (sbit_size_reset): Handle FT_OPTIMIZE_MEMORY.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Fixed bug that prevented
- loading SFNT fonts without a `kern' table.
- Properly pass root->face_flags.
- Remove code for TT_CONFIG_OPTION_EMBEDDED_BITMAPS.
-
- * src/sfnt/sfdriver.c (sfnt_interface)
- [TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: Don't use `tt_find_sbit_image'
- and `tt_load_sbit_metrics'.
-
- * src/sfnt/ttcmap.c: Optimize linear charmap scanning for Format 4.
- (OPT_CMAP4): New macro.
- (TT_CMap4Rec) [OPT_CMAP4]: New structure.
- (tt_cmap4_init, tt_cmap4_set_range, tt_cmap4_next, tt_cmap4_reset)
- [OPT_CMAP4]: New functions.
- (tt_cmap4_char_next) [OPT_CMAP4]: Use `tt_cmap4_next' and
- `tt_cmap4_reset'.
- (tt_cmap4_class_rec) [OPT_CMAP4]: Use `TT_CMap4Rec' and
- `tt_cmap4_init'.
-
- * src/truetype/ttobjs.c (Reset_SBit_Size): Handle
- FT_OPTIMIZE_MEMORY.
-
- * src/autofit/afhints.h (AF_PointRec, AF_SegmentRec, AF_EdgeRec):
- Optimize member types.
-
- * src/autofit/afloader.c (af_loader_done): Call
- `af_glyph_hints_done'.
-
-2005-02-27 David Turner <david@freetype.org>
-
- * src/sfnt/ttkern.c (tt_face_load_kern): Fix a small bug which
- caused invalid (random) return values for the horizontal kerning.
-
-2005-02-25 David Turner <david@freetype.org>
-
- Implement several memory optimizations to drastically reduce the
- heap usage of FreeType, especially in the case of memory-mapped
- files. The idea is to avoid loading and decoding tables in the
- heap, and instead access the raw data whenever possible (i.e., when
- it doesn't compromise performance).
-
- This has several benefits: For example, opening vera.ttf now uses
- just a small amount of memory (even when the FT_Library footprint is
- accounted for), until you start loading glyphs. Even then, you save
- at least 20KB compared to the non-optimized case. Performance of
- various operations, including open and close, has also been
- dramatically improved.
-
- More optimizations to come, especially for the auto-hinter.
-
- * include/freetype/internal/sfnt.h (TT_Face_GetKerningFunc): New
- function type.
- (SFNT_Interface): Add it.
-
- * include/freetype/internal/tttypes.h (TT_HdmxEntryRec, TT_HdmxRec,
- TT_Kern0_PairRec): Don't define if FT_OPTIMIZE_MEMORY is set.
- (TT_FaceRec): Define `horz_metrics', `horz_metrics_size',
- `vert_metrics', `vert_metrics_size', `hdmx_table',
- `hdmx_table_size', `hdmx_record_count', `hdmx_record_size',
- `hdmx_record_sizes', `kern_table', `kern_table_size,
- `num_kern_tables', `kern_avail_bits', `kern_order_bits' if
- FT_OPTIMIZE_MEMORY is set.
- Don't define `hdmx', `num_kern_pairs', `kern_table_index',
- `kern_pairs' if FT_OPTIMIZE_MEMORY is set.
-
- * src/base/ftdbgmem.c (ft_mem_table_set): Don't shadow variable.
- Fix compiler warning.
-
- * src/cff/cffdrivr.c (Get_Kerning): Renamed to...
- (cff_get_kerning): This. Simplify.
- (cff_driver_class): Updated.
-
- * src/sfnt/Jamfile (_sources): Add `ttkern'.
- * src/sfnt/rules.mk (SFNT_DRV_SRC): Add `ttkern.c'.
-
- * src/sfnt/sfdriver.c (sfnt_interface): Add `tt_face_get_kerning'.
-
- * src/sfnt/sfnt.c: Include `ttkern.c'.
-
- * src/sfnt/sfobjs.c: Include `ttkern.h'.
- (sfnt_load_face): Consider the `kern' and `gasp' table as optional.
- (sfnt_done_face): Call `tt_face_done_kern'.
- Handle horizontal metrics for FT_OPTIMIZE_MEMORY.
-
- * src/sfnt/ttkern.c, src/sfnt/ttkern.h: New files. Code has been
- taken from `ttload.c' and `ttload.h'.
- Provide special versions of `tt_face_load_kern',
- `tt_face_get_kerning', and `tt_face_done_kern' for
- FT_OPTIMIZE_MEMORY.
-
- * src/sfnt/ttload.c (tt_face_load_metrics, tt_face_load_hdmx,
- tt_face_free_hdmx): Provide version for FT_OPTIMIZE_MEMORY.
- (tt_face_load_kern, tt_kern_pair_compare, TT_KERN_INDEX): Moved to
- `ttkern.c'.
-
- * src/sfnt/ttload.h: Updated.
-
- * src/sfnt/ttsbit.c (sbit_metrics_field): Add `static' keyword.
-
- * src/truetype/ttdriver.c (Get_Kerning): Renamed to...
- (tt_get_kerning): This. Simplify.
- (tt_driver_class): Updated.
-
- * src/truetype/ttgload.c (TT_Get_Metrics): Renamed to...
- (tt_face_get_metrics): This. Provide version for FT_OPTIMIZE_MEMORY.
- Update all callers.
- (Get_Advance_Widths): Replaced with...
- (Get_Advance_WidthPtr): This. Provide version for
- FT_OPTIMIZE_MEMORY.
- Update all callers.
-
- * src/truetype/ttgload.h: Updated.
-
-2005-02-22 David Turner <david@freetype.org>
-
- * src/base/ftdbgmem.c: Partly rewritten. Added the ability to list
- all allocation sites in the memory debugger. Also a new function
- FT_DumpMemory() was added. It is only available in builds with
- FT_DEBUG_MEMORY defined, and you must declare it in your own code to
- use it, i.e., with something like:
-
- extern void FT_DumpMemory( FT_Memory );
-
- ...
-
- FT_DumpMemory( memory );
-
- * include/freetype/config/ftoption.h
- (TT_CONFIG_OPTION_BYTECODE_INTERPRETER): Comment out definition --
- again.
- (FT_OPTIMIZE_MEMORY): New configuration macro to control various
- optimizations for reducing the heap footprint of memory-mapped
- TrueType files.
-
- * include/freetype/internal/ftmemory.h (FT_ARRAY_ZERO): New
- convenience macro.
-
- * include/freetype/internal/tttypes.h (TT_FaceRec)
- [FT_OPTIMIZE_MEMORY]: Use optimized types for `num_locations' and
- `glyph_locations'.
-
- * src/truetype/ttgload.c (load_truetype_glyph): Call
- `tt_face_get_location'.
-
- * src/truetype/ttobjs.c (tt_face_init)
- [FT_CONFIG_OPTION_INCREMENTAL]: Improve error handling.
- (tt_face_done): Call `tt_face_done_loca'.
-
- * src/truetype/ttpload.c (tt_face_get_location, tt_face_done_loca):
- New functions. If FT_OPTIMIZE_MEMORY is set, the locations table is
- read directly from memory-mapped streams, instead of being decoded
- into the heap.
- (tt_face_load_loca) [FT_OPTIMIZE_MEMORY]: New implementation.
- (tt_face_load_cvt, tt_face_load_fpgm): Only load table if the
- bytecode interpreter is compiled in.
-
- * src/truetype/ttpload.h: Updated.
-
- * src/autohint/ahglyph.c (ah_outline_load): Improve allocation
- logic.
-
-2005-02-20 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/ltmain.sh: Regenerated with `libtoolize --force
- --copy' from libtool 1.5.14.
- * builds/unix/aclocal.m4: Regenerated with `aclocal -I .' from
- automake 1.9.4.
-
- * builds/unix/config.guess, builds/unix/config.sub: Updated from
- `config' CVS module at subversions.gnu.org.
-
- * builds/unix/install-sh, builds/unix/mkinstalldirs: Updated from
- `texinfo' CVS module at subversions.gnu.org.
-
-2005-02-14 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffcmap.c (cff_cmap_unicode_init): Don't try to build
- a cmap for a CID-keyed font which doesn't have SIDs.
-
-2005-02-13 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (read_binary_data): Return more meaningful
- value.
- (parse_encoding, parse_subrs, parse_charstrings, parse_dict): Check
- parser error value after call to T1_Skip_PS_Token (where necessary).
-
- * src/type1/t1parse.c (T1_Get_Private_Dict): Check parser error
- value after call to T1_Skip_PS_Token.
-
- * src/cid/cidparse.c (cid_parser_new): Check parser error value
- after call to cid_parser_skip_PS_token.
-
- * src/type42/t42parse.c (t42_parse_encoding, t42_parse_sfnts,
- t42_parse_charstrings, t42_parse_dict): Check parser error value
- after call to T1_Skip_PS_Token (where necessary).
-
- * src/psaux/psobjs.c (skip_string, ps_parser_skip_PS_token,
- ps_tobytes): Add error messages.
-
-2005-02-12 Werner Lemberg <wl@gnu.org>
-
- * configure: Output more variables to the created Makefile so that
- it can be used for ft2demos also (if the FT2DEMOS variable is
- defined).
-
-2005-02-10 David Turner <david@freetype.org>
-
- * src/pfr/pfrgload.c (pfr_glyph_load): Fix an unbounded growing
- dynamic array when loading a glyph from a PFR font (Savannah bug
- #11921).
-
- * src/base/ftbitmap.c (FT_Bitmap_Convert): Small improvements to the
- conversion function (mainly stupid optimization).
-
- * src/base/Jamfile: Adding ftbitmap.c to the list of compiled files.
-
-2005-02-10 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/freetype-config.in: Add new flag `--ftversion' to
- return the FreeType version. Suggested by George Williams
- <gww@silcom.com>.
-
- * docs/CHANGES: Updated.
-
-2005-02-09 Werner Lemberg <wl@gnu.org>
-
- * src/otvalid/otvmod.c (otv_validate): Deallocate arrays in case
- of error. Reported by YAMANO-UCHI Hidetoshi <mer@din.or.jp>.
-
-2005-02-08 Werner Lemberg <wl@gnu.org>
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
- <op_closepath>: Accept `T1_Parse_Have_Moveto' state also which can
- happen in empty glyphs. Reported by Ian Brown
- <ian.brown@printsoft.de> (Savannah bug #11856).
-
-2005-02-04 Werner Lemberg <wl@gnu.org>
-
- * src/otlayout/*: Removed. Obsolete.
-
-2004-12-28 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/ltmain.sh: Regenerated with `libtoolize --force
- --copy' from libtool 1.5.10.
- * builds/unix/aclocal.m4: Regenerated with `aclocal -I .' from
- automake 1.9.4.
- * builds/unix/configure: Regenerated with autoconf 2.59b.
-
- * builds/unix/config.guess, builds/unix/config.sub: Updated from
- `config' CVS module at subversions.gnu.org.
-
- * builds/unix/install-sh: Updated from
- `texinfo' CVS module at subversions.gnu.org.
-
- * builds/unix/ftsystem.c (FT_Stream_Open): Add proper cast for
- ft_alloc.
- Fix compiler warning.
-
-2004-12-27 Dirck Blaskey <listtarget@danbala.com>
-
- * src/cff/cffobjs.c (cff_face_init): Improve computation of
- FT_STYLE_BOLD_FLAG.
-
-2004-12-27 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffobjs.c (cff_face_init): A CFF within an SFNT can have
- only a single font. This is undocumented but has been verified on
- the opentype list.
-
-2004-12-26 Werner Lemberg <wl@gnu.org>
-
- * Jamfile (FT2_COMPONENTS): Add `otvalid'.
-
-2004-12-25 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftbitmap.c (FT_Bitmap_Convert): Fix compiler warning.
-
-2004-12-15 Werner Lemberg <wl@gnu.org>
-
- * vms_make.com: Add ftbitmap.obj.
-
-2004-12-14 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftbitmap.c, include/freetype/ftbitmap.h: New files for
- handling various bitmap formats.
-
- * include/freetype/config/ftheader.h (FT_BITMAP_H): New macro.
-
- * src/base/rules.mk (BASE_EXT_SRC): Add ftbitmap.c.
-
- * src/bdf/bdfdrivr.c (BDF_Glyph_Load): Don't convert bitmaps to 8bpp
- but return them as-is.
-
- * docs/CHANGES: Mention new bitmap API.
- * include/freetype/ftchapters.h: Updated.
-
-2004-12-11 Robert Clark <freetype@ratty.org.uk>
-
- * src/base/ftobjs.c (FT_Get_Kerning): Make kerning amount
- dependent on ppem by scaling down for ppem < 25, then do normal
- rounding. This gives slightly better results than rounding towards
- zero.
-
-2004-12-09 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_Get_Kerning): Always round towards zero
- for FT_KERNING_DEFAULT. This greatly enhances the kerning for
- small ppem values.
-
-2004-12-08 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (ft_glyphslot_clear): Reset `lsb_delta' and
- `rsb_delta'.
-
-2004-12-05 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/install.mk (install): Use $(OBJ_BUILD) for ftconfig.h.
-
-2004-12-03 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
-
- * include/freetype/ttnameid.h: Updated to latest
- specifications from Microsoft.
-
-2004-11-26 Jouk Jansen <joukj@hrem.stm.tudelft.nl>
-
- * vms_make.com: Include ftbbox.c.
- Fix `ccopt'.
- Handle `otvalid' module.
- Update `vmslib.dat' default values.
- Fixes to `libs.opt'.
-
-2004-11-23 Anders Kaseorg <anders@kaseorg.com>
-
- * src/base/ftoutln.c (FT_OrientationExtremumRec,
- ft_orientation_extremum_compute): Removed.
- (FT_Outline_Get_Orientation): Rewritten, simplified.
-
- * src/autohint/ahglyph.c: Include FT_OUTLINE_H.
- (ah_test_extremum, ah_get_orientation): Removed.
- (ah_outline_load): Use FT_Outline_Get_Orientation.
-
- * src/base/ftsynth.c (ft_test_extrema, ft_get_orientation): Removed.
- (FT_GlyphSlot_Embolden): Use FT_Outline_Get_Orientation.
-
-2004-11-23 Fernando Papa <fpapa@netgate.com.uy>
-
- * src/truetype/ttinterp.h: Fix typo.
-
-2004-11-22 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
-
- * builds/win32/detect.mk: Corrected logic that detects Windows NT to
- use the previous change even if win32 is forced. Corrected
- detection of win32 on Win9X.
-
- * builds/dos/detect.mk: Added same correction as for win32 about
- COPY on Windows NT. Detection of plain DOS 7.x.
-
-2004-11-22 Werner Lemberg <wl@gnu.org>
-
- * builds/detect.mk: Undo change from 2004-11-20.
- * builds/win32/detect.mk: If the `OS' environment variable contains
- `Windows_NT', use `cmd.exe /c copy' for copying files.
-
-2004-11-20 Werner Lemberg <wl@gnu.org>
-
- * builds/detect.mk (dos_setup): Use `cmd.exe' for copying
- $(CONFIG_MK) to force lowercase file name under Windows.
-
-2004-11-19 Werner Lemberg <wl@gnu.org>
-
- Fix a serious bug in the TT hinter.
-
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Don't shift
- points vertically before hinting.
-
- * docs/CHANGES: Updated.
-
- * src/cache/ftcglyph.c (FTC_GNode_UnselectFamily,
- FTC_GCache_Lookup): A new try to fix comparison with zero.
-
-2004-11-16 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/configure.ac: Add `-fno-strict-aliasing' if gcc is
- used.
- * builds/unix/configure: Regenerated.
- * builds/unix/config.guess, builds/unix/config.sub: Updated from
- `config' CVS module at subversions.gnu.org.
-
-2004-11-16 Dr. Martin P.J. Zinser <zinser@decus.de>
-
- * src/cache/ftcglyph.c (FTC_GNode_UnselectFamily,
- FTC_GCache_Lookup): Fix comparison with zero.
-
- * docs/INSTALL.VMS: Updated.
-
- * vms_make.com: Updated. All `descrip.mms' files are now created
- automatically.
-
- * src/*/descrip.mms: Removed.
-
-2004-11-16 Owen Taylor <otaylor@redhat.com>
-
- * builds/unix/freetype-config.in: Suppress -L$libdir for
- /usr/lib64 as well as /usr/lib. (Reported by Dan Winship -
- https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=139199)
-
-2004-11-11 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffdrivr.c (cff_service_ps_info): Updated.
- * src/cid/cidriver.c (cid_service_ps_info): Updated.
- * src/type42/t42drivr.c (t42_ps_get_font_private): New function.
- (t42_service_ps_info): Updated.
-
- * src/type42/t42parse.c (t42_parse_dict): Remove compiler warning.
-
-2004-11-11 David Bevan <dbevan@emtex.com>
-
- Add new function FT_Get_PS_Font_Private().
-
- * include/freetype/internal/services/svpsinfo.h
- (PS_GetFontPrivateFunc): New service function.
-
- * include/freetype/t1tables.h, src/base/fttype1.c
- (FT_Get_PS_Font_Private): New function.
-
- * src/type1/t1driver.c (t1_ps_get_font_private): New function.
- (t1_service_ps_info): Updated.
-
-2004-10-13 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/config/ftstdlib.h: Include `stddef.h'.
- (ft_ptrdiff_t): Define.
-
- * include/freetype/fttypes.h (FT_PtrDist): Use `ft_ptrdiff_t'.
-
- * src/cid/cidload.c (cid_parse_dict), src/type1/t1load.c
- (parse_dict): Fix compiler warning.
-
-2004-10-11 Joshua Neal <jneal@csdaily.com>
-
- * src/sfnt/ttcmap.c (tt_face_build_cmaps): Check for pointer
- overflow.
-
- * src/sfnt/ttload.c (tt_face_load_hdmx): Protect against bad input.
- Don't use FT_QNEW_ARRAY but FT_NEW_ARRAY to make deallocation work
- in case of failure.
-
- * src/sfnt/ttsbit.c (Load_SBit_Range): Check range intervals.
- (tt_face_load_sbit_strikes): Allocate `strike_sbit_ranges' after
- frame test.
-
- * src/truetype/ttgload.c (TTLoad_Simple_Glyph): Add assertion for
- `flag'.
-
-2004-10-09 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2004-10-09 Boris Letocha <b.letocha@cz.gmc.net>
-
- Fix handling of NPUSHW if skipped in data stream.
-
- * src/truetype/ttinterp.c (opcode_length): Set value for NPUSHW
- to -2.
- (SkipCode, TT_RunIns): Use opcode_length value for computation of
- bytes to be skipped.
-
-2004-09-10 Jouk Jansen <joukj@hrem.stm.tudelft.nl>
-
- * vms_make.com: Updated.
-
-2004-09-09 Werner Lemberg <wl@gnu.org>
-
- Adding OpenType validation module. The code is based on the
- (unfinished) `otlayout' module but has been heavily modified to make
- it much more compact.
-
- * src/otvalid/*: New module.
-
- * include/freetype/ftotval.h, src/base/ftotval.c,
- include/freetype/internal/services/svotval.h: New files.
-
- * include/freetype/config/ftmodule.h: Add otv_module_class.
- * include/freetype/config/ftheader.h (FT_OPENTYPE_VALIDATE_H): New
- macro.
- * include/freetype/internal/ftserv.h
- (FT_SERVICE_OPENTYPE_VALIDATE_H): New macro.
- * include/freetype/internal/fttrace.h (otvmodule, otvcommon,
- otvbase, otvgdef, otvgpos, otvgsub, otvjstf): New trace components.
-
- * include/freetype/ftchapters.h: Updated.
-
- * src/base/Jamfile (Library), src/base/descrip.mms (OBJS),
- src/base/rules.mk (BASE_EXT_SRC): Updated.
-
- * docs/CHANGES: Updated.
-
-2004-09-08 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/sources.py (re_source_block_format2) <column>:
- Use lookahead assertion to not match `*/'. This removes spurious
- insertions of `/' in the HTML output.
-
-2004-09-07 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgxvar.c (TT_Vary_Get_Glyph_Deltas): Fix call to
- FT_NEW_ARRAY.
-
-2004-09-04 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/ftobjs.h: Don't include
- FT_CONFIG_STANDARD_LIBRARY_H.
- (FT_Validator, FT_ValidationLevel, FT_ValidatorRec, FT_VALIDATOR,
- ft_validator_init, ft_validator_run, ft_validator_error, FT_INVALID,
- FT_INVALID_TOO_SHORT, FT_INVALID_OFFSET, FT_INVALID_FORMAT,
- FT_INVALID_GLYPH_ID, FT_INVALID_DATA): Move to...
-
- * include/freetype/internal/ftvalid.h: New file.
- Make FT_INVALID return module-specific error codes.
-
- * include/freetype/internal/internal.h (FT_INTERNAL_VALIDATE_H): New
- macro.
-
- * include/freetype/fterrors.h: Undefine FT_ERR_PREFIX only if
- FT_KEEP_ERR_PREFIX isn't defined.
-
- * src/base/ftobjs.c: Include FT_INTERNAL_VALIDATE_H.
-
- * src/sfnt/ttcmap.h: Don't include FT_INTERNAL_OBJECTS_H but
- FT_INTERNAL_VALIDATE_H.
-
- * src/sfnt/ttcmap.c: Don't include FT_INTERNAL_OBJECTS_H but
- FT_INTERNAL_VALIDATE_H.
- Include sferrors.h before FT_INTERNAL_VALIDATE_H.
- s/FT_Err_Ok/SFNT_Err_Ok/.
-
- * src/sfnt/sferrors.h: Define FT_KEEP_ERR_PREFIX.
-
- * src/type1/t1afm.c: Include t1errors.h.
-
-2004-09-03 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftdebug.c (ft_debug_init): Highest debug level is 7,
- not 6.
- * docs/DEBUG: Updated.
-
-2004-08-30 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/tttags.h (TTAG_BASE, TTAG_GDEF, TTAG_GPOS,
- TTAG_JSTF): New tags.
-
- * include/freetype/fttypes.h (FT_Bytes, FT_Tag): New typedefs.
- (FT_Int): Add `signed'.
-
-2004-08-29 Werner Lemberg <wl@gnu.org>
-
- * src/otlayout/otlgpos.c (otl_gpos_subtable_validate): Add argument
- to pass number of lookups.
- Update all callers.
- Don't call otl_lookup_list_validate but otl_lookup_validate.
- (otl_gpos_validate): Call otl_lookup_list_validate instead of
- otl_gpos_subtable_validate.
-
- * src/otlayout/otlgpos.h: Updated.
-
- * src/otlayout/otljstf.c (otl_jstf_max_validate): Add argument to
- pass number of lookups.
- Update all callers.
-
-
- * src/cff/cffparse.c (cff_parse_real): s/exp/exponent/ to avoid
- compiler warning.
-
-
- * src/sfnt/ttcmap0.c, src/sfnt/ttcmap0.h: Renamed to...
- * src/sfnt/ttcmap.c, src/sfnt/ttcmap.h: This.
- * src/sfnt/Jamfile, src/sfnt/rules.mk, src/sfnt/sfdriver.c,
- src/sfnt/sfnt.c, src/sfnt/sfobjs.c: Updated.
-
-
- * builds/compiler/gcc-dev.mk (CFLAGS): Don't add `-Wnested-externs'
- if compiler is g++ (v3.3.3 emits a warning otherwise).
-
-2004-08-28 Werner Lemberg <wl@gnu.org>
-
- * src/otlayout/otlgpos.c (otl_value_length): Return number of bytes,
- not number of 16bit entities.
- (otl_gpos_lookup2_validate): Check class definition tables for
- format 2.
- Fix loop for format 2.
- (otl_liga_mark2_validate): Fix offset for otl_anchor_validate.
-
-2004-08-27 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftmac.c: Don't include truetype/ttobjs.h.
- Don't include type1/t1objs.h.
- (FT_New_Face_From_FSSpec) [!__MWERKS__]: Remove compiler warnings.
-
-2004-08-27 Mathieu Malaterre <mathieu@malaterre.com>
-
- * src/base/ftmac.c: Handle OS_INLINE for xlc compiler also.
-
-2004-08-27 Werner Lemberg <wl@gnu.org>
-
- * src/otlayout/otlayout.h: Add copyright.
- (OTL_INVALID_OFFSET): Removed.
-
- * src/otlayout/otlgdef.h: Include otlayout.h.
- Comment out inclusion of otltable.h.
-
- * src/otlayout/otlgpos.c (otl_gpos_lookup4_validate): Fix call
- to otl_base_array_validate.
- (otl_liga_mark2_validate): Fix `for' loop.
-
- * src/otlayout/otlgsub.c (otl_ligature_validate): Check `glyph_id',
- not components array.
-
- * src/otlcommn.c (otl_lookup_get_count, otl_feature_get_count):
- Comment out.
- (otl_lookup_list_get_count, otl_feature_list_get_count): Activate.
- (otl_feature_list_validate, otl_gsubgpos_get_lookup_count):
- s/otl_lookup_get_count/otl_lookup_list_get_count/.
- (otl_script_list_validate):
- s/otl_feature_get_count/otl_feature_list_get_count/.
- (otl_script_validate): Call otl_lang_validate for default language.
-
- * src/otlayout/otlcommn.h: Updated.
-
-2004-08-16 Werner Lemberg <wl@gnu.org>
-
- * src/otlayout/otlgpos.c (otl_gpos_lookup1_validate,
- otl_gpos_lookup2_validate, otl_gpos_lookup3_validate,
- otl_gpos_lookup4_validate, otl_gpos_lookup5_validate,
- otl_gpos_lookup6_validate, otl_gpos_lookup9_validate,
- otl_gpos_validate): Update
- function arguments.
- (otl_gpos_lookup7_validate, otl_gpos_lookup8_validate): Update
- function arguments.
- Handle NULL offsets correctly.
- Check sequence and lookup indices for format 3.
- (otl_pos_rule_validate, otl_chain_pos_rule_validate): Add argument
- to pass lookup count.
- Check sequence and glyph indices.
- (otl_gpos_subtable_validate): Update function arguments.
- Update callers.
-
- * src/otlayout/otlgpos.h: Updated.
-
- * src/otlayout/otlgsub.c (otl_gsub_lookup1_validate,
- otl_gsub_lookup3_validate, otl_gsub_lookup8_validate): Update
- function arguments.
- Add glyph index checks.
- (otl_sequence_validate, otl_alternate_set_validate,
- otl_ligature_validate): Add argument to pass glyph count.
- Update callers.
- Add glyph index check.
- (otl_gsub_lookup2_validate, otl_gsub_lookup4_validate): Update
- function arguments.
- (otl_ligature_set_validate): Add argument to pass glyph count.
- Update caller.
- (otl_sub_class_rule_validate,
- otl_sub_class_rule_set_validate): Removed.
- (otl_sub_rule_validate, otl_chain_sub_rule_validate): Add argument
- to pass lookup count.
- Update callers.
- Add lookup index check.
- (otl_sub_rule_set_validate, otl_chain_sub_rule_set_validate): Add
- argument to pass lookup count.
- Update callers.
- (otl_gsub_lookup5_validate): Update function arguments.
- Handle NULL offsets correctly.
- Don't call otl_sub_class_rule_set_validate but
- otl_sub_rule_set_validate.
- Check sequence and lookup indices for format 3.
- (otl_gsub_lookup6_validate): Update function arguments.
- Handle NULL offsets correctly.
- Check sequence and lookup indices for format 3.
- (otl_gsub_lookup7_validate, otl_gsub_validate): Update function
- arguments.
-
- * src/otlayout/otlgsub.h: Updated.
-
- * src/otlayout/otlbase.c (otl_base_validate): Handle NULL offsets
- correctly.
-
- * src/otlayout/otlcommn.c (otl_class_definition_validate): Fix
- compiler warning.
- (otl_coverage_get_first, otl_coverage_get_last): New functions.
- (otl_lookup_validate): Add arguments to pass lookup and glyph
- counts.
- Update callers.
- (otl_lookup_list_validate): Add argument to pass glyph count.
- Update callers.
-
- * src/otlayout/otlcommn.h: Updated.
-
- * src/otlayout/otljstf.c (otl_jstf_extender_validate,
- otl_jstf_max_validate, otl_jstf_script_validate,
- otl_jstf_priority_validate, otl_jstf_lang_validate): Add parameter
- to validate glyph indices.
- Update callers.
- (otl_jstf_validate): Add parameter which specifies number of glyphs
- in font.
-
- * src/otlayout/otljstf.h: Updated.
-
-2004-08-15 Werner Lemberg <wl@gnu.org>
-
- * src/otlayout/otlgpos.c (otl_liga_mark2_validate): Add parameter
- to handle possible NULL values properly.
- Update all callers.
-
-2004-08-15 Werner Lemberg <wl@gnu.org>
-
- * src/otlayout/gpos.c: Rename counting variables to be more
- meaningful.
- Add copyright.
- (otl_liga_attach_validate): Renamed to...
- (otl_liga_mark2_validate): This.
- Update all callers.
- (otl_mark2_array_validate): Removed.
- (otl_gpos_lookup6_validate): Call otl_liga_mark2_validate, not
- otl_mark2_array_validate.
- (otl_pos_class_set_validate, otl_pos_class_rule_validate): Removed.
- (otl_gpos_lookup7_validate): Complete code for format 2.
- (otl_chain_pos_class_rule_validate,
- otl_chain_pos_class_set_validate): Removed.
- (otl_gpos_lookup8_validate): Don't call
- otl_chain_pos_class_set_validate but
- otl_chain_pos_rule_set_validate.
- Simplify some code.
-
- * src/otlayout/otlgpos.h: Add copyright.
-
-2004-08-14 Werner Lemberg <wl@gnu.org>
-
- * src/otlayout/otljstf.c (otl_jstf_gsub_mods_validate): Removed.
- (otl_jstf_gpos_mods_validate): Renamed to...
- (otl_jstf_gsubgpos_mods_validate): This.
- Test whether lookup_count is zero.
- (otl_jstf_priority_validate): Use otl_jstf_gsubgpos_mods_validate.
- (otl_jstf_validate): Initialize gsub_lookup_count and
- gpos_lookup_count if gsub or gpos is zero.
-
- * src/otlayout/otlgsub.c: Rename counting variables to be more
- meaningful.
- Add copyright.
- (otl_gsub_lookup1_validate): Simplify code.
- (otl_gsub_lookup2_validate, otl_gsub_lookup3_validate,
- otl_gsub_lookup4_validate, otl_gsub_lookup7_validate): Remove unused
- variables.
- (otl_gsub_lookup5_validate): Remove unused variable.
- Fix call to otl_sub_rule_set_validate and
- otl_sub_class_rule_set_validate.
- (otl_chain_sub_class_rule_validate,
- otl_chain_sub_class_set_validate): Removed.
- (otl_gsub_lookup6_validate): Remove unused variable.
- Fix call to otl_chain_sub_rule_set_validate.
- (otl_gsub_lookup7_validate): Handle lookup type 8 also.
- (otl_gsub_lookup8_validate: New function.
- (otl_gsub_lookup1_apply, otl_gsub_lookup2_apply,
- otl_gsub_lookup3_apply): Commented out.
- (otl_gsub_validate_funcs): Add otl_gsub_lookup7_validate and
- otl_gsub_lookup8_validate.
- (otl_gsub_validate): Updated.
-
- * src/otlayout/otlgsub.h: Add copyright.
-
- * src/otlayout/otlcommn.c, src/otlayout/otlcommn.h
- (otl_coverage_get_index): Comment out.
-
-2004-08-13 Werner Lemberg <wl@gnu.org>
-
- * src/otlayout/otlcommn.c (otl_gsubgpos_get_lookup_count): New
- function.
- * src/otlayout/otlcommn.h: Updated.
-
- * src/otlayout/otlbase.c: Rename counting variables to be more
- meaningful.
- Add copyright message.
- * src/otlayout/otlbase.h: Add copyright message.
-
- * src/otlayout/otlgdef.c: Rename counting variables to be more
- meaningful.
- Add copyright message.
- Use OTL_CHECK everywhere.
- (otl_caret_value_validate): Remove unused variable.
- (otl_gdef_validate): All tables are optional.
- * src/otlayout/otlgdef.h: Add copyright message.
-
- * src/otlayout/otljstf.c: Rename counting variables to be more
- meaningful.
- Add copyright message.
- (otl_jstf_gsub_mods_validate, otl_jstf_gpos_mods_validate): Add
- parameter to pass lookup count.
- Update all callers.
- Check lookup array.
- (otl_jstf_max_validate):
- s/otl_gpos_subtable_check/otl_gpos_subtable_validate/.
- (otl_jstf_priority_validate, otl_jstf_lang_validate,
- otl_jstf_script_validate): Add two parameters to pass lookup counts.
- Update all callers.
- (otl_jstf_validate): Add two parameters to pass GPOS and GSUB
- table offsets; use otl_gsubgpos_get_lookup_count to convert extract
- lookup counts.
- Fix typo.
- * src/otlayout/otljstf.h: Updated.
- Add copyright message.
-
- * src/otlayout/otlgpos.c (otl_gpos_subtable_validate): New function.
- (otl_gpos_validate): Use it.
- * src/otlayout/otlgpos.h: Updated.
-
-2004-08-13 Werner Lemberg <wl@gnu.org>
-
- * src/otlayout/otcommn.c: Use OTL_CHECK everywhere.
- (otl_coverage_validate): Initialize `p',
- s/count/num_glyphs/.
- s/start_cover/start_coverage/.
- (otl_coverage_get_index): Return OTL_Long, not OTL_Int.
- Remove unused variables.
- (otl_class_definition_validate): s/count/num_glyphs/.
- Remove unused variables.
- (otl_class_definition_get_value, otl_device_table_get_start,
- otl_device_table_get_end, otl_device_table_get_delta,
- otl_lookup_get_table, otl_lookup_list_get_count,
- otl_lookup_list_get_lookup, otl_lookup_list_get_table,
- otl_feature_get_lookups, otl_feature_list_get_count,
- otl_feature_list_get_feature, otl_lang_get_count,
- otl_lang_get_req_feature, otl_lang_get_features): Commented out
- temporarily until we really need it.
- (otl_lookup_validate): Removed.
- (otl_lookup_table_validate): Renamed to ...
- (otl_lookup_validate): This. Update callers.
- (otl_lookup_list_validate): Remove already commented out definition
- and move the other definition up.
- (otl_feature_validate): Add parameter to pass number of lookups.
- Update callers.
- Check lookup indices.
- (otl_feature_list_validate): Add parameter to pass lookup table.
- Update callers.
- (otl_lang_validate): Add parameter to pass number of features.
- Update callers.
- Handle req_feature and check feature indices.
- (otl_script_validate): Add parameter to pass number of features.
- Update callers.
- (otl_script_list_validate): Add parameter to pass feature table.
- Update callers.
-
- * src/otlayout/otcommn.h: s/LOCALDEF/LOCAL/.
- Comment out the same functions as in otcommn.c.
- (otl_script_list_get_script): Removed.
-
- * src/otlayout/otlgsub.c (otl_gsub_lookup1_apply): Change `index' to
- type OTL_Long.
- (otl_gsub_lookup2_apply, otl_gsub_lookup3_apply): Change `index' to
- type OTL_Long.
- Fix test.
- (otl_gsub_validate): Fix order of validation.
-
- * src/otlayout/otlgpos.c (otl_gpos_validate): Fix order of
- validation.
-
-2004-08-12 Werner Lemberg <wl@gnu.org>
-
- Make otlayout module compile (without actually working).
-
- * src/otlayout/*: s/OTL_Valid/OTL_Validator/.
- s/NULL/0/.
-
- * src/otlayout/otlayout.h: Fix various typos.
- (OTL_Bool): New typedef.
- (OTL_Int, OTL_Long, OTL_Int16, OTL_Int32): Use `signed' keyword.
- (OTL_Err_InvalidArgument): Removed.
- (OTL_Err_InvalidData, OTL_Err_InvalidSize): New enum values.
- (OTL_MAKE_TAG): Add missing parenthesis.
- (OTL_INVALID_DATA): Use OTL_Err_InvalidData.
- (OTL_INVALID_TOO_SHORT): Use OTL_Err_InvalidSize.
- (OTL_INVALID_FORMAT, OTL_INVALID_OFFSET): New macros.
-
- * src/otlayout/otlgpos.c: s/FT_/OTL_/.
- s/OTL_Short/OTL_Int16/.
- (otl_gpos_pairset_validate): Add return type.
- (otl_base_array_validate): Fix call to otl_anchor_validate.
- (otl_liga_array_validate): Fix call to otl_liga_attach_validate.
- (otl_gpos_lookup5_validate): Fix typos.
- (otl_gpos_lookup6_validate): Fix call to otl_mark2_array_validate.
- (otl_gpos_lookup7_validate): Comment out unfinished code.
- Fix typos.
-
- * src/otlayout/otlgsub.c: Add forward declaration for
- otl_gsub_validate_funcs.
- (otl_gsub_lookup1_apply, otl_gsub_lookup2_apply,
- otl_gsub_lookup3_apply): Fix call to otl_parser_check_property.
- s/otl_coverage_lookup/otl_coverage_get_index/.
- (otl_ligature_validate): Add missing variable declaration.
- (otl_sub_rule_validate): Fix typo.
- (otl_sub_class_rule_validate): Add missing variable declaration.
- Fix typo.
- (otl_gsub_lookup5_validate): Fix typo.
- (otl_gsub_lookup6_validate): Fix call to
- otl_chain_sub_class_set_validate.
- (otl_gsub_validate_funcs): Don't use `const'.
-
- * src/otlayout/otlcommn.c (otl_class_definition_get_value,
- otl_device_table_validate, otl_device_table_get_delta,
- otl_lookup_validate, otl_script_validate): Add missing
- variable declarations.
- (otl_lookup_list_validate): Comment out first definition.
- (otl_lookup_list_foreach, otl_feature_list_foreach): Comment out.
- (otl_feature_list_validate):
- s/otl_feature_table_validate/otl_feature_validate/.
- (otl_script_list_validate):
- s/otl_script_table_validate/otl_script_validate/.
-
- * src/otlayout/otlcommn.h: Comment out first declaration.
- (otl_lookup_list_foreach, otl_feature_list_foreach): Comment out.
-
- * src/otlayout/otlbase.c (otl_base_coord_validate): Fix call to
- otl_device_table_validate.
- (otl_base_script_validate): Add missing variable declarations.
- (otl_base_script_list_validate): Fix call to
- otl_base_script_validate.
- (otl_axis_table_validate): Fix calls to otl_base_tag_list_validate
- and otl_base_script_list_validate.
- (otl_base_validate): Fix calls to otl_axis_table_validate.
-
- * src/otlayout/otlgdef.c (otl_attach_list_validate): Fix call to
- otl_attach_point_validate.
- (otl_caret_value_validate): Add missing variable declaration.
- Fix call to otl_device_table_validate.
- (otl_ligature_glyph_validate): Fix call to otl_caret_value_validate.
- (otl_ligature_caret_list_validate): Fix call to
- otl_ligature_glyph_validate.
- (otl_gdef_validate): Fix calls to otl_class_definition_validate,
- otl_attach_list_validate, otl_ligature_caret_list_validate, and
- otl_class_definition_validate.
-
- * src/otlayout/otltable.h (otl_table_validate, otl_table_init,
- otl_table_set_script): Comment out.
-
- * src/otlayout/otlparse.h (OTL_ParserRec):
- s/OTL_Alternate/OTL_GSUB_Alternate/.
- (OTL_ParseError): Add OTL_Err_Parser_Memory and
- OTL_Err_Parser_Internal.
- (otl_parser_error): Fix typo.
- (otl_parser_check_property): Remove third argument.
-
- * src/otlayout/otlparse.c (otl_string_ensure):
- s/OTL_Parse_Err_Memory/OTL_Err_Parser_Memory/.
- (OTL_STRING_ENSURE, otl_parser_error, otl_parser_get_index,
- otl_parser_replace_1, otl_parser_replace_n): Fix typos.
- (OTL_PARSER_UNCOVERED): Removed.
- (otl_parser_check_property): Remove third argument.
-
- * src/otlayout/otljstf.c (otl_jstf_priority_validate): Add missing
- variable declaration.
-
- * src/otlayout/otlutils.h (OTL_MEM_REALLOC): Fix typo.
-
-2004-08-11 Danny <dannyboynow@yahoo.com>
-
- * src/base/ftstream.c (FT_Stream_Close): Don't reset stream->close
- to NULL. This allows custom close functions to delete the FT_STREAM
- object.
-
-2004-08-11 Werner Lemberg <wl@gnu.org>
-
- Add API to get information about SFNT tables.
-
- * include/freetype/internal/services/svsfnt.h
- (FT_SFNT_Table_Info_Func): New typedef.
- (SFNT_Table): Add it.
-
- * src/base/ftobjs (FT_Sfnt_Table_Info): New function.
-
- * include/freetype/tttables.h: Updated.
-
- * src/sfnt/sfdriver.c (sfnt_table_info): New function.
- (sfnt_service_sfnt_table): Add it.
-
- * docs/CHANGES: Updated.
-
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 10.
-
- * builds/unix/configure.ac (version_info): Set to 9:8:3.
- * builds/unix/configure: Updated.
-
- * builds/win32/visualc/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj: s/219/2110/, s/2.1.9/2.1.10/.
-
- * builds/freetype.mk (refdoc), README, Jamfile (RefDoc):
- s/2.1.9/2.1.10/.
-
- * docs/CHANGES, docs/VERSION.DLL: Updated.
-
-2004-08-11 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * src/base/ftrfork.c (FT_Raccess_Guess)
- [!FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK]: Remove compiler
- warnings.
-
-2004-08-06 Adam Piotrowski <st_intel@poczta.onet.pl>
-
- * src/pfr/pfrload.c (pfr_sort_kerning_pairs): Single-byte
- adjustments are unsigned, not signed.
-
-2004-08-05 David Turner <david@freetype.org>
-
- `Activate' gray-scale specifying hinting within the TrueType
- bytecode interpreter. This is an experimental feature which
- should probably be made optional.
-
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
- load_truetype_glyph): Move the code to set the pedantic_hinting flag
- to...
- (TT_Load_Glyph): Here.
- Set `grayscale' flag except for `FT_LOAD_TARGET_MONO'.
-
- * src/truetype/ttinterp.c (Ins_GETINFO): Return MS rasterizer
- version 1.7.
- Return rotation and stretching info only if glyph is rotated or
- stretched, respectively.
- Handle grayscale info.
-
- * src/truetype/ttinterp.h (TT_ExecContextRec): Add `grayscale'
- member.
-
-2004-08-02 George Williams <gww@silcom.com>
-
- * src/base/ftobjs.c (FT_Attach_File): Initialize `open.stream'.
-
-2004-08-01 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2004-08-01 George Williams <gww@silcom.com>
-
- FreeType now can read kerning values from PFM files.
-
- * src/type1/t1afm.c (T1_Done_AFM): Renamed to...
- (T1_Done_Metrics): This.
- Update all callers.
- (T1_Read_AFM): Make it static.
- Don't enter and leave a frame.
- (LITTLE_ENDIAN_USHORT, LITTLE_ENDIAN_UINT): New macros.
- (T1_Read_PFM): New function.
- (T1_Read_Metrics): New higher-level function to be used instead of
- T1_Read_AFM.
- Update all callers.
-
-2004-07-31 Werner Lemberg <wl@gnu.org>
-
- * src/pcf/pcfread (pcf_load_font), src/bdf/bdfdrivr.c
- (BDF_Face_Init), src/truetype/ttgxvar (TT_Get_MM_Var,
- tt_face_vary_cvt): Fix compiler warnings.
-
-2004-07-26 Søren Sandmann <sandmann@daimi.au.dk>
-
- * src/pcf/pcfread.c (pcf_interpret_style): Always allocate memory for
- face->style_name.
- * src/pcf/pcfdrivr.c (PCF_Face_Done): Free `style_name'.
-
-2004-07-26 Darren J Longhorn <darren.longhorn@redcom.co.uk>
-
- * include/freetype/config/ftconfig.h (FT_SIZEOF_LONG): Recognize
- five-byte `long' (which is avoided then).
-
-2004-07-25 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * src/pcf/pcfdrivr.c (PCF_Set_Pixel_Size): Compare heights, not
- ppem values.
- (PCF_Set_Point_Size): Don't call PCF_Set_Pixel_Size but provide own
- code to compare ppem values.
- * src/bdf/bdfdrivr.c (BDF_Set_Pixel_Size): Compare heights, not
- ppem values.
- (BDF_Set_Point_Size): Don't call BDF_Set_Pixel_Size but provide own
- code to compare ppem values.
-
-2004-07-25 Kornfeld Eliyahu Peter <peter@e-kadmon.net>
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Handle
- TT_NAME_ID_PREFERRED_FAMILY and TT_NAME_ID_PREFERRED_SUBFAMILY.
-
-2004-07-24 Derek B. Noonburg <derekn@foolabs.com>
-
- * src/cff/cffload.c (cff_font_load): Always create inverse mapping.
- Even if the charstring count is the same as the CID count, it is
- still possible that the font uses a different CID -> GID mapping.
-
-2004-07-23 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttobjs.c (tt_face_init): Accept 0x00020000 format tag
- found in some Arphic fonts made for Chinese version of Windows 3.1.
-
-2004-07-17 David Turner <david@freetype.org>
-
- Fixed a dangling pointer bug in the cache code that happened in very
- rare cases, i.e., when a new family object was destroyed by an
- out-of-memory condition during a glyph node initialization. The
- function FTC_Cache_Lookup would flush the cache and restart the
- lookup with a bad pointer.
-
- * include/freetype/cache/ftcglyph.h (FTC_FAMILY_TREE): New macro.
- (FTC_GCACHE_LOOKUP_CMP): Use it.
- Handle reference count in `num_nodes' correctly.
-
- * src/cache/ftcglyph.c (FTC_GNode_UnselectFamily): Use
- FTC_FAMILY_FREE.
- (FTC_GCache_Lookup): Handle reference count in `num_nodes' correctly.
-
- * src/cache/ftcmanag.c (FTC_Manager_FlushN): Fixed a cache flushing
- bug.
-
- * src/truetype/ttinterp.c (Normalize): Fixed a bug that caused
- long and unnecessary delays while normalizing huge vectors.
-
-2004-07-15 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
- * src/base/ftstroke.c (FT_Stroker_ParseOutline): Fix compiler
- warning.
-
-2004-07-15 David Turner <david@freetype.org>
-
- * src/base/ftstroke.c (FT_Stroker_ParseOutline): Single points
- are not stroked, preventing a bug with pala.ttf and other
- fonts.
-
- * include/freetype/ftstroke.h: Updating documentation comments.
-
-2004-07-13 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftstroke.c (ft_stroke_border_reverse): Removed. Unused.
-
-2004-07-12 David Turner <david@freetype.org>
-
- * src/base/ftstroke.c (ft_stroke_border_close): Add second parameter
- to indicate reversion of points.
- Update all callers.
- (ft_stroke_border_reverse): Fix initialization of `point1' and
- `tag1'.
-
- * src/cache/ftcsbits.c (ftc_snode_load): Fixing advance computation
- for transformed glyphs.
-
-2004-07-11 David Turner <david@freetype.org>
-
- Fix bugs that prevented the stroker to correctly generate stroked
- paths from closed paths, i.e., nearly all glyphs in vectorial fonts.
-
- The code is still _very_ buggy though; treat with special care.
-
- * src/base/ftstroke.c (FT_STROKE_TAG_BEGIN_END): New macro.
- (ft_stroke_border_reverse): New function.
- (ft_stroker_inside): Remove local variable `sigma'; use different
- threshold.
- (ft_stroker_add_reverse_left): Switch begin/end tags if necessary.
- (FT_Stroker_EndSubPath): Call ft_stroker_inside and
- ft_stroke_border_reverse.
-
-2004-06-26 Peter Kovar <peter.kovar@r3.roburnet.sk>
-
- * src/truetype/ttgload.c (load_truetype_glyph): Fix typo.
-
-2004-06-25 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1afm.c (afm_atoindex): Fix boundary test. Reported
- by Dirck Blaskey.
-
-2004-06-24 David Turner <david@freetype.org>
-
-
- * Version 2.1.9 released.
- =========================
-
-
- * src/truetype/ttgload.c, src/truetype/ttxgvar.c: Removing
- compiler warnings.
-
-2004-06-23 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/ftmemory.h [FT_DEBUG_MEMORY]: Declare
- FT_QAlloc_Debug and FT_QRealloc_Debug.
-
- * src/base/ftutil.c (FT_QAlloc): Fix error and debug messages.
- (FT_QRealloc): Call FT_QAlloc if original pointer is NULL.
- Fix error message.
-
-2004-06-23 David Turner <david@freetype.org>
-
- * include/freetype/internal/ftmemory.h, src/base/ftutil.c
- (FT_QAlloc, FT_QRealloc), src/base/ftdbgmem.c (FT_QAlloc_Debug,
- FT_QRealloc_Debug): New functions that perform allocation without
- zero-ing out the corresponding blocks.
-
- * include/freetype/internal/ftmemory.h (FT_MEM_QALLOC,
- FT_MEM_QREALLOC, FT_MEM_QNEW, FT_MEM_QNEW_ARRAY,
- FT_MEM_QRENEW_ARRAY, FT_QALLOC, FT_QREALLOC, FT_QNEW, FT_QNEW_ARRAY,
- FT_QRENEW_ARRAY): New macros.
-
- * src/base/ftstream.c (FT_Stream_EnterFrame): Use FT_QALLOC.
- * src/gzip/ftgzip.c (FT_Stream_OpenGzip): Use FT_QNEW_ARRAY.
- * src/sfnt/sfobjs.c (tt_face_get_name): Use FT_QNEW_ARRAY.
-
- * src/sfnt/ttload.c (tt_face_load_directory, tt_face_load_metrics,
- tt_face_load_gasp): Use FT_QNEW_ARRAY.
- (tt_face_load_kern): Use FT_QNEW_ARRAY.
- Small optimization in the kerning table verifier; this speeds up
- TrueType face opening by about 7%.
- (tt_face_load_hdmx): Use FT_QNEW_ARRAY and FT_QALLOC.
-
- * include/freetype/config/ftmodule.h: Changed the order of modules,
- putting TrueType and Type 1 first. This dramatically improves the
- performance of face open/close operations. For example, putting the
- TrueType driver first in the list results in a 5x speedup when
- opening `Vera.ttf'.
-
- The very problem is that both the PCF and BDF drivers do a lot more
- than necessary to detect that they cannot handle a font file.
-
-2004-06-22 Werner Lemberg <wl@gnu.org>
-
- * src/pcf/pcfread.c (pcf_read_TOC, pcf_get_properties,
- pcf_get_metrics, pcf_get_bitmaps, pcf_get_encodings): Improve
- debugging messages.
-
- * src/pcf/pcfdrivr.c (FT_COMPONENT): Move up.
- (PCF_Face_Init): Simplify code.
-
- * src/bdf/bdfdrivr.h (BDF_FaceRec): New element `default_glyph'.
-
- * src/bdf/bdflib.c (_bdf_add_property, _bdf_parse_start),
- src/bdf/bdf.h (bdf_font_t): s/default_glyph/default_char/.
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Fix number of glyphs.
- Set `default_glyph'.
- (BDF_Glyph_Load): Use `default_glyph' for undefined glyph.
-
- * docs/CHANGES: Updated.
-
-2004-06-21 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2004-06-21 David Turner <david@freetype.org>
-
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
- load_truetype_glyph): Don't access (unrounded)
- `TT_Size.root.metrics' but (rounded) `TT_Size.metrics'. This fixes
- a scaling bug that caused incorrect rendering when the bytecode
- interpreter was enabled.
-
-2004-06-14 Huw D M Davies <h.davies1@physics.ox.ac.uk>
-
- * src/winfonts/winfnt.c (FNT_Face_Init): Set x_ppem and y_ppem
- based on pixel_width and pixel_height.
- (FNT_Size_Set_Pixels): Updated.
-
-2004-06-14 Werner Lemberg <wl@gnu.org>
-
- * src/lzw/zopen.c: Comment out inclusion of signal.h and unistd.h.
- Reported by Hyvärinen Jyrki Juhani.
-
-2004-06-11 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2004-06-10 David Turner <david@freetype.org>
-
- * src/base/ftobject.c, src/base/fthash.c, src/base/ftexcept.c,
- src/base/ftsysio.c, src/base/ftsysmem.c, src/base/ftlist.c: Removed.
- Obsolete.
-
- * src/raster/ftraster.c (Alignment, PAlignment): New union to fix
- problems with 64bit systems.
- (AlignProfileSize): Use it.
-
-2004-06-08 David Turner <david@freetype.org>
-
- * include/freetype/freetype.h (FT_Glyph_Metrics): Move `lsb_delta'
- and `rsb_delta' elements to...
- (FT_GlyphSlotRec): Here to retain binary compatibility with older
- FreeType versions.
- Update all users.
-
- * src/sfnt/sfobjs.c (tt_face_get_name): Remove compiler warning.
-
- * src/winfonts/winfnt.c (FNT_Load_Glyph): Add missing initialization
- of slot->metrics.width and slot->metrics.height when loading a
- Windows FNT glyph. Thanks to Huw Davies.
-
- * include/freetype/cache/ftcmru.h (FTC_MruNode_CompareFunc): Change
- return type to FT_Bool.
-
- * src/cache/ftcbasic.c (ftc_basic_family_compare): Change return
- type to FT_Bool.
-
- * src/cache/ftccache.c (FTC_Cache_Init, ftc_cache_init): Make
- the former call the latter, not vice versa.
- (FTC_Cache_Done, ftc_cache_done): Ditto.
-
- * src/cache/ftcglyph.c (FTC_GNode_Compare, ftc_gnode_compare): Make
- the former call the latter, not vice versa.
- (FTC_GCache_Init, ftc_gcache_init): Ditto.
- (FTC_GCache_Done, ftc_gcache_done): Ditto.
-
- * src/cache/ftcimage.c (FTC_INode_Free, ftc_inode_free): Make the
- former call the latter, not vice versa.
- (FTC_INode_Weight, ftc_inode_weight): Ditto.
-
- * src/cache/ftcmanag.c (ftc_size_node_compare,
- ftc_size_node_compare_faceid, ftc_face_node_compare): Change return
- type to FT_Bool.
-
- * src/cache/ftcsbits.c (FTC_SNode_Free, ftc_snode_free): Make the
- former call the latter, not vice versa.
- (FTC_SNode_Weight, ftc_snode_weight): Ditto.
- (FTC_SNode_Compare, ftc_snode_compare): Ditto.
-
- * src/cache/ftcsbits.c: Fix some bugs and inefficiencies in the cache
- sub-system.
-
-2004-06-05 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afloader.c (af_loader_load_g): Set `lsb_delta' and
- `rsb_delta' in slot->metrics and tune side bearings slightly.
-
-2004-06-04 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2004-06-04 David Chester <davidchester@qmx.net>
-
- Improve inter-letter spacing for autohinted glyphs.
-
- * include/freetype/freetype.h (FT_Glyph_Metrics): Add elements
- `lsb_delta' and `rsb_delta'.
-
- * src/autohint/ahhint.c (ah_hinter_load): Set `lsb_delta' and
- `rsb_delta' in slot->metrics and tune side bearings slightly.
-
-2004-06-04 David Turner <david@freetype.org>
-
- * src/autofit/*: Important fixes to the auto-fitter. The output
- now seems to be 100% equivalent to the auto-hinter, while being
- about 2% faster (which proves that script-specific algorithm
- selection isn't a performance problem).
-
- To test it, change `autohint' to `autofit' in
- <freetype/config/ftmodule.h> and recompile.
-
- A few more testing is needed before making this the official
- auto-hinting module.
-
-2004-06-02 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (compute_glyph_metrics): Fix compiler
- warnings.
-
-2004-06-01 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfobjs.c (tt_face_get_name): Make sure that an English
- name record for the Apple platform is preferred to a non-English
- entry for the Microsoft platform. Problem reported by HANDA
- Ken'ichi.
-
-2004-05-19 George Williams <gww@silcom.com>
-
- * src/type1/t1load.c (mm_axis_unmap, mm_weights_unmap): New
- auxiliary functions.
- (T1_Get_MM_Var): Provide axis tags.
- Use mm_axis_unmap and mm_weights_unmap to provide default values
- for design and normalized axis coordinates.
-
- * include/freetype/t1tables.h (PS_DesignMapRec): Change type of
- `design_points' to FT_Long.
- Update all users.
-
-2004-05-17 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftbbox.c (BBox_Conic_Check): Fix boundary cases.
- Reported by Mikey Anbary <manbary@vizrt.com>.
-
-2004-05-15 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfobjs.c (sfnt_done_face): Free face->postscript_name.
-
-2004-05-15 George Williams <gww@silcom.com>
-
- * src/sfnt/ttload.c (tt_face_load_max_profile): Always set
- face->root.num_glyphs.
-
-2004-05-14 Masatake YAMATO <jet@gyve.org>
- George Williams <gww@silcom.com>
-
- * src/sfnt/ttload.c (sfnt_dir_check): Handle `bhed' properly.
-
-2004-05-14 Werner Lemberg <wl@gnu.org>
-
- * src/cache/ftcbasic.c (ftc_basic_family_compare,
- ftc_basic_family_init, ftc_basic_family_get_count,
- ftc_basic_family_load_bitmap, ftc_basic_family_load_glyph,
- ftc_basic_gnode_compare_faceid): Adjust parameters and return types
- to prototypes given in header files from include/freetype/cache.
- Use casts to proper types locally.
- (ftc_basic_image_family_class, ftc_basic_image_cache_class,
- ftc_basic_sbit_family_class, ftc_basic_sbit_cache_class): Remove
- casts.
-
- * src/cache/ftccback.h: Adjust parameters and return types to
- prototypes given in header files from include/freetype/cache.
-
- * src/cache/ftcimage.c (ftc_inode_free, ftc_inode_new,
- ftc_inode_weight): Adjust parameters and return types to prototypes
- given in header files from include/freetype/cache. Use casts to
- proper types locally.
-
- * src/cache/ftcsbits.c (ftc_snode_free, ftc_snode_new,
- ftc_snode_weight, ftc_snode_compare): Adjust parameters and return
- types to prototypes given in header files from
- include/freetype/cache. Use casts to proper types locally.
-
- * src/cache/ftccmap.c (ftc_cmap_node_free, ftc_cmap_node_new,
- ftc_cmap_node_weight, ftc_cmap_node_compare,
- ftc_cmap_node_remove_faceid): Adjust parameters and return types to
- prototypes given in header files from include/freetype/cache. Use
- casts to proper types locally.
- (ftc_cmap_cache_class): Remove casts.
-
- * src/cache/ftcglyph.c (ftc_gnode_compare, ftc_gcache_init,
- ftc_gcache_done): Adjust parameters and return types to prototypes
- given in header files from include/freetype/cache. Use casts to
- proper types locally.
-
- * src/cache/ftcmanag.c (ftc_size_node_done, ftc_size_node_compare,
- ftc_size_node_init, ftc_size_node_reset,
- ftc_size_node_compare_faceid, ftc_face_node_init,
- ftc_face_node_done, ftc_face_node_compare: Adjust parameters and
- return types to prototypes given in header files from
- include/freetype/cache. Use casts to proper types locally.
-
- (ftc_size_list_class, ftc_face_list_class): Remove casts.
-
-2004-05-13 Werner Lemberg <wl@gnu.org>
-
- * src/autohint/ahmodule.c (ft_autohinter_init, ft_autohinter_done):
- Use FT_Module as parameter and do a cast to FT_AutoHinter locally.
- (autohint_module_class): Remove casts.
-
- * src/base/ftglyph.c (ft_bitmap_glyph_init, ft_bitmap_glyph_copy,
- ft_bitmap_glyph_done, ft_bitmap_glyph_bbox, ft_outline_glyph_init,
- ft_outline_glyph_done, ft_outline_glyph_copy,
- ft_outline_glyph_transform, ft_outline_glyph_bbox,
- ft_outline_glyph_prepare): Use FT_Glyph as parameter and do a cast
- to FT_XXXGlyph locally.
- Use FT_CALLBACK_DEF throughout.
- (ft_bitmap_glyph_class, ft_outline_glyph_class): Remove casts.
-
- * src/bdf/bdfdrivr.c (bdf_cmap_init, bdf_cmap_done,
- bdf_cmap_char_index, bdf_cmap_char_next): Use FT_CMap as parameter
- and do a cast to BDF_CMap locally.
- (bdf_cmap_class): Remove casts.
-
-2004-05-12 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffgload.h (CFF_Builder): Remove `error'.
- * src/cff/cffgload.c (cff_decoder_parse_charstrings): Replace
- `Memory_Error' with `Fail' and update all users.
-
-2004-05-11 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/psaux.h (T1_ParseState): New
- enumeration.
- (T1_BuilderRec): Replace `path_begun' with `parse_state'.
- Remove `error'.
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Replace
- `Memory_Error' with `Fail' and update all users.
- Don't use `builder->error'.
- Replace `path_begun' with `parse_state' and check parsing states.
-
- * src/psaux/psobjs.c (t1_builder_init, t1_builder_start_point):
- Replace `path_begun' with `parse_state' and check parsing states.
-
-2004-05-10 George Williams <gww@silcom.com>
-
- * src/truetype/ttxgvar.c (ft_var_load_avar): Do free arrays in case
- of error -- `avar' is optional so we can't rely on tt_done_blend
- being called automatically.
-
-2004-05-09 George Williams <gww@silcom.com>
-
- * src/truetype/ttxgvar.c (ft_var_load_avar, ft_var_load_gvar): Fix
- error handling.
-
-2004-05-07 Werner Lemberg <wl@gnu.org>
-
- * src/pfr/pfrobjs.c, src/pfr/pfrobjs.h (pfr_face_init,
- pfr_face_done, pfr_face_get_kerning, pfr_slot_init, pfr_slot_done,
- pfr_slot_load): Don't use PFR_XXX but FT_XXX arguments which are
- typecast to the proper PFR_XXX types within the function.
- Update code accordingly.
-
- * src/pfr/pfrdrivr.c (pfr_get_kerning, pfr_get_advance,
- pfr_get_metrics, pfr_get_service): Don't use PFR_XXX but FT_XXX
- arguments which are typecast to the proper PFR_XXX types within the
- function.
- Update code accordingly.
- Use FT_CALLBACK_DEF throughout.
- (pfr_metrics_service_rec, pfr_driver_class): Remove casts.
-
-2004-05-06 Masatake YAMATO <jet@gyve.org>
-
- * src/truetype/ttgxvar.c (ft_var_load_gvar): Use FT_FACE_STREAM.
- (*): Rename local variable OffsetToData to offsetToData.
-
-2004-05-06 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffobjs.c (cff_size_done, cff_size_init, cff_size_reset,
- cff_slot_done, cff_slot_init, cff_face_init, cff_face_done): Access
- root fields directly.
- * src/cff/cffdrivr.c (Load_Glyph): Access root fields directly.
-
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Save current
- frame before calling TT_Vary_Get_Glyph_Deltas.
-
- * src/pcf/pcfdrivr.c (PCF_CMapRec): Rename `cmap' to `root' for
- consistency.
- (pcf_cmap_init, pcf_cmap_done, pcf_cmap_char_index,
- pcf_cmap_char_next): Don't use PCF_XXX but FT_XXX arguments which
- are typecast to the proper PCF_XXX types within the function.
- Update code accordingly.
- (pcf_cmap_class): Remove casts.
- (PCF_Face_Done, PCF_Face_Init, PCF_Set_Pixel_Size): Don't use
- PCF_XXX but FT_XXX arguments which are typecast to the proper
- PCF_XXX types within the function.
- Update code accordingly.
- Use FT_CALLBACK_DEF throughout.
- (PCF_Set_Point_Size): New wrapper function.
- (PCF_Glyph_Load, pcf_driver_requester): Use FT_CALLBACK_DEF.
- (pcf_driver_class): Remove casts.
-
-2004-05-04 Steve Hartwell <shspamsink@comcast.net>
-
- * src/truetype/ttobjs.c (tt_driver_done): Fix typo.
-
-2004-05-04 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdfdrivr.c (BDF_Face_Done, BDF_Face_Init,
- BDF_Set_Pixel_Size): Don't use BDF_XXX but FT_XXX arguments which
- are typecast to the proper BDF_XXX types within the function.
- Update code accordingly.
- Use FT_CALLBACK_DEF throughout.
- (BDF_Set_Point_Size): New wrapper function.
- (bdf_driver_class): Remove casts.
-
- * src/cff/cffdrivr.c (Get_Kerning, Load_Glyph, cff_get_interface):
- Don't use CFF_XXX but FT_XXX arguments which are typecast to the
- proper CFF_XXX types within the function.
- Update code accordingly.
- Use FT_CALLBACK_DEF throughout.
- (cff_driver_class): Remove casts.
-
- * src/cff/cffobjs.h, src/cff/cffobjs.c (cff_size_done,
- cff_size_init, cff_size_reset, cff_slot_done, cff_slot_init,
- cff_face_init, cff_face_done, cff_driver_init, cff_driver_done):
- Don't use CFF_XXX but FT_XXX arguments which are typecast to the
- proper CFF_XXX types within the function.
- Update code accordingly.
- (cff_point_size_reset): New wrapper function.
-
- * src/cid/cidobjs.h, src/cid/cidobjs.c (cid_slot_done,
- cid_slot_init, cid_size_done, cid_size_init, cid_size_reset,
- cid_face_done, cid_face_init, cid_driver_init, cid_driver_done):
- Don't use CID_XXX but FT_XXX arguments which are typecast to the
- proper CID_XXX types within the function.
- Update code accordingly.
- (cid_point_size_reset): New wrapper function.
-
- * src/cid/cidgload.c, src/cid/cidgload.h (cid_slot_load_glyph):
- Don't use CID_XXX but FT_XXX arguments which are typecast to the
- proper CID_XXX types within the function.
- Update code accordingly.
-
- * src/cid/cidriver.c (cid_get_interface):
- Don't use CID_XXX but FT_XXX arguments which are typecast to the
- proper CID_XXX types within the function.
- Update code accordingly.
- Use FT_CALLBACK_DEF.
- (t1cid_driver_class): Remove casts.
-
- * src/truetype/ttdriver.c (tt_get_interface): Use FT_CALLBACK_DEF.
- * src/truetype/ttgxvar.c (ft_var_load_avar): Don't free non-local
- variables (this is done later).
- (ft_var_load_avar): Fix call to FT_FRAME_ENTER.
- (TT_Get_MM_Var): Fix size for `fvar_fields'.
- (TT_Vary_Get_Glyph_Deltas): Handle deallocation of local variables
- correctly.
-
- * src/base/ftdbgmem.c (ft_mem_debug_realloc): Don't abort if
- current size is zero.
-
-2004-05-03 Steve Hartwell <shspamsink@comcast.net>
-
- * src/truetype/ttobjs.h, src/truetype/ttobjs.c (tt_face_init,
- tt_face_done, tt_size_init, tt_size_done, tt_driver_init,
- tt_driver_done): Don't use TT_XXX but FT_XXX arguments which are
- typecast to the proper TT_XXX types within the function.
- Update code accordingly.
-
- * src/truetype/ttdriver.c (Get_Kerning, Set_Char_Sizes,
- Set_Pixel_Sizes, Load_Glyph, tt_get_interface): Don't use TT_XXX but
- FT_XXX arguments which are typecast to the proper TT_XXX types
- within the function.
- Update code accordingly.
- (tt_driver_class): Remove casts.
-
-2004-05-02 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttload.c (tt_face_free_names): Check that `table->names'
- is not NULL. Reported by Gordon Childs <gchilds@quickcut.com.au>.
-
-2004-04-29 Werner Lemberg <wl@gnu.org>
-
- * docs/formats.txt: Add more information on PFR format.
-
-2004-04-28 Werner Lemberg <wl@gnu.org>
-
- * docs/formats.txt: New file.
- * docs/CHANGES: Updated.
-
-2004-04-28 Masatake YAMATO <jet@gyve.org>
-
- * include/freetype/internal/tttypes.h (GX_BlendRec_)
- [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Fix a typo.
-
- * src/truetype/ttgxvar.h (GX_BlendRec_): Fix a typo.
-
-2004-04-27 Masatake YAMATO <jet@gyve.org>
-
- * src/truetype/ttgxvar.h: Use FT_LOCAL instead of FT_LOCAL_DEF
- for function declarations.
-
-2004-04-25 George Williams <gww@silcom.com>
-
- * src/truetype/ttgxvar.c (ft_var_apply_tuple): Fix typo.
-
-2004-04-25 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/Jamfile, docs/CHANGES: Updated.
-
-2004-04-24 Werner Lemberg <wl@gnu.org>
-
- * src/pcf/pcfdrivr.c: Revert change from 2004-04-17.
- * src/pcf/pcfutil.c: Use FT_LOCAL_DEF.
- * src/pcf/pcfutil.h: Include FT_CONFIG_CONFIG_H.
- Use FT_BEGIN_HEADER and FT_END_HEADER.
- Use FT_LOCAL.
-
-2004-04-24 George Williams <gww@silcom.com>
-
- Add support for Apple's distortable font technology (in GX fonts).
-
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (TT_CONFIG_OPTION_GX_VAR_SUPPORT): New macro.
-
- * include/freetype/ftmm.h (FT_Var_Axis, FT_Var_Named_Style,
- FT_MM_Var): New structures.
- (FT_Get_MM_Var, FT_Set_Var_Design_Coordinates,
- FT_Set_Var_Blend_Coordinates): New function declarations.
-
- * include/freetype/internal/services/svmm.h (FT_Get_MM_Var_Func,
- FT_Set_Var_Design_Func): New typedefs.
- Update MultiMasters service.
-
- * include/freetype/internal/tttypes.h
- [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include FT_MULTIPLE_MASTERS_H.
- (GX_Blend) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: New typedef.
- (TT_Face) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: New members `doblend'
- and `blend'.
-
- * include/freetype/tttags.h (TTAG_avar, TTAG_cvar, TTAG_gvar): New
- macros.
-
- * include/freetype/internal/fttrace.h: Add `ttgxvar'.
-
- * src/base/ftmm.c (FT_Get_MM_Var, FT_Set_Var_Design_Coordinates,
- FT_Set_Var_Blend_Coordinates): New functions.
-
- * src/sfnt/sfobjs.c (sfnt_load_face)
- [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Set FT_FACE_FLAG_MULTIPLE_MASTERS
- flag for GX var fonts.
-
- * src/truetype/ttgxvar.c, src/truetype/ttgxvar.h: New files.
-
- * src/truetype/truetype.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
- ttgxvar.c.
-
- * src/truetype/ttdriver.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
- FT_MULTIPLE_MASTERS_H, FT_SERVICE_MULTIPLE_MASTERS_H, and ttgxvar.h.
- (tt_service_gx_multi_masters) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]:
- New service.
- (tt_services) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Updated.
-
- * src/truetype/ttgload.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
- ttgxvar.h.
- (TT_Process_Simple_Glyph, load_truetype_glyph)
- [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Support GX var fonts.
-
- * src/truetype/ttobjs.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
- ttgxvar.h.
- (tt_done_face) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Call
- tt_done_blend.
-
- * src/truetype/ttpload.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
- ttgxvar.h.
- (tt_face_load_cvt) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Call
- tt_face_vary_cvt.
-
- * src/truetype/rules.mk (TT_DRV_SRC): Add ttgxvar.c.
-
- * src/type1/t1driver.c (t1_service_multi_masters): Add T1_Get_MM_Var
- and T1_Set_Var_Design.
-
- * src/type1/t1load.c (FT_INT_TO_FIXED, FT_FIXED_TO_INT): New macros.
- (T1_Get_MM_Var, T1_Set_Var_Design): New functions.
-
- * src/type1/t1load.h (T1_Get_MM_Var, T1_Set_Var_Design): New
- function declarations.
-
-2004-04-23 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftcache.h (FT_Get_CharMap_Index): Rename
- declaration and move to...
- * include/freetype/freetype.h (FT_Get_Charmap_Index): Here.
- (FREETYPE_PATCH): Set to 9.
-
- * src/base/ftobjs.c (FT_Get_Charmap_Index): New function.
-
- * builds/unix/configure.ac (version_info): Set to 9:7:3.
- * builds/unix/configure: Updated.
-
- * builds/win32/visualc/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj: s/218/219/.
-
- * builds/freetype.mk (refdoc), README, Jamfile (RefDoc):
- s/2.1.8/2.1.9/.
-
- * docs/CHANGES, docs/VERSION.DLL: Updated.
-
-2004-04-21 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffparse.c (cff_parser_run), src/psaux/psobjs.c
- (ps_parser_load_field): Use FT_CHAR_BIT.
-
-2004-04-21 David Turner <david@freetype.org>
-
-
- * Version 2.1.8 released.
- =========================
-
-
- * src/cff/cffobjs.c (cff_face_init): Fix a small memory leak.
-
- * src/autofit/afloader.c (af_loader_load_g), src/autofit/afmodule.c
- (af_autofitter_load_glyph), src/base/ftdebug.c (FT_Trace_Get_Name):
- Remove compiler warnings.
-
- * src/autofit/aftypes.h: Undefine AF_DEBUG.
-
- * src/lzw/zopen.c (rmask), src/pcf/pcfdrivr.c (pcf_service_bdf,
- pcf_services), src/pcf/pcfread.c (tableNames), src/psaux/psobjs.c
- (ft_char_table), src/type42/t42drivr.c (t42_service_glyph_dict,
- t42_service_ps_font_name): Decorate data arrays with `const' to
- avoid populating the `.data' segment.
-
- * src/lzw/Jamfile: New file.
-
-2004-04-20 Werner Lemberg <wl@gnu.org>
-
- * src/psaux/psobjs.c (T1Radix): Renamed to...
- (ps_radix): This.
- Update current cursor position.
-
- * docs/CHANGES: Updated.
-
-2004-04-18 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c, src/truetype/ttgload.h (TT_Load_Glyph),
- src/ttdriver.c (Load_Glyph): Change type of `glyph_index' to
- FT_UInt. From Lex Warners.
-
-2004-04-17 Chisato Yamauchi <cyamauch@a.phys.nagoya-u.ac.jp>
-
- * src/sfnt/ttload.c (tt_face_load_sfnt_header): Really fix change
- from 2004-03-19.
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Use `ft_strlen'.
-
- * src/pcf/pcfutil.c, src/pcf/pcfutil.h: Decorate functions with
- `static'.
- Remove unused function `RepadBitmap'.
- * src/pcf/pcfdrivr.c: Don't include pcfutil.h.
-
-2004-04-16 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/freetype-config.in (usage): Fix and improve usage
- information.
-
-2004-04-15 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/ftconfig.in, builds/vms/ftconfig.h: Define
- FT_CHAR_BIT.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Don't apply autohinting if
- glyph is vertically distorted or mirrored.
-
- * src/cff/cffgload.c (cff_slot_load): Handle zero `size' properly
- for embedded bitmaps.
-
- * docs/CHANGES: Updated.
-
-2004-04-15 bytesoftware <bytesoftware@btinternet.com>
-
- * include/freetype/config/ftconfig.h, src/base/ftstream.c
- (FT_Stream_ReadFields): More fixes using FT_CHAR_BIT.
-
-2004-04-14 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/config/ftconfig.h (FT_CHAR_BIT): New macro.
-
-2004-04-14 Alex Strelnikov <ptktyrf@mail.ru>
-
- * src/cache/ftcsbits.c (ftc_snode_load): Initialize `*asize' in case
- of error.
-
-2004-04-14 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftmac.c [__GNUC__]: Define OS_INLINE.
- * builds/unix/configure.ac: Don't try to remove `-ansi' compilation
- switch on the Mac.
-
- * builds/unix/ltmain.sh: Regenerated with `libtoolize --force
- --copy' from libtool 1.5.6.
- * builds/unix/aclocal.m4: Regenerated with `aclocal -I .' from
- automake 1.8a.
- * builds/unix/configure: Regenerated with autoconf 2.59a.
-
-2004-04-13 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/config/ftconfig.h: Use CHAR_BIT to define
- size of FT_SIZEOF_xxx.
-
-2004-04-12 Chisato Yamauchi <cyamauch@a.phys.nagoya-u.ac.jp>
-
- * include/freetype/internal/sfnt.h (TT_Find_SBit_Image_Func,
- TT_Load_SBit_Metrics_Func): New typedefs.
- (SFNT_Interface): Add find_sbit_image and load_sbit_metrics.
-
- * src/sfnt/sfdriver.c (sfnt_interface): Updated.
- * src/sfnt/ttsbit.h (tt_find_sbit_image, tt_load_sbit_metrics): New
- declarations.
- * src/sfnt/ttsbit.c (find_sbit_image): Renamed to...
- (tt_find_sbit_image): This.
- Updated all callers.
- (load_sbit_metrics): Renamed to...
- (tt_load_sbit_metrics): This.
- Updated all callers.
-
-2004-04-12 Werner Lemberg <wl@gnu.org>
-
- * configure: Accept makepp also.
-
- * builds/unix/detect.mk: Use proper path to unix-def.mk.
- * builds/unix/unix-def.in (BUILD_DIR, PLATFORM): Remove.
- * builds/unix/unix.mk (BUILD_DIR, PLATFORM): Define.
- Use BUILD_DIR.
-
- * docs/INSTALL, docs/INSTALL.GNU, docs/INSTALL.UNX: Update
- documentation on makepp.
-
-2004-04-11 Werner Lemberg <wl@gnu.org>
-
- * src/lzw/zopen.c: Don't include sys/param.h and sys/stat.h.
-
-2004-04-10 Werner Lemberg <wl@gnu.org>
-
- * src/lzw/ftlzw.c: Include zopen.h dependent on
- FT_CONFIG_OPTION_USE_LZW.
-
- * src/base/ftdebug.c: s/index/idx/ to avoid compiler warnings.
-
-2004-04-02 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/ltmain.sh: Regenerated with `libtoolize --force
- --copy' from libtool 1.5.2.
- * builds/unix/aclocal.m4: Regenerated with `aclocal -I .' from
- automake 1.8a.
- * builds/unix/configure: Regenerated with autoconf 2.59a.
-
-2004-04-01 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/ft-munmap.m4 (FT_MUNMAP_PARAM): Fix arguments of
- AC_COMPILE_IFELSE.
- * builds/unix/aclocal.m4: Regenerated with `aclocal -I .' from
- automake 1.8a.
- * builds/unix/configure: Regenerated with autoconf 2.59a.
- * builds/unix/config.guess, builds/unix/config.sub: Updated from
- `config' CVS module at subversions.gnu.org.
- * builds/unix/install-sh, builds/unix/mkinstalldirs: Updated from
- `texinfo' CVS module at subversions.gnu.org.
- * builds/freetype.mk (refdoc): Updated.
-
-2004-03-31 Werner Lemberg <wl@gnu.org>
-
- Handle broken FNT files which don't have a trailing NULL byte
- in the face name string.
-
- * src/winfonts/winfnt.h (FNT_FontRec): New member `family_name'.
- * src/winfonts/winfnt.c (fnt_font_done): Free font->family_name.
- (FNT_Face_Init): Append a final zero byte to the font face name.
-
-2004-03-30 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttload.c (tt_face_load_sfnt_header): Fix change from
- 2004-03-19.
-
-2004-03-27 Werner Lemberg <wl@gnu.org>
-
- * src/base/descrip.mms (OBJS): Add ftbbox.obj.
-
-2004-03-26 George Williams <gww@silcom.com>
-
- Add vertical phantom points.
-
- * include/freetype/internal/tttypes.h (TT_LoaderRec): Add
- `top_bearing', `vadvance', `pp3', and `pp4'.
-
- * src/autofit/afloader.c (af_loader_load_g): Handle two more points.
-
- * src/autohint/ahhint.c (ah_hinter_load): Handle two more points.
- * src/truetype/ttgload.c (Get_VMetrics): New function.
- (TT_Load_Simple_Glyph, TT_Process_Simple_Glyph): Handle two more
- points.
- (load_truetype_glyph): Use Get_VMetrics.
- Handle two more points.
- (compute_glyph_metrics): Thanks to vertical phantom points we now
- can always compute `advance_height' and `top_bearing'.
- * src/truetype/ttobjs.h (TT_SubglyphRec): Add vertical phantom
- points.
-
-
- * src/autohint/ahglyph.c (ah_outline_load): Fix allocation of
- `news'.
-
-2004-03-21 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdfdrivr.c (BDF_Glyph_Load): Fix left side bearing.
-
-2004-03-20 Steve Hartwell <shspamsink@comcast.net>
-
- * src/cache/ftcmru.c (FTC_MruList_RemoveSelection): Handle a NULL
- value for `selection' as `select all'.
-
-2004-03-19 Steve Hartwell <shspamsink@comcast.net>
-
- * src/sfnt/ttload.c (tt_face_load_sfnt_header): Reject face_index
- values > 0 if loading non-TTC fonts.
-
- * src/base/ftmac.c (open_face_from_buffer): Set positive face_index
- to zero before calling FT_Open_Face.
-
- * docs/CHANGES: Updated.
-
-2004-03-04 Werner Lemberg <wl@gnu.org>
-
- * Jamfile, vms_make.com, builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype/vcproj, include/freetype/ftmoderr.h:
- Add LZW module.
-
- * Jamfile.in: Removed.
-
- * docs/CHANGES: Updated.
-
- * include/freetype/internal/ftobjs.h: s/MIN/FT_MIN/, s/MAX/FT_MAX/,
- s/ABS/FT_ABS/. Updated all callers.
-
- * src/type1/t1load.c (parse_dict), src/pcf/pcfdrivr.c
- (PCF_Face_Init): Use FT_ERROR_BASE.
-
-2004-03-04 Albert Chin <china@thewrittenword.com>
-
- Add support for PCF fonts compressed with LZW (extension .pcf.Z,
- created with `compress').
-
- * include/freetype/config/ftoption.h, devel/ftoption.h
- (FT_CONFIG_OPTION_USE_LZW): New macro.
-
- * include/freetype/ftlzw.h: New file.
- * include/freetype/config/ftheader.h (FT_LZW_H): New macro for
- ftlzw.h.
-
- * src/lzw/*: New files.
-
- * src/pcf/pcfdrivr.c: Include FT_LZW_H.
- (PCF_Face_Init): Try LZW also.
-
- * src/gzip/ftgzip.c: s/0/Gzip_Err_Ok/ where appropriate.
- Beautify.
-
-2004-03-03 Werner Lemberg <wl@gnu.org>
-
- * src/pshinter/pshalgo.c (psh_hint_table_init): Simplify code.
-
-2004-03-02 Werner Lemberg <wl@gnu.org>
-
- Add embedded bitmap support to CFF driver.
-
- * src/cff/cffobjs.h (CFF_SizeRec): New structure.
-
- * src/cff/cffgload.c (cff_builder_init): Updated.
- (cff_slot_load): Updated.
- [TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: Load sbit.
-
- * src/cff/cffobjs.c (sbit_size_reset)
- [TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: New function.
- (cff_size_get_globals_funcs, cff_size_done, cff_size_init): Updated.
- (cff_size_reset): Updated.
- [TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: Call sbit_size_reset.
-
- * src/cff/cffdrivr.c (Load_Glyph): Updated.
- (cff_driver_class): Use CFF_SizeRec.
-
- * docs/CHANGES: Updated.
-
-2004-03-01 Werner Lemberg <wl@gnu.org>
-
- * src/pshinter/pshglob.c (psh_globals_scale_widths): Don't use
- FT_RoundFix but FT_PIX_ROUND.
- (psh_blues_snap_stem): Don't use blue_shift but blue_threshold.
-
- * src/pshinter/pshalgo.c (PSH_STRONG_THRESHOLD_MAXIMUM): New macro.
- (psh_glyph_find_strong_points): Use PSH_STRONG_THRESHOLD_MAXIMUM.
- (psh_glyph_find_blue_points): New function. Needed for fonts like
- p052003l.pfb (URW Palladio L Roman) which have flex curves at the
- base line within blue zones, but the flex curves aren't covered by
- hints.
- (ps_hints_apply): Use psh_glyph_find_blue_points.
-
-2004-02-27 Garrick Meeker <garrick@digitalanarchy.com>
-
- * builds/unix/configure.ac: Fix compiler flags for
- `--with-old-mac-fonts'.
- * builds/unix/configure: Regenerated.
-
- * src/base/ftmac.c: s/TARGET_API_MAC_CARBON/!TARGET_API_MAC_OS8/.
- (FT_New_Face_From_Resource): New function.
- (FT_New_Face): Use FT_New_Face_From_Resource.
- (FT_New_Face_From_FSSpec): Use FT_New_Face_From_Resource.
- [__MWERKS__]: Don't include FSp_fopen.h.
-
-2004-02-26 Werner Lemberg <wl@gnu.org>
-
- * src/pshinter/pshglob.c (psh_globals_new): Fix value of
- `dim->stdw.count'.
- Don't assign default values to blue scale and blue shift.
-
-2004-02-25 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2004-02-25 Garrick Meeker <garrick@digitalanarchy.com>
- Steve Hartwell <shspamsink@comcast.net>
-
- Improve MacOS fond support. Provide a new API
- `FT_New_Face_From_FSSpec' similar to `FT_New_Face'.
-
- * src/base/ftmac.c [__MWERKS__]: Include FSp_fopen.h.
- STREAM_FILE [__MWERKS__]: New macro.
- (ft_FSp_stream_close, ft_FSp_stream_io) [__MWERKS__]: New functions.
- (file_spec_from_path) [__MWERKS__]: Updated #if statement.
- (get_file_type, make_lwfn_spec): Use `const' for argument.
- (is_dfont) [TARGET_API_MAC_CARBON]: Removed.
- (count_face_sfnt, count_faces): New functions.
- (parse_fond): Do some range checking.
- (read_lwfn): Change type of second argument.
- No longer call FSpOpenResFile.
- (OpenFileAsResource): New function.
- (FT_New_Face_From_LWFN): Use `const' for second argument.
- Use OpenFileAsResource.
- (FT_New_Face_From_Suitcase): Change type of second argument.
- No longer call FSpOpenResFile.
- Loop over all resource indices.
- (FT_New_Face_From_dfont) [TARGET_API_MAC_CARBON]: Removed.
- (FT_GetFile_From_Mac_Name): Use `const' for first argument.
- (ResourceForkSize): Removed.
- (FT_New_Face): Updated to use new functions.
- (FT_New_Face_From_FSSpec): New function.
-
- * include/freetype/ftmac.h: Updated.
-
-2004-02-24 Malcolm Taylor <mtaylor@clear.net.nz>
-
- * src/autohint/ahhint.c (ah_hinter_load) <FT_GLYPH_FORMAT_OUTLINE>:
- Handle case where outline->num_vedges is zero while computing hinted
- metrics.
-
-2004-02-24 Gordon Childs <gchilds@quickcut.com.au>
-
- * src/cff/cffcmap.c (cff_cmap_unicode_init): Provide correct value
- for `count'.
-
-2004-02-24 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/t1tables.h (PS_PrivateRec): Add
- `expansion_factor'.
-
- * src/pshinter/pshglob (psh_blues_scale_zones): Fix computation
- of blues->no_overshoots -- `blues_scale' is stored with a
- magnification of 1000, and `scale' returns fractional pixels.
-
- * src/type1/t1load.c (T1_Open_Face): Initialize `blue_shift',
- `blue_fuzz', `expansion_factor', and `blue_scale' according to the
- Type 1 specification.
-
- * src/type1/t1tokens.h: Handle `ExpansionFactor'.
-
- * docs/CHANGES: Updated.
-
-2004-02-24 Masatake YAMATO <jet@gyve.org>
-
- Provide generic access to MacOS resource forks.
-
- * src/base/ftrfork.c, include/freetype/internal/ftrfork.h: New
- files.
-
- * src/base/ftobjs.c: Include FT_INTERNAL_RFORK_H.
- (Mac_Read_POST_Resource, Mac_Read_sfnt_Resource): Remove arguments
- `resource_listoffset' and `resource_data' and adapt code
- accordingly. These values are calculated outside of the function
- now.
- Add new argument `offsets'.
- (IsMacResource): Use `FT_Raccess_Get_HeaderInfo' and
- `FT_Raccess_Get_DataOffsets'.
- (load_face_in_embedded_rfork): New function.
- (load_mac_face): Use load_face_in_embedded_rfork.
- (ft_input_stream_new): Renamed to...
- (FT_Stream_New): This. Use FT_BASE_DEF. Updated all callers.
- (ft_input_stream_free): Renamed to...
- (FT_Stream_Free): This. Use FT_BASE_DEF. Updated all callers.
-
- * src/base/ftbase.c: Include ftrfork.c.
-
- * src/base/rules.mk (BASE_SRC), src/base/Jamfile: Updated.
-
- * include/freetype/internal/internal.h (FT_INTERNAL_RFORK_H):
- New macro.
-
- * include/freetype/internal/fttrace.h: Added `rfork' as a new
- trace definition.
-
- * include/freetype/internal/ftstream.h: Declare FT_Stream_New and
- FT_Stream_Free.
-
- * include/freetype/config/ftoption.h, devel/ftoption.h
- (FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK): New option.
-
- * include/freetype/config/ftstdlib.h (ft_strrchr): New macro.
-
-2004-02-23 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
- * include/freetype/internal/ftdebug.h: Include FT_FREETYPE_H.
-
-2004-02-23 Masatake YAMATO <jet@gyve.org>
-
- Provide a simple API to control FreeType's tracing levels.
-
- * include/freetype/internal/ftdebug.h (FT_Trace_Get_Count,
- FT_Trace_Get_Name): New declarations.
-
- * src/base/ftdebug.c (FT_Trace_Get_Count, FT_Trace_Get_Name): New
- functions.
-
-2004-02-23 David Turner <david@freetype.org>
-
- * src/autofit/afhints.c, src/autofit/afhints.h,
- src/autofit/aflatin.c, src/autofit/afloader.c, src/types.h: Grave
- bugs have been fixed. The auto-fitter works, doesn't crash, but
- still produces unexpected results...
-
-2004-02-21 Werner Lemberg <wl@gnu.org>
-
- * src/pshinter/pshalgo.c (PSH_STRONG_THRESHOLD): Changed to hold
- the accepted shift for strong points in fractional pixels (which
- is a heuristic value).
- (psh_glyph_find_strong_points): Compute threshold for
- psh_hint_table_find_strong_points.
- (psh_hint_table_find_strong_point): Add parameter to pass threshold.
-
-2004-02-20 Werner Lemberg <wl@gnu.org>
-
- * src/pshinter/pshrec.c (ps_mask_table_set_bits): Don't call
- ps_mask_table_alloc but ps_mask_table_last.
- (ps_hints_t2mask): Use correct position and number for vertical
- and horizontal hinter mask bits.
-
- * docs/CHANGES: Updated.
-
-2004-02-19 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftstroke.c (FT_Glyph_StrokeBorder): Fix enum handling.
- * src/cff/cffdrivr.c (cff_get_cmap_info): Remove compiler warning.
-
-2004-02-18 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/freetype.h: Document FT_LOAD_TARGET_XXX properly.
-
- * src/base/ftglyph.c (ft_bitmap_glyph_class,
- ft_outline_glyph_class): Tag with FT_CALLBACK_TABLE_DEF.
-
- * src/smooth/ftsmooth.c (ft_smooth_render): Handle
- FT_RENDER_MODE_LIGHT.
-
-2004-02-17 Werner Lemberg <wl@gnu.org>
-
- Fix callback functions in cache module.
-
- * src/cache/ftccback.h: New file for callback declarations.
-
- * src/cache/ftcbasic.c (ftc_basic_family_compare,
- ftc_basic_family_init, ftc_basic_family_get_count,
- ftc_basic_family_load_bitmap, ftc_basic_family_load_glyph,
- ftc_basic_gnode_compare_faceid): Use FT_CALLBACK_DEF.
- (ftc_basic_image_family_class, ftc_basic_image_cache_class,
- ftc_basic_sbit_family_class, ftc_basic_sbit_cache_class):
- Use FT_CALLBACK_TABLE_DEF and local wrapper functions.
-
- * src/cache/ftccache.c: Include ftccback.h.
- (ftc_cache_init, ftc_cache_done): New wrapper functions which use
- FT_LOCAL_DEF.
-
- * src/cache/ftccmap.c: Include ftccback.h.
- (ftc_cmap_cache_class): Use local wrapper functions.
-
- * src/cache/ftcglyph.c: Include ftccback.h.
- (ftc_gnode_compare, ftc_gcache_init, ftc_gcache_done): New wrapper
- functions which use FT_LOCAL_DEF.
-
- * src/cache/ftcimage.c: Include ftccback.h.
- (ftc_inode_free, ftc_inode_new, ftc_inode_weight): New wrapper
- functions which use FT_LOCAL_DEF.
-
- * src/cache/ftcmanag.c (ftc_size_list_class, ftc_face_list_class):
- Use FT_CALLBACK_TABLE_DEF.
-
- * src/cache;/ftcsbits.c: Include ftccback.h.
- (ftc_snode_free, ftc_snode_new, ftc_snode_weight,
- ftc_snode_compare): New wrapper functions which use FT_LOCAL_DEF.
-
- * src/cache/rules.mk (CACHE_DRV_H): Add ftccback.h.
-
-2004-02-17 Masatake YAMATO <jet@gyve.org>
-
- * include/freetype/ftmac.h (FT_GetFile_From_Mac_Name): Fix a typo
- (FT_EXPORT_DEF -> FT_EXPORT).
-
- * include/freetype/ftxf86.h (FT_Get_X11_Font_Format): Ditto.
-
-2004-02-15 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_Set_Char_Size): Fix typo.
-
-2004-02-14 Masatake YAMATO <jet@gyve.org>
-
- * builds/unix/ftsystem.c: Include errno.h.
- (ft_close_stream): Renamed to...
- (ft_close_stream_by_munmap): This.
- (ft_close_stream_by_free): New function.
- (FT_Stream_Open): Use fallback method if mmap fails.
- Use proper function for closing the stream.
-
-2004-02-14 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_dict): Initialize `start_binary'.
-
-2004-02-13 Robert Etheridge <roberte@stcc.cc.tx.us>
-
- * src/type42/t42objs.c (T42_Face_Init), src/type1/t1objs.c
- (T1_Face_Init), src/cid/cidobjs.c (cid_face_init): Fix computation
- of underline_position and underline_thickness.
-
-2004-02-12 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_Set_Char_Size): Return immediately if
- ppem values don't change. Suggested by Graham Asher.
-
-2004-02-11 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidload.c (cid_face_open): Always allocate
- face->cid_stream so that we can deallocate it safely.
-
-2004-02-10 Werner Lemberg <wl@gnu.org>
-
- Make the PS parser more tolerant w.r.t. non-standard font data. In
- general, an error is only reported in case of a syntax error; a
- wrong type is now simply ignored (if possible). To be independent
- of the order of various MM-specific keywords, the parse_shared_dict
- routine has been removed -- the PS parser is now capable to skip
- this data. It no longer fails on parsing e.g.
-
- dup /WeightVector exch def
-
- Since the token following /WeightVector isn't `[' (starting an
- array) it is simply ignored.
-
- * include/freetype/fterrdef.h: Define `FT_Err_Ignore' (0xA2) as a
- new internal error value.
-
- * src/type1/t1load.c (parse_blend_axis_types,
- parse_blend_design_positions, parse_blend_design_map): Return
- T1_Err_Ignore if no proper array is following the keyword.
- (parse_weight_vector): Use T1_ToTokenArray, initializing `blend'
- structure, if necessary.
- Return T1_Err_Ignore if no proper array is following the keyword.
- (parse_shared_dict): Removed.
- (parse_encoding): Set parser->root.error to return T1_Err_Ignore
- if no result can be obtained.
- Check for errors before accessing `elements' array.
- (t1_keywords): Remove /shareddict.
- (parse_dict): Reset error if t1_load_keyword returns T1_Err_Ignore.
- Set keyword_flag only in case of success.
- Check error code if skipping an unrecognized token.
- (T1_Open_Face) [!T1_CONFIG_OPTION_NO_MM_SUPPORT]: Call T1_Done_Blend
- if blend commands haven't set up a proper MM font.
-
- * src/psaux/psobjs.c (ps_parser_load_field_table): Remove special
- code for synthetic fonts.
- Return PSaux_Err_Ignore if no proper value has been found.
-
-2004-02-09 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings)
- <cff_op_endchar>: Preserve glyph width before calling
- cff_operator_seac.
-
-2004-02-09 Martin Muskens <mmuskens@aurelon.com>
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings): Handle special
- first argument for `hintmask' and `cntrmask' operators also.
-
-2004-02-08 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/configure.in: Call AC_SUBST for `enable_shared',
- `hardcode_libdir_flag_spec', and `wl'.
- * builds/unix/configure: Regenerated.
-
- * builds/unix/freetype-config.in: Make --prefix and --exec-prefix
- actually work.
- Report a proper --rpath (or -R) value for --libs argument if a
- shared library has been built.
-
- * docs/CHANGES: Updated.
-
-2004-02-07 Keith Packard <keithp@keithp.com>
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init, BDF_Set_Pixel_Size): Fix
- computation of various vertical and horizontal metric values.
-
- * src/pcfdrivr.c (PCF_Set_Pixel_Size), src/pcfread (pcf_load_font):
- Ditto.
-
-2004-02-07 Werner Lemberg <wl@gnu.org>
-
- * builds/win32/visualc/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.dsw, docs/CHANGES: Updated.
-
-2004-02-07 Vitaliy Pasternak <v_a_pasternak@mail.ru>
-
- * builds/win32/visualc/freetype.sln,
- builds/win32/visualc/freetype.vcproj: New files for VS.NET 2003.
-
-2004-02-03 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP):
- Initialize `node'.
- * src/type1/t1load.c (parse_dict): Initialize `have_integer'.
-
-2004-02-02 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_dict): Handle `RD' and `-|' commands
- outside of /Subrs or /CharStrings. This can happen if there is
- additional code manipulating those two arrays so that FreeType
- doesn't recognize them properly.
- (T1_Open_Face): Improve an error message.
-
-2004-02-01 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_charstrings): Exit immediately if
- there are no elements in /CharStrings. This is needed for fonts
- like Optima-Oblique which not only define /CharStrings but access it
- also.
-
-2004-02-01 David Turner <david@freetype.org>
-
- * src/sfnt/Jamfile: Removing `ttcmap' from the list of sources.
-
- * include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP)
- <FTC_INLINE>: Provide macro version which doesn't use inline code.
- * include/freetype/cache/ftcglyph.h (FTC_GCACHE_LOOKUP_CMP)
- <FTC_INLINE>: Ditto.
- Use FTC_MRULIST_LOOKUP_CMP.
- * include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): New
- macro.
- (FTC_MRULIST_LOOKUP): Use it.
-
- * src/cache/Jamfile (_sources), src/cache/descrip.mms: Updated.
- * src/cache/ftcbasic.c: Fix compiler warnings.
- * src/cache/ftcmanag.c (FTC_Manager_LookupSize,
- FTC_Manager_LookupFace) <FTC_INLINE>: Use FTC_MRULIST_LOOKUP_CMP.
- * src/cache/ftcmru.c (FTC_MruList_Find): Fix a bug (found after
- heavy testing).
-
- * Jamfile: Updating `refdoc' target, and adding `autohint' to the
- list of modules to build. Both the autohinter and autofitter will
- be built by default. But which one will be used is determined by
- the content of `ftmodule.h'.
-
- * src/autofit/*: Many updates, but the code is still buggy...
-
-2004-01-31 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffgload.c (cff_operator_seac): Fix magnitude of
- accent offset.
- Update code similarly to the seac support for Type 1 fonts.
- (cff_decoder_parse_charstrings) <cff_op_endchar>: Fix magnitude
- of accent offset.
- Don't hint glyphs twice if seac is emulated.
- <cff_op_flex>: Assign correct point tags.
- * docs/CHANGES: Updated.
-
-2004-01-30 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1parse.c (T1_Get_Private_Dict): Use FT_MEM_MOVE, not
- FT_MEM_COPY, for copying the private dict.
-
- * src/type1/t1load.c (parse_subrs): Assign number of subrs only
- in first run.
- (parse_charstrings): Parse /CharStrings in second run without
- assigning values.
- (parse_dict): Skip all /CharStrings arrays but the first. We need
- this for non-standard fonts like `Optima' which have different
- outlines depending on the resolution. Note that there is no
- guarantee that we get fitting /Subrs and /CharStrings arrays; this
- can only be done by a real PS interpreter.
-
-2004-01-29 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
-
- * builds/win32/visualc/index.html: New file, giving detailed
- explanations about forcing CR+LF line endings for the VC++ project
- files.
-
-2004-01-22 Garrick Meeker <garrick@digitalanarchy.com>
-
- * src/cff/cffload.c (cff_subfont_load): Initialize `dict'.
-
-2004-01-22 Werner Lemberg <wl@gnu.org>
-
- Add support for the hexadecimal representation of binary data
- started with `StartData' in CID-keyed Type 1 fonts.
-
- * include/freetype/internal/t1types.h (CID_FaceRec): Add new
- members `binary_data' and `cid_stream'.
-
- * src/cid/cidload.c (cid_read_subrs): Use `face->cid_stream'.
- (cid_hex_to_binary): New auxiliary function.
- (cid_face_open): Add new argument `face_index' to return quickly
- if less than zero. Updated all callers.
- Call `cid_hex_to_binary', then open and assign memory stream to
- `face->cid_stream' if `parser->binary_length' is non-zero.
- * src/cid/cidload.h: Updated.
-
- * src/cid/cidobjs.c (cid_face_done): Free `binary_data' and
- `cid_stream'.
-
- * src/cid/cidparse.c (cid_parser_new): Check arguments to
- `StartData' and set parser->binary_length accordingly.
- * src/cid/cidparse.h (CID_Parser): New member `binary_length'.
-
- * src/cid/cidgload.c (cid_load_glyph): Use `face->cid_stream'.
-
- * docs/CHANGES: Updated.
-
-2004-01-21 Werner Lemberg <wl@gnu.org>
-
- include/freetype/config/ftstdlib.h (ft_atoi): Replaced with...
- (ft_atol): This.
- * src/base/ftdbgmem.c: s/atol/ft_atol/.
- * src/type42/t42drivr.c: s/ft_atoi/ft_atol/.
-
-2004-01-20 Masatake YAMATO <jet@gyve.org>
-
- * include/freetype/ftcache.h: Delete duplicated definition of
- FTC_FaceID.
-
- * src/cff/cffdrivr.c (cff_get_cmap_info): Call sfnt module's TT CMap
- Info service function if the cmap comes from sfnt. Return 0 if the
- cmap is synthesized in cff module.
-
-2004-01-20 David Turner <david@freetype.org>
-
- * src/cache/ftcmanag.c (ftc_size_node_compare): Call
- FT_Activate_Size.
-
-2004-01-20 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1parse.c (T1_Get_Private_Dict): Skip exactly one
- CR, LF, or CR/LF after `eexec'.
-
-2004-01-18 David Turner <david@freetype.org>
-
- * src/sfnt/ttsbit.c (tt_face_set_sbit_strike): Remove compiler
- warning.
-
- * src/tools/docmaker/*: Updating beautifier tool.
-
-2004-01-15 David Turner <david@freetype.org>
-
- * src/base/ftoutln.c (ft_orientation_extremum_compute): Fix
- infinite loop bug.
-
- * include/freetype/ftstroke.h: Include FT_GLYPH_H.
- (FT_Stroker_Rewind, FT_Glyph_Stroke, FT_Glyph_StrokeBorder): New
- declarations.
-
- * src/base/ftstroke.c: Include FT_INTERNAL_OBJECTS_H.
- (FT_Outline_GetOutsideBorder): Inverse result.
- (FT_Stroker_Rewind, FT_Glyph_Stroke, FT_Glyph_StrokeBorder): New
- functions.
- (FT_Stroker_EndSubPath): Close path if needed.
- (FT_Stroker_Set, FT_Stroker_ParseOutline): Use FT_Stroker_Rewind.
-
- * include/freetype/cache/ftcmanag.h (FTC_ScalerRec,
- FTC_Manager_LookupSize): Moved to...
- * include/freetype/ftcache.h (FTC_ScalerRec,
- FTC_Manager_LookupSize): Here.
-
- * src/tools/docmaker/docbeauty.py: New file to beautify the
- documentation comments (e.g., to convert them to single block border
- mode).
- * src/tools/docmaker/docmaker.py (file_exists, make_file_list):
- Moved to...
- * src/tools/docmaker/utils.py (file_exists, make_file_list): Here.
-
-2004-01-14 David Turner <david@freetype.org>
-
- * include/freetype/internal/ftmemory.h (FT_ARRAY_COPY,
- FT_ARRAY_MOVE): New macros to make copying arrays easier.
- Updated all relevant code to use them.
-
-2004-01-14 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffload.c (cff_font_load): Load charstrings_index earlier.
- Use number of charstrings as argument to CFF_Load_FD_Select (as
- documented in the CFF specs).
-
-2004-01-13 Graham Asher <graham.asher@btinternet.com>
-
- * src/pshinter/pshalgo.c (psh_glyph_init): Move assignment of
- `glyph->memory' up to free arrays properly in case of failure.
-
-2004-01-10 Masatake YAMATO <jet@gyve.org>
-
- Make `FT_Get_CMap_Language_ID' work with CFF. Bug reported by
- Steve Hartwell <shspamsink@comcast.net>.
-
- * src/cff/cffdrivr.c: Include FT_SERVICE_TT_CMAP_H.
- (cff_services): Added an entry for FT_SERVICE_ID_TT_CMAP.
- (cff_get_cmap_info): New function.
- (cff_service_get_cmap_info) New entry for cff_services.
-
- * src/sfnt/ttcmap0.c: Exit loop after a format match has been found.
- Suggested by Steve Hartwell <shspamsink@comcast.net>.
-
-2004-01-03 Masatake YAMATO <jet@gyve.org>
-
- * src/base/ftobjs.c (destroy_charmaps): New function.
- (destroy_face, open_face): Use `destroy_charmaps'.
-
-2004-01-01 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2004-01-01 Michael Jansson <mjan@em2-solutions.com>
-
- * src/winfonts/winfnt.c (FNT_Size_Set_Pixels): Fix sign of
- size->metrics.descender.
-
-2003-12-31 Wolfgang Domröse <porthos.domroese@harz.de>
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings)
- [FT_DEBUG_LEVEL_TRACE]: Use `%ld' in FT_TRACE4.
- <cff_op_flex1>: Change type of dx and dy to FT_Pos and remove
- cast for accessing arguments.
-
-2003-12-31 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Revert previous
- change. It's not necessary.
-
-2003-12-29 Smith Charles <smith.charles@free.fr>
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Handle `repeated
- flags set' correctly.
-
-2003-12-29 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffobjs.c (cff_face_init): Fix memory leak by deallocating
- `full' and `weight' properly.
- * src/cff/cffgload.c (cff_decoder_parse_charstrings)
- <cff_op_hintmask> [FT_DEBUG_LEVEL_TRACE]: Use `0x' as prefix for
- tracing output.
-
-2003-12-26 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/sfnt.h (TT_Set_SBit_Strike_Func):
- Use FT_UInt for ppem values.
- * src/sfnt/ttsbit.c (tt_face_set_sbit_strike): Use FT_UInt for
- ppem values.
- * src/sfnt/ttsbit.h: Updated.
-
- * src/base/ftobjs.c (FT_Set_Pixel_Sizes): Don't allow ppem values
- larger than -0FFFF.
-
-2003-12-25 Werner Lemberg <wl@gnu.org>
-
- * src/base/fttrigon.c, src/base/ftgloadr.c: Include
- FT_INTERNAL_OBJECTS_H.
-
- * src/base/ftstroke.c (FT_Outline_GetInsideBorder,
- FT_Outline_GetOutsideBorder): s/or/o/ to make it compile with
- C++ compilers.
-
- * src/cache/ftcmru.c, include/freetype/cache/ftcmru.h:
- s/select/selection/ to avoid compiler warning.
- * src/cff/cffload.h: s/select/ftselect/ to avoid potential
- compiler warning.
-
-2003-12-24 Werner Lemberg <wl@gnu.org>
-
- * src/cache/ftcsbits.c (FTC_SNode_Weight):
- s/FTC_SBIT_ITEM_PER_NODE/FTC_SBIT_ITEMS_PER_NODE/.
-
-2003-12-24 David Turner <david@freetype.org>
-
- * Fixed compilation problems in the cache sub-system.
-
- * Partial updates to src/autofit.
-
- * Jamfile (FT2_COMPONENTS): Add autofit module.
-
-2003-12-23 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffgload.c (cff_lookup_glyph_by_stdcharcode): Handle
- CID-keyed fonts.
-
-2003-12-23 David Turner <david@freetype.org>
-
- * include/freetype/internal/ftobjs.h (FT_PAD_FLOOR, FT_PAD_ROUND,
- FT_PAD_CEIL, FT_PIX_FLOOR, FT_PIX_ROUND, FT_PIX_CEIL): New macros.
- They are used to avoid compiler warnings with very pedantic compilers.
- Note that `(x) & -64' causes a warning if (x) is not signed. Use
- `(x) & ~63' instead!
- Updated all related code.
-
- Add support for extraction of `inside' and `outside' borders.
-
- * src/base/ftstroke.c (FT_StrokerBorder): New enumeration.
- (FT_Outline_GetInsideBorder, FT_Outline_GetOutsideBorder,
- FT_Stroker_GetBorderCounts, FT_Stroker_ExportBorder): New functions.
- (FT_StrokeBorderRec): New boolean member `valid'.
- (ft_stroke_border_get_counts): Updated.
- * include/freetype/ftstroke.h: Updated.
-
-2003-12-22 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftwinfnt.h (FT_WinFNT_ID_*): New definitions
- to describe the `charset' field in FT_WinFNT_HeaderRec.
- * src/winfonts/winfnt.c (FNT_Face_Init): Set encoding to
- FT_ENCODING_NONE except for FT_WinFNT_ID_MAC.
-
- * include/freetype/freetype.h (FT_Encoding): Improve comment,
- based on work by Detlef Würkner <TetiSoft@apg.lahn.de>.
-
- * docs/CHANGES: Updated.
-
-2003-12-22 David Turner <david@freetype.org>
-
- * include/freetype/ftcache.h,
- include/freetype/cache/ftcmanag.h,
- include/freetype/cache/ftccache.h,
- include/freetype/cache/ftcmanag.h,
- include/freetype/cache/ftcmru.h (added),
- include/freetype/cache/ftlru.h (removed),
- include/freetype/cache/ftcsbits.h,
- include/freetype/cache/ftcimage.h,
- include/freetype/cache/ftcglyph.h,
- src/cache/ftcmru.c,
- src/cache/ftcmanag.c,
- src/cache/ftccache.c,
- src/cache/ftcglyph.c,
- src/cache/ftcimage.c,
- src/cache/ftcsbits.c,
- src/cache/ftccmap.c,
- src/cache/ftcbasic.c (added),
- src/cache/ftlru.c (removed):
-
- *Complete* rewrite of the cache sub-system to `solve' the
- following points:
-
- - all public APIs have been moved to FT_CACHE_H, everything
- under `include/freetype/cache' is only needed by client
- applications that want to implement their own caches
-
- - a new function named FTC_Manager_RemoveFaceID to deal
- with the uninstallation of FaceIDs
-
- - the image and sbit cache are now abstract classes, that
- can be extended much more easily by client applications
-
- - better performance in certain areas. Further optimizations
- to come shortly anyway...
-
- - the FTC_CMapCache_Lookup function has changed its signature,
- charmaps can now only be retrieved by index
-
- - FTC_Manager_Lookup_Face => FTC_Manager_LookupFace
- FTC_Manager_Lookup_Size => FTC_Manager_LookupSize (still in
- private header for the moment)
-
-2003-12-21 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_dict): Stop parsing if `eexec' keyword
- is encountered.
-
-2003-12-19 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cfftypes.h (CFF_MAX_CID_FONTS): Increase to 32. For
- example, the Japanese Hiragino font already contains 15 subfonts.
-
- * src/cff/cffload.c (cff_font_load): Deallocate `sids' array for
- CID-keyed fonts.
-
- * devel/ftoption.h: Define FT_DEBUG_MEMORY.
-
-2003-12-18 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ttnameid.h (TT_ADOBE_ID_LATIN_1): New macro.
- * src/type1/t1objs.c (T1_Face_Init): Use TT_ADOBE_ID* values.
-
-2003-12-18 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cfftypes.h (CFF_FontRecDictRec): Change type of
- `cid_count' to `FT_ULong'.
-
- * src/cff/cffgload.c (cff_slot_load): Take care of empty `cids'
- array.
-
- * src/cff/cffload.c (cff_charset_done): Free `cids' array.
- (cff_font_load): Create cids array only for CID-keyed fonts which
- are subsetted.
-
- * src/cff/cffobjs.c (cff_face_init): Check the availability of
- the PSNames modules for non-pure CFFs also.
- Set FT_FACE_FLAG_GLYPH_NAMES for a non-pure CFF also if it isn't
- CID-keyed.
-
- * src/cff/rules.mk (CFF_DRV_H): Add cfftypes.h.
-
-2003-12-17 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Don't set
- FT_FACE_FLAG_GLYPH_NAMES if the font contains a version 3.0 `post'
- table.
-
- * docs/CHANGES: Updated.
-
-2003-12-17 Masatake YAMATO <jet@gyve.org>
-
- Add new function FT_Get_CMap_Language_ID to extract the language ID
- for TrueType/sfnt fonts.
-
- * include/freetype/internal/services/svttcmap.h: New file.
- * include/freetype/internal/ftserv.h (FT_SERVICE_TT_CMAP_H): Add
- svttcmap.h.
-
- * src/sfnt/sfdriver.c: Include ttcmap0.h.
- (tt_service_get_cmap_info): New service.
- (sfnt_services): Updated.
-
- * src/sfnt/ttcmap0.c (tt_cmap*_get_info): New functions.
- (tt_cmap*_class_rec): Add tt_cmap*_get_info members.
- (tt_get_cmap_info): New function.
- * src/sfnt/ttcmap0.h: Include FT_SERVICE_TT_CMAP_H.
- (TT_CMap_ClassRec): New field `get_cmap_info'.
- (tt_get_cmap_info): New declaration.
-
- * src/base/ftobjs.c: Include FT_SERVICE_TT_CMAP_H.
- (FT_Get_CMap_Language_ID): New function implementation.
- * include/freetype/tttables.h (FT_Get_CMap_Language_ID): New
- function declaration.
-
-2003-12-16 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttcmap.c, src/sfnt/ttcmap.h: Removed. Obsolete.
-
- * include/freetype/internal/sfnt.h (SFNT_Interface): Remove
- obsolete fields `load_charmap' and `free_charmap'.
- (TT_CharMap_Load_Func, TT_CharMap_Free_Func): Removed.
- * src/sfnt/sfnt.c: Don't include ttcmap.c.
- * src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttcmap.c.
- * src/sfnt/ttload.c: Don't include ttcmap.h.
- * src/sfnt/sfdriver.c: Don't include ttcmap.h.
- (sfnt_interface): Updated.
-
- * include/freetype/internal/tttypes.h (TT_TableDirRec,
- TT_CMapDirRec, TT_CMapDirEntryRec, TT_CMap0, TT_CMap2SubHeaderRec,
- TT_CMap2Rec, TT_CMap4Segment, TT_CMap4Rec, TT_CMap6,
- TT_CMapGroupRec, TT_CMap8_12Rec, TT_CMap10Rec, TT_CharMap_Func,
- TT_CharNext_Func, TT_CMapTableRec, TT_CharMapRec): Removed.
- Obsolete.
- * src/cff/cffobjs.h (CFF_CharMapRec): Removed. Obsolete.
-
-2003-12-15 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2003-12-15 Wolfgang Domröse <porthos.domroese@harz.de>
-
- * builds/atari/*: New directory for building FreeType 2 on Atari
- with the PureC compiler.
-
-2003-12-12 Wolfgang Domröse <porthos.domroese@harz.de>
-
- * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Add
- cast.
- * src/cff/cffdrivr.c (cff_ps_has_glyph_names): Assure that return
- value is either 0 or 1.
-
-2003-12-12 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffdrivr.c (cff_get_glyph_name): Improve error message.
- (cff_get_name_index): Return if no PSNames service is available.
- (cff_ps_has_glyph_names): Handle CID-keyed fonts correctly.
- * src/cff/cfftypes.h (CFF_CharsetRec): New field `cids', used for
- CID-keyed fonts. This is the inverse mapping of `sids'.
- * src/cff/cffload.c (cff_charset_load): New argument `invert'.
- Initialize charset->cids if `invert' is set.
- (cff_font_load): In call to cff_charset_load, set `invert' to true
- for CID-keyed fonts.
- * src/cff/cffgload.c (cff_slot_load): Handle glyph index as CID
- and map it to the real glyph index.
-
- * docs/CHANGES: Updated.
-
-2003-12-11 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffobjs.c (cff_face_init): Don't set
- FT_FACE_FLAG_GLYPH_NAMES for CID-keyed fonts.
- Don't construct a cmap for CID-keyed fonts.
-
-2003-12-10 Werner Lemberg <wl@gnu.org>
-
- Use implementation specific SID value 0xFFFF to indicate that
- a dictionary element is missing.
-
- * src/cff/cffload.c (cff_subfont_load): Initialize all fields
- which hold SIDs to 0xFFFF.
- (cff_index_get_sid_string): Handle SID value 0xFFFF.
- Handle case where `psnames' is zero.
- (cff_font_load): Updated.
- Don't load encoding for CID-keyed CFFs.
-
- * src/cff/cffobjs.c (cff_face_init): Updated.
- Don't check for PSNames module if font is CID-keyed.
- Compute style name properly (using the same algorithm as in the
- CID driver).
- Fix computation of style flags.
-
- * src/cff/cfftoken.h: Comment out handling of base_font_name.
- Rename `postscript' field to `embedded_postscript'
- * src/cff/cfftypes.h (CFF_FontRecDictRec): Remove `base_font_name'
- and `postscript'.
-
-2003-12-10 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * src/pcf/pcfdrivr.c (pcf_get_charset_id): New function (a clone
- of the similar BDF function).
- (pcf_service_bdf): Use it.
-
-2003-12-09 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Set FT_FACE_FLAG_GLYPH_NAMES
- only if a `post' table is present.
-
-2003-12-09 George Williams <gww@silcom.com>
-
- * src/base/ftobjs.c (load_mac_face): Recent versions of Linux
- support Mac's HFS+ file system, thus enable code to read /rsrc on
- non-Macintosh platforms also.
-
-2003-12-08 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/psaux.h (PS_TableRec): Change type
- of `lengths' to FT_PtrDist.
- (T1_DecoderRec): Change type of `subrs_len' to FT_PtrDist.
- * include/freetype/internal/t1types.h (T1_FontRec): Change type
- of `subrs_len' and `charstrings_len' to FT_PtrDist.
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Replace `junk'
- variable with better solution.
- (IsMacResource): Remove unused variable `map_len'.
- Replace `junk' variable with better solution.
- (FT_Open_Face) [!FT_MACINTOSH]: Add conditional
- FT_CONFIG_OPTION_MAC_FONTS.
-
-2003-12-08 Wolfgang Domröse <porthos.domroese@harz.de>
-
- * src/autohint/ahhint.c (ah_hinter_hint_edges,
- ah_hinter_align_strong_points): Add some casts.
-
- * src/base/ftoutln.c (FT_OrientationExtremumRec): Change type
- of `pos' to FT_Long.
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource,
- Mac_Read_sfnt_Resource): Change type of `len' to FT_Long.
-
- * src/type42/t42parse.c (t42_parse_dict): Add cast for `n_keywords'.
-
-2003-12-07 Werner Lemberg <wl@gnu.org>
-
- * docs/raster.txt: New file, taken from FreeType 1 and completely
- revised.
-
-2003-12-04 Masatake YAMATO <jet@gyve.org>
-
- * src/type1/t1driver.c (Get_Interface): Remove FT_UNUSED for
- t1_interface. t1_interface is used.
-
-2003-11-27 David Turner <david@freetype.org>
-
- * src/pfr/pfrdrivr.c (pfr_get_metrics): Revert incorrect change of
- 2003-11-23: For PFR fonts, metrics->x_scale and metrics->y_scale are
- the scaling values for outline units, not for metric units.
-
-2003-11-25 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftcalc.c, include/freetype/internal/ftcalc.h
- (FT_MulDiv_No_Round): Surround code with `#ifdef
- TT_CONFIG_OPTION_BYTECODE_INTERPRETER ... #endif'.
-
-2003-11-23 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftcalc.c (FT_MulDiv_No_Round): New function (32 and
- 64 bit version).
- * include/freetype/internal/ftcalc.h: Updated.
-
- * src/truetype/ttinterp.c (TT_MULDIV_NO_ROUND): New macro.
- (TT_INT64): Removed.
- (DO_DIV): Use TT_MULDIV_NO_ROUND.
-
- * src/pfr/pfrdrivr.c (pfr_get_metrics): Directly use
- metrics->x_scale and metrics->y_scale.
-
-2003-11-22 Rogier van Dalen <R.C.van.Dalen@umail.leidenuniv.nl>
-
- * src/truetype/ttinterp.c (CUR_Func_move_orig): New macro.
- (Direct_Move_Orig, Direct_Move_Orig_X, Direct_Move_Orig_Y): New
- functions. Similar to Direct_Move, Direct_Move_X, and
- Direct_Move_Y but without touching.
- (Compute_Funcs): Use new functions.
-
- (Round_None, Round_To_Grid, Round_To_Half_Grid, Round_Down_To_Grid,
- Round_Up_To_Grid, Round_To_Double_Grid, Round_Super,
- Round_Super_45): Fix rounding of value zero.
-
- (DO_DIV): Don't use TT_MULDIV.
-
- (Ins_SHC): This instruction actually touches the points.
- (Ins_MSIRP): Fix undocumented behaviour.
-
- * src/truetype/ttinterp.h (TT_ExecContextRec): Updated.
-
-2003-11-22 Werner Lemberg <wl@gnu.org>
-
- * docs/VERSION.DLL, docs/CHANGES: Updated.
-
- * src/base/ftobjs.c (FT_Set_Char_Size): Make metrics->x_scale and
- metrics->y_scale really precise.
-
- (FT_Load_Glyph): Update computation of linearHoriAdvance and
- linearVertAdvance.
-
- * src/truetype/ttinterp.c (Update_Max): Use FT_REALLOC.
-
-2003-11-22 David Turner <david@freetype.org>
-
- * src/autofit/*: More updates.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 8.
- * builds/unix/configure.ac (version_info): Set to 9:6:3.
- * README: Updated.
-
-2003-11-13 John A. Boyd Jr. <jaboydjr@netwalk.com>
-
- * src/bdf/bdfdrivr.c (bdf_interpret_style), src/pcf/pcfread.c
- (pcf_interpret_style): Replace spaces with dashes in properties
- SETWIDTH_NAME and ADD_STYLE_NAME to simplify parsing.
-
-2003-11-11 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2003-11-11 John A. Boyd Jr. <jaboydjr@netwalk.com>
-
- Handle SETWIDTH_NAME and ADD_STYLE_NAME properties for BDF and PCF
- fonts.
-
- * src/bdf/bdfdrivr.c (bdf_interpret_style): New auxiliary function.
- (BDF_Face_Init): Don't handle style properties but call
- bdf_interpret_style.
-
- * src/pcf/pcfread.c (pcf_interpret_style): New auxiliary function.
- (pcf_load_font): Don't handle style properties but call
- pcf_interpret_style.
-
-2003-11-07 Werner Lemberg <wl@gnu.org>
-
-
- * Version 2.1.7 released.
- =========================
-
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 7.
-
- * builds/unix/ft2unix.h: Fix comments.
-
- * builds/unix/ftconfig.in: Synchronized with ANSI version.
- Use `#undef' in templates as recommended in the autoconf
- documentation.
- Since real `#undef' lines don't survive during configuration, use
- `/undef' instead; the postprocessing facility of the
- AC_CONFIG_HEADERS autoconf macro converts them to `#undef'.
-
- * builds/unix/install.mk (install): Install Unix version of
- `ftconfig.h'.
-
- * builds/unix/unix-cc.in (CFLAGS): Set FT_CONFIG_CONFIG_H macro
- to include the correct `ftconfig.h' file.
-
- * builds/unix/ft-munmap.m4 (FT_MUNMAP_DECL): Removed.
- (FT_MUNMAP_PARAM): Updated syntax to autoconf 2.59.
-
- * builds/unix/freetype2.m4: Updated syntax to autoconf 2.59.
-
- * builds/unix/configure.ac: Use AC_CONFIG_HEADERS instead of
- AC_CONFIG_HEADER to create ftconfig.h, and use second argument
- to replace `/undef' with `#undef'.
- Don't use FT_MUNMAP_DECL but AC_CHECK_DECLS to check for munmap.
- Use AS_HELP_STRING in AC_ARG_WITH.
- Update syntax to autoconf 2.59.
-
- * builds/unix/ltmain.sh: Regenerated with `libtoolize --force
- --copy' from libtool 1.5.
- * builds/unix/aclocal.m4: Regenerated with `aclocal -I .' from
- automake 1.7.8.
- * builds/unix/configure: Regenerated with autoconf 2.59.
- * builds/unix/config.guess, builds/unix/config.sub: Updated from
- `config' CVS module at subversions.gnu.org
- * builds/unix/install-sh, builds/unix/mkinstalldirs: Updated from
- `texinfo' CVS module at subversions.gnu.org.
-
- * builds/vms/ftconfig.h: Synchronized with ANSI version.
-
- * docs/CUSTOMIZE: Fix documentation error.
- * docs/CHANGES, docs/VERSION.DLL, docs/release: Updated.
-
- * builds/freetype.mk (refdoc): Updated --title.
-
-2003-11-07 David Turner <david@freetype.org>
-
-
- * Version 2.1.6 released.
- =========================
-
-
- * install: Removed. Obsolete.
-
-2003-11-04 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfdriver.c: Include FT_SERVICE_SFNT_H.
- (sfnt_service_sfnt_table): New service.
- (sfnt_services): Updated.
-
- * docs/license.txt: Reworded.
-
-2003-11-03 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/*: Add a guard to all public header files which
- load FT_FREETYPE_H to reject freetype.h from FreeType 1.
-
-2003-11-02 Patrick Welche <prlw1@newn.cam.ac.uk>
-
- * builds/unix/freetype2.m4, builds/unix/ft-munmap.m4: Protect
- first argument of AC_DEFUN with brackets to avoid possible
- expansion.
-
-2003-11-02 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/cache/ftcglyph.h: Don't include stddef.h.
-
- * include/freetype/freetype.h: Fix check for ft2build.h.
-
-2003-11-01 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/freetype.h: Check that ft2build.h has been
- loaded first.
-
- * src/base/fttype1.c (FT_Get_PS_Font_Info): Fix incorrectly applied
- patch.
-
-2003-10-31 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * src/base/fttype1.c (FT_Get_PS_Font_Info, FT_Has_PS_Glyph_Names):
- Fix parameter order in calls to FT_FACE_FIND_SERVICE.
-
-2003-10-31 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/ftserv.h
- (FT_SERVICE_POSTSCRIPT_NAMES_H): Removed. Unused.
-
- * src/type42/t42drivr.c (t42_services): Updated.
-
-2003-10-29 David Turner <david@freetype.org>
-
- * include/freetype/internal/bdftypes.h: Removed. Obsolete.
- * src/base/ftbdf.c: Updated.
-
- * include/freetype/internal/cfftypes.h: Moved to...
- * src/cff/cfftypes.h: This place since no other module needs to
- know about those types.
-
- * include/freetype/internal/t42types.h: Moved to...
- * src/type42/t42types.h: This place since no other module needs to
- know about those types.
-
- * include/freetype/internal/services/svbdf.h: Include FT_BDF_H.
-
- * include/freetype/internal/services/svpsname.h: Renamed to...
- * include/freetype/internal/services/svpscmap.h: This.
- Updated `FT_Service_PsNames' -> `FT_Service_PsCMaps' and
- `POSTSCRIPT_NAMES' -> `POSTSCRIPT_CMAPS' everywhere.
-
- * include/freetype/internal/services/svpsinfo.h: New file, providing
- PostScript info service.
-
- * include/freetype/internal/ftserv.h (FT_SERVICE_POSTSCRIPT_CMAPS_H,
- FT_SERVICE_POSTSCRIPT_INFO_H): New macros for svpscmap.h and
- svpsinfo.h.
- * include/freetype/internal/internal.h (FT_INTERNAL_TYPE42_TYPES_H,
- FT_INTERNAL_CFF_TYPES_H, FT_INTERNAL_BDF_TYPES_H): Removed.
-
- * src/base/fttype1.c: Don't include FT_INTERNAL_TYPE1_TYPES_H and
- FT_INTERNAL_TYPE42_TYPES_H but FT_INTERNAL_SERVICE_H and
- FT_SERVICE_POSTSCRIPT_INFO_H.
- (FT_Get_PS_Font_Info, FT_Has_PS_Glyph_Names): Use new
- POSTSCRIPT_INFO service.
-
- * src/cff/cffdrivr.c: Include FT_SERVICE_POSTSCRIPT_INFO_H.
- (cff_ps_has_glyph_names): New function.
- (cff_service_ps_info): New service.
- (cff_services): Updated.
-
- * src/cff/cffload.h, src/cff/cffobjs.h, src/cff/cffparse.h: Don't
- include FT_INTERNAL_CFF_TYPES_H but cfftypes.h directly.
-
- * src/cid/cidriver.c: Include FT_SERVICE_POSTSCRIPT_INFO_H.
- (cid_ps_get_font_info): New function.
- (cid_service_ps_info): New service.
- (cid_services): Updated.
-
- * src/type1/t1driver.c: Include FT_SERVICE_POSTSCRIPT_INFO_H.
- (t1_ps_get_font_info, t1_ps_has_glyph_names): New functions.
- (t1_service_ps_info): New service.
- (t1_services): Updated.
-
- * src/type42/t42drivr.c: Include FT_SERVICE_POSTSCRIPT_INFO_H.
- (t42_ps_get_font_info, t42_ps_has_glyph_names): New functions.
- (t42_service_ps_info): New service.
-
- * src/type42/t42objs.h: Don't include FT_INTERNAL_TYPE42_TYPES_H
- but t42types.h directly.
-
- * src/psnames/psmodule.c (psnames_interface, psnames_services):
- Renamed to...
- (pscmaps_interface, pscmaps_services): This.
- Updated all users.
-
-
- * src/gzip/infblock.c (inflate_blocks): Remove compiler warning.
-
-2003-10-22 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_encoding): Handle `/Encoding [ ... ]'.
-
- * src/type1/t1parse.c (T1_Get_Private_Dict): Test whether `eexec'
- is real.
-
- * src/type42/t42parse.c (t42_parse_encoding): Improve boundary
- checking while parsing.
-
- * docs/CHANGES: Updated.
-
-2003-10-21 Josselin Mouette <joss@debian.org>
-
- * include/freetype/internal/t1types.h (T1_FontRec): `paint_type'
- and `stroke_width' aren't pointers.
-
- * src/type42/t42objs.c (T42_Face_Done), src/type1/t1objs.c
- (T1_Face_Done): Don't free `paint_type' and `stroke_width'.
-
-2003-10-20 Graham Asher <graham.asher@btinternet.com>
-
- * src/winfonts/winfnt.c (fnt_cmap_class): Fix position of `const'.
-
-2003-10-19 Werner Lemberg <wl@gnu.org>
-
- * src/autohint/ahhint.c (ah_hinter_load_glyph): Patch from
- 2003-08-18 introduced a severe bug (FT_Render_Glyph was called
- twice under some circumstances, causing strange results). This
- is fixed now by clearing the FT_LOAD_RENDER bit of `load_flags'.
-
- * src/base/ftpfr.c (FT_Get_PFR_Metrics): Initialize `error'.
- * src/psaux/psobjs.c (ps_tobytes): Initialize `n'.
- * src/type42/t42parse.c (t42_parse_sfnts): Initialize `string_size'.
-
-2003-10-16 Werner Lemberg <wl@gnu.org>
-
- Completely revised Type 42 parser. It now handles both fonts
- produced with ttftot42 (tested version 0.3.1) and
- TrueTypeToType42.ps (tested version May 2001; it is necessary to
- fix the broken header comment to be `%!PS-TrueTypeFont...').
-
- * src/type42/t42objs.c (T42_GlyphSlot_Load): Change fourth
- parameter to `FT_UInt'.
- * src/type42/t42objs.h: Updated.
-
- * src/type42/t42parse.h (T42_ParserRec): Change type of `in_memory'
- to FT_Bool.
- (T42_Loader): Change type of `num_chars' and `num_glyphs' to
- FT_UInt.
- Add `swap_table' element.
- * src/type42/t42parse.c (T42_KEYWORD_COUNT, T1_ToFixed,
- T1_ToCoordArray, T1_ToTokenArray): Removed.
- (T1_ToBytes): New macro.
- (t42_is_alpha, t42_hexval): Removed.
- (t42_is_space): Handle `\0'.
- (t42_parse_encoding): Updated to use new PostScript parser routines
- from psaux.
- Handle `/Encoding [ ... ]' also.
- (T42_Load_Status): New enumeration.
- (t42_parse_sfnts): Updated to use new PostScript parser routines
- from psaux.
- (t42_parse_charstrings): Updated to use new PostScript parser
- routines from psaux.
- Handle `/CharStrings << ... >>' also.
- Don't expect that /.notdef is the first element in dictionary. Copy
- code from type1 module to handle this.
- (t42_parse_dict): Updated to use new PostScript parser routines
- from psaux.
- Remove code for synthetic fonts (which can't occur in Type 42
- fonts).
- (t42_loader_done): Release `swap_table'.
-
- * src/psaux/psobjs.c (skip_string): Increase `cur' properly.
-
- * src/type1/t1load.c (parse_charstrings): Make test for `.notdef'
- faster.
-
-2003-10-15 Graham Asher <graham.asher@btinternet.com>
-
- * src/autohint/ahglobal.c (blue_chars), src/winfonts/winfnt.c
- (fnt_cmap_class_rec, fnt_cmap_class), src/bdf/bdflib.c (empty,
- _num_bdf_properties), src/gzip/infutil.c (inflate_mask),
- src/gzip/inffixed.h (fixed_bl, fixed_bd, fixed_tl, fixed_td),
- src/gzip/inftrees.h (inflate_trees_fixed), src/gzip/inftrees.c
- (inflate_trees_fixed): Decorate with more `const' to avoid
- writable global variables which are disallowed on ARM.
-
-2003-10-08 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_font_matrix, parse_charstrings): Remove
- code specially for synthetic fonts; this is handled elsewhere.
- (parse_encoding): Remove code specially for synthetic fonts; this is
- handled elsewhere.
- Improve boundary checking while parsing.
- (parse_dict): Improve boundary checking while parsing.
- Use ft_memcmp to simplify code.
-
-2003-10-07 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_subrs, parse_dict): Handle synthetic
- fonts properly.
- (parse_charstrings): Copy correct number of characters into
- `name_table'.
-
-2003-10-06 Werner Lemberg <wl@gnu.org>
-
- Heavy modification of the PS parser to handle comments and strings
- correctly. This doesn't slow down the loading of PS fonts
- significantly since charstrings aren't affected.
-
- * include/freetype/config/ftstdlib.h (ft_xdigit): Renamed to...
- (ft_isxdigit): This. Updated all callers.
- (ft_isdigit): New alias to `isdigit'.
-
- * include/freetype/internal/psaux.h (PS_Parser_FuncsRec): Renamed
- `skip_alpha' to `skip_PS_token'.
- Add parameter to `to_bytes' and change some argument types.
-
- * src/psaux/psauxmod.c (ps_parser_funcs): Updated.
- * src/psaux/psobjs.c (ft_char_table): New array to map character
- codes (ASCII and EBCDIC) of digits to numbers.
- (OP): New auxiliary macro holding either `>=' or `<' depending on
- the character encoding.
- (skip_comment): New function.
- (skip_spaces): Use it.
- (skip_alpha): Removed.
- (skip_literal_string, skip_string): New functions.
- (ps_parser_skip_PS_token): New function. This is a better
- replacement of...
- (ps_parser_skip_alpha): Removed.
- (ps_parser_to_token, ps_parser_to_token_array): Updated.
- (T1Radix): Rewritten, using `ft_char_table'.
- (t1_toint): Renamed to...
- (ps_toint): This. Update all callers.
- Use `ft_char_table'.
- (ps_tobytes): Add parameter to handle delimiters and change some
- argument types.
- Use `ft_char_table'.
- (t1_tofixed): Renamed to...
- (ps_tofixed): This. Update all callers.
- Use `ft_char_table'.
- (t1_tocoordarray): Renamed and updated to...
- (ps_tocoordarray): This. Update all callers.
- (t1_tofixedarray): Renamed and updated to...
- (ps_tofixedarray): This. Update all callers.
- (t1_tobool): Renamed to...
- (ps_tobool): This. Update all callers.
- (ps_parser_load_field): Updated.
- (ps_parser_load_field_table): Use `T1_MAX_TABLE_ELEMENTS'
- everywhere.
- (ps_parser_to_int, ps_parser_to_fixed, ps_parser_to_coord_array,
- ps_parser_to_fixed_array): Skip spaces. Updated.
- (ps_parser_to_bytes): Add parameter to handle delimiters and change
- some argument types. Updated.
- * src/psaux/psobjs.h: Updated.
-
- * src/cid/cidload.c (cid_parse_dict): Updated.
- * src/cid/cidparse.c (cid_parser_new): Check whether the `StartData'
- token was really found.
- * src/cid/cidparse.h (cid_parser_skip_alpha): Updated and renamed
- to...
- (cid_parser_skip_PS_token): This.
-
- * src/type1/t1parse.h (T1_ParserRec): Use `FT_Bool' for boolean
- fields.
- (T1_Skip_Alpha): Replaced with...
- (T1_Skip_PS_Token): This new macro.
- * src/type1/t1parse.c (hexa_value): Removed.
- (T1_Get_Private_Dict): Use `ft_isxdigit' and
- `psaux->ps_parser_funcs_to_bytes' for handling ASCII hexadecimal
- encoding.
- After decrypting, replace the four random bytes at the beginning
- with whitespace.
- * src/type1/t1load.c (t1_allocate_blend): Use proper error values.
- (parser_blend_design_positions, parse_blend_design_map,
- parse_weight_vector): Updated.
- (is_space): Handle `\f' also.
- (is_name_char): Removed.
- (read_binary_data): Updated.
- (parse_encoding): Use `ft_isdigit'.
- Updated.
- (parse_subrs): Updated.
- (TABLE_EXTEND): New macro.
- (parse_charstrings): Updated.
- Provide a workaround for buggy fonts which have more entries in the
- /CharStrings dictionary then expected; the function now adds some
- slots and skips entries which still exceed the new limit.
- (parse_dict): Updated.
- Terminate on the token `closefile'.
-
- * src/type42/t42parse.c (T1_Skip_Alpha): Replaced with...
- (T1_Skip_PS_Token): This new macro. Updated all callers.
- (t42_parse_encoding): Use `ft_isdigit'.
-
-
- * src/base/ftmm.c (ft_face_get_mm_service): Return FT_Err_Ok if
- success.
-
-2003-10-05 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftmodule.h: Renamed to...
- * include/freetype/ftmodapi.h: This to avoid duplicate file names.
- * include/freetype/config/ftheader.h (FT_MODULE_H): Updated.
-
-2003-10-04 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftoutln.c (FT_OrientationExtremumRec,
- FT_Outline_Get_Orientation): Trivial typo fixes to make it compile.
-
-2003-10-02 Markus F.X.J. Oberhumer <markus@oberhumer.com>
-
- * src/winfonts/winfnt.c (FT_WinFNT_HeaderRec): `color_table_offset'
- has four bytes, not two.
- Fix all users.
- (fnt_font_load, FNT_Load_Glyph): Add more font validity tests.
-
-2003-10-01 David Turner <david@freetype.org>
-
- * src/autofit/*: Adding first source files of the new multi-script
- `auto-fitter'.
-
- * include/freetype/ftoutln.h (FT_Orientation): New enumeration.
- (FT_Outline_Get_Orientation): New declaration.
-
- * src/base/ftoutln.c (FT_OrientationExtremumRec): New structure.
- (ft_orientation_extremum_compute): New auxiliary function.
- (FT_Outline_Get_Orientation): New function to compute the fill
- orientation of a given glyph outline.
-
- * include/freetype/internal/ftserv.h (FT_FACE_LOOKUP_SERVICE): Fixed
- trivial bug which could crash the font engine when a cached service
- pointer was retrieved.
-
-2003-09-30 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidload.c (cid_parse_dict): Skip token if no keyword is
- found.
-
- * src/type1/t1parse.c (IS_T1_WHITESPACE, IS_T1_LINESPACE,
- IS_T1_SPACE): Removed.
- (PFB_Tag): Removed.
- (read_pfb_tag): Don't use PFB_Tag.
-
- * src/type42/t42parse.c (t42_is_space): Handle `\f' also.
- (t42_parse_encoding): Handle synthetic fonts.
-
-2003-09-29 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/t1types.h: Don't include
- FT_INTERNAL_OBJECTS_H but FT_INTERNAL_SERVICE_H.
- * src/truetype/ttobjs.c: Don't include
- FT_SERVICE_POSTSCRIPT_NAMES_H.
-
-2003-09-29 David Turner <david@freetype.org>
-
- Added new service to handle glyph name dictionaries, replacing the
- old internal header named `psnames.h' by `services/svpsname.h'.
- Note that this is different from `services/svpostnm.h' which only
- handles the retrieval of PostScript font names for a given face.
- (Should we merge these two services into a single header?)
-
- * include/freetype/internal/psnames.h: Removed. Most of its
- contents is moved to...
- * include/freetype/internal/services/svpsname.h: New file.
-
- * include/freetype/internal/services/svpostnm.h
- (FT_SERVICE_ID_POSTSCRIPT_NAME): Replaced with...
- (FT_SERVICE_ID_POSTSCRIPT_FONT_NAME): New macro.
- (PsName): Service named changed to...
- (PsFontName): This.
- Updated `FT_Service_PsName' -> `FT_Service_PsFontName' and
- `POSTSCRIPT_NAME' -> `POSTSCRIPT_FONT_NAME' everywhere.
-
- * include/freetype/internal/internal.h
- (FT_INTERNAL_POSTSCRIPT_NAMES_H): Removed.
- * include/freetype/internal/psaux.h: Include
- FT_SERVICE_POSTSCRIPT_NAMES_H.
- (T1_DecoderRec): Updated type of `psnames'.
- * include/freetype/internal/t1types.h: Don't include
- FT_INTERNAL_POSTSCRIPT_NAMES_H but FT_SERVICE_POSTSCRIPT_NAMES_H.
- Include FT_INTERNAL_OBJECTS_H.
- * include/freetype/internal/t42types.h: Don't include
- FT_INTERNAL_POSTSCRIPT_NAMES_H.
- * include/freetype/internal/tttypes.h (TT_FaceRec): Updated.
-
- * include/freetype/internal/ftserv.h (FT_FACE_FIND_SERVICE): Changed
- order of parameters. All callers updated.
- (FT_FACE_FIND_GLOBAL_SERVICE): New macro to look up a service
- globally, checking all modules.
- (FT_ServiceCacheRec): Updated.
- (FT_SERVICE_POSTSCRIPT_NAMES_H): New macro for accessing
- `svpsname.h'.
-
- * include/freetype/internal/ftobjs.h, src/base/ftobjs.c
- (ft_module_get_service): New function.
-
- * src/cff/cffdrivr.c: Don't include FT_INTERNAL_POSTSCRIPT_NAMES_H
- but FT_SERVICE_POSTSCRIPT_NAMES_H.
- (cff_get_glyph_name, cff_get_name_index): Use new POSTSCRIPT_NAMES
- service.
- * src/cff/cffcmap.c (cff_cmap_unicode_init): Updated.
- * src/cff/cffload.c, src/cff/cffload.h: Don't include
- FT_INTERNAL_POSTSCRIPT_NAMES_H but FT_SERVICE_POSTSCRIPT_NAMES_H.
- (cff_index_get_sid_string): Updated.
- * src/cff/cffobjs.c: Don't include FT_INTERNAL_POSTSCRIPT_NAMES_H
- but FT_SERVICE_POSTSCRIPT_NAMES_H.
- (cff_face_init): Use new POSTSCRIPT_NAMES service.
- * src/cff/cffobjs.h: Don't include FT_INTERNAL_POSTSCRIPT_NAMES_H
- but FT_SERVICE_POSTSCRIPT_NAMES_H.
-
- * src/cid/cidobjs.c: Don't include FT_INTERNAL_POSTSCRIPT_NAMES_H
- but FT_SERVICE_POSTSCRIPT_NAMES_H.
- (cid_face_init): Use new POSTSCRIPT_NAMES service.
- * src/cid/cidriver.c: Don't include FT_INTERNAL_POSTSCRIPT_NAMES_H.
-
- * src/psaux/t1cmap.c (t1_cmap_std_init, t1_cmap_unicode_init): Use
- new POSTSCRIPT_NAMES service.
- * src/psaux/t1decode.h (t1_lookup_glyph_by_stdcharcode,
- t1_decode_init): Use new POSTSCRIPT_NAMES service.
- * src/psaux/t1cmap.h, src/psaux/t1decode.h: Don't include
- FT_INTERNAL_POSTSCRIPT_NAMES_H.
-
- * src/psnames/psmodule.c: Don't include
- FT_INTERNAL_POSTSCRIPT_NAMES_H but FT_SERVICE_POSTSCRIPT_NAMES_H.
- (ps_build_unicode_table): Renamed to...
- (ps_unicodes_init): This.
- (ps_lookup_unicode): Renamed to...
- (ps_unicodes_char_index): This.
- (ps_next_unicode): Renamed to...
- (ps_unicodes_char_next): This.
- (psnames_interface): Updated.
- (psnames_services): New services list.
- (psnames_get_service): New function.
- (psnames_module_class): Updated.
-
- * src/sfnt/sfobjs.c: Don't include FT_INTERNAL_POSTSCRIPT_NAMES_H
- but FT_SERVICE_POSTSCRIPT_NAMES_H.
- (sfnt_init_face): Use new POSTSCRIPT_NAMES service.
- * src/sfnt/ttpost.c: Don't include FT_INTERNAL_POSTSCRIPT_NAMES_H
- but FT_SERVICE_POSTSCRIPT_NAMES_H.
- (tt_face_get_ps_name): Updated.
-
- * src/truetype/ttobjs.c: Don't include
- FT_INTERNAL_POSTSCRIPT_NAMES_H but FT_SERVICE_POSTSCRIPT_NAMES_H.
-
- * src/type1/t1driver.c: Don't include
- FT_INTERNAL_POSTSCRIPT_NAMES_H but FT_SERVICE_POSTSCRIPT_NAMES_H.
- * src/type1/t1objs.c: Don't include
- FT_INTERNAL_POSTSCRIPT_NAMES_H but FT_SERVICE_POSTSCRIPT_NAMES_H.
- (T1_Face_Init): Use new POSTSCRIPT_NAMES service.
-
- * src/type42/t42drivr.c (t42_get_ps_name): Renamed to...
- (t42_get_ps_font_name): This.
- (t42_service_ps_name): Renamed to...
- (t42_service_ps_font_name): This.
- (t42_services): Updated.
- * src/type42/t42objs.c (T42_Face_Init): Use new POSTSCRIPT_NAMES
- service.
- * src/type42/t42objs.h: Don't include
- FT_INTERNAL_POSTSCRIPT_NAMES_H but FT_SERVICE_POSTSCRIPT_NAMES_H.
-
-
- * src/base/ftglyph.c (FT_Get_Glyph): Don't access `slot' before
- testing its validity. Reported by Henry Maddocks
- <maddocks@metservice.com>.
-
-2003-09-21 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/ftserv.h (FT_FACE_FIND_SERVICE):
- Fix compilation warning (s/pptr/Pptr/).
-
- * include/freetype/internal/internal.h (FT_INTERNAL_PFR_H,
- FT_INTERNAL_FNT_TYPES_H): Removed.
-
-2003-09-21 David Turner <david@freetype.org>
-
- Migrating the PFR and WINFNT drivers to the new service-based
- internal API.
-
- * include/freetype/internal/fnttypes.h: Removed. Most of its data
- are moved to winfnt.h and...
- * include/freetype/internal/services/svwinfnt.h: New file.
-
- * include/freetype/internal/pfr.h: Removed. Most of its data are
- moved to...
- * include/freetype/internal/services/svpfr.h: New file.
-
- * include/freetype/internal/ftserv.h (FT_FACE_FIND_SERVICE,
- FT_FACE_LOOKUP_SERVICE): Simplify fix of 2003-09-16 by removing
- pointer type argument.
- Updated all callers.
- Update macro names of services header files.
-
- * src/base/ftobjs.c (FT_Get_Name_Index): Simplified code.
-
- * src/base/ftpfr.c: Include FT_SERVICE_PFR_H instead of
- FT_INTERNAL_PFR_H.
- (ft_pfr_check, FT_Get_PFR_Metrics, FT_Get_PFR_Kerning,
- FT_Get_PFR_Advance): Use services provided in `PFR_METRICS'.
-
- * src/base/ftwinfnt.c: Include FT_SERVICE_WINFNT_H instead of
- FT_INTERNAL_FNT_TYPES_H.
- (FT_Get_WinFNT_Header): Use service provided in `WINFNT'.
-
- * src/pfr/pfrdrivr.c: Include FT_SERVICE_PFR_H and
- FT_SERVICE_XFREE86_NAME_H instead of FT_INTERNAL_PFR_H.
- (pfr_service_bdf): Updated.
- (pfr_services): New services list.
- (pfr_get_service): New function.
- (pfr_driver_class): Updated.
-
- * src/winfonts/winfnt.c: Include FT_SERVICE_WINFNT_H and
- FT_SERVICE_XFREE86_NAME_H instead of FT_INTERNAL_FNT_TYPES_H.
- (winfnt_get_header, winfnt_get_service): New functions.
- (winfnt_service_rec): New structure providing WINFNT services.
- (winfnt_services): New services list.
- (winfnt_driver_class): Updated.
- * src/winfonts/winfnt.h: Add most of the removed fnttypes.h data.
-
- * src/sfnt/sfdriver.c (sfnt_service_ps_name): Fix typo.
-
- * src/type1/t1driver.c (t1_service_ps_name): Fix typo.
-
- * src/cff/cffobjs.c, src/cid/cidobjs.c, src/pfr/pfrsbit.c,
- src/psaux/psobjs.c, src/sfnt/sfobjs.c, src/truetype/ttobjs.c,
- src/type1/t1objs.c, src/type42/t42objs.c: Removing various compiler
- warnings.
-
-2003-09-19 David Bevan <dbevan@emtex.com>
-
- * src/type1/t1parse.c (pfb_tag_fields): Removed.
- (read_pfb_tag): Fix code so that it doesn't fail on end-of-file
- indicator (0x8003).
- * docs/CHANGES: Updated.
-
-2003-09-16 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/ftserv.h (FT_FACE_FIND_SERVICE,
- FT_FACE_LOOKUP_SERVICE): Add parameter to pass pointer type.
- Ugly, I know, but this is needed for compilation with C++ --
- maybe someone knows a better solution?
- Updated all callers.
-
- * src/base/ftobjs.c (FT_Get_Name_Index, FT_Get_Glyph_Name): Remove
- C++ compiler warnings.
-
- * src/base/ftbdf.c (FT_Get_BDF_Charset_ID, FT_Get_BDF_Property):
- Fix order of arguments passed to FT_FACE_FIND_SERVICE.
-
-2003-09-15 Werner Lemberg <wl@gnu.org>
-
- Avoid header files with identical names.
-
- * include/freetype/internal/services/bdf.h: Renamed to...
- * include/freetype/internal/services/svbdf.h: This.
- Add copyright notice.
- * include/freetype/internal/services/glyfdict.h: Renamed to...
- * include/freetype/internal/services/svgldict.h: This.
- Add copyright notice.
- * include/freetype/internal/services/multmast.h: Renamed to...
- * include/freetype/internal/services/svmm.h: This.
- Add copyright notice.
- Add FT_BEGIN_HEADER and FT_END_HEADER.
- * include/freetype/internal/services/sfnt.h: Renamed to...
- * include/freetype/internal/services/svsfnt.h: This.
- Add copyright notice.
- * include/freetype/internal/services/postname.h: Renamed to...
- * include/freetype/internal/services/svpostnm.h: This.
- Add copyright notice.
- * include/freetype/internal/services/xf86name.h: Renamed to...
- * include/freetype/internal/services/svxf86nm.h: This.
- Add copyright notice.
-
- * include/freetype/internal/ftserv.h: Add FT_BEGIN_HEADER and
- FT_END_HEADER.
- Add copyright notice.
- Update macro names of services header files.
-
- * builds/freetype.mk (SERVICES_DIR): New variable.
- (BASE_H): Add services header files.
-
-2003-09-11 Werner Lemberg <wl@gnu.org>
-
- * builds/toplevel.mk (distclean): Remove `builds/unix/freetype2.pc'.
-
- * src/cff/cffdrivr.c: Don't load headers twice.
-
- * include/freetype/internal/ftserv.h (FT_SERVICE_SFNT_H): New macro.
- * src/base/ftobjs.c: Include FT_SERVICE_SFNT_H.
-
- * src/cff/cffcmap.c: Include `cfferrs.h'.
- * src/pfr/pfrdrivr.c: Include `pfrerror.h'.
- * src/sfnt/sfdriver.c: Include `sferrors.h'.
- * src/psaux/psobjs.h: Add declaration for `ps_parser_to_bytes'.
-
-2003-09-11 David Turner <david@freetype.org>
-
- Introducing the concept of `module services'. This is the first
- step towards a massive simplification of the engine's internals, in
- order to get rid of various numbers of hacks.
-
- Note that these changes will break source & binary compatibility for
- authors of external font drivers.
-
- * include/freetype/config/ftconfig.h (FT_BEGIN_STMNT, FT_END_STMNT,
- FT_DUMMY_STMNT): New macros.
-
- * include/freetype/internal/ftserv.h: New file, containing the new
- structures and macros to provide `services'.
-
- * include/freetype/internal/internal.h (FT_INTERNAL_EXTENSION_H,
- FT_INTERNAL_EXTEND_H, FT_INTERNAL_HASH_H, FT_INTERNAL_OBJECT_H):
- Removed, obsolete.
- (FT_INTERNAL_SERVICE_H): New macro for `ftserv.h'.
-
- * include/freetype/internal/services/bdf.h,
- include/freetype/internal/services/glyfdict.h,
- include/freetype/internal/services/postname.h,
- include/freetype/internal/services/xf86name.h: New files.
-
- * include/freetype/ftmm.h (FT_Get_MM_Func, FT_Set_MM_Design_Func,
- FT_Set_MM_Blend_Func): Function pointers moved (in modified form)
- to...
- * include/freetype/internal/services/multmast.h: New file.
-
- * include/freetype/internal/sfnt.h (SFNT_Interface): `get_interface'
- is now of type `FT_Module_Requester'.
- (SFNT_Get_Interface_Func, SFNT_Load_Table_Func): Function pointers
- moved (in modified form) to...
- * include/freetype/internal/services/sfnt.h: New file.
-
- * include/freetype/tttables.h (FT_Get_Sfnt_Table_Func): Function
- pointer moved (in modified form) to `services/sfnt.h'.
-
- * include/freetype/ftmodule.h (FT_Module_Interface): Make it a
- a typedef to `FT_Pointer'.
-
- * include/freetype/internal/tttypes.h (TT_FaceRec): Add
- `postscript_name'.
- * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): Remove
- `postscript_name'.
- Add `services' element.
- (FT_LibraryRec): Remove `meta_class'.
-
- * src/base/ftbdf.c: Include FT_SERVICE_BDF_H.
- (test_font_type): Removed.
- (FT_Get_BDF_Charset_ID, FT_Get_BDF_Property): Use services
- provided in `FT_SERVICE_ID_BDF'.
-
- * src/base/ftmm.c: Include FT_SERVICE_MULTIPLE_MASTERS_H.
- (ft_face_get_mm_service): New auxiliary function to get services
- from `FT_SERVICE_ID_MULTI_MASTERS'.
- (FT_Get_Multi_Master, FT_Set_MM_Design_Coordinates,
- FT_Set_MM_Blend_Coordinates): Use `ft_face_get_mm_service'.
-
- * src/base/ftobjs.c: Include FT_SERVICE_POSTSCRIPT_NAME_H and
- FT_SERVICE_GLYPH_DICT_H.
- (ft_service_list_lookup): New function to get a specific service.
- (destroy_face): Updated.
- (Mac_Read_POST_Resource): Simplify some code.
- (IsMacResource): Fix warnings.
- (FT_Get_Name_Index, FT_Get_Glyph_Name): Use services provided in
- `FT_SERVICE_ID_GLYPH_DICT'.
- (FT_Get_Postscript_Name): Use service provided in
- `FT_SERVICE_ID_POSTSCRIPT_NAME'.
- (FT_Get_Sfnt_Table, FT_Load_Sfnt_Table): Use services provided in
- `FT_SERVICE_ID_SFNT_TABLE'.
-
- * src/base/ftxf86.c: Include FT_SERVICE_XFREE86_NAME_H.
- (FT_Get_X11_Font_Format): Use service provided in
- `FT_SERVICE_ID_XF86_NAME'.
-
- * src/bdf/bdfdrivr.c: Include FT_SERVICE_BDF_H and
- FT_SERVICE_XFREE86_NAME_H.
- (bdf_get_charset_id): New function.
- (bdf_service_bdf): New structure providing BDF services.
- (bdf_services): New services list.
- (bdf_driver_requester): Use `ft_service_list_lookup'.
-
- * src/cff/cffdrivr.c: Include FT_SERVICE_XFREE86_NAME_H and
- FT_SERVICE_GLYPH_DICT_H.
- (cff_service_glyph_dict): New structure providing CFF services.
- (cff_services): New services list.
- (cff_get_interface): Use `ft_service_list_lookup'.
-
- * src/cid/cidriver.c: Include FT_SERVICE_POSTSCRIPT_NAME_H and
- FT_SERVICE_XFREE86_NAME_H.
- (cid_service_ps_name): New structure providing CID services.
- (cid_services): New services list.
- (cid_get_interface): Use `ft_service_list_lookup'.
-
- * src/pcf/pcfdrivr.c: Include FT_SERVICE_BDF_H and
- FT_SERVICE_XFREE86_NAME_H.
- (pcf_service_bdf): New structure providing PCF services.
- (pcf_services): New services list.
- (pcf_driver_requester): Use `ft_service_list_lookup'.
-
- * src/sfnt/sfdriver.c: Include FT_SERVICE_GLYPH_DICT_H and
- FT_SERVICE_POSTSCRIPT_NAME_H.
- (get_sfnt_glyph_name): Renamed to...
- (sfnt_get_glyph_name): This.
- (get_sfnt_postscript_name): Renamed to...
- (sfnt_get_ps_name): This.
- Updated.
- (sfnt_service_glyph_dict, sfnt_service_ps_name): New structures
- providing services.
- (sfnt_services): New services list.
- (sfnt_get_interface): Use `ft_service_list_lookup'.
-
- * src/truetype/ttdriver.c: Include FT_SERVICE_XFREE86_NAME_H.
- (tt_services): New services list.
- (tt_get_interface): Use `ft_service_list_lookup'.
-
- * src/type1/t1driver.c: Include FT_SERVICE_MULTIPLE_MASTERS_H,
- FT_SERVICE_GLYPH_DICT_H, FT_SERVICE_XFREE86_NAME_H, and
- FT_SERVICE_POSTSCRIPT_NAME_H.
- (t1_service_glyph_dict, t1_service_ps_name,
- t1_service_multi_masters): New structures providing Type 1 services.
- (t1_services): New services list.
- (Get_Interface): Use `ft_service_list_lookup'.
-
- * src/type42/t42drivr.c: Include FT_SERVICE_XFREE86_NAME_H,
- FT_SERVICE_GLYPH_DICT_H, and FT_SERVICE_POSTSCRIPT_NAME_H.
- (t42_service_glyph_dict, t42_service_ps_name): New structures
- providing Type 42 services.
- (t42_services): New services list.
- (T42_Get_Interface): Use `ft_service_list_lookup'.
-
-
- * README, docs/CHANGES: Updating version numbers for 2.1.6, and
- removing obsolete warnings in the documentation.
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 6.
- * builds/unix/configure.ac (version_info): Set to 9:5:3.
- * builds/unix/configure: Regenerated.
-
- * include/freetype/internal/ftcore.h,
- include/freetype/internal/ftexcept.h,
- include/freetype/internal/fthash.h,
- include/freetype/internal/ftobject.h: Removed. Obsolete.
-
-2003-09-09 David Turner <david@freetype.org>
-
- Fixing PFR kerning support. The tables within the font file contain
- (charcode,charcode) kerning pairs, we need to convert them to
- (gindex,gindex).
-
- * src/base/ftpfr.c (ft_pfr_check): Fix serious typo.
- * src/pfr/pfrload.c: Remove dead code.
- (pfr_get_gindex, pfr_compare_kern_pairs, pfr_sort_kerning_pairs):
- New functions.
- (pfr_phy_font_done): Free `kern_pairs'.
- (pfr_phy_font_load): Call `pfr_sort_kerning_pairs'.
- * src/pfr/pfrobjs.c (pfr_face_get_kerning): Fix kerning extraction.
- * src/pfr/pfrtypes.h (PFR_KERN_PAIR_INDEX): New macro.
- (PFR_KernPairRec): Make `kerning' an FT_Int.
- (PFR_PhyFontRec): New element `kern_pairs'.
- (PFR_KernFlags): Values of PFR_KERN_2BYTE_CHAR and
- PFR_KERN_2BYTE_ADJ were erroneously reversed.
-
- * include/freetype/ftoption.h: Commenting out the macro
- TT_CONFIG_OPTION_BYTECODE_INTERPRETER.
-
-2003-09-02 David Turner <david@freetype.org>
-
-
- * Version 2.1.5 released.
- =========================
-
-
-2003-08-31 Manish Singh <yosh@gimp.org>
-
- * src/bdf/bdflib.c (_bdf_readstream): Don't use FT_MEM_COPY but
- FT_MEM_MOVE.
-
-2003-08-30 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/freetype.h (FT_ENCODING_SJIS, FT_ENCODING_GB2312,
- FT_ENCODING_BIG5, FT_ENCODING_WANSUNG, FT_ENCODING_JOHAB): New
- enumerations of FT_Encoding. The FT_ENCODING_MS_* variants except
- FT_ENCODING_MS_SYMBOL are now deprecated.
- Updated all users.
- * docs/CHANGES: Document it.
-
-2003-08-27 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Accept lowercase characters
- for spacing.
-
-2003-08-27 Mike FABIAN <mfabian@suse.de>
-
- * src/pcf/pcfread.c (pcf_load_font), src/bdf/bdfdrivr.c
- (BDF_Face_Init): Accept lowercase characters for slant and weight.
-
-2003-08-18 David Turner <david@freetype.org>
-
- * include/freetype/config/ftoption.h: Disabling TrueType bytecode
- interpreter until the UNPATENTED_HINTING works as advertised.
-
- * src/autohint/ahhint.c (ah_hinter_load_glyph): Use `|' for
- setting `load_flags'.
-
- * Jamfile: Adding the `refdoc' target to the Jamfile in order to
- build the API Reference in `docs/reference' automatically.
-
- * include/freetype/t1tables.h (PS_FontInfoRec), src/cid/cidtoken.h,
- src/type1/t1tokens.h, src/type42/t42parse.c: Resetting the types of
- `italic_angle', `underline_position', and `underline_thickness' to
- their previous values (i.e., long, short, and ushort) in order to
- avoid breaking binary compatibility.
-
- * include/freetype/ttunpat.h: Fixing documentation comment.
-
- * include/freetype/config/ftoption.h, devel/ftoption.h
- (TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING): Replaced with...
- (TT_CONFIG_OPTION_UNPATENTED_HINTING): This. Updated all users.
- (TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING): Removed.
-
- * include/freetype/internal/ftobjs.h (FT_DEBUG_HOOK_TYPE1): Removed.
- (FT_DEBUG_HOOK_UNPATENTED_HINTING): New macro. Use this with
- `FT_Set_Debug_Hook' to get the same effect as the removed
- TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING.
-
- * src/truetype/ttobjs.c (tt_face_init): Use
- `FT_DEBUG_HOOK_UNPATENTED_HINTING'.
-
-2003-08-06 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1gload.c (T1_Load_Glyph), src/cff/cffgload.c
- (cff_slot_load), src/cid/cidgload.c (cid_slot_load_glyph): Fix
- previous change.
-
-2003-08-05 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1gload.c (T1_Load_Glyph), src/cff/cffgload.c
- (cff_slot_load), src/cid/cidgload.c (cid_slot_load_glyph): Apply
- font matrix to advance width also.
- * docs/CHANGES: Updated.
-
-2003-07-26 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/configure.ac (version_info): Set to 9:4:3.
- * builds/unix/configure: Updated.
- * docs/CHANGES, docs/VERSION.DLL: Updated.
-
- * include/freetype/freetype.h (FT_GlyphSlot): Change 2003-06-16
- also breaks binary compatibility. Reintroduce an unsigned integer
- at the old position of `flags' called `reserved'.
-
-2003-07-25 Werner Lemberg <wl@gnu.org>
-
- Make API reference valid HTML 4.01 transitional.
-
- * src/tools/docmaker/tohtml.py (html_header_1): Add doctype
- and charset.
- (html_header_2): Fix style elements and add some more.
- Fix syntax.
- (block_header, block_footer, description_header, description_footer,
- marker_header, marker_footer, source_header, source_footer,
- chapter_header): Don't use <center>...</center> but `align=center'
- table attribute.
- (chapter_inter, chapter_footer): Add <li> and use special <ul>
- class.
- Use double quotes around table widths given in percent.
- (keyword_prefix, keyword_suffix): Don't change font colour directly
- but use a new <span> class.
- (section_synopsis_header, section_synopsis_footer): Don't change
- colour.
- (code_header, code_footer): Don't change font colour directly but
- use a special <pre> class.
- (print_html_field): <tr> gets the `valign' attribute, not <table>.
- (print_html_field_list): Ditto.
- (index_exit): Don't use <center>...</center> but `align=center'
- table attribute.
- (section_enter): Ditto.
- (toc_exit): Don't emit </table>.
- (block_enter): Use <h4><a>, not <a><h4>.
- (__init__): Fix tag order in self.html_footer.
-
-2003-07-25 David Turner <david@freetype.org>
-
- This change reimplements fix from 2003-05-30 without breaking
- binary compatibility.
-
- * include/freetype/t1tables.h (PS_FontInfoRec): `italic_angle',
- `is_fixed_pitch', `underline_position', `underline_thickness' are
- reverted to be normal values.
-
- * include/freetype/internal/psaux.h (T1_FieldType): Remove
- `T1_FIELD_TYPE_BOOL_P', `T1_FIELD_TYPE_INTEGER_P',
- `T1_FIELD_TYPE_FIXED_P', `T1_FIELD_TYPE_FIXED_1000_P'.
- (T1_FIELD_TYPE_BOOL_P, T1_FIELD_NUM_P, T1_FIELD_FIXED_P,
- T1_FIELD_FIXED_1000_P): Removed.
- (T1_FIELD_TYPE_BOOL): Renamed to...
- (T1_FIELD_BOOL): New macro. Updated all callers.
-
- * src/type42/t42parse.c: `italic_angle', `is_fixed_pitch',
- `underline_position', `underline_thickness', `paint_type',
- `stroke_width' are reverted to be normal values.
- (T42_KEYWORD_COUNT): New macro.
- (t42_parse_dict): New array `keyword_flags' to mark that a value has
- already been assigned to a dictionary entry.
- * src/type42/t42objs.c (T42_Face_Init, T42_Face_Done): Updated.
-
- * src/cid/cidtoken.h: `italic_angle', `is_fixed_pitch',
- `underline_position', `underline_thickness' are reverted to be
- normal values.
- * src/cid/cidobjs.c (cid_face_done, cid_face_init): Updated.
-
- * src/psaux/psobjs.c (ps_parser_load_field): Updated.
-
- * src/type1/t1tokens.h: `italic_angle', `is_fixed_pitch',
- `underline_position', `underline_thickness', `paint_type',
- `stroke_width' are reverted to be normal values.
- * src/type1/t1objs.c (T1_Face_Done, T1_Face_Init): Updated.
- * src/type1/t1load.c (T1_FIELD_COUNT): New macro.
- (parse_dict): Add parameter for keyword flags.
- Record only first instance of a field.
- (T1_Open_Face): New array `keyword_flags'.
-
-2003-07-24 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 5.
- * builds/unix/configure.ac (version_info): Set to 10:0:3.
- * builds/unix/configure: Updated.
- * builds/freetype.mk (refdoc): Fix --title.
-
- * docs/CHANGES, docs/VERSION.DLL, README: Updated.
-
- * src/tools/docmaker/sources.py (re_crossref): Fix regular
- expression to handle trailing punctuation characters.
- * src/tools/docmaker/tohtml.py (make_html_word): Updated.
-
- * docs/release: New file.
-
-2003-07-23 YAMANO-UCHI Hidetoshi <mer@din.or.jp>
-
- * include/freetype/internal/psaux.h (PS_Parser_FuncsRec): New
- member function `to_bytes'.
-
- * src/psaux/psauxmod.c (ps_parser_funcs): New member
- `ps_parser_to_bytes'.
- (psaux_module_class): Increase version to 0x20000L.
-
- * src/psaux/psobjs.c (IS_T1_LINESPACE): Add \f.
- (IS_T1_NULLSPACE): New macro.
- (IS_T1_SPACE): Add it.
- (skip_spaces, skip_alpha): New functions.
- (ps_parser_skip_spaces, ps_parser_skip_alpha): Use them.
- (ps_tobytes, ps_parser_to_bytes): New functions.
-
-2003-07-07 Werner Lemberg <wl@gnu.org>
-
- * builds/freetype.mk (DOC_DIR): New variable.
- (refdoc): Use *_DIR variables.
- (distclean): Remove documentation files.
-
- * builds/detect.mk (std_setup, dos_setup): Mention `make refdoc'.
-
- * configure: Set DOC_DIR variable.
-
-2003-07-07 Patrik Hägglund <patrik.hagglund@bredband.net>
-
- * builds/freetype.mk (refdoc): New target to build the
- documentation.
- (.PHONY): Updated.
-
- * include/freetype/freetype.h: Improve documentation of FT_CharMap.
- * include/freetype/ftimage,h: Fix documentation of FT_OUTLINE_FLAGS.
- * include/freetype/tttables.h: Document FT_Sfnt_Tag.
-
-2003-07-06 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init), src/pcf/pcfread.c
- (pcf_load_font): Fix computation of height if PIXEL_SIZE property is
- missing.
-
-2003-07-01 Werner Lemberg <wl@gnu.org>
-
- * src/cache/ftcsbits.c (ftc_sbit_node_compare): Only add `size' if
- there is no error. Reported by Knut St. Osmundsen
- <bird-freetype@anduin.net>.
-
-2003-06-30 Werner Lemberg <wl@gnu.org>
-
- A new try to synchronize bitmap font access.
-
- * include/freetype/freetype.h (FT_Bitmap_Size): `height' is now
- defined to return the baseline-to-baseline distance. This was
- already the value returned by the BDF and PCF drivers.
-
- The `width' field now gives the average width. I wasn't able to
- find something better. It should be taken as informative only.
-
- New fields `size', `x_ppem', and `y_ppem'.
-
- * src/pcf/pcfread.c (pcf_load_font): Updated to properly fill
- FT_Bitmap_Size.
- Do proper rounding and conversion from 72.27 to 72 points.
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Updated to properly fill
- FT_Bitmap_Size.
- Do proper rounding and conversion from 72.27 to 72 points.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Updated to properly fill
- FT_Bitmap_Size.
-
- * src/winfonts/winfnt.c (FNT_Face_Init): Updated to properly fill
- FT_Bitmap_Size.
-
-2003-06-29 Werner Lemberg <wl@gnu.org>
-
- Redesigning the FNT driver to return multiple faces, not multiple
- strikes. At least one font (app850.fon from WinME) contains
- different FNT charmaps for its subfonts. Consequently, the previous
- design of having multiple bitmap strikes in a single font face fails
- since we have only one charmap per face.
-
- * include/freetype/internal/fnttypes.h (FNT_Size_Rec): Removed.
- (FNT_FaceRec): Remove `num_fonts' field and replace `fonts' with
- `font'.
-
- * src/base/ftwinfnt.c (FT_Get_WinFNT_Header): Updated.
-
- * src/winfonts/winfnt.c (fnt_font_load): Don't set pixel_width equal
- to pixel_height.
- (fnt_face_done_fonts): Removed.
- (fnt_face_get_dll_fonts): Renamed to...
- (fnt_face_get_dll_font): This. Add second function argument to
- select face index.
- Updated to load just one subfont.
- (fnt_font_done, FNT_Face_Done): Updated.
- (FNT_Face_Init): Handle `face_index'.
- Updated.
- (FNT_Size_Set_Pixels): Simplified; similar to BDF and PCF, the
- bitmap width is now ignored.
- (FNT_Load_Glyph): Updated.
- Fix glyph index computation.
- (winfnt_driver_class): Updated.
-
-2003-06-25 Owen Taylor <otaylor@redhat.com>
-
- * src/sfnt/ttload.c (tt_face_load_hdmx): Don't assign
- num_records until we actually decide to load the table,
- otherwise, we'll segfault in tt_face_free_hdmx.
-
-2003-06-24 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffdrivr.c (cff_get_glyph_name): Protect against zero
- glyph name pointer. Reported by Mikey Anbary <manbary@vizrt.com>.
-
-2003-06-23 Werner Lemberg <wl@gnu.org>
-
- * src/tools/glnames.py: Updated to AGL 2.0.
- * src/psnames/pstables.h: Regenerated.
-
-2003-06-22 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/cache/ftcglyph.h, include/freetype/ttnameid.h,
- src/base/ftcalc.c, src/base/fttrigon.c, src/cff/cffgload.c,
- src/otlayout/otlgsub.c, src/pshinter/pshrec.c,
- src/psnames/psmodule.c, src/sfnt/sfobjs.c, src/truetype/ttdriver.c:
- Decorate constants with `U' and `L' if appropriate.
-
- * include/freetype/ftmoderr.h: Updated to include recent module
- additions.
-
- * src/pshinter/pshnterr.h (FT_ERR_BASE): Define as
- `FT_Mod_Err_PShinter'.
- * src/type42/t42error.h (FT_ERR_BASE): Define as
- `FT_Mod_Err_Type42'.
-
- * src/pshinter/pshrec.h (PS_HINTS_MAGIC): Removed. Not used.
-
- * include/freetype/config/ftconfig.h [__MWERKS__]: Define FT_LONG64
- and FT_INT64.
-
-2003-06-21 Werner Lemberg <wl@gnu.org>
-
- * src/winfonts/winfnt.c (FNT_Load_Glyph): Use first_char in
- computation of glyph_index.
- (FNT_Size_Set_Pixels): To find a strike, first check pixel_height
- only, then try to find a better hit by comparing pixel_width also.
- Without this fix it isn't possible to access all strikes.
- Also compute metrics.max_advance to be in sync with other bitmap
- drivers.
-
- * src/base/ftobjs.c (FT_Set_Char_Size): Remove redundant code.
- (FT_Set_Pixel_Sizes): Assign value to `metrics' after validation of
- arguments.
-
-2003-06-20 Werner Lemberg <wl@gnu.org>
-
- Synchronize computation of height and width for bitmap strikes. The
- `width' field in the FT_Bitmap_Size structure is now only useful to
- enumerate different strikes. The `max_advance' field of the
- FT_Size_Metrics structure should be used to get the (maximum) width
- of a strike.
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Don't use AVERAGE_WIDTH for
- computing `available_sizes->width' but make it always equal to
- `available_sizes->height'.
-
- * src/pcf/pcfread.c (pcf_load_font): Don't use RESOLUTION_X for
- computing `available_sizes->width' but make it always equal to
- `available_sizes->height'.
-
- * src/truetype/ttdriver.c (Set_Pixel_Sizes): Pass only single
- argument to function.
-
- * src/psnames/psmodule.c (ps_unicode_value): Handle `.' after
- `uniXXXX' and `uXXXX[X[X]]'.
-
-2003-06-19 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdfdrivr.c: s/FT_Err_/BDF_Err/.
- * src/cache/ftccache.c, src/cache/ftcsbits.c, src/cache/ftlru.c:
- s/FT_Err_/FTC_Err_/.
- * src/cff/cffcmap.c: s/FT_Err_/CFF_Err_/.
- * src/pcf/pcfdrivr.c: s/FT_Err_/PCF_Err_/.
- * src/psaux/t1cmap.c: Include psauxerr.h.
- s/FT_Err_/PSaux_Err_/.
- * src/pshinter/pshnterr.h: New file.
- * src/pshinter/rules.mk: Updated.
- * src/pshinter/pshalgo.c, src/pshinter/pshrec.c: Include pshnterr.h.
- s/FT_Err_/PSH_Err_/.
- * src/pfr/pfrdrivr.c, src/pfr/pfrobjs.c, src/pfr/pfrsbit.c:
- s/FT_Err_/PFR_Err_/.
- * src/sfnt/sfdriver.c, src/sfnt/sfobjs.c, src/sfnt/ttcmap0.c,
- src/sfnt/ttload.c: s/FT_Err_/SFNT_Err_/.
- * src/truetype/ttgload.c: s/FT_Err_/TT_Err_/.
- * src/gzip/ftgzip.c: Load FT_MODULE_ERRORS_H and define
- FT_ERR_PREFIX and FT_ERR_BASE.
- s/FT_Err_/Gzip_Err_/.
-
-2003-06-19 Dirck Blaskey <listtarget@danbala.com>
-
- * src/cff/cffload (cff_encoding_load): `nleft' must be FT_UInt,
- otherwise adding 1 might wrap the result.
-
-2003-06-18 Werner Lemberg <wl@gnu.org>
-
- * src/psnames/psmodule.c (ps_unicode_value): Add support to
- recognize `uXXXX[X[X]]' glyph names.
- Don't handle glyph names starting with `uni' which have more than
- four digits.
-
-2003-06-16 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/freetype.h (FT_Open_Flags): Replaced with
- #defines for the constants.
- (FT_Open_Args): Change type of `flags' to FT_UInt.
- (FT_GlyphSlot): Move `flags' to FT_Slot_Internal.
-
- * include/freetype/ftimage.h (FT_Outline_Flags, FT_Raster_Flag):
- Replaced with #defines for the constants.
-
- * include/freetype/internal/ftobjs.h (FT_Slot_Internal): New
- field `flags' (from FT_GlyphSlot).
- Updated all affected source files.
- (FT_GLYPH_OWN_BITMAP): New macro (from ftgloadr.h).
-
- * include/freetype/internal/ftgloadr.h (FT_GLYPH_OWN_BITMAP): Moved
- to ftobjs.h.
-
- * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Use dummy
- FT_GlyphSlot_Internal object.
-
-2003-06-15 Werner Lemberg <wl@gnu.org>
-
- * builds/compiler/gcc.mk, builds/compiler/gcc-dev.mk (CFLAGS):
- Add -fno-strict-aliasing to get rid of zillion warnings from gcc
- version 3.3.
-
-2003-06-14 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftglyph.h (ft_glyph_bbox_unscaled,
- ft_glyph_bbox_subpixels, ft_glyph_bbox_gridfit,
- ft_glyph_bbox_truncate, ft_glyph_bbox_pixels): Replaced with
- FT_GLYPH_BBOX_UNSCALED, FT_GLYPH_BBOX_SUBPIXELS,
- FT_GLYPH_BBOX_GRIDFIT, FT_GLYPH_BBOX_TRUNCATE, FT_GLYPH_BBOX_PIXELS.
- The lowercase variants are now (deprecated aliases) to the uppercase
- versions.
- Updated all other files.
-
- * include/freetype/ftmodule.h (ft_module_font_driver,
- ft_module_renderer, ft_module_hinter, ft_module_styler,
- ft_module_driver_scalable, ft_module_driver_no_outlines,
- ft_module_driver_has_hinter): Replaced with FT_MODULE_FONT_DRIVER,
- FT_MODULE_RENDERER, FT_MODULE_HINTER, FT_MODULE_STYLER,
- FT_MODULE_DRIVER_SCALABLE, FT_MODULE_DRIVER_NO_OUTLINES,
- FT_MODULE_DRIVER_HAS_HINTER.
- The lowercase variants are now (deprecated aliases) to the uppercase
- versions.
- Updated all other files.
-
- * src/base/ftglyph.c (FT_Glyph_Get_CBox): Handle bbox_mode better
- as enumeration.
-
- * src/pcf/pcfdrivr.c (pcf_driver_class), src/winfonts/winfnt.c
- (winfnt_driver_class), src/bdf/bdfdrivr.c (bdf_driver_class): Add
- the FT_MODULE_DRIVER_NO_OUTLINES flag.
-
-2003-06-13 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * src/pfr/pfrobjs.c (pfr_slot_load): Apply font matrix.
-
-2003-06-13 Werner Lemberg <wl@gnu.org>
-
- * builds/dos/detect.mk: Test not only for `Dos' but for `DOS' also.
-
- * builds/dos/dos-emx.mk, builds/compiler/emx.mk: New files for
- EMX gcc compiler.
- * builds/dos/detect.mk: Add target `emx'.
-
- * builds/compiler/watcom.mk (LINK_LIBRARY): GNU Make for DOS doesn't
- like a trailing semicolon; add a dummy command.
-
- * src/cid/cidload.c: Remove parse_font_bbox code (already enclosed
- with #if 0 ... #endif).
-
- * src/type1/t1tokens.h: Handle /FontName.
- * src/type1/t1load.c (parse_font_name): Removed.
- Remove parse_font_bbox code (already enclosed with #if 0 ...
- #endif).
-
- * src/type42/t42parse.c (t42_parse_font_name): Removed.
- Remove t42_parse_font_bbox code (already enclosed with #if 0 ...
- #endif).
- (t42_keywords): Handle /FontName with T1_FIELD_KEY.
-
-2003-06-12 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/psaux.h (T1_FieldType): Add
- T1_FIELD_TYPE_KEY.
- (T1_FIELD_KEY): New macro.
- * src/psaux/psobjs.c (ps_parser_load_field): Handle
- T1_FIELD_TYPE_KEY.
-
- * src/cid/cidtoken.h: Use T1_FIELD_KEY for /CIDFontName.
-
-2003-06-11 Alexander Malmberg <alexander@malmberg.org>
-
- * src/cache/ftlru.c (FT_LruList_Remove_Selection): Decrease
- number of nodes.
- (FT_LruList_Lookup): Fix assertion for out-of-memory case.
-
-2003-06-11 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidload.c (cid_decrypt): Removed.
- (cid_read_subrs): Use t1_decrypt from psaux module.
- * src/cid/cidload.h: Updated.
- * src/cid/cidgload.c (cid_load_glyph): Use t1_decrypt from psaux
- module.
-
-2003-06-10 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidobjs.c: Apply change 2003-05-31 from <Ron.Dev@gmx.de>.
- Compute style flags.
- Fix computation of root->height.
- * src/cid/cidtoken.h: Handle FontBBox.
- * src/cid/cidload.c (cid_load_keyword): Handle
- T1_FIELD_LOCATION_BBOX.
- (parse_font_bbox): Commented out.
- (cid_field_records): Comment out element for parsing FontBBox.
-
- * src/type42/t42parse.c (t42_parse_font_bbox): Commented out.
- (t42_keywords): Handle FontBBox with T1_FIELD_BBOX, not with
- T1_FIELD_CALLBACK.
- (t42_parse_font_bbox): Commented out.
- (t42_load_keyword): Handle T1_FIELD_LOCATION_BBOX.
- * src/type42/t42objs.c (T42_Face_Init): Apply change 2003-05-31
- from <Ron.Dev@gmx.de>.
-
-2003-06-09 George Williams <gww@silcom.com>
-
- * src/truetype/ttinterp.c (SetSuperRound) <0x30>: Follow Apple's
- TrueType specification.
- (Ins_MDRP, Ins_MIRP): Fix single width cut-in test.
-
-2003-06-09 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * src/gzip/ftgzip.c: (inflate_mask): Replaced with...
- (NO_INFLATE_MASK): This.
- * src/gzip/infutil.h: Declare `inflate_mask' conditionally by
- NO_INFLATE_MASK.
-
-2003-06-09 Alexis S. L. Carvalho <alexis@cecm.usp.br>
-
- * src/gzip/ftgzip.c (ft_gzip_file_fill_output): Handle Z_STREAM_END
- correctly.
-
-2003-06-09 Wolfgang Domröse <porthos.domroese@harz.de>
-
- * src/pshinter/pshglob.c (psh_globals_new): Change calculation of
- dim->stdw.count to avoid compiler problem.
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Move the block
- variables to the beginning of the function to avoid compiler
- problems.
- Add casts necessary for 16bit compilers.
-
-2003-06-09 Werner Lemberg <wl@gnu.org>
-
- * src/pfr/rules.mk (PFR_DRV_SRC): Add pfrsbit.c.
- (PFR_DRV_H): Add pfrtypes.h.
-
- * include/freetype/config/ftconfig.h: s/__MWKS__/__MWERKS__/.
-
-2003-06-08 Karl Schultz <kschultz@rsinc.com>
-
- * src/pfr/pfrsbit.c (pfr_bitwriter_init): Change type of third
- argument to FT_Bool.
- (pfr_lookup_bitmap_data): Change type of third and fourth argument
- to FT_UInt. Updated caller.
- (pfr_load_bitmap_bits): Change type of fourth argument to FT_Bool.
-
-2003-06-08 Werner Lemberg <wl@gnu.org>
-
- Completely revised FreeType's make management.
-
- . In all makefiles `/' is used as the path separator. The
- conversion to the real path separators is done as late as
- possible using $(subst ...).
-
- . $(HOSTSEP) no longer exists. Now, $(SEP) gives the path separator
- for the operating system, and the new $(COMPILER_SEP) the path
- separator for the compiler tools.
-
- . $(BUILD) has been renamed to $(BUILD_DIR). In general, all
- directory variables end with `_DIR'. The variants ending in `_'
- (like `BASE_' have been removed).
-
- The following ChangeLog entries only describe changes which are
- not related to the redesign.
-
- * builds/beos/beos-def.mk (BUILD_DIR): Fix typo.
- * builds/compiler/watcom.mk (LINK_LIBRARY): Fix linker call to avoid
- overlong arguments as suggested by J. Ali Harlow
- <ali@avrc.city.ac.uk>.
- * builds/dos/dos-wat.mk: New file.
- * builds/freetype.mk (FREETYPE_H): Include header files from the
- `devel' subdirectory.
-
- * builds/os2/os2-dev.mk, builds/unix/unixddef.mk,
- builds/unix/unixddef.mk, builds/win32/w32-bccd.mk,
- builds/win32/w32-dev.mk (BUILD_DIR): Fix path.
-
- * builds/unix/configure.ac, builds/unix/configure: Updated.
- * builds/unix/unix-def.in (DISTCLEAN): Add `freetype2.pc'.
-
-2003-06-07 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftmac.c (FT_New_Face_From_SFNT): s/rlen/sfnt_size/ to
- make it compile.
-
- * devel/ftoption.h: Updated.
-
-2003-06-07 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * include/freetype/internal/psaux.h, src/truetype/ttgload.h:
- s/index/idx/ to fix compiler warnings.
-
- * src/sfnt/ttcmap0.c (tt_face_build_cmaps): Use more `volatile' to
- fix compiler warning.
-
- * src/gzip/ftgzip.c (BUILDFIXED): Removed.
- * src/gzip/inftrees.c (inflate_trees_fixed) [!BUILDFIXED]: Use
- FT_UNUSED to remove compiler warning.
-
-2003-06-06 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftstroker.h: Renamed to...
- * include/freetype/ftstroke.h: This.
-
- * src/base/ftstroker.c: Renamed to...
- * src/base/ftstroke.c: This.
-
- * include/freetype/config/ftheader.h (FT_STROKER_H): Updated.
-
- * src/base/descrip.mms, src/base/Jamfile, src/base/rules.mk:
- Updated.
-
- * src/pcf/pcfdriver.c: Renamed to...
- * src/pcf/pcfdrivr.c: This.
- * src/pcf/pcfdriver.h: Renamed to...
- * src/pcf/pcfdrivr.h: This.
-
- * src/pcf/Jamfile, src/pcf/rules.mk: Updated.
-
-2003-06-05 Wenlin Institute (Tom Bishop) <wenlin@wenlin.com>
-
- * src/base/ftmac.c (file_spec_from_path) [TARGET_API_MAC_CARBON]:
- Add `#if !defined(__MWERKS__)'.
-
-2003-06-05 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/psaux.h (T1_FieldType): Add
- T1_FIELD_TYPE_FIXED_1000 and T1_FIELD_TYPE_FIXED_1000_P.
- (T1_FIELD_FIXED_1000, T1_FIELD_FIXED_1000_P): New macros.
- * src/psaux/psobjs.c (ps_parser_load_field): Handle
- T1_FIELD_TYPE_FIXED_1000 and T1_FIELD_TYPE_FIXED_1000_P.
-
- * src/cff/cffparse.c (cff_kind_fixed_thousand): New enumeration.
- (CFF_FIELD_FIXED_1000): New macro.
- (cff_parser_run): Handle cff_kind_fixed_thousand.
- * src/cff/cfftoken.h: Use CFF_FIELD_FIXED_1000 for blue_scale.
- * src/cff/cffload (cff_subfont_load): Fix default values of
- expansion_factor and blue_scale.
-
- * src/cid/cidtoken.h, src/type1/t1tokens.h: Use T1_FIELD_FIXED_1000
- for blue_scale.
-
- * src/pshinter/pshglob.c (psh_globals_new): Fix default value of
- blue_scale.
-
-2003-06-04 Wolfgang Domröse <porthos.domroese@harz.de>
-
- * include/freetype/internal/ftdriver.h,
- include/freetype/internal/ftobjs.h,
- include/freetype/internal/psaux.h, src/cid/cidgload.c,
- src/psaux/psobjs.c, src/psaux/t1decode.c, src/psaux/psobjs.h,
- src/pshinter/pshrec.c, src/pshinter/pshalgo.c,
- src/psnames/psmodule.c, src/raster/ftraster.c, src/sfnt/sfobjs.c,
- src/smooth/ftgrays.c, src/smooth/ftsmooth.c, src/truetype/ttobjs.c,
- src/truetype/ttdriver.c, src/truetype/ttgload.c, src/type1/t1afm.c,
- src/type1/t1gload.c, src/type1/t1gload.h, src/type1/t1load.c,
- src/type1/t1objs.c, src/type42/t42parse.c, src/type42/t42parse.h:
- Many casts and slight argument type changes to make it work with
- a 16bit compiler.
-
-2003-06-04 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/config/ftoption.h: Defining
- TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING by default is a bad idea
- since some fonts (e.g. Arial) produce worse results than without
- hinting. Reverted.
-
-2003-06-04 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (load_truetype_glyph)
- [TT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Call
- FT_GlyphLoader_CheckPoints before adding phantom points. This fixes
- a segfault bug with fonts (e.g. htst3.ttf) which have nested
- subglyphs more than one level deep. Reported by Anthony Fok.
-
- * include/freetype/config/ftoption.h: Define
- TT_CONFIG_OPTION_BYTECODE_INTERPRETER,
- TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING, and
- TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING to make it the new
- default.
-
-2003-06-03 Werner Lemberg <wl@gnu.org>
-
- * src/autohint/ahhint.c (ah_hinter_hint_edges): Removed. Just a
- wrapper for ah_hint_edges.
- (ah_hint_edges): Renamed to...
- (ah_hinter_hint_edges): This.
-
- * src/base/ftobjs.c (FT_Set_Hint_Flags): Removed. Unused.
-
- * include/freetype/internal/ftobjs.h (FT_Face_InternalRec),
- include/freetype/internal/psaux.h (T1_DecoderRec),
- src/cff/cffgload.h (CFF_Builder): Remove `hint_flags' field.
- Unused.
-
- * src/cff/cffgload.c (cff_builder_init): Updated.
- (cff_decoder_parse_charstrings) <cff_op_endchar>: Call hinter->apply
- with decoder->hint_mode instead of builder->hint_flags.
- * src/psaux/t1decode.c (t1_decoder_init): Updated.
-
- * src/base/ftstroker.c (ft_stroke_border_export): s/index/idx/.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Commented out code which
- increased root->height by 15% if the line gap was zero. There exist
- fonts (containing e.g. form drawing characters) which intentionally
- have a zero line gap value.
-
- * src/truetype/ttinterp.c (Free_Project, CUR_Func_freeProj):
- Removed. Unused.
- Updated all callers.
-
-2003-06-02 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffobjs.c (cff_face_init): Use symbolic names for
- Adobe specific encoding IDs (there was a wrong EID value for custom
- encoding).
-
- * src/cff/cffcmap.h (CFF_CMapStdRec): Remove `count'.
- * src/cff/cffcmap.c (cff_cmap_encoding_init,
- cff_cmap_encoding_done): Updated.
- (cff_cmap_encoding_char_index, cff_cmap_encoding_char_next): Use
- 256 as limit for character code.
-
-2003-06-01 Werner Lemberg <wl@gnu.org>
-
- * src/winfonts/winfnt.c (FNT_Load_Glyph): Revert change from
- 2003-03-20.
-
-2003-05-31 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/fttrigon.h (FT_Vector_Normalize): Removed.
-
-2003-05-31 <Ron.Dev@gmx.de>
-
- * src/type1/t1objs.c (T1_Face_Init): Improve algorithm for guessing
- the font style by ignoring spaces and hyphens.
-
- * builds/unix/freetype2.in: Fix `Version' field.
-
-2003-05-30 Werner Lemberg <wl@gnu.org>
-
- Avoid overwriting of numeric font dictionary entries for synthetic
- fonts. Additionally, some entries were handled as `integer' instead
- of `number'.
-
- * include/freetype/internal/psaux.h (T1_FieldType): Add
- T1_FIELD_TYPE_BOOL_P, T1_FIELD_TYPE_INTEGER_P, and
- T1_FIELD_TYPE_FIXED_P.
- (T1_FIELD_BOOL_P, T1_FIELD_NUM_P, T1_FIELD_FIXED_P): New macros.
- * src/psaux/psobjs.c (ps_parser_load_field): Handle new field types.
-
- * include/freetype/internal/cfftypes.h (CFF_FontRecDict),
- src/cff/cfftoken.h: Change type of underline_position and
- underline_thickness to FT_Fixed.
- * src/cff/cffload.c (cff_subfont_load): Fix default values of
- underline_position and underline_thickness.
- * src/cff/cffobjs.c (cff_face_init): Set underline_position
- and underline_thickness in `root'.
-
- * include/freetype/internal/t1types.h (T1_Font): Change point_type
- and stroke_width to pointers.
- * include/freetype/t1tables.h (PS_FontInfo): Change italic_angle,
- is_fixed_pitch, underline_position, and underline_thickness to
- pointers.
- * src/type1/t1tokens.h: Change italic_angle, is_fixed_pitch,
- underline_position, and underline_thickness to pointers. Change
- the type of the latter two to `fixed'.
- Change type of stroke_width to `fixed' and make it a pointer.
- Change paint_type to pointer.
- * src/type1/t1objs.c (T1_Face_Done): Updated.
- (T1_Face_Init): Updated.
- Fix assignment of underline_position and underline_thickness.
-
- * src/cid/cidtoken.h: Change italic_angle, is_fixed_pitch,
- underline_position, and underline_thickness to pointers. Change
- the type of the latter two to `fixed'.
- Change type of stroke_width to `fixed'.
- * src/cid/cidobjs.c (cid_face_done): Updated.
- (cid_face_init): Updated.
- Fix assignment of underline_position and underline_thickness.
-
- * src/type42/t42parse.c: Change italic_angle, is_fixed_pitch,
- underline_position, and underline_thickness to pointers. Change the
- type of the latter two to `fixed'.
- Change type of stroke_width to `fixed' and make it a pointer.
- Change paint_type to pointer.
- * src/type42/t42objs.c (T42_Face_Init): Updated.
- Fix assignment of underline_position and underline_thickness.
- (T42_Face_Done): Updated.
-
- * src/base/ftobjs.c (open_face_from_buffer): Fix compiler warning.
- * src/pshinter/pshglob.c, src/pshinter/pshglob.h
- (psh_globals_set_scale): Make it a local function.
-
- * test/gview.c: Fix renaming ps3->ps typo.
- Formatting.
-
-2003-05-29 Werner Lemberg <wl@gnu.org>
-
- * src/pshinter/pshalgo1.[ch], src/pshinter/pshalgo2.[ch]: Removed.
- * src/pshinter/pshalgo.h: Removed.
-
- * src/pshinter/pshalgo3.[ch]: Renamed to...
- * src/pshinter/pshalgo.[ch]: New files.
- s/PSH3/PSH/.
- s/psh3/psh/.
- s/ps3/ps/.
-
- * src/pshinter/pshrec.c, src/pshinter/pshinter.c: Updated.
- * src/pshinter/rules.mk, src/pshinter/Jamfile: Updated.
-
- * src/pshinter/pshglob.[ch] (psh_dimension_snap_width): Commented
- out.
-
- * tests/gview.c: Remove code for pshalgo1 and pshalgo2.
- Updated.
-
-2003-05-28 Martin Zinser <zinser@decus.de>
-
- * vms_make.com: Reworked support for shareable images on VMS. The
- first version was kind of a hack; the current implementation of the
- procedure to extract the required symbols is much cleaner.
-
- Reworked creation of MMS files, avoiding a number of temporary files
- which were created in the previous version.
-
- Further work on creating descrip.mms files on the fly.
-
- * builds/vms/descrip.mms, src/autohint/descrip.mms,
- src/type1/descrip.mms: Removed.
-
-2003-05-28 Werner Lemberg <wl@gnu.org>
-
- * src/pshinter/pshalgo3.c (psh3_glyph_compute_extrema): Skip
- contours with only a single point to avoid segfault.
-
- * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Activate code for
- handling `origin'.
-
-2003-05-24 Werner Lemberg <wl@gnu.org>
-
- * src/autohint/ahtypes.h (AH_OPTION_NO_STRONG_INTERPOLATION):
- Removed since unused.
-
-2003-05-21 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/config/ftstdlib.h (ft_strcat): New wrapper macro
- for strcat.
-
- * src/base/ftmac.c (create_lwfn_name): s/isupper/ft_isupper/.
- (parse_font): s/memcpy/ft_memcpy/.
- (is_dfont) [TARGET_API_MAC_CARBON]: s/memcmp/ft_memcmp/.
- * src/base/ftobjs.c (load_mac_face) [FT_MACINTOSH]:
- s/strlen/ft_strlen/.
- s/strcat/ft_strcat/.
- s/strcpy/ft_strcpy/.
- * src/gzip/zutil.h: s/memset/ft_memset/.
- s/memcmp/ft_memcmp/.
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init), src/pcf/pcfdriver.c
- (PCF_Face_Init): Test for charset registry case-insensitively.
-
- * src/gzip/ftgzip.c (ft_gzip_file_io): Revert change from yesterday;
- it has already been fixed differently.
-
- * src/truetype/ttinterp.c (DO_SFVTL): Add missing braces around
- if-clause.
-
-2003-05-21 Martin Zinser <zinser@decus.de>
-
- * t1load.c (parse_blend_axis_types): Fix compiler warning.
-
- * descrip.mms: Removed. Now created by...
-
- * vms_make.com: New file.
-
-2003-05-21 Weiqi Gao <weiqigao@networkusa.net>
-
- * src/gzip/ftgzip.c (ft_gzip_file_io): Avoid zero value of `delta'
- to prevent infinite loop.
-
-2003-05-21 Lars Clausen <lrclause@cs.uiuc.edu>
-
- * docs/VERSION.DLL: Provide better autoconf snippet to check
- FreeType version.
-
-2003-05-21 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (open_face): Free `internal' not
- `face->internal' in case of error to avoid possible segfault.
-
- * src/pshinter/pshalgo3.c (ps3_hints_apply): Check whether we
- actually have an outline.
-
-2003-05-20 David Chester <davidchester@qmx.net>
-
- * src/pshinter/pshalgo3.c (ps3_hints_apply): Try to optimize
- y_scale so that the top of non-capital letters is aligned on a pixel
- boundary whenever possible.
-
- * src/autohint/ahhint.c (ah_hint_edges): Make sure that lowercase
- m's maintain their symmetry.
-
-2003-05-20 Werner Lemberg <wl@gnu.org>
-
- * src/autohint/ahhint.c (ah_hinter_load_glyph): Oops! David's
- patch from yesterday has been resolved already in a different
- way. Reverted.
-
-2003-05-19 David Chester <davidchester@qmx.net>
-
- * src/autohint/ahhint.c (ah_hinter_load_glyph): Don't scale
- y_scale locally but face->size->metrics.y_scale.
-
-2003-05-19 David Turner <david@freetype.org>
-
- * src/sfnt/ttcmap0.c (tt_cmap4_char_next): Select proper start
- value for `hi' to avoid infinite loop.
-
-2003-05-18 Yong Sun <sunyong@njstar.com>
-
- * src/raster/ftraster.c (Insert_Y_Turn): Fix overflow test.
-
-2003-05-18 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/config/ftoption.h [FT_CONFIG_OPTION_MAC_FONTS]:
- New macro.
- * src/base/ftobjs.c: Use it to control mac font support on non-mac
- platforms.
-
-2003-05-17 George Williams <gww@silcom.com>
-
- Implement partial support of Mac fonts on non-Mac platforms.
-
- * src/base/ftobjs.c (memory_stream_close, new_memory_stream,
- open_face_from_buffer, Mac_Read_POST_Resource,
- Mac_Read_sfnt_Resource, IsMacResource, IsMacBinary, load_mac_face)
- [!FT_MACINTOSH]: New functions.
- (FT_Open_Face) [!FT_MACINTOSH]: Use load_mac_face.
-
-2003-05-17 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_Load_Glyph): Scale linear advance width only
- if FT_FACE_FLAG_SCALABLE is set (otherwise we have a division by
- zero since FNT and friends don't define `face->units_per_EM').
-
-2003-05-15 David Turner <david@freetype.org>
-
- * src/base/fttrigon.c (FT_Vector_Rotate): Avoid rounding errors
- for small values.
-
-2003-05-15 Werner Lemberg <wl@gnu.org>
-
- * src/autohint/ahtypes.h (AH_PointRec): Remove unused `in_angle'
- and `out_angle' fields.
-
-2003-05-14 George Williams <gww@silcom.com>
-
- * src/base/ftmac.c (FT_New_Face_From_SFNT): Handle CFF files also.
-
-2003-05-14 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/freetype.h: Fix typo in comment
- (FT_HAS_FIXED_SIZES).
-
-2003-05-10 Dan Williams <dan@bigw.org>
-
- * builds/unix/aclocal.m4: Comment out definition of
- `allow_undefined_flag' for Darwin 1.3.
- * builds/unix/configure.ac: Add option --with-old-mac-fonts.
- * builds/unix/ltmain.sh: Fix version numbering for Darwin 1.3.
- * builds/unix/configure: Regenerated.
-
- * include/freetype/config/ftconfig.h: Fix conditions for defining
- `FT_MACINTOSH'.
- * src/base/ftbase.c: Include `ftmac.c' conditionally.
- * src/base/ftmac.c: Handle __GNUC__.
-
-2003-05-07 YAMANO-UCHI Hidetoshi <mer@din.or.jp>
-
- * src/cid/cidload.c (is_alpha): Removed.
- (cid_parse_dict): Use `cid_parser_skip_alpha' instead of `is_alpha'.
-
-2003-05-07 Werner Lemberg <wl@gnu.org>
-
- * src/autohint/ahoptim.c, src/autohint/ahoptim.h: Obsolete, removed.
-
-2003-05-07 David Turner <david@freetype.org>
-
- * src/autohint/ahglyph.c (ah_setup_uv): Exchange `for' loop and
- `switch' statement to make it run faster.
- (ah_outline_compute_segments): Reset `segment->score' and
- `segment->link'.
- (ah_outline_link_segments): Provide alternative code which does
- the same but runs much faster.
- Handle major direction also.
- (ah_outline_compute_edges): Scale `edge_distance_threshold' down
- after rounding instead of scaling comparison value in loop.
-
- * src/autohint/ahhint.c (ah_hinter_align_strong_points): Provide
- alternative code which runs faster.
- Handle `before->scale == 0'.
-
- * src/autohint/ahtypes.h (AH_SegmentRec): Move some fields down.
- (AH_EdgeRec): Move some fields in structure.
- New field `scale'.
-
- * src/sfnt/ttcmap0.c (tt_cmap4_char_next): Use binary search.
-
-2003-05-02 Werner Lemberg <wl@gnu.org>
-
- * src/autohint/ahoptim.c (LOG): Renamed to...
- (AH_OPTIM_LOG): This.
- (AH_Dump_Springs): Fix log message format.
-
- * src/autohint/ahhint.c (ah_hint_edges_3): Renamed to...
- (ah_hint_edges): This.
-
-2002-05-02 Keith Packard <keithp@keithp.com>
-
- * src/bdf/bdfdrivr.c (BDF_Set_Pixel_Size): Initialize `max_advance'.
-
-2003-05-01 Werner Lemberg <wl@gnu.org>
-
- * src/autohint/ahglyph.c (ah_test_extrema): Renamed to...
- (ah_test_extremum): This.
-
-2003-04-28 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/configure.ac: Generate `freetype.pc' from
- `freetype.in'.
- * builds/unix/configure: Regenerated.
- * builds/unix/install.mk (install, uninstall): Handle `freetype.pc'.
-
-2003-04-28 Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
-
- * builds/unix/freetype2.in: New file. Contains building information
- for the `pkg-config' package.
-
-2003-04-28 David Turner <david@freetype.org>
-
- * src/base/ftobjs.c (FT_Load_Glyph): Fix boundary check for
- `glyph_index'.
-
-2003-04-25: Graham Asher <graham.asher@btinternet.com>
-
- Added the optional unpatented hinting system for TrueType. It
- allows typefaces which need hinting to produce correct glyph forms
- (e.g., Chinese typefaces from Dynalab) to work acceptably without
- infringing Apple patents. This system is compiled only if
- TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING is defined in
- ftoption.h.
-
- * include/freetype/ttunpat.h: New file. Defines
- FT_PARAM_TAG_UNPATENTED_HINTING.
-
- * include/freetype/config/ftheader.h (FT_TRUETYPE_UNPATENTED_H): New
- macro to use when including ttunpat.h.
-
- * include/freetype/config/ftoption.h
- (TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING,
- TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING): New configuration macros
- (not defined, but in comments) for the unpatented hinting system.
-
- * include/freetype/internal/tttypes.h (TT_FaceRec)
- [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: New element `FT_Bool
- unpatented_hinting'.
-
- * src/truetype/ttinterp.c (NO_APPLE_PATENT, APPLE_THRESHOLD):
- Removed.
- (GUESS_VECTOR): New macro.
- (TT_Run_Context) [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]:
- Set `both_x_axis'.
- (tt_default_graphics_state)
- [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Updated.
- (Current_Ratio) [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]:
- Handle `unpatented_hinting'.
- (Direct_Move) [NO_APPLE_PATENT]: Removed.
- [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Insert assertion.
- (Project, FreeProject)
- [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Insert assertion.
- (Compute_Funcs) [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]:
- Implement unpatented hinting.
- (DO_SPVTCA, DO_SFVTCA, DO_SPVTL, DO_SFVTL, DO_SPVFS, DO_SFVFS,
- Ins_SDPVTL): Call `GUESS_VECTOR'.
- (DO_GPV, DO_GFV) [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]:
- Handle `unpatented_hinting'.
- (Compute_Point_Displacement) [NO_APPLE_PATENT]: Removed.
- [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Implement unpatented
- hinting.
- (Move_Zp2_Point, Ins_SHPIX, Ins_DELTAP, Ins_DELTAC)
- [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Implement unpatented
- hinting.
- (TT_RunIns): Updated.
-
- * src/truetype/ttobjs.c
- [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Include
- FT_TRUETYPE_UNPATENTED_H.
- (tt_face_init) [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING,
- TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING]: Check
- FT_PARAM_TAG_UNPATENTED_HINTING.
-
- * src/truetype/ttobjs.h (TT_GraphicsState)
- [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Add `both_x_axis'.
-
-2003-04-25 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdflib.c (hash_bucket, hash_lookup): Use `const' for first
- argument.
- (bdf_get_font_property): Use `const' for third argument.
- Updated all callers.
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Set pixel width and height
- similar to the PCF driver.
- * src/bdf/bdf.h (_hashnode): Use `const' for `key'.
- Updated.
-
- * src/gzip/ftgzip.c: C++ doesn't like that the array `inflate_mask'
- is declared twice. It is perhaps better to modify the zlib source
- files directly instead of this hack.
- (zcalloc, zfree, ft_gzip_stream_close, ft_gzip_stream_io): Add casts
- to make build with g++ successful.
-
-2003-04-24 Manish Singh <yosh@gimp.org>
-
- * src/cid/cidobjs.c (cid_face_init), src/type1/t1objs.c
- (T1_Face_Init), src/type42/t42objs.c (T42_Face_Init): Split on `-'
- also for searching the style name.
-
-2003-04-24 David Turner <david@freetype.org>
-
- * src/pcf/pcfread.c (pcf_load_font): Fixed the computation of
- face->num_glyphs. We must increase the value by 1 to respect the
- convention that glyph index 0 always corresponds to the `missing
- glyph'.
-
-2003-04-24 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/unix-cc.in (CFLAGS): Add @CPPFLAGS@.
-
-2003-04-24 Dieter Baron <dillo@netbsd.org>
-
- * builds/unix/freetype-config.in (cflags): Emit FreeType 2's include
- files first. Otherwise there are conflicts with FreeType 1
- installed simultaneously.
-
-2003-04-23 Werner Lemberg <wl@gnu.org>
-
- Fixing bugs reported by Nelson Beebe.
-
- * src/base/ftstroker.c (FT_Stroker_ParseOutline): Remove unused
- variable `in_path'.
-
- * src/base/ftobjs (ft_glyphslot_set_bitmap): Change type of
- second argument to `FT_Byte*'.
- * include/freetype/internal/ftobjs.h: Updated.
-
- * src/bdf/bdflib.c (_bdf_readstream): Remove unused variable `res'.
- (_bdf_parse_glyphs): Remove unused variable `next'.
- Mark `call_data' as unused.
-
- * src/cache/ftlru.c (FT_LruList_Lookup): Remove unused variable
- `plast'.
-
- * src/pcf/pcfread.c (pcf_seek_to_table_type): Slight recoding to
- actually use `error'.
- (pcf_load_font): Remove unused variable `avgw'.
-
- * src/pfr/pfrobjs.c (pfr_face_get_kerning): Change return type
- to `void'.
- Mark `error' as unused.
- * src/pfr/pfrobjs.h: Updated.
- * src/pfr/pfrdrivr.c (pfr_get_kerning): Updated.
-
- * src/sfnt/ttload.c (sfnt_dir_check): Remove unused variable
- `format_tag'.
-
- * src/sfnt/ttcmap0.c (tt_cmap6_validate, tt_cmap10_validate): Remove
- unused variable `start'.
- (tt_cmap10_char_next): Remove unused variable `result'
-
- * src/sfnt/sfobjs.c (tt_face_get_name): Mark `error' as unused.
-
- * src/sfnt/sfdriver.c (get_sfnt_postscript_name): Mark `error' as
- unused.
-
- * src/type1/t1objs.c (T1_Face_Init): Remove unused variable
- `pshinter'.
-
- * src/type1/t1gload.c (T1_Load_Glyph): Use `glyph_data_loaded'
- only for FT_CONFIG_OPTION_INCREMENTAL.
-
-2003-04-23 Akito Hirai <akito@kde.gr.jp>
-
- * src/sfnt/ttcmap0.c (tt_cmap4_validate): Provide a weak variant
- of the glyph ID bounding check if FT_VALIDATE_TIGHT is not active.
- Without this change, many CJK fonts from Dynalab are rejected.
-
-2003-04-23 Joe Marcus Clarke <marcus@FreeBSD.org>
-
- * src/base/ftbdf.c (FT_Get_BDF_Property): Check for valid
- `get_interface'.
-
-2003-04-23 Paul Miller <paulm@profoundeffects.com>
-
- * src/base/ftmac.c (parse_fond): Fix handling of style names.
-
-2003-04-23 Werner Lemberg <wl@gnu.org>
-
- * src/pfr/pfrload.c (pfr_extra_item_load_font_id): Use FT_PtrDist
- instead of FT_UInt for `len'.
-
-2003-04-22 Werner Lemberg <wl@gnu.org>
-
- * src/gzip/ftgzip.c (zcalloc) [!FT_CONFIG_OPTION_SYSTEM_ZLIB]:
- Convert K&R format to modern C usage.
- (FT_Stream_OpenGzip): Use long constant.
-
-2003-04-21 Werner Lemberg <wl@gnu.org>
-
- * src/cache/ftccache.c (ftc_cache_lookup): Remove shadow declaration
- of `manager'.
-
-2003-04-20 Werner Lemberg <wl@gnu.org>
-
- * doc/INSTALL.UNX: Cleaned up.
-
-2003-04-09 Torrey Lyons <torrey@mrcla.com>
-
- * src/base/ftmac.c (open_face_from_buffer): Removed a double-free
- bug that had nasty consequences when trying to open an `invalid'
- font on a Mac.
-
-2003-04-09 Mike Fabian <mfabian@suse.de>
-
- * src/bdf/bdfdrivr.h (BDF_encoding_el), src/pcf/pcf.h
- (PCF_EncodingRec): Changed FT_Short to FT_UShort in order to be able
- to access more than 32768 glyphs in fonts.
-
-2003-04-08 David Turner <david@freetype.org>
-
-
- * Version 2.1.4 released.
- =========================
-
-
-2003-04-03 Martin Muskens <mmuskens@aurelon.com>
-
- * src/type1/t1load.c (T1_Open_Face): Fixed the code to make it
- handle special cases where a font only contains a `.notdef' glyph
- (happens in PDF-embedded fonts). Otherwise, FT_Panic was called.
-
-2003-03-27 David Turner <david@freetype.org>
-
- * README: Updated.
-
- * README.UNX: Removed (now replaced by docs/INSTALL.UNX).
-
- * src/pshinter/pshalgo3.c: The hinter now performs as in 2.1.3 and
- will ignore stem quantization only when FT_LOAD_TARGET_SMOOTH is
- used.
- (psh3_dimension_quantize_len): Enabled.
- (psh3_hint_align): Enable commented code.
- (psh3_hint_align_light): Commented out.
-
- * src/base/ftobjs.c (FT_Set_Char_Size): Changed the default
- computations to include rounding in all cases; this is required to
- provide accurate kerning data when native TrueType hinting is
- enabled.
-
- * src/type1/t1load.c (is_name_char): The Type 1 loader now accepts
- more general names according to the PostScript specification (the
- previous one was too restrictive).
- (parse_font_name, parse_encoding, parse_charstrings, parse_dict):
- Use `is_name_char'.
- (parse_subrs): Handle empty arrays.
-
-2003-03-20 David Turner <david@freetype.org>
-
- Serious rewriting of the documentation.
-
- * docs/BUGS, docs/BUILD: Removed.
- * docs/DEBUG.TXT: Renamed to...
- * docs/DEBUG: This.
- * docs/CUSTOMIZE, docs/TRUETYPE, docs/UPGRADE.UNX: New files.
- * docs/INSTALL.ANY, docs/INSTALL.UNX, docs/INSTALL.GNU New files,
- containing platform specific information previously in INSTALL.
- * docs/readme.vms: Renamed to...
- * docs/INSTALL.VMS: This.
-
- * docs/*: Updated.
-
- Introduced three new functions to deal with glyph bitmaps within
- FT_GlyphSlot objects:
-
- ft_glyphslot_free_bitmap
- ft_glyphslot_alloc_bitmap
- ft_glyphslot_set_bitmap
-
- These functions are much more convenient to use than managing the
- FT_GLYPH_OWN_BITMAP flag manually.
-
- * include/freetype/internal/ftobjs.h (ft_glyphslot_free_bitmap,
- ft_glyphslot_alloc_bitmap, ft_glyphslot_set_bitmap): New functions.
- * src/base/ftobjs.c: Implement them.
- (ft_glyphslot_done): Use ft_glyphslot_free_bitmap.
-
- * src/bdf/bdfdrivr.c (BDF_Glyph_Load), src/pcf/pcfdriver.c
- (PCF_Glyph_Load): Remove unused variable `memory'.
- Use `ft_glyphslot_*' functions.
- Don't set `FT_GLYPH_OWN_BITMAP'.
-
- * src/pfr/pfrsbit.c (pfr_slot_load_bitmap): Use
- `ft_glyphslot_alloc_bitmap'.
-
- * src/sfnt/ttsbit.c (Load_SBit_Image): Change 5th argument to type
- `FT_GlyphSlot'.
- Adding argument `depth' to handle recursive calls.
- Use `ft_glyphslot_alloc_bitmap'.
- (tt_face_load_sbit_image): Remove unused variable `memory'.
- Don't handle `FT_GLYPH_OWN_BITMAP'.
- Update call to Load_SBit_Image.
-
- * src/type42/t42objs.c (ft_glyphslot_clear): Renamed to...
- (t42_glyphslot_clear): This. Updated caller.
- Call `ft_glyphslot_free_bitmap'.
-
- * src/winfonts/winfnt.c (FNT_Load_Glyph): Use
- `ft_glyphslot_set_bitmap'.
- Don't handle `FT_GLYPH_OWN_BITMAP'.
-
- * src/cache/ftlru.c (FT_LruList_Lookup): Fixed an invalid assertion
- check.
-
- * src/autohint/ahglyph.c (ah_outline_load): Add two scaling
- arguments.
- * src/autohint/ahglyph.h: Updated.
- * src/autohint/ahhint.c (ah_hinter_load): Updated.
- * src/autohint/ahglobal.c (ah_hinter_compute_widths): Updated.
-
- * src/cache/ftccache.c (ftc_family_done): Fixed small bug that could
- crash the cache in rare circumstances (mostly with broken fonts).
-
-2003-03-15 David Turner <david@freetype.org>
-
- * src/truetype/ttdriver.c (Set_Char_Sizes): Fixed a small rounding
- bug. Actually, it seems that previous versions of FreeType didn't
- perform TrueType rounding exactly as appropriate.
-
-2003-03-14 David Turner <david@freetype.org>
-
- * src/truetype/ttdriver.c (Set_Char_Sizes): Fixing the small
- TrueType native rendering glitches; they came from a small rounding
- error.
-
-2003-03-13 David Turner <david@freetype.org>
-
- Added new environment variables to control memory debugging with
- FreeType. See the description of `FT2_DEBUG_MEMORY',
- `FT2_ALLOC_TOTAL_MAX' and `FT2_ALLOC_COUNT_MAX' in DEBUG.TXT.
-
- * src/base/ftdbgmem.c (FT_MemTableRec): Add `alloc_count',
- `bound_total', `alloc_total_max', `bound_count', `alloc_count_max'.
- (ft_mem_debug_alloc): Handle new variables.
- (ft_mem_debug_init): s/FT_DEBUG_MEMORY/FT2_DEBUG_MEMORY/.
- Handle new environment variables.
- * docs/DEBUG.TXT: Updated.
-
- Fixed the cache sub-system to correctly deal with out-of-memory
- conditions.
-
- * src/cache/ftccache.c (ftc_node_destroy): Comment out generic
- check.
- (ftc_cache_lookup): Implement loop.
- * src/cache/ftccmap.c: Define FT_COMPONENT.
- * src/cache/ftcsbits.c (ftc_sbit_node_load): Handle
- FT_Err_Out_Of_Memory.
- * src/cache/ftlru.c: Include FT_INTERNAL_DEBUG_H.
- (FT_LruList_Lookup): Implement loop.
-
- * src/pfr/pfrobjs.c (pfr_face_done): Fix memory leak.
- (pfr_face_init): Fixing compiler warnings.
-
- * src/psaux/psobjs.c (reallocate_t1_table): Fixed a bug (memory
- leak) that only happened when a try to resize an array would end in
- an out-of-memory condition.
-
- * src/smooth/ftgrays.c (gray_convert_glyph): Removed compiler
- warnings / volatile bug.
-
- * src/truetype/ttobjs.c (tt_glyphzone_done): Removed segmentation
- fault that happened in tight memory environments.
-
-2003-02-28 Pixel <pixel@mandrakesoft.com>
-
- * src/gzip/ftgzip.c (ft_gzip_file_done): Fixed memory leak: The ZLib
- stream was not properly finalized.
-
-2003-02-25 Anthony Fok <anthony@thizlinux.com>
-
- * src/cache/ftccmap.c: Include FT_TRUETYPE_IDS_H.
- (ftc_cmap_family_init): The cmap cache now
- supports UCS-4 charmaps when available in Asian fonts.
-
- * src/sfnt/ttload.c, src/base/ftobjs.c: Changed `asian' to `Asian'
- in comments.
-
-2003-02-25 David Turner <david@freetype.org>
-
- * src/gzip/ftgzip.c (ft_gzip_file_fill_output): Fixed a bug that
- caused FreeType to loop endlessly when trying to read certain
- compressed gzip files. The following test reveals the bug:
-
- touch 0123456789 ; gzip 0123456789 ; ftdump 0123456789.gz
-
- Several fixes to the PFR font driver:
-
- - The list of available embedded bitmaps was not correctly set in
- the root FT_FaceRec structure describing the face.
-
- - The glyph loader always tried to load the outlines when
- FT_LOAD_SBITS_ONLY was specified.
-
- - The table loaded now scans for *undocumented* elements of a
- physical font's auxiliary data record. This is necessary to
- retrieve the `real' family and style names.
-
- NOTE THAT THESE CHANGES THE FAMILY NAME OF MANY PFR FONTS!
-
- * src/pfr/pfrload.c (pfr_aux_name_load): New function.
- (pfr_phy_font_done): Free `family_name' and `style_name' also.
- Remove unused variables.
- (pfr_phy_font_load): Extract useful information from the auxiliary
- bytes.
-
- * src/pfr/pfrobjs.c (pfr_face_done): Set pointers to NULL.
- (pfr_face_init): Provide fallback values for `family_name' and
- `style_name'.
- Handle strikes.
- (pfr_slot_load): Handle FT_LOAD_SBITS_ONLY.
- * src/pfr/pfrtypes.h (PFR_PhyFontRec): Add fields `ascent',
- `descent', `leading', `family_name', and `style_name'.
-
- * src/truetype/ttdriver.c (Set_Char_Sizes): Fixed a rounding bug
- when computing the scale factors for a given character size in
- points with resolution.
-
- * devel/ft2build.h, devel/ftoption.h: New files (in a new directory)
- which are special development versions of include/ft2build.h and
- include/freetype/config/ftoption.h, respectively.
-
-2003-02-18 David Turner <david@freetype.org>
-
- Fixing the slight distortion problem that occurred due to the latest
- auto-hinter changes.
-
- * src/base/ftobjs.c (ft_recompute_scaled_metrics): Fix rounding.
-
- * src/truetype/ttdriver.c (Set_Char_Sizes): New variable `metrics2'.
- [!TT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Removed.
-
- * src/truetype/ttobjs.h (TT_SizeRec): New field `metrics'.
- * src/truetype/ttobjs.c (Reset_Outline_Size): Fix initialization of
- `metrics'.
- [FT_CONFIG_CHESTER_ASCENDER]: Code removed.
- (Reset_SBit_Size): Fix initialization of `metrics'.
-
- * src/truetype/ttinterp.c (TT_Load_Context): Fix initialization of
- `exec->metrics'.
-
- * src/autohint/ahhint.c (ah_hinter_load): Disabled the advance width
- `correction' which seemed to provide more trouble than benefits.
-
-2003-02-13 Graham Asher <graham.asher@btinternet.com>
-
- Changed the incremental loading interface in a way that makes it
- simpler and allows glyph metrics to be changed (e.g., by adding a
- constant, as required by CFF fonts) rather than just overridden.
- This was required to make the GhostScript-to-FreeType bridge work.
-
- * src/cff/cffgload.c (cff_slot_load) [FT_CONFIG_OPTION_INCREMENTAL]:
- Allow metrics to be overridden.
- * src/cid/cidgload.c (cid_load_glyph) [FT_CONFIG_OPTION_INCREMENTAL]:
- Ditto.
-
- * src/truetype/ttgload.c (load_truetype_glyph)
- [FT_CONFIG_OPTION_INCREMENTAL]: Simplify.
- (compute_glyph_metrics) [FT_CONFIG_OPTION_INCREMENTAL]: Code block
- moved down.
-
- * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String)
- [FT_CONFIG_OPTION_INCREMENTAL]: Updated.
-
- * include/freetype/ftincrem.h: Updated.
-
-2003-01-31 David Turner <david@freetype.org>
-
- * docs/CHANGES, docs/VERSION.DLL, docs/TODO: Updating documentation
- for the 2.1.4 release.
-
- * builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/index.html: Updating the project file for
- 2.1.4.
-
- * src/gzip/adler32.c, src/gzip/ftgzip.c, src/gzip/infblock.c,
- src/gzip/infcodes.c, src/gzip/inflate.c, src/gzip/inftrees.c,
- src/gzip/infutil.c: Removed old-style (K&R)function definitions.
- This avoids warnings with Visual C++ at its most pedantic mode.
-
- * src/pfr/pfrsbit.c: Removed compiler warnings.
-
- * src/cache/ftccmap.c (ftc_cmap_family_init): Changed an FT_ERROR
- into an FT_TRACE1 since it caused `ftview' and others to dump too
- much junk when trying to display a waterfall with a font without a
- Unicode charmap (e.g. SYMBOL.TTF).
-
- Implemented FT_CONFIG_CHESTER_BLUE_SCALE, corresponding to the last
- patch from David Chester, but with a much simpler (and saner)
- implementation.
-
- * src/autohint/ahhint.c (ah_hinter_load_glyph)
- [FT_CONFIG_CHESTER_BLUE_SCALE]: Try to optimize the y_scale so that
- the top of non-capital letters is aligned on a pixel boundary
- whenever possible.
-
- * src/base/ftobjs.c (FT_Set_Char_Size)
- [FT_CONFIG_CHESTER_BLUE_SCALE]: Round differently.
- * src/truetype/ttdriver.c (Set_Char_Sizes)
- [TT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Do some rounding only
- if this macro is defined.
-
- * src/truetype/ttobjs.c (Reset_Outline_Size)
- [FT_CONFIG_CHESTER_ASCENDER]: Round differently.
-
- * src/pshinter/pshalgo3.c: Improved the Postscript hinter. Getting
- rid of stem snapping seems to work well here (though the stems are
- still slightly moved to increase contrast).
- (psh3_dimension_quantize_len): Commented out.
- (psh3_hint_align_light): New function.
- (psh3_hint_align): Comment out some code.
-
- THIS IMPROVES ANTI-ALIASED RENDERING, BUT MONOCHROME AND LCD MODES
- STILL SUCK.
-
-2003-01-22 David Chester <davidchester@qmx.net>
-
- * src/autohint/ahhint.c (ah_compute_stem_width): Small fix to the
- stem width optimization.
-
-2003-01-22 David Turner <david@freetype.org>
-
- Adding a new API `FT_Get_BDF_Property' to retrieve the BDF
- properties of a given PCF or BDF font.
-
- * include/freetype/ftbdf.h (BDF_PropertyType): New enumeration.
- (BDF_Property, BDF_PropertyRec): New structure.
- FT_Get_BDF_Property): New function.
- * include/freetype/internal/bdftypes.h: Include FT_BDF_H.
- (BDF_GetPropertyFunc): New function pointer.
-
- * src/base/ftbdf.c (test_font_type): New helper function.
- (FT_Get_BDF_Charset_ID): Use `test_font_type'.
- (FT_Get_BDF_Property): New function.
-
- * src/bdf/bdfdrivr.c: Include FT_BDF_H.
- (bdf_get_bdf_property, bdf_driver_requester): New functions.
- (bdf_driver_class): Use `bdf_driver_requester'.
-
- * src/pcf/pcfdrivr.c: Include FT_BDF_H.
- (pcf_get_bdf_property, pcf_driver_requester): New functions
- (pcf_driver_class): Use `pcf_driver_requester'.
-
- * src/pcf/pcfread.c: Include `pcfread.h'.
- (pcf_find_property): Decorate it with FT_LOCAL_DEF.
- * src/pcf/pcfread.h: New file, providing `pcf_find_property'.
-
- * src/sfnt/ttload.c (sfnt_dir_check): Relaxed the `head' table size
- verification to accept a few broken fonts who pad the size
- incorrectly (the table should be padded, but its `size' field
- shouldn't according to the specification).
-
-2003-01-18 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/ltmain.sh: Regenerated with `libtoolize --force
- --copy' from libtool 1.4.3.
- * builds/unix/aclocal.m4: Regenerated with `aclocal -I .' from
- automake 1.7.1.
- * builds/unix/configure: Regenerated with autoconf 2.54.
- * builds/unix/config.guess, builds/unix/config.sub: Updated from
- `config' CVS module at subversions.gnu.org.
- * builds/unix/install-sh, builds/unix/mkinstalldirs: Updated from
- `automake' CVS module at subversions.gnu.org.
-
-2003-01-15 David Turner <david@freetype.org>
-
- * include/freetype/freetype.h: Fixed documentation for
- FT_Size_Metrics.
-
-2003-01-15 James Su <suzhe@turbolinux.com.cn>
-
- * src/gzip/ftgzip.c (ft_gzip_check_header): Bugfix: couldn't read
- certain gzip-ed font files (typo: `&&' -> `&').
-
-2003-01-15 Huw D M Davies <h.davies1@physics.ox.ac.uk>
-
- Added a Windows .FNT specific API (mostly for Wine). Also fixed a
- nasty bug in the header loader which would cause invalid memory
- overwrites.
-
- * include/freetype/config/ftheader.h (FT_WINFONTS_H): New macro
- for ftwinfnt.h.
- * include/freetype/internal/fnttypes.h: Include FT_WINFONTS_H.
- (FNT_FontRec): Updated.
- Move Windows FNT definition to...
- * include/freetype/ftwinfnt.h: This new file.
- (FT_WinFNT_HeaderRec): Rename `reserved2' to `reserved1'.
- * src/base/ftwinfnt.c: New file, providing `FT_Get_WinFNT_Header'.
- * src/winfonts/winfnt.c (winfnt_header_fields): Updated.
- Rename `reserved2' to `reserved1'.
- (fnt_font_load): Updated.
-
- * src/base/Jamfile, src/base/descrip.mms, src/base/rules.mk:
- Updated.
-
-2003-01-14 Graham Asher <graham.asher@btinternet.com>
-
- * include/freetype/ftglyph.h, src/base/ftglyph.c: Added `const' to
- the type of the first argument to FT_Matrix_Multiply, which isn't
- changed -- this adds documentation and convenience.
-
-2003-01-13 Graham Asher <graham.asher@btinternet.com>
-
- * src/sfnt/ttload.c (tt_face_load_metrics)
- [FT_CONFIG_OPTION_INCREMENTAL]: TrueType typefaces without
- horizontal metrics (without the `hmtx' table) are now tolerated if
- an incremental interface has been specified that has a
- get_glyph_metrics function, implying that metrics will be supplied
- from outside. This happens for certain Type 42 fonts passed from
- GhostScript.
-
-2003-01-11 David Chester <davidchester@qmx.net>
-
- Patches to the auto-hinter in order to slightly improve the output.
- Note that everything is controlled through the new
- FT_CONFIG_OPTION_CHESTER_HINTS defined in `ftoption.h'. There are
- also individual FT_CONFIG_CHESTER_XXX macros to control individual
- `features'.
-
- Note that all improvements are enabled by default, but can be
- tweaked for optimization and testing purposes. The configuration
- macros will most likely disappear in the short future.
-
- * include/freetype/config/ftoption.h
- (FT_CONFIG_OPTION_CHESTER_HINTS): New macro.
- (FT_CONFIG_CHESTER_{SMALL_F,ASCENDER,SERIF,STEM,BLUE_SCALE})
- [FT_CONFIG_OPTION_CHESTER_HINTS]: New macros to control individual
- features.
-
- * src/autohint/ahglobal.c (blue_chars) [FT_CONFIG_CHESTER_SMALL_F]:
- Add blue zone for `fijkdbh'.
- * src/autohint/ahglobal.h (AH_IS_TOP_BLUE)
- [FT_CONFIG_CHESTER_SMALL_F]: Use `AH_BLUE_SMALL_F_TOP'.
- * src/autohint/ahglyph.c (ah_outline_compute_edges)
- [FT_CONFIG_CHESTER_SERIF]: Use `AH_EDGE_SERIF'.
- (ah_outline_compute_blue_edges) [FT_CONFIG_CHESTER_SMALL_F]:
- Increase threshold for `best_dist'.
- * src/autohint/ahhint.c (ah_compute_stem_width)
- [FT_CONFIG_CHESTER_SERIF]: Provide new version for improved serif
- handling.
- (ah_align_linked_edge) [FT_CONFIG_CHESTER_SERIF]: Use special
- version of `ah_compute_stem_width'.
- (ah_hint_edges_3) [FT_CONFIG_CHESTER_STEM]: A new algorithm for stem
- alignment when stem widths are less than 1.5 pixels wide centers the
- stem slightly off-center of the center of a pixel (this increases
- sharpness and consistency).
- [FT_CONFIG_CHESTER_SERIF]: Use special version of
- `ah_compute_stem_width'.
- * src/autohint/ahtypes.h [FT_CONFIG_CHESTER_SMALL_F]: Add
- `AH_BLUE_SMALL_F_TOP'.
-
-2003-01-11 David Turner <david@freetype.org>
-
- * include/freetype/internal/fnttypes.h (WinFNT_HeaderRec): Increase
- size of `reserved2' to avoid memory overwrites.
-
-2003-01-08 Huw Davies <huw@codeweavers.com>
-
- * src/winfonts/winfnt.c (winfnt_header_fields): Read 16 bytes into
- `reserved2', not `reserved'.
-
- * src/base/ftobjs.c (find_unicode_charmap): Fixed the error code
- returned when the font doesn't contain a Unicode charmap. This
- allows FT2 to load `symbol.ttf' and a few others correctly since the
- last release.
- (open_face): Fix return value.
-
-2003-01-08 Owen Taylor <owen@redhat.com>
-
- Implemented the FT_RENDER_MODE_LIGHT hinting mode in the auto and
- postscript hinters.
-
- * src/autohint/ahtypes.h (AH_HinterRec): Add `do_stem_adjust'.
- * src/autohint/ahhint.c (ah_compute_stem_width): Handle
- hinter->do_stem_adjust.
- (ah_hinter_load_glyph): Set hinter->do_stem_adjust.
-
- * src/pshinter/pshalgo3.h (PSH3_GlyphRec): Add `do_stem_adjust'.
- * src/pshinter/pshalgo3.c (psh3_hint_align): Use `do_stem_adjust'.
- (ps3_hints_apply): Handle FT_RENDER_MODE_LIGHT.
-
- * include/freetype/freetype.h (FT_Render_Mode): Add
- FT_RENDER_MODE_LIGHT.
-
- * src/truetype/ttgload.c: Fixing the TrueType loader to handle
- invalid composites correctly by limiting the recursion depth.
- (TT_MAX_COMPOSITE_RECURSE): New macro.
- (load_truetype_glyph): Add argument `recurse_count'.
- Load a composite only if the numbers of contours is -1, emit error
- otherwise.
- (TT_Load_Glyph): Updated.
-
-2003-01-08 David Turner <david@freetype.org>
-
- * Jamrules, Jamfile, Jamfile.in, src/*/Jamfile: Small changes to
- support the compilation of FreeType 2 as part of larger projects
- with their own configuration options (only with Jam).
-
-2003-01-07 David Turner <david@freetype.org>
-
- * src/base/ftstroker.c: Probably the last bug-fixes to the stroker;
- the API is likely to change, however.
- (ft_stroke_border_close): Don't record empty paths.
- (ft_stroke_border_get_counts): Increase `num_points' also in for loop.
- (ft_stroke_border_export): Don't increase `write' twice in for loops.
- (ft_stroker_outside): Handle `phi' together with `theta'.
- (FT_Stroker_ParseOutline): New function.
-
- * src/base/fttrigon.c (FT_Angle_Diff): Fixing function: It returned
- invalid values for large negative angle differences (resulting in
- incorrect stroker computations, among other things).
-
- * src/cache/ftccache.c (ftc_node_hash_unlink): Removing incorrect
- assertion, and changing code to avoid hash table size contraction.
-
- * src/base/Jamfile, src/base/rules.mk, src/base/descrip.mms: Adding
- `ftstroker' to default build, as optional component.
-
-2002-12-26 David Turner <david@freetype.org>
-
- * src/gzip/adler32.c, src/gzip/infblock.c, src/gzip/inflate.c,
- src/gzip/inftrees.c, src/gzip/zconf.h, src/gzip/zlib.h,
- src/gzip/zutil.h: Updates to allow compilation without compiler
- warnings with LCC-Win32.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 4.
- * builds/unix/configure.ac (version_info): Increased to 9:3:3.
- * builds/unix/configure: Regenerated.
- * docs/VERSION.DLL: Updated.
-
-2002-12-23 Anthony Fok <anthony@thizlinux.com>
-
- * builds/unix/configure.ac, builds/unix/unix-cc.in (LINK_LIBRARY),
- builds/unix/unix-def.in (SYSTEM_ZLIB): Small fix to configure
- sub-system on Unix to allow other programs to correctly link with
- zlib when needed.
-
-2002-12-19 David Turner <david@freetype.org>
-
- * include/freetype/internal/sfnt.h (SFNT_Load_Table_Func): New
- function pointer.
-
- * include/freetype/tttables.h (FT_Load_Sfnt_Table): New function.
- * src/base/ftobjs.c: Implement it.
-
- * src/sfnt/sfdriver.c (sfnt_get_interface): Handle `load_sfnt'
- module request.
-
-2002-12-17 David Turner <david@freetype.org>
-
- * src/base/ftobjs.c (find_unicode_charmap): Added some comments to
- better explain what's happening there.
- (open_face): Included Graham Asher's fix to prevent faces without
- Unicode charmaps from loading.
-
- * src/winfonts/winfnt.c: Included George Williams's fix to support
- version 2 fonts correctly.
- (winfnt_header_fields): Updated.
- (fnt_font_load): Handle version 2 fonts.
- (FNT_Load_Glyph): Updated.
-
-2002-12-16 David Turner <david@freetype.org>
-
- * docs/VERSION.DLL: Updating document to better explain the
- differences between the three version numbers being used on Unix, as
- well as providing an autoconf fragment provided by Lars Clausen.
-
- * src/smooth/ftgrays.c (gray_render_conic): Fixed small bug that
- prevented Bézier arcs with negative vertical coordinates to be
- rendered appropriately.
-
-2002-12-02 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
-
- * src/base/ftobjs.c: Modified the logic to get Unicode charmaps.
- Now it loads UCS-4 charmaps when there is one.
- (find_unicode_charmap): New function.
- (open_face): Refer to the above one.
- (FT_Select_Charmap): Idem.
-
-2002-11-29 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
-
- * include/freetype/ftgzip.h: Correct the name of the controlling
- macro (was __FTXF86_H__ ...).
-
-2002-11-27 Vincent Caron <v.caron@zerodeux.net>
-
- * builds/unix/unix-def.in, builds/unix/freetype-config.in,
- builds/unix/configure.ac, src/gzip/rules.mk, src/gzip/ftgzip.c
- [FT_CONFIG_OPTION_SYSTEM_ZLIB]: Adding support for system zlib
- installations if available on the target platform (Unix only).
-
-2002-11-23 David Turner <david@freetype.org>
-
- * src/cff/cffload.c (cff_charset_load, cff_encoding_load): Modified
- charset loader to accept pre-defined charsets, even when the font
- contains fewer glyphs. Also enforced more checks to ensure that we
- never overflow the character codes array in the encoding.
-
-2002-11-22 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
-
- * include/freetype/ttnameid.h: Updated to latest OpenType
- specification.
-
-2002-11-18 David Turner <david@freetype.org>
-
-
- * Version 2.1.3 released.
- =========================
-
-
-2002-11-07 David Turner <david@freetype.org>
-
- * src/cache/ftcsbits.c (ftc_sbit_node_load): Fixed a small bug that
- caused problems with embedded bitmaps.
-
- * src/otlayout/otlayout.h, src/otlayout/otlconf.h,
- src/otlayout/otlgsub.c, src/otlayout/otlgsub.h,
- src/otlayout/otlparse.c, src/otlayout/otlparse.h,
- src/otlayout/otlutils.h: Updating the OpenType Layout code, adding
- support for the first GSUB lookups. Nothing that really compiles
- for now though.
-
- * src/autohint/ahhint.c (ah_align_serif_edge): Disabled serif stem
- width quantization. It produces slightly better shapes though this
- is not distinguishable with many fonts.
- Remove other dead code.
-
- * src/Jamfile, src/*/Jamfile: Simplified.
- Use $(FT2_SRC_DIR).
-
-2002-11-06 David Turner <david@freetype.org>
-
- * include/freetype/freetype.h (FT_LOAD_TARGET_LIGHT): New macro.
- (FT_LOAD_TARGET, FT_LOAD_TARGET_MODE): Use `& 15' instead of `& 7'.
-
-2002-11-05 David Turner <david@freetype.org>
-
- * include/freetype/config/ftoption.h, src/gzip/ftgzip.c: Added
- support for the FT_CONFIG_OPTION_SYSTEM_ZLIB option, used to specify
- the use of system-wide zlib.
-
- Note that this macro, as well as
- TT_CONFIG_OPTION_BYTECODE_INTERPRETER, is not #undef-ed anymore.
- This allows the build system to define them depending on the
- configuration (typically by adding -D flags at compile time).
-
- * src/sfnt/ttcmap0.c (tt_face_build_cmaps): Removed compiler
- warnings in optimized mode relative to the `volatile' local
- variables. This was not a compiler bug after all, but the fact that
- a pointer to a volatile variable is not the same as a volatile
- pointer to a variable :-)
-
- The fix was to change
- `volatile FT_Byte* p'
- into
- `FT_Byte* volatile p'.
-
- * src/pfr/pfrload.c (pfr_phy_font_load), src/pfr/pfrdrivr.c
- (pfr_get_metrics), src/gzip/inftrees.c: Removed compiler warnings in
- optimized modes.
-
- * src/gzip/*.[hc]: Modified our zlib copy in order to prevent
- exporting any zlib function names outside of the component. This
- prevents linking problems on some platforms, when applications want
- to link FreeType _and_ zlib together.
-
-2002-11-05 Juliusz <jch@pps.jussieu.fr>
-
- * src/psaux/psobjs.c (ps_table_add): Modified increment loop in
- order to implement exponential behaviour.
-
-2002-11-01 David Turner <david@freetype.org>
-
- Added PFR-specific public API. Fixed the kerning retrieval routine
- (it returned invalid values when the outline and metrics resolution
- differ).
-
- * include/freetype/ftpfr.h, include/freetype/internal/pfr.h: New
- files.
-
- * include/freetype/internal/internal.h (FT_INTERNAL_PFR_H): New
- macro for pfr.h.
-
- * src/base/ftpfr.c: New file.
- * src/base/Jamfile, src/base/descrip.mms: Updated.
-
- * src/pfr/pfrdrivr.c: Include FT_INTERNAL_PFR_H.
- (pfr_get_kerning, pfr_get_advance, pfr_get_metrics): New functions.
- (pfr_service_rec): New format interface.
- (pfr_driver_class): Use `pfr_service_rec'.
- Replace `pfr_face_get_kerning' with `pfr_get_kerning'.
- * src/pfr/pfrobjs.c: Remove dead code.
-
- * src/base/ftobjs.c (ft_glyphslot_clear): Small internal fix to
- better support bitmap-based font formats.
-
- * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Fix handling of
- `scale'.
- Fix arguments to `FT_Vector_From_Polar'.
-
-2002-10-31 David Turner <david@freetype.org>
-
- Add support for automatic handling of gzip-compressed PCF files.
-
- * src/gzip/*: New files, taken from the zlib package (except
- ftgzip.c).
-
- * include/freetype/ftgzip.h, src/gzip/ftgzip.c: New files.
- * include/freetype/config/ftheader.h (FT_GZIP_H): New macro for
- `ftgzip.h'.
-
- * src/pcf/pcfdriver.c: Include FT_GZIP_H and FT_ERRORS_H.
- (PCF_Face_Init): If normal open fails, try to open gzip stream.
- (PCF_Face_Done): Close gzip stream.
-
- * include/freetype/internal/pcftypes.h (PCF_Public_FaceRec),
- src/pcf/pcf.h (PCF_FaceRec): Add `gzip_stream' and `gzip_source'.
-
- * include/freetype/config/ftoption.h (FT_CONFIG_OPTION_USE_ZLIB):
- New macro.
- (T1_CONFIG_OPTION_DISABLE_HINTER, FT_CONFIG_OPTION_USE_CMAPS
- FT_CONFIG_OPTION_NO_CONVENIENCE_FUNCS,
- FT_CONFIG_OPTION_ALTERNATE_GLYPH_FORMATS): Removed.
-
- (FT_EXPORT, FT_EXPORT_DEF, FT_DEBUG_LEVEL_ERROR,
- FT_DEBUG_LEVEL_TRACE, FT_DEBUG_MEMORY): Comment out definitions so
- that platform specific configuration file can override.
-
- * include/freetype/internal/ftstream.h: Include FT_SYSTEM_H.
-
-2002-10-30 David Turner <david@freetype.org>
-
- * FreeType 2.1.3rc3 released.
-
-2002-10-25 David Turner <david@freetype.org>
-
- * include/freetype/ftcache.h (FT_POINTER_TO_ULONG): New macro.
- (FTC_FACE_ID_HASH): Rewritten, using FT_POINTER_TO_ULONG.
-
-2002-10-22 Giuseppe Ghibò <ghibo@mandrakesoft.com>
-
- * include/freetype/freetype.h (FT_Encoding): Fix entry for latin-2.
-
-2002-10-07 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/freetype.h (FT_Open_Face): Use `const' for `args'
- (suggested by Graham).
- * src/base/ftobjs.c (FT_Open_Face): Updated.
- (ft_input_stream_new): Ditto.
-
-2002-10-05 David Turner <david@freetype.org>
-
- Adding support for embedded bitmaps to the PFR driver, and rewriting
- its kerning loader/handler to use all kerning pairs in a physical
- font (and not just the first item).
-
- * src/pfr/pfr.c: Include `pfrsbit.c'.
- * src/pfr/pfrgload.c: Include `pfrsbit.h'.
- * src/pfr/pfrload.c (pfr_extra_item_load_kerning_pairs): Rewritten.
- (pfr_phy_font_done, pfr_phy_font_load): Updated.
- * src/pfr/pfrobjs.c: Include `pfrsbit.h'.
- (pfr_face_init): Handle kerning and embedded bitmaps.
- (pfr_slot_load): Load embedded bitmaps.
- (PFR_KERN_INDEX): Removed.
- (pfr_face_get_kerning): Rewritten.
- * src/pfr/pfrsbit.c, src/pfr/pfrsbit.h: New files.
- * src/pfr/pfrtypes.h (PFR_KernItemRec): New structure.
- (PFR_KERN_INDEX): New macro.
- (PFR_PhyFontRec): Add items for kerning and embedded bitmaps.
- * src/pfr/Jamfile (_sources) [FT2_MULTI]: Add `pfrsbit'.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Don't load bitmap fonts if
- FT_LOAD_NO_RECURSE is set.
- Load embedded bitmaps only if FT_LOAD_NO_BITMAP isn't set.
-
- * src/tools/docmaker/content.py, src/tools/docmaker/sources.py,
- src/tools/docmaker/tohtml.py: Fixing a few nasty bugs.
-
- * src/sfnt/ttcmap0.c (tt_cmap4_validate): The validator for format 4
- sub-tables is now capable of dealing with invalid `length' fields at
- the start of the sub-table. This allows fonts like `mg______.ttf'
- (i.e. Marriage) to return accurate charmaps.
-
- * docs/CHANGES: Updated.
-
-2002-10-05 Werner Lemberg <wl@gnu.org>
-
- * src/smooth/ftgrays.c (SUBPIXELS): Add cast to `TPos'.
- Update all callers.
- (TRUNC): Add cast to `TCoord'.
- Update all callers.
- (TRaster): Use `TPos' for min_ex, max_ex, min_ey, max_ey, and
- last_ey.
- Update all casts.
- (gray_render_line): Fix casts for `p' and `first'.
-
-2002-10-02 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * src/bdf/bdflib.c (bdf_load_font): Allocate the _bdf_parse_t
- structure with FT_ALLOC instead of using the stack.
-
-2002-09-27 Werner Lemberg <wl@gnu.org>
-
- * src/include/freetype/internal/tttypes.h (num_sbit_strikes,
- num_sbit_scales): Use `FT_ULong'.
- * src/sfnt/sfobjs.c (sfnt_load_face): Updated accordingly.
- * src/sfnt/ttsbit.c (tt_face_set_sbit_strike): Ditto.
- (find_sbit_image): Remove cast.
- * src/raster/ftrend1.c (ft_raster1_render): Fix cast.
-
-2002-09-27 Wolfgang Domröse <porthos.domroese@harz.de>
-
- * src/sfnt/ttload.c (tt_face_load_names): Use cast.
- * src/sfnt/ttcmap.c (code_to_next2): Use long constant.
- (code_to_index4): Use cast.
- (code_to_index8_12): Fix cast.
- * src/sfnt/ttcmap0.c (tt_cmap4_char_next, tt_cmap8_char_index,
- tt_cmap12_char_index): Use cast for `result'.
- (tt_face_build_cmaps): Use cast.
- * src/sfnt/sfobjs.c (tt_name_entry_ascii_from_ucs4): Use cast for
- `code'.
- (sfnt_load_face): Use FT_Int32 for `flags'.
-
- * src/smooth/ftgrays.c (gray_render_scanline, gray_render_line,
- gray_compute_cbox, gray_convert_glyph, gray_raster_reset): Add casts
- to `TCoord' and `int'.
- More 16bit fixes.
- s/FT_Pos/TPos/.
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Add casts.
-
-2002-09-26 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttpost.c (load_post_names, tt_face_free_ps_names,
- tt_face_get_ps_name): Replace switch statement with if clauses to
- make it more portable.
-
- * src/cff/cffobjs.c (cff_face_init): Ditto.
-
- * include/freetype/ftmodule.h (FT_Module_Class): Use `FT_Long' for
- `module_size'.
- * include/freetype/ftrender.h (FT_Glyph_Class_): Use `FT_Long' for
- `glyph_size'.
-
- * src/base/ftobjs.c (FT_Render_Glyph): Change second parameter to
- `FT_Render_Mode'.
- (FT_Render_Glyph_Internal): Change third parameter to
- `FT_Render_Mode'.
- * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Change second parameter
- to `FT_Render_Mode'.
-
- * src/raster/ftrend1.c (ft_raster1_render): Change third parameter
- to `FT_Render_Mode'.
- * src/smooth/ftsmooth.c (ft_smooth_render, ft_smooth_render_lcd,
- ft_smooth_render_lcd_v): Ditto.
- (ft_smooth_render_generic): Change third and fifth parameter to
- `FT_Render_Mode'.
-
- * include/freetype/freetype.h, include/freetype/internal/ftobjs.h,
- include/freetype/ftglyph.h: Updated.
-
- * src/cff/cffdrivr.c (Load_Glyph), src/pcf/pcfdriver.c
- (PCF_Glyph_Load), src/pfr/pfrobjs.c (pfr_slot_load),
- src/winfonts/winfnt.c (FNT_Load_Glyph), src/t42/t42objs.c
- (T42_GlyphSlot_Load), src/bdf/bdfdrivr.c (BDF_Glyph_Load): Change
- fourth parameter to `FT_Int32'.
-
- * src/pfr/pfrobjs.c (pfr_face_init): Add two missing parameters
- and declare them as unused.
-
- * src/cid/cidparse.h (CID_Parser): Use FT_Long for `postscript_len'.
-
- * src/psnames/psnames.h (PS_Unicode_Value_Func): Change return
- value to FT_UInt32.
- * src/psnames/psmodule.c (ps_unicode_value, ps_build_unicode_table):
- Updated accordingly.
-
-2002-09-26 Wolfgang Domröse <porthos.domroese@harz.de>
-
- * src/cff/cffdrivr.c (Get_Kerning): Use FT_Long for `middle'.
- (cff_get_glyph_name): Use cast for result of ft_strlen.
- * src/cff/cffparse.c (cff_parse_real): User cast for assigning
- `exp'.
- * src/cff/cffload.c (cff_index_get_pointers): Use FT_ULong for
- some local variables.
- (cff_charset_load, cff_encoding_load): Use casts to FT_UInt for some
- switch statements.
- (cff_font_load): Use cast in call to CFF_Load_FD_Select.
- * src/cff/cffobjs.c (cff_size_init): Use more casts.
- (cff_face_init): Use FT_Int32 for `flags'.
- * src/cff/cffgload.c (cff_operator_seac): Use cast for assigning
- `adx' and `ady'.
- (cff_decoder_parse_charstrings): Use FT_ULong for third parameter.
- Use more casts.
- * src/cff/cffcmap.c (cff_cmap_unicode_init): Use cast for `count'.
-
- * src/cid/cidload.c (cid_read_subrs): Use FT_ULong for `len'.
- * src/cid/cidgload.c (cid_load_glyph): Add missing cast for
- `cid_get_offset'.
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings) <18>: Use
- cast for `num_points'.
- (t1_decoder_init): Use cast for assigning `decoder->num_glyphs'.
-
- * src/base/ftdebug.c (ft_debug_init): Use FT_Int.
- * include/freetype/internal/ftdriver.h (FT_Slot_LoadFunc): Use
- `FT_Int32' for fourth parameter.
- * src/base/ftobjs.c (open_face): Use cast for calling
- clazz->init_face.
-
- * src/raster/ftraster.c (Set_High_Precision): Use `1' instead of
- `1L'.
- (Finalize_Profile_Table, Line_Up, ft_black_init): Use casts.
- * src/raster/ftrend1.c (ft_raster1_render): Ditto.
-
- * src/sfnt/sfnt_dir_check: Compare `magic' with unsigned long
- constant.
-
-2002-09-26 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * builds/amiga/include/freetype/config/ftmodule.h: Updated.
-
-2002-09-25 David Turner <david@freetype.org>
-
- * src/autohint/ahtypes.h (AH_HINT_METRICS): Disabling metrics
- hinting in the auto-hinter. This produces much better anti-aliased
- text.
-
- * docs/CHANGES: Updating the changes documentation.
-
-2002-09-25 Anthony Fok <anthony@thizlinux.com>
-
- * src/sfnt/ttcmap0.c (tt_cmap4_validate, tt_cmap4_char_index,
- tt_cmap4_char_next): Added support for opens___.ttf (it contains a
- charmap that uses offset=0xFFFFU instead of 0x0000 to indicate a
- missing glyph).
-
-2002-09-21 Wolfgang Domröse <porthos.domroese@harz.de>
-
- * src/truetype/ttdriver.c (Load_Glyph): Fourth parameter must be
- FT_Int32.
- * src/truetype/ttgload.c, src/truetype/ttgload.h (TT_Load_Glyph):
- Ditto.
-
-2002-09-19 Wolfgang Domröse <porthos.domroese@harz.de>
-
- More 16bit fixes.
-
- * src/autohint/ahglobal.c (sort_values): Use FT_Pos for `swap'.
- (ah_hinter_compute_widths): Use FT_Pos for `dist'.
- Use AH_MAX_WIDTHS.
- * src/autohint/ahglyph.c (ah_outline_scale_blue_edges): Use FT_Pos
- for `delta'.
- (ah_outline_compute_edges): Replace some ints with FT_Int and
- FT_Pos.
- (ah_test_extrema): Clean up code.
- (ah_get_orientation): Use 4 FT_Int variables instead of FT_BBox to
- hold indices.
- * src/autohint/ahtypes.h (AH_SegmentRec): Change type of `score'
- to FT_Pos.
-
-2002-09-19 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/config.guess, builds/unix/config.sub: Updated to
- recent versions.
-
-2002-09-18 David Turner <david@freetype.org>
-
- * src/base/ftobjs.c (FT_Library_Version): Bugfix.
-
- * FreeType 2.1.3rc2 (release candidate 2) is released!
-
-2002-09-17 David Turner <david@freetype.org>
-
- * include/freetype/freetype.h, include/freetype/ftimage.h,
- include/freetype/ftstroker.h, include/freetype/ftsysio.h,
- include/freetype/ftsysmem.h, include/freetype/ttnameid.h: Updating
- the in-source documentation.
-
- * src/tools/docmaker/tohtml.py: Updating the HTML formatter in the
- DocMaker tool.
-
- * src/tools/docmaker.py: Removed.
-
-2002-09-17 Werner Lemberg <wl@gnu.org>
-
- More 16bit fixes.
-
- * src/psaux/psobjs.c (reallocate_t1_table): Use FT_Long for
- second parameter.
-
-2002-09-16 Werner Lemberg <wl@gnu.org>
-
- 16bit fixes from Wolfgang Domröse.
-
- * src/type1/t1parse.h (T1_ParserRec): Change type of `base_len'
- and `private_len' to FT_Long.
- * src/type1/t1parse.c (T1_Get_Private_Dict): Remove cast for
- `private_len'.
- * src/type1/t1load.c: Use FT_Int cast for most calls of T1_ToInt.
- Use FT_PtrDist where appropriate.
- (parse_encoding): Use FT_Long for `count' and `n'.
- (read_binary_data): Use FT_Long* for second parameter.
- * src/type1/t1afm.c (afm_atoindex): Use FT_PtrDist.
-
- * src/cache/ftcsbits.c (ftc_sbit_node_load): Remove unused label.
- * src/pshinter/pshalgo3.c (psh3_hint_align): Remove unused variable.
-
-2002-09-14 Werner Lemberg <wl@gnu.org>
-
- Making ftgrays.c compile stand-alone again.
-
- * include/freetype/ftimage.h: Include ft2build.h only if _STANDALONE_
- isn't defined.
- * src/smooth/ftgrays.c [_STANDALONE_]: Define ft_memset,
- FT_BEGIN_HEADER, FT_END_HEADER.
- (FT_MEM_ZERO): Define.
- (TRaster) [GRAYS_USE_GAMMA]: Use `unsigned char' instead of FT_Byte.
- (gray_render_span, gray_init_gamma): Don't use `FT_UInt'.
- Don't cast with `FT_Byte'.
- (grays_init_gamma): Don't use `FT_UInt'.
-
-2002-09-14 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftinit.c (FT_Add_Default_Modules): Improve error message.
- * src/pcf/pcfdriver.c (PCF_Face_Done): Improve tracing message.
- * include/freetype/config/ftoption.h (FT_MAX_MODULES): Increased
- to 32.
-
-2002-09-10 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/configure.ac (version_info): Set to 9:2:3.
- * builds/unix/configure: Regenerated.
- * docs/VERSION.DLL: Updated.
-
-2002-09-09 David Turner <david@freetype.org>
-
- * src/pshinter/pshalgo2.c (psh2_glyph_find_strong_points),
- src/pshinter/pshalgo3.c (psh3_glyph_find_strong_points): Adding fix
- to prevent segfault when hints are provided in an empty glyph.
-
- * src/cache/ftccache.i (GEN_CACHE_LOOKUP) [FT_DEBUG_LEVEL_ERROR]:
- Removed conditional code. This fixes a bug that prevented
- compilation in debug mode of template instantiation.
-
- * include/freetype/ftimage.h: Removed incorrect `zft_' definitions
- and updated constants documentation comments.
-
- * src/cff/cffparse.c (cff_parser_run): Fixed the CFF table loader.
- It didn't accept empty arrays, and this prevented the loading of
- certain fonts.
-
- * include/freetype/freetype.h (FT_FaceRec): Updating documentation
- comment. The `descender' value is always *negative*, not positive.
-
-2002-09-09 Owen Taylor <owen@redhat.com>
-
- * src/pcf/pcfdriver.c (PCF_Glyph_Load): Fixing incorrect computation
- of bitmap metrics.
-
-2002-09-08 David Turner <david@freetype.org>
-
- Various updates to correctly support sub-pixel rendering.
-
- * include/freetype/config/ftmodule.h: Add two renderers for LCD.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Updated.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_lcd,
- ft_smooth_render_lcd_v): Set FT_PIXEL_MODE_LCD and
- FT_PIXEL_MODE_LCD_V, respectively.
-
- * include/freetype/cache/ftcimage.h (FTC_ImageTypeRec): New
- structure.
- Updated all users.
- (FTC_ImageDesc): Removed.
- (FTC_ImageCache_Lookup): Second parameter is now of type
- `FTC_ImageType'.
- Updated all users.
- (FTC_IMAGE_DESC_COMPARE): Updated and renamed to...
- (FTC_IMAGE_TYPE_COMPARE): This.
- (FTC_IMAGE_DESC_HASH): Updated and renamed to...
- (FTC_IMAGE_TYPE_HASH): This.
-
- * include/freetype/cache/ftcsbits.h (FTC_SBitRec): Field `num_grays'
- replaced with `max_grays'.
- `pitch' is now FT_Short.
- (FTC_SBitCache_Lookup): Second parameter is now of type
- `FTC_ImageType'.
- Updated all users.
-
- * src/cache/ftcimage.c (FTC_ImageQueryRec, FTC_ImageFamilyRec):
- Updated.
- (ftc_image_node_init): Updated.
- Moved code to convert type flags to load flags to...
- (FTC_Image_Cache_Lookup): This function.
- (ftc_image_family_init): Updated.
-
- * src/cache/ftcsbits.c (FTC_SBitQueryRec, FTC_SBitFamilyRec):
- Updated.
- (ftc_sbit_node_load): Updated.
- Moved code to convert type flags to load flags to...
- (FTC_SBitCache_Lookup): This function.
-
- * src/autohint/ahtypes.h (AH_HinterRec): Replace `no_*_hints' with
- `do_*_snapping'.
- Update all users (with negation).
- * src/autohint/ahhint.c (ah_compute_stem_width): Fix threshold for
- `dist' for `delta' < 40.
-
- * src/pshinter/pshalgo3.h (PSH3_GlyphRec): Replace `no_*_hints' with
- `do_*_snapping'.
- Update all users (with negation).
- * src/pshinter/pshalgo3.c (psh3_dimension_quantize_len): New
- function.
- (psh3_hint_align): Use it.
- Improve hinting code.
- [STRONGER]: Removed.
- (STRONGER): Removed.
-
- * include/freetype/freetype.h (FT_Set_Hint_Flags, FT_HINT_*):
- Removed.
-
-2002-09-05 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidobjs.c (CID_Size_Init): Renamed to...
- (cid_size_init): This.
- * src/psaux/psobjs.c (T1_Builder_Add_Point1): Renamed to...
- (t1_builder_add_point1): This.
-
- Updated all affected code.
-
- * src/pshinter/pshalgo3.c (psh3_hint_align): Fix compiler warnings.
- * src/type1/t1gload.c (T1_Compute_Max_Advance): Ditto.
-
-2002-09-04 David Turner <david@freetype.org>
-
- * include/freetype/freetype.h: Corrected the definition of
- ft_encoding_symbol to be FT_ENCODING_MS_SYMBOL (instead of
- the erroneous FT_ENCODING_SYMBOL).
-
- * builds/unix/unix-def.in (datadir): Initialize it (thanks to
- Anthony Fok).
-
-2002-08-29 David Turner <david@freetype.org>
-
- Slight modification to the Postscript hinter to slightly increase
- the contrast of smooth hinting. This is very similar to what the
- auto-hinter does when it comes to stem width computations. However,
- it produces better results with well-hinted fonts.
-
- * include/freetype/internal/psaux.h (T1_Decoder_FuncsRec): Add hint
- mode to `init' member function.
- (T1_DecoderRec): Add hint mode.
- * include/freetype/internal/pshints (T1_Hints_ApplyFunc,
- T2_Hints_ApplyFunc): Pass `hint_mode', not `hint_flags'.
- * src/psaux/t1decode.c (t1_decoder_init): Add hint mode argument.
- * src/pshinter/pshalgo1.c (ps1_hints_apply): Pass hint mode, not
- hint flags.
- * src/pshinter/pshalgo2.c (ps2_hints_apply): Ditto.
- * src/pshinter/pshalgo3.c (ps3_hints_apply): Ditto.
- (STRONGER): New macro.
- (psh3_hint_align, psh3_hint_table_align_hints): Pass `glyph' instead
- of `hint_flags'.
- Implement announced changes.
- * src/pshinter/pshalgo3.h (PSH3_GlyphRec): Add flags to control
- vertical and horizontal hints and snapping.
-
- * README, docs/CHANGES: Updating for the 2.1.3 release.
-
-2002-08-27 David Turner <david@freetype.org>
-
- * Massive re-formatting changes to many, many source files. I don't
- want to list them all here. The operations performed were all
- logical transformations of the sources:
-
- - trying to convert all enums and constants to CAPITALIZED_STYLE,
- #with define definitions like
-
- #define my_old_constants MY_NEW_CONSTANT
-
- - big, big update of the documentation comments
-
- * include/freetype/freetype.h, src/base/ftobjs.c,
- src/smooth/ftsmooth.c, include/freetype/ftimage.h: Adding support
- for LCD-optimized rendering though the new constants/enums:
-
- FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
- FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
-
- This is still work in progress, don't expect everything to work
- correctly though most of the features have been implemented.
-
- * Adding new FT_LOAD_XXX flags, used to specify both hinting and
- rendering targets:
-
- FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
- FT_LOAD_TARGET_MONO :: monochrome bitmaps
- FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated
- hinting & rendering
- FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated
- hinting & rendering
-
- Note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
- behaviour of the font engine is _unchanged_.
-
- * include/freetype/ftimage.h
- (FT_Outline_{Move,Line,Conic,Cubic}To_Func): Renamed to...
- (FT_Outline_{Move,Line,Conic,Cubic}ToFunc): This.
- (FT_Raster_Span_Func): Renamed to ...
- (FT_SpanFunc): This.
- (FT_Raster_{New,Done,Reset,Set_Mode,Render}_Func): Renamed to ...
- (FT_Raster_{New,Done,Reset,SetMode,Render}Func}: This.
-
- Updated all affected code.
-
- * include/freetype/ftrender.h
- (FT_Glyph_{Init,Done,Transform,BBox,Copy,Prepare}_Func): Renamed
- to ...
- (FT_Glyph_{Init,Done,Transform,GetBBox,Copy,Prepare}Func): This.
- (FTRenderer_{render,transform,getCBox,setMode}): Renamed to ...
- (FT_Renderer_{RenderFunc,TransformFunc,GetCBoxFunc,SetModeFunc}):
- This.
-
- Updated all affected code.
-
- * src/autohint/ahtypes.h (AH_Point, AH_Segment, AH_Edge, AH_Globals,
- AH_Face_Globals, AH_Outline, AH_Hinter): These typedefs are now
- pointers to the corresponding `*Rec' structures. All source files
- have been updated accordingly.
-
- * src/cff/cffgload.c (cff_decoder_init): Add hint mode as parameter.
- * src/cff/cffgload.h (CFF_Decoder): Add `hint_mode' element.
-
- * src/cid/cidgload.c (CID_Compute_Max_Advance): Renamed to...
- (cid_face_compute_max_advance): This.
- (CID_Load_Glyph): Renamed to...
- (cid_slot_load_glyph): This.
- * src/cid/cidload.c (CID_Open_Face): Renamed to...
- (cid_face_open): This.
- * src/cid/cidobjs.c (CID_GlyphSlot_{Done,Init}): Renamed to...
- (cid_slot_{done,init}): This.
- (CID_Size_{Get_Globals_Funcs,Done,Reset): Renamed to...
- (cid_size_{get_globals_funcs,done,reset): This.
- (CID_Face_{Done,Init}): Renamed to...
- (cid_face_{done,init}): This.
- (CID_Driver_{Done,Init}: Renamed to...
- (cid_driver_{done,init}: This.
- * src/cid/cidparse.c (CID_{New,Done}_Parser): Renamed to...
- (cid_parser_{new,done}): This.
- * src/cid/cidparse.h (CID_Skip_{Spaces,Alpha}): Renamed to...
- (cid_parser_skip_{spaces,alpha}): This.
- (CID_To{Int,Fixed,CoordArray,FixedArray,Token,TokenArray}): Renamed
- to...
- (cid_parser_to_{int,fixed,coord_array,fixed_array,token,token_array}):
- This.
- (CID_Load_{Field,Field_Table): Renamed to...
- (cid_parser_load_{field,field_table}): This.
- * src/cid/cidriver.c (CID_Get_Interface): Renamed to...
- (cid_get_interface): This.
-
- Updated all affected code.
-
- * src/psaux/psobjs.c (PS_Table_*): Renamed to...
- (ps_table_*): This.
- (T1_Builder_*): Renamed to...
- (t1_builder_*): This.
- * src/psaux/t1decode.c (T1_Decoder_*): Renamed to...
- (t1_decoder_*): This.
-
- * src/psnames/psmodule.c (PS_*): Renamed to...
- (ps_*): This.
-
- Updated all affected code.
-
- * src/sfnt/sfdriver (SFNT_Get_Interface): Renamed to...
- (sfnt_get_interface): This.
- * src/sfnt/sfobjs.c (SFNT_*): Renamed to...
- (sfnt_*): This.
- * src/sfnt/ttcmap.c (TT_CharMap_{Load,Free}): Renamed to...
- (tt_face_{load,free}_charmap): This.
- * src/sfnt/ttcmap0.c (TT_Build_CMaps): Renamed to...
- (tt_face_build_cmaps): This.
- * src/sfnt/ttload.c (TT_*): Renamed to...
- (tt_face_*): This.
- * src/sfnt/ttpost.c (TT_Post_Default_Names): Renamed to...
- (tt_post_default_names): This.
- (Load_*): Renamed to...
- (load_*): This.
- (TT_*): Renamed to...
- (tt_face_*): This.
- * src/sfnt/ttsbit.c (TT_*): Renamed to...
- (tt_face_*): This.
- ({Find,Load,Crop}_*): Renamed to...
- ({find,load,crop}_*): This.
-
- Updated all affected code.
-
- * src/smooth/ftsmooth.c (ft_smooth_render): Renamed to...
- (ft_smooth_render_generic): This.
- Make function more generic by adding vertical and horizontal scaling
- factors.
- (ft_smooth_render, ft_smooth_render_lcd, ft_smooth_render_lcd_v):
- New functions.
-
- (ft_smooth_lcd_renderer_class, ft_smooth_lcdv_renderer_class): New
- classes.
-
- * src/truetype/ttobjs.c (TT_{Done,New}_GlyphZone): Renamed to...
- (tt_glyphzone_{done,new}): This.
- (TT_{Face,Size,Driver}_*): Renamed to...
- (tt_{face,size,driver}_*): This.
- * src/truetype/ttpload.c (TT_Load_Locations): Renamed to...
- (tt_face_load_loca): This.
- (TT_Load_Programs): Renamed to...
- (tt_face_load_fpgm): This.
- (TT_*): Renamed to...
- (tt_face_*): This.
-
-2002-08-27 Werner Lemberg <wl@gnu.org>
-
- * docs/VERSION.DLL: New file.
-
-2002-08-23 Graham Asher <graham.asher@btinternet.com>
-
- * src/cff/cffgload.c (cff_operator_seac)
- [FT_CONFIG_OPTION_INCREMENTAL]: Incremental fonts (actually not
- incremental in the case of CFF but just using callbacks to get glyph
- recipes) pass the character code, not the glyph index, to the
- get_glyph_data function; they have no valid charset table.
-
- * src/cff/cffload.c (cff_font_load): Removed special cases for
- FT_CONFIG_OPTION_INCREMENTAL, which are no longer necessary; CFF
- fonts provided via the incremental interface now have to conform
- more closely to the CFF font format.
-
- * src/cff/cffload.h (cff_font_load): Removed argument now unneeded.
-
- * src/cff/cffobjs.c (cff_face_init): Changed call to cff_font_load
- to conform with new signature.
-
-2002-08-22 David Turner <david@freetype.org>
-
- * src/base/ftobject.c, src/base/ftsynth.c, src/base/ftstroker.c,
- src/bdf/bdfdrivr.c: Removed compiler warnings.
-
-2002-08-21 Werner Lemberg <wl@gnu.org>
-
- * src/pshinter/pshalgo3.c (psh3_glyph_compute_inflections,
- psh3_glyph_compute_extrema, psh3_hint_table_find_strong_point): Fix
- compiler warnings and resolve shadowing of local variables.
-
-2002-08-21 David Turner <david@freetype.org>
-
- The automatic and Postscript hinter now automatically detect
- inflection points in glyph outlines and treats them specially. This
- is very useful to prevent nasty effect like the disappearing
- diagonals of `S' and `s' in many, many fonts.
-
- * src/autohint/ahtypes.h (ah_flag_inflection): New macro.
- * src/autohint/ahangles.c (ah_angle_diff): New function.
- * src/autohint/ahangles.h: Updated.
- * src/autohint/ahglyph.c (ah_outline_compute_inflections): New
- function.
- (ah_outline_detect_features): Use it.
- * src/autohint/ahhint.c (ah_hinter_align_strong_points)
- [!AH_OPTION_NO_WEAK_INTERPOLATION]: Handle inflection.
-
- * src/tools/docmaker/docmaker.py, src/tools/docmaker/utils.py,
- src/tools/docmaker/tohtml.py: Updating the DocMaker tool.
-
- * include/freetype/freetype.h: Changing the type of the `load_flags'
- parameter from `FT_Int' to `FT_Int32', this in order to support more
- options. This should only break binary and/or source compatibility
- on 16-bit platforms (Atari?).
- (FT_LOAD_NO_AUTOHINT): New macro.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Updated.
- Handle FT_LOAD_NO_AUTOHINT.
- (FT_Load_Char): Updated.
-
- * src/pshinter/pshalgo3.c, src/base/ftobjs.c, src/base/ftobject.c,
- src/autohint/ahglyph.c, include/freetype/freetype.h: Fixing typos
- and removing compiler warnings.
-
-2002-08-20 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (TT_Get_Metrics): Add guard for k = 0.
-
-2002-08-20 David Turner <david@freetype.org>
-
- * src/pshinter/pshalgo1.c, src/pshinter/pshalgo2.c,
- src/pshinter/pshglob.c, src/pshinter/pshrec.c,
- src/autohint/ahmodule.c [DEBUG_HINTER]: Removing compiler warnings
- (only used in development builds anyway).
-
- Improve support of local extrema and stem edge points.
-
- * src/pshinter/pshalgo3.h (PSH3_Hint_TableRec): Use PSH3_ZoneRec
- for `zones'.
- (PSH3_DIR_UP, PSH3_DIR_DOWN): Exchange values.
- (PSH3_DIR_HORIZONTAL, PSH3_DIR_VERTICAL): New macros.
- (PSH3_DIR_COMPARE, PSH3_DIR_IS_HORIZONTAL, PSH3_IS_VERTICAL): New
- macros.
- (PSH3_POINT_INFLEX): New enum.
- (psh3_point_{is,set}_{off,inflex}): New macros.
- (PSH3_POINT_{EXTREMUM,POSITIVE,NEGATIVE,EDGE_MIN,EDGE_MAX): New
- enum values.
- (psh3_point_{is,set}_{extremum,positive,negative,edge_min,edge_max}):
- New macros.
- (PSH3_PointRec): New members `flags2' and `org_v'.
- (PSH3_POINT_EQUAL_ARG, PSH3_POINT_ANGLE): New macros.
-
- * src/pshinter/pshalgo3.c [DEBUG_HINTER]: Removing compiler
- warnings.
- (COMPUTE_INFLEXS): New macro.
- (psh3_hint_align): Simplify some basic arithmetic computations.
- (psh3_point_is_extremum): Removed.
- (psh3_glyph_compute_inflections) [COMPUTE_INFLEXS]: New function.
- (psh3_glyph_init) [COMPUTE_INFLEXS]: Use it.
- (psh3_glyph_compute_extrema): New function.
- (PSH3_STRONG_THRESHOLD): Increased to 30.
- (psh3_hint_table_find_strong_point): Improved.
- (psh3_glyph_find_strong_points,
- psh3_glyph_interpolate_strong_points): Updated.
- (psh3_hints_apply): Use psh3_glyph_compute_extrema.
-
- * test/gview.c (draw_ps3_hint, ps3_draw_control_points): New
- functions.
- Other small updates.
-
- * Jamfile: Small updates.
-
-2002-08-18 Arkadiusz Miskiewicz <misiek@pld.ORG.PL>
-
- * builds/unix/install.mk (install, uninstall): Add $(DESTDIR) to
- make life easier for package maintainers.
-
-2002-08-18 Werner Lemberg <wl@gnu.org>
-
- * src/pcf/pcfdriver.c (PCF_Glyph_Load): Fix computation of
- horiBearingX.
- * src/bdf/bdfdrivr.c (BDF_Glyph_Load): Fix computation of
- horiBearingY.
-
-2002-08-16 George Williams <gww@silcom.com>
-
- Add support for Apple composite glyphs.
-
- * include/freetype/config/ftoption.h
- (TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED): New macro.
-
- * src/truetype/ttgload.c (OVERLAP_COMPOUND, SCALED_COMPONENT_OFFSET,
- UNSCALED_COMPONENT_OFFSET): New macros for additional OpenType
- glyph loading flags.
- (load_truetype_glyph): Implement it.
-
-2002-08-16 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffgload.c (cff_free_glyph_data),
- src/cff/cffload.c (cff_font_load): Use FT_UNUSED.
-
-2002-08-15 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Initialize `error'.
- * src/sfnt/sfobjs.c (SFNT_Load_Face): Fix compiler warning.
-
-2002-08-15 Graham Asher <graham.asher@btinternet.com>
-
- Implemented the incremental font loading system for the CFF driver.
- Tested using the GhostScript-to-FreeType bridge (under development).
-
- * src/cff/cffgload.c (cff_get_glyph_data, cff_free_glyph_data): New
- functions.
- (cff_operator_seac, cff_compute_max_advance, cff_slot_load): Use
- them.
- * src/cff/cffload.c (cff_font_load): Add `face' parameter.
- Load charset and encoding only if there are glyphs.
- [FT_CONFIG_OPTION_INCREMENTAL]: Incremental fonts don't need
- character recipes.
- * src/cff/cffload.h, src/cff/cffobjs.c: Updated.
-
- * src/cid/cidgload.c (cid_load_glyph)
- [FT_CONFIG_OPTION_INCREMENTAL]: Corrected the incremental font
- loading implementation to use the new system introduced on
- 2002-08-01.
-
-2002-08-06 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffcmap.c: Remove compiler warnings.
- * src/cache/ftccache.c, src/cache/ftccache.i,
- src/pfr/pfrload.c, src/pfr/pfrgload.c: s/index/idx/.
- * src/cff/cffload.c: s/select/fdselect/.
- * src/raster/ftraster.c: s/wait/waiting/.
-
-2002-08-01 Graham Asher <graham.asher@btinternet.com>
-
- * src/type1/t1load.c (T1_Open_Face): Tolerate a face with no
- charstrings if there is an incremental loading interface. Type 1
- faces supplied by PostScript interpreters like GhostScript will
- typically not provide any charstrings at load time, so this is
- essential if they are to work.
-
-2002-08-01 Graham Asher <graham.asher@btinternet.com>
-
- Modified incremental loading interface to be closer to David's
- preferences. The header freetype.h is not now affected, the
- interface is specified via an FT_Parameter, the pointer to the
- interface is hidden in an internal part of the face record, and all
- the definitions are in ftincrem.h.
-
- * include/freetype/freetype.h [FT_CONFIG_OPTION_INCREMENTAL]:
- Removed.
- * include/freetype/internal/ftobjs.h [FT_CONFIG_OPTION_INCREMENTAL]:
- Include FT_INCREMENTAL_H.
- (FT_Face_InternalRec) [FT_CONFIG_OPTION_INCREMENTAL]: Add
- `incremental_interface'.
-
- * src/base/ftobjs.c (open_face, FT_Open_Face)
- [FT_CONFIG_OPTION_INCREMENTAL]: Updated.
- * src/sfnt/sfobjs.c (SFNT_Load_Face) [FT_CONFIG_OPTION_INCREMENTAL]:
- Updated.
-
- * src/truetype/ttgload.c (load_truetype_glyph)
- [FT_CONFIG_OPTION_INCREMENTAL]: Updated.
- Free loaded glyph data properly.
- (compute_glyph_metrics, TT_Load_Glyph)
- [FT_CONFIG_OPTION_INCREMENTAL]: Updated.
- * src/truetype/ttobjs.c (TT_Face_Init)
- [FT_CONFIG_OPTION_INCREMENTAL]: Updated.
-
- * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String)
- [FT_CONFIG_OPTION_INCREMENTAL]: Updated.
- (T1_Parse_Glyph) [FT_CONFIG_OPTION_INCREMENTAL]: Updated.
- Free loaded glyph data properly.
- (T1_Load_Glyph): Updated.
- [FT_CONFIG_OPTION_INCREMENTAL]: Free loaded glyph data properly.
-
-2002-07-30 David Turner <david@freetype.org>
-
- * include/freetype/ftincrem.h: Adding new experimental header file
- to demonstrate a `cleaner' API to support incremental font loading.
-
- * include/freetype/config/ftheader.h (FT_INCREMENTAL_H): New macro.
-
- * src/tools/docmaker/*: Adding new (more advanced) version of
- the DocMaker tool, using Python's sophisticated regexps.
-
-2002-07-28 Werner Lemberg <wl@gnu.org>
-
- s/ft_memset/FT_MEM_SET/.
- s/FT_MEM_SET/FT_MEM_ZERO/ where appropriate.
-
-2002-07-27 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttload.c (sfnt_dir_check): Make it work with TTCs.
-
-2002-07-26 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (load_truetype_glyph)
- [FT_CONFIG_OPTION_INCREMENTAL]: s/memset/ft_memset/.
-
- * src/autohint/ahhint.c (ah_hint_edges_3): Fix compiler warning.
- * src/cff/cffload.c (cff_encoding_load): Remove `memory' variable.
- * src/cff/cffcmap.c (cff_cmap_encoding_init): Remove `psnames'
- variable.
- * src/truetype/ttgload.c (load_truetype_glyph): Remove statement
- without effect.
- * src/truetype/ttdriver (Get_Char_Index, Get_Next_Char): Removed.
-
- * src/pshinter/pshalgo3.c (psh3_hint_table_record,
- psh3_hint_table_init, psh3_hint_table_activate_mask): Fix error
- message.
-
-2002-07-24 Graham Asher <graham.asher@btinternet.com>
-
- * src/truetype/ttobjs.c: Fix for bug reported by Sven Neumann
- [sven@gimp.org] on the FreeType development forum: `If
- FT_CONFIG_OPTION_INCREMENTAL is undefined (this is the default), the
- TrueType loader crashes in line 852 of src/truetype/ttgload.c when
- it tries to access face->glyph_locations.'
-
-2002-07-18 Graham Asher <graham.asher@btinternet.com>
-
- Added types and structures to support incremental typeface loading.
- The FT_Incremental_Interface structure, defined in freetype.h, is
- designed to be passed to FT_Open_Face to provide callback functions
- to obtain glyph recipes and metrics, for fonts like those passed
- from PostScript that do not necessarily provide all, or any, glyph
- information, when first opened.
-
- * include/freetype/config/ftoption.h (FT_CONFIG_OPTION_INCREMENTAL):
- New configuration macro to enable incremental face loading. By
- default it is not defined.
-
- * include/freetype/freetype.h (FT_Basic_Glyph_Metrics,
- FT_Get_Glyph_Data_Func, FT_Get_Glyph_Metrics_Func,
- FT_Incremental_Interface_Funcs, FT_Incremental_Interface)
- [FT_CONFIG_OPTION_INCREMENTAL]: New.
- (FT_Open_Args, FT_FaceRec) [FT_CONFIG_OPTION_INCREMENTAL]: New field
- `incremental_interface'.
- (FT_Open_Flags) [FT_CONFIG_OPTION_INCREMENTAL]: New enum
- `ft_open_incremental'.
-
- * include/freetype/fttypes.h: Include FT_CONFIG_CONFIG_H.
- (FT_Data): New structure to represent binary data.
-
- * src/base/ftobjs.c (open_face) [FT_CONFIG_OPTION_INCREMENTAL]:
- Add parameter for incremental loading.
- (FT_Open_Face) [FT_CONFIG_OPTION_INCREMENTAL]: Use incremental
- interface.
-
- * src/truetype/ttgload.c (load_truetype_glyph)
- [FT_CONFIG_OPTION_INCREMENTAL]: Added the incremental loading system
- for the TrueType driver.
- (compute_glyph_metrics): Return FT_Error.
- [FT_CONFIG_OPTION_INCREMENTAL]: Check for overriding metrics.
- (TT_Load_Glyph) [FT_CONFIG_OPTION_INCREMENTAL]: Don't look for
- the glyph table while handling an incremental font.
- Get glyph offset.
-
- * src/truetype/ttobjs.c (TT_Face_Init)
- [FT_CONFIG_OPTION_INCREMENTAL]: Added the incremental loading
- system for the TrueType driver.
-
- * src/cid/cidgload.c (cid_load_glyph)
- [FT_CONFIG_OPTION_INCREMENTAL]: Added the incremental loading system
- for the CID driver.
-
- * src/sfnt/sfobjs.c (SFNT_Load_Face) [FT_CONFIG_OPTION_INCREMENTAL]:
- Changes to support incremental Type 42 fonts: Assume a font has
- glyphs if it has an incremental interface object.
-
- * src/type1/t1gload.c (T1_Parse_Glyph): Renamed to...
- (T1_Parse_Glyph_And_Get_Char_String): This.
- [FT_CONFIG_OPTION_INCREMENTAL]: Added support for incrementally
- loaded Type 1 faces.
- (T1_Parse_Glyph): New function.
- (T1_Load_Glyph): Updated.
-
-2002-07-17 David Turner <david@freetype.org>
-
- Cleaning up the cache sub-system code; linear hashing is now the
- default.
-
- * include/freetype/cache/ftccache.h, src/cache/ftccache.i,
- src/cache/ftccache.c [!FTC_CACHE_USE_LINEAR_HASHING]: Removed.
- (FTC_CACHE_USE_LINEAR_HASHING): Removed also.
-
- FT_CONFIG_OPTION_USE_CMAPS is now the default.
-
- * include/freetype/internal/ftdriver.h (FT_Driver_ClassRec): Remove
- `get_char_index' and `get_next_char'.
-
- * include/freetype/config/ftoption.h,
- include/freetype/internal/tttypes.h, src/base/ftobjs.c,
- src/bdf/bdfdrivr.c, src/cff/cffobjs.c, src/pcf/pcfdrivr.c,
- src/pfr/pfrdrivr.c, src/sfnt/sfobjs.c, src/sfnt/ttcmap0.c,
- src/sfnt/ttcmap0.h, src/sfnt/ttload.c, src/type1/t1objs.c,
- src/type42/t42objs.c, src/winfonts/winfnt.c
- [!FT_CONFIG_OPTION_USE_CMAPS]: Removed. The new cmap code is now
- the default.
-
- * src/type42/t42objs.c (T42_CMap_CharIndex, T42_CMap_CharNext):
- Removed.
- * src/type42/t42objs.h: Updated.
-
- * src/cid/cidriver.c (Cid_Get_Char_Index, Cid_Get_Next_Char):
- Removed.
- (t1cid_driver_class): Updated.
- * src/truetype/ttdriver.c (tt_driver_class): Updated.
- * src/type1/t1driver.c (Get_Char_Index, Get_Next_Char): Removed
- (t1_driver_class): Updated.
- * src/type42/t42drivr.c (t42_driver_class): Updated.
-
- * src/base/ftobjs.c (open_face): Select Unicode cmap by default.
-
- * src/sfnt/ttload.c (TT_Load_SFNT_Header): Fixed a recent bug that
- prevented OpenType fonts to be recognized by FreeType.
-
-2002-07-11 David Turner <david@freetype.org>
-
- Changing the SFNT loader to check for SFNT-based font files
- differently. We now ignore the range `helper' fields and check the
- `head' table's magic number instead.
-
- * include/freetype/internal/tttypes.h (SFNT_HeaderRec): Add `offset'
- field.
-
- * src/sfnt/ttload.c (sfnt_dir_check): New function.
- (TT_Load_SFNT_HeaderRec): Renamed to...
- (TT_Load_SFNT_Header): This.
- Implement new functionality.
- * src/sfnt/ttload.h: Updated.
- * src/sfnt/sfdriver.c (sfnt_interface): Updated.
-
- * src/base/ftobject.c, src/base/fthash.c: Updated object sub-system
- and dynamic hash table implementation (still experimental, don't
- use).
- * include/freetype/internal/fthash.h: Updated.
- * include/freetype/internal/ftobjs.h (FT_LibraryRec): New member
- `meta_class'.
-
- Fixing a bug in the Type 1 loader that prevented valid font bounding
- boxes to be loaded from multiple master fonts.
-
- * include/freetype/t1tables.h (PS_BlendRec): Add `bboxes' field.
-
- * include/freetype/internal/psaux.h (T1_FieldType): Add
- `T1_FIELD_TYPE_BBOX'.
- (T1_FieldLocation): Add `T1_FIELD_LOCATION_BBOX'.
- (T1_FIELD_BBOX): New macro.
-
- * src/psaux/psobjs.c (PS_Parser_LoadField): Handle T1_FIELD_TYPE_BBOX.
- * src/type1/t1load.c (t1_allocate_blend): Create blend->bboxes.
- (T1_Done_Blend): Free blend->bboxes.
- (t1_load_keyword): Handle T1_FIELD_LOCATION_BBOX.
- (parse_font_bbox): Commented out.
- (t1_keywords): Comment out `parse_font_bbox'.
- * src/type1/t1tokens.h: Define `FontBBox' field.
-
-2002-07-10 David Turner <david@freetype.org>
-
- * src/cff/cffobjs.c: Small fix to select the Unicode charmap by
- default when needed.
- Small fix to allow OpenType fonts to support Adobe charmaps when
- needed.
-
- * src/cff/cffcmap.c, src/cff/cffcmap.h: New files to support
- charmaps for CFF fonts.
-
- * src/cff/cff.c, src/cff/Jamfile, src/cff/rules.mk: Updated.
-
- * include/freetype/internal/cfftypes.h (CFF_EncodingRec): Use
- fixed-length arrays for `sids' and `codes'. Add `count' member.
- (CFF_FontRec): Add `psnames' member.
-
- * src/cff/cffdrivr.c, src/cff/cffload.c, src/cff/cffload.h,
- src/cff/cffobjs.c, src/cff/cffobjs.h, src/cff/cffparse.c,
- src/cffparse.h, src/cff/cffgload.c, src/cff/cffgload.h: Adding
- support for CFF charmaps, reformatting the sources, and removing
- some bugs in the Encoding and Charset loaders.
- Many fonts renamed to use lowercase only:
-
- CFF_Builder_Init -> cff_builder_init
- CFF_Builder_Done -> cff_builder_done
- CFF_Init_Decoder -> cff_decoder_init
- CFF_Parse_CharStrings -> cff_decoder_parse_charstrings
- CFF_Load_Glyph -> cff_slot_load
- CFF_Init_Decoder -> cff_decoder_init
- CFF_Prepare_Decoder -> cff_decoder_prepare
- CFF_Get_Standard_Encoding -> cff_get_standard_encoding
- CFF_Access_Element -> cff_index_access_element
- CFF_Forget_Element -> cff_index_forget_element
- CFF_Get_Name -> cff_index_get_name
- CFF_Get_String -> cff_index_get_sid_string
- CFF_Get_FD -> cff_fd_select_get
- CFF_Done_Charset -> cff_charset_done
- CFF_Load_Charset -> cff_charset_load
- CFF_Done_Encoding -> cff_encoding_done
- CFF_Load_Encoding -> cff_encoding_load
- CFF_Done_SubFont -> cff_subfont_done
- CFF_Load_Font -> cff_font_load
- CFF_Done_Font -> cff_font_done
- CFF_Size_Get_Globals_Funcs -> cff_size_get_globals_funcs
- CFF_Size_Done -> cff_size_done
- CFF_Size_Init -> cff_size_init
- CFF_Size_Reset -> cff_size_reset
- CFF_GlyphSlot_Done -> cff_slot_done
- CFF_GlyphSlot_Init -> cff_slot_init
- CFF_StrCopy -> cff_strcpy
- CFF_Face_Init -> cff_face_init
- CFF_Face_Done -> cff_face_done
- CFF_Driver_Init -> cff_driver_init
- CFF_Driver_Done -> cff_driver_done
- CFF_Parser_Init -> cff_parser_init
- CFF_Parser_Run -> cff_parser_run
-
- add_point -> cff_builder_add_point
- add_point1 -> cff_builder_add_point1
- add_contour -> cff_builder_add_contour
- close_contour -> cff_builder_close_contour
- cff_explicit_index -> cff_index_get_pointers
-
-2002-07-09 Owen Taylor <owen@redhat.com>
-
- * src/pshinter/pshglob.c (psh_globals_new): Fixed a bug that
- prevented the hinter from using correct standard width and height
- values, resulting in hinting bugs with certain fonts (e.g. Utopia).
-
-2002-07-07 David Turner <david@freetype.org>
-
- * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Added code to return
- successfully when the function is called with a bitmap glyph (the
- previous code simply returned with an error).
-
- * docs/DEBUG.TXT: Adding debugging support documentation.
-
- * src/base/ftdebug.c (ft_debug_init), builds/win32/ftdebug.c
- (ft_debug_init), builds/amiga/src/ftdebug.c (ft_debug_init): Changed
- the syntax of the FT2_DEBUG environment variable used to control
- debugging output (i.e. logging and error messages). It must now
- look like:
-
- any:6 memory:4 io:3 or
- any:6,memory:4,io:3 or
- any:6;memory:4;io:3
-
-2002-07-07 Owen Taylor <owen@redhat.com>
-
- * src/pshinter/pshglob.c (psh_blues_snap_stem): Adding support for
- blue fuzz.
- * src/pshinter/pshglob.h (PSH_BluesRec): Add `blue_fuzz' field.
- * src/type1/t1load.c (T1_Open_Face): Initialize `blue_fuzz'.
-
- Adding support for hinter-specific bit flags, and the new
- FT_Set_Hint_Flags high-level API.
-
- * include/freetype/freetype.h (FT_Set_Hint_Flags): New function.
- (FT_HINT_NO_INTEGER_STEM, FT_HINT_NO_HSTEM_ALIGN,
- FT_HINT_NO_VSTEM_ALIGN): New macros.
-
- * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): Add
- `hint_flags' member.
-
- * src/base/ftobjs.c (FT_Set_Hint_Flags): New function.
-
- * include/freetype/internal/psaux.h (T1_DecoderRec): Add `hint_flags'
- member.
-
- * include/freetype/internal/pshints.h (T1_Hints_ApplyFunc,
- T2_Hints_ApplyFunc): Add parameter to pass hint flags.
-
- * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings,
- T1_Decoder_Init): Use decoder->hint_flags.
- * src/cff/cffgload.h (CFF_Builder): Add `hint_flags' field.
- * src/cff/cffgload.c (CFF_Builder_Init): Set builder->hint_flags.
- (CFF_Parse_CharStrings): Updated.
- * src/pshinter/pshalgo1.c (ps1_hints_apply): Add parameter to handle
- hint flags (unused).
- * src/pshinter/pshalgo1.h: Updated.
- * src/pshinter/pshalgo2.c (ps2_hints_apply): Add parameter to handle
- hint flags (unused).
- * src/pshinter/pshalgo2.h: Updated.
- * src/pshinter/pshalgo3.c (ps3_hints_apply): Add parameter to handle
- hint flags.
- * src/pshinter/pshalgo3.h: Updated.
-
-2002-07-04 David Turner <david@freetype.org>
-
- * src/pfr/pfrobjs.c (pfr_slot_load): Fixed a small bug that returned
- incorrect advances when the outline resolution was different from
- the metrics resolution.
-
- * src/autohint/ahhint.c: Removing compiler warnings.
-
- * src/autohint/ahglyph.c: s/FT_MEM_SET/FT_ZERO/ where appropriate.
- (ah_outline_link_segments): Slight improvements to the serif
- detection code. More work is needed though.
-
-2002-07-03 David Turner <david@freetype.org>
-
- Small improvements to the automatic hinter. Uneven stem-widths have
- now disappeared and everything looks much better, even if there are
- still issues with serifed fonts.
-
- * src/autohint/ahtypes.h (AH_Globals): Added `stds' array.
- * src/autohint/ahhint.c (OPTIM_STEM_SNAP): New #define.
- (ah_snap_width): Commented out.
- (ah_align_linked_edge): Renamed to...
- (ah_compute_stem_width): This.
- Don't allow uneven stem-widths.
- (ah_align_linked_edge): New function.
- (ah_align_serifed_edge): Don't strengthen serifs.
- (ah_hint_edges_3, ah_hinter_scale_globals): Updated.
-
-2002-07-03 Owen Taylor <owen@redhat.com>
-
- Adding new algorithm based on Owen Taylor's recent work.
-
- * src/pshinter/pshalgo3.c, src/pshinter/pshalgo3.h: New files.
- * src/pshinter/pshalgo.h: Updated.
- Use pshalgo3 by default.
- * src/pshinter/pshinter.c: Include pshalgo3.c.
-
- * src/pshinter/Jamfile, src/pshinter/rules.mk: Updated.
-
-2002-07-01 Owen Taylor <owen@redhat.com>
-
- * src/pshinter/pshalgo2.c (psh2_glyph_find_strong_points): Fix a bug
- where, if a glyph has more than hint mask, the second mask gets
- applied to points that should have been covered by the first mask.
-
-2002-07-01 Keith Packard <keithp@keithp.com>
-
- * src/sfnt/ttcmap0.c (tt_cmap8_char_next, tt_cmap12_char_next):
- Fixing the cmap 8 and 12 parsing routines.
-
-2002-07-01 David Turner <david@freetype.org>
-
- * src/base/ftsynth.c: Include FT_TRIGONOMETRY_H.
- (FT_Outline_Embolden): Renamed to...
- (FT_GlyphSlot_Embolden): This.
- Updated to new trigonometric functions.
- (FT_Outline_Oblique): Renamed to...
- (FT_GlyphSlot_Oblique): This.
- (ft_norm): Removed.
- * include/freetype/ftsynth.h: Updated.
-
-2002-06-26 David Turner <david@freetype.org>
-
- * include/freetype/internal/ftobject.h: Updating the object
- sub-system definitions (still experimental).
-
- * src/base/fthash.c (ft_hash_remove): Fixing a small reallocation
- bug.
-
- * src/base/fttrigon.c (FT_Vector_From_Polar, FT_Angle_Diff): New
- functions.
- * include/freetype/fttrigon.h: Updated.
-
-
- Adding path stroker component (work in progress).
-
- * include/freetype/ftstroker.h, src/base/ftstroker.c: New files.
- * src/base/Jamfile: Updated.
-
- * include/freetype/config/ftheader.h (FT_STROKER_H): New macro.
-
-
- * src/truetype/ttgload.c (TT_Load_Composite_Glyph),
- src/base/ftoutln.c (FT_Vector_Transform): Fixed Werner's latest fix.
- FT_Vector_Transform wasn't buggy, the TrueType composite loader was.
-
-2002-06-24 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 3.
-
-2002-06-21 David Turner <david@freetype.org>
-
-
- * Version 2.1.2 released.
- =========================
-
-
-2002-06-21 Roberto Alameda <ojancano@geekmail.de>.
-
- * include/freetype/internal/t42types.h (T42_Font): Removed since
- it is already in t42objs.h.
- (T42_Face): Use T1_FontRec.
-
- * src/base/fttype1.c (FT_Get_PS_Font_Info): Updated.
- (FT_Has_PS_Glyph_Names): Check for type42 driver name also.
- * src/type42/t42objs.h: Include FT_INTERNAL_TYPE42_TYPES_H.
- (T42_Face): Removed since it is already in t42types.h.
-
-2002-06-21 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * src/pfrgload.c (pfr_glyph_load_compound): Fix loading of composite
- glyphs.
-
-2002-06-21 Sven Neumann <sven@convergence.de>
-
- * src/pfr/pfrtypes.h (PFR_KernPair): New structure.
- (PFR_PhyFont): Use it.
- (PFR_KernFlags): New enumeration.
- * src/pfr/pfrload.c (pfr_extra_item_load_kerning_pairs): New
- function.
- (pfr_phy_font_extra_items): Use it.
- (pfr_phy_font_done): Updated.
- * src/pfr/pfrobjs.c (pfr_face_init): Set kerning flag conditionally.
- (pfr_face_get_kerning): New function.
- * src/pfr/pfrobjs.h: Updated.
- * src/pfr/pfrdrivr.c (pfr_driver_class): Updated.
-
-2002-06-21 David Turner <david@freetype.org>
-
- * README, docs/CHANGES: Preparing the 2.1.2 release.
-
-2002-06-19 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * src/base/fttype1.c: Include FT_INTERNAL_TYPE42_TYPES_H.
- (t1_face_check_cast): Removed.
- (FT_Get_PS_Font_Info): Make it work with CID and Type 42 drivers
- also.
-
-2002-06-19 Sebastien BARRE <http://barre.nom.fr/contact.html#email>
-
- * src/type42/t42parse.c (t42_parse_sfnts): Fix compiler warning.
-
-2002-06-19 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftoutln.c (FT_Vector_Transform): Fix serious typo
- (xy <-> yx).
- * src/truetype/ttgload.c (load_truetype_glyph): Replace `|' with
- `||' to make code easier to read.
-
-2002-06-18 Roberto Alameda <ojancano@geekmail.de>.
-
- * src/type42/t42objs.c (t42_check_size_change): Removed.
- (T42_Size_SetChars, T42_Size_SetPixels): Use FT_Activate_Size
- instead.
- (T42_GlyphSlot_Load): Remove call to t42_check_size_change.
-
-2002-06-18 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * src/psaux/t1cmap.c (t1_cmap_custom_char_index,
- t1_cmap_custom_char_next): Fix index computation -- indices start
- with 0 and not with cmap->first.
-
- Provide default charmaps.
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init), src/pcf/pcfdriver.c
- (PCF_Face_Init), src/pfr/pfrobjs.c (pfr_face_init),
- src/type1/t1objs (T1_Face_Init), src/winfonts/winfnt.c
- (FNT_Face_Init): Implement it.
-
-2002-06-17 Sven Neumann <sven@gimp.org>
-
- * src/pfr/pfrobjs.c (pfr_face_init): Fix typo.
-
-2002-06-16 Leonard Rosenthol <leonardr@lazerware.com>
-
- Updated Win32/VC++ projects to include the new PFR driver.
-
- * builds/win32/visualc/freetype.dsp: Updated.
-
-2002-06-16 Anthony Fok <fok@debian.org>
-
- Install freetype2.m4.
-
- * builds/unix/install.mk (install, uninstall): Handle it.
-
-2002-06-16 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- Same fix for PFR driver.
-
- * src/pfr/pfrcmap.c (pfr_cmap_char_index, pfr_cmap_char_next):
- Increase return value by 1.
- * src/pfr/pfrobjs.c (pfr_slot_load): Decrease index by 1.
-
-2002-06-15 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- Fix glyph indices to make index zero always the undefined glyph.
-
- * src/bdf/bdfdrivr.c (bdf_cmap_init): Don't decrease
- cmap->num_encodings.
- (bdf_cmap_char_index, bdf_cmap_char_next, BDF_Get_Char_Index):
- Increase result by 1 for normal cases.
- (BDF_Glyph_Load): Decrease index by 1.
-
- * src/pcf/pcfdriver.c (pcf_cmap_char_index, pcf_cmap_char_next,
- PCF_Char_Get_Index): Increase result by 1 for normal cases.
- (PCF_Glyph_Load): Decrease index by 1.
- * src/pcf/pcfread.c (pcf_get_encodings): Don't decrease j for
- allocating `encoding'.
-
- * src/base/ftobjs.c (FT_Load_Glyph, FT_Get_Glyph_Name): Fix
- bounding tests.
-
-2002-06-14 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- Add new cmap support to BDF driver.
-
- * src/bdf/bdfdrivr.c (BDF_CMapRec) [FT_CONFIG_OPTION_USE_CMAPS]:
- New structure.
- (bdf_cmap_init, bdf_cmap_done, bdf_cmap_char_index,
- bdf_cmap_char_next) [FT_CONFIG_OPTION_USE_CMAPS]: New functions.
- (BDF_Get_Char_Index) [!FT_CONFIG_OPTION_USE_CMAPS]: Use only
- conditionally.
- (BDF_Face_Init): Handle `AVERAGE_WIDTH' and `POINT_SIZE' keywords.
- Implement new cmap handling.
- (bdf_driver_class): Updated.
-
-2002-06-14 Werner Lemberg <wl@gnu.org>
-
- * Makefile, configure, */*.mk, builds/unix/unix-def.in,
- docs/CHANGES, docs/INSTALL: s/TOP/TOP_DIR/.
-
-2002-06-12 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdflib.c: s/FT_Short/short/ for consistency.
-
-2002-06-11 David Turner <david@freetype.org>
-
- * builds/win32/ftdebug.c: Added a missing #endif.
-
- * src/sfnt/ttload.c, src/bdf/bdflib.c: Removing compiler warnings.
-
- Removed the bug in Type 42 driver that prevented un-hinted outlines
- to be loaded.
-
- * src/type42/t42objs.c (T42_Face_Init): Call FT_Done_Size.
- (T42_Size_Init): Call FT_Activate_Size.
- (t42_check_size_change): New function.
- (T42_Size_SetChars, T42_Size_SetPixels): Use it.
- (ft_glyphslot_clear): Replace FT_MEM_SET with FT_ZERO.
- (T42_GlyphSlot_Load): Use t42_check_size_change.
- Initialize more fields of `glyph'.
-
- * builds/win32/visualc/freetype.dsp: Updated.
-
-2002-06-09 David Turner <david@freetype.org>
-
-
- * Version 2.1.1 released.
- =========================
-
-
-2002-06-08 Juliusz Chroboczek <jch@pps.jussieu.fr>
-
- * include/freetype/internal/ftobjs.h, src/autohint/ahglyph.c,
- src/base/ftobjs.c, src/sfnt/ttcmap0.c, src/smooth/ftgrays.c: Don't
- use `setjmp', `longjmp', and `jmp_buf' but `ft_setjmp', `ft_longjmp',
- and `ft_jmp_buf'.
- Removed direct references to <stdio.h> and <setjmp.h> when
- appropriate, to eventually replace them with a
- FT_CONFIG_STANDARD_LIBRARY_H. Useful for the XFree86 Font Server
- backend based on FT2.
-
- * src/base/fttype1.c (FT_Has_PS_Glyph_Names): Fix return value.
-
-2002-06-08 David Turner <david@freetype.org>
-
- * src/pcf/pcfdriver.c (pcf_cmap_char_next): Fixed a bug that caused
- the function to return invalid values.
-
- * src/cache/ftccache.i: Removing a typo that prevented
- the source's compilation.
-
- * src/cache/ftccache.c (ftc_node_hash_unlink): Fixed a
- bug that caused nasty memory overwrites. The hash table's
- buckets array wasn't correctly resized when shrunk.
-
-2002-06-08 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * builds/amiga/smakefile, builds/amiga/makefile: Updated.
-
-2002-06-08 Werner Lemberg <wl@gnu.org>
-
- * src/cache/ftccache.c (ftc_node_hash_unlink, ftc_node_hash_link)
- [FTC_CACHE_USE_LINEAR_HASHING]: Fix returned error code.
- Fix debugging messages.
- * src/cache/ftccache.i (GEN_CACHE_LOOKUP): Move declaration of
- `family' and `hash' up to make it compilable with g++.
-
- * src/type42/t42error.h: New file.
- * src/type42/t42drivr.c, src/type42/t42objs.c,
- src/type42/t42parse.c: Use t42 error codes.
- * src/type42/rules.mk: Updated.
-
- * src/base/ftnames.c: Include FT_INTERNAL_STREAM_H.
-
-2002-06-08 David Turner <david@freetype.org>
-
- * src/cache/ftccmap.c: GEN_CACHE_FAMILY_COMPARE,
- GEN_CACHE_NODE_COMPARE, GEN_CACHE_LOOKUP) [FTC_CACHE_USE_INLINE]:
- New macros.
- (ftc_cmap_cache_lookup) [!FTC_CACHE_USE_INLINE]: Typedef to
- ftc_cache_lookup.
- (FTC_CMapCache_Lookup): Updated.
-
- Adding various experimental optimizations to the cache manager.
-
- * include/freetype/cache/ftccache.h (FTC_CACHE_USE_INLINE,
- FTC_CACHE_USE_LINEAR_HASHING): New options.
- (FTC_CacheRec) [FTC_CACHE_USE_LINEAR_HASHING]: New elements `p',
- `mask', and `slack'.
-
- * src/cache/ftccache.c (FTC_HASH_MAX_LOAD, FTC_HASH_MIN_LOAD,
- FTC_HASH_SUB_LOAD) [FTC_CACHE_USE_LINEAR_HASHING,
- FTC_HASH_INITIAL_SIZE]: New macros.
- (ftc_node_mru_link, ftc_node_mru_up): Optimized.
- (ftc_node_hash_unlink, ftc_node_hash_link)
- [FTC_CACHE_USE_LINEAR_HASHING]: New variants.
- (FTC_PRIMES_MIN, FTC_PRIMES_MAX, ftc_primes, ftc_prime_closest,
- FTC_CACHE_RESIZE_TEST, ftc_cache_resize)
- [!FTC_CACHE_USE_LINEAR_HASHING]: Define it conditionally.
- (ftc_cache_init, ftc_cache_clear) [FTC_CACHE_USE_LINEAR_HASHING]:
- Updated.
- (ftc_cache_lookup) [FTC_CACHE_USE_LINEAR_HASHING]: Implement it.
-
- * src/cache/ftccache.i: New file.
-
- * src/cache/ftcsbits.c (GEN_CACHE_FAMILY_COMPARE,
- GEN_CACHE_NODE_COMPARE, GEN_CACHE_LOOKUP) [FTC_CACHE_USE_INLINE]:
- New macros.
- (ftc_sbit_cache_lookup) [!FTC_CACHE_USE_INLINE]: Typedef to
- ftc_cache_lookup.
- (FTC_SBitCache_Lookup): Updated.
-
- * src/type42/t42parse.c: Removing duplicate function.
-
-2002-06-07 Graham Asher <graham.asher@btinternet.com>
-
- * src/base/ftobjs.c (FT_Render_Glyph_Internal): Changed definition
- from FT_EXPORT_DEF to FT_BASE_DEF.
-
-2002-06-07 David Turner <david@freetype.org>
-
- Fixed the bug that prevented the correct display of fonts with
- `ftview'.
-
- * src/type42/t42drivr.c: Split into...
- * src/type42/t42drivr.h, src/type42/t42parse.c,
- src/type42/t42parse.h, src/type42/t42objs.h, src/type42/t42objs.c,
- src/type42/type42.c: New files.
-
- (t42_get_glyph_name, t42_get_ps_name, t42_get_name_index): Use
- `face->type1'.
-
- (Get_Interface): Renamed to...
- (T42_Get_Interface): This.
- Updated.
- (T42_Open_Face, T42_Face_Done): Updated.
- (T42_Face_Init): Add new cmap support.
- Updated.
- (T42_Driver_Init, T42_Driver_Done, T42_Size_Init, T42_Size_Done,
- T42_GlyphSlot_Init, T42_GlyphSlot_Done): Updated.
- (Get_Char_Index, Get_Next_Char): Renamed to...
- (T42_CMap_CharIndex, T42_CMap_CharNext): This.
- Updated.
- (T42_Char_Size, T42_Pixel_Size): Renamed to...
- (T42_Size_SetChars, T42_Size_SetPixels): This.
- (T42_Load_Glyph): Renamed to...
- (T42_GlyphSlot_Load): This.
-
- (t42_init_loader, t42_done_loader): Renamed to...
- (t42_loader_init, t42_loader_done): This.
- (T42_New_Parser, T42_Finalize_Parser): Renamed to...
- (t42_parser_init, t42_parser_done): This.
- (parse_dict): Renamed to...
- (t42_parse_dict): This.
- (is_alpha, is_space, hexval): Renamed to...
- (t42_is_alpha, t42_is_space, t42_hexval): This.
- (parse_font_name, parse_font_bbox, parse_font_matrix,
- parse_encoding, parse_sfnts, parse_charstrings, parse_dict):
- Renamed to...
- (t42_parse_font_name, t42_parse_font_bbox, t42_parse_font_matrix,
- t42_parse_encoding, t42_parse_sfnts, t42_parse_charstrings,
- t42_parse_dict): This.
- Updated.
-
- (t42_keywords): Updated.
-
- * src/type42/Jamfile, src/type42/descrip.mms: Updated.
-
-2002-06-03 Werner Lemberg <wl@gnu.org>
-
- Add 8bpp support to BDF driver.
-
- * src/bdf/bdflib.c (_bdf_parse_start): Handle 8bpp.
- * src/bdf/bdfdrivr.c (BDF_Glyph_Load): Ditto.
- * src/bdf/README: Updated.
-
-2002-06-02 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * src/pfr/pfrload.c (pfr_phy_font_done): Free `blue_values' array.
-
-2002-05-29 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * src/bdf/bdflib.c (_bdf_readstream): Allocate `buf' dynamically.
- (_bdf_parse_glyphs): Use correct size for allocating
- `font->unencoded'.
- (bdf_load_font): Free array conditionally.
- Return proper error code in case of failure.
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Make it more robust against
- unusual fonts.
-
-2002-05-29 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/descrip.mms, src/type42/descrip.mms: New files.
- * descrip.mms (all): Updated.
-
- * src/bdf/bdflib.c (_bdf_parse_glyphs): Fix typo which prevented
- compilation.
- * src/pshglob.c (psh_blues_scale_zones): Fix compiler warning.
-
-2002-05-28 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * builds/amiga/makefile, builds/amiga/smakefile,
- amiga/include/freetype/config/ftmodule.h: Updated to include
- support for BDF and Type42 drivers.
-
- * docs/modules.txt: Updated.
-
-2005-05-28 David Turner <david@freetype.org>
-
- * docs/CHANGES: Updating file for next release (2.1.1).
-
- * src/bdf/bdflib.c: Removing compiler warnings.
-
- * include/freetype/ftxf86.h, src/base/ftxf86.c: New files.
- They provide a new API (FT_Get_X11_Font_Format) to retrieve an
- X11-compatible string describing the font format of a given face.
- This was put in a new optional base source file, corresponding to a
- new public header (named FT_XFREE86_H since this function should
- only be used within the XFree86 font server IMO).
-
- * include/freetype/config/ftheader.h (FT_XFREE86_H): New macro (not
- documented yet).
-
- * src/base/fttype1.c: New file, providing two new API functions
- (FT_Get_PS_Font_Info and FT_Has_PS_Glyph_Names).
- * include/freetype/t1tables.h: Updated.
-
- * src/base/Jamfile, src/base/rules.mk, src/base/descrip.mms:
- Updating build control files for the new files `ftxf86.c' and
- `fttype1.c' in src/base.
-
- * src/pshinter/pshglob.c (psh_blues_scale_zones): Fixed a bug that
- prevented family blue zones substitution from happening correctly.
-
- * include/freetype/ftbdf.h FT_Get_BDF_Charset_ID): Adding
- documentation comment.
-
-2002-05-28 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftnames.c (FT_Get_Sfnt_Name): Don't use FT_STREAM_READ_AT
- but FT_STREAM_READ.
- Declare `stream' variable.
-
- * src/bdf/bdflib.c (_bdf_parse_glyphs): Replace floating point math
- with calls to `FT_MulDiv'.
-
-2002-05-28 David Turner <david@freetype.org>
-
- Fixing the SFNT name table loader to support various buggy fonts.
- It now ignores empty name entries, entries with invalid pointer
- Offsets and certain fonts containing tables with broken
- `storageOffset' fields.
-
- Name strings are now loaded on demand, which reduces the memory
- requirements for a given FT_Face tremendously (for example, the name
- table of Arial.ttf is about 10Kb and contains 70 names).
-
- This is a temporary fix. The whole name table loader and interface
- will be rewritten in a much more cleanly way shortly, once CSEH have
- been introduced in the sources.
-
- * include/freetype/internal/tttypes.h (TT_NameEntryRec): Change
- type of `stringOffset' to FT_ULong.
- (TT_NameTableRec): Change type of `numNameRecords' and
- `storageOffset' to FT_UInt.
- Replace `storage' with `stream'.
- * src/base/ftnames.c (FT_Get_Sfnt_Name): Load name on demand.
- * src/sfnt/sfdriver.c (get_sfnt_postscript_name): Ditto.
- Make code more robust.
- * src/sfnt/sfobjs.c (TT_NameEntry_ConvertFunc): New typedef.
- (tt_face_get_name): Use it.
- Make code more robust.
- * src/sfnt/ttload.c (TT_Load_Names): Use `static' for arrays.
- Handle invalid `storageOffset' data better.
- Set length fields to zero for invalid or ignored data.
- Remove code within FT_DEBUG_LEVEL_TRACE.
- (TT_Free_Names): Updated.
-
-2002-05-24 Tim Mooney <enchanter@users.sourceforge.net>
-
- * builds/unix/ft-munmap.m4: New file, extracted FT_MUNMAP_DECL and
- FT_MUNMAP_PARAM from aclocal.m4 into here, so aclocal.m4 can be
- rebuilt from sources. Set macro serial to 1, and use third argument
- to AC_DEFINE for our two custom symbols, so ftconfig.in could one day
- be rebuilt with autoheader (not recommended now, ftconfig.in is a
- custom source file)
-
-2002-05-22 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/config/ftheader.h (FT_BEZIER_H): Removed.
- (FT_BDF_H): New macro for accessing `ftbdf.h'.
-
- * src/type42/t42drivr.c (hexval): Fix typo.
-
-2002-05-21 Martin Muskens <mmuskens@aurelon.com>
-
- * src/psaux/psobjs.c (T1Radix): New function.
- (t1_toint): Use it to handle numbers in radix format.
-
- * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings): Add dummy
- for undocumented, obsolete opcode 15.
-
-2002-05-21 David Turner <david@freetype.org>
-
- * src/bdf/bdflib.c: Removed compiler warning, and changed all tables
- to the `static const' storage specifier (instead of simply
- `static').
-
- * src/type42/t42drivr.c (hexval): Use more efficient code.
- Removing compiler warnings.
- * src/bdf/bdfdrivr.c: Removing compiler warnings.
-
- * include/freetype/internal/ftbdf.h, src/base/ftbdf.c,
- src/base/descrip.mms, src/base/Jamfile, src/base/rules.mk
- (FT_Get_BDF_Charset_ID): New API to retrieve BDF-specific strings
- from a face. This is much cleaner than accessing the internal types
- `BDF_Public_Face' defined in FT_INTERNAL_BDF_TYPES_H.
-
-2002-05-21 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/README: Mention Microsoft's SBIT tool.
-
- * src/cff/cffdrivr.c, src/cid/cidriver.c, src/pcf/pcfdriver.c,
- src/truetype/ttdriver.c, src/type1/t1driver.c,
- src/winfonts/winfnt.c, src/type42/t42drivr.c, src/bdf/bdfdrivr.c
- [FT_CONFIG_OPTION_DYNAMIC_DRIVERS]: Completely removed. It has
- been never used.
-
-2002-05-21 Roberto Alameda <ojancano@geekmail.de>.
-
- * src/type42/t42drivr.c: s/T42_ENCODING_TYPE_/T1_ENCODING_TYPE_/.
- (parse_font_matrix): Remove unnecessary code.
- (parse_sfnts): Initialize some variables.
- (t42_driver_class) [TT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Use
- ft_module_driver_has_hinter conditionally.
- Moved some type 42 specific structure definitions to...
- * include/freetype/internal/t42types.h: New file.
- * include/freetype/internal/internal.h (FT_INTERNAL_T42_TYPES_H):
- New macro.
-
-2002-05-20 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/cache/ftcsbits.h (FTC_SBit): Added a new field
- `num_grays' for specifying the number of used gray levels.
- * src/cache/ftcsbits.c (ftc_sbit_node_load): Initialize it.
-
-2002-05-19 Werner Lemberg <wl@gnu.org>
-
- Adding a driver for BDF fonts written by Francesco Zappa Nardelli
- <Francesco.Zappa.Nardelli@ens.fr>. Heavily modified by me to
- better adapt it to FreeType, removing unneeded stuff. Additionally,
- it now supports Mark Leisher's BDF extension for anti-aliased
- bitmap glyphs with 2 and 4 bpp.
-
- * src/bdf/*: New driver.
- * include/freetype/internal/bdftypes.h: New file.
- * include/freetype/internal/fttrace.h: Added BDF driver components.
- * include/freetype/fterrdef.h: Added error codes for BDF driver.
- * include/freetype/config/ftmodule.h, src/Jamfile: Updated.
- * include/freetype/internal/internal.h (FT_INTERNAL_BDF_TYPES_H):
- New macro.
-
- * include/freetype/config/ftstdlib.h (ft_sprintf): New alias for
- sprintf.
-
-2002-05-18 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/fttrace.h: Added Type 42 driver
- component.
- * src/type42/t42drivr.c: Use it.
-
- * include/freetype/internal/internal.h (FT_INTERNAL_PCF_TYPES_H):
- New macro.
-
-2002-05-17 Werner Lemberg <wl@gnu.org>
-
- * src/type42/Jamfile: New file.
-
-2002-05-14 Werner Lemberg <wl@gnu.org>
-
- Adding a driver for Type42 fonts written by Roberto Alameda
- <ojancano@geekmail.de>.
-
- * src/type42/*: New driver.
- * include/freetype/config/ftmodule.h, src/Jamfile: Updated.
- * include/freetype/config/ftstdlib.h (ft_xdigit, ft_memcmp,
- ft_atoi): New aliases for xdigit, memcmp, and atoi, respectively.
-
-2002-05-12 Owen Taylor <otaylor@redhat.com>
-
- * src/sfnt/ttload.c (TT_LookUp_Table): Protect against tables
- with a zero length value.
-
-2002-05-12 Michael Pfeiffer <michael.pfeiffer@utanet.at>
-
- * builds/beos/beos.mk: Include `link-std.mk'.
-
-2002-05-12 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.h (T1_Loader): Renamed to...
- (T1_LoaderRec): This.
- (T1_Loader): Now pointer to T1_LoaderRec.
- * src/type1/t1load.c: Updated.
-
- * include/freetype/internal/t1types.h, src/type1/t1load.c,
- src/type1/t1objs.c:
- s/T1_ENCODING_TYPE_EXPORT/T1_ENCODING_TYPE_EXPERT/.
-
-2002-05-06 Werner Lemberg <wl@gnu.org>
-
- * README: Add a note regarding libttf vs. libfreetype.
-
-2002-05-05 Werner Lemberg <wl@gnu.org>
-
- FreeType 2 can now be built in an external directory with the
- configure script also.
-
- * builds/freetype.mk (INCLUDES): Add `OBJ_DIR'.
-
- * builds/unix/detect.mk (have_mk): New variable to test for
- external build.
- (unix-def.mk): Defined according to value of `have_mk'.
- * builds/unix/unix.mk (have_mk): New variable to test for
- external build.
- Select include paths for unix-def.mk and unix-cc.mk according
- to value of `have_mk'.
- * builds/unix/unix-def.in (OBJ_BUILD): New variable.
- (DISTCLEAN): Use it.
- * builds/unix/unix-cc.in (LIBTOOL): Define default value only
- if not yet defined.
- * builds/unix/install.mk (install): Use `OBJ_BUILD' for installing
- freetype-config.
-
- * configure: Don't depend on bash features.
- (ft2_dir, abs_curr_dir, abs_ft2_dir): New variables (code
- partially taken from Autoconf).
- Build a dummy Makefile if not building in source tree.
-
- * docs/INSTALL: Document it.
-
-2002-05-04 David Turner <david@freetype.org>
-
- * src/truetype/ttgload.c (TT_Load_Glyph): Finally fixing the last
- bug that prevented FreeType 2.x and FreeType 1.x to produce
- bit-by-bit identical monochrome glyph bitmaps with native TrueType
- hinting. The culprit was a single-bit flag that wasn't set
- correctly by the TrueType glyph loader.
-
- * src/otlayout/otlayout.h, src/otlayout/otlbase.c,
- src/otlayout/otlbase.h, src/otlayout/otlconf.h,
- src/otlayout/otlgdef.c, src/otlayout/otlgdef.h,
- src/otlayout/otlgpos.c, src/otlayout/otlgpos.h,
- src/otlayout/otlgsub.c, src/otlayout/otlgsub.h,
- src/otlayout/otljstf.c, src/otlayout/otljstf.h,
- src/otlayout/otltable.c, src/otlayout/otltable.h,
- src/otlayout/otltags.h: New OpenType Layout source files. The
- module is still incomplete.
-
-2002-05-02 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttcmap0.c (tt_cmap4_char_index): Fix serious typo
- (0xFFFU -> 0xFFFFU).
-
-2002-05-01 Werner Lemberg <wl@gnu.org>
-
- * docs/INSTALL: Fix URL of makepp.
-
-2002-05-01 David Turner <david@freetype.org>
-
- * src/sfnt/sfobjs.c (tt_face_get_name): Fixing a bug that caused
- FreeType to crash when certain broken fonts (e.g. `hya6gb.ttf')
- were opened.
-
- * src/sfnt/ttload.c (TT_Load_Names): Applied a small work-around to
- manage fonts containing a broken name table (e.g. `hya6gb.ttf').
-
- * src/sfnt/ttcmap0.c (tt_cmap4_validate): Fixed over-restrictive
- validation test. The charmap validator now accepts overlapping
- ranges in format 4 charmaps.
-
- * src/sfnt/ttcmap0.c (tt_cmap4_char_index): Switched to a binary
- search algorithm. Certain fonts contain more than 170 distinct
- segments!
-
- * include/freetype/config/ftstdlib.h: Adding an alias for the `exit'
- function. This will be used in the near future to panic in case of
- unexpected exception (which shouldn't happen in theory).
-
- * include/freetype/internal/fthash.h, src/base/fthash.c: New files.
- This is generic implementation of dynamic hash tables using a linear
- algorithm (to get rid of `stalls' during resizes). In the future
- this will be used in at least three parts of the library: the cache
- sub-system, the object sub-system, and the memory debugger.
-
- * src/base/Jamfile: Updated.
-
- * include/freetype/internal/internal.h (FT_INTERNAL_HASH_H,
- FT_INTERNAL_OBJECT_H): New macros.
-
- * include/freetype/internal/ftcore.h: New file to group all new
- definitions related to exception handling and memory management. It
- is very likely that this file will disappear or be renamed in the
- future.
-
- * include/freetype/internal/ftobject.h, include/freetype/ftsysmem.h:
- Adding comments to better explain the object sub-system as well as
- the new memory manager interface.
-
-2002-04-30 Wenlin Institute (Tom Bishop) <wenlin@wenlin.com>
-
- * src/base/ftmac.c (p2c_str): Removed.
- (file_spec_from_path) [TARGET_API_MAC_CARBON]: Added support for
- OS X.
- (is_dfont) [TARGET_API_MAC_CARBON]: Define only for OS X.
- Handle `nameLen' <= 6 also.
- (parse_fond): Remove unused variable `name_table'.
- Use functionality of old p2c_str directly.
- Add safety checks.
- (read_lwfn): Initialize `size_p'.
- Check for size_p == NULL.
- (new_memory_stream, open_face_from_buffer): Updated to FreeType 2.1.
- (FT_New_Face_From_LWFN): Remove unused variable `memory'.
- Remove some dead code.
- (FT_New_Face_From_SFNT): Remove unused variable `stream'.
- (FT_New_Face_From_dfont) [TARGET_API_MAC_CARBON]: Define only for
- OS X.
- (FT_New_Face_From_FOND): Remove unused variable `error'.
- (ResourceForkSize): New function.
- (FT_New_Face): Use it.
- Handle empty resource forks.
- Conditionalize some code for OS X.
- Add code to call normal loader as a fallback.
-
-2002-04-30 Werner Lemberg <wl@gnu.org>
-
- `interface' is reserved on the Mac.
-
- * include/freetype/ftoutln.h, include/freetype/internal/sfnt.h,
- src/base/ftoutln.c: s/interface/func_interface/.
- * src/base/ftbbox.c (FT_Outline_Get_BBox):
- s/interface/bbox_interface/.
- * src/cff/cffdrivr.c: s/interface/module_interface/.
- * src/cff/cffload.c, src/cff/cffload.h:
- s/interface/psnames_interface/.
- * src/cid/cidriver.c: s/interface/cid_interface/.
- * src/sfnt/sfdriver.c: s/interface/module_interface/.
- * src/smooth/ftgrays.c: s/interface/func_interface/.
- * src/truetype/ttdriver.c: s/interface/tt_interface/.
- * src/type1/t1driver.c: s/interface/t1_interface/.
-
- Some more variable renames to avoid troubles on the Mac.
-
- * src/raster/ftraster.c:
- s/Unknown|Ascending|Descending|Flat/\1_State/.
- * src/smooth/ftgrays.c: s/TScan/TCoord/.
-
- Other changes for the Mac.
-
- * include/freetype/config/ftconfig.h: Define FT_MACINTOSH for
- Mac platforms.
- * src/base/ftobjs.c: s/macintosh/FT_MACINTOSH/.
-
- * src/raster/ftrend1.c (ft_raster1_render): Make `pitch' always
- an even number.
-
-2002-04-29 Jouk Jansen <joukj@hrem.stm.tudelft.nl>
-
- * descrip.mms (all): Add pfr driver.
-
-2002-04-28 Werner Lemberg <wl@gnu.org>
-
- * src/pfr/pfrerror.h: New file.
- * include/freetype/ftmoderr.h: Add PFR error codes.
- * src/pfr/pfrgload.c: Include pfrerror.h.
- Use PCF error codes.
- (pfr_extra_item_load_stem_snaps): Fix debug message.
- * src/pfr/pfrgload.c: Include pfrerror.h.
- Use PCF error codes.
- (pfr_extra_item_load_bitmap_info, pfr_glyph_load_simple,
- pfr_glyph_load_compound): Fix debug message.
- * src/pfr/pfrobjs.c: Include pfrerror.h.
- Use PCF error codes.
- (pfr_face_init): Return PFR_Err_Unknown_File_Format.
- * src/pfr/rules.mk (PFR_DRV_H): Include pfrerror.h.
-
- * src/pcf/pcfdriver.c (PCF_Face_Init) [!FT_CONFIG_OPTION_USE_CMAPS]:
- `root' -> `face->root'.
- * src/sfnt/ttcmap0.c (TT_Build_CMaps) [!FT_CONFIG_OPTION_USE_CMAPS]:
- Removed.
- * src/sfnt/ttcmap0.c: Declare TT_Build_CMaps only for
- FT_CONFIG_OPTION_USE_CMAPS.
-
-2002-04-27 Werner Lemberg <wl@gnu.org>
-
- * src/cache/ftccache.c (ftc_cache_lookup),
- src/cache/ftccmap.c (ftc_cmap_family_init),
- src/cache/ftcmanag.c (ftc_family_table_alloc),
- src/cache/ftcsbits.c (FTC_SBit_Cache_Lookup): Use FTC_Err_*.
- src/cache/ftcimage.c (FTC_Image_Cache_Lookup): Use FTC_Err_*.
- (FTC_ImageCache_Lookup): Fix handling of invalid arguments.
-
-2002-04-22 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/configure.ac: Set `version_info' to 9:1:3 (FT2
- version 2.0.9 has 9:0:3).
- * builds/unix/configure: Regenerated (using autoconf 2.53).
-
-2002-04-19 Werner Lemberg <wl@gnu.org>
-
- * src/pfr/pfrload.c (pfr_extra_items_parse): Fix debug message.
- (pfr_phy_font_load): s/size/Size/ for local variable to avoid
- compiler warning.
- * src/pfr/pfrobjs.c (pfr_face_init): Fix debug message.
- (pfr_slot_load): Remove redundant local variable.
-
-2002-04-19 David Turner <david@freetype.org>
-
- Adding a PFR font driver to the FreeType sources. Note that it
- doesn't support embedded bitmaps or kerning tables yet.
-
- src/pfr/*: New files.
-
- * include/freetype/config/ftmodule.h,
- include/freetype/internal/fttrace.h, src/Jamfile: Updated.
-
- * src/type1/t1gload.h (T1_Load_Glyph), src/type1/t1gload.c
- (T1_Load_Glyph): Fixed incorrect parameter sign-ness in callback
- function.
-
- * include/freetype/internal/ftmemory.h (FT_MEM_ZERO, FT_ZERO): New
- macros.
-
- * include/freetype/internal/ftstream.h (FT_NEXT_OFF3, FT_NEXT_UOFF3,
- FT_NEXT_OFF3_LE, FT_NEXT_UOFF3_LE): New macros to parse in-memory
- 24-bit integers.
-
-2002-04-18 David Turner <david@freetype.org>
-
- * src/base/ftobjs.c, builds/win32/ftdebug.c,
- builds/amiga/src/base/ftdebug.c: Version 2.1.0 couldn't be linked
- against applications in Win32 and Amiga builds due to changes to
- `src/base/ftdebug.c' that were not properly propagated to
- `builds/win32' and `builds/amiga'. This has been fixed.
-
- * include/freetype/internal/ftobject.h,
- include/freetype/internal/ftexcept.h, include/freetype/ftsysmem.h,
- include/freetype/ftsysio.h, src/base/ftsysmem.c, src/base/ftsysio.c:
- New experimental files.
-
-2002-04-17 David Turner <david@freetype.org>
-
-
- * Version 2.1.0 released.
- =========================
-
-
-2002-04-17 Michael Jansson <mjan@em2-solutions.com>
-
- * src/type1/t1gload.c (T1_Compute_Max_Advance): Fixed a small bug
- that prevented the function to return the correct value.
-
-2002-04-16 Francesco Zappa Nardelli <Francesco.Zappa.Nardelli@ens.fr>
-
- * src/pcf/pcfread.c (pcf_get_accel): Fix parsing of accelerator
- tables.
-
-2002-04-15 David Turner <david@freetype.org>
-
- * docs/FTL.txt: Formatting.
-
- * include/freetype/config/ftoption.h: Reduce the size of the
- render pool from 32kByte to 16kByte.
-
- * src/pcf/pcfread.c (pcf_seek_to_table_type): Remove compiler
- warning.
-
- * include/freetype/config/ftoption.h (FT_MAX_EXTENSIONS): Removed.
-
- * docs/CHANGES: Preparing 2.1.0 release.
-
-2002-04-13 Werner LEMBERG <wl@gnu.org>
-
- * src/cff/cffgload.c (CFF_Parse_CharStrings): s/rand/Rand/ to avoid
- compiler warning.
-
-2002-04-12 David Turner <david@freetype.org>
-
- * README.UNX: Updated the Unix-specific quick-compilation guide to
- warn about the GNU Make requirement at compile time.
-
- * include/freetype/config/ftstdlib.h,
- include/freetype/config/ftconfig.h,
- include/freetype/config/ftheader.h,
- include/freetype/internal/ftmemory.h,
- include/freetype/internal/ftobjs.h,
-
- src/autohint/ahoptim.c,
-
- src/base/ftdbgmem.c, src/base/ftdebug.c, src/base/ftmac.c,
- src/base/ftobjs.c, src/base/ftsystem.c,
-
- src/cache/ftcimage.c, src/cache/ftcsbits.c,
-
- src/cff/cffdrivr.c, src/cff/cffload.c, src/cff/cffobjs.c,
-
- src/cid/cidload.c, src/cid/cidparse.c, src/cid/cidriver.c,
-
- src/pcf/pcfdriver.c, src/pcf/pcfread.c,
-
- src/psaux/t1cmap.c, src/psaux/t1decode.c,
-
- src/pshinter/pshalgo1.c, src/pshinter/pshalgo2.c,
- src/pshinter/pshrec.c,
-
- src/psnames/psmodule.c,
-
- src/raster/ftraster.c,
-
- src/sfnt/sfdriver.c, src/sfnt/ttload.c,
-
- src/smooth/ftgrays.c,
-
- src/type1/t1afm.c, src/type1/t1driver.c, src/type1/t1gload.c,
- src/type1/t1load.c, src/type1/t1objs.c, src/type1/t1parse.c,
-
- builds/unix/ftconfig.in, builds/vms/ftconfig.h,
-
- builds/amiga/src/base/ftdebug.c:
-
- Added the new configuration file `ftstdlib.h' used to define
- aliases for all ISO C library functions used by the engine
- (e.g. strlen, qsort, setjmp, etc.).
-
- This eases the porting of FreeType 2 to environments like
- XFree86 modules/extensions.
-
- Also removed many #include <string.h>, #include <stdlib.h>, etc.
- from the engine's sources where they are not needed.
-
- * src/sfnt/ttpost.c: Use macro name for psnames.h.
-
-2002-04-12 Vincent Caron <v.caron@zerodeux.net>
-
- * configure, builds/detect.mk: Updated the build system to print
- a warning message in case GNU Make isn't used to build the library.
-
-2002-04-11 David Turner <david@freetype.org>
-
- * README, docs/CHANGES, Jamfile.in: Updates for the 2.1.0 release.
-
- * docs/FTL.txt: Updated license text to provide a preferred
- disclaimer and adjust copyright dates/extents.
-
- * include/freetype/cache/ftcglyph.h: Removing obsolete (and
- confusing) comment.
-
- * Jamfile.in: New file.
-
-2002-04-11 Maxim Shemanarev <mcseemagg@yahoo.com>
-
- * src/smooth/ftgrays.c (gray_hline): Minor optimization.
-
-2002-04-02 Werner Lemberg <wl@gnu.org>
-
- Fixes from the stable branch:
-
- * include/freetype/config/ftoption.h (FT_CONFIG_OPTION_OLD_CALCS):
- Removed.
- [FT_CONFIG_OPTION_OLD_CALCS]: Removed.
- * include/freetype/internal/ftcalc.h, src/base/ftcalc.c
- [FT_CONFIG_OPTION_OLD_CALCS]: Removed.
-
- * src/base/fttrigon.c (FT_Vector_Length): Change algorithm to match
- output of FreeType 1.
-
- * src/pshinter/pshglob.c (psh_globals_scale_widths): Fixed a small
- bug that created un-even stem widths when hinting Postscript fonts.
-
- * src/type1/t1driver.c, src/type1/t1parse.c: 16bit fixes.
-
-2002-04-01 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c: 16bit fixes.
- (TT_Load_Simple_Glyph): Improve debug messages.
- (load_truetype_glyph): Remove dead code.
- * src/truetype/ttinterp.c: 16bit fixes.
- * src/truetype/ttobjs.c: Ditto.
-
- * include/freetype/ftsnames.h, include/freetype/internal/sfnt.h,
- src/cff/cffload.h, src/psaux/psobjs.h, src/truetype/ttinterp.[ch],
- src/sfnt/ttpost.h: s/index/idx/.
-
-2002-03-31 Yao Zhang <yaoz@vidar.niaaa.nih.gov>
-
- * src/truetype/ttobjs.c (TT_Size_Init): Fix typo.
-
-2002-03-31 Werner Lemberg <wl@gnu.org>
-
- * src/otlayout/otlcommn.c, src/otlayout/otlcommn.h: s/index/idx/.
- * src/psaux/t1cmap.c: Ditto.
- * src/sfnt/ttcmap0.c: Ditto.
-
- * include/freetype/internal/tttypes.h,
- include/freetype/internal/sfnt.h (TT_Goto_Table_Func): Renamed to ...
- (TT_Loader_GotoTableFunc): This.
- * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings): Fix debug
- messages.
- * src/psnames/psmodule.c (psnames_interface)
- [!FT_CONFIG_OPTION_ADOBE_GLYPH_LIST]: Fix typo.
- * src/sfnt/sfdriver.c (get_sfnt_table): 16bit fix.
- * src/sfnt/ttcmap.c: 16bit fixes (0xFFFF -> 0xFFFFU).
- * src/sfnt/ttcmap0.c: 16bit fixes.
- (TT_Build_CMaps): Simplify debug messages.
- (tt_cmap12_char_next): Fix offset.
- * src/sfnt/ttload.c (TT_Load_Names, TT_Load_CMap): Fix debug
- messages.
- (TT_Load_OS2): 16bit fix.
-
-2002-03-30 David Turner <david@freetype.org>
-
- * include/freetype/internal/tttypes.h: Adding comments to some of
- the TT_FaceRec fields.
-
- * src/sfnt/ttcmap0.c (TT_Build_CMaps): Removed compiler warnings.
-
- * src/sfnt/sfobjs.c (tt_name_entry_ascii_from_{utf16,ucs4,other}:
- New functions.
- (tt_face_get_name): Use them to properly extract an ascii font name.
-
-2002-03-30 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/t1tables.h (t1_blend_max): Fix typo.
- * src/base/ftstream.c: Simplify FT_ERROR calls.
- * src/cff/cffdrivr.c (cff_get_glyph_name): Fix debug message.
-
- * src/cff/cffobjs.c (CFF_Driver_Init, CFF_Driver_Done)
- [TT_CONFIG_OPTION_EXTEND_ENGINE]: Removed.
- * src/cff/sfobjs.c (SFNT_Load_Face)
- [TT_CONFIG_OPTION_EXTEND_ENGINE]: Ditto.
- * src/truetype/ttobjs.c (TT_Init_Driver, TT_Done_Driver)
- [TT_CONFIG_OPTION_EXTEND_ENGINE]: Ditto.
-
- * src/truetype/ttdriver.c, src/truetype/ttobjs.c,
- src/truetype/ttobjs.h: Renaming driver functions to the
- FT_<Subject>_<Action> scheme:
-
- TT_Init_Driver => TT_Driver_Init
- TT_Done_Driver => TT_Driver_Done
- TT_Init_Face => TT_Face_Init
- TT_Done_Face => TT_Face_Done
- TT_Init_Size => TT_Size_Init
- TT_Done_Size => TT_Size_Done
- TT_Reset_Size => TT_Size_Reset
-
-2002-03-29 Werner Lemberg <wl@gnu.org>
-
- * builds/vms/ftconfig.h: Rename LOCAL_DEF and LOCAL_FUNC to
- FT_LOCAL and FT_LOCAL_DEF, respectively, as with other ftconfig.h
- files.
- * builds/unix/ftconfig.in: Add argument to FT_LOCAL and
- FT_LOCAL_DEF.
- * src/truetype/ttinterp.c: s/FT_Assert/FT_ASSERT/.
- * builds/unix/configure.ac: Temporarily deactivate creation of
- ../../Jamfile.
- * builds/unix/configure: Updated.
-
-2002-03-28 KUSANO Takayuki <AE5T-KSN@asahi-net.or.jp>
-
- * src/sfnt/sfdriver.c (get_sfnt_postscript_name): Fix serious typos.
-
-2002-03-28 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/psaux.h (PSAux_ServiceRec): Fix
- compiler warnings.
- * include/freetype/internal/t1types.h (T1_FaceRec): Use `const' for
- some members.
- * src/base/ftapi.c (FT_New_Memory_Stream): Fix typos.
- * src/psaux/t1cmap.c (t1_cmap_std_init, t1_cmap_unicode_init): Add
- cast.
- (t1_cmap_{standard,expert,custom,unicode}_class_rec): Use
- `FT_CALLBACK_TABLE_DEF'.
- * src/psaux/t1cmap.h: Updated.
- * src/sfnt/ttcmap0.c (TT_Build_CMaps): Use `ft_encoding_none'
- instead of zero.
- * src/type1/t1objs.c (T1_Face_Init): Use casts.
-
-2002-03-26 David Turner <david@freetype.org>
-
- * src/sfnt/sfdriver.c, src/sfnt/sfobjs.c, src/sfnt/ttcmap0.c:
- Fixed a small bug in the FT_CMaps support code.
-
-2002-03-25 David Turner <david@freetype.org>
-
- * src/truetype/ttinterp.c (Norm): Replaced with...
- (TT_VecLen): This.
- (TT_MulFix14, TT_DotFix14): New functions.
- (Project, Dual_Project, Free_Project, Compute_Point_Displacement,
- Ins_SHPIX, Ins_MIAP, Ins_MIRP): Use them.
- [FT_CONFIG_OPTION_OLD_CALCS]: Removed all code.
-
-2002-03-22 David Turner <david@freetype.org>
-
- * src/base/ftobjs.c, src/sfnt/ttcmap0.c, src/type1/t1objs.c:
- Various fixes to make the FT_CMaps support work correctly (more
- tests are still needed).
-
- * include/freetype/internal/ftobjs.h, src/sfnt/Jamfile,
- src/sfnt/rules.mk, src/sfnt/sfnt.c, src/sfnt/sfobjs.c,
- src/sfnt/ttload.c, src/sfnt/ttcmap0.c, src/sfnt/ttcmap0.h: Updated
- the SFNT charmap support to use FT_CMaps.
-
- * include/freetype/fterrdef.h: New file.
- * include/freetype/fterrors.h: Include it. It contains all error
- codes.
- * include/freetype/config/ftheader.h (FT_ERROR_DEFINITIONS_H): New
- macro.
-
- * include/freetype/internal/ftmemory.h, and a lot of other files:
- Changed the names of memory macros. Examples:
-
- MEM_Set => FT_MEM_SET
- MEM_Copy => FT_MEM_COPY
- MEM_Move => FT_MEM_MOVE
-
- ALLOC => FT_ALLOC
- FREE => FT_FREE
- REALLOC = >FT_REALLOC
-
- FT_NEW was introduced to allocate a new object from a _typed_
- pointer.
-
- Note that ALLOC_ARRAY and REALLOC_ARRAY have been replaced by
- FT_NEW_ARRAY and FT_RENEW_ARRAY which take _typed_ pointer
- arguments.
-
- This results in _lots_ of sources being changed, but makes the code
- more generic and less error-prone.
-
- * include/freetype/internal/ftstream.h, src/base/ftstream.c,
- src/cff/cffload.c, src/pcf/pcfread.c, src/sfnt/ttcmap.c,
- src/sfnt/ttcmap0.c, src/sfnt/ttload.c, src/sfnt/ttpost.c,
- src/sfnt/ttsbit.c, src/truetype/ttgload.c, src/truetype/ttpload.c,
- src/winfonts/winfnt.c: Changed the definitions of stream macros.
- Examples:
-
- NEXT_Byte => FT_NEXT_BYTE
- NEXT_Short => FT_NEXT_SHORT
- NEXT_UShortLE => FT_NEXT_USHORT_LE
- READ_Short => FT_READ_SHORT
- GET_Long => FT_GET_LONG
- etc.
-
- Also introduced the FT_PEEK_XXXX functions.
-
- * src/cff/cffobjs.c (CFF_Build_Unicode_Charmap): Removed commented
- out function.
- (find_encoding): Removed.
- (CFF_Face_Init): Remove charmap support.
-
- * include/freetype/config/ftoption.h (FT_CONFIG_OPTION_USE_CMAPS,
- TT_CONFIG_CMAP_FORMAT{0,2,4,6,8,10,12}): New macros to fine-tune
- support of cmaps.
-
-2002-03-21 David Turner <david@freetype.org>
-
- * src/base/ftobjs.c, src/pcf/pcfdriver.c, src/pcf/pcfread.c: Updated
- to new FT_CMap definitions.
-
- * src/psaux/t1cmap.h, src/psaux/t1cmap.c, src/type1/t1cmap.h,
- src/type1/t1cmap.c: Updating and moving the Type 1 FT_CMap support
- from `src/type1' to `src/psaux' since it is going to be shared by
- the Type 1 and CID font drivers.
-
- * src/psaux/Jamfile, src/psaux/psaux.c, src/psaux/psauxmod.c,
- src/psaux/rules.mk, include/freetype/internal/psaux.h: Added support
- for Type 1 FT_CMaps.
-
-2002-03-20 David Turner <david@freetype.org>
-
- * src/base/ftgloadr.c (FT_GlyphLoader_CheckSubGlyphs): Fixed a
- memory allocation bug that was due to un-careful renaming of the
- FT_SubGlyph type.
-
- * src/base/ftdbgmem.c (ft_mem_table_destroy): Fixed a small bug that
- caused the library to crash with Electric Fence when memory
- debugging is used.
-
- * Renaming stream macros. Examples:
-
- FILE_Skip => FT_STREAM_SKIP
- FILE_Read => FT_STREAM_READ
- ACCESS_Frame => FT_FRAME_ENTER
- FORGET_Frame => FT_FRAME_EXIT
- etc.
-
- * src/sfnt/sfdriver.c (get_sfnt_postscript_name): Fixed memory leak.
-
- * include/freetype/internal/ftobjs.h: Changing the definition of
- FT_CMap_CharNextFunc slightly.
-
- * src/cff/*.c: Updating CFF type definitions.
-
-2002-03-14 David Turner <david@freetype.org>
-
- * include/freetype/internal/autohint.h, src/autohint/ahmodule.c,
- src/base/ftapi.c, src/base/ftobjs.c: Updating the type definitions
- for the auto-hinter module.
-
- FT_AutoHinter_Interface => FT_AutoHinter_ServiceRec
- FT_AutoHinter_Interface* => FT_AutoHinter_Service
- etc.
-
- FT_AutoHinter_Get_Global_Func => FT_AutoHinter_GlobalGetFunc
- FT_AutoHinter_Done_Global_Func => FT_AutoHinter_GlobalDoneFunc
- etc.
-
- * ahloader.h [_STANDALONE_]: Removed all conditional code.
-
- * include/freetype/internal/cfftypes.h, src/cff/*.c: Updating the
- type definitions of the CFF font driver.
-
- CFF_Font => CFF_FontRec
- CFF_Font* => CFF_Font
- etc.
-
- * include/freetype/internal/fnttypes.h, src/winfonts/*.c: Updating
- type definitions of the Windows FNT font driver.
-
- * include/freetype/internal/ftdriver.h,
- include/freetype/internal/ftobjs.h, src/base/ftapi.c,
- src/base/ftobjs.c, src/cff/cffdrivr.c, src/cff/cffdrivr.h,
- src/cid/cidriver.c, src/cid/cidriver.h, src/pcf/pcfdriver.c,
- src/pcf/pcfdriver.h, src/truetype/ttdriver.c,
- src/truetype/ttdriver.h, src/type1/t1driver.c, src/type1/t1driver.h,
- src/winfonts/winfnt.c, src/winfonts/winfnt.h: Updating type
- definitions for font drivers.
-
- FTDriver_initFace => FT_Face_InitFunc
- FTDriver_initGlyphSlot => FT_Slot_InitFunc
- etc.
-
- * src/cid/cidobjs.c (CID_Face_Init): Remove dead code.
-
- * include/freetype/internal/ftobjs.h, src/base/ftobjs.c: Updated a
- few face method definitions:
-
- FT_PSName_Requester => FT_Face_GetPostscriptNameFunc
- FT_Glyph_Name_Requester => FT_Face_GetGlyphNameFunc
- FT_Name_Index_Requester => FT_Face_GetGlyphNameIndexFunc
-
- * src/base/ftapi.c: New file. It contains backward compatibility
- functions.
-
- * include/freetype/internal/psaux.h, src/cid/cidload.c,
- src/cidtoken.h, src/psaux/psobjs.c, src/psaux/psobjs.h,
- src/psaux/t1decode.c, src/type1/t1load.c, src/type1/t1tokens.h:
- Updated common PostScript type definitions.
- Renamed all enumeration values like to uppercase variants:
-
- t1_token_any => T1_TOKEN_TYPE_ANY
- t1_field_cid_info => T1_FIELD_LOCATION_CID_INFO
- etc.
-
- * include/freetype/internal/psglobal.h: Removed.
- * include/freetype/internal/pshints.h, src/pshinter/pshglob.h:
- Updated.
-
- * include/freetype/internal/tttypes.h,
- include/freetype/internal/sfnt.h, src/base/ftnames.c,
- src/cff/cffdrivr.c, src/sfnt/*.c, src/truetype/*.c: Updated
- SFNT/TrueType type definitions.
-
- * include/freetype/freetype.h, include/freetype/internal/ftgloadr.h:
- Updating type definitions for the glyph loader.
-
-2002-03-13 Antoine Leca <antoine@oriolnet.com>
-
- * include/freetype/config/ftoption.h: Changed the automatic
- detection of Microsoft C compilers to automatically support 64-bit
- integers only since revision 9.00 (i.e. >= Visual C++ 2.0).
-
-2002-03-08 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftutil.c (FT_Realloc): Use MEM_Set instead of memset.
-
-2002-03-07 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftdbgmem.c (ft_mem_table_resize, ft_mem_table_new,
- ft_mem_table_set, ft_mem_debug_alloc, ft_mem_debug_free,
- ft_mem_debug_realloc, ft_mem_debug_done, FT_Alloc_Debug,
- FT_Realloc_Debug, FT_Free_Debug): Fix compiler warnings.
- * src/base/ftcalc.c (FT_MulFix): Ditto.
- * src/cff/cffdrivr.c (cff_get_name_index): Ditto.
- * src/cff/cffobjs.c (CFF_Size_Get_Globals_Funcs, CFF_Size_Init,
- CFF_GlyphSlot_Init): Ditto.
- * src/cid/cidobjs.c (CID_GlyphSlot_Init,
- CID_Size_Get_Globals_Funcs): Ditto.
- * src/type1/t1objs.c (T1_Size_Get_Globals_Funcs, T1_GlyphSlot_Init):
- Ditto.
- * src/pshinter/pshmod.c (pshinter_interface): Use `static const'.
- * src/winfonts/winfnt.c (FNT_Get_Next_Char): Remove unused
- variables.
-
- * include/freetype/internal/psaux.h (T1_Builder_Funcs): Renamed
- to...
- (T1_Builder_FuncsRec): This.
- (T1_Builder_Funcs): New typedef.
- (PSAux_Interface): Remove compiler warnings.
- * src/psaux/psauxmod.c (t1_builder_funcs), src/psaux/psobjs.h
- (t1_builder_funcs): Updated.
-
- * src/pshinter/pshglob.h (PSH_Blue_Align): Replaced with ...
- (PSH_BLUE_ALIGN_{NONE,TOP,BOT}): New defines.
- (PSH_AlignmentRec): Updated.
-
- * include/freetype/internal/ftstream.h (GET_Char, GET_Byte): Fix
- typo.
- * include/freetype/internal/ftgloadr.h (FT_SubGlyph): Ditto.
- * src/base/ftstream (FT_Get_Char): Rename to...
- (FT_Stream_Get_Char): This.
-
- * src/base/ftnames.c (FT_Get_Sfnt_Name): s/index/idx/ -- `index' is
- a built-in function in gcc, causing warning messages with gcc 3.0.
- * src/autohint/ahglyph.c (ah_outline_load): Ditto.
- * src/autohint/ahglobal.c (ah_hinter_compute_blues): Ditto.
- * src/cache/ftcmanag.c (ftc_family_table_alloc,
- ftc_family_table_free, FTC_Manager_Done, FTC_Manager_Register_Cache):
- Ditto.
- * src/cff/cffload.c (cff_new_index, cff_done_index,
- cff_explicit_index, CFF_Access_Element, CFF_Forget_Element,
- CFF_Get_Name, CFF_Get_String, CFF_Load_SubFont, CFF_Load_Font,
- CFF_Done_Font): Ditto.
- * src/psaux/psobjs.c (PS_Table_Add, PS_Parser_LoadField): Ditto.
- * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings): Ditto.
- * src/pshinter/pshrec.c (ps_mask_test_bit, ps_mask_clear_bit,
- ps_mask_set_bit, ps_dimension_add_t1stem, ps_hints_t1stem3,
- * src/pshinter/pshalgo1.c (psh1_hint_table_record,
- psh1_hint_table_record_mask, psh1_hint_table_activate_mask): Ditto.
- * src/pshinter/pshalgo2.c (psh2_hint_table_record,
- psh2_hint_table_record_mask, psh2_hint_table_activate_mask): Ditto.
- * src/sfnt/ttpost.c (Load_Format_20, Load_Format_25,
- TT_Get_PS_Name): Ditto.
- * src/truetype/ttgload.c (TT_Get_Metrics, Get_HMetrics,
- load_truetype_glyph): Ditto.
- * src/type1/t1load.c (parse_subrs, T1_Open_Face): Ditto.
- * src/type1/t1afm.c (T1_Get_Kerning): Ditto.
- * include/freetype/cache/ftcmanag.h (ftc_family_table_free): Ditto.
-
-2002-03-06 David Turner <david@freetype.org>
-
- * src/type1/t1objs.c (T1_Face_Init), src/cid/cidobjs.c
- (CID_Face_Init): Fixed another bug related to the
- ascender/descender/text height of Postscript fonts.
-
- * src/pshinter/pshalgo2.c (print_zone): Renamed to ...
- (psh2_print_zone): This.
- * src/pshinter/pshalgo1.c (print_zone): Renamed to ...
- (psh1_print_zone): This.
-
- * include/freetype/freetype.h, include/freetype/internal/ftobjs.h,
- src/base/ftobjs.c: Adding the new FT_Library_Version API to return
- the library's current version in dynamic links.
- * src/base/ftinit.c (FT_Init_FreeType): Updated.
-
-2002-03-06 Werner Lemberg <wl@gnu.org>
-
- * src/pshinter/pshglob.h (PSH_DimensionRec): s/std/stdw/.
- * src/pshinter/pshglob.c (psh_global_scale_widths,
- psh_dimension_snap_width, psh_globals_destroy, psh_globals_new):
- Ditto.
-
-2002-03-05 David Turner <david@freetype.org>
-
- * src/type1/t1objs.c (T1_Face_Init), src/cff/cffobjs.c
- (CFF_Face_Init), src/cid/cidobjs.c (CID_Face_Init): Removing the bug
- that returned global BBox values in 16.16 fixed format (instead of
- integer font units).
-
- * src/cid/cidriver.c (cid_get_postscript_name): Fixed a bug that
- caused the CID driver to return Postscript font names with a leading
- slash (`/') as in `/MOEKai-Regular'.
-
- * src/sfnt/ttload.c (TT_Load_Names), src/sfnt/sfobjs.c (Get_Name),
- src/sfnt/sfdriver.c (get_sfnt_postscript_name): Fixed the loader so
- that it accepts broken fonts like `foxjump.ttf', which made FreeType
- crash when trying to load them.
-
- Also improved the name table parser to be able to load
- Windows-encoded entries before Macintosh or Unicode ones, since it
- seems some fonts don't have reliable values here anyway.
-
- * include/freetype/internal/psnames.h: Add typedef for
- `PSNames_Service'.
-
-2002-03-05 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/aclocal.m4, builds/unix/ltmain.sh: Update to libtool
- 1.4.2.
- Apply a small patch for AIX to make shared libraries work (this
- patch is already in the CVS version of libtool).
-
- * builds/unix/config.sub, builds/unix/config.guess: Updated to
- recent versions.
-
- * builds/unix/configure.ac: Fix typo
- (AC_CONFIG_FILE->AC_CONFIG_FILES).
-
- * builds/unix/configure: Regenerated.
-
-2002-02-28 David Turner <david@freetype.org>
-
- * include/freetype/ftconfig.h: Changed `FT_LOCAL xxxx' to
- `FT_LOCAL( xxxx )' everywhere in the source. The same goes for
- `FT_LOCAL_DEF xxxx' which is translated to `FT_LOCAL_DEF( xxxxx )'.
-
- * include/freetype/freetype.h (FREETYPE_MINOR, FREETYPE_PATCH):
- Changing version to 2.1.0 to indicate an unstable branch.
- Added the declarations of FT_Get_First_Char and FT_Get_Next_Char.
-
- * src/base/ftobjs.c: Implement FT_Get_First_Char and
- FT_Get_Next_Char.
-
- * include/freetype/t1tables.h: Renaming structure types. This
-
- typedef T1_Struct_
- {
- } T1_Struct;
-
- becomes
-
- typedef PS_StructRec_
- {
- } PS_StructRec, *PS_Struct;
-
- typedef PS_StructRec T1_Struct; /* backward compatibility */
-
- Hence, we increase the coherency of the source code by effectively
- using the `Rec' prefix for structure types.
-
-2002-02-27 David Turner <david@freetype.org>
-
- * src/sfnt/ttload.c (TT_Load_Names): Simplifying and securing the
- names table loader. Invalid individual name entries are now handled
- correctly. This allows the loading of very buggy fonts like
- `foxjump.ttf' without allocating tons of memory and causing crashes.
-
- * src/otlayout/otlcommon.h, src/otlayout/otlcommon.c: Adding (still
- experimental) code for OpenType Layout tables validation and
- parsing.
-
- * src/type1/t1cmap.h, src/type1/t1cmap.c: Adding (still
- experimental) code for Type 1 charmap processing.
-
- * src/sfnt/ttcmap0.c: New file. It contains a new, still
- experimental SFNT charmap processing support.
-
- * include/freetype/internal/ftobjs.h: Adding validation support as
- well as internal charmap object definitions (FT_CMap != FT_CharMap).
-
-2002-02-24 David Turner <david@freetype.org>
-
- * Renaming stream functions to the FT_<Subject>_<Action> scheme:
-
- FT_Seek_Stream => FT_Stream_Seek
- FT_Skip_Stream => FT_Stream_Skip
- FT_Read_Stream => FT_Stream_Read
- FT_Read_Stream_At => FT_Stream_Read_At
- FT_Access_Frame => FT_Stream_Enter_Frame
- FT_Forget_Frame => FT_Stream_Exit_Frame
- FT_Extract_Frame => FT_Stream_Extract_Frame
- FT_Release_Frame => FT_Stream_Release_Frame
- FT_Get_XXXX => FT_Stream_Get_XXXX
- FT_Read_XXXX => FT_Stream_Read_XXXX
-
- FT_New_Stream( filename, stream ) =>
- FT_Stream_Open( stream, filename )
-
- (The function doesn't create the FT_Stream structure, it simply
- initializes it for reading.)
-
- FT_New_Memory_Stream( library, FT_Byte* base, size, stream ) =>
- FT_Stream_Open_Memory( stream, const FT_Byte* base, size )
-
- FT_Done_Stream => FT_Stream_Close
- FT_Stream_IO => FT_Stream_IOFunc
- FT_Stream_Close => FT_Stream_CloseFunc
-
- ft_close_stream => ft_ansi_stream_close (in base/ftsystem.c only)
- ft_io_stream => ft_ansi_stream_io (in base/ftsystem.c only)
-
- * src/base/ftutil.c: New file. Contains all memory and list
- management code (previously in `ftobjs.c' and `ftlist.c',
- respectively).
-
- * include/freetype/internal/ftobjs.h: Moving all code related to
- glyph loaders to ...
- * include/freetype/internal/ftgloadr.h: This new file.
- `FT_GlyphLoader' is now a pointer to the structure
- `FT_GlyphLoaderRec'.
- (ft_glyph_own_bitmap): Renamed to ...
- (FT_GLYPH_OWN_BITMAP): This.
- * src/base/ftobjs.c: Moving all code related to glyph loaders
- to ...
- * src/base/ftgloadr.c: This new file.
-
-2002-02-22 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/ftdebug.h (FT_Trace): Remove comma in
- enum to avoid compiler warnings.
-
-2002-02-21 David Turner <david@freetype.org>
-
- Modified the debug sub-system initialization. Trace levels can now
- be specified within the `FT2_DEBUG' environment variable. See the
- comments within `ftdebug.c' for more details.
-
- * src/base/ftdebug.c: (FT_SetTraceLevel): Removed.
- (ft_debug_init): New function.
- (ft_debug_dummy): Removed.
- Updated to changes in ftdebug.h
-
- * include/freetype/internal/ftdebug.h: Always define
- FT_DEBUG_LEVEL_ERROR if FT_DEBUG_LEVEL_TRACE is defined.
- (FT_Assert): Renamed to ...
- (FT_ASSERT): This.
- Some stuff from ftdebug.h has been moved to ...
-
- * include/freetype/internal/fttrace.h: New file, to define the trace
- levels used for debugging. It is used both to define enums and
- toggle names for FT2_DEBUG.
-
- * include/freetype/internal/internal.h: Updated.
-
- * src/base/ftobjs.c, src/base/ftstream.c: Updated.
-
- * include/freetype/internal/ftextend.h, src/base/ftextend.c:
- Removed. Both files are now completely obsolete.
- * src/base/Jamfile, src/base/rules.mk: Updated.
-
- * include/freetype/fterrors.h: Adding `#undef FT_ERR_CAT' and
- `#undef FT_ERR_XCAT' to avoid warnings with certain compilers (like
- LCC).
-
- * src/pshinter/pshalgo2.c (print_zone): Renamed to ...
- (psh2_print_zone): This to avoid errors during compilation of debug
- library.
-
- * src/smooth/ftgrays.c (FT_COMPONENT): Change definition to as
- `trace_smooth'.
-
-2002-02-20 David Turner <david@freetype.org>
-
- * README: Adding `devel@freetype.org' address for bug reports.
-
-2002-02-20 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/install.mk (check): New dummy target.
- (.PHONY): Add it.
-
-2002-02-19 Werner Lemberg <wl@gnu.org>
-
- * builds/freetype.mk (FT_CFLAGS): Use $(INCLUDE_FLAGS) first.
-
- * src/cache/ftccache.c (ftc_cache_resize): Mark `error' as unused
- to avoid compiler warning.
- * src/cff/cffload.c (CFF_Get_String): Ditto.
- * src/cff/cffobjs.c (CFF_StrCopy): Ditto.
- * src/psaux/psobjs.c (PS_Table_Done): Ditto.
- * src/pcf/pcfread.c (pcf_seek_to_table_type): Ditto.
- * src/sfnt/sfdriver.c (get_sfnt_postscript_name): Ditto.
- (pcf_get_bitmaps): The same for `sizebitmaps'.
- * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings): The same for
- `orig_y'.
- (t1operator_seac): Comment out more dead code.
- * src/pshinter/pshalgo2.c (ps2_hints_apply): Add `DEBUG_HINTER'
- conditional.
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
- load_truetype_glyph): Add `TT_CONFIG_OPTION_BYTECODE_INTERPRETER'
- conditional.
-
-2002-02-18 Werner Lemberg <wl@gnu.org>
-
- * src/autohint/ahglyph.c (ah_outline_link_segments): Remove unused
- variables.
- * src/autohint/ahhint.c (ah_align_serif_edge): Use FT_UNUSED instead
- of UNUSED.
- * src/autohint/ahmodule.c (ft_autohinter_reset): Ditto.
- * src/pshinter/pshrec.c (ps_mask_table_merge): Fix typo in variable
- swapping code.
- * src/pshinter/pshglob.h (PSH_Blue_Align): Add PSH_BLUE_ALIGN_NONE.
- * src/pshinter/pshglob.c (psh_blues_snap_stem): Use it.
- * src/pshinter/pshalgo1.c (psh1_hint_table_optimize): Ditto.
- * src/pshinter/pshalgo2.c (psh2_hint_align): Ditto.
- * include/freetype/internal/ftobjs.h (UNUSED): Removed.
-
-2002-02-10 Roberto Alameda <ojancano@geekmail.de>
-
- Add support for ISOLatin1 PS encoding.
-
- * include/freetype/freetype.h (ft_encoding_latin_1): New tag
- (`lat1').
- * include/freetype/internal/t1types.h (T1_Encoding_Type): Add
- `t1_encoding_isolatin1'.
- * src/type1/t1driver.c (Get_Char_Index, Get_Next_Char): Handle
- ft_encoding_latin_1.
- * src/type1/t1load.c (parse_encoding): Handle `ISOLatin1Encoding'.
- * src/type1/t1objs.c (T1_Face_Init): Handle `t1_encoding_isolatin1'.
-
-----------------------------------------------------------------------------
-
-Copyright 2002-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used, modified,
-and distributed under the terms of the FreeType project license,
-LICENSE.TXT. By continuing to use, modify, or distribute this file you
-indicate that you have read the license and understand and accept it
-fully.
-
-
-Local Variables:
-version-control: never
-coding: utf-8
-End:
diff --git a/ChangeLog.22 b/ChangeLog.22
deleted file mode 100644
index e3aec745a..000000000
--- a/ChangeLog.22
+++ /dev/null
@@ -1,2837 +0,0 @@
-2006-05-12 Werner Lemberg <wl@gnu.org>
-
-
- * Version 2.2.1 released.
- =========================
-
-
- Tag sources with `VER-2-2-1'.
-
-2006-05-12 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/sources.py (re_source_keywords): Add word
- boundary markers.
- * src/tools/docmaker/content.py (re_field): Allow `.' in field names
- (but not at the beginning or end).
- * src/tools/docmaker/tohtml.py (html_header_1): Use `utf-8' charset.
- (block_footer): Split into...
- (block_footer_start, block_footer_middle, block_footer_end): This to
- add navigation buttons.
- (HtmlFormatter::block_exit): Updated.
-
- * include/freetype/*: Many minor documentation improvements (adding
- links, spelling errors, etc.).
-
-2006-05-11 Werner Lemberg <wl@gnu.org>
-
- * README: Minor updates.
-
- * include/freetype/*: s/scale/scaling value/ where appropriate.
- Many other minor documentation improvements.
-
- * src/tools/docmaker/sources.py (re_italic, re_bold): Handle
- trailing punctuation.
- * src/tools/docmaker/tohtml.py (HtmlFormatter::make_html_word): Add
- warning message for undefined cross references.
- Update handling of re_italic and re_bold.
-
-2006-05-11 Masatake YAMATO <jet@gyve.org>
-
- * builds/unix/ftsystem.c (FT_Stream_Open): Check errno only if
- read system call returns -1.
- Remove a redundant parenthesis.
-
-2006-05-10 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/ftsystem.c (FT_Stream_Open): Avoid infinite loop if
- given an empty, un-mmap()able file. Reported and suggested fix in
- Savannah bug #16555.
-
- * builds/freetype.mk (refdoc): Write-protect the `docmaker'
- directory to suppress generation of .pyc files. According to the
- Python docs there isn't a more elegant solution (currently).
-
- * builds/toplevel.mk (dist): New target which builds .tar.gz,
- .tar.bz2, and .zip files. Note that the version number is still
- hard-coded.
- (do-dist): Sub-target of `dist'.
- (CONFIG_GUESS, CONFIG_SUB): New variables.
- (.PHONY): Updated.
-
-2006-05-09 Rajeev Pahuja <rpahuja@esri.com>
-
- * builds/win32/visualc/freetype.sln,
- builds/win32/visualc/freetype.vcproj: Upgraded to VS.NET 2005 from
- VS.NET 2003
- Added files ftbbox.c, fttype1.c, ftwinfnt.c, ftsynth.c.
-
- * builds/win32/visualc/index.html: Updated.
-
-2006-05-07 Werner Lemberg <wl@gnu.org>
-
- Put version information into the configure script. Reported by Paul
- Watson <pwatson@redlinepy.com>.
-
- * builds/unix/configure.ac: Renamed to...
- * builds/unix/configure.raw: This which now serves (with appropriate
- modifications) as a template for configure.ac.
-
- * version.sed: New script.
-
- * autogen.sh: Generate configure.ac from configure.raw, using
- FREETYPE_MAJOR, FREETYPE_MINOR, and FREETYPE_PATCH from freetype.h.
-
-2006-05-06 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
-
- * builds/unix/configure.ac (version_info): Set to 9:10:3.
-
- * builds/win32/visualc/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj, builds/freetype.mk (refdoc),
- Jamfile (RefDoc), README: s/220/221/, s/2.2.0/2.2.1/.
- Minor updates.
-
- * docs/CHANGES, docs/VERSION.DLL, docs/PROBLEMS, README.CVS:
- Updated.
-
- * builds/unix/install-sh: Updated from `texinfo' CVS module at
- savannah.gnu.org.
-
- * devel/ftoption.h: Synchronize with
- include/freetype/config/ftoption.h.
-
-2006-05-04 Werner Lemberg <wl@gnu.org>
-
- * src/lzw/ftlzw2.c: Renamed to...
- * src/lzw/ftlzw.c: This.
-
- * src/lzw/Jamfile, src/lzw/rules.mk: Updated.
-
- * builds/mac/FreeType.m68k_cfm.make.txt,
- builds/mac/FreeType.m68k_far.make.txt,
- builds/mac/FreeType.ppc_carbon.make.txt,
- builds/mac/FreeType.ppc_classic.make.txt: Updated.
-
-2006-05-03 David Turner <david@freetype.org>
-
- Allow compilation again with C++ compilers.
-
- * include/freetype/internal/ftmemory.h (FT_ASSIGNP,
- FT_ASSIGNP_INNER): New macros which do the actual assignment, and
- which exist in two variants (for C and C++).
- Update callers accordingly.
-
-2006-05-03 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/config/ftoption.h (FT_STRICT_ALIASING): Removed.
-
-2006-05-02 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/ftmemory.h: s/new/newsz/ (for C++).
- (FT_ALLOC): Remove redundant redefinition.
-
- * builds/compiler/gcc-dev.mk (CFLAGS) [g++]: Don't use
- `-Wstrict-prototypes'.
-
- * src/base/ftstream.c (FT_Stream_EnterFrame): Add cast.
-
- * include/freetype/config/ftconfig.h (FT_BASE_DEF) [__cplusplus]:
- Remove `extern'.
-
-2006-05-02 David Turner <david@freetype.org>
-
- Update the memory management functions and macros to safely deal
- with array size buffer overflows. This corresponds to attempts to
- allocate arrays that are too large. For an example, consider the
- following code:
-
- count = read_uint32_from_file(); array = malloc( sizeof ( Item ) *
- count ); for ( nn = 0; nn < count; nn++ )
- array[nn] = read_item_from_file();
-
- If `count' is larger than `FT_UINT_MAX/sizeof(Item)', the
- multiplication overflows, and the array allocated os smaller than
- the data read from the file. In this case, the heap will be
- trashed, and this can be used as a denial-of-service attack, or make
- the engine crash later.
-
- The FT_ARRAY_NEW and FT_ARRAY_RENEW macros now ensure that the new
- count is no larger than `FT_INT_MAX/item_size', otherwise a new
- error code `FT_Err_Array_Too_Large' will be returned.
-
- Note that the memory debugger now works again when FT_DEBUG_MEMORY
- is defined. FT_STRICT_ALIASING has disappeared; the corresponding
- code is now the default.
-
-
- * include/freetype/config/ftconfig.h (FT_BASE_DEF) [!__cplusplus]:
- Don't use `extern'.
-
- * include/freetype/fterrdef.h (FT_Err_Array_Too_Large): New error
- code.
-
- * include/freetype/internal/ftmemory.h (FT_DEBUG_INNER)
- [FT_DEBUG_MEMORY]: New macro.
- (ft_mem_realloc, ft_mem_qrealloc): Pass new object size count also.
- (ft_mem_alloc_debug, ft_mem_qalloc_debug, ft_mem_realloc_debug,
- ft_mem_qrealloc_debug, ft_mem_free_debug): Removed.
- (FT_MEM_ALLOC, FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC,
- FT_MEM_FREE): Redefine.
- (FT_MEM_NEW_ARRAY, FT_MEM_RENEW_ARRAY, FT_MEM_QNEW_ARRAY,
- FT_MEM_QRENEW_ARRAY): Redefine.
- (FT_ALLOC_MULT, FT_REALLOC_MULT, FT_MEM_QALLOC_MULT,
- FT_MEM_QREALLOC_MULT): New macros. Update callers where
- appropriate.
- (FT_MEM_SET_ERROR): Slightly redefine.
-
-
- * src/base/ftdbgmem.c (_ft_debug_file, _ft_debug_lineno)
- [FT_DEBUG_MEMORY]: New global variables, replacing...
- (FT_MemTableRec) [FT_DEBUG_MEMORY]: Remove `filename' and
- `line_no'. Update all callers.
- (ft_mem_debug_alloc) [FT_DEBUG_MEMORY]: Avoid possible integer
- overflow.
- (ft_mem_alloc_debug, ft_mem_realloc_debug, ft_mem_qalloc_debug,
- ft_mem_qrealloc_debug, ft_mem_free_debug): Removed.
-
- * src/base/ftmac.c (read_lwfn): Catch integer overflow.
- * src/base/ftrfork.c (raccess_guess_darwin_hfsplus): Ditto.
- * src/base/ftutil.c: Remove special code for FT_STRICT_ALIASING.
- (ft_mem_alloc, ft_mem_realloc, ft_mem_qrealloc): Rewrite.
-
-
- * include/freetype/ftstream.h (FT_FRAME_ENTER, FT_FRAME_EXIT,
- FT_FRAME_EXTRACT, FT_FRAME_RELEASE): Use FT_DEBUG_INNER to report the
- place where the frames were entered, extracted, exited or released
- in the memory debugger.
-
- * src/base/ftstream.c (FT_Stream_ReleaseFrame) [FT_DEBUG_MEMORY]:
- Call ft_mem_free.
- (FT_Stream_EnterFrame) [FT_DEBUG_MEMORY]: Use ft_mem_qalloc.
- (FT_Stream_ExitFrame) [FT_DEBUG_MEMORY]: Use ft_mem_free.
-
-2006-04-30 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Correct pfb_pos
- initialization, remove extra cast to copy to pfb_lenpos. This fixes
- parsing of PFB fonts with MacOS resource fork (bug introduced
- 2003-09-11). Patch provided by Huib-Jan Imbens <ft@imbens.nl>.
-
-2006-04-29 Werner Lemberg <wl@gnu.org>
-
- Further C library abstraction. Based on a patch from
- msn2@bidyut.com.
-
- * include/freetype/config/ftstdlib.h (FT_CHAR_BIT, FT_FILE,
- ft_fopen, ft_fclose, ft_fseek, ft_ftell, ft_fread, ft_smalloc,
- ft_scalloc, ft_srealloc, ft_sfree, ft_labs): New wrapper macros for
- C library functions. Update all users accordingly (and catch some
- other places where the C library function was used instead of the
- wrapper functions).
-
- * src/base/ftsystem.c: Don't include stdio.h and stdlib.h.
- * src/gzip/zutil.h [MSDOS && !(__TURBOC__ || __BORLANDC__)]: Don't
- include malloc.h.
-
-
- * builds/unix/unix-def.in (datarootdir): Define, for autoconf 2.59c
- and forthcoming versions.
-
-2006-04-28 Werner Lemberg <wl@gnu.org>
-
- * src/lzw/ftlzw.c, src/lzw/zopen.c, src/lzw/zopen.h: Removed,
- obsolete.
-
-2006-04-27 yi luo <luoyi.ly@gmail.com>
-
- * builds/win32/visualc/freetype.vcproj: Updated.
-
-2006-04-26 David Turner <david@freetype.org>
-
-
- * Version 2.2 released.
- =======================
-
-
- Tag sources with `VER-2-2-0'.
-
-2006-04-26 Werner Lemberg <wl@gnu.org>
-
- * src/psaux/psobjs.c (shift_elements): Don't use FT_Long but
- FT_PtrDist for `delta'. Reported by Céline PILLET
- <Celine.Pillet@Tagginfo.com>.
-
-2006-04-21 David Turner <david@freetype.org>
-
- * include/freetype/ftincrem.h: Documentation updates.
- (FT_Incremental_Interface): New typedef.
-
- * include/freetype/ftmodapi.h, include/freetype/ftglyph.h:
- Documentation updates.
-
- * include/freetype/freetype.h: Documentation update.
- (FT_HAS_FAST_GLYPHS): Always set to 0.
-
- * include/freetype/ftstroke.h, src/base/ftstroke.c (FT_Stroker_New):
- Take an FT_Library argument instead of FT_Memory.
-
- * src/sfnt/ttcmap.c: Remove compiler warnings (gcc-4.0.2).
-
-2006-04-13 David Turner <david@freetype.org>
-
- * src/autofit/afloader.c (af_loader_init, af_loader_load_g): Remove
- superfluous code in the auto-fitter's loader.
-
-2006-04-05 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * builds/amiga/makefile, builds/amiga/makefile.os4,
- builds/amiga/smakefile: Added FT2_BUILD_LIBRARY define.
-
-2006-04-03 luoyi <luoyi.ly@gmail.com>
-
- * builds/compiler/intelc.mk (TE): New variable.
- (ANSIFLAGS): Updated.
-
-2006-04-03 Werner Lemberg <wl@gnu.org>
-
- * builds/exports.mk (clean_symbols_list, clean_apinames): Removed.
- (CLEAN): Add $(EXPORTS_LIST) and $(APINAMES_EXE).
- (.PHONY): Updated.
-
- * configure.ac: Minor fixes to improve --help output.
-
-
- * docs/PROBLEMS: New file.
-
-2006-04-01 David Turner <david@freetype.org>
-
- * docs/CHANGES: Updated.
-
- * include/freetype/ftcache.h, include/freetype/config/ftheader.h:
- Update documentation comments.
-
-2006-04-01 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/install.mk (uninstall): Don't handle `cache'
- directory which no longer exists.
-
-2006-03-29 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * src/psaux/psconv.c: Changed some variables which are expected to
- hold negative values from `char' to `FT_Char' to allow building with
- a compiler where `char' is unsigned by default.
-
-2006-03-27 David Turner <david@freetype.org>
-
- * src/sfnt/ttkern.c (tt_face_get_kerning): Fix a serious bug that
- causes some programs to go into an infinite loop when dealing with
- fonts that don't have a properly sorted kerning sub-table.
-
-2006-03-26 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdflib.c (ERRMSG4): New macro.
- (_bdf_parse_glyphs): Handle invalid BBX values.
-
- * include/freetype/fterrdef.h (FT_Err_Bbx_Too_Big): New error
- macro.
-
-2006-03-23 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-
- * src/tools/docmaker/tohtml.py (html_header_2): Add horizontal
- padding between table elements.
- (html_header_1): The `DOCTYPE' comment must be in uppercase.
- (make_html_para): Convert `...' quotations into real left and
- right single quotes.
- Use `para_header' and `para_footer'.
-
- * src/tools/docmaker/sources.py (re_bold, re_italic): Accept "'"
- also.
-
-2006-03-23 David Turner <david@freetype.org>
-
- Add FT_Get_SubGlyph_Info API to retrieve subglyph data. Note that
- we do not expose the FT_SubGlyphRec structure.
-
- * include/freetype/internal/ftgloadr.h (FT_SUBGLYPH_FLAGS_*): Moved
- to...
- * include/freetype/freetype.h (FT_SUBGLYPH_FLAGS_*): Here.
- (FT_Get_SubGlyph_Info): New declaration.
-
- * src/base/ftobjs.c (FT_Get_SubGlyph_Info): New function.
-
-
- * src/autofit/afloader.c (af_loader_load_g): Compute lsb_delta and
- rsb_delta correctly in edge cases.
-
-2006-03-22 Werner Lemberg <wl@gnu.org>
-
- * src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
- [!FTC_INLINE]: Compile conditionally.
- * src/cache/ftccache.h: Updated.
-
- * src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
- FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
- s/FT_EXPORT/FT_LOCAL/.
- (FTC_GCache_Init, FTC_GCache_Done): Commented out.
- (FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
- s/FT_EXPORT/FT_LOCAL/.
- * src/cache/ftcglyph.h: Updated.
-
- * src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
- s/FT_EXPORT/FT_LOCAL/.
- (FTC_INode_Weight): Commented out.
- * src/cache/ftcimage.h: Updated.
-
- * src/cache/ftcmanag.c (FTC_Manager_Compress,
- FTC_Manager_RegisterCache, FTC_Manager_FlushN):
- s/FT_EXPORT/FT_LOCAL/.
- * src/cache/ftcmanag.h: Updated.
-
- * src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
- FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
- (FTC_SNode_Weight): Commented out.
- * src/cache/ftcsbits.h: Updated.
-
-2006-03-22 Werner Lemberg <wl@gnu.org>
-
- * src/cache/ftccache.c, src/cache/ftccache.h (FTC_Node_Destroy):
- Remove, unused.
-
- * src/cache/ftccmap.h: Remove, unused.
-
- * src/cache/rules.mk (CACHE_DRV_H): Remove ftccmap.h.
-
-2006-03-21 Zhe Su <james.su@gmail.com>
-
- * src/base/ftoutln.c (FT_Outline_Get_Orientation): Improve
- algorithm.
-
-2006-03-21 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cfftypes.h (CFF_CharsetRec): Add `max_cid' member.
-
- * src/cff/cffload.c (cff_charset_load): Set `charset->max_cid'.
-
- * src/cff/cffgload.c (cff_slot_load): Change type of third parameter
- to `FT_UInt'.
- Check range of `glyph_index'.
- * src/cff/cffgload.h: Updated.
-
-
- * src/sfnt/ttcmap.c (tt_face_build_cmaps): Handle invalid offset
- correctly.
-
-
- * builds/freetype.mk (refdoc), docs/CHANGES, Jamfile (RefDoc),
- README: s/2.1.10/2.2/.
-
-2006-03-21 David Turner <david@freetype.org>
-
- * src/autofit/aflatin.c (af_latin_metrics_scale): Fix small bug
- that crashes the auto-hinter (introduced by previous patch).
-
-2006-03-20 Werner Lemberg <wl@gnu.org>
-
- * builds/freetype.mk (CACHE_DIR, CACHE_H): Remove.
- (FREETYPE_H): Updated.
-
- * src/cache/rules.mk (CACHE_H_DIR): Remove.
- (CACHE_DRV_H): Updated.
-
-2006-03-20 David Turner <david@freetype.org>
-
- * include/freetype/cache/ftccache.h,
- include/freetype/cache/ftccmap.h, include/freetype/cache/ftcglyph.h
- include/freetype/cache/ftcimage.h include/freetype/cache/ftcmanag.h
- include/freetype/cache/ftcmru.h include/freetype/cache/ftcsbits.h:
- Move to...
-
- * src/cache/ftccache.h, src/cache/ftcglyph.h, src/cache/ftcimage.h,
- src/cache/ftcsbits.h, src/cache/ftcmanag.h, src/cache/ftccmap.h,
- src/cache/ftcmru.h: This new location.
- Update declarations according to the changes in the corresponding
- source files.
-
- Note that these files are not used by FreeType clients; all public
- APIs of the cache module have been already moved to
- `include/freetype/ftcache.h', and all FT_CACHE_INTERNAL_XXXX_H
- macros resolve to it.
-
- Reason for the move is to allow modifications of the internals
- without interferences with rogue clients. Note that there are no
- known clients that access the cache internals at the moment.
-
- * builds/unix/install.mk (install): Don't install headers from
- $(CACHE_H).
- Remove `freetype/cache' from the target directory.
-
- * include/freetype/config/ftheader.h (FT_CACHE_MANAGER_H,
- FT_CACHE_INTERNAL_MRU_H, FT_CACHE_INTERNAL_MANAGER_H,
- FT_CACHE_INTERNAL_CACHE_H, FT_CACHE_INTERNAL_GLYPH_H,
- FT_CACHE_INTERNAL_IMAGE_H, FT_CACHE_INTERNAL_SBITS_H): Point to
- FT_CACHE_H.
-
- * src/cache/ftcbasic.c, src/cache/ftccache.h, src/cache/ftccback.h,
- src/cache/ftccmap.c, src/cache/ftcglyph.c, src/cache/ftcglyph.h,
- src/cache/ftcimage.c, src/cache/ftcimage.h, src/cache/ftcmanag.c,
- src/cache/ftcmanag.h, src/cache/ftcmru.h, src/cache/ftcsbits.c,
- src/cache/ftcsbits.h: Don't use the FT_CACHE_INTERNAL_XXX_H macros
- but include the headers directly (which are now in `src/cache').
-
- * src/cache/ftccache.c: Don't use the FT_CACHE_INTERNAL_XXX_H
- macros but include the headers directly.
- (FTC_Cache_Init, FTC_Cache_Done, FTC_Cache_NewNode,
- FTC_Cache_Lookup, FTC_Cache_RemoveFaceID): Declare as FT_LOCAL_DEF.
-
- * src/cache/ftccache.c: Don't use the FT_CACHE_INTERNAL_XXX_H
- macros but include the headers directly.
- (FTC_MruNode_Prepend, FTC_MruNode_Up, FTC_MruNode_Remove,
- FTC_MruList_Init, FTC_MruList_Reset, FTC_MruList_Done,
- FTC_MruList_New, FTC_MruList_Remove, FTC_MruList_RemoveSelection):
- Declare as FT_LOCAL_DEF.
- (FTC_MruList_Find, FTC_MruList_Lookup) [!FTC_INLINE]: Compile
- conditionally.
- Declare as FT_LOCAL_DEF.
-
-
- * builds/win32/visualc/freetype.dsp: Update project file, add
- missing base source files (ftstroke.c, ftxf86.c, etc.).
-
-
- * src/autofit/afcjk.c, src/autofit/aflatin.c, src/base/ftobjs.c,
- src/cff/cffobjs.c, src/cid/cidobjs.c, src/pfr/pfrobjs.c,
- src/sfnt/sfobjs.c, src/sfnt/ttmtx.c, src/type1/t1afm.c,
- src/type1/t1objs.c: Remove compiler warnings when building with
- Visual C++ 6 and /W4.
-
- * src/autofit/aflatin.c (af_latin_hints_init): Disable horizontal
- hinting for italic/oblique fonts.
-
-
-
- * src/truetype/ttpload.c, src/truetype/ttpload.h
- (tt_face_get_device_metrics): Change second argument to `FT_UInt'.
-
-2006-03-06 David Turner <david@freetype.org>
-
- * src/cache/ftcmanag.c (FTC_Manager_Lookup_Size): Prevent crashes in
- Mozilla/FireFox print preview in Ubuntu Hoary.
-
-2006-02-28 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/base/ftutil.c (ft_mem_qalloc) [FT_STRICT_ALIASING]: Do not
- return error when size == 0.
-
-2006-02-28 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/base/ftobjs.c (FT_Done_Library): Remove modules in reverse
- order so that type42 module is removed before truetype module. This
- avoids double free in some occasions.
-
-2006-02-28 David Turner <david@freetype.org>
-
- * Release candidate VER-2-2-0-RC4.
- ----------------------------------
-
- * docs/CHANGES: Documentation updates.
-
-2006-02-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * modules.cfg (BASE_EXTENSIONS): Compile in ftgxval.c by default to
- build ftvalid in ft2demos. It works as dummy ABI if gxvalid is not
- built.
-
-2006-02-27 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/cache/ftccache.h
- [FT_CONFIG_OPTION_OLD_INTERNALS]: Remove declaration of
- ftc_node_done.
-
- * src/cache/ftccache.c (ftc_node_destroy)
- [!FT_CONFIG_OPTION_OLD_INTERNALS]: Mark as FT_LOCAL_DEF. This
- should now fix all possible compilation options.
-
-2006-02-27 David Turner <david@freetype.org>
-
- * src/base/ftutil.c (ft_mem_alloc, ft_mem_qalloc, ft_mem_realloc,
- ft_mem_qrealloc): Return an error if a negative size is passed in
- parameters.
-
- * src/cache/ftccache.c (ftc_node_destroy): Mark as FT_BASE_DEF since
- it needs to be exported for rogue clients.
-
- * src/pshinter/pshglob.c (psh_blues_set_zones_0): Prevent problems
- with malformed fonts which have an odd number of blue values (these
- are broken according to the specs).
-
- * src/cff/cffload.c (cff_subfont_load), src/type1/t1load.c
- (T1_Open_Face): Modify the loaders to force even-ness of
- `num_blue_values'.
-
- (cff_index_access_element): Ignore invalid entries in index files.
-
-2006-02-27 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/base/ftobjs.c (FT_Set_Char_Size): Check the case where width
- or height is 0.
-
-2006-02-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/mac/FreeType.m68k_cfm.make.txt,
- builds/mac/FreeType.m68k_far.make.txt,
- builds/mac/FreeType.ppc_carbon.make.txt,
- builds/mac/FreeType.ppc_classic.make.txt: Update to new header
- inclusion introduced on 2006-02-16.
-
-2006-02-27 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/base/ftobjs.c (GRID_FIT_METRICS): New macro.
- (ft_glyphslot_grid_fit_metrics, FT_Load_Glyph) [GRID_FIT_METRICS]:
- Re-enable glyph metrics grid-fitting. It is now done in the base
- layer.
- (FT_Set_Char_Size, FT_Set_Pixel_Sizes): Make sure the width and
- height are not too small or too large, just like we were doing in
- 2.1.10.
-
- * src/autofit/afloader.c (af_loader_load_g): The vertical metrics
- are not scaled.
-
-2006-02-26 Werner Lemberg <wl@gnu.org>
-
- * docs/release: Minor additions and clarifications.
-
- * docs/CHANGES: Updated to reflect many fixes for backward
- compatibility. Still incomplete.
-
-2006-02-26 David Turner <david@freetype.org>
-
- * src/base/ftobjs.c (ft_recompute_scaled_metrics): Re-enable
- conservative rounding of metrics to avoid breaking clients like
- Pango (see http://bugzilla.gnome.org/show_bug.cgi?id=327852).
-
-2006-02-25 Werner Lemberg <wl@gnu.org>
-
- * devel/ftoption.h: Synchronize with
- include/freetype/config/ftoption.h.
-
- * src/cache/ftccache.c (ftc_node_destroy): Use FT_LOCAL_DEF (again).
-
-2006-02-25 David Turner <david@freetype.org>
-
- Fix compiler warnings as well as C++ compilation problems.
- Add missing prototypes.
-
- * src/autofit/afcjk.c, src/base/ftobjs.c, src/base/ftutil.c,
- src/bdf/bdfdrivr.c, src/cff/cffcmap.c, src/cff/cffobjs.c,
- src/psaux/afmparse.c,, src/psaux/t1cmap.c, src/smooth/ftgrays.c
- src/tools/apinames.c, src/truetype/ttdriver.c: Add various casts,
- initialize variables, and decorate functions with FT_CALLBACK_DEF,
- etc., to fix compiler warnings (and C++ compiling errors).
-
- * src/cache/ftcbasic.c: Fix `-Wmissing-prototypes' warnings with
- gcc.
-
- * builds/unix/ftsystem.c: Don't include FT_INTERNAL_OBJECTS_H but
- FT_INTERNAL_STREAM_H.
-
- * src/base/ftsystem.c: Include FT_INTERNAL_STREAM_H.
-
- * include/freetype/config/ftheader.h (FT_PFR_H): New macro.
-
- * include/freetype/config/ftoption.h (FT_STRICT_ALIASING): Don't
- define for C++.
-
- * include/freetype/internal/services/svotval.h: Don't include
- FT_OPENTYPE_VALIDATE_H but FT_INTERNAL_VALIDATE_H.
-
- * include/freetype/internal/services/svpfr.h: Include FT_PFR_H.
-
- * src/gzip/ftgzip.c: Include FT_GZIP_H.
-
- * src/lzw/ftlzw.c, src/lzw/ftlzw2.c: Include FT_LZW_H.
-
- * src/sfnt/ttbdf.c (tt_face_load_bdf_props): Rearrange code.
-
-2006-02-24 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/base/ftoutln.c (FT_OUTLINE_GET_CONTOUR, ft_contour_has,
- ft_contour_enclosed, ft_outline_get_orientation): Commented out. We
- have to wait until `FT_GlyphSlot_Own_Bitmap' is stabilized.
- (FT_Outline_Embolden): Use `FT_Outline_Get_Orientation'.
-
-2006-02-24 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/ftbitmap.h (FT_Bitmap_Embolden): Update
- documentation.
-
- * include/freetype/ftsynth.h (FT_GlyphSlot_Own_Bitmap),
- src/base/ftsynth.c (FT_GlyphSlot_Own_Bitmap): New function to make
- sure a glyph slot owns its bitmap. It is also marked experimental
- and due to change.
- (FT_GlyphSlot_Embolden): Undo the last change. It turns out that
- rendering the outline confuses some applications.
-
-2006-02-24 David Turner <david@freetype.org>
-
- * Release candidate VER-2-2-0-RC3.
- ----------------------------------
-
- * src/cache/ftcbasic.c: Correct compatibility hack bug.
-
-2006-02-24 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/freetype.h (FT_Size_RequestRec): Change the type
- of `width' and `height' to `FT_Long'.
- (enum FT_Size_Request_Type), src/base/ftobjs.c (FT_Request_Metrics):
- New request type `FT_SIZE_REQUEST_TYPE_SCALES' to specify the scales
- directly.
-
-2006-02-23 David Turner <david@freetype.org>
-
- Two BDF patches from Debian libfreetype6 for 2.1.10.
-
- * src/bdf/bdflib.c (_bdf_parse_glyphs): Fix a bug with zero-width
- glyphs.
- Fix a problem with large encodings.
-
-
- Fix binary compatibility issues for gnustep-back (GNUstep backend
- module) which still crashes under Sarge.
-
- * src/cache/ftccmap.c (FTC_OldCMapType, FTC_OldCMapIdRec,
- FTC_OldCMapDesc) [FT_CONFIG_OPTION_OLD_INTERNALS]: New data
- structures and enumerations.
- (FTC_CMapCache_Lookup) [FT_CONFIG_OPTION_OLD_INTERNALS]: New
- compatibility code.
-
- * src/cache/ftcbasic.c: Fix a silly bug that prevented our `hack' to
- support rogue clients compiled against 2.1.7 to work correctly.
- This probably explains the GNUstep crashes with the second release
- candidate.
-
-2006-02-23 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/ftoutln.h (enum FT_Orientation): New value
- `FT_ORIENTATION_NONE'.
-
- * src/base/ftoutln.c (FT_OUTLINE_GET_CONTOUR, ft_contour_has,
- ft_contour_enclosed, ft_outline_get_orientation): Another version of
- `FT_Outline_Get_Orientation'. This version differs from the public
- one in that each part (contour not enclosed in another contour) of the
- outline is checked for orientation.
- (FT_Outline_Embolden): Use `ft_outline_get_orientation'.
-
- * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Render the outline and
- use bitmap's embolden routine when the outline one failed.
-
-2006-02-22 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * modules.cfg: Compile in ftotval.c and ftxf86.c by default for ABI
- compatibility.
-
- * src/sfnt/sfobjs.c (sfnt_done_face): Fix a memory leak.
-
- * src/sfnt/ttsbit0.c (tt_sbit_decoder_load_bit_aligned,
- tt_sbit_decoder_load_byte_aligned) [FT_OPTIMIZE_MEMORY]: Fix sbit
- loading. (Only tested with bit aligned sbit with x_pos == 0.)
-
- * src/truetype/ttpload.c (tt_face_load_hdmx,
- tt_face_get_device_metrics) [FT_OPTIMIZE_MEMORY]: `hdmx' is not
- actually used.
-
-2006-02-21 David Turner <david@freetype.org>
-
- Add a new API named FT_Get_TrueType_Engine_Type to determine whether
- we have a patented, unpatented, or unimplemented TrueType bytecode
- interpreter.
-
- The FT_Get_Module_Flags API was removed consequently.
-
- * include/freetype/ftmodapi.h (FT_Module_Get_Flags): Removed.
- Replaced with...
- (FT_Get_TrueType_Engine_Type): This.
- (FT_TrueTypeEngineType): New enumeration.
-
- * include/freetype/internal/ftserv.h (FT_SERVICE_TRUETYPE_ENGINE_H):
- New macro.
-
- * src/base/ftobjs.c: Include FT_SERVICE_TRUETYPE_ENGINE_H.
- (FT_Module_Get_Flags): Removed. Replaced with...
- (FT_Get_TrueType_Engine_Type): This.
-
- * src/truetype/ttdriver.c: Include FT_SERVICE_TRUETYPE_ENGINE_H.
- (tt_service_truetype_engine): New service structure.
- (tt_services): Register it.
-
- * include/freetype/internal/services/svtteng.h: New file.
-
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Fix silly bug that prevented
- embedded bitmaps from being correctly listed and used.
-
-
- * src/sfnt/ttmtx.c (tt_face_load_hmtx): Disable memory optimization
- if FT_CONFIG_OPTION_OLD_INTERNALS is used. The is necessary because
- libXfont is directly accessing the HMTX data, unfortunately.
- Fix some compiler warnings.
- (tt_face_get_metrics): Ditto.
-
-
- * src/pfr/pfrsbit.c (pfr_slot_load_bitmap): Fix handling of
- character advances.
-
-2006-02-20 David Turner <david@freetype.org>
-
- Support binary compatibility with the X.Org server's Xfont library.
- Note that this change unfortunately prevents memory optimizations
- for the embedded bitmap loader.
-
- * include/freetype/internal/sfnt.h (SFNT_Interface): Move
- `set_sbit_strike' and `load_sbit_metrics' fields to the location of
- version 2.1.8.
-
- * src/sfnt/sfdriver.c (tt_face_set_sbit_strike_stub): Call
- FT_Size_Request.
- (sfnt_interface): Updated.
-
- * src/sfnt/ttsbit.c [FT_CONFIG_OPTION_OLD_INTERNALS]: Don't load
- ttsbit0.c.
- (tt_load_sbit_metrics): Make `sbit_small_metrics_fields' static.
-
- * src/sfnt/ttsbit.h: Updated.
-
-2006-02-17 David Turner <david@freetype.org>
-
- * builds/unix/unix-cc.in (LINK_LIBRARY): Don't filter out exported
- functions anymore. This ensures that all FT_BASE internal functions
- are available for dynamic linking.
-
- * include/freetype/ftcache.h (FTC_IMAGE_TYPE_COMPARE,
- FTC_IMAGE_TYPE_HASH), src/cache/ftcbasic.c (FTC_OldFontRec,
- FTC_OldImageDescRec, FTC_ImageCache_Lookup, FTC_Image_Cache_New,
- FTC_OldImageDesc, FTC_OLD_IMAGE_FORMAT, ftc_old_image_xxx,
- ftc_image_type_from_old_desc, FTC_Image_Cache_Lookup,
- FTC_SBitCache_Lookup, FTC_SBit_Cache_New, FTC_SBit_Cache_Lookup)
- [FT_CONFIG_OPTION_OLD_INTERNALS]: Try to revive old functions of the
- cache sub-system. We try to recognize old legacy signatures with a
- gross hack (hope it works).
-
-2006-02-17 Werner Lemberg <wl@gnu.org>
-
- * devel/ftoption.h: Synchronize with
- include/freetype/config/ftoption.h.
-
-2006-02-16 David Turner <david@freetype.org>
-
- Massive changes to the internals to respect the internal object
- layouts and exported functions of FreeType 2.1.7. Note that the
- cache sub-system cannot be fully retrofitted, unfortunately.
-
- * include/freetype/config/ftoption.h
- (FT_CONFIG_OPTION_OLD_INTERNALS): New macro.
-
- * include/freetype/ftcache.h, include/freetype/cache/ftccache.h,
- include/freetype/cache/ftccmap.h,
- include/freetype/internal/ftcalc.h,
- include/freetype/internal/ftdriver.h,
- include/freetype/internal/ftmemory.h,
- include/freetype/internal/ftobjs.h,
- include/freetype/internal/psaux.h, include/freetype/internal/sfnt.h,
- include/freetype/internal/t1types.h,
- include/freetype/internal/tttypes.h, src/base/ftcalc.c,
- src/base/ftdbgmem.c, src/base/ftobjs.c, src/base/ftutil.c,
- src/bdf/bdfdrivr.c, src/cache/ftccache.c, src/cache/ftccback.h,
- src/cache/ftcmanag.c, src/cff/cffdrivr.c, src/cid/cidriver.c,
- src/pcf/pcfdrivr.c, src/pfr/pfrdrivr.c, src/psaux/psauxmod.c,
- src/sfnt/sfdriver.c, src/truetype/ttdriver.c, src/type1/t1driver.c,
- src/type1/t1objs.c, src/type42/t42drivr.c, src/winfonts/winfnt.c:
- Use FT_CONFIG_OPTION_OLD_INTERNALS to revive old functions and data
- structures.
-
- Move newly added structure elements to the end of the affected
- structure and add stub fields (if FT_CONFIG_OPTION_OLD_INTERNALS is
- defined) to assure binary compatibility with older FreeType
- versions.
- Use FT_CONFIG_OPTION_OLD_INTERNALS to add function stubs for old
- functions:
-
- ft_stub_set_char_sizes
- ft_stub_set_pixel_sizes
-
- Rename the following internal functions to provide the old function
- names as stubs:
-
- FT_Alloc -> ft_mem_alloc
- FT_QAlloc -> ft_mem_qalloc
- FT_Realloc -> ft_mem_realloc
- FT_QRealloc -> ft_mem_qrealloc
- FT_Free -> ft_mem_free
- FT_Alloc_Debug -> ft_mem_alloc_debug
- FT_QAlloc_Debug -> ft_mem_qalloc_debug
- FT_Realloc_Debug -> ft_mem_realloc_debug
- FT_QRealloc_Debug -> ft_mem_qrealloc_debug
- FT_Free_Debug -> ft_mem_free_debug
-
-2006-02-15 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): Remove
- unused `max_points' and `max_contours'.
-
- * src/cid/cidobjs.c (cid_face_init), src/type1/t1objs.c
- (T1_Face_Init), src/type42/t42objs.c (T42_Face_Init): Update.
-
- * include/freetype/internal/tttypes.h (TT_FaceRec): Remove unused
- `max_components'.
-
- * src/truetype/ttinterp.h (TT_ExecContextRec): Remove unused
- `loadSize' and `loadStack'.
-
- * src/truetype/ttinterp.c (TT_Done_Context, TT_Load_Context),
- src/sfnt/ttload.c (tt_face_load_maxp): Update.
-
- * src/cff/cffobjs.h (cff_size_select), src/sfnt/sfdriver.c
- (sfnt_interface), src/truetype/ttdriver.c (tt_size_request): Fix
- compiler errors/warnings when TT_CONFIG_OPTION_EMBEDDED_BITMAPS is not
- defined.
-
- * src/sfnt/ttmtx.c (tt_face_load_hmtx, tt_face_get_metrics): Fix
- possible segment faults for the non-FT_OPTIMIZE_MEMORY'ed versions.
- (finally!)
-
-
- For most OpenType tables, `tt_face_load_xxxx' simply loads the table
- and `face->root' is set later in `sfnt_load_face'. Here, we try to
- make this work for _all_ tables. Also improve tracing messages.
-
- * src/sfnt/ttsbit.c, src/sfnt/ttsbit0.c, src/sfnt/ttload.c,
- src/sfnt/ttmtx.c: all `tt_face_load_xxxx' should load the table and
- then exit. Error handling or setting face->root is done later in
- `sfnt_load_face'.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Work harder.
- Mac bitmap-only fonts are not scalable.
- Check that `face->header.Units_Per_EM' is not zero.
- (LOAD_, LOADM_): Emit pretty trace messages.
-
- * src/sfnt/ttsbit0.c (tt_face_load_strike_metrics): Read metrics
- from `eblc'.
-
- * src/sfnt/ttcmap.c (tt_face_build_cmaps), src/sfnt/ttpost.c
- (load_format_20, load_format_25, tt_face_get_ps_name): Use
- face->max_profile.numGlyphs, instead of face->root.num_glyphs.
-
-2006-02-14 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftoutln.h (FT_Outline_Embolden): Mention in
- documentation that negative strength values are possible.
- Give an example call.
-
- * include/freetype/freetype.h (FT_GlyphSlotRec): Improve
- documentation of `outline' field.
-
- * src/sfnt/sfobjs.c: Include FT_INTERNAL_DEBUG_H.
- * src/sfnt/sfdriver.c: Include ttmtx.h.
-
- * src/autofit/afcjk.c: Include aftypes.h and aflatin.h.
-
-2006-02-14 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/sfnt/ttmtx.c (tt_face_get_metrics): Typo.
-
-2006-02-14 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/sfnt/ttmtx.c (tt_face_load_hhea, tt_face_load_hmtx): Simply
- return error if table is missing.
- Check table length in non-FT_OPTIMIZE_MEMORY'ed `tt_face_load_hmtx'.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Take care of missing metrics
- tables. The last change makes Mac bitmap-only font not load and
- this fixes it.
-
- * src/truetype/ttgload.c (load_truetype_glyph): Fix compilation
- error when FT_CONFIG_OPTION_INCREMENTAL is defined.
-
-2006-02-13 Chia-I Wu <b90201047@ntu.edu.tw>
-
- Clean up the SFNT_Interface. In this final pass, `load_hmtx' is
- split from `load_hhea'.
-
- * include/freetype/internal/sfnt.h, src/sfnt/sfdriver.c,
- src/sfnt/ttmtx.c, src/sfnt/ttmtx.h: Split `hmtx' from `hhea'.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Update.
-
-2006-02-13 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/sfnt/ttmtx.h, src/sfnt/ttmtx.c: Why are there two copies of
- code...
-
-2006-02-13 Chia-I Wu <b90201047@ntu.edu.tw>
-
- Clean up the SFNT_Interface. In this pass, we want to treat the
- font directory (offset table and table directory) as a normal table
- like the others. This also means that TTCs are no longer recognized
- there but in `init_face'.
-
- * include/freetype/internal/sfnt.h (SFNT_Interface),
- src/sfnt/sfdriver.c: `load_sfnt_header' and `load_directory' are
- combined and renamed to `load_font_dir'.
-
- * src/sfnt/ttload.h, src/sfnt/ttload.c:
- s/sfnt_dir_check/check_table_dir/.
- `sfnt_init' is moved to sfobjs.c and renamed to `sfnt_open_font'.
- `tt_face_load_sfnt_header' and `tt_face_load_directory' are combined
- and renamed to `tt_face_load_font_dir'.
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Recognize TTC here.
-
-2006-02-13 Chia-I Wu <b90201047@ntu.edu.tw>
-
- Clean up the SFNT_Interface. Table loading functions are now named
- after the tables' tags; `hdmx' is TrueType-specific and thus the
- code is moved to the truetype module; `get_metrics' is moved here
- from the truetype module so that the code can be shared with the cff
- module.
-
- This pass involves no real changes. That is, the code is moved
- verbatim mostly. The only exception is the return value of
- `tt_face_get_metrics'.
-
- * include/freetype/internal/sfnt.h, src/sfnt/rules.mk,
- src/sfnt/sfdriver.c, src/sfnt/sfnt.c, src/sfnt/sfobjs.c,
- src/sfnt/ttload.c, src/sfnt/ttload.h, src/sfnt/ttsbit.c,
- src/sfnt/ttsbit.h, src/sfnt/ttsbit0.c: Clean up the SFNT_Interface.
-
- * src/sfnt/ttmtx.c, src/sfnt/ttmtx.h: New files. Metrics-related
- tables' loading and parsing code is moved to here.
- Move `tt_face_get_metrics' here from the truetype module. The
- return value is changed from `void' to `FT_Error'.
-
- * include/freetype/internal/fttrace.h: New trace: ttmtx.
-
- * src/truetype/ttpload.c, src/truetype/ttpload.h: `hdmx' loading and
- parsing code is moved here.
- New function `tt_face_load_prep' split from `tt_face_load_fpgm'.
- `tt_face_load_fpgm' returns `FT_Err_Ok' if `fpgm' doesn't exist.
-
- * src/cff/cffgload.c, src/cff/cffobjs.c: Update.
-
- * src/truetype/ttgload.c, src/truetype/ttobjs.c: Update.
-
-2006-02-11 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/autofit/afcjk.c (af_cjk_metrics_init): Fix a stupid bug...
-
- * src/autofit/aflatin.c (af_latin_metrics_init_widths): Use
- AF_LatinMetricsRec as the dummy metrics because we cast the metrics
- to it later in `af_latin_hints_link_segments'.
-
-2006-02-11 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/config/ftoption.h (AF_CONFIG_OPTION_CJK): #define
- to enable autofit CJK script support. (#define'd by default.)
-
- * src/autofit/aflatin.h (AF_LATIN_CONSTANT): New macro.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_widths): Make sure
- that `edge_distance_threshold' is always set.
- (af_latin_hints_link_segments): Potential divide-by-zero bug.
- Use latin constant in the scoring formula.
-
- * src/autofit/afcjk.c: Minor updates due to the above three changes.
-
- * docs/TODO, docs/CHANGES: Updated.
-
-2006-02-09 Chia-I Wu <b90201047@ntu.edu.tw>
-
- Introduce experimental autofit CJK module based on akito's autohint
- patch. You need to #define AF_MOD_CJK in afcjk.c to enable it.
-
- * src/autofit/afglobal.c, src/autofit/afcjk.h, src/autofit/afcjk.c,
- src/autofit/rules.mk, src/autofit/autofit.c, src/autofit/aftypes.h:
- Add CJK module based on akito's autohint patch.
-
- * src/autofit/afhints.h (AF_SegmentRec): New field `len' for the
- overlap length of the segments.
- (AF_SEGMENT_LEN, AF_SEGMENT_DIST): New macros.
-
- * src/autofit/aflatin.h (af_latin_metrics_init_widths),
- src/autofit/aflatin.c (af_latin_metrics_init_widths): Made
- `FT_LOCAL'.
- Use the character given by the caller.
- (af_latin_metrics_init_widths, af_latin_hints_link_segments): Scale
- the thresholds.
-
- * src/autofit/afloader.c (af_loader_load_g): Respect
- AF_SCALER_FLAG_NO_ADVANCE.
-
-2006-02-09 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidparse.c (cid_parse_new): Remove shadowing variable.
-
-2006-02-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/cid/cidparse.c (cid_parse_new): Fix for abnormally short or
- broken CIDFont. Reported by Taek Kwan(TK) Lee (see ft-devel
- 2005-11-02).
-
-2006-02-08 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/configure.ac: Fix bug for `--with-old-mac-fonts'
- option on UNIX platform. It has been broken since 2006-01-11.
-
-2006-02-01 Werner Lemberg <wl@gnu.org>
-
- * src/otvalid/module.mk: s/otvalid_module_class/otv_module_class/.
- * src/gxvalid/module.mk: s/gxvalid_module_class/gxv_module_class/.
-
- * builds/unix/unixddef.mk: Actually do define PLATFORM (fixing
- change from 2006-01-31).
- (TOP_DIR, OBJ_DIR): Update.
-
- * builds/unix/install.mk (install): Fix path for ftmodule.h.
-
- * Makefile, *.mk, builds/unix/unix-cc.in, builds/unix-def.in: Use
- `?=' where appropriate.
-
- * builds/detect.mk (TOP_DIR), builds/os2/os2-dev.mk (TOP_DIR),
- builds/win32/w32-dev.mk (TOP_DIR): Removed. Defined elsewhere.
-
-2006-01-31 Werner Lemberg <wl@gnu.org>
-
- Implement new, simplified module selection. With GNU make it is now
- sufficient to modify a single file, `modules.cfg', to control the
- inclusion of modules and base extension files.
-
- This change also fixes the creation of ftmodule.h; it now depends on
- `modules.cfg' and thus is rebuilt only if necessary.
-
- Finally, a version of `ftoption.h' in OBJ_DIR is preferred over the
- default location.
-
- * modules.cfg: New file.
-
- * builds/freetype.mk: Don't include `modules.mk'.
- Include all `rules.mk' files as specified in `modules.cfg'.
- (FTOPTION_FLAG, FTOPTION_H): New variables.
- (FT_CFLAGS): Add macro definition for FT_CONFIG_MODULES_H.
- Add FTOPTION_FLAG.
- ($(FT_INIT_OBJ)): Don't use FT_MODULE_LIST.
- (CONFIG_H): Add FTMODULE_H and FTOPTION_H.
- (INCLUDES): Add DEVEL_DIR.
- (INCLUDE_FLAGS, FTSYS_SRC, FTSYS_OBJ, FTDEBUG_SRC, FTDEBUG_OBJ,
- OBJ_M, OBJ_S): Use `:=', not `='.
- (remove_ftmodule_h): New phony target to delete `ftmodule.h'.
- (distclean): Add remove_ftmodule_h.
-
- * builds/modules.mk: (MODULE_LIST): Removed.
- (make_module_list, clean_module_list): Replace targets
- with...
- (FTMODULE_H_INIT, FTMODULE_H_CREATE, FTMODULE_H_DONE): New
- variables. Reason for the change is that it is not possible to have
- a phony prerequisite which is run only if the target file must be
- rebuilt (phony prerequisites act like subroutines and are *always*
- executed). We only want to rebuild `ftmodule.h' if `module.cfg' is
- changed.
- Update all callers.
- ($FTMODULE_H)): Rule to create `ftmodule.h', depending on
- `modules.cfg'.
-
- * builds/toplevel.mk: Rewrite and simplify module handling.
- (MODULES_CFG, FTMODULE_H): New variables.
- Include MODULES_CFG.
- (MODULES): New variable to include all `module.mk' and `rules.mk'
- files. We no longer use make's `wildcard' function for this.
-
- * Makefile (USE_MODULES): Remove. Update all users.
- (OBJ_DIR): Define it here.
-
- * src/*/module.mk: Change
-
- make_module_list: foo
- foo: ...
-
- to
-
- FTMODULE_H_COMMANDS += FOO
- define FOO
- ...
- endef
-
- in all files. `FTMODULE_H_COMMANDS' is used in `FTMODULE_H_CREATE'.
-
- * src/base/rules.mk (BASE_EXT_SRC): Use BASE_EXTENSIONS.
-
- * builds/unix/detect.mk (setup): Always execute `configure' script.
- (have_mk): Rename to...
- (have_Makefile): This.
- Don't use `strip' function.
-
- * builds/unix/unix.mk: Include `install.mk' only if BUILD_PROJECT is
- defined.
- (have_mk): Don't use `strip' function.
- Test for unix-def.mk in OBJ_DIR, not BUILD_DIR (and invert the test
- accordingly).
-
- * builds/unix/install.mk (install, uninstall): Handle `ftmodule.h'.
-
- * builds/os2/os2-dev.mk, builds/unix/unix-dev.mk,
- builds/win32/w32-bccd.mk, builds/win32/w32-dev.mk: Don't define
- BUILD_DIR but DEVEL_DIR for development header files.
-
- * builds/ansi/ansi-def.mk (TOP_DIR, OBJ_DIR),
- builds/beos/beos-def.mk (TOP_DIR, OBJ_DIR), builds/unix/unix-def.in
- (TOP_DIR, OBJ_DIR): Removed. Defined elsewhere.
-
- * builds/dos/dos-def.mk (OBJ_DIR), builds/os2/os2-def.mk (OBJ_DIR),
- builds/win32/win32-def.mk (OBJ_DIR): Removed. Defined elsewhere.
-
- * builds/unix/unixddef.mk: Don't define BUILD_DIR but DEVEL_DIR for
- development header files.
- Don't define PLATFORM.
-
- * configure: Copy `modules.cfg' to builddir if builddir != srcdir.
- Update snippet taken from autoconf's m4sh.m4 to current CVS version.
- Be more verbose.
-
- * include/freetype/config/ftmodule.h: Add comments -- this file is
- no longer used if FreeType is built with GNU make.
-
- * docs/CHANGES, docs/CUSTOMIZE, docs/INSTALL, docs/INSTALL.ANY,
- docs/INSTALL.GNU, docs/INSTALL.UNX: Document new build mechanism.
- Other minor updates.
-
- * modules.txt: Removed. Contents included in `modules.cfg'.
-
-
- * include/freetype/internal/ftmemory.h (FT_QAlloc_Debug,
- FT_Free_Debug) [FT_STRICT_ALIASING]: Fix typos.
-
- * src/base/ftdbgmem.c (FT_Alloc_Debug, FT_Realloc_Debug,
- FT_QAlloc_Debug, FT_QRealloc_Debug, FT_Free_Debug)
- [FT_STRICT_ALIASING]: Implement.
-
-2006-01-31 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/cff/cffobjs.c (cff_face_init), src/cid/cidobjs.c
- (cid_face_init), src/pfr/pfrobjs.c (pfr_face_init),
- src/type1/t1objs.c (T1_Face_Init): Set face->height to MAX(1.2 *
- units_per_EM, ascender - descender).
-
-2006-01-31 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/internal/t1types.h (AFM_FontInfo),
- src/psaux/afmparse.c, src/tools/test_afm.c: Read `FontBBox',
- `Ascender', and `Descender' from an AFM.
-
- * src/type1/t1afm.c (T1_Read_Metrics): Use the metrics from the AFM.
-
- * include/freetype/freetype.h (FT_FaceRec): Mention that fields may
- be changed after file attachment.
-
-2006-01-28 Werner Lemberg <wl@gnu.org>
-
- * src/*/module.mk (.PHONY): Add.
-
-2006-01-27 Werner Lemberg <wl@gnu.org>
-
- * README, docs/FTL.TXT: Fix email address for bug reports.
- Other minor formatting.
-
- * devel/ftoption.h: Synchronize with
- include/freetype/config/ftoption.h.
-
- * src/autofit/module.mk (add_autofit_module), src/bdf/module.mk
- (add_bdf_module), src/type42/module.mk (add_type42_driver): Fix
- whitespace.
-
- * src/smooth/module.mk (add_smooth_renderer): Add lcd and lcdv
- renderer classes.
-
-2006-01-27 David Turner <david@freetype.org>
-
- * builds/unix/configure.ac: Fix build problem on Cygwin.
-
- * builds/unix/install.mk (install): Don't install the internal
- headers, and remove existing ones if found in the target install
- directory.
-
- * src/autofit/afwarp.c: Add simple #ifdef to prevent compilation
- if the warp hinter isn't active (it shouldn't, still experimental).
-
- * Jamfile, include/freetype/config/ftmodule.h: Remove `gxvalid'
- and `otvalid' from the list of modules that are linked statically
- to a given FreeType library. Functionality has been moved to the
- `ftvalid' CVS module.
-
- Note also that current Make-based build system still compiles the
- modules though.
-
- * include/freetype/config/ftoption.h (FT_STRICT_ALIASING): New macro
- which controls the definitions of the memory management functions to
- avoid warnings with recent versions of GCC. This macro is only here
- to be disabled, in case we detect problems with the new scheme.
-
- NOTE: Disable macro to use the memory debugger -- this will be fixed
- later!
-
- * include/freetype/internal/ftmemory.h, src/base/ftutil.c (FT_Alloc,
- FT_QAlloc, FT_Realloc, FT_QRealloc, FT_Free) [FT_STRICT_ALIASING]:
- New versions.
-
-
- * builds/win32/visualc/freetype.dsp: Updating project file to
- define FT2_BUILD_LIBRARY, and remove gxvalid + otvalid modules from
- compilation.
-
-
- * builds/freetype.mk (FT_CFLAGS), Jamfile (DEFINES): Define the
- macro FT2_BUILD_LIBRARY when compiling the library.
-
- * include/freetype/config/ftheader.h: Remove inclusions of internal
- headers except if the macro FT2_BUILD_LIBRARY is defined.
-
-
- * include/freetype/internal/psaux.h (AFM_KernPair, AFM_TrackKern,
- AFM_FontInfo): Move structure declarations to...
- * include/freetype/internal/t1types.h: This file.
-
-
- * (many files): Fix compiler warnings.
- Various minor reorganizations.
-
-
- * src/cff/cffload.c (cff_font_done): Don't free static array
- `subfonts'.
-
- * src/otvalid/otvcommn.c (otv_ClassDef_validate),
- src/otvalid/otvgpos.c (otv_x_sxy): Fix debugging information.
-
-
- Get rid of writable static variables (i.e., the string table) in
- afmparse, and fix compilation in FT2_MULTI mode.
-
- * src/psaux/afmparse.c: Include ft2build.h and FT_FREETYPE_H.
- (AFM_MAX_ARGUMENTS): Define...
- * src/psaux/afmparse.h: Here.
- * src/psaux/Jamfile (_sources): Add afmparse.
-
- * src/psaux/psconv.c: Include psconv.h.
-
- * src/type1/t1afm.c: Don't include FT_INTERNAL_TYPE1_TYPES_H but
- FT_INTERNAL_POSTSCRIPT_AUX_H.
- * src/type1/t1afm.h: Include FT_INTERNAL_TYPE1_TYPES_H.
-
-2006-01-23 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/freetype.h (FT_Select_Size): Rename the second
- argument from `idx' to `strike_index'.
- (FT_Size_Request_Type): Add FT_SIZE_REQUEST_TYPE_MAX to the end of
- this enum.
-
- * include/freetype/internal/ftobjs.h (FT_REQUEST_WIDTH,
- FT_REQUEST_HEIGHT): New macros to get the width and height of a
- request, in fractional pixels.
-
- * include/freetype/internal/ftobjs.h (FT_Select_Metrics,
- FT_Request_Metrics), src/base/ftobjs.c (FT_Select_Metrics,
- FT_Request_Metrics): New base functions to set the font metrics. They
- were part of FT_Select_Size/FT_Request_Size and are made independent
- functions so that metrics are not set again and again.
-
- * src/base/ftobjs.c (FT_Select_Size, FT_Request_Size): Metrics are set
- only when driver's size_select/size_request is NULL. That is, drivers
- should set the metrics themselves.
- (FT_Match_Size): Round before matching. This was what we did and it
- does cause some problems without rounding.
-
- * src/cff/cffobjs.c (cff_size_select), src/truetype/ttdriver.c
- (tt_size_select): Set the font metrics.
- s/index/strike_index/.
- The scaled metrics are always preferred over strikes' metrics, even
- when some strike is selected. This is done because the strikes'
- metrics are not reliable, e.g., the sign of the descender is wrong for
- some fonts.
-
- * src/cff/cffobjs.c (cff_size_request), src/truetype/ttdriver.c
- (tt_size_request): Set the font metrics.
- Call cff_size_select/tt_size_select when some strike is matched.
-
- * src/bdf/bdfdrivr.c, src/cff/cffobjs.c, src/cid/cidobjs.c,
- src/pcf/pcfdrivr.c, src/truetype/ttdriver.c, src/type1/t1objs.c,
- src/type1/t1objs.h, src/type42/t42objs.c, src/winfonts/winfnt.c:
- Set the font metrics.
- s/index/strike_index/.
-
- * src/tools/test_afm.c, src/psaux/psconv.c: Older versions of these
- files were committed. Just a catch-up.
- (PS_Conv_ToFixed): Remove the `goto'.
- (PS_Conv_ASCIIHexDecode, PS_Conv_EexecDecode): Speed up a little.
-
- * src/sfnt/ttsbit.c (tt_face_load_sbit_strikes,
- tt_face_load_strike_metrics), src/sfnt/ttsbit0.c
- (tt_face_load_sbit_strikes, tt_face_load_strike_metrics): The
- advertised metrics in `available_sizes' are different from those
- actually used.
-
-2006-01-23 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/psaux/psaux.c src/psaux/psauxmod.c src/type1/t1driver.c: Make
- AFM parser optional, controlled by `T1_CONFIG_OPTION_NO_AFM'.
-
-2006-01-22 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/install-sh, builds/unix/mkinstalldirs: Updated from
- `texinfo' CVS module at savannah.gnu.org.
-
-2006-01-21 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/rules.mk (AUTOF_DRV_SRC): Add afwarp.c.
-
- * src/autofit/afloader.c (af_loader_load_g): Move AF_USE_WARPER up
- to avoid compiler warnings.
-
- * src/autofit/afwarp.c (af_warper_compute_line_best): Remove
- shadowing variable declarations.
- Fix warning parameters and replace printf with AF_LOG.
- (af_warper_compute): Remove unused variable.
-
-2006-01-20 David Turner <david@freetype.org>
-
- Adding experimental implementation of `warp hinting' (new hinting
- algorithm for gray-level and LCD rendering). It is disabled by
- default, you need to #define AF_USE_WARPER in aftypes.h.
-
- * src/autofit/afhints.c (af_glyph_hints_scale_dim) [AF_USE_WARPER]:
- New function.
- * src/autofit/afhints.h: Updated.
-
- * src/autofit/aflatin.c [AF_USE_WARPER]: Include afwarp.h.
- (af_latin_hints_init) [AF_USE_WARPER]: Reset mode to
- FT_RENDER_MODE_NORMAL if an LCD mode is selected.
- (af_latin_hints_apply) [AF_USE_WARPER]: Call af_warper_compute
- appropriately.
-
- * src/autofit/afloader.c (af_loader_load_g) [!AF_USER_WARPER]:
- Isolate code for adjusting metrics.
-
- * src/autofit/aftypes.h (AF_USE_WARPER): New macro (commented out by
- default).
-
- * src/autofit/afwarp.c, src/autofit/afwarp.h: New files.
-
- * src/autofit/autofit.c [AF_USE_WARPER]: Include afwarp.c.
-
- * src/autofit/Jamfile (_sources): Add afwarp.
-
-2006-01-19 David Turner <david@freetype.org>
-
- * src/sfnt/ttsbit0.c (tt_face_load_strike_metrics): Fix small bug
- that prevented compilation when FT_OPTIMIZE_MEMORY is defined.
-
-2006-01-19 Brian Weed <bw@imaginengine.com>
-
- * builds/win32/visualc/freetype.dsp: Updated.
-
-2006-01-17 Werner Lemberg <wl@gnu.org>
-
- Use pscmap service in CFF module.
-
- * src/cff/cffcmap.c (cff_cmap_uni_pair_compare): Removed.
- (cff_sid_to_glyph_name): New function.
- (cff_cmap_unicode_init, cff_cmap_unicode_done,
- cff_cmap_unicode_char_index, cff_cmap_unicode_char next): Use pscmap
- service.
- (cff_cmap_unicode_class_rec): Updated.
- * src/cff/cffcmap.h (CFF_CMapUnicode, CFF_CMap_UniPair): Removed.
-
-
- * src/psnames/psmodule.c (ps_unicodes_char_next): Fix `unicode'
- return value.
-
-
- * src/psaux/afmparse.c (afm_parser_read_vals): Use double casting
- to avoid compiler warnings regarding type-punning.
-
-2006-01-16 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/psaux/afmparse.c, src/psaux/afmparse.h: New files which
- implement an AFM parser.
-
- * src/psaux/psconv.c, src/psaux/psconv.h: New files to provide
- conversion functions (e.g., PS real number => FT_Fixed) for the
- PS_Parser and AFM_Parser. Some of the functions are taken, with
- some modifications, from the file psobjs.c.
-
- * src/psaux/psobjs.c: Use functions from psconv.c.
-
- * include/freetype/internal/psaux.h, src/psaux/psauxmod.c: Add
- `AFM_Parser' to the `psaux' service.
-
- * src/psaux/psaux.c, src/psaux/rules.mk (PSAUX_DRV_SRC): Include
- those new files.
-
- * src/tools/test_afm.c: A test program for AFM parser.
-
- * include/freetype/internal/services/svkern.h: New file providing a
- `Kerning' service. It is currently only used to get the track
- kerning information.
-
- * include/freetype/internal/ftserv.h (FT_SERVICE_KERNING_H): New
- macro.
-
- * src/type1/t1driver.c, src/type1/t1objs.c, src/type1/t1afm.c,
- src/type1/t1afm.h: Update to use the AFM parser.
- Provide the `Kerning' service.
-
- * include/freetype/freetype.h, src/base/ftobjs.c: New API
- `FT_Get_Track_Kerning'.
-
-2006-01-15 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/internal/ftobjs.h, src/base/ftobjs.c,
- src/bdf/bdfdrivr.c, src/cff/cffgload.c, src/cid/cidgload.c,
- src/pcf/pcfdrivr.c, src/type1/t1gload.c, src/winfonts/winfnt.c:
- s/ft_fake_vertical_metrics/ft_synthesize_vertical_metrics/.
-
- * docs/CHANGES: Mention that vertical metrics are synthesized for
- fonts not having this info.
-
-2006-01-15 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/internal/ftobjs.h (ft_fake_vertical_metrics),
- src/base/ftobjs.c (ft_fake_vertical_metrics): New function to fake
- vertical metrics.
-
- * src/cff/cffgload.c, src/cid/cidgload.c, src/pcf/pcfdrivr.c,
- src/type1/t1gload.c, src/winfonts/winfnt.c: Fake vertical metrics,
- which are monotone.
-
- * src/truetype/ttgload.c (compute_glyph_metrics): Some fixes and
- formattings in vertical metrics faking. There is still room for
- improvements (and so does the CFF module).
-
-2006-01-15 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/bdf/bdfdrivr.c (BDF_Glyph_Load), src/pcf/pcfdrivr.c
- (PCF_Glyph_Load), src/winfonts/winfnt.c (FNT_Load_Glyph): Don't set
- the linear advance fields as they are only used by the outline
- glyphs.
-
- * include/freetype/freetype.h: Documentation updates and
- clarifications.
- The meaning of FT_LOAD_FORCE_AUTOHINT is changed so that no real
- change need be made to the code.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Resolve flag dependencies and
- decide whether to use the auto-hinter according to documentation.
- There should to be no real difference.
- Some checks (e.g., is text height positive?) after the glyph is
- loaded.
- (FT_Select_Size, FT_Request_Size): Scales are set to wrong values.
- Be careful that scales won't be negative.
-
-2006-01-14 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * docs/CHANGES: Mention the size selection change.
-
- * src/bdf/bdfdrivr.c (BDF_Size_Request, BDF_Size_Select),
- src/pcf/pcfdrivr.c (PCF_Size_Request, PCF_Size_Select),
- src/winfonts/winfnt.c (FNT_Size_Request, FNT_Size_Select): Do size
- matching for requests of type NOMINAL and REAL_DIM.
-
- * src/winfonts/winfnt.c (FNT_Face_Init): Print trace message when
- `pixel_height' is used for nominal height.
-
- * src/base/ftobjs.c (FT_Request_Size): Call `FT_Match_Size' if the
- face is bitmap only and driver doesn't provide `request_size'. This
- is added merely for completion as no driver satisfies the conditions.
-
-2006-01-13 Chia-I Wu <b90201047@ntu.edu.tw>
-
- Introduce new size selection interface.
-
- * include/freetype/internal/ftdriver.h (struct FT_Driver_ClassRec):
- Replace `set_char_sizes' and `set_pixel_sizes' by `request_size' and
- `select_size'.
-
- * include/freetype/freetype.h (FT_Select_Size, FT_Size_Request_Type,
- FT_Size_Request, FT_Request_Size, FT_Select_Size), src/base/ftobjs.c
- (FT_Select_Size, FT_Request_Size): API additions to export the new
- size selection interface.
-
- * src/base/ftobjs.c (FT_Set_Char_Size, FT_Set_Pixel_Sizes): Use
- `FT_Request_Size'.
-
- * include/freetype/internal/ftobjs.h (FT_Match_Size),
- src/base/ftobjs.c (FT_Match_Size): New function to match a size
- request against `available_sizes'. Drivers supporting bitmap strikes
- can use this function to implement `request_size'.
-
- * src/bdf/bdfdrivr.c, src/cid/cidobjs.c, src/cid/cidobjs.h,
- src/cid/cidriver.c, src/pcf/pcfdrivr.c, src/type1/t1driver.c,
- src/type1/t1objs.c, src/type1/t1objs.h, src/type42/t42drivr.c,
- src/type42/t42objs.c, src/type42/t42objs.h, src/winfonts/winfnt.c:
- Update to new size selection interface.
-
- * src/cff/cffdrivr.c, src/cff/cffgload.c, src/cff/cffobjs.c,
- src/cff/cffobjs.h, src/truetype/ttdriver.c, src/truetype/ttgload.c,
- src/truetype/ttobjs.c, src/truetype/ttobjs.h: Update to new size
- selection interface.
- Make `strike_index' FT_ULong and always defined.
- Use `load_strike_metrics' provided by SFNT interface.
-
-2006-01-13 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/internal/sfnt.h (SFNT_Interface): New method
- `load_strike_metrics' used to load the strike's metrics.
-
- * src/sfnt/sfdriver.c, src/sfnt/ttsbit.c, src/sfnt/ttsbit.h,
- src/sfnt/ttsbit0.c: New function `tt_face_load_strike_metrics'.
-
- * src/pfr/pfrobjs.c (pfr_face_init): Set FT_Bitmap_Size correctly.
-
- * src/winfonts/winfnt.c (FNT_Face_Init): Use `nominal_point_size' for
- nominal size unless it is obviously incorrect.
-
- * include/freetype/freetype.h (FT_Bitmap_Size): Update the comments on
- FNT driver.
-
-2006-01-12 Werner Lemberg <wl@gnu.org>
-
- Prepare use of pscmap service within CFF module.
-
- * include/freetype/internal/services/svpscmap.h: Include
- FT_INTERNAL_OBJECTS_H.
- (PS_Unicode_Index_Func): Removed. Unused.
- (PS_Macintosh_Name_Func): Renamed to...
- (PS_Macintosh_NameFunc): This.
- Update all callers.
- (PS_Adobe_Std_Strings_Func): Renamed to...
- (PS_Adobe_Std_StringsFunc): This.
- Update all callers.
- (PS_UnicodesRec): This is the former `PS_Unicodes' structure.
- Add `cmap' member.
- Update all callers.
- (PS_Unicodes): This is now a typedef'd pointer to PS_UnicodesRec.
- Update all callers.
- (PS_Glyph_NameFunc): New typedef.
- (PS_Unicodes_InitFunc): Change arguments to expect a function
- and generic data pointer which returns a glyph name from a given
- index.
-
- * src/psnames/psmodule.c (ps_unicodes_init, ps_unicodes_char_index,
- ps_unicodes_char_next, pscmaps_interface): Updated.
-
- * include/freetype/internal/t1types.h (T1_FaceRec): Updated.
-
- * src/psaux/t1cmap.h (T1_CMapStdRec): Updated.
- (T1_CMapUnicode, T1_CMapUnicodeRec): Removed.
-
- * src/psaux/t1cmap.c (t1_get_glyph_name): New callback function.
- (t1_cmap_unicode_init, t1_cmap_unicode_done,
- t1_cmap_unicode_char_index, t1_cmap_unicode_char_next,
- t1_cmap_unicode_class_rec): Updated.
-
- * src/type42/t42types.h (T42_FaceRec): Updated.
-
-2006-01-11 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * include/freetype/ftmac.h: Add declaration of new functions
- FT_New_Face_From_FSRef and FT_GetFile_From_Mac_ATS_Name that
- were introduced by the jumbo patch on 2006-01-11.
-
-2006-01-11 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #15056 and use pscmap service in psaux module.
-
- * include/freetype/internal/services/svpscmap.h (PS_UniMap): Use
- FT_UInt32 for `glyph_index'.
- (PS_Unicodes_InitFunc): Use FT_String for `glyph_names'.
- (PS_Unicodes_CharIndexFunc): Use FT_UInt32 for `unicode'.
- (PS_Unicodes_CharNextFunc): Make second argument a pointer to
- FT_UInt32.
-
- * src/psnames/psmodule.c (VARIANT_BIT, BASE_GLYPH): New macros.
- (ps_unicode_value): Set VARIANT_BIT in return value if glyph is a
- variant glyph (this is, it has non-leading `.' in its name).
- (compare_uni_maps): Sort base glyphs before variant glyphs.
- (ps_unicodes_init): Use FT_String for `glyph_names' argument.
- Reallocate only if number of used entries is much smaller.
- Updated to handle variant glyphs.
- (ps_unicodes_char_index, ps_unicodes_char_next): Prefer base glyphs
- over variant glyphs.
- Simplify code.
-
- * src/psaux/t1cmap.c (t1_cmap_uni_pair_compare): Removed.
- (t1_cmap_unicode_init, t1_cmap_unicode_char_index,
- t1_cmap_unicode_char_next): Use pscmap service.
- (t1_cmap_unicode_done): Updated.
-
- * src/psaux/t1cmap.h (T1_CMapUniPair): Removed.
- (T1_CMapUnicode): Use PS_Unicodes structure.
-
-2006-01-11 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Jumbo patch to fix `deprecated' warning of cross-build for Tiger on
- Intel, as reported by Sean McBride <sean@rogue-research.com> on
- 2005-08-24.
-
- * src/base/ftmac.c: Heavy change to build without deprecated Carbon
- functions on Tiger.
-
- * builds/unix/configure.ac: Add options and autochecks for Carbon
- functions availabilities, for MacOS X.
-
- * builds/mac/ascii2mpw.py: Add converter for character `\305'.
- * builds/mac/FreeType.m68k_{far|cfm}.make.txt: Add conditional
- macros to avoid unavailable functions.
- ftmac.c must be compiled without `-strict ansi', because it disables
- cpp macro to use ToolBox system call.
-
- * builds/mac/FreeType.ppc_{classic|carbon}.make.txt: Add conditional
- macros to avoid unavailable functions.
-
- * builds/mac/README: Detailed notes on function availabilities.
-
- * docs/CHANGES: Notes about (possible) incompatibilities.
-
-2006-01-08 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2006-01-08 Huw D M Davies <h.davies1@physics.ox.ac.uk>
-
- * include/freetype/ftmodapi.h (FT_Module_Get_Flags): New
- declaration.
-
- * src/base/ftobjs.c (FT_Module_Get_Flags): New function.
-
-2006-01-07 Werner Lemberg <wl@gnu.org>
-
- * src/pcf/pcfread.c (pcf_get_bitmaps): Remove unused variable
- `bitmaps'. Reported by Yu Lei <yulei0@gmail.com>.
-
- * src/base/ftutil.c (ft_highpow2): s/FT_BASE/FT_BASE_DEF/.
- Reported by Niels Boldt <nielsboldt@gmail.com>.
-
-2005-12-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/sfnt/sfnt/ttbdf.c: Add newline '\n' to the end of file, for
- MPW compiler.
-
-2005-12-23 David Turner <david@freetype.org>
-
- * Jamfile (RefDoc), docs/reference/README: Fix it so that `jam
- refdoc' works correctly to generate the API reference in
- `docs/reference'.
-
- * src/tools/docmaker/tohtml.py (print_html_field,
- print_html_field_list): Update to output nicer fields lists in the
- API reference.
-
- * src/base/ftobjs.c (FT_Load_Glyph): FT_LOAD_TARGET_LIGHT now
- forces auto-hinting.
-
- * freetype/freetype.h: Updating the documentation for
- FT_LOAD_TARGET_XXX and FT_Render_Mode values.
-
-2005-12-23 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftmac.c (FT_New_Face_From_Suitcase): Count scalable faces
- in supported formats (sfnt, LWFN) only, and ignore bitmap faces in
- unsupported formats (fbit, NFNT). The number of available faces are
- passed via face->num_faces. If bitmap faces are embedded in sfnt
- resource, face->num_fixed_size is correctly set. In public API,
- FT_New_Face() and FT_New_Face_From_FSSpec() count the faces as
- FT_GetFile_From_Mac_Name(), which ignores NFNT resources.
-
- * doc/CHANGES: Mention the changes.
-
-2005-12-17 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/truetype/ttinterp.c (Update_Max): Set current size of buffer
- correctly (so that memory debug system won't panic).
-
-2005-12-16 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/internal/ftobjs.h (ft_glyphslot_grid_fit_metrics),
- src/base/ftobjs.c (ft_glyphslot_grid_fit_metrics): Removed.
-
- * src/base/ftobjs.c (ft_recompute_scaled_metrics): Do not round.
-
- * src/cff/cffgload.c (cff_slot_load), src/cid/cidgload.c
- (cid_slot_load_glyph), src/truetype/ttgload.c (compute_glyph_metrics),
- src/type1/t1gload.c (T1_Load_Glyph): Do not round glyph metrics.
-
- * doc/CHANGES: Mention the changes.
-
-2005-12-13 David Turner <david@freetype.org>
-
- Change the implementation of the LIGHT hinting mode to completely
- disable horizontal hinting. This is an experimental effort to
- integrate David Chester's latest patch without affecting the other
- hinting modes as well.
-
- Note that this doesn't force auto-hinting for all fonts, however.
-
- * src/autofit/afhints.c (af_glyph_hints_reload): Don't set
- scaler_flags here but...
- (af_glyph_hints_rescale): Here.
-
- * src/autofit/aflatin.c (af_latin_hints_init): Disable horizontal
- hinting for `light' hinting mode.
-
-
- * Jamfile: Small fix to ensure that ftexport.sym is placed into the
- same location as other generated objects (i.e., within the `objs'
- directory of the current directory).
-
-
- Add support for an embedded `BDF ' table within SFNT-based bitmap
- font files. This is used to store atoms & properties from the
- original BDF fonts that were used to generate the font file.
-
- The feature is controlled by TT_CONFIG_OPTION_BDF within
- `ftoption.h' and is used to implement FT_Get_BDF_Property for these
- font files.
-
- At the moment, this is still experimental, the BDF table format
- isn't cast into stone yet.
-
- * include/freetype/config/ftoption.h (TT_CONFIG_OPTION_BDF): New
- macro.
-
- * include/freetype/config/ftstdlib.h (ft_memchr): New macro.
-
- * include/freetype/internal/tttypes.h (TT_BDFRec, TT_BDF)
- [TT_CONFIG_OPTION_BDF]: New structure.
- (TT_FaceRec) [TT_CONFIG_OPTION_BDF]: New member `bdf'.
-
- * include/freetype/tttags.h (TTAG_BDF): New macro.
-
- * src/sfnt/Jamfile (_sources): Add ttbdf.
-
- * src/sfnt/rules.mk (SFNT_DRV_SRC): Add ttbdf.c.
-
- * src/sfnt/sfdriver.c [TT_CONFIG_OPTION_BDF]: Include ttbdf.h and
- FT_SERVICE_BDF_H.
- (sfnt_get_charset_it) [TT_CONFIG_OPTION_BDF]: New function.
- (sfnt_service_bdf) [TT_CONFIG_OPTION_BDF]: New service.
- (sfnt_services) [TT_CONFIG_OPTION_BDF]: Add sfnt_service_bdf.
-
- * src/sfnt/sfnt.c [TT_CONFIG_OPTION_BDF]: Include ttbdf.c.
-
- * src/sfnt/sfobjs.c [TT_CONFIG_OPTION_BDF]: Include ttbdf.h.
- (sfnt_done_face) [TT_CONFIG_OPTION_BDF]: Call
- tt_face_free_bdf_props.
-
- * src/sfnt/ttbdf.h, src/sfnt/ttbdf.c: New files.
-
-2005-12-07 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Move tag check to...
- * src/sfnt/ttload.c (sfnt_init): Here, before handling TTCs.
-
-2005-12-06 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/truetype/ttobjs.c (tt_size_init): size->ttmetrics.valid is
- initialized twice.
- size->strike_index is not initialized.
-
-2005-12-02 Taek Kwan(TK) Lee <taeklee@gmail.com>
-
- * src/type42/t42objs.c (T42_Face_Init): Replace call to
- FT_New_Memory_Face with call to FT_Open_Face to pass `params'.
-
-2005-11-30 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Document ftdump's `-v' option.
- Document latest charmap code changes.
-
- * src/sfnt/ttcmap.c, src/sfnt/ttcmap.h:
- s/TT_CMAP_FLAG_OVERLAPPED/TT_CMAP_FLAG_OVERLAPPING/.
-
-2005-11-30 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/sfnt/ttcmap.c (tt_cmap4_char_map_binary,
- tt_cmap12_char_map_binary): Fix compiler warnings.
-
-2005-11-29 Chia-I Wu <b90201047@ntu.edu.tw>
-
- Major update to distinguish between unsorted and overlapping
- segments for cmap format 4. For overlapping but sorted segments,
- which is previously considered unsorted, we still use binary search.
-
- * src/sfnt/ttcmap.h (TT_CMapRec_): Replace `unsorted' by `flags'.
- (TT_CMAP_FLAG_UNSORTED, TT_CMAP_FLAG_OVERLAPPED): New macros.
-
- * src/sfnt/ttcmap.c (OPT_CMAP4): Removed as it is always defined.
- (TT_CMap4Rec_): Remove `old_charcode' and `table_length'.
- (tt_cmap4_reset): Removed.
- (tt_cmap4_init): Updated accordingly.
- (tt_cmap4_next): Updated accordingly.
- Take care of overlapping segments.
- (tt_cmap4_validate): Make sure the subtable is large enough.
- Do not check glyph_ids because some fonts set the length wrongly.
- Also, if all segments have offset 0, glyph_ids is always invalid.
- It does not cause any problem so far only because the check misses
- equality.
- Distinguish between unsorted and overlapping segments.
- (tt_cmap4_char_map_linear, tt_cmap4_char_map_binary): New functions
- to do `charcode => glyph index' by linear/binary search.
- (tt_cmap4_char_index, tt_cmap4_char_next): Use
- tt_cmap4_char_map_linear and tt_cmap4_char_map_binary.
- (tt_face_build_cmaps): Treat the return value of validator as flags
- for cmap.
-
-2005-11-29 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/sfnt/ttcmap.c (TT_CMap12Rec_, tt_cmap12_init, tt_cmap12_next):
- New structures and functions for fast `next char'.
- (tt_cmap12_char_map_binary): New function to do `charcode => glyph
- index' by binary search.
- (tt_cmap12_char_index, tt_cmap12_char_next): Use
- tt_cmap12_char_map_binary.
- (tt_face_build_cmaps): Check table and offset correctly (equality is
- missing).
-
-2005-11-15 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * builds/amiga/smakefile: Adjusted the compiler options
- to the current sources, now really builds the gxvalid, gzip
- and psnames modules.
-
- * builds/amiga/src/base/ftsystem.c: The assumed Seek() position
- in the file cache was off by one byte which could cause false
- errors in font files.
-
-2005-11-24 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/mac/FreeType.m68k_far.make.txt,
- builds/mac/FreeType.m68k_cfm.make.txt,
- builds/mac/FreeType.ppc_classic.make.txt,
- builds/mac/FreeType.ppc_carbon.make.txt:
- Updated for MPW to build all available modules.
-
-2005-11-21 HÃ¥vard Wall <haavardw@ifi.uio.no>
-
- * src/bdf/bdfdrivr.c (bdf_interpret_style, BDF_Face_Done): Fix small
- memory leak.
-
-2005-11-21 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttload.c (sfnt_init): Add tracing message.
-
-2005-11-21 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/sfnt/ttsbit0.c (tt_sbit_decoder_load_image): Image_offset was
- added twice to image_start if image_format was 2 or 5.
-
-2005-11-21 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Check that format_tag is known
- before loading the table directory.
-
- * src/sfnt/ttload.c (tt_face_load_sfnt_header,
- tt_face_load_directory): Delay sfnt_dir_check from
- tt_face_load_sfnt_header to tt_face_load_directory.
-
-2005-11-20 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/sfnt/ttload.c (sfnt_dir_check): Clean up and return correct
- error code.
- (sfnt_init): New function to fill in face->ttc_header. A non-TTC font
- is synthesized into a TTC font with one offset table.
- (tt_face_load_sfnt_header): Use sfnt_init.
- Fix an invalid access if the font is TTC and face_index is -1.
-
-2005-11-18 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttload.c (tt_face_load_metrics): Ignore excess number
- of metrics instead of aborting. Patch suggested by Derek Noonburg.
-
- * src/cff/cffgload.c (cff_slot_load), src/cid/cidgload.c
- (cid_slot_load_glyph), src/type1/t1gload.c (T1_Load_Glyph): Scale
- the glyph properly if no hinter is available.
-
- * docs/CHANGES: Mention scaling bug.
-
-2005-11-18 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * include/freetype/ftgxval.h, src/base/ftgxval.c
- (FT_TrueTypeGX_Free, FT_ClassicKern_Free): New functions to free
- buffers allocated by gxvalid module.
- * include/freetype/ftotval.h, src/base/ftotval.c
- (FT_OpenType_Free): New function to free buffer allocated by
- otvalid module.
-
-2005-11-18 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * builds/unix/ftsystem.c (FT_Stream_Open, FT_New_Memory,
- FT_Done_Memory), builds/vms/ftsystem.c (FT_Stream_Open, FT_New_Memory,
- FT_Done_Memory), builds/win32/ftdebug.c (FT_Message, FT_Panic):
- s/FT_EXPORT/FT_BASE/.
-
-2005-11-17 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * builds/amiga/src/base/ftdebug.c (FT_Trace_Get_Count,
- FT_Trace_Get_Name, FT_Message, FT_Panic),
- builds/amiga/src/base/ftsystem.c (FT_New_Memory, FT_Done_Memory,
- FT_Stream_Open): s/FT_EXPORT/FT_BASE/.
-
-2005-11-17 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * builds/amiga/makefile, builds/amiga/makefile.os4,
- builds/amiga/smakefile,
- builds/amiga/include/freetype/config/ftmodule.h: Updated the Amiga
- build files (added support for the gxvalid module).
-
-2005-11-17 Werner Lemberg <wl@gnu.org>
-
- Add vertical metrics support to OpenType CFF outlines. Based on a
- patch from Mike Moening <MikeM@RetekSolutions.com>.
-
- * src/cff/cffgload.c (cff_face_get_vertical_metrics): New function.
- (cff_slot_load): Use cff_face_get_vertical_metrics.
-
- * docs/CHANGES: Updated.
-
-2005-11-17 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/base/ftcalc.c (FT_MulTo64): Commented out.
-
- * include/freetype/internal/ftcalc.h (FT_SqrtFixed),
- src/base/ftcalc.c (FT_SqrtFixed),
- include/freetype/internal/ftdebug.h (FT_Trace_Get_Count,
- FT_Trace_Get_Name, FT_Message, FT_Panic), src/base/ftdebug.c
- (FT_Trace_Get_Count, FT_Trace_Get_Name, FT_Message, FT_Panic),
- include/freetype/internal/ftobjs.h (FT_New_Memory, FT_Done_Memory),
- include/freetype/internal/ftstream.h (FT_Stream_Open),
- src/base/ftsystem.c (FT_New_Memory, FT_Done_Memory, FT_Stream_Open):
- s/FT_EXPORT/FT_BASE/.
-
- * builds/exports.mk: Manually add TT_New_Context to EXPORTS_LIST
- too.
-
-2005-11-15 David Turner <david@freetype.org>
-
- * src/base/fttrigon.c (ft_trig_prenorm): Fix a bug that created
- invalid computations, resulting in very weird bugs in TrueType
- bytecode hinted fonts.
-
- * src/truetype/ttinterp.c (FT_UNUSED_EXEC): Don't perform a
- structure copy each time.
-
-2005-11-11 Werner Lemberg <wl@gnu.org>
-
- * src/cache/ftccache.c (FTC_Cache_Clear), src/cache/ftcmanag.c
- (FTC_Manager_Check): Remove FT_EXPORT_DEF tag.
-
- * src/base/ftcalc.c (FT_Add64): Remove FT_EXPORT_DEF tag.
- (FT_Div64by32, FT_Sqrt32): Commented out. Unused.
-
- * include/freetype/internal/ftcalc.h (SQRT_32): Removed. Unused.
- (FT_Sqrt32): Commented out. Unused.
-
- * include/freetype/cache/ftccache.h:
- s/ftc_node_destroy/FTC_Node_Destroy/.
-
- * src/cache/ftccback.h (ftc_node_destroy): New declaration.
-
- * src/cache/ftccache.c (ftc_node_destroy): Use FT_LOCAL_DEF tag.
- (FTC_Node_Destroy): New exported wrapper function for
- ftc_node_destroy.
-
- * src/cache/ftcmanag.c: Include ftccback.c.
-
-2005-11-10 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afangles.c, src/autofit/aftypes.h (af_angle_diff):
- Comment out. Unused.
-
- * builds/exports.mk ($(EXPORTS_LIST)): Add TT_RunIns.
-
-2005-11-10 Christian Biesinger <cbiesinger@web.de>
-
- * builds/beos/beos.mk: Call beos-def.mk before anything else to
- define the separator.
-
- * builds/unix/unix-cc.in (LINK_LIBRARY): Add `-no-undefined' flag.
-
-2005-11-07 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1afm.c (T1_Read_PFM): Zero offset means `no kerning
- table available'. From Sergey Tolstov <stolstov@esri.com>.
-
-2005-11-03 Ville Syrjälä <syrjala@sci.fi>
-
- * src/base/ftobjs.c (FT_Open_Face): Avoid possible memory leak.
-
-2005-11-02 Werner Lemberg <wl@gnu.org>
-
- Make compiling instructions in docs/CUSTOMIZE work again.
-
- * builds/unix/unix-cc.in (CPPFLAGS): New variable.
- (CFLAGS): Don't include @CPPFLAGS@.
- * builds/freetype.mk (FT_CFLAGS): Add CPPFLAGS.
-
-2005-10-28 David Turner <david@freetype.org>
-
- Update build system to support the generation of a list of exported
- symbols or Windows .DEF files by parsing the public headers with the
- `apinames' tool located in src/tools/apinames.c.
-
- Only tested on Unix at the moment. On Windows, the .DEF file is
- generated but isn't used yet to generate a DLL.
-
- * builds/exports.mk: New file.
-
- * builds/freetype.mk: Include exports.mk.
- (dll): New target.
- (clean_project_dos): Fix rule.
-
- * builds/compiler/visualc.mk (TE), builds/dos/dos-def.mk (E),
- builds/os2/os2-def.mk (E), builds/win32/win32-def.mk (E): New
- variables for controlling executable extensions.
-
- * builds/unix/unix-cc.in (EXPORTS_LIST, CCexe),
- builds/win32/w32-bcc.mk, builds/win32/w32-gcc.mk,
- builds/win32/w32-icc.mk, builds/win32/w32-icc.mk,
- builds/win32/w32-mingw32.mk, builds/win32/w32-vcc,
- builds/win32/w32-wat.mk (EXPORTS_LIST, EXPORT_OPTIONS,
- APINAMES_OPTIONS): New targets for controlling the `apinames' tool.
-
- * Jamfile (GenExportSymbols): Updated.
-
-
- * src/pfr/pfrtypes.h, src/pfr/pfrload.c, src/pfr/pfrobjs.c
- [!FT_OPTIMIZE_MEMORY]: Fold memory optimization code into
- FT_OPTIMIZE_MEMORY chunks for better maintainability and simplicity.
-
-
- * src/base/fttrigon.c (ft_trig_prenorm), src/base/ftcalc.c
- (FT_MulFix): Performance optimizations.
-
-
- * include/freetype/internal/ftgloadr.h (FT_GLYPHLOADER_CHECK_P,
- FT_GLYPHLOADER_CHECK_C, FT_GLYPHLOADER_CHECK_POINTS): New macros for
- checking points and contours. Update callers to use
- FT_GLYPHLOADER_CHECK_POINTS instead of FT_GlyphLoader_CheckPoints
- at profile-detected hot-spots.
-
- * src/base/ftgloadr.c (FT_GlyphLoader_CheckPoints): Set `adjust'
- to 0 to not call `AdjustPoints' every time.
-
-
- * src/autofit/aftypes.h (AF_ANGLE_DIFF): New macro to inline
- FT_Angle_Diff.
-
- * src/autofit/afhints.c (af_direction_compute): Re-implement.
- (af_glyph_hints_compute_inflections, af_glyph_hints_reload): Use
- AF_ANGLE_DIFF to speed up the detection of inflexions.
-
-
- * src/tools/apinames.c: Include <string.h>.
- (OutputFormat): New enumeration.
- (names_dump): Add two parameters to control output format and DLL
- name.
- (names_dump_windef): Removed. Code folded into `names_dump'.
- (read_header_file): Use isalnum, not isalpha. Otherwise function
- names with digits aren't read correctly.
- (usage): Updated.
- (main): New option `-o' to control output file name.
- New option `-d' to indicate DLL file name.
- Extend `-w' flag to handle Borland and Watcom compilers and linkers.
-
-2005-10-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/mac/ftlib.prj, builds/mac/freetype.mak: Removed.
- ftlib.prj is unmaintained and incompatible with current tree.
- freetype.mak is unrecoverably broken.
-
- * builds/mac/ftlib.prj.xml: Added.
- Generated by Metrowerks CodeWarrior 9.0.
-
- * builds/mac/FreeType.m68k_far.make.txt,
- builds/mac/FreeType.m68k_cfm.make.txt,
- builds/mac/FreeType.ppc_classic.make.txt,
- builds/mac/FreeType.ppc_carbon.make.txt: Added.
- Skeleton files of MPW makefiles.
-
- * builds/mac/ascii2mpw.py: Added.
- Python script to make MPW makefile from skeleton.
-
- * builds/mac/README: Updated.
- Almost rewritten to use new files.
-
-2005-10-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftmac.c: Fix invalid casts from NULL to integer typed
- variables. Advised by David Turner, Masatake YAMATO, Sean McBride,
- and George Williams.
-
-2005-10-27 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftsysmem.h, include/freetype/ftsysio.h: Removed.
- Obsolete.
-
-2005-10-25 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfdriver.c (sfnt_interface): Move out
- `tt_face_get_kerning' from a #ifdef clause. Reported by Tony J.
- Ibbs <tibs@sj.co.uk>.
-
-2005-10-23 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftdbgmem.c (ft_mem_debug_realloc): Make it compile with
- C++.
-
-2005-10-21 David Turner <david@freetype.org>
-
- * src/base/ftdbgmem.c (ft_mem_table_set, ft_mem_debug_realloc):
- Another realloc memory counting bug fix.
-
- * src/tools/Jamfile: Add missing file.
-
- * src/lzw/Jamfile: Fix incorrect source file reference.
-
-2005-10-20 David Turner <david@freetype.org>
-
- * src/base/ftdbgmem.c (ft_mem_table_set, ft_mem_table_remove,
- ft_mem_debug_alloc, ft_mem_debug_free, ft_mem_debug_realloc): Fixes
- to better account for memory reallocations.
-
- * src/lzw/ftlzw2.c, src/lzw/ftzopen.h, src/lzw/ftzopen.c,
- src/lzw/rules.mk: First version of LZW loader re-implementation.
- Apparently, this saves about 330 KB of heap memory when loading
- timR24.pcf.Z.
-
-2005-10-20 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/ftbitmap.h (FT_Bitmap_Copy, FT_Bitmap_Embolden),
- src/base/ftbdf.c (FT_Get_BDF_Property), src/cache/ftcmru.c
- (FTC_MruList_Reset, FTC_MruList_Done, FTC_MruList_Lookup): Fix
- FT_EXPORT/FT_EXPORT_DEF tagging.
-
-2005-10-19 Chia-I Wu <b90201047@ntu.edu.tw>
-
- * src/truetype/ttgload.c (TT_Load_Glyph): Allow size->ttmetrics to
- be invalid when FT_LOAD_NO_SCALE is set.
-
-2005-10-17 David Turner <david@freetype.org>
-
- * src/base/ftobjs.c (FT_Open_Face): Don't call FT_New_GlyphSlot and
- FT_New_Size if we are opening a face with face_index < 0 (which is
- only used for testing the format).
-
- * src/gxvalid/gxvmort0.c (gxv_mort_subtable_type0_entry_validate):
- Remove compiler warning.
-
-2005-10-16 David Turner <david@freetype.org>
-
- * src/tools/apinames.c: Add new tool to extract public API function
- names from header files.
-
-2005-10-05 Werner Lemberg <wl@gnu.org>
-
- Add FT_FACE_FLAG_HINTER to indicate that a specific font driver has
- a hinting engine of its own.
-
- * include/freetype/freetype.h (FT_FACE_FLAG_HINTER): New macro.
-
- * src/cff/cffobjs.c (cff_face_init), src/cid/cidobjs.c
- (cid_face_init), src/truetype/ttobjs.c (tt_face_init)
- [TT_CONFIG_OPTION_BYTECODE_INTERPRETER], src/type1/t1objs.c
- (T1_Face_Init), src/type42/t42objs.c (T42_Face_Init)
- [TT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Update face flags.
-
- * docs/CHANGES: Document it.
-
-2005-09-27 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/freetype2.m4: Add license exception so that the file
- can be used in any other autoconf script.
-
-2005-09-26 David Turner <david@freetype.org>
-
- * src/autofit/aflatin.c (af_latin_compute_stem_width): Fix bad
- computation of the `vertical' flag, causing ugly things in LCD mode
- and others.
-
-2005-09-23 David Turner <david@freetype.org>
-
- * src/autofit/aflatin.c (af_latin_hints_init): Fix a bug that
- prevented internal hint mode bitflags from being computed correctly.
-
- * src/base/Jamfile: Adding src/base/ftgxval.c.
-
- * src/gxvalid/gxvbsln.c, src/gxvalid/gxvcommn.c,
- src/gxvalid/gxvfeat.c, src/gxvalid/gxvjust.c, src/gxvalid/gxvkern.c,
- src/gxvalid/gxvlcar.c, src/gxvalid/gxvmort.c,
- src/gxvalid/gxvmort0.c, src/gxvalid/gxvmort1.c,
- src/gxvalid/gxvmort2.c, src/gxvalid/gxvmort4.c,
- src/gxvalid/gxvmort5.c, src/gxvalid/gxvmorx.c,
- src/gxvalid/gxvmorx0.c, src/gxvalid/gxvmorx1.c,
- src/gxvalid/gxvmorx2.c, src/gxvalid/gxvmorx5.c,
- src/gxvalid/gxvopbd.c, src/gxvalid/gxvprop.c,
- src/truetype/ttgload.c: Remove _many_ compiler warnings when
- compiling with Visual C++ at maximum level (/W4).
-
- * src/autofit/afangles.c (af_angle_atan): Replaced CORDIC-based
- implementation with one using lookup tables. This simple thing
- speeds up glyph loading by 18%, according to ftbench!
-
- * src/sfnt/sfdriver.c (sfnt_get_interface): Don't check for
- `get_sfnt' and `load_sfnt' module interfaces.
-
-2005-09-22 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Mention SING Glyphlet support.
-
-2005-09-22 David Turner <david@freetype.org>
-
- * src/base/Jamfile: Disable compilation of ftgxval module
- temporarily.
-
-2005-09-19 David Somers <dsomers@omz13.com>
-
- * src/sfnt/ttload.c (sfnt_dir_check): Modified to allow a
- font to have no `head' table if tables `SING' and `META' are
- present; this is to support `SING Glyphlet'.
-
- `SING Glyphlet' is an extension to OpenType developed by Adobe
- primarily to facilitate adding supplemental glyphs to an OpenType
- font (with emphasis on, but not necessarily limited to, gaiji to a
- CJK font). A SING Glyphlet Font is an OpenType font that contains
- the outline(s), either in a `glyf' or `CFF' table, for a glyph;
- `cmap', `BASE', and `GSUB' tables are present with the same format
- and functionality as a regular OpenType font; there are no `name',
- `head', `OS/2', and `post' tables; there are two new tables, `SING'
- which contains details about the glyphlet, and `META' which contains
- metadata.
-
- Further information on the SING Glyphlet format can be found at:
-
- http://www.adobe.com/products/indesign/sing_gaiji.html
-
- * include/freetype/tttags.h (TTAG_SING, TTAG_META): New macros for
- the OpenType tables `SING' and `META'. These two tables are used in
- SING Glyphlet Format fonts.
-
-2005-09-09 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Reactivate code to set
- FT_FACE_FLAG_KERNING which has been commented out erroneously.
-
- * docs/CHANGES: Document it.
-
-2005-09-05 Werner Lemberg <wl@gnu.org>
-
- Fixes for `make multi' and using C++ compiler.
-
- * src/gxvalid/gxvcommn.c (gxv_set_length_by_ushort_offset,
- gxv_set_length_by_ulong_offset, gxv_array_getlimits_byte,
- gxv_array_getlimits_ushort): Declare with FT_LOCAL_DEF.
- (gxv_compare_ranges): Make it static.
- (gxv_LookupTable_fmt0_validate, gxv_LookupTable_fmt2_validate,
- gxv_LookupTable_fmt4_validate, gxv_LookupTable_fmt6_validate,
- gxv_LookupTable_fmt8_validate, gxv_LookupTable_validate): Improve
- trace messages.
- (gxv_StateArray_validate, gxv_XStateArray_validate): s/class/clazz/.
- (GXV_STATETABLE_HEADER_SIZE, GXV_STATEHEADER_SIZE,
- GXV_XSTATETABLE_HEADER_SIZE, GXV_XSTATEHEADER_SIZE): Move to
- gxvcommn.h.
-
- * src/gxvalid/gxvcommn.h: Add prototypes for
- gxv_StateTable_subtable_setup, gxv_XStateTable_subtable_setup,
- gxv_XStateTable_validate, gxv_array_getlimits_byte,
- gxv_array_getlimits_ushort, gxv_set_length_by_ushort_offset,
- gxv_set_length_by_ulong_offset, gxv_odtect_add_range,
- gxv_odtect_validate.
- (GXV_STATETABLE_HEADER_SIZE, GXV_STATEHEADER_SIZE,
- GXV_XSTATETABLE_HEADER_SIZE, GXV_XSTATEHEADER_SIZE): Moved from
- gxvcommn.c.
-
- * src/gxvalid/gxvbsln.c (gxv_bsln_LookupValue_validate,
- gxv_bsln_parts_fmt1_validate): Improve trace messages.
-
- * src/gxvalid/gxvfeat.c: Split off predefined registry stuff to...
- * src/gxvalid/gxvfeat.h: New file.
-
- * src/gxvalid/gxvjust.c (gxv_just_wdc_entry_validate): Improve trace
- message.
-
- * src/gxvalid/gxvkern.c (GXV_kern_Dialect): Add KERN_DIALECT_UNKNOWN.
- (gxv_kern_subtable_fmt1_valueTable_load,
- gxv_kern_subtable_fmt1_subtable_setup,
- gxv_kern_subtable_fmt1_entry_validate): Fix C++ compiler errors.
- (gxv_kern_coverage_validate): Use KERN_DIALECT_UNKNOWN.
- Improve trace message.
- (gxv_kern_validate_generic): Fix C++ compiler error.
- Improve trace message.
- (gxv_kern_validate_classic): Fix C++ compiler error.
-
- * src/gxvalid/gxvmort0.c (gxv_mort_subtable_type0_validate): Declare
- with FT_LOCAL_DEF.
-
- * src/gxvalid/gxvmort1.c
- (gxv_mort_subtable_type1_substitutionTable_load,
- gxv_mort_subtable_type1_subtable_setup): Fix C++ compiler errors.
- (gxv_mort_subtable_type1_substTable_validate): Improve trace
- message.
- (gxv_mort_subtable_type1_validate): Declare with FT_LOCAL_DEF.
-
- * src/gxvalid/gxvmort2.c (gxv_mort_subtable_type2_opttable_load,
- gxv_mort_subtable_type2_subtable_setup,
- gxv_mort_subtable_type2_ligActionOffset_validate,
- gxv_mort_subtable_type2_ligatureTable_validate): Fix C++ compiler
- errors.
- (gxv_mort_subtable_type2_validate): Declare with FT_LOCAL_DEF.
-
- * src/gxvalid/gxvmort4.c (gxv_mort_subtable_type4_validate): Declare
- with FT_LOCAL_DEF.
-
- * src/gxvalid/gxvmort5.c (gxv_mort_subtable_type5_subtable_setup,
- gxv_mort_subtable_type5_InsertList_validate): Fix C++ compiler
- errors.
- (gxv_mort_subtable_type5_validate): Declare with FT_LOCAL_DEF.
-
- * src/gxvalid/gxvmort.c: Include gxvfeat.h.
- (gxv_mort_featurearray_validate, gxv_mort_coverage_validate):
- Declare with FT_LOCAL_DEF.
- (gxv_mort_subtables_validate, gxv_mort_validate): Improve trace
- messages.
-
- * src/gxvalid/gxvmort.h (gxv_mort_feature_validate): Remove.
-
- * src/gxvalid/gxvmorx0.c (gxv_morx_subtable_type0_validate): Declare
- with FT_LOCAL_DEF.
-
- * src/gxvalid/gxvmorx1.c
- (gxv_morx_subtable_type1_substitutionTable_load,
- gxv_morx_subtable_type1_subtable_setup,
- gxv_morx_subtable_type1_entry_validate,
- gxv_morx_subtable_type1_substitutionTable_validate): Fix C++
- compiler errors.
- (gxv_morx_subtable_type1_validate): Declare with FT_LOCAL_DEF.
-
- * src/gxvalid/gxvmorx2.c (gxv_morx_subtable_type2_opttable_load,
- gxv_morx_subtable_type2_subtable_setup,
- gxv_morx_subtable_type2_ligActionIndex_validate,
- gxv_morx_subtable_type2_ligatureTable_validate): Fix C++ compiler
- errors.
- (gxv_morx_subtable_type2_validate): Declare with FT_LOCAL_DEF.
- Fix typo.
-
- * src/gxvalid/gxvmorx4.c (gxv_morx_subtable_type4_validate): Declare
- with FT_LOCAL_DEF.
-
- * src/gxvalid/gxvmorx5.c (gxv_morx_subtable_type5_insertionGlyph_load,
- gxv_morx_subtable_type5_subtable_setup): Fix C++ compiler error.
- (gxv_morx_subtable_type5_validate): Declare with FT_LOCAL_DEF.
-
- * src/gxvalid/gxvmorx.c (gxv_morx_subtables_validate,
- gxv_morx_validate): Improve trace message.
-
- * src/gxvalid/gxvopbd.c (gxv_opbd_LookupFmt4_transit): Fix compiler
- warnings.
- (gxv_opbd_validate): Improve trace message.
-
- * src/gxvalid/gxvprop.c: Decorate constants with `U' and `L' where
- appropriate.
- (gxv_prop_zero_advance_validate, gxv_prop_validate): Improve trace
- message.
-
- * src/gxvalid/gxvtrak.c (gxv_trak_trackTable_validate): Remove unused
- parameter. Update all callers.
- (gxv_trak_validate): Improve trace message.
-
- * rules.mk (GXV_DRV_H): Add gxvfeat.h.
-
-2005-09-01 Werner Lemberg <wl@gnu.org>
-
- * src/gxvalid/gxvbsln.c (GXV_BSLN_VALUE_EMPTY): Add `U'.
-
- * src/gxvalid/gxvmort1.c (GXV_MORT_SUBTABLE_TYPE1_HEADER_SIZE),
- src/gxvalid/gxvmort2.c (GXV_MORT_SUBTABLE_TYPE2_HEADER_SIZE): Fix
- typo.
-
- * src/gxvalid/gxvmorx0.c, src/gxvalid/gxvmorx1.c,
- src/gxvalid/gxvmorx2.c, src/gxvalid/gxvmorx4.c,
- src/gxvalid/gxvmorx5.c, src/gxvalid/gxvmort.c: Improve trace
- messages.
- Decorate constants with `U' and `L' where appropriate.
- Fix compiler warnings.
-
-2005-08-31 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (load_truetype_glyph): Fix typo.
-
- * src/gxvalid/gxvbsln.c (gxv_bsln_validate): Fix trace message.
-
- * src/gxvalid/gxvcommn.c (gxv_odtect_add_range): Use `const'.
-
- * src/gxvalid/gxvfeat.c, src/gxvalid/gxvjust.c,
- src/gxvalid/gxvkern.c, src/gxvalid/gxvlcar.c, src/gxvalid/gxvmod.c,
- src/gxvalid/gxvmort0.c, src/gxvalid/gxvmort1.c,
- src/gxvalid/gxvmort2.c, src/gxvalid/gxvmort4.c,
- src/gxvalid/gxvmort5.c, src/gxvalid/gxvmort.c: Improve trace
- messages.
- Decorate constants with `U' and `L' where appropriate.
- Fix compiler warnings.
-
-2005-08-30 Werner Lemberg <wl@gnu.org>
-
- * src/gxvalid/README: Revised.
- * src/gxvalid/gxvbsln.c: Fix compiler warnings.
- * src/gxvalid/gxvcommn.c: Fix compiler warnings.
- (gxv_XEntryTable_validate, gxv_compare_ranges): Remove unused
- parameter. Update all callers.
- Improve trace messages.
- Some formatting.
-
-2005-08-29 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/freetype.h, include/freetype/ftchapters.h: Add
- a preliminary section with some explanations about user allocation.
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter.section_enter):
- Don't abort if there are no data types, functions, etc., in a
- section.
- Print synopsis only if we have a data type, function, etc.
-
- * docs/INSTALL.ANY, docs/INSTALL, docs/INSTALL.UNX, docs/CUSTOMIZE,
- docs/INSTALL.GNU, docs/TRUETYPE, docs/DEBUG, docs/UPGRADE.UNX,
- docs/VERSION.DLL, docs/formats.txt: Revised, formatted.
-
-2005-08-28 George Williams <gww@silcom.com>
-
- * src/truetype/ttgload.c [TT_MAX_COMPOSITE_RECURSE]: Removed.
- (load_truetype_glyph): Limit recursion depth by `maxComponentDepth'.
-
-2005-08-25 J. Ali Harlow <ali@avrc.city.ac.uk>
-
- * builds/unix/freetype2.in (CFlags): Add missing directory.
-
-2005-08-24 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Mention gxvalid module.
-
-2005-08-23 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/aflatin.c (af_latin_metrics_scale): Initialize
- render mode properly. Reported by chris@dokein.co.uk.
-
-2005-08-23 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Add gxvalid module to validate TrueType GX/AAT tables.
-
- Modifications on existing files:
-
- * Jamfile: Register gxvalid module.
- * src/base/Jamfile: Register ftgxval.c.
- * src/base/rule.mk: Register ftgxval.c.
- * docs/INSTALL.ANY: Register gxvalid/gxvalid.c.
-
- * include/freetype/config/ftheader.h (FT_GX_VALIDATE_H): New macro
- to include gxvalid header file.
- * include/freetype/config/ftmodule.h: Register gxv_module_class.
-
- * include/freetype/ftchapters.h: Add comment about gx_validation.
- * include/freetype/ftotval.h: Change keyword FT_VALIDATE_XXX
- to FT_VALIDATE_OTXXX to co-exist with gxvalid.
- * include/freetype/tttags.h: Add tags for TrueType GX/AAT tables.
-
- * include/freetype/internal/ftserv.h (FT_SERVICE_GX_VALIDATE_H): New
- macro for gxvalid service.
- * include/freetype/internal/fttrace.h: Add trace facilities for
- gxvalid.
-
- New files on existing directories:
-
- * include/freetype/internal/services/svgxval.h: Registration of
- validation service for TrueType GX/AAT and classic kern table.
- * include/freetype/ftgxval.h: Public API definition to use gxvalid.
- * src/base/ftgxval.c: Public API of gxvalid.
-
- New files under src/gxvalid/:
-
- * src/gxvalid/Jamfile src/gxvalid/README src/gxvalid/module.mk
- src/gxvalid/rules.mk src/gxvalid/gxvalid.c src/gxvalid/gxvalid.h
- src/gxvalid/gxvbsln.c src/gxvalid/gxvcommn.c src/gxvalid/gxvcommn.h
- src/gxvalid/gxverror.h src/gxvalid/gxvfeat.c src/gxvalid/gxvfgen.c
- src/gxvalid/gxvjust.c src/gxvalid/gxvkern.c src/gxvalid/gxvlcar.c
- src/gxvalid/gxvmod.c src/gxvalid/gxvmod.h src/gxvalid/gxvmort.c
- src/gxvalid/gxvmort.h src/gxvalid/gxvmort0.c src/gxvalid/gxvmort1.c
- src/gxvalid/gxvmort2.c src/gxvalid/gxvmort4.c src/gxvalid/gxvmort5.c
- src/gxvalid/gxvmorx.c src/gxvalid/gxvmorx.h src/gxvalid/gxvmorx0.c
- src/gxvalid/gxvmorx1.c src/gxvalid/gxvmorx2.c src/gxvalid/gxvmorx4.c
- src/gxvalid/gxvmorx5.c src/gxvalid/gxvopbd.c src/gxvalid/gxvprop.c
- src/gxvalid/gxvtrak.c: New files, gxvalid body.
-
-2005-08-21 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (TT_Load_Glyph): Only translate outline
- to (0,0) if bit 1 of the `head' table isn't set. This improves
- rendering of buggy fonts.
-
-2005-08-20 Chia I Wu <b90201047@ntu.edu.tw>
-
- * src/truetype/ttdriver.c (Load_Glyph): Don't check the validity of
- ttmetrics here. TrueType fonts with only sbits always have
- ttmetrics.valid set to false.
-
- * src/truetype/ttgload.c (TT_Load_Glyph): Check that ttmetrics is
- valid before loading outline glyph.
-
- * src/cache/ftcimage.c (FTC_INode_New): Fix a memory leak.
-
-2005-08-20 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttload.c (tt_face_load_metrics_header): Ignore missing
- `hhea' table for SFNT Mac fonts. Change based on a patch by
- mpsuzuki@hiroshima-u.ac.jp.
-
-2005-08-20 Masatake YAMATO <jet@gyve.org>
-
- * src/otvalid/otvmod.c (otv_validate): Use ft_validator_run instead
- of ft_setjmp.
-
-2005-08-19 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (load_truetype_glyph): Fix compiler
- warnings.
-
-2005-08-16 Chia I Wu <b90201047@ntu.edu.tw>
-
- * src/truetype/ttinterp.c, src/truetype/ttinterp.h: Update copyright
- messages.
-
-2005-08-16 Chia I Wu <b90201047@ntu.edu.tw>
-
- * src/truetype/ttinterp.c, src/truetype/ttinterp.h: Remove original
- TT_Done_Context and rename TT_Destroy_Context to TT_Done_Context
- with slight changes.
- Update all callers.
- (TT_New_Context): Now takes TT_Driver argument directly.
- Update all callers.
-
- * src/truetype/ttobjs.h (tt_slot_init): New function.
- * src/truetype/ttobjs.c (tt_driver_init): Initialize execution
- context here.
- (tt_slot_init): New function to create extra points for the internal
- glyph loader. We then use it directly, instead of face's glyph
- loader, when loading glyph.
-
- * src/truetype/ttdriver.c (tt_driver_class): Use tt_slot_init for
- glyph slot initialization.
- (Load_Glyph): Load flag dependencies are handled here. Return error
- if size is NULL.
-
- * src/truetype/ttgload.c: Heavy cleanup and refactoring.
- (org_to_cur): Removed.
- (TT_Load_Simple_Glyph): Call FT_GlyphLoader_CheckPoints.
- (TT_Hint_Glyph): New function to hint a zone, prepared by caller.
- (TT_Process_Simple_Glyph): s/load/loader/.
- Use loader->pp values instead of recalculation.
- Use TT_Hint_Glyph.
- No need to save/restore loader->stream before and after
- TT_Vary_Get_Glyph_Deltas now.
- (TT_LOADER_SET_PP): New macro to calculate and set the four phantom
- points.
- (load_truetype_glyph): Never set exec->glyphSize to 0. This closes
- Savannah bug #13107.
- Forget glyph frame before calling TT_Process_Simple_Glyph.
- Use TT_LOADER_SET_PP.
- Scale all four phantom points.
- Split off some functionality to ...
- (TT_Process_Composite_Component, TT_Process_Composite_Glyph): These
- new functions.
- (TT_Load_Glyph): Set various fields of `glyph' here, not in
- load_truetype_glyph and compute_glyph_metrics.
- Split off some functionality to ...
- (load_sbit_image, tt_loader_init): These new functions.
- (compute_glyph_metrics): Call FT_Outline_Get_CBox.
-
-2005-08-08 Werner Lemberg <wl@gnu.org>
-
- * docs/INSTALL.ANY: Updated.
-
-2005-08-05 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffgload.c (cff_builder_close_contour),
- src/psaux/psobjs.c (t1_builder_close_contour): Protect against
- zero `outline' pointer.
-
- * src/base/ftgloadr.c (FT_GlyphLoader_Add): Protect against zero
- `loader' address.
-
-2005-08-03 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfdriver.c (sfnt_interface) [FT_OPTIMIZE_MEMORY]:
- Reactivate pointers to tt_find_sbit_image and tt_load_sbit_metrics
- to make X work again.
-
-2005-08-02 Werner Lemberg <wl@gnu.org>
-
- * src/otvalid/otvcommn.h: Remove dead code.
-
-2005-07-31 Chia I Wu <b90201047@ntu.edu.tw>
-
- * src/truetype/ttobjs.h (tt_size_run_fpgm, tt_size_run_prep): New
- functions.
-
- * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): New
- functions.
- (tt_size_init): Add 4, instead of 2, (phantom) points to twilight
- zone.
- Move code that runs fpgm to tt_size_run_fpgm.
- (Reset_Outline_Size): Move code that runs prep to tt_size_run_prep.
- (tt_glyphzone_new): Allocate right size of arrays.
- Set max_points and max_contours properly.
-
-2005-07-26 Chia I Wu <b90201047@ntu.edu.tw>
-
- * src/truetype/ttdriver.c (Set_Char_Sizes): Avoid unnecessary
- computations and clean up.
-
- * src/truetype/ttobjs.h (struct TT_SizeRec_): Comment on the
- internal copy of metrics.
-
-2005-07-12 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftoutln.h (FT_Outline_Embolden): Fix prototype.
- Reported by Xerxes.
-
-2005-07-04 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/ftmemory.h (FT_REALLOC_ARRAY): Fix typo.
- Reported by Brett Hutley.
-
-2005-06-30 David Turner <david@freetype.org>
-
- * src/sfnt/ftbitmap.c, src/truetype/ttgload.c, src/sfnt/ttcmap.c:
- Removing compiler warnings (Visual C++ /W4).
-
-
- Implement a work-around for broken C preprocessor in Visual C++ (it
- has been confirmed by the MS developers that it is indeed a bug
- which won't be fixed in the very near future).
-
- * Jamfile (FT2_COMPONENTS): Include otvalid (again).
-
- * src/otvalid/otvcommn.h (OTV_NAME, OTV_FUNC): New macros.
- (OTV_NEST1, OTV_NEST2, OTV_NEST3): Use OTV_NAME and OTV_FUNC to
- avoid argument expansion by argument prescan.
- Append `Func' to all affected macros and change them to take just a
- single argument. Example: `AttachList' is renamed to
- `AttachListFunc'.
-
- * src/otvalid/otvgdef.c, src/otvalid/otvgpos.c,
- src/otvalid/otvgsub.c, src/otvjstf.c: Append `Func' to macros
- affected by the changes to OTV_NESTx and modify them to take just a
- single argument.
-
-2005-06-20 Chia I Wu <b90201047@ntu.edu.tw>
-
- * include/freetype/internal/ftobjs.h, src/base/ftobjs.c: New function
- ft_glyphslot_grid_fit_metrics.
-
- * src/truetype/ttgload.c (compute_glyph_metrics): Use
- ft_glyphslot_grid_fit_metrics.
-
- * src/cff/cffgload.c (cff_slot_load), src/cid/cidgload.c
- (cid_slot_load_glyph), src/type1/t1gload.c (T1_Load_Glyph): Use
- ft_glyphslot_grid_fit_metrics.
- FT_Outline_Get_CBox is called twice.
-
- * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Modify metrics to more
- reasonable values when emboldening outline glyphs. The theoretic
- ones are unrealistic.
-
-2005-06-16 Chia I Wu <b90201047@ntu.edu.tw>
-
- * src/base/ftoutln.c (FT_Outline_Embolden): Strength should be
- halved.
-
- * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Change the default
- strength.
- Don't increase slot->advance.y.
-
-2005-06-16 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/freetype.h (FREETYPE_MINOR): Set to 2.
- (FREETYPE_PATCH): Set to 0.
-
- * builds/unix/configure.ac (version_info): Set to 9:9:3.
- Currently, we are still binary compatible.
-
- * builds/win32/visualc/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj: s/219/2110/, s/2.1.9/2.1.10/.
-
- * builds/freetype.mk (refdoc), README, Jamfile (RefDoc):
- s/2.1.9/2.1.10/.
-
- * docs/CHANGES, docs/VERSION.DLL: Updated.
-
- * ChangeLog: Split off older entries into...
- * ChangeLog.20, ChangeLog.21: These new files.
-
-2005-06-15 Kirill Smelkov <kirr@mns.spb.ru>
-
- The next release will be 2.2.0, so don't worry about source code
- backward compatibility.
-
- * include/freetype/ftimage.h (FT_Outline_MoveToFunc,
- FT_Outline_LineToFunc, FT_Outline_ConicToFunc,
- FT_Outline_CubicToFunc, FT_SpanFunc, FT_Raster_RenderFunc),
- include/freetype/ftrender.h (FT_Glyph_TransformFunc,
- FT_Renderer_RenderFunc, FT_Renderer_TransformFunc): Decorate
- parameters with `const' where appropriate.
-
-2005-06-15 Chia I Wu <b90201047@ntu.edu.tw>
-
- * src/sfnt/ttsbit.c (tt_face_load_sbit_image): Compute vertBearingY
- to make glyphs centered vertically.
-
- * src/truetype/ttgload.c (compute_glyph_metrics): Compute
- vertBearingY to make glyphs centered vertically.
- Fix some bugs in vertical metrics:
-
- . loader->pp3.y and loader->pp4.y are in 26.6 format, not in font
- units.
- . As we use the glyph's cbox to calculate the top bearing now
- there is no need to adjust `top'.
-
-2005-06-15 Werner Lemberg <wl@gnu.org>
-
- * src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE): Use FT_UShort to be
- in sync with OTV_OPTIONAL_OFFSET. Reported by YAMATO Masatake.
-
-2005-06-13 Werner Lemberg <wl@gnu.org>
-
- * docs/release: Update.
-
-----------------------------------------------------------------------------
-
-Copyright 2005-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used, modified,
-and distributed under the terms of the FreeType project license,
-LICENSE.TXT. By continuing to use, modify, or distribute this file you
-indicate that you have read the license and understand and accept it
-fully.
-
-
-Local Variables:
-version-control: never
-coding: utf-8
-End:
diff --git a/ChangeLog.23 b/ChangeLog.23
deleted file mode 100644
index 834f34d38..000000000
--- a/ChangeLog.23
+++ /dev/null
@@ -1,7948 +0,0 @@
-2010-02-13 Werner Lemberg <wl@gnu.org>
-
- * Version 2.3.12 released.
- ==========================
-
-
- Tag sources with `VER-2-3-12'.
-
- * docs/CHANGES: Updated.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.3.12.
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.3.11/2.3.12/, s/2311/2312/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 12.
-
- * builds/unix/configure.raw (version_info): Set to 10:0:4.
-
-2010-02-12 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Improve autotool version checking to work with beta releases.
-
- * autogen.sh (check_tool_version): Improve the extraction of version
- number from "tool --version" output. Some beta releases of
- autotools have extra strings before version number.
-
-2010-02-12 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix overallocating bug in FT_Outline_New_Internal().
-
- * src/base/ftoutln.c (FT_Outline_New_Internal): The length of
- FT_Outline->points[] should be numPoints, not 2 * numPoints.
- Found by Paul Messmer, see
- http://lists.gnu.org/archive/html/freetype-devel/2010-02/msg00003.html
-
-2010-02-10 Ken Sharp <ken.sharp@artifex.com>
-
- Really fix Savannah bug #28678 (part 2).
-
- Since we consider `sbw' for the horizontal direction only, we still have
- to synthesize vertical metrics if the user wants to use the vertical
- writing direction.
-
- * src/cff/cffgload.c (cff_slot_load), src/cid/cidgload.c
- (cid_slot_load_glyph), src/type1/t1gload.c (T1_Load_Glyph):
- Synthesize vertical metrics (only) if FT_LOAD_VERTICAL_LAYOUT is
- set.
-
-2010-02-10 Ken Sharp <ken.sharp@artifex.com>
-
- Really fix Savannah bug #28678 (part 1).
-
- After long discussion, we now consider the character width vector
- (wx,wy) returned by the `sbw' Type 1 operator as being part of *one*
- direction only. For example, if you are using the horizontal
- writing direction, you get the horizontal and vertical components of
- the advance width for this direction. Note that OpenType and CFF fonts
- don't have such a vertical component; instead, the GPOS table can be
- used to generate two-dimensional advance widths (but this isn't
- handled by FreeType).
-
- * include/freetype/ftincrem.h (FT_Incremental_MetricsRec): Add
- `advance_v' field to hold the vertical component of the advance
- value.
-
- * src/truetype/ttgload.c (tt_get_metrics), src/cff/cffgload.c
- (cff_slot_load), src/type1/t1gload.c
- (T1_Parse_Glyph_And_Get_Char_String), src/cid/cidgload.c
- (cid_load_glyph): Use it.
-
-2010-02-08 Werner Lemberg <wl@gnu.org>
-
- * devel/ftoption.h [FT_CONFIG_OPTION_PIC]: Define.
-
-2010-02-04 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Prevent NULL pointer dereference passed to FT_Module_Requester.
-
- * src/sfnt/sfdriver.c (sfnt_get_interface): Don't use `module'.
- * src/psnames/psmodule.c (psnames_get_interface): Ditto.
-
- * src/cff/cffdrivr.c (cff_get_interface): Check NULL `driver'.
- * src/truetype/ttdriver.c (tt_get_interface): Ditto.
-
-2010-01-29 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix memory leaks in previous patch.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Don't overwrite the strings
- allocated for face->root.family_name and style_name.
-
-2010-01-29 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- New parameters for FT_Open_Face() to ignore preferred family names.
-
- Preferred family names should be used for legacy systems that
- can hold only a few faces (<= 4) for a family name. Suggested by
- Andreas Heinrich.
- http://lists.gnu.org/archive/html/freetype/2010-01/msg00001.html
-
- * include/freetype/ftsnames.h (FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY,
- FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY): Define.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Check the arguments and
- ignore preferred family and subfamily names if requested.
-
-2010-01-27 Ken Sharp <ken.sharp@artifex.com>
-
- Fix Savannah bug #28678.
-
- * src/cff/cffgload.c (cff_slot_load), src/cid/cidgload.c
- (cid_load_glyph): Handle vertical metrics correctly.
-
- * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Handle
- vertical metrics correctly.
- (T1_Load_Glyph): Don't synthesize vertical metrics.
-
-2010-01-14 Werner Lemberg <wl@gnu.org>
-
- Make FT_Set_Transform work if no renderer is available.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Apply `standard' transformation
- if no renderer is compiled into the library.
-
-2010-01-14 Werner Lemberg <wl@gnu.org>
-
- Fix compilation warning.
-
- * src/base/ftbase.h: s/LOCAL_DEF/LOCAL/.
- * src/base/ftobjs.c: Include ftbase.h conditionally.
-
-2010-01-11 Kwang Yul Seo <skyul@company100.net>
-
- Provide inline assembly code for RVCT compiler.
- This is Savannah patch #7059.
-
- * include/freetype/config/ftconfig.h (FT_MULFIX_ASSEMBLER,
- FT_MulFix_arm) [__CC_ARM || __ARM_CC]: Define.
-
-2010-01-08 Ken Sharp <ken.sharp@artifex.com>
-
- Fix Savannah bug #28521.
-
- Issue #28226 involved a work-around for a font which used the
- `setcurrentpoint' operator in an invalid way; this operator is only
- supposed to be used with the result of OtherSubrs, and the font used
- it directly. The supplied patch removed the block of code which
- checked this usage entirely.
-
- This turns out to be a Bad Thing. If `setcurrentpoint' is being
- used correctly it should reset the flex flag in the decoder. If we
- don't do this then the flag never gets reset and we omit any further
- contours from the glyph (at least until we close the path or
- similar).
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
- <op_setcurrentpoint>: Handle `flex_state' correctly.
-
-2010-01-05 Werner Lemberg <wl@gnu.org>
-
- Apply reports from clang static analyzer.
-
- * src/lzw/ftlzw.c (ft_lzw_file_init), src/base/ftstroke.c
- (FT_Stroker_ParseOutline), src/base/ftsynth.c
- (FT_GlyphSlot_Embolden): Remove dead code.
-
- * src/base/ftpatent.c (_tt_check_patents_in_table): Initialize
- `offset_i' and `length_i'.
-
-2010-01-05 Ralph Giles <giles@ghostscript.com>
-
- Enable the incremental font interface by default.
-
- Ghostscript requires the incremental font interface for handling
- some Postscript documents. It is moving to using FreeType as its
- primary renderer; supporting this in the default build makes it
- Ghostscript to be linked against the system FreeType when one is
- available.
-
- * include/freetype/config/ftoption.h (FT_CONFIG_OPTION_INCREMENTAL):
- Uncomment.
-
-2010-01-05 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #28395.
-
- * src/truetype/ttdriver.c (Load_Glyph), src/type1/t1gload.c
- (T1_Load_Glyph): Don't check `num_glyphs' if incremental interface
- is used.
-
-2010-01-05 Ken Sharp <ken.sharp@artifex.com>
-
- Make Type 1 `seac' operator work with incremental interface.
- This fixes Savannah bug #28480.
-
- * src/psaux/t1decode.c (t1operator_seac): Don't check `glyph_names'
- if incremental interface is used.
-
-2010-01-04 Ken Sharp <ken.sharp@artifex.com>
-
- Make incremental interface work with TrueType fonts.
- This fixes Savannah bug #28478.
-
- * src/truetype/ttgload.c (load_truetype_glyph): Don't check
- `glyf_offset' if incremental interface is used.
-
-2009-12-31 Lars Abrahamsson <wonko@opera.com>
-
- Make compilation with FT_CONFIG_OPTION_PIC work again.
-
- * src/base/ftglyph.c (FT_Glyph_To_Bitmap) [FT_CONFIG_OPTION_PIC]:
- Declare `library' for FT_BITMAP_GLYPH_CLASS_GET.
-
- * src/base/ftinit.c (ft_destroy_default_module_classes,
- ft_create_default_module_classes): Use proper casts (needed for C++
- compilation).
-
- * src/sfnt/ttcmap.c (tt_cmap13_class_rec): Use FT_DEFINE_TT_CMAP.
-
-2009-12-22 Marc Kleine-Budde <mkl@pengutronix.de>
-
- Make freetype-config aware of $SYSROOT.
- This is Savannah patch #7040.
-
- * builds/unix/freetype-config.in: Decorate with ${SYSROOT} where
- appropriate.
-
-2009-12-20 Werner Lemberg <wl@gnu.org>
-
- Fix compiler warning.
- Reported by Sean.
-
- * src/base/ftdbgmem.c [!FT_DEBUG_MEMORY]: ANSI C doesn't like empty
- source files; however, some compilers warn about an unused variable
- declaration. This is now replaced with a typedef.
-
-2009-12-18 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #28320.
-
- There exist corrupt, subsetted fonts (embedded in PDF files) which
- contain a private dict that ends with an unterminated floating point
- number (no operator following). We now ignore this error (as
- acrobat does).
-
- * src/cff/cffparse.c (cff_parser_run): Don't emit a syntax error for
- unterminated floating point numbers.
-
-2009-12-16 Werner Lemberg <wl@gnu.org>
-
- Really fix compiler warnings.
- Reported by Sean.
-
- * src/truetype/ttgxvar.c (GX_PT_POINTS_ARE_WORDS,
- GX_PT_POINT_RUN_COUNT_MASK): Convert enum values to macros.
-
-2009-12-16 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Improve configure.raw to copy some options from CFLAGS to LDFLAGS.
- The linker of Mac OS X 10.6 is sensitive to the architecture. If
- the architectures are specified explicitly for the C compiler, the
- linker requires the architecture specifications too.
-
- * builds/unix/configure.raw: Replace `-isysroot' option parser by
- more generic argument parser.
-
-2009-12-15 Werner Lemberg <wl@gnu.org>
-
- Fix compiler warnings.
- Reported by Sean.
-
- * src/truetype/ttgxvar.c (ft_var_readpackeddeltas): Fix counter data
- type.
-
-2009-12-14 Ken Sharp <ken.sharp@artifex.com>
-
- Ignore invalid `setcurrentpoint' operations in Type 1 fonts.
- This fixes Savannah bug #28226.
-
- At least two wild PostScript files of unknown provenance contain
- Type 1 fonts, apparently converted from TrueType fonts in earlier
- PDF versions of the files, which use the `setcurrentpoint' operator
- inappropriately.
-
- FreeType currently throws an error in this case, but Ghostscript and
- Adobe Distiller both accept the fonts and ignore the problem. This
- commit #ifdefs out the check so PostScript interpreters using
- FreeType can render these files.
-
- The specification says `setcurrentpoint' should only be used to set
- the point after a `Subr' call, but these fonts use it to set the
- initial point to (0,0). Unnecessarily so, as they correctly use an
- `hsbw' operation which implicitly sets the initial point.
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
- <op_setcurrentpoint>: Comment out code.
-
-2009-12-14 Bram Tassyns <bramt@enfocus.be>
-
- Fix parsing of /CIDFontVersion.
- This fixes Savannah bug #28287.
-
- * src/cid/cidtoken.h: `cid_version' in CID_FaceInfoRec (in
- t1tables.h) is of type FT_Fixed.
-
-2009-12-14 Werner Lemberg <wl@gnu.org>
-
- Trace glyph index in CID module.
- Suggested in Savannah patch #7023.
-
- * src/cid/cidgload.c (cid_load_glyph): Add tracing message.
-
-2009-12-03 Werner Lemberg <wl@gnu.org>
-
- Fix compiler warnings.
-
- * src/truetype/ttgload.c (tt_get_metrics): Put `Exit' label into the
- proper preprocessor conditional.
- * src/pfr/pfrobjs.c (pfr_slot_load): Pacify gcc.
-
-2009-11-25 John Tytgat <John.Tytgat@esko.com>
-
- Better handling of start of `eexec' section.
- This fixes Savannah bug #28090.
-
- * src/type1/t1parse.c (T1_Get_Private_Dict): Skip all whitespace
- characters before start of `eexec' section.
-
-2009-11-20 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #27742.
-
- * src/base/ftstroke.c (ft_stroker_outside): Avoid silent division by
- zero, using a threshold for `theta'.
-
-2009-11-20 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #28036.
-
- * src/type1/t1afm.c (t1_get_index): Fix comparison.
-
-2009-11-16 Werner Lemberg <wl@gnu.org>
-
- Fix compiler warnings.
- Reported by Kevin Blenkinsopp <arqon@promode.org>.
-
- * src/sfnt/ttload.c (check_table_dir): Use proper data type.
-
-2009-11-15 Werner Lemberg <wl@gnu.org>
-
- Really fix FreeDesktop bug #21197.
- This also fixes Savannah bug #28021.
-
- * src/autofit/aflatin.c (af_latin_metrics_check_digits),
- src/autofit/aflatin2.c (af_latin2_metrics_check_digits): Fix loop.
-
-2009-11-15 Werner Lemberg <wl@gnu.org>
-
- Add tracing messages for advance values.
-
- * src/base/ftobjs.c (FT_Load_Glyph), src/truetype/ttgload.c
- (TT_Get_HMetrics, TT_Get_VMetrics): Do it.
-
-2009-11-08 Werner Lemberg <wl@gnu.org>
-
- Fix compiler warning.
- Reported by Jeremy Manson <jeremy.manson@gmail.com>.
-
- * src/truetype/ttgload.c (load_truetype_glyph): Initialize `error'.
-
-2009-11-04 Werner Lemberg <wl@gnu.org>
-
- Remove compiler warning.
- Reported by Sean McBride <sean@rogue-research.com>.
-
- * src/tools/apinames.c (read_header_file)<STATE_TYPE>: Use a cast to
- `int', as specified in the printf(3) man page.
-
-2009-11-04 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #27921.
-
- * src/cff/cffobjs.c (cff_face_init), src/cid/cidobjs.c
- (cid_face_init), src/type1/t1afm.c (T1_Read_Metrics),
- src/type1/t1objs.c (T1_Face_Init): Don't use unsigned constant
- values for rounding if the argument can be negative.
-
-2009-11-03 Bram Tassyns <bramt@enfocus.be>
-
- Add basic support for Type1 charstrings in CFF.
- This fixes Savannah bug #27922.
-
- * src/cff/cffgload.c (CFF_Operator, cff_argument_counts): Handle
- `seac', `sbw', and `setcurrentpoint' opcodes.
- (cff_compute_bias): Add parameter to indicate the charstring type.
- Update all callers.
- (cff_operator_seac): Add parameter for side bearing.
- (cff_decoder_parse_charstrings): Updated for more Type1 support.
-
-2009-11-03 Werner Lemberg <wl@gnu.org>
-
- Return correct `linearHoriAdvance' value for embedded TT bitmaps too.
- Reported by Jeremy Manson <jeremy.manson@gmail.com>.
-
- src/truetype/ttgload.c (load_truetype_glyph): Add parameter to
- quickly load the glyph header only.
- Update all callers.
- (tt_loader_init): Add parameter to quickly load the `glyf' table
- only.
- Update all callers.
- (TT_Load_Glyph): Compute linear advance values for embedded bitmap
- glyphs too.
-
-2009-11-03 Werner Lemberg <wl@gnu.org>
-
- Improve code readability.
-
- * src/ttgload.c (load_truetype_glyph): Move metrics calculation
- to...
- (tt_get_metrics): This new function.
-
-2009-10-26 Bram Tassyns <bramt@enfocus.be>
-
- Fix Savannah bug #27811.
-
- * src/truetype/ttxgvar.c (ft_var_readpackeddeltas): Fix
- signed/unsigned mismatch.
-
-2009-10-19 Ning Dong <flintning@163.com>
-
- Fix handling of `get' and `put' CFF instructions.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings) <cff_op_get,
- cff_op_put>: Appendix B of Adobe Technote #5177 limits the number of
- elements for the `get' and `put' operators to 32.
- * src/cff/cffgload.h (CFF_MAX_TRANS_ELEMENTS): Define.
- (CFF_Decoder): Use it for `buildchar' and remove `len_buildchar'.
-
-2009-10-18 Werner Lemberg <wl@gnu.org>
-
- Fix handling of `dup' CFF instruction.
- Problem and solution reported by Ning Dong <flintning@163.com>.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings) <cff_op_dup>:
- Increase `args' by 2, not 1.
-
-2009-10-10 Werner Lemberg <wl@gnu.org>
-
- * Version 2.3.11 released.
- ==========================
-
-
- Tag sources with `VER-2-3-11'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.3.11.
-
- * README, Jamfile (RefDoc), builds/win32/visualc/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj: s/2.3.10/2.3.11/, s/2310/2311/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 11.
-
- * builds/unix/configure.raw (version_info): Set to 9:22:3.
-
-2009-10-10 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES, docs/release: Updated.
-
-2009-10-10 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/pcf/pcfread.c (pcf_get_properties): Fix a bug in the nprops
- truncation. Reported by Martin von Gagern and Peter Volkov.
- https://bugs.gentoo.org/288357 and https://bugs.gentoo.org/288256
-
-2009-10-06 Werner Lemberg <wl@gnu.org>
-
- * Version 2.3.10 released.
- ==========================
-
-
- Tag sources with `VER-2-3-10'.
-
- * builds/toplevel.mk (major, minor, patch): Fix regexp to allow more
- than a single digit.
- (dist): We now use git.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.3.10.
-
- * README, Jamfile (RefDoc), builds/win32/visualc/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj: s/2.3.9/2.3.10/, s/239/2310/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 10.
-
- * builds/unix/configure.raw (version_info): Set to 9:21:3.
-
-2009-10-06 Werner Lemberg <wl@gnu.org>
-
- Fix `make multi'.
-
- * src/cache/ftccache.c, src/cache/ftcsbits.c (FT_COMPONENT): Define.
-
- * src/sfnt/sfdriver.c: Include FT_INTERNAL_DEBUG_H.
-
-2009-09-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cache] Fix Savannah bug #27441, clean up Redhat bugzilla #513582.
- Tricky casts in FTC_{CACHE,GCACHE,MRULIST}_LOOKUP_CMP() are removed.
- Now these functions should be called with FTC_Node or FTC_MruNode
- variable, and the caller should cast them to appropriate pointers to
- concrete data. These tricky casts can GCC-4.4 optimizer (-O2)
- confused and the crashing binaries are generated.
-
- * src/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Drop tricky cast.
- Now the 4th argument `node' of this function should be typed as
- FTC_MruNode.
-
- * src/cache/ftcglyph.h (FTC_GCACHE_LOOKUP_CMP): For inline
- implementation, new temporal variable FTC_MruNode `_mrunode' to take
- the pointer from FTC_MRULIST_LOOKUP_CMP(). For non-inline
- implementation, tricky cast is dropped.
-
- * src/cache/ftcmanag.c (FTC_SIZE_NODE): New macro casting
- to FTC_SizeNode.
- (FTC_Manager_LookupSize): Replace FTC_SizeNode `node' by FTC_MruNode
- `mrunode', and FTC_SIZE_NODE() is inserted.
- (FTC_FACE_NODE): New macro casting to FTC_FaceNode.
- (FTC_Manager_LookupFace) Replace FTC_FaceNode `node' by FTC_MruNode
- `mrunode', and FTC_FACE_NODE() is inserted.
-
- * src/cache/ftcbasic.c (FTC_ImageCache_Lookup): Change the type of
- `node' from FTC_INode to FTC_Node. Extra casting macro FTC_NODE()
- is dropped.
- (FTC_ImageCache_LookupScaler): Ditto.
- (FTC_SBitCache_Lookup): Change the type of `node' from FTC_SNode to
- FTC_Node. Extra casting macro FTC_NODE() is dropped. FTC_SNODE()
- is inserted.
- (FTC_SBitCache_LookupScaler): Ditto.
-
- * src/cache/ftccmap.c (FTC_CMapCache_Lookup): Change the type of
- `node' from FTC_CMapNode to FTC_Node. Extra casting macro
- FTC_NODE() is dropped, FTC_CMAP_NODE() is inserted.
-
-2009-09-25 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cache, psaux, type1] Fix for multi build.
- In multi build, some cpp functions are left as unresolved symbols.
-
- * src/cache/ftcbasic.c: Include FT_INTERNAL_DEBUG_H for FT_TRACE1().
-
- * src/psaux/t1decode.c: Include FT_INTERNAL_CALC_H for
- FIXED_TO_INT().
- * src/type1/t1gload.c: Ditto.
- * src/type1/t1objs.c: Ditto.
-
-2009-09-25 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [autofit] Fix for multi build.
-
- * src/autofit/afmodule.h: Include FT_INTERNAL_OBJECTS_H to use
- FT_DECLARE_MODULE() macro in multi build.
-
- * src/autofit/aflatin.c: Include <ft2build.h> to handle
- FT_ADVANCES_H correctly in multi build.
-
-2009-09-24 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cache] Check the face filled by FTC_Manager_LookupFace().
-
- * src/cache/ftcbasic.c (ftc_basic_family_get_count): Return
- immediately if FTC_Manager_LookupFace() fills face by NULL. Such
- case can occur when the code is optimized by GCC-4.2.x.
-
-2009-09-23 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2009-09-12 Werner Lemberg <wl@gnu.org>
-
- [raster] Fix 5-levels grayscale output.
- This was broken since version 2.3.0.
-
- * src/raster/ftraster.c (count_table): Use pre-2.3.0 values (which
- were then computed dynamically).
- (Vertical_Gray_Sweep_Step): Updated.
-
- (ft_black_render): Initialize `worker->gray_lines' (problem found by
- valgrind).
-
- (FT_RASTER_OPTION_ANTI_ALIASING, DEBUG_RASTER): Don't #undef, just
- comment out.
-
-2009-09-12 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Improve configure.raw for cross build.
-
- * builds/unix/configure.raw: Remove temporal files created by the
- suffix checking for CC_BUILD. Set XX_ANSIFLAGS and XX_CFLAGS when
- cross compiler is GCC. AC_PROG_CC checks whether the cross compiler
- is GCC, its result is stored in GCC.
-
-2009-09-12 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [BDF] Modify hash API to take size_t value instead of void *.
-
- The hash API in BDF driver is designed to be generic, it takes
- void * typed data. But BDF driver always gives an unsigned long
- integer (the index to a property). To reduce non-essential
- casts from unsigned long to void* and from void* to unsigned
- long, the hash API is changed to take size_t integer.
- The issue of incompatible cast between unsigned long and void*
- on LLP64 platform is reported by NightStrike from MinGW-Win64
- project. See
- http://lists.gnu.org/archive/html/freetype/2009-09/msg00000.html
-
- * src/bdf/bdf.h: The type of hashnode->data is changed from
- void* to size_t.
-
- * src/bdf/bdflib.c (hash_insert): Get size_t data, instead of
- void* data.
- (bdf_create_property): Get the name length of new property by
- size_t variable, with a cut-off at FT_ULONG_MAX.
- (_bdf_set_default_spacing): Get the name length of the face by
- size_t variable, with a cut-off at 256.
- (bdf_get_property): Get the property id by size_t variable to
- reduce the casts between 32-bit prop ID & hashnode->data during
- simple copying.
- (_bdf_add_property): Ditto.
- (_bdf_parse_start): Calculate the index to the property array
- by size_t variable.
- (bdf_get_font_property): Drop a cast to unsigned long.
-
-2009-09-10 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [Win64] Improve the computation of random seed from stack address.
-
- On LLP64 platform, the conversion from pointer to FT_Fixed need
- to drop higher 32-bit. Explicit casts are required. Reported by
- NightStrike from MinGW-w64 project. See
- http://lists.gnu.org/archive/html/freetype/2009-09/msg00000.html
-
- * src/cff/cffgload.c: Convert the pointers to FT_Fixed explicitly.
-
- * src/psaux/t1decode.c: Ditto.
-
-
-2009-09-03 Werner Lemberg <wl@gnu.org>
-
- [raster] Improvements for stand-alone mode.
-
- * src/raster/rules.mk: Don't handle ftmisc.h. It is needed for
- stand-alone mode only.
-
- * src/raster/ftmisc.h (FT_MemoryRec, FT_Alloc_Func, FT_Free_Func,
- FT_Realloc_Func): Copy declarations from ftsystem.h.
-
-2009-09-02 Bram Tassyns <bramt@enfocus.be>
-
- Improve vertical metrics calculation (Savannah bug #27364).
-
- The calculation of `vertBearingX' is not defined in the OTF font
- spec so FreeType does a `best effort' attempt. However, this value
- is defined in the PDF and PostScript specs, and that algorithm is
- better than the one FreeType currently uses:
-
- FreeType: Use the middle of the bounding box as the X coordinate
- of the vertical origin.
-
- Adobe PDF spec: Use the middle of the horizontal advance vector as
- the X coordinate of the vertical origin.
-
- FreeType's algorithm goes wrong if you have a really small glyph
- (like the full-width, circle-like dot at the end of the sentence, as
- used in CJK scripts) with large bearings. With the FreeType
- algorithm this dot gets centered on the baseline; with the PDF
- algorithm it gets the correct location (in the top right). Note
- that this is a serious issue, it's like printing the dot at the end
- of a Roman sentence at the center of the textline instead of on the
- baseline like it should. So i believe the PDF spec's algorithm
- should be used in FreeType as well.
-
- The `vertBearingY' value for such small glyphs is also very strange
- if no `vmtx' information is present, since the height of the bbox is
- not representable for the height of the glyph visually (the
- whitespace up to the baseline is part of the glyph). The fix also
- includes some code for a better estimate of `vertBearingY'.
-
- * src/base/ftobjs.c (ft_synthesize_vertical_metrics): `vertBearingX'
- is now calculated as described by the Adobe PDF Spec. Estimate for
- `vertBearingY' now works better for small glyphs completely above or
- below the baseline into account.
-
- * src/cff/cffgload.c (cff_slot_load): `vertBearingX' is now
- calculated as described by the Adobe PDF Spec. Vertical metrics
- information was always ignored when FT_CONFIG_OPTION_OLD_INTERNALS
- was not defined.
-
- * src/truetype/ttgload.c (compute_glyph_metrics): `vertBearingX' is
- now calculated as described by the Adobe PDF Spec.
-
-2009-09-01 John Tytgat <John.Tytgat@esko.com>
-
- Fix custom cmap for empty Type 1 font (Savannah bug #27294).
-
- * include/freetype/internal/t1types.h (T1_EncodingRecRec_): Update
- comment to reflect revised code_last meaning.
- * src/type1/t1load.c (T1_Open_Face), src/type42/t42objs.c
- (T42_Open_Face): Assign max_char as highest character code + 1 and
- use this for T1_EncodingRecRec_::code_last.
- * src/psaux/t1cmap.c (t1_cmap_custom_init): Follow revised
- T1_EncodingRecRec_::code_last meaning.
-
-2009-08-25 Werner Lemberg <wl@gnu.org>
-
- Fix rendering of horizontally compressed CFFs.
- Bug reported by Ivan Nincic <inincic@pdftron.com>.
-
- * src/cff/cffgload.c (cff_slot_load): Thinko: Check `xx' element of
- `font_matrix' also.
-
- * docs/CHANGES: Updated.
-
-2009-08-03 suyu0925@gmail.com
-
- Don't call `ft_fseek' every time when executing `ft_fread'.
-
- * src/base/ftstream.c (FT_Stream_Seek), src/base/ftsystem.c
- (ft_ansi_stream_io): Implement it.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- sfnt: Cast a charcode to 32-bit in cmap format 14 parser.
-
- * src/sfnt/ttcmap.c (tt_cmap14_char_var_index,
- tt_cmap14_char_var_isdefault, tt_cmap14_char_variants,
- tt_cmap14_variant_chars): Correct mismatches from
- FT_CMap_CharVarIndexFunc prototype, FT_ULong arguments
- are replaced by FT_UInt32 arguments.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- sfnt: Cast a charcode to 32-bit in cmap format 12 parser.
-
- * src/sfnt/ttcmap.c (tt_cmap12_char_next):
- Insert explicit cast from FT_UFast to FT_UInt32
- for return value.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- psaux: Fix a few casts to FT_Int32 value.
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings):
- Fix a few casts setting `value' from FT_Long to FT_Int32,
- because `value' is typed as FT_Int32 since 2009-06-22.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- sfnt: Fix a data type mismatching with its source.
-
- * src/sfnt/ttcmap.c (tt_cmap13_char_next): Fix the
- type of `gindex' from FT_ULong to FT_UInt because
- it is set by FT_UInt tt_cmap13_char_map_binary() or
- TT_CMap13->cur_gindex.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- sfnt: Extend a few local variables to load 32-bit values.
-
- * src/sfnt/ttkern.c (tt_face_load_kern): Extend `count'
- and `kern' to load 32-bit values.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- pfr: Extend `num_aux' to take 32-bit value.
-
- * src/pfr/pfrload.c (pfr_phy_font_load): Extend
- `num_aux' to load 32-bit value.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- pcf: Truncate FT_ULong `nprops' to fit to int PCF_Face->nprops.
-
- * src/pcf/pcfread.c (pcf_get_properties): Load `nprops'
- as FT_ULong value from PCF file, but truncate it as
- int to fit PCF_Face->nprops. The number of truncated
- properties is shown in the trace message.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- gxvalid: Extend a few local variables to reduce the casts.
-
- * src/gxvalid/gxvmorx.c (gxv_morx_subtables_validate):
- Extend `type' and `rest' to take FT_ULong values.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- gxvalid: Extend `settingTable' to take 32-bit offset.
-
- * src/gxvalid/gxvfeat.c (gxv_feat_name_validate):
- Extend `settingTable' to take 32-bit offset.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- autofit: Cast FT_Long glyph_count to compare with FT_UInt GID.
-
- * src/autofit/afglobal.c (af_face_globals_is_digit,
- af_face_globals_compute_script_coverage): Cast FT_Long
- globals->glyph_count to FT_ULong, to compare with FT_UInt
- gindex.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- smooth: Exclude 16-bit system in invalid pitch/height check.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic):
- pitch and height are typed as FT_UInt but checked to fit
- 16-bit range, to avoid the overflows. On 16-bit system,
- this checking inserts a conditional that never occurs.
-
-2009-07-03 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- cff: Type large constants > 0x7FFF as long for 16-bit systems.
-
- * src/cff/cffload.c (cff_charset_load): Type large
- constants > 0x7FFF as long, because normal constants
- are typed signed integer that is less than 0x8000 on
- 16-bit systems.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- base: Remove an unused variable.
-
- * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Remove an
- unused variable `library'. glyph->library is used.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- cache: Check higher bits in flags for non ILP32 systems.
-
- 4 public functions ought to take FT_ULong flags, but take
- FT_UInt flags. To keep binary compatibility, we drop higher
- bits on non ILP32 platforms,
- ILP64 systems: No drop occurs.
- LP64 systems: Higher bits are not used.
- 16-bit systems: Drop can occur.
- See
- http://lists.gnu.org/archive/html/freetype-devel/2008-12/msg00065.html
- These functions will be refined to take FT_ULong flags in
- next bump with incompatible API change.
-
- * src/cache/ftcbasic.c (FTC_ImageCache_Lookup):
- Check `flags' in `type', the 2nd argument.
- (FTC_SBitCache_Lookup): Ditto.
- (FTC_ImageCache_LookupScaler): Check `load_flags',
- the 3rd argument.
- (FTC_SBitCache_LookupScaler): Ditto.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- sfnt: Ignore invalid GIDs in glyph name lookup.
-
- * include/freetype/internal/fttrace.h:
- New trace module for sfdriver.c is added.
-
- * src/sfnt/sfdriver.c (sfnt_get_name_index):
- Restrict glyph name lookup to FT_UInt GID.
- Genuine TrueType can hold 16-bit glyphs.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- pcf: Fix a comparison between FT_Long and FT_ULong.
-
- * src/pcf/pcfread.c (pcf_get_bitmaps): Return an error
- if PCF_Face->nmetrics is negative.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- gxvalid: Guarantee `nFeatureFlags' size up to 32-bit.
-
- * src/gxvalid/gxvmort.c (gxv_mort_featurearray_validate):
- Extend the 3rd argument `nFeatureFlags' to FT_ULong.
- * src/gxvalid/gxvmort.h: Ditto.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- sfnt: Insert explicit cast for LP64 system.
-
- * src/sfnt/ttkern.c (tt_face_load_kern): Insert
- cast from unsigned long to FT_UInt32.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- gxvalid: Guarantee `just' table size upto 32-bit.
-
- * src/gxvalid/gxvjust.c (gxv_just_validate):
- The type of `offset' is changed from FT_UInt to
- FT_Offset, for 16-bit platforms.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- gxvalid: Guarantee `trak' table size upto 32-bit.
-
- * src/gxvalid/gxvtrak.c (gxv_trak_validate):
- The type of `offset' is changed from FT_UInt to
- FT_Offset, for 16-bit platforms.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- type1: Fix a data type mismatching with its source.
-
- * include/freetype/internal/t1types.h: The type of
- T1_Face->buildchar is matched with T1_Decoder->top.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- pfr: Fix a data type mismatching with its source.
-
- * src/pfr/pfrtypes.h: The type of PFR_KernItem->offset
- is extended from FT_UInt32 to FT_Offset, because it is
- calculated with the pointer difference, in
- pfr_extra_item_load_kerning_pairs().
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- pfr: Fix a data type mismatching with its source.
-
- * src/pfr/pfrtypes.h: The type of PFR_PhyFont->chars_offset
- is extended from FT_UInt32 to FT_Offset, because it is
- calculated with the pointer difference in pfr_phy_font_load().
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- pfr: Fix a data type mismatching with its source.
-
- * src/pfr/pfrtypes.h: The type of PFR_PhyFont->bct_offset
- is extended from FT_UInt32 to FT_Long, because it is
- loaded by FT_STREAM_POS() in pfr_phy_font_load().
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- smooth: Improve the format in debug message.
-
- * src/smooth/ftgrays.c (gray_dump_cells): Improve the
- format specifications to dump variables.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- sfnt: Fix a data type mismatching with its source.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): The type of
- local `flags' is matched with FT_Face->face_flags.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- psaux: Fix a data type mismatching with its source.
-
- * include/freetype/internal/psaux.h: The type of
- T1_DecoderRec.buildchar is matched with
- T1_DecoderRec.top.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- truetype: Extend TrueType GX packed deltas to FT_Offset.
-
- * src/truetype/ttgxvar.c (ft_var_readpackeddeltas):
- The type of 2nd argument `delta_cnt' is changed from
- FT_Int to FT_Offset, because its source can be cvt
- table size calculated from stream position.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- truetype: Extend mmvar_len to hold size_t values.
-
- * src/truetype/ttgxvar.h: The type of
- GX_BlendRec.mmvar_len is changed from FT_Int to
- FT_Offset, because TT_Get_MM_Var() calculates it
- by sizeof() results.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- truetype: Check invalid function number in IDEF instruction.
-
- * src/truetype/ttinterp.c (Ins_IDEF): Check
- if the operand fits to 8-bit opcode limitation.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- truetype: Check invalid function number in FDEF instruction.
-
- * src/truetype/ttinterp.c (Ins_FDEF): Check
- if the operand fits 16-bit function number.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- truetype: Truncate the deltas of composite glyph at 16-bit values.
-
- * src/truetype/ttgload.c (load_truetype_glyph):
- Insert cast from FT_Long (deltas[i].{x,y}) to
- FT_Int16 in the summation of deltas[] for composite
- glyphs. Because deltas[i] is typed as FT_Pos,
- its component x, y are typed as FT_Long, but
- their sources are always FT_Int16 when they are
- loaded by ft_var_readpackeddeltas(). However,
- the limitation about the summed deltas is unclear.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- truetype: Truncate the instructions upto 16-bit per a glyph.
-
- * src/truetype/ttgload.c (TT_Hint_Glyph): Truncate
- the instructions upto 16-bit length per a glyph.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- truetype: Cast the numerical operands to 32-bit for LP64 systems.
-
- * src/truetype/ttinterp.c (Ins_SPHIX, INS_MIAP,
- Ins_MIRP): Insert cast from long (args[], the
- operands passed to TrueType operator) to FT_Int32
- (the argument of TT_MulFix14()).
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- truetype: Cast the project vector to 32-bit for LP64 system.
-
- * src/truetype/ttinterp.c (Project, DualProject):
- Insert casts from FT_Pos (the arguments `dx', `dy')
- to FT_UInt32 (the argument to TT_DotFix14()).
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- truetype: Cast the scaling params to 32-bit for LP64 system.
-
- * src/truetype/ttgload.c (TT_Process_Composite_Component):
- Insert casts from long (return value of FT_MulFix()) to
- FT_Int32 (the argument to FT_SqrtFixed()).
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- sfnt: Cast a character code to FT_UInt32 for LP64 system.
-
- * src/sfnt/ttcmap.c (tt_cmap14_char_map_nondef_binary,
- tt_cmap14_variants, tt_cmap14_char_variants,
- tt_cmap14_def_char_count, tt_cmap14_get_def_chars,
- tt_cmap14_get_nondef_chars, tt_cmap14_variant_chars)
- Insert casts when FT_UInt32 variable is loaded by
- TT_NEXT_{UINT24|ULONG}. Because most of them are
- compared with FT_UInt32 values in public API, replacing
- FT_UFast is not recommended.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- sfnt: Cast a character code to FT_UInt32 for LP64 system.
-
- * src/sfnt/ttcmap.c (tt_cmap4_init, tt_cmap4_next):
- Insert the casts from unsigned long constant to
- FT_UInt32.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- sfnt: Extend TT_BDF->strings_size to FT_ULong for huge BDF.
-
- * include/freetype/internal/tttypes.h: The type
- of TT_BDF->string_size is extended from FT_UInt32
- to FT_ULong, because BDF specification does not
- restrict the length of string.
- * src/sfnt/ttbdf.c: The scratch variable `strings'
- to load TT_BDF->string_size is matched with
- TT_BDF->string_size.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- psaux: Handle the string length by FT_Offset variables.
-
- * src/psaux/afmparse.c (afm_parser_next_key,
- afm_tokenize, afm_parse_track_kern,
- afm_parse_kern_pairs, afm_parse_kern_data,
- afm_parser_skip_section, afm_parser_parse):
- The length of key is handled by FT_Offset,
- instead of FT_UInt. Although the length of
- PostScript strings or name object is 16-bit,
- AFM_STREAM_KEY_LEN() calculates the length
- from the pointer difference.
-
- * src/psaux/afmparse.h (afm_parser_next_key):
- Ditto.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- pcf: Fix some data types mismatching with their sources.
-
- * src/pcf/pcfread.c (pcf_get_bitmaps): The types
- of `nbitmaps', `i', `sizebitmaps' are matched with
- the type of area FT_Bitmap.pitch * FT_Bitmap.rows.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- pcf: Handle the string length by size_t variables.
-
- * src/pcf/pcfread.c (pcf_interpret_style): The types
- of nn, len, lengths[4] are changed to size_t, because
- they are loaded by (or compared with) ft_strlen().
-
- * src/pcf/pcfutil.c (BitOrderInvert, TwoByteSwap,
- FourByteSwap): The type of the 2nd argument `nbytes'
- is changed to size_t, for similarity with ANSI C
- string functions.
-
- * src/pcf/pcfdrivr.c (PCF_Glyph_Load): The type of
- `bytes' is changed to FT_Offset, because it is passed
- to FT_ALLOC(), via ft_glyphslot_alloc_bitmap(). At
- least, using unsigned type is better.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- pcf: Fix some data types mismatching with their sources.
-
- * src/pcf/pcfread.c (pcf_seek_to_table_type,
- pcf_has_table_type): The type of 3rd argument
- `ntables' is matched with PCF_Toc->count.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- otvalid: Truncate the glyph index to 16-bit.
-
- * src/otvalid/otvalid.c (otv_validate): Checks
- face->num_glyphs does not exceed 16-bit limit,
- pass FT_UInt num_glyphs to backend functions
- otv_{GPOS|GSUB|GDEF|JSTF|MATH}_validate().
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- cache: Insert explicit casts for LP64 systems.
-
- * src/cache/ftcbasic.c (FTC_ImageCache_Lookup,
- FTC_SBitCache_Lookup): The type of FTC_ImageType->width
- is FT_Int, so the cast to unsigned larger type FT_ULong
- is introduced for the comparisons with 0x10000L for
- LP64 platform.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- cache: Fix some data types mismatching with their sources.
-
- * src/cache/ftccache.h: The type of return value
- by FTC_Node_WeightFunc function is changed to
- FT_Offset. The type of FTC_CacheClass->cache_size
- is changed to FT_Offset, too.
-
- * src/cache/ftccback.h (ft_inode_weight,
- ftc_snode_weight): Ditto.
-
- * src/cache/ftccmap.c (ftc_cmap_node_weight): Ditto.
-
- * src/cache/ftcimage.c (ftc_inode_weight,
- FTC_INode_Weight): Ditto.
-
- * src/cache/ftcsbits.c (ftc_snode_weight,
- FTC_SNode_Weight): Ditto.
-
- * src/cache/ftcmru.h: The type of
- FTC_MruListClass->node_size is changed to FT_Offset,
- because it is passed to FT_ALLOC() to specify the
- size of buffer.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- XXX_cmap_encoding_char_next() return FT_UInt32 values.
-
- * include/freetype/internal/services/svpscmap.h:
- The size of the charcode value returned by
- the function typed PS_Unicodes_CharNextFunc is
- matched with its input charcode value.
-
- * src/cff/cffmap.c (cff_cmap_encoding_char_next,
- cff_cmap_unicode_char_next): Ditto.
-
- * src/pfr/pfrmap.c (pfr_cmap_encoding_char_next):
- Ditto.
-
- * src/psaux/t1cmap.c (t1_cmap_std_char_next,
- t1_cmap_custom_char_next, t1_cmap_unicode_char_next):
- Ditto.
-
- * src/psnames/psmodule.c (ps_unicodes_char_next):
- Ditto.
-
- * src/winfonts/winfnt.c (fnt_cmap_char_next):
- Ditto.
-
- * src/sfnt/ttcmap.c (tt_cmap0_char_next,
- tt_cmap2_char_next, tt_cmap4_char_next,
- tt_cmap6_char_next, tt_cmap10_char_next,
- tt_cmap12_char_next, tt_cmap13_char_next): Ditto.
- (tt_cmap14_char_variants): Handle base unicode
- codepoint by FT_UInt32 variable to avoid overflow
- on 16-bit platforms.
- (tt_cmap14_ensure): The type of `num_results' is
- extend to FT_UInt32, to cover unsigned 32-bit
- `numVarSelectorRecords' in cmap14 table header.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- truetype: Extend TT_Face->num_locations for broken TTFs.
-
- * include/freetype/internal/tttypes.h:
- TT_Face->num_locations are extended from FT_UInt
- to FT_ULong, to stand with broken huge loca table.
- Some people insists there are broken TTF including
- the glyphs over 16-bit limitation, in PRC market.
- * src/truetype/ttpload.c (tt_face_load_loca):
- Remove unrequired 16-bit truncation for FT_UInt
- TT_Face->num_locations.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- smooth: Fix some data types mismatching with their sources.
-
- * src/smooth/ftgrays.c: The type of `TCoord' is
- matched to `TPos', because they are mixed in
- gray_set_cell(). The type of TCell->x is extended
- to `TPos', because gray_find_cell() sets it by
- TWorker.ex. The type of TCell->cover is extended
- to `TCoord', because gray_render_scanline() adds
- TCoord value to it. The type of TWork.cover is matched
- with TCell->cover. The types of
- TWork.{max_cells,num_cells} are changed to FT_PtrDist,
- because they are calculated from the memory addresses.
- The type of TWork.ycount is changed to TPos, because
- it is calculated from TPos variables.
- (gray_find_cell): The type of `x' is matched with
- its initial value ras.ex.
- (gray_render_scanline): The types of `mod', `lift'
- and `rem' are changed to TCoord, because their values
- are set with explicit casts to TCoord. When ras.area
- is updated by the differential values including
- `delta', they are explicitly cast to TArea, because
- the type of `delta' is not TArea but TCoord.
- (gray_render_line): The type of `mod' is extended
- from int to TCoord, because (TCoord)dy is added to mod.
- (gray_hline): The argument `acount' is extended to
- TCoord, to match with the parameters in the callers.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- cff: Fix some data types mismatching with their sources.
-
- * src/cff/cffobjs.c (cff_face_init): The type of
- `scaling' is matched with the scaling parameter
- in FT_Matrix_Multiply_Scaled() and
- FT_Vector_Transform_Scaled().
-
- * src/cff/cffparse.c (cff_parse_real): The type of
- `power_ten', `scaling', `exponent_add',
- `integer_length', `fraction_length',
- `new_fraction_length' and `shift' are matched with
- the type of `exponent' to avoid unexpected truncation.
- (cff_parse_fixed_scaled): The type of `scaling' is
- matched with the `scaling' argument to
- cff_parse_real().
- (cff_parse_fixed_dynamic): Ditto.
- (cff_parse_font_matrix): The type of `scaling' is
- matched with the `scaling' argument to
- cff_parse_dynamic().
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- autofit: Fix some data types mismatching with their sources.
-
- * src/autofit/afglobal.c: Correct the type of
- AF_FaceGlobalsRec.glyph_count to match with
- FT_Face->num_glyphs.
- (af_face_globals_compute_script_coverage):
- Insert explicit cast to compare
- FT_Long AF_FaceGlobalsRec.glyph_count versus
- FT_UInt gindex. The type of `nn' is changed
- to scan glyph index upto AF_FaceGlobalsRec.glyph_count.
- (af_face_globals_get_metrics): The type of `script_max'
- is changed to cover size_t value. Insert explicit cast
- to compare FT_Long AF_FaceGlobalsRec.glyph_count versus
- FT_UInt gindex.
-
- * src/autofit/afhints.c (af_axis_hints_new_segment):
- Insert explicit cast to calculate `big_max' from
- integer and size_t values.
- (af_axis_hints_new_edge): Ditto.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues):
- The type of `best_y' is matched to FT_Vector.y.
- (af_latin_compute_stem_width): The type of `delta' is
- matched to `dist' and `org_dist'.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- autofit: Count the size of the memory object by ptrdiff_t.
-
- * src/autofit/afcjk.c (af_cjk_hint_edges): The
- number of edges `n_edges' should be counted by
- FT_PtrDist variable instead of FT_Int.
-
- * src/autofit/aflatin.c (af_latin_hint_edges):
- Ditto.
-
- * src/autofit/aftypes.h: In AF_ScriptClassRec,
- the size of metric `script_metrics_size' should
- be counted by FT_Offset variable instead of FT_UInt.
-
- * src/autofit/afhints.c
- (af_glyph_hints_align_strong_points): The cursors
- for the edges `min', `max', `mid' in the memory
- buffer should be typed FT_PtrDist.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- autofit: Fix for unused variable `first'.
-
- * src/autofit/afhints.c (af_glyph_hints_reload): Insert
- FT_UNUSED() to hide the unused variable warning.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Improve bitmap size or pixel variables for 16-bit systems.
-
- * include/freetype/config/ftstdlib.h: Introduce
- FT_INT_MIN, to use in signed integer overflow in
- 16-bit and 64-bit platforms.
-
- * include/freetype/internal/fttrace.h: Add a tracer
- to ftsynth.c.
-
- * src/base/ftbitmap.c (FT_Bitmap_Embolden): Check
- invalid strength causing integer overflow on 16-bit
- platform.
-
- * src/base/ftcalc.c (ft_corner_orientation): Change
- the internal calculation from FT_Int to FT_Long, to
- avoid an overflow on 16-bit platforms. The caller of
- this function should use only the sign of result,
- so the cast to FT_Int is acceptable.
-
- * src/base/ftsynth.c: Introduce a tracer for synth module.
- (FT_GlyphSlot_Embolden): Check invalid strength causing
- integer overflow on 16-bit platform.
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init): The glyph index
- in FT2 API is typed as FT_UInt, although BDF driver
- can handle unsigned long glyph index internally. To
- avoid integer overflow on 16-bit platform, too large
- glyph index should be excluded.
- (BDF_Glyph_Load): The glyph pitch in FT2 is typed as
- FT_UInt, although BDF driver can handle unsigned long
- glyph pitch internally. To avoid integer overflow on
- 16-bit platform, too large glyph pitch should not be
- returned.
-
- * src/pfr/pfrsbit.c (pfr_slot_load_bitmap): The glyph
- pitch in FT2 is typed as FT_UInt, although PFR font
- format can include huge bitmap glyph with 24-bit pitch
- (however, a glyph spends 16.7 pixel, it's not realistic).
- To avoid integer overflow on 16-bit platform, huge
- bitmap glyph should be excluded.
-
- * src/smooth/ftgrays.c (gray_hline): As FT_Span.x is
- truncated to fit its type (16-bit short), FT_Span.y
- should be truncated to fit its type (FT_Int).
-
- * src/cff/cffdrivr.c (cff_get_ros): CFF specification
- defines the supplement in ROS as a real number.
- Truncate it to fit public FT2 API.
-
- * src/cff/cffparse.c (cff_parse_cid_ros): Warn the
- supplement if it is truncated or rounded in cff_get_ros().
-
- * src/cff/cfftypes.h: Change the type of internal variable
- `supplement' from FT_Long to FT_ULong to fit the signedness
- to the type in public API.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- psaux: Prevent invalid arguments to afm_parser_read_vals().
-
- * src/psaux/afmparse.c (afm_parser_read_vals): Change
- the type of `n' to prevent negative number how many
- arguments should be parsed.
-
- * src/psaux/afmparse.h (afm_parser_read_vals): Ditto.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- base: Prevent some overflows on LP64 systems.
-
- * src/base/ftadvanc.c (FT_Get_Advances): Cast the
- unsigned long constant FT_LOAD_ADVANCE_ONLY to FT_UInt32
- for LP64 platforms.
-
- * src/base/ftcalc.c (FT_Sqrt32): All internal variables
- are changed to FT_UInt32 from FT_ULong.
- (FT_MulDiv): Insert casts to FT_Int32 for LP64 platforms.
- This function is designed for 32-bit integer, although
- their arguments and return value are FT_Long.
-
- * src/base/ftobjs.c (FT_Get_Char_Index): Check `charcode'
- is within unsigned 32-bit integer for LP64 platforms.
- (FT_Face_GetCharVariantIndex): Check `charcode' and
- `variantSelector' are within 32-bit integer for LP64
- platforms.
- (FT_Face_GetCharsOfVariant): Check `variantSelector' is
- within unsigned 32-bit integer for LP64 platforms.
-
- * src/base/fttrigon.c (ft_trig_downscale): The FT_Fixed
- variable `val' and unsigned long constant FT_TRIG_SCALE
- are cast to FT_UInt32, when calculates FT_UInt32.
- (FT_Vector_Rotate): The long constant 1L is cast to
- FT_Int32 to calculate FT_Int32 `half'.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- cff: Cast the long variables to 32-bit for LP64 systems.
-
- * src/cff/cffdrivr.c (cff_get_advances): Insert
- explicit cast to modify a 32-bit flag by unsigned
- long constant.
-
- * src/cff/cffobjs.c (cff_face_init): Ditto.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings):
- Replace the casts to FT_Long by the casts to FT_Int32
- for LP64 platforms.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- pcf: Improve PCF_PropertyRec.value names on LP64 platforms.
-
- * src/pcf/pcf.h: In PCF_PropertyRec.value, the member
- `integer' is replaced by `l', `cardinal' is replaced
- by `ul', to fix the difference between the name and
- the types on LP64 platforms.
-
- * src/pcf/pcfdrivr.c (pcf_get_bdf_property): Reflect
- PCF_PropertyRec.value change, with appropriate casts
- to FT_Int32/FT_UInt32. Their destinations
- BDF_PropertyRec.{integer|cardinal} are public and
- explicitly defined as FT_Int32/FT_UInt32.
-
- * src/pcf/pcfread.c (pcf_get_properties, pcf_load_font):
- Reflect PCF_PropertyRec.value change.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- pcf: Fix some data types mismatching with their sources.
-
- * src/pcf/pcfdrivr.c (pcf_cmap_char_index): The type of
- `code' is matched to PCF_Encoding->enc.
- (pcf_cmap_char_next): The type of `charcode' is matched
- to PCF_Encoding->enc. When *acharcode is set by charcode,
- an overflow is checked and cast to unsigned 32-bit
- integer.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- bdf: Improve bdf_property_t.value names for LP64 platforms.
-
- * src/bdf/bdf.h: In bdf_property_t.value, the member
- `int32' is replaced by `l', `card32' is replaced by
- `ul', to fix the difference between the name and the
- types on LP64 platforms.
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Reflect
- bdf_property_t.value change.
- (bdf_get_bdf_property): Reflect bdf_property_t.value
- change, with appropriate casts to FT_Int32/FT_UInt32.
- Their destinations BDF_PropertyRec.{integer|cardinal}
- are public and explicitly defined as FT_Int32/FT_UInt32.
-
- * src/bdf/bdflib.c (_bdf_add_property): Reflect
- bdf_property_t.value change.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- bdf: Fix some data types mismatching with their sources.
-
- * src/bdf/bdfdrivr.c (bdf_cmap_char_index): The type
- of `code' is matched with BDF_encoding_el->enc.
- (bdf_cmap_char_next): The type of `charcode' is
- matched with BDF_encoding_el->enc. When *acharcode
- is set by charcode, an overflow is checked and
- cast to unsigned 32-bit integer.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- autofit: Improve Unicode range definitions.
-
- * src/autofit/aftypes.h (AF_UNIRANGE_REC): New macro
- to declare a range by two unsigned 32-bit integer,
- to avoid 64-bit range definition on LP64 platforms.
-
- * src/autofit/aflatin.c (af_latin_uniranges): Ditto.
-
- * src/autofit/aflatin2.c (af_latin2_uniranges): Ditto.
-
- * src/autofit/afindic.c (af_indic_uniranges): Ditto.
-
- * src/autofit/afcjk.c (af_cjk_uniranges): Declare
- the ranges by AF_UNIRANGE_REC.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- smooth: Fix a data type mismatching with its source.
-
- * src/smooth/ftgrays.c (gray_sweep): The type of
- `area' is matched with the 3rd argument `area'
- of gray_hline().
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- smooth: Fix a data type mismatching with its source.
-
- * src/smooth/ftgrays.c (gray_render_line): The type
- of `area' is matched with TWorker.area.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- cache: Disable the legacy compatibility if 16-bit system.
-
- * src/cache/ftcbasic.c (FTC_ImageCache_Lookup): Exclude
- the legacy behaviour from 16-bit platform, because the
- current hack cannot detect the caller uses this function
- via legacy convention.
- (FTC_SBitCache_Lookup): Ditto.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- cache: Check 32-bit glyph index on 16-bit systems.
-
- * src/cache/ftcbasic.c (ftc_basic_family_get_count):
- Check overflow caused by the face including large
- number of glyphs > 64k.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- cache: Fix some data types mismatching with their sources.
-
- * src/cache/ftccache.c (ftc_cache_resize): The types of
- `p', `mask', `count' are matched with FTC_Cache->{p,mask}.
- (FTC_Cache_Clear): The type of `old_index' is matched to
- FTC_Cache->{p,mask}.
-
- * src/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP): The type
- of `_idx' is matched with FTC_Cache->{p,mask}.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- cache: Fix some data types mismatching with their sources.
-
- * src/cache/ftcsbits.c (ftc_snode_load): The types
- of `xadvance' and `yadvance' are matched with
- FT_GlyphSlot->advance.{x|y}.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- cache: Cast NULL to a required function type explicitly.
-
- * src/cache/ftcmanag.c (FTC_Manager_RemoveFaceID):
- Insert explicit cast from NULL to function type.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- fttypes.h: Cast FT_MAKE_TAG output to FT_Tag explicitly.
-
- * include/freetype/fttypes.h (FT_MAKE_TAG):
- Cast the result to FT_Tag.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- psnames: Handle Unicode codepoints by FT_UInt32 variables.
-
- * src/psnames/psmodule.c (BASE_GLYPH): Cast the result
- to unsigned 32-bit integer for LP64 platform.
- (ps_unicode_value): Return the value by unsigned 32-bit
- integer instead of unsigned long.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- psaux: Use size_t variable to pass the buffer size.
-
- * src/psaux/psaux.h (to_bytes): The type of `max_bytes'
- (the argument to pass the buffer size) is changed to
- size_t, to match with ANSI C string functions.
-
- * src/psaux/psconv.h (PS_Conv_StringDecode,
- PS_Conv_ASCIIHexDecode, PS_Conv_EexecDecode): Ditto.
-
- * src/psaux/psconv.c (PS_Conv_StringDecode,
- PS_Conv_ASCIIHexDecode, PS_Conv_EexecDecode): Ditto.
-
- * src/psaux/psobjs.h (ps_parser_to_bytes): Ditto.
-
- * src/psaux/psobjs.c (ps_parser_to_bytes): Ditto.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- type1: Use size_t variable to pass the string length.
-
- * psaux.h: The type of `len' (the argument to pass
- the buffer size to the function in AFM_ParserRec)
- is changed to size_t, to match with ANSI C string
- functions.
-
- * t1afm.c (t1_get_index): Ditto.
-
- * test_afm.c (dummy_get_index): Ditto.
-
- * afmparse.c (afm_parser_read_vals): To call
- AFM_ParserRec.get_index, the length of token
- `len' is cast to size_t.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- cid: Fix some data types mismatching with their sources.
-
- * src/cid/cidparse.c (cid_parser_new): The types of
- `read_len' and `stream_len' are matched to
- FT_Stream->size. Unrequired cast is removed.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- cff: Fix for unused variable `rest'.
-
- * src/cff/cffparse.c (cff_parse_real): Insert
- FT_UNUSED() to hide the unused variable warning.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- cff: Fix some data types mismatching with their sources.
-
- * src/cff/cffgload.c (cff_slot_load): The types of
- `top_upm' and `sub_upm' are matched with
- CFF_FontRecDict->units_per_em.
-
- * src/cff/cffobjs.c (cff_size_select): Ditto.
- (cff_size_request): Ditto.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- bdf: Fix some data types mismatching with their sources.
-
- * bdflib.c (_bdf_list_ensure): The type of `num_items'
- is matched with _bdf_list_t.used. Also the types of
- `oldsize', `newsize', `bigsize' are matched too.
- (_bdf_readstream): `cursor' is used as an offset to
- the pointer, it should be typed as FT_Offset. Also
- the types of `bytes', `start', `end', `avail' are matched.
-
- * bdfdrivr.c: The type of BDF_CMap->num_encodings is
- matched with FT_CMap->clazz->size.
- (bdf_cmap_char_index): The types of `min', `max', `mid'
- are matched with BDF_CMap->num_encodings. The type of
- `result' is matched with encoding->glyph.
- (bdf_cmap_char_next): Ditto, the type of `code' is
- matched with BDF_encoding_el.enc.
- (bdf_interpret_style): The type of `lengths' is changed
- to size_t, to take the value by ft_strlen(). Also the
- types of `len', `nn', `mm' are matched.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- sfnt: Count the size of the memory object by ptrdiff_t.
-
- * src/sfnt/ttbdf.c (tt_face_find_bdf_prop): The type of
- `property_len' is changed from FT_UInt to FT_Offset,
- to match with size_t, which is appropriate type for the
- object in the memory buffer.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- lzw: Count the size of the memory object by ptrdiff_t.
-
- * src/lzw/ftzopen.h: The types of FT_LzwState->{buf_total,
- stack_size} are changed from FT_UInt to FT_Offset, to match
- with size_t, which is appropriate type for the object in
- the memory buffer.
-
- * src/lzw/ftzopen.c (ft_lzwstate_stack_grow): The types of
- `old_size' and `new_size' are changed from FT_UInt to
- FT_Offset, to match with size_t, which is appropriate type
- for the object in the memory buffer.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- otvalid: Count the table size on memory by ptrdiff_t.
-
- * src/otvalid/otvgpos.c (otv_ValueRecord_validate):
- Change the type of table size from FT_UInt to
- FT_PtrDist because it is calculated by the memory
- addresses.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- otvalid: Prevent an overflow by GPOS/GSUB 32b-bit offset.
-
- * src/otvalid/otvgpos.c (otv_ExtensionPos_validate):
- Extend ExtensionOffset from FT_UInt to FT_ULong, to
- cover 32-bit offset on 16-bit platform.
-
- * src/otvalid/otvgsub.c (otv_ExtensionSubst_validate):
- Ditto.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- ftobjs.c: Prevent an overflow in glyph index handling.
-
- * src/base/ftobjs.c (FT_Face_GetCharsOfVariant):
- Improve the cast in comparison to avoid the truncation.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Improve the variable types in raccess_make_file_name().
-
- * src/base/ftrfork.c (raccess_make_file_name):
- Change the type of cursor variable `tmp' to const char*,
- to prevent the unexpected modification of original pathname.
- (raccess_make_file_name): Change the type of new_length
- to size_t.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- ftpatent.c: Fix for unused variable `error'.
-
- * src/base/ftpatent.c (_tt_check_patents_in_range):
- Fix warning for unused variable `error'.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- type1: Check invalid string longer than PostScript limit.
-
- * src/type1/t1afm.c (t1_get_index): Check invalid string
- which exceeds the limit of PostScript string/name objects.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- gzip: Use FT2 zcalloc() & zfree() in ftgzip.c by default.
-
- * src/gzip/ftgzip.c (zcalloc, zcfree): Disable all
- zcalloc() & zfree() by zlib in zutil.c, those in
- ftgzip.c by FT2 are enabled by default. To use
- zlib zcalloc() & zfree(), define USE_ZLIB_ZCALLOC.
- See discussion:
- http://lists.gnu.org/archive/html/freetype-devel/2009-02/msg00000.html
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- gzip: Distinguish PureC from TurboC on MSDOS.
-
- * src/gzip/zutil.c (zcalloc, zcfree): Enable only for
- MSDOS platform.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- gxvalid: Insert PureC pragma to allow unevaluated variables.
-
- * builds/atari/ATARI.H: Insert PureC pragma not to
- warn against set-but-unevaluated variable in gxvalid
- module.
-
-2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- gxvalid: Pass the union by the pointer instead of the value.
-
- * src/gxvalid/gxvcommn.h:
- - Declare new type `GXV_LookupValueCPtr'.
- - Update the type of the 2nd argument to pass GXV_LookupValueDesc
- data to the function prototyped as GXV_Lookup_Value_Validate_Func,
- from GXV_LookupValueDesc to GXV_LookupValueCPtr.
- - Likewise for the function prototyped as
- GXV_Lookup_Fmt4_Transit_Func.
-
- - Declare new type `GXV_StateTable_GlyphOffsetCPtr'.
- - Update the type of the 3rd argument to pass
- GXV_StateTable_GlyphOffsetDesc data to the function prototyped
- as GXV_StateTable_Entry_Validate_Func, from
- GXV_StateTable_GlyphOffsetDesc to GXV_StateTable_GlyphOffsetCPtr.
-
- - Declare new type `GXV_XStateTable_GlyphOffsetCPtr'.
- - Update the type of the 3rd argument to pass
- GXV_XStateTable_GlyphOffsetDesc data to the function prototyped
- as GXV_XStateTable_Entry_Validate_Func,
- from GXV_XStateTable_GlyphOffsetDesc
- to GXV_XStateTable_GlyphOffsetCPtr.
-
- * src/gxvalid/gxvcommn.c (gxv_LookupTable_fmt0_validate,
- gxv_XClassTable_lookupval_validate,
- gxv_XClassTable_lookupfmt4_transit):
- Update from GXV_LookupValueDesc to GXV_LookupValueCPtr.
-
- * src/gxvalid/gxvbsln.c (gxv_bsln_LookupValue_validate,
- gxv_bsln_LookupFmt4_transit): Ditto.
-
- * src/gxvalid/gxvjust.c
- (gxv_just_pcTable_LookupValue_entry_validate,
- gxv_just_classTable_entry_validate,
- gxv_just_wdcTable_LookupValue_validate): Ditto.
-
- * src/gxvalid/gxvkern.c
- (gxv_kern_subtable_fmt1_entry_validate): Ditto.
-
- * src/gxvalid/gxvlcar.c (gxv_lcar_LookupValue_validate,
- gxv_lcar_LookupFmt4_transit): Ditto.
-
- * src/gxvalid/gxvopbd.c (gxv_opbd_LookupValue_validate,
- gxv_opbd_LookupFmt4_transit): Ditto.
-
- * src/gxvalid/gxvprop.c (gxv_prop_LookupValue_validate,
- gxv_prop_LookupFmt4_transit): Ditto.
-
- * src/gxvalid/gxvmort4.c
- (gxv_mort_subtable_type4_lookupval_validate): Ditto.
-
- * src/gxvalid/gxvmort0.c
- (gxv_mort_subtable_type0_entry_validate): Update
- from GXV_StateTable_GlyphOffsetDesc
- to GXV_StateTable_GlyphOffsetCPtr.
-
- * src/gxvalid/gxvmort1.c
- (gxv_mort_subtable_type1_entry_validate): Ditto.
-
- * src/gxvalid/gxvmort2.c
- (gxv_mort_subtable_type2_entry_validate): Ditto.
-
- * src/gxvalid/gxvmort5.c
- (gxv_mort_subtable_type5_entry_validate): Ditto.
-
- * src/gxvalid/gxvmorx2.c
- (gxv_morx_subtable_type2_entry_validate): Ditto.
-
- * src/gxvalid/gxvmorx5.c
- (gxv_morx_subtable_type5_entry_validate): Ditto.
-
- * src/gxvalid/gxvmorx1.c
- (gxv_morx_subtable_type1_entry_validate): Ditto.
- (gxv_morx_subtable_type1_LookupValue_validate,
- gxv_morx_subtable_type1_LookupFmt4_transit):
- Update from GXV_LookupValueDesc to GXV_LookupValueCPtr.
-
- * src/gxvalid/gxvmorx0.c
- (gxv_morx_subtable_type0_entry_validate): Update
- from GXV_XStateTable_GlyphOffsetDesc
- to GXV_XStateTable_GlyphOffsetCPtr.
-
-2009-07-29 Fabrice Bellet <fabrice@bellet.info>
-
- Fix Redhat bugzilla #513582 and Savannah bug #26849.
-
- * src/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP) <FTC_INLINE>: Fix
- aliasing bug.
-
-2009-07-19 Werner Lemberg <wl@gnu.org>
-
- Document recent library changes.
-
- * docs/CHANGES: Do it.
-
-2009-07-17 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #23786.
-
- * src/truetype/ttobjs.c (tt_size_init_bytecode): Don't reset x_ppem
- and y_ppem. Otherwise the `*_CVT_Stretched' functions in ttinterp.c
- get never called.
- An anonymous guy suggested this change on Savannah, and it seems to
- be the right solution.
-
-2009-07-15 Werner Lemberg <wl@gnu.org>
-
- * docs/release: Updated.
-
-2009-07-15 Werner Lemberg <wl@gnu.org>
-
- README.CVS -> README.git
-
- * README.CVS: Renamed to...
- * README.git: This.
- Updated.
-
-2009-07-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Borland C++ compiler patch proposed by Mirco Babin.
- http://lists.gnu.org/archive/html/freetype/2009-07/msg00016.html.
-
- * builds/exports.mk: Delete unused flags, CCexe_{CFLAGS,LDFLAGS}.
- Fix APINAMES_C and APINAMES_EXE pathnames to reflect the platform
- specific pathname syntax.
- * builds/compiler/bcc.mk: Remove unused flag, CCexe_LDFLAGS.
- Define TE = `-e' separately (bcc32 cannot specify the pathname of
- binary executable by T = `-o').
- Extend the large page size in linking freetype.lib.
- Add extra CLEAN target to delete bcc specific temporary files.
- * builds/compiler/bcc-dev.mk: Ditto.
-
-2009-07-14 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #27026.
-
- * builds/win32/vc2005/freetype.sln: Use correct version number.
-
-2009-07-12 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Add a script to check the undefined and unused trace macros.
-
- * src/tools/chktrcmp.py: A script to check trace_XXXX macros
- that are used in C source but undefined in fttrace.h, or
- defined in fttrace.h but unused in C sources. See
- http://lists.gnu.org/archive/html/freetype-devel/2009-07/msg00013.html.
- * docs/DEBUG: Mention on chktrcmp.py.
- * docs/release: Ditto.
-
-2009-07-09 Werner Lemberg <wl@gnu.org>
-
- [ftraster] Make it compile again with -D_STANDALONE_.
-
- * src/raster/ftraster.c [_STANDALONE_]: Define
- FT_CONFIG_STANDARD_LIBRARY_H.
- Include `string.h'.
- Don't include `rastpic.h'.
- Define FT_DEFINE_RASTER_FUNCS.
-
-2009-07-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- smooth: Check glyph size by width/height, instead of pitch/height.
- Suggested by der Mouse <mouse@Rodents-Montreal.ORG>.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Improve
- the check for too large glyph. Replace the pair of `pitch' and
- `height' by the pair of `width' and `height'. `pitch' cannot
- be greater than `height'. The required is checking the product
- `pitch' * `height' <= FT_ULONG_MAX, but we use cheap checks for
- the realistic case only.
-
-2009-07-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Register 2 missing trace components, t1afm and ttbdf.
-
- * include/freetype/internal/fttrace.h: Add FT_TRACE_DEF( t1afm )
- and FT_TRACE_DEF( ttbdf ). See
- http://lists.gnu.org/archive/html/freetype-devel/2009-07/msg00013.html
-
-2009-07-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Register a trace component for ftgloadr.c.
-
- * include/freetype/internal/fttrace.h: Add FT_TRACE_DEF( gloader ).
- The macro `trace_gloader' was already used in the initial version
- on 2002-02-24.
-
-2009-07-08 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Prevent the overflows by a glyph with too many points or contours.
- The bug is reported by Boris Letocha <b.letocha@gmc.net>. See
- http://lists.gnu.org/archive/html/freetype-devel/2009-06/msg00031.html
- http://lists.gnu.org/archive/html/freetype-devel/2009-07/msg00002.html
-
- * include/freetype/ftimage.h (FT_OUTLINE_CONTOURS_MAX,
- FT_OUTLINE_POINTS_MAX): New macros to declare the maximum
- values of FT_Outline.{n_contours,n_points}.
- * src/base/ftgloadr.c (FT_GlyphLoader_CheckPoints): Check the
- total numbers of points and contours cause no overflows in
- FT_Outline.{n_contours,n_points}.
-
- * include/freetype/internal/ftgloadr.h (FT_GLYPHLOADER_CHECK_P,
- FT_GLYPHLOADER_CHECK_C): Compare the numbers of points and
- contours as unsigned long number, instead of signed int, to
- prevent the overflows on 16-bit systems.
-
-2009-07-05 Bram Tassyns <bramt@enfocus.be>
-
- Improve compatibility to Acroread.
- This fixes Savannah bug #26944.
-
- * src/cff/cffload.c (cff_charset_compute_cids): For multiple GID to
- single CID mappings, make the lowest value win.
-
-2009-06-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- ftpatent: Fix a bug by wrong usage of service->table_info().
- http://lists.gnu.org/archive/html/freetype-devel/2008-12/msg00039.html
-
- * include/freetype/internal/services/svsfnt.h: Extend
- FT_SFNT_TableInfoFunc() to take new argument to obtain the offset
- to the specified table.
- * src/sfnt/sfdriver.c (sfnt_table_info): Extend to return the
- table-offset to the caller function.
- * src/base/ftpatent.c (_tt_check_patents_in_table): Use new
- service->table_info().
- * src/base/ftobjs.c (FT_Sfnt_Table_Info): Synchronize to new
- service->table_info().
-
-2009-06-28 Werner Lemberg <wl@gnu.org>
-
- [psaux, cff] Protect against nested `seac' calls.
-
- * include/freetype/internal/psaux.h (T1_Decoder), src/cff/cffgload.h
- (CFF_Decoder): Add `seac' boolean variable.
-
- * src/cff/cffgload.c (cff_operator_seac), src/psaux/t1decode.c
- (t1operator_seac): Use it.
-
-2009-06-28 Werner Lemberg <wl@gnu.org>
-
- Thinko.
-
- * src/psaux/t1decode.c (t1operator_seac)
- [FT_CONFIG_OPTION_INCREMENTAL]: Test for existence of incremental
- interface.
-
-2009-06-28 Werner Lemberg <wl@gnu.org>
-
- * devel/ftoption.h [FT_CONFIG_OPTION_INCREMENTAL]: Define.
-
-2009-06-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Add tools to preprocess the source files for AtariST PureC.
-
- * builds/atari/deflinejoiner.awk: New file to filter C source files
- for broken C preprocessor of PureC compiler.
-
- * builds/atari/gen-purec-patch.sh: New file to generate a patch set
- for PureC, by using deflinejoiner.awk.
-
-2009-06-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Keep existing modules.cfg in the building tree.
-
- * configure: If `configure' is executed outside of the source tree,
- an existing `modules.cfg' file in the build directory should be
- kept, not overwritten by the version in the source tree.
-
-2009-06-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Filter --srcdir= option before invoking builds/unix/configure.
-
- * configure: If builds/unix/configure is invoked with --srcdir
- option, the option should take `builds/unix' directory instead of
- the top source directory. Thus the configure script in the top
- directory should modify the --srcdir= option if
- `builds/unix/configure' is invoked.
-
-2009-06-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Improve configure.raw for cross-building on exe-suffixed systems.
-
- * builds/unix/configure.raw: Fix a bug in sed script to extract
- native suffix for binary executables, patch by Peter Breitenlohner.
- http://lists.gnu.org/archive/html/freetype-devel/2009-04/msg00036.html
-
-2009-06-26 Werner Lemberg <wl@gnu.org>
-
- [truetype] Remove TT_SubGlyphRec.
-
- * src/truetype/ttobjs.h (TT_SubGlyphRec): Removed, unused.
-
-2009-06-26 Werner Lemberg <wl@gnu.org>
-
- * */*: For warning messages, replace FT_ERROR with FT_TRACE0.
-
- FT_ERROR is now used only if a function produces a non-zero `error'
- value.
-
- Formatting, improving and harmonizing debug strings.
-
-2009-06-25 Werner Lemberg <wl@gnu.org>
-
- Provide version information better.
-
- * src/base/ftinit.c (FT_Init_FreeType): Don't set version here
- but...
- * src/base/ftobjs.c (FT_New_Library): Here.
-
-2009-06-22 Werner Lemberg <wl@gnu.org>
-
- Use 16.16 format while parsing Type 1 charstrings.
- This fixes Savannah bug #26867.
-
- Previously, only integers have been used which can lead to serious
- rounding errors.
-
- However, fractional values are only used internally; after the
- charstrings (of either Type 1 or 2) have been processed, the
- resulting coordinates get rounded to integers currently -- before
- applying scaling. This should be fixed; at the same time a new load
- flag should be introduced, to be used in combination with
- FT_LOAD_NO_SCALE, which indicates that font units are returned in
- 16.16 format. Similarly, the incremental interface should be
- extended to allow fractional values for metrics.
-
- * include/freetype/internal/psaux.h (T1_BuilderRec): Remove `shift'
- field.
- * include/freetype/internal/pshints.h (T1_Hints_SetStemFunc,
- T1_Hints_SetStem3Func): Use FT_Fixed for coordinates.
-
- * src/psaux/psobjs.c: Include FT_INTERNAL_CALC_H.
- (t1_build_add_point): Always convert fixed to integer.
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings):
- Use 16.16 format everywhere (except for large integers followed by a
- `div').
- [CAN_HANDLE_NON_INTEGRAL_T1_OPERANDS]: Remove #ifdef and activate
- code unconditionally.
- Add support for random numbers and update remaining code
- accordingly; this should work now.
- (t1operator_seac): Updated.
- * src/psaux/pshrec.c: Include FT_INTERNAL_CALC_H.
- (ps_hints_t1stem3, t1_hints_stem): Updated.
-
- * src/cid/cidgload.c: Include FT_INTERNAL_CALC_H.
- (cid_load_glyph) [FT_CONFIG_OPTION_INCREMENTAL],
- (cid_face_compute_max_advance, cid_slot_load_glyph): Updated.
-
- * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String)
- [FT_CONFIG_OPTION_INCREMENTAL], (T1_Get_Advances, T1_Load_Glyph):
- Updated.
- * src/type1/t1load.c: Include FT_INTERNAL_CALC_H.
- * src/type1/t1objs.c (T1_Face_Init): Updated.
-
-2009-06-21 Werner Lemberg <wl@gnu.org>
-
- * src/pshinter/pshrec.c: Use PSH_Err_Ok.
-
-2009-06-21 Werner Lemberg <wl@gnu.org>
-
- Code beautification.
-
- * src/type1/t1load.c (FT_INT_TO_FIXED): Removed.
- Replace everywhere with INT_TO_FIXED.
- (FT_FIXED_TO_INT): Move to ...
- * include/freetype/internal/ftcalc.h (FIXED_TO_INT): Here.
- Update all users.
-
-2009-06-20 Werner Lemberg <wl@gnu.org>
-
- Remove unused variables.
-
- * include/freetype/internal/psaux.h (T1_BuilderRec),
- src/cff/cffgload.h (CFF_Builder): Remove `last'.
- Update all users.
-
-2009-06-20 Werner Lemberg <wl@gnu.org>
-
- [psaux] Check large integers while parsing charstrings.
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Large
- integers must be followed by a `div' operator.
-
-2009-06-20 Werner Lemberg <wl@gnu.org>
-
- [cff] Revert last change.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings): Do it.
- Next time, don't confuse Type 2 charstring opcodes with TOP DICT
- values...
-
-2009-06-20 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/aflatin.c (af_latin_metrics_check_digits): Fix
- compiler warning.
-
-2009-06-20 Werner Lemberg <wl@gnu.org>
-
- * builds/compiler/gcc.mk (CFLAGS): Use -O3, not -O6.
-
-2009-06-19 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix handling of reserved byte 0xFF.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings): Abort if byte
- 0xFF is encountered.
-
-2009-06-19 Werner Lemberg <wl@gnu.org>
-
- Improve debug messages for Type1 charstrings.
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Emit newlines
- after instructions.
- Prettify output.
-
-2009-06-19 Werner Lemberg <wl@gnu.org>
-
- More ftgray fixes for FT_STATIC_RASTER.
- Problems reported by suyu@cooee.cn.
-
- * src/smooth/ftgrays.c (gray_move_to, gray_raster_render): Use
- RAS_VAR.
-
-2009-06-18 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2009-06-18 Werner Lemberg <wl@gnu.org>
-
- Fix B/W rasterization of subglyphs with different drop-out modes.
-
- Normally, the SCANMODE instruction (if present) to set the drop-out
- mode in a TrueType font is located in the `prep' table only and thus
- valid for all glyphs. However, there are fonts like `pala.ttf'
- which additionally contain this instruction in the hinting code of
- some glyphs (but not all). As a result it can happen that a
- composite glyph needs multiple drop-out modes for its subglyphs
- since the rendering state gets reset for each subglyph.
-
- FreeType collects the hinted outlines from all subglyphs, then it
- sends the data to the rasterizer. It also sends the drop-out mode
- -- after hinting has been applied -- and here is the error: It sends
- the drop-out mode of the last subglyph only; drop-out modes of all
- other subglyphs are lost.
-
- This patch fixes the problem; it adds a second, alternative
- mechanism to pass the drop-out mode: For each contour, the
- rasterizer now checks the first `tags' array element. If bit 2 is
- set, bits 5-7 contain the contour's drop-out mode, overriding the
- global drop-out mode.
-
- * include/freetype/ftimage.h (FT_CURVE_TAG_HAS_SCANMODE): New macro.
-
- * src/truetype/ttgload.c (TT_Hint_Glyph): Store drop-out mode in
- `tags[0]'.
-
- * src/raster/ftraster.c (Flow_Up, Overshoot_Top, Overshoot_Bottom):
- Use bits 3-5 instead of 0-2.
- (New_Profile): Set the drop-out mode in the profile's `flags' field.
- (Decompose_Curve): Check `tags[0]' and set `dropOutControl' if
- necessary.
- (Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
- Horizontal_Gray_Sweep_Drop, Draw_Sweep): Use the profile's drop-out
- mode.
-
-2009-06-16 Werner Lemberg <wl@gnu.org>
-
- Improve scan conversion rules 4 and 6.
-
- Two new constraints are introduced to better identify a `stub' -- a
- concept which is only vaguely described in the OpenType
- specification. The old code was too rigorous and suppressed more
- pixel than it should.
-
- . The intersection of the two profiles with the scanline is less
- than a half pixel. Code related to this was already present in
- the sources but has been commented out.
-
- . The endpoint of the original contour forming a profile has a
- distance (`overshoot') less than half a pixel to the scanline.
-
- Note that the two additional conditions fix almost all differences
- to the Windows rasterizer, but some problematic cases remain.
-
- * src/raster/ftraster.c (Overshoot_Top, Overshoot_Bottom): New
- macros for the `flags' field in the `TProfile' structure.
- (IS_BOTTOM_OVERSHOOT, IS_TOP_OVERSHOOT): New macros.
- (New_Profile, End_Profile): Pass overshoot flag as an argument and
- set it accordingly.
- Update callers.
- (Vertical_Sweep_Drop, Horizontal_Sweep_Drop): Implement the two new
- constraints.
-
-2009-06-11 Werner Lemberg <wl@gnu.org>
-
- Increase precision for B/W rasterizer.
-
- * src/raster/ftraster.c (Set_High_Precision): Add two more bits to
- the precision. This corrects rendering of some small glyphs, for
- example, glyph `xi' in verdana.ttf at 13 ppem. Testing with ftbench
- on my GNU/Linux box I don't see a performance degradation.
-
-2009-06-08 Michael Zucchi <notzed@gmail.com>
-
- Handle FT_STROKER_LINECAP_BUTT.
- This fixes Savannah bug #26757.
-
- * src/base/ftstroke.c (ft_stroker_cap): Implement it.
-
-2009-06-07 Harald Fernengel <harry@kdevelop.org>
-
- Fix some potential out-of-memory crashes.
-
- * src/base/ftobjs.c (ft_glyphslot_done): Check `slot->internal'.
- * src/base/ftstream.c (FT_Stream_ReleaseFrame): Check `stream'.
- * src/truetype/ttinterp.c (TT_New_Context): Avoid double-free of
- `exec' in case of failure.
-
-2009-06-07 Werner Lemberg <wl@gnu.org>
-
- Simplify math.
- Suggested by Alexei Podtelezhnikov <apodtele@gmail.com>.
-
- * src/raster/ftraster.c (Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
- Horizontal_Gray_Sweep_Drop): Do it.
-
-2009-06-04 Werner Lemberg <wl@gnu.org>
-
- Preparation for fixing scan conversion rules 4 and 6.
-
- * src/raster/ftraster.c (TFlow): Replace enumeration with...
- (Flow_Up): This macro.
- (TProfile): Replace `flow' member with `flags' bit field.
- Update all affected code.
-
-2009-05-29 James Cloos <cloos@jhcloos.com>
-
- Enable autohinting for glyphs rotated by multiples of 90°.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Alter check for permitted
- matrices to allow rotations by multiples of 90°, not only unrotated,
- possibly slanted matrices.
-
-2009-05-28 Werner Lemberg <wl@gnu.org>
-
- Remove compiler warning.
- Reported by Krzysztof Kowalczyk <kkowalczyk@gmail.com>.
-
- * src/autofit/aflatin2.c (af_latin2_hint_edges): Move declaration of
- `n_edges' into `#if' block.
-
-2009-05-28 Werner Lemberg <wl@gnu.org>
-
- Make compilation work with FT_CONFIG_OPTION_USE_ZLIB not defined.
- Reported by Krzysztof Kowalczyk <kkowalczyk@gmail.com>.
-
- * src/pcf/pcfdrivr.c (PCF_Face_Init) [!FT_CONFIG_OPTION_USE_ZLIB]:
- Make it work.
- Simplify #ifdef logic.
-
-2009-05-22 Werner Lemberg <wl@gnu.org>
-
- Improve b/w rasterizer.
- Problem reported by Krzysztof Kotlenga <pocek@users.sf.net>.
-
- * src/raster/raster.c (Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
- Horizontal_Gray_Sweep_Drop): For smart drop-out mode, if
- intersections are equally distant relative to next pixel center,
- select the left pixel, not the right one.
-
-2009-05-19 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #26600.
-
- * src/type42/t42parse.c (t42_load_keyword): Handle
- T1_FIELD_LOCATION_FONT_EXTRA.
-
-2009-04-30 Werner Lemberg <wl@gnu.org>
-
- Document recent changes to ftview.
-
- * docs/CHANGES: Do it.
-
-2009-04-27 Werner Lemberg <wl@gnu.org>
-
- autohinter: Don't change digit widths if all widths are the same.
- This fixes FreeDesktop bug #21197.
-
- * src/autofit/afglobal.c (AF_DIGIT): New macro.
- (af_face_globals_compute_script_coverage): Mark ASCII digits in
- `glyph_scripts' array.
- (af_face_globals_get_metrics): Updated.
- (af_face_globals_is_digit): New function.
- * src/autofit/afglobal.h: Updated.
- (AF_ScriptMetricsRec): Add `digits_have_same_width' flag.
-
- * src/autofit/aflatin.c: Include FT_ADVANCES_H.
- (af_latin_metrics_check_digits): New function.
- (af_latin_metrics_init): Use it.
- * src/autofit/aflatin.h: Updated.
- * src/autofit/afcjk.c (af_cjk_metrics_init): Updated.
-
- * src/autofit/aflatin2.c: Similar changes as with aflatin.c.
-
- * src/autofit/afloader.c (af_loader_load_g): Test digit width.
-
- * docs/CHANGES: Document it.
-
-2009-04-26 Werner Lemberg <wl@gnu.org>
-
- Make ftgrays compile with _STANDALONE_ and FT_STATIC_RASTER again.
- Problems reported by suyu@cooee.cn.
-
- * src/smooth/ftgrays.c (FT_DEFINE_OUTLINE_FUNCS,
- FT_DEFINE_RASTER_FUNCS) [_STANDALONE_]: Define.
- [!_STANDALONE_]: Include ftspic.h only here.
- (ras): Define/declare after definition of `TWorker'.
- Use `RAS_VAR_' where necessary.
-
-2009-04-21 Karl Berry <karl@gnu.org>
-
- Fix AC_CHECK_FT2.
-
- * builds/unix/freetype2.m4: Only check PATH for freetype-config if
- we did not already find it from a prefix option.
-
-2009-04-05 Oran Agra <oran@monfort.co.il>
-
- Add #error to modules and files that do not support PIC yet.
-
- When FT_CONFIG_OPTION_PIC is defined the following files will
- create #error:
- * src/bdf/bdfdrivr.h
- * src/cache/ftcmanag.c
- * src/cid/cidriver.h
- * src/gxvalid/gxvmod.h
- * src/gzip/ftgzip.c
- * src/lzw/ftlzw.c
- * src/otvalid/otvmod.h
- * src/pcf/pcfdrivr.h
- * src/pfr/pfrdrivr.h
- * src/psaux/psauxmod.h
- * src/type1/t1driver.h
- * src/type42/t42drivr.h
- * src/winfonts/winfnt.h
-
-2009-04-05 Oran Agra <oran@monfort.co.il>
-
- Position Independent Code (PIC) support in autofit module.
-
- * include/freetype/internal/autohint.h add macros to init
- instances of FT_AutoHinter_ServiceRec.
-
- * src/autofit/afmodule.h declare autofit_module_class
- using macros from ftmodapi.h,
- when FT_CONFIG_OPTION_PIC is defined create and destroy
- functions will be declared.
- * src/autofit/afmodule.c when FT_CONFIG_OPTION_PIC is defined
- af_autofitter_service and autofit_module_class structs
- will have functions to init or create and destroy them
- instead of being allocated in the global scope.
- And macros will be used from afpic.h in order to access them.
-
- * src/autofit/aftypes.h add macros to init and declare
- instances of AF_ScriptClassRec.
-
- * src/autofit/afcjk.h declare af_cjk_script_class
- using macros from aftypes.h,
- when FT_CONFIG_OPTION_PIC is defined init function will be declared.
- * src/autofit/afcjk.c when FT_CONFIG_OPTION_PIC is defined
- af_cjk_script_class struct will have function to init it instead of
- being allocated in the global scope.
-
- * src/autofit/afdummy.h declare af_dummy_script_class
- using macros from aftypes.h,
- when FT_CONFIG_OPTION_PIC is defined init function will be declared.
- * src/autofit/afdummy.c when FT_CONFIG_OPTION_PIC is defined
- af_dummy_script_class struct will have function to init it instead of
- being allocated in the global scope.
-
- * src/autofit/afindic.h declare af_indic_script_class
- using macros from aftypes.h,
- when FT_CONFIG_OPTION_PIC is defined init function will be declared.
- * src/autofit/afindic.c when FT_CONFIG_OPTION_PIC is defined
- af_indic_script_class struct will have function to init it instead of
- being allocated in the global scope.
-
- * src/autofit/aflatin.h declare af_latin_script_class
- using macros from aftypes.h,
- when FT_CONFIG_OPTION_PIC is defined init function will be declared.
- * src/autofit/aflatin.c when FT_CONFIG_OPTION_PIC is defined
- af_latin_script_class struct will have function to init it instead of
- being allocated in the global scope.
- Change af_latin_blue_chars to be PIC-compatible by being a two
- dimensional array rather than array of pointers.
-
-
- * src/autofit/aflatin2.h declare af_latin2_script_class
- using macros from aftypes.h,
- when FT_CONFIG_OPTION_PIC is defined init function will be declared.
- * src/autofit/aflatin2.c when FT_CONFIG_OPTION_PIC is defined
- af_latin2_script_class struct will have function to init it instead of
- being allocated in the global scope.
- Change af_latin2_blue_chars to be PIC-compatible by being a two
- dimensional array rather than array of pointers.
-
- * src/autofit/afglobal.c when FT_CONFIG_OPTION_PIC is defined
- af_script_classes array initialization was moved to afpic.c and
- is later referred using macros defined in afpic.h.
-
- New Files:
- * src/autofit/afpic.h declare struct to hold PIC globals for autofit
- module and macros to access them.
- * src/autofit/afpic.c implement functions to allocate, destroy and
- initialize PIC globals for autofit module.
-
- * src/autofit/autofit.c add new file to build: afpic.c.
- * src/autofit/jamfile add new files to FT2_MULTI build: afpic.c.
-
-2009-04-05 Oran Agra <oran@monfort.co.il>
-
- Position Independent Code (PIC) support in pshinter module.
-
- * include/freetype/internal/pshints.h add macros to init
- instances of PSHinter_Interface.
-
- * src/pshinter/pshmod.h declare pshinter_module_class
- using macros from ftmodapi.h,
- when FT_CONFIG_OPTION_PIC is defined create and destroy
- functions will be declared.
- * src/pshinter/pshmod.c when FT_CONFIG_OPTION_PIC is defined
- pshinter_interface and pshinter_module_class structs
- will have functions to init or create and destroy them
- instead of being allocated in the global scope.
- And macros will be used from pshpic.h in order to access them.
-
- New Files:
- * src/pshinter/pshpic.h declare struct to hold PIC globals for pshinter
- module and macros to access them.
- * src/pshinter/pshpic.c implement functions to allocate, destroy and
- initialize PIC globals for pshinter module.
-
- * src/pshinter/pshinter.c add new file to build: pshpic.c.
- * src/pshinter/jamfile add new files to FT2_MULTI build: pshpic.c.
-
-2009-04-05 Oran Agra <oran@monfort.co.il>
-
- Position Independent Code (PIC) support in psnames module.
-
- * include/freetype/internal/services/svpscmap.h add macros to init
- instances of FT_Service_PsCMapsRec.
-
- * src/psnames/psmodule.h declare psnames_module_class
- using macros from ftmodapi.h,
- when FT_CONFIG_OPTION_PIC is defined create and destroy
- functions will be declared.
- * src/psnames/psmodule.c when FT_CONFIG_OPTION_PIC is defined
- pscmaps_interface and pscmaps_services structs
- and psnames_module_class array
- will have functions to init or create and destroy them
- instead of being allocated in the global scope.
- And macros will be used from pspic.h in order to access them.
-
- New Files:
- * src/psnames/pspic.h declare struct to hold PIC globals for psnames
- module and macros to access them.
- * src/psnames/pspic.c implement functions to allocate, destroy and
- initialize PIC globals for psnames module.
-
- * src/psnames/psnames.c add new file to build: pspic.c.
- * src/psnames/jamfile add new files to FT2_MULTI build: pspic.c.
-
-2009-04-05 Oran Agra <oran@monfort.co.il>
-
- Position Independent Code (PIC) support in raster renderer.
-
- * src/raster/ftrend1.h declare ft_raster1_renderer_class
- and ft_raster5_renderer_class
- using macros from ftrender.h,
- when FT_CONFIG_OPTION_PIC is defined create and destroy
- functions will be declared.
- * src/smooth/ftrend1.c when FT_CONFIG_OPTION_PIC is defined
- ft_raster1_renderer_class and ft_raster5_renderer_class structs
- will have functions to init or create and destroy them
- instead of being allocated in the global scope.
- Macros will be used from rastpic.h in order to access
- ft_standard_raster from the pic_container (allocated in ftraster.c).
- In ft_raster1_render when PIC is enabled, the last letter of
- module_name is used to verify the renderer class rather than the
- class pointer.
-
- * src/raster/ftraster.c when FT_CONFIG_OPTION_PIC is defined
- ft_standard_raster struct will have function to init it
- instead of being allocated in the global scope.
-
- New Files:
- * src/raster/rastpic.h declare struct to hold PIC globals for raster
- renderer and macros to access them.
- * src/raster/rastpic.c implement functions to allocate, destroy and
- initialize PIC globals for raster renderer.
-
- * src/raster/raster.c add new file to build: rastpic.c.
- * src/raster/jamfile add new files to FT2_MULTI build: rastpic.c.
-
-2009-04-05 Oran Agra <oran@monfort.co.il>
-
- Position Independent Code (PIC) support in smooth renderer.
-
- * src/smooth/ftsmooth.h declare ft_smooth_renderer_class,
- ft_smooth_lcd_renderer_class and ft_smooth_lcdv_renderer_class
- using macros from ftrender.h,
- when FT_CONFIG_OPTION_PIC is defined create and destroy
- functions will be declared.
- * src/smooth/ftsmooth.c when FT_CONFIG_OPTION_PIC is defined
- the following structs:
- ft_smooth_renderer_class, ft_smooth_lcd_renderer_class
- and ft_smooth_lcdv_renderer_class
- will have functions to init or create and destroy them
- instead of being allocated in the global scope.
- And macros will be used from ftspic.h in order to access
- ft_grays_raster from the pic_container (allocated in ftgrays.c).
-
- * src/smooth/ftgrays.h include FT_CONFIG_CONFIG_H
- * src/smooth/ftgrays.c when FT_CONFIG_OPTION_PIC is NOT defined
- func_interface was moved from gray_convert_glyph_inner function
- to the global scope.
- When FT_CONFIG_OPTION_PIC is defined
- func_interface and ft_grays_raster structs
- will have functions to init them
- instead of being allocated in the global scope.
- And func_interface will be allocated on the stack of
- gray_convert_glyph_inner.
-
- New Files:
- * src/smooth/ftspic.h declare struct to hold PIC globals for smooth
- renderer and macros to access them.
- * src/smooth/ftspic.c implement functions to allocate, destroy and
- initialize PIC globals for smooth renderer.
-
- * src/smooth/smooth.c add new file to build: ftspic.c.
- * src/smooth/jamfile add new files to FT2_MULTI build: ftspic.c.
-
-2009-04-05 Oran Agra <oran@monfort.co.il>
-
- Position Independent Code (PIC) support in cff driver.
-
- * include/freetype/internal/services/svcid.h add macros to init
- instances of FT_Service_CIDRec.
- * include/freetype/internal/services/svpsinfo.h add macros to init
- instances of FT_Service_PsInfoRec.
-
- * src/cff/cffcmap.h declare cff_cmap_encoding_class_rec
- and cff_cmap_unicode_class_rec using macros from
- ftobjs.h, when FT_CONFIG_OPTION_PIC is defined create and destroy
- functions will be declared.
- * src/cff/cffcmap.c when FT_CONFIG_OPTION_PIC is defined
- the following structs:
- cff_cmap_encoding_class_rec and cff_cmap_unicode_class_rec
- will have functions to init or create and destroy them
- instead of being allocated in the global scope.
-
- * src/cff/cffdrivr.h declare cff_driver_class using macros from
- ftdriver.h, when FT_CONFIG_OPTION_PIC is defined create and destroy
- functions will be declared.
- * src/cff/cffdrivr.c when FT_CONFIG_OPTION_PIC is defined
- the following structs:
- cff_service_glyph_dict, cff_service_ps_info, cff_service_ps_name
- cff_service_get_cmap_info, cff_service_cid_info, cff_driver_class,
- and cff_services array
- will have functions to init or create and destroy them
- instead of being allocated in the global scope.
- And macros will be used from cffpic.h in order to access them
- from the pic_container.
- Use macros from cffpic.h in order to access the
- structs allocated in cffcmap.c
-
- * src/cff/cffobjs.c Use macros from cffpic.h in order to access the
- structs allocated in cffcmap.c
-
- * src/cff/parser.c when FT_CONFIG_OPTION_PIC is defined
- implement functions to create and destroy cff_field_handlers array
- instead of being allocated in the global scope.
- And macros will be used from cffpic.h in order to access it
- from the pic_container.
-
- New Files:
- * src/cff/cffpic.h declare struct to hold PIC globals for cff
- driver and macros to access them.
- * src/cff/cffpic.c implement functions to allocate, destroy and
- initialize PIC globals for cff driver.
-
- * src/cff/cff.c add new file to build: cffpic.c.
- * src/cff/jamfile add new files to FT2_MULTI build: cffpic.c.
-
-2009-04-05 Oran Agra <oran@monfort.co.il>
-
- Position Independent Code (PIC) support in sfnt driver.
-
- * include/freetype/internal/services/svbdf.h add macros to init
- instances of FT_Service_BDFRec.
- * include/freetype/internal/services/svgldict.h add macros to init
- instances of FT_Service_GlyphDictRec.
- * include/freetype/internal/services/svpostnm.h add macros to init
- instances of FT_Service_PsFontNameRec.
- * include/freetype/internal/services/svsfnt.h add macros to init
- instances of FT_Service_SFNT_TableRec.
- * include/freetype/internal/services/svttcmap.h add macros to init
- instances of FT_Service_TTCMapsRec.
- * include/freetype/internal/sfnt.h add macros to init
- instances of SFNT_Interface.
-
- * src/sfnt/sfdriver.h declare sfnt_module_class using macros from
- ftmodapi.h, when FT_CONFIG_OPTION_PIC is defined create and destroy
- functions will be declared.
- * src/sfnt/sfdriver.c when FT_CONFIG_OPTION_PIC is defined
- the following structs:
- sfnt_service_sfnt_table, sfnt_service_glyph_dict, sfnt_service_ps_name
- tt_service_get_cmap_info, sfnt_service_bdf, sfnt_interface,
- sfnt_module_class, and sfnt_services array
- will have functions to init or create and destroy them
- instead of being allocated in the global scope.
- And macros will be used from sfntpic.h in order to access them
- from the pic_container.
-
- * src/sfnt/ttcmap.h add macros to init
- instances of TT_CMap_ClassRec.
- * src/sfnt/ttcmap.c when FT_CONFIG_OPTION_PIC is defined
- the following structs:
- tt_cmap0_class_rec, tt_cmap2_class_rec, tt_cmap4_class_rec
- tt_cmap6_class_rec, tt_cmap8_class_rec, tt_cmap10_class_rec,
- tt_cmap12_class_rec, tt_cmap14_class_rec and tt_cmap_classes array
- will have functions to init or create and destroy them
- instead of being allocated in the global scope.
- And macros will be used from sfntpic.h in order to access them
- from the pic_container.
- The content of tt_cmap_classes is now described in the
- new file 'ttcmapc.h'.
-
- New Files:
- * src/sfnt/sfntpic.h declare struct to hold PIC globals for sfnt
- driver and macros to access them.
- * src/sfnt/sfntpic.c implement functions to allocate, destroy and
- initialize PIC globals for sfnt driver.
- * src/sfnt/ttcmapc.h describing the content of
- tt_cmap_classes allocated in ttcmap.c
-
- * src/sfnt/sfnt.c add new file to build: sfntpic.c.
- * src/sfnt/jamfile add new files to FT2_MULTI build: sfntpic.c.
-
-2009-04-05 Oran Agra <oran@monfort.co.il>
-
- Position Independent Code (PIC) support in truetype driver.
-
- * include/freetype/internal/services/svmm.h add macros to init
- instances of FT_Service_MultiMastersRec.
- * include/freetype/internal/services/svttglyf.h add macros to init
- instances of FT_Service_TTGlyfRec.
-
- * src/truetype/ttdriver.h declare tt_driver_class using macros from
- ftdriver.h, when FT_CONFIG_OPTION_PIC is defined create and destroy
- functions will be declared.
- * src/truetype/ttdriver.c when FT_CONFIG_OPTION_PIC is defined
- the following structs:
- tt_service_gx_multi_masters, tt_service_truetype_glyf, tt_driver_class
- and tt_services array,
- will have functions to init or create and destroy them
- instead of being allocated in the global scope.
- And macros will be used from ttpic.h in order to access them
- from the pic_container.
- * src/truetype/ttobjs.c change trick_names array to be
- PIC-compatible by being a two dimensional array rather than array
- of pointers.
-
- New Files:
- * src/truetype/ttpic.h declare struct to hold PIC globals for truetype
- driver and macros to access them.
- * src/truetype/ttpic.c implement functions to allocate, destroy and
- initialize PIC globals for truetype driver.
-
- * src/truetype/truetype.c add new file to build: ttpic.c.
- * src/truetype/jamfile add new files to FT2_MULTI build: ttpic.c.
-
-2009-04-05 Oran Agra <oran@monfort.co.il>
-
- Position Independent Code (PIC) support and infrastructure in base.
-
- * include/freetype/config/ftoption.h add FT_CONFIG_OPTION_PIC
- * include/freetype/internal/ftobjs.h Add pic_container member to
- FT_LibraryRec.
- Add macros to declare and init instances of FT_CMap_ClassRec.
- Add macros to init instances of FT_Outline_Funcs and FT_Raster_Funcs.
- Add macros to declare, allocate and initialize modules
- (FT_Module_Class).
- Add macros to declare, allocate and initialize renderers
- (FT_Renderer_Class).
- Add macro to init instances of FT_Glyph_Class.
- Add macros to declare, allocate and initialize drivers
- (FT_Driver_ClassRec).
- * include/freetype/internal/ftpic.h new file to declare the
- FT_PIC_Container struct and the functions to allocate and destroy it.
- * include/freetype/internal/ftserv.h add macros to allocate and
- destroy arrays of FT_ServiceDescRec.
- * include/freetype/internal/internal.h define macro to include
- ftpic.h.
-
- New Files:
- * src/base/ftpic.c implement functions to allocate and destroy the
- global pic_container.
- * src/base/basepic.h declare struct to hold PIC globals for base and
- macros to access them.
- * src/base/basepic.c implement functions to allocate, destroy and
- initialize PIC globals for base.
-
- * src/base/ftinit.c when FT_CONFIG_OPTION_PIC is defined implement
- functions that allocate and destroy ft_default_modules according to
- FT_CONFIG_MODULES_H in the pic_container instead of the global scope
- and use macro from basepic.h to access it.
- * src/base/ftobjs.c add calls to the functions that allocate and
- destroy the global pic_container when the library is created and
- destroyed.
-
- * src/base/jamfile add new files to FT2_MULTI build:
- ftpic.c and basepic.c.
- * src/base/ftbase.c add new files to build:
- ftpic.c and basepic.c.
-
- * src/base/ftglyph.c when FT_CONFIG_OPTION_PIC is defined
- ft_bitmap_glyph_class and ft_outline_glyph_class will be allocated
- in the pic_container instead of the global scope and use macros from
- basepic.h to access them.
- * src/base/ftbbox.c allocate bbox_interface struct on the stack
- instead of the global scope when FT_CONFIG_OPTION_PIC is defined.
- * src/base/ftstroke.c access ft_outline_glyph_class allocated in
- ftglyph.c via macros from basepic.h
-
-2009-04-05 Oran Agra <oran@monfort.co.il>
-
- Preparing changes in cff parser later needed for PIC version.
-
- * src/cff/cffload.c, src/cff/cffload.h, src/cff/cffobjs.c,
- src/cff/cffparse.c, src/cff/cffparse.h: Add library pointer to
- 'CFF_ParserRec' set by `cff_parser_init'.
- Route library pointer from 'cff_face_init' to 'cff_subfont_load'
- for `cff_parser_init'.
-
- * src/cff/cffparse.c (CFF_Field_Handler): Move it to...
- * src/cff/cffparse.h: This file, to be used by other C files.
-
-2009-04-05 Oran Agra <oran@monfort.co.il>
-
- Minor change in ftstroke.c.
-
- * src/base/ftstroke.c (FT_StrokerRec): Replace `memory' member with
- `library' needed for PIC version.
- Update all callers.
-
-2009-04-04 Werner Lemberg <wl@gnu.org>
-
- ftnames.c -> ftsnames.c
-
- * src/base/ftnames.c: Rename to...
- * src/base/ftsnames.c: This.
- * src/base/Jamfile, src/base/rules.mk, src/base/ftbase.c: Updated.
-
-2009-04-04 Werner Lemberg <wl@gnu.org>
-
- Add support for cmap type 13.
-
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (TT_CONFIG_CMAP_FORMAT_13): New macro.
-
- * src/sfnt/ttcmap.c (TT_CMap13Rec, tt_cmap13_init,
- tt_cmap13_validate, tt_cmap13_char_index, tt_cmap13_char_next,
- tt_cmap13_get_info, tt_cmap13_char_map_def_binary,
- tt_cmap14_class_rec): New functions and structures for cmap 13
- support.
- (tt_cmap_classes): Register tt_cmap13_class_rec.
-
- * docs/CHANGES: Mention cmap 13 support.
-
-2009-04-01 Werner Lemberg <wl@gnu.org>
-
- Ignore empty contours in CFF glyphs.
-
- Problem reported by Albert Astals Cid <aacid@kde.org>.
-
- * src/cff/cffgload.c (cff_builder_close_contour): Synchronize with
- t1_builder_close_contour.
-
-2009-03-21 Werner Lemberg <wl@gnu.org>
-
- Another redundant header inclusion.
-
- * src/truetype/ttgxvar.c: Fix Ghostscript Coverity issue #4041.
-
-2009-03-21 Werner Lemberg <wl@gnu.org>
-
- Remove redundant header inclusions.
-
- This covers many Ghostscript Coverity issues.
-
- * src/*: Do it.
-
-2009-03-21 Werner Lemberg <wl@gnu.org>
-
- Fix Ghostscript Coverity issue #3904.
-
- * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Protect against
- invalid values of `runcnt'.
-
-2009-03-20 Werner Lemberg <wl@gnu.org>
-
- Fix `make multi' run.
-
- * src/smooth/ftsmooth.h: Include FT_INTERNAL_DEBUG_H.
-
-2009-03-20 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #25923.
-
- * src/cache/ftccmap.c (FTC_CMAP_HASH): Fix typo.
-
-2009-03-20 Werner Lemberg <wl@gnu.org>
-
- Protect against too large glyphs.
-
- Problem reported by Tavis Ormandy <taviso@google.com>.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Don't allow
- `pitch' or `height' to be larger than 0xFFFF.
-
-2009-03-20 Werner Lemberg <wl@gnu.org>
- Tavis Ormandy <taviso@google.com>
-
- Fix validation for various cmap table formats.
-
- * src/sfnt/ttcmap.c (tt_cmap8_validate, tt_cmap10_validate,
- tt_cmap12_validate): Check `length' correctly.
- (tt_cmap_14_validate): Check `length' and `numMappings' correctly.
-
-2009-03-20 Werner Lemberg <wl@gnu.org>
-
- Protect against malformed compressed data.
-
- * src/lzw/ftzopen.c (ft_lzwstate_io): Test whether `state->prefix' is
- zero.
-
-2009-03-20 Werner Lemberg <wl@gnu.org>
-
- Protect against invalid SID values in CFFs.
-
- Problem reported by Tavis Ormandy <taviso@google.com>.
-
- * src/cff/cffload.c (cff_charset_load): Reject SID values larger
- than 64999.
-
-2009-03-19 Vincent Richomme <richom.v@free.fr>
-
- Update WinCE Visual C project files.
-
- * builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2008-ce/freetype.vcproj: Add missing base extension
- files.
-
-2009-03-19 Werner Lemberg <wl@gnu.org>
-
- Remove unused Win32 code.
-
- * builds/wince/ftdebug.c: Remove code guarded with `!_WIN32_WCE'.
- Since Win32 is handled separately this is no longer needed.
-
-2009-03-19 Vincent Richomme <richom.v@free.fr>
-
- Make `gzip' module compile on WinCE.
-
- * src/gzip/zconf.h [_WIN32_WCE]: Define NO_ERRNO_H.
-
-2009-03-19 Werner Lemberg <wl@gnu.org>
-
- Remove unused WinCE code.
-
- * builds/win32/ftdebug.c: Remove code guarded with `_WIN32_WCE'.
- Since WinCE is handled separately this is no longer needed.
-
-2009-03-16 Werner Lemberg <wl@gnu.org>
-
- docmaker: Don't ignore single-line code blocks.
-
- * src/tools/docmaker/content.py (DocBlock::_init__): Fix change from
- 2009-01-31.
-
-2009-03-15 Steve Langasek <steve.langasek@canonical.com>
-
- Use __asm__ for declaring assembly instead of asm.
-
- * builds/unix/ftconfig.in (FT_MulFix_arm): Use __asm__ instead of
- asm on arm, fixing a build failure on armel with -pedantic.
-
-2009-03-14 Werner Lemberg <wl@gnu.org>
-
- Fix valgrind warning.
-
- * src/sfnt/ttsbit0.c (tt_sbit_decoder_load_bit_aligned): Don't read
- past the end of the frame.
-
-2009-03-12 Werner Lemberg <wl@gnu.org>
-
- * Version 2.3.9 released.
- =========================
-
-
- Tag sources with `VER-2-3-9'.
-
-2009-03-12 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/freetype2.in: Move @FT2_EXTRA_LIBS@ to `Libs.private'.
-
-2009-03-12 Werner Lemberg <wl@gnu.org>
-
- Fix some FreeType Coverity issues as reported for Ghostscript.
-
- * src/base/ftobjs.c (FT_New_Face, FT_New_Memory_Face): Initialize
- `args.stream' (#3874, #3875).
- (open_face_PS_from_sfnt_stream): Improve error management (#3786).
- * src/base/ftmm.c (ft_face_get_mm_service): Fix check of `aservice'
- (#3870).
- * src/base/ftstroke.c (ft_stroke_border_get_counts): Remove dead
- code (#3790).
- * src/base/ftrfork.c (raccess_guess_apple_generic): Check error
- value of `FT_Stream_Skip' (#3784).
-
- * src/type1/t1gload.c (T1_Load_Glyph): Check `size' before accessing
- it (#3872)
-
- * src/pcf/pcfdrivr.c (PCF_Glyph_Load): Check `face' before accessing
- it (#3871).
- * src/pcf/pcfread.c (pcf_get_metrics): Handle return value of
- `pcf_get_metric' (#3789, #3782).
- (pcf_get_properties): Use FT_STREAM_SKIP (#3783).
-
- * src/cache/ftcmanag.c (FTC_Manager_RegisterCache): Fix check of
- `acache' (#3797)
-
- * src/cff/cffdrivr.c (cff_ps_get_font_info): Fix check of `cff'
- (#3796).
- * src/cff/cffgload.c (cff_decoder_prepare): Check `size' (#3795).
- * src/cff/cffload.c (cff_index_get_pointers): Add comment (#3794).
-
- * src/bdf/bdflib.c (_bdf_add_property): Check `fp->value.atom'
- (#3793).
- (_bdf_parse_start): Add comment (#3792).
-
- * src/raster/ftraster.c (Finalize_Profile_Table): Check
- `ras.fProfile' (#3791).
-
- * src/sfnt/ttsbit.c (Load_SBit_Image): Use FT_STREAM_SKIP (#3785).
-
- * src/gzip/ftgzip.c (ft_gzip_get_uncompressed_size): Properly ignore
- seek error (#3781).
-
-2009-03-11 Michael Toftdal <toftdal@gmail.com>
-
- Extend CID service functions to handle CID-keyed CFFs as CID fonts.
-
- * include/freetype/ftcid.h (FT_Get_CID_Is_Internally_CID_keyed,
- FT_Get_CID_From_Glyph_Index): New functions.
-
- * include/freetype/internal/services/svcid.h
- (FT_CID_GetIsInternallyCIDKeyedFunc,
- FT_CID_GetCIDFromGlyphIndexFunc): New function typedefs.
- (CID Service): Use them.
-
- * src/base/ftcid.c: Include FT_CID_H.
- (FT_Get_CID_Is_Internally_CID_keyed, FT_Get_CID_From_Glyph_Index):
- New functions.
-
- * src/cff/cffdrivr.c (cff_get_is_cid, cff_get_cid_from_glyph_index):
- New functions.
- (cff_service_cid_info): Add them.
- * src/cff/cffload.c (cff_font_load): Don't free `font->charset.sids'
- -- it is needed for access as a CID-keyed font. It gets deleted
- later on.
-
- * src/cid/cidriver.c (cid_get_is_cid, cid_get_cid_from_glyph_index):
- New functions.
- (cid_service_cid_info): Add them.
-
- * docs/CHANGES: Updated.
-
-2009-03-11 Bram Tassyns <bramt@enfocus.be>
-
- Fix Savannah bug #25597.
-
- * src/cff/cffparse.c (cff_parse_real): Don't allow fraction_length
- to become larger than 9.
-
-2009-03-11 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #25814.
-
- * builds/unix/freetype2.in: As suggested in the bug report, move
- @LIBZ@ to `Libs.private'.
-
-2009-03-11 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #25781.
- We now simply check for a valid `offset', no longer handling `delta
- = 1' specially.
-
- * src/sfnt/ttcmap.c (tt_cmap4_validate): Don't check `delta' for
- last segment.
- (tt_cmap4_set_range, tt_cmap4_char_map_linear,
- tt_cmap4_char_map_binary): Check offset.
-
-2009-03-11 Werner Lemberg <wl@gnu.org>
-
- * src/base/Jamfile: Fix handling of ftadvanc.c.
- Reported by Oran Agra <oran@monfort.co.il>.
-
-2009-03-10 Vincent Richomme <richom.v@free.fr>
-
- Restructure Win32 and Wince compiler support.
-
- * src/builds/win32: Remove files for WinCE.
- Move VC 2005 support to a separate directory.
- Add directory for VC 2008 support.
-
- * src/builds/wince: New directory hierarchy for WinCE compilers
- (VC 2005 and VC 2008).
-
-2009-03-09 Werner Lemberg <wl@gnu.org>
-
- More preparations for 2.3.9 release.
-
- * docs/CHANGES: Updated.
-
- * Jamfile, README: s/2.3.8/2.3.9/, s/238/239/.
-
-2009-03-09 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/rules.mk (SFNT_DRV_H): Add ttsbit0.c.
-
-2009-03-09 Alexey Kryukov <anagnost@yandex.ru>
-
- Fix handling of EBDT formats 8 and 9 (part 2).
-
- This patch fixes the following problems in ttsbit0.c:
-
- . Bitmaps for compound glyphs were never allocated.
-
- . `SBitDecoder' refused to load metrics if some other metrics have
- already been loaded. This condition certainly makes no sense for
- recursive calls, so I've just disabled it. Another possibility
- would be resetting `decoder->metrics_loaded' to false before
- loading each composite component. However, we must restore the
- original metrics after finishing the recursion; otherwise we can
- get a misaligned glyph.
-
- . `tt_sbit_decoder_load_bit_aligned' incorrectly handled `x_pos',
- causing some glyph components to be shifted too far to the right
- (especially noticeable for small sizes).
-
- Note that support for grayscale bitmaps (not necessarily compound) is
- completely broken in ttsbit0.c.
-
- * src/sfnt/tt_sbit_decoder_load_metrics: Always load metrics.
- (tt_sbit_decoder_load_bit_aligned): Handle `x_pos' correctly in case
- of `h == height'.
- (tt_sbit_decoder_load_compound): Reset metrics after loading
- components.
- Allocate bitmap.
-
-2009-03-09 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/configure.raw (version_info): Set to 9:20:3.
-
-2009-03-03 David Turner <david@freetype.org>
-
- Protect SFNT kerning table parser against malformed tables.
-
- This closes Savannah BUG #25750.
-
- * src/sfnt/ttkern.c (tt_face_load_kern, tt_face_get_kerning): Fix a
- bug where a malformed table would be successfully loaded but later
- crash the engine during parsing.
-
-2009-03-03 David Turner <david@freetype.org>
-
- Update documentation and bump version number to 2.3.9.
-
- * include/freetype/freetype.h: Bump patch version to 9.
- * docs/CHANGES: Document the ABI break in 2.3.8.
- * docs/VERSION.DLL: Update version numbers table for 2.3.9.
-
-2009-03-03 David Turner <david@freetype.org>
-
- Remove ABI-breaking field in public PS_InfoFontRec definition.
-
- Instead, we define a new internal PS_FontExtraRec structure to
- hold the additional field, then place it in various internal
- positions of the corresponding FT_Face derived objects.
-
- * include/freetype/t1tables.h (PS_FontInfoRec): Remove the
- `fs_type' field from the public structure.
- * include/freetype/internal/psaux.h (T1_FieldLocation): New
- enumeration `T1_FIELD_LOCATION_FONT_EXTRA'.
- * include/freetype/internal/t1types.h (PS_FontExtraRec): New
- structure.
- (T1_FontRec, CID_FaceRec): Add it.
-
- * src/cid/cidload.c (cid_load_keyword): Handle
- T1_FIELD_LOCATION_FONT_EXTRA.
- * src/cid/cidtoken.h, src/type1/t1tokens.h, src/type42/t42parse.c:
- Adjust FT_STRUCTURE and T1CODE properly to handle `FSType'.
- * src/type1/t1load.c (t1_load_keyword): Handle
- T1_FIELD_LOCATION_FONT_EXTRA.
-
- * include/freetype/internal/services/svpsinfo.h (PsInfo service):
- Add `PS_GetFontExtraFunc' function typedef.
-
- * src/base/ftfstype.c: Include FT_INTERNAL_SERVICE_H and
- FT_SERVICE_POSTSCRIPT_INFO_H.
- (FT_Get_FSType_Flags): Use POSTSCRIPT_INFO service.
-
- * src/cff/cffdrivr.c (cff_service_ps_info): Updated.
- * src/cid/cidriver.c (cid_ps_get_font_extra): New function.
- (cid_service_ps_info): Updated.
- * src/type1/t1driver.c (t1_ps_get_font_extra): New function.
- (t1_service_ps_info): Updated.
- * src/type42/t42drivr.c (t42_ps_get_font_extra): New function.
- (t42_service_ps_info): Updated.
-
-2009-03-02 Alexey Kryukov <anagnost@yandex.ru>
-
- Fix handling of EBDT formats 8 and 9.
-
- The main cycle in `blit_sbit' makes too many iterations: it actually
- needs the count of lines in the source bitmap rather than in the
- target image.
-
- * src/sfnt/ttsbit.c (blit_sbit) [FT_CONFIG_OPTION_OLD_INTERNALS]:
- Add parameter `source_height' and use it for main loop.
- (Load_SBit_Single) [FT_CONFIG_OPTION_OLD_INTERNALS]: Updated.
-
-2009-02-23 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #25669.
-
- * src/base/ftadvanc.h (FT_Get_Advances): Fix serious typo.
-
- * src/base/ftobjs.c (FT_Select_Metrics, FT_Request_Metrics): Fix
- scaling factor for non-scalable fonts.
-
- * src/cff/cffdrivr.c (cff_get_advances): Use correct advance width
- value to prevent incorrect scaling.
-
- * docs/CHANGES: Document it.
-
-2009-02-15 Matt Godbolt <matt@godbolt.org>
-
- Fix Savannah bug #25588.
-
- * builds/unix/ftconfig.in (FT_MulFix_arm): Use correct syntax for
- `orr' instruction.
-
-2009-02-11 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttobjs.c (tt_check_trickyness): Add `DFKaiShu'.
- Reported by David Bevan <dbevan@emtex.com>.
-
-2009-02-09 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #25495.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Test for bitmap strikes before
- setting metrics and bbox values. This ensures that the check for a
- font with neither a `glyf' table nor bitmap strikes can be performed
- early enough to set metrics and bbox values too.
-
-2009-02-04 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #25480.
-
- * builds/unix/freetype-config.in: For --ftversion, don't use $prefix
- but $includedir.
-
-2009-01-31 Werner Lemberg <wl@gnu.org>
-
- Minor docmaker improvements.
-
- * src/tools/docmaker/content.py (DocBlock::__init__): Ignore empty
- code blocks.
-
-2009-01-25 Werner Lemberg <wl@gnu.org>
-
- Fix SCANCTRL handling in TTFs.
- Problem reported by Alexey Kryukov <anagnost@yandex.ru>.
-
- * src/truetype/ttinterp.c (Ins_SCANCTRL): Fix threshold handling.
-
-2009-01-23 Werner Lemberg <wl@gnu.org>
-
- Move FT_Get_FSType_Flags to a separate file.
- Problem reported by Mickey Gabel <mickey@monfort.co.il>.
-
- * src/base/ftobjs.c (FT_Get_FSType_Flags): Move to...
- * src/base/ftfstype.c: This new file.
-
- * modules.cfg (BASE_EXTENSION): Add ftfstype.c.
-
- * docs/INSTALL.ANY: Updated.
-
- * builds/mac/*.txt, builds/amiga/*makefile*,
- builds/win32/{visualc,visualce}/freetype.*, builds/symbian/*:
- Updated.
-
-2009-01-22 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/ftsystem.c (FT_Stream_Open): Fix 2 error
- messages ending without "\n".
-
-2009-01-22 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix Savannah bug #25347.
-
- * src/base/ftobjs.c (open_face_PS_from_sfnt_stream): Rewind
- the stream to the original position passed to this function,
- when ft_lookup_PS_in_sfnt_stream() failed.
- (Mac_Read_sfnt_Resource): Rewind the stream to the head of
- sfnt resource body, when open_face_PS_from_sfnt_stream()
- failed.
-
-2009-01-19 Michael Lotz <mmlr@mlotz.ch>
-
- Fix Savannah bug #25355.
-
- * include/freetype/config/ftconfig.h (FT_MulFix_i386): Make
- assembler code work with gcc 2.95.3 (as used by the Haiku project).
- Add `cc' register to the clobber list.
-
-2009-01-18 Werner Lemberg <wl@gnu.org>
-
- Protect FT_Get_Next_Char.
-
- * src/sfnt/ttcmap.c (tt_cmap4_set_range): Apply fix similar to
- change from 2008-07-22.
-
- Patch from Ronen Ghoshal <rghoshal@emtex.com>.
-
-2009-01-18 Werner Lemberg <wl@gnu.org>
-
- Implement FT_Get_Name_Index for SFNT driver.
-
- * src/sfnt/sfdriver.c (sfnt_get_name_index): New function.
- (sfnt_service_glyph_dict): Use it.
-
- Problem reported by Truc Truong <tructv@necsv.com>.
-
-2009-01-18 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftstroke.h (FT_Outline_GetInsideBorder): Fix
- documentation. Problem reported by Truc Truong <tructv@necsv.com>.
-
- * docs/CHANGES: Updated.
-
-2009-01-14 Werner Lemberg <wl@gnu.org>
-
- * Version 2.3.8 released.
- =========================
-
-
- Tag sources with `VER-2-3-8'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.3.8.
-
- * README, Jamfile (RefDoc), builds/win32/visualc/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj: s/2.3.7/2.3.8/, s/237/238/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 8.
-
- * builds/unix/configure.raw (version_info): Set to 9:19:3.
-
- * docs/release: Updated.
-
-2009-01-14 Werner Lemberg <wl@gnu.org>
-
- * builds/toplevel.mk (dist): Compress better.
-
-2009-01-13 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_Get_FSType_Flags): Cast for compilation
- with C++.
-
-2009-01-13 Werner Lemberg <wl@gnu.org>
-
- Don't use stdlib.h and friends directly.
- Reported by Mickey Gabel <mickey@monfort.co.il>.
-
- * src/base/ftdbgmem.c: s/<stdlib.h>/FT_CONFIG_STANDARD_LIBRARY_H/.
-
- * src/gzip/ftgzip.c, src/lzw/ftlzw.c, src/raster/ftmisc.h:
- s/<string.h>/FT_CONFIG_STANDARD_LIBRARY_H/.
-
- * src/autofit/aftypes.h, src/autofit/afhints.c,
- src/pshinter/pshalgo.c: s/<stdio.h>/FT_CONFIG_STANDARD_LIBRARY_H/
-
- * src/lzw/ftlzw.c, src/base/ftdbgmem.c: Don't include stdio.h.
-
-2009-01-12 Werner Lemberg <wl@gnu.org>
-
- Avoid compiler warnings.
-
- * */*: s/do ; while ( 0 )/do { } while ( 0 )/.
- Reported by Sean McBride <sean@rogue-research.com>.
-
-2009-01-12 Werner Lemberg <wl@gnu.org>
-
- Fix stdlib dependencies.
-
- Problem reported by Mickey Gabel <mickey@monfort.co.il>.
-
- * include/freetype/config/ftstdlib.h (ft_exit): Removed. Unused.
-
- * src/autofit/afhints.c, src/base/ftlcdfil.c, src/smooth/ftsmooth.c:
- s/memcpy/ft_memcpy/.
- * src/psaux/t1decode.c: s/memset/ft_memset/, s/memcpy/ft_memcpy/.
-
-2009-01-11 Werner Lemberg <wl@gnu.org>
-
- * docs/formats.txt: Add link to PCF specification.
-
- * include/freetype/ftbdf.h (FT_Get_BDF_Property): Improve
- documentation.
-
-2009-01-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftadvanc.c (_ft_face_scale_advances, FT_Get_Advance,
- FT_Get_Advances): Change the type of load_flags from FT_UInt32 to
- FT_Int32, to match with the flags for FT_Load_Glyph().
- * src/cff/cffdrivr.c (cff_get_advances): Ditto.
- * src/truetype/ttdriver.c (tt_get_advances): Ditto.
- * include/freetype/ftadvanc.h (FT_Get_Advance, FT_Get_Advances):
- Ditto.
- * include/freetype/internal/ftdriver.h (FT_Face_GetAdvancesFunc):
- Ditto.
-
-2009-01-09 Daniel Zimmermann <netzimme@aol.com>
-
- * src/gxvalid/gxvmort.c (gxv_mort_feature_validate): Fix wrong
- length check. From Savannah patch #6682.
-
-2009-01-09 Werner Lemberg <wl@gnu.org>
-
- Fix problem with T1_FIELD_{NUM,FIXED}_TABLE2.
-
- * src/psaux/psobjs.c (ps_parser_load_field_table): Don't handle
- `count_offset' if it is zero (i.e., unused). Otherwise, the first
- element of the structure which holds the data is erroneously
- modified. Problem reported by Chi Nguyen <chint@necsv.com>.
-
-2009-01-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftadvanc.c (_ft_face_scale_advances, FT_Get_Advance,
- FT_Get_Advances): Extend the type of load_flags from FT_UInt to
- FT_UInt32, to pass 32-bit flags on 16bit platforms.
- * src/cff/cffdrivr.c (cff_get_advances): Ditto.
- * src/truetype/ttdriver.c (tt_get_advances): Ditto.
- * include/freetype/ftadvanc.h (FT_Get_Advance, FT_Get_Advances):
- Ditto.
- * include/freetype/internal/ftdriver.h (FT_Face_GetAdvancesFunc):
- Ditto.
-
-2009-01-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c (FT_Done_Library): Issue an error message when
- FT_Done_Face() cannot free all faces. If the list of the opened
- faces includes broken face which FT_Done_Face() cannot free,
- FT_Done_Library() retries FT_Done_Face() and it can fall into
- an endless loop. See the discussion:
- http://lists.gnu.org/archive/html/freetype-devel/2008-09/msg00047.html
- http://lists.gnu.org/archive/html/freetype-devel/2008-10/msg00000.html
-
-2009-01-07 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Document new key `a' in ftdiff.
-
-2009-01-06 Werner Lemberg <wl@gnu.org>
-
- * autogen.sh: Don't use GNUisms while calling sed. Problem reported
- by Sean McBride.
-
-2009-01-06 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftbitmap.c (FT_Bitmap_Convert): Handle FT_PIXEL_MODE_LCD
- and FT_PIXEL_MODE_LCD_V. Problem reported by Chi Nguyen
- <chint@necsv.com>.
-
-2009-01-06 Diego Pettenò <flameeyes@gmail.com>
-
- * builds/unix/configure.raw: Don't call AC_CANONICAL_BUILD and
- AC_CANONICAL_TARGET and use $host_os only. A nice explanation for
- this change can be found at
- http://blog.flameeyes.eu/s/canonical-target.
-
- From Savannah patch #6712.
-
-2009-01-06 Sean McBride <sean@rogue-research.com>
-
- * src/base/ftdbgmem.c (_debug_mem_dummy): Make it static.
-
- * src/base/ftmac.c: Remove some #undefs.
-
-2008-12-26 Werner Lemberg <wl@gnu.org>
-
- Set `face_index' field in FT_Face for all font formats.
-
- * cff/cffobjs.c (cff_face_init), winfonts/winfnt.c (FNT_Face_Init),
- sfnt/sfobjs.c (sfnt_init_face): Do it.
-
- * docs/CHANGES: Document it.
-
-2008-12-22 Steve Grubb
-
- * builds/unix/ftsystem.c (FT_Stream_Open): Reject zero-length files.
- Patch from Savannah bug #25151.
-
-2008-12-21 Werner Lemberg <wl@gnu.org>
-
- * src/pfr/pfrdrivr.c, src/winfonts/winfnt.c, src/cache/ftcmanag.c,
- src/smooth/ftgrays.c, src/base/ftobjs.c, src/sfobjs.c:
- s/_Err_Bad_Argument/_Err_Invalid_Argument/. The former is for
- errors in the bytecode interpreter only.
-
-2008-12-21 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftpfr.c (FT_Get_PFR_Metrics): Protect against NULL
- arguments.
- Fix return value for non-PFR fonts. Both problems reported by Chi
- Nguyen <chint@necsv.com>.
-
-2008-12-21 anonymous
-
- FT_USE_MODULE declares things as:
-
- extern const FT_Module_Class
-
- (or similar for C++). However, the actual types of the variables
- being declared are often different, e.g., FT_Driver_ClassRec or
- FT_Renderer_Class. (Some are, indeed, FT_Module_Class.)
-
- This works with most C compilers (since those structs begin with an
- FT_Module_Class struct), but technically it's undefined behavior.
-
- To quote the ISO/IEC 9899:TC2 final committee draft, section 6.2.7
- paragraph 2:
-
- All declarations that refer to the same object or function shall
- have compatible type; otherwise, the behavior is undefined.
-
- (And they are not compatible types.)
-
- Most C compilers don't reject (or even detect!) code which has this
- issue, but the GCC LTO development branch compiler does. (It
- outputs the types of the objects while generating .o files, along
- with a bunch of other information, then compares them when doing the
- final link-time code generation pass.)
-
- Patch from Savannah bug #25133.
-
- * src/base/ftinit.c (FT_USE_MODULE): Include variable type.
-
- * builds/amiga/include/freetype/config/ftmodule.h,
- include/freetype/config/ftmodule.h, */module.mk: Updated to declare
- pass correct types to FT_USE_MODULE.
-
-2008-12-21 Hongbo Ni <hongbo@njstar.com>
-
- * src/autofit/aflatin.c (af_latin_hint_edges),
- src/autofit/aflatin2.c (af_latin2_hint_edges), src/autofit/afcjk.c
- (af_cjk_hint_edges): Protect against division by zero. This fixes
- Savannah bug #25124.
-
-2008-12-18 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2008-12-18 David Bevan <dbevan@emtex.com>
-
- Provide API for accessing embedding and subsetting restriction
- information.
-
- * include/freetype.h (FT_FSTYPE_INSTALLABLE_EMBEDDING,
- FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING,
- FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING, FT_FSTYPE_EDITABLE_EMBEDDING,
- FT_FSTYPE_NO_SUBSETTING, FT_FSTYPE_BITMAP_EMBEDDING_ONLY): New
- macros.
- (FT_Get_FSType_Flags): New function declaration.
-
- * src/base/ftobjs.c (FT_Get_FSType_Flags): New function.
-
- * src/cid/cidtoken.h, src/type1/t1tokens.h, src/type42/t42parse.c
- (t42_keywords): Handle `FSType'.
-
- * include/freetype/t1tables.h (PS_FontInfoRec): Add `fs_type' field.
-
-2008-12-17 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Don't use internal
- macros so that copying the source code into an application works
- out of the box.
-
-2008-12-17 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftsynth.h, src/base/ftsynth.c: Move
- FT_GlyphSlot_Own_Bitmap to...
- * include/freetype/ftbitmap.h, src/base/ftbitmap.c: These files.
-
- * docs/CHANGES: Document it.
-
-2008-12-10 Werner Lemberg <wl@gnu.org>
-
- Generalize the concept of `tricky' fonts by introducing
- FT_FACE_FLAG_TRICKY to indicate that the font format's hinting
- engine is necessary for correct rendering.
-
- At the same time, slightly modify the behaviour of tricky fonts:
- FT_LOAD_NO_HINTING is now ignored. To really force raw loading
- of tricky fonts (without hinting), both FT_LOAD_NO_HINTING and
- FT_LOAD_NO_AUTOHINT must be used.
-
- Finally, tricky TrueType fonts always use the bytecode interpreter
- even if the patented code is used.
-
- * include/freetype/freetype.h (FT_FACE_FLAG_TRICKY, FT_IS_TRICKY):
- New macros.
-
- * src/truetype/ttdriver.c (Load_Glyph): Handle new load flags
- semantics as described above.
-
- * src/truetype/ttobjs.c (tt_check_trickyness): New function, using
- code of ...
- (tt_face_init): This function, now simplified and updated to new
- semantics.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Don't use autohinter for tricky
- fonts.
-
- * docs/CHANGES: Document it.
-
-2008-12-09 Werner Lemberg <wl@gnu.org>
-
- Really fix Savannah bug #25010: An SFNT font with neither outlines
- nor bitmaps can be considered as containing space `glyphs' only.
-
- * src/truetype/ttpload.c (tt_face_load_loca): Handle the case where
- a `glyf' table is missing.
-
- * src/truetype/ttgload.c (load_truetype_glyph): Abort if we have no
- `glyf' table but a non-zero `loca' entry.
- (tt_loader_init): Handle missing `glyf' table.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Undo change 2008-12-05.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): A font with neither outlines
- nor bitmaps is scalable.
-
-2008-12-05 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/aflatin.c (af_latin_uniranges): Add more ranges. This
- fixes Savannah bug #21190 which also provides a basic patch.
-
-2008-12-05 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/freetype.h (FT_LOAD_ADVANCE_ONLY): Use value
- 0x100 instead of 0x10000; the latter value is already occupied by
- FT_LOAD_TARGET_LIGHT. Bug reported by James Cloos.
-
-
- Handle SFNT with neither outlines nor bitmaps. This fixes Savannah
- bug #25010.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Reject fonts with neither
- outlines nor bitmaps.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Don't return an error if there
- is no table with glyphs.
-
-
- * src/sfnt/ttload.c (tt_face_lookup_table): Improve debugging
- message.
-
-2008-12-01 Werner Lemberg <wl@gnu.org>
-
- GDEF tables need `glyph_count' too for validation. Problem reported
- by Chi Nguyen <chint@necsv.com>.
-
- * src/otvalid/otvgdef.c (otv_GDEF_validate), src/otvalid/otvalid.h
- (otv_GDEF_validate), src/otvalid/otvmod.c (otv_validate): Pass
- `glyph_count'.
-
-2008-11-29 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afcjk.c, src/base/ftoutln.c, src/base/ftrfork.c,
- src/bdf/bdfdrivr.c, src/gxvalid/gxvmorx.c, src/otvalid/otvmath.c,
- src/pcf/pcfdrivr.c, src/psnames/pstables.h, src/smooth/ftgrays.c,
- src/tools/glnames.py, src/truetype/ttinterp.c, src/type1/t1load.c,
- src/type42/t42objs.c, src/winfonts/winfnt.c: Fix compiler warnings
- (Atari PureC).
-
-2008-11-29 James Cloos <cloos@jhcloos.com>
-
- * src/type/t1load.c (mm_axis_unmap): Revert previous patch and fix
- it correctly by using FT_INT_TO_FIXED (FreeType expects 16.16 values
- in the /BlendDesignMap space).
-
-2008-11-29 James Cloos <cloos@jhcloos.com>
-
- * src/type1/t1load.c (mm_axis_unmap): `blend_points' is FT_Fixed*,
- whereas `design_points' is FT_Long*. Therefore, return blend rather
- than design points.
-
-2008-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffparse.c (cff_parse_real): Handle more than nine
- significant digits correctly. This fixes Savannah bug #24953.
-
-2008-11-25 Daniel Zimmermann <netzimme@aol.com>
-
- * src/base/ftstream.c (FT_Stream_ReadFields): Don't access stream
- before the NULL check. From Savannah patch #6681.
-
-2008-11-24 Werner Lemberg <wl@gnu.org>
-
- Fixes from the gnuwin32 port.
-
- * src/base/ftlcdfil.c: s/EXPORT/EXPORT_DEF/.
-
- * src/base/ftotval.c: Include FT_OPENTYPE_VALIDATE_H.
-
- * src/psaux/psobjs.c (ps_table_add): Check `length'.
-
-2008-11-15 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (tt_default_graphics_state): The default
- value for `scan_type' is zero, as confirmed by Greg Hitchcock from
- Microsoft. Problem reported by Michal Nowakowski
- <miszka@limes.com.pl>.
-
-2008-11-12 Tor Andersson <tor.andersson@gmail.com>
-
- * src/cff/cffdrivr.c (cff_get_cmap_info): Initialize `format' field.
- This fixes Savannah bug #24819.
-
-2008-11-08 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Remove #if 0/#endif guards
- since OpenType version 1.5 has been released.
-
- * include/ttnameid.h (TT_NAME_ID_WWS_FAMILY,
- TT_NAME_ID_WWS_SUBFAMILY): New macros for OpenType 1.5.
- (TT_URC_COPTIC, TT_URC_VAI, TT_URC_NKO, TT_URC_BALINESE,
- TT_URC_PHAGSPA, TT_URC_NON_PLANE_0, TT_URC_PHOENICIAN,
- TT_URC_TAI_LE, TT_URC_NEW_TAI_LUE, TT_URC_BUGINESE,
- TT_URC_GLAGOLITIC, TT_URC_YIJING, TT_URC_SYLOTI_NAGRI,
- TT_URC_LINEAR_B, TT_URC_ANCIENT_GREEK_NUMBERS, TT_URC_UGARITIC,
- TT_URC_OLD_PERSIAN, TT_URC_SHAVIAN, TT_URC_OSMANYA,
- TT_URC_CYPRIOT_SYLLABARY, TT_URC_KHAROSHTHI, TT_URC_TAI_XUAN_JING,
- TT_URC_CUNEIFORM, TT_URC_COUNTING_ROD_NUMERALS, TT_URC_SUNDANESE,
- TT_URC_LEPCHA, TT_URC_OL_CHIKI, TT_URC_SAURASHTRA, TT_URC_KAYAH_LI,
- TT_URC_REJANG, TT_URC_CHAM, TT_URC_ANCIENT_SYMBOLS,
- TT_URC_PHAISTOS_DISC, TT_URC_OLD_ANATOLIAN, TT_URC_GAME_TILES): New
- macros for OpenType 1.5.
-
-2008-11-08 Wenlin Institute <wenlin@wenlin.com>
-
- * src/base/ftobjs.c (ft_glyphslot_free_bitmap): Protect against
- slot->internal == NULL. Reported by Graham Asher.
-
-2008-11-08 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfobjs.c (tt_face_get_name): Modified to return an error
- code so that memory allocation problems can be distinguished from
- missing table entries. Reported by Graham Asher.
- (GET_NAME): New macro.
- (sfnt_load_face): Use it.
-
-2008-11-05 Werner Lemberg <wl@gnu.org>
-
- * devel/ftoption.h, include/freetype/config/ftoption.h
- [TT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Undefine
- TT_CONFIG_OPTION_UNPATENTED_HINTING. This fixes the return value of
- `FT_Get_TrueType_Engine_Type' (and makes it work as documented).
- Reported in bug #441638 of bugzilla.novell.com.
-
- * docs/CHANGES: Document it.
-
-2008-11-03 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_subrs): Use an endless loop. There are
- fonts (like HELVI.PFB version 003.001, used on OS/2) which define
- some `subrs' elements more than once. Problem reported by Peter
- Weilbacher <mozilla@weilbacher.org>.
-
-2008-10-15 Graham Asher <graham.asher@btinternet.com>
-
- * src/sfnt/ttpost.c (tt_post_default_names): Add `const'.
-
-2008-10-15 David Turner <david@freetype.org>
-
- * src/truetype/ttgxvar.c (TT_Set_MM_Blend): Disambiguate for
- meddlesome compilers' warning against `for ( ...; ...; ...) ;'.
-
-2008-10-14 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffobjs.c (cff_face_init): Remove compiler warning.
- Suggested by Bram Tassyns in Savannah patch #6651.
-
-2008-10-12 Graham Asher <graham.asher@btinternet.com>
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Fix computation of
- `underline_position'.
-
-2008-10-12 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2008-10-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix Savannah bug #24468.
-
- According to include/freetype/internal/ftobjs.h, the appropriate
- type to interchange single character codepoint is FT_UInt32. It
- should be distinguished from FT_UInt which can be 16bit integer.
-
- * src/sfnt/ttcmap.c (tt_cmap4_char_map_linear): Change the type
- of the second argument `pcharcode' from FT_UInt* to FT_UInt32*.
- (tt_cmap4_char_map_binary): Ditto.
- (tt_cmap14_get_nondef_chars): Change the type of return value
- from FT_UInt* to FT_UInt32*.
-
-2008-10-08 John Tytgat <John.Tytgat@esko.com>
-
- Fix Savannah bug #24485.
-
- * src/type1/t1load.c (parse_charstrings): Assure that we always have
- a .notdef glyph.
-
-2008-10-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftmac.c: Include FT_TRUETYPE_TAGS_H for multi build.
- * builds/mac/ftmac.c: Ditto.
-
-2008-10-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * include/freetype/tttags.h (TTAG_TYP1, TTAG_typ1): Fix definitions.
- * src/base/ftobjs.c: Include FT_TRUETYPE_TAGS_H.
-
-2008-10-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/sfnt/sfobjs.c (sfnt_open_font): Allow `typ1' version tag in
- the beginning of sfnt container.
- * src/sfnt/ttload.c (check_table_dir): Return
- `SFNT_Err_Table_Missing' when sfnt table directory structure is
- correct but essential tables for TrueType fonts (`head', `bhed' or
- `SING') are missing. Other errors are returned by
- SFNT_Err_Unknown_File_Format.
-
- * src/base/ftobjs.c (FT_Open_Face): When TrueType driver returns
- `FT_Err_Table_Missing', try `open_face_PS_from_sfnt_stream'. It is
- enabled only when old mac font support is configured.
-
-2008-10-04 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * include/freetype/tttags.h (TTAG_CID, TTAG_FOND, TTAG_LWFN,
- TTAG_POST, TTAG_sfnt, TTAG_TYP1, TTAG_typ1): New tags to simplify
- the repeated calculations of these values in ftobjs.c and ftmac.c.
- * src/base/ftobjs.c: Replace all FT_MAKE_TAG by new tags.
- * src/base/ftmac.c: Ditto.
- * builds/mac/ftmac.c: Ditto.
-
-2008-10-04 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c (ft_lookup_PS_in_sfnt_stream): Remove wrong
- initialization of *is_sfnt_cid.
-
-2008-10-04 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (open_face_PS_from_sfnt_stream): Remove compiler
- warnings.
-
-2008-10-04 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c (ft_lookup_PS_in_sfnt): Replaced by...
- (ft_lookup_PS_in_sfnt_stream): This.
- (open_face_PS_from_sfnt_stream): New function. It checks whether
- the stream is sfnt-wrapped Type1 PS font or sfnt-wrapped CID-keyed
- font, then try to open a face for given face_index.
- (Mac_Read_sfnt_Resource): Replace the combination of
- `ft_lookup_PS_in_sfnt' and `open_face_from_buffer' by
- `open_face_PS_from_sfnt_stream'.
- * src/base/ftmac.c (FT_New_Face_From_SFNT): Ditto.
- * builds/mac/ftmac.c (FT_New_Face_From_SFNT): Ditto.
- * src/base/ftbase.h: Remove `ft_lookup_PS_in_sfnt' and add
- `open_face_PS_from_sfnt_stream'.
-
-2008-10-03 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c (ft_lookup_PS_in_sfnt): Set *is_sfnt_cid to
- FALSE if neither `CID ' nor `TYP1' is found in the sfnt container.
-
-2008-10-03 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * include/freetype/config/ftconfig.h: Define FT_MACINTOSH when SC or
- MrC compiler of MPW is used. These compilers do not define the
- macro __APPLE__ by themselves.
- * builds/unix/ftconfig.in: Ditto.
- * builds/vms/ftconfig.h: Ditto.
- * src/base/ftbase.c: Use FT_MACINTOSH instead of __APPLE__, to
- include ftmac.c if FreeType 2 is built by MPW.
- * src/base/ftobjs.c: Use FT_MACINTOSH instead of __APPLE__, to
- enable shared functions for ftmac.c if FreeType 2 is built by MPW.
-
- * builds/mac/ftmac.c: Include ftbase.h.
- (memory_stream_close): Removed.
- (new_memory_stream): Ditto.
- (open_face_from_buffer): Removed. Use the implementation in
- ftobjs.c.
- (ft_lookup_PS_in_sfnt): Ditto.
-
- * builds/mac/FreeType.m68k_far.make.txt: Build ftmac.c as an
- included part of ftbase.c, to share the functions in ftobjs.c. The
- rule compiling ftmac.c separately is removed and the rule copying
- ftbase.c from src/base/ftbase.c to builds/mac/ftbase.c is added.
- * builds/mac/FreeType.m68k_cfm.make.txt: Ditto.
- * builds/mac/FreeType.ppc_classic.make.txt: Ditto.
- * builds/mac/FreeType.ppc_carbon.make.txt: Ditto.
-
-2008-10-02 Bram Tassyns <bramt@enfocus.be>
-
- * src/cff/cffgload.c (cff_slot_load): Map CID 0 to GID 0. This
- fixes Savannah bug #24430.
-
-2008-10-02 Werner Lemberg <wl@gnu.org>
-
- * builds/freetype.mk (BASE_H): Rename to...
- (INTERNAL_H): This.
- (FREETYPE_H): Updated.
- * src/base/rules.mk: (BASE_OBJ_S, OBJ_DIR/%.$O): Add BASE_H.
- * src/bdf/rules.mk (BDF_DRV_H): Add bdferror.h.
- * src/cache/rules.mk (CACHE_DRV_H): Add ftccache.h and ftcsbits.h.
- * src/pcf/rules.mk (PCF_DRV_H): Add pcfread.h.
- * src/raster/rules.mk (RASTER_DRV_H): Add ftmisc.h.
- * src/type42/rules.mk (T42_DRV_H): Add t42types.h.
-
-2008-10-02 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftbase.h: New file to declare the private utility
- functions shared by the sources of base modules. Currently,
- `ft_lookup_PS_in_sfnt' and `open_face_from_buffer' are declared to
- share between ftobjs.c and ftmac.c.
-
- * src/base/rule.mk: Add ftbase.h.
-
- * src/base/ftobjs.c: Include ftbase.h.
- (memory_stream_close): Build on any platform when old MacOS font
- support is enabled.
- (new_memory_stream): Ditto.
- (open_face_from_buffer): Build on any platform when old MacOS font
- support is enabled. The counting of the face in a font file is
- slightly different between Carbon-dependent parser and Carbon-free
- parser. They are merged with the platform-specific conditional.
- (ft_lookup_PS_in_sfnt): Ditto.
-
- * src/base/ftmac.c: Include ftbase.h.
- (memory_stream_close): Removed.
- (new_memory_stream): Ditto.
- (open_face_from_buffer): Removed. Use the implementation in
- ftobjs.c.
- (ft_lookup_PS_in_sfnt): Ditto.
-
-2008-10-02 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfobjs.c (sfnt_load_face): `psnames_error' is only needed
- if TT_CONFIG_OPTION_POSTSCRIPT_NAMES is defined.
-
-2008-10-01 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttobjs.c (tt_face_done), src/cff/cffobjs.c
- (cff_face_done), src/pfr/pfrobjs.c (pfr_face_done),
- src/pcf/pcfdrivr.c (PCF_Face_Done), src/cid/cidobjs.c
- (cid_face_done), src/bdf/bdfdrivr. (BDF_Face_Done),
- src/sfnt/sfobjs.c (sfnt_face_done): Protect against face == 0.
- Reported by Graham Asher.
-
-2008-09-30 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/rules.mk: Add conditional source to BASE_SRC, for `make
- multi' on Mac OS X. If the macro $(ftmac_c) is defined,
- $(BASE_DIR)/$(ftmac_c) is added to BASE_SRC. In a normal build, the
- lack of ftmac.c in BASE_SRC is not serious because ftbase.c includes
- ftmac.c.
- * builds/unix/unix-def.in: Add a macro definition of $(ftmac_c).
- * builds/unix/configure.raw: Add procedure to set up appropriate
- value of $(ftmac_c) with the consideration of the availability of
- Carbon framework.
-
-2008-09-30 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/Jamfile: Add target for multi build by jam on Mac OS X.
- * src/base/ftobjs.c (FT_New_Face): Fix the condition to include this
- function for MPW building. It is synchronized the condition to
- include ftmac.c source into ftbase.c.
-
-2008-09-22 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffgload.c (CFF_Operator, cff_argument_counts,
- cff_decoder_parse_charstrings): Handle (invalid)
- `callothersubr' and `pop' instructions.
-
-2008-09-22 John Tytgat <John.Tytgat@esko.com>
-
- Fix Savannah bug #24307.
-
- * include/freetype/internal/t1types.h (CID_FaceRec),
- src/type42/t42types.h (T42_FaceRec): Comment out `afm_data'.
-
-2008-09-21 Werner Lemberg <wl@gnu.org>
-
- * src/smooth/ftgrays.c (gray_raster_render): Don't dereference
- `target_map' if FT_RASTER_FLAG_DIRECT is set. Problem reported by
- Stephan T. Lavavej <stl@nuwen.net>.
-
-2008-09-21 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/otvalid/Jamfile: Add missing target `otvmath' for multi build
- by jam.
- * src/sfnt/Jamfile: Add missing target `ttmtx' for multi build by
- jam.
-
-2008-09-20 Werner Lemberg <wl@gnu.org>
-
- * src/smooth/ftgrays.c (gray_find_cell): Fix threshold. The values
- passed to this function are already `normalized'. Problem reported
- by Stephan T. Lavavej <stl@nuwen.net>.
-
- * docs/CHANGES: Document it.
-
-2008-09-20 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftoutln.c: Include FT_INTERNAL_DEBUG_H.
- (FT_Outline_Decompose): Decorate with tracing messages.
-
- * src/smooth/ftgrays.c [DEBUG_GRAYS]: Replace with
- FT_DEBUG_LEVEL_TRACE.
- [_STANDALONE_ && FT_DEBUG_LEVEL_TRACE]: Include stdio.h and
- stdarg.h.
-
- (FT_TRACE) [_STANDALONE_]: Remove.
- (FT_Message) [_STANDALONE_ && FT_DEBUG_LEVEL_TRACE]: New function.
- (FT_TRACE5, FT_TRACE7) [_STANDALONE_]: New macros.
- (FT_ERROR) [_STANDALONE_]: Updated.
-
- (gray_hline) [FT_DEBUG_LEVEL_TRACE]: Fix condition.
- Use FT_TRACE7.
- (gray_dump_cells): Make it `static void'.
- (gray_convert_glyph): Use FT_TRACE7.
-
- (FT_Outline_Decompose) [_STANDALONE_]: Synchronize with version in
- ftoutln.c.
-
- * src/base/ftadvanc.c (FT_Get_Advance, FT_Get_Advances): Use
- FT_ERROR_BASE.
-
- * docs/formats.txt: Updated.
-
-2008-09-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftmac.c: Import sfnt-wrapped Type1 and sfnt-wrapped
- CID-keyed font support.
- * builds/mac/ftmac.c: Ditto.
-
-2008-09-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c (Mac_Read_sfnt_Resource): Fix double free bug in
- sfnt-wrapped Type1 and sfnt-wrapped CID-keyed font support code.
- `open_face_from_buffer' frees the passed buffer if it cannot open a
- face from the buffer, so the caller must not free it.
-
-2008-09-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c (Mac_Read_sfnt_Resource): Add initial support
- for sfnt-wrapped Type1 and sfnt-wrapped CID-keyed font.
- (ft_lookup_PS_in_sfnt): New function to look up `TYP1' or `CID '
- table in sfnt table directory. It is used before loading TrueType
- font driver.
-
- * docs/CHANGES: Add note about the current status of sfnt-wrapped
- Type1 and sfnt-wrapped CID-keyed font support.
-
-2008-09-18 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftsystem.c (FT_Done_Memory): Use ft_sfree directly for
- orthogonality (ft_free and ft_sfree could belong to different memory
- pools). This fixes Savannah bug #24297.
-
-2008-09-18 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/cff/cffobjs.c (cff_face_init): Use TTAG_OTTO defined
- in tttags.h instead of numerical value 0x4F54544FL.
-
-2008-09-16 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffgload.h, src/cff/cffgload.c
- (cff_decoder_set_width_only): Eliminate function call.
-
-2008-09-15 George Williams <gww@silcom.com>
-
- Fix Savannah bug #24179, reported by Bram Tassyns.
-
- * src/type1/t1load.c (mm_axis_unmap, T1_Get_MM_Var): Fix computation
- of default values.
-
-2008-09-15 Werner Lemberg <wl@gnu.org>
-
- * src/tools/glnames.py (main): Surround `ft_get_adobe_glyph_index'
- and `ft_adobe_glyph_list' with FT_CONFIG_OPTION_ADOBE_GLYPH_LIST to
- prevent unconditional definition. This fixes Savannah bug #24241.
-
- * src/psnames/pstables.h: Regenerated.
-
-2008-09-13 Werner Lemberg <wl@gnu.org>
-
- * autogen.sh, builds/unix/configure.raw,
- include/freetype/config/ftconfig.h, builds/unix/ftconfig.in: Minor
- beautifying.
-
- * include/freetype/ftadvanc.h, include/freetype/ftgasp.h,
- include/freetype/ftlcdfil.h: Protect against FreeType 1.
- Some other minor fixes.
-
- * devel/ftoption.h: Synchronize with
- include/freetype/config/ftoption.h.
-
-2008-09-11 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftbase.c: Include ftadvanc.c.
-
-2008-09-11 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/ftconfig.in: Duplicate the cpp computation of
- FT_SIZEOF_{INT|LONG} from include/freetype/config/ftconfig.h.
- (FT_USE_AUTOCONF_SIZEOF_TYPES): New macro. If defined, the cpp
- computation is disabled and the statically configured sizes are
- used. This fixes Savannah bug #21250.
-
- * builds/unix/configure.raw: Add the checks to compare the cpp
- computation results of the bit length of int and long versus the
- sizes detected by running `configure'. If the results are
- different, FT_USE_AUTOCONF_SIZEOF_TYPES is defined to prioritize the
- results.
- New option --{enable|disable}-biarch-config is added to define or
- undefine FT_USE_AUTOCONF_SIZEOF_TYPES manually.
-
-2008-09-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/configure.raw: Clear FT2_EXTRA_LIBS when Carbon or
- ApplicationServices framework is missing. Although this value is not
- used in building of FreeType2, it is written in `freetype2.pc' and
- `freetype-config'.
-
-2008-09-01 David Turner <david@freetype.org>
-
- * src/cache/ftccmap.c (FTC_CMapCache_Lookup): Accept a negative cmap
- index to mean `use default cached FT_Face's charmap'. This fixes
- Savannah bug #22625.
- * include/freetype/ftcache.h: Document it.
-
-
- Make FT_MulFix an inlined function. This is done to speed up
- FreeType a little (on x86 3% when loading+hinting, 10% when
- rendering, ARM savings are more important though). Disable this by
- undefining FT_CONFIG_OPTION_INLINE_MULFIX.
-
- Use of assembler code can now be controlled with
- FT_CONFIG_OPTION_NO_ASSEMBLER.
-
- * include/freetype/config/ftconfig.h, builds/unix/ftconfig.in
- [!FT_CONFIG_OPTION_NO_ASSEMBLER] (FT_MulFix_arm): New assembler
- implementation.
- [!FT_CONFIG_OPTION_NO_ASSEMBLER] (FT_MulFix_i386): Assembler
- implementation taken from `ftcalc.c'.
- [!FT_CONFIG_OPTION_NO_ASSEMBLER] (FT_MULFIX_ASSEMBLER): New macro
- which is defined to the platform-specific assembler implementation
- of FT_MulFix.
- [FT_CONFIG_OPTION_INLINE_MULFIX && FT_MULFIX_ASSEMBLER]
- (FT_MULFIX_INLINED): New macro.
-
- * include/freetype/config/ftoption.h (FT_CONFIG_OPTION_NO_ASSEMBLER,
- FT_CONFIG_OPTION_INLINE_MULFIX): New macros.
-
- * include/freetype/freetype.h: Updated to handle FT_MULFIX_INLINED.
-
- * src/base/ftcalc.c: Updated to use FT_MULFIX_ASSEMBLER and
- FT_MULFIX_INLINED.
-
-
- Add a new header named FT_ADVANCES_H declaring some new APIs to
- extract the advances of one or more glyphs without necessarily
- loading their outlines. Also provide `fast loaders' for the
- TrueType, Type1, and CFF font drivers (more to come later).
-
- * src/base/ftadvanc.c, include/freetype/ftadvanc.h: New files.
-
- * include/freetype/config/ftheader.h (FT_ADVANCES_H): New macro.
- * include/freetype/freetype.h (FT_LOAD_ADVANCE_ONLY): New macro.
-
- * include/freetype/internal/ftdriver.h (FT_Face_GetAdvancesFunc):
- `flags' and `advances' are now of type `FT_UInt' and `FT_Fixed',
- respectively.
-
- * src/base/Jamfile (_sources), src/base/rules.mk (BASE_SRC): Add
- ftadvanc.c.
-
- * src/cff/cffdrivr.c (cff_get_advances): New function.
- (cff_driver_class): Register it.
-
- * src/cff/cffgload.c (cff_decoder_set_width_only): New function.
- (cff_decoder_parse_charstrings): Handle `width_only'.
- (cff_slot_load): Handle FT_LOAD_ADVANCE_ONLY.
-
- * src/cff/cffgload.h (cff_decoder): New element `width_only'.
- (cff_decoder_set_width_only): New declaration.
-
- * src/truetype/ttdriver.c (tt_get_advances): New function.
- (tt_driver_class): Register it.
-
- * src/truetype/ttgload.c (Get_HMetrics, Get_VMetrics): Renamed to...
- (TT_Get_HMetrics, TT_Get_VMetrics): This.
- Update callers.
- * src/truetype/ttgload.h: Declare them.
-
- * src/type1/t1gload.h, src/type1/t1gload.c (T1_Get_Advances): New
- function.
- * src/type1/t1driver.c (t1_driver_class): Register T1_Get_Advances.
-
-
- Add checks for minimum version of the `autotools' stuff.
-
- * autogen.sh: Implement it.
- (get_major_version, get_minor_version, get_patch_version,
- compare_to_minimum_version, check_tool_version): New auxiliary
- functions.
-
- * README.CVS: Document it.
-
-2008-08-29 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/sfnt/sfobjs.c (sfnt_open_font): Use TTAG_OTTO defined in
- tttags.h instead of FT_MAKE_TAG( 'O', 'T', 'T', 'O' ).
-
-2008-08-28 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_encoding): Protect against infinite
- loop. This fixes Savannah bug #24150 (where a patch has been posted
- too).
-
-2008-08-23 Werner Lemberg <wl@gnu.org>
-
- * src/type/t1afm.c (compare_kern_pairs), src/psaux/afmparse.c
- (afm_compare_kern_pairs): Fix comparison. This fixes Savannah bug
- #24119.
-
-2008-08-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c (FT_Stream_New): Initialize *astream always,
- even if passed library or arguments are invalid. This fixes a bug
- that an uninitialized stream is freed when an invalid library handle
- is passed. Originally proposed by Mike Fabian, 2008/08/18 on
- freetype-devel.
- (FT_Open_Face): Ditto (stream).
- (load_face_in_embedded_rfork): Ditto (stream2).
-
-2008-08-18 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftmac.c: Add a fallback to guess the availability of the
- `ResourceIndex' type. It is used when built without configure
- (e.g., a build with Jam).
- * builds/mac/ftmac.c: Ditto.
- * builds/unix/configure.raw: Set HAVE_TYPE_RESOURCE_INDEX to 1 or 0
- explicitly, even if `ResourceIndex' is unavailable.
-
-2008-08-18 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/configure.raw: In checking of Mac OS X features,
- all-in-one header file `Carbon.h' is replaced by the minimum
- header file `CoreServices.h', similar to current src/base/ftmac.c.
-
-2008-08-18 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/sfnt/ttcmap.c (tt_cmap2_validate): Skip the validation of
- sub-header when its code_count is 0. Many Japanese Dynalab fonts
- include such an empty sub-header (code_count == 0, first_code == 0
- delta == 0, but offset != 0) as the second sub-header in SJIS cmap.
-
-2008-08-04 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1tokens.h: Handle `ForceBold' keyword. This fixes
- Savannah bug #23995.
-
- * src/cid/cidload.c (parse_expansion_factor): New callback function.
- (cid_field_records): Use it for `ExpansionFactor'.
- * src/cod/cidtoken.h: Handle `ForceBold' keyword.
- Don't handle `ExpansionFactor'.
-
-2008-08-04 Bram Tassyns <bramt@enfocus.be>
-
- * src/cff/cffparse.c (cff_parse_fixed_scaled): Fix thinko which
- resulted in incorrect scaling. This fixes Savannah bug #23973.
-
-2008-08-04 Werner Lemberg <wl@gnu.org>
-
- Be more tolerant w.r.t. invalid entries in SFNT table directory.
-
- * src/sfnt/ttload.c (check_table_dir): Ignore invalid entries and
- adjust table count.
- Add more trace messages.
- (tt_face_load_font_dir): Updated.
-
-2008-07-30 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings): No longer
- assume that the first argument on the stack is the bottom-most
- element. Two reasons:
-
- o According to people from Adobe it is missing in the Type 2
- specification that pushing of additional, superfluous arguments
- on the stack is prohibited.
-
- o Acroread in general handles fonts differently, namely by popping
- the number of arguments needed for a particular operand (as a PS
- interpreter would do). In case of buggy fonts this causes a
- different interpretation which of the elements on the stack are
- superfluous and which not.
-
- Since there are CFF subfonts (embedded in PDFs) which rely on
- Acroread's behaviour, FreeType now does the same.
-
-2008-07-27 Werner Lemberg <wl@gnu.org>
-
- Add extra mappings for `Tcommaaccent' and `tcommaaccent'. This
- fixes Savannah bug #23940.
-
- * src/psnames/psmodule.c (WGL_EXTRA_LIST_SIZE): Rename to...
- (EXTRA_GLYPH_LIST_SIZE): This.
- Increase by 2.
- (ft_wgl_extra_unicodes): Rename to...
- (ft_extra_glyph_unicodes): This.
- Add two code values.
- (ft_wgl_extra_glyph_names): Rename to...
- (ft_extra_glyph_names): This.
- Add two glyphs.
- (ft_wgl_extra_glyph_name_offsets): Rename to...
- (ft_extra_glyph_name_offsets): This.
- Add two offsets.
-
- (ps_check_wgl_name, ps_check_wgl_unicode): Rename to...
- (ps_check_extra_glyph_name, ps_check_extra_glyph_unicode): This.
- Updated.
- (ps_unicodes_init): Updated.
-
-2008-07-26 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffgload.c (cff_decoder_prepare,
- cff_decoder_parse_charstrings): Improve debug output.
-
-2008-07-22 Martin McBride <mmcbride@emtex.com>
-
- * src/sfnt/ttcmap.c (tt_cmap4_validate, tt_cmap4_char_map_linear,
- tt_cmap4_char_map_binary): Handle fonts which treat the last segment
- specially. According to the specification, such fonts would be
- invalid but acroread accepts them.
-
-2008-07-16 Jon Foster <Jon.Foster@cabot.co.uk>
-
- * src/pfr/pfrdrivr.c (pfr_get_advance): Fix off-by-one error.
-
- * src/base/ftcalc.c (FT_MulFix): Fix portability issue.
-
- * src/sfnt/ttpost.c (MAC_NAME) [!FT_CONFIG_OPTION_POSTSCRIPT_NAMES]:
- Fix compiler warning.
-
-2008-07-16 Werner Lemberg <wl@gnu.org>
-
- Handle CID-keyed fonts wrapped in an SFNT (with cmaps) correctly.
-
- * src/cff/cffload.c (cff_font_load): Pass `pure_cff'.
- Invert sids table only if `pure_cff' is set.
- * src/cff/cffload.h: Updated.
-
- * src/cff/cffobjs.c (cff_face_init): Updated.
- Set FT_FACE_FLAG_CID_KEYED only if pure_cff is set.
-
- * docs/CHANGES: Updated.
-
-2008-07-09 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttpload.c (tt_face_load_loca): Handle buggy fonts
- where num_locations < num_glyphs. Problem reported by Ding Li.
-
-2008-07-05 Werner Lemberg <wl@gnu.org>
-
- Since FreeType uses `$(value ...)', we now need GNU make 3.80 or
- newer. This fixes Savannah bug #23648.
-
- * configure: zsh doesn't like ${1+"$@"}.
- Update needed GNU make version.
- * builds/toplevel.mk: Check for `$(eval ...)'.
- * docs/INSTALL.GNU, docs/INSTALL.CROSS, docs/INSTALL.UNIX: Document
- it.
-
-2008-07-04 Werner Lemberg <wl@gnu.org>
-
- * src/raster/ftraster.c (Draw_Sweep): If span is smaller than one
- pixel, only check for dropouts if neither start nor end point lies
- on a pixel center. This fixes Savannah bug #23762.
-
-2008-06-29 Werner Lemberg <wl@gnu.org>
-
- * Version 2.3.7 released.
- =========================
-
-
- Tag sources with `VER-2-3-7'.
-
- * docs/CHANGES, docs/VERSION.DLL: Update documentation and bump
- version number to 2.3.7.
-
- * README, Jamfile (RefDoc), builds/win32/visualc/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj: s/2.3.6/2.3.7/, s/236/237/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 7.
-
- * builds/unix/configure.raw (version_info): Set to 9:18:3.
-
- * docs/release: Updated.
-
-2008-06-28 Werner Lemberg <wl@gnu.org>
-
- * src/ftglyph.c (FT_Matrix_Multiply, FT_Matrix_Invert): Move to...
- * src/ftcalc.c: Here. This fixes Savannah bug #23729.
-
-2008-06-27 Werner Lemberg <wl@gnu.org>
-
- * src/raster/ftraster.c (Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
- Horizontal_Gray_Sweep_Drop): Test for intersections which
- degenerate to a single point can be ignored; this has been confirmed
- by Greg Hitchcock from Microsoft. (This was commented out code.)
-
-2008-06-26 Werner Lemberg <wl@gnu.org>
-
- Improve navigation in API reference.
-
- * src/tools/docmaker/tohtml.py (html_header_3): Renamed to...
- (html_header_6): This.
- (html_header_3, html_header_3i, html_header_4, html_header_5,
- html_header_5t): New strings.
- (toc_footer_start, toc_footer_end): New strings.
- (HtmlFormatter::html_header): Updated.
- (HtmlFormatter::html_index_header, HtmlFormatter::html_toc_header):
- New strings.
- (HtmlFormatter::index_enter): Use `html_index_header'.
- (HtmlFormatter::index_exit): Print `html_footer'.
- (HtmlFormatter::toc_enter): Use `html_toc_header'.
- (HtmlFormatter::toc_exit): Print proper footer.
-
- Convert ~ to non-breakable space.
-
- * src/tools/docmaker/tohtml.py (make_html_para): Implement it.
- Update header files accordingly.
-
-2008-06-24 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/configure.raw: Check type `ResourceIndex' explicitly
- and define HAVE_TYPE_RESOURCE_INDEX if it is defined. Mac OS X 10.5
- bundles 10.4u SDK with MAC_OS_X_VERSION_10_5 macro but without
- ResourceIndex type definition. The macro does not inform the type
- availability.
- * src/base/ftmac.c: More parentheses are inserted to clarify the
- conditionals to disable legacy APIs in `10.5 and later' cases. If
- HAVE_TYPE_RESOURCE_INDEX is not defined, ResourceIndex is defined.
-
-2008-06-24 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (Ins_SCANTYPE): Don't check rendering
- mode.
-
- * src/raster/ftraster.c (Render_Glyph, Render_Gray_Glyph,
- Draw_Sweep): No-dropout mode is value 2, not value 0.
- (Draw_Sweep): Really skip dropout handling for no-dropout mode.
-
-2008-06-24 Werner Lemberg <wl@gnu.org>
-
- * src/psaux/psobjs.c (t1_builder_close_contour): Don't add contour
- if it consists of one point only. Based on a patch from Savannah
- bug #23683 (from John Tytgat).
-
-2008-06-22 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (TT_Load_Glyph): Protect bytecode stuff
- with IS_HINTED.
-
- * docs/CHANGES: Updated.
-
-2008-06-22 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/configure.raw: If CFLAGS has `-isysroot XXX' option
- but LDFLAGS does not, import it to LDFLAGS. The option is used to
- specify non-default SDK on Mac OS X (e.g., universal binary SDK for
- Mac OS X 10.4 on PowerPC platform). Although Apple TechNote 2137
- recommends to add the option only to CFLAGS, LDFLAGS should include
- it because libfreetype.la is built with -no-undefined. This fixes a
- bug reported by Ryan Schmidt in MacPorts,
- http://trac.macports.org/ticket/15331.
-
-2008-06-21 Werner Lemberg <wl@gnu.org>
-
- Enable access to the various dropout rules of the B&W rasterizer.
- Pass dropout rules from the TT bytecode interpreter to the
- rasterizer.
-
- * include/freetype/ftimage.h (FT_OUTLINE_SMART_DROPOUTS,
- FT_OUTLINE_EXCLUDE_STUBS): New flags for FT_Outline.
-
- * src/raster/ftraster.c (Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
- Horizontal_Gray_Sweep_Drop): Use same mode numbers as given in the
- OpenType specification.
- Fix mode 4 computation.
- (Render_Glyph, Render_Gray_Glyph): Handle new outline flags.
-
- * src/truetype/ttgload.c (TT_Load_Glyph) Convert scan conversion
- mode to FT_OUTLINE_XXX flags.
-
- * src/truetype/ttinterp.c (Ins_SCANCTRL): Enable ppem check.
-
-2008-06-19 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffobjs.c (cff_face_init): Compute final
- `dict->units_per_em' value before assigning it to
- `cffface->units_per_EM'. Otherwise, CFFs without subfonts are
- scaled incorrectly if the font matrix is non-standard. This fixes
- Savannah bug #23630.
-
- * docs/CHANGES: Updated.
-
-2008-06-19 Werner Lemberg <wl@gnu.org>
-
- * src/type/t1objs.c (T1_Face_Init): Slightly improve algorithm fix
- from 2008-06-19.
-
-2008-06-18 Werner Lemberg <wl@gnu.org>
-
- * src/type/t1objs.c (T1_Face_Init): Fix change from 2008-03-21.
- Reported by Peter Weilbacher <mozilla@weilbacher.org>.
-
- * docs/CHANGES: Updated.
-
-2008-06-15 George Williams <gww@silcom.com>
-
- * src/otvalid/otvgpos.c (otv_MarkBasePos_validate): Set
- `valid->extra2' to 1. This is undocumented in the OpenType 1.5
- specification.
-
-2008-06-15 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftcalc.c (FT_MulFix) <asm>: Protect registers correctly
- from clobbering. Patch from Savannah bug report #23556.
-
- * docs/CHANGES: Document it.
-
-2008-06-10 Werner Lemberg <wl@gnu.org>
-
- * autogen.sh: Add option `--install' to libtoolize.
-
-2008-06-10 Werner Lemberg <wl@gnu.org>
-
- * Version 2.3.6 released.
- =========================
-
-
- Tag sources with `VER-2-3-6'.
-
- * docs/CHANGES, docs/VERSION.DLL: Update documentation and bump
- version number to 2.3.6.
-
- * README, Jamfile (RefDoc), builds/win32/visualc/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj: s/2.3.5/2.3.6/, s/235/236/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 6.
-
- * builds/unix/configure.raw (version_info): Set to 9:17:3.
-
-
- * include/freetype/internal/psaux.h (T1_BuilderRec): Remove `scale_x'
- and `scale_y'.
- * src/cff/cffgload.h (CFF_Builder): Remove `scale_x' and `scale_y'.
-
-
- * src/cff/cffparse.c: Include FT_INTERNAL_DEBUG_H.
- * src/cff/cffobjs.h: Include FT_INTERNAL_POSTSCRIPT_HINTS_H.
-
-2008-06-10 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (open_face): Check `clazz->init_face' and
- `clazz->done_face'.
-
-2008-06-09 VaDiM <s_sliva@rambler.ru>
-
- Support debugging on WinCE. From Savannah patch #6536; this fixes
- bug #23497.
-
- * builds/win32/ftdebug.c (OutputDebugStringEx): New function/macro
- as a replacement for OutputDebugStringA (which WinCE doesn't have).
- Update all callers.
- (ft_debug_init) [_WIN32_CE]: WinCE apparently doesn't have
- environment variables.
-
-2008-06-09 Werner Lemberg <wl@gnu.org>
-
- * README.CVS: Updated.
-
- * builds/unix/configure.raw, builds/unix/freetype-config.in: Updated
- for newer versions of autoconf and friends.
-
-2008-06-08 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1parse.h (T1_ParserRec): Make `base_len' and
- `private_len' unsigned.
-
- * src/type1/t1parse.c (read_pfb_tag): Make `asize' unsigned and read
- it as such.
- (T1_New_Parser, T1_Get_Private_Dict): Make `size' unsigned.
-
-
- * src/base/ftstream.c (FT_Stream_Skip): Reject negative values.
-
-
- * src/type1/t1load.c (parse_blend_design_positions): Check `n_axis'
- for sane value.
- Fix typo.
-
-
- * src/psaux/psobjs.c (ps_table_add): Check `idx' correctly.
-
-
- * src/truetype/ttinterp (Ins_SHC): Use BOUNDS() to check
- `last_point'.
-
-
- * src/sfnt/ttload.c (tt_face_load_max_profile): Limit
- `maxTwilightPoints'.
-
-2008-06-06 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (Ins_IP): Handle case `org_dist == 0'
- correctly. This fixes glyphs `t' and `h' of Arial Narrow at 12ppem.
-
-2008-06-03 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftcache.h (FTC_FaceID): Change type back to
- FT_Pointer. Reported by Ian Britten <britten@caris.com>.
-
-2008-06-02 Werner Lemberg <wl@gnu.org>
-
- Emit header info for defined FreeType objects in reference.
-
- * src/tools/docmaker/content.py (re_header_macro): New regexp.
- (ContentProcessor::__init__): Initialize new dictionary `headers'.
- (DocBlock::__init__): Collect macro header definitions.
-
- * src/tools/docmaker/tohtml.py (header_location_header,
- header_location_footer): New strings.
- (HtmlFormatter::__init__): Pass `headers' dictionary.
- (HtmlFormatter::print_html_field): Don't emit paragraph tags.
- (HtmlFormatter::print_html_field_list): Emit empty paragraph.
- (HtmlFormatter::block_enter): Emit header info.
-
-2008-06-01 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/config/ftheader.h (FT_UNPATENTED_HINTING_H,
- FT_INCREMENTAL_H): Added.
-
-2008-05-28 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/sources.py (SourceBlock::__init__): While
- looking for markup tags, return immediately as soon a single one is
- found.
-
-2008-05-28 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (Ins_MD): The MD instruction also uses
- original, unscaled input values. Confirmed by Greg Hitchcock from
- Microsoft.
-
-2008-05-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py (block_footer_start,
- block_footer_middle): Beautify output.
-
-2008-05-25 Werner Lemberg <wl@gnu.org>
-
- * src/raster/ftraster.c (fc_black_render): Return 0 when we are
- trying to render into a zero-width/height bitmap, not an error code.
-
- * src/truetype/ttgload.c (load_truetype_glyph): Move initialization
- of the graphics state for subglyphs to...
- (TT_Hint_Glyph): This function.
- Hinting instructions for a composite glyph apparently refer to the
- just hinted subglyphs, not the unhinted, unscaled outline. This
- seems to fix Savannah bugs #20973 and (at least partially) #23310.
-
-2008-05-20 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftmac.c (FT_New_Face_From_Suitcase): Check if valid
- `aface' is returned by FT_New_Face_From_FOND(). The patch was
- proposed by an anonymous reporter of Savannah bug #23204.
-
-2008-05-18 Werner Lemberg <wl@gnu.org>
-
- * src/pshinter/pshalgo.c (ps_hints_apply): Reset scale values after
- correction for pixel boundary. Without this patch, the effect can
- be cumulative under certain circumstances, making glyphs taller and
- taller after each call. This fixes Savannah bug #19976.
-
-2008-05-18 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftdebug.c (FT_Message, FT_Panic): Send output to stderr.
- This fixes Savannah bug #23280.
-
- * docs/CHANGES: Updated.
-
-2008-05-18 David Turner <david@freetype.org>
-
- * src/psnames/psmodule.c (ft_wgl_extra_unicodes,
- ft_wgl_extra_glyph_names, ft_wgl_extra_glyph_name_offsets,
- ps_check_wgl_name, ps_check_wgl_unicode): Use `static' to make
- declarations non-global.
-
- * src/type1/t1load.c: Add missing comment.
-
-2008-05-17 Sam Hocevar <samh>
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Handle zero-contour
- glyphs correctly. Patch from Savannah bug #23277.
-
-2008-05-16 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2008-05-16 Sergey Tolstov <stolstov@esri.com>
-
- Improve support for WGL4 encoded fonts.
-
- * src/psnames/psmodule.c (WGL_EXTRA_LIST_SIZE): New macro.
- (ft_wgl_extra_unicodes, ft_wgl_extra_glyph_names,
- ft_wgl_extra_glyph_name_offsets): New arrays.
- (ps_check_wgl_name, ps_check_wgl_unicode): New functions.
- (ps_unicodes_init): Use them to add additional Unicode mappings.
-
-2008-05-15 Werner Lemberg <wl@gnu.org>
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
- <op_closepath>: `closepath' without a path is a no-op, not an error
- (cf. the PS reference manual).
-
- Reported by Martin McBride.
-
-2008-05-15 Werner Lemberg <wl@gnu.org>
-
- * builds/toplevel.mk (CONFIG_GUESS, CONFIG_SUB): Updated.
-
-2008-05-15 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_subrs): Accept fonts with a subrs array
- which contains a single but empty entry. This is technically
- invalid (since it must end with `return'), but...
-
- Reported by Martin McBride.
-
-2008-05-14 Werner Lemberg <wl@gnu.org>
-
- Finish fix of scaling bug of CID-keyed CFF subfonts.
-
- * include/freetype/internal/ftcalc.h, src/base/ftcalc.c
- (FT_Matrix_Multiply_Scaled, FT_Vector_Transform_Scaled): New
- functions.
-
- * src/cff/cffobjs.h (CFF_Internal): New struct. It is used to
- provide global hinting data for both the top-font and all subfonts
- (with proper scaling).
-
- * src/cff/cffobjs.c (cff_make_private_dict): New function, using
- code from `cff_size_init'.
- (cff_size_init, cff_size_done, cff_size_select, cff_size_request):
- Use CFF_Internal and handle subfonts.
- (cff_face_init): Handle top-dict and subfont matrices correctly;
- apply some heuristic in case of unlikely matrix concatenation
- results. This has been discussed with people from Adobe (thanks
- goes mainly to David Lemon) who confirm that the CFF specs are fuzzy
- and not correct.
-
- * src/cff/cffgload.h (cff_decoder_prepare): Add `size' argument.
-
- * src/cff/cffgload.c (cff_builder_init): Updated.
- (cff_decoder_prepare): Handle hints globals for subfonts.
- Update all callers.
- (cff_slot_load): Handling scaling of subfonts properly.
-
- * src/cff/cffparse.c (cff_parse_fixed_dynamic): New function.
- (cff_parse_font_matrix): Use it.
-
- * src/cff/cfftypes.h (CFF_FontDictRec): Make `units_per_em'
- FT_ULong.
-
- * docs/CHANGES: Document it.
-
-2008-05-13 Werner Lemberg <wl@gnu.org>
-
- * src/winfonts/winfnt.c (fnt_face_get_dll_font, FNT_Face_Init):
- Handle case `face_index < 0'.
- * docs/CHANGES: Document it.
-
-2008-05-04 Werner Lemberg <wl@gnu.org>
-
- First steps to fix the scaling bug of CID-keyed CFF subfonts,
- reported by Ding Li on 2008/03/28 on freetype-devel.
-
- * src/base/cff/cffparse.c (power_tens): New array.
- (cff_parse_real): Rewritten to introduce a fourth parameter which
- returns the `scaling' of the real number so that we have no
- precision loss. This is not used yet.
- Update all callers.
- (cff_parse_fixed_thousand): Replace with...
- (cff_parse_fixed_scaled): This function. Update all callers.
-
-2008-05-03 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_Load_Glyph): Call the auto-hinter without
- transformation since it recursively calls FT_Load_Glyph. This fixes
- Savannah bug #23143.
-
-2008-04-26 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/psaux.h (T1_BuilderRec): Mark `scale_x'
- and `scale_y' as obsolete since they aren't used.
- * src/psaux/psobjs.c (t1_builder_init): Updated.
-
- * src/cff/cffgload.h (CFF_Builder): Mark `scale_x' and `scale_y' as
- obsolete since they aren't used.
- * src/cff/cffgload.c (cff_builder_init): Updated.
-
-2008-04-14 Werner Lemberg <wl@gnu.org>
-
- * src/pcf/pcfdrivr.c (PCF_Face_Init): Protect call to
- `FT_Stream_OpenLZW' with `FT_CONFIG_OPTION_USE_LZW'. From Savannah
- bug #22909.
-
-2008-04-13 Werner Lemberg <wl@gnu.org>
-
- * src/psaux/psconv.c (PS_Conv_ToFixed): Increase precision if
- integer part is zero.
-
-2008-04-01 Werner Lemberg <wl@gnu.org>
-
- Fix compilation with g++ 4.1 (with both `single' and `multi'
- targets).
-
- * src/base/ftobjs.c (FT_Open_Face): Don't define a variable in block
- which is crossed by a `goto'.
-
- * src/otvalid/otvalid.h (otv_MATH_validate): Add prototype.
-
-2008-03-31 Werner Lemberg <wl@gnu.org>
-
- Fix support for subsetted CID-keyed CFFs.
-
- * include/freetype/freetype.h (FT_FACE_FLAG_CID_KEYED,
- FT_IS_CID_KEYED): New macros.
-
- * src/cff/cffobjs.c (cff_face_init): Set number of glyphs to the
- maximum CID value in CID-keyed CFFs.
- Handle FT_FACE_FLAG_CID_KEYED flag.
-
- * docs/CHANGES: Document it.
-
-
- Fix CFF font matrix calculation and improve precision.
-
- * src/cff/cffparse.c (cff_parse_real): Increase precision if integer
- part is zero.
- (cff_parse_font_matrix): Simplify computation of `units_per_em';
- this prevents overflow also.
-
-
- Support FT_Get_CID_Registry_Ordering_Supplement for PS CID fonts.
-
- * src/cid/cidriver.c: Include FT_SERVICE_CID_H.
- (cid_get_ros): New function.
- (cid_service_cid_info): New service structure.
- (cid_services): Register it.
-
-2008-03-23 Werner Lemberg <wl@gnu.org>
-
- Adjustments for Visual C++ 8.0, as reported by Rainer Deyke.
-
- * builds/compiler/visualc.mk (CFLAGS): Remove /W5.
- (ANSIFLAGS): Add _CRT_SECURE_NO_DEPRECATE.
-
-2008-03-21 Laurence Darby <ldarby>
-
- * src/type1/t1objs.c (T1_Face_Init): Use `/Weight'. Patch from
- Savannah bug #22675.
-
-2008-03-13 Derek Clegg <dclegg@apple.com>
-
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): Fix named style loop.
- Patch from Savannah bug #22541.
-
-2008-03-03 Masatoshi Kimura <VYV03354@nifty.ne.jp>
-
- * src/sfnt/ttcmap.c (tt_cmap14_char_map_nondef_binary,
- tt_cmap14_find_variant): Return correct value.
- (tt_cmap14_variant_chars): Fix check for `di'.
-
-2008-02-29 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2008-02-29 Wolf
-
- Add build support for symbian platform. From Savannah bug #22440.
-
- * builds/symbian/*: New files.
-
-2008-02-21 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftmac.c (parse_fond): Fix a bug of PostScript font name
- synthesis. For any face of a specified FOND, always the name for
- the first face was used. Except of a FOND that refers multiple
- Type1 font files, wrong synthesized font names are not used at all,
- so this is an invisible bug. A few limit checks are added too.
-
- * builds/mac/ftmac.c: Ditto.
-
-2008-02-21 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/configure.raw: Split compiler option to link Carbon
- frameworks to one option for CoreServices framework and another
- option for ApplicationServices framework. The split options can be
- managed by GNU libtool to avoid unrequired duplication when FreeType
- is linked with other applications. Suggested by Daniel Macks,
- Savannah bug #22366.
-
-2008-02-18 Victor Stinner <victor.stinner@haypocalc.com>
-
- * src/truetype/ttinterp.c (Ins_IUP): Check number of points. Fix
- from Savannah bug #22356.
-
-2008-02-17 Jonathan Blow <jon@number-none.com>
-
- * src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph):
- Check for valid callback pointers.
-
-2008-02-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftmac.c (FT_New_Face_From_SFNT): Check the sfnt resource
- handle by its value instead of ResError(), fix provided by Deron
- Kazmaier. According to the Resource Manager Reference,
- GetResource(), Get1Resource(), GetNamedResource(),
- Get1NamedResource() and RGetResource() set noErr but return NULL
- handle when they can not find the requested resource. These
- functions never return undefined values, so it is sufficient to
- check if the handle is not NULL.
-
- * builds/mac/ftmac.c (FT_New_Face_From_SFNT): Ditto.
-
-2008-02-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftbase.c: <ftmac.c> is replaced by "ftmac.c" as other
- inclusion styles. Now it always includes src/base/ftmac.c;
- builds/mac/ftmac.c is never included in any configuration.
-
- * builds/unix/configure.raw: Print warning if configure is executed
- with options to specify Carbon functionalities explicitly.
-
- * docs/INSTALL.MAC: Note that legacy builds/mac/ftmac.c is not
- included automatically and manual replacement is required.
-
-2008-02-11 Werner Lemberg <wl@gnu.org>
-
- * builds/modules.mk (CLOSE_MODULE, REMOVE_MODULE), builds/detect.mk
- (dos_setup), builds/freetype.mk (clean_project_dos,
- distclean_project_dos): Don't use \ but $(SEP). Reported by Duncan
- Murdoch.
-
-2008-01-18 Sylvain Pasche <sylvain.pasche@gmail.com>
-
- * src/base/ftlcdfil.c (_ft_lcd_filter_legacy): Updated comment to
- mention intra-pixel algorithm.
-
- * include/freetype/freetype.h (FT_Render_Mode): Mention that
- FT_Library_SetLcdFilter can be used to reduce fringes.
-
-2008-01-16 Werner Lemberg <wl@gnu.org>
-
- * src/raster/ftraster.c (ft_black_render): Check `outline' before
- using it. Reported by Allan Yang.
-
-2008-01-12 Werner Lemberg <wl@gnu.org>
-
- * src/raster/ftraster.c (FT_CONFIG_OPTION_5_GRAY_LEVELS): Remove.
-
-2008-01-12 Allan Yang, Jian Hua - SH <Allan.Yang@fmc.fujitsu.com>
-
- * src/raster/ftraster.c (ft_black_init)
- [FT_RASTER_OPTION_ANTI_ALIASING]: Fix compilation.
-
-2008-01-10 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (load_truetype_glyph): Handle the case
- where the number of contours in a simple glyph is zero (and which
- does contain an entry in the `glyf' table). This fixes Savannah bug
- #21990.
-
-2008-01-04 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Formatting suggested by Sean McBride.
-
- * builds/mac/ftmac.c: Formatting (tab expanded).
- * src/autofit/afindic.c: Ditto.
- * src/base/ftcid.c: Ditto.
- * src/base/ftmac.c: Ditto.
-
-2007-12-30 Werner Lemberg <wl@gnu.org>
-
- * src/smooth/ftgrays.c (gray_raster_render): Check `outline'
- correctly.
-
-2007-12-21 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Improvement of POSIX resource-fork accessor to load unsorted
- references in a resource. In HelveLTMM (resource-fork PostScript
- Type1 font bundled with Mac OS X since 10.3.x), the appearance order
- of PFB chunks is not sorted; sorting the chunks by reference IDs is
- required.
-
- * include/freetype/internal/ftrfork.h (FT_RFork_Ref): New structure
- type to store a pair of reference ID and offset to the chunk.
-
- * src/base/ftrfork.c (ft_raccess_sort_ref_by_id): New function to
- sort FT_RFork_Ref by their reference IDs.
-
- (FT_Raccess_Get_DataOffsets): Returns an array of offsets that is
- sorted by reference ID.
-
-2007-12-14 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffparse.c (cff_parse_real): Don't apply `power_ten'
- division too early; otherwise the most significant digit(s) of the
- final result are lost as the value is truncated to an integer. This
- fixes Savannah bug #21794 (where the patch has been posted too).
-
-2007-12-06 Fix <4d876b82@gmail.com>
-
- Pass options from one configure script to another as-is (not
- expanded). This is needed for options like
- --includedir='${prefix}/include'.
-
- * builds/unix/detect.mk, configure: Prevent argument expansion in
- call to the (real) `configure' script.
-
-2007-12-06 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (load_truetype_glyph): Fix compilation if
- TT_USE_BYTECODE_INTERPRETER isn't defined.
-
-2007-12-06 Werner Lemberg <wl@gnu.org>
-
- There exist CFFs which contain opcodes for the Type 1 operators
- `hsbw' and `closepath' which are both invalid in Type 2 charstrings.
- However, it doesn't harm to support them.
-
- * src/cff/cffgload.c (CFF_Operator): Add `cff_op_hsbw' and
- `cff_op_closepath.'
- (cff_argument_counts): Ditto.
-
- (cff_decoder_parse_charstrings): Handle Type 1 opcodes 9 (closepath)
- and 13 (hsbw) which are invalid in Type 2 charstrings.
-
-2007-12-06 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftrfork.c (raccess_guess_darwin_newvfs): New function to
- support new pathname syntax `..namedfork/rsrc' to access a resource
- fork on Mac OS X. The legacy syntax `/rsrc' does not work on
- case-sensitive HFS+.
- (raccess_guess_darwin_hfsplus): Fix a bug in the calculation of
- buffer size to store a pathname.
- * include/freetype/internal/ftrfork.h: Increment the number of
- resource fork guessing rule.
-
-2007-12-06 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/configure.raw: Improve the compile tests to search
- Carbon functions.
- * builds/mac/ftmac.c: Import fixes for Carbon incompatibilities
- proposed by Sean McBride from src/base/ftmac.c (see 2007-11-16).
-
-2007-12-06 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- The documents and comments for Mac OS X are improved by Sean
- McBride.
-
- * src/base/ftmac.c: Fix a comment.
- * include/freetype/ftmac.h: Ditto.
- * docs/INSTALL.MAC: Improve English and add comment on lowest
- system version specified by MACOSX_DEPLOYMENT_TARGET.
-
-2007-12-04 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffload.c (cff_subfont_load): Don't use logical OR to
- concatenate error codes.
- * src/sfnt/ttsbit.c (Load_SBit_Range): Ditto.
-
-2007-12-04 Graham Asher <graham.asher@btinternet.com>
-
- * src/truetype/ttobjs.c (tt_face_init): Don't use logical OR to
- concatenate error codes.
-
-2007-12-04 Sean McBride <sean@rogue-research.com>
-
- * src/pfr/pfrgload.c (pfr_glyph_load_compound): Remove compiler
- warning.
-
-2007-11-20 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix MacOS legacy font support by Masatake Yamato on Mac OS X. It is
- not working since 2.3.5. In FT_Open_New(), if FT_New_Stream()
- cannot mmap() the specified file and cannot seek to head of the
- specified file, it returns NULL stream and FT_Open_New() returns the
- error immediately. On MacOS, most legacy MacOS fonts fall into such
- a scenario because their data forks are zero-sized and cannot be
- sought. To proceed to guessing of resource fork fonts, the
- functions for legacy MacOS font must properly handle the NULL stream
- returned by FT_New_Stream().
-
- * src/base/ftobjs.c (IsMacBinary): Return error
- FT_Err_Invalid_Stream_Operation immediately when NULL stream is
- passed.
- (FT_Open_Face): Even when FT_New_Stream() returns an error, proceed
- to fallback. Originally, legacy MacOS font is tested in the cases
- of FT_Err_Invalid_Stream_Operation (occurs when data fork is empty)
- or FT_Err_Unknown_File_Format (occurs when AppleSingle header or
- .dfont header is combined). Now the case of
- FT_Err_Cannot_Open_Stream is included.
-
- * src/base/ftrfork.c (FT_Raccess_Guess): When passed stream is NULL,
- skip FT_Stream_Seek(), which seeks to the head of stream, and
- proceed to unit testing of raccess_guess_XXX(). FT_Stream_Seek()
- for a NULL stream causes a Bus error on Mac OS X.
- (raccess_guess_apple_double): Return FT_Err_Cannot_Open_Stream
- immediately if passed stream is NULL.
- (raccess_guess_apple_single): Ditto.
-
-2007-11-16 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix for Carbon incompatibilities since Mac OS X 10.5,
- proposed by Sean McBride.
-
- * doc/INSTALL.MAC: Comment on MACOSX_DEPLOYMENT_TARGET.
-
- * include/freetype/ftmac.h: Deprecate FT_New_Face_From_FOND and
- FT_GetFilePath_From_Mac_ATS_Name. Since Mac OS X 10.5, calling
- Carbon functions from a forked process is classified as unsafe
- by Apple. All Carbon-dependent functions should be deprecated.
-
- * src/base/ftmac.c: Use essential header files
- <CoreServices/CoreServices.h> and
- <ApplicationServices/ApplicationServices.h> instead of
- all-in-one header file <Carbon/Carbon.h>.
-
- Include <sys/syslimits.h> and replace HFS_MAXPATHLEN by Apple
- genuine macro PATH_MAX.
-
- Add fallback macro for kATSOptionFlagsUnRestrictedScope which
- is not found in Mac OS X 10.0.
-
- Multi-character constants ('POST', 'sfnt' etc) are replaced by
- 64bit constants calculated by FT_MAKE_TAG() macro.
-
- For the index in the segment of resource fork, new portable
- type ResourceIndex is introduced for better compatibility.
- This type is since Mac OS X 10.5, so it is defined as short
- when built on older platforms.
-
- (FT_ATSFontGetFileReference): If build target is only the systems
- 10.5 and newer, it calls Apple genuine ATSFontGetFileReference().
-
- (FT_GetFile_From_Mac_ATS_Name): Return an error if system is 10.5
- and newer or 64bit platform, because legacy type FSSpec type is
- removed completely.
-
- (FT_New_Face_From_FSSpec): Ditto.
-
-2007-11-01 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfobjs.c (sfnt_done_face): Check `sfnt' everywhere. This
- fixes Savannah bug #21485.
-
-2007-10-29 Daniel Svoboda <dasvo@planeta@cz>
-
- * src/winfonts/winfnt.c (FNT_Face_Init): Check first that the driver
- can handle the font at all, then check `face_index'. Otherwise, the
- driver might return the wrong error code. This fixes Savannah bug
- #21468.
-
-2007-10-21 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Support bit 9 and prepare
- support for bit 8 of the `fsSelection' field in the `OS/2' table.
- MS is already using this; hopefully, this becomes part of OpenType
- 1.5.
- Prepare also support for `name' IDs 21 (WWS_FAMILY) and 22
- (WWS_SUBFAMILY).
-
-2007-10-20 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py (html_header_2): Fix typo.
- Add `td.left' element to CSS.
- (toc_section_enter): Use it.
-
-2007-10-18 David Turner <david@freetype.org>
-
- * include/freetype/freetype.h, src/base/ftobjs.c: Rename API
- functions related to cmap type 14 support to the
- `FT_Object_ActionName' scheme:
-
- FT_Get_Char_Variant_Index -> FT_Face_GetCharVariantIndex
- FT_Get_Char_Variant_IsDefault -> FT_Face_GetCharVariantIsDefault
- FT_Get_Variant_Selectors -> FT_Face_GetVariantSelectors
- FT_Get_Variants_Of_Char -> FT_Face_GetVariantsOfChar
- FT_Get_Chars_Of_Variant -> FT_Face_GetCharsOfVariant
-
- Update documentation accordingly.
-
- * src/sfnt/ttcmap.c: Stronger cmap 14 validation.
- Make the code a little more consistent with FreeType coding
- conventions and modify the cmap14 functions that returned a newly
- allocated array to use a persistent vector from the TT_CMap14 object
- instead.
-
- (TT_CMap14Rec): Provide array and auxiliary data for result.
- (tt_cmap14_done, tt_cmap14_ensure): New functions.
-
- (tt_cmap14_init, tt_cmap14_validate, tt_cmap14_char_map_def_binary,
- tt_cmap14_char_map_nondef_binary, tt_cmap14_find_variant,
- tt_cmap14_char_var_index, tt_cmap14_variants,
- tt_cmap14_char_variants, tt_cmap14_def_char_count,
- tt_cmap14_get_def_chars, tt_cmap14_get_nondef_chars,
- tt_cmap14_variant_chars, tt_cmap14_class_rec): Updated and improved.
-
-2007-10-15 George Williams <gww@silcom.com>
-
- Add support for cmap type 14.
-
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (TT_CONFIG_CMAP_FORMAT_14): New macro.
-
- * include/freetype/internal/ftobjs.h (FT_CMap_CharVarIndexFunc,
- FT_CMap_CharVarIsDefaultFunc, FT_CMap_VariantListFunc,
- FT_CMap_CharVariantListFunc, FT_CMap_VariantCharListFunc): New
- support function prototypes.
- (FT_CMap_ClassRec): Add them.
- Update all users.
-
- * include/freetype/ttnameid.h (TT_APPLE_ID_VARIANT_SELECTOR): New
- macro.
-
- * include/freetype/freetype.h (FT_Get_Char_Variant_Index,
- FT_Get_Char_Variant_IsDefault, FT_Get_Variant_Selectors,
- FT_Get_Variants_Of_Char, FT_Get_Chars_Of_Variant): New API
- functions.
-
- * src/base/ftobjs.c (find_variant_selector_charmap): New auxiliary
- function.
- (FT_Set_Charmap): Disallow cmaps of type 14.
- (FT_Get_Char_Variant_Index, FT_Get_Char_Variant_IsDefault,
- FT_Get_Variant_Selectors, FT_Get_Variants_Of_Char,
- FT_Get_Chars_Of_Variant): New API functions.
-
- * src/sfnt/ttcmap.c (TT_PEEK_UINT24, TT_NEXT_UINT24): New macros.
-
- (TT_CMap14Rec, tt_cmap14_init, tt_cmap14_validate,
- tt_cmap14_char_index, tt_cmap14_char_next, tt_cmap14_get_info,
- tt_cmap14_char_map_def_binary, tt_cmap14_char_map_nondef_binary,
- tt_cmap14_find_variant, tt_cmap14_char_var_index,
- tt_cmap14_char_var_isdefault, tt_cmap14_variants,
- tt_cmap14_char_variants, tt_cmap14_def_char_count,
- tt_cmap14_get_def_chars, tt_cmap14_get_nondef_chars,
- tt_cmap14_variant_chars, tt_cmap14_class_rec): New functions and
- structures for cmap 14 support.
- (tt_cmap_classes): Register tt_cmap14_class_rec.
- (tt_face_build_cmaps): One more error message.
-
- * docs/CHANGES: Mention cmap 14 support.
-
-2007-10-01 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (find_unicode_charmap): If search for a UCS-4
- charmap fails, do the loop again while searching a UCS-2 charmap.
- This favours MS charmaps over Apple ones.
-
-2007-08-29 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftmac.c: Introduction of abstract `short' data types,
- ResFileRefNum and ResID. These types were introduced for Copland,
- then backported to MPW. The variables exchanged with FileManager
- QuickDraw frameworks are redefined by these data types. Patch was
- proposed by Sean McBride.
- * builds/mac/ftmac.c: Ditto.
-
-2007-08-18 Werner Lemberg <wl@gnu.org>
-
- * src/otvalid/otvcommn.c (otv_x_y_ux_sy): Skip context glyphs. Found
- by Imran Yousaf. Fixes Savannah bug #20773.
-
- (otv_Lookup_validate): Correct handling of LookupType. Found by
- Imran Yousaf. Fixes Savannah bug #20782.
-
-2007-08-17 George Williams <gww@silcom.com>
-
- * src/otvalid/otvgsub.c (otv_SingleSubst_validate): Fix handling of
- SingleSubstFormat1.
-
-2007-08-11 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/configure.raw: Fix a bug which sets CC_BUILD by
- ${build-gcc} (unchecked) instead of by ${build}-gcc (checked).
- Found by Ryan Hill.
-
-2007-08-11 George Williams <gww@silcom.com>
-
- * src/otvalid/otvcommn.c, src/otvalid/otvcommn.h
- (otv_Coverage_validate): Add fourth argument to pass an expected
- count value. Update all users.
- Check glyph IDs.
- (otv_ClassDef_validate): Check `StartGlyph'.
-
- * src/otvalid/otvgsub.c (otv_SingleSubst_validate): More glyph ID
- checks.
-
- * src/otvalid/otvmath.c (otv_MathConstants_validate): There are only
- 56 constants.
- (otv_GlyphAssembly_validate, otv_MathGlyphConstruction_validate):
- Check glyph IDs.
-
-2007-08-08 Werner Lemberg <wl@gnu.org>
-
- * src/otvalid/otvbase.c, src/otvalid/otvcommn.c,
- src/otvalid/otvgdef.c, src/otvalid/otvgpos.c, src/otvalid/otvgsub.c,
- src/otvalid/otvjstf.c: s/FT_INVALID_DATA/FT_INVALID_FORMAT/ where
- appropriate. Reported by George.
-
- * include/freetype/internal/fttrace.h: Define `trace_otvmath'.
-
- * src/otvalid/rules.mk (OTV_DRV_SRC): Add otvmath.c.
-
- * docs/CHANGES: Updated.
-
-2007-08-08 George Williams <gww@silcom.com>
-
- Add `MATH' validating support to otvalid module.
-
- * include/freetype/tttags.h (TTAG_MATH): New macro.
- * include/freetype/ftotval.h (FT_VALIDATE_MATH): New macro.
- (FT_VALIDATE_OT): Updated.
-
- * src/otvalid/otvmath.c: New file.
-
- * src/otvalid/otvalid.c: Include otvmath.c.
- * src/otvalid/otvmod.c (otv_validate): Handle `MATH' table.
-
-2007-08-04 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/configure.raw: Add call to AC_LIBTOOL_WIN32_DLL.
- Fixes Savannah bug #20686.
-
-2007-08-03 Werner Lemberg <wl@gnu.org>
-
- * src/psnames/psmodule.c: Fix usage of
- FT_CONFIG_OPTION_POSTSCRIPT_NAMES macro. Reported by Graham Asher.
-
-2007-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftmac.c (open_face_from_buffer): The argument
- `driver_name' is typed as `const char*' to match with the
- callers in FT_New_Face_From_LWFN and FT_New_Face_From_SFNT.
- This is same with open_face_from_buffer in src/base/ftobjs.c.
- Found and fixed by Sean McBride.
-
-2007-07-28 Werner Lemberg <wl@gnu.org>
-
- * src/raster/ftraster.c (count_table): Make it conditional.
- * src/base/ftobjs.c (FT_New_Library): Check FT_RENDER_POOL_SIZE with
- a preprocessor statement.
-
-2007-07-27 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftoutln.c (FT_Outline_Translate): Check `outline' before
- first usage. From Savannah patch #6115.
-
-2007-07-16 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2007-07-16 Derek Clegg <dclegg@apple.com>
-
- Add new service for getting the ROS from a CID font.
-
- * include/freetype/config/ftheader.h (FT_CID_H): New macro.
- * include/freetype/ftcid.h: New file.
-
- * include/freetype/internal/ftserv.h (FT_SERVICE_CID_H): New macro.
- * include/freetype/internal/services/svcid.h: New file.
-
- * src/base/ftcid.c: New file.
-
- * src/cff/cffdrivr.c: Include FT_SERVICE_CID_H.
- (cff_get_ros): New function.
- (cff_service_cid_info): New service structure.
- (cff_services): Register it.
-
- * src/cff/cffload.c (cff_font_done): Free registry and ordering.
-
- * src/cff/cfftypes.h (CFF_FontRec): Add `registry' and `ordering'.
-
- * modules.cfg (BASE_EXTENSIONS): Add ftcid.c.
-
-2007-07-11 Derek Clegg <dclegg@apple.com>
-
- Add support for postscript name service to CFF driver.
-
- * src/cff/cffdrivr.c: Include FT_SERVICE_POSTSCRIPT_NAME_H.
- (cff_get_ps_name): New function.
- (cff_service_ps_name): New service structure.
- (cff_services): Register it.
-
-2007-07-07 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftglyph.c (FT_Glyph_Copy): Fix initialization of
- `target'. Reported by Sean McBride.
-
-2007-07-06 Werner Lemberg <wl@gnu.org>
-
- * src/pfr/pfrcmap.c: Include pfrerror.h.
-
- * src/autofit/afindic.c: Add some external declarations to pacify
- `make multi' compilation.
-
- * src/cid/cidgload.c (cid_load_glyph): Pacify compiler.
-
- * src/cff/cffdrivr.c (cff_ps_get_font_info), src/cff/cffobjs.c
- (cff_strcpy), include/freetype/internal/ftmemory.h (FT_MEM_STRDUP),
- src/autofit/aflatin.c (af_latin_hints_compute_edges),
- src/autofit/afcjk.c (af_cjk_hints_compute_edges), src/sfnt/ttmtx.c
- (tt_face_get_metrics), src/base/ftobjs.c (open_face)
- [FT_CONFIG_OPTION_INCREMENTAL]: Fix compilation with C++ compiler.
-
- * docs/release: Mention test compilation targets.
-
-2007-07-04 Werner Lemberg <wl@gnu.org>
-
- * docs/PROBLEMS: Mention that some PS based fonts can't be
- handled correctly by FreeType.
-
- * src/truetype/ttgload.c (load_truetype_glyph): Always allow a
- recursion depth of 1. This was the maximum value in TrueType 1.0,
- and some older fonts don't set this field correctly.
-
- * src/gxvalid/gxvmort1.c
- (gxv_mort_subtable_type1_substTable_validate): Fix tracing message.
-
-2007-07-03 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Initialize
- `round' to pacify compiler.
-
-2007-07-02 Werner Lemberg <wl@gnu.org>
-
-
- * Version 2.3.5 released.
- =========================
-
-
- Tag sources with `VER-2-3-5'.
-
- * docs/CHANGES, docs/VERSION.DLL: Update documentation and bump
- version number to 2.3.5.
-
- * README, Jamfile (RefDoc), builds/win32/visualc/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj: s/2.3.4/2.3.5/, s/234/235/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 5.
-
- * builds/unix/configure.raw (version_info): Set to 9:16:3.
-
-2007-07-01 David Turner <david@freetype.org>
-
- * include/freetype/freetype.h, src/base/ftpatent.c
- (FT_Face_SetUnpatentedHinting): New function to dynamically change
- the setting after a face is created.
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Fix a small bug
- that created distortions in the bytecode interpreter results.
-
-2007-06-30 David Turner <david@freetype.org>
-
- * src/truetype/ttinterp.c (Ins_IUP): Add missing variable
- initialization.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Get rid of an
- infinite loop in the case of degenerate fonts.
-
-2007-06-26 Rahul Bhalerao <b.rahul.pm@gmail.com>
-
- Add autofit module for Indic scripts. This currently just reuses
- the CJK-specific functions.
-
- * include/freetype/config/ftoption.h (AF_CONFIG_OPTION_INDIC): New
- macro.
- * devel/ftoption.h: Synchronize with
- include/freetype/config/ftoption.h.
-
- * src/autofit/afindic.c, src/autofit/afindic.h: New files.
-
- * src/autofit/afglobal.c, src/autofit/aftypes.h,
- src/autofit/autofit.c: Updated.
-
- * src/autofit/Jamfile (_sources), * src/autofit/rules.mk
- (AUTOF_DRV_SRC): Updated.
-
-2007-06-23 David Turner <david@freetype.org>
-
- * src/truetype/ttgload.c (TT_Load_Simple): Fix change from
- 2007-06-16 that prevented the TrueType module from loading most
- glyphs.
-
-2007-06-20 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffgload.c (cff_slot_load): Fix logic of 2007-05-28
- change.
-
-2007-06-19 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_encoding): Handle one more error.
-
-2007-06-19 Dmitry Timoshkov <dmitry@codeweavers.com>
-
- * src/winfonts/winfnt.c (fnt_face_get_dll_font): Return error
- FNT_Err_Invalid_File_Format if file format was recognized but
- the file doesn't contain any FNT(NE) or RT_FONT(PE) resources.
- Add verbose debug logs to make it easier to debug failing load
- attempts.
- (FNT_Face_Init): A single FNT font can't contain more than 1 face,
- so return an error if requested face index is > 0.
- Do not do further attempt to load fonts if a previous attempt has
- failed but returned error FNT_Err_Invalid_File_Format, i.e., the
- file format has been recognized but no fonts found in the file.
-
-2007-07-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftmac.c: Apply patches proposed by Sean McBride.
- (FT_GetFile_From_Mac_Name): Insert FT_UNUSED macros to fix
- the compiler warnings against unused arguments.
- (FT_ATSFontGetFileReference): Ditto.
- (FT_GetFile_From_Mac_ATS_Name): Ditto.
- (FT_New_Face_From_FSSpec): Ditto.
- (lookup_lwfn_by_fond): Fix wrong comment.
- Replace `const StringPtr' by more appropriate type
- `ConstStr255Param'.
- FSRefMakePathPath always returns UTF8 POSIX pathname in
- Mach-O, thus HFS pathname support is dropped.
- (count_faces): Remove HLock and HUnlock which is not
- required on Mac OS X anymore.
- (FT_New_Face_From_SFNT): Ditto.
- (FT_New_Face_From_FOND): Ditto.
- * builds/mac/ftmac.c: Synchronize to src/base/ftmac.c,
- except of HFS pathname support and HLock/HUnlock.
- They are required on classic CFM environment.
-
-2007-06-18 Werner Lemberg <wl@gnu.org>
-
- * src/psaux/psobjs.c (ps_parser_skip_PS_token): Remove incorrect
- assertion.
- (ps_parser_to_bytes): Fix error message.
-
- * src/type42/t42objs.c (T42_Open_Face): Handle one more error.
- * src/type42/t42parse.c (t42_parse_sfnts): s/alloc/allocated/.
- Don't allow mixed binary and hex strings.
- Handle string_size == 0 and string_buf == 0.
- (t42_parse_encoding): Handle one more error.
-
-2007-06-18 Werner Lemberg <wl@gnu.org>
-
- * src/psaux/psobjs.c (ps_tofixedarray, ps_tocoordarray): Fix exit
- logic.
- (ps_parser_load_field) <T1_FIELD_TYPE_BBOX>: Skip delimiters
- correctly.
- (ps_parser_load_field_table): Use `fields->array_max' instead of
- T1_MAX_TABLE_ELEMENTS to limit the number of arguments.
-
- * src/cff/cffgload.c (cff_decoder_prepare): Fix change from
- 2007-06-06.
-
-2007-06-17 Werner Lemberg <wl@gnu.org>
-
- * src/tools/ftrandom.c (font_size): New global variable.
- (TestFace): Use it.
- (main): Handle new option `--size' to set `font_size'.
- (Usage): Updated.
-
- * src/winfonts/winfnt.c (fnt_face_get_dll_font): Exit in case of
- invalid font.
- (FNT_Load_Glyph): Protect against invalid bitmap width.
-
-2007-06-16 David Turner <david@freetype.org>
-
- * src/smooth/ftgrays.c (gray_find_cell, gray_set_cell, gray_hline):
- Prevent integer overflows when rendering very large outlines.
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Check the
- well-formedness of the contours array when loading a glyph.
-
- * src/truetype/ttinterp.c (TT_Load_Context): Initialize `zp0', `zp1',
- and `zp2'.
- (Ins_IP): Check argument ranges to reject bogus operations properly.
- (IUP_WorkerRec): Add `max_points' member.
- (_iup_worker_interpolate): Check argument ranges.
- (Ins_IUP): Ignore empty outlines.
-
-2007-06-16 Dmitry Timoshkov <dmitry@codeweavers.com>
-
- * src/winfonts/winfnt.h: Add necessary structures for PE resource
- parsing.
- (WinPE32_HeaderRec): New structure.
- (WinPE32_SectionRec): New structure.
- (WinPE_RsrcDirRec): New structure.
- (WinPE_RsrcDirEntryRec): New structure.
- (WinPE_RsrcDataEntryRec): New structure.
- (FNT_FontRec): Remove unused `size_shift' field.
-
- * src/winfonts/winfnt.c (fnt_face_get_dll_font): Add support for
- loading bitmap .fon files in PE format.
-
-2007-06-15 Dmitry Timoshkov <dmitry@codeweavers.com>
-
- * builds/win32/ftdebug.c: Unify debug level handling with other
- platforms.
-
-2007-06-14 Dmitry Timoshkov <dmitry@codeweavers.com>
-
- * builds/win32/ftdebug.c (FT_Message): Send debug output to the
- console as well as to the debugger.
-
-2007-06-14 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/aflatin.c (af_latin_uniranges): Expand structure to
- cover all ranges which could possibly be handled by the aflatin
- module (since the default fallback for unknown ranges is now the
- afcjk module). It might be necessary to fine-tune this further by
- splitting off modules for Greek, Cyrillic, or other blocks.
-
-2007-06-11 David Turner <david@freetype.org>
-
- * src/autofit/aflatin.c (af_latin_hints_link_segments): Fix
- incorrect segment linking computation. This was the root cause of
- Savannah bug #19565.
-
-
- * src/autofit/* [FT_OPTION_AUTOFIT2]: Some very experimental changes
- to improve the Latin auto-hinter. Note that the new code is
- disabled by default since it is not stabilized yet.
-
- * src/autofit/aflatin2.c, src/autofit/aflatin2.h: New files
- (disabled currently).
-
- * src/autofit/afhints.c: Remove dead code.
- (af_axis_hints_new_edge): Add argument to handle segment directions.
- (af_edge_flags_to_string): New function.
- (af_glyph_hints_dump_segments, af_glyph_hints_dump_edges): Handle
- option flags.
- (af_glyph_hints_reload): Add argument to handle inflections.
- Simplify.
- (af_direction_compute): Fine tuning.
- (af_glyph_hints_align_edge_points): Fix logic.
- (af_glyph_hints_align_strong_points): Do linear search for small
- edge counts.
- (af_glyph_hints_align_weak_points): Skip any touched neighbors.
- (af_iup_shift): Handle zero `delta'.
-
- * src/autofit/afhints.h: Updated.
- (AF_SORT_SEGMENTS): New macro (disabled).
- (AF_AxisHintsRec) [AF_SORT_SEGMENTS]: New member `mid_segments'.
-
- * src/autofit/afglobal.c (af_face_globals_get_metrics): Add
- argument to pass option flags for handling scripts.
- * src/autofit/afglobal.h: Updated.
-
- * src/autofit/afcjk.c: Updated.
- * src/autofit/aflatin.c: Updated.
- (af_latin_metrics_scale_dim): Don't reduce scale by 2%.
-
- (af_latin_hints_compute_segments) [AF_HINT_METRICS]: Remove dead code.
- (af_latin_hints_compute_edges) [AF_HINT_METRICS]: Remove dead code.
- Don't set `edge->dir'
- (af_latin_hint_edges): Add more logging.
-
- * src/autofit/afloader.c: Updated.
-
-2007-06-11 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Document FT_Face_CheckTrueTypePatents.
-
-2007-06-10 David Turner <david@freetype.org>
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Slight speed-up to
- the TrueType glyph loader.
-
- * include/freetype/config/ftoption.h: Clarify documentation
- regarding unpatented hinting.
-
-
- Add new `FT_Face_CheckTrueTypePatents' API.
-
- * include/freetype/freetype.h (FT_Face_CheckTrueTypePatents): New
- declaration.
-
- * include/freetype/internal/services/svttglyf.h,
- src/base/ftpatent.c: New files.
-
- * include/freetype/internal/ftserv.h (FT_SERVICE_TRUETYPE_GLYF_H):
- New macro.
-
- * src/truetype/ttdriver.c: Include FT_SERVICE_TRUETYPE_GLYF_H and
- `ttpload.h'.
- (tt_service_truetype_glyf): New service structure.
- (tt_services): Register it.
-
- * modules.cfg (BASE_EXTENSIONS), src/base/Jamfile (_sources): Add
- `ftpatent.c'.
-
-2007-06-08 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Undo change from 2007-04-28.
- Fonts without a cmap must be handled correctly by FreeType (anything
- else would be a bug).
-
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
- [FT_DEBUG_LEVEL_TRACE]: Improve tracing message.
-
-2007-06-07 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttsbit0.c (tt_sbit_decoder_init,
- tt_sbit_decoder_load_image): Protect against integer overflows.
-
-
- * src/pfr/pfrgload.c (pfr_glyph_load_simple): More bounding checks
- for `x_control' and `y_control'.
-
-2007-06-06 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftoutln.c (FT_Outline_Decompose): Check `last'.
-
-
- * src/pfr/pfrcmap.c (pfr_cmap_init): Convert assertion into normal
- FreeType error.
-
-
- * src/winfonts/winfnt.c (fnt_face_get_dll_font): Do a rough check of
- `font_count'.
-
-
- * src/type1/t1load.c (parse_font_matrix): Check `temp_scale'.
-
-
- * src/cff/cffgload.c (cff_decoder_prepare): Change return type to
- `FT_Error'.
- Check `fd_index'.
- (cff_slot_load): Updated.
- * src/cff/cffgload.h: Updated.
-
-2007-06-05 Werner Lemberg <wl@gnu.org>
-
- * src/pfr/pfrgload.c (pfr_glyph_done): Comment out unused code.
- (pfr_glyph_load_simple): Convert assertion into normal FreeType
- error.
- Check `idx'.
- (pfr_glyph_load_compound, pfr_glyph_curve_to, pfr_glyph_line_to):
- Convert assertion into normal FreeType error.
-
- * src/pfr/pfrtypes.h (PFR_GlyphRec): Comment out unused code.
-
-
- * src/winfonts/winfnt.c (FNT_Face_Init): Check `family_size'.
-
-
- * src/psaux/psobjs.c (ps_tocoordarray, ps_tofixedarray): Return -1
- in case of parsing error.
- (ps_parser_load_field): Updated.
-
- * src/type1/t1load.c (parse_font_matrix): Updated.
-
-2007-06-04 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidgload.c (cid_load_glyph): Check `fd_select'.
-
- * src/tools/ftrandom/Makefile: Depend on `libfreetype.a'.
-
-2007-06-03 Werner Lemberg <wl@gnu.org>
-
- * src/tools/ftrandom/*: Add the `ftrandom' test program written by
- George Williams (with some modifications).
-
-2007-06-03 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (destroy_charmaps), src/type1/t1objs.c
- (T1_Face_Done), src/winfonts/winfnt.c (FNT_Face_Done): Check for
- face == NULL. Suggested by Graham Asher.
-
-2007-06-03 Ismail Dönmez <ismail@pardus.org.tr>
-
- * src/base/ftobjs.c (FT_Request_Metrics): Fix compiler warning.
-
-2007-06-02 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/fterrdef.h (FT_Err_Corrupted_Font_Header,
- FT_Err_Corrupted_Font_Glyphs): New error codes for BDF files.
-
- * src/bdf/bdflib.c (bdf_load_font): Use them.
-
- * src/bdf/bdflib.c (_bdf_parse_start): Check `FONT' better.
-
-2007-06-01 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_Request_Metrics), src/cache/ftccmap.c
- (FTC_CMapCache_Lookup): Remove unused code.
-
-2007-06-01 Sean McBride <sean@rogue-research.com>
-
- * src/truetype/ttinterp.c (Null_Vector, NULL_Vector): Removed,
- unused.
-
-2007-06-01 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidparse.c (cid_parser_new): Don't continue second search
- pass for `StartData' if an error has occurred.
- Exit properly if no `StartData' has been seen at all.
-
- * builds/unix/ftsystem.c (FT_Stream_Open): Don't use ULONG_MAX but
- LONG_MAX to avoid compiler warning. Suggested by Sean McBride.
-
-2007-05-30 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_subrs, parse_charstrings): Protect
- against too small binary data strings.
-
- * src/bdf/bdflib.c (_bdf_parse_glyphs): Check `STARTCHAR' better.
-
-2007-05-28 David Turner <david@freetype.org>
-
- * src/cff/cffgload.c (cff_slot_load): Do not apply the identity
- transformation. This significantly reduces the loading time of CFF
- glyphs.
-
- * docs/CHANGES: Updated.
-
- * src/autofit/afglobal.c (AF_SCRIPT_LIST_DEFAULT): Change default
- hinting script to CJK, since it works well with more scripts than
- latin. Thanks to Rahul Bhalerao <b.rahul.pm@gmail.com> for pointing
- this out!
-
-2007-05-25 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2007-05-24 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttobjs.h (tt_size_ready_bytecode): Move declaration
- into TT_USE_BYTECODE_INTERPRETER preprocessor block.
-
-2007-05-24 Graham Asher <graham.asher@btinternet.com>
-
- * src/truetype/ttobjs.c (tt_size_ready_bytecode)
- [!TT_USE_BYTECODE_INTERPRETER]: Removed. Unused.
-
-2007-05-22 David Turner <david@freetype.org>
-
- * src/truetype/ttgload.c (load_truetype_glyph): Fix last change to
- avoid crashes in case the bytecode interpreter is not used.
-
-
- Avoid heap blowup with very large .Z font files. This fixes
- Savannah bug #19910.
-
- * src/lzw/ftzopen.h (FT_LzwStateRec): Remove `in_cursor',
- `in_limit', `pad', `pad_bits', and `in_buff' members.
- Add `buf_tab', `buf_offset', `buf_size', `buf_clear', and
- `buf_total' members.
-
- * src/lzw/ftzopen.c (ft_lzwstate_get_code): Rewritten. It now takes
- only one argument.
- (ft_lzwstate_refill, ft_lzwstate_reset, ft_lzwstate_io): Updated.
-
-2007-05-20 Ismail Dönmez <ismail@pardus.org.tr>
-
- * src/pshinter/pshrec.c (ps_mask_table_set_bits): Add `const'.
- (ps_dimension_set_mask_bits): Remove `const'.
-
-2007-05-19 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttmtx.c (tt_face_get_metrics)
- [!FT_CONFIG_OPTION_OLD_INTERNALS]: Another type-punning fix.
-
-2007-05-19 Derek Clegg <dclegg@apple.com>
-
- Savannah patch #5929.
-
- * include/freetype/tttables.h, src/base/ftobjs.c
- (FT_Get_CMap_Format): New function.
-
- * include/freetype/internal/services/svttcmap.c (TT_CMapInfo): Add
- `format' member.
- * src/sfnt/ttcmap.c (tt_cmap{0,2,4,6,8,10,12}_get_info): Set
- cmap_info->format.
-
-2007-05-19 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (load_truetype_glyph): Save graphics state
- before handling subglyphs so that it can be reinitialized each time.
- This fixes Savannah bug #19859.
-
-2007-05-16 Werner Lemberg <wl@gnu.org>
-
- * src/cache/ftccache.c (ftc_node_mru_link, ftc_node_mru_unlink),
- src/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP), src/cache/ftcglyph.h
- (FTC_GCACHE_LOOKUP_CMP), src/pshinter/pshmod.c (ps_hinter_init),
- src/sfnt/ttmtx.c (tt_face_load_hmtx, tt_face_load_hhea,
- tt_face_get_metrics): Fix type-punning issues.
-
-2007-05-15 David Turner <david@freetype.org>
-
- * include/freetype/config/ftstdlib.h,
- include/freetype/internal/ftobjs.h: As suggested by Graham Asher,
- ensure that ft_isalnum, ft_isdigit, etc., use hard-coded values
- instead of relying on the locale-dependent functions provided by
- <ctypes.h>.
-
-2007-05-15 Graham Asher <graham.asher@btinternet.com>
-
- * src/autofit/afcjk.c (af_cjk_hints_compute_edges): Remove unused
- variable.
- * src/autofit/afloader.c (af_loader_load_g): Ditto.
-
- * src/base/ftobjs.c (ft_validator_error): Use `ft_jmp_buf'.
- (open_face_from_buffer): Initialize `stream'.
- (FT_Request_Metrics): Remove unused variable.
- Remove redundant `break' statements.
- (FT_Get_Track_Kerning): Remove unused variable.
-
- * src/psaux/afmparse.c (afm_parse_track_kern, afm_parse_kern_pairs,
- afm_parse_kern_data): Remove redundant
- `break' statements.
- (afm_parser_parse): Ditto.
- Don't use uninitialized variables.
-
- * src/psnames/psmodule.c (VARIANT_BIT): Define as unsigned long.
- Use `|' operator instead of `^' to set it.
- Update all users.
-
- * src/sfnt/ttcmap.c (tt_face_build_cmaps): Use `ft_jmp_buf'.
- * src/sfnt/ttkern.c (tt_face_load_kern): Remove unused variable.
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Remove redundant
- comparison.
- (TT_Process_Simple_Glyph): Use FT_UInt for `n_points' and `i'.
- (TT_Load_Glyph): Remove unused variable.
-
-2007-05-13 Derek Clegg <dclegg@apple.com>
-
- * src/base/ftobjs.c (FT_New_Library): Only allocate rendering pool
- if FT_RENDER_POOL_SIZE is > 0. From Savannah patch #5928.
-
-2007-05-11 David Turner <david@freetype.org>
-
- * src/cache/ftcbasic.c, include/freetype/ftcache.h
- (FTC_ImageCache_LookupScaler, FTC_SBit_Cache_LookupScaler): Two new
- functions that allow us to look up glyphs using an FTC_Scaler object
- to specify the size, making it possible to use fractional pixel
- sizes.
-
- * src/truetype/ttobjs.c (tt_size_ready_bytecode): Set
- `size->cvt_ready'. Reported by Boris Letocha.
-
-2007-05-09 Graham Asher <graham.asher@btinternet.com>
-
- * src/truetype/ttinterp.c (Ins_IP), src/autofit/aflatin.c
- (af_latin_metrics_scale_dim): Fix compiler warnings.
-
-2007-05-06 Werner Lemberg <wl@gnu.org>
-
- * builds/win32/visualce/freetype.sln: Removed, as requested by
- Vincent.
-
-2007-05-04 Vincent RICHOMME <richom.v@free.fr>
-
- * builds/win32/visualce/*: Add Visual C++ project files for Pocket
- PC targets.
-
- * docs/CHANGES: Document them.
-
-2007-05-04 <harry@kdevelop.org>
-
- * builds/unix/ftsystem.c (FT_Stream_Open): Handle return value 0 of
- mmap (which might happen on some RTOS). From Savannah patch #5909.
-
-2007-05-03 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_Set_Char_Size): Simplify code.
- * include/freetype/freetype.h (FT_Set_Char_Size): Update
- documentation.
-
-2007-04-28 Victor Stinner <victor.stinner@inl.fr>
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Check error code after loading
- `cmap'.
-
-2007-04-27 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Check for negative
- number of points in contours. Problem reported by Victor Stinner
- <victor.stinner@haypocalc.com>.
- (TT_Process_Simple_Glyph): Synchronize variable types.
-
-2007-04-26 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftglyph.c (FT_Glyph_Copy): Always set second argument to
- zero in case of error. This fixes Savannah bug #19689.
-
-2007-04-25 Boris Letocha <b.letocha@cz.gmc.net>
-
- * src/truetype/ttobjs.c: Fix a typo that created a speed regression
- in the TrueType bytecode loader.
-
-2007-04-10 Martin Horak <horakm@centrum.cz>
-
- * src/sfnt/sfobjs.c (sfnt_load_face) [FT_CONFIG_OPTION_INCREMENTAL]:
- Ignore `hhea' table. This fixes Savannah bug #19261.
-
-2007-04-09 Werner Lemberg <wl@gnu.org>
-
-
- * Version 2.3.4 released.
- =========================
-
-
- Tag sources with `VER-2-3-4'.
-
- * docs/CHANGES, docs/VERSION.DLL: Update documentation and bump
- version number to 2.3.4.
-
- * README, Jamfile (RefDoc), builds/win32/visualc/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj: s/2.3.3/2.3.4/, s/233/234/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 4.
-
- * builds/unix/configure.raw (version_info): Set to 9:15:3.
-
-2007-04-09 Martin Horak <horakm@centrum.cz>
-
- * src/truetype/ttgload.c (load_truetype_glyph): Save and restore
- memory stream to avoid a crash with the incremental memory
- interface (Savannah bug #19260).
-
-2007-04-06 David Turner <david@freetype.org>
-
- * src/base/ftbitmap.c (ft_bitmap_assure_buffer): Fix buffer-overwrite
- bug (Savannah bug #19536).
-
-2007-04-04 Werner Lemberg <wl@gnu.org>
-
-
- * Version 2.3.3 released.
- =========================
-
-
- Tag sources with `VER-2-3-3'.
-
- * docs/CHANGES: Mention CVE-2007-1351.
-
-2007-04-03 David Turner <david@freetype.org>
-
- * src/base/ftobjs.c (FT_Set_Char_Size): As suggested by James Cloos,
- if one of the resolution values is 0, treat it as if it were the
- same as the other value.
-
-2007-04-02 David Turner <david@freetype.org>
-
- Add special code to detect `extra-light' fonts and do not snap their
- stem widths too much to avoid bizarre hinting effects.
-
- * src/autofit/aflatin.h (AF_LatinAxisRec): Add `standard_width' and
- `extra_light' members.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_widths): Initialize
- them.
- (af_latin_metrics_scale_dim): Set `extra_light'.
- (af_latin_compute_stem_width): Use `extra_light'.
-
-2007-03-28 David Turner <david@freetype.org>
-
- * src/base/ftbitmap.c (ft_bitmap_assure_buffer): Fix zero-ing of the
- padding.
-
-2007-03-28 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdflib.c (setsbit, sbitset): Handle values >= 128
- gracefully.
- (_bdf_set_default_spacing): Increase `name' buffer size to 256 and
- issue an error for longer names. This fixes CVE-2007-1351.
- (_bdf_parse_glyphs): Limit allowed number of glyphs in font to the
- number of code points in Unicode.
-
- * builds/win32/visualc/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj, README: s/2.3.2/2.3.3/,
- s/232/233/.
-
- * docs/CHANGES: Mention ftdiff.
-
-2007-03-26 David Turner <david@freetype.org>
-
- * src/truetype/ttinterp.c [FIX_BYTECODE]: Remove it and
- corresponding code.
- (Ins_MD): Last regression fix.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Fix blues
- computations in order to ignore single-point contours. These are
- never rasterized and correspond in certain fonts to mark-attach
- points that are very far from the glyph's real outline, ruining the
- computation.
-
- * src/autofit/afloader.c (af_loader_load_g): In the case of
- monospaced fonts, always set `rsb_delta' and `lsb_delta' to 0.
- Otherwise code that uses them will most certainly ruin the fixed
- advance property.
-
- * docs/CHANGES, docs/VERSION.DLL, README, Jamfile (RefDoc): Update
- documentation and bump version number to 2.3.3.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 3.
-
- * builds/unix/configure.raw (version_info): Set to 9:14:3.
-
-2007-03-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/ftconfig.in: Disable Carbon framework dependency on
- 64bit ABI on Mac OS X 10.4.x (ppc & i386). Found by Sean McBride.
- * builds/vms/ftconfig.h: Ditto.
- * include/freetype/config/ftconfig.h: Ditto.
-
-2007-03-22 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/ftsystem.c (FT_Stream_Open): Temporary fix to prevent
- 32bit unsigned long overflow by 64bit filesize on LP64 platform, as
- proposed by Sean McBride:
- http://lists.gnu.org/archive/html/freetype-devel/2007-03/msg00032.html
-
-2007-03-22 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/ftconfig.in: Suppress SGI compiler's warning against
- setjmp, proposed by Sean McBride:
- http://lists.gnu.org/archive/html/freetype-devel/2007-03/msg00032.html
-
-2007-03-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/configure.raw: Dequote `OS_INLINE' in comment of
- conftest.c, to avoid unexpected shell evaluation. Possibly it is a
- bug or undocumented behaviour of autoconf.
-
-2007-03-18 David Turner <david@freetype.org>
-
- * src/truetype/ttinterp.c (Ins_MDRP): Another bytecode regression
- fix; testing still needed.
-
- * src/truetype/ttinterp.c (Ins_MD): Another bytecode regression fix.
-
-2007-03-17 David Turner <david@freetype.org>
-
- * src/truetype/ttinterp.c (Ins_IP): Fix wrong handling of the
- (undocumented) twilight zone special case.
-
-2007-03-09 Werner Lemberg <wl@gnu.org>
-
-
- * Version 2.3.2 released.
- =========================
-
-
- Tag sources with `VER-2-3-2'.
-
- * builds/win32/visualc/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj, README: s/2.3.1/2.3.2/,
- s/231/232/.
-
-2007-03-08 David Turner <david@freetype.org>
-
- * docs/CHANGES, docs/VERSION.DLL: Updated for upcoming release.
-
- * builds/unix/configure.raw (version_info): Set to 9:13:3.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 2.
-
- * README, Jamfile (RefDoc): s/2.3.1/2.3.2/.
-
- * src/base/ftutil.c (ft_mem_strcpyn): Fix a bug that prevented the
- function to work properly, over-writing user-provided buffers in
- some cases. Reported by James Cloos <cloos@jhcloos.com>.
-
-
-2007-03-05 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/config/ftstdlib.h (ft_strstr): New wrapper
- macro for `strstr'.
-
- * src/truetype/ttobjs.c (tt_face_init): Use ft_strstr for scanning
- `trick_names', as suggested by Ivan Nincic.
-
-2007-03-05 David Turner <david@freetype.org>
-
- * src/base/ftinit.c (FT_Init_FreeType): Fix a small memory leak in
- case FT_Init_FreeType fails for some reason. Problem reported by
- Maximilian Schwerin <maximilian.schwerin@buelowssiege.de>.
-
- * src/truetype/ttobjs.c (tt_size_init_bytecode): Clear the `x_ppem'
- and `y_ppem' fields of the `TT_Size.metrics' structure, not those of
- `TT_Size.root.metrics'. Problem reported by Daniel Glöckner
- <daniel-gl@gmx.net>.
-
- * src/type1/t1afm.c (T1_Read_PFM): Read kerning values as 16-bit
- signed values, not unsigned ones. Problem reported by Johannes
- Walther <joh_walt@yahoo.de>.
-
-2007-02-21 David Turner <david@freetype.org>
-
- * src/pshinter/pshalgo.c (psh_hint_align): Fix a bug in the hinting
- of small and ghost stems in the Postscript interpreter.
-
-2007-02-20 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftmac.c (FT_GetFileRef_From_Mac_ATS_Name): Fix memory
- leak, patch by "Jjgod Jiang" <gzjjgod@gmail.com>.
- * builds/mac/ftmac.c (FT_GetFileRef_From_Mac_ATS_Name): Ditto.
-
-2007-02-16 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (Ins_MD): Remove unused variable.
- * src/autofit/aflatin.c (af_latin_hints_link_segments): Ditto.
-
-2007-02-14 David Turner <david@freetype.org>
-
- It seems that the following changes fix most of the known
- interpreter problems with my fonts, but more testing is needed,
- though.
-
- * src/truetype/ttinterp.c (FIX_BYTECODE): Activate.
- (TT_MulFix14): Rewrite.
- (Ins_MD, Ins_MDRP, Ins_IP) [FIX_BYTECODE]: Improved and updated.
- (Ins_MIRP): Ditto.
-
-2007-02-12 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (Project_x, Project_y): Remove compiler
- warnings.
-
- * src/pcf/pcfread.c (pcf_interpret_style), src/bdf/bdfdrivr.c
- (bdf_interpret_style): Ditto.
-
-2007-02-12 David Turner <david@freetype.org>
-
- Simplify projection and dual-projection code interface.
-
- * src/truetype/ttinterp.h (TT_Project_Func): Use `FT_Pos', not
- FT_Vector' as argument type.
- * src/truetype/ttinterp.c (CUR_Func_project, CUR_Func_dualproj):
- Updated.
- (CUR_fast_project, CUR_fast_dualproj): New macros.
- (Project, Dual_Project, Project_x, Project_y): Updated.
- (Ins_GC, Ins_SCFS, Ins_MDAP, Ins_MIAP, Ins_IP): Use new `fast'
- macros.
-
-
- * src/autofit/afloader.c (af_loader_load_g): Improve spacing
- adjustments for the non-light auto-hinted modes. Gets rid of
- `inter-letter spacing is too wide' problems.
-
- * src/autofit/aflatin.c (af_latin_hints_link_segments,
- af_latin_hints_compute_edges): Slight optimization of the segment
- linker and better handling of serif segments to get rid of broken
- `9' in Arial at 9pt (96dpi).
-
-
- Introduce new string functions and the corresponding macros to get
- rid of various uses of strcpy and other `evil' functions, as well as
- to simplify a few things.
-
- * include/freetype/internal/ftmemory.h (ft_mem_strdup, ft_mem_dup,
- ft_mem_strcpyn): New declarations.
- (FT_MEM_STRDUP, FT_STRDUP, FT_MEM_DUP, FT_DUP, FT_STRCPYN): New
- macros.
- * src/base/ftutil.c (ft_mem_dup, ft_mem_strdup, ft_mem_strcpyn): New
- functions.
-
- * src/bdf/bdfdrivr.c (bdf_interpret_style, BDF_Face_Init),
- src/bdf/bdflib.c (_bdf_add_property), src/pcf/pcfread.c
- (pcf_get_properties, pcf_interpret_style, pcf_load_font),
- src/cff/cffdrivr.c (cff_get_glyph_name), src/cff/cffload.c
- (cff_index_get_sid_string), src/cff/cffobjs.c (cff_strcpy),
- src/sfnt/sfdriver.c (sfnt_get_glyph_name), src/type1/t1driver.c
- (t1_get_glyph_name), src/type42/t42drivr.c (t42_get_glyph_name,
- t42_get_name_index): Use new functions and simplify code.
-
- * builds/mac/ftmac.c (FT_FSPathMakeSpec): Don't use FT_MIN.
-
-2007-02-11 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afloader.c (af_loader_load_g): Don't change width for
- non-spacing glyphs.
-
-2007-02-07 Tom Parker <palfrey@tevp.net>
-
- * src/cff/cffdrivr.c (cff_get_name_index): Protect against NULL
- pointer.
-
-2007-02-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * include/freetype/ftmac.h (FT_DEPRECATED_ATTRIBUTE):
- Introduce __attribute((deprecated))__ to warn functions
- which use non-ANSI data types in its interfaces.
- (FT_GetFile_From_Mac_Name): Deprecated, using FSSpec.
- (FT_GetFile_From_Mac_ATS_Name): Deprecated, using FSSpec.
- (FT_New_Face_From_FSSpec): Deprecated, using FSSpec.
- (FT_New_Face_From_FSRef): Deprecated, using FSRef.
-
- * src/base/ftmac.c: Predefine FT_DEPRECATED_ATTRIBUTE as void
- to avoid warning in building FreeType.
- * builds/mac/ftmac.c: Ditto.
-
-2007-02-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftbase.c: Fix to use builds/mac/ftmac.c, if configured
- `--with-fsspec' etc. Replace #include "ftmac.c" with
- #include <ftmac.c>.
-
-2007-02-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * include/freetype/ftmac.h (FT_GetFilePath_From_Mac_ATS_Name):
- Introduced as replacement of FT_GetFile_From_Mac_ATS_Name.
- * src/base/ftmac.c (FT_GetFilePath_From_Mac_ATS_Name): Ditto.
- (FT_GetFile_From_Mac_ATS_Name): Rewritten as wrapper of
- FT_GetFilePath_From_Mac_ATS_Name.
- * builds/mac/ftmac.c: Ditto.
-
-2007-02-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * include/freetype/ftmac.h: Fixed wrong comment: FSSpec of
- FT_GetFile_From_Mac_Name, FT_GetFile_From_Mac_ATS_Name are
- for passing to FT_New_Face_From_FSSpec.
-
-2007-02-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/configure.raw: Check whether Mac OS X system headers
- can be built under ANSI C mode.
-
- * src/base/ftmac.c (OS_INLINE): Redefine OS_INLINE by a version
- compatible to ANSI C in case system headers are ANSI C incompatible.
- * builds/mac/ftmac.c (OS_INLINE): Ditto.
-
-2007-02-01 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ttnameid.h (TT_MS_LANGID_DZONGHKA_BHUTAN):
- Explain why applications shouldn't use it. Found by Alexei.
-
-2007-02-01 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * builds/unix/freetype2.m4 (AC_CHECK_FT2): Fix spelling of warning
- message.
-
- * src/gxvalid/gxvmort1.c
- (gxv_mort_subtable_type1_substTable_validate): Fix debugging
- message.
-
-2007-01-31 Werner Lemberg <wl@gnu.org>
-
-
- * Version 2.3.1 released.
- =========================
-
-
- Tag sources with `VER-2-3-1-FINAL'.
-
- * builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj: s/230/231/.
- * builds/win32/visualc/index.html: s/221/231/.
-
- * vms_make.com: Add `ftgasp'.
-
-2007-01-30 David Turner <david@freetype.org>
-
- Tag sources with VER-2-3-1 to prepare release.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
-
- * docs/VERSION.DLL, docs/release, README, Jamfile (RefDoc):
- s/2.3.0/2.3.1/.
-
- * builds/unix/configure.raw (version_info): Set to 9:12:3.
-
-
- * src/autofit/aftypes.h (AF_USE_WARPER), src/autofit/afloader.c
- (af_loader_load_g): Disable the warper (i.e., the light hinting
- improvements) to make a 2.3.1 bugfix release before introducing a
- new feature. This should give us more time to tune and improve the
- warper for the next release.
-
- * docs/CHANGES: Update accordingly.
-
-2007-01-25 David Turner <david@freetype.org>
-
- For light auto-hinting, improve glyph advance widths and resurrect
- normal/full hinting to its normal quality.
-
- * src/autofit/afhints.h (AF_GlyphHintsRec): New members `xmin_delta'
- and `xmax_delta'.
- * src/autofit/afhints.c (af_glyph_hints_reload): Reset `xmin_delta'
- and `xmax_delta'.
-
- * src/autofit/afloader.c (af_loader_load_g) <AF_USE_WARPER>: Replace
- preprocessor conditional with if-clause, handling both light and
- normal mode.
-
- * src/autofit/afwarp.c (AF_WarpScore): Fine-tune again.
- (af_warper_compute): Handle `xmin_delta' and `xmax_delta'.
-
-2007-01-25 Werner Lemberg <wl@gnu.org>
-
- * docs/release: Updated -- Savannah uses a new uploading scheme.
-
-2007-01-25 David Turner <david@freetype.org>
-
- * src/cff/cffload.c (cff_index_get_pointers): Improve previous fix.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings)
- <cff_op_callsubr, cff_op_callgsubr>: Fix sanity check for empty
- functions.
-
- * docs/CHANGES: Document light auto-hinting improvement.
-
-2007-01-25 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffload.c (cff_index_get_pointers): Handle last entry
- correctly in a sanity check. Since this function is only used to
- load local and global functions, any charstring that called the last
- local/global function would fail otherwise. This fixes Savannah bug
- #18867.
-
- * docs/CHANGES: Document it.
-
-2007-01-23 David Turner <david@freetype.org>
-
- * src/truetype/ttobjs.c (tt_size_ready_bytecode): Fix typo that
- prevented compilation when disabling both the unpatented and the
- bytecode interpreter in the TrueType font driver.
-
-
- Fix and enable the warper to improve `light' hinting mode. This is
- not necessarily a final version, but it seems to work well.
-
- * src/autofit/aflatin.c (af_latin_hints_init) [AF_USE_WARPER]:
- Disable code.
- (af_latin_hints_apply) [AF_USE_WARPER]: Handle FT_RENDER_MODE_LIGHT.
- * src/autofit/aftypes.h: Activate AF_USE_WARPER.
-
- * src/autofit/afwarp.c (AF_WarpScore): Tune table.
- (af_warper_compute_line_best): Fix array size of `scores'.
- (af_warper_compute): Better handling of border cases.
- * src/autofit/afwarp.h (AF_WarperRec): Remove unused members `X1'
- and `X2'.
-
-2007-01-21 Werner Lemberg <wl@gnu.org>
-
- * ChangeLog: Split off older entries into...
- * ChangeLog.22: This new file.
-
-2007-01-21 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Document SHZ fix.
-
-2007-01-21 George Williams <gww@silcom.com>
-
- * src/truetype/ttinterp.c (Ins_SHZ): SHZ doesn't move phantom
- points.
-
-2007-01-21 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttmtx.c (tt_face_get_metrics)
- [!FT_CONFIG_OPTION_OLD_INTERNALS]: Fix limit check.
-
-2007-01-17 Werner Lemberg <wl@gnu.org>
-
-
- * Version 2.3.0 released.
- =========================
-
-
- Tag sources with `VER-2-3-0-FINAL'.
-
-2007-01-17 Werner Lemberg <wl@gnu.org>
-
- * docs/release: Updated.
-
-2007-01-16 David Turner <david@freetype.org>
-
- * src/autofit/aflatin.c (af_latin_hints_compute_segments),
- src/cff/cffdrivr.c (cff_ps_get_font_info), src/truetype/ttobjs.c
- (tt_face_init), src/truetype/ttinterp.c (Ins_SHC): Fix compiler
- warnings.
-
-2007-01-15 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- * builds/amiga/makefile, builds/amiga/makefile.os4,
- builds/amiga/smakefile: Add `ftgasp.c' and `ftlcdfil.c'.
-
- * builds/amiga/include/freetype/config/ftconfig.h: Synchronize.
-
-2007-01-14 Detlef Würkner <TetiSoft@apg.lahn.de>
-
- Fix various compiler warnings.
-
- * src/truetype/ttdriver.c (tt_size_select), src/cff/cffobjs.h,
- src/cff/cffobjs.c (cff_size_request), src/type42/t42objs.h:
- s/index/strike_index/.
- * src/base/ftobjs.c (FT_Match_Size): s/index/size_index/.
-
- * src/gxvalid/gxvmorx5.c
- (gxv_morx_subtable_type5_InsertList_validate): s/index/table_index/.
-
- * src/truetype/ttinterp.c (Compute_Point_Displacement),
- src/pcf/pcfread.c (pcf_seek_to_table_type): Avoid possibly
- uninitialized variables.
-
-2007-01-13 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * docs/CHANGES, docs/INSTALL.MAC: Improvements.
-
-2007-01-13 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1afm.c (T1_Read_Metrics): MS Windows allows PFM
- versions up to 0x3FF without complaining.
-
-2007-01-13 Derek Clegg <dclegg@apple.com>
-
- Add FT_Get_PS_Font_Info interface to CFF driver.
-
- * src/cff/cfftypes.h: Include FT_TYPE1_TABLES_H.
- (CFF_FontRec): Add `font_info' field.
-
- * src/cff/cffload.c: Include FT_TYPE1_TABLES_H.
- (cff_font_done): Free font->font_info if necessary.
-
- * src/cff/cffdrivr.c (cff_ps_get_font_info): New function.
- (cff_service_ps_info): Register cff_ps_get_font_info.
-
-2007-01-13 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftoutln.c (FT_Outline_Get_Orientation): Fix compilation
- with C++ compiler.
-
- * src/autofit/afhints.c (af_glyph_hints_dump_segments,
- af_glyph_hints_dump_edges): Ditto.
-
- * src/base/rules.mk (BASE_SRC): Remove ftgasp.c (it's already in
- `modules.cfg').
-
- * src/sfnt/ttsbit0.h: Remove.
-
- * src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c.
-
-2007-01-12 David Turner <david@freetype.org>
-
- * src/base/ftbitmap.c (ft_bitmap_assure_buffer): Fix memory stomping
- bug in the bitmap emboldener if the pitch of the source bitmap is
- much larger than its width.
-
- * src/truetype/ttinterp.c (Update_Max): Fix aliasing-related
- compilation warning.
-
-2007-01-12 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/install-sh, builds/unix/mkinstalldirs: Updated from
- `automake' CVS module from sources.redhat.com.
-
-2007-01-11 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (is_space): Removed.
- (parse_encoding, parse_charstrings): Use IS_PS_DELIM.
- (parse_charstrings): Use IS_PS_TOKEN.
-
-
- * autogen.sh: Avoid bash specific syntax.
-
-2007-01-11 David Turner <david@freetype.org>
-
- * docs/CHANGES: Small update.
-
- * builds/unix/configure.raw (version_info): Set to 9:11:3.
-
- * src/base/ftobjs.c (IsMacResource): Fix a small bug that caused a
- crash with some Mac OS X .dfont files. Submitted by Masatake
- Yamato.
-
- * autogen.sh: Small fix to get it working on Mac OS X properly:
- The issue is that GNU libtool is called `glibtool' on this platform,
- and we must call `glibtoolize', since `libtoolize' doesn't exist.
-
-2007-01-10 David Turner <david@freetype.org>
-
- * all-sources: Tag all sources with VER-2-3-0-RC1 and
- VER-2-3-0.
-
- * Jamfile (RefDoc), README, builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj, docs/VERSION.DLL: Update
- version number to 2.3.0.
-
- * include/freetype/freetype.h (FREETYPE_MINOR): Set to 3.
- (FREETYPE_PATCH): Set to 0.
-
- * include/freetype/ftchapters.h, include/freetype/ftgasp.h,
- include/freetype/ftlcdfil.h: Update reference documentation with
- GASP support and LCD filtering sections.
-
- * src/pshinter/pshalgo.c (psh_glyph_compute_inflections): Fix a typo
- which created an endless loop with some malformed font files.
-
-2007-01-10 Derek Clegg <dclegg@apple.com>
-
- * src/type1/t1load.c (T1_Get_MM_Var): Always return fixed-point
- values.
-
-2007-01-08 David Turner <david@freetype.org>
-
- * docs/CHANGES: Updated.
-
- * include/freetype/ftgasp.h, src/base/ftgasp.c: New files which add
- a new API `FT_Get_Gasp' to return entries of the `gasp' table
- corresponding to a given character pixel size.
-
- * src/sfnt/ttload.c (tt_face_load_gasp): Add version check for the
- `gasp' table, in order to avoid potential problems with later
- versions.
-
- * include/freetype/config/ftheader.h (FT_GASP_H): New macro for
- <freetype/ftgasp.h>.
-
- * src/base/rules.mk (BASE_SRC), src/base/Jamfile (_sources),
- modules.cfg (BASE_EXTENSIONS), builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj: Add src/base/ftgasp.c to the
- default build.
-
-2007-01-07 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidparse.c (cid_parser_new): Improve error message for
- Type 11 fonts.
- Scan for `/sfnts' token.
-
-2007-01-07 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidparse.c (cid_parser_new): Reject Type 11 fonts.
-
-2007-01-06 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffload.c (cff_index_init): Remove unused variable.
- (cff_index_read_offset): s/perror/errorp/ to avoid global shadowing.
-
-2007-01-04 David Turner <david@freetype.org>
-
- * src/pfr/pfrobjs.c (pfr_face_init): Detect non-scalable fonts
- correctly. This fixes Savannah bug #17876.
-
-
- Do not allocate interpreter-specific tables in memory if we are not
- going to load glyphs with the bytecode interpreter anyway.
-
- * src/truetype/ttgload.c (tt_loader_init): Load execution context
- only if glyph is hinted.
- Updated.
- * src/truetype/ttobjs.h (TT_SizeRec): Add members `bytecode_ready'
- and `cvs_ready'.
- Add `tt_size_ready_bytecode' declaration.
- * src/truetype/ttobjs.c (tt_size_done_bytecode,
- tt_size_init_bytecode, tt_size_ready_bytecode): New functions.
- (tt_size_init): Move most code into `tt_size_init_bytecode'.
- (tt_size_done): Move most code into `tt_size_done_bytecode'.
- (tt_size_reset): Move some code to `tt_size_ready_bytecode'.
-
-
- Don't extract the metrics table from the SFNT font file. Instead,
- reparse it on each glyph load. The runtime difference is not
- noticeable, and it can save a lot of heap memory when memory-mapped
- files are not used.
-
- * include/freetype/internal/tttypes.h (TT_FaceRec): Add members
- `horz_metrics_offset' and `vert_metrics_offset'.
- * src/sfnt/ttmtx.c (tt_face_load_hmtx, tt_face_get_metrics):
- Updated.
-
-
- * src/sfnt/ttcmap.c (tt_cmap4_validate): Slight optimization.
-
-
- Do not load the CFF index offsets into memory, since this wastes a
- *lot* of heap memory with large Asian CFF fonts. There is no
- significant performance loss.
-
- * src/cff/cffload.h: Add `cff_charset_cid_to_gindex' declaration.
- * src/cff/cfftypes.h (CFF_IndexRec): Add fields `start' and
- `data_size'.
- (CFF_CharsetRec): Add field `num_glyphs'.
-
- * src/cff/cffload.c (cff_index_read_offset, cff_index_load_offsets,
- cff_charset_cid_to_gindex): New functions.
- (cff_new_index): Renamed to...
- (cff_index_init): This. Update all callers.
- Updated -- some code has been moved to `cff_index_load_offsets'.
- (cff_done_index): Renamed to...
- (cff_index_done): This. Update all callers.
- (cff_index_get_pointers, cff_index_access_element): Updated to use
- stream offsets.
- (cff_charset_compute_cids): Set `num_glyphs' field.
- (cff_encoding_load): Updated.
-
- * src/cff/cffgload.c (cff_slot_load): Updated.
-
-2007-01-04 David Turner <david@freetype.org>
-
- * docs/INSTALL.UNIX: Simplify some parts, add reference to
- autogen.sh and pointer to README.CVS.
-
- * README.CVS: Add common problem description and solution
- when running autogen.sh.
-
- * docs/INSTALL: Add reference to MacOS X.
-
- * docs/MAKEPP, docs/INSTALL.MAC: New documentation files.
-
- * docs/TODO: Remove obsolete items.
-
- * src/raster/ftraster.c: (TRaster_Instance): Replace it with...
- (TWorker): This.
- Remove `count_table' and `memory'.
- Make `grays' a pointer.
- (TRaster): New structure.
- (count_table): New static array.
- (RAS_ARGS, RAS_ARG, RAS_VARS, RAS_VAR, FT_UNUSED_RASTER, cur_ras,
- Vertical_Gray_Sweep_Step, ft_black_new, ft_black_done,
- ft_black_set_mode, ft_black_render): Updated.
- (ft_black_init): Don't initialize `count_table'.
- (ft_black_reset): Use the render pool. This saves about 6KB of
- heap space for each FT_Library instance.
-
- * src/smooth/ftgrays.c (TRaster): Replaced with...
- (TWorker): This.
- Remove `memory'.
- (TRaster): New structure.
-
- (RAS_ARG_, RAS_ARG, RAS_VAR_, RAS_VAR, ras, gray_render_line,
- gray_move_to, gray_line_to, gray_conic_to, gray_cubic_to,
- gray_render_span, gray_raster_render): Updated.
- (gray_raster_reset): Use the render pool. This saves about 6KB of
- heap space for each FT_Library instance.
-
- * src/sfnt/sfobjs.c, src/sfnt/ttkern.c, src/sfnt/ttkern.h,
- src/sfnt/ttmtx.c, src/sfnt/ttsbit.c, src/sfnt/ttsbit.h,
- src/truetype/ttpload.c, include/freetype/config/ftoption.h: Remove
- FT_OPTIMIZE_MEMORY macro (and code for !FT_OPTIMIZE_MEMORY) since
- the optimization is no longer experimental.
-
- * src/pshinter/pshalgo.c (psh_glyph_interpolate_normal_points):
- Remove a typo that results in no hinting and a memory leak with some
- large Asian CFF fonts.
-
- * src/base/ftobjs.c (FT_Done_Library): Remove a subtle memory leak
- which happens when FT_Done_Library is called with still opened
- CFF_Faces in it. We need to close all faces before destroying the
- modules, or else some bad things (memory leaks) may happen.
-
-2007-01-02 Werner Lemberg <wl@gnu.org>
-
- * src/gxvalid/gxvkern.c (gxv_kern_subtable_fmt0_pairs_validate):
- Remove compiler warning.
-
-2007-01-02 David Turner <david@freetype.org>
-
- * src/sfnt/sfobjs.c: Add documentation comment.
-
-2006-12-31 Masatake YAMATO <jet@gyve.org>
-
- * src/gxvalid/gxvkern.c (gxv_kern_subtable_fmt0_pairs_validate): New
- function.
- Check uniqueness of the gid pairs.
- (gxv_kern_subtable_fmt0_validate): Move some code to
- `gxv_kern_subtable_fmt0_pairs_validate'.
-
-2006-12-22 David Turner <david@freetype.org>
-
- * src/autofit/aflatin.c, src/truetype/ttgload.c: Remove compiler
- warnings.
-
- * builds/win32/visualc/freetype.vcproj: Add _CRT_SECURE_NO_DEPRECATE
- to avoid deprecation warnings with Visual C++ 8.
-
-2006-12-16 Anders Kaseorg <anders@kaseorg.com>
-
- * src/base/ftlcdfil.c (FT_Library_SetLcdFilter)
- [FT_FORCE_LIGHT_LCD_FILTER]: Fix typo.
-
-2006-12-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * include/freetype/internal/services/svotval.h: Add `volatile' to
- sync with the modification by Jens Claudius on 2006-08-22; cf.
- http://cvs.savannah.gnu.org/viewcvs/freetype/freetype2/src/otvalid/otvmod.c?r1=1.4&r2=1.5
-
-2006-12-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftmac.c: Specialized for Mac OS X only.
- * builds/unix/ftconfig.in: Fixed for ppc64 missing Carbon framework.
- * builds/unix/configure.raw: Ditto. When explicit switches for
- FSSpec/FSRef/QuickDraw/ATS availability are given to configure,
- builds/mac/ftmac.c is used instead of default src/base/ftmac.c.
-
-2006-12-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/mac/ftmac.c: Copied src/base/ftmac.c for legacy system.
- * builds/mac/FreeType.m68k_cfm.make.txt: Fix to use builds/mac/ftmac.c
- instead of src/base/ftmac.c
- * builds/mac/FreeType.ppc_carbon.make.txt: Ditto.
- * builds/mac/FreeType.ppc_classic.make.txt: Ditto.
- * builds/mac/FreeType.m68k_far.make.txt: Ditto, and exclude gxvalid.c
- that cannot be built at present.
-
-2006-12-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c: Improvement of resource fork handler for
- POSIX, cf.
- http://lists.gnu.org/archive/html/freetype-devel/2006-10/msg00025.html
- (Mac_Read_sfnt_Resource): Count only `sfnt' resource of suitcase font
- format or .dfont, to simulate the face index number counted by ftmac.c.
- (IsMacResource): Return the number of scalable faces correctly.
-
-2006-12-10 Werner Lemberg <wl@gnu.org>
-
- * builds/toplevel.mk (version): Protect against `distclean' target.
-
-2006-12-09 Werner Lemberg <wl@gnu.org>
-
- * builds/*/*def.mk, builds/*/detect.mk (CAT): Define to either `cat'
- or `type'.
-
- * builds/freetype.mk (version): Extracted from freetype.h, using
- GNU make's built-in string functions.
- (refdoc): Use $(version) instead of static version number.
-
-2006-12-08 Werner Lemberg <wl@gnu.org>
-
- * builds/toplevel.mk (dist): Extract version number from freetype.h.
-
-2006-12-08 Vladimir Volovich <vvv@vsu.ru>
-
- * src/tools/apinames.c (State): Remove final comma in structure --
- xlc v5 under AIX 4.3 doesn't like this.
-
-2006-12-07 David Turner <david@freetype.org>
-
- * src/autofit/afloader.c (af_loader_load_g): Small adjustment
- to the spacing of auto-fitted glyphs. This only impacts rare
- cases (e.g., Arial Bold at rather small character sizes).
-
-2006-12-03 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/rules.mk (SFNT_DRV_SRC): Add ttsbit0.c.
-
-2006-12-01 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfobjs.c (tt_face_get_name): All Unicode strings are
- encoded in UTF-16BE. Patch from Rajeev Pahuja <rpahuja@esri.com>.
- (tt_name_entry_ascii_from_ucs4): Removed.
-
-
- * include/freetype/ftxf86.h: Fix and extend comment so that it
- appears in the documentation.
-
- * include/freetype/ftchapters.h: Add `font_format' section.
-
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter::index_exit): Add link
- to TOC in index page.
-
-2006-11-28 David Turner <david@freetype.org>
-
- * src/smooth/ftgrays.c (gray_raster_render): Return 0 when we are
- trying to render into a zero-width/height bitmap, not an error code.
-
- * src/truetype/ttobjs.c (tt_face_init): Fix typo in previous patch.
-
- * src/smooth/ftgrays.c: Remove hard-coded error values; use FreeType
- ones instead.
-
- * src/autofit/afhints.c (af_glyph_hints_dump_segments): Remove unused
- variable.
-
-2006-11-26 Pierre Hanser <hanser@club-internet.fr>
-
- * src/truetype/ttobjs.c (tt_face_init): Protect against NULL pointer.
-
-2006-11-25 David Turner <david@freetype.org>
-
- * src/autofit/afhints.c (af_glyph_hints_dump_points,
- af_glyph_hints_dump_segments, af_glyph_hints_dumpedges) [!AF_DEBUG]:
- Add stubs to link the `ftgrid' test program when debugging is
- disabled in the auto-hinter.
-
-2006-11-23 David Turner <david@freetype.org>
-
- * src/autofit/afhints.c, src/autofit/afhints.h, src/autofit/aflatin.c,
- src/autofit/aftypes.h: Miscellaneous auto-hinter improvements.
-
- * src/autofit/afhints.c (af_glyph_hints_dump_segments) [AF_DEBUG]:
- Emit more sensible information.
-
- * src/autofit/afhints.h (AF_SegmentRec): Add `height' member.
-
- * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Improve
- rounding of blue values.
- (af_latin_hints_compute_segments): Hint segment heights.
- (af_latin_hints_link_segments): Reduce `len_score' value.
- (af_latin_hints_compute_edges): Increase `segment_length_threshold'
- value and use `height' member for comparisons.
- (af_latin_hint_edges): Extend logging message.
- Improve handling of remaining edges.
-
-2006-11-22 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #15553.
-
- * src/truetype/ttgload.c (tt_loader_init): Re-execute the CVT
- program after a change from mono to grayscaling (and vice versa).
- Use correct constant for comparison to get `exec->grayscale'.
-
-2006-11-18 Werner Lemberg <wl@gnu.org>
-
- Because FT_Load_Glyph expects CID values for CID-keyed fonts, the
- test for a valid glyph index must be deferred to the font drivers.
- This patch fixes Savannah bug #18301.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Don't check `glyph_index'.
- * src/bdf/bdfdrivr.c (BDF_Glyph_Load), src/cff/cffgload.c
- (cff_slot_load), src/cid/cidgload.c (cid_slot_load_glyph),
- src/pcf/pcfdrivr.c (PCF_Glyph_Load), src/pfr/pfrobjs.c
- (pfr_slot_load), src/truetype/ttdriver.c (Load_Glyph),
- src/type1/t1gload.c (T1_Load_Glyph), src/winfonts/winfnt.c
- (FNT_Load_Glyph): Check validity of `glyph_index'.
-
-2006-11-13 David Turner <david@freetype.org>
-
- * src/truetype/ttinterp.c (FIX_BYTECODE): Undefine. The interpreter
- `enhancements' are still too buggy for general use.
-
- * src/base/ftlcdfil.c: Add support for FT_FORCE_LIGHT_LCD_FILTER and
- FT_FORCE_LEGACY_LCD_FILTER at compile time. Define these macros
- when building the library to change the default LCD filter to be
- used. This is only useful for experimentation.
-
- * include/freetype/ftlcdfil.h: Update documentation.
-
-2006-11-10 David Turner <david@freetype.org>
-
- * src/smooth/ftsmooth.c: API change for the LCD
- filter. The FT_LcdFilter value is an enumeration describing which
- filter to apply, with new values FT_LCD_FILTER_LIGHT and
- FT_LCD_FILTER_LEGACY (the latter implements the LibXft original
- algorithm which produces strong color fringes for everything
- except very-well hinted text).
-
- * include/freetype/ftlcdfil.h (FT_Library_SetLcdFilter): Change
- second parameter to an enum type.
-
- * src/base/ftlcdfil.c (USE_LEGACY): Define.
- (_ft_lcd_filter): Rename to...
- (_ft_lcd_filter_fir): This.
- Update parameters.
- (_ft_lcd_filter_legacy) [USE_LEGACY]: New filter function.
- (FT_Library_SetLcdFilter): Update parameters.
- Handle new filter modes.
-
- * include/internal/ftobjs.h: Include FT_LCD_FILTER_H.
- (FT_Bitmap_LcdFilterFunc): Change third argument to `FT_Library'.
- (FT_LibraryRec) [FT_CONFIG_OPTION_SUBPIXEL_RENDERING]: Add filtering
- callback and update other fields.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic)
- [FT_CONFIG_OPTION_SUBPIXEL_RENDERING]: Update.
- Other minor improvements.
-
- * src/autofit/aflatin.c: Various tiny improvements that drastically
- improve the handling of serif fonts and of LCD/LCD_V hinting modes.
- (af_latin_hints_compute_edges): Fix typo.
- (af_latin_compute_stem_width): Take better care of diagonal stems.
-
-2006-11-09 David Turner <david@freetype.org>
-
- * src/pshinter/pshalgo.c (psh_glyph_compute_inflections): Fix
- typo which created a variable-used-before-initialized bug.
-
-2006-11-07 Zhe Su <james.su@gmail.com>
-
- * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Handle vertical layout
- also.
-
-2006-11-03 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftcalc.c: Don't use `long long' but `FT_Int64'.
-
-2006-11-02 David Turner <david@freetype.org>
-
- Add a few tweaks to better handle serif fonts.
- Add more debugging messages.
-
- * src/autofit/aflatin.c (af_latin_hints_compute_edges): Ignore
- segments that are less than 1.5 pixels high. This gets rid of
- *many* corner cases with serifs.
- (af_latin_align_linked_edge): Add logging message.
- (af_latin_hint_edges): Use AF_HINTS_DO_BLUES.
- Add logging messages.
- Handle AF_EDGE_FLAG flag specially.
-
- * src/autofit/afmodule.c [AF_DEBUG]: Add _af_debug,
- _af_debug_disable_blue_hints, and _af_debug_hints variables.
-
- * src/autofit/aftypes.h (AF_LOG) [AF_DEBUG]: Use _af_debug.
- Update external declarations.
- (af_corner_orientation, af_corner_is_flat): Replaced by...
-
- * include/freetype/internal/ftcalc.h (ft_corner_orientation,
- ft_corner_is_flat): These declarations.
-
- * src/autofit/afangles.c (af_corner_orientation, af_corner_is_flat):
- Comment out. Replaced by...
-
- * src/base/ftcalc.h (ft_corner_orientation, ft_corner_is_flat):
- These functions. Update all callers.
- (FT_Add64) [!FT_LONG64]: Simplify.
-
- * src/autofit/afhints.c: Include FT_INTERNAL_CALC_H.
- (af_direction_compute): Add a missing FT_ABS call. This bug caused
- production of garbage by missing lots of segments.
-
- * src/autofit/afhints.h (AF_HINTS_DO_BLUES): New macro.
-
- * src/autofit/afloader.c (af_loader_init, af_loader_done)
- [AF_DEBUG]: Set _af_debug_hints.
-
-
- * src/pshinter/pshalgo.c: Include FT_INTERNAL_CALC_H.
- (psh_corner_is_flat, psh_corner_orientation): Use ft_corner_is_flat
- and ft_corner_orientation.
-
-
- * src/gzip/inftrees.c (huft_build): Remove compiler warning.
-
-2006-10-24 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffload.c (cff_encoding_load): Remove unused variable.
-
- * src/base/ftobjs.c (FT_Select_Charmap): Disallow FT_ENCODING_NONE
- as argument.
-
-2006-10-23 Zhe Su <zsu@novell.com>
-
- * src/base/ftoutln.c (FT_Outline_Get_Orientation): Re-implement to
- better deal with broken Asian fonts with strange glyphs, having
- self-intersections and other peculiarities. The used algorithm is
- based on the nonzero winding rule.
-
-2006-10-23 David Turner <david@freetype.org>
-
- Speed up the CFF font loader. With some large CFF fonts,
- FT_Open_Face is now more than three times faster.
-
- * src/cff/cffload.c (cff_get_offset): Removed.
- (cff_new_index): Inline functionality of `cff_get_offset'.
- (cff_charset_compute_cids, cff_charset_free_cids): New functions.
- (cff_charset_done): Call `cff_charset_free_cids'.
- (cff_charset_load): Call `cff_charset_compute_cids'.
- (cff_encoding_load) <Populate>: Ditto, to replace inefficient loop.
-
- * src/sfnt/ttmtx.c (tt_face_load_hmtx): Replace calls to FT_GET_XXX
- with FT_NEXT_XXX.
-
-
- Speed up the Postscript hinter, with more than 100% speed increase
- on my machine.
-
- * src/pshinter/pshalgo.c (psh_corner_is_flat,
- psh_corner_orientation): New functions.
- (psh_glyph_compute_inflections): Merge loops for efficiency.
- Use `psh_corner_orientation'.
- (psh_glyph_init): Use `psh_corner_is_flat'.
- (psh_hint_table_find_strong_point): Renamed to...
- (psh_hint_table_find_strong_points): This.
- Rewrite, adding argument to handle all points at once.
- Update all callers.
- (PSH_MAX_STRONG_INTERNAL): New macro.
- (psh_glyph_interpolate_normal_points): Rewrite for efficiency.
-
-2006-10-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftmac.c (FT_New_Face_From_FOND): Initialize variable
- `error' with FT_Err_Ok.
-
-2006-10-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * docs/INSTALL.CROSS: New document file for cross-building.
-
- * builds/unix/configure.raw: Preliminary cross-building support.
- Find native C compiler and pass it by CC_BUILD, and
- find suffix for native executable and pass it by EXEEXT_BUILD.
- Also suffix for target executable is passed by EXEEXT.
-
- * builds/unix/unix-cc.in (CCraw_build, E_BUILD): New variables to
- build `apinames' which runs on building system. They are set by
- CC_BUILD and EXEEXT_BUILD.
-
- * builds/exports.mk (APINAMES_EXE): Change the extension for
- apinames from the suffix for target (E) to that for building host
- (E_BUILD).
-
-2006-10-12 Werner Lemberg <wl@gnu.org>
-
- * docs/INSTALL.UNX, docs/UPGRADE.UNX: Renamed to...
- * docs/INSTALL.UNIX, docs/UPGRADE.UNIX: This. Update all documents
- which reference those files.
-
-2006-10-12 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/configure.raw (FT2_EXTRA_LIBS): New variable. It is
- embedded in freetype2.pc and freetype-config. Use it to record
- Carbon dependency of MacOSX.
-
- * builds/unix/freetype2.in: Embed FT2_EXTRA_LIBS.
-
- * builds/unix/freetype-config.in: Ditto.
-
-2006-10-11 Werner Lemberg <wl@gnu.org>
-
- * devel/ftoption.h (FT_CONFIG_OPTION_SUBPIXEL_RENDERING): Define for
- development.
-
-2006-10-03 Jens Claudius <jens.claudius@yahoo.com>
-
- * include/freetype/config/ftstdlib.h: Cast away volatileness from
- argument to ft_setjmp.
-
- * include/freetype/internal/ftvalid.h: Add comment that
- ft_validator_run must not be used.
-
-2006-10-01 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftbase.c: Undo change from 2006-09-30.
-
- * src/base/rules.mk (BASE_SRC): Remove `ftlcdfil.c'.
-
-2006-09-30 David Turner <david@freetype.org>
-
- * include/freetype/internal/ftobjs.h (FT_Face_InternalRec):
- s/unpatented_hinting/ignore_unpatented_hinter/.
- Update all callers.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Refine the algorithm whether
- auto-hinting shall be used or not.
-
- * src/truetype/ttobjs.c (tt_face_init): Ditto.
-
-2006-09-30 Werner Lemberg <wl@gnu.org>
-
- * src/base/rules.mk (BASE_SRC): Remove `ftapi.c' (which is no longer
- in use).
-
- * src/base/ftbase.c: Include `ftlcdfil.c'.
-
-2006-09-29 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttcmap.c (tt_cmap4_char_map_binary): Fix algorithm for
- overlapping segments. Bug reported by Stefan Koch.
-
-2006-09-28 David Turner <david@freetype.org>
-
- Fix a bug in the automatic unpatented hinting support which prevents
- normal bytecode hinting to work properly.
-
- * include/freetype/internal/ftobjs.h (FT_Face_InternalRec):
- s/force_autohint/unpatented_hinting/. Update all callers.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Updated code.
-
- * src/autofit/aftypes.h (AF_DEBUG): Undefine to get rid of traces.
-
-2006-09-27 David Turner <david@freetype.org>
-
- * include/freetype/freetype.h (FT_FREETYPE_PATCH): Set to 2.
-
-
- Add a new API to support color filtering of subpixel glyph bitmaps.
- In a default build, the function `FT_Library_SetLcdFilter' returns
- `FT_Err_Unimplemented_Feature'; you need to #define
- FT_CONFIG_OPTION_SUBPIXEL_RENDERING in ftoption.h to compile the
- real implementation.
-
- * include/freetype/ftlcdfil.h, src/base/ftlcdfil.c: New files.
-
- * include/freetype/internal/ftobjs.h (FT_Bitmap_LcdFilterFunc): New
- typedef.
- (FT_LibraryRec) [FT_CONFIG_OPTION_SUBPIXEL_RENDERING]: New members
- `lcd_filter_weights' and `lcd_filter'.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Remove arguments
- `hmul' and `vmul'.
-
- Handle subpixel rendering.
- Simplify function.
- (ft_smooth_render_lcd): Use `FT_RENDER_MODE_LCD'.
- (ft_smooth_render_lcd_v): Use `FT_RENDER_MODE_LCD_V'.
-
- * include/freetype/config/ftheader.h (FT_LCD_FILTER_H): New macro,
- pointing to <freetype/ftlcdfil.h>.
-
- * src/base/Jamfile (_sources), src/base/rules.mk (BASE_SRC),
- vms_make.com: Add `ftlcdfil.c' to the list of compiled source files.
-
- * modules.cfg (BASE_EXTENSIONS): Add ftlcdfil.c.
-
-2006-09-26 David Bustin
-
- * src/pfr/pfrobjs.c (pfr_face_get_kerning): Skip adjustment bytes
- correctly. Reported as Savannah bug #17843.
-
-2006-09-26 David Turner <david@freetype.org>
-
- * src/autofit/afhints.h (AF_HINTS_DO_HORIZONTAL,
- AF_HINTS_DO_VERTICAL, AF_HINTS_DO_ADVANCE): New macros to disable
- horizontal and vertical hinting for the purpose of debugging the
- auto-fitter.
-
- * src/autofit/afmodule.c (_af_debug_disable_horz_hints,
- _af_debug_disable_vert_hints) [AF_DEBUG]: New global variables.
-
- * src/autofit/aftypes.h [AF_DEBUG]: Declare above variables.
-
- * include/freetype/config/ftoption.h, devel/ftoption.h
- (FT_CONFIG_OPTION_SUBPIXEL_RENDERING): New macro to control whether
- we want to compile LCD-optimized rendering code (à la ClearType) or
- not. The macro *must* be disabled in default builds of the library
- for patent reasons.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Disable
- LCD-specific rendering when FT_CONFIG_OPTION_SUBPIXEL_RENDERING
- isn't defined at compile time. This only changes the content of the
- rendered glyph to match the one of normal gray-level rendering,
- hence clients should not need to be modified.
-
- * docs/CHANGES: Updated.
-
-2006-09-18 Garrick Meeker <garrick@digitalanarchy.com>
-
- * src/base/ftmac.c (FT_New_Face_From_FOND): Fall back to SFNT if
- LWFN fails and both are available.
-
-2006-09-11 David Turner <david@freetype.org>
-
- * src/sfnt/sfobjs.c (tt_face_get_name): Support some fonts which
- report their English names through an Apple Roman
- (platform,encoding) pair, with language_id != English.
-
- If the font uses another name entry with language_id == English, it
- will be selected correctly, though.
-
- * src/truetype/ttobjs.c (tt_face_init): Add unpatented hinting
- selection for `mingli.ttf'.
-
-2006-09-05 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttpload.c (tt_face_load_hdmx): Handle `record_size'
- values which have the upper two bytes set to 0xFF instead of 0x00
- (as it happens in at least two CJKV fonts, `HAN NOM A.ttf' and
- `HAN NOM B.ttf').
-
- * src/smooth/ftgrays.c [GRAYS_USE_GAMMA]: Really remove all code.
-
-2006-09-05 David Turner <david@freetype.org>
-
- Minor source cleanups and optimizations.
-
- * src/smooth/ftgrays.c (GRAYS_COMPACT): Removed.
- (TRaster): Remove `count_ex' and `count_ey'.
- (gray_find_cell): Remove 2nd and 3rd argument.
- (gray_alloc_cell): Merged with `gray_find_cell'.
- (gray_record_cell): Simplify.
- (gray_set_cell): Rewrite.
- (gray_start_cell): Apply offsets to `ras.ex' and `ras.ey'.
- (gray_render_span): Don't use FT_MEM_SET for small values.
- (gray_dump_cells) [DEBUG_GRAYS]: New function.
- (gray_sweep): Avoid buffer overwrites when to drawing the end of a
- bitmap scanline.
- (gray_convert_glyph): Fix speed-up.
-
-2006-09-04 David Turner <david@freetype.org>
-
- * src/smooth/ftgrays.c (gray_convert_glyphs): Make it work with
- 64bit processors.
-
-2006-09-03 Werner Lemberg <wl@gnu.org>
-
- * devel/ftoption.h: Synchronize with
- include/freetype/config/ftoption.h.
-
- * src/smooth/ftgrays.c (gray_record_cell): Remove shadowing
- variable declaration.
- (gray_convert_glyph): Fix compiler warnings.
-
-2006-09-01 David Turner <david@freetype.org>
-
- * src/truetype/ttobjs.c (tt_face_init): Update the TrueType loader
- to recognize a few fonts that require the automatic unpatented
- loader.
-
- * src/smooth/ftgrays.c: Optimize the performance of the anti-aliased
- rasterizer. The speed improvement is between 15% and 25%, depending
- on the font data.
-
- (GRAYS_USE_GAMMA, GRAYS_COMPACT): Removed, and all associated code.
- (TCell): Redefine.
- (TRaster): New members `buffer', `buffer_size', `ycells', `ycount'.
- (gray_init_cells): Updated.
- (gray_find_cell, gray_alloc_cell): New functions.
- (gray_record_cell): Rewritten to use `gray_find_cell' and
- `gray_alloc_cell'.
- (PACK, LESS_THAN, SWAP_CELLS, DEBUG_SORT, QUICK_SORT, SHELL_SORT,
- QSORT_THRESHOLD):
- Removed.
- (gray_shell_sort, gray_quick_sort, gray_check_sort,
- gray_dump_cells): Removed.
- (gray_sweep): Rewritten.
- (gray_convert_glyph): Rewrite code which used one of the sorting
- functions.
- (gray_raster_render): Updated.
-
-2006-08-29 Dr. Werner Fink <werner@suse.de>
-
- * configure: Make it possible to handle configure options which
- have strings containing spaces.
-
-2006-08-27 David Turner <david@freetype.org>
-
- * include/freetype/config/ftoption.h (TT_USE_BYTECODE_INTERPRETER):
- New macro, defined if either TT_CONFIG_OPTION_BYTECODE_INTERPRETER
- or TT_CONFIG_OPTION_UNPATENTED_HINTING is defined.
-
- * include/freetype/internal/ftcalc.h, src/base/ftcalc.c,
- src/truetype/truetype.c, src/truetype/ttdriver.c,
- src/truetype/ttgload.c, src/truetype/ttgload.h,
- src/truetype/ttinterp.c, src/truetype/ttobjs.c,
- src/truetype/ttobjs.h, src/truetype/ttpload.c, src/type42/t42drivr.c:
- s/TT_CONFIG_OPTION_BYTECODE_INTERPRETER/TT_USE_BYTECODE_INTERPRETER/.
-
- * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): New
- member `force_autohint'.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Use `force_autohint'.
-
- * src/truetype/ttobjs.c (tt_face_init): Prepare code for testing
- against a list of font names which need the bytecode interpreter.
-
-2006-08-27 Jens Claudius <jens.claudius@yahoo.com>
-
- Fix miscellaneous compiler warnings.
-
- * include/freetype/internal/ftobjs.h: Close comment with `*/' to
- avoid `/* in comment' compiler warning.
-
- * src/base/ftdbgmem.c (ft_mem_table_get_source): Turn cast
- `(FT_UInt32)(void*)' into `(FT_UInt32)(FT_PtrDist)(void*)' since on
- 64-bit platforms void* is larger than FT_UInt32.
-
- * src/base/ftobjs.c (t_validator_error): Cast away
- volatileness of argument to ft_longjmp. Spotted by Werner
- `Putzfrau' Lemberg.
-
- * src/bdf/bdflib.c (bdf_load_font): Initialize local
- variable `lineno'.
-
- * src/gxvalid/gxvmod.c (classic_kern_validate): Mark local variable
- `error' as volatile.
-
-2006-08-27 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/ftconfig.in: Synchronize with main ftconfig.h.
- Reported by Jens.
-
-2006-08-22 Jens Claudius <jens.claudius@yahoo.com>
-
- Fix for previous commit, which caused many compiler warnings/errors
- about addresses of volatile objects passed as function arguments as
- non-volatile pointers.
-
- * include/freetype/internal/ftvalid.h: Make FT_Validator typedef a
- pointer to a volatile object.
-
- * src/gxvalid/gxvmod.c (gxv_load_table): Make function argument
- `table' a pointer to a volatile object.
-
- * src/otvalid/otvmod.c (otv_load_table): Make function argument
- `table' a pointer to a volatile object.
-
-2006-08-18 Jens Claudius <jens.claudius@yahoo.com>
-
- * src/gxvalid/gxvmod.c (GXV_TABLE_DECL): Mark local variable `_sfnt'
- as volatile since it must keep its value across a call to ft_setjmp.
- (gxv_validate): Same for local variables `memory' and `valid'.
- (classic_kern_validate): Same for local variables `memory',
- `ckern', and `valid'.
-
- * src/otvalid/otvmod.c (otv_validate): Same for function parameter
- `face' and local variables `base', `gdef', `gpos', `gsub', `jstf',
- and 'valid'.
-
- * src/sfnt/ttcmap.c (tt_face_build_cmaps): Same for local variable
- `cmap'.
-
-2006-08-16 David Turner <david@freetype.org>
-
- * src/cid/cidgload.c (cid_slot_load_glyph): Remove compiler
- warnings.
-
- * src/base/ftobjs.c (ft_validator_run): Disable function; it is
- buggy by design. Always return -1.
-
-
- Improvements to native TrueType hinting. This is a first try,
- controlled by the FIX_BYTECODE macro in src/truetype/ttinterp.c.
-
- * include/freetype/internal/ftgloadr.h (FT_GlyphLoadRec): Add member
- `extra_points2'.
-
- * include/freetype/internal/tttypes.h (TT_GlyphZoneRec): Add member
- `orus'.
-
- * src/base/ftgloadr.c (FT_GlyphLoader_Reset,
- FT_GlyphLoader_Adjust_Points, FT_GlyphLoader_CreateExtra,
- FT_GlyphLoader_CheckPoints, FT_GlyphLoader_CopyPoints): Updated to
- handle `extra_points2'.
-
- * src/truetype/ttgload.c (tt_prepare_zone): Handle `orus'.
- Remove compiler warning.
- (cur_to_arg): Remove macro.
- (TT_Hint_Glyph): Updated.
- (TT_Process_Simple_Glyph): Handle `orus'.
-
- * src/truetype/ttinterp.c (FIX_BYTECODE): New macro.
- (Ins_MD, Ins_MDRP, Ins_IP) [FIX_BYTECODE]: Handle `orus'.
- (LOC_Ins_IUP): Renamed to...
- (IUP_WorkerRec): This.
- Add `orus' member.
- (Shift): Renamed to...
- (_iup_worker_shift): This.
- Updated.
- (Interp): Renamed to...
- (_iup_worker_interpolate): This.
- Updated to handle `orus'.
- (Ins_IUP): Updated.
-
- * src/truetype/ttobjs.c (tt_glyphzone_done, tt_glyphzone_new):
- Handle `orus'.
-
-2006-08-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * modules.cfg (BASE_EXTENSIONS): Compile in ftgxval.c by default to
- build ftvalid in ft2demos. This has been inadvertently changed
- 2006-08-13.
-
-2006-08-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- `ft_validator_run' wrapping `setjmp' can cause a crash, as found by
- Jens:
- http://lists.gnu.org/archive/html/freetype-devel/2006-08/msg00004.htm.
-
- * src/otvalid/otvmod.c: Replace `ft_validator_run' by `ft_setjmp'.
- It reverts the change introduced on 2005-08-20.
-
- * src/gxvalid/gxvmod.c: Ditto.
-
-2006-08-13 Jens Claudius <jens.claudius@yahoo.com>
-
- * finclude/freetype/internal/psaux.h: (T1_TokenType): Add
- T1_TOKEN_TYPE_KEY.
- (T1_FieldRec): Add `dict'.
- (T1_FIELD_DICT_FONTDICT, T1_FIELD_DICT_PRIVATE): New macros.
- (T1_NEW_XXX, T1_FIELD_XXX): Update to take the dictionary where a PS
- keyword is expected as an additional argument.
-
- * src/cid/cidload.c: (cid_field_records): Adjust invocations of
- T1_FIELD_XXX.
-
- * src/cid/cidtoken.h: Adjust invocations of T1_FIELD_XXX.
-
- * src/psaux/psobjs.c: Add macro FT_COMPONENT for tracing.
- (ps_parser_to_token): Report a PostScript key as T1_TOKEN_TYPE_KEY,
- not T1_TOKEN_TYPE_ANY.
- (ps_parser_load_field): Make sure a token that should be a string or
- name is really a string or name.
- Avoid memory leak if a keyword has been already encountered and its
- value is overwritten.
- * src/type1/t1load.c: (t1_keywords): Adjust invocations of
- T1_FIELD_XXX.
- (parse_dict): Ignore keywords that occur in the wrong dictionary
- (e.g., in `Private' instead of `FontDict').
-
- * src/type1/t1tokens.h: Adjust invocations of T1_FIELD_XXX.
-
- * src/type42/t42parse.c: (t42_keywords): Adjust invocations of
- T1_FIELD_XXX.
-
-2006-07-18 Jens Claudius <jens.claudius@yahoo.com>
-
- Move creation of field `buildchar' of T1_DecoderRec out of
- `t1_decoder_init' and let the caller of `t1_decoder_init' take care
- of it.
-
- Call the finisher for T1_Decoder in `cid_face_compute_max_advance'
- and `T1_Compute_Max_Advance'.
-
- * include/freetype/internal/psaux.h (T1_DecoderRec): Remove field
- `face', add `len_buildchar'.
-
- * include/freetype/internal/t1types.h (T1_FaceRec): Add field
- `buildchar'.
-
- * src/cid/cidgload.c (cid_face_compute_max_advance): Call finisher
- for T1_Decoder.
- (cid_slot_load_glyph): Do not ignore failure when initializing the
- T1_Decoder.
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Updated.
- (t1_decoder_init): Remove initialization of fields `buildchar' and
- `len_buildchar'.
- (t1_decoder_done): Remove deallocation of field `buildchar'.
-
- * freetype/src/type1/t1gload.c (T1_Compute_Max_Advance): Initialize
- T1_Decoder's `buildchar' and `len_buildchar'; call finisher for
- T1_Decoder.
- (T1_Load_Glyph): Initialize T1_Decoder's `buildchar' and
- `len_buildchar'; make sure to call finisher for T1_Decoder even in
- case of error.
-
- * src/type1/t1load.c (T1_Open_Face): Allocate new field `buildchar'
- of T1_FaceRec.
-
- * src/type1/t1objs.c (T1_Face_Done): Free new field `buildchar' of
- T1_FaceRec.
-
-2006-07-14 Jens Claudius <jens.claudius@yahoo.com>
-
- * include/freetype/internal/psaux.h: New macros IS_PS_NEWLINE,
- IS_PS_SPACE, IS_PS_SPECIAL, IS_PS_DELIM, IS_PS_DIGIT, IS_PS_XDIGIT,
- and IS_PS_BASE85 (from src/psaux/psconv.h).
- (T1_FieldLocation): Add T1_FIELD_LOCATION_LOADER,
- T1_FIELD_LOCATION_FACE, and T1_FIELD_LOCATION_BLEND.
- (T1_DecoderRec): New fields `buildchar' and `face'.
- (IS_PS_TOKEN): New macro.
-
- * include/freetype/internal/t1types.h (T1_FaceRec): New fields
- `ndv_idx', `cdv_idx', and `len_buildchar'.
-
- * include/freetype/t1tables.h (PS_BlendRec): New fields
- `default_design_vector' and `num_default_design_vector'.
-
- * src/psaux/psconv.h: Move macros IS_PS_NEWLINE, IS_PS_SPACE,
- IS_PS_SPECIAL, IS_PS_DELIM, IS_PS_DIGIT, IS_PS_XDIGIT, and
- IS_PS_BASE85 to include/freetype/internal/psaux.h.
-
- * src/psaux/psobjs.c (ps_parser_to_token_array): Allow `token'
- argument to be NULL if we want only to count the number of tokens.
- (ps_tocoordarray): Allow `coords' argument to be NULL if we just
- want to skip the array.
- (ps_tofixedarray): Allow `values' argument to be NULL if we just
- want to skip the array.
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Add support
- for (partially commented out) othersubrs 19-25, 27, and 28.
- (t1_decoder_init): Initialize new fields `face' and `buildchar'.
- (t1_decoder_done): Release new field `buildchar'.
-
- * src/type1/t1load.c (parse_buildchar, parse_private): New
- functions.
- (t1_keywords): Register them.
- (t1_allocate_blend): Updated.
- (t1_load_keyword): Handle field types T1_FIELD_LOCATION_LOADER,
- T1_FIELD_LOCATION_FACE and T1_FIELD_LOCATION_BLEND.
- (parse_dict): Remove `keyword_flags' argument.
- Use new macro IS_PS_TOKEN.
- Changed function so that later PostScript definitions override
- earlier ones.
- (t1_init_loader): Initialize new field `keywords_encountered'.
- (T1_Open_Face): Initialize new fields `ndv_idx', `cdv_idx', and
- `len_buildchar'.
- Remove `keywords_flags'.
-
- * src/type1/t1load.h (T1_LoaderRec): New field
- `keywords_encountered'.
- (T1_PRIVATE, T1_FONTDIR_AFTER_PRIVATE): New macros.
-
- * src/type1/t1tokens.h [!T1_CONFIG_OPTION_NO_MM_SUPPORT]: New
- entries for parsing /NDV, /CDV, and /DesignVector.
-
-2006-07-07 Werner Lemberg <wl@gnu.org>
-
- Add many checks to protect against malformed PCF files.
-
- * src/pcf/pcfdrivr.c (PCF_Face_Done): Protect against NULL pointers.
- (PCF_Face_Init): Add calls to PCF_Face_Done in case of errors.
-
- * src/pcf/pcfread.c (pcf_read_TOC): Protect against malformed table
- data and check that tables don't overlap (using a simple
- bubblesort).
- (PCF_METRIC_SIZE, PCF_COMPRESSED_METRIC_SIZE, PCF_PROPERTY_SIZE):
- New macros which give the size of data structures in the data
- stream.
- (pcf_get_properties): Use rough estimates to get array size limits.
- Assign `face->nprops' and `face->properties' earlier so that a call
- to PCF_Face_Done can do the clean-up in case of error.
- Protect against invalid string offsets.
- (pcf_get_metrics): Clean up code.
- Adjust tracing message levels.
- Use rough estimate to get array size limit.
- (pcf_get_bitmaps): Clean up code.
- Adjust tracing message levels.
- Use rough estimates to get offset limits.
- (pcf_get_encodings): Adjust tracing message level.
- (pcf_get_accel): Clean up code.
-
-2006-06-26 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Handle fonts correctly which
- don't have a POINT_SIZE property. This fixes Savannah bug #16914.
-
-2006-06-26 Jens Claudius <jens.claudius@yahoo.com>
-
- * src/psaux/t1decode.c (T1_Operator, t1_args_count): Add opcode 15.
- (t1_decoder_parse_charstrings): Operator with
- opcode 15 pops its two arguments.
- Handle the case where the pops of an othersubr may be part of a
- subroutine.
- Handle unknown othersubrs gracefully: count their operands and let
- the following pop operators push the operands as the results onto
- the Type1 stack.
- Improve handling of setcurrentpoint opcode.
-
-2006-06-25 Jens Claudius <jens.claudius@yahoo.com>
-
- The Type 1 parser now skips over top-level procedures as required
- for a `Simplified Parser'. This makes the parser more robust as it
- doesn't poke around in PostScript code. Additionally, it makes the
- FontDirectory hackery in src/type1/t1load.c unnecessary.
-
- * src/psaux/psobjs.c (IS_OCTAL_DIGIT): New macro.
- (skip_literal_string): Add FT_Error as return value.
- Handle escapes better.
- (skip_string): Add FT_Error as return value.
- Don't set `parser->error' but return error code directly.
- (skip_procedure): New function.
- (ps_parser_skip_PS_token): Handle procedures.
- Update code.
- (ps_parser_to_token): Update code.
- (ps_parser_load_field_table): Handle bbox entries also.
-
- * src/type1/t1load.c (parse_dict): Remove FontDirectory hackery.
- Add commented-out code for synthetic fonts.
-
-2006-06-24 Eugeniy Meshcheryakov <eugen@univ.kiev.ua>
-
- Fix two hinting bugs as reported in
- http://lists.gnu.org/archive/html/freetype-devel/2006-06/msg00057.html.
-
- * include/freetype/internal/tttypes.h (TT_GlyphZoneRec): Add
- `first_point' member.
-
- * src/truetype/ttgload.c (tt_prepare_zone): Initialize
- `first_point'.
- (TT_Process_Composite_Glyph): Always untouch points.
-
- * src/truetype/ttinterp.c (Ins_SHC): Fix computation of
- `first_point' and `last_point' in case of composite glyphs.
- (Ins_IUP): Fix computation of `end_point'.
-
-2006-06-22 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Insert EndianS16_BtoN and EndianS32_BtoN as workaround for Intel
- Mac. The original patch was written by David Sachitano and Lawrence
- Coopet, and modified by Sean McBride for MPW compatibility. Only
- required data are converted; unused data are left in big endian.
-
- * src/base/ftmac.c: Include <Endian.h> for byteorder macros for non
- Mac OS X platforms.
- (OS_INLINE): Undefine before definition.
- (count_faces_sfnt): Insert EndianS16_BtoN to parse the header of
- FontAssociation table in FOND resource.
- (count_faces_scalable): Insert EndianS16_BtoN to parse the header
- and fontSize at each entry of FontAssociation table in FOND
- resource.
- (parse_fond): Insert EndianS16_BtoN and EndianS32_BtoN to parse
- ffStylOff of FamilyRecord header of FOND resource, the header,
- fontSize, fontID at each entry of FontAssociation table, and
- StyleMapping table.
- (count_faces): Call `HUnlock' after all FOND utilization.
-
-2006-06-08 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Public API of TrueTypeGX, OpenType, and classic kern table validator
- should return `FT_Err_Unimplemented_Feature' if validation service
- is unavailable (disabled in `modules.cfg'). It is originally
- suggested by David Turner, cf.
- http://lists.gnu.org/archive/html/freetype-devel/2005-11/msg00078.html
-
- * src/base/ftgxval.c (FT_TrueTypeGX_Validate): Return
- FT_Err_Unimplemented_Feature if TrueTypeGX validation service is
- unavailable.
- (FT_ClassicKern_Validate): Return FT_Err_Unimplemented_Feature if
- classic kern table validation service is unavailable.
-
- * src/base/ftotval.c (FT_OpenType_Validate): Return
- FT_Err_Unimplemented_Feature if OpenType validation service is
- unavailable.
-
-2006-06-08 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdflib.c (bdf_load_font): Fix memory leaks in case of
- errors.
-
-2006-06-07 David Turner <david@freetype.org>
-
- * src/type1/t1afm.c (KERN_INDEX): Make it more robust.
- (T1_Read_Metrics): Fix memory leak which happened when the metrics
- file doesn't have kerning pairs. This fixes Savannah bug #16768.
-
-2006-06-06 David Turner <david@freetype.org>
-
- Fix memory leak described in Savannah bug #16759.
-
- We change `ps_unicodes_init' so that it also takes a
- `free_glyph_name' callback to release the glyph names returned by
- `get_glyph_name'
-
- * include/freetype/internal/services/svpscmap.h (PS_Glyph_NameFunc):
- Renamed to ...
- (PS_GetGlyphNameFunc): This.
- (PS_FreeGlyphNameFunc): New typedef.
- (PS_Unicodes_InitFunc): Add variable for PS_FreeGlyphNameFunc.
-
- * src/cff/cffcmap.c (cff_sid_to_glyph_name): Use `TT_Face' for first
- argument.
- (cff_sid_free_glyph_name): New function.
- (cff_cmap_unicode_init): Updated.
-
- * src/psaux/t1cmap.c (t1_cmap_unicode_init): Updated.
-
- * src/psnames/psmodule.c (ps_unicodes_init): Add variable for
- PS_FreeGlyphNameFunc and use it.
-
-
-2006-06-04 David Turner <david@freetype.org>
-
- * src/base/ftutil.c (ft_mem_qrealloc): Fix the function to accept
- `item_size == 0' as well -- though this sounds weird, it can
- theoretically happen. This fixes Savannah bug #16669.
-
- * src/pfr/pfrobjs.c (pfr_face_init): Fix the computation
- of `face->num_glyphs' which missed the last glyph, due to
- the offset-by-1 computation, since the PFR format doesn't
- guarantee that glyph index 0 corresponds to the `missing
- glyph. This fixes Savannah bug #16668.
-
-2006-05-25 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/unix-cc.in (LINK_LIBRARY): Don't comment out
- `-no-undefined'. Reported by Christian Biesinger.
-
-2006-05-19 Brian Weed <bw@imaginengine.com>
-
- * builds/win32/visualc/freetype.dsp: Release libraries no longer
- have debug information, and debug libraries use `C7 compatible'
- debug info.
-
-2006-05-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Apply patch by Derek Clegg to fix two memory leaks in the MacOS
- resource fork handler. This fixes Savannah bug #16631.
-
- * src/base/ftobjs.c (load_face_in_embedded_rfork): Replace
- `FT_Stream_Close' by `FT_Stream_Free' to fix memory leak.
-
- * src/base/ftrfork.c (raccess_guess_linux_double_from_file_name):
- Replace `FT_Stream_Close' by `FT_Stream_Free' to fix memory leak.
-
-2006-05-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * build/unix/configure.raw: Add a fallback to disable Carbon
- dependency, if configured with no options on Mac OS X.
-
-2006-05-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftmac.c (open_face_from_buffer): Deallocate stream when
- its content cannot be parsed as supported font. This fixes
- the second part of Savannah bug #16590.
-
-2006-05-18 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (TT_Load_Composite_Glyph)
- [TT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Make it compilable again.
-
-2006-05-17 David Turner <david@freetype.org>
-
- This is a major patch used to drastically improve the performance of
- loading glyphs. This both speeds up loading the glyph vectors
- themselves and the auto-fitter module.
-
- We now use inline assembler code with GCC to implement `FT_MulFix',
- which is probably the most important function related to the
- engine's performance.
-
- The resulting speed-up is about 25%.
-
-
- * include/freetype/internal/tttypes.h (TT_LoaderRec): Add fields
- `cursor' and `limit'.
-
- * src/autofit/afangles.c (af_corner_is_flat, af_corner_orientation):
- New functions.
- (AF_ATAN_BITS, af_arctan, af_angle_atan): Comment out.
- [TEST]: Remove.
-
- * src/autofit/afcjk.c (AF_Script_UniRangeRec): Comment out test
- code.
-
- * src/autofit/afhints.c (af_axis_hints_new_segment): Don't call
- `FT_ZERO'
- (af_direction_compute, af_glyph_hints_compute_inflections): Rewritten.
- (af_glyph_hints_reload: Rewrite recognition of weak points.
-
- * src/autofit/aflatin.c (af_latin_hints_compute_segments): Move
- constant values out of the loops.
-
- * src/autofit/aftypes.h: Updated.
-
- * src/base/ftcalc.c (FT_MulFix): Use inline assembler code.
-
- * src/base/ftoutln.c (FT_Outline_Get_Orientation): Use vector
- product to get orientation.
-
- * src/gzip/ftgzip.c (ft_get_uncompressed_size): New function.
- (FT_Stream_OpenGzip): Use it to handle small files directly in
- memory.
-
- * src/psaux/psconv.c (PS_Conv_ASCIIHexDecode, PS_Conv_EexecDecode):
- Improve performance.
-
- * src/truetype/ttgload.c (TT_Access_Glyph_Frame): Set `cursor' and
- `limit'.
-
- (TT_Load_Glyph_Header, TT_Load_Simple_Glyph,
- TT_Load_Composite_Glyph): Updated. Add threshold to protect against
- exceedingly large values of number of contours. Speed up by
- reducing the number of loops.
-
- * src/type1/t1gload.c (T1_Load_Glyph): Don't apply unit matrix.
-
-
- * src/cache/ftccmap.c (FTC_CMapCache_Lookup): Change the threshold
- used to detect rogue clients from 4 to 16. This is to prevent some
- segmentation faults with fonts like `KozMinProVI-Regular.otf' which
- comes from the Japanese Adobe Reader Asian Font pack.
-
-2007-05-17 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffload.c (cff_font_done): Deallocate subfont array. This
- fixes the first part of Savannah bug #16590.
-
-2006-05-16 Werner Lemberg <wl@gnu.org>
-
- * docs/PROBLEMS: Updated icl issues.
-
-----------------------------------------------------------------------------
-
-Copyright 2006-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used, modified,
-and distributed under the terms of the FreeType project license,
-LICENSE.TXT. By continuing to use, modify, or distribute this file you
-indicate that you have read the license and understand and accept it
-fully.
-
-
-Local Variables:
-version-control: never
-coding: utf-8
-End:
diff --git a/ChangeLog.24 b/ChangeLog.24
deleted file mode 100644
index 796763cd7..000000000
--- a/ChangeLog.24
+++ /dev/null
@@ -1,6360 +0,0 @@
-2013-05-08 Werner Lemberg <wl@gnu.org>
-
- * Version 2.4.12 released.
- ==========================
-
-
- Tag sources with `VER-2-4-12'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.4.12.
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.4.11/2.4.12/, s/2411/2412/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 12.
-
- * builds/unix/configure.raw (version_info): Set to 16:1:10.
-
-2013-05-08 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2013-05-08 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Typo.
-
-2013-05-05 Werner Lemberg <wl@gnu.org>
-
- Synchronize `ftconfig.h'.
-
- * builds/unix/ftconfig.in: Updated.
-
-2013-05-05 Werner Lemberg <wl@gnu.org>
-
- Fix compilation with C++.
-
- * src/base/md5.c (body): Use proper cast.
-
-2013-05-05 Werner Lemberg <wl@gnu.org>
-
- Fix 64bit compilation issues.
-
- * include/freetype/config/ftconfig.h [FT_LONG64]: Typedef
- `FT_Int64' here.
-
- * src/base/ftcalc.c: Remove typedef of `FT_Int64'.
- (FT_DivFix): Fix cast.
- * src/base/fttrigon.c: Remove typedef of `FT_Int64'.
-
-2013-05-05 Werner Lemberg <wl@gnu.org>
-
- [raster] Fix clang issues.
-
- Fix suggested by <octoploid@yandex.com>.
-
- * src/raster/ftraster.c (ULong): New typedef.
- (SCALED): Add proper cast.
-
-2013-05-04 Werner Lemberg <wl@gnu.org>
-
- Fix clang fixes.
-
- * src/base/fttrigon.c (ft_trig_prenorm, FT_Vector_Rotate): Use
- correct types.
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString) <default>: Force
- unsigned for computations.
- * src/cff/cffgload.c (cff_decoder_parse_charstrings): Ditto.
- * src/cff/cffparse.c (cff_parse_integer): Ditto.
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Ditto.
-
-2013-05-04 Werner Lemberg <wl@gnu.org>
-
- [cff] Make Adobe CFF engine work correctly on 64bit hosts.
-
- Reported by numerous people on the `freetype-devel' list. Without
- this fix, glyphs aren't properly aligned on a common baseline.
-
- On 64bit systems, `FT_Pos' expands to `long int', having a width of
- 64bit. `CF2_Fixed' expands to `int' which is normally 32bit wide on
- 64bit hosts also. Wrong casts filled up the blues arrays with
- incorrect values. Note that all blues values are accessed with the
- `cf2_blueToFixed' macro which handles the 64bit to 32bit conversion.
-
- * src/cff/cf2ft.h (cf2_getBlueValues, cf2_getOtherBlues,
- cf2_getFamilyBlues, cf2_getFamilyOtherBlues): Use `FT_Pos' for
- `data', not `CF2_Fixed'.
- * src/cff/cf2ft.c (cf2_getBlueValues, cf2_getOtherBlues,
- cf2_getFamilyBlues, cf2_getFamilyOtherBlues): Updated.
- * src/cff/cf2blues.c (cf2_blues_init): Updated.
-
-2013-05-04 Werner Lemberg <wl@gnu.org>
-
- More fixes for clang's `sanitize' feature.
-
- * src/base/ftcalc.c (FT_DivFix): Use unsigned values for
- computations which use the left shift operator and convert to signed
- as the last step.
- * src/base/fttrigon.c (ft_trig_prenorm, FT_Vector_Rotate,
- FT_Vector_Length, FT_Vector_Polarize): Ditto.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings): Simplify.
- * src/cff/cffload.c (cff_subfont_load): Fix constant.
- * src/cff/cffparse.c (cff_parse_integer, cff_parse_real, do_fixed,
- cff_parse_fixed_dynamic): Use unsigned values for computations which
- use the left shift operator and convert to signed as the last step.
-
- * src/cid/cidload.c (cid_get_offset): Ditto.
-
- * src/psaux/psconv.c (PS_Conv_ToFixed): Ditto.
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Ditto.
-
- * src/truetype/ttinterp.c (TT_MulFix14, TT_DotFix14): Ditto.
-
-2013-05-04 Werner Lemberg <wl@gnu.org>
-
- Fix errors reported by clang's `sanitize' feature.
-
- * include/freetype/internal/ftstream.h: Simplify and fix integer
- extraction macros.
- (FT_INT8_, FT_BYTE_I16, FT_BYTE_I32, FT_INT8_I16, FT_INT8_I32,
- FT_INT8_I32, FT_INT8_U32): Removed.
- (FT_PEEK_SHORT, FT_PEEK_LONG, FT_PEEK_OFF3, FT_PEEK_SHORT_LE,
- FT_PEEK_LONG_LE, FT_PEEK_OFF3_LE): Use unsigned values for
- computations and convert to signed as the last step.
-
- * src/cff/cf2fixed.h (cf2_intToFixed, cf2_fixedToInt,
- cf2_fracToFixed): Avoid shifts of negative values.
- (cf2_intToFrac, cf2_fixedToFrac, cf2_fixedTo26Dot6): Removed,
- unused.
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdEXTENDEDNMBR,
- default>: Use unsigned values for computations and convert to signed
- as the last step.
- Use proper types in tracing messages.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings): Use unsigned
- values for computation of operands and convert to signed as the last
- step.
- Use proper type in tracing message.
-
-2013-05-03 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cf2blues.c: Remove dead code.
-
-2013-05-02 Chris Liddell <chris.liddell@artifex.com>
-
- * src/cff/cffgload.c: Include FT_CFF_DRIVER_H.
-
-2013-04-27 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
- * README: Improved.
-
-2013-04-13 Werner Lemberg <wl@gnu.org>
-
- [cff] Add a new Type 2 interpreter and hinter.
-
- This work, written by Dave Arnold <darnold@adobe.com> and fully
- integrated into FreeType by me, is a donation by Adobe in
- collaboration with Google. It is vastly superior to the old CFF
- engine, and it will replace it soon. Right now, it is still off by
- default, and you have to explicitly select it using the new
- `hinting-engine' property of the cff driver.
-
- For convenience, (most of) the new files are committed separately.
-
- * include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
- * include/freetype/ftcffdrv.h: New file to access CFF driver
- properties.
- * include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
- code.
- * include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
- and `cf2interp'.
-
- * src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
- * src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
- and `no_stem_darkening'.
- * src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
-
- * src/cff/cff.c: Include new files.
- * src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
- `hinting-engine' and `no-stem-darkening' properties (only the Adobe
- engine listens to them).
- * src/cff/cffgload.c: Include `cf2ft.h'.
- (cff_decoder_prepare): Initialize `current_subfont'.
- (cff_build_add_point): Handle Adobe engine which uses 16.16
- coordinates.
- (cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
- separately.
- Choose rendering engine based on `hinting_engine' property.
- * src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
- engine.
- * src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
- (cff_driver_init): Set default property values.
-
- * src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
-
- * src/cff/cf2*.*: New files, containing the Adobe engine.
-
-2013-04-12 Werner Lemberg <wl@gnu.org>
-
- [cff] Minor code administration issues.
-
- * src/cff/cffgload.c (check_points): Rename to...
- (cff_check_points): ...this and make it FT_LOCAL.
- (cff_builder_add_point, cff_builder_add_point1,
- cff_builder_start_point, cff_builder_close_contour,
- cff_lookup_glyph_by_stdcharcode, cff_get_glyph_data,
- cff_free_glyph_data): Make them FT_LOCAL.
-
- * src/cff/cffgload.h: Updated.
-
-2013-04-12 Werner Lemberg <wl@gnu.org>
-
- Add output bitmap checksums.
-
- Use `FT2_DEBUG=bitmap:3' for tracing.
-
- * src/base/md5.c, src/base/md5.h: New files, taken from
-
- http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
-
- * include/freetype/internal/fttrace.h: Add `bitmap'.
-
- * src/base/ftobjs.c [FT_DEBUG_LEVEL_TRACE]: Include `md5.c'
-
- (FT_Render_Glyph_Internal) [FT_DEBUG_LEVEL_TRACE]: For tracing,
- convert resulting bitmap to a uniform format and compute a checksum.
- Use `bitmap' category for the tracing message.
-
- * src/base/rules.mk (BASE_H): Updated.
-
- * docs/LICENSE.TXT: Updated.
-
-2013-04-12 Werner Lemberg <wl@gnu.org>
-
- [cff] Add framework for CFF properties.
-
- * include/freetype/internal/ftserv.h (FT_DEFINE_SERVICEDESCREC7):
- New macro.
-
- * src/cff/cffdrivr.c: Include FT_SERVICE_PROPERTIES_H.
- (cff_property_set, cff_property_get): New functions, still empty.
- Define `cff_service_properties' service.
- Update `cff_services'.
-
- * src/cff/cffpic.h: Include FT_SERVICE_PROPERTIES_H.
- (CFF_SERVICE_PROPERTIES_GET): New macro.
- (CffModulePIC): Add `cff_service_properties'.
-
-2013-04-03 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #38589.
-
- * src/bdf/bdflib.c (_bdf_readstream): Thinko.
-
-2013-03-31 Werner Lemberg <wl@gnu.org>
-
- * configure: Use egrep, not grep.
-
- Problem reported Mojca Miklavec <mojca.miklavec.lists@gmail.com>.
-
-2013-03-29 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftlcdfil.h: Add description of color filtering.
-
- Based on a contribution from Antti S. Lankila <alankila@bel.fi>
- (Savannah bug #38607).
-
-2013-03-23 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor.
-
- * src/autofit/afmodule.c (af_property_set): Typo.
- (af_autofitter_init, af_autofitter_done): Use cast.
-
-2013-03-21 Werner Lemberg <wl@gnu.org>
-
- * configure: Automatically test for `gmake' also.
-
- Suggested by Mojca Miklavec <mojca.miklavec.lists@gmail.com>.
-
-2013-03-21 Peter Breitenlohner <peb@mppmu.mpg.de>
-
- Respect CONFIG_SHELL from the environment.
-
- Some large packages using FreeType have to use a broken (deficient)
- /bin/sh. The configure scripts (as generated by Autoconf) are
- clever enough to find a better shell and put that one into the
- environment variable CONFIG_SHELL. If that environment variable is
- already set the script skips the test and assumes to be already
- running under a good shell.
-
- * builds/unix/detect.mk: Honour CONFIG_SHELL.
- * builds/unix/unix-def.in (SHELL): Define.
-
-2013-03-21 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah patch #7971.
-
- * configure: Handle MAKE environment variable also.
-
-2013-03-17 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #38538.
-
- * builds/amiga/src/base/ftdebug.c, builds/win32/ftdebug.c,
- builds/wince/ftdebug.c (FT_Throw): Add function.
-
-2013-03-17 Werner Lemberg <wl@gnu.org>
-
- [raster] Remove dead code.
-
- * src/raster/rastpic.c (ft_raster1_renderer_class_pic_init)
- src/smooth/ftspic.c (ft_smooth_renderer_class_pic_init): Do it.
-
-2013-03-17 Werner Lemberg <wl@gnu.org>
-
- * src/pshinter/pshpic.h (GET_PIC): Use correct container.
-
-2013-03-15 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftmoderr.h: Fix commit from 2013-03-11.
-
- The previous version was not backward compatible. Reported by
- Behdad.
-
-2013-03-14 Werner Lemberg <wl@gnu.org>
-
- */*: Use FT_ERR_EQ, FT_ERR_NEQ, and FT_ERR where appropriate.
-
- FT_Err_XXX and friends are no longer directly used in the source
- code.
-
-2013-03-14 Werner Lemberg <wl@gnu.org>
-
- New error management macros.
-
- * include/freetype/fterrors.h (FT_ERR_XCAT, FT_ERR_CAT): Move to...
- * include/freetype/fttypes.h: ... this file.
- (FT_ERR, FT_ERR_EQ, FT_ERR_NEQ, FT_MODERR_EQ, FT_MODERR_NEQ): New
- macros.
-
- * include/freetype/freetype.h: Updated.
-
-2013-03-14 Werner Lemberg <wl@gnu.org>
-
- */*: Use FT_Err_Ok only.
-
- This is a purely mechanical conversion.
-
-2013-03-14 Werner Lemberg <wl@gnu.org>
-
- */*: Use `FT_THROW'.
-
- This is essentially a mechanical conversion, adding inclusion of
- `FT_INTERNAL_DEBUG_H' where necessary, and providing the macros for
- stand-alone compiling modes of the rasterizer modules.
-
- To convert the remaining occurrences of FT_Err_XXX and friends it is
- necessary to rewrite the code. Note, however, that it doesn't harm
- if some cases are not handled since FT_THROW is a no-op.
-
-2013-03-13 Werner Lemberg <wl@gnu.org>
-
- Introduce `FT_THROW' macro.
-
- The idea is to replace code like
-
- return FT_Err_Foo_Bar;
-
- or
-
- return CFF_Err_Foo_Bar;
-
- with
-
- return FT_THROW( Foo_Bar );
-
- The FT_THROW macro has two functions:
-
- . It hides the module specific prefix.
-
- . In debug mode, it calls the empty function `FT_Throw' which can
- be thus used to set a breakpoint.
-
- * include/freetype/internal/ftdebug.h (FT_THROW): New macro.
- (FT_Throw): New prototype.
- * src/base/ftdebug.c (FT_Throw): New function.
-
-2013-03-12 Werner Lemberg <wl@gnu.org>
-
- Remove `FT_KEEP_ERR_PREFIX'.
-
- The idea is to always have FT_ERR_PREFIX available internally.
-
- * include/freetype/fterrors.h: Use FT2_BUILD_LIBRARY to guard
- undefinition of FT_ERR_PREFIX
-
- * src/gxvalid/gxverror.h, src/otvalid/otverror.h,
- src/sfnt/sferrors.h: Updated.
-
-2013-03-11 Werner Lemberg <wl@gnu.org>
-
- [gxvalid] Fix module error.
-
- * src/gxvalid/gxverror.h (FT_ERR_BASE): Define as
- FT_Mod_Err_GXvalid.
- * include/freetype/ftmoderr.h: Add module error for `GXvalid'.
-
-2013-03-11 Werner Lemberg <wl@gnu.org>
-
- Always use module related error codes.
-
- * src/cff/cffobjs.c (cff_face_init), src/type1/t1objs.c
- (T1_Face_Init), src/type42/t42objs.c (T42_Face_Init): Use
- `FT_ERROR_BASE'.
-
- * src/type1/t1load.c (parse_encoding): Use
- T1_Err_Unknown_File_Format.
-
-2013-03-08 Werner Lemberg <wl@gnu.org>
-
- [cff] Set `linear{Hori,Vert}Advance' for embedded bitmaps also.
-
- Problem reported by Khaled Hosny <khaledhosny@eglug.org>.
-
- * src/cff/cffgload.c (cff_slot_load): Implement it.
-
-2013-02-23 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Fix commit ab02d9e8.
-
- * src/base/ftbbox.c (BBox_Cubic_Check): Change scaling to msb of 22.
-
-2013-02-19 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] New bisecting BBox_Cubic_Check (disabled).
-
- * src/base/ftbbox.c (BBox_Cubic_Check): New bisecting algorithm
- for extremum search built around simple condition that defines
- which half contains the extremum.
-
-2013-02-18 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [tools] Update BBox testing tool.
-
- * src/tools/test_bbox.c: Add another cubic outline with exact BBox.
- (REPEAT): Increase the number of benchmarking cycles.
- (profile_outline): Tweak output formatting.
-
-2013-02-02 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #38235.
-
- * builds/unix/configure.raw: Don't generate `freetype-config' and
- `freetype.pc'.
-
- * builds/unix/unix-def.in (FT2_EXTRA_LIBS, LIBBZ2, LIBZ,
- build_libtool_libs, ft_version): New variables to be substituted.
- (freetype-config, freetype.pc): New rules to generate those files.
-
- * builds/unix/freetype-config.in: Remove code for handling `rpath'.
- The use of $rpath has been accidentally removed in a patch from
- 2009-12-22, and apparently noone has missed it since.
- Use `%' instead of `@' as a variable substitution marker.
- Use quotes.
-
- * builds/unix/freetype.in: Use `%' instead of `@' as a variable
- substitution marker.
- Use quotes.
-
-2013-02-07 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttobjs.c (tt_size_run_prep): Reset more GS variables.
-
- BTW, Greg agrees that the OpenType specification is missing the list
- of GS variables which will always be reset to the default values
- after the `prep' table has been executed.
-
-2013-02-06 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttobjs.c (tt_size_run_prep): Reset reference points.
-
- Up to now, we simply took a snapshot of the Graphics State after the
- `prep' table has been executed, and right before a glyph's bytecode
- was run it got reloaded. However, as Greg Hitchcock has told us in
- private communication, reference points get reset to zero in the MS
- rasterizer and we follow in due course. While reasonable, this is
- undocumented behaviour.
-
- Most notably, this fixes the rendering of Arial's `x' glyph in
- subpixel hinting mode.
-
-2013-02-05 Werner Lemberg <wl@gnu.org>
-
- [truetype] A better fix for Savannah bug #38211.
-
- * src/truetype/ttinterp.c (Ins_IP): Implement identical behaviour to
- MS rasterizer if rp1 == rp2 (confirmed by Greg Hitchcock).
-
-2013-02-01 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [pcf] Streamline parsing of PCF encoding table.
-
- * src/pcf/pcfread.c (pcf_get_encodings): Use simpler double for-loop.
- Reallocate array instead of using temporary storage.
-
-2013-02-01 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #38227.
-
- * builds/unix/freetype-config.in: Set LC_ALL.
-
-2013-02-01 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #38221.
-
- This complements commit 83c0ebab.
-
- * src/base/ftcalc.c (FT_MulDiv_No_Round): Don't enclose with
- `TT_USE_BYTECODE_INTERPRETER'.
-
-2013-02-01 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix Savannah bug #38211.
-
- * src/truetype/ttinterp.c (Ins_IP): Make FreeType behave identical
- to other interpreters if rp1 == rp2 (which is invalid).
-
-2013-01-28 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Small optimization of BBox calculation.
-
- * src/base/ftbbox.c (BBox_Cubic_Check): Use FT_MSB function in
- scaling algorithm.
-
-2013-01-26 Infinality <infinality@infinality.net>
-
- [truetype] Minor formatting fix.
-
- * src/truetype/ttinterp.c: Updated.
- (DO_RS): Fix indentation.
-
-2013-01-26 Infinality <infinality@infinality.net>
-
- [truetype] Fix rasterizer_version logic in sph.
-
- * src/truetype/ttsubpix.c: Updated.
- (ALWAYS_SKIP_DELTAP_Rules): Remove rule for Trebuchet MS.
- (sph_set_tweaks): Fix `rasterizer_version' logic.
-
-2013-01-26 Infinality <infinality@infinality.net>
-
- [truetype] Align more to ClearType whitepaper for sph.
-
- * include/freetype/internal/tttypes.h (TT_FaceRec): Add flags
- for detected opcode patterns and compatibility mode.
-
- * src/truetype/ttgload.c (tt_loader_init): Complete conditional.
-
- * src/truetype/ttinterp.c: Updated.
- Remove SPH_DEBUG and replace with FT_TRACE7.
- (DO_RS): More conditions.
- (Ins_FDEF): Add more opcode detection patterns.
- More specific conditions when flagging an fdef.
- Make compatibility mode only turn on when delta fdefs are found.
- (Ins_CALL, Ins_LOOPCALL): Set flags for currently executed fdef.
- (Ins_SHPIX): Remove logic to handle ttfautohinted fonts.
- Simplify conditionals where possible.
- Use `&' instead of `%' operator for dumb compilers.
- (Ins_MIAP): Adjust twilight zone conditional.
- Ensure `ignore_x_mode' is on when testing sph conditionals.
- (Ins_MIRP): Ensure `ignore_x_mode' is on when testing sph
- conditionals.
- Do cvt cutin always when `ignore_x_mode' is active.
- Remove test for ttfautohinted fonts.
- (Ins_DELTAP): Ensure `ignore_x_mode' is on when testing sph
- conditionals.
- Do cvt cutin always when `ignore_x_mode' is active.
- Remove test for ttfautohinted fonts.
- Use `&' instead of `%' operator for dumb compilers.
- (Ins_GETINFO): Remove SPH_DEBUG and replace with FT_TRACE7.
-
- * src/truetype/ttinterp.h: Updated.
- (TT_ExecContextRec): Remove compatibility_mode variable.
- Add variable to indicate when executing in special fdefs for sph.
-
- * src/truetype/ttobjs.h: Updated.
- (TT_DefRecord): Add flags to identify special fdefs for sph.
- (TT_SizeRec): Remove unnecessary ttfautohinted variable.
-
- * src/truetype/ttsubpix.c: Updated.
- (COMPATIBILITY_MODE_Rules): Remove all. Auto-detected now.
- (PIXEL_HINTING_Rules): Remove all. Unnecessary after fixes.
- (SKIP_NONPIXEL_Y_MOVES_Rules): Remove Ubuntu.
- (SKIP_NONPIXEL_Y_MOVES_Rules_Exceptions): Add Arial Bold `N'.
- (SKIP_OFFPIXEL_Y_MOVES_Rules): Remove all. Happens automatically
- now.
- (ROUND_NONPIXEL_Y_MOVES_Rules): Remove Ubuntu.
- (ROUND_NONPIXEL_Y_MOVES_Rules_Exceptions): Remove all.
- (NORMAL_ROUND_Rules): Remove Verdana.
- (NO_DELTAP_AFTER_IUP_Rules): Remove all.
- (sph_set_tweaks): Performance fix. Don't run prep always.
- Adjust conditional for sph_compatibility_mode.
-
- * src/truetype/ttsubpix.h: Add new fdef flags for sph.
-
-2013-01-23 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Fix broken emboldening at small sizes.
-
- * src/base/ftoutln.c (FT_Outline_EmboldenXY): Do not attempt to
- normalize zero-length vectors.
-
-2013-01-25 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #38167.
-
- This fixes commit 83c0ebab from 2012-06-27.
-
- * src/truetype/ttinterp.h:
- s/TT_CONFIG_OPTION_BYTECODE_INTERPRETER/TT_USE_BYTECODE_INTERPRETER/.
-
-2013-01-25 Xi Wang <xi.wang@gmail.com>
-
- [sfnt] Fix broken pointer overflow checks.
-
- Many compilers such as gcc and clang optimize away pointer overflow
- checks `p + n < p', because pointer overflow is undefined behavior.
- Use a safe form `n > p_limit - p' instead.
-
- Also avoid possible integer overflow issues, for example, using
- `num_glyphs > ( p_limit - p ) / 2' rather than `num_glyphs * 2'
- given a large `num_glyphs'.
-
- * src/sfnt/ttsbit0.c (tt_sbit_decoder_load_image): Implement it.
-
-2013-01-25 Werner Lemberg <wl@gnu.org>
-
- [base] Fix `make multi'.
-
- * src/base/ftoutln.c, src/base/fttrigon.c: Include
- FT_INTERNAL_CALC_H.
-
-2013-01-25 David 'Digit' Turner <digit@google.com>
-
- [truetype] Fix C++ compilation.
-
- * src/truetype/ttsubpix.h: Updated.
- (SPH_X_SCALING_RULES_SIZE): Moved and renamed to...
- * src/truetype/ttsubpix.c (X_SCALING_RULES_SIZE): This.
- (sph_X_SCALING_Rules): Removed.
- (scale_test_tweak): Make function static.
- (sph_test_tweak_x_scaling): New function.
-
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Updated.
-
-2013-01-23 Werner Lemberg <wl@gnu.org>
-
- [base] Make `FT_Hypot' really internal.
-
- * include/freetype/fttrigon.h (FT_Hypot): Move to...
- * include/freetype/internal/ftcalc.h: This file.
-
- * src/base/fttrigon.c (FT_Hypot): Move to...
- * src/base/ftcalc.c: This file.
- Include FT_TRIGONOMETRY_H.
-
- * src/truetype/ttgload.c: Don't include FT_TRIGONOMETRY_H.
-
-2013-01-23 Werner Lemberg <wl@gnu.org>
-
- [truetype] Revert change from 2013-01-22.
-
- FreeType's `height' value is the baseline-to-baseline distance...
-
- * src/truetype/ttobjs.c (tt_size_reset): Undo.
-
-2013-01-23 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base, truetype] New internal `FT_Hypot' function.
-
- * include/freetype/fttrigon.h (FT_Hypot): Declare it.
- * src/base/fttrigon.c (FT_Hypot): Define it.
- * src/truetype/ttgload.c (TT_Process_Composite_Component): Use it
- instead of explicit expressions.
- * src/truetype/ttinterp.c (Current_Ratio, Normalize): Use it instead
- of TT_VecLen.
- (TT_VecLen): Removed.
-
-2013-01-23 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Fix integer overflow.
-
- * src/base/ftoutln.c (FT_Outline_EmboldenXY): Normalize incoming and
- outgoing vectors and use fixed point arithmetic.
-
-2013-01-23 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Fix integer overflow.
-
- * src/base/ftoutln.c (FT_Outline_Get_Orientation): Scale the
- coordinates down to avoid overflow.
-
-2013-01-23 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Split out MSB function.
-
- * src/base/fttrigon.c (ft_trig_prenorm): Borrow from here.
- * include/freetype/internal/ftcalc.h (FT_MSB): Declare here.
- * src/base/ftcalc.c (FT_MSB): Define here.
-
-2013-01-22 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix font height.
-
- * src/truetype/ttobjs.c (tt_size_reset): The Windows rendering
- engine uses rounded values of the ascender and descender to compute
- the TrueType font height.
-
-2013-01-16 Behdad Esfahbod <behdad@behdad.org>
-
- [sfnt] Fix optimized sbit loader.
-
- It was not taking bit_depth into consideration when blitting!
-
- * src/sfnt/ttsbit0.c (tt_sbit_decoder_load_byte_aligned,
- * tt_sbit_decoder_load_bit_aligned): Handle bit
- depth.
-
-2013-01-16 David 'Digit' Turner <digit@google.com>
-
- [truetype] Improve sub-pixel code.
-
- This patches fixes many issues with the ttsubpix implementation.
-
- 1. Data tables are defined, instead of declared, in the header, and
- thus copied into each source file that includes it.
-
- 2. These tables were defined as global, mutable, visible variables,
- and thus costing private RAM to every process that loads the
- library (> 50 KB / process, this is huge!).
-
- Additionally, this also made the library export the symbols
- completely needlessly.
-
- 3. Missing `sph_' and `SPH_' prefixes to some of the definitions.
-
- Note that this doesn't try to fix the incredibly inefficient storage
- format for the data tables used by the code. This one will require
- another pass in the future.
-
- * src/truetype/ttinterp.h (MAX_NAME_SIZE, MAX_CLASS_MEMBERS):
- Renamed to...
- (SPH_MAX_NAME_SIZE, SPH_MAX_CLASS_MEMBERS): This.
- Update all users.
-
- (SPH_TweakRule, SPH_ScaleRule): Decorate with `const' where
- appropriate.
-
- (Font_Class): Rename to...
- (SPH_Font_Class): This. Decorate with `const' where appropriate.
-
- * src/truetype/ttsubpix.h (scale_test_tweak, sph_test_tweak):
- Decorate arguments with `const' where appropriate.
-
- Move font tweaking tables to...
-
- * src/truetype/ttsubpix.c: This file and decorate them with `static'
- and `const' where appropriate.
-
- (X_SCALING_Rules, X_SCALING_RULES_SIZE): Renamed to...
- (sph_X_SCALING_Rules, SPH_X_SCALING_RULES_SIZE): This.
- Update all users.
-
-2013-01-12 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Improve accuracy of normalization of short vectors.
-
- Unit vector components are stored as 2.14 fixed-point numbers. In
- order to calculate all 14 bits accurately, a short vector to be
- normalized has to be upscaled to at least 14 bits before its length
- is calculated. This has been safe since accurate CORDIC algorithms
- were adopted.
-
- * src/truetype/ttinterp.c (Normalize): Scale short vectors by 0x4000.
-
-2013-01-12 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Kill very old vector normalization hacks.
-
- Back in the days, vector length calculations were not very accurate
- and the vector normalization function, Normalize, had to meticulously
- correct the errors for long vectors [commit b7ef2b096867]. It was no
- longer necessary after accurate CORDIC algorithms were adopted, but
- the code remained. It is time to kill it.
-
- * src/truetype/ttinterp.c (Normalize): Remove error compensation.
- (TT_VecLen): Remove any mention of old less accurate implementation.
-
-2013-01-11 Werner Lemberg <wl@gnu.org>
-
- Disable FT_CONFIG_OPTION_OLD_INTERNALS.
-
- After the next release we are going to remove the code completely.
-
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (FT_CONFIG_OPTION_OLD_INTERNALS): Comment out.
- * docs/CHANGES: Document it.
-
-2013-01-10 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Update the overflow protection bit.
-
- The recent optimizations of CORDIC iterations drastically reduce the
- expansion factor. Vector components with MSB of 29 are now safe
- from overflow.
-
- * src/base/fttrigon.c (FT_TRIG_SAFE_MSB): New macro.
- (ft_trig_prenorm): Use it and remove dead code.
-
-2013-01-09 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base, pshinter] Use FT_ABS, FT_MIN, and FT_MAX for readability.
-
- * src/base/ftbbox.c: Updated.
- * src/base/ftobjs.c: Updated.
- * src/base/fttrigon.c: Updated.
- * src/pshinter/pshalgo.c: Updated.
- * src/pshinter/pshrec.c: Updated.
-
-2013-01-08 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Clean up trigonometric core.
-
- * src/base/fttrigon.c: Document the algorithm in a large comment.
- (FT_TRIG_COSCALE): Remove macro.
- (FT_Tan: Use `FT_TRIG_SCALE' instead.
- (FT_Cos, FT_Vector_Unit): Ditto and round the return values.
-
-2013-01-02 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Use rounding in CORDIC iterations.
-
- * src/base/fttrigon.c (ft_trig_pseudo_rotate,
- ft_trig_pseudo_polarize): Improve accuracy by rounding.
-
-2013-01-02 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Reduce trigonometric algorithms.
-
- After we get within 45 degrees by means of true 90-degree rotations,
- we can remove initial 45-degree CORDIC iteration and start from
- atan(1/2) pseudorotation, reducing expansion factor thereby.
-
- * src/base/fttrigon.c (FT_TRIG_SCALE, FT_TRIG_COSCALE): Update macros.
- (ft_trig_pseudo_rotate, ft_trig_pseudo_polarize): Update.
-
- * src/tools/cordic.py: Bring up to date with trigonometric core.
-
- * docs/CHANGES: Old typo.
-
-2013-01-02 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/pshinter/pshalgo.h: Remove unused code.
-
-2012-12-27 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (tt_loader_init): Add more tracing.
-
-2012-12-23 Werner Lemberg <wl@gnu.org>
-
- [type1] Fix handling of /FontBBox in MM fonts.
- Problem reported by Del Merritt <del@alum.mit.edu>
-
- If we have
-
- /FontBBox { { 11 12 13 14 15 16 17 18 }
- { 21 22 23 24 25 26 27 28 }
- { 31 32 33 34 35 36 37 38 }
- { 41 42 43 44 45 46 47 48 } }
-
- in the /Blend dictionary, then the first BBox is { 11 21 31 41 },
- the second { 12 22 32 42 }, etc.
-
- * include/freetype/internal/psaux.h (T1_FieldType): Add
- `T1_FIELD_TYPE_MM_BBOX' (for temporary use).
-
- * src/psaux/psobjs.c (ps_parser_load_field) <T1_FIELD_TYPE_MM_BBOX>:
- Implement it.
-
-2012-12-21 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/tools/cordic.py: Bring up to date with trigonometric core.
-
-2012-12-21 Werner Lemberg <wl@gnu.org>
-
- Check parameters of `FT_Outline_New'.
- Problem reported by Robin Watts <robin.watts@artifex.com>.
-
- * src/base/ftoutln.c (FT_Outline_New_Internal): Ensure that
- `numContours' and `numPoints' fit into FT_Outline's `n_points' and
- `n_contours', respectively.
-
-2012-12-20 Werner Lemberg <wl@gnu.org>
-
- * Version 2.4.11 released.
- ==========================
-
-
- Tag sources with `VER-2-4-11'.
-
- * docs/CHANGES, docs/release: Updated.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.4.11.
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.4.10/2.4.11/, s/2410/2411/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 11.
-
- * builds/unix/configure.raw (version_info): Set to 16:0:10.
-
- * builds/toplevel.mk (dist): Don't include `.mailmap'.
-
-2012-12-20 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Improve trigonometric core.
-
- FreeType used to rely on a 24-step iteration CORDIC algorithm to
- calculate trigonometric functions and rotate vectors. It turns out
- that once the vector is in the right half-plane, the initial rotation
- by 63 degrees is not necessary. The algorithm is perfectly capable
- to converge to any angle starting from the second 45 degree rotation.
- This patch removes the first rotation and makes it a 23-step CORDIC
- algorithm.
-
- * src/base/fttrigon.c (FT_TRIG_SCALE, FT_TRIG_COSCALE): Update macro
- values.
- (ft_trig_pseudo_rotate, ft_trig_pseudo_polarize): Remove initial
- rotation.
-
-2012-12-19 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (ft_property_do): Fix compiler warning.
-
-2012-12-19 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftrfork.c (FT_Raccess_Guess): Switch to FT_Int counters.
-
-2012-12-19 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Clean up trigonometric core.
-
- * src/base/fttrigon.c (ft_trig_pseudo_polarize): Align algorithm
- with `ft_trig_pseudo_rotate'.
-
-2012-12-18 Infinality <infinality@infinality.net>
-
- [truetype] Minor performance enhancement.
-
- * src/truetype/ttgload.c: (TT_Process_Simple_Glyph): Use FT_MulFix
- instead of FT_MulDiv.
-
-2012-12-17 Infinality <infinality@infinality.net>
-
- [truetype] Remove unused code and variables.
-
- * src/truetype/ttinterp.c: Updated.
- (Ins_FDEF): Remove opcode patterns that are not being used.
-
-2012-12-16 Werner Lemberg <wl@gnu.org>
-
- Various compiler warning fixes.
-
- * include/freetype/internal/ftserv.h (FT_SERVICE_UNAVAILABLE): Use
- `logical not' operator instead of negation. The idea is that `~'
- returns exactly the data type enforced by the cast to a pointer (be
- it 32bit or 64bit or whatever), while a negative integer has not
- this flexibility.
- * src/cache/ftccmap.c (FTC_CMAP_UNKNOWN): Ditto.
- * src/truetype/ttgxvar.c (ALL_POINTS, TT_Get_MM_Var): Ditto.
- * src/type/t1load.c (T1_Get_MM_Var): Ditto.
- (parse_blend_axis_types): Use cast.
- * src/bdf/bdflib.c (_bdf_readstream): Use cast.
-
-2012-12-16 Infinality <infinality@infinality.net>
-
- [truetype] Remove unused code and variables. Add minor fixes.
-
- * src/truetype/ttsubpix.h: Updated.
- (SKIP_NONPIXEL_Y_MOVES_Rules_Exceptions): Add Trebuchet MS.
- (ALLOW_X_DMOVEX_Rules): Remove Arial characters.
- (ALLOW_X_DMOVE_Rules): Remove Arial characters.
- (RASTERIZER_35_Rules): Verdana no longer needs to be here.
- (SKIP_IUP_Rules): Formatting fix.
- (DELTAP_SKIP_EXAGGERATED_VALUES_Rules): Remove Segoe UI.
- (COMPATIBLE_WIDTHS_Rules): Add Monaco and Trebuchet MS.
- (X_SCALING_Rules): Add misc. corrective fixes.
-
- * src/truetype/ttgload.c: (TT_Process_Simple_Glyph): Adjust correction
- factor for emboldening during scaling.
-
- * src/truetype/ttinterp.h: Updated.
- (TT_ExecContextRec): Remove unused variables.
-
- * src/truetype/ttobjs.h: Updated.
- (TT_SizeRec): Add ttfautohinted variable.
-
- * src/truetype/ttinterp.c: Updated.
- (Ins_FDEF): Rework code to fix bugs and add more detection.
- (Ins_CALL): Remove unused code.
- (Ins_LOOPCALL): Remove unused code.
- (TT_RunIns): Remove unused code.
- (Ins_SHPIX): Add logic to handle ttfautohinted fonts.
- (Ins_MIRP): Don't round x in cut-in calculation. Add logic to handle
- ttfautohinted fonts.
-
-2012-12-16 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #37936.
-
- * src/sfnt/ttload.c (tt_face_load_gasp): Avoid memory leak.
-
-2012-12-15 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Fix 11-year old bug.
-
- Since the initial commit (ebe85f59) the value of FT_TRIG_SCALE has
- always been slightly less than the correct value, which has been
- given in the comment as a hexadecimal. As a result, vector lengths
- were underestimated and rotated vectors were shortened.
-
- * src/base/fttrigon.c (FT_TRIG_SCALE): Fix macro value.
-
-2012-12-15 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #37907.
-
- * src/bdf/bdflib.c (_bdf_parse_glyphs) <ENCODING>: Normalize
- negative second parameter of `ENCODING' field also.
-
-2012-12-15 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #37906.
-
- * src/bdf/bdflib.c (_bdf_parse_glyphs) <ENCODING>: Use correct array
- size for checking `glyph_enc'.
-
-2012-12-15 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #37905.
-
- * src/bdf/bdflib.c (_bdf_parse_start) <STARTPROPERTIES>: Reset
- `props_size' to zero in case of allocation error; this value gets
- used in a loop in `bdf_free_font'.
-
-2012-12-10 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Scale F_dot_P down.
-
- The dot product between freeVector and projVector or cosine of
- the angle between these FT_F2Dot14 unit vectors used to be scaled up
- by 4 and routinely occupied 32 bits in an FT_Long field F_dot_P.
- This patch scales the value down by 2^14 instead, which simplifies
- its use throughout the bytecode interpreter.
-
- This does not lead to the loss of precision because the lower bits
- are unreliable anyway. Consider two unit vectors (1,0) and (.6,.8)
- for which the true value of F_dot_P is .6 * 0x40000000 = 0x26666666.
- These vectors are stored as (0x4000,0) and (0x2666,0x3333) after
- rounding and F_dot_P is assigned 0x26660000. The lower bits were
- already lost while rounding the unit vector components.
-
- Besides code simplification, this change can lead to better
- performance when FT_MulDiv with the scaled-down F_dot_P is less
- likely to use the costly 64-bit path. We are not changing the type
- of F_dot_P to FT_F2Dot14 at this point.
-
- * src/truetype/ttinterp.c (Compute_Funcs): Scale F_dot_P down by 14
- bits and modify its use accordingly.
- (Direct_Move, Direct_Move_Orig, Compute_Point_Displacement): Modify
- the use of F_dot_P field.
- * src/truetype/ttobjs.c (tt_size_run_fpgm): Change arbitrary
- assignment of F_dot_P to its theoretical maximum in case we decide
- to scale back its type later.
-
-2012-12-09 Johnson Y. Yan <yinsen_yan@foxitsoftware.com>
-
- [type1] Another fix for 2012-09-17 commit.
-
- * src/type1/t1parse.c (T1_Get_Private_Dict) <found>: Correctly set
- `limit' value.
-
-2012-12-06 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Tweak the previous commit.
-
- * src/truetype/ttinterp.c (Current_Ratio): Put unit vector
- components as the second TT_MulFix14 arguments. This is required
- on 16-bit systems.
-
-2012-12-06 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Microoptimizations in bytecode interpreter.
-
- * src/truetype/ttinterp.c (TT_DivFix14): New macro.
- (Normalize): Use it here.
- (Current_Ratio): Use TT_MulFix14 instead of FT_MulDiv.
- (Ins_SHPIX): Cancel out two TT_MulFix14 calls.
-
-2012-12-05 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Cosmetic improvement in bytecode interpreter.
-
- * src/truetype/ttinterp.c: Use explicit calls to FT_MulDiv,
- FT_MulFix, and FT_DivFix instead of macros.
-
-2012-12-03 John Tytgat <John.Tytgat@esko.com>
-
- [pshinter] Clamp BlueScale value.
-
- This is Savannah bug #37856.
-
- * src/pshinter/pshglob.c (psh_calc_max_height): New function.
- (psh_globals_new): Use it to limit BlueScale value to
- `1 / max_of_blue_zone_heights'.
-
-2012-12-01 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype, type1] Revise the use of FT_MulDiv.
-
- * src/truetype/ttgxvar.c: Updated.
- * src/truetype/ttobjs.c: Updated.
- * src/type1/t1load.c: Updated.
-
-2012-11-30 Werner Lemberg <wl@gnu.org>
-
- [configure] Preserve customized `ftoption.h'.
-
- Problem reported by Del Merritt <del@alum.mit.edu>.
-
- * builds/unix/configure.raw <cpp computation of bit length>: Don't
- remove existing FreeType configuration files.
-
-2012-11-29 John Tytgat <John.Tytgat@esko.com>
-
- [type1] Fix Savannah bug #37831.
-
- The bug report also contains a patch.
-
- * src/type1/t1parse.c (T1_Get_Private_Dict) <found>: Really fix
- change from 2012-09-17.
-
-2012-11-28 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Fix formatting and typo.
-
-2012-11-27 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [cid, type1, type42] Clean up units_per_EM calculations.
-
- * src/cid/cidload.c (cid_parse_font_matrix): Updated.
- * src/type1/t1load.c (t1_parse_font_matrix): Updated.
- * src/type42/t42parse.c (t42_parse_font_matrix): Updated.
-
-2012-11-27 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [ftstroke] Minor improvement.
-
- * src/base/ftstroke.c: Replace nested FT_DivFix and FT_MulFix with
- FT_MulDiv.
-
-2012-11-17 Werner Lemberg <wl@gnu.org>
-
- * src/base/fttrigon.c (ft_trig_downscale): Make 64bit version work.
-
-2012-11-15 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Fix integer overflows in dd5718c7d67a.
-
- * src/base/ftoutln.c (FT_Outline_EmboldenXY): Use FT_MulDiv.
-
-2012-11-15 Werner Lemberg <wl@gnu.org>
-
- [autofit] Trace stem widths.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_widths): Add some
- FT_TRACE calls.
-
-2012-11-13 Werner Lemberg <wl@gnu.org>
-
- [cff] Add support for OpenType Collections (OTC).
-
- * src/cff/cffload.c (cff_font_load): Separate subfont and face
- index handling to load both pure CFFs with multiple subfonts and
- OTCs (with multiple faces where each face holds exactly one
- subfont).
- * src/cff/cffobjs.c (cff_face_init): Updated.
-
-2012-11-12 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor improvement.
-
- * src/autofit/aflatin.c (af_latin_hints_compute_blue_edges): Fix
- loop.
-
-2012-11-10 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve tracing.
-
- * src/autofit/aflatin.c (af_latin_hint_edges)
- [FT_DEBUG_LEVEL_TRACE]: Count number of actions and emit something
- if there weren't any.
-
-2012-11-04 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Fortify emboldening code against egregious distortions.
-
- * src/base/ftoutln.c (FT_Outline_EmboldenXY): Threshold emboldening
- strength when it leads to segment collapse.
-
-2012-11-03 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Clean up emboldening code and improve comments there.
-
- * src/base/ftoutln.c (FT_Outline_EmboldenXY): Replace sequential
- calls to FT_MulFix and FT_DivFix with FT_MulDiv.
- Mention that bisectors are used to figure out the shift direction.
-
-2012-10-24 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add standard character to `AF_ScriptClassRec' structure.
-
- * src/autofit/aftypes.h (AF_ScriptClassRec): Add `standard_char'
- member.
- (AF_DEFINE_SCRIPT_CLASS): Updated.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_widths): Use it.
- (af_latin_metrics_init, af_latin_script_class): Updated.
-
- * src/autofit/aflatin.c (af_latin2_metrics_init_widths): Use it.
- (af_latin2_metrics_init, af_latin2_script_class): Updated.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths): Use it.
- (af_cjk_metrics_init, af_cjk_script_class): Updated.
-
- * src/autofit/afindic.c (af_indic_metrics_init,
- af_indic_script_class): Updated.
-
- * src/autofit/afcjk.h, src/autofit/aflatin.h: Updated.
-
- * src/autofit/afdummy.c: Updated.
-
-2012-10-24 Werner Lemberg <wl@gnu.org>
-
- [autofit] Only use Unicode CMap.
-
- * src/autofit/aflatin.c (af_latin_metrics_init): Implement it, to be
- in sync with `af_face_globals_compute_script_coverage'.
-
-2012-10-21 Werner Lemberg <wl@gnu.org>
-
- [psaux] Improve parsing of invalid numbers.
-
- * src/psaux/psconv.c (PS_Conv_Strtol): Always parse complete number,
- even in case of overflow.
- (PS_Conv_ToInt): Only increase cursor if parsing was successful.
- (PS_Conv_ToFixed): Ditto.
- Trace underflow and data error.
-
-2012-10-21 Werner Lemberg <wl@gnu.org>
-
- [smooth] Improve tracing.
-
- * src/smooth/ftgrays.c (gray_sweep): Trace last sweep line of
- current band also.
-
-2012-10-20 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Cheaper way to threshold angles between vectors.
-
- * src/truetype/ttinterp.c (Ins_ISECT): Thresholding tangent is a lot
- cheaper than thresholding sine.
-
-2012-10-20 Werner Lemberg <wl@gnu.org>
-
- [cff] Improve parsing of invalid real numbers.
-
- * src/cff/cffparse.c (cff_parse_real): Always parse complete number,
- even in case of overflow or underflow.
- Also trace one more underflow.
-
-2012-10-20 Andreas Pehnack <andreas.pehnack@me.com>
-
- [sfnt] Load pure CFF fonts wrapped in SFNT container.
-
- Such fonts only have a `cmap' and a `CFF' table.
-
- * src/sfnt/ttload.c (tt_face_load_font_dir): Don't call
- `check_table_dir' if font signature is `OTTO'.
-
-2012-10-20 Werner Lemberg <wl@gnu.org>
-
- [psaux] Fix some value overflows and improve tracing.
-
- * src/psaux/psconv.c: Include FT_INTERNAL_DEBUG_H.
- (FT_COMPONENT): Define.
- (PS_Conv_Strtol): Return FT_Long.
- Handle bad data and overflow.
- Emit some tracing messages in case of error.
- (PS_Conv_ToInt): Return FT_Long.
- (PS_Conv_ToFixed): Updated.
- * src/psaux/psconv.h: Updated.
-
- * include/freetype/internal/fttrace.h: Add `psconv'.
-
-2012-10-20 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix `make multi CC=c++'.
-
- * src/autofit/aflatin.c, src/autofit/aflatin2.c: Include
- `afglobal.h'.
- * src/autofit/afloader.c: Fix order of header files.
- * src/autofit/afmodule.c: Include `afglobal.h' and `aferrors.h'.
-
-2012-10-19 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix more value errors and improve tracing.
-
- * src/cff/cffparse.c (cff_parse_integer): Emit tracing message in
- case of error.
- (cff_parse_real): Handle and trace overflow, underflow, and bad data
- consistently.
- (do_fixed): New helper function, handling and tracing overflow.
- (cff_parse_fixed, cff_parse_fixed_scaled): Use `do_fixed'.
-
-2012-10-17 Werner Lemberg <wl@gnu.org>
-
- [psaux] Fix some value overflows.
-
- * src/psaux/psconv.c (PS_Conv_ToFixed): Implement it.
-
-2012-10-17 Bram Tassyns <BramT@enfocus.com>
-
- [cff] Fix value overflow.
-
- * src/cff/cffparse.c (cff_parse_fixed_scaled): Implement it.
-
-2012-10-17 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix Savannah bug #37572.
-
- * src/truetype/ttinterp.c (Ins_ISECT): Use angle between vectors to
- avoid grazing intersections. The previous threshold was too coarse,
- incorrectly rejecting short but valid vectors.
-
-2012-09-30 Gilles Espinasse <g.esp@free.fr>
-
- Remove useless `rm' detection.
-
- `rm -f' is directly used in the `configure' script created by
- autoconf, thus no availability test is necessary.
-
- * builds/unix/configure.raw (RMF): Remove test.
- * builds/unix/unix-def.in (DELETE): Updated.
-
-2012-09-29 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor optimization.
-
- * src/autofit/afglobal.c (af_face_globals_compute_script_coverage):
- Add loop condition.
-
-2012-09-29 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix thinko.
-
- * src/autofit/aftypes.h (AF_SCRIPT):
- s/AF_SCRIPT_NONE/AF_SCRIPT_DUMMY/. We already use `AF_SCRIPT_NONE'
- as a bit mask.
-
- * src/autofit/afdummy.c: Updated.
-
-2012-09-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] Implement `increase-x-height' property.
-
- * include/freetype/ftautoh.h (FT_Prop_IncreaseXHeight): New
- structure.
-
- * include/autofit/afmodule.c (af_property_get_face_globals): New
- function, re-using code from `af_property_get'.
- (af_property_set, af_property_get): Handle `increase-x-height'.
- Updated.
-
-2012-09-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] Implement Infinality's `increase glyph heights'.
-
- This is an improved version of a similar fix contained in the
- so-called `Infinality patch', taken from
-
- http://www.infinality.net/fedora/linux/zips/freetype-infinality-2.4.10-20120616_01-x86_64.tar.bz2
-
- which addresses various enhancements of the auto-hinter. Without
- properties to control a module's metadata it wasn't possible to
- adapt the patches because everything was originally controlled by
- environment variables which I consider not suitable in general.
-
- A patch to control `increase_x_height' follows.
-
- * src/autofit/afglobal.h (AF_PROP_INCREASE_X_HEIGHT_MIN,
- AF_PROP_INCREASE_X_HEIGHT_MAX): New macros.
- (AF_FaceGlobalsRec): Add `increase_x_height' member.
- * src/autofit/afglobal.c (af_face_globals_new): Initialize it.
-
- * src/autofit/aflatin.c (af_latin_metrics_scale_dim),
- * src/autofit/aflatin2.c (af_latin2_metrics_scale_dim): Implement
- handling of `increase_x_height'.
-
-2012-09-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add hierarchical property access to some structures.
-
- * src/autofit/afglobal.h: Include `afmodule.h'.
- (AF_FaceGlobalsRec): Add `module' member.
- (AF_FaceGlobals): Typedef moved to...
- * src/autofit/aftypes.h: Here.
- (AF_ScriptMetricsRec): Add `globals' member.
-
- * src/autofit/afglobal.c (af_face_globals_new,
- af_face_globals_compute_script_coverage,
- af_face_globals_get_metrics): Updated.
-
- * src/autofit/afloader.c (af_loader_reset), src/autofit/afmodule.c
- (af_property_get): Updated.
-
-2012-09-17 Werner Lemberg <wl@gnu.org>
-
- [type1] Fix Savannah bug #37350.
-
- * src/type1/t1parse.c (T1_Get_Private_Dict) <found>: Check for ASCII
- storage only if we actually have at least four bytes.
-
-2012-09-15 Werner Lemberg <wl@gnu.org>
-
- [autofit] Implement `fallback-script' property.
-
- * src/autofit/afglobal.c: s/default_script/fallback_script/.
- * src/autofit/afglobal.h: s/AF_SCRIPT_DEFAULT/AF_SCRIPT_FALLBACK/.
-
- * src/autofit/afmodule.c: s/default_script/fallback_script/.
- (af_property_set, af_property_get): Implement `fallback-script'.
- * src/autofit/afmodule.h: s/default_script/fallback_script/.
-
- * include/freetype/ftautoh.h: Document it.
-
-2012-09-15 Werner Lemberg <wl@gnu.org>
-
- [autofit] Correct previous Unicode 6.1.0 change.
-
- The auto-hinter's latin module only handles latin ligatures in the
- `Alphabetical Presentation Forms' block.
-
- * src/autofit/aflatin.c (af_latin_uniranges): Fix it.
-
-2012-09-15 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afmodule.c: s/FT_Err_/AF_Err_/.
-
-2012-09-15 Werner Lemberg <wl@gnu.org>
-
- [autofit] Make default script a global property.
-
- * src/autofit/afmodule.h (AF_ModuleRec): Add `default_script' field.
-
- * src/autofit/afglobal.c (af_face_globals_compute_script_coverage,
- af_face_globals_new), src/autofit/afloader.c (af_loader_reset),
- src/autofit/afmodule.c (af_property_get) <glyph-to-script-map>,
- af_autofitter_init:
- Handle default script.
-
- * src/autofit/afglobal.h: Updated.
-
-2012-09-15 Werner Lemberg <wl@gnu.org>
-
- Use `FT_Module' instead of `FT_Library' argument in property funcs.
-
- This internal change simplifies access to global module data.
-
- * include/freetype/internal/services/svprop.h
- (FT_Properties_SetFunc, FT_Properties_GetFunc): Change accordingly.
-
- * src/base/ftobjs.c (ft_property_do), src/autofit/afmodule.c
- (af_property_set, af_property_get): Updated.
-
-2012-09-14 Werner Lemberg <wl@gnu.org>
-
- [autofit] Update to Unicode 6.1.0.
-
- * src/autofit/afcjk.c (af_cjk_uniranges), src/autofit/aflatin.c
- (af_latin_uniranges): Add and fix ranges.
-
-2012-09-14 Werner Lemberg <wl@gnu.org>
-
- [autofit] Pass `AF_Module' instead of `AF_Loader'.
-
- We want to access the (not yet existing) module's global data later
- on.
-
- * src/autofit/afloader.c: Include `afmodule.h'.
- (af_loader_init, af_loader_reset, af_loader_done,
- af_loader_load_glyph): Change accordingly.
- * src/autofit/afmodule.c (AF_ModuleRec): Move to `afmodule.h'.
- Updated.
-
- * src/autofit/afmodule.h: Include `afloader.h'.
- (AF_ModuleRec): Define here.
- * src/autofit/afloader.h (AF_Module): Define here.
- Updated.
-
-2012-09-14 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix `make multi'.
-
- * include/freetype/internal/fttrace.h: Add `afmodule'.
- * src/autofit/afmodule.c: Include FT_INTERNAL_DEBUG_H.
- (FT_COMPONENT): Define.
-
-2012-09-14 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afmodule.c: s/FT_Autofitter/AF_Module/.
-
-2012-09-12 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor reorganization.
-
- * src/autofit/afglobal.c (AF_SCRIPT_LIST_DEFAULT,
- AF_SCRIPT_LIST_NONE, AF_DIGIT): Move to...
- * src/autofit/afglobal.h (AF_SCRIPT_DEFAULT, AF_SCRIPT_LIST_NONE,
- AF_DIGIT): This and update code.
-
-2012-09-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Implement `glyph-to-script-map' property.
-
- * include/freetype/ftautoh.h: New public header file.
- * include/freetype/config/ftheader.h (FT_AUTOHINTER_H): New macro.
-
- * src/autofit/afglobal.c (AF_FaceGlobalsRec): Move structure to...
- * src/autofit/afglobal.h: This header file.
- * src/autofit/afmodule.c: Include FT_AUTOHINTER_H.
- (af_property_get): Handle `glyph-to-script-map'.
-
-2012-08-31 Werner Lemberg <wl@gnu.org>
-
- [autofit] Implement properties service framework.
-
- No properties are added yet.
-
- * src/autofit/afmodule.c: Include FT_SERVICE_PROPERTIES_H.
- (af_property_set, af_property_get): New dummy functions.
- (af_service_properties, af_services, af_get_interface): Provide
- service setup.
- (autofit_moduleclass): Add service interface.
-
- * src/autofit/afpic.c: Add necessary forward declarations.
- (autofit_module_class_pic_init): Add code for service addition.
- (autofit_module_pic_free): Add code for service removal.
- * src/autofit/afpic.h (AF_SERVICES_GET, AF_SERVICE_PROPERTIES_GET):
- New macros which provide necessary syntactical sugar for PIC
- support.
-
-2012-08-30 Werner Lemberg <wl@gnu.org>
-
- Implement properties to control FreeType modules.
-
- * include/freetype/fterrdef.h (FT_Err_Missing_Property): New error
- code.
- * include/freetype/ftmodapi.h (FT_Property_Set, FT_Property_Get):
- New API.
-
- * include/freetype/internal/services/svprop.h: New file.
- * include/freetype/internal/ftserv.h (FT_SERVICE_PROPERTIES_H): New
- macro.
-
- * src/base/ftobjs.c: Include FT_SERVICE_PROPERTIES_H.
- (ft_property_do, FT_Property_Set, FT_Property_Get): New functions.
-
-2012-08-29 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Allow `-' in tags and identifiers.
-
- * src/tools/docmaker/content.py (re_identifier),
- src/tools/docmaker/sources.py (re_markup_tag1, re_markup_tag2,
- re_crossref): Add `-' in patterns.
-
-2012-08-27 Werner Lemberg <wl@gnu.org>
-
- [FT_CONFIG_OPTION_PIC] Fix g++ 4.6.2 compiler warnings.
-
- * include/freetype/internal/ftdriver.h (FT_DEFINE_DRIVER),
- include/freetype/internal/ftobjs.h (FT_DEFINE_RENDERER,
- FT_DEFINE_MODULE), include/freetype/internal/ftserv.h
- (FT_DEFINE_SERVICEDESCREC1, FT_DEFINE_SERVICEDESCREC2,
- FT_DEFINE_SERVICEDESCREC3, FT_DEFINE_SERVICEDESCREC4,
- FT_DEFINE_SERVICEDESCREC5, FT_DEFINE_SERVICEDESCREC6),
- src/autofit/afpic.c (autofit_module_class_pic_init),
- src/base/basepic.c (ft_base_pic_init), src/base/ftinit.c
- (ft_create_default_module_classes), src/cff/cffparse.c
- (FT_Create_Class_cff_field_handlers), src/cff/cffpic.c
- (cff_driver_class_pic_init), src/pshinter/pshpic.c
- (pshinter_module_class_pic_init), src/psnames/pspic.c
- (psnames_module_class_pic_init), src/raster/rastpic.c
- (ft_raster1_renderer_class_pic_init), src/sfnt/sfntpic.c
- (sfnt_module_class_pic_init), src/sfnt/ttcmap.c
- (FT_Create_Class_tt_cmap_classes), src/smooth/ftspic.c
- (ft_smooth_renderer_class_pic_init), src/truetype/ttpic.c
- (tt_driver_class_pic_init): Initialize allocation variable.
-
-2012-08-27 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix compilation warning.
-
- * src/truetype/ttgload.c (IS_HINTED): Move macro to...
- * src/truetype/ttobjs.h: This header file.
-
-2012-08-27 Werner Lemberg <wl@gnu.org>
-
- [autofit, cff, pshinter, psnames] More renamings for orthogonality.
-
- * src/autofit/afmodule.c, src/autofit/afpic.h:
- s/AF_AUTOFITTER_/AF_/.
-
- * src/cff/cffdrivr.c, src/cff/cffobjs.c, src/cff/cffparse.c,
- src/cff/cffpic.h: s/FT_CFF_/CFF_/.
-
- * src/pshinter/pshmod.c, src/pshinter/pshpic.h:
- s/FT_PSHINTER_/PSHINTER_/.
-
- * src/psnames/psmodule.c, src/psnames/pspic.h:
- s/FT_PSCMAPS/PSCMAPS_/.
-
-2012-08-27 Werner Lemberg <wl@gnu.org>
-
- [sfnt, truetype] More renamings for orthogonality.
-
- * src/sfnt/sfdriver.c, src/sfnt/sfntpic.h, src/sfnt/ttcmap.c,
- src/truetype/ttdriver.c, src/truetype/ttpic.h: s/FT_SFNT_/SFNT_/,
- s/FT_TT_/TT_/, s/GET_CMAP_INFO_GET/CMAP_INFO_GET/.
-
-2012-08-27 Werner Lemberg <wl@gnu.org>
-
- [autofit] Some macro and variable renamings for orthogonality.
-
- * include/freetype/internal/autohint.h, src/base/ftobjs.c,
- src/autofit/afmodule.c, src/autofit/afpic.c, src/autofit/afpic.h:
- s/SERVICE/INTERFACE/, s/service/interface/, s/Service/Interface/.
-
-2012-08-26 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #37178.
-
- * src/base/ftobjs.c (FT_Open_Face): Initialize `error' with
- `FT_Err_Missing_Module' before loop to indicate `no valid drivers'.
-
-2012-08-17 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftsynth.c (FT_GlyphSlot_Oblique): Fix shear angle.
-
- The old value was far too large (more than 20°). The new one
- corresponds to 12°, quite common in typography.
-
-2012-08-12 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Fix Savannah bug #37017.
-
- * src/smooth/ftgrays.c (gray_render_cubic): Use a different set of
- checks when detecting super curvy splines to be split.
-
-2012-08-05 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve recognition of flat segments.
-
- Problem reported by Brad Dunzer <BDunzer@extensis.com>.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): We have
- a flat segment if the horizontal distance of best on-points is
- larger than a given threshold.
-
-2012-08-05 Werner Lemberg <wl@gnu.org>
-
- [autofit] Variable renamings.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Replace
- `glyph' with `outline'.
- s/best_first/best_contour_first/.
- s/best_last/best_contour_last/.
-
-2012-07-31 Werner Lemberg <wl@gnu.org>
-
- [type1] Fix Savannah bug #37000.
-
- * src/type1/t1load.c (parse_encoding): Fix order of checks.
-
-2012-07-17 Werner Lemberg <wl@gnu.org>
-
- [psaux] Fix Savannah bug #36833.
-
- * src/psaux/t1decode.c (t1operator_seac): `seac' is not a valid
- operator if we want metrics only.
-
-2012-07-16 Werner Lemberg <wl@gnu.org>
-
- [type1] Fix Savannah bug #36832.
-
- * src/type1/t1load.c (parse_charstrings): Reject negative number of
- glyphs.
-
-2012-07-13 Werner Lemberg <wl@gnu.org>
-
- [type1] Fix Savannah bug #36829.
-
- * src/type1/t1load.c (parse_encoding): Check cursor position after
- call to T1_Skip_PS_Token.
-
-2012-07-12 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Revert the last commit 45337b07.
-
- * src/base/ftstroke.c (FT_Stroker_New): Revert the previous change.
-
-2012-07-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [ftstroke] Fix uninitialized return value.
-
- * src/base/ftstroke.c (FT_Stroker_New): Return FT_Err_Ok instead.
-
-2012-07-11 Werner Lemberg <wl@gnu.org>
-
- [smooth] Avoid memory leak in case of failure.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Use flags to
- indicate what to clean up after finishing the function, with and
- without errors.
-
-2012-07-09 Werner Lemberg <wl@gnu.org>
-
- Fix compilation with MSVC 5.0.
-
- Problem reported by Peter Breitenlohner and Akira Kakuto.
-
- * include/freetype/config/ftstdlib.h (ft_setjmp): Updated.
- * src/sfnt/ttcmap.c (tt_face_build_cmaps): Remove cast.
-
-2012-07-09 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve debugging messages; do some code cleanup.
-
- * src/autofit/aflatin.c (af_latin_align_linked_edge,
- af_latin_hint_edges): Synchronize with formatting used in the
- ttfautohint project.
-
-2012-07-07 Gilles Espinasse <g.esp@free.fr>
-
- Fix strict-aliasing warning.
-
- * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Avoid double cast.
-
-2012-07-07 Dave Thomas <dave.thomas@metaforic.com>
-
- [ARM] Fix FT_MulFix_arm.
-
- * include/freetype/config/ftconfig.h (FT_MulFix_arm) [__arm__]:
- Avoid ADDS instruction to clobber condition codes.
-
-2012-07-06 Werner Lemberg <wl@gnu.org>
-
- [autofit] Do some code cleanup.
-
- * src/autofit/afglobal.c (af_face_globals_new): Simplify.
-
- * src/autofit/afhints.c: Use `FT_TRACE7' instead of `printf'
- everywhere.
- (FT_COMPONENT): New macro.
- (af_glyph_hints_done): Simplify.
-
- * include/freetype/internal/fttrace.h: Updated.
-
-2012-07-05 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve output of debugging information.
-
- * src/autofit/afhints.c (af_glyph_hints_dump_segments): Print more
- data; report no data.
- (af_glyph_hints_dump_edges): Report no data.
-
-2012-07-04 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix Savannah bug #36091.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues),
- src/autofit/aflatin2.c (af_latin2_metrics_init_blues): Change the
- constraint for testing round vs. flat segment: Accept either a
- small distance or a small angle.
-
-2012-07-04 Werner Lemberg <wl@gnu.org>
-
- [autofit] Beautify blue zone tracing.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues),
- src/autofit/aflatin2.c (af_latin2_metrics_init_blues): Implement it.
-
-2012-07-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Quantize stem widths.
-
- * src/autofit/afangles.c (af_sort_widths): Rename to...
- (af_sort_and_quantize_widths): This.
- Add code to avoid stem widths which are almost identical.
- * src/autofit/aftypes.h, src/autofit/aflatin.c, src/autofit/afcjk.c:
- Updated.
-
-2012-07-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor speed-up.
-
- * src/autofit/afangles (af_sort_pos, af_sort_widths): Don't swap
- elements if they are equal.
-
-2012-06-30 Gilles Espinasse <g.esp@free.fr>
-
- Fix `checking if gcc static flag -static works' test.
-
- On my linux build tree, I receive yes answer in every package I
- build except freetype for this test checking if gcc static flag
- `-static' works
-
- On freetype, no is received, unless bzip2 and zlib are disabled using
-
- ./configure --without-bzip2 --without-zlib
-
- The reason is that bzip2 and zlib tests add `-lz' and `-lbz2' to
- LDFLAGS and this broke static flag test.
-
- * builds/unix/configure.raw: Update CFLAGS and LDFLAGS only after
- LT_INIT has run.
-
-2012-06-28 Infinality <infinality@infinality.net>
-
- [truetype] Fix various artifacts.
-
- Verdana was broken in the original Infinality commit. Also
- includes other minor fixes.
-
- * src/truetype/ttsubpix.h: Updated. Removed unused macros.
- (RASTERIZER_35_Rules): Add Verdana.
- (SKIP_NONPIXEL_Y_MOVES_Rules): Add Tahoma `s'.
- (MIRP_CVT_ZERO_Rules): Remove Verdana.
- (ALWAYS_SKIP_DELTAP_Rules): Add Russian char 0x438.
- (COMPATIBLE_WIDTHS_Rules): Rearrange some rules.
- (X_SCALING_Rules): Adjust Verdana `a' at 12 and 13 ppem.
-
- * src/truetype/ttsubpix.c: Updated.
- (sph_set_tweaks): Re-execute fpgm always.
-
-2012-06-28 Gilles Espinasse <g.esp@free.fr>
-
- Fix CFLAGS and LDFLAGS share configure test.
-
- * builds/unix/configure.raw: Fix typo.
-
-2012-06-28 Werner Lemberg <wl@gnu.org>
-
- [truetype] Set the `subpixel_positioned' flag unconditionally.
-
- This is how the code currently behaves.
-
- * src/truetype/ttgload.c (tt_loader_init): Do it.
-
-2012-06-27 Werner Lemberg <wl@gnu.org>
-
- Fix conditional compilation.
-
- * src/base/basepic.c: Use FT_CONFIG_OPTION_MAC_FONTS.
-
-2012-06-27 Werner Lemberg <wl@gnu.org>
-
- Fix conditional compilation.
-
- * include/freetype/internal/ftcalc.h (FT_MulDiv_No_Round): Don't
- enclose with `TT_USE_BYTECODE_INTERPRETER'; we now need the function
- elsewhere also.
-
- * src/autofit/afcjk.h: Use AF_CONFIG_OPTION_CJK.
-
- * src/truetype/ttgload.c (tt_loader_init): Fix compiler warning.
-
- * src/truetype/ttinterp.c (Ins_MSIRP): Fix compiler warning.
-
- * src/truetype/ttinterp.h: Use
- TT_CONFIG_OPTION_BYTECODE_INTERPRETER.
-
-2012-06-26 Infinality <infinality@infinality.net>
-
- [truetype] Remove unused rounding functionality.
-
- The subpixel hinting patch contained the concept of an adjustable
- number of gridlines per pixel. This is no longer used due to x
- being completely ignored instead. This will return some of the
- code to its existing state prior to the original Infinality
- commit.
-
- * include/freetype/internal/ftobjs.h (FT_PIX_FLOOR_GRID,
- FT_PIX_ROUND_GRID, FT_PIX_CEIL_GRID): Removed.
-
- * src/truetype/ttinterp.c: Updated.
- (Round_None, Round_To_Grid, Round_To_Half_Grid, Round_Down_To_Grid,
- Round_Up_To_Grid, Round_To_Double_Grid, Round_Super, Round_Super_45,
- SetSuperRound): Remove parameter to handle the number of grid lines per
- pixel.
- (SET_SuperRound, ROUND_None, CUR_Func_round): Updated.
- (DO_SROUND, DOS45ROUND, DO_ODD, DO_EVEN): Updated.
- (DO_ROUND, DO_NROUND): Updated.
- (Move_Zp2_Point, Ins_SHPIX, Ins_MSIRP, Ins_MDAP, Ins_MIAP,
- Ins_MDRP, Ins_MIRP): Perform Round_None instead of calling a modified
- rounding function. Remove gridlines_per_pixel. Create a local
- variable to store control value cutin. Simplify the conditional for
- ignore_x_mode. Adjust rounding calls to pass only two values.
-
-2012-06-25 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix Savannah bug #36705.
-
- Handle numbers like 2.001 correctly.
-
- * src/cff/cffparse.c (cff_parse_real): Avoid negative values for
- `shift'.
-
-2012-06-18 Infinality <infinality@infinality.net>
-
- [truetype] Support subpixel hinting.
-
- This is the large, famous `Infinality' patch to support ClearType
- bytecode which has been available from
- http://www.infinality.net/blog/ for some time, and which has been
- refined over the last years. While still experimental, it is now
- mature enough to be included directly into FreeType.
-
- Most of the code is based on the ClearType whitepaper written by
- Greg Hitchcock
-
- http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
-
- which gives a detailed overview of the necessary changes to the
- Microsoft rasterizer so that older fonts are supported. However, a
- lot of details are still missing, and this patches provides a
- framework to easily handle rendering issues down to the glyph level
- of certain fonts.
-
- Note that ClearType support is not completely implemented! In
- particular, full support for the options `compatible_widths',
- `symmetrical_smoothing, and `bgr' (via the GETINFO bytecode
- instruction) is missing.
-
- * src/truetype/ttsubpix.c: New file, providing code to handle
- `tweaks', this is, rules for certain glyphs in certain fonts
- (including wildcards) which need a special treatment.
-
- * src/truetype/ttsubpix.h: New file, holding the tweaking rules.
-
- * include/freetype/config/ftoption.h, src/devel/ftoption.h
- (TT_CONFIG_OPTION_SUBPIXEL_HINTING): New macro.
-
- * include/freetype/internal/ftobjs.h (FT_PIX_FLOOR_GRID,
- FT_PIX_ROUND_GRID, FT_PIX_CEIL_GRID): New macros.
-
- * src/truetype/truetype.c [TT_USE_BYTECODE_INTERPRETER]: Include
- `ttsubpix.c'.
-
- * src/truetype/ttgload.c: Include `ttsubpix.h'.
- [All changes below are guarded by TT_CONFIG_OPTION_SUBPIXEL_HINTING.]
-
- (tt_get_metrics): Set tweak flags.
- (TT_Hint_Glyph): Call `FT_Outline_EmboldenXY' if necessary.
- (TT_Process_Simple_Glyph): Compensate emboldening if necessary.
- (compute_glyph_metrics): Handle `compatible widths' option.
- (tt_loader_init): Handle ClearType GETINFO information bits.
-
- * src/truetype/rules.mk (TT_DRV_SRC): Updated.
-
- * src/truetype/ttinterp.c: Include `ttsubpix.h'.
- [Where necessary, changes below are guarded by
- TT_CONFIG_OPTION_SUBPIXEL_HINTING.]
-
- (Direct_Move, Direct_Move_X): Extended.
- (Round_None, Round_To_Grid, Round_To_Half_Grid, Round_Down_To_Grid,
- Round_Up_To_Grid, Round_To_Double_Grid, Round_Super, Round_Super_45,
- SetSuperRound): Add parameter to handle the number of grid lines per
- pixel.
- (SET_SuperRound, ROUND_None, CUR_Func_round): Updated.
- (DO_SROUND, DOS45ROUND, DO_ODD, DO_EVEN): Updated.
- (DO_ROUND, DO_NROUND): Updated.
- (DO_RS): Take care of `Typeman' bytecode patterns.
- (Ins_FDEF): Add some debugging code. Commented out.
- (Ins_ENDF): Restore state.
- (Ins_CALL, Ins_LOOPCALL): Handle inline delta functions.
- (Ins_MD): Handle `Vacuform' rounds.
- (Move_Zp2_Point, Ins_SHPIX, Ins_MSIRP, Ins_MDAP, Ins_MIAP,
- Ins_MDRP, Ins_MIRP): Handle tweaks.
- (Ins_ALIGNRP): Add tweak guard.
- (Ins_IUP, Ins_DELTAP): Handle tweaks.
- (Ins_GETINFO): Handle new ClearType bits.
- (TT_RunIns): Handle tweaks.
-
- * src/truetype/ttinterp.h: Updated.
- (SPH_TweakRule, SPH_ScaleRule): New structures for tweaks.
- (TT_ExecContextRec): Add members for subpixel hinting support.
-
- * src/truetype/ttobjs.h (TT_DefRecord): Add `inline_delta' member.
-
-2012-06-15 Werner Lemberg <wl@gnu.org>
-
- * Version 2.4.10 released.
- =========================
-
-
- Tag sources with `VER-2-4-10'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.4.10.
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.4.9/2.4.10/, s/249/2410/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 10.
-
- * builds/unix/configure.raw (version_info): Set to 15:0:9.
-
-2012-06-15 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Improve spacing.
-
- * docs/CHANGES: Updated.
-
-2012-06-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/exports.mk: Add CCexe_CFLAGS and CCexe_LDFLAGS.
-
- to pass special compiler/linker flags under cross development.
- Suggested by Savannah bug #36367.
-
- ChangeLog on 2010-07-15 saying as they were removed was wrong
- for the official trunk of FreeType2. This commit is the first
- introduction of them.
-
-2012-06-14 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2012-06-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [truetype] Add new versions of NEC FA family to tricky font list.
-
- NEC FA family dated in 1996 have different checksum.
- Reported by Johnson Y. Yan <yinsen_yan@foxitsoftware.com>; see
-
- http://lists.gnu.org/archive/html/freetype-devel/2012-06/msg00023.html
-
- * src/truetype/ttobjs.c (tt_check_trickyness_sfnt_ids): 4 sets
- of fpgm & prep table checksums for FA-Gothic, FA-Minchou,
- FA-RoundedGothicM, FA-RoundedGothicB are added. The family
- names in sample PDF are truncated, thus the list of the
- family names in tt_check_trickyness_family() is not updated yet.
-
-2012-06-06 Werner Lemberg <wl@gnu.org>
-
- [ftraster] Fix rounding issue causing visual artifacts.
-
- Problem reported by jola <hans-jochen.lau@lhsystems.com>; see
-
- http://lists.gnu.org/archive/html/freetype-devel/2012-05/msg00036.html
-
- * src/raster/ftraster.c (SMulDiv_No_Round): New macro.
- (Line_Up): Use it.
- * src/raster/ftmisc.h (FT_MulDiv_No_Round): Copied from `ftcalc.c'.
-
-2012-05-28 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftoutln.c (FT_Outline_Get_Orientation): Simplify.
-
- We now use the cross product of the direction vectors to compute the
- outline's orientation.
-
-2012-05-28 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2012-05-28 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- New function FT_Outline_EmboldenXY.
-
- * include/freetype/ftoutln.h (FT_Outline_EmboldenXY): Define it.
-
- * src/base/ftoutln.c (FT_Outline_EmboldenXY): Implement it, using a
- simplified emboldening algorithm.
- (FT_Outline_Embolden): Make it a special case of
- `FT_Outline_EmboldenXY'
-
-2012-05-07 Werner Lemberg <wl@gnu.org>
-
- [type1] Fix Savannah bug #36386.
-
- * src/type1/t1load.c (t1_load_keyword): Ignore keyword if context is
- not valid.
-
-2012-04-07 Werner Lemberg <wl@gnu.org>
-
- Remove compiler warning.
-
- * src/truetype/ttgload.c (TT_Load_Glyph)
- [!TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: Access `glyph->face' directly.
-
-2012-03-28 Werner Lemberg <wl@gnu.org>
-
- [autofit] Properly copy scaler flags to script metrics object.
-
- Without this patch, only the dummy and cjk autohinter modules get
- them (since they copy the whole scaler object).
-
- * src/autofit/aflatin.c (af_latin_metrics_scale),
- src/autofit/aflatin2.c (af_latin2_metrics_scale): Implement it.
-
-2012-03-22 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [bdflib] Remove redundant macro.
-
- * src/bdf/bdflib.c (isdigok): Remove and replace with sbitset, which
- is exactly the same.
-
-2012-03-20 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [configure] Fix Savannah bug #35644.
-
- * builds/unix/configure.raw: Check `-ansi' flag works even if gcc
- is used. Bionic libc headers for Android lose the consistency
- when they are parsed with __STDC_VERSION__ older than 199901L or
- __STRICT_ANSI__.
-
-2012-03-20 Werner Lemberg <wl@gnu.org>
-
- [bdf] Improvement to Savannah bug #35656.
-
- * src/bdf/bdflib.c (isdigok): Add cast, as suggested in report.
-
-2012-03-17 Chris Liddell <chris.liddell@artifex.com>
-
- [type1] Fix Savannah bug #35847.
-
- * src/type1/t1load.c (parse_subrs): Fix the loop exit condition;
- we want to exit when we have run out of data.
-
-2012-03-16 Werner Lemberg <wl@gnu.org>
-
- [bdf] Really fix Savannah bug #35658.
-
- * src/bdf/bdflib.c (_bdf_list_split): Add one more `field' initializer.
-
-2012-03-14 Yann Droneaud <yann@droneaud.fr>
-
- [sfnt] Make arrays static like all others.
-
- * src/sfnt/ttload.c (tt_face_load_maxp, tt_face_load_os2),
- src/sfnt/ttmtx.c (tt_face_load_hhea): Add `static' keyword to frame
- fields.
-
-2012-03-14 Huw Davies <huw@codeweavers.com>
-
- [sfnt] A refinement of the previous commit.
-
- * src/sfnt/sfobjs.c (tt_name_entry_ascii_from_utf16,
- tt_name_entry_ascii_from_other): Stop at null byte.
-
-2012-03-14 Huw Davies <huw@codeweavers.com>
-
- [sfnt] Add `name' table compatibility to MS Windows.
-
- * src/sfnt/sfobjs.c (tt_name_entry_ascii_from_utf16,
- tt_name_entry_ascii_from_other): Don't replace `\0' with question
- marks when converting strings.
-
-2012-03-14 Werner Lemberg <wl@gnu.org>
-
- [type1] Fix Savannah bug #35833.
-
- Based on the patch given in the bug report.
-
- * src/type1/t1load.c (IS_INCREMENTAL): New macro.
- (read_binary_data): Add parameter `incremental'.
- Update all callers using `IS_INCREMENTAL'.
-
-2012-03-11 Werner Lemberg <wl@gnu.org>
-
- [autofit] Return correct linear advance width values.
-
- This was quite a subtle bug which accidentally showed up with glyph
- `afii10023' of arial.ttf (version 2.76). This glyph is a composite;
- the first component, `E', has an advance width of 1366 font units,
- while the advance width of the composite itself (which looks like
- uppercase `E' with dieresis) is 1367 font units. I think this is
- actually a bug in the font itself, because there is no reason that
- this glyph has not the same width as uppercase `E' without the
- dieresis. Anyway, it helped identify this problem.
-
- Using the TrueType hinter, the correct value (1367) of `afii10023'
- was returned, but the autohinter mysteriously returned 1366.
-
- Digging in the code showed that the autohinter recursively calls
- FT_Load_Glyph to load the glyph, adding the FT_LOAD_NO_SCALE load
- flag. However, the `linearHoriAdvance' field is still returned as a
- scaled value. To avoid scaling twice, the old code in autofit reset
- `linearHoriAdvance', using the `horiAdvance' field. This seemed to
- work since FT_LOAD_NO_SCALE was in use, but it failed actually,
- because `horiAdvance' is defined as the distance of the first
- subglyph's phantom points, which in turn are initialized using the
- advance width of the first subglyph. And as the given example
- shows, these widths can differ.
-
- * src/autofit/afloader.c (af_loader_load_g): Temporarily set
- FT_LOAD_LINEAR_DESIGN while calling FT_Load_Glyph to get unscaled
- values for the linear advance widths.
-
-2012-03-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix SSW instruction.
-
- * src/truetype/ttinterp.c (DO_SSW): SSW *does* use font units. For
- verification, it took some time to find a font which actually uses
- this instruction.
-
-2012-03-09 Vinnie Falco <vinnie.falco@gmail.com>
-
- Prepare source code for amalgamation.
-
- * include/freetype/freetype.h: Swap order of preprocessor blocks.
-
-2012-03-08 Werner Lemberg <wl@gnu.org>
-
- * Version 2.4.9 released.
- =========================
-
-
- Tag sources with `VER-2-4-9'.
-
- * docs/CHANGES: Updated.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.4.9.
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.4.8/2.4.9/, s/248/249/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 9.
-
- * builds/unix/configure.raw (version_info): Set to 14:1:8.
-
-2012-03-08 Werner Lemberg <wl@gnu.org>
-
- [bdf] Add missing overflow check.
-
- * src/bdf/bdflib.c (_bdf_parse_glyphs) <BITMAP>: Add threshold for
- `glyph->bpr'.
-
-2012-03-07 Vinnie Falco <vinnie.falco@gmail.com>
-
- Prepare source code for amalgamation.
-
- * src/autofit/aferrors.h, src/bdf/bdferror.h, src/bzip2/ftbzip2.c,
- src/cache/ftcerror.h, src/cff/cfferrs.h, src/cid/ciderrs.h,
- src/gxvalid/gxverror.h, src/gzip/ftgzip.c, src/lzw/ftlzw.c,
- src/otvalid/otverror.h, src/pcf/pcferror.h, src/pfr/pfrerror.h,
- src/psaux/psauxerr.h, src/pshinter/pshnterr.h,
- src/psnames/psnamerr.h, src/raster/rasterrs.h, src/sfnt/sferrors.h,
- src/smooth/ftsmerrs.h, src/truetype/tterrors.h,
- src/type1/t1errors.h, src/type42/t42error.h, src/winfonts/fnterrs.h:
- Add #undef FT_ERR_PREFIX before #define FT_ERR_PREFIX.
-
-2012-03-03 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #35660.
-
- For some divisions, we use casts to 32bit entities. Always guard
- against division by zero with these casts also.
-
- * src/base/ftcalc.c (ft_div64by32): Remove redundant cast.
- (FT_MulDiv, FT_MulDiv_No_Round): Add 32bit cast.
- (FT_DivFix): Add 32bit cast (this omission triggered the bug).
-
-2012-03-03 Werner Lemberg <wl@gnu.org>
-
- [psaux] Fix handling of track kerning.
-
- * src/psaux/afmparse.c (afm_parse_track_kern): Don't inverse sign
- for `min_kern'. It is indeed quite common that track kerning
- *increases* spacing for very small sizes.
-
-2012-03-02 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix Savannah bug #35689.
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Check first outline
- point.
-
-2012-03-01 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #35656.
-
- * src/bdf/bdflib.c (_bdf_parse_glyphs) <_BDF_BITMAP>: Check validity
- of nibble characters instead of accessing `a2i' array.
-
-2012-03-01 Werner Lemberg <wl@gnu.org>
-
- [winfonts] Fix Savannah bug #35659.
-
- * src/winfonts/winfnt.c (FNT_Face_Init): Check number of glyphs.
-
-2012-03-01 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #35658.
-
- * src/bdf/bdflib.c (_bdf_list_split): Initialize `field' elements
- properly.
-
-2012-03-01 Werner Lemberg <wl@gnu.org>
-
- [psaux] Fix Savannah bug #35657.
-
- If in function `skip_spaces' the routine `skip_comment' comes to the
- end of buffer, `cur' is still increased by one, so we need to check
- for `p >= limit' and not `p == limit'.
-
- * src/psaux/psconv.c (PS_Conv_Strtol, PS_Conv_ToFixed,
- PS_Conv_ASCIIHexDecode, PS_Conv_EexecDecode): Fix boundary checking.
-
-2012-03-01 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix Savannah bug #35646.
-
- * src/truetype/ttinterp.c (Ins_MIRP): Typo, present since ages. The
- code is now in sync with the other operators (e.g. MSIRP) which
- modify twilight points.
-
-2012-03-01 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #35643.
-
- * src/bdf/bdflib.c (_bdf_list_ensure): Bring code in sync with
- comment before `_bdf_list_split', this is, really allocate at least
- five `field' elements.
-
-2012-03-01 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #35641.
-
- * src/bdf/bdflib.c (_bdf_parse_glyphs) <DWIDTH, BBX>: Abort if
- _BDF_ENCODING isn't set. We need this because access to the `glyph'
- variable might be undefined otherwise.
-
-2012-03-01 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix Savannah bug #35640.
-
- * src/truetype/ttinterp.c (SkipCode, TT_RunIns): Fix boundary check
- for NPUSHB and NPUSHW instructions.
-
-2012-02-29 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix Savannah bug #35601.
-
- * src/truetype/ttinterp.c (Ins_SHZ): Use number of points instead of
- last point for loop.
- Also remove redundant boundary check.
-
-2012-02-29 Werner Lemberg <wl@gnu.org>
-
- [truetype] Remove redundant check.
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Remove redundant
- second check for ordered contour start points.
-
-2012-02-29 Werner Lemberg <wl@gnu.org>
-
- [truetype] Make SHC instruction behave similar to MS rasterizer.
-
- * src/truetype/ttinterp.c (Ins_SHC): Handle virtual contour in
- twilight zone.
-
-2012-02-29 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Avoid modulo operators against a power-of-two denominator.
-
- * src/afcjk.c (af_hint_normal_stem), src/base/ftoutln.c
- (ft_contour_has), src/cff/cffgload.c (cff_decoder_parse_charstrings)
- <cff_op_vvcurveto, cff_op_hhcurveto, cff_op_hvcurveto>,
- src/gxvalid/gxvcommn.c (GXV_32BIT_ALIGNMENT_VALIDATE),
- src/gxvalid/gxvfeat.c (gxv_feat_setting_validate): Replace `%' with
- `&' operator.
-
-2012-02-29 Werner Lemberg <wl@gnu.org>
-
- [autofit] Don't synchronize digit widths for light rendering mode.
-
- We don't hint horizontally in this mode.
-
- * src/autofit/afloader.c (af_loader_load_g) <Hint_Metrics>:
- Implement it.
-
-2012-02-26 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [type42] Minor code optimization (again).
-
- * src/type42/t42parse.c (t42_parse_sfnts): Simplify previous change.
-
-2012-02-26 Mateusz Jurczyk <mjurczyk@google.com>
- Werner Lemberg <wl@gnu.org>
-
- [smooth] Fix Savannah bug #35604.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Use `FT_Pos'
- instead of `FT_UInt' for some variables and update comparisons
- accordingly. A detailed analysis can be found in the bug report.
-
-2012-02-26 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [type42] Minor code optimization.
-
- * src/type42/t42parse.c (t42_parse_sfnts): Use bitmask instead of
- modulo operator.
-
-2012-02-26 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2012-02-26 Werner Lemberg <wl@gnu.org>
-
- [type1] Fix Savannah bug #35608.
-
- * src/type1/t1parse.c (T1_Get_Private_Dict): Reject too short
- dictionaries.
-
-2012-02-26 Werner Lemberg <wl@gnu.org>
-
- [bdf] Support `ENCODING -1 <n>' format.
-
- * src/bdf/bdflib.c (_bdf_parse_glyphs) <ENCODING>: Implement it.
-
-2012-02-26 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #35607.
-
- * src/bdf/bdflib.c (_bdf_parse_glyphs) <ENCODING>: Normalize
- negative encoding values.
-
-2012-02-26 Werner Lemberg <wl@gnu.org>
-
- [type1] Fix Savannah bug #35606.
-
- * src/type1/t1load.c (parse_subrs): Add proper guards for `strncmp'.
-
- * src/psaux/psobjs.c (ps_parser_skip_PS_token): Emit error message
- only if cur < limit.
-
-2012-02-25 Werner Lemberg <wl@gnu.org>
-
- [pcf] Fix Savannah bug #35603.
-
- * src/pcf/pcfread.c (pcf_get_properties): Assure final zero byte in
- `strings' array.
-
-2012-02-25 Werner Lemberg <wl@gnu.org>
-
- [type42] Fix Savannah bug #35602.
-
- * src/type42/t42parse.c (t42_parse_sfnts): Check `string_size' more
- thoroughly.
-
-2012-02-25 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bugs #35599 and #35600.
-
- * src/bdf/bdflib.c (ACMSG16): New warning message.
- (_bdf_parse_glyphs) <_BDF_BITMAP>: Check line length.
-
-2012-02-24 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bugs #35597 and #35598.
-
- * src/bdf/bdflib.c (_bdf_is_atom): Fix handling of property value.
-
-2012-02-24 Vinnie Falco <vinnie.falco@gmail.com>
-
- Prepare source code for amalgamation (6/6).
-
- * src/cff/cffdrivr.c: s/Load_Glyph/cff_glyph_load/.
-
- * src/cid/cidload.c: s/parse_font_matrix/cid_parse_font_matrix/.
- s/t1_init_loader/cid_init_loader/.
- s/t1_done_loader/cid_done_loader/.
-
- * src/psaux/t1cmap.c: s/t1_get_glyph_name/psaux_get_glyph_name/.
-
- * src/truetype/ttdriver.c: s/Load_Glyph/tt_glyph_load/.
-
- * src/type1/t1load.c: s/parse_font_matrix/t1_parse_font_matrix/.
-
-2012-02-24 Vinnie Falco <vinnie.falco@gmail.com>
-
- Prepare source code for amalgamation (5/6).
-
- * include/freetype/fterrors.h: Undefine FT_KEEP_ERR_PREFIX after
- using it.
-
-2012-02-22 Vinnie Falco <vinnie.falco@gmail.com>
-
- Prepare source code for amalgamation (4/6).
-
- * src/smooth/ftgrays.c, src/raster/ftraster.c: Undefine RAS_ARG,
- RAS_ARGS, RAS_VAR, and RAS_VARS before defining it.
-
- * src/smooth/ftgrays.c: s/TRaster/black_TRaster/,
- s/PRaster/black_PRaster/.
- * src/raster/ftraster.c: s/TRaster/gray_TRaster/,
- s/PRaster/gray_PRaster/.
-
-2012-02-20 Vinnie Falco <vinnie.falco@gmail.com>
-
- Prepare source code for amalgamation (3/6).
-
- * src/smooth/ftgrays.c: s/TWorker/black_TWorker/,
- s/PWorker/black_PWorker/.
- * src/raster/ftraster.c: s/TWorker/gray_TWorker/,
- s/PWorker/gray_PWorker/.
-
-2012-02-20 Vinnie Falco <vinnie.falco@gmail.com>
-
- Prepare source code for amalgamation (2/6).
-
- * src/smooth/ftgrays.c, src/raster/ftraster.c: Undefine FLOOR,
- CEILING, TRUNC, and SCALED before defining it.
-
-2012-02-20 Vinnie Falco <vinnie.falco@gmail.com>
-
- Prepare source code for amalgamation (1/6).
-
- See discussion starting at
-
- http://lists.gnu.org/archive/html/freetype-devel/2012-01/msg00037.html
-
- * src/smooth/ftgrays.c: s/TBand/gray_TBand/.
- * src/raster/ftraster.c: s/TBand/black_TBand/.
-
-2012-02-17 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [autofit] Fix outline flags.
-
- * src/autofit/afloader.c (af_loader_load_g): Don't reassign
- `outline.flags' so that this information is preserved. See
- discussion starting at
-
- http://lists.gnu.org/archive/html/freetype-devel/2012-02/msg00046.html
-
-2012-02-11 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix Savannah bug #35466.
-
- Jump instructions are now bound to the current function. The MS
- Windows rasterizer behaves the same, as confirmed by Greg Hitchcock.
-
- * src/truetype/ttinterp.h (TT_CallRec): Add `Cur_End' element.
- * src/truetype/ttobjs.h (TT_DefRecord): Add `end' element.
-
- * src/truetype/ttinterp.c (DO_JROT, DO_JMPR, DO_JROF): Check upper
- bound of jump address.
- (Ins_FDEF, Ins_CALL, Ins_LOOPCALL, Ins_UNKNOWN, TT_RunIns): Updated.
-
-2012-02-11 Werner Lemberg <wl@gnu.org>
-
- We don't use `extensions'.
-
- * include/freetype/internal/ftobjs.h (FT_DriverRec): Remove
- `extensions' field.
-
-2012-02-11 Werner Lemberg <wl@gnu.org>
-
- Clean up `generic' fields.
-
- * include/freetype/internal/ftobjs.h (FT_ModuleRec, FT_LibraryRec):
- Remove `generic' field since users can't access it.
-
- * src/base/ftobjs.c (FT_Done_GlyphSlot): Call `generic.finalizer' as
- advertised in the documentation of FT_Generic.
- (Destroy_Module, FT_Done_Library): Updated to changes in `ftobjs.h'.
-
-2012-02-07 Werner Lemberg <wl@gnu.org>
-
- [autofit] Harmonize function arguments.
-
- * src/autofit/afloader.c, src/autofit/afloader.h: Use `FT_Int32' for
- `load_flags'.
-
-2012-02-07 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffobjs.c (cff_face_init): Remove unnecessary casts.
-
-2012-01-17 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [gxvalid] Fix Savannah bug #35286.
-
- Patch submitted by anonymous reporter.
-
- * src/gxvalid/gxvcommn.c (gxv_XStateTable_subtable_setup):
- gxv_set_length_by_ulong_offset() must be called with 3, not 4,
- the number of the subtables in the state tables; classTable,
- stateArray, entryTable.
-
-2012-01-17 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [raccess] Modify for PIC build.
-
- Based on the patch provided by Erik Dahlstrom <ed@opera.com>,
- http://lists.gnu.org/archive/html/freetype-devel/2012-01/msg00010.html
-
- Also `raccess_guess_table[]' and `raccess_rule_by_darwin_vfs()'
- are renamed with `ft_' suffixes.
-
- * src/base/ftbase.h: `raccess_rule_by_darwin_vfs()' is renamed
- to `ft_raccess_rule_by_darwin_vfs()'.
- * src/base/ftobjs.c: Ditto.
-
- * src/base/ftrfork.c: Declarations of FT_RFork_Rule,
- raccess_guess_rec, are moved to...
- * include/freetype/internal/ftrfork.h: Here.
-
- * include/freetype/internal/ftrfork.h:
- FT_RFORK_RULE_ARRAY_{BEGIN,ENTRY,END} macros are defined
- to replace raccess_guess_table[] in both of PIC and non-PIC
- modes.
- * src/base/ftrfork.c: raccess_guess_table[] array is rewritten
- by FT_RFORK_RULE_ARRAY_{BEGIN,ENTRY,END}.
-
- * src/base/basepic.h (BasePIC): Add `ft_raccess_guess_table'
- storage. (FT_RACCESS_GUESS_TABLE_GET): New macro to retrieve
- the function pointer from `ft_raccess_guess_table' storage in
- `BasePIC' structure.
- * src/base/ftrfork.c (FT_Raccess_Guess): Rewritten with
- FT_RACCESS_GUESS_TABLE_GET.
- (raccess_get_rule_type_from_rule_index): Add `library' as the
- first argument to the function, to retrieve the storage of
- `ft_raccess_guess_table' from it. Also `raccess_guess_table'
- is replaced by FT_RACCESS_GUESS_TABLE_GET.
- (ft_raccess_rule_by_darwin_vfs): Ditto.
-
-2012-01-16 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Remove trailing spaces.
-
-2012-01-16 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Formatting PIC related sources.
-
- * src/autofit/afpic.c: Harmonize to FT2 coding conventions.
- * src/base/basepic.c: Ditto.
- * src/base/ftpic.c: Ditto.
- * src/cff/cffpic.c: Ditto.
- * src/pshinter/pshpic.c: Ditto.
- * src/psnames/pspic.c: Ditto.
- * src/raster/rastpic.c: Ditto.
- * src/sfnt/sfntpic.c: Ditto.
- * src/smooth/ftspic.c: Ditto.
- * src/truetype/ttpic.c: Ditto.
-
-2012-01-16 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [autofit] Fix the inclusion of `aflatin2.h' in PIC file.
-
- * src/autofit/afpic.c: Include `aflatin2.h' when
- FT_OPTION_AUTOFIT2 is defined, as afglobal.c does so.
- Unconditionally inclusion causes declared but unimplemented
- warning by GCC 4.6.
-
-2012-01-16 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cff] Remove redundant declarations of cff_cmap_XXX_class_rec.
-
- * src/cff/cffpic.c: The declarations of
- FT_Init_Class_cff_cmap_encoding_class_rec() and
- FT_Init_Class_cff_cmap_unicode_class_rec() are removed.
- They can be obtained by the inclusion of cffcmap.h.
- cffcmap.h invokes FT_DECLARE_CMAP_CLASS() and it declares
- FT_Init_Class_cff_cmap_encoding_class_rec() etc in PIC mode.
-
-2012-01-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix redundant declaration warning in PIC mode.
-
- Originally FT_DEFINE_{DRIVER,MODULE,RENDERER}() macros were
- designed to declare xxx_pic_{free,init} by themselves.
- Because these macros are used at the end of the module
- interface (e.g. ttdriver.c) and the wrapper source to build
- a module as a single object (e.g. truetype.c) includes
- the PIC file (e.g. ttpic.c) before the module interface,
- these macros are expanded AFTER xxx_pic_{free,init} body
- when the modules are built as single object.
- The declaration after the implementation causes the redundant
- declaration warnings, so the declarations are moved to module
- PIC headers (e.g. ttpic.h). Separating to other header files
- are needed for multi build.
-
- * include/freetype/internal/ftdriver.h (FT_DEFINE_DRIVER):
- Remove class_##_pic_free and class_##_pic_init declarations.
- * include/freetype/internal/ftobjs.h (FT_DEFINE_RENDERER,
- FT_DEFINE_MODULE): Ditto.
-
- * src/base/basepic.h: Insert a comment and fix coding style.
- * src/autofit/afpic.h: Declare autofit_module_class_pic_{free,
- init}.
- * src/cff/cffpic.h: Declare cff_driver_class_pic_{free,init}.
- * src/pshinter/pshpic.h: Declare pshinter_module_class_pic_{free,
- init}.
- * src/psnames/pspic.h: Declare psnames_module_class_pic_{free,
- init}.
- * src/raster/rastpic.h: Declare
- ft_raster{1,5}_renderer_class_pic_{free,init}
- * src/sfnt/sfntpic.h: Declare sfnt_module_class_pic_{free,init}.
- * src/smooth/ftspic.h: Declare
- ft_smooth_{,lcd_,lcdv_}renderer_class_pic_{free,init}.
- * src/truetype/ttpic.h: Declare tt_driver_class_pic_{free,init}.
-
-2012-01-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Make pspic.c to include module error header to fix multi build.
-
- * src/psnames/pspic.c: Include `psnamerr.h'.
-
-2012-01-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [base] Fix a dereference of uninitialized variable in PIC mode.
-
- * src/base/ftglyph.c (FT_Glyph_To_Bitmap): `glyph' must be
- set before dereferring to obtain `library'. The initialization
- of `clazz', `glyph', `library' and NULL pointer check are
- reordered to minimize PIC conditionals.
-
-2012-01-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [base] Insert explicit cast for GCC 4.6 in PIC mode.
-
- * src/base/ftinit.c (FT_Add_Default_Modules): Under PIC
- configuration, FT_DEFAULT_MODULES_GET returns
- FT_Module_Class** pointer, GCC 4.6 warns that
- const FT_Module_Class* const* variable is warned as
- inappropriate to store it. To calm it, explicit cast is
- inserted. Also `library' is checked to prevent the NULL
- pointer dereference in FT_DEFAULT_MODULES_GET.
-
-2012-01-13 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix PIC build broken by d9145241fe378104ba4c12a42534549faacc92e6.
-
- Under PIC configuration, FT_{CFF,PSCMAPS,SFNT,TT}_SERVICES_GET
- take no arguments but derefer the variable named `library'
- internally.
-
- * src/cff/cffdrivr.c (cff_get_interface): Declare `library' and
- set it if non-NULL driver is passed.
- * src/truetype/ttdriver.c (tt_get_interface): Ditto.
-
- * src/sfnt/sfdriver.c (sfnt_get_interface): Declare `library'
- under PIC configuration, and set it if non-NULL module is given.
- * src/psnames/psmodule.c (psnames_get_interface): Ditto.
-
-2012-01-13 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Make PIC files include module error headers, to use the error codes
- with per-module prefix.
-
- * src/autofit/afpic.c: Include `aferrors.h'.
- * src/cff/cffpic.c: Include `cfferrs.h'.
- * src/pshinter/pshpic.c: Include `pshnterr.h'.
- * src/raster/rastpic.c: Include `rasterrs.h'.
- * src/sfnt/sfntpic.c: Include `sferrors.h'.
- * src/smooth/ftspic.c: Include `ftsmerrs.h'.
- * src/truetype/ttpic.c: Include `tterrors.h'.
-
-2012-01-04 Tobias Ringström <tobias@ringis.se>
-
- [truetype] Fix IP instruction if x_ppem != y_ppem.
-
- * src/truetype/ttinterp.c (Ins_IP): Scale `orus' coordinates
- properly.
-
-2012-01-02 Werner Lemberg <wl@gnu.org>
-
- Fix tracing message for `loca' table.
-
- * src/truetype/ttpload.c (tt_face_get_location): Don't emit a
- warning message if the last `loca' entry references an empty glyph.
-
-2011-12-10 Werner Lemberg <wl@gnu.org>
-
- Add some variable initializations.
- Reported by Richard COOK <rscook@unicode.org>.
-
- * src/type1/t1driver.c (t1_ps_get_font_value): Initialize `val'.
- * src/smooth/ftgrays.c (gray_render_conic): Initialize `levels'
- earlier.
-
-2011-12-08 Werner Lemberg <wl@gnu.org>
-
- Fix serious scaling bug in `FT_Get_Advances'.
-
- * src/base/ftadvanc.c (FT_Get_Advances): Advance values returned by
- `FT_Load_Glyph' must be simply multiplied by 1024.
-
-2011-12-08 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdflib.c (_bdf_parse_start): Drop redundant error tracing.
-
-2011-12-02 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [mac] Unify DARWIN_NO_CARBON with FT_MACINTOSH.
-
- Originally FT_MACINTOSH was a pure auto macro and DARWIN_NO_CARBON
- was a configurable macro to disable Carbon-dependent code. Because
- now configure script sets DARWIN_NO_CARBON by default and disables
- Darwin & Carbon-dependent codes, these macros can be unified.
- FT_MACINTOSH (undefined by default) is kept and DARWIN_NO_CARBON
- (defined by default) is removed, because DARWIN_NO_CARBON violates
- FT_XXX naming convention of public macros, and a macro configured by
- default is not portable for the building without configure (e.g.
- make devel).
-
- * builds/unix/configure.raw: Define FT_MACINTOSH if Carbon-based
- old Mac font support is requested and Carbon is available.
- * builds/unix/ftconfig.in: Undefine FT_MACINTOSH when the support
- for Mac OS X without Carbon (e.g. Mac OS X 10.4 for ppc64) is
- requested.
- * include/freetype/config/ftconfig.in: Ditto.
- * builds/vms/ftconfig.h: Ditto.
-
- * src/base/ftbase.h: Remove DARWIN_NO_CARBON.
- * src/base/ftbase.c: Ditto.
- * src/base/ftobjs.c: Ditto.
- * src/base/ftrfork.c: Ditto.
-
- * src/base/ftmac.c: Compile the body if FT_MACINTOSH is defined
- (same with TT_USE_BYTECODE_INTERPRETER in ttinterp.c).
- * builds/mac/ftmac.c: Ditto.
-
- * builds/mac/FreeType.m68k_cfm.make.txt: Define FT_MACINTOSH.
- * builds/mac/FreeType.m68k_far.make.txt: Ditto.
- * builds/mac/FreeType.ppc_classic.make.txt: Ditto.
- * builds/mac/FreeType.ppc_carbon.make.txt: Ditto.
-
-2011-11-30 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix Savannah bug #34728 (`make devel' on Mac OS X).
-
- * builds/toplevel.mk: Check `/dev/null' to identify the Unix-
- like systems without `init' nor `hurd' (e.g. Mac OS X >= 10.4).
- * builds/unix/detect.mk: Ditto.
-
-2011-11-30 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [apinames] Fix the overflow of signed integer hash.
-
- * src/tools/apinames.c (names_add): Change the type of `h' from
- int to unsigned int, to prevent undefined behaviour in the
- overflow of signed integers (overflow of unsigned int is defined
- to be wrap around). Found by clang test suggested by Sean
- McBride.
-
-2011-11-30 Werner Lemberg <wl@gnu.org>
-
- [winfonts] Remove casts.
-
- * src/winfonts/winfnt.c (winfnt_driver_class): Remove all casts and
- update affected functions.
- (FNT_Size_Select): Fix number of arguments.
-
-2011-11-30 Werner Lemberg <wl@gnu.org>
-
- [type42] Remove casts.
-
- * src/type42/t42drivr.c (t42_driver_class): Remove all casts and
- update affected functions.
-
- * src/type42/t42objs.c, src/type42/t42objs.h: Updated for t42 driver
- changes.
-
-2011-11-30 Werner Lemberg <wl@gnu.org>
-
- [type1] Remove casts.
-
- * src/type1/t1driver.c (t1_driver_class): Remove all casts and
- update affected functions.
-
- * src/type1/t1gload.c, src/type1/t1gload.h, src/type1/t1objs.c:
- Updated for t1driver changes.
- src/type1/t1objs.h (T1_Driver): Remove unused typedef.
- Updated for t1driver changes.
-
-2011-11-27 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #34896.
-
- ENCODING now covers the whole Unicode range.
-
- Note, however, that this change is quite expensive since it
- increases the size of three arrays by almost 400kByte in total. The
- right fix is to replace the logic with something smarter.
- Additionally, there exist very old BDFs for three-byte CCCII
- encoding which exceeds the range of Unicode (another reason to have
- a smarter logic).
-
- * src/bdf/bdf.h (bdf_font_t): Increase size of `nmod' and `umod'
- arrays.
- * src/bdf/bdflib.c (bdf_parse_t): Increase size of `have' array.
-
-2011-11-27 Werner Lemberg <wl@gnu.org>
-
- [bdf] Improve tracing.
-
- * src/bdf/bdflib.c (DBGMSG1, DBGMSG2): New macros.
- (_bdf_parse_glyphs): Use them.
-
-2011-11-26 Werner Lemberg <wl@gnu.org>
-
- Improve tracing.
-
- * src/bdf/bdfdrivr.c (BDF_Face_Done), src/pcf/pcfdrivr.c
- (PCF_Face_Done): Remove tracing message.
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init), src/cff/cffobjs.c
- (cff_face_init), src/cid/cidobjs.c (cid_face_init),
- src/pfr/pfrobjs.c (pfr_face_init), src/sfnt/sfobjs.c
- (sfnt_init_face), src/truetype/ttobjs.c (tt_face_init),
- src/type1/t1objs.c (T1_Face_Init), src/type42/t42objs.c
- (T42_Face_Init), src/winfonts/winfnt.c (FNT_Face_Init): Add
- `greeting' message.
-
- * src/sfnt/sfobjs.c (sfnt_open_font), src/type42/t42objs.c
- (T42_Open_Face): Improve tracing.
-
-2011-11-26 Werner Lemberg <wl@gnu.org>
-
- [cid] Fix error code.
-
- * src/cid/cidparse.c (cid_parser_new): Do it.
-
-2011-11-26 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix error code.
-
- * src/cff/cffload.c (cff_font_load): Do it.
-
-2011-11-26 Werner Lemberg <wl@gnu.org>
-
- Add new error code FT_Err_Missing_Module.
-
- Previously, FreeType misleadingly returned
- FT_Err_Unknown_File_Format if a module was missing (or a test was
- missing completely).
-
- * include/freetype/fterrdef.h (FT_Err_Missing_Module): Define.
-
- * src/cff/cffobjs.c (cff_face_init), src/cff/cffdrivr.c
- (cff_get_glyph_name), src/cid/cidobjs.c (cid_face_init),
- src/sfnt/sfobjs.c (sfnt_init_face), src/truetype/ttobjs.c
- (tt_face_init), src/type1/t1objs.c (T1_Face_Init),
- src/type42/t42objs.c (T42_Face_Init, T42_Driver_Init): Updated.
-
- * src/type1/t1afm.c (T1_Read_Metrics), src/type/t1objs.c
- (T1_Face_Init), src/type42/t42objs.c (T42_Face_Init): Remove now
- redundant test for `psaux'.
-
-2011-11-25 Werner Lemberg <wl@gnu.org>
-
- [bdf] Add more error messages.
-
- * src/bdf/bdflib.c (_bdf_set_default_spacing, _bdf_add_property):
- Add line number argument.
- Update all callers.
- (ERRMSG5, ERRMSG6, ERRMSG7, ERRMSG8, ERRMSG9): New macros.
- (_bdf_readstream, _bdf_set_default_spacing, _bdf_add_property,
- _bdf_parse_glyphs, _bdf_parse_start): Add error messages.
-
-2011-11-24 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/fterrors.h: Remove dead code.
-
-2011-11-15 Werner Lemberg <wl@gnu.org>
-
- * docs/releases: Updated.
-
-2011-11-15 Werner Lemberg <wl@gnu.org>
-
- * Version 2.4.8 released.
- =========================
-
-
- Tag sources with `VER-2-4-8'.
-
- * docs/CHANGES: Updated.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.4.8.
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.4.7/2.4.8/, s/247/248/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 8.
-
- * builds/unix/configure.raw (version_info): Set to 14:0:8.
-
-2011-11-13 Chris Liddell <chris.liddell@artifex.com>
-
- Add FT_Get_PS_Font_Value() API.
-
- This allows a Type 1 font face to be interrogated to retrieve most
- of the dictionary keys (keys not relevant to FreeType's Type 1
- interpreter are not available).
-
- * include/freetype/internal/services/svpsinfo.h
- (PS_GetFontValueFunc): New typedef.
- (PSInfo): Add `ps_get_font_value'.
- (FT_DEFINE_SERVICE_PSINFOREC): Updated.
-
- * include/freetype/internal/t1types.h (T1_EncodingType): Moved to...
- * include/freetype/t1tables.h: Here.
- (PS_Dict_Keys): New enumeration.
- (FT_Get_PS_Font_Value): New declaration.
-
- * src/base/fttype1.c (FT_Get_PS_Font_Value): New function.
-
- * src/type1/t1driver.c (t1_ps_get_font_value): This new function
- does the real job.
- (t1_service_ps_info): Add it.
-
- * src/cff/cffdrivr.c (cff_service_ps_info), src/cid/cidriver.c
- (cid_service_ps_info), src/type42/t42drivr.c (t42_service_ps_info):
- Updated.
-
-2011-11-08 Braden Thomas <bthomas@apple.com>
-
- [cid] Various loading fixes.
-
- * src/cid/cidload.c (cid_load_keyword) <default>,
- (parse_font_matrix, parse_expansion_factor): Correctly check number
- of dictionaries.
- (cid_read_subrs): Protect against invalid values of `num_subrs'.
- Assure that the elements of the `offsets' array are ascending.
-
-2011-11-05 Werner Lemberg <wl@gnu.org>
-
- * README: We use copyright ranges also.
-
- According to
-
- http://www.gnu.org/prep/maintain/html_node/Copyright-Notices.html
-
- this should be mentioned explicitly.
-
-2011-10-30 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [raccess] Supplement for previous fix.
-
- * src/base/ftbase.h (raccess_rule_by_darwin_vfs): Do not declare
- it on native Mac OS X.
- * src/base/ftrfork.c (raccess_get_rule_type_from_rule_index):
- Hide raccess_get_rule_type_from_rule_index() on native Mac OS X
- too.
-
-2011-10-30 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [raccess] Hide raccess_rule_by_darwin_vfs() on native Mac OS X.
-
- * src/base/ftrfork.c (raccess_rule_by_darwin_vfs): Do not
- compile on native Mac OS X because it is not used.
-
-2011-10-25 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix MD instruction for twilight zone.
-
- * src/truetype/ttinterp.c (Ins_MD): Without this fix, the MD
- instruction applied to original coordinates of twilight points
- always returns zero.
-
-2011-10-18 Werner Lemberg <wl@gnu.org>
-
- * Version 2.4.7 released.
- =========================
-
-
- Tag sources with `VER-2-4-7'.
-
- * docs/CHANGES: Updated.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.4.7.
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.4.6/2.4.7/, s/246/247/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 7.
-
- * builds/unix/configure.raw (version_info): Set to 13:2:7.
-
-2011-10-15 Kal Conley <kcconley@gmail.com>
-
- Fix handling of transformations if no renderer is present.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Thinko.
-
-2011-10-15 Kal Conley <kcconley@gmail.com>
-
- Fix conditions for autohinting.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Handle
- FT_LOAD_IGNORE_TRANSFORM.
-
-2011-10-07 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [gxvalid] Fix a bug to detect too large offset in morx table.
-
- * src/gxvalid/gxvmorx2.c
- (gxv_morx_subtable_type2_ligActionIndex_validate): Fix a bug
- that too large positive offset cannot be detected.
-
-2011-10-01 Braden Thomas <bthomas@apple.com>
-
- Handle some border cases.
-
- * include/freetype/config/ftstdlib.h (FT_USHORT_MAX): New macro.
-
- * src/base/ftbitmap.c (FT_Bitmap_Convert): Protect against invalid
- value of `target->rows'.
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Add check for
- flex start.
-
- * src/raster/ftrend1.c (ft_raster1_render): Check `width' and
- `height'.
-
- * src/truetype/ttgxvar.c (TT_Vary_Get_Glyph_Deltas): Protect against
- invalid values in `localpoints' array.
-
-2011-10-01 Werner Lemberg <wl@gnu.org>
-
- [psnames] Handle zapfdingbats.
- Problem reported by Nicolas Rougier <Nicolas.Rougier@inria.fr>.
-
- * src/tools/glnames.py (adobe_glyph_list): Add data from AGL's
- `zapfdingbats.txt' file.
-
- * src/psnames/pstables.h: Regenerated.
-
-2011-09-27 Simon Bünzli <zeniko@gmail.com>
-
- [type1] Fix Savannah bug #34189.
-
- * src/type1/t1load.c (T1_Open_Face): Initialize
- `face->len_buildchar'.
-
-2011-09-26 Werner Lemberg <wl@gnu.org>
-
- [cff] Dump SIDs while tracing.
-
- * src/cff/cffobjs.c (cff_face_init): Do it.
-
- * src/cff/cffparse.c (cff_parser_run) [FT_DEBUG_LEVEL_TRACE]
- <cff_kind_string>: Identify as SID.
-
-2011-09-17 Werner Lemberg <wl@gnu.org>
-
- Remove unused FT_ALIGNMENT macro.
-
- * builds/unix/ftconfig.in, builds/vms/ftconfig.h,
- include/freetype/config/ftconfig.h: Do it.
-
-2011-09-17 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Slightly optimize conic and cubic flatteners.
-
- * src/smooth/ftgrays.c (gray_render_conic, gray_render_cubic): Move
- out some code from the main loop to speed it up.
-
-2011-09-11 Tomas Hoger <thoger@redhat.com>
-
- Slightly improve LZW_CLEAR handling.
-
- * src/lzw/ftzopen.c (ft_lzwstate_io) <FT_LZW_PHASE_CODE>:
- Ensure that subsequent (modulo garbage byte(s)) LZW_CLEAR codes are
- handled as clear codes. This also re-sets old_code and old_char to
- predictable values, which is a little better than using `random'
- ones if the code following LZW_CLEAR is invalid.
-
-2011-09-11 Tomas Hoger <thoger@redhat.com>
-
- Add explicit LZW decompression stack size limit.
-
- Stack larger than 1<<LZW_MAX_BITS is never needed if prefix table is
- constructed correctly. It's even less than that, see e.g.
- libarchive code comment for a better size upper bound:
-
- http://code.google.com/p/libarchive/source/browse/trunk/libarchive/archive_read_support_filter_compress.c?r=3635#121
-
- This patch adds explicit stack size limit, enforced when stack is
- realloced.
-
- An alternative is to ensure that code < state->prefix[code - 256]
- when traversing prefix table. Such check is less efficient and
- should not be required if prefix table is constructed correctly in
- the first place.
-
- * src/lzw/ftzopen.c (ft_lzwstate_stack_grow): Implement it.
-
-2011-09-11 Tomas Hoger <thoger@redhat.com>
-
- Protect against loops in the prefix table.
-
- LZW decompressor did not sufficiently check codes read from the
- input LZW stream. A specially-crafted or corrupted input could
- create a loop in the prefix table, which leads to memory usage
- spikes, as there's no decompression stack size limit.
-
- * src/lzw/ftzopen.c (ft_lzwstate_io) <FT_LZW_PHASE_START>: First
- code in valid LZW stream must be 0..255.
- <FT_LZW_PHASE_CODE>: In the special KwKwK case, code == free_ent,
- code > free_ent is invalid.
-
-2011-09-09 Werner Lemberg <wl@gnu.org>
-
- Better tracing of metrics.
-
- * src/base/ftobjs.c (FT_Request_Size, FT_Select_Size): Decorate with
- FT_TRACE.
-
-2011-09-07 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix Savannah bug #33816.
-
- * src/cff/cfftypes.h (CFF_FontRecDictRec): New member
- `has_font_matrix'.
- * src/cff/cffparse.c (cff_parse_font_matrix): Set it.
- Update tracing output.
- * src/cff/cffobjs.c (cff_face_init): Use it so that the heuristics
- can be removed.
-
-2011-08-30 Werner Lemberg <wl@gnu.org>
-
- Better tracing of metrics.
-
- * src/base/ftobjs.c (FT_Select_Metrics, FT_Request_Metrics):
- Decorate with FT_TRACE.
-
-2011-08-25 Werner Lemberg <wl@gnu.org>
-
- [cff] Better tracing of the parsing process.
-
- * src/cff/cffload.c (cff_subfont_load, cff_font_load): Decorate with
- FT_TRACE.
-
- * src/cff/cffparse.c (cff_parse_font_matrix, cff_parse_font_bbox,
- cff_parse_private_dict, cff_parse_cid_ros): Updated.
- (CFF_FIELD_NUM, CFF_FIELD_FIXED, CFF_FIELD_FIXED_1000,
- CFF_FIELD_STRING, CFF_FIELD_BOOL, CFF_FIELD_CALLBACK, CFF_FIELD,
- CFF_FIELD_DELTA): Add argument for ID.
- (cff_parser_run): Decorate with FT_TRACE.
-
- * src/cff/cffparse.h (CFF_Field_Handler) [FT_DEBUG_LEVEL_TRACE]: Add
- `id' member.
-
- * src/cff/cfftoken.h: Add IDs to all fields.
-
-2011-08-16 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #34022.
-
- * README, docs/INSTALL: Remove references to UPGRADE.UNIX.
-
-2011-08-15 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #34018.
-
- * docs/UPGRADE.UNIX: Removed. Obsolete.
-
-2011-08-15 David Bevan <david.bevan@pb.com>
-
- Fix Savannah bug #33992.
-
- * src/base/ftstroke.c (FT_Stroker_ParseOutline): Fix border case.
-
-2011-08-12 Werner Lemberg <wl@gnu.org
-
- [truetype] Fix degenerate case in S{P,F,DP}VTL opcodes.
-
- * src/truetype/ttinterp.c (Ins_SxVTL): Handle p1 == p2 specially.
- (Ins_SDPVTL): Handle v1 == v2 specially.
-
-2011-08-09 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix Savannah bug #33975.
-
- * src/cff/cffparse.c (cff_parse_font_matrix): Fix typo.
-
-2011-07-29 Werner Lemberg <wl@gnu.org>
-
- * Version 2.4.6 released.
- =========================
-
-
- Tag sources with `VER-2-4-6'.
-
- * docs/CHANGES: Updated.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.4.6.
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.4.5/2.4.6/, s/245/246/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 6.
-
- * builds/unix/configure.raw (version_info): Set to 13:1:7.
-
-2011-07-29 Werner Lemberg <wl@gnu.org>
-
- [cff] Add some more tracing infos.
-
- * src/cff/cffparse.c (cff_parse_font_matrix, cff_parse_font_bbox,
- cff_parse_cid_ros): Add tracing.
-
-2011-07-22 Dirk Müller <dmueller@suse.de>
-
- [psaux, type1] Fix null pointer dereferences.
-
- Found with font fuzzying.
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Check
- `decoder->buildchar'.
-
- * src/type1/t1load.c (t1_load_keyword): Check `blend->num_designs'.
-
-2011-07-20 Chris Morgan <cmorgan@cybexintl.com>
-
- Add FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT.
-
- Useful for embedded systems which don't need file stream support.
-
- * src/base/ftsystem.c, src/base/ftobjs.c (FT_Stream_New): Implement
- it.
-
-2011-07-20 Elton Chung <elton328@gmail.com>
-
- * src/base/ftpatent.c (FT_Face_SetUnpatentedHinting): Fix typo.
-
-2011-07-16 Steven Chu <steven.f.chu@gmail.com>
-
- [truetype] Fix metrics on size request for scalable fonts.
-
- * src/truetype/ttdriver.c (tt_size_request): Fix copying metrics
- from TT_Size to FT_Size if scalable font.
-
- See
-
- http://lists.gnu.org/archive/html/freetype-devel/2011-07/msg00049.html
-
- for some comparison images.
-
-2011-07-14 Matthias Drochner <M.Drochner@fz-juelich.de>.
-
- [psaux] Fix potential sign extension problems.
-
- When shifting right a signed value, it is not defined by the
- C standard whether one gets a sign extension or not. Use a macro to
- do an explicit cast from a signed short (assuming that this is
- 16bit) to an int.
-
- * src/psaux/t1decode.c (Fix2Int): New macro.
- Use it where appropriate.
-
-2011-07-14 Werner Lemberg <wl@gnu.org>
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
- <op_callothersubr>: Better handling of subroutine index 0.
- From Matthias Drochner <M.Drochner@fz-juelich.de>.
-
-2011-07-10 ÐлекÑей Подтележников <apodtele@gmail.com>
-
- [psaux] Optimize previous commit.
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
- <op_callothersubr>: Move error check down to avoid testing twice for
- good cases.
-
-2011-07-08 Werner Lemberg <wl@gnu.org>
-
- [psaux] Add better argument check for `callothersubr'.
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
- <op_callothersubr>: Reject negative arguments.
-
-2011-07-07 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Try harder to find non-zero values for ascender and descender.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Consult `OS/2' table in case
- the `hhea' table's values are zero.
-
-2011-07-03 Werner Lemberg <wl@gnu.org>
-
- Fix previous commit.
-
- We want to unset FT_FACE_FLAG_SCALABLE only if there are bitmap
- strikes in the font.
-
- * src/truetype/ttobjs.c (tt_face_init): Implement it.
-
- * docs/CHANGES: Updated.
-
-2011-07-02 Just Fill Bugs <mozbugbox@yahoo.com.au>
-
- [truetype] Fix Savannah bug #33246.
-
- * src/truetype/ttobjs.c (tt_check_single_notdef): New function.
- (tt_face_init): Use it to test FT_FACE_FLAG_SCALABLE.
-
-2011-07-02 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2011-07-02 David Bevan <david.bevan@pb.com>
-
- [ftstroke] Major revision.
-
- The main problems
- -----------------
-
- o If FT_STROKER_LINEJOIN_BEVEL was specified, unlimited miter
- joins (not bevel joins) were generated. Indeed, the meanings of
- `miter' and `bevel' were incorrectly reversed (consistently) in
- both the code and comments.
-
- o The way bevel joins were constructed (whether specified
- explicitly, or created as a result of exceeding the miter limit)
- did not match what is required for stroked text in PostScript or
- PDF.
-
- The main fixes
- --------------
-
- o The behaviour of FT_STROKER_LINEJOIN_BEVEL has been corrected.
-
- o A new line join style, FT_STROKER_LINEJOIN_MITER_FIXED, has been
- introduced to support PostScript and PDF miter joins.
-
- o FT_STROKER_LINEJOIN_MITER_VARIABLE has been introduced as an
- alias for FT_STROKER_LINEJOIN_MITER.
-
- Additionally, a variety of stroking errors have been fixed. These
- would cause various artifacts (including points `at infinity'),
- especially when stroking poor quality fonts.
-
- See
-
- http://lists.gnu.org/archive/html/freetype-devel/2011-07/msg00001.html
-
- for example documents. The FreeType stroker now produces results
- very similar to that produced by GhostScript and Distiller for these
- fonts.
-
- Other problems
- --------------
-
- The following problems have been resolved:
-
- o Inside corners could be generated incorrectly. Intersecting the
- inside corner could cause a missing triangular area and other
- effects.
-
- The intersection point can only be used if the join is between
- two lines and both lines are long enough. The `optimization'
- condition in `ft_stroker_inside' has been corrected; this
- requires the line length to be passed into various functions and
- stored in `FT_StrokerRec'.
-
- o Incorrect cubic curves could be generated. The angle
- calculations in `FT_Stroker_CubicTo' have been corrected to
- handle the case of the curve crossing the +/-PI direction.
-
- o If the border radius was greater than the radius of curvature of
- a curve, then the negative sector would end up outside (not
- inside) the border. This situation is now recognized and the
- negative sector is circumnavigated in the opposite direction.
- (If round line joins are being used, this code is disabled
- because the line join will always cover the negative sector.)
-
- o When a curve is split, the arcs may not join smoothly (especially
- if the curve turns sharply back on itself). Changes in
- direction between adjacent arcs were not handled. A round
- corner is now added if the deviation from one arc to the next is
- greater than a suitable threshold.
-
- o The current direction wasn't retained if a the outline contained
- a zero length lineto or a curve that was determined to be
- `basically a point'. This could cause a spurious join to be
- added.
-
- o Cubics with close control points could be mishandled. All eight
- cases are now distinguished correctly.
-
- Other improvements
- ------------------
-
- o Borders for cubic curves could be too `flat'.
- FT_SMALL_CUBIC_THRESHOLD has been reduced a little to prevent
- this.
-
- o The handling and use of movable points has been simplified a
- little.
-
- o Various values are now computed only if the results are actually
- needed.
-
- o The directions of the outer and inner borders have been swapped,
- as recommended by Graham Asher.
-
- * src/base/ftstroke.c: Revised.
- * include/freetype/ftstroke.h: Updated.
-
-2011-06-30 İsmail Dönmez <ismail@namtrac.org>
-
- * builds/toplevel.mk: We use git, not CVS, thus skip `.gitignore'.
-
-2011-06-29 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #33663.
-
- * src/bdf/bdflib.c (_bdf_parse_glyphs): Handle negative values for
- ENCODING correctly.
-
- * docs/CHANGES: Document it.
-
-2011-06-24 Werner Lemberg <wl@gnu.org>
-
- * Version 2.4.5 released.
- =========================
-
-
- Tag sources with `VER-2-4-5'.
-
- * docs/CHANGES: Updated.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.4.5
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.4.4/2.4.5/, s/244/245/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 5.
-
- * builds/unix/configure.raw (version_info): Set to 13:0:7.
-
-2011-06-20 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Fix change
- from 2011-05-04.
-
-2011-06-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [gxvalid] make the `prop' validation tracing verbose.
-
- * src/gxvalid/gxvprop.c: Add tracing messages for errors.
-
-2011-06-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [autogen.sh] Reflect environment variable LIBTOOLIZE.
-
-2011-06-18 Werner Lemberg <wl@gnu.org>
-
- Update license documentation.
-
- * docs/GPL.TXT: Renamed to...
- * docs/GPLv2.TXT: This.
-
- * docs/LICENSE.TXT: Updated.
-
-2011-06-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix g++4.6 compiler warnings in module drivers.
-
- The background is same with previous commit.
-
- * src/truetype/ttgxvar.c (ft_var_readpackedpoints):
- Init `points'. (TT_Vary_Get_Glyph_Deltas): Init
- `delta_xy'. (TT_Get_MM_Var): Init `mmvar'.
- * src/type1/t1load.c (T1_Get_MM_Var): Ditto.
- * src/cff/cffdrivr.c (cff_ps_get_font_info): Init
- `font_info'.
- * src/cff/cffload.c (cff_index_get_pointers): Init `t'.
- (cff_font_load): Init `sub'.
- * src/cff/cffobjs.c (cff_size_init): Init `internal'.
- (cff_face_init): Init `cff'.
- * src/pfr/pfrload.c (pfr_extra_item_load_stem_snaps):
- Init `snaps'.
- * src/pcf/pcfread.c (pcf_get_properties): Init `properties'.
- (pcf_get_bitmaps): Init `offsets'. (pcf_get_encodings):
- Init `tmpEncoding'.
- * src/sfnt/ttload.c (tt_face_load_gasp): Init `gaspranges'.
- * src/sfnt/ttsbit.c (Load_SBit_Image): Init `components'.
- * src/cache/ftcmru.c (FTC_MruList_New): Init `node'.
- * src/gzip/ftgzip.c (FT_Stream_OpenGzip): Init `zip' and
- `zip_buff'.
- * src/lzw/ftlzw.c (FT_Stream_OpenLZW): Init `zip'.
- * src/bzip2/ftbzip2.c (FT_Stream_OpenBzip2): Init `zip'.
-
-2011-06-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [base] Fix g++4.6 compiler warnings in src/base/*.c.
-
- Passing uninitialized pointer to FT_NEW() families is
- not problematic theoretically (as far as the returned
- pointer is checked before writing), but g++4.6 dislikes
- it and warns by -Wuninitialized. Initialize them by NULL.
-
- * src/base/ftobjs.c (FT_Stream_New): Init `stream'.
- (new_memory_stream): Ditto.
- (FT_New_GlyphSlot): Init `slot'.
- (FT_CMap_New): Init `cmap'.
- (open_face_PS_from_sfnt_stream): Init `sfnt_ps'.
- (Mac_Read_POST_Resource): Init `pfb_data'.
- (Mac_Read_sfnt_Resource): Init `sfnt_data'.
- * src/base/ftrfork.c (FT_Raccess_Get_DataOffsets):
- Init `offsets_internal' and `ref'.
- (raccess_guess_darwin_hfsplus): Init `newpath'.
- (raccess_guess_darwin_newvfs): Ditto.
- * src/base/ftbitmap.c (ft_bitmap_assure_buffer):
- Init `buffer'.
- * src/base/ftstroke.c (FT_Stroker_New): Init `stroker'.
-
-2011-06-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [gxvalid] Cleanup.
-
- Some invalid, overrunning, unrecommended non-zero values
- are cared in paranoid validation mode only. There are
- many lines looking like:
-
- if ( valid->root->level >= FT_VALIDATE_PARANOID )
- FT_INVALID_xxx;
-
- To simplify them, GXV_SET_ERR_IF_PARANOID( err ) is
- introduced for more paranoid validation in future.
-
- * src/gxvalid/gxvcommn.h (IS_PARANOID_VALIDATION):
- New macro to assure valid->root->level is more or
- equal to FT_VALIDATE_PARANOID. (GXV_SET_ERR_IF_PARANOID):
- New macro to raise an error if in paranoid validation.
- * src/gxvalid/gxvcommn.c: Use GXV_SET_ERR_IF_PARANOID().
- * src/gxvalid/gxvfeat.c: Ditto.
- * src/gxvalid/gxvjust.c: Ditto.
- * src/gxvalid/gxvkern.c: Ditto.
- * src/gxvalid/gxvmort.c: Ditto.
- * src/gxvalid/gxvmort0.c: Ditto.
- * src/gxvalid/gxvmort1.c: Ditto.
- * src/gxvalid/gxvmort2.c: Ditto.
- * src/gxvalid/gxvmorx1.c: Ditto.
- * src/gxvalid/gxvmorx2.c: Ditto.
-
-2011-06-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [gxvalid] Fix gcc4.6 compiler warnings in gxvtrak.c.
-
- * src/gxvalid/gxvtrak.c (gxv_trak_trackTable_validate):
- Check different entries pointing same tracking value.
- (gxv_trak_validate): Remove unused variable `table_size'.
-
-2011-06-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [gxvalid] Fix gcc4.6 compiler warnings in gxvmorx*.c.
-
- * src/gxvalid/gxvmorx.c (gxv_morx_subtables_validate):
- Conditionalize unvalidated variable `subFeatureFlags'.
- (gxv_morx_chain_validate): Conditionalize unvalidated
- variable `defaultFlags'.
-
- * src/gxvalid/gxvmorx0.c
- (gxv_morx_subtable_type0_entry_validate):
- Conditionalize unvalidated variables; `markFirst',
- `dontAdvance', `markLast', `verb'.
-
- * src/gxvalid/gxvmorx1.c
- (gxv_morx_subtable_type1_entry_validate): Conditionalize
- unvalidated variables; `setMark', `dontAdvance'.
-
- * src/gxvalid/gxvmorx2.c
- (gxv_morx_subtable_type2_ligActionOffset_validate):
- Conditionalize unvalidated variables; `last', `store'.
- Checking for overrunning offset is added.
- (gxv_morx_subtable_type2_entry_validate):
- Conditionalize unvalidated variables; `setComponent',
- `dontAdvance', `performAction'.
- (gxv_morx_subtable_type2_ligatureTable_validate):
- Check if the GID for ligature does not exceed the
- max GID in `maxp' table.
-
- * src/gxvalid/gxvmort5.c
- (gxv_morx_subtable_type5_InsertList_validate):
- Conditionalize unvalidated loading of `insert_glyphID'
- array. (gxv_morx_subtable_type5_entry_validate):
- Conditionalize unvalidated variables; `setMark',
- `dontAdvance', `currentIsKashidaLike',
- `markedIsKashidaLike', `currentInsertBefore',
- `markedInsertBefore'.
-
-2011-06-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [gxvalid] Fix gcc4.6 compiler warnings in gxvmort*.c.
-
- * src/gxvalid/gxvmort.c (gxv_mort_subtables_validate):
- Conditionalize unvalidated variable `subFeatureFlags'.
- (gxv_mort_chain_validate): Conditionalize unvalidated
- variable `defaultFlags'.
-
- * src/gxvalid/gxvmort0.c
- (gxv_mort_subtable_type0_entry_validate): Check the
- conflict of the marks for the glyphs.
-
- * src/gxvalid/gxvmort1.c
- (gxv_mort_subtable_type1_offset_to_subst_validate):
- Local variables `min_gid', `max_gid' are replaced by
- variables in the validator.
- (gxv_mort_subtable_type1_entry_validate): Conditionalize
- unvalidated variables; `setMark', `dontAdvance'.
- (gxv_mort_subtable_type1_substTable_validate):
- Validate the GID by the min/max GIDs in the validator.
-
- * src/gxvalid/gxvmort2.c
- (gxv_mort_subtable_type2_ligActionOffset_validate):
- Conditionalize unvalidated variables; `last', `store'.
- Checking for overrunning offset is added.
- (gxv_mort_subtable_type2_entry_validate):
- Conditionalize unvalidated variables; `setComponent',
- `dontAdvance'.
- (gxv_mort_subtable_type2_ligatureTable_validate):
- Check if the GID for ligature does not exceed the
- max GID in `maxp' table.
-
- * src/gxvalid/gxvmort5.c
- (gxv_mort_subtable_type5_InsertList_validate):
- Conditionalize unvalidated loading of `insert_glyphID'
- array. (gxv_mort_subtable_type5_entry_validate):
- Conditionalize unvalidated variables; `setMark',
- `dontAdvance', `currentIsKashidaLike',
- `markedIsKashidaLike', `currentInsertBefore',
- `markedInsertBefore'.
-
-2011-06-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [gxvalid] Fix gcc4.6 compiler warnings in gxvkern.c.
-
- * src/gxvalid/gxvkern.c
- (gxv_kern_subtable_fmt0_pairs_validate): Conditionalize
- unvalidated variable `kernValue'.
- (gxv_kern_subtable_fmt1_entry_validate): Conditionalize
- unvalidated variables; `push', `dontAdvance', `kernAction',
- `kernValue'.
- (gxv_kern_coverage_new_apple_validate): Conditionalize
- trace-only variables; `kernVertical', `kernCrossStream',
- `kernVariation'.
- (gxv_kern_coverage_classic_apple_validate): Conditionalize
- trace-only variables; `horizontal', `cross_stream'.
- (gxv_kern_coverage_classic_microsoft_validate):
- Conditionalize trace-only variables; `horizontal',
- `minimum', `cross_stream', `override'.
- (gxv_kern_subtable_validate): Conditionalize trace-only
- variables; `version', `tupleIndex'.
-
-2011-06-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [gxvalid] Fix gcc4.6 compiler warnings in gxvjust.c.
-
- * src/gxvalid/gxvjust.c (gxv_just_check_max_gid):
- New function to unify the checks of too large GID.
- (gxv_just_wdp_entry_validate): Conditionalize unvalidated
- variables; `beforeGrowLimit', `beforeShrinkGrowLimit',
- `afterGrowLimit', `afterShrinkGrowLimit', `growFlags',
- `shrinkFlags'. Additional check for non-zero values in
- unused storage `justClass' is added.
- (gxv_just_actSubrecord_type0_validate): Conditionalize
- unvalidated variable `order'. GID is checked by
- gxv_just_check_max_gid(). Additional check for upside-down
- relationship between `lowerLimit' and `upperLimit' is added.
- (gxv_just_actSubrecord_type1_validate): GID is checked by
- gxv_just_check_max_gid().
- (gxv_just_actSubrecord_type2_validate): Conditionalize
- unvalidated variable `substThreshhold'. GID is checked by
- gxv_just_check_max_gid().
- (gxv_just_actSubrecord_type5_validate): GID is checked by
- gxv_just_check_max_gid().
- (gxv_just_classTable_entry_validate): Conditionalize
- unvalidated variables; `setMark', `dontAdvance',
- `markClass', `currentClass'.
-
-2011-06-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [gxvalid] Preparation to fix gcc4.6 compiler warnings.
-
- * src/gxvalid/gxvcommn.h (GXV_LOAD_TRACE_VARS): New macro to
- conditionalize the variable which is only used for trace messages.
- Automatically set by FT_DEBUG_LEVEL_TRACE.
- (GXV_LOAD_UNUSED_VARS): New macro to conditionalize the loading of
- unvalidated variables. Undefined by default to calm gcc4.6 warning.
- (GXV_ValidatorRec.{min_gid,max_gid}): New variables to hold defined
- GID ranges, for the comparison of GID ranges in different subtables.
-
-2011-06-08 Werner Lemberg <wl@gnu.org>
-
- [autofit] Remove unused structure member.
-
- * src/autofit/afhints.h (AF_SegmentRec): Remove `contour'.
- * src/autofit/aflatin.c (af_latin_hints_compute_segments),
- src/autofit/aflatin2.c (af_latin2_hints_compute_segments): Updated.
-
-2011-05-30 Werner Lemberg <wl@gnu.org>
-
- Fix g++ 4.6 compilation.
-
- * src/autofit/afhints.c (af_glyph_hints_dump_segments,
- af_glyph_hints_dump_edges): Use cast.
-
-2011-05-30 Werner Lemberg <wl@gnu.org>
-
- Fix gcc 4.6 compiler warnings.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_blues): Use casts and
- remove unused variables.
- * src/autofit/aflatin.c (af_latin_hints_compute_edges): Comment out
- `up_dir'.
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Use `height_org'
- and `width_org' conditionalized.
-
-2011-05-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [mac] Conditionalize the inclusion of `AvailabilityMacros.h'.
-
- The native SDK on earliest Mac OS X (10.0-10.1) did not have
- `AvailabilityMacros.h'. To prevent the inclusion of missing
- header file, ECANCELED (introduced in 10.2) in POSIX header
- file <errno.h> is checked to detect the system version.
-
- * include/freetype/config/ftconfig.h: Conditionalize the
- inclusion of `AvailabilityMacros.h'.
- * builds/unix/ftconfig.in: Ditto.
- * builds/vms/ftconfig.h: Ditto.
-
-2011-05-27 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve tracing of hinting process.
-
- * src/autofit/aflatin.c (af_latin_hint_edges): Add tracing message
- `ADJUST'.
-
-2011-05-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix trace message.
-
- * src/autofit/aflatin.c (af_latin_hint_edges): Show correct value in
- tracing message.
-
-2011-05-24 Daniel Zimmermann <netzimme@googlemail.com>
-
- Reduce warnings for MS Visual Studio 2010.
-
- * src/autofit/afhints.c (af_glyph_hints_get_num_segments,
- af_glyph_hints_get_segment_offset) [!FT_DEBUG_AUTOFIT]: Provide
- return value.
- * src/cff/cffgload.c (cff_slot_load): Add cast.
- * src/truetype/ttobjs.c (tt_check_trickyness_sfnt_ids): Use proper
- loop variable type.
-
-2011-05-16 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Automake component `builds/unix/install-sh' is removed.
-
- * builds/unix/install-sh: Removed. It is not needed to
- include repository, because autogen.sh installs it.
- * builds/unix/.gitignore: Register install-sh.
-
-2011-05-12 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [autofit] Make trace message for CJK bluezone more verbose.
-
-2011-05-08 Just Fill Bugs <mozbugbox@yahoo.com.au>
- suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [autofit] Add bluezones for CJK Ideographs.
-
- To remove extrema of vertical strokes of CJK Ideographs at
- low resolution and make the top and bottom horizontal stems
- aligned, bluezones for CJK Ideographs are calculated from
- sample glyphs. At present, vertical bluezones (bluezones
- to align vertical stems) are disabled by default. For detail, see
- http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
- http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
- http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
-
- * include/freetype/internal/fttrace.h: New trace component `afcjk'.
- * src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
- for AF_Latin{Blue,Axis,Metric}Rec.
- (af_cjk_metrics_check_digits): Ditto, shared with Indic module.
- (af_cjk_metrics_init_widths): Ditto.
- (af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
- (af_cjk_metrics_scale): Ditto (declaration).
- (af_cjk_hints_init): Ditto (declaration).
- (af_cjk_hints_apply): Ditto (declaration).
- * src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
- (af_cjk_hints_init): Ditto (body).
- (af_cjk_hints_apply): Ditto (body).
- (af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
- (af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
- (af_cjk_metrics_init): Call CJK bluezone initializer.
- (af_cjk_metrics_scale_dim): Add code to scale bluezones.
- (af_cjk_hints_compute_blue_edges): New function, CJK version of
- af_latin_hints_compute_blue_edges.
- (af_cjk_metrics_init_blues): New function, CJK version of
- af_latin_metrics_init_blues.
- (af_cjk_hint_edges): Add code to align the edge stems to blue zones.
-
- * src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
- instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
- However bluezones are not initialized.
- (af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
- (af_indic_hints_init): Ditto.
- (af_indic_hints_apply): Ditto.
-
- * docs/CHANGES: Note about CJK bluezone support.
-
-2011-05-06 Werner Lemberg <wl@gnu.org>
-
- [autofit] Remove unused struct member.
-
- * src/autofit/aflatin.h (AF_LatinAxis): Remove `control_overshoot'.
-
-2011-05-04 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Simplify.
-
-2011-05-01 Just Fill Bugs <mozbugbox@yahoo.com.au>
- Werner Lemberg <wl@gnu.org>
-
- [autofit] Add more debugging functions.
-
- * src/autofit/afhints.c (af_glyph_hints_get_num_segments,
- af_glyph_hints_get_segment_offset): New functions.
-
-2011-05-01 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Add new option `--disable-mmap' to configure script.
-
- * builds/unix/configure.raw: New option `--disable-mmap'
- is added. It is for the developers to simulate the systems
- without mmap() (like 4.3BSD, minix etc) on POSIX systems.
-
-2011-04-30 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [truetype] Always recalculate the sfnt table checksum.
-
- * src/truetype/ttobjs.c (tt_get_sfnt_checksum): Recalculate
- the sfnt table checksum even if non-zero value is written in
- the TrueType font header. Some bad PDF generators write
- wrong values. For details see examples and benchmark tests
- of the latency by recalculation:
- http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00091.html
- http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00096.html
-
-2011-04-30 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [truetype] Register a set of tricky fonts, NEC FA family.
-
- * src/truetype/ttobjs.c (tt_check_trickyness_sfnt_ids):
- Add 8 checksum sets for NEC FA family. For the tricky fonts
- without some tables (e.g. NEC FA fonts lack cvt table),
- extra check is added to assure that a zero-length table in the
- registry is not included in the font.
-
-2011-04-29 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [truetype] Fix a bug in the sfnt table checksum getter.
-
- * src/truetype/ttobjs.c (tt_get_sfnt_checksum): Check the
- return value of face->goto_table() correctly.
-
-2011-04-28 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve tracing messages.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues,
- af_latin_align_linked_edge, af_latin_hint_edges): Do it.
-
-2011-04-25 Kan-Ru Chen <kanru@kanru.info>
-
- [truetype] Always check the checksum to identify tricky fonts.
-
- Because some PDF generators mangle the family name badly,
- the trickyness check by the checksum should be invoked always.
- For sample PDF, see
- http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00073.html
-
- * src/truetype/ttobjs.c (tt_check_trickyness): Even when
- tt_check_trickyness_family() finds no trickyness,
- tt_check_trickyness_sfnt_ids() is invoked.
-
-2011-04-22 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [autofit] Add more Indic scripts with hanging baseline.
-
- * src/autofit/afindic.c (af_indic_uniranges): Tibetan, Limbu,
- Sundanese, Meetei Mayek, Syloti Nagri and Sharada scripts are
- added.
-
-2011-04-21 Behdad Esfahbod <behdad@behdad.org>
-
- Always ignore global advance.
-
- This makes FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH redundant,
- deprecated, and ignored. The new behavior is what every major user
- of FreeType has been requesting. Global advance is broken in many
- CJK fonts. Just ignoring it by default makes most sense.
-
- * src/truetype/ttdriver.c (tt_get_advances),
- src/truetype/ttgload.c (TT_Get_HMetrics, TT_Get_VMetrics,
- tt_get_metrics, compute_glyph_metrics, TT_Load_Glyph),
- src/truetype/ttgload.h: Implement it.
-
- * docs/CHANGES: Updated.
-
-2011-04-21 rainy6144 <rainy6144@gmail.com>
-
- [autofit] Blur CJK stems if too many to preserve their gaps.
-
- When there are too many stems to preserve their gaps in the
- rasterization of CJK Ideographs at a low resolution, blur the
- stems instead of showing clumped stems. See
- http://lists.gnu.org/archive/html/freetype-devel/2011-02/msg00011.html
- http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00046.html
- for details.
-
- * src/autofit/afcjk.c (af_cjk_hint_edges): Store the position of
- the previous stem by `has_last_stem' and `last_stem_pos', and skip
- a stem if the current and previous stem are too near to preserve
- the gap.
-
-2011-04-18 Werner Lemberg <wl@gnu.org>
-
- Integrate autofitter debugging stuff.
-
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (FT_DEBUG_AUTOFIT): New macro.
-
- * include/freetype/internal/fttrace.h: Add trace components for
- autofitter.
-
- * src/autofit/aftypes.h (AF_LOG): Removed.
- (_af_debug): Removed.
-
- * src/autofit/*: s/AF_DEBUG/FT_DEBUG_AUTOFIT/.
- s/AF_LOG/FT_TRACE5/.
- Define FT_COMPONENT where necessary.
-
-2011-04-18 Werner Lemberg <wl@gnu.org>
-
- Synchronize config files.
-
- * builds/unix/ftconfig.in: Copy missing assembler routines from
- include/freetype/config/ftconfig.h.
-
-2011-04-13 Werner Lemberg <wl@gnu.org>
-
- [psaux] Fix Savannah bug #33047.
-
- Patch submitted by anonymous reporter.
-
- * src/psaux/psobjs.c (ps_table_add): Use FT_PtrDist for pointer
- difference.
-
-2011-04-11 Kan-Ru Chen <kanru@kanru.info>
-
- Fix reading of signed integers from files on 64bit platforms.
-
- Previously, signed integers were converted to unsigned integers, but
- this can fail because of sign extension. For example, 0xa344a1eb
- becomes 0xffffffffa344a1eb.
-
- We now do the reverse which is always correct because the integer
- size is the same during the cast from unsigned to signed.
-
- * include/freetype/internal/ftstream.h, src/base/ftstream.c
- (FT_Stream_Get*): Replace with...
- (FT_Stream_GetU*): Functions which read unsigned integers.
- Update all macros accordingly.
-
- * src/gzip/ftgzip.c (ft_gzip_get_uncompressed_size): Updated.
-
-2011-04-07 Werner Lemberg <wl@gnu.org>
-
- Update Unicode ranges for CJK autofitter; in particular, add Hangul.
-
- * src/autofit/afcjk.c (af_cjk_uniranges): Update to Unicode 6.0.
-
-2011-04-04 Werner Lemberg <wl@gnu.org>
-
- Fix formatting of autofit debug dumps.
-
- * src/autofit/afhints.c (af_glyph_hints_dump_points,
- af_glyph_hints_dump_segments, af_glyph_hints_dump_edges): Adjust
- column widths.
-
-2011-03-30 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/aftypes.h (AF_OutlineRec): Removed, unused.
-
-2011-03-24 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cfftypes.h (CFF_MAX_CID_FONTS): Increase to 256.
- This limit is given on p. 37 of Adobe Technical Note #5014.
-
-2011-03-23 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttpload.c (tt_face_load_loca): Fix mismatch warning.
-
-2011-03-20 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/sfobjs.c (sfnt_open_font): Check number of TTC subfonts.
-
-2011-03-19 Werner Lemberg <wl@gnu.org>
-
- More C++ compilation fixes.
-
- * src/autofit/afhints.c (af_glyph_hints_dump_points,
- af_glyph_hints_dump_segments, af_glyph_hints_dump_edges)
- [__cplusplus]: Protect with `extern "C"'.
-
-2011-03-18 Werner Lemberg <wl@gnu.org>
-
- C++ compilation fixes.
-
- * src/autofit/aflatin.c (af_latin_hints_apply), src/autofit/afcjk.c
- (af_cjk_hints_apply): Use cast for `dim'.
-
-2011-03-17 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- A better fix for Savannah bug #32671.
-
- * src/smooth/ftgrays.c (gray_render_conic): Clean up code and
- replace WHILE loop with a more natural DO-WHILE construct.
-
-2011-03-16 Werner Lemberg <wl@gnu.org>.
-
- * src/base/ftstroke.c (FT_StrokerRec): Remove unused `valid' field.
- Suggested by Graham Asher.
-
-2011-03-09 Werner Lemberg <wl@gnu.org>
-
- Make FT_Sfnt_Table_Info return the number of SFNT tables.
-
- * src/sfnt/sfdriver.c (sfnt_table_info): Implement it.
- * include/freetype/tttables.h: Update documentation.
- * docs/CHANGES: Updated.
-
-2011-03-07 Bram Tassyns <bramt@enfocus.be>
-
- [cff] Fix Savannah bug #27988.
-
- * src/cff/cffobjs.c (remove_style): New function.
- (cff_face_init): Use it to strip off the style part of the family
- name.
-
-2011-03-07 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2011-03-07 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Quick fix for Savannah bug #32671.
-
- This isn't the optimal solution yet, but it restores the previous
- rendering quality (more or less).
-
- * src/smooth/ftgrays.c (gray_render_conic): Do more splitting.
-
-2011-03-06 Werner Lemberg <wl@gnu.org>
-
- Fix autohinting fallback.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Assure that we only check TTFs,
- ignoring CFF-based OTFs.
-
-2011-02-27 Werner Lemberg <wl@gnu.org>
-
- Add AF_CONFIG_OPTION_USE_WARPER to control the autofit warper.
-
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (AF_CONFIG_OPTION_USE_WARPER): New macro.
- * src/autofit/aftypes.h (AF_USE_WARPER): Remove.
-
- * src/autofit/*: s/AF_USE_WARPER/AF_CONFIG_OPTION_USE_WARPER/.
-
- * src/autofit/afwarp.c [!AF_CONFIG_OPTION_USE_WARPER]: Replace dummy
- variable assignment with a typedef.
-
-2011-02-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Slight simplifications.
-
- * src/autofit/aflatin.c (af_latin_hints_link_segments): Remove
- test which always returns false.
- (af_latin_hints_compute_blue_edges): Remove redundant assignment.
-
-2011-02-24 Werner Lemberg <wl@gnu.org>
-
- * docs/PROBLEMS: Mention rendering differences on different
- platforms.
- Suggested and worded by Jason Owen <jason.a.owen@gmail.com>.
-
-2011-02-24 Werner Lemberg <wl@gnu.org>
-
- [autofit] Comment out unused code.
-
- * src/autofit/aflatin.c, src/autofit/aflatin2.c
- (af_latin_hints_compute_edges): Do it.
-
-2011-02-24 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afhints.h (AF_GlyphHints): Remove unused field.
-
-2011-02-20 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cache] Fix an off-by-one bug in `FTC_Manager_RemoveFaceID'.
- Found by <ychen1392001@yahoo.com.cn>, see detail in
-
- http://lists.gnu.org/archive/html/freetype/2011-01/msg00023.html
-
- * src/cache/ftccache.c (FTC_Cache_RemoveFaceID): Check the node
- buckets[cache->p + cache->mask] too.
-
-2011-02-19 Kevin Kofler <kevin.kofler@chello.at>
-
- Fall back to autohinting if a TTF/OTF doesn't contain any bytecode.
- This is Savannah patch #7471.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Implement it.
-
-2011-02-19 John Tytgat <John.Tytgat@esko.com>
-
- [cff] Fix subset prefix removal.
- This is Savannah patch #7465.
-
- * src/cff/cffobjs.c (remove_subset_prefix): Update length after
- subset prefix removal.
-
-2011-02-13 Bradley Grainger <bgrainger@logos.com>
-
- Add inline assembly version of FT_MulFix for MSVC.
-
- * include/freetype/config/ftconfig.h: Ported the FT_MulFix_i386
- function from GNU inline assembly syntax (see #ifdef __GNUC__ block
- above) to MASM syntax for Microsoft Visual C++.
-
-2011-02-13 Bradley Grainger <bgrainger@logos.com>
-
- Add project and solution files in Visual Studio 2010 format.
-
- * builds/win32/.gitignore: Ignore user-specific cache files.
- * builds/win32/vc2010/: Add VS2010 project & solution files, created
- by upgrading builds/win32/vc2008/freetype.vcproj.
- * objs/.gitignore: Ignore Visual Studio output files.
-
-2011-02-01 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afdummy.c: Include `aferrors.h'.
- Problem reported by Chris Liddell <chris.liddell@artifex.com>.
-
-2011-02-01 Werner Lemberg <wl@gnu.org>
-
- [cff] Ignore unknown operators in charstrings.
- Patch suggested by Miles.Lau <sunliang_liu@foxitsoftware.com>.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings): Emit tracing
- message for unknown operators and continue instead of exiting with a
- syntax error.
-
-2011-02-01 Werner Lemberg <wl@gnu.org>
-
- [truetype] FT_LOAD_PEDANTIC now affects `prep' and `fpgm' also.
-
- * src/truetype/ttgload.c (tt_loader_init): Handle
- `FT_LOAD_PEDANTIC'.
- * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep,
- tt_size_init_bytecode, tt_size_ready_bytecode): New argument to
- handle pedantic mode.
- * src/truetype/ttobjs.h: Updated.
-
-2011-01-31 Werner Lemberg <wl@gnu.org>
-
- [truetype] Protect jump instructions against endless loops.
-
- * src/truetype/interp.c (DO_JROT, DO_JMPR, DO_JROF): Exit with error
- if offset is zero.
-
-2011-01-31 Werner Lemberg <wl@gnu.org>
-
- [truetype] Improve handling of invalid references.
-
- * src/truetype/interp.c: Set even more TT_Err_Invalid_Reference
- error codes only if pedantic hinting is active. At the same time,
- try to provide sane values which hopefully allow useful
- continuation. Exception to this is CALL and LOOPCALL – due to
- possible stack corruption it is necessary to bail out.
-
-2011-01-31 Werner Lemberg <wl@gnu.org>
-
- [truetype] Improve handling of stack underflow.
-
- * src/truetype/ttinterp.c (TT_RunIns, Ins_FLIPPT, Ins_DELTAP,
- Ins_DELTAC): Exit with error only if `pedantic_hinting' is set.
- Otherwise, try to do something sane.
-
-2011-01-30 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttmtx.c (tt_face_load_hmtx): Fix tracing message.
-
-2011-01-30 LIU Sun-Liang <sunliang_liu@foxitsoftware.com>
-
- [truetype]: Fix behaviour of MIAP for invalid arguments.
-
- * src/truetype/ttinterp.c (Ins_MIAP): Set reference points even in
- case of error.
-
-2011-01-18 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix handling of MIRP instruction.
-
- Thanks to Greg Hitchcock who explained the issue.
-
- * src/truetype/ttinterp.c (Ins_MIRP): Replace a `>=' operator with
- `>' since the description in the specification is incorrect.
- This fixes, for example, glyph `two' in font `Helvetica Neue LT Com
- 65 medium' at 15ppem.
-
-2011-01-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix ARM assembly code in include/freetype/config/ftconfig.h.
-
- * include/freetype/config/ftconfig.h (FT_MulFix_arm):
- Copy the maintained code from builds/unix/ftconfig.in.
- Old GNU binutils could not accept the reduced syntax
- `orr %0, %2, lsl #16'. Un-omitted syntax like RVCT,
- `orr %0, %0, %2, lsl #16' is better. Reported by
- Johnson Y. Yan. The bug report by Qt developers is
- considered too.
-
- http://bugreports.qt.nokia.com/browse/QTBUG-6521
-
-2011-01-15 Werner Lemberg <wl@gnu.org>
-
- [raster] Make bbox handling the same as with Microsoft's rasterizer.
-
- Right before B/W rasterizing, the bbox gets simply rounded to
- integers. This fixes, for example, glyph `three' in font `Helvetica
- Neue LT Com 65 Medium' at 11ppem.
-
- Thanks to Greg Hitchcock who explained this behaviour.
-
- * src/raster/ftrend1.c (ft_raster1_render): Implement it.
-
-2011-01-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Copy -mcpu=* & -march=* options from CFLAGS to LDFLAGS.
-
- * builds/unix/configure.raw: Consider recent gcc-standard
- flags to specify architecture in CFLAGS & LDFLAGS
- harmonization. Requested by Savannah bug #32114, to
- support multilib feature of BuildRoot SDK correctly.
-
-2011-01-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix off-by-one bug in CFLAGS & LDFLAGS harmonizer.
-
- * builds/unix/configure.raw: Some important options that
- included in CFLAGS but not in LDFLAGS are copied to
- LDFLAGS, but the last option in CFLAGS was not checked.
-
-2011-01-13 Werner Lemberg <wl@gnu.org>
-
- [raster] Add undocumented drop-out rule to the other bbox side also.
-
- * src/raster/ftraster.c (Vertical_Sweep_Drop,
- Horizontal_Sweep_Drop): Implement it.
-
-2011-01-13 Werner Lemberg <wl@gnu.org>
-
- [raster] Reduce jitter value.
-
- This catches a rendering problem with glyph `x' from Tahoma at
- 10ppem. It seems that the increase of the precision in the change
- from 2009-06-11 makes a larger jitter value unnecessary.
-
- * src/raster/ftraster.c (Set_High_Precision): Implement it.
-
-2011-01-13 Werner Lemberg <wl@gnu.org>
-
- [raster] Handle drop-outs at glyph borders according to Microsoft.
-
- If a drop-out rule would switch on a pixel outside of the glyph's
- bounding box, use the right (or top) pixel instead. This is an
- undocumented feature, but some fonts like `Helvetica Neue LT Com 65
- Medium' heavily rely on it.
-
- Thanks to Greg Hitchcock who explained this behaviour.
-
- * src/raster/ftraster.c (Vertical_Sweep_Drop,
- Horizontal_Sweep_Drop): Implement it.
-
-2011-01-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cache] Fix Savannah bug #31923, patch drafted by Harsha.
-
- When a node comparator changes the cached nodes during the
- search of a node matching with queried properties, the
- pointers obtained before the function should be updated to
- prevent the dereference to freed or reallocated nodes.
- To minimize the rescan of the linked list, the update is
- executed when the comparator notifies the change of cached
- nodes. This change depends previous change:
- 38b272ffbbdaae276d636aec4ef84af407d16181
-
- * src/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP): Rescan the
- top node if the cached nodes are changed.
- * src/cache/ftccache.c (FTC_Cache_Lookup): Ditto.
-
-2011-01-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cache] Notice if a cache query induced the node list change.
-
- Some node comparators (comparing the cache node contents and the
- properties specified by the query) can flush the cache node to
- prevent the cache inflation. The change may invalidate the pointers
- to the node obtained before the node comparison, so it should be
- noticed to the caller. The problem caused by the cache node
- changing is reported by Harsha, see Savannah bug #31923.
-
- * src/cache/ftccache.h (FTC_Node_CompareFunc): Add new argument
- `FT_Bool* list_changed' to indicate the change of the cached nodes
- to the caller.
- (FTC_CACHE_LOOKUP_CMP): Watch the change of the cached nodes by
- `_list_changed'.
- (FTC_CACHE_TRYLOOP_END): Take new macro argument `_list_changed'
- and update it when `FTC_Manager_FlushN' flushes any nodes.
-
- * src/cache/ftccback.h (ftc_snode_compare): Updated to fit with new
- FTC_Node_CompareFunc type.
- (ftc_gnode_compare): Ditto.
-
- * src/cache/ftcbasic.c: Include FT_INTERNAL_OBJECTS_H to use
- TRUE/FALSE macros.
- (ftc_basic_gnode_compare_faceid): New argument `FT_Bool*
- list_changed' to indicate the change of the cache nodes (anyway, it
- is always FALSE).
-
- * src/cache/ftccmap.c: Include FT_INTERNAL_OBJECTS_H to use
- TRUE/FALSE macros.
- (ftc_cmap_node_compare): New argument `FT_Bool* list_changed' to
- indicate the change of the cache nodes (anyway, it is always FALSE).
- (ftc_cmap_node_remove_faceid): Ditto.
-
- * src/cache/ftccache.c (FTC_Cache_NewNode): Pass a NULL pointer to
- `FTC_CACHE_TRYLOOP_END', because the result is not needed.
- (FTC_Cache_Lookup): Watch the change of the cache nodes by
- `list_changed'.
- (FTC_Cache_RemoveFaceID): Ditto.
-
- * src/cache/ftcglyph.c: Include FT_INTERNAL_OBJECTS_H to use
- TRUE/FALSE macros.
- (ftc_gnode_compare): New argument `FT_Bool* list_changed' to
- indicate the change of the cache nodes (anyway, it is always FALSE).
- (FTC_GNode_Compare): New argument `FT_Bool* list_changed' to be
- passed to `ftc_gnode_compare'.
- * src/cache/ftcglyph.h (FTC_GNode_Compare): Ditto.
-
- * src/cache/ftcsbits.c (ftc_snode_compare): New argument `FT_Bool*
- list_changed' to indicate the change of the cache nodes, anyway. It
- is updated by `FTC_CACHE_TRYLOOP'.
- (FTC_SNode_Compare): New argument `FT_Bool* list_changed' to be
- passed to `ftc_snode_compare'.
- * src/cache/ftcsbits.h (FTC_SNode_Compare): Ditto.
-
-2011-01-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cache] Fit `FTC_GNode_Compare' to `FTC_Node_CompareFunc'.
-
- * src/cache/ftcglyph.h (FTC_GNode_Compare): Add the 3rd
- argument `FTC_Cache cache' to fit FTC_Node_CompareFunc
- prototype.
- * src/cache/ftcglyph.c (FTC_GNode_Compare): Ditto. Anyway,
- `cache' is not used by its child `ftc_gnode_compare'.
-
-2011-01-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cache] Deduplicate the code to get the top node by a hash.
-
- There are several duplicated code fragments getting the top node
- from a cache by a given hash, like:
-
- idx = hash & cache->mask;
- if ( idx < cache->p )
- idx = hash & ( cache->mask * 2 + 1 );
- pnode = cache->buckets + idx;
-
- To remove duplication, a cpp-macro to do same work
- `FTC_NODE__TOP_FOR_HASH' is introduced. For non-inlined
- configuration, non-`ftc_get_top_node_for_hash' is also introduced.
-
- * src/cache/ftccache.h (FTC_NODE__TOP_FOR_HASH): Declare
- and implement inlined version.
- (FTC_CACHE_LOOKUP_CMP): Use `FTC_NODE__TOP_FOR_HASH'.
- * src/cache/ftccache.c (ftc_get_top_node_for_hash): Non-inlined
- version.
- (ftc_node_hash_unlink): Use `FTC_NODE__TOP_FOR_HASH'.
- (ftc_node_hash_link): Ditto.
- (FTC_Cache_Lookup): Ditto.
-
-2011-01-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cache] inline-specific functions are conditionalized.
-
- * src/cache/ftcglyph.c (FTC_GNode_Compare): Conditionalized for
- inlined configuration. This function is a thin wrapper of
- `ftc_gnode_compare' for inlined `FTC_CACHE_LOOKUP_CMP' (see
- `nodecmp' argument). Under non-inlined configuration,
- `ftc_gnode_compare' is invoked by `FTC_Cache_Lookup', via
- `FTC_Cache->clazz.node_compare'.
-
- * src/cache/ftcglyph.h (FTC_GNode_Compare): Ditto.
- * src/cache/ftcsbits.c (FTC_SNode_Compare): Ditto, for
- `ftc_snode_compare'.
- * src/cache/ftcsbits.h (FTC_SNode_Compare): Ditto.
-
-2011-01-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cache] Correct a type mismatch under non-inlined config.
-
- * src/cache/ftcglyph.h (FTC_GCACHE_LOOKUP_CMP): `FTC_GCache_Lookup'
- takes the node via a pointer `FTC_Node*', differently from cpp-macro
- `FTC_CACHE_LOOKUP_CMP'.
-
-2011-01-06 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Update Jamfile to include Bzip2 support.
-
- * Jamfile: Include src/bzip2 to project.
- Comments for lzw, gzip, bzip2 are changed to clarify that
- they are for compressed PCF fonts, not others.
- (e.g. compressed BDF fonts are not supported yet)
-
-2011-01-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Update Symbian project files to include Bzip2 support.
-
- Currently, it provides `FT_Stream_OpenBzip2' that returns
- unimplemented error always, to prevent unresolved symbol
- error for the applications designed for Unix systems.
-
- * builds/symbian/bld.inf: Include ftbzip2.h.
- * builds/symbian/freetype.mmp: Include ftbzip2.c.
-
-2011-01-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Update classic MacOS makefiles to include Bzip2 support.
-
- Currently, it provides `FT_Stream_OpenBzip2' that returns
- unimplemented error always, to prevent unresolved symbol
- error for the applications designed for Unix systems.
-
- * builds/mac/FreeType.m68k_cfm.make.txt: Include ftbzip2.c.o.
- * builds/mac/FreeType.m68k_far.make.txt: Ditto.
- * builds/mac/FreeType.ppc_carbon.make.txt: Include ftbzip2.c.x.
- * builds/mac/FreeType.ppc_classic.make.txt: Ditto.
-
-2011-01-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Update Amiga makefiles to include Bzip2 support.
-
- Currently, it provides `FT_Stream_OpenBzip2' that returns
- unimplemented error always, to prevent unresolved symbol
- error for the applications designed for Unix systems.
-
- * builds/amiga/makefile: Include bzip2.ppc.o built from ftbzip2.c.
- * builds/amiga/makefile.os4: Include bzip2.o built from ftbzip2.c.
- * builds/amiga/smakefile: Ditto.
-
-2011-01-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Update pkg-config tools to reflect Bzip2 support.
-
- * builds/unix/freetype-config.in: Include `-lbz2' to
- --libs output, if built with Bzip2 support.
- * builds/unix/freetype2.in: Ditto.
-
-2011-01-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * builds/unix/configure.raw: Remove `SYSTEM_BZ2LIB' macro.
-
- SYSTEM_ZLIB is used to switch the builtin zlib source
- or system zlib source out of FreeType2. But ftbzip2
- module has no builtin bzip2 library and always requires
- system bzip2 library. Thus SYSTEM_BZ2LIB is always yes,
- it is not used.
-
-2011-01-03 Werner Lemberg <wl@gnu.org>
-
- */rules.mk: Handle `*pic.c' files.
-
-2010-12-31 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cfftypes.h (CFF_MAX_CID_FONTS): Increase to 64.
- Problem reported by Tom Bishop <wenlin@wenlin.com>.
-
-2010-12-31 Werner Lemberg <wl@gnu.org>
-
- Improve bzip2 support.
-
- * include/freetype/ftmoderr.h: Add bzip2.
-
- * docs/INSTALL.ANY, docs/CHANGES: Updated.
-
- * src/pcf/README: Updated.
- * include/freetype/internal/pcftypes.h: Obsolete, removed.
-
-2010-12-31 Joel Klinghed <the_jk@yahoo.com>
-
- Add bzip2 compression support to handle *.pcf.bz2 files.
-
- * builds/unix/configure.raw: Test for libbz2 library.
-
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (FT_CONFIG_OPTION_USE_BZIP2): Define.
- * include/freetype/config/ftheader.h (FT_BZIP2_H): Define.
-
- * include/freetype/ftbzip2.h: New file.
-
- * src/bzip2/*: New files.
-
- * src/pcf/pcf.h: s/gzip_/comp_/.
- * src/pcf/pcfdrivr.c: Include FT_BZIP2_H.
- s/gzip_/comp_/.
- (PCF_Face_Init): Handle bzip2 compressed files.
-
- * docs/formats.txt, modules.cfg: Updated.
-
-2010-12-25 Harsha <mm.harsha@gmail.com>
-
- Apply Savannah patch #7422.
-
- If we encounter a space in a string then the sbit buffer is NULL,
- height and width are 0s. So the check in ftc_snode_compare will
- always pass for spaces (comparison with 255). Here the comments
- above the condition are proper but the implementation is not. When
- we create an snode I think it is the proper way to initialize the
- width to 255 and then put a check for being equal to 255 in snode
- compare function.
-
- * src/cache/ftcsbits.c (FTC_SNode_New): Initialize sbit widths with
- value 255.
- (ftc_snode_compare): Fix condition.
-
-2010-12-13 Werner Lemberg <wl@gnu.org>
-
- Fix parameter handling of `FT_Set_Renderer'.
- Reported by Kirill Tishin <siege@bk.ru>.
-
- * src/base/ftobjs.c (FT_Set_Renderer): Increment `parameters'.
-
-2010-12-09 Werner Lemberg <wl@gnu.org>
-
- [cff] Allow `hlineto' and `vlineto' without arguments.
-
- We simply ignore such instructions. This is invalid, but it doesn't
- harm; and indeed, there exist such subsetted fonts in PDFs.
-
- Reported by Albert Astals Cid <aacid@kde.org>.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings)
- [cff_op_hlineto]: Ignore instruction if there aren't any arguments
- on the stack.
-
-2010-11-28 Werner Lemberg <wl@gnu.org>
-
- * Version 2.4.4 released.
- =========================
-
-
- Tag sources with `VER-2-4-4'.
-
- * docs/CHANGES: Updated.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.4.4
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.4.3/2.4.4/, s/243/244/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 4.
-
- * builds/unix/configure.raw (version_info): Set to 12:2:6.
-
-2010-11-28 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [ftsmooth]: Minor code simplification.
-
- * src/smooth/ftgrays (gray_render_cubic): Do only one comparison
- instead of two.
-
-2010-11-26 Johnson Y. Yan <yinsen_yan@foxitsoftware.com>
-
- [truetype] Better multi-threading support.
-
- * src/truetype/ttinterp.c (TT_Load_Context): Reset glyph zone
- references.
-
-2010-11-23 John Tytgat <John.Tytgat@esko.com>
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstring): Expand
- start_point, check_points, add_point, add_point1, close_contour
- macros.
- Remove add_contour macro.
- Return error code from t1_builder_start_point and
- t1_builder_check_points when there was one (instead of returning 0).
-
-2010-11-22 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [truetype] Identify the tricky fonts by cvt/fpgm/prep checksums.
- Some Latin TrueType fonts are still expected to be unhinted.
- Fix Savannah bug #31645.
-
- * src/truetype/ttobjs.c (tt_check_trickyness): Divided to...
- (tt_check_trickyness_family): this checking family name, and
- (tt_check_trickyness_sfnt_ids): this checking cvt/fpgm/prep.
- (tt_get_sfnt_checksum): Function to retrieve the sfnt checksum
- for specified subtable even if cleared by lazy PDF generators.
- (tt_synth_sfnt_checksum): Function to calculate the checksum.
-
-2010-11-18 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix `loca' handling for inconsistent number of glyphs.
- Reported by Johnson Y. Yan <yinsen_yan@foxitsoftware.com>.
-
- * src/truetype/ttpload.c (tt_face_load_loca): While sanitizing,
- handle case where `loca' is the last table in the font.
-
-2010-11-18 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Ignore all errors while loading `OS/2' table.
- Suggested by Johnson Y. Yan <yinsen_yan@foxitsoftware.com>.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Do it.
-
-2010-11-18 Johnson Y. Yan <yinsen_yan@foxitsoftware.com>
-
- [type1] Fix matrix normalization.
-
- * src/type1/t1load.c (parse_font_matrix): Handle sign of scaling
- factor.
-
-2010-11-18 Werner Lemberg <wl@gnu.org>
-
- [type1] Improve guard against malformed data.
- Based on a patch submitted by Johnson Y. Yan
- <yinsen_yan@foxitsoftware.com>
-
- * src/type1/t1load.c (read_binary_data): Check `size'.
-
-2010-11-17 Werner Lemberg <wl@gnu.org>
-
- [sfnt] While tracing, output table checksums also.
-
- * src/sfnt/ttload.c (tt_face_load_font_dir): Do it.
-
-2010-11-04 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [UVS] Fix `find_variant_selector_charmap', Savannah bug #31545.
-
- Since 2010-07-04, `find_variant_selector_charmap' returns
- the first cmap subtable always under rogue-compatible
- configuration, it causes NULL pointer dereference and
- make UVS-related functions crashed.
-
- * src/base/ftobjs.c (Fix find_variant_selector_charmap):
- Returns UVS cmap correctly.
-
-2010-11-01 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [ftsmooth] Improve rendering.
-
- * src/smooth/ftsmooth.c (gray_render_conic): Since version 2.4.3,
- cubic deviations have been estimated _after_ UPSCALE, whereas
- conic ones have been evaluated _before_ UPSCALE, which produces
- inferior rendering results. Fix this.
- Partially undo change from 2010-10-15 by using ONE_PIXEL/4; this has
- been tested with demo images sent to the mailing list. See
-
- http://lists.gnu.org/archive/html/freetype-devel/2010-10/msg00055.html
-
- and later mails in this thread.
-
-2010-10-28 Werner Lemberg <wl@gnu.org>
-
- [ftraster] Minor fixes.
-
- Reported by Tom Bishop <wenlin@wenlin.com>.
-
- * src/raster/ftraster.c (ULong): Remove unused typedef.
- (TWorker): Remove unused variable `precision_mask'.
-
-2010-10-28 Werner Lemberg <wl@gnu.org>
-
- [ftraster] Fix rendering.
-
- Problem reported by Tom Bishop <wenlin@wenlin.com>; see
- thread starting with
-
- http://lists.gnu.org/archive/html/freetype/2010-10/msg00049.html
-
- * src/raster/ftraster.c (Line_Up): Replace FMulDiv with SMulDiv
- since the involved multiplication exceeds 32 bits.
-
-2010-10-25 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Revert a change of `_idx' type in `FTC_CACHE_LOOKUP_CMP'.
-
- * src/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP): Revert
- the type of `_idx' from FT_PtrDist (by previous change)
- to original FT_UFast, to match with FT_CacheRec.
-
-2010-10-24 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cache] Change the hash types to FT_PtrDist.
-
- On LLP64 platforms (e.g. Win64), FT_ULong (32-bit)
- variables are inappropriate to calculate hash values
- from the memory address (64-bit). The hash variables
- are extended from FT_ULong to FT_PtrDist and new
- hashing macro functions are introduced. The hash
- values on 16-bit memory platforms are changed, but
- ILP32 and LP64 are not changed. The hash value in
- the cache subsystem is not reverted to the memory
- address, so using signed type FT_PtrDist is safe.
-
- * src/cache/ftccache.h (_FTC_FACE_ID_HASH): New hash
- function to replace `FTC_FACE_ID_HASH' for portability.
- * src/cache/ftcmanag.h (FTC_SCALER_HASH): Replace
- `FTC_FACE_ID_HASH' by `_FTC_FACE_ID_HASH'.
- * src/cache/ftccmap.c (FTC_CMAP_HASH): Ditto.
-
- * src/cache/ftccache.h (FTC_NodeRec): The type of the
- member `hash' is changed from FT_UInt32 to FT_PtrDist.
-
- * src/cache/ftccache.h (FTC_Cache_Lookup): The type of the
- argument `hash' is changed from FT_UInt32 to FT_PtrDist.
- (FTC_Cache_NewNode): Ditto.
- * src/cache/ftccache.c (ftc_cache_add): Ditto.
- (FTC_Cache_Lookup): Ditto. (FTC_Cache_NewNode): Ditto.
- * src/cache/ftcglyph.h (FTC_GCache_Lookup): Ditto.
- * src/cache/ftcglyph.c (FTC_GCache_Lookup): Ditto.
-
- * src/cache/ftcbasic.c (FTC_ImageCache_Lookup): The type
- of the internal variable `hash' is changed to FT_PtrDist
- from FT_UInt32. (FTC_ImageCache_LookupScaler): Ditto.
- (FTC_SBitCache_Lookup): Ditto.
- (FTC_SBitCache_LookupScaler): Ditto.
- * src/cache/ftccmap.c (FTC_CMapCache_Lookup): Ditto.
- * src/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP): Ditto.
- Also the type of the internal variable `_idx' is changed to
- FT_PtrDist from FT_UFast for better pointer calculation.
-
-2010-10-24 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cache] Hide internal macros incompatible with LLP64.
-
- `FT_POINTER_TO_ULONG', `FTC_FACE_ID_HASH', and
- `FTC_IMAGE_TYPE_HASH' are enclosed by
- FT_CONFIG_OPTION_OLD_INTERNALS and hidden from
- normal clients.
-
- For the history of these macros, see the investigation:
- http://lists.gnu.org/archive/html/freetype/2010-10/msg00022.html
-
-2010-10-24 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Change the type of `FT_MEM_VAL' from FT_ULong to FT_PtrDist.
-
- On LLP64 platforms (e.g. Win64), unsigned long (32-bit)
- cannot cover the memory address (64-bit). `FT_MEM_VAL' is
- used for hashing only and not dereferred, so using signed
- type FT_PtrDist is safe.
-
- * src/base/ftdbgmem.c (FT_MEM_VAL): Change the type of the
- return value from FT_ULong to FT_PtrDist.
- (ft_mem_table_resize): The type of hash is changed to
- FT_PtrDist. (ft_mem_table_get_nodep): Ditto.
-
-2010-10-24 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Replace "%lx" for memory address by "%p", LLP64 platforms.
-
- On LLP64 platforms (e.g. Win64), long (32-bit) cannot cover
- the memory address (64-bit). Also the casts from the pointer
- type to long int should be removed to preserve the address
- correctly.
-
- * src/raster/ftraster.c (New_Profile): Replace "%lx" by "%p".
- (End_Profile) Ditto.
- * src/truetype/ttinterp.c (Init_Context): Ditto.
-
-2010-10-15 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Fix thinko in spline flattening.
-
- FT_MAX_CURVE_DEVIATION is dependent on the value of ONE_PIXEL.
-
- * src/smooth/ftgrays.c (FT_MAX_CURVE_DEVIATION): Remove it and
- replace it everywhere with ONE_PIXEL/8.
-
-2010-10-13 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [raccess] Skip unrequired resource access rules by Darwin VFS.
-
- When a resource fork access rule by Darwin VFS could open the
- resource fork but no font is found in it, the rest of rules
- by Darwin VFS are skipped. It reduces the warnings of the
- deprecated resource fork access method by recent Darwin kernel.
- Fix MacPorts ticket #18859:
- http://trac.macports.org/ticket/18859
-
- * src/base/ftobjs.c (load_face_in_embedded_rfork):
- When `FT_Stream_New' returns FT_Err_Cannot_Open_Stream, it
- means that the file is possible to be `fopen'-ed but zero-sized.
- Also there is a case that the resource fork is not zero-sized,
- but no supported font exists in it. If a rule by Darwin VFS
- falls into such cases, there is no need to try other Darwin VFS
- rules anymore. Such cases are marked by vfs_rfork_has_no_font.
- If it is TRUE, the Darwin VFS rules are skipped.
-
-2010-10-13 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [raccess] Grouping resource access rules based on Darwin VFS.
-
- MacOS X/Darwin kernel supports a few tricky methods to access
- a resource fork via ANSI C or POSIX interface. Current resource
- fork accessor tries all possible methods to support all kernels.
- But if a method could open a resource fork but no font is found,
- there is no need to try other methods older than tested method.
- To determine whether the rule index is for Darwin VFS, a local
- function `ftrfork.c::raccess_rule_by_darwin_vfs' is introduced.
- To use this function in ftobjs.c etc but it should be inlined,
- it is exposed by ftbase.h.
-
- * src/base/ftrfork.c (FT_RFork_Rule): New enum type to identify
- the rules to access the resource fork.
- (raccess_guess_rec): New structure to bind the rule function and
- rule enum type.
- (FT_Raccess_Guess): The list of the rule functions is replaced by
- (raccess_guess_table): This. This is exposed to be used by other
- intra module functions.
- (raccess_rule_by_darwin_vfs): A function to return a boolean
- if the rule specified by the rule index is based on Darwin VFS.
-
-2010-10-13 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Prevent to open a FT_Stream for zero-sized file on non-Unix.
-
- builds/unix/ftsystem.c prevents to open an useless stream from
- zero-sized file and returns FT_Err_Cannot_Open_Stream, but the
- stream drivers for ANSI C, Amiga and VMS return useless streams.
- For cross-platform consistency, all stream drivers should act
- same.
-
- * src/base/ftsystem.c (FT_Stream_Open): If the size of the opened
- file is zero, FT_Err_Cannot_Open_Stream is returned.
- * builds/amiga/src/base/ftsystem.c (FT_Stream_Open): Ditto.
- * src/vms/ftsystem.c (FT_Stream_Open): Ditto.
-
-2010-10-12 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix Savannah bug #31310.
-
- * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Protect against
- invalid `runcnt' values.
-
-2010-10-08 Chris Liddell <chris.liddell@artifex.com>
-
- [sfnt] Fix Savannah bug #31275.
-
- * src/sfnt/ttpost.c: Include FT_INTERNAL_DEBUG_H.
-
-2010-10-06 Werner Lemberg <wl@gnu.org>
-
- [truetype] Improve error handling of `SHZ' bytecode instruction.
- Problem reported by Chris Evans <scarybeasts@gmail.com>.
-
- * src/truetype/ttinterp.c (Ins_SHZ): Check `last_point'.
-
-2010-10-05 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #31253.
- Patch submitted by an anonymous reporter.
-
- * configure: Use `awk' instead of `sed' to manipulate output of `ls
- -id'.
-
-2010-10-03 Werner Lemberg <wl@gnu.org>
-
- * Version 2.4.3 released.
- =========================
-
-
- Tag sources with `VER-2-4-3'.
-
- * docs/CHANGES: Updated.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.4.3
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.4.2/2.4.3/, s/242/243/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 3.
-
- * builds/unix/configure.raw (version_info): Set to 12:1:6.
-
-2010-10-03 Werner Lemberg <wl@gnu.org>
-
- Avoid `configure' issues with symbolic links.
- Based on a patch from Alexander Stohr <Alexander.Stohr@gmx.de>.
-
- * configure: Compare directories using `ls -id'.
- Check existence of `reference' subdirectory before creating it.
-
-2010-10-02 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #31088 (sort of).
-
- * src/sfnt/ttload.c (tt_face_load_maxp): Always allocate at least 64
- function entries.
-
-2010-10-02 Werner Lemberg <wl@gnu.org>
-
- [smooth] Fix splitting of cubics for negative values.
-
- Reported by Róbert Márki <gsmiko@gmail.com>; see
- http://lists.gnu.org/archive/html/freetype/2010-09/msg00019.html.
-
- * src/smooth/ftgrays.c (gray_render_cubic): Fix thinko.
-
-2010-10-01 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [truetype] Fix Savannah bug #31040.
-
- * src/truetype/ttinterp.c (free_buffer_in_size): Remove.
- (TT_RunIns): Updated.
-
-2010-09-20 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [sfnt] Make error message filling NULL names less verbose.
-
- * src/sfnt/ttpost.c (load_format_20): Showing 1 summary message
- when we fill `post' names by NULL, instead of per-entry message.
-
-2010-09-20 Graham Asher <graham.asher@btinternet.com>
- David Bevan <david.bevan@pb.com>
-
- [smooth] Fix and improve spline flattening.
-
- This fixes the flattening of cubic, S-shaped curves and speeds up
- the handling of both the conic and cubic arcs.
-
- See the discussions on the freetype-devel mailing list in late
- August and September 2010 for details.
-
- * src/smooth/ftgrays.c (FT_MAX_CURVE_DEVIATION): New macro.
- (TWorker): Remove `conic_level' and `cubic_level' elements.
- (gray_render_conic): Simplify algorithm.
- (gray_render_cubic): New algorithm; details are given in the code
- comments.
- (gray_convert_glyph): Remove heuristics.
-
-2010-09-19 Werner Lemberg <wl@gnu.org>
-
- Minor fixes.
-
- * src/cff/cffload.c (cff_charset_compute_cids): `charset->sids[i]'
- is `FT_UShort'.
- (cff_index_access_element): Don't use additions in comparison.
- * src/sfnt/ttpost.c (load_format_20): Make `post_limit' of type
- `FT_Long'.
- Don't use additions in comparison.
- Improve tracing messages.
- (load_format_25, load_post_names): Make `post_limit' of type
- `FT_Long'.
-
-2010-09-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cff] Truncate the element length at the end of the stream.
- See Savannah bug #30975.
-
- * src/cff/cffload.c (cff_index_access_element): `off2', the offset
- to the next element is truncated at the end of the stream to prevent
- invalid I/O. As `off1', the offset to the requested element has
- been checked by `FT_STREAM_SEEK', `off2' should be checked
- similarly.
-
-2010-09-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cff] Ignore CID > 0xFFFFU.
- See Savannah bug #30975.
-
- * src/cff/cffload.c (cff_charset_compute_cids): Ignore CID if
- greater than 0xFFFFU. CFF font spec does not mention maximum CID in
- the font, but PostScript and PDF spec define that maximum CID is
- 0xFFFFU.
-
-2010-09-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cff] Make trace message in` cff_charset_load' verbose.
- See Savannah bug #30975.
-
- * src/cff/cffload.c (cff_charset_load): Report the original `nleft'
- and truncated `nleft'.
-
-2010-09-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cff] Correct `max_cid' from CID array length to max CID.
- See Savannah bug #30975.
-
- * src/cff/cffload.c (cff_charset_compute_cids): Don't increment
- max_cid after detecting max CID. The array CFF_Charset->cids is
- allocated by max_cid + 1.
- (cff_charset_cid_to_gindex): Permit CID is less than or equal to
- CFF_Charset->max_cid.
- * src/cff/cffobjs.c (cff_face_init): FT_Face->num_glyphs is
- calculated as CFF_Charset->max_cid + 1.
-
-2010-09-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [truetype] Sanitize the broken offsets in `loca'.
- See Savannah bug #31040.
-
- * src/truetype/ttpload.c (tt_face_get_location): If `pos1', the
- offset to the requested entry in `glyf' exceeds the end of the
- table, return offset=0, length=0. If `pos2', the offset to the next
- entry in `glyf' exceeds the end of the table, truncate the entry
- length at the end of `glyf' table.
-
-2010-09-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [sfnt] Prevent overrunning in `post' table parser.
- See Savannah bug #31040.
-
- * src/sfnt/ttpost.c (load_post_names): Get the length of `post'
- table and pass the limit of `post' table to `load_format_20' and
- `load_format_25'.
- (load_format_20): Stop the parsing when we reached at the limit of
- `post' table. If more glyph names are required, they are filled by
- NULL names.
-
-2010-09-17 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [truetype] Don't duplicate size->twilight structure to be freed.
- See Savannah bug #31040 for detail.
-
- * src/truetype/ttinterp.c (free_buffer_in_size): Don't duplicate
- FT_GlyphZoneRec size->twilight to be freed. If duplicated,
- `FT_FREE' erases the duplicated pointers only and leave original
- pointers. They can cause the double-free crash when the burst
- errors occur in TrueType interpreter and `free_buffer_in_size' is
- invoked repeatedly.
-
-2010-09-15 Werner Lemberg <wl@gnu.org>
-
- Make bytecode debugging with FontForge work again.
-
- * src/truetype/ttinterp.c (TT_RunIns): Don't call
- `free_buffer_in_size' in case of error if a debugger is active.
-
-2010-09-14 Werner Lemberg <wl@gnu.org>
-
- Improve tracing messages.
-
- * src/truetype/ttinterp.c (TT_RunIns): Improve wording of tracing
- message.
- * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): Add
- tracing message.
- * src/truetype/ttgload.c (tt_loader_init): Add tracing message.
- * src/cache/ftcsbits.c (ftc_snode_load): Emit tracing message if
- glyph doesn't fit into a small bitmap container.
-
-2010-09-13 Werner Lemberg <wl@gnu.org>
-
- Fix minor issues reported by <muktha.narayan@wipro.com>.
-
- * src/autofit/aflatin.c (af_latin_compute_stem_width): Remove
- redundant conditional check.
- * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Ditto.
- * src/cff/cffload.c (cff_encoding_load): Remove conditional check
- which always evaluates to `true'.
- * src/pshinter/pshalgo.c (ps_glyph_interpolate_strong_points):
- Ditto.
- * src/truetype/ttinterp.c (Ins_IUP): Ditto.
- * src/cid/cidgload.c (cid_slot_load_glyph): Don't check for NULL if
- value is already dereferenced.
- * src/winfonts/winfnt.c (FNT_Load_Glyph): Fix check of `face'.
-
-2010-08-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Ignore the environmental setting of LIBTOOL.
- Patch is suggested by Adrian Bunk, to prevent unexpected
- reflection of environmental LIBTOOL. See:
- http://savannah.nongnu.org/patch/?7290
-
- * builds/unix/unix-cc.in: LIBTOOL is unconditionally set to
- $(FT_LIBTOOL_DIR)/libtool. FT_LIBTOOL_DIR is set to $(BUILD_DIR)
- by default.
- * configure: When configured for the building out of source tee,
- FT_LIBTOOL_DIR is set to $(OBJ_DIR).
-
-2010-08-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [truetype] Decrease the trace level catching the interpreter error.
-
- * src/truetype/ttinterp.c (TT_RunIns): Decrease the trace level
- showing the error when the interpreter returns with an error,
- from` FT_TRACE7' to `FT_TRACE1'.
-
-2010-08-30 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [truetype] Prevent bytecode reuse after the interpretation error.
-
- * src/truetype/ttinterp.c (free_buffer_in_size): New function to
- free the buffer allocated during the interpretation of this glyph.
- (TT_RunIns): Unset FT_Face->size->{cvt_ready,bytecode_ready} if
- an error occurs in the bytecode interpretation. The interpretation
- of invalid bytecode may break the function definitions and referring
- them in later interpretation is danger. By unsetting these flags,
- `fpgm' and `prep' tables are executed again in next interpretation.
-
- This fixes Savannah bug #30798, reported by Robert Święcki.
-
-2010-08-29 Werner Lemberg <wl@gnu.org>
-
- [ftraster] Pacify compiler.
-
- * src/raster/ftraster.c (ft_black_new) [_STANDALONE_]: `memory' is
- not used.
-
-2010-08-29 Werner Lemberg <wl@gnu.org>
-
- [cff] Allow SIDs >= 65000.
-
- * src/cff/cffload.c (cff_charset_load): Fix change from 2009-03-20:
- The threshold for SIDs is not applicable here. I misinterpreted the
- `SID values 65000 and above are available for implementation use'
- sentence in the CFF specification.
-
- Problem reported by Ivan NinÄić <inincic@pdftron.com>.
-
-2010-08-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Force hinting when the font lacks its familyname.
-
- In Type42 or Type11 font embedded in PostScript & PDF, TrueType sfnt
- stream may lack `name' table because they are not required. Hinting
- for nameless fonts is safer for PDFs including embedded Chinese
- fonts. Written by David Bevan, see:
-
- http://lists.gnu.org/archive/html/freetype-devel/2010-08/msg00021.html
- http://lists.freedesktop.org/archives/poppler/2010-August/006310.html
-
- * src/truetype/ttobjs.c (tt_check_trickyness): If a NULL pointer by
- nameless font is given, TRUE is returned to enable hinting.
-
-2010-08-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Register yet another tricky TrueType font.
-
- * src/truetype/ttobjs.c (tt_check_trickyness): Add `HuaTianKaiTi?',
- a Kaishu typeface paired with `HuaTianSongTi?' by Huatian
- Information Industry.
-
-2010-08-17 Teijo Kinnunen <Teijo.Kinnunen@nuance.com>
-
- [cache] Fix Savannah bug #30788.
-
- * src/cache/ftccache.c (FTC_Cache_Clear): Check `cache->buckets' for
- NULL too.
-
-2010-08-10 Werner Lemberg <wl@gnu.org>
-
- Try to fix Savannah bug #30717 (and probably #30719 too).
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Add another
- overflow test for `width' and `height'.
-
-2010-08-06 Werner Lemberg <wl@gnu.org>
-
- * Version 2.4.2 released.
- =========================
-
-
- Tag sources with `VER-2-4-2'.
-
- * docs/CHANGES: Updated.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.4.2
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.4.1/2.4.2/, s/241/242/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 2.
-
- * builds/unix/configure.raw (version_info): Set to 12:0:6.
-
-2010-08-06 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix Savannah bug #30648.
-
- * src/base/ftobjs.c (FT_Done_Library): Specify the order of font
- drivers during the face closing process. Type42 faces should be
- closed before TrueType faces, because a Type42 face refers to
- another internal TrueType face which is created from sfnt[] array on
- the memory.
-
-2010-08-06 Yuriy Kaminskiy <yumkam@mail.ru>
-
- [raster] Fix valgrind warning.
-
- * src/raster/ftraster.c (Decompose_Curve) <default>: Access point[0]
- only if we don't hit `limit'.
-
-2010-08-06 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix Savannah bug #30658.
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Check that the total
- length of collected POST segments does not overrun the allocated
- buffer.
-
-2010-08-06 Yuriy Kaminskiy <yumkam@mail.ru>
-
- Fix conditional usage of FT_MulFix_i386.
- With -ansi flag, gcc does not define `i386', only `__i386__'.
-
- * include/freetype/config/ftconfig.h, builds/unix/ftconfig.in:
- s/i386/__i386__/.
-
-2010-08-05 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix Savannah bug #30657.
-
- * src/truetype/ttinterp.c (BOUNDSL): New macro.
- Change `BOUNDS' to `BOUNDSL' where appropriate.
-
- * src/truetype/ttinterp.h (TT_ExecContextRec): Fix type of
- `cvtSize'.
-
-2010-08-05 Werner Lemberg <wl@gnu.org>
-
- [type42] Fix Savannah bug #30656.
-
- * src/type42/t42parse.c (t42_parse_sfnts): Protect against negative
- string_size.
- Fix comparison.
-
-2010-08-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cff] Don't use any values in decoder after parsing error.
-
- * src/cff/cffgload.c (cff_slot_load): Skip the evaluations
- of the values in decoder, if `cff_decoder_parse_charstrings'
- returns any error.
-
-2010-08-04 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #30644.
-
- * src/base/ftstream.c (FT_Stream_EnterFrame): Fix comparison.
-
-2010-08-04 Werner Lemberg <wl@gnu.org>
-
- `make devel' fails if FT_CONFIG_OPTION_OLD_INTERNALS is set.
-
- * devel/ftoption.h: Synchronize with
- include/freetype/config/ftoption.h.
-
-2010-08-04 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [cff] Improve stack overflow test.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings): Check stack
- after execution of operations too.
-
-2010-07-18 Werner Lemberg <wl@gnu.org>
-
- Add reference counters and to FT_Library and FT_Face objects.
-
- * include/freetype/freetype.h (FT_Reference_Face): New function.
- * include/freetype/ftmodapi.h (FT_Reference_Library): New function.
-
- * include/freetype/internal/ftobjs.h (FT_Face_InternalRec,
- FT_LibraryRec): New field `refcount'.
-
- * src/base/ftobjs.c (FT_Open_Face, FT_New_Library): Handle
- `refcount'.
- (FT_Reference_Face, FT_Reference_Library): Implement new functions.
- (FT_Done_Face, FT_Done_Library): Handle `refcount'.
-
- * docs/CHANGES: Updated.
-
-2010-07-18 Werner Lemberg <wl@gnu.org>
-
- * Version 2.4.1 released.
- =========================
-
-
- Tag sources with `VER-2-4-1'.
-
- * docs/CHANGES: Updated.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.4.1.
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.4.0/2.4.1/, s/240/241/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
-
- * builds/unix/configure.raw (version_info): Set to 11:1:5.
-
-2010-07-17 Werner Lemberg <wl@gnu.org>
-
- [cff] Final try to fix `hintmask' and `cntrmask' limit check.
-
- Problem reported by Tobias Wolf <towolf@gmail.com>.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings)
- <cff_op_hintmask>: Sigh. I'm apparently too silly to fix this
- correctly in less than three tries.
-
-2010-07-12 Werner Lemberg <wl@gnu.org>
-
- * Version 2.4.0 released.
- =========================
-
-
- Tag sources with `VER-2-4-0'.
-
- * docs/CHANGES: Updated.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.4.0.
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.3.12/2.4.0/, s/2312/240/.
-
- * include/freetype/freetype.h (FREETYPE_MINOR): Set to 4.
- (FREETYPE_PATCH): Set to 0.
-
- * builds/unix/configure.raw (version_info): Set to 11:0:5.
-
-2010-07-12 Werner Lemberg <wl@gnu.org>
-
- Remove C++ warnings.
-
- */*: Initialize pointers where necessary to make g++ happy.
-
-2010-07-12 malc <av1474@comtv.ru>
- Richard Henderson <rth@redhat.com>
-
- Fix type-punning issues with C++.
-
- * include/freetype/internal/ftmemory.h (FT_ASSIGNP) [__cplusplus]:
- Emulate a `typeof' operator with an inline template which uses
- `static_cast'.
-
-2010-07-11 Werner Lemberg <wl@gnu.org>
-
- Fix C++ compilation issue.
-
- * src/tools/apinames.c (names_dump) <OUTPUT_WATCOM_LBC>: Fix
- type of `dot' variable.
-
-2010-07-10 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix another case reported in Savannah bug #30373.
- Permit a face for Type1, Type42 and CFF without charmap,
- patch by Tor Andersson.
-
- * src/type1/t1objs.c (T1_Face_Init): Reset the error if it
- is FT_Err_No_Unicode_Glyph_Name.
- * src/type42/t42objs.c (T42_Face_Init): Ditto.
- * src/cff/cffobjs.c (cff_face_init): Ditto.
-
-2010-07-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Use defined macros to set {platform,encoding}_id.
-
- * src/bdf/bdfdrivr.c: Include ttnameid.h and use macros to
- set charmap.{platform,encoding}_id.
- * src/pcf/pcfdrivr.c: Ditto.
- * src/winfonts/winfnt.c: Ditto.
- * src/type1/t1objs.c: Ditto.
- * src/type42/t42objs.c: Ditto.
- * src/cff/cffobjs.c: Ditto.
- * src/pfr/pfrobjs.c: Ditto.
-
-2010-07-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix Savannah bug #30373.
- Too serious check of errors by `FT_CMap_New' since 2010-07-04
- is fixed. Reported by Tor Andersson.
-
- * include/freetype/fterrdef.h
- (PSnames_Err_No_Unicode_Glyph_Name): New error code to
- indicate the Unicode charmap synthesis failed because
- no Unicode glyph name is found.
-
- * src/psnames/psmodule.c (ps_unicodes_init): Return
- PSnames_Err_No_Unicode_Glyph_Name when no Unicode glyph name
- is found in the font.
- * src/cff/cffcmap.c (cff_cmap_unicode_init): Return
- CFF_Err_No_Unicode_Glyph_Name when no SID is available.
-
- * src/type1/t1objs.c (T1_Face_Init): Proceed if `FT_CMap_New'
- is failed by the lack of Unicode glyph name.
- * src/type42/t42objs.c (T42_Face_Init): Ditto.
- * src/cff/cffobjs.c (cff_face_init): Ditto.
-
-2010-07-09 Ken Sharp <ken.sharp@artifex.com>
-
- Make ftraster.c compile in stand-alone mode with MSVC compiler.
-
- * src/raster/ftmisc.h (FT_Int64) [_WIN32, _WIN64]: Fix typedef
- since there is no `inttypes.h' for MSVC.
-
-2010-07-08 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix Savannah bug #30361.
-
- * src/truetype/ttinterp.c (Ins_IUP): Fix bounds check.
-
-2010-07-06 Werner Lemberg <wl@gnu.org>
-
- Pacify compiler.
-
- * src/cff/cffload.c (cff_index_get_pointers): Initialize
- `new_bytes'.
-
-2010-07-05 Eugene A. Shatokhin <spectre@ispras.ru>
-
- Fix Savannah bug #27648.
-
- * src/base/ftobjs.c (ft_remove_renderer, FT_Add_Module): Call
- `raster_done' only if we have an outline glyph format.
-
-2010-07-05 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #30030.
-
- * builds/win32/*/freetype.vcproj: Add ftxf86.c.
-
-2010-07-05 Werner Lemberg <wl@gnu.org>
-
- [cff] Next try to fix `hintmask' and `cntrmask' limit check.
-
- Problem reported by malc <av1474@comtv.ru>.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings)
- <cff_op_hintmask>: It is possible that there is just a single byte
- after the `hintmask' or `cntrmask', e.g., a `return' instruction.
-
-2010-07-04 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Restrict the number of the charmaps in a rogue-compatible mode.
- Fix for Savannah bug #30059.
-
- * src/cache/ftccmap.c (FTC_CMapCache_Lookup): Replace `16' the
- minimum character code passed by a legacy rogue client by...
- * include/freetype/config/ftoption.h (FT_MAX_CHARMAP_CACHEABLE):
- This. It is undefined when FT_CONFIG_OPTION_OLD_INTERNALS is
- undefined (thus the rogue client compatibility is not required).
-
- * src/cff/cffobjs.c (cff_face_init): Abort the automatic
- selection or synthesis of Unicode cmap subtable when the charmap
- index exceeds FT_MAX_CHARMAP_CACHEABLE.
- * src/sfnt/ttcmap.c (tt_face_build_cmaps): Issue error message
- when the charmap index exceeds FT_MAX_CHARMAP_CACHEABLE.
-
- * src/base/ftobjs.c (find_unicode_charmap): When Unicode charmap
- is found after FT_MAX_CHARMAP_CACHEABLE, ignore it and search
- earlier one.
- (find_variant_selector_charmap): When UVS charmap is found after
- FT_MAX_CHARMAP_CACHEABLE, ignore it and search earlier one.
- (FT_Select_Charmap): When a charmap matching with requested
- encoding but after FT_MAX_CHARMAP_CACHEABLE, ignore and search
- earlier one.
- (FT_Set_Charmap): When a charmap matching with requested
- charmap but after FT_MAX_CHARMAP_CACHEABLE, ignore and search
- earlier one.
- (FT_Get_Charmap_Index): When a requested charmap is found
- after FT_MAX_CHARMAP_CACHEABLE, return the inverted charmap
- index.
-
-2010-07-04 Werner Lemberg <wl@gnu.org>
-
- TrueType hinting is no longer patented.
-
- * include/freetype/config/ftoption.h, devel/ftoption.h
- (TT_CONFIG_OPTION_BYTECODE_INTERPRETER): Define.
- (TT_CONFIG_OPTION_UNPATENTED_HINTING): Undefine.
-
- * docs/CHANGES, docs/INSTALL, include/freetype/freetype.h: Updated.
- * docs/TRUETYPE, docs/PATENTS: Removed.
-
-2010-07-04 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Check error value by `FT_CMap_New'.
-
- * src/cff/cffobjs.c (cff_face_init): Check error value by
- `FT_CMap_New'.
- * src/pfr/pfrobjs.c (pfr_face_init): Ditto.
- * src/type1/t1objs.c (T1_Face_Init): Ditto.
- * src/type42/t42objs.c (T42_Face_Init): Ditto.
-
-2010-07-03 Werner Lemberg <wl@gnu.org>
-
- Make ftgrays.c compile stand-alone again.
-
- * src/smooth/ftgrays.c [_STANDALONE_]: Include `stddef.h'.
- (FT_INT_MAX, FT_PtrDist)[_STANDALONE_]: Define.
-
-2010-07-02 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Additional fix for Savannah bug #30306.
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): If the type of the
- POST fragment is 0, the segment is completely ignored. The declared
- length of the segment is not cared at all. According to Adobe
- Technical Note 5040, type 0 segment is a comment only and should not
- be loaded for the interpreter. Reported by Robert Święcki.
-
-2010-07-01 Werner Lemberg <wl@gnu.org>
-
- [truetype] Protect against code range underflow.
-
- * src/truetype/ttinterp.c (DO_JROT, DO_JMPR, DO_JROF): Don't allow
- negative IP values.
-
-2010-07-01 Werner Lemberg <wl@gnu.org>
-
- [truetype] Add rudimentary tracing for bytecode instructions.
-
- * src/truetype/ttinterp.c (opcode_name) [FT_DEBUG_LEVEL_TRACE]: New
- array.
- (TT_RunIns): Trace opcodes.
-
-2010-06-30 Werner Lemberg <wl@gnu.org>
-
- [smooth] Fix Savannah bug #30263.
-
- * src/smooth/ftgrays.c (gray_render_span): Use cast to `unsigned
- int' to avoid integer overflow.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Use smaller
- threshold values for `width' and `height'. This is not directly
- related to the bug fix but makes sense anyway.
-
-2010-07-01 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Initial fix for Savannah bug #30306.
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Check `rlen', the
- length of fragment declared in the POST fragment header, and prevent
- an underflow in length calculation. Some fonts set the length to
- zero in spite of the existence of a following 16bit `type'.
- Reported by Robert Święcki.
-
-2010-07-01 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Additional fix for Savannah bug #30248 and #30249.
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Check the buffer size
- during gathering PFB fragments embedded in LaserWriter PS font for
- Macintosh. Reported by Robert Święcki.
-
-2010-06-30 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Minor optimizations by avoiding divisions.
-
- * src/sfnt/ttkern.c (tt_face_load_kern, tt_face_get_kerning):
- Replace divisions with multiplication in comparisons.
-
-2010-06-29 Werner Lemberg <wl@gnu.org>
-
- Fix minor tracing issues.
-
- * src/cff/cffgload.c, src/truetype/ttgload.c: Adjust tracing levels.
-
-2010-06-27 Werner Lemberg <wl@gnu.org>
-
- [cff] Really fix `hintmask' and `cntrmask' limit check.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings)
- <cff_op_hintmask>: Fix thinko and handle tracing also.
-
-2010-06-27 Werner Lemberg <wl@gnu.org>
-
- Fix valgrind warning.
-
- * src/base/ftoutln.c (FT_Outline_Get_Orientation): Initialize
- `result' array.
-
-2010-06-27 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix memory leak.
-
- * src/cff/cffgload.c (cff_operator_seac): Free charstrings even in
- case of errors.
-
-2010-06-27 Werner Lemberg <wl@gnu.org>
-
- [cff] Protect against invalid `hintmask' and `cntrmask' operators.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings)
- <cff_op_hintmask>: Ensure that we don't exceed `limit' while parsing
- the bit masks of the `hintmask' and `cntrmask' operators.
-
-2010-06-26 Werner Lemberg <wl@gnu.org>
-
- Fix PFR change 2010-06-24.
-
- * src/pfr/pfrgload.c (pfr_glyph_load_simple): Really protect against
- invalid indices.
-
-2010-06-26 Werner Lemberg <wl@gnu.org>
-
- Improve PFR tracing messages.
-
- * src/pfr/pfrgload.c (pfr_glyph_load_rec): Emit tracing messages for
- simple and compound glyph offsets.
-
-2010-06-26 Werner Lemberg <wl@gnu.org>
-
- Fix last PFR change.
-
- * src/pfr/pfrobjs.c (pfr_face_init): Fix rejection logic.
-
-2010-06-26 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #30262.
-
- * src/sfnt/ttload.c (tt_face_load_maxp): Limit `maxComponentDepth'
- arbitrarily to 100 to avoid stack exhaustion.
-
-2010-06-26 Werner Lemberg <wl@gnu.org>
-
- Add some memory checks (mainly for debugging).
-
- * src/base/ftstream.c (FT_Stream_EnterFrame): Exit with error
- if the frame size is larger than the stream size.
-
- * src/base/ftsystem.c (ft_ansi_stream_io): Exit with error if
- seeking a position larger than the stream size.
-
-2010-06-25 Werner Lemberg <wl@gnu.org>
-
- [pfr] Fix Savannah bug #30261.
-
- * src/pfr/pfrobjs.c (pfr_face_init): Reject fonts which contain
- neither outline nor bitmap glyphs.
-
-2010-06-25 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix Savannah bug #30254.
-
- * src/cff/cffload.c (cff_index_get_pointers): Do sanity check for
- first offset also.
-
-2010-06-25 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Initial fix for Savannah bug #30248 and #30249.
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Check the error during
- reading a PFB fragment embedded in LaserWriter PS font for Macintosh.
- Reported by Robert Święcki.
-
-2010-06-24 Werner Lemberg <wl@gnu.org>
-
- [pcf] Fix Savannah bug #30247.
-
- * src/pcf/pcfread.c (pcf_get_metrics): Disallow (invalid) fonts with
- zero metrics.
-
-2010-06-24 Graham Asher <graham.asher@btinternet.com>
-
- * src/smooth/ftgrays.c (gray_render_cubic): Fix algorithm.
- The previous version was too aggressive, as demonstrated in
- http://lists.gnu.org/archive/html/freetype-devel/2010-06/msg00020.html.
-
-2010-06-24 Werner Lemberg <wl@gnu.org>
-
- */*: Use module specific error names where appropriate.
-
-2010-06-24 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #30236.
-
- * src/sfnt/ttcmap.c (tt_face_build_cmaps): Improve check for pointer
- to `cmap_table'.
-
-2010-06-24 Werner Lemberg <wl@gnu.org>
-
- [pfr] Fix Savannah bug #30235.
-
- * src/pfr/pfrgload.c (pfr_glyph_load_simple): Protect against
- invalid indices if there aren't any coordinates for indexing.
-
-2010-06-24 Werner Lemberg <wl@gnu.org>
-
- [bdf]: Font properties are optional.
-
- * src/bdf/bdflib.c (_bdf_readstream): Use special error code to
- indicate a redo operation.
- (_bdf_parse_start): Handle `CHARS' keyword here too and pass current
- input line to `_bdf_parse_glyph'.
-
-2010-06-23 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #30220.
-
- * include/freetype/fterrdef.h
- (BDF_Err_Missing_Fontboundingbox_Field): New error code.
-
- * src/bdf/bdflib.c (_bdf_parse_start): Check for missing
- `FONTBOUNDINGBOX' field.
- Avoid memory leak if there are multiple `FONT' lines (which is
- invalid but doesn't hurt).
-
-2010-06-21 Werner Lemberg <wl@gnu.org>
-
- [pfr] Fix Savannah bug #30168.
-
- * src/pfr/pfrgload.c (pfr_glyph_load_compound): Limit the number of
- subglyphs to avoid endless recursion.
-
-2010-06-20 Werner Lemberg <wl@gnu.org>
-
- [psaux] Fix Savannah bug #30145.
-
- * src/psaux/psobjs.c (t1_builder_add_contour): Protect against
- `outline == NULL' which might happen in invalid fonts.
-
-2010-06-19 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #30135.
-
- * src/bdf/bdflib.c (_bdf_list_join): Don't modify value in static
- string `empty'.
- (_bdf_parse_glyph): Avoid memory leak in case of error.
-
-2010-06-15 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix Savannah bug #30108.
-
- * src/autofit/afglobal.c (af_face_globals_compute_script_coverage):
- Properly mask AF_DIGIT bit in comparison.
-
-2010-06-11 Werner Lemberg <wl@gnu.org>
-
- [pshinter] Fix Savannah bug #30106.
-
- Point numbers for FreeType's implementation of hinting masks are
- collected before the final number of points of a glyph has been
- determined; in particular, the code for handling the `endchar'
- opcode can reduce the number of points.
-
- * src/pshinter/pshalgo.c (psh_glyph_find_strong_points): Assure that
- `end_point' is not larger than `glyph->num_points'.
-
-2010-06-11 Werner Lemberg <wl@gnu.org>
-
- [cff]: Improve debugging output.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings)
- <cff_op_hintmask>: Implement it.
-
-2010-06-10 Graham Asher <graham.asher@btinternet.com>
-
- ftgrays: Speed up rendering of small cubic splines.
-
- * src/smooth/ftgrays.c (gray_render_cubic): Implement new,
- simplified algorithm to find out whether the spline can be replaced
- with two straight lines. See this thread for more:
-
- http://lists.gnu.org/archive/html/freetype-devel/2010-06/msg00000.html
-
-2010-06-09 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix Savannah bug #30082.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings)
- <cff_op_callothersubr>: Protect against stack underflow.
-
-2010-06-08 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix Savannah bug #30053.
-
- * src/cff/cffparse.c (cff_parse_real): Handle border case where
- `fraction_length' has value 10.
-
-2010-06-07 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #30052.
- This bug has been introduced with commit 2415cbf3.
-
- * src/base/ftobjs.c (FT_Get_First_Char, FT_Get_Next_Char): Protect
- against endless loop in case of corrupted font header data.
-
-2010-05-26 Werner Lemberg <wl@gnu.org>
-
- Remove unused variable.
- Found by Graham.
-
- * src/autofit/afhints.c (af_glyph_hints_reload): Remove unused
- variable `first' in first block.
-
-2010-05-22 Werner Lemberg <wl@gnu.org>
-
- Fix various memory problems found by linuxtesting.org.
-
- * src/base/ftgxval.c (FT_TrueTypeGX_Free, FT_ClassicKern_Free),
- src/base/ftotval.c (FT_OpenType_Free), src/base/ftpfr.c
- (ft_pfr_check): Check `face'.
-
- * src/base/ftobjs.c (FT_Get_Charmap_Index): Check `charmap' and
- `charmap->face'.
- (FT_Render_Glyph): Check `slot->face'.
- (FT_Get_SubGlyph_Info): Check `glyph->subglyphs'.
-
-2010-05-22 Werner Lemberg <wl@gnu.org>
-
- autofit: Remove dead code.
- Suggested by Graham.
-
- * src/autofit/afhints.c (af_glyph_hints_compute_inflections):
- Removed.
- (af_glyph_hints_reload): Remove third argument.
- Update all callers.
-
-2010-05-21 Bram Tassyns <bramt@enfocus.be>
-
- [cff] Fix Savannah bug #27987.
-
- * src/cff/cffobjs.c (remove_subset_prefix): New function.
- (cff_face_init): Use it to adjust `cffface->family_name'.
-
-2010-05-20 Werner Lemberg <wl@gnu.org>
-
- TrueType: Make FreeType ignore maxSizeOfInstructions in `maxp'.
-
- Acroread does the same.
-
- * src/truetype/ttgload.c (TT_Process_Composite_Glyph): Call
- `Update_Max' to adjust size of instructions array if necessary and
- add a rough safety check.
-
- (load_truetype_glyph): Save `loader->byte_len' before recursive
- call.
-
- * src/truetype/ttinterp.h, src/truetype/ttinterp.c (Update_Max):
- Declare it as FT_LOCAL.
-
-2010-05-18 Hongbo Ni <hongbo@njstar.com>
-
- Apply Savannah patch #7196.
-
- * src/cff/cffgload.c (cff_slot_load): Prevent crash if CFF subfont
- index is out of range.
-
-2010-05-11 Werner Lemberg <wl@gnu.org>
-
- * docs/formats.txt: Give pointer to PCF documentation.
- Information provided by Alan Coopersmith
- <alan.coopersmith@oracle.com>.
-
-2010-05-10 Ken Sharp <ken.sharp@artifex.com>
-
- [psaux] Fix Savannah bug #29846.
-
- Previously we discovered fonts which used `setcurrentpoint' to set
- the initial point of a contour to 0,0. This caused FreeType to
- raise an error, because the `setcurrentpoint' operator is only
- supposed to be used with the results from an OtherSubr subroutine.
-
- This was fixed by simply ignoring the error and carrying on.
-
- Now we have found a font which uses setcurrentpoint to actually
- establish a non-zero point for a contour during the course of a
- glyph program. FWIW, these files may be produced by an application
- called `Intaglio' on the Mac, when converting TrueType fonts to
- Type 1.
-
- The fix allows the new invalid behaviour, the old invalid behaviour
- and real proper usage of the operator to work the same way as Adobe
- interpreters apparently do.
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Make
- `setcurrentpoint' use the top two elements of the stack to establish
- unconditionally the current x and y coordinates.
-
- Make the `flex' subroutine handling (OtherSubr 0) put the current
- x,y coordinates onto the stack, instead of two dummy uninitialised
- values.
-
-2010-04-14 Ken Sharp <ken.sharp@artifex.com>
-
- [psaux] Fix Savannah bug #29444.
-
- * src/psaux/psobjs.c (t1_builder_start_point): Accept (invalid)
- `lineto' immediately after `hsbw', in accordance with Acrobat, GS,
- and others.
-
-2010-04-14 Michał Cichoń <thedmd@artifexmundi.com>
-
- [psaux] Fix Savannah bug #27999.
-
- * src/cache/ftcmanag.c (FTC_Manager_RemoveFaceID): Only remove
- selected entry, not all.
-
-2010-04-06 Jonathan Kew <jfkthame@gmail.com>
-
- [truetype] Add overflow check to `fvar' table.
-
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): Check axis and instance
- count.
-
-2010-04-05 Ken Sharp <ken.sharp@artifex.com>
-
- [raster] Fix Savannah bug #29335.
-
- * src/raster/ftraster.c (Line_Up): Use slow multiplication to
- prevent overflow. This shouldn't have any serious impact on speed,
- however.
-
-2010-04-05 Werner Lemberg <wl@gnu.org>
-
- Add new function `FT_Library_SetLcdFilterWeights'.
-
- This is based on code written by Lifter
- <http://unixforum.org/index.php?showuser=11691>. It fixes
- FreeDesktop bug #27386.
-
- * src/base/ftlcdfil.c (FT_Library_SetLcdFilterWeights): New
- function.
-
- * include/freetype/ftlcdfil.h: Updated.
-
- * docs/CHANGES: Updated.
-
-2010-04-01 John Tytgat <John.Tytgat@esko.com>
-
- [truetype] Fix Savannah bug #29404.
-
- * src/truetype/ttgload.c: Revert change 2752bd1a (check on bit 1
- of `head' table of TrueType fonts).
-
-2010-03-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix `multi build' for Tytgat's CFF driver improvement.
-
- * src/base/cffload.h (cff_index_get_name): Added.
-
-2010-03-12 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Remove duplicated inclusion of `FT_OUTLINE_H' in ftobjs.c.
-
- * src/base/ftobjs.c: Remove 2nd inclusion of `FT_OUTLINE_H'.
-
-2010-03-11 Chris Liddell <chris.liddell@artifex.com>
-
- [raster] Fix Savannah bug #27442.
-
- * src/raster/ftraster.c (ft_black_reset): Fix `buffer_size'.
-
-2010-03-09 Werner Lemberg <wl@gnu.org>
-
- [cff] Remove unused variable.
- Reported by Graham.
-
- * src/cff/cffparse.c (cff_parse_real): Remove `rest'.
-
-2010-03-02 John Tytgat <John.Tytgat@esko.com>
-
- [cff] Improve CFF string (especially glyphname) lookup performance.
-
- We do this by avoiding memory allocation and file I/O. This is
- Savannah patch #7104.
-
- * src/cff/cfftypes.h: Include PS cmaps service and
- FT_INTERNAL_POSTSCRIPT_HINTS_H.
- (CFF_SubFontRec): Remove `num_local_subrs'.
- (CFF_FontRec): Add `num_strings', `strings', and `string_pool'
- fields.
- Remove `string_index' and `num_global_subrs' fields.
- Use real types instead of `void' for `pshinter' and `psnames' fields.
-
- * src/cff/cffload.c: Don't include PS cmaps service.
- (cff_index_get_pointers): Add `pool' parameter which allows inserting
- an extra NUL character for each String INDEX entry.
- (cff_index_get_name): Make it a local function.
- (cff_index_get_string): New function.
- (cff_subfont_load): Updated.
- (cff_font_load): Initialize `num_strings', `strings', and
- `string_pool' fields in the `CFF_FontRec' structure.
- (cff_index_get_sid_string): Use `cff_index_get_string' instead of
- `cff_index_get_name'.
- (cff_font_done): Updated.
-
- * src/cff/cffload.h: Don't include PS cmaps service.
- (cff_index_get_string): Added.
- (cff_index_get_sid_string): Updated.
-
- * src/cff/cffobjs.c: Don't include PS cmaps service and
- FT_INTERNAL_POSTSCRIPT_HINTS_H.
- (cff_size_get_globals_funcs, cff_slot_init): Updated.
- (cff_face_init): Follow `cff_index_get_name',
- `cff_index_get_string', and `cff_index_get_sid_string' changes.
-
- * src/cff/cffcmap.c (cff_sid_free_glyph_name): Removed.
- (cff_sid_to_glyph_name): Use `cff_index_get_cid_string'.
- (cff_cmap_unicode_init): Updated.
-
- * src/cff/cffdrivr.c: Don't include PS cmap service.
- (cff_get_glyph_name): Avoid unnecessary lookup for POSTSCRIPT_CMAPS
- service.
- (cff_get_glyph_name, cff_ps_get_font_info, cff_get_ros): Follow API
- `cff_index_get_sid_string' change.
- (cff_get_name_index): Use `cff_index_get_string' instead of
- `cff_index_get_name'.
-
- * src/cff/cffgload.c: Don't include FT_INTERNAL_POSTSCRIPT_HINTS_H.
- (cff_decoder_init, cff_decoder_prepare): Updated.
-
-2010-02-27 Werner Lemberg <wl@gnu.org>
-
- Simplify code.
- Suggested by Behdad.
-
- * src/base/ftobjs.c (FT_Get_First_Char): Don't use a loop since we
- call FT_Get_Next_Char anyway if necessary.
-
-2010-02-26 Behdad Esfahbod <behdad@behdad.org>
-
- Improve handling of invalid glyph indices in char->index functions.
-
- * src/base/ftobjs.c (FT_Get_First_Char, FT_Get_Next_Char): Use a
- loop.
-
-2010-02-18 Chris Liddell <chris.liddell@artifex.com>
-
- [truetype] Fix Savannah bug #28905.
-
- Initialize phantom points before calling the incremental interface
- to update glyph metrics.
-
- * src/truetype/ttgload.c (tt_get_metrics_incr_overrides)
- [FT_CONFIG_OPTION_INCREMENTAL]: New function, split off from...
- (tt_get_metrics): This.
- Updated.
- (load_truetype_glyph): Use tt_get_metrics_incr_overrides.
-
-----------------------------------------------------------------------------
-
-Copyright 2010-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used, modified,
-and distributed under the terms of the FreeType project license,
-LICENSE.TXT. By continuing to use, modify, or distribute this file you
-indicate that you have read the license and understand and accept it
-fully.
-
-
-Local Variables:
-version-control: never
-coding: utf-8
-End:
diff --git a/ChangeLog.25 b/ChangeLog.25
deleted file mode 100644
index d7fed710d..000000000
--- a/ChangeLog.25
+++ /dev/null
@@ -1,5161 +0,0 @@
-2014-12-30 Werner Lemberg <wl@gnu.org>
-
- * Version 2.5.5 released.
- =========================
-
-
- Tag sources with `VER-2-5-5'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.5.5.
-
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/index.html,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualc/index.html,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj,
- builds/windows/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.5.4/2.5.5/, s/254/255/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 5.
-
- * builds/unix/configure.raw (version_info): Set to 17:4:11.
- * CMakeLists.txt (VERSION_PATCH): Set to 5.
- * docs/CHANGES: Updated.
-
- * builds/toplevel.mk (dist): Fix typos.
-
-2014-12-24 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Formatting and nanooptimizations.
-
- * src/base/ftcalc.c,
- * src/base/fttrigon.c: Revise sign restoration.
-
-2014-12-13 Werner Lemberg <wl@gnu.org>
-
- * src/pcf/pcfread.c (pcf_read_TOC): Improve fix from 2014-12-08.
-
-2014-12-11 Werner Lemberg <wl@gnu.org>
-
- * builds/toplevel.mk (dist): Use older POSIX standard for `tar'.
-
- Apparently, BSD tar isn't capable yet of handling POSIX-1.2001
- (contrary to GNU tar), so force the POSIX-1.1988 format.
-
- Problem reported by Stephen Fisher <sfisher@SDF.ORG>.
-
-2014-12-11 Werner Lemberg <wl@gnu.org>
-
- * src/type42/t42parse.c (t42_parse_sfnts): Reject invalid TTF size.
-
-2014-12-11 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_Get_Glyph_Name): Fix off-by-one check.
-
- Problem reported by Dennis Felsing <dennis@felsin9.de>.
-
-2014-12-11 Werner Lemberg <wl@gnu.org>
-
- * src/type42/t42parse.c (t42_parse_sfnts): Check `string_size'.
-
- Problem reported by Dennis Felsing <dennis@felsin9.de>.
-
-2014-12-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [gxvalid] Fix a naming convention conflicting with ftvalid.
-
- See previous changeset for otvalid.
-
- * src/gxvalid/{gxvcommn.h, gxvmort.h, gxvmorx.h}: Replace
- `valid' by `gxvalid'.
- * src/gxvalid/{gxvbsln.c, gxvcommn.c, gxvfeat.c, gxvjust.c,
- gxvkern.c, gxvlcar.c, gxvmort.c, gxvmort0.c, gxvmort1.c,
- gxvmort2.c, gxvmort4.c, gxvmort5.c, gxvmorx.c, gxvmorx0.c,
- gxvmorx1.c, gxvmorx2.c, gxvmorx4.c, gxvmorx5.c, gxvopbd.c,
- gxvprop.c, gxvtrak.c}: Replace `valid' by `gxvalid' if
- it is typed as GXV_Validator.
-
-2014-12-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [otvalid] Fix a naming convention conflicting with ftvalid.
-
- Some prototypes in ftvalid.h use `valid' for the variables
- typed as FT_Validator. Their implementations in src/base/
- ftobjs.c and utilizations in src/sfnt/ttcmap.c do similar.
-
- Some macros in otvcommn.h assume the exist of the variable
- `valid' typed as OTV_Validator in the caller.
-
- Mixing these two conventions cause invalid pointer conversion
- and unexpected SEGV in longjmp. To prevent it, all variables
- typed as OTV_Validator are renamed to `otvalid'.
-
- * src/otvalid/otvcommn.h: Replace `valid' by `otvalid'.
- * src/otvalid/{otvcommn.c, otvbase.c, otvgdef.c, otvgpos.c,
- otvgsub.c, otvjstf.c, otvmath.c}: Replace `valid' by `otvalid'
- if it is typed as OTV_Validator.
-
-2014-12-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [ftvalid] Introduce FT_THROW() in FT_INVALID_XXX macros.
-
- Original patch is designed by Werner Lemberg. Extra part
- for otvalid and gxvalid are added by suzuki toshiya, see
- discussion:
- http://lists.nongnu.org/archive/html/freetype-devel/2014-12/msg00002.html
- http://lists.nongnu.org/archive/html/freetype-devel/2014-12/msg00007.html
-
- * include/internal/ftvalid.h: Introduce FT_THROW() in FT_INVALID_().
- * src/gxvalid/gxvcommn.h: Ditto.
- * src/otvalid/otvcommn.h: Ditto.
-
-2014-12-08 Werner Lemberg <wl@gnu.org>
-
- [pcf] Fix Savannah bug #43774.
-
- Work around `features' of X11's `pcfWriteFont' and `pcfReadFont'
- functions. Since the PCF format doesn't have an official
- specification, we have to exactly follow these functions' behaviour.
-
- The problem was unveiled with a patch from 2014-11-06, fixing issue
- #43547.
-
- * src/pcf/pcfread.c (pcf_read_TOC): Don't check table size for last
- element. Instead, assign real size.
-
-2014-12-07 Werner Lemberg <wl@gnu.org>
-
- Work around a bug in Borland's C++ compiler.
-
- See
-
- http://qc.embarcadero.com/wc/qcmain.aspx?d=118998
-
- for Borland's bug tracker entry.
-
- Reported by Yuliana Zigangirova <zigangirova@inbox.ru>,
- http://lists.gnu.org/archive/html/freetype-devel/2014-04/msg00001.html.
-
- * include/internal/ftvalid.h (FT_ValidatorRec), src/smooth/ftgrays.c
- (gray_TWorker_): Move `ft_jmp_buf' field to be the first element.
-
-2014-12-07 Werner Lemberg <wl@gnu.org>
-
- */*: Decorate hex constants with `U' and `L' where appropriate.
-
-2014-12-07 Werner Lemberg <wl@gnu.org>
-
- [truetype] Prevent memory leak for buggy fonts.
-
- * src/truetype/ttobjs.c (tt_size_done): Unconditionally call
- `tt_size_done_bytecode'.
-
-2014-12-06 Werner Lemberg <wl@gnu.org>
-
- * Version 2.5.4 released.
- =========================
-
-
- Tag sources with `VER-2-5-4'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.5.4.
-
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/index.html,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualc/index.html,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj,
- builds/windows/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.5.3/2.5.4/, s/253/254/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 4.
-
- * builds/unix/configure.raw (version_info): Set to 17:3:11.
- * CMakeLists.txt (VERSION_PATCH): Set to 4.
- * docs/CHANGES: Updated.
-
-2014-12-04 Werner Lemberg <wl@gnu.org>
-
- docs/CHANGES: Updated, formatted.
-
-2014-12-04 Dave Arnold <darnold@adobe.com>
-
- [cff] Modify an FT_ASSERT.
-
- * src/cff/cf2hints.c (cf2_hintmap_map): After the fix for Savannah
- bug #43661, the test font `...aspartam.otf' still triggers an
- FT_ASSERT. Since hintmap still works with count==0, ...
- (cf2_glyphpath_lineTo, cf2_glyphpath_curveTo): ... add that term to
- suppress the assert.
-
-2014-12-04 Dave Arnold <darnold@adobe.com>
-
- [cff] Fix Savannah bug #43661.
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdHSTEM,
- cf2_cmdVSTEM, cf2_cmdHINTMASK>: Don't append to stem arrays after
- hintmask is constructed.
-
- * src/cff/cf2hints.c (cf2_hintmap_build): Add defensive code to
- avoid reading past end of hintmask.
-
-2014-12-03 Werner Lemberg <wl@gnu.org>
-
- docs/CHANGES: Updated.
-
-2014-12-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Better fix for conversion specifiers in debug messages.
-
- Using `%ld' for pointer differences causes warnings on 32bit
- platforms. The correct type would be (the relatively new) `%td',
- however, this is missing on some important platforms.
-
- This patch improves the change from 2014-11-28.
-
- * src/autofit/afhints.c (AF_INDEX_NUM): Use `int' typecast. Our
- pointer differences are always sufficiently small.
- (af_glyph_hints_dump_points, af_glyph_hints_dump_segments,
- af_glyph_hints_dump_edge): Revert to `%d' and use `AF_INDEX_NUM'.
-
-2014-12-03 Werner Lemberg <wl@gnu.org>
-
- FT_Sfnt_Tag: s/ft_sfnt_xxx/FT_SFNT_XXX/ for orthogonality.
-
- All public FreeType enumeration and flag values are uppercase...
-
- * include/tttables.h (FT_Sfnt_Tag): Implement it. For backward
- compatibility, retain the old values as macros.
-
- * src/base/ftfstype.c (FT_Get_FSType_Flags), src/sfnt/sfdriver.c
- (get_sfnt_table): Updated.
-
-2014-12-02 Werner Lemberg <wl@gnu.org>
-
- * include/*: Improve structure of documentation.
-
- . Add and update many `<Order>' tags.
- . Apply various documentation fixes.
- . Remove details to deprecated (or never implemented) data.
-
-2014-12-02 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Always handle `<Order>' section elements.
-
- Previously, those elements were handled only for sections present in
- a `<Sections>' chapter element.
-
- * src/tools/docmaker/content.py (ContentProcessor::finish):
- Implement it.
-
-2014-12-02 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Properly handle empty rows in Synopsis.
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter::section_enter): Emit
- `&nbsp;' for empty fields.
-
-2014-12-02 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Thinko.
-
- * src/tools/docmaker/content.py (DocBlock::get_markup_words_all):
- Emit `/empty/' string for first element also.
-
-2014-12-02 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Honour empty lines in `<Order>' section element.
-
- This greatly improves the readability of the `Synopsis' links.
-
- * src/tools/docmaker/content.py (DocBlock::get_markup_words_all):
- Insert string `/empty/' between items.
-
- * src/tools/docmaker/formatter.py (Formatter::section_dump): Make it
- robust against nonexistent keys.
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter::section_enter): Emit
- empty <td> elements for `/empty/'.
-
-2014-12-02 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Ensure Python 3 compatibility.
-
- * src/tools/docmaker/content.py (ContentProcessor::set_section,
- ContentProcessor::finish): Replace `has_key' function with `in'
- keyword.
-
- * src/tools/docmaker/formatter.py (Formatter::__init__): Replace
- sorting function with a key generator.
- (Formatter::add_identifier): Replace `has_key' function with `in'
- keyword.
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter::html_source_quote):
- Replace `has_key' function with `in' keyword.
- (HtmlFormatter::index_exit, HtmlFormatter::section_enter): Use
- integer division.
- s/<>/>/.
-
- * src/tools/docmaker/utils.py: Import `itertools'.
- (index_sort): Replaced by...
- (index_key): ... this new key generator (doing exactly the same).
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Don't output a block multiple times.
-
- This bug was hidden by not processing all lines of `<Order>' blocks.
-
- * src/tools/docmaker/formatter.py (Formatter::section_dump): Filter
- out field names.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Use field values as HTML link targets where possible.
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter::make_block_url):
- Accept second, optional argument to specify a name.
- (HtmlFormatter::html_source_quote): Link to field ID if possible.
- (HtmlFormatter::print_html_field_list): Emit `id' attribute.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Allow empty lines in `<Order>' blocks.
-
- Before this patch, the suggested order of entries stopped at the
- first empty line.
-
- Obviously, nobody noticed that this problem caused a much reduced
- set of links in the `Synopsis' sections; in particular, the
- `<Order>' blocks contain a lot of entries that wouldn't be listed
- otherwise...
-
- * src/tools/docmaker/content.py (DocBlock::get_markup_words_all):
- New function to iterate over all items.
- (DocSection::process): Use it.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/sources.py (column) [Format 2]: Fix regexp.
-
- After the single asterisk there must be no other immediately following
- asterisk.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Improve CSS for vertical spacing.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Improve HTML code for table of contents.
-
- * src/tools/docmaker/tohtml.py: Introduce a new table class `toc',
- together with proper CSS.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Provide higher-level markup and simplify HTML.
-
- * src/tools/docmaker/tohtml.py: Instead of using extraneous `<div>'
- elements, use CSS descendants (of class `section') to format the
- data.
-
- Also remove redundant <p> and <br> elements, replacing them with
- proper CSS.
-
- Globally reduce page width to 75%.
-
- (block_header): Rename <div> class to `section'.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Add `top' links after blocks.
-
- * src/tools/docmaker/tohtml.py (block_footer_middle): Implement it.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Improve CSS for fields.
-
- Make fields align horizontally relative to full line width.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Fix index and TOC templates.
-
- This thinko was introduced 2014-11-27.
-
-2014-11-28 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Format field lists with CSS.
-
- This also simplifies the inserted HTML code.
-
- * src/tools/docmaker/tohtml.py
- (HtmlFormatter::print_html_field_list): Do it.
-
-2014-11-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix compiler warning to the comparison between signed and
- unsigned variable.
-
- * src/pfr/pfrsbit.c (pfr_slot_load_bitmap): Fix the comparison
- between `ypos + ysize' and FT_INT_{MAX,MIN}.
-
-2014-11-28 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Replace empty `<td>' with CSS.
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter::section_enter): Do
- it.
-
-2014-11-28 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Replace some `<table>' tags with `<h4>' and `<div>'.
-
- * src/tools/docmaker/tohtml.py (marker_*): Use `<h4>'.
- (source_*): Use `<div>'.
- (HtmlFormatter::block_enter): s/<h4>/<h3>/.
-
-2014-11-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix compiler warning to conversion specifiers in debug messages.
-
- * src/autofit/afhints.c (af_glyph_hints_dump_points): Add length
- modifier to dump long integers.
- (af_glyph_hints_dump_segments, af_glyph_hints_dump_edges): Ditto.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Use more CSS for index.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Replace `name' attribute of `<a>' with `id'.
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter::block_enter): Do it.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Remove remaining `width' attributes.
-
- For `Index' and `TOC' links, we now simply use the `text-align' CSS
- property of `<td>' to enforce flush-left and flush-right,
- eliminating the hack with an empty, full-width `<td>' element
- inbetween.
-
- The change also enforces the same (smaller) size for all index and
- TOC links.
-
-2014-11-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/cff/cf2font.c: Include `ftcalc.h' to use FT_MSB(),
- cf2font.c could not find it under `make multi' build.
-
-2014-11-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Remove
- unrequired negative value check for `width' and `height'.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: More HTML table refactoring.
-
- Replace some `<table>' tags with `<div>' to simplify structure.
-
- Move `bgcolor' attribute to CSS.
-
- Replace most `width' attributes with CSS. The remaining instances
- (providing a similar effect as LaTeX's `\hfill' command) are removed
- in a later patch.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Replace <font> with CSS.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Center <table> with CSS.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Replace `<center>' with `<div>'.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Remove redundant `<center>' tags.
-
- This starts a series of commits into the direction of generating
- valid HTML 5 code, especially using much more CSS.
-
-2014-11-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Prevent too negative values (< FT_INT_MIN) in bitmap metrics,
- suggested by Alexei.
-
- * src/pfr/pfrsbit.c (pfr_slot_load_bitmap): Prevent too
- negative values in `xpos' and `ypos + ysize'.
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Prevent
- too negative values in `x_left' and `y_top'. Either negative
- values in `width' and `height' are checked.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Produce better HTML code.
-
- * src/tools/docmaker/tohtml.py: Always use double quotes for
- attribute values.
- (source_footer): Close `td' and `tr' groups.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- Use better way to disable creation of .pyc files for `make refdoc'.
-
- Python 2.6 was released in 2008...
-
- * builds/freetype.mk (refdoc): Use python's `-B' option.
-
- * builds/detect.mk (std_setup, dos_setup): Mention required python
- version for `refdoc' target.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/sources.py (re_bold, re_italic): Use
- non-grouping parentheses.
- * src/tools/docmaker/tohtml.py (HtmlFormatter::make_html_word):
- Updated.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_Get_Glyph_Name): Fix compiler warning.
-
- Introduced in previous change. Reported by Alexei.
-
-2014-11-26 Werner Lemberg <wl@gnu.org>
-
- * src/*: Add checks for parameters of API functions where missing.
-
- `API functions' are functions tagged with `FT_EXPORT_DEF'.
-
- Besides trivial fixes, the following changes are included, too.
-
- * src/base/ftbdf.c (FT_Get_BDF_Charset_ID, FT_Get_BDF_Property): Set
- error code if no service is available.
-
- * src/base/ftinit.c (FT_Done_FreeType): Change return value for
- invalid `library' parameter to `Invalid_Library_Handle'.
-
- * src/base/ftobjs.c (FT_New_Size): Change return value for invalid
- `asize' parameter to `Invalid_Argument'.
-
- * src/base/ftoutln.c (FT_Outline_Copy): Change return value for
- invalid `source' and `target' parameters to `Invalid_Outline'.
- (FT_Outline_Done_Internal): Change return value for invalid
- `outline' parameter to `Invalid_Outline'.
-
-2014-11-26 Werner Lemberg <wl@gnu.org>
-
- * src/cache/ftcbasic.c: Use single calls to `FT_TRACE'.
-
-2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Additional
- overflow check in the summation of POST fragment lengths,
- suggested by Mateusz Jurczyk <mjurczyk@google.com>.
-
-2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Insert comments
- and fold too long tracing messages.
-
-2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix Savannah bug #43540.
-
- * src/base/ftmac.c (parse_fond): Prevent a buffer overrun
- caused by a font including too many (> 63) strings to store
- names[] table.
-
-2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Use unsigned long
- variables to read the lengths in POST fragments. Suggested by
- Mateusz Jurczyk <mjurczyk@google.com>.
-
-2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix Savannah bug #43539.
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Fix integer overflow
- by a broken POST table in resource-fork.
-
-2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix Savannah bug #43538.
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Fix integer overflow
- by a broken POST table in resource-fork.
-
-2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Avoid memory leak
- by a broken POST table in resource-fork. Return after freeing
- the buffered POST table when it is found to be broken.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- */*: s/Invalid_Argument/Invalid_Size_Handle/ where appropriate.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- */*: s/Invalid_Argument/Invalid_Stream_Handle/ where appropriate.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- */*: s/Invalid_Argument/Invalid_Library_Handle/ where appropriate.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- */*: s/Invalid_Argument/Invalid_Outline/ where appropriate.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- */*: s/Invalid_Argument/Invalid_Face_Handle/ where appropriate.
-
-2014-11-24 Werner Lemberg <wl@gnu.org>
-
- [Savannah bug #43682] Adjust some renderer callbacks.
-
- * src/raster/ftraster.c (ft_black_set_mode): Change return type to
- `int' to stay in sync with `FT_Renderer_SetModeFunc' prototype.
-
- * src/smooth/ftgrays.c (gray_raster_set_mode): New dummy function
- for orthogonality.
- (ft_grays_raster): Use it.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- [Savannah bug #43682] Properly handle missing return errors.
-
- The functions in this patch *do* return non-trivial errors that must
- be taken care of.
-
- * src/autofit/afloader.c (af_loader_load_g), src/base/ftobjs.c
- (FT_Render_Glyph_Internal), src/base/ftoutln.c (FT_Outline_Render),
- src/cff/cffgload.c (cff_decoder_parse_charstrings) <cff_op_endchar>,
- src/psaux/psobjs.c (ps_parser_load_field_table), src/psaux/t1decode
- (t1_decoder_parse_charstrings) <op_endchar>, src/truetype/ttgload.c
- (load_truetype_glyph <subglyph loop>, tt_loader_init,
- TT_Load_Glyph), src/truetype/ttgxvar.c (TT_Set_MM_Blend),
- src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): Do it.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- [Savannah bug #43682] Add/remove `void' casts to some functions.
-
- We use a cast to indicate that we intentionally ignore a function's
- return value. However, this doesn't apply to API functions where
- errors can only happen for trivially invalid input.
-
- * src/base/ftstroke.c (FT_Glyph_Stroke, FT_Glyph_StrokeBorder),
- src/base/ftsynth.c (FT_GlyphSlot_Embolden), src/cff/cffgload.c
- (cff_slot_load), src/pfr/pfrdrivr.c (pfr_get_kerning),
- src/type1/t1load.c (parse_encoding), src/type42/t42parse.c
- (t42_parse_encoding): Do it.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- [Savannah bug #43682] Change some signatures to `void' return type.
-
- * include/internal/pshints.h (PSH_Globals_SetScaleFunc),
- include/internal/sfnt.h (TT_Get_Metrics_Func),
- src/pshinter/pshglob.c (psh_globals_set_scale),
- src/pshinter/pshrec.c (ps_hints_init), src/sfnt/ttmtx.c
- (tt_face_get_metrics), src/truetype/ttinterp.c (TT_Goto_CodeRange,
- TT_Set_CodeRange, TT_Clear_CodeRange, TT_Done_Context,
- TT_Save_Context): Do it.
-
- * src/pshinter/pshglob.h, src/pshinter/pshrec.h, src/sfnt/ttmtx.h,
- src/truetype/ttgload.c (TT_Hint_Glyph), src/truetype/ttinterp.c
- (TT_Run_Context), src/truetype/ttinterp.h, src/truetype/ttobjs.c
- (tt_size_run_fpgm, tt_size_run_prep): Updated.
-
-2014-11-24 Werner Lemberg <wl@gnu.org>
-
- Remove all code related to FT_MAX_CHARMAP_CACHEABLE.
-
- This is no longer used.
-
- * src/base/ftobjs.c, src/cache/ftccmap.c, src/cff/cffobjs.c,
- src/sfnt/ttcmap.c: Do it.
-
-2014-11-24 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43680.
-
- This adds an additional constraint to make the fix from 2013-01-25
- really work.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_image) <index_format==4>:
- Check `p' before `num_glyphs'.
-
-2014-11-24 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix Savannah bug #43679.
-
- * src/truetype/ttpload.c (tt_face_load_hdmx): Check minimum size of
- `record_size'.
-
-2014-11-24 Jarkko Pöyry <jarkko.poyry@gmail.com>
-
- [cff, pfr, psaux, winfonts] Fix Savannah bug #43676.
-
- Don't cast cmap init function pointers to an incompatible type.
-
- Without this patch, the number of parameters between declaration and
- the real signature differs. Calling such a function results in
- undefined behavior.
-
- ISO/IEC 9899:TC3 (Committee Draft September 7, 2007)
- 6.5.2.2 Function calls
- 9 If the function is defined with a type that is not
- compatible with the type (of the expression) pointed to by
- the expression that denotes the called function, the
- behavior is undefined.
-
- On certain platforms (c -> js with emscripten) this causes
- termination of execution or invalid calls because in the emscripten
- implementation, function pointers of different types are stored in
- different pointer arrays. Incorrect pointer type here results in
- indexing of an incorrect array.
-
- * src/cff/cffcmap.c (cff_cmap_encoding_init, cff_cmap_unicode_init),
- src/pfr/pfrcmap.c (pfr_cmap_init), src/psaux/t1cmap.c
- t1_cmap_standard_init, t1_cmap_expert_init, t1_cmap_custom_init,
- t1_cmap_unicode_init), src/winfonts/winfnt.c (fnt_cmap_init): Fix
- signature.
-
-2014-11-24 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43672.
-
- * src/sfnt/ttkern.c (tt_face_load_kern): Use correct value for
- minimum table length test.
-
-2014-11-24 Werner Lemberg <wl@gnu.org>
-
- [type1, type42] Another fix for Savannah bug #43655.
-
- * src/type1/t1load.c (parse_charstrings), src/type42/t42parse.c
- (t42_parse_charstrings): Add another boundary testing.
-
-2014-11-24 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Formatting, copyright, improved documentation.
-
- * src/tools/docmaker/*: No code changes besides trivial
- modifications.
-
-2014-11-22 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #43660.
-
- * src/bdf/bdflib.c (_bdf_parse_glyphs) <"ENDFONT">: Check
- `_BDF_GLYPH_BITS'.
-
-2014-11-22 Werner Lemberg <wl@gnu.org>
-
- [type42] Allow only embedded TrueType fonts.
-
- This is a follow-up to Savannah bug #43659.
-
- * src/type42/t42objs.c (T42_Face_Init): Exclusively use the
- `truetype' font driver for loading the font contained in the `sfnts'
- array.
-
-2014-11-22 Werner Lemberg <wl@gnu.org>
-
- [type42] Fix Savannah bug #43659.
-
- * src/type42/t42objs.c (T42_Open_Face): Initialize `face->ttf_size'.
-
- * src/type42/t42parse.c (t42_parse_sfnts): Always set
- `face->ttf_size' directly. This ensures a correct stream size in
- the call to `FT_Open_Face', which follows after parsing, even for
- buggy input data.
- Fix error messages.
-
-2014-11-22 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix Savannah bug #43658.
-
- * src/cff/cf2ft.c (cf2_builder_lineTo, cf2_builder_cubeTo): Handle
- return values of point allocation routines.
-
-2014-11-22 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43656.
-
- * src/sfnt/ttcmap.c (tt_cmap4_validate): Fix order of validity
- tests.
-
-2014-11-21 Werner Lemberg <wl@gnu.org>
-
- [type1, type42] Fix Savannah bug #43655.
-
- * src/type1/t1load.c (parse_charstrings), src/type42/t42parse.c
- (t42_parse_charstrings): Fix boundary testing.
-
-2014-11-21 Werner Lemberg <wl@gnu.org>
-
- * src/pcf/pcfread.c (pcf_get_metrics): Sanitize invalid metrics.
-
-2014-11-21 Werner Lemberg <wl@gnu.org>
-
- [ftlcdfil] Obey flow direction.
-
- * src/base/ftlcdfil.c (_ft_lcd_filter_fir, _ft_lcd_filter_legacy):
- Handle `up' flow.
-
-2014-11-21 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftbitmap.c (FT_Bitmap_Convert): Improve.
-
- This commit completes argument checks and adds support for different
- flow directions.
-
-2014-11-21 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftbitmap.c (FT_Bitmap_Copy): Improve.
-
- This commit adds argument checks and support for different flow
- directions.
-
-2014-11-20 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftbitmap.c (FT_Bitmap_New): Check argument.
-
-2014-11-19 Werner Lemberg <wl@gnu.org>
-
- Change some fields in `FT_Bitmap' to unsigned type.
-
- This doesn't break ABI.
-
- * include/ftimage.h (FT_Bitmap): Make `rows', `width', `num_grays',
- `pixel_mode', and `palette_mode' unsigned types.
-
- * src/base/ftbitmap.c: Updated.
- (FT_Bitmap_Copy): Fix casts.
-
- * src/cache/ftcsbits.c, src/raster/ftraster.c, src/sfnt/pngshim.c:
- Updated.
-
-2014-11-19 Werner Lemberg <wl@gnu.org>
-
- Make `FT_Bitmap_Convert' correctly handle negative `pitch' values.
-
- * src/base/ftbitmap.c (FT_Bitmap_Convert): Always use positive value
- for the pitch while copying data.
- Correctly set pitch sign in target bitmap.
-
-2014-11-19 Werner Lemberg <wl@gnu.org>
-
- Minor code improvement in `FT_Bitmap_Embolden'.
-
- * src/base/ftbitmap.c (FT_Bitmap_Embolden) <FT_PIXEL_MODE_GRAY[24]>:
- Fix thinko.
-
-2014-11-19 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/fttrigon.c: Use dedicated `FT_Angle' for arctan table.
-
-2014-11-19 Behdad Esfahbod <behdad@behdad.org>
-
- Avoid compiler warnings on x86-64 for `FT_MulFix'.
-
- `FT_MulFix' takes `FT_Long' parameters as defined in `freetype.h',
- but several inline implementations of it in `ftcalc.h' take
- `FT_Int32' arguments. This is causing compiler warnings on x86-64:
- If parameters of type `FT_Fixed' (= `FT_Long') are passed to the
- inline implementation of this function, integer values are truncated
- from 64bit to 32bit.
-
- * include/internal/ftcalc.h (FT_MulFix) [FT_MULFIX_ASSEMBLER]: Add
- casts.
-
-2014-11-15 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43597.
-
- * src/sfnt/pngshim.c (Load_SBit_Png): Protect against too large
- bitmaps.
-
-2014-11-12 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43591.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_init): Protect against addition
- and multiplication overflow.
-
-2014-11-12 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43590.
-
- * src/sfnt/ttload.c (check_table_dir, tt_face_load_font_dir):
- Protect against addition overflow.
-
-2014-11-12 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43589.
-
- * src/sfnt/sfobjs.c (woff_open_font): Protect against addition
- overflow.
-
-2014-11-12 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43588.
-
- * src/sfnt/ttcmap.c (tt_cmap8_validate, tt_cmap10_validate,
- tt_cmap12_validate, tt_cmap13_validate, tt_cmap14_validate): Protect
- against overflow in additions and multiplications.
-
-2014-11-10 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] CORDIC improvements.
-
- The scaling between the hypotenuse and its CORDIC approximation is
- based on regression analysis. The smaller padding for `theta' is
- justified by its maximum error of less than 6.
-
- * src/base/fttrigon.c (ft_trig_downscale): Borrow code from
- ./ftcalc.c (ft_multo64), change linear intercept.
- (ft_trig_pseudo_polarize): Decrease `theta' padding.
-
-2014-11-09 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftstroke.c (ft_stroker_inside): Fix border intersections.
-
- One more place to check whether `radius' is zero.
-
- Problem reported by Marco Wertz <marco.wertz@gmx.de>.
-
-2014-11-07 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #43535.
-
- * src/bdf/bdflib.c (_bdf_strncmp): New macro that checks one
- character more than `strncmp'.
- s/ft_strncmp/_bdf_strncmp/ everywhere.
-
-2014-11-06 Werner Lemberg <wl@gnu.org>
-
- [pcf] Fix Savannah bug #43548.
-
- * src/pcf/pcfread.c (pcf_get_encodings): Add sanity checks for row
- and column values.
-
-2014-11-06 Werner Lemberg <wl@gnu.org>
-
- [pcf] Fix Savannah bug #43547.
-
- * src/pcf/pcfread.c (pcf_read_TOC): Check `size' and `offset'
- values.
-
-2014-11-06 Werner Lemberg <wl@gnu.org>
-
- * src/pcf/pcfread.c (pcf_read_TOC): Avoid memory leak.
-
-2014-11-03 Infinality <infinality@infinality.net>
-
- * src/truetype/ttsubpix.c (COMPATIBILITY_MODE_Rules): Updated.
-
- The previous commit deteriorates rendering of DejaVu and similar
- fonts; this gets compensated with this rule.
-
-2014-11-03 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (Ins_DELTAP): Fix subpixel hinting.
-
- Before this patch, it was impossible to ever call DELTAP[123] in
- subpixel hinting mode as described in the ClearType whitepaper; it
- only worked if in `compatibility mode'. However, compatibility mode
- essentially disables SHPIX, completely ruining hinting of
- ttfautohint output, for example.
-
- We now follow the whitepaper more closely so that DELTAP[123]
- instructions for touched points in the non-subpixel direction are
- executed.
-
-2014-10-31 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Improve code readability.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Rearrange code.
-
-2014-10-31 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Reduce outline translations during rendering.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Translate origin
- virtually by modifying cbox, actually translate outline if cumulative
- shift is not zero.
-
-2014-10-30 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Fix Savannah bug #35604 (cont'd).
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Remove checks and
- casts that became unnecessary after the variable type upgrades.
-
-2014-10-29 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Improve code readability.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Rearrange code.
-
-2014-10-29 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Unify hypotenuse approximations.
-
- * include/internal/ftcalc.h (FT_HYPOT): Move macro from here...
- * include/internal/ftobjs.h: ... to here, next to required `FT_ABS'.
- * src/smooth/ftgrays.c (gray_render_cubic): Use it here.
-
-2014-10-25 Werner Lemberg <wl@gnu.org>
-
- [cff] Test valid darkening parameter macros in `ftoption.h'.
-
- We no longer need an otherwise unused typedef that can cause a gcc
- warning.
- Problem reported by Alexei.
-
- * src/cff/cffobjs.c (cff_driver_init): Use
- `CFF_CONFIG_OPTION_DARKENING_PARAMETER_XXX' macros directly.
- (SET_DARKENING_PARAMETERS): Removed.
- Compile time tests are now ...
-
- * devel/ftoption.h, include/config/ftoption.h: ... here.
-
-2014-10-25 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Improve flat corner definition.
-
- * include/internal/ftcalc.h (FT_HYPOT): Macro to approximate Euclidean
- distance with the alpha max plus beta min algorithm.
- * src/base/ftcalc.c (ft_corner_is_flat): Use it instead of Taxicab
- metric.
-
-2014-10-23 David Weiß <David.Weiss@ptvgroup.com>
-
- [build] Improve property file for vc2010.
-
- User-defined properties should be empty by default to prevent linker
- failures.
-
- * builds/windows/vc2010/freetype.user.props,
- builds/windows/vc2010/freetype.vcxproj:
- s/OptionsDirectory/UserOptionDirectory/.
- Comment out all user options.
-
-2014-10-23 Werner Lemberg <wl@gnu.org>
-
- [cff] Work around bug in preprocessor of MSVC 2010.
-
- We have been hit by
-
- https://connect.microsoft.com/VisualStudio/feedback/details/718976/msvc-pr
-
- * devel/ftoption.h, include/config/ftoption.h: Replace
- `CFF_CONFIG_OPTION_DARKENING_PARAMETERS' with eight macros
- `CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4}'.
-
- * src/cff/cffobjs.c (SET_DARKENING_PARAMETERS): Removed. We no
- longer need double expansion.
- (SET_DARKENING_PARAMETERS_0): Renamed to ...
- (SET_DARKENING_PARAMETERS): ... this.
- Update call.
-
-2014-10-20 Werner Lemberg <wl@gnu.org>
-
- [sbit] Minor fixes.
-
- * src/sfnt/ttsbit.c (tt_face_load_sbit) [TT_SBIT_TABLE_TYPE_SBIX]:
- Accept overlay format also, but emit warning message in that case.
- (tt_sbit_decoder_load_metrics): Add missing newline to error
- message.
- (tt_sbit_load_sbix_image): Add `rgbl' graphic type (as used on iOS
- 7.1) to the list of unsupported formats.
-
-2014-10-19 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Clean up bytecode rounding.
-
- Zero distance does not have to be treated specially if you follow
- specifications and check the sign as the very last step of rounding.
-
- * src/truetype/ttinterp.c (Round_None, Round_To_Grid,
- Round_Down_To_Grid, Round_Up_To_Grid, Round_To_Double_Grid): Use
- macros when available, do not check for non-zero distance.
- (Round_To_Half_Grid, Round_Super, Round_Super_45): Ditto, return phase
- if sign changed.
-
-2014-10-18 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Unwrap engine compensation settings.
-
- * src/truetype/ttobjs.c (tt_size_init_bytecode): Updated.
-
-2014-10-18 David Weiß <David.Weiss@ptvgroup.com>
-
- [build] Add property file to vc2010 project.
-
- This simplifies custom build configurations, especially for
- automated build environments.
-
- * builds/windows/vc2010/freetype.user.props: New configuration file.
-
- * builds/windows/vc2010/freetype.vcxproj: Include
- `freetype.user.props' and use its data fields.
-
- * builds/windows/vc2010/index.html: Updated.
-
-2014-10-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add blue-zone support for Telugu.
-
- This essentially moves the Telugu script from the `Indic' hinter to
- the `Latin' hinter.
-
- Note that this is a first shot and quite certainly needs
- refinements.
-
- * src/autofit/afblue.dat: Add blue zone data for Telugu.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Telugu standard characters and move
- data out of AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afranges.c: Move Telugu data out of
- AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afstyles.h: Update Telugu data; in particular, use
- AF_WRITING_SYSTEM_LATIN.
-
-2014-10-18 David Wimsey <david@wimsey.us>
-
- [cmake] Add iOS build support.
- From Savannah patch #8497.
-
- * builds/cmake/iOS.cmake: New file. Universal binaries are built
- with both 32 and 64 bit arm architectures.
-
- * CMakeLists.txt (IOS_PLATFORM): New variable for running the iOS
- toolchain. Possible values are `OS' to build on iOS, or
- `SIMULATOR' to build on APPLE.
-
-2014-10-16 Behdad Esfahbod <behdad@behdad.org>
- Werner Lemberg <wl@gnu.org>
-
- [cff] Add `CFF_CONFIG_OPTION_DARKENING_PARAMETERS' config macro.
-
- * devel/ftoption.h, include/config/ftoption.h
- (CFF_CONFIG_OPTION_DARKENING_PARAMETERS): New macro.
-
- * src/cff/cffobjs.c (SET_DARKENING_PARAMETERS,
- SET_DARKENING_PARAMETERS_0): New macros.
- (cff_driver_init): Use new macros.
-
-2014-10-14 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Limit delta shift range.
-
- The valid range for delta shift is zero through six. Negative values
- are invalid according to
-
- https://developer.apple.com/fonts/TrueType-Reference-Manual/RM04/Chap4.html#delta%20shift
-
- * src/truetype/ttobjs.h (delta_shift, delta_base): Make unsigned.
- * src/truetype/ttinterp.h (DO_SDS): Throw an error if `delta_shift'
- is out of range.
- (Ins_DELTAP, Ins_DELTAC): Optimize for valid `delta_shift'.
-
-2014-10-16 Werner Lemberg <wl@gnu.org>
-
- A better fix for Savannah bug #43392.
- Suggested by Doug Felt <dougfelt@gmail.com>.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_metrics): Set
- `vertAdvance' to zero...
-
- * src/truetype/ttgload.c (TT_Load_Glyph): ... and set here a default
- value for `vertAdvance' based on `linearVertAdvance' in case
- `vertAdvance' is zero. Note that the previous computed ad-hoc value
- for `linearVertAdvance' was apparently not tested in a real-life
- situation.
-
-2014-10-14 David Weiß <David.Weiss@ptvgroup.com>
-
- [build] Better optimization settings for vc2010 solution file.
-
- * builds/windows/vc2010/freetype.sln,
- builds/windows/vc2010/freetype.vcxproj: Updated.
-
-2014-10-14 Werner Lemberg <wl@gnu.org>
-
- [autofit] Adjust Devanagari character range.
-
- * src/autofit/afranges.c (af_deva_uniranges): Omit characters that
- are common to all other Indic scripts.
-
-2014-10-12 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43392.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_metrics): Don't let
- vertical metrics uninitialized.
-
-2014-10-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Small bbox correction.
-
- * src/base/ftbbox.c (FT_Outline_Get_BBox): Start from nonsense bbox
- instead of initial point that could be `off' in conic outlines.
-
-2014-10-08 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Fix Savannah bug #43356.
-
- * src/base/ftbbox.c (BBox_Move_To, BBox_Conic_To): Update bbox in case
- of implicit `to'.
- (BBox_Line_To): New emitter that does not update bbox.
-
-2014-10-08 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Introduce and use new macro `FT_UPDATE_BBOX'
-
- * src/base/ftbbox.c (FT_UPDATE_BBOX): New macro.
- (FT_Outline_Get_BBox): Use it here.
-
-2014-10-02 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Significant optimization of `ft_div64by32'
-
- We shift as many bits as we can into the high register, perform
- 32-bit division with modulo there, then work through the remaining
- bits with long division. This optimization is especially noticeable
- for smaller dividends that barely use the high register.
-
- * src/base/ftcalc.c (ft_div64by32): Updated.
-
-2014-10-02 Dave Arnold <darnold@adobe.com>
-
- [cff] Fix Savannah bug #43271.
-
- * src/cff/cf2font.c (cf2_computeDarkening): Change overflow
- detection to use logarithms and clamp `scaledStem'.
-
-2014-10-01 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftcalc.c: Remove miscellaneous type casts.
-
-2014-10-01 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Use more common `FT_MSB' implementation with masks.
-
- * src/base/ftcalc.c (FT_MSB): Updated.
-
-2014-09-30 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Clean up.
-
- * src/base/ftcalc.c (FT_MOVE_SIGN): New macro for frequently used
- code.
-
-2014-09-25 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Avoid unnecessary long division.
-
- This applies to `FT_MulDiv' but not to `FT_DivFix', where overflows or
- lack thereof are predicted accurately.
-
- * src/base/ftcalc.c (ft_div64by32): Improve readability.
- (FT_MulDiv, FT_MulDiv_No_Round) [!FT_LONG64]: Use straight division
- when multiplication stayed within 32 bits.
-
-2014-09-24 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor clean-ups.
-
- * src/autofit/afhints.c (AF_FLAGS): Remove obsolete values.
-
- * src/autofit/afhints.c (af_glyph_hints_dump_points,
- af_glyph_hints_align_strong_points): Updated.
-
- * src/autofit/aflatin.c (af_latin_hints_link_segments,
- af_latin_hints_compute_segments), src/autofit/afcjk.c
- (af_cjk_hints_link_segments), src/autofit/aflatin2.c
- (af_latin2_hints_link_segments, af_latin2_hints_compute_segments):
- There are no longer fake segments since more than 10 years...
-
-2014-09-22 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor code streamlining.
-
- * src/autofit/afhints.c (af_axis_hints_new_edge): Remove redundant
- initialization.
-
-2014-09-19 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftcalc.c: Harmonize code.
-
-2014-09-15 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Tighten the overflow check in `FT_MulDiv'.
-
- * src/base/ftcalc.c (FT_MulDiv) [!FT_LONG64]: Updated.
-
-2014-09-08 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Fix Savannah bug #43153.
-
- * src/psaux/psconv.c (PS_Conv_ToFixed): Add protection against
- overflow in `divider'.
-
-2014-09-03 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Tighten the overflow check in `FT_DivFix'.
-
- This fixes a 13-year old bug. The original overflow check should have
- been updated when rounding was introduced into this function
- (c2cd00443b).
-
- * src/base/ftcalc.c (FT_DivFix) [!FT_LONG64]: Updated.
- * include/freetype.h (FT_DivFix): Updated documentation.
-
-2014-09-03 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Tighten the overflow check in `FT_MulFix'.
-
- * src/base/ftcalc.c (FT_MulFix) [!FT_LONG64]: Updated.
-
-2014-09-02 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Shortcut ppem calculations for square pixels.
-
- * src/truetype/ttinterp.h (TT_ExecContextRec): New field
- `cur_ppem_func' with a function pointer.
- * src/truetype/ttinterp.c (TT_RunIns): Initialize `cur_ppem_func'
- depending on the pixel geometry to either...
- (Current_Ppem_Stretched): ... this for stretched pixels.
- (Current_Ppem): ... or this for square pixels.
- (DO_MPPEM, DO_MPS, Ins_DELTAP, Ins_DELTAC): Use `cur_ppem_func'.
-
-2014-08-31 Behdad Esfahbod <behdad@behdad.org>
-
- Don't use `register' keyword. Fixes compiler warnings.
-
- * src/base/ftcalc.c (FT_Add64) [!FT_LONG64]: Do it.
- * src/gzip/inftrees.c (huft_build): Ditto.
- * src/truetype/ttinterp.c (TT_MulFix14_arm): Ditto.
-
-2014-08-24 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Optimize DELTAP and DELTAC.
-
- * src/truetype/ttinterp.c (Ins_DELTAP, Ins_DELTAC): Move ppem
- calculations outside of the loop.
-
-2014-08-21 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Fix Savannah bug #43033.
-
- * include/config/ftconfig.h, builds/unix/ftconfig.in,
- builds/vms/ftconfig.h [FT_LONG64]: Do not disable the macro when
- 64-bit type is `long'.
-
-2014-08-20 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Small optimization of `FT_MulFix'.
-
- * src/base/ftcalc.c (FT_MulFix): Loosen up the condition for direct
- 32-bit calculations.
-
-2014-08-19 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Use unsigned calculation in `FT_MulDiv'.
-
- * src/base/ftcalc.c (FT_MulDiv): Updated to expand 32-bit range.
-
-2014-08-18 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Remove truncation in `FT_DivFix'.
-
- * src/base/ftcalc.c (FT_DivFix): Updated.
-
-2014-08-14 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Minor refactoring.
-
- * src/base/ftcalc.c (FT_MulDiv, FT_MulDiv_No_Round): Updated.
-
-2014-08-14 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Turn FT_MSB into a macro when using gcc builtins.
-
- * src/base/ftcalc.c, include/internal/ftcalc.h: Updated.
-
-2014-08-12 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Avoid undefined FT_MSB in `BBox_Cubic_Check'.
-
- * src/base/ftbbox.c (BBox_Cubic_Check): Update.
- (update_cubic_max): Replace with...
- (cubic_peak): ... this, which now handles upscaling.
-
-2014-08-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Handle collapsed outlines to avoid undefined FT_MSB.
-
- * src/base/ftoutln.c (FT_Outline_Get_Orientation): Update.
-
-2014-08-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Restore FT_MulFix inlining.
-
- * include/freetype.h (FT_MulFix): Unconditionally defined.
-
- * src/base/ftcalc.c [FT_MULFIX_ASSEMBLER]: Move code from here...
-
- * include/internal/ftcalc.h [FT_MULFIX_ASSEMBLER]: ... to here,
- which conditionally replaces the function with an inline version
- through the macro.
-
-2014-08-08 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra): Refactor.
-
-2014-07-26 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix typo.
-
- * src/cff/cf2hints.c (cf2_glyphpath_computeOffset): Use correct
- offsets in third quadrant.
-
- Reported by maks <maksqwe1@ukr.net>.
-
-2014-07-17 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #42788.
-
- * src/pfr/pfrobjs.c: Include `ftcalc.h'.
-
-2014-07-16 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Replace `ft_highpow2' function.
-
- * src/pfr/pfrobjs.c (pfr_face_get_kerning): Use `FT_MSB' instead of
- `ft_highpow2'.
-
- * src/base/ftutil.c, include/internal/ftobjs.h (ft_highpow2): Remove
- it.
-
-2014-07-15 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftcalc.c (FT_MSB): Utilize gcc builtins.
-
-2014-07-15 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Move assembler code back in the source file.
-
- FT_MulFix assembler used to reside in ftcalc.c before f47d263f1b.
-
- * include/config/ftconfig.h, builds/unix/ftconfig.in,
- builds/vms/ftconfig.h [FT_MULFIX_ASSEMBLER]: Move code from here...
-
- * src/base/ftcalc.c [FT_MULFIX_ASSEMBLER]: ... to here.
-
-2014-07-14 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Further clean up color bitmap conversion.
-
- * src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra): Stop
- using FT_MulFix and FT_DivFix since all calculations fit into 32 bits.
-
-2014-07-13 Werner Lemberg <wl@gnu.org>
-
- [truetype] Improve handling of buggy `prep' tables.
-
- In case of an error in the `prep' table, no longer try to execute it
- again and again. This makes FreeType handle endless loops in buggy
- fonts much faster.
-
- * src/truetype/ttobjs.h (TT_SizeRec): The fields `bytecode_ready'
- and `cvt_ready' are now negative if not initialized yet, otherwise
- they indicate the error code of the last run.
-
- * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep,
- tt_size_done_bytecode, tt_size_init_bytecode,
- tt_size_ready_bytecode, tt_size_init, tt_size_done, tt_size_reset):
- Updated.
-
- * src/truetype/ttgload.c (tt_loader_init): Updated.
- * src/truetype/ttinterp.c (TT_RunIns): Force reexecution of `fpgm'
- and `prep' only if we are in the `glyf' table.
-
-2014-07-12 Werner Lemberg <wl@gnu.org>
-
- * builds/vms/ftconfig.h: Synchronize.
- Problem reported by Alexei.
-
-2014-07-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Clean up bitmap conversion.
-
- * src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra): Use
- appropriate FT_DivFix and remove superfluous upscaling.
-
-2014-07-04 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Small optimization of the ancient code.
-
- * src/base/ftcalc.c (FT_MulDiv, FT_MulDiv_No_Round): Loosen up the
- condition for direct 32-bit calculations.
-
-2014-06-27 Werner Lemberg <wl@gnu.org>
-
- Fix Apple standard glyph names.
-
- * src/sfnt/ttpost.c (tt_post_default_names): Synchronize with
- `tools/glnames.py'
-
- Problem reported by Adam Twardoch <adam@fontlab.com>.
-
-2014-06-17 Werner Lemberg <wl@gnu.org>
-
- Partially revert commit from 2014-06-13.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Move
- declaration of `p_first' and `p_last' out of the loop.
-
-2014-06-17 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/freetype2.m4: s/AC_PATH_PROG/AC_PATH_TOOL/.
-
- This simplifies cross-compiling.
-
-2014-06-13 Werner Lemberg <wl@gnu.org>
-
- Fix more compiler warnings.
- Reported by Wojciech Mamrak <wmamrak@gmail.com>.
-
- * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
- Make integer constant unsigned.
-
- * src/sfnt/ttsbit.c (tt_face_load_strike_metrics)
- <TT_SBIT_TABLE_TYPE_SBIX>: Fix types.
- (tt_sbit_decoder_load_compound, tt_face_load_sbix_image): Add proper
- casts.
-
-2014-06-13 Werner Lemberg <wl@gnu.org>
-
- Fix compiler warnings.
- Reported by Wojciech Mamrak <wmamrak@gmail.com>.
-
- * src/autofit/afglobal.c (af_face_globals_compute_style_coverage),
- src/autofit/afmodule.c (af_property_set): Fix `signed' vs.
- `unsigned' issues.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Make compiler
- happy.
-
- * src/base/ftlcdfil.c (_ft_lcd_filter_fir): Use only four elements
- for `fir'.
- Fix `signed' vs. `unsigned' issues.
-
- * src/sfnt/sfobjs.c (WRITE_BYTE): Removed, unused.
- (WRITE_USHORT, WRITE_ULONG): Add proper casts.
-
- * src/truetype/ttgload.c (TT_Get_VMetrics): Add proper casts.
-
- * src/truetype/ttinterp.c (Ins_DELTAP): Add proper casts for `B1'
- and `B2'.
-
-2014-05-16 Alexey Petruchik <alexey.petruchik@gmail.com>
-
- [cmake] Add option to build OS X framework.
-
- * CMakeLists.txt: Update accordingly.
-
- * builds/mac/freetype-Info.plist: New file.
-
-2014-05-13 Pavel Koshevoy <pkoshevoy@gmail.com>
-
- * CMakeLists.txt (BASE_SRCS): Add missing `ftbdf.c'.
-
-2014-05-11 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix variable initializations.
-
- * src/autofit/afhints.c (af_glyph_hints_reload): Assign default
- values to `in_dir' and `out_dir' for all points.
-
-2014-05-11 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix crash with font `CabinSketch-Bold.ttf'.
-
- Problem reported by Ralf S. Engelschall <rse@engelschall.com>.
-
- * src/autofit/afhints.c (af_glyph_hints_reload): Fix threshold for
- finding first non-near point.
- Properly initialize non-near point deltas.
-
-2014-05-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add blue-zone support for Devanagari.
-
- This essentially moves the Devanagari script from the `Indic' hinter
- to the `Latin' hinter. Thanks to Girish Dalvi
- <girish.dalvi@gmail.com> for guidance with blue zone characters!
-
- * src/autofit/afblue.dat: Add blue zone data for Devanagari.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Devanagari standard characters and
- move data out of AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afranges.c: Move Devanagari data out of
- AF_CONFIG_OPTION_INDIC block.
- Move U+20B9, (new) Rupee sign, from Latin to Devanagari.
-
- * src/autofit/afstyles.h: Update Devanagari data; in particular, use
- AF_WRITING_SYSTEM_LATIN.
-
-2014-05-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix handling of neutral blue zones in stems.
-
- * src/autofit/afhints.h (AF_Edge_Flags): New value
- `AF_EDGE_NEUTRAL'.
-
- * src/autofit/aflatin.c (af_latin_hints_compute_blue_edges): Trace
- neutral blue zones with AF_EDGE_NEUTRAL.
- (af_latin_hint_edges): Skip neutral blue zones if necessary.
-
-2014-04-28 Werner Lemberg <wl@gnu.org>
-
- [autofit] Introduce neutral blue zones to the latin module.
-
- Such blue zones match either the top or the bottom of a contour. We
- need them for scripts where accent-like elements directly touch the
- base character (for example, some vowel signs in Devanagari, cf.
- U+0913 or U+0914).
-
- * src/autofit/afblue.hin (AF_BLUE_PROPERTY_LATIN_NEUTRAL): New
- property.
-
- * src/autofit/afblue.h: Regenerated.
-
- * src/autofit/aflatin.h (AF_LATIN_IS_NEUTRAL_BLUE): New macro.
- (AF_LATIN_BLUE_NEUTRAL): New enumeration value.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues,
- af_latin_hints_compute_blue_edges): Handle neutral blue zones.
-
-2014-04-25 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/hbshim.c: Partially revert commit from 2014-04-17.
-
- Using input glyph coverage data is simply wrong.
-
- Problem reported by Nikolaus Waxweiler <madigens@gmail.com> and
- Mantas MikulÄ—nas <grawity@gmail.com>.
-
-2014-04-23 Werner Lemberg <wl@gnu.org>
-
- * src/raster/ftraster.c (Vertical_Sweep_Span): Use drop-out mode.
-
- This spot has been missed while introducing support for various
- drop-out modes years ago (including no drop-out mode, which this
- commit fixes).
-
- Problem reported by Patrick Thomas <pthomas505@gmail.com>.
-
-2014-04-22 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/pngshim.c (error_callback): s/longjmp/ft_longjmp/.
-
-2014-04-20 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix Savannah bug #42148.
-
- The adaptation of the cjk auto-hinter module to blue stringsets in
- 2013-08-25 had three severe bugs. Mea culpa.
-
- 1. Contrary to the latin auto-hinter, characters for reference and
- overshoot values of a blue zone are specified separately. Due to
- the screwed-up change it didn't work at all.
-
- 2. A boolean comparison was erroneously replaced with a cast,
- causing invalid results with the `^' operator later on. The
- visual artifact caused by this problem is the topic of the bug
- report.
-
- 3. Two flag values were inverted, causing incorrect assignment of
- reference and overshoot values.
-
- * src/autofit/afblue.dat: Fix CJK bluestrings, introducing a new
- syntax to have both reference and overshoot characters in a single
- string. This is error #1.
- Add extensive comments.
-
- * src/autofit/afblue.hin (AF_BLUE_PROPERTY_CJK_FILL): Removed, no
- longer used.
- (AF_BLUE_PROPERTY_CJK_TOP, AF_BLUE_PROPERTY_CJK_HORIZ): Fix values.
- This is error #3.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_blues): Correct error #1.
- Use character `|' to separate characters for reference and overshoot
- values.
- Improve tracing messages, synchronizing them with the latin
- auto-hinter.
- (af_cjk_hints_compute_blue_edges): Fix value of `is_top_right_blue'.
- This is error #2.
- (af_cjk_align_linked_edge): Add tracing message.
-
- * src/autofit/afcjk.h (AF_CJK_IS_FILLED_BLUE): Removed, no longer
- used.
-
-2014-04-17 Werner Lemberg <wl@gnu.org>
-
- [autofit] More coverage fixes for complex scripts.
-
- * src/autofit/hbshim.c (af_get_coverage): Merge input glyph coverage
- of GSUB lookups into output coverage. Otherwise, ligatures are not
- handled properly.
- Don't check blue zone characters for default coverage.
-
-2014-04-17 Werner Lemberg <wl@gnu.org>
-
- Make `FT_Get_SubGlyph_Info' actually work.
-
- * src/base/ftobjs.c (FT_Get_SubGlyph_Info): Return FT_Err_Ok
- if there is no error.
-
-2014-04-15 Werner Lemberg <wl@gnu.org>
-
- [afblue.pl]: Minor improvements.
-
- * src/tools/afblue.pl: Allow whitespace before comments.
- Ignore whitespace in strings.
-
-2014-04-14 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve coverage handling.
-
- * src/autofit/hbshim.c (af_get_coverage): Don't exclude glyphs
- appearing in the GPOS table if we are processing the default
- coverage.
-
-2014-04-13 David Weber <weber.aulendorf@googlemail.com>
-
- [smooth] Fix stand-alone compilation.
-
- * src/smooth/ftgrays.c (FT_BEGIN_STMNT, FT_END_STMNT): Define.
-
-2014-04-12 Werner Lemberg <wl@gnu.org>
-
- [autofit] Redesign the recognition algorithm of strong points.
-
- In particular, local extrema without horizontal or vertical segments
- are better recognized:
-
- + A + D
- \ /
- \ /
- \ /
- \ /
- \ + C
- \ /
- B +/
-
- If the distances AB and CD are large, point B wasn't previously
- detected as an extremum since the `ft_corner_is_flat' function
- `swallowed' BC regardless of its direction, tagging point B as weak.
- The next iteration started at B and made `ft_corner_is_flat' swallow
- point C, tagging it as weak also, et voilà.
-
- To improve that, another pass gets now performed before calling
- `ft_corner_is_flat' to improve the `topology' of an outline: A
- sequence of non-horizontal or non-vertical vectors that point into
- the same quadrant are handled as a single, large vector.
-
- Additionally, distances of near points are now accumulated, which
- makes the auto-hinter handle them as if they were prepended to the
- next non-near vector.
-
- This generally improves the auto-hinter's rendering results.
-
- * src/autofit/afhints.c (af_glyph_hints_reload): Implement it.
-
- * src/autofit/afhints.h (AF_FLAGS): Remove no longer used flag
- `AF_FLAG_NEAR'.
-
-2014-04-05 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve scoring algorithm for identifying stems.
-
- Problem reported by Karsten Lücke <karsten.luecke@kltf.de>.
-
- The new algorithm takes care of the width of stems: If the distance
- between two segments is larger than the largest stem width, the
- demerits quickly increase for larger distances. This improves
- hinting of slanted fonts (especially if the inner parts of serifs
- have non-horizontal `shoulders'), avoiding false stem links.
-
- * src/autofit/aflatin.c (af_latin_hints_link_segments): Use largest
- stem width (if available) to compute better demerits for distances
- between stems.
- (af_latin_hints_detect_features): Pass stem width array and array
- size.
- (af_latin_metrics_init_widths): Updated to use original algorithm.
- (af_latin_hints_apply): Updated to use new algorithm.
-
- * src/autofit/aflatin.h: Updated.
- * src/autofit/afcjk.c: Updated.
-
-2014-04-03 Werner Lemberg <wl@gnu.org>
-
- Don't require `gzip' module for `sfnt'.
-
- Reported by Preet <prismatic.project@gmail.com>.
-
- * src/sfnt/sfobjs.c (woff_open_font): Guard use of
- FT_Gzip_Uncompress with FT_CONFIG_OPTION_USE_ZLIB.
-
-2014-03-27 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #38235.
-
- Work around a bug in pkg-config version 0.28 and earlier: If a
- variable value gets surrounded by doublequotes (in particular values
- for the `prefix' variable), the prefix override mechanism fails.
-
- * builds/unix/freetype2.in: Don't use doublequotes.
- * builds/unix/unix-def.in (freetype.pc): Escape spaces in directory
- names with backslashes.
-
-2014-03-24 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #41946.
-
- Based on a patch from Marek Kašík <mkasik@redhat.com>.
-
- * builds/unix/configure.raw (LIBS_CONFIG): Remove.
- * builds/unix/freetype-config.in (libs): Hard-code value.
- * builds/unix/unix-def.in: Updated.
-
-2014-03-22 Werner Lemberg <wl@gnu.org>
-
- Another revert for the change from 2014-03-18.
-
- Problem reported by Nikolaus Waxweiler <madigens@gmail.com>.
-
- * src/base/ftcalc.c (FT_MulFix): Ensure that an `FT_MulFix' symbol
- gets always exported.
-
-2014-03-20 Werner Lemberg <wl@gnu.org>
-
- CMakeLists.txt: Another fix for include directories.
-
- Problem reported by Taylor Holberton <taylorcholberton@gmail.com>.
-
-2014-03-19 Werner Lemberg <wl@gnu.org>
-
- CMakeLists.txt: Fix include directories.
-
- Problem reported by Taylor Holberton <taylorcholberton@gmail.com>.
-
-2014-03-19 Werner Lemberg <wl@gnu.org>
-
- Partially revert last commit.
-
- Found by Alexei.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Initializing
- those variables is plain wrong, since we are in a loop.
-
-2014-03-18 Sean McBride <sean@rogue-research.com>
- Werner Lemberg <wl@gnu.org>
-
- Fix clang warnings.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Initialize
- some variables.
-
- * src/base/ftcalc.c (FT_MulFix): Only use code if
- `FT_MULFIX_INLINED' is not defined.
-
- * src/bdf/bdfdrivr.c (bdf_cmap_class), src/cache/ftcbasic.c
- (ftc_basic_image_family_class, ftc_basic_image_cache_class,
- ftc_basic_sbit_family_class, ftc_basic_sbit_cache_class),
- src/cache/ftccmap.c (ftc_cmap_cache_class), src/cache/ftcmanag.c
- (ftc_size_list_class, ftc_face_list_class), src/pcf/pcfdrivr.c
- (pcf_cmap_class), src/pfr/pfrdrivr.c (pfr_metrics_service_rec): Make
- function static.
-
- * src/type1/t1driver.c (t1_ps_get_font_value): Remove redundant
- code.
-
-2014-03-17 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #41869.
-
- This works around a problem with HarfBuzz (<= 0.9.26), which doesn't
- validate glyph indices returned by
- `hb_ot_layout_lookup_collect_glyphs'.
-
- * src/autofit/hbshim.c (af_get_coverage): Guard `idx'.
-
- * docs/CHANGES: Updated.
-
-2014-03-14 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/configure.raw: Don't show error messages of `which'.
-
-2014-03-09 Alan Coopersmith <alan.coopersmith@oracle.com>
-
- Fix cppcheck 1.64 warning.
-
- * src/autofit/afglobal.c (af_face_globals_new): Catch NULL pointer
- dereference in case of error.
-
-2014-03-09 Sean McBride <sean@rogue-research.com>
-
- * src/sfnt/ttcmap.c (tt_face_build_cmaps): Remove clang warning.
-
-2014-03-06 Werner Lemberg <wl@gnu.org>
-
- * Version 2.5.3 released.
- =========================
-
-
- Tag sources with `VER-2-5-3'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.5.3.
-
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/index.html,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualc/index.html,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj,
- builds/windows/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.5.2/2.5.3/, s/252/253/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 3.
-
- * builds/unix/configure.raw (version_info): Set to 17:2:11.
- * CMakeLists.txt (VERSION_PATCH): Set to 3.
- * docs/CHANGES: Updated.
-
-2014-03-06 Werner Lemberg <wl@gnu.org>
-
- Fixes for compilation with C++.
-
- * src/autofit/hbshim.c (scripts): Change type to `hb_script_t'.
- (af_get_coverage): Updated.
- (COVERAGE): Add cast.
-
-2014-03-06 Sean McBride <sean@rogue-research.com>
-
- Remove more clang analyzer warnings.
-
- * src/bdf/bdflib.c (_bdf_readstream), src/truetype/ttgload.c
- (TT_Load_Glyph): Remove dead stores.
-
-2014-03-05 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/configure.raw: Simplify.
-
-2014-03-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix a bug in configure in library dependency setting
- Reported in https://bugs.freedesktop.org/show_bug.cgi?id=75652.
-
- * builds/unix/configure.raw: Use `x"${xxx}" != xno' style.
-
-2014-03-04 Werner Lemberg <wl@gnu.org>
-
- Minor fix for `make devel'.
-
- * builds/freetype.mk (INCLUDE_FLAGS) [DEVEL_DIR]: Don't use
- pkg-config for bzip2 since not all GNU/Linux distributions have
- `bzip2.pc' (and the header file `bzlib.h' is located in /usr/include
- normally).
-
-2014-03-04 Sean McBride <sean@rogue-research.com>
-
- Fix several clang static analyzer dead store warnings.
-
- * src/autofit/afhints.c (af_glyph_hints_reload,
- af_glyph_hints_align_weak_points): Remove unnecessary assignments.
-
- * src/bdf/bdflib.c (bdf_font_load): Ditto.
-
- * src/pshinter/pshalgo.c (psh_glyph_compute_extrema,
- psh_glyph_interpolate_other_points): Ditto.
-
- * src/type1/t1load.c (T1_Set_MM_Blend): Ditto.
-
-2014-03-03 Werner Lemberg <wl@gnu.org>
-
- Rewrite library option handling in `configure'.
-
- o Introduce `auto' value for `--with-XXX' library options; this is
- now the default.
-
- o First use `pkg-config' for library detection, then fall back to
- other tests.
-
- * builds/unix/configure.raw (--with-zlib, --with-bzip2, --with-png,
- --with-harfbuzz): Rewrite.
- Use new `xxx_reqpriv', `xxx_libpriv', and `xxx_libstaticconf'
- variables to collect data for `freetype2.pc' and `freetype-config'.
- (FT2_EXTRA_LIBS): Renamed to ...
- (ft2_extra_libs): This since it gets no longer substituted.
- (REQUIRES_PRIVATE, LIBS_PRIVATE, LIBS_CONFIG, LIBSSTATIC_CONFIG):
- New output variables, replacing `XXX_PKG' and `LIBXXX'.
- Add notice at the end of `configure' showing the library
- configuration.
-
- * builds/unix/freetype-config.in (--static): New command line
- option.
- (libs): Updated.
- (staticlibs): New variable, to be used if `--static' is given.
- * docs/freetype-config.1: Document `--static'.
-
- * builds/unix/freetype2.in, builds/unix/unix-def.in: Updated.
-
-2014-03-01 Werner Lemberg <wl@gnu.org>
-
- Avoid `long long' warnings with older gcc compilers.
- Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.
-
- * builds/unix/configure.raw: Don't use gcc's `-pedantic' flag for
- versions < 4.6. This is especially needed for Max OS X since this
- OS runs a gcc variant (or emulation) based on version 4.2.1.
-
-2014-03-01 Werner Lemberg <wl@gnu.org>
-
- * docs/INSTALL.CROSS: Revised and updated.
-
-2014-03-01 Werner Lemberg <wl@gnu.org>
-
- Make `make clean' remove `freetype2.pc'.
-
- This is a generated file at build time, not configure time.
-
- * builds/unix/unix-def.in (DISTCLEAN): Move `freetype2.pc' to ...
- (CLEAN): This variable.
-
-2014-03-01 Werner Lemberg <wl@gnu.org>
-
- Use pkg-config for detecting libpng and libbz2 also.
-
- * builds/unix/configure.raw (HAVE_PKG): New variable.
- Search for libbz2 using `pkg-config'; s/BZ2/BZIP2/.
- Search for libpng using `pkg-config'.
- Fix definition of `LIBHARFBUZZ' variable.
- * builds/unix/freetype-config.in ($libs): Updated.
- * builds/unix/freetype2.in: Add `URL' field.
- Update `Requires.private' and `Libs.private'.
- * builds/unix/unix-def.in: Updated.
-
-2014-03-01 Werner Lemberg <wl@gnu.org>
-
- Add configure support for HarfBuzz.
-
- * builds/unix/pkg.m4: New file.
- * builds/unix/configure.raw: Search for libharfbuzz using
- `pkg-config'.
- Add `--without-harfbuzz' option.
- * builds/unix/freetype-config.in, builds/unix/freetype2.in,
- builds/unix/unix-def.in (freetype-config, freetype2.pc): Handle
- HarfBuzz.
-
- * docs/INSTALL.UNIX: Document interdependency of Freetype with
- HarfBuzz.
-
-2014-02-28 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [cff] Math simplifications.
-
- * src/cf2blues.c (cf2_blues_init): Use `FT_MulDiv'.
- * src/cf2ft.c (cf2_getScaleAndHintFlag): Use simple division.
-
-2014-02-28 Dave Arnold <darnold@adobe.com>
-
- [cff] Fix Savannah bug #41697, part 2.
-
- * src/cff/cf2ft.c (cf2_initLocalRegionBuffer,
- cf2_initGlobalRegionBuffer): It is possible for a charstring to call
- a subroutine if no subroutines exist. This is an error but should
- not trigger an assert. Split the assert to account for this.
-
-2014-02-28 Dave Arnold <darnold@adobe.com>
-
- [cff] Fix Savannah bug #41697, part 1.
-
- * src/cff/cf2hints.c (cf2_hintmap_build): Return when `hintMask' is
- invalid. In this case, it is not safe to use the length of
- `hStemHintArray'; the exception has already been recorded in
- `hintMask'.
-
-2014-02-26 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #41696.
-
- * src/sfnt/ttcmap.c (tt_cmap0_validate, tt_cmap2_validate,
- tt_cmap4_validate, tt_cmap14_validate): Fix limit tests.
-
-2014-02-26 Werner Lemberg <wl@gnu.org>
-
- [winfnt] Fix Savannah bug #41694.
-
- * src/winfonts/winfnt.c (FNT_Load_Glyph): Check glyph offset.
-
-2014-02-26 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix Savannah bug #41693.
-
- * src/cff/cffload.c (CFF_Load_FD_Select): Reject empty array.
-
-2014-02-26 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #41692.
-
- bdflib puts data from the input stream into a buffer in chunks of
- 1024 bytes. The data itself gets then parsed line by line, simply
- increasing the current pointer into the buffer; if the search for
- the final newline character exceeds the buffer size, more data gets
- read.
-
- However, in case the current line's end is very near to the buffer
- end, and the keyword to compare with is longer than the current
- line's length, an out-of-bounds read might happen since `memcmp'
- doesn't stop properly at the string end.
-
- * src/bdf/bdflib.c: s/ft_memcmp/ft_strncmp/ to make comparisons
- stop at string ends.
-
-2014-02-17 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [autofit] Fix `make multi' compilation.
-
- * src/autofit/hbshim.c: Include `afglobal.h' and `aftypes.h'.
-
-2014-02-19 Werner Lemberg <wl@gnu.org>
- Simon Bünzli <zeniko@gmail.com>
-
- Fix Savannah bug #32902.
-
- Patch taken from
-
- https://code.google.com/p/sumatrapdf/source/browse/trunk/ext/_patches/freetype2.patch?spec=svn8620&r=8620#87
-
- with slight modifications.
-
- * src/type1/t1parse.c (T1_Get_Private_Dict): Add heuristic test to
- handle fonts that incorrectly use \r at the beginning of an eexec
- block.
-
-2014-02-19 Simon Bünzli <zeniko@gmail.com>
-
- Fix Savannah bug #41590.
-
- * src/type1/t1load.c (parse_encoding): Protect against invalid
- number.
-
-2014-02-12 Dave Arnold <darnold@adobe.com>
-
- [cff] Optimize by using `FT_MulDiv'.
- Suggested by Alexei.
-
- * src/cff/cf2font.c (cf2_computeDarkening): Do it.
-
-2014-02-12 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #41465.
-
- * builds/unix/unix-def.in (CLEAN): Add `freetype-config'.
- (DISTCLEAN): Remove `freetype-config'.
-
-2014-02-08 Sean McBride <sean@rogue-research.com>
-
- Fix clang static analyzer and compiler warnings.
-
- * src/autofit/afhints.c (af_glyph_hints_align_weak_points),
- src/autofit/afloader (af_loader_load_g) <FT_GLYPH_FORMAT_COMPOSITE>,
- src/base/ftcalc.c (FT_MSB), src/base/ftoutln.c
- (FT_Outline_Decompose), src/bdf/bdfdrivr.c (bdf_interpret_style),
- src/cff/cffparse.c (cff_parse_integer), src/cid/cidparse.c
- (cid_parser_new), src/pfr/pfrload.c (pfr_phy_font_load),
- src/raster/ftraster.c (Decompose_Curve), src/sfnt/sfdriver.c
- (sfnt_get_ps_name), src/sfnt/ttcmap.c (tt_cmap12_next,
- tt_cmap13_next), src/smooth/ftgrays.c (gray_hline): Remove dead
- code.
-
- * src/autofit/afmodule.c (af_property_get_face_globals,
- af_property_set, af_property_get), src/base/ftbitmap.c
- (ft_gray_for_premultiplied_srgb_bgra): Make functions static.
-
- * src/base/ftobjs.c (ft_remove_renderer): Protect against
- library == NULL.
- (ft_property_do): Make function static.
-
- * src/base/ftrfork.c: Include `ftbase.h'.
-
- * src/sfnt/ttsbit.c (tt_face_load_sbix_image)
- [!FT_CONFIG_OPTION_USE_PNG], src/type1/t1gload.c
- (T1_Compute_Max_Advance): Avoid compiler warning.
-
- * src/truetype/ttinterp.c (TT_New_Context): Reduce scope of
- variable.
-
-2014-02-08 Werner Lemberg <wl@gnu.org>
-
- Fix Windows build directories.
-
- The build target is now `windows' instead of `win32'.
-
- Problem reported by Nickolas George <darknova.clan@gmail.com>.
-
- * builds/modules.mk: Don't use `win32' and `win16' (!) but
- `windows'.
-
- * builds/windows/detect.mk, builds/windows/win32-def.mk:
- s/win32/windows/.
-
-2014-02-08 Eugen Sawin <esawin@mozilla.com>
-
- Fix Savannah bug #41507.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap)
- [!FT_CONFIG_OPTION_USE_PNG] <17, 17, 19>: Fix error handling.
-
-2014-02-08 Dave Arnold <darnold@adobe.com>
-
- [cff] Fix minor performance bug.
-
- * src/cff/cf2font.c (cf2_font_setup): Darkening amount and blue zone
- calculations are now cached and not recomputed on each glyph.
-
-2014-02-05 Werner Lemberg <wl@gnu.org>
-
- Fix problems with perl 5.8.8 as distributed with current MinGW.
-
- * src/tools/afblue.pl: Work-around for Perl bug #63402.
- (string_re): Avoid `possessive quantifiers', which have been
- introduced in Perl version 5.10.
-
-2014-02-04 Werner Lemberg <wl@gnu.org>
-
- Fix compilation with MinGW.
-
- Right now, compilation out of the box with latest MinGW is broken
- due to bugs in header files of mingwrt 4.0.3 in strict ANSI mode,
- cf.
-
- https://sourceforge.net/p/mingw/bugs/2024/
- https://sourceforge.net/p/mingw/bugs/2046/
-
- * builds/unix/configure.raw: Don't set `-ansi' flag for MinGW.
-
-2014-02-04 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor fix.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths),
- src/autofit/aflatin.c (af_latin_metrics_init_widths): Fix handling
- of alternative standard characters.
- This also fixes a compilation warning in non-debug mode.
-
-2014-02-03 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix Savannah bug #41363.
-
- * src/cff/cf2ft.c (cf2_checkTransform): Convert assertion into
- parameter check.
- (cf2_decoder_parse_charstrings): Call `cf2_checkTransform' only if
- we are scaling the outline.
- (cf2_getPpemY): Remove problematic assertion.
-
-2014-01-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Introduce two more slots for standard characters.
-
- This is useful for OpenType features like `c2sc' (caps to small
- caps) that don't have lowercase letters by definition, or other
- features that mainly operate on numerals.
-
- * src/autofit/afscript.h: Add more standard characters.
-
- * src/autofit/aftypes.h: Update use of `SCRIPT' macro.
- (AF_ScriptClassRec): Add members to hold two more standard
- characters.
- (AF_DEFINE_SCRIPT_CLASS): Updated.
-
- * src/autofit/afglobal.c, src/autofit/afglobal.h,
- * src/autofit/afpic.c, src/autofit/afranges.h, src/autofit/hbshim.c:
- Update use of `SCRIPT' macro.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths),
- src/autofit/aflatin.c (af_latin_metrics_init_widths): Scan two more
- standard characters.
-
-2014-01-24 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #41320.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues)
- <AF_LATIN_IS_LONG_BLUE>: Avoid negative index of `last'.
-
-2014-01-23 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #41310.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap) <glyph_format==5>:
- Don't check metrics, which this format doesn't have.
- This is another correction to the commit from 2013-11-21.
-
-2014-01-23 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #41309.
-
- * src/type1/t1load.c (t1_parse_font_matrix): Properly handle result
- of `T1_ToFixedArray'.
-
- * src/cid/cidload.c (cid_parse_font_matrix): Synchronize with
- `t1_parse_font_matrix'.
-
- * src/type42/t42parse.c (t42_parse_font_matrix): Synchronize with
- `t1_parse_font_matrix'.
- (t42_parse_encoding): Synchronize with `t1_parse_encoding'.
-
- * src/psaux/psobjs.c (ps_parser_load_field) <T1_FIELD_TYPE_BBOX>,
- <T1_FIELD_TYPE_MMOX>: Properly handle result of `ps_tofixedarray'.
-
-2014-01-22 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/hbshim.c (af_get_coverage): Fix memory leaks.
-
-2014-01-16 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve tracing of style coverages.
-
- * include/internal/fttrace.h: Add `afglobal' for tracing style
- coverages.
-
- * src/autofit/afglobal.c: Include FT_INTERNAL_DEBUG_H.
- (FT_COMPONENT): Define.
- (af_face_globals_compute_style_coverage): Trace `gstyles' array
- data.
-
-2014-01-09 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #41158.
-
- * builds/unix/install.mk (install): Create man page directory.
-
-2014-01-08 Chongyu Zhu <lembacon@gmail.com>
-
- [arm] Fix Savannah bug #41138, part 2.
-
- * builds/unix/ftconfig.in (FT_MulFix_arm), include/config/ftconfig.h
- (FT_MulFix_arm), src/truetype/ttinterp.c (TT_MulFix14_arm): Fix
- preprocessor conditionals for `add.w'.
-
-2014-01-08 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix Savannah bug #41138, part 1.
-
- * src/tools/afblue.pl <Handling #endif>: Produce correct auxiliary
- enumeration names for generated `#else'.
-
- * src/autofit/afblue.h: Regenerated.
-
-2014-01-06 Werner Lemberg <wl@gnu.org>
-
- Add manual page for `freetype-config'.
- Contributed by Nis Martensen <nis.martensen@web.de>.
-
- * docs/freetype-config.1: New file.
-
- * builds/unix/unix-def.in (mandir): Define.
- * builds/unix/install.mk (install, uninstall): Handle manpage.
-
-2014-01-05 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor fixes for `afblue.pl'.
-
- * src/tools/afblue.pl (aux_name): Don't use `reverse'.
- <Handling #endif>: Use proper indentation for generated `#else'.
-
- * src/autofit/afblue.h: Regenerated.
-
-2014-01-04 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix Indic scripts.
-
- Split the single, incorrect Indic entry into separate scripts so
- that the covered ranges are the same: Bengali, Devanagari, Gujarati,
- Gurmukhi, Kannada, Limbu, Malayalam, Oriya, Sinhala, Sundanese,
- Syloti Nagri, Tamil, Telugu, and Tibetan. At the same time, remove
- entries for Meetei Mayek and Sharada – the Unicode ranges were
- incorrect (and nobody has complained about that), fonts are scarce
- for those scripts, and the Indic auto-hinter support is rudimentary
- anyways.
-
- * src/autofit/afscript.h: Updated, using AF_CONFIG_OPTION_INDIC and
- AF_CONFIG_OPTION_CJK.
-
- * src/autofit/afstyles.h (STYLE_DEFAULT_INDIC): New auxiliary macro.
- Use it, together with AF_CONFIG_OPTION_INDIC and
- AF_CONFIG_OPTION_CJK, to update.
-
- * src/autofit/afranges.c [AF_CONFIG_OPTION_INDIC]: Updated.
- [!AF_CONFIG_OPTION_INDIC, !AF_CONFIG_OPTION_CJK]: Removed.
- Sort entries by tags.
-
-2014-01-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Thinko.
-
- * src/autofit/hbshim.c (af_get_char_index): Similar to
- `af_get_coverage', reject glyphs which are not substituted.
-
-2014-01-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix handling of default coverages.
-
- With this commit, the implementation of coverage handling is
- completed.
-
- * src/autofit/hbshim.c (af_get_coverage): Exit early if nothing to
- do.
- Reject coverages which don't contain appropriate glyphs for blue
- zones.
-
-2014-01-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix handling of default coverages.
-
- * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
- First handle non-default coverages, then the default coverage of the
- default script, and finally the other default coverages.
-
-2014-01-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix scaling of HarfBuzz shaping.
-
- * src/autofit/hbshim.c (af_get_char_index): Scale to units per EM.
-
-2014-01-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Better ftgrid support.
-
- * src/autofit/afhints.c (af_glyph_hints_get_segment_offset): Add
- parameters `is_blue' and `blue_offset'.
-
-2014-01-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Remove some styles.
-
- * src/autofit/afcover.h: Remove coverages for alternative fractions,
- denominators, numerators, and fractions.
-
- * src/autofit/afstyles.h (META_STYLE_LATIN): Updated.
-
-2014-01-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add more styles.
-
- * src/autofit/afstyles.h (STYLE_LATIN, META_STYLE_LATIN): New
- auxiliary macros; use them to define styles for Cyrillic, Greek, and
- Latin.
-
- * src/autofit/afcover.h: Remove coverage for oldstyle figures.
- Since those digits are used in combination with ordinary letters, it
- makes no sense to handle them separately.
-
- * src/autofit/afglobal.c (af_face_globals_get_metrics): Don't limit
- `options' parameter to 4 bits.
-
-2014-01-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix style assignments to glyphs.
-
- * src/autofit/hbshim.c (af_get_coverage)
- [FT_CONFIG_OPTION_USE_HARFBUZZ]: Scan GPOS coverage of features also
- so that we can skip glyphs that have both GSUB and GPOS data.
-
-2014-01-01 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/hbshim.c: s/{lookups,glyphs}/gsub_{lookups,glyphs}/.
-
-2014-01-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Implement and use `af_get_char_index' with HarfBuzz.
-
- * src/autofit/hbshim.c (COVERAGE) [FT_CONFIG_OPTION_USE_HARFBUZZ]:
- Redefine to construct HarfBuzz features.
- (af_get_char_index) [FT_CONFIG_OPTION_USE_HARFBUZZ]: Rewritten.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Use
- `y_offset' to adjust `best_y'.
-
-2013-12-31 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/AF_STYLE_...._DEFAULT/AF_STYLE_...._DFLT/i.
-
-2013-12-31 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix interface of `af_get_char_index'.
-
- * src/autofit/hbshim.c (af_get_char_index): Return error value.
- Add argument for y offset (to be used in a yet-to-come patch).
-
- * src/autofit/hbshim.h, src/autofit/afcjk.c,
- src/autofit/aflatin.c: Updated.
-
-2013-12-30 Werner Lemberg <wl@gnu.org>
-
- [autofit] Don't combine multiple features into one set.
-
- Combining them, as originally envisioned, would lead to much more
- complicated code, as investigations have shown meanwhile. The major
- drawback is that we run out of available style slots much earlier.
- However, this is only a theoretical issue since we don't support a
- large number of scripts currently.
-
- * src/autofit/afcover.h: Replace `COVERAGE_{1,2,3}' macros with
- a single-element `COVERAGE' macro, sort the elements by the feature
- tags, and add entry for `ruby'.
-
- * src/autofit/aftypes.h: Updated.
- * src/autofit/hbshim.c: Updated.
-
-2013-12-28 Werner Lemberg <wl@gnu.org>
-
- [autofit] Code shuffling to reduce use of cpp macros.
-
- * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
- Call `af_get_coverage' unconditionally.
-
- * src/autofit/autofit.c: Include `hbshim.c' unconditionally.
-
- * src/autofit/hbshim.c (af_get_coverage)
- [!FT_CONFIG_OPTION_USE_HARFBUZZ]: Provide dummy function.
-
- * src/autofit/hbshim.h: Provide function declarations
- unconditionally.
-
-2013-12-28 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add wrapper function for `FT_Get_Char_Index'.
-
- Yet-to-come changes will provide HarfBuzz functionality for the new
- function.
-
- * src/autofit/hbshim.c (af_get_char_index): New function.
- * src/autofit/hbshim.h: Updated.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths,
- af_cjk_metrics_init_blues, af_cjk_metrics_check_digits): Updated.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_widths,
- af_latin_metrics_init_blues, af_latin_metrics_check_digits):
- Updated.
-
-2013-12-28 Werner Lemberg <wl@gnu.org>
-
- [autofit] Use `global' HarfBuzz font object.
-
- We now use `hb_font' instead of `hb_face' since yet-to-come changes
- need this.
-
- * src/autofit/afglobal.h: Include `hbshim.h'.
- (AF_FaceGlobalsRec) [FT_CONFIG_OPTION_USE_HARFBUZZ]: New member
- `hb_font'.
-
- * src/autofit/afglobal.c (af_face_globals_new)
- [FT_CONFIG_OPTION_USE_HARFBUZZ]: Create `hb_font'.
- (af_face_globals_free) [FT_CONFIG_OPTION_USE_HARFBUZZ]: Destroy
- `hb_font'.
-
- * src/autofit/hbshim.h: Include HarfBuzz headers.
-
- * src/autofit/hbshim.c: Include `hbshim.h' instead of HarfBuzz
- headers.
- (af_get_coverage): Updated.
-
-2013-12-27 Werner Lemberg <wl@gnu.org>
-
- [autofit] Handle `DFLT' OpenType script for coverages.
-
- * include/ftautoh.h: Document new `default-script' property.
-
- * src/autofit/hbshim.c (af_get_coverage): Use `AF_FaceGlobals' for
- type of first parameter.
- (script_tags): Add one more element.
- (af_get_coverage): Adjust `script_tags' to handle `DFLT' script tag.
-
- * src/autofit/hbshim.h: Updated.
-
- * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
- Updated.
-
- * src/autofit/afglobal.h (AF_SCRIPT_DEFAULT): New macro.
-
- * src/autofit/afmodule.h (AF_ModuleRec): New `default_script'
- member.
-
- * src/autofit/afmodule.c (af_property_set, af_property_get): Handle
- `default-script' property.
- (af_autofitter_init): Updated.
-
-2013-12-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [ftrfork] Fix the face order difference between POSIX and Carbon.
-
- The fragmented resources in Suitcase and .dfont should be reordered
- when `POST' resource for Type1 is being restored, but reordering of
- sfnt resources induces the different face order. Now the ordering
- is restricted to `POST' resource only, to prevent the different
- order issue (e.g. the face index in the fontconfig cache generated
- with Carbon framework is incompatible with that by FreeType 2
- without Carbon framework.) Found by Khaled Hosny and Hin-Tak Leung.
-
- http://lists.gnu.org/archive/html/freetype-devel/2013-02/msg00035.html
- http://lists.gnu.org/archive/html/freetype-devel/2013-12/msg00027.html
-
- * src/base/ftrfork.c (FT_Raccess_Get_DataOffsets): Add a switch
- `sort_by_res_id' to control the fragmented resource ordering.
- * include/internal/ftrfork.h: Declare new switch.
- * src/base/ftobjs.c (IsMacResource): Enable the sorting for `POST'
- resource, and disable the sorting for `sfnt' resource.
-
-2013-12-25 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #40997.
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Only use OR operator to
- adjust face flags since FT_FACE_FLAG_EXTERNAL_STREAM might already
- be set.
- * src/cff/cffobjs.c (cff_face_init): Ditto.
- * src/cid/cidobjs.c (cid_face_init): Ditto.
- * src/pcf/pcfread.c (pcf_load_font): Ditto.
- * src/pfr/pfrobjs.c (pfr_face_init): Ditto.
- * src/type1/t1objs.c (T1_Face_Init): Ditto.
- * src/type42/t42objs.c (T42_Face_Init): Ditto.
- * src/winfonts/winfnt.c (FNT_Face_Init): Ditto.
-
-2013-12-21 Werner Lemberg <wl@gnu.org>
-
- [autofit] Introduce `coverages'.
-
- Coverages are the interface to the HarfBuzz library to access
- OpenType features for handling glyphs not addressable by the cmap.
-
- Right now, compilation of HarfBuzz is only added to the development
- build. A solution for standard build mode will be delayed until
- HarfBuzz gets split into two libraries to avoid mutual dependencies
- between FreeType and HarfBuzz.
-
- Note that this is only a first step in handling coverages, basically
- providing the framework only. Code for handling selected OpenType
- features (this is, actually using the data in `afcover.h') will
- follow.
-
- * devel/ftoption.h, include/config/ftoption.h
- (FT_CONFIG_OPTION_USE_HARFBUZZ): New macro.
-
- * src/autofit/hbshim.c, src/autofit/hbshim.h, src/autofit/afcover.h:
- New files.
-
- * src/autofit/afscript.h: Add HarfBuzz script name tags.
-
- * src/autofit/afstyles.h: Add default coverage enumeration values.
-
- * src/autofit/aftypes.h: Update use of `SCRIPT' and `STYLE' macros.
- (AF_Coverage): New enumeration (generated by `afcover.h').
- (AF_StyleClassRec): New member `coverage'.
- (AF_DEFINE_STYLE_CLASS): Updated.
-
- * include/internal/fttrace.h: Add `afharfbuzz' for tracing coverage
- data.
-
- * src/autofit/afglobal.h: Update use of `SCRIPT' and `STYLE' macros.
- (AF_SCRIPT_FALLBACK): Renamed to ...
- (AF_STYLE_FALLBACK): ... this.
-
- * src/autofit/afglobal.c: Include `hbshim.c'.
- Update use of `SCRIPT' and `STYLE' macros.
- (af_face_globals_compute_style_coverage)
- [FT_CONFIG_OPTION_USE_HARFBUZZ]: Call `af_get_coverage'.
- Update.
-
- * src/autofit/afmodule.h (AF_ModuleRec):
- s/fallback_script/fallback_style/.
-
- * src/autofit/afmodule.c (af_property_set): Adapt handling of
- `fallback-script' property to set a fallback style.
- (af_property_get, af_autofitter_init): Updated.
-
- * src/autofit/afpic.c: Update use of `SCRIPT' and `STYLE' macros.
-
- * src/autofit/afranges.h: Update use of `SCRIPT' macro.
-
- * src/autofit/autofit.c [FT_CONFIG_OPTION_USE_HARFBUZZ]: Include
- `hbshim.c'.
-
- * src/autofit/rules.mk (AUTOF_DRV_SRC): Add `hbshim.c'.
- (AUTOF_DRV_H): Add `afcover.h'.
-
- * builds/freetype.mk (INCLUDE_FLAGS) [DEVEL_DIR]: Use pkg-config for
- all libraries needed by FreeType.
-
-2013-12-21 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #40975 (sort of).
-
- * src/truetype/ttinterp.c (Ins_IP): Fix sign typo to make FreeType
- behave the same as the Windows TrueType engine for the invalid case.
-
-2013-12-21 Werner Lemberg <wl@gnu.org>
-
- [autofit] Make PIC mode work actually.
-
- * src/autofit/afpic.h (AFModulePIC): Fix array sizes to fit the
- enumeration values automatically generated by including `afscript.h'
- and friends.
-
- * src/autofit/afpic.c (autofit_module_class_pic_init): Updated.
-
-2013-12-21 Werner Lemberg <wl@gnu.org>
-
- Fix PIC linking.
-
- * include/internal/ftrfork.h (CONST_FT_RFORK_RULE_ARRAY_BEGIN): Fix
- generated function name.
-
- * src/base/basepic.c (FT_Init_Table_raccess_guess_table): Rename
- to ...
- (FT_Init_Table_ft_raccess_guess_table): ... this so that the
- function name correctly corresponds to what the macro framework
- expects.
-
- * src/psnames/rules.mk (PSNAMES_DRV_SRC_S): Use correct file name so
- that PIC functions are compiled also.
-
-2013-12-21 Werner Lemberg <wl@gnu.org>
-
- [base] Add missing dependencies to Makefile.
-
- * src/base/rules.mk (BASE_SRC): Add `basepic.c' and `ftpic.c'.
- (BASE_H): Add `basepic.h'.
-
-2013-12-20 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix PIC compilation.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths),
- src/autofit/aflatin.c (af_latin_metrics_init_widths)
- [FT_CONFIG_OPTION_PIC]: Declare `globals'.
-
- * src/autofit/afglobal.c: Always call AF_DEFINE_SCRIPT_CLASS, and
- AF_DEFINE_STYLE_CLASS.
-
- * src/autofit/afpic.c: Include `afglobal.h'.
- (autofit_module_class_pic_init): Typo.
-
- * src/autofit/aftypes.h (AF_DEFINE_SCRIPT_CLASS,
- AF_DEFINE_STYLE_CLASS): Don't use the same identifier for macro
- parameter and structure member.
-
-2013-12-20 Werner Lemberg <wl@gnu.org>
-
- [autofit] Introduce `styles'.
-
- This is the new top-level structure for handling glyph input data;
- scripts are now defined separately.
-
- * src/autofit/aftypes.h (SCRIPT): Updated.
- (AF_ScriptClassRec): Move `blue_stringset' and `writing_system'
- members to ...
- (AF_Style_ClassRec): ... this new structure.
- (AF_Style): New enumeration.
- (AF_StyleMetricsRec): Replace `script' enumeration with
- `style_class' pointer.
- (AF_DEFINE_SCRIPT_CLASS, AF_DECLARE_SCRIPT_CLASS): Updated.
- (AF_DEFINE_STYLE_CLASS, AF_DECLARE_STYLE_CLASS): New macros.
-
- * src/autofit/afstyles.h: New file, using data from `afscript.h'.
- * src/autofit/afscript.h: Updated.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths,
- af_cjk_metrics_init_blues, af_cjk_hint_edges): Updated.
-
- * src/autofit/afglobal.c (SCRIPT): Updated.
- (STYLE): Redefine macro to load `afstyles.h'.
- (af_script_names) [FT_DEBUG_LEVEL_TRACE]: Replace with...
- (af_style_names): ... this array.
- (af_face_globals_compute_script_coverage): Renamed to...
- (af_face_globals_compute_style_coverage): ... this.
- Updated.
- (af_face_globals_new, af_face_globals_free,
- af_face_globals_get_metrics): Updated.
-
- * src/autofit/afglobal.h (SCRIPT): Updated.
- (STYLE): Redefine macro to load `afstyles.h'.
- (AF_SCRIPT_FALLBACK): Update definition. This will get more
- refinements with later on.
- (AF_SCRIPT_UNASSIGNED): Replace with...
- (AF_STYLE_UNASSIGNED): ... this macro.
- (AF_FaceGlobalsRec): Updated.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_widths,
- af_latin_metrics_init_blues, af_latin_metrics_scale_dim,
- af_latin_hint_edges): Updated.
-
- * src/autofit/aflatin2.c (af_latin2_metrics_init_widths): Updated.
- (af_ltn2_uniranges): Removed.
-
- * src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph):
- Updated.
-
- * src/autofit/afpic.c (autofit_module_class_pic_init): Updated.
- * src/autofit/afpic.h (AF_STYLE_CLASSES_GET): New macro.
- (AFModulePIC): Add `af_style_classes' and `af_style_classes_rec'
- members.
-
- * src/autofit/afranges.h: Updated.
-
- * src/autofit/rules.mk (AUTOF_DRV_H): Add `afstyles.h'.
-
-2013-12-19 Werner Lemberg <wl@gnu.org>
-
- [autofit] Factor scripts and uniranges out of writing system files.
-
- * src/autofit/afranges.c, src/autofit/afranges.h: New files.
-
- * src/autofit/afscript.h: Extend `SCRIPT' macro with more
- parameters, taking data from the writing system files.
-
- * src/autofit/aftypes.h: Updated.
-
- * src/autofit/afglobal.c: Include `afranges.h'.
- Load `afscript.h' to call AF_DEFINE_SCRIPT_CLASS.
- * src/autofit/afglobal.c: Include `afranges.h'.
- Load `afscript.h' to call AF_DECLARE_SCRIPT_CLASS.
-
- * src/autofit/afcjk.c, src/autofit/afcjk.h: Updated.
- * src/autofit/afdummy.c, src/autofit/afdummy.h: Updated.
- * src/autofit/afindic.c, src/autofit/afindic.h: Updated.
- * src/autofit/aflatin.c, src/autofit/aflatin.h: Updated.
- * src/autofit/aflatin2.c, src/autofit/aflatin2.h: Updated.
-
- * src/autofit/afpic.c: Updated.
-
- * src/autofit/autofit.c: Include `afranges.c'.
- * src/autofit/rules.mk (AUTOF_DRV_SRC): Add `afranges.c'.
-
-2013-12-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] More code orthogonality.
-
- * src/autofit/aftypes.h (AF_StyleMetrics): Replace `script_class'
- pointer to an `AF_ScriptClass' structure with `script' index of type
- `AF_Script'.
- Move some code around.
-
- * src/autofit/afcjk.c: Include `afpic.h'.
- (af_cjk_metrics_init_widths, af_cjk_metrics_init_blues,
- af_cjk_hint_edges): Updated.
-
- * src/autofit/aflatin.c: Include `afpic.h'.
- (af_latin_metrics_init_widths, af_latin_metrics_init_blues,
- af_latin_metrics_scale_dim, af_latin_hint_edges): Updated.
-
- * src/autofit/afglobal.c (af_face_globals_get_metrics): Updated.
-
- * src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph):
- Updated.
-
-2013-12-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/ScriptMetrics/StyleMetrics/.
-
-2013-12-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/script_{metrics,hints}/style_{metrics,hints}/
-
-2013-12-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/gscripts/gstyles/.
-
-2013-12-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/glyph_scripts/glyph_styles/.
-
- This is the first commit of a series to create a new top-level
- structure (a `style') for handling scripts, writing_systems, and
- soon-to-be-added coverages.
-
-2013-12-17 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/AF_Script_/AF_WritingSystem_/ where appropriate.
-
-2013-12-11 Infinality <infinality@infinality.net>
-
- [truetype] Simplify logic of rendering modes.
-
- This patch unifies the subpixel and non-subpixel cases.
-
- * src/truetype/ttinterp.h (TT_ExecContextRec): Remove
- `grayscale_hinting'; all code should refer to `grayscale' instead.
- Remove unused `native_hinting' member.
- Rename `subpixel_hinting' member to `subpixel.
-
- * src/truetype/ttgload.c (TT_LOADER_SET_PP): Updated.
- (tt_loader_init): Updated.
-
- * src/truetype/ttinterp.c (Ins_GETINFO): Simplify.
- Updated.
-
-2013-12-11 Werner Lemberg <wl@gnu.org>
-
- [documentation] Add section how to include FreeType header files.
- Problem reported by David Kastrup <dak@gnu.org>.
-
- Surprisingly, a description how to do that was completely missing in
- the API reference.
-
- * include/freetype.h, include/ftchapters.h: New documentation
- section `header_inclusion'.
-
-2013-12-10 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/DFLT/NONE/, s/dflt/none/.
-
-2013-12-10 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/AF_SCRIPT_NONE/AF_SCRIPT_UNASSIGNED/.
-
-2013-12-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix scaling of vertical phantom points.
-
- * src/truetype/ttgload.c (load_truetype_glyph): Scale pp3.x and
- pp4.x also.
-
-2013-12-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix positioning of composite glyphs.
- Problem reported by Nigel Tao <nigeltao@golang.org>.
-
- * src/truetype/ttgload.c (TT_Hint_Glyph): Remove code that shifts
- the glyph (component) by a fractional value computed from the LSB
- phantom point. This is wrong, since the horizontal phantom points
- get rounded horizontally later on.
-
-2013-12-08 Werner Lemberg <wl@gnu.org>
-
- * Version 2.5.2 released.
- =========================
-
-
- Tag sources with `VER-2-5-2'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.5.2.
-
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/index.html,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualc/index.html,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj,
- builds/windows/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.5.1/2.5.2/, s/251/252/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 2.
-
- * builds/unix/configure.raw (version_info): Set to 17:1:11.
- * CMakeLists.txt (VERSION_PATCH): Set to 2.
- * docs/CHANGES: Updated.
-
-2013-12-07 Werner Lemberg <wl@gnu.org>
-
- [truetype] Next round in phantom point handling.
-
- Greg Hitchcock provided very interesting insights into the
- complicated history of the horizontal positions of the TSB and BSB
- phantom points.
-
- * src/truetype/ttgload.c (TT_LOADER_SET_PP)
- [TT_CONFIG_OPTION_SUBPIXEL_HINTING]: Use `subpixel_hinting' and
- `grayscale_hinting' flags as conditionals for the x position of TSB
- and BSB.
-
-2013-12-05 Werner Lemberg <wl@gnu.org>
-
- * builds/freetype.mk (FT_CC): Removed. Unused.
-
-2013-12-04 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix handling of embedded bitmap strikes.
-
- This corrects the commit from 2013-11-21. Problem reported by
- Andrey Panov <panov@canopus.iacp.dvo.ru>.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap): Fix logic to
- detect excessive bytes for bit-aligned bitmaps.
-
-2013-12-03 Werner Lemberg <wl@gnu.org>
-
- [truetype] Remove dead code.
-
- Reported by Nigel Tao <nigeltao@golang.org>.
-
- * include/internal/tttypes.h (TT_LoaderRec): Remove unused
- `preserve_pps' field.
- * src/truetype/ttgload.c (TT_Hint_Glyph): Updated.
-
-2013-12-03 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix phantom point handling.
-
- This is a further improvement to the changes from 2013-11-06.
-
- * src/truetype/ttgload.c (TT_Hint_Glyph): Horizontal phantom points
- are rounded horizontally, vertical ones are rounded vertically.
- (TT_LOADER_SET_PP): The horizontal position of vertical phantom
- points in pre-ClearType mode is zero, as shown in the OpenType
- specification.
-
-2013-12-02 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix change from 2013-11-20.
-
- Problem reported by Akira Kakuto <kakuto@fuk.kindai.ac.jp>.
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Protect call to
- `Update_Max' with both a TT_USE_BYTECODE_INTERPRETER guard and a
- `IS_HINTED' clause.
- Also remove redundant check using `maxSizeOfInstructions' – in
- simple glyphs, the bytecode data comes before the outline data, and
- a validity test for this is already present.
-
-2013-11-27 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix use of dumping functions in `ftgrid' demo program.
-
- * src/autofit/afhints.c (AF_DUMP) [FT_DEBUG_AUTOFIT]: New macro.
- (af_glyph_hints_dump_points, af_glyph_hints_dump_segments,
- af_glyph_hints_dump_edges) [FT_DEBUG_AUTOFIT]: Add parameter to
- handle output to stdout.
- Use AF_DUMP.
- (af_glyph_hints_dump_points, af_glyph_hints_dump_segments,
- af_glyph_hints_dump_edges) [!FT_DEBUG_AUTOFIT]: Removed.
-
-2013-11-25 Werner Lemberg <wl@gnu.org>
-
- * Version 2.5.1 released.
- =========================
-
-
- Tag sources with `VER-2-5-1'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.5.1.
-
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/index.html,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualc/index.html,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj,
- builds/windows/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.5.0/2.5.1/, s/250/251/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
-
- * builds/unix/configure.raw (version_info): Set to 17:0:11.
- * CMakeLists.txt (VERSION_PATCH): Set to 1.
- * docs/CHANGES, docs/release: Updated.
-
-2013-11-23 Werner Lemberg <wl@gnu.org>
-
- [truetype]: Add tricky font names `hkscsiic.ttf' and `iicore.ttf'.
-
- * src/truetype/ttobjs.c (TRICK_NAMES_MAX_CHARACTERS,
- TRICK_NAMES_COUNT): Updated.
- (trick_names): Add family name for the two fonts.
-
-2013-11-23 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap): Typo.
-
-2013-11-21 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Typo.
-
- Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Return correct `bsize->width'
- value if the font lacks an `OS/2' table.
-
-2013-11-21 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Improve handling of buggy embedded bitmap strikes.
-
- We are now able to successfully load `AppleMyoungJo.ttf'.
- Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap): Don't trust glyph
- format.
-
-2013-11-20 Werner Lemberg <wl@gnu.org>
-
- [truetype] Don't trust `maxp's `maxSizeOfInstructions'.
-
- Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>; see
-
- http://lists.nongnu.org/archive/html/freetype-devel/2013-08/msg00005.html
-
- for details.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Check size of `fpgm' and `prep'
- tables also for setting `autohint'.
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Use code from
- `TT_Process_Composite_Glyph' for handling unreliable values of
- `maxSizeOfInstructions'.
-
-2013-11-16 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix `OS/2' table version 5 support.
-
- We now follow the `official' announcement from Microsoft (on the
- OpenType mailing list, which unfortunately hasn't a public archive).
-
- * include/freetype/tttables.h (TT_OS2):
- s/usLowerPointSize/usLowerOpticalPointSize/,
- s/usUpperPointSize/usUpperOpticalPointSize/.
-
- * src/sfnt/ttload.c (tt_face_load_os2): Update, and set correct
- default values.
-
-2013-11-13 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/ft2unix.h: Remove. No longer necessary.
-
- * builds/unix/install.mk (install): Updated.
-
-2013-11-13 Werner Lemberg <wl@gnu.org>
-
- Simplify header file hierarchy.
-
- This large patch changes the header file directory layout from
- `include/freetype/...' to `include/...', effectively removing one
- level. Since the file `ft2build.h' is also located in `include'
- (and it stays there even after installation), all FreeType header
- files are now in a single directory.
-
- Applications that use (a) `freetype-config' or FreeType's
- `pkg-config' file to get the include directory for the compiler, and
- (b) the documented way for header inclusion like
-
- #include <ft2build.h>
- #include FT_FREETYPE_H
- ...
-
- don't need any change to the source code.
-
- * include/freetype/*: Move up to...
- * include/*: ... this directory.
-
- * builds/amiga/include/freetype/*: Move up to...
- * builds/amiga/include/*: ... this directory.
-
- */*: Essentially do `s@/freetype/@/@' where appropriate.
-
- * CMakeLists.txt: Simplify.
- * builds/unix/freetype-config.in, builds/unix/freetype2.in: For
- `--cflags', return a single directory.
- * builds/unix/install.mk (install): No longer try to remove `cache'
- and `internal' subdirectories; instead, remove the `freetype'
- subdirectory.
-
-2013-11-12 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix last `truetype' commit.
-
- * src/truetype/ttgload.c (tt_get_metrics): Preserve stream position.
- Return error value.
- (load_truetype_glyph): Updated.
-
-2013-11-10 Werner Lemberg <wl@gnu.org>
-
- * docs/CMAKE: New dummy file.
-
-2013-11-08 Dave Arnold <darnold@adobe.com>
-
- [cff] Fix for hints that touch.
-
- * src/cff/cf2hints.c (cf2_hintmap_insertHint): Fix condition for
- finding index value of insertion point.
-
-2013-11-06 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix handling of phantom points in composite glyphs.
- Problem reported by Nigel Tao <nigeltao@golang.org>.
-
- This is a follow-up commit to the previous one.
-
- * src/truetype/ttgload.c (load_truetype_glyph): Call
- `tt_get_metrics' after loading the glyph header.
-
-2013-11-06 Werner Lemberg <wl@gnu.org>
-
- [truetype] Improve emulation of vertical metrics.
-
- This commit also improves the start values of vertical phantom
- points. Kudos to Greg Hitchcock for help.
-
- * src/truetype/ttgload.c (TT_Get_VMetrics): Add parameter to pass
- `yMax' value. Replace code with fixed Microsoft definition.
- (tt_get_metrics): Updated.
- (TT_LOADER_SET_PP): Add explanation how to initialize phantom
- points, taken from both the OpenType specification and private
- communication with Greg (which will eventually be added to the
- standard).
- Fix horizontal position of `pp3' and `pp4'.
-
- * src/truetype/ttgload.h: Updated.
-
- * src/truetype/ttdriver.c (tt_get_advances): Updated.
-
- * docs/CHANGES: Updated.
-
-2013-11-05 Werner Lemberg <wl@gnu.org>
-
- * builds/windows/vc2010/freetype.vcxproj: s/v110/v100/.
- PlatformToolSet version 110 is for VC2012.
-
- Problem reported (with solution) by Dave Arnold <darnold@adobe.com>.
-
-2013-11-05 Werner Lemberg <wl@gnu.org>
-
- [truetype] Correctly reset point tags for glyph components.
- Problem reported by Nigel Tao <nigeltao@golang.org>.
-
- * src/truetype/ttgload.c (TT_Process_Composite_Glyph): Fix loop.
-
-2013-11-02 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix GETINFO opcode handling of subpixel hinting bits.
-
- * src/truetype/ttinterp.c (Ins_GETINFO): Don't request bit 6 set to
- get info on subpixel hinting.
-
- * docs/CHANGES: Updated.
-
-2013-11-02 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #40451.
-
- Simply apply the patch from the bug report.
-
- * builds/unix/ftconfig.in, builds/vms/ftconfig.h,
- include/freetype/config/ftconfig.h: The used #pragma directives only
- work with gcc versions 4.6 and higher.
-
-2013-11-01 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2013-11-01 Werner Lemberg <wl@gnu.org>
-
- [truetype] Minor code refactoring.
-
- Two benefits: The allocated FDEF (and IDEF) array gets slightly
- smaller, and the `ttdebug' demo program has access to function
- numbers without additional costs.
-
- Fortunately, no changes to FontForge are necessary – this is the
- only external TrueType debugger I know of, but others may exist and
- should check the code accordingly.
-
- * src/truetype/ttinterp.h (TT_CallRec): Replace `Cur_Restart' and
- `Cur_End' with a pointer to the corresponding `TT_DefRecord'
- structure.
-
- * src/truetype/ttinterp.c (DO_JROT, DO_JMPR, DO_JROF, Ins_ENDF,
- Ins_CALL, Ins_LOOPCALL, Ins_UNKNOWN, TT_RunIns <Invalid_Opcode>):
- Updated.
-
-2013-10-27 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Implement support for `OS/2' table version 5.
-
- See
-
- http://typedrawers.com/discussion/470/new-microsoft-size-specific-design-selection-mechanism
-
- for the announcement.
-
- * include/freetype/tttables.h (TT_OS2): Add fields
- `usLowerPointSize' and `usUpperPointSize'. Since FreeType returns
- this structure only as a pointer through `FT_Get_Sfnt_Table', there
- shouldn't be any ABI problems.
-
- * src/sfnt/ttload.c (tt_face_load_os2): Implement it.
-
- * docs/CHANGES: Updated.
-
-2013-10-24 Werner Lemberg <wl@gnu.org>
-
- * README.git, docs/CHANGES, docs/INSTALL: Updated.
-
-2013-10-24 John Cary <cary@txcorp.com>
-
- Provide cmake support.
-
- * CMakeLists.txt: New file.
-
-2013-10-23 Kenneth Miller <kennethadammiller@yahoo.com>
- Werner Lemberg <wl@gnu.org>
-
- Provide support for x64 builds in Visual C++ project files.
-
- * src/builds/win32: Renamed to...
- * src/builds/windows: This.
-
- * src/builds/windows/vc2010/*: Updated to handle x64 target.
-
- * src/builds/windows/*.mk, docs/INSTALL.GNU: s/win32/windows/ where
- appropriate.
-
-2013-10-22 Werner Lemberg <wl@gnu.org>
-
- * src/base/md5.c, src/base/md5.h: Updated to recent version.
-
- * src/base/ftobjs.c: Updated; `md5.c' no longer uses `free'.
-
- The canonical URL to get updates for this file is
-
- http://cvsweb.openwall.com/cgi/cvsweb.cgi/Owl/packages/popa3d/popa3d/md5/
-
- as the author told me in private communication.
-
-2013-10-19 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/SMALL_TOP/X_HEIGHT/.
-
- * src/autofit/afblue.dat: Updated.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/aflatin.c, src/autofit/aflatin.h,
- src/autofit/aflatin2.c: Updated.
-
-2013-10-19 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afblue.dat: s/MINOR/DESCENDER/.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
-2013-10-16 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add description strings to script entries.
-
- Currently, this is unused.
-
- * src/autofit/afscript.h: Do it.
- * src/autofit/afglobal.c, src/autofit/afpic.c,
- src/autofit/aftypes.h: Updated.
-
-2013-10-16 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve tracing message for extra light flag.
-
- * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Do it.
-
-2013-10-15 Chongyu Zhu <lembacon@gmail.com>
-
- [arm] Fix thumb2 inline assembly under LLVM.
-
- When using `ADD' with an immediate operand, the instruction is
- actually `ADD Rd, Rn, #<imm12>', that is, the maximum of the
- immediate operand cannot exceed 4095. It will fail to compile with
- LLVM.
-
- However, in GCC, due to some legacy compatibility considerations,
- `ADD.W' will be automatically emitted when the immediate operand is
- larger than 4095.
-
- * builds/unix/ftconfig.in, include/freetype/config/ftconfig.h
- (FT_MulFix_arm) [__GNUC__]: Support clang compiler.
-
- * src/truetype/ttinterp.c (TT_MulFix14_arm) [__GNUC__]: Ditto.
-
-2013-10-12 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve tracing of `latin' hinter.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Report blue
- zone types.
- (af_latin_metrics_scale_dim): Report scaling changes due to x height
- alignment.
- Report scaled stroke width and blue zone values.
-
-2013-10-03 Dave Arnold <darnold@adobe.com>
-
- * src/cff/cf2font.c (cf2_computeDarkening): Avoid division by zero.
-
- Note that the old code avoided using a region of the piecewise
- linear function where the slope was zero. The recovery was to use a
- different section of the function, which produced a different,
- incorrect amount of darkening.
-
-2013-10-02 Darrell Bellert <darrell.bellert@hl.konicaminolta.us>
-
- * src/sfnt/ttload.c (tt_face_load_pclt): Fix `pclt_fields'.
-
-2013-10-02 Dave Arnold <darnold@adobe.com>
-
- * src/cff/cf2font.c (cf2_computeDarkening): Initialize darkenAmount.
-
- This line was lost in commit 89ca1fd6 (from 2013-06-25). The effect
- is to use a previous darkening amount when producing an unhinted,
- unscaled outline. This can cause autohint samples in ftgrid and
- ftview to be based on darkened CFF outlines instead of unhinted,
- undarkened ones.
-
-2013-09-29 Dave Arnold <darnold@adobe.com>
-
- Fix Savannah bug #39295.
-
- The bug was caused by switching to the initial hintmap (the one in
- effect when `moveto' executes) just before drawing the final element
- in the charstring. This ensured that the path was closed (in both
- Character Space and Device Space). But if the final element was a
- curve and if the final hintmap was different enough from the initial
- one, then the curve was visibly distorted.
-
- The first part of the fix is to draw the final curve using the final
- hintmap as specified by the charstring. This corrects the
- distortion but does not ensure closing in Device Space. It may
- require the rasterizer to automatically generate an extra closing
- line. Depending on the hintmap differences, this line could be from
- zero to a couple pixels in length.
-
- The second part of the fix covers the case where the charstring
- subpath is closed with an explicit line. We now modify that line's
- end point to avoid the distortion.
-
- Some glyphs in the bug report font (TexGyreHeros-Regular) that show
- the change are:
-
- 25ppem S (98)
- 24ppem eight (52)
- 25.5ppem p (85)
-
- Curves at the *end* of a subpath are no longer distorted. However,
- some of these glyphs have bad hint substitutions in the middle of a
- subpath, and these are not affected.
-
- The patch has been tested with a set of 106 fonts that shipped with
- Adobe Creative Suite 4, together with 756 Open Source CFF fonts from
- Google Fonts. There are 1.5 million glyphs, of which some 20k are
- changed with the fix. A sampling of a few hundred of these changes
- have been examined more closely, and the changes look good (or at
- least acceptable).
-
- * src/cff/cf2hints.h (CF2_GlyphPathRec): New element `pathIsClosing'
- to indicate that we synthesize a closepath line.
-
- * src/cff/cf2hints.c (cf2_glyphpath_init): Updated.
- (cf2_glyphpath_pushPrevElem): If closing, use first hint map (for
- `lineto' operator) and adjust hint zone.
- For synthesized closing lines, use end point in first hint zone.
- (cf2_glyphpath_lineTo): Take care of synthesized closing lines. In
- particular, shift the detection of zero-length lines from character
- space to device space.
- (cf2_glyphpath_closeOpenPath): Remove assertion.
- Updated.
-
-2013-09-25 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/aflatin.c (af_{grek,cyrl}_uniranges): Fix arrays.
-
-2013-09-25 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [bdf, pcf] Refuse non-zero face_index.
-
- Suggested by Akira Tagoh, see
-
- http://lists.gnu.org/archive/html/freetype/2013-09/msg00030.html
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Return `Invalid_Argument'
- error if the font could be opened but non-zero `face_index' is
- given.
- * src/pcf/pcfdrivr.c (PCF_Face_Init): Ditto.
-
- * src/type42/t42objs.c (T42_Face_Init): Remove unrequired FT_UNUSED
- macro for `face_index' because it is validated later.
-
-2013-09-23 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #40090.
-
- * src/autofit/afcjk.c (af_cjk_metrics_scale): Revert commit
- 306f8c5d (from 2013-08-25) affecting this function.
-
-2013-09-22 Werner Lemberg <wl@gnu.org>
-
- [autofit] Disunify Cyrillic and Greek handling from Latin.
-
- * src/autofit/afscript.h: Add Cyrillic and Greek.
-
- * src/autofit/afblue.dat (AF_BLUE_STRINGSET_GREK,
- AF_BLUE_STRINGSET_CYRL): Add blue zones for Greek and Cyrillic.
- (AF_BLUE_STRINGSET_LATN): Fix typo.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/aflatin.c (af_grek_uniranges, af_cyrl_uniranges): New
- arrays.
- (af_grek_script_class, af_cyrl_script_class): New scripts.
- * src/autofit/aflatin.h: Updated.
-
-2013-09-20 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2013-09-20 Behdad Esfahbod <behdad@behdad.org>
-
- Fix vertical size of emboldened glyphs.
-
- Cf. https://bugzilla.gnome.org/show_bug.cgi?id=686709
-
- * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Adjust `horiBearingY'
- also.
-
-2013-09-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * include/freetype/ftoutln.h: Correct FT_Outline_Get_Orientation
- algorithm description.
-
-2013-09-11 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve Hebrew rendering.
-
- This change introduces a new blue zone property
- `AF_BLUE_PROPERTY_LATIN_LONG' to make the auto-hinter ignore short
- top segments.
-
- * src/autofit/afblue.dat: Fix Hebrew blue strings.
- Use AF_BLUE_PROPERTY_LATIN_LONG for AF_BLUE_STRING_HEBREW_TOP.
-
- * src/autofit/afblue.hin (AF_BLUE_PROPERTY_LATIN_LONG): New macro.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Updated.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Handle
- `AF_LATIN_IS_LONG_BLUE'.
-
- * src/autofit/aflatin.h (AF_LATIN_IS_LONG_BLUE): New macro.
-
-2013-08-28 Behdad Esfahbod <behdad@google.com>
-
- [sfnt] Fix frame access while reading WOFF table directory.
-
- * src/sfnt/sfobjs.c (woff_open_font): Using single memory frame
- while reading the directory entries for the whole loop.
-
-2013-08-29 Werner Lemberg <wl@gnu.org>
- Behdad Esfahbod <behdad@google.com>
-
- Implement support for WOFF containers.
-
- We simply synthesize a SFNT from the WOFF, create a memory stream
- for the new data, and load the SFNT as usual.
-
- Does NOT add any API to access WOFF metadata or private blocks.
-
- * include/freetype/internal/tttypes.h (WOFF_HeaderRec,
- WOFF_TableRec): New structures.
-
- * include/freetype/tttags.h (TTAG_wOFF): New macro.
-
- * src/base/ftobjs.c (FT_Open_Face): Set `stream' after calling
- `open_face'.
-
- * src/sfnt/sfobjs.c [FT_CONFIG_OPTION_SYSTEM_ZLIB]: Include
- `FT_GZIP_H'.
- (WRITE_BYTE, WRITE_USHORT, WRITE_ULONG): New temporary macros for
- writing to a stream.
- (sfnt_stream_close, compare_offsets, woff_open_font): New functions.
- (sfnt_open_font): Handle `TTAG_wOFF'.
- (sfnt_init_face): Set `stream' after calling `sfnt_open_font'.
-
- * src/truetype/ttobjs.c (tt_face_init): Set `stream' after calling
- `sfnt->init_face'.
-
- * src/base/ftobjs.c (open_face): Use a pointer to FT_Stream as an
- argument so that a changed stream survives.
- Update callers.
-
-2013-08-28 Werner Lemberg <wl@gnu.org>
-
- [gzip] New function `FT_Gzip_Uncompress'.
-
- This is modeled after zlib's `uncompress' function. We need this
- for WOFF support.
-
- * include/freetype/ftgzip.h, src/gzip/ftgzip.c (FT_Gzip_Uncompress):
- New function.
-
- * src/gzip/rules.mk: Rewrite to better reflect dependencies.
-
-2013-08-28 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix `make multi' compilation.
-
- * src/autofit/afblue.cin, src/autofit/afblue.c: Don't include
- `afblue.h' but `aftypes.h'.
- * src/autofit/afcjk.c: Don't include `aftypes.h' but `afglobal.h'.
-
-2013-08-28 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix C++ compilation.
-
- * src/autofit/afglobal.c (af_face_globals_get_metrics),
- src/autofit/afdummy.c (af_dflt_script_class), src/autofit/afindic.c
- (af_deva_script_class): Use proper casts.
-
-2013-08-27 Behdad Esfahbod <behdad@google.com>
-
- * src/sfnt/ttload.c (tt_face_load_font_dir): Fix sign typos.
-
-2013-08-27 Behdad Esfahbod <behdad@google.com>
-
- FT_Open_Face: Improve external stream handling.
-
- If the font's `clazz->init_face' function wants to swap to new
- stream, handling of whether original stream was external could
- result to either memory leak or double free. Mark externality into
- face flags before calling `init_face' such that the clazz can handle
- external streams properly.
-
- * src/base/ftobjs.c (FT_Open_Face): Move code to set
- FT_FACE_FLAG_EXTERNAL_STREAM to...
- (open_face): This function.
-
-2013-08-27 Werner Lemberg <wl@gnu.org>
-
- Remove `FT_SqrtFixed' function.
-
- It's no longer used.
-
- * include/freetype/internal/ftcalc.h, src/base/ftcalc.c: Do it.
-
-2013-08-27 Werner Lemberg <wl@gnu.org>
-
- [autofit] While tracing, report script names instead of ID values.
-
- * src/autofit/afglobal.c (af_script_names) [FT_DEBUG_LEVEL_TRACE]:
- New array.
- * src/autofit/afglobal.h: Updated.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths,
- af_cjk_hint_edges): Use `af_script_names'.
- * src/autofit/aflatin.c (af_latin_metrics_init_widths,
- af_latin_hint_edges): Ditto.
-
-2013-08-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Report used script while hinting a glyph.
-
- * src/autofit/afcjk.c (af_cjk_hint_edges), src/autofit/aflatin.c
- (af_latin_hint_edges): Implement it.
-
-2013-08-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add support for Hebrew script.
-
- * src/autofit/afblue.dat: Add blue strings for Hebrew.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/aflatin.c (af_hebr_uniranges): New array.
- (af_hebr_script_class): New script.
- * src/autofit/aflatin.h, src/autofit/afscript.h: Updated.
-
-2013-08-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve tracing messages.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths): Mention script
- ID in tracing message.
- (af_cjk_metrics_init_blues): Initialize `axis' outside of the inner
- loop.
- Improve tracing messages.
- (af_cjk_hint_edges) [FT_DEBUG_LEVEL_TRACE]: New variable
- `num_actions' to count hinting actions.
- Improve tracing messages.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_widths): Mention
- script ID in tracing message.
- (af_latin_metrics_init_blues, af_latin_hint_edges): Improve tracing
- messages.
-
-2013-08-26 Werner Lemberg <wl@gnu.org>
-
- Better tracing of loaded glyphs.
-
- Previously, the loading of a glyph was traced at level 4, if at all.
- With this change, all font loading routines emit a tracing message
- at level 1, making it easier to select tracing output (for example
- using F2_DEBUG="any:1 afhints:7 aflatin:7").
-
- * src/bdf/bdfdrivr.c (BDF_Glyph_Load): Add tracing message.
- * src/cff/cffdrivr.c (cff_glyph_load): Ditto.
- * src/cff/cffgload.c (cff_decoder_prepare): Improve tracing
- messages.
- * src/cid/cidgload.c (cid_load_glyph): Use level 1 for tracing
- message.
- * src/pcf/pcfdrivr.c (PCF_Glyph_Load): Ditto.
- * src/pfr/pfrobjs.c (pfr_slot_load): Add tracing message.
- * src/truetype/ttgload.c (TT_Load_Glyph): Ditto.
- * src/type1/t1gload.c (T1_Load_Glyph): Ditto.
- * src/type42/t42objs.c (T42_GlyphSlot_Load): Ditto.
- * src/winfonts/winfnt.c (FNT_Load_Glyph): Ditto.
-
-2013-08-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix script selection.
-
- * src/autofit/afglobal.c (af_face_globals_get_metrics): Use
- `AF_SCRIPT_DFLT', not value 0.
- Simplify code.
-
- * src/autofit/afscript.h: Sort by script name.
-
-2013-08-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Make `dummy' hinter work as expected.
-
- * src/autofit/afdummy.c (af_dummy_hints_init): Properly set scaling
- information.
- (af_dummy_hints_apply): Scale the glyphs.
-
-2013-08-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Make `cjk' module use blue stringsets.
-
- * src/autofit/afcjk.c (AF_CJK_MAX_TEST_CHARACTERS): Removed.
- (af_cjk_hani_blue_chars): Removed.
- (AF_CJK_BLUE_TYPE_*): Removed.
- (af_cjk_metrics_init_blues): Replace AF_CJK_MAX_TEST_CHARACTERS with
- AF_BLUE_STRING_MAX_LEN.
- Change loops to use offsets (in file `afblue.h') into the new arrays
- `af_blue_stringsets' and `af_blue_strings' (in file `afblue.c').
- Instead of three dimensions (as used in the old blue string array)
- we now use properties to do the same, saving one loop nesting level.
-
- * src/autofit/afcjk.h: Remove old enumeration values superseded by
- the new data in `afblue.h'.
- (AF_CJK_IS_TOP_BLUE, AF_CJK_IS_HORIZ_BLUE, AF_CJK_IS_FILLED_BLUE,
- AF_CJK_IS_RIGHT_BLUE): New macros, to be used in
- `af_cjk_metrics_init_blues'.
- (AF_CJK_BLUE_IS_RIGHT): Remove this now redundant enum value.
- (AF_CJK_BLUE_IS_TOP): Renamed to...
- (AF_CJK_BLUE_TOP): This.
- (AF_CJK_MAX_BLUES): Remove.
- (AF_CJKAxisRec): Updated.
-
-2013-08-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Typo.
-
- * src/autofit/afblue.hin, src/autofit/afblue.c (GET_UTF8_CHAR): Use
- cast.
-
-2013-08-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Synchronize `cjk' with `latin' module (and vice versa).
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths): Add tracing
- messages.
- (af_cjk_metrics_init_blues): Don't pass blue string array as
- argument but use the global array directly.
- Use `outline' directly.
- Update and add tracing messages.
- (af_cjk_metrics_init): Simplify code.
- (af_cjk_metrics_scale_dim): Improve tracing message.
- (af_cjk_metrics_scale): Synchronize.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_widths,
- af_latin_metrics_init_blues): Improve and add tracing messages.
-
-2013-08-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Make `latin' module use blue stringsets.
-
- * src/autofit/aflatin.c (AF_LATIN_MAX_TEST_CHARACTERS): Removed.
- (af_latin_blue_chars): Removed.
- (af_latin_metrics_init_blues): Replace AF_LATIN_MAX_TEST_CHARACTERS
- with AF_BLUE_STRING_MAX_LEN.
- Change loops to use offsets (in file `afblue.h') into the new arrays
- `af_blue_stringsets' and `af_blue_strings' (in file `afblue.c').
- Use `AF_LATIN_IS_SMALL_TOP_BLUE' macro.
-
- * src/autofit/aflatin.h: Remove old enumeration values superseded by
- the new data in `afblue.h'.
- (AF_LATIN_IS_TOP_BLUE): Updated definition.
- (AF_LATIN_IS_SMALL_TOP_BLUE): New macro.
- (AF_LATIN_MAX_BLUES): Remove.
- (AF_LatinAxisRec): Updated.
-
-2013-08-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add blue stringsets.
-
- * src/autofit/aftypes.h: Include `afblue.h'.
- (AF_ScriptClassRec): Add `blue_stringset' field.
- (AF_DEFINE_SCRIPT_CLASS): Updated.
-
- * src/autofit/autofit.c: Include `afblue.c'.
-
- * src/autofit/afcjk.c (af_hani_script_class), src/autofit/afdummy.c
- (af_dflt_script_class), src/autofit/afindic.c
- (af_deva_script_class), src/autofit/aflatin.c
- (af_latn_script_class), src/autofit/aflatin2.c
- (af_ltn2_script_class): Updated.
-
- * src/autofit/rules.mk (AUTOF_DRV_SRC): Add `afblue.c'.
-
-2013-08-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Introduce data file for blue strings.
-
- The idea is to have a central file which gets processed by a Perl
- script to create proper `.c' and `.h' files using templates. There
- are two other reasons to do that:
-
- . The data file should be easily readable. We use UTF-8 encoding
- which then gets converted to single bytes.
-
- . Since the number of supported scripts will increase soon, the
- current usage of blue string arrays is a waste of space. Using
- the Perl script it is possible to imitate jagged arrays,
- defining enumeration constants as offsets into the arrays.
-
- This commit only adds files without changing any functionality.
-
- * src/autofit/afblue.dat: New data file.
- * src/tools/afblue.pl: New Perl script for processing `afblue.dat'.
-
- * src/autofit/afblue.cin, src/autofit/afblue.hin: New template files
- for...
- * src/autofit/afblue.c, src/autofit/afblue.c: New source files.
- To avoid a dependency on Perl, we add them too.
-
-2013-08-19 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Enable new algorithm for `BBox_Cubic_Check'.
-
- * src/base/ftbbox.c: Enable new BBox_Cubic_Check algorithm, remove
- the old one.
- Improve comments.
-
-2013-08-18 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/unix-def.in (freetype2.pc): Don't set executable bit.
-
-2013-08-18 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #39804.
-
- * builds/unix/configure.raw (LIBPNG): Define and export.
- * builds/unix/freetype-config.in, builds/unix/freetype2.in: Handle
- libpng.
-
-2013-08-17 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Clean up BBox_Conic_Check.
-
- * src/base/ftbbox.c (BBox_Conic_Check): Remove redundant checks for
- extremum at the segment ends, which are already within the bbox.
- Slightly modify calculations.
-
-2013-08-15 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Finish experimental (disabled) BBox_Cubic_Check implementation.
-
- * src/base/ftbbox.c (BBox_Cubic_Check): Scale arguments to improve
- accuracy and avoid overflows.
-
-2013-08-13 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Refactor experimental (disabled) BBox_Cubic_Check.
-
- * src/base/ftbbox.c (BBox_Cubic_Check): Implement the minimum search
- as the mirror image of the maximum search implemented here...
- (update_max): New function.
-
-2013-08-06 John Tytgat <John.Tytgat@esko.com>
-
- Fix Savannah bug #39702.
-
- * src/cff/cffload.c (cff_index_get_pointers): Check for `cur_offset
- != 0'; this stronger test is mandated by the CFF specification.
- Fix test for INDEX structures which have one or more empty entries
- at the end.
-
-2013-08-05 Werner Lemberg <wl@gnu.org>
-
- Fix gcc pragmas, part 2.
-
- * src/truetype/ttinterp.c (TT_MulFix14_long_long,
- TT_DotFix14_long_long): `#pragma gcc diagnostic {push,pop}' has been
- introduced with gcc version 4.6.
-
-2013-08-05 Werner Lemberg <wl@gnu.org>
-
- Fix gcc pragmas.
-
- * src/truetype/ttinterp.c (TT_MulFix14_long_long,
- TT_DotFix14_long_long): Older gcc versions don't accept diagnostic
- pragmas within a function body.
-
-2013-08-05 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #39700.
-
- * builds/unix/ftconfig.h: Synchronize with
- `include/freetype/config/ftconfig.h'.
-
- * builds/vms/ftconfig.h: Ditto.
- Make the differences to the master `ftconfig.h' file as small as
- possible for easier maintenance.
-
-2013-08-05 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve handling of `near' points.
-
- Points which are very near to each other are now marked as such.
- The `weak' flag is then computed by using the `in' vector of the
- first and the `out' vector of the last point of a group of near
- points.
-
- For example, this fixes the rendering of glyph `Oslash' in
- `Roboto-Thin.ttf'.
-
- * src/autofit/afhints.h (AF_Flags): New value `AF_FLAGS_NEAR'.
-
- * src/autofit/afhints.c (af_glyph_hints_reload): Introduce
- the heuristic value `near_limit' to decide whether the current point
- is near to the previous one, then set `AF_FLAG_NEAR' accordingly.
- Store good `in' vector (of last non-near point) in
- `last_good_in_{x,y}' and use it as an argument to
- `ft_corner_is_flat' if necessary.
-
-2013-08-02 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftcffdrv.h: Improve documentation.
- This is based on blog entries from David Lemon and Dave Arnold (both
- from Adobe) with kind permission. Dave also helped in
- proof-reading.
-
-2013-08-02 Werner Lemberg <wl@gnu.org>
-
- [autofit] Move declaration of scripts into separate file.
-
- This has the benefit that we don't need to duplicate the data at
- different places.
-
- * src/autofit/afscript.h: New file.
-
- * src/autofit/aftypes.h (AF_Script): Include `afscript.h' to define
- the enumeration values.
-
- * src/autofit/afglobal.c: Include `afscript.h' to get the script
- specific header files.
- (af_script_classes): Include `afscript.h' to fill this array.
-
- * src/autofit/afpic.c: Include `afscript.h' to get the script
- specific header files.
- (autofit_module_class_pic_init): Include `afscript.h' for
- initialization.
- * src/autofit/afpic.h (AF_SCRIPT_CLASSES_COUNT,
- AF_SCRIPT_CLASSES_REC_COUNT): Removed. Use `AF_SCRIPT_MAX' instead.
-
- * src/autofit/rules.mk (AUTOF_DRV_H): Updated.
-
-2013-08-02 Werner Lemberg <wl@gnu.org>
-
- [autofit] Move declaration of writing systems into separate file.
-
- This has the benefit that we don't need to duplicate the data at
- different places.
-
- * src/autofit/afwrtsys.h: New file.
-
- * src/autofit/aftypes.h (AF_WritingSystem): Include `afwrtsys.h' to
- define the enumeration values.
-
- * src/autofit/afglobal.c: Include `afwrtsys.h' to get the writing
- system specific header files.
- Include `afpic.h'.
- (af_writing_system_classes): Include `afwrtsys.h' to fill this
- array.
-
- * src/autofit/afpic.c: Include `afwrtsys.h' to get the writing
- system specific header files.
- (autofit_module_class_pic_init): Include `afwrtsys.h' for
- initialization.
- * src/autofit/afpic.h (AF_WRITING_SYSTEM_CLASSES_COUNT,
- AF_WRITING_SYSTEM_CLASSES_REC_COUNT): Removed. Use
- `AF_WRITING_SYSTEM_MAX' instead.
-
-2013-08-02 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix compilation with g++.
-
- * src/sfnt/pngshim.c (error_callback, read_data_from_FT_stream): Use
- cast.
- (Load_SBit_Png): Pacify compiler.
-
-2013-08-02 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
- Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix `make multi'.
-
- * include/freetype/config/ftconfig.h (FT_LOCAL_ARRAY,
- FT_LOCAL_ARRAY_DEF): New macros.
-
- * src/autofit/afglobal.c (af_writing_system_classes,
- af_script_classes): Use FT_LOCAL_ARRAY_DEF.
- * src/autofit/afglobal.h: Declare `af_writing_system_classes' and
- `af_script_classes'.
- * src/autofit/afloader.c: Include `afpic.h'.
-
-2013-08-01 Werner Lemberg <wl@gnu.org>
-
- Another round of cppcheck nitpicks.
-
- The call was (from the top-level of the FreeType tree):
-
- cppcheck --force \
- --enable=all \
- -I /usr/include \
- -I /usr/local/include \
- -I /usr/lib/gcc/i586-suse-linux/4.7/include \
- -I include \
- -I include/freetype \
- -I include/freetype/config \
- -I include/freetype/internal \
- -DFT2_BUILD_LIBRARY \
- . &> cppcheck.log
-
- using cppcheck git commit f7e93f99.
-
- Note that cppcheck still can't handle `#include FOO' (with `FOO' a
- macro).
-
- */* Improve variable scopes.
- */* Remove redundant initializations which get overwritten.
-
- * src/gxvalid/*: Comment out redundant code or guard it with
- FT_DEBUG_LEVEL_TRACE.
-
-2013-07-30 Werner Lemberg <wl@gnu.org>
-
- [autofit] Introduce `writing systems'.
-
- This patch adds a new top level to the auto-hinter's script class
- hierarchy. It defines `writing systems' which can contain multiple
- scripts.
-
- For example, the `latin' writing system (in file `aflatin.c') is
- able to support scripts like Latin, Cyrillic, Armenian, etc., which
- can be handled similarly.
-
- Scripts are now named using four-letter OpenType tags.
-
- * src/autofit/aftypes.h (AF_ScriptClassRec): Move relevant members
- to...
- (AF_WritingSystemClassRec): This new structure. It holds pointers
- to functions which can be shared among related scripts.
- (AF_WritingSystem): New enumeration.
- (AF_Script): Revised values using four-letter tags.
- (AF_DEFINE_WRITING_SYSTEM_CLASS): New macro.
- (AF_DEFINE_SCRIPT_CLASS): Updated.
-
- * src/autofit/afglobal.c (af_writing_system_classes): New global,
- constant array.
- (af_script_classes): Updated.
- (af_face_globals_free): Updated.
- Remove assertion.
- (af_face_globals_get_metrics): Updated.
-
- * src/autofit/afglobal.h (AF_SCRIPT_FALLBACK)
- [!AF_CONFIG_OPTION_CJK]: Handle this case.
-
- * src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph):
- Updated.
-
- * src/autofit/afpic.c (autofit_module_class_pic_init): Updated;
- initialize structures for both writing systems and scripts.
- * src/autofit/afpic.h: Updated.
- (AF_WRITING_SYSTEM_CLASSES_GET): New macro.
-
- * src/autofit/afcjk.c (af_cjk_writing_system_class): New writing
- system.
- (af_cjk_uniranges): Renamed to...
- (af_hani_uniranges): This.
- (af_cjk_script_class): Reduced and renamed to...
- (af_hani_script_class): This.
- * src/autofit/afcjk.h: Updated.
-
- * src/autofit/afdummy.c (af_dummy_writing_system_class): New writing
- system.
- (af_dummy_script_class): Reduced and renamed to...
- (af_dflt_script_class): This.
- * src/autofit/afdummy.h: Updated.
-
- * src/autofit/afindic.c (af_indic_writing_system_class): New writing
- system.
- (af_indic_uniranges): Renamed to...
- (af_deva_uniranges): This.
- (af_indic_script_class): Reduced and renamed to...
- (af_deva_script_class): This.
- * src/autofit/afcjk.h: Updated.
-
- * src/autofit/aflatin.c (af_latin_writing_system_class): New writing
- system.
- (af_latin_uniranges): Renamed to...
- (af_latn_uniranges): This.
- (af_latin_script_class): Reduced and renamed to...
- (af_latn_script_class): This.
- * src/autofit/aflatin.h: Updated.
-
- * src/autofit/aflatin2.c (af_latin2_writing_system_class): New
- writing system.
- (af_latin2_uniranges): Renamed to...
- (af_ltn2_uniranges): This.
- Synchronize ranges with `latin'.
- (af_latin2_script_class): Reduced and renamed to...
- (af_ltn2_script_class): This.
- * src/autofit/aflatin2.h: Updated.
-
-2013-07-30 Werner Lemberg <wl@gnu.org>
-
- [autofit] Variable renaming.
-
- * src/autofit/aftypes.h (AF_ScriptMetricsRec):
- s/clazz/script_class/.
- Update all users.
-
-2013-07-30 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Ignore libpng-config under cross-building configuration,
- because it will return the flags for the hosting environment.
-
- * builds/unix/configure.raw: Ignore libpng-config when
- `cross_compiling' == yes.
-
-2013-07-30 Behdad Esfahbod <behdad@google.com>
-
- Prevent division by zero by a transparent color.
-
- * src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra):
- Return 0 immediately, when alpha channel is zero.
-
-2013-07-25 Behdad Esfahbod <behdad@google.com>
-
- Add FT_FACE_FLAG_COLOR and FT_HAS_COLOR.
-
- Also disambiguate Google's color bitmap tables.
-
- * include/freetype/freetype.h (FT_FACE_FLAG_COLOR, FT_HAS_COLOR):
- New macros.
-
- * include/freetype/internal/tttypes.h (TT_SbitTableType): Add
- TT_SBIT_TABLE_TYPE_CBLC.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Handle FT_FACE_FLAG_COLOR.
-
- * src/sfnt/ttsbit.c (tt_face_load_sbit,
- tt_face_load_strike_metrics, tt_face_load_sbit_image): Handle
- TT_SBIT_TABLE_TYPE_CBLC.
-
-2013-07-24 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [sfnt] Fix for `make multi' target.
-
- * src/sfnt/pngshim.c (Load_SBit_Png): Use FT_LOCAL_DEF().
-
-2013-07-20 Werner Lemberg <wl@gnu.org>
-
- * docs/INSTALL.GNU: Updated.
-
-2013-07-20 Behdad Esfahbod <behdad@google.com>
-
- [sfnt] Fix `sbix' table version handling.
-
- * src/sfnt/ttsbit.c (tt_face_load_sbit) [TT_SBIT_TABLE_TYPE_SBIX]:
- USHORT version numbers are to be considered as `minor'.
-
-2013-07-19 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix segment classification for blue zones.
-
- The old code (essentially unchanged since the very beginning)
- incorrectly handled this configuration
-
- x -o- x
- / \
- / \
- / \
- o o
-
- as flat and this
-
- o o
- / /
- x| x|
- | |
- o---------------o
-
- as round. (`o' and `x' are on and off points, respectively).
-
- This is a major change which should improve the rendering results
- enormously for many TrueType fonts, especially in the range approx.
- 20-40ppem, fixing the appearance of many overshoots.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Look at the
- first and last points of the segment, not the points right before
- and after.
-
-2013-07-19 Behdad Esfahbod <behdad@google.com>
-
- [sfnt] `sbix' fix-ups.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Apple's `sbix' color bitmaps
- are rendered scaled and then the `glyf' outline rendered on top. We
- don't support that yet, so just ignore the `glyf' outline and
- advertise it as a bitmap-only font.
-
- * src/sfnt/ttsbit.c (tt_face_load_strike_metrics)
- [TT_SBIT_TABLE_TYPE_SBIX]: Return metrics in 26.6 units.
- (tt_face_load_sbix_image): Typo.
-
-2013-07-18 Behdad Esfahbod <behdad@google.com>
-
- [sfnt] Add support for Apple's `sbix' color bitmap table.
-
- * include/freetype/internal/tttypes.h (TT_SBit_MetricsRec): Widen
- fields to FT_Short and FT_UShort, respectively.
- (TT_SbitTableType): New enumeration.
- (TT_FaceRec): Add `sbit_table_type' field.
-
- * include/freetype/tttags.h (TTAG_sbix): New macro.
-
- * src/sfnt/pngshim.c (Load_SBit_Png): Pass a more generic
- FT_GlyphSlot argument instead FT_Bitmap.
- Add flag to control map and metrics handling.
- Update all users.
-
- * src/sfnt/ttsbit.c: Include `ttmtx.h'.
- (tt_face_load_eblc): Renamed to...
- (tt_face_load_sbit): This.
- Handle `sbix' bitmaps.
- (tt_face_free_eblc): Renamed to...
- (tt_face_load_sbit): This.
- Updated.
- (tt_face_load_strike_metrics): Handle `sbix' bitmaps.
- (tt_face_load_sbix_image): New function.
- (tt_sbit_decoder_alloc_bitmap, tt_sbit_decoder_load_image,
- tt_sbit_decoder_load_byte_aligned, tt_sbit_decoder_load_bit_aligned,
- tt_sbit_decoder_load_compound, tt_sbit_decoder_load_png,
- tt_sbit_decoder_load_image, tt_sbit_decoder_load_bitmap): Don't pass
- and handle load flags.
- (tt_sbit_decoder_load_bitmap) [!FT_CONFIG_OPTION_USE_PNG]: Better
- handle formats 17-19.
- Move color to grayscale conversion to...
- (tt_face_load_sbit_image): Here.
- Handle `sbix' bitmaps.
-
- * src/sfnt/pngshim.h: Updated.
- * src/sfnt/ttsbit.h: Updated.
- * src/sfnt/sfdriver.c: Updated.
-
-2013-07-18 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Ignore invalid magic number in `head' or `bhed'.
-
- Other font engines seem to ignore it also. Problem reported by
- Hin-Tak Leung <htl10@users.sourceforge.net>.
-
- * src/sfnt/ttload.c (check_table_dir): Don't abort but warn only if
- we have an invalid magic number.
-
-2013-07-16 Werner Lemberg <wl@gnu.org>
-
- [smooth] Fix segfault caused by previous commit.
-
- * src/smooth/ftgrays.c (gray_set_cell): Always compute
- `ras.invalid'.
-
-2013-07-16 David Turner <digit@google.com>
-
- [smooth] Improve performance.
-
- Provide a work-around for an ARM-specific performance bug in GCC.
- This speeds up the rasterizer by more than 5%.
-
- Also slightly optimize `set_gray_cell' and `gray_record_cell' (which
- also improves performance on other platforms by a tiny bit (<1%).
-
- * src/smooth/ftgrays.c (FT_DIV_MOD): New macro.
- Use it where appropriate.
-
- (gray_record_cell, gray_set_cell, gray_move_to,
- gray_convert_glyph_inner): Streamline condition handling.
-
-2013-07-16 David Turner <digit@google.com>
-
- [truetype] Add assembler code for TT_MulFix14 and TT_DotFix14.
-
- This patch provides slightly optimized versions for ARM, x86, and
- x86_64 CPUs if built with GCC.
-
- Also remove some dead code.
-
- * src/truetype/ttinterp.c (TT_MulFix14_arm, TT_MulFix14_long_long,
- TT_DotFix14_long_long): New functions.
-
-2013-07-16 David Turner <digit@google.com>
-
- Optimize FT_MulFix for x86_64 GCC builds.
-
- This patch provides an optimized `FT_MulFix' implementation for
- x86_64 machines when FreeType is built with GCC, or compatible
- compilers like Clang.
-
- Example:
- bin/ftbench -p -t 5 -s 14 -f 0008 Arial.ttf
-
- Before:
-
- Load 4.863 us/op
- Load_Advances (Normal) 4.816 us/op
- Load_Advances (Fast) 0.028 us/op
- Render 2.753 us/op
- Get_Glyph 0.463 us/op
- Get_CBox 0.077 us/op
- Get_Char_Index 0.023 us/op
- Iterate CMap 13.898 us/op
- New_Face 12.368 us/op
- Embolden 0.028 us/op
- Get_BBox 0.302 us/op
-
- After:
-
- Load 4.617 us/op
- Load_Advances (Normal) 4.645 us/op
- Load_Advances (Fast) 0.027 us/op
- Render 2.789 us/op
- Get_Glyph 0.460 us/op
- Get_CBox 0.077 us/op
- Get_Char_Index 0.024 us/op
- Iterate CMap 13.403 us/op
- New_Face 12.278 us/op
- Embolden 0.028 us/op
- Get_BBox 0.301 us/op
-
- * builds/unix/ftconfig.in, include/freetype/config/ftconfig.h
- (FT_MulFix_x86_64): New function.
-
-2013-07-16 David Turner <digit@google.com>
-
- Speed up ARMv7 support.
-
- When building for ARMv7 with thumb2 instructions, the optimized
- `FT_MulFix_arm' assembly routine was not being used.
-
- The reason for this is in the `ftconfig.h' header, namely:
-
- - The assembly routine uses the `smull' instruction which is not
- available when generating Thumb-1 machine code. It is available
- in Thumb-2 mode, though.
-
- - The header was written a long time ago before Thumb-2 became
- widely popular (e.g. with Android). So it simply doesn't use the
- assembly routine if the `__thumb__' built-in macro is defined.
-
- - When compiling in Thumb-2 mode, the compiler will define both
- `__thumb__' and `__thumb2__'.
-
- By checking for `(__thumb2__ || !__thumb__)', we ensure that the
- assembly routine is only avoided when generating Thumb-1 code.
-
- Given that this is performance-sensitive function, this improves
- `ftbench' as follows on a Galaxy Nexus:
-
- Before (us/op) After (us/op)
-
- - loading Arial.ttf glyphs at 14 ppem [1]
-
- Load 34.285 33.098
-
- - same operation with the light auto-hinter [2]
-
- Load 31.317 29.590
-
- - same operation without hinting [3]
-
- Load 6.143 5.376
-
- - loading Arial.ttf advances at 14 ppem [4]
-
- Load_Advances (normal) 34.216 33.016
- Load_Advances (fast) 0.176 0.176
-
- [1] ftbench -t 5 -p -s 14 -b a -f 0008 Arial.ttf
- [2] ftbench -t 5 -p -s 14 -b a -r 1 -f 0028 Arial.ttf
- [3] ftbench -t 5 -p -s 14 -b a -f 000a Arial.ttf
- [4] ftbench -t 5 -p -s 14 -b b -f 0008 Arial.ttf
-
- * builds/unix/ftconfig.in, include/freetype/config/ftconfig.h
- (FT_MULFIX_ASSEMBLER): Fix handling for ARMv7.
-
-2013-06-28 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2013-06-27 Werner Lemberg <wl@gnu.org>
-
- * src/winfonts/winfnt.c (FNT_Load_Glyph): Fix bitmap width guard.
-
-2013-06-25 Werner Lemberg <wl@gnu.org>
-
- [cff] Add darkening limit to `darkening-parameters'.
-
- * src/cff/cffdrivr.c (cff_property_set): Add check.
-
-2013-06-25 Werner Lemberg <wl@gnu.org>
-
- [cff] Add `darkening-parameters' property.
-
- * include/freetype/ftcffdrv.h: Document it.
-
- * src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
- `darkening-parameters' property.
-
- * src/cff/cf2font.h (CF2_FontRec): Add `darkenParams' array.
-
- * src/cff/cf2font.c (cf2_computeDarkening): Add `darkenParams'
- argument and use it.
- Update all callers.
-
- * src/cff/cf2ft.c (cf2_decoder_parse_charstrings): Copy
- `darken_params' values.
-
- * src/cff/cffobjs.h (CFF_DriverRec): Add `darken_params' array.
-
- * src/cff/cffobjs.c (cff_driver_init): Set default values for
- `darken_params'.
-
-2013-06-25 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Code shuffling.
-
- * src/tools/docmaker/tohtml.py (re_url): Move regexp...
- * src/tools/docmaker/sources.py: ... to this file.
-
-2013-06-25 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Remove unused functions.
-
- * src/tools/docmaker/content.py (DocMarkup.get_start,
- DocBlock.get_markup_name): Removed.
- * src/tools/docmaker/tohtml.py (html_quote0, dump_html_code,
- HtmlFormatter.make_html_words): Removed.
-
-2013-06-25 Werner Lemberg <wl@gnu.org>
-
- * builds/freetype.mk (dll): Remove target.
-
- Problem reported by Jörg Günnewig <joerg.guennewig@googlemail.com>.
-
-2013-06-25 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Recognise URLs.
-
- * src/tools/docmaker/tohtml.py (re_url): New regular expression.
- (make_html_para): Use it.
-
-2013-06-19 Werner Lemberg <wl@gnu.org>
-
- * Version 2.5.0.1 released.
- ===========================
-
-
- Tag sources with `VER-2-5-0-1'.
-
- * include/freetype/config/ftoption.h: Undefine
- CFF_CONFIG_OPTION_OLD_ENGINE.
- * devel/ftoption.h: Define CFF_CONFIG_OPTION_OLD_ENGINE.
-
-2013-06-19 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/install.mk (install): Don't create `cache' directory.
-
- Found by Peter Breitenlohner <peb@mppmu.mpg.de>.
-
-2013-06-19 Werner Lemberg <wl@gnu.org>
-
- * Version 2.5.0 released.
- =========================
-
-
- Tag sources with `VER-2-5-0'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.5.0.
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.4.12/2.5.0/, s/2412/250/.
-
- * include/freetype/freetype.h (FREETYPE_MINOR): Set to 5.
- (FREETYPE_PATCH): Set to 0.
-
- * builds/unix/configure.raw (version_info): Set to 16:2:10.
-
- * src/base/ftobjs.c (FT_Open_Face): Pacify compiler.
- * src/truetype/ttinterp.c (Ins_MSIRP, Ins_MIRP): Ditto.
-
-2013-06-18 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #39269.
-
- * src/base/ftgloadr.c (FT_GlyphLoader_CheckPoints): Free memory in
- case of reallocation failures.
-
-2013-06-18 Andrew Church <achurch+savannah@achurch.org>
-
- Fix Savannah bug #39266.
-
- If memory allocations fail at certain points while opening a font,
- FreeType can either crash due to a NULL dereference or leak memory.
-
- * include/freetype/internal/ftobjs.c (FT_Face_InternalRec,
- FT_LibraryRec): Make `refcount' a signed integer. If, for example,
- FT_Open_Face() fails in a memory allocation before the face's
- reference count is set to 1, a subsequent `FT_Done_Library' call
- would otherwise loop over `FT_Done_Face' 2^32 times before freeing
- the face.
-
- * src/base/ftobjs.c (open_face): Initialize `stream' and friends
- earlier.
- (FT_Open_Face) <Fail>: Behave correctly if `node' is NULL.
- (FT_Destroy_Module) <Fail>: Check that `renderer_clazz' is valid.
-
-2013-06-14 Werner Lemberg <wl@gnu.org>
-
- * src/smooth/ftgrays.c One final pragma to silence 64-bit MSVC.
-
-2013-06-06 Dave Arnold <darnold@adobe.com>
- Werner Lemberg <wl@gnu.org>
-
- [cff] Add code to Adobe's engine to handle ppem > 2000.
-
- * src/cff/cffgload.c (cff_slot_load): If we get
- FT_Err_Glyph_Too_Big, retry unhinted and scale up later on.
-
-2013-06-12 Werner Lemberg <wl@gnu.org>
-
- Another try on pragmas.
-
- * include/freetype/internal/ftdebug.h: Move pragmas to...
- * include/freetype/internal/internal.h: ... this file since it gets
- included by all source files.
- * include/freetype/internal/ftserv.h: Remove pragma which has no
- effect.
-
-2013-06-12 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/ftdebug.h: Disable MSVC warning C4127.
-
- This partially undoes commit 3f6e0e0c.
-
-2013-06-12 Werner Lemberg <wl@gnu.org>
-
- More compiler warning fixes.
-
- */*: Use cast to `FT_Bool' (or `Bool') where appropriate.
-
-2013-06-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] Improve handling of broken sbit advance widths.
-
- * src/truetype/ttgload.c (TT_Load_Glyph): Use the glyph's (scaled)
- `linearHoriAdvance' if the sbit's `horiAdvance' value is zero.
-
- Cf. font `Fixedsys Excelsior' v3.01 (FSEX300.ttf), glyph A, 16ppem.
-
-2013-06-10 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Improve embedded bitmap tracing.
-
- * src/base/ftobjs.c (FT_Request_Size): Move trace message regarding
- bitmap strike match to...
- (FT_Match_Size): This function.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_metrics,
- tt_sbit_decoder_load_byte_aligned, tt_sbit_decoder_load_bit_aligned,
- tt_sbit_decoder_load_compound, tt_sbit_decoder_load_png,
- tt_sbit_decoder_load_image): Decorate with tracing messages.
-
-2013-06-10 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #39160.
-
- * src/truetype/ttinterp.c (Ins_SDPVTL): Set projection vector too
- for the degenerate case.
-
-2013-06-09 David Turner <digit@google.com>
-
- * src/cache/ftcmanag.c (FTC_Manager_Reset): Add missing cache flush.
-
- This code, present since eight(!) years in the unused `CACHE'
- branch, has been forgotten to apply to the master branch. It's
- really amazing that noone has ever complained since
- `FTC_Manager_Reset' is pretty useless without flushing the cache.
-
-2013-06-07 Werner Lemberg <wl@gnu.org>
-
- Add and improve pragmas for MSVC compiler.
-
- * include/freetype/internal/ftdebug.h: Remove pragmas.
- * include/freetype/internal/ftserv.h: Use push and pop for pragmas.
- * include/freetype/internal/ftvalid.h: Handle warning C4324.
- * src/base/ftobjs.c: Use push and pop for pragmas.
- * src/gzip/ftgzip.c: Handle warning C4244.
-
-2013-06-07 Werner Lemberg <wl@gnu.org>
-
- [cff] s/cf2_getGlyphWidth/cf2_getGlyphOutline/.
-
- * src/cff/cf2font.c, src/cff/cf2font.h, src/cff/cf2ft.c: Do it.
-
-2013-06-06 Dave Arnold <darnold@adobe.com>
-
- [cff] Add early exit feature for width-only calls.
-
- This is for `FT_Get_Advance'.
-
- There are 7 places where the spec says the width can be defined:
-
- hstem/hstemhm
- vstem/vstemhm
- cntrmask/hintmask
- hmoveto
- vmoveto
- rmoveto
- endchar
-
- * src/cff/cf2intrp.c (cf2_doStems): Exit early for width-only calls,
- if possible.
-
- (cf2_interpT2CharString) <cf2_cmdHSTEM>, <cf2_cmdVSTEM>,
- <cf2_cmdVMOVETO>, <cf2_cmdENDCHAR>, <cf2_cmdHINTMASK>,
- <cf2_cmdRMOVETO>, <cf2_cmdHMOVETO>: Exit early for width-only calls.
-
-2013-06-06 Werner Lemberg <wl@gnu.org>
-
- Next round of compiler fixes.
-
- * builds/win32/ftdebug.c, builds/wince/ftdebug.c (ft_debug_init):
- Add proper cast.
-
- * include/freetype/internal/ftserv.h (FT_SERVICE_UNAVAILABLE): Fix
- cast.
- * include/freetype/internal/ftstream.h: Decorate stream and frame
- macros with `FT_Long' and `FT_ULong' as appropriate.
-
- * src/base/ftrfork.c (raccess_guess_darwin_hfsplus,
- raccess_guess_darwin_newvfs): Use cast.
-
- * src/bdf/bdflib.c (_bdf_set_default_spacing): Use cast.
-
- * src/cache/ftcmanag.c (FTC_Manager_Check): Fix cast.
- * src/cache/ftcmanag.h (FTC_ManagerRec): Ditto.
-
- * src/cff/cf2arrst.c (cf2_arrstack_setNumElements): Use cast.
- * src/cff/cf2ft.c (cf2_freeSeacComponent): Ditto.
- * src/cff/cffobjs.c (remove_subset_prefix, remove_style): Ditto.
-
- * src/cid/cidparse.c (cid_parser_new): Use cast.
-
- * src/pcf/pcfdrivr.c (PCF_Glyph_Load): Use cast.
-
- * src/psaux/psobjs.c (reallocate_t1_table): Fix argument type.
-
- * src/raster/ftraster.c (ft_black_reset): Use cast.
-
- * src/truetype/ttgxvar.c (FT_Stream_FTell): Use cast.
- (ALL_POINTS): Fix cast.
-
- * src/type1/t1driver.c (t1_ps_get_font_value): Add casts.
- * src/type1/t1parse.c (T1_Get_Private_Dict): Add cast.
-
-2013-06-05 Dave Arnold <darnold@adobe.com>
-
- Fix more MSVC Win32 compiler warnings.
-
- * src/base/ftobjs.c: Fix typo in MS pragma.
-
- * src/base/bdflib.c (_bdf_set_default_spacing, _bdf_add_property):
- `lineno' is only used in debug mode.
-
- * src/cff/cf2ft.c (cf2_builder_moveTo): `params' is only used in
- debug mode.
-
-2013-06-05 Werner Lemberg <wl@gnu.org>
-
- Fix compiler warnings.
-
- * include/freetype/internal/ftmemory.h: Decorate memory allocation
- macros with `FT_Long' where appropriate.
- Remove duplicate of FT_MEM_QRENEW_ARRAY definition.
-
- * src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra): Use
- cast.
-
- * src/base/ftobjs.c: Add warning disabling pragma for MSVC while
- including `md5.c'.
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdESC>: Add
- cast.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_compound): Fix casts.
- (tt_sbit_decoder_load_bitmap): Beautification.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Initialize
- variables (earlier).
-
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Pacify compiler.
-
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): Use unsigned constants
- where appropriate.
-
- * src/type1/t1load.c (T1_Get_MM_Var): Ditto.
-
-2013-06-04 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cf2font.c (cf2_getGlyphWidth): Initialize `advWidth'.
-
- Problem reported by Ingmar Sittl <ingmar.sittl@elektrobit.com>.
-
-2013-06-04 Werner Lemberg <wl@gnu.org>
-
- Apply fixes for cppcheck nitpicks.
-
- http://cppcheck.sourceforge.net/
-
- The call was (from the top-level of the FreeType tree):
-
- cppcheck --force \
- --enable=all \
- -I include \
- -I include/freetype/ \
- -I include/freetype/config/ \
- -I include/freetype/internal/ \
- . &> cppcheck.log
-
- Note that the current version heavily chokes on FreeType, delivering
- many wrong results. I will report those issues to the cppcheck team
- so that a newer version gives improved results hopefully.
-
- */* Improve variable scopes.
- */* Remove redundant initializations which get overwritten.
-
- * src/base/ftmac.c, builds/mac/ftmac.c (count_faces_scalable):
- Remove unused variable.
-
- * src/base/ftdbgmem.c (ft_mem_table_destroy): `table' can't be zero.
-
- * src/gxvalid/gxvkern.c (gxv_kern_subtable_fmt1_entry_validate):
- Remove functionless code.
-
- * src/tools/ftrandom.c (main): Fix memory leak.
-
-2013-06-03 Werner Lemberg <wl@gnu.org>
-
- Add CFF_CONFIG_OPTION_OLD_ENGINE configuration option.
-
- This controls whether the old FreeType CFF engine gets compiled into
- FreeType. It is now disabled by default.
-
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (CFF_CONFIG_OPTION_OLD_ENGINE): New macro.
-
- * src/cff/cffdrivr.c (cff_property_set), src/cff/cffgload.c
- (CFF_Operator, cff_argument_counts, cff_builder_add_point,
- cff_operator_seac, cff_decoder_parse_charstrings, cff_slot_load),
- src/cff/cffgload.h, src/cff/cffobjs.c (cff_driver_init): Use
- CFF_CONFIG_OPTION_OLD_ENGINE to guard the affected code.
-
- * docs/CHANGES: Updated.
-
-2013-06-02 Werner Lemberg <wl@gnu.org>
-
- Fix PNG library handling.
-
- * builds/unix/configure.raw: Don't use LIBPNG_LIBS but
- LIBPNG_LDFLAGS.
-
-2013-05-23 Behdad Esfahbod <behdad@google.com>
-
- Add support for color embedded bitmaps (eg. color emoji).
-
- A new load flag, FT_LOAD_COLOR, makes FreeType load color
- embedded-bitmaps, following this draft specification
-
- https://color-emoji.googlecode.com/git/specification/v1.html
-
- which defines two new SFNT tables, `CBDT' and `CBLC' (named and
- modeled after `EBDT' and `EBLC', respectively). The color bitmaps
- are stored in the new FT_PIXEL_MODE_BGRA format to represent BGRA
- pre-multiplied sRGB images. If PNG support is available, PNG color
- images as defined in the same proposed specification are supported
- also.
-
- Note that color bitmaps are converted to grayscale if client didn't
- ask for color.
-
- * builds/unix/configure.raw: Search for libpng.
- Add `--without-png' option.
-
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (FT_CONFIG_OPTION_USE_PNG): New macro.
-
- * include/freetype/freetype.h (FT_LOAD_COLOR): New load flag.
-
- * include/freetype/ftimage.h (FT_Pixel_Mode): Add
- `FT_PIXEL_MODE_BGRA'.
-
- * include/freetype/tttags.h (TTAG_CBDT, TTAG_CBLC): New tags.
-
- * src/base/ftbitmap.c (FT_Bitmap_Embolden): Updated.
- (ft_gray_for_premultiplied_srgb_bgra): New function.
- (FT_Bitmap_Convert): Handle FT_PIXEL_MODE_BGRA.
-
- * src/sfnt/pngshim.c, src/sfnt/pngshim.h: New files.
-
- * src/sfnt/sfnt.c: Include `pngshim.c'.
-
- * src/sfnt/ttsbit.c: Include FT_BITMAP_H and `pngshim.h'
- (tt_face_load_eblc): Load `CBLC'.
- (tt_sbit_decoder_init): Load `CBDT'.
- (tt_sbit_decoder_alloc_bitmap): Pass load flags to select between
- color and grayscale bitmaps.
- Set `num_grays'. This is used by `ftview' to choose the blending
- algorithm.
- (tt_sbit_decoder_load_byte_aligned,
- tt_sbit_decoder_load_bit_aligned, tt_sbit_decoder_load_compound,
- tt_sbit_decoder_load_image): Pass load flag.
- s/write/pwrite/.
- Don't call `tt_sbit_decoder_alloc_bitmap'.
- Updated.
- (tt_sbit_decoder_load_png) [FT_CONFIG_OPTION_USE_PNG]: New function.
- (tt_sbit_decoder_load_bitmap): Pass load flag.
- Handle new glyph formats 17, 18, and 19.
- Call `tt_sbit_decoder_alloc_bitmap'.
- Flatten color bitmaps if necessary.
- (tt_face_load_sbit_image): Updated.
-
- * src/sfnt/rules.mk (SFNT_DRV_SRC): Add `pngshim.c'.
-
- * docs/CHANGES: Updated.
-
-2013-05-24 Guenter <info@gknw.net>
-
- Apply Savannah patch #8055.
-
- Make `apinames' create an import file for NetWare.
-
- * src/tools/apinames.c (PROGRAM_VERSION): Set to 0.2.
- (OutputFormat): Add `OUTPUT_NETWARE_IMP'.
- (names_dump): Handle it.
- (usage): Updated.
- (main): Handle new command line flag `-wN'.
-
-2013-05-23 Behdad Esfahbod <behdad@behdad.org>
-
- Compilation fix.
-
- * src/truetype/ttinterp.c (TT_RunIns)
- [!TT_CONFIG_OPTION_SUBPIXEL_HINTING]: Make it work.
-
-2013-05-22 Infinality <infinality@infinality.net>
-
- [truetype] Formatting and an additional subpixel tweak.
-
- * src/truetype/ttinterp.c (Ins_SHPIX): Formatting fix.
- * src/truetype/ttsubpix.c (SKIP_NONPIXEL_Y_MOVES_Rules):
- Revert previous modification for Verdana clones.
-
-2013-05-22 Infinality <infinality@infinality.net>
-
- [truetype] Adjust subpixel zp2 moves and tweak rules.
-
- These modifications fix thin diagonal stems in some legacy fonts.
-
- * src/truetype/ttinterp.c (Direct_Move_X): Remove unused macro.
- (Move_Zp2_Point): Don't always disable x moves for subpixel rendering.
- (Ins_SHP): Disable x moves here for subpixel rendering.
- (Ins_SHPIX): Only disable x moves in compatibility mode.
- Split out zp2 move reversals and reorder conditional respectively.
-
- * src/truetype/ttsubpix.c (SKIP_NONPIXEL_Y_MOVES_Rules): Fix oversight.
- Only adjust Verdana clones for 17 ppem.
- (SKIP_NONPIXEL_Y_MOVES_Rules_Exceptions): Add Courier New.
- (ALWAYS_SKIP_DELTAP_Rules): Found additional cases for Arial `s'.
-
-2013-05-20 Infinality <infinality@infinality.net>
-
- [truetype] Simplify and improve subpixel function detection.
-
- Some small enhancements have allowed the removal of many macros and
- the simplification of existing rules in `ttsubpix.c'.
-
- * src/truetype/ttsubpix.h (SPH_TWEAK_ALLOW_X_DMOVEX,
- SPH_TWEAK_ALLOW_X_MOVE_ZP2,
- SPH_TWEAK_DELTAP_SKIP_EXAGGERATED_VALUES,
- SPH_TWEAK_SKIP_INLINE_DELTAS, SPH_TWEAK_MIRP_CVT_ZERO): Removed.
- (SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES_DELTAP): New rule macro.
-
- * src/truetype/ttsubpix.c: Updated affected rules.
-
- * src/truetype/ttinterp.c (Direct_Move_X): Updated.
- (INS_FDEF): Add additional function detection.
- (INS_ENDF): Set runtime flag.
- (Ins_CALL): Skip the call under certain conditions.
- Remove bad code.
- (Ins_LOOPCALL): Skip the call under certain conditions.
- Remove bad code.
- (Move_Zp2_Point): Updated.
- (Ins_SHPIX): Updated.
- Skip the move under some situations.
- (Ins_MIAP): Improve conditions.
- (Ins_MIRP): Updated.
- (Ins_DELTAP): Skip move under certain conditions.
- Simplify conditions.
- (TT_RunIns): Updated.
- Add code to handle new function detection.
- Trace messages.
-
-2013-05-17 Werner Lemberg <wl@gnu.org>
-
- Update more FT_Err_XXX macros using FT_ERR and FT_THROW;
-
- * builds/amiga/src/base/ftsystem.c, builds/mac/ftmac.c,
- builds/unix/ftsystem.c, builds/vms/ftsystem.c: Do it.
-
-2013-05-15 Werner Lemberg <wl@gnu.org>
-
- [truetype] Add `interpreter-version' property.
-
- This makes the option TT_CONFIG_OPTION_SUBPIXEL_HINTING controllable
- at runtime.
-
- * include/freetype/ftttdrv.h: New file.
-
- * include/freetype/config/ftheader.h (FT_TRUETYPE_DRIVER_H): New
- macro.
-
- * src/truetype/ttdriver.c: Include FT_TRUETYPE_DRIVER_H.
- (tt_property_set, tt_property_get): Fill templates.
-
- * src/truetype/ttobjs.h (TT_DriverRec): Add `interpreter_version'
- member.
- Remove unused `extension_component' member.
-
- * src/truetype/ttgload.c: Include FT_TRUETYPE_DRIVER_H.
- (tt_get_metrics, TT_Hint_Glyph, TT_Process_Simple_Glyph,
- compute_glyph_metrics, tt_loader_init): Use `interpreter_version'.
-
- * src/truetype/ttinterp.c: Include FT_TRUETYPE_DRIVER_H.
- (SUBPIXEL_HINTING): New macro to check `interpreter_version' flag.
- Update all affected functions to use it.
- Use TT_INTERPRETER_VERSION_XXX where appropriate.
-
- * src/truetype/ttobjs.c: Include FT_TRUETYPE_DRIVER_H.
- (tt_driver_init): Initialize `interpreter_version'.
-
- * src/truetype/ttsubpix.c: Include FT_TRUETYPE_DRIVER_H.
- Use TT_INTERPRETER_VERSION_XXX where appropriate.
-
-2013-05-13 Werner Lemberg <wl@gnu.org>
-
- [truetype] Avoid empty source file.
-
- * src/truetype/ttsubpix.c [!TT_CONFIG_OPTION_SUBPIXEL_HINTING]:
- Provide dummy typedef.
-
-2013-05-13 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cf2font.c (cf2_getGlyphWidth): Fix uninitialized variable.
-
- Fix suggested by Vaibhav Nagarnaik <vnagarnaik@gmail.com>.
-
-2013-05-13 Brian Nixon <bnixon@yahoo.com>
-
- Fix Savannah bug #38970.
-
- * src/base/ftdebug.c, builds/win32/ftdebug.c,
- builds/wince/ftdebug.c, builds/amiga/src/base/ftdebug.c
- (ft_debug_init): Don't read past the environment variable FT2_DEBUG.
-
-2013-05-12 Werner Lemberg <wl@gnu.org>
-
- [truetype] Add framework for TrueType properties.
-
- * src/truetype/ttdriver.c: Include FT_SERVICE_PROPERTIES_H.
- (tt_property_set, tt_property_get): New functions, still empty.
- Define `tt_service_properties' service.
- Update `tt_services'.
-
- * src/truetype/ttpic.h: Include FT_SERVICE_PROPERTIES_H.
- (TT_SERVICE_PROPERTIES_GET): New macro.
- (TTModulePIC): Add `tt_service_properties'.
-
-2013-05-12 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #38967.
-
- * src/base/ftcalc.c (FT_DivFix) [FT_LONG64]: Fix cast.
-
-2013-05-12 Werner Lemberg <wl@gnu.org>
-
- Introduce unsigned 64bit type (if available).
-
- * include/freetype/config/ftconfig.h: Define FT_UINT64 if available.
- [FT_LONG64]: Provide FT_UInt64.
-
- * builds/unix/ftconfig.in: Synchronized.
-
-2013-05-12 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #38968.
-
- * include/freetype/ftmodapi.h: Add `FT_EXPORT' to
- FT_Property_{Set,Get}.
- * src/base/ftobjs.c: Add `FT_EXPORT_DEF' to
- FT_Property_{Set,Get}.
-
-2013-05-10 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Clean up bitmap code.
-
- * src/sfnt/ttsbit.c: Deleted.
- * src/sfnt/ttsbit0.c: Renamed to `ttsbit.c'.
- * rules.mk (SFNT_DRV_H): Updated.
-
-2013-05-10 Werner Lemberg <wl@gnu.org>
-
- */* [FT_CONFIG_OPTION_OLD_INTERNALS]: Remove macro and guarded code.
-
-----------------------------------------------------------------------------
-
-Copyright 2013-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used, modified,
-and distributed under the terms of the FreeType project license,
-LICENSE.TXT. By continuing to use, modify, or distribute this file you
-indicate that you have read the license and understand and accept it
-fully.
-
-
-Local Variables:
-version-control: never
-coding: utf-8
-End:
diff --git a/ChangeLog.26 b/ChangeLog.26
deleted file mode 100644
index c174b6d4c..000000000
--- a/ChangeLog.26
+++ /dev/null
@@ -1,5711 +0,0 @@
-2016-07-12 Werner Lemberg <wl@gnu.org>
-
- * Version 2.6.5 released.
- =========================
-
-
- Tag sources with `VER-2-6-5'.
-
- This commit immediately follows `[mac] Fix ftexport.sym target in
- Jamfile.' on a separate branch, which was then merged with master
- after the release.
-
- * include/freetype/config/ftoption.h
- (TT_CONFIG_OPTION_SUBPIXEL_HINTING): Comment out.
-
- * docs/VERSION.TXT: Add entry for version 2.6.5.
-
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/index.html,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualc/index.html,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj,
- builds/windows/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.6.4/2.6.5/, s/264/265/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 5.
-
- * builds/unix/configure.raw (version_info): Set to 18:5:12.
- * CMakeLists.txt (VERSION_PATCH): Set to 5.
-
- * docs/CHANGES: Updated.
-
-2016-07-11 Werner Lemberg <wl@gnu.org>
-
- Conditionally compile environment support.
-
- * include/freetype/internal/ftobjs.h, src/autofit/afmodule.c,
- src/base/ftobjs.c, src/cff/cffdrivr.c, src/truetype/ttdriver.c:
- Decorate with `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES' where
- necessary.
-
-2016-07-11 Werner Lemberg <wl@gnu.org>
-
- Handle properties in `FREETYPE_PROPERTIES' environment variable.
-
- This commit covers the most important one.
-
- * src/autofit/afmodule.c (af_property_set): Handle `warping',
- `darkening-parameters', and `no-stem-darkening'.
-
- * src/cff/cffdrivr.c (cff_property_set): Handle
- `darkening-parameters', `hinting-engine', and `no-stem-darkening'.
-
- * src/truetype/ttdriver.c (tt_property_set): Handle
- `interpreter-version'.
-
-2016-07-11 Werner Lemberg <wl@gnu.org>
-
- Replace calls to `atol' with `strtol'.
-
- We later on need strtol's `endptr' feature.
-
- * include/freetype/config/ftstdlib.h (ft_atol): Replace with...
- (ft_strtol): ... this.
-
- * src/base/ftdbgmem.c (ft_mem_debug_init): Updated.
- * src/cid/cidparse.c (cid_parser_new): Ditto.
- * src/type42/t42drivr.c (t42_get_name_index), src/type42/t42objs.c
- (T42_GlyphSlot_Load): Ditto.
-
-2016-07-10 Werner Lemberg <wl@gnu.org>
-
- Implement handling of `FREETYPE_PROPERTIES' environment variable.
-
- Recognizing properties follows in another commit.
-
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES): New macro.
-
- * include/freetype/config/ftstdlib.h (ft_getenv): New macro.
-
- * src/base/ftinit.c (ft_set_default_properties): New function to
- parse `FREETYPE_PROPERTIES' and calling `ft_property_string_set'.
- (FT_Init_FreeType): Updated.
-
-2016-07-09 Werner Lemberg <wl@gnu.org>
-
- Add function `ft_property_string_set'.
-
- This is a preparation for handling an `FREETYPE_PROPERTIES'
- environment variable to control (some) driver properties.
-
- No change in functionality.
-
- * src/base/ftobjs.c (ft_property_do): Add `value_is_string'
- parameter.
- (ft_property_string_set): New function.
- (FT_Property_Set, FT_Property_Get): Updated.
-
- * include/freetype/internal/ftobjs.h: Updated.
-
- * include/freetype/internal/services/svprop.h
- (FT_Properties_SetFunc): Add `value_is_string' parameter.
-
- * src/autofit/afmodule.c (af_property_set), src/cff/cffdrivr.c
- (cff_property_set), src/truetype/ttdriver.c (tt_property_set):
- Updated, emitting an error currently if `value_is_string' is set.
-
-2016-07-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [mac] Fix ftexport.sym target in Jamfile.
-
- * Jamfile: Update the directories of the header files scanned for
- ftexport.sym. They were incorrect since the migration of the
- header files, on 2015-06-22. Either inexisting include/cache
- (removed on 2006-03-20) is not needed to be listed explicitly.
- Now ftmac.h is scanned only in the case of Mac OS & Mac OS X.
-
-2016-07-08 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Sub-banding protocol revision.
-
- Rasterization sub-banding is utilized at large sizes while using a
- rather small fixed memory pool. Indeed it is possible to make an
- educated guess how much memory is necessary at a given size for a
- given glyph. It turns out that, for a large majority of European
- glyphs, you should store about 8 times more boundary pixels than
- their height. Or, vice versa, if your memory pool can hold 800
- pixels the band height should be 100 and you should sub-band
- anything larger than that. Should you still run out of memory,
- FreeType bisects the band but you have wasted some time. This is
- what has been implemented in FreeType since the beginning.
-
- It was overlooked, however, that the top band could grow to twice
- the default band size leading to unnecessary memory overflows there.
- This commit fixes that. Now the bands are distributed more evenly
- and cannot exceed the default size.
-
- Now the magic number 8 is really suitable for rather simple European
- scripts. For complex Chinese logograms the magic number should be
- 13 but that is subject for another day.
-
- * src/smooth/ftgrays.c (gray_convert_glyph): Revise sub-banding
- protocol.
-
-2016-07-07 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [mac] Fix Savannah bug #48417.
-
- Mac OS X linker throws errors when `-exported_symbol_list' input
- file includes non-existing symbols. Reported by Ryan Schmidt.
-
- * builds/exports.mk: Exclude ftmac.h from the headers for apinames
- by default. Include it when ftmac.c would be compiled.
-
-2016-07-06 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (TInstruction_Function): Removed, unused.
-
-2016-07-05 Werner Lemberg <wl@gnu.org>
-
- * Version 2.6.4 released.
- =========================
-
-
- Tag sources with `VER-2-6-4'.
-
- * docs/VERSION.TXT: Update documentation and bump version number to
- 2.6.4.
-
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/index.html,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualc/index.html,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj,
- builds/windows/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.6.3/2.6.4/, s/263/264/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 4.
-
- * builds/unix/configure.raw (version_info): Set to 18:4:12.
- * CMakeLists.txt (VERSION_PATCH): Set to 4.
-
- * docs/CHANGES: Updated.
-
-2016-07-05 Werner Lemberg <wl@gnu.org>
-
- * src/pfr/pfrsbit.c (pfr_lookup_bitmap_data): Fix compiler warning.
-
-2016-07-04 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Variable type revision (part 2).
-
- * src/smooth/ftgrays.c (TArea): Restore original definition as `int'.
- (gray_render_line) [FT_LONG64]: Updated.
- (gray_convert_glyph): 32-bit band bisection stack should be 32 bands.
- (gray_convert_glyph_inner): Trace successes and failures.
-
-2016-07-04 Werner Lemberg <wl@gnu.org>
-
- [autofit] Handle single-point contours as segments.
-
- Doing so allows us to link them to edges – some fonts like
- `NotoSansGurmukhi-Regular' have such isolated points sitting exactly
- on other outlines.
-
- * src/autofit/aflatin.c (af_latin_hints_compute_segments): Don't
- ignore one-point contours but handle them specially as one-point
- segments.
- (af_latin_hints_compute_edges): Append one-point segments to edges
- if possible.
-
-2016-07-02 Werner Lemberg <wl@gnu.org>
-
- [autofit] Remove unused structure members.
-
- * src/autofit/afhints.h (AF_SegmentRec, AF_EdgeRec): Remove
- `num_linked'.
-
- * src/autofit/afcjk.c (af_cjk_hints_link_segments): Updated.
-
-2016-07-02 Werner Lemberg <wl@gnu.org>
-
- [autofit] Update to Unicode 9.0.0.
-
- * src/autofit/afranges.c (af_arab_nonbase_uniranges,
- af_cyrl_uniranges): Add new data.
-
-2016-07-01 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Variable type revision (part 1).
-
- This patch restores original `TCoord' definition as `int' so that the
- rendering pool is used more efficiently on LP64 platforms (unix).
-
- * src/smooth/ftgrays.c (gray_TWorker, TCell, gray_TBand): Switch some
- fields to `TCoord'.
- (gray_find_cell, gray_render_scanline, gray_render_line, gray_hline,
- gray_sweep, gray_convert_glyph): Updated.
-
-2016-06-28 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Minor clean-ups.
-
- * src/smooth/ftgrays.c (gray_TWorker): Remove redundant `ycount'.
- (gray_sweep, gray_convert_glyph, gray_dump_cells): Updated.
-
-2016-06-27 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Minor clean-ups.
-
- * src/smooth/ftgrays.c (gray_convert_glyph): Do not use volatile
- qualifier.
- (gray_raster_render): Move span initializations from here.
- (gray_sweep): ... to here and remove unused `target' argument.
-
-2016-06-26 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [pcf] Fix handling of very large fonts (#47708).
-
- * src/pcf/pcfread.c (pcf_get_encodings): Make `encodingOffset' an
- unsigned short.
- Only reject `0xFFFF' as an invalid encoding offset.
-
-2016-06-25 Werner Lemberg <wl@gnu.org>
-
- [truetype] Really fix deallocation in case of error (#47726).
-
- * src/truetype/ttgload.c (load_truetype_glyph): Thinko; initialize
- `outline.points' also.
-
-2016-06-23 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Consolidate memory management.
-
- * src/smooth/ftgrays.c (gray_init_cells): Remove function.
- (gray_TWorker): Remove fields that become local variables.
- (gray_raster_render): Move rendering buffer declaration from here.
- (gray_convert_glyph): ... to here and update accordingly.
-
-2016-06-22 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Consolidate boundary checks.
-
- Removing the checks from `gray_hline' shaves 1% off rendering speed.
-
- * src/smooth/ftgrays.c [STANDALONE_]: Duplicate `FT_MIN' and `FT_MAX'.
- (gray_TWorker): No need to store `clip_box'.
- (gray_hline): Remove unnecessary boundary checks.
- (gray_convert_glyph): Move boundary checks from here.
- (gray_raster_render): ... to here and consolidate.
-
-2016-06-21 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Use `FT_Outline_Get_CBox'.
-
- * src/smooth/ftgrays.c [STANDALONE_]: Duplicate `FT_Outline_Get_CBox'.
- (gray_compute_cbox): Remove this function.
- (gray_convert_glyph): Update to use `FT_Outline_Get_CBox'.
-
-2016-06-20 Werner Lemberg <wl@gnu.org>
-
- [smooth] Remove compiler warnings.
-
- * src/smooth/ftgrays.c (gray_convert_glyph): Fix reports from clang.
-
-2016-06-20 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Sanitize memory management.
-
- * src/smooth/ftgrays.c (gray_convert_glyph): Cleaned up.
-
-2016-06-18 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Remove `band_shoot' that never worked.
-
- * src/smooth/ftgrays.c (gray_TWorker): Remove `band_shoot'.
- (gray_convert_glyph): Updated.
-
-2016-06-17 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [raster, smooth] Handle FT_RENDER_POOL_SIZE better.
-
- * src/raster/ftraster.c (FT_MAX_BLACK_POOL): New macro.
- (ft_black_render): Updated.
- * src/smooth/ftgrays.c (FT_MAX_GRAY_POOL): New macro.
- (gray_raster_render): Updated.
-
-2016-06-16 Werner Lemberg <wl@gnu.org>
-
- * src/base/md5.c: Updated to recent version.
-
-2016-06-14 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/smooth/ftgrays.c (gray_hline): Optimize if-condition.
-
-2016-06-13 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add support for Cherokee script.
-
- * src/autofit/afblue.dat: Add blue zone data for Cherokee.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Cherokee standard characters.
-
- * src/autofit/afranges.c: Add Cherokee data.
-
- * src/autofit/afstyles.h: Add Cherokee data.
-
-2016-06-09 David Capello <davidcapello@gmail.com>
-
- [cmake] Avoid modifying `ftconfig.h' and `ftoption.h' files.
-
- * CMakeLists.txt: Each time cmake is run those files are
- modified and the whole FreeType library is recompiled. With this
- change we change the files only if there are real modifications, so
- we can avoid recompilations.
-
-2016-06-09 Werner Lemberg <wl@gnu.org>
-
- [bdf] Check number of properties (#48166).
-
- * src/bdf/bdflib.c (_bdf_parse_start): Implement.
-
-2016-06-08 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Re-enable new line renderer on 64-bit archs.
-
- * src/smooth/ftgrays.c (gray_render_line): Conditionally re-enable new
- implementation, where it is safe from overflows.
-
-2016-06-08 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Minor clean-ups.
-
- * src/smooth/ftgrays.c (gray_dump_cells): Move out of the way.
- (gray_render_span): Remove spurious casts and streamline.
-
-2016-06-07 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add support for Ethiopic script.
-
- * src/autofit/afblue.dat: Add blue zone data for Ethiopic.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Ethiopic standard characters.
-
- * src/autofit/afranges.c: Add Ethiopic data.
-
- * src/autofit/afstyles.h: Add Ethiopic data.
-
-2016-06-07 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix compilation with VS2016 (#48126).
-
- This compiler doesn't recognize the end-of-comment sequence `*/' if
- it immediately follows non-ASCII characters.
-
- * src/autofit/afscript.h: Ensure whitespace before `*/'.
-
-2016-06-04 Werner Lemberg <wl@gnu.org>
-
- Fix a test for named instances (#48122).
-
- This was missed while giving negative face indices an extended
- meaning.
-
- * src/base/ftobjs.c (Mac_Read_sfnt_Resource): Implement.
-
-2016-05-31 Nikolaus Waxweiler <madigens@gmail.com>
-
- [truetype] Let SHPIX move points in the twilight zone in v40.
-
- * src/truetype/ttinterp.c (Ins_SHPIX): Allow SHPIX to move points in
- the twilight zone. Otherwise, treat SHPIX the same as DELTAP.
- Unbreaks various fonts such as older versions of Rokkitt and DTL
- Argo T Light that would glitch severely after calling ALIGNRP after a
- blocked SHPIX.
-
-2016-05-30 Werner Lemberg <wl@gnu.org>
-
- [type42] Support `CharStrings' entry format as created by LilyPond.
-
- * src/type42/t42parse.c (t42_parse_charstrings): Handle entries
- having the format
-
- (foo) cvn 12345 def
-
-2016-05-28 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afranges.c: Remove `UL' postfix from hex numbers.
-
- Suggested by Alexei. `UL' is only needed for 16bit compilers, but
- it seems noone is using this anymore (and we no longer test whether
- FreeType compiles in such an environment). Otherwise, it is easy to
- add the postfix to the `AF_UNICODE_RANGE' macro.
-
-2016-05-26 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Shrink bisection stack.
-
- The convergence of Bézier flatteners is fast with the deviation
- from straight line being asymptotically cut 4-fold on each bisection.
- This justifies smaller bisection stack size.
-
- * src/smooth/ftgrays.c (gray_TWorker): Remove common `bez_stack'.
- (gray_render_conic): Create and use conic `bez_stack'. Move back the
- band analysis from...
- (gray_conic_to): ... here.
- (gray_render_cubic): Create and use cubic `bez_stack'. Move back the
- band analysis from...
- (gray_cubic_to): ... here.
- (gray_move_to): Updated.
-
-2016-05-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fixes for Armenian and Gujarati ranges.
-
- * src/autofit/afranges.c (af_armn_uniranges): Corrected.
- (af_guru_nonbase_uniranges): Make U+0A3E a base character.
-
-2016-05-24 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add support for Armenian script.
-
- * src/autofit/afblue.dat: Add blue zone data for Armenian.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Armenian standard characters.
-
- * src/autofit/afranges.c: Add Armenian data.
-
- * src/autofit/afstyles.h: Add Armenian data.
-
-2016-05-23 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/unix-cc.in (LINK_LIBRARY): Use `-export-symbols'.
-
- This was commented about 10 years ago – I think the reason then to
- disable libtool's `-export-symbols' option was to give some badly
- programmed applications access to internal FreeType functions.
-
- I believe that we should no longer take care of such programs; the
- number of symbols exported should be rather restricted as much as
- possible.
-
-2016-05-22 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add blue-zone support for Gurmukhi script.
-
- This essentially moves the Gurmukhi script from the `Indic' hinter to
- the `Latin' hinter.
-
- * src/autofit/afblue.dat: Add blue zone data for Gurmukhi.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Gurmukhi standard characters and move
- data out of AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afranges.c: Move Gurmukhi data out of
- AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afstyles.h: Update Gurmukhi data; in particular, use
- AF_WRITING_SYSTEM_LATIN.
-
-2016-05-21 Werner Lemberg <wl@gnu.org>
-
- Minor clang++ fixes.
-
- * src/base/ftobjs.c (FT_Add_Module), src/psaux/psobjs.c
- (ps_parser_load_field), src/type1/t1load.c (parse_subrs): Add
- initializer.
-
- * src/cache/ftccache.h (FTC_CACHE_TRYLOOP_END): Avoid implicit
- conversion from NULL to boolean.
-
-2016-05-21 Werner Lemberg <wl@gnu.org>
-
- Work around a bug of the C 8.0.0.1 compiler on AIX 5.3 (#47955).
-
- * include/freetype/internal/ftmemory.h (cplusplus_typeof): Use
- braces for `extern "C++"'.
-
-2016-05-17 Nikolaus Waxweiler <madigens@gmail.com>
-
- [truetype] Make TT_LOADER_SET_PP support subpixel hinting [3/3].
-
- * src/truetype/ttgload.c (TT_LOADER_SET_PP): Replace macro with...
- (tt_loader_set_pp): ... this new function.
- Update all callers.
-
-2016-05-17 Nikolaus Waxweiler <madigens@gmail.com>
-
- [truetype] New implementation of v38 bytecode interpreter [2/3].
-
- This patch actually modifies the bytecode interpreter.
-
- See added comments in `ttinterp.h' for more information on this and
- the following commit in the series.
-
- * src/truetype/ttinterp.c (SUBPIXEL_HINTING): Replaced by...
- (NO_SUBPIXEL_HINTING, SUBPIXEL_HINTING_INFINALITY,
- SUBPIXEL_HINTING_MINIMAL): ...new macros.
- (Direct_Move, Direct_Move_X, Direct_Move_Y): Handle backward
- compatibility.
- Updated.
- (Ins_RS, Ins_FDEF, Ins_ENDF, Ins_CALL, Ins_LOOPCALL, Ins_MD):
- Updated.
- (Ins_INSTCTRL): Handle native ClearType mode flag.
- Updated.
- (Ins_FLIPPT, Ins_FLIPRGON, Ins_FLIPRGOFF): Handle backward
- compatibility.
- (Move_Zp2_Point): Ditto.
- (Ins_SHP): Updated.
- (Ins_SHPIX): Handle backward compatibility.
- Updated.
- (Ins_MSIRP, Ins_MDAP, Ins_MIAP, Ins_MDRP, Ins_MIRP): Updated.
- (Ins_ALIGNRP): Updated.
- (Ins_IUP, Ins_DELTAP): Handle backward compatibility.
- Updated.
- (Ins_GETINFO): Handle v38 flags.
- Updated.
- (TT_RunIns): Handle backward compatibility mode.
- Updated.
-
-2016-05-17 Nikolaus Waxweiler <madigens@gmail.com>
-
- [truetype] New implementation of v38 bytecode interpreter [1/3].
-
- This patch prepares data structures and the like.
-
- See added comments in `ttinterp.h' for more information on this and
- the following commits in the series.
-
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (TT_CONFIG_OPTION_SUBPIXEL_HINTING): Assign values to differentiate
- between subpixel versions.
- (TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY,
- TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL): New macros.
-
- * include/freetype/ftttdrv.h (TT_INTERPRETER_VERSION_40): New macro.
-
- * include/freetype/internal/tttypes.h (TT_FaceRec): Updated.
-
- * src/truetype/ttinterp.h (TT_ExecContextRec): Define new fields
- `subpixel_hinting_lean', `vertical_lcd_lean',
- `backward_compatibility', `iupx_called', iupy_called', and
- `grayscale_cleartype' for new hinting mode.
-
- * src/truetype/ttdriver.c (tt_property_set): Handle v38 and v40
- interpreters conditionally.
-
- * src/truetype/ttgload.c (TT_Hint_Glyph): Save phantom points unless
- in v38 backward compatibility mode.
- Updated.
- (compute_glyph_metrics): Add v38 backward compatibility mode
- constraint for adjusting advance widths.
- Updated.
- (tt_loader_init): Handle new flags `subpixel_hinting_lean',
- `grayscale_cleartype', and `vertical_lcd_lean'.
- Updated.
- (tt_get_metrics, TT_Process_Simple_Glyph, TT_LOADER_SET_PP):
- Updated.
-
- * src/truetype/ttobjs.c (tt_driver_init): Conditionally set
- default interpreter version number.
-
- * src/truetype/ttsubpix.c, src/truetype/ttsubpix.h: Updated.
-
-2016-05-17 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix matrix scaling (#47848).
-
- * include/freetype/config/ftstdlib.h (FT_LONG_MIN): New macro.
-
- * src/cff/cffparse.c (cff_parse_font_matrix): Use largest scaling
- value of all matrix coefficients to scale matrix.
-
- * src/cff/cffobjs.c (cff_face_init): Use `matrix->yx' member for
- matrix normalization if `matrix->yy' is zero.
-
-2016-05-16 Werner Lemberg <wl@gnu.org>
-
- [base] Reject invalid sfnt Mac resource (#47891).
-
- * src/base/ftobjs.c (open_face_PS_from_sfnt_stream): Check validity
- of `CID ' and `TYPE1' table offset and length.
-
-2016-05-16 Werner Lemberg <wl@gnu.org>
-
- [cid] Fix scanning for `StartData' and `/sfnts' (#47892).
-
- * src/cid/cidparse.c (STARTDATA, STARTDATA_LEN, SFNTS, SFNTS_LEN):
- New macros.
- (cid_parser_new): Fix and document algorithm.
-
-2016-05-16 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [truetype] Improve the recursive reference detector.
-
- The previous fix for #46372 misunderstood a composite glyph referring
- same component twice as a recursive reference. See the discussion
-
- http://lists.gnu.org/archive/html/freetype/2016-05/msg00000.html
-
- Thanks to Khaled Hosny for finding this issue.
-
- * src/truetype/ttgload.c (ft_list_get_node_at): A function to get
- the i-th node from FT_List.
- (load_truetype_glyph): In the traversal scan of the reference tree
- in the composite glyph, we clear the nodes filled by previous
- sibling chain.
-
-2016-05-07 Werner Lemberg <wl@gnu.org>
-
- [cache] Allow value 0 for face ID.
-
- We never dereference `face_id', and some implementations might use a
- running number instead of a pointer. Additionally, disallowing
- value zero was undocumented.
-
- * src/cache/ftccmap.c (FTC_CMapCache_Lookup), src/cache/ftcmanag.c
- (FTC_Manager_LookupFace, FTC_Manager_RemoveFaceID): Remove test for
- `face_id'.
-
-2016-05-05 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] More efficient accounting of conic splits and draws.
-
- A single decrement counter of segments to draw, instead of an array,
- contains all the information necessary to decide when to split and
- when to draw a conic segment. The number of splits before each draw is
- equal to the number of trailing zeros in the counter.
-
- * src/smooth/ftgrays.c (gray_TWorker): Remove `lev_stack'.
- (gray_render_conic): Updated to use decrement counter of segments.
-
-2016-05-05 Werner Lemberg <wl@gnu.org>
-
- [cff, truetype] Fix logic for `FT_Property_Set'.
-
- Otherwise some properties could be set to arbitrary values, which is
- harmless, but querying could give wrong positive results.
-
- * src/cff/cffdrivr.c (cff_property_set) [hinting-engine],
- * src/truetype/ttdriver.c (tt_property_set) [interpreter-version]:
- Only allow defined values.
-
-2016-04-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add blue-zone support for Gujarati script.
-
- This essentially moves the Gujarati script from the `Indic' hinter to
- the `Latin' hinter.
-
- * src/autofit/afblue.dat: Add blue zone data for Gujarati.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Gujarati standard characters and move
- data out of AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afranges.c: Move Gujarati data out of
- AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afstyles.h: Update Gujarati data; in particular, use
- AF_WRITING_SYSTEM_LATIN.
-
-2016-04-24 Werner Lemberg <wl@gnu.org>
-
- Minor.
-
- * include/freetype/freetype.h (FT_HAS_*, FT_IS_*): Protect macro
- argument with parentheses.
-
-2016-04-24 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix deallocation in case of error (#47726).
-
- * src/truetype/ttgload.c (load_truetype_glyph): Initialize fields in
- `outline' that are going to be deallocated in case of error.
-
-2016-04-23 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve Georgian blue zone characters.
-
- Suggested by Akaki Razmadze <razmadzekoko@gmail.com>.
-
- * src/autofit/afblue.dat (AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM):
- Updated.
-
- * src/autofit/afblue.c: Regenerated.
-
-2016-04-16 David Capello <davidcapello@gmail.com>
-
- [cmake] Honor SKIP_INSTALL_* settings (as used in zlib).
-
- As FreeType depends on zlib, if we don't install zlib (e.g., because
- we defined SKIP_INSTALL_ALL), FreeType cannot be installed, too
- (cmake triggers an error saying that FreeType cannot be installed
- because zlib target isn't in the export set).
-
- * CMakeLists.txt: Honor `SKIP_INSTALL_HEADERS',
- `SKIP_INSTALL_LIBRARIES', and `SKIP_INSTALL_ALL' settings.
-
-2016-04-16 Behdad Esfahbod <behdad@behdad.org>
-
- [truetype] Another fix for non-intermediate GX tuples.
-
- * src/truetype/ttgxvar.c (ft_var_apply_tuple): Add some missing
- cases.
-
-2016-04-12 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Remove forgotten macro.
-
- * include/freetype/internal/internal.h
- [FT_INTERNAL_POSTSCRIPT_GLOBALS_H]: Remove.
-
-2016-04-09 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add support for Georgian scripts.
-
- Georgian is problematic, since `uppercase' forms of Mkhedruli
- (called Mtavruli) are not yet defined in Unicode, which means that
- proper blue zones can't be defined. However, there is already a
- proposal submitted to Unicode; see
-
- http://www.unicode.org/L2/L2016/16034-n4707-georgian.pdf
-
- Additionally, due to historical reasons, Unicode treats Khutsuri as
- the same script as Mkhedruli, and so does OpenType. However, since
- the two scripts have completely different shapes it can happen that
- blue zones differ considerably. The tag `geok' used here (derived
- from ISO 15924) to differentiate the two scripts is not an OpenType
- tag in use. If we now have a font that contains both glyphs for
- Mkhedruli and Khutsuri, and it uses OpenType features for both also,
- HarfBuzz unavoidably treats all glyphs as `geor'. As a consequence,
- blue zones for `geok' are not used for glyphs involved in the
- OpenType features.
-
- An issue not yet resolved is which OpenType feature should be used
- to access Mtavruli glyph shapes; right now, FreeType doesn't set up
- support for them, but it is easy to add them later on as soon as
- more information is available.
-
- * src/autofit/afblue.dat: Add blue zone data for Georgian.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Georgian standard characters.
-
- * src/autofit/afranges.c: Add Georgian data.
-
- * src/autofit/afstyles.h: Add Georgian data.
-
-2016-04-05 Werner Lemberg <wl@gnu.org>
-
- [autofit] Provide dummy blue zone for pseudo script `none'.
-
- Even if the dummy hinter is used as the handler for `none' (which
- doesn't use blue zones), it is more consistent than the old value
- (which was 0), pointing to Arabic...
-
- * src/autofit/afblue.dat: Add `AF_BLUE_STRINGSET_NONE'.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afstyles.h (none_dflt): Use AF_BLUE_STRINGSET_NONE.
-
-2016-03-30 Werner Lemberg <wl@gnu.org>
-
- * src/pfr/pfrload.c (pfr_aux_name_load): Thinko (#47567).
-
-2016-03-30 Werner Lemberg <wl@gnu.org>
-
- * src/pfr/pfrload.c (pfr_log_font_count): Better font size estimate.
-
-2016-03-30 Werner Lemberg <wl@gnu.org>
-
- * src/pfr/pfrload.c (pfr_aux_name_load): Fix memory leak (#47567).
-
-2016-03-29 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftadvanc.c (FT_Get_Advances): Fix invalid left shift.
-
-2016-03-29 Werner Lemberg <wl@gnu.org>
-
- [pfr] Fix binary search (#47514).
-
- * src/pfr/pfrsbit.c (pfr_lookup_bitmap_data): Handle border
- conditions correctly.
-
-2016-03-29 Werner Lemberg <wl@gnu.org>
-
- [pfr] Minor.
-
- * src/pfr/pfrsbit.c (pfr_lookup_bitmap_data): Replace `left',
- `right', and `middle' with `min', `max', and `mid' as used in other
- FreeType binary search code.
- (pfr_load_bitmap_metrics): Fix invalid left shift.
-
-2016-03-29 Werner Lemberg <wl@gnu.org>
-
- * src/pfr/pfrtypes.h: Replace all enums with macros.
-
- We need `~FOO' to unset bits, and only with unsigned values (which
- `enum' isn't normally) this works cleanly.
-
-2016-03-26 Werner Lemberg <wl@gnu.org>
-
- [pfr] Robustify bitmap strike handling (#47514).
-
- We did a binary search for a charcode without ensuring that the
- searched data is ordered. Validating the order is now done lazily,
- this is, the first access to a bitmap glyph triggers the order check
- in the corresponding bitmap strike.
-
- * src/pfr/pfrtypes.h (PFR_BitmapFlags): New values
- `PFR_BITMAP_VALID_CHARCODES' and `PFR_BITMAP_CHARCODES_VALIDATED'.
-
- * src/pfr/pfrsbit.c (pfr_lookup_bitmap_data): Make `flags' argument
- a pointer. Handle new PFR_BITMAP_XXX flags.
- (pfr_slot_load_bitmap): Updated.
-
-2016-03-26 Werner Lemberg <wl@gnu.org>
-
- [pfr] Fix handling of compound glyphs.
-
- Extra items are indicated with different bit positions.
-
- * src/pfr/pfrtypes.h (PFR_GlyphFlags): Replace
- `PFR_GLYPH_EXTRA_ITEMS' with `PFR_GLYPH_SIMPLE_EXTRA_ITEMS' and
- `PFR_GLYPH_COMPOUND_EXTRA_ITEMS'.
-
- * src/pfr/pfrgload.c (pfr_glyph_load_simple,
- pfr_glyph_load_compound): Use them.
-
-2016-03-25 Werner Lemberg <wl@gnu.org>
-
- [pfr] Minor.
-
- * src/pfr/pfrsbit.c, src/pfr/pfrobjs.c: Use flag names instead of
- bare numbers.
-
-2016-03-25 Werner Lemberg <wl@gnu.org>
-
- [pfr] Various clang sanitizer fixes.
-
- * src/pfr/pfrsbit.c (pfr_load_bitmap_metrics): Correctly handle
- signed nibbles.
- (pfr_slot_load_bitmap): Correctly exit frame in case of error.
- Fix invalid left shifts.
-
-2016-03-23 Werner Lemberg <wl@gnu.org>
-
- Rename `VERSION.DLL' (#47472).
-
- * docs/VERSION.DLL: Renamed to...
- * docs/VERSIONS.TXT: ...this.
-
-2016-03-23 Werner Lemberg <wl@gnu.org>
-
- [raster, smooth] Directly test outline size (#47500).
-
- This improves stand-alone compilation.
-
- * src/base/ftoutln.c (FT_Outline_Render): Move cbox size test to...
-
- * src/raster/ftraster.c (ft_black_render), src/smooth/ftgrays.c
- (gray_raster_render): ...these functions.
-
-2016-03-23 Werner Lemberg <wl@gnu.org>
-
- [raster, smooth] Fix some clang sanitizer runtime issues.
-
- * src/raster/ftraster.c (ft_black_reset, ft_black_set_mode,
- ft_black_render): Harmonize signatures with `ftimage.h'.
-
- * src/smooth/ftgrays.c (gray_raster_render, gray_raster_reset):
- Ditto.
-
-2016-03-22 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Minor.
-
- This fixes an AddressSanitizer issue:
-
- ttgload.c:430:7: runtime error: null pointer passed as argument 1,
- which is declared to never be null
-
-2016-03-21 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afhints.c (af_glyph_hints_reload): Thinko.
-
- This fixes the previous commit to this file.
-
-2016-03-21 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Partly revert recent changes.
-
- * src/smooth/ftgrays.c (gray_conic_to, gray_cubic_to): Rework
- conditions to fix rendering issues.
-
-2016-03-20 Werner Lemberg <wl@gnu.org>
-
- [autofit] Show `near' points in tracing.
-
- * src/autofit/afhints.h (AF_FLAG_NEAR): New macro.
-
- * src/autofit/afhints.c (af_glyph_hints_dump_points): Implement it.
- (af_glyph_hints_reload): Handle AF_FLAG_NEAR.
-
-2016-03-18 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Minor refactoring and microoptimizations.
-
- * src/smooth/ftgrays.c (gray_render_conic, gray_render_cubic): Move
- band clipping from here.
- (gray_conic_to, gray_cubic_to): ... to here.
- (gray_render_line, gray_render_scanline): Initialize variables closer
- to their use.
-
-2016-03-17 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Minor refactoring.
-
- * src/smooth/ftgrays.c (gray_render_conic, gray_render_cubic): Move
- upscaling from here.
- (gray_conic_to, gray_cubic_to): ... to here.
-
-2016-03-15 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/aflatin.c (af_latin_compute_stem_width): Optimize.
-
-2016-03-14 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Temporarily revert 6eb6158dd787 (#47114).
-
- * src/smooth/ftgrays.c (gray_render_line): Old implementation.
-
-2016-03-12 Werner Lemberg <wl@gnu.org>
-
- [ftfuzzer] Improve coverage of rasterfuzzer.
-
- * src/tools/ftfuzzer/rasterfuzzer.cc (LLVMFuzzerTestOneInput): Use
- input data for `tags' array also.
- Trim input data to get more positive hits.
-
-2016-03-11 Pavlo Denysov <paul.kiev+savannah@gmail.com>
-
- Fix CMake issues for iOS (patch #8941).
-
- * CMakeLists.txt (CMAKE_TOOLCHAIN_FILE): Fix directory.
- * builds/cmake/iOS.cmake: No longer enforce gcc.
-
-2016-03-09 Behdad Esfahbod <behdad@behdad.org>
-
- [truetype] Fix handling of non-intermediate GX tuples.
-
- We probably did not notice this as all fonts we tested had only
- tuple_coords[i] be +1 or -1 for non-intermediate tuples.
-
- * src/truetype/ttgxvar.c (ft_var_apply_tuple): Implement it.
-
-2016-03-06 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Refuse to render enormous outlines (#47114).
-
- The goal is to avoid integer overflows in the rendering algorithms.
- The limit is chosen arbitrarily at some 2^18 pixels, which should be
- enough for modern devices including printers.
-
- * src/base/ftoutln.c (FT_Outline_Render): Check CBox and reject
- enormous outlines.
-
-2016-03-06 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Replace left shifts with multiplications (#47114).
-
- * src/smooth/ftgrays.c (SUBPIXELS, UPSCALE, DOWNSCALE): Do it.
-
-2016-03-05 Werner Lemberg <wl@gnu.org>
-
- [autofit] Avoid excessive stem length rounding (#25392).
-
- * src/autofit/aflatin.c (af_latin_compute_stem_width): Add argument
- to pass difference between hinted and unhinted position of base
- point; use this to adjust the stem width depending on the PPEM so
- that it doesn't become too large under certain circumstances.
- Update all callers using value 0 for this argument except...
- (af_latin_align_linked_edge): Pass position delta of base point to
- `af_latin_compute_stem_width'.
-
-2016-03-05 J Raynor <jxraynor@gmail.com>
-
- Make FreeType compile on AIX out of the box.
-
- * builds/unix/configure.raw (XX_ANSIFLAGS): Don't use `-ansi' on
- AIX.
-
-2016-03-01 Werner Lemberg <wl@gnu.org>
- Kostya Serebryany <kcc@google.com>
-
- [ftfuzzer] Add unit for testing smooth and black rasterizers.
-
- * src/tools/ftfuzzer/rasterfuzzer.cc: New file.
-
-2016-03-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix reallocation error introduced in 2016-02-27 (#47310).
-
- * src/autofit/aflatin.c (af_latin_hints_compute_segments): Reassign
- `prev_segment' after reallocation.
-
-2016-03-01 Werner Lemberg <wl@gnu.org>
-
- Fix clang warnings.
-
- * src/autofit/aflatin.c (af_latin_hints_compute_segments): Use
- FT_UShort for `min_flags' and `max_flags'.
- Initialize `prev_*' variables.
-
- * src/cff/cffobjs.c (cff_face_init) [FT_DEBUG_LEVEL_TRACE]: Fix
- types of local variables.
-
- * src/smooth/ftgrays.c (gray_dump_cells) [FT_DEBUG_LEVEL_TRACE]:
- Update `printf' format string.
-
- * src/tools/ftfuzzer/ftfuzzer.cc (setIntermediateAxis): Add cast.
- (LLVMFuzzerTestOneInput): Fix loop type.
-
-2016-02-29 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add blue-zone support for Sinhala script.
-
- This essentially moves the Sinhala script from the `Indic' hinter to
- the `Latin' hinter.
-
- * src/autofit/afblue.dat: Add blue zone data for Sinhala.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Sinhala standard character and move data
- out of AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afranges.c: Move Sinhala data out of
- AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afstyles.h: Update Sinhala data; in particular, use
- AF_WRITING_SYSTEM_LATIN.
-
-2016-02-27 Werner Lemberg <wl@gnu.org>
-
- [autofit] Properly handle spikes pointing to the x-axis.
-
- An example that gets better rendered is glyph `uusignTaml' (glyph
- index 2286) in font `FreeSerif.ttf' (Version 0412.2263) at 22ppem.
-
- * src/autofit/aflatin.c (af_latin_hints_compute_segments): Properly
- handle segments where the last point of the first segment is
- identical to the first point in the second one. This can happen for
- malformed fonts or spikes. We either merge the new segment with the
- previous one (both segments point into the same direction), or we
- discard the shorter segment if they point into different directions.
-
-2016-02-27 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor code clean-up.
-
- * src/autofit/aflatin.c (af_latin_hints_compute_segments): Change
- some local variable names to better differentiate between values
- along a segment and values orthogonal to it.
-
-2016-02-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve BOUND action.
-
- In complex glyph shapes, the original logic was too simple to cater
- for situations that would actually need something similar to PS Hint
- masks. This fix should alleviate the worst cases.
-
- * src/autofit/aflatin.c (af_latin_hint_edges): Don't allow
- complete disappearance of stems.
-
-2016-02-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add blue-zone support for Tamil script.
-
- This essentially moves the Tamil script from the `Indic' hinter to
- the `Latin' hinter.
-
- * src/autofit/afblue.dat: Add blue zone data for Tamil.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Tamil standard character and move data
- out of AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afranges.c: Move Tamil data out of
- AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afstyles.h: Update Tamil data; in particular, use
- AF_WRITING_SYSTEM_LATIN.
-
-2016-02-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add blue-zone support for Malayalam script.
-
- This essentially moves the Malayalam script from the `Indic' hinter
- to the `Latin' hinter.
-
- * src/autofit/afblue.dat: Add blue zone data for Malayalam.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Malayalam standard characters and move
- data out of AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afranges.c: Move Malayalam data out of
- AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afstyles.h: Update Malayalam data; in particular, use
- AF_WRITING_SYSTEM_LATIN.
-
-2016-02-16 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Fix integer overflow (#47114).
-
- * src/smooth/ftgrays.c (TArea): Make it unconditionally `long'.
-
-2016-02-15 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffparse.c (cff_parse_multiple_master): Improve tracing.
-
-2016-02-15 Werner Lemberg <wl@gnu.org>
-
- [cff] Handle T2 operator only with old CFF engine (#47157).
-
- * src/cff/cffparse.c (cff_parser_run) <opcode 31>: Enclose with
- #ifdef CFF_CONFIG_OPTION_OLD_ENGINE...#endif.
-
-2016-02-15 Werner Lemberg <wl@gnu.org>
-
- [cff] Partially handle `load' and `store' ops in old CFF engine.
-
- Now all glyphs of MM CFFs like `ITCGaramondMM-It.otf' can be
- displayed.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings) <cff_op_store,
- cff_op_load>: Partially implement it.
-
- * src/cff/cffparse.c (cff_parser_init): Add new parameter to pass
- the number of Multiple Master axes.
- Update all callers.
- (cff_parse_multiple_master): Get number of axes.
- (cff_parser_run) <opcode 31>: Updated.
- * src/cff/cffparse.h: Updated.
- (CFF_ParserRec): Add `num_axes' field.
-
- * src/cff/cffload.c: Updated.
-
- * src/cff/cfftypes.h (CFF_FontRecDictRec): Add `num_axes' field.
-
-2016-02-15 Werner Lemberg <wl@gnu.org>
-
- [cff] Correctly trace SIDs that contain NULL bytes.
-
- We need this to properly trace Multiple Master CFFs, which contain
- two SIDs that are charstrings.
-
- This commit makes FreeType also show the last SID, omitted
- previously due to a bug.
-
- * src/cff/cfftypes.h (CFF_FontRec): Add `string_pool_size' field.
-
- * src/cff/cffload.c (cff_index_get_pointers): Add argument to return
- the pool size.
- Update all callers.
-
- * src/cff/cffobjs.c (cff_face_init) [FT_DEBUG_LEVEL_TRACE]: Directly
- access `cff->strings' to display the non-default strings.
-
-2016-02-14 Werner Lemberg <wl@gnu.org>
-
- * src/base/fthash.c: Include FT_INTERNAL_MEMORY_H.
-
-2016-02-14 Werner Lemberg <wl@gnu.org>
-
- * src/cff/cffparse.c: Include `cffgload.h'.
-
- Problem reported by Colin Walters <walters@verbum.org>.
-
-2016-02-14 Werner Lemberg <wl@gnu.org>
-
- [cff] Make old CFF engine show MM CFFs (without variations).
-
- The new code only displays the first master in the font.
-
- * src/cff/cffgload.c (cff_decode_parse_charstrings): Add new
- parameter to allow function calls from dictionaries also.
- <cff_op_blend>: Partially implement it.
- Update all callers.
- * src/cff/cffgload.h: Updated.
-
- * src/cff/cffparse.c (cff_parser_init): Add new parameter to pass the
- number of Multiple Master designs.
- Update all callers.
- (cff_parse_multiple_master): New function to rudimentarily parse
- operator.
- (cff_parser_run): Handle `T2' operator.
- * src/cff/cffparse.h: Updated.
- (CFF_ParserRec): Add `num_designs' field.
-
- * src/cff/cffload.c: Updated.
-
- * src/cff/cfftoken.h: Handle `MultipleMaster' operator.
-
- * src/cff/cfftypes.h (CFF_FontRecDictRec): Add `num_designs' field.
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Don't handle `fvar' table for
- MM CFFs.
-
-2016-02-09 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Don't emit trailing newlines.
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter::make_html_code):
- Use `rstrip'.
-
-2016-02-07 Werner Lemberg <wl@gnu.org>
-
- * Version 2.6.3 released.
- =========================
-
-
- Tag sources with `VER-2-6-3'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.6.3.
-
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/index.html,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualc/index.html,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj,
- builds/windows/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.6.2/2.6.3/, s/262/263/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 3.
-
- * builds/unix/configure.raw (version_info): Set to 18:3:12.
- * CMakeLists.txt (VERSION_PATCH): Set to 3.
-
- * docs/CHANGES: Updated.
-
-2016-02-07 Werner Lemberg <wl@gnu.org>
-
- Fix another runtime error found by clang's sanitizer (#47082).
-
- * src/base/ftstroke.c (ft_stroke_border_export): Properly handle
- empty input buffer.
-
-2016-02-07 Werner Lemberg <wl@gnu.org>
-
- Fix runtime errors found by clang's sanitizer (#47082).
-
- * src/base/ftobjs.c (FT_Render_Glyph_Internal), src/base/ftoutln.c
- (FT_Outline_Copy), src/cache/ftcsbits.c (ftc_sbit_copy_bitmap):
- Properly handle empty input buffer.
-
-2016-02-07 Werner Lemberg <wl@gnu.org>
-
- [cff] Minor.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings) <cff_op_sqrt>:
- Remove dead code.
-
-2016-02-07 Werner Lemberg <wl@gnu.org>
-
- [cff] Implement missing operators in new engine (except `random').
-
- * src/cff/cf2font.h (CF2_STORAGE_SIZE): New macro.
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString): Implement the
- following operators: abs, add, and, div, drop, dup, eq, exch, get,
- ifelse, index, mul, neg, not, or, put, roll, sqrt, sub.
-
- * src/cff/cf2stack.h, src/cff/cf2stack.c (cf2_stack_roll): New
- auxiliary function for `roll' operator.
-
-2016-02-06 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix some Type 2 operators in old CFF engine.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings): Fix `eq'
- operator, add `not' and (unsupported) `blend' operators.
-
-2016-02-05 Sebastian Rasmussen <sebras@gmail.com>
-
- Make direct call of `make install' work (#47072).
-
- * builds/unix/unix-def.in (freetype-config): Make sure
- `freetype-config' is generated for both make targets (`all' and
- `install').
-
-2016-02-05 Werner Lemberg <wl@gnu.org>
-
- [base] Fix advance width loading for MM and GX fonts (#47064).
-
- * src/base/ftadvanc.c (LOAD_ADVANCE_FAST_CHECK): Return false for
- MM and GX fonts.
- Update callers.
-
-2016-02-03 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix handling of face_index == -1 for pure CFF.
-
- * src/cff/cffobjs.c (cff_face_init): Return correct number of faces.
-
-2016-01-30 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor tracing improvement.
-
- * src/autofit/afhints.c (af_glyph_hints_dump_points): Insert newline
- at the start of a new contour.
-
-2016-01-28 Nikolaus Waxweiler <madigens@gmail.com>
-
- Remove unpatented hinter (3/3).
-
- * include/freetype/config/ftoption.h
- (TT_CONFIG_OPTION_UNPATENTED_HINTING): Remove.
-
- * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): Remove
- `ignore_unpatented_hinter' field.
- Update users.
- (FT_DEBUG_HOOK_UNPATENTED_HINTING): Remove.
- Update users.
-
- * include/freetype/internal/tttypes.h (TT_FaceRec): Remove
- `unpatented_hinting' field.
- Update users.
-
- * src/base/ftpatent.c (_tt_check_patents_in_range,
- _tt_check_patents_in_table, _tt_face_check_patents): Remove.
- (FT_Face_CheckTrueTypePatents, FT_Face_SetUnpatentedHinting):
- Replace code with dummies.
-
- * src/truetype/ttobjs.c (tt_face_init): Remove now defunct code.
- * src/truetype/ttobjs.h (TT_GraphicsState): Remove `both_x_axis'
- field.
-
-2016-01-28 Nikolaus Waxweiler <madigens@gmail.com>
-
- Remove unpatented hinter (2/3).
-
- * devel/ftoption.h (TT_CONFIG_OPTION_UNPATENTED_HINTING): Remove.
-
-2016-01-28 Nikolaus Waxweiler <madigens@gmail.com>
-
- Remove unpatented hinter (1/3).
-
- * src/truetype/ttinterp.c [TT_CONFIG_OPTION_UNPATENTED_HINTING]:
- Remove all code related to this macro.
-
-2016-01-28 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add blue-zone support for Kannada script.
-
- This essentially moves the Kannada script from the `Indic' hinter to
- the `Latin' hinter.
-
- * src/autofit/afblue.dat: Add blue zone data for Kannada.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Kannada standard characters and move
- data out of AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afranges.c: Move Kannada data out of
- AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afstyles.h: Update Kannada data; in particular, use
- AF_WRITING_SYSTEM_LATIN.
-
-2016-01-22 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Better access to 64-bit integers for C99 compilers.
-
- * include/freetype/config/ftconfig.h [FT_LONG64]: Use
- __STDC_VERSION__ to define 64-bit integers.
- * builds/unix/ftconfig.in [FT_LONG64]: Ditto.
- * builds/vms/ftconfig.h [FT_LONG64]: Ditto.
-
-2016-01-21 Werner Lemberg <wl@gnu.org>
-
- [gxvalid] Remove commented out code.
-
- * src/gxvalid/gxvcommn.c (gxv_EntryTable_validate): Do it.
-
-2016-01-20 Werner Lemberg <wl@gnu.org>
-
- [autofit] Complete last autofit commit.
-
- Problem reported by Kostya Serebryany <kcc@google.com>.
-
- * src/autofit/afshaper.c (af_shaper_get_coverage)
- [!FT_CONFIG_OPTION_USE_HARFBUZZ]: Update signature.
-
-2016-01-20 Werner Lemberg <wl@gnu.org>
-
- Still handle `__FTERRORS_H__'.
-
- We need this for backward compatibility.
-
- Problem reported by John Emmas <johne53@tiscali.co.uk>.
-
- * include/freetype/fterrors.h: Fix inclusion guard so that
- undefining either `FTERRORS_H_' or `__FTERRORS_H__' works as
- expected.
-
-2016-01-19 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix handling of default script.
-
- Patch taken from ttfautohint, commit
- 071ae2c00e0d67f9d19418f4fade1c23d27dc185.
-
- There were two bugs.
-
- - We now use non-standard script tags like `khms' for special
- purposes. However, HarfBuzz maps such tags to `DFLT', and
- without this commit the associated lookups were incorrectly
- assigned to the non-standard tags.
-
- - Let's assume we have a Bengali font, and the font's `DFLT'
- script tag handles the necessary lookups for Bengali, too.
- Without this commit, the `DFLT' lookups were assigned to
- ttfautohint's default script (usually `latn') before the
- standard lookups for Bengali were handled.
-
- We now have the following order while searching for covered
- glyph indices.
-
- special features of scripts (e.g. `sups' for Cyrillic)
- Unicode mappings of scripts
- remaining features of scripts (especially important for Indic
- scripts)
- default features of default script
-
- * src/autofit/afshaper.c, src/autofit/afshaper.h
- (af_shaper_get_coverage): Add boolean parameter to indicate default
- script.
- Update all callers.
-
- * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
- Fix search order for coverages.
-
-2016-01-19 Werner Lemberg <wl@gnu.org>
-
- Various minor clang fixes.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths),
- src/autofit/aflatin.c (af_latin_metrics_init_widths): Initialize
- `ch'.
-
- * src/base/ftcalc.c (FT_MulFix) [FT_LONG64]: Add cast.
-
- * src/base/ftdbgmem.c (ft_mem_table_destroy): Add cast.
-
- * src/base/fthash.c (hash_num_lookup): Add cast.
-
- * src/base/fttrigon.c (ft_trig_downscale) [FT_LONG64]: Fix cast.
-
- * src/gxvalid/gxvcommn.c (gxv_EntryTable_validate): Comment out
- redundant code.
-
- * src/type1/t1driver.c (t1_get_ps_font_value) <PS_DICT_SUBR>: Add
- cast.
-
- * src/type1/t1load.c (parse_subrs): Fix type of `count'.
-
-2016-01-19 Derek B. Noonburg <derekn@glyphandcog.com>
-
- [truetype] Add another tricky font.
-
- * src/truetype/ttobjs.c (TRICK_SFNT_IDS_NUM_FACES): Increase.
- (sfnt_id): Add variant of `DFKaiShu'.
-
-2016-01-14 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Empower `FT_Library_SetLcdFilterWeights'.
-
- * src/base/ftlcdfil.c (FT_Library_SetLcdFilterWeights): Enable filter
- in addition to setting weights.
- (FT_Library_SetLcdFilter): Clean out FT_FORCE_LIGHT_LCD_FILTER and
- FT_FORCE_LEGACY_LCD_FILTER.
- * include/freetype/ftlcdfil.h: Documentation update.
-
-2016-01-12 Werner Lemberg <wl@gnu.org>
-
- Don't use macro names that start with `_[A-Z]' [3/3].
-
- Such macro names are reserved for both C and C++.
-
- * src/cache/ftccache.h: s/_FTC_FACE_ID_HASH/FTC_FACE_ID_HASH/.
- Update all callers.
- (FTC_CACHE_LOOKUP_CMP): Replace `_XXX' with `XXX_'.
- * src/cache/ftcmru.c (FTC_MRULIST_LOOKUP_CMP): Ditto.
-
-2016-01-12 Werner Lemberg <wl@gnu.org>
-
- Don't use macro names that start with `_[A-Z]' [2/3].
-
- Such macro names are reserved for both C and C++.
-
- * include/freetype/ftimage.h, src/raster/ftraster.c,
- src/smooth/ftgrays.c, src/smooth/ftgrays.h:
- s/_STANDALONE_/STANDALONE_/.
-
-2016-01-12 Werner Lemberg <wl@gnu.org>
-
- Don't use macro names that start with `_[A-Z]' [1/3].
-
- Such macro names are reserved for both C and C++.
-
- * src/bdf/bdflib.c: Replace macros of the form `_BDF_XXX' with
- `BDF_XXX_'.
-
-2016-01-12 Werner Lemberg <wl@gnu.org>
-
- Don't use macro names that contain `__' [2/2].
-
- Such macro names are reserved for both C and C++.
-
- * src/cache/*: s/__/_/.
-
-2016-01-12 Werner Lemberg <wl@gnu.org>
-
- Don't use macro names that contain `__' [1/2].
-
- Such macro names are reserved for both C and C++.
-
- * */*: Replace macros of the form `__XXX_H__' with `XXX_H_'.
-
-2016-01-10 Jered Gray <jegray@google.com>
-
- [cff] Fix usage of `|' operator.
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString) [cf2_cmdEXTENDEDNMBR,
- default]: `|' is not guaranteed to be processed from left to right
- by the compiler. However, the code repeatedly calls
- `cf2_buf_readByte' to get the arguments to `|' ... Fix this.
-
-2015-12-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Make top-to-bottom hinting work in latin auto-hinter.
-
- This improves rendering of scripts like Bengali or Devanagari.
-
- * src/autofit/afhints.c (af_axis_hints_new_edge): Add parameter to
- pass top-to-bottom hinting flag. This makes the function sort edges
- in descending vertical position.
-
- * src/autofit/afhints.c: Updated.
-
- * src/autofit/aflatin.c (af_latin_hints_compute_edges,
- af_latin_hint_edges): Use `top_to_bottom_hinting' flag.
-
- * src/autofit/afcjk.c (af_cjk_hints_compute_edges),
- src/autofit/aflatin2.c (af_latin2_hints_compute_edges): Updated.
-
-2015-12-24 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add hinting direction to `AF_ScriptClassRec'.
-
- Still unused.
-
- * src/autofit/afglobal.c (SCRIPT): Handle hinting direction.
-
- * src/autofit/aftypes.h (AF_ScriptClassRec): Add
- `top_to_bottom_hinting' field.
- (AF_HINTING_BOTTOM_TO_TOP, AF_HINTING_TOP_TO_BOTTOM): New macros.
- (AF_DEFINE_SCRIPT_CLASS): Updated.
-
-2015-12-23 Werner Lemberg <wl@gnu.org>
-
- [autofit] Start implementing hinting direction (up/down, down/up).
-
- Right now, it does nothing.
-
- * src/autofit/afscript.h: Add another parameter to `SCRIPT',
- specifying hinting direction.
-
- * src/autofit/afglobal.c, src/autofit/afglobal.h,
- src/autofit/afpic.c, src/autofit/afranges.h, src/autofit/afshaper.c,
- src/autofit/aftypes.h: Extend `SCRIPT' definitions.
-
-2015-12-22 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1load.c (parse_subrs): Fix memory leak (#46744).
-
-2015-12-22 Werner Lemberg <wl@gnu.org>
-
- [base] Make hash interface symmetric.
-
- Use `num' and `str' infixes everywhere.
-
- * src/base/fthash.c (ft_hash_init): Renamed to...
- (hash_init): ... This.
- (ft_hash_str_init, ft_hash_num_init): New functions.
- (ft_hash_free): Renamed to...
- (ft_hash_str_free): ... This.
-
- * include/freetype/internal/fthash.h: Updated.
-
- * src/bdf/bdflib.c, src/type1/t1load.c, src/type1/t1objs.c: Updated.
-
-2015-12-21 Werner Lemberg <wl@gnu.org>
-
- [type1] Avoid shift of negative numbers (#46732).
-
- * src/type1/t1load.c (parse_subrs): Do it.
-
-2015-12-20 Werner Lemberg <wl@gnu.org>
-
- [type1, psaux] Handle large values of num_subrs correctly (#46692).
-
- We now use a hash to map from subr indices to array elements holding
- the subroutines, if necessary.
-
- * include/freetype/internal/t1types.h: Include FT_INTERNAL_HASH_H.
- (T1_FontRec): Add `subrs_hash' field.
-
- * include/freetype/internal/psaux.h: Include FT_INTERNAL_HASH_H.
- (T1_DecoderRec): Add `subrs_hash' field.
-
- * src/type1/t1load.h (T1_LoaderRec): Add `subrs_hash' field.
-
- * src/type1/t1driver.c: Include FT_INTERNAL_HASH_H.
- (t1_ps_get_font_value) [PS_DICT_SUBR]: Look up hash if necessary.
-
- * src/type1/t1load.c: Include FT_INTERNAL_HASH_H.
- (parse_subrs): Use hash for subr indices that exceed the allocated
- number of subr slots.
- (t1_init_loader): Remove unnecessary code.
- (t1_done_loader, T1_Open_Face): Updated.
-
- * src/type1/t1gload.c (T1_Compute_Max_Advance, T1_Get_Advances,
- T1_Load_Glyph): Updated.
-
- * src/type1/t1objs.c (T1_Face_Done): Updated.
-
- * src/psaux/t1decode.c: Include FT_INTERNAL_HASH_H.
- (t1_decoder_parse_charstrings) [op_callsubr]: Look up hash if
- necessary.
-
- * src/cid/cidgload.c (cid_load_glyph): Updated.
-
-2015-12-20 Werner Lemberg <wl@gnu.org>
-
- [base] Thinko: Remove free function pointer.
-
- We don't copy keys or values while hashing.
-
- * include/freetype/internal/fthash.h (FT_Hash_FreeFunc): Removed.
- (FT_HashRec): Remove `free' field.
-
- * src/base/fthash.c (hash_str_free): Removed.
- (ft_hash_init, ft_hash_free): Updated.
-
-2015-12-20 Werner Lemberg <wl@gnu.org>
-
- [base, bdf] Don't expose `FT_Hashnode' in hash functions.
-
- * src/base/fthash.c (hash_lookup, ft_hash_str_lookup,
- ft_hash_num_lookup): Return pointer to `size_t' instead of
- `FT_Hashnode'.
-
- * include/freetype/internal/fthash.h: Updated.
-
- * src/bdf/bdflib.c (bdf_get_property, _bdf_add_property,
- bdf_get_font_property): Updated.
-
-2015-12-20 Werner Lemberg <wl@gnu.org>
-
- [base, bdf] Add number hashing.
-
- * src/base/fthash.c (hash_num_lookup, hash_num_compare): New
- functions.
- (ft_hash_init): Add argument to select between number and string
- hashing.
- (ft_hash_num_insert, ft_hash_num_lookup): New functions.
-
- * include/freetype/internal/fthash.h: Updated.
-
- * src/bdf/bdflib.c (_bdf_parse_start): Updated.
-
-2015-12-20 Werner Lemberg <wl@gnu.org>
-
- [base] Introduce hash lookup, compare, and free function pointers.
-
- * include/freetype/internal/fthash.c (FT_Hash_LookupFunc,
- FT_Hash_CompareFunc, FT_Hash_FreeFunc): New typedefs.
- (FT_HashRec): Add `lookup', `compare', and `free' fields.
-
- * src/base/fthash.c (hash_str_lookup, hash_str_compare,
- hash_str_free): New functions.
- (ft_hash_init): Set function pointers.
- (hash_bucket, ft_hash_free): Use them.
-
-2015-12-20 Werner Lemberg <wl@gnu.org>
-
- [base, bdf] Use a union as a hash key.
-
- We want to support both an integer and a string key later on.
-
- * include/freetype/internal/fthash.h (FT_Hashkey): New union.
- (FT_HashnodeRec): Updated.
- (ft_hash_insert, ft_hash_lookup): Renamed to ...
- (ft_hash_str_insert, ft_hash_str_lookup): ... this.
-
- * src/base/fthash.c (hash_bucket): Updated.
- (ft_hash_insert, ft_hash_lookup): Renamed to ...
- (hash_insert, hash_lookup): ... this.
- (ft_hash_str_insert, ft_hash_str_lookup): New wrapper functions.
-
- * src/bdf/bdflib.c: Updated.
-
-2015-12-19 Werner Lemberg <wl@gnu.org>
-
- [bdf] Use new hash functions.
-
- * src/bdf/bdf.h: Include FT_INTERNAL_HASH_H.
- (hashnode, hashtable): Removed.
- (bdf_font_t): Use `FT_HashRec' type for `proptbl'.
-
- * src/bdf/bdflib.c: Remove all hash functions.
- Update code for new hash structure and function names.
-
-2015-12-19 Werner Lemberg <wl@gnu.org>
-
- [bdf, base] Lift hash functions from bdf driver to base module.
-
- * src/base/fthash.c, include/freetype/internal/fthash.h: New files,
- containing (massaged) code from `bdflib.c' and `bdf.h'.
-
- * include/freetype/internal/internal.h (FT_INTERNAL_HASH_H): New
- macro.
-
- * src/base/ftbase.c: Include `fthash.c'.
-
- * src/base/Jamfile (_sources): Add `fthash'.
-
- * src/base/rules.mk (BASE_SRC): Add `fthash.c'.
-
- * docs/LICENSE.TXT: Updated.
-
-2015-12-15 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add blue-zone support for Bengali script.
-
- This essentially moves the Bengali script from the `Indic' hinter to
- the `Latin' hinter.
-
- * src/autofit/afblue.dat: Add blue zone data for Bengali.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Bengali standard characters and move
- data out of AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afranges.c: Move Bengali data out of
- AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afstyles.h: Update Bengali data; in particular, use
- AF_WRITING_SYSTEM_LATIN.
-
-2015-12-14 Ben Wagner <bungeman@gmail.com>
-
- [bdf] Remove dead code (#46625).
-
- The BDF specification only allows decimal numbers, no octal or
- hexadecimal decoding is needed.
-
- * src/bdf/bdflib.c (_bdf_atoul, _bdf_atol, _bdf_atous,
- _bdf_atos): Remove unused code and parameters.
- Update all callers.
- (odigits): Remove.
-
-2015-12-14 Werner Lemberg <wl@gnu.org>
-
- [base] Fix calls to `FT_Stream_Seek'.
-
- * src/base/ftobjs.c (Mac_Read_sfnt_Resource, FT_Open_Face): Set
- `error'.
-
-2015-12-14 Ben Wagner <bungeman@gmail.com>
-
- [base] Check error when seeking to data supplied offset (#46635).
-
- * src/base/ftobjs.c (open_face_PS_from_sfnt_stream):
- `ft_lookup_PS_in_sfnt_stream' returns offset and length from
- user supplied data. Use of this these values must be checked.
-
-2015-12-13 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add support for Myanmar script.
-
- * src/autofit/afblue.dat: Add blue zone data for Myanmar.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Myanmar standard characters.
-
- * src/autofit/afranges.c: Add Myanmar data.
-
- * src/autofit/afstyles.h: Add Myanmar data.
-
-2015-12-12 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Minor.
-
-2015-12-12 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afscript.h: Avoid potential crash.
-
-2015-12-10 Werner Lemberg <wl@gnu.org>
-
- [autofit] Restore OpenType feature check.
-
- This was removed while rewriting the HarfBuzz interface.
-
- * src/autofit/afglobal.h (AF_FaceGlobalsRec): Add `hb_buf' field to
- hold internal HarfBuzz buffer, needed for feature comparison.
-
- * src/autofit/afglobal.c (af_face_globals_new,
- af_face_globals_free): Initialize and destroy `hb_buf'.
-
- * src/autofit/afshaper.c (af_shaper_get_cluster): Compare character
- (cluster) with and without applied feature.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Fix tracing
- message.
-
-2015-12-10 Werner Lemberg <wl@gnu.org>
-
- [autofit] Remove redundant code.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_widths): Do it.
-
-2015-12-09 Werner Lemberg <wl@gnu.org>
-
- [autofit] Thinko.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Don't count
- empty blue zones (bug introduced 2015-12-06).
-
-2015-12-09 Werner Lemberg <wl@gnu.org>
-
- [autofit] Introduce subscript top blue zones.
-
- This feature is mainly for Khmer: The idea is to avoid a clash
- between the top of subscript glyphs and the bottom of normal
- baseline glyphs.
-
- This only works for character clusters mapped to multiple glyphs.
-
- * src/autofit/afblue.dat: Add subscript top blue zone for Khmer.
-
- * src/autofit/afblue.hin (AF_BLUE_PROPERTY_LATIN_SUB_TOP): New
- macro.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/aflatin.h (AF_LATIN_IS_SUB_TOP_BLUE,
- AF_LATIN_BLUE_SUB_TOP): New macros.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Handle new
- blue zone property.
- Update tracing messages.
- (af_latin_metrics_scale_dim): Handle new blue zone property.
- (af_latin_hints_compute_blue_edges): Updated.
-
-2015-12-09 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix tracing message.
-
- * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Display
- inactive blue zones also.
-
-2015-12-06 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afblue.dat: Add more Khmer clusters.
-
- Some fonts have incorrect ligatures; we need more samples to get a
- good mean value.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
-2015-12-06 Werner Lemberg <wl@gnu.org>
-
- [autofit] Typos.
-
- * src/autofit/afshaper.c (af_shaper_buf_create, af_shaper_get_elem)
- [!FT_CONFIG_OPTION_USE_HARFBUZZ]: Make it compile.
-
-2015-12-06 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add support for Khmer script.
-
- We split Khmer into two auto-hinter scripts: `Khmer' (`khmr') and
- `Khmer symbols' (`khms', U+19E0-U+19FF).
-
- * src/autofit/afblue.dat: Add blue zone data for Khmer.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Khmer standard characters.
-
- * src/autofit/afranges.c: Add Khmer data.
-
- * src/autofit/afstyles.h: Add Khmer data.
-
-2015-12-06 Werner Lemberg <wl@gnu.org>
-
- [autofit] Rewrite HarfBuzz interface to support character clusters.
-
- Scripts like Khmer have blue zones that can't be directly
- represented by Unicode characters. Instead, it is necessary to let
- HarfBuzz convert character clusters into proper glyph representation
- forms, then deriving the blue zone information from the resulting
- glyphs.
-
- * src/autofit/hbshim.c, src/autofit/hbshim.h: Replaced by...
- * src/autofit/afshaper.c, src/autofit/afshaper.h: ... these two new
- files, providing a new API to access HarfBuzz.
-
- The new API manages a HarfBuzz buffer with `af_shaper_buf_create'
- and `af_shaper_buf_destroy'. The buffer receives a UTF8 encoded
- string with function `af_shaper_get_cluster', and the resulting
- glyph data (indices, advance widths, vertical offsets) can be
- iteratively accessed with function `af_shaper_get_elem'.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths,
- af_cjk_metrics_init_blues, af_cjk_metrics_check_digits): Updated.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_widths,
- af_latin_metrics_init_blues, af_latin_metrics_check_digits):
- Updated.
-
- * include/freetype/internal/fttrace.h: s/afharfbuzz/afshaper/.
-
- * src/autofit/afglobal.c: s/hbshim.h/afshaper.h/.
- (af_face_globals_compute_style_coverage): Updated.
-
- * src/autofit/afglobal.h: s/hbshim.h/afshaper.h/.
-
- * src/autofit/autofit.c: s/hbshim.c/afshaper.c/.
-
- * src/autofit/Jamfile, src/autofit/rules.mk (AUTOF_DRV_SRC):
- Updated.
-
-2015-12-06 Werner Lemberg <wl@gnu.org>
-
- [autofit] Prepare forthcoming changes.
-
- This makes it easier to control the commits.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Add dummy
- loop. No functional change.
-
-2015-12-06 Werner Lemberg <wl@gnu.org>
-
- [autofit] Use string of standard characters.
-
- This is more flexible; additionally, it would allow character
- clusters.
-
- * src/autofit/aftypes.h (SCRIPT, AF_DEFINE_SCRIPT_CLASS): Updated.
- (AF_ScriptClassRec): Replace `standard_char[123]' with
- `standard_charstring'.
-
- * src/autofit/afscript.h: Replace last three character arguments
- of the `SCRIPT' calls with a string parameter, holding the standard
- characters (in UTF-8 encoding) separated with spaces.
-
- * src/autofit/afglobal.c, src/autofit/afglobal.h,
- src/autofit/afpic.c, src/autofit/afranges.c, src/autofit/hbshim.c
- (SCRIPT): Updated.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths),
- src/autofit/aflatin.c (af_latin_metrics_init_widths): Updated.
-
-2015-12-05 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afblue.dat: Separate blue zone characters with spaces.
-
- Another preparation for character cluster support.
-
- * src/autofit/afblue.c, src/autofit.afblue.h: Regenerated.
-
-2015-12-05 Werner Lemberg <wl@gnu.org>
-
- * src/tools/afblue.pl (convert_ascii_chars): Don't ignore spaces.
-
- Instead, reduce multiple spaces to a single one. We need this later
- for supporting character clusters in `afblue.dat'.
-
-2015-12-05 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afblue.hin (GET_UTF8_CHAR): Use `do...while(0)'.
-
- * src/autofit/afblue.h: Regenerated.
-
-2015-12-05 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afwarp.c: s/INT_MIN/FT_INT_MIN/.
-
-2015-12-03 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/install.mk (install): Remove stale `ft2build.h'.
-
-2015-12-01 Werner Lemberg <wl@gnu.org>
-
- [type1] Avoid dangling pointer (#46572).
-
- * src/type1/t1afm.c (T1_Read_Metrics): Properly reset
- `face->afm_data'.
-
-2015-11-28 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * include/freetype/ftlcdfil.h: Documentation tweak.
-
-2015-11-28 Werner Lemberg <wl@gnu.org>
-
- * Version 2.6.2 released.
- =========================
-
-
- Tag sources with `VER-2-6-2'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.6.2.
-
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/index.html,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualc/index.html,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj,
- builds/windows/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.6.1/2.6.2/, s/261/262/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 2.
-
- * builds/unix/configure.raw (version_info): Set to 18:2:12.
- * CMakeLists.txt (VERSION_PATCH): Set to 2.
-
- * docs/CHANGES: Updated.
-
-2015-11-28 Werner Lemberg <wl@gnu.org>
-
- Fix C++ compilation.
-
- * src/autofit/afloader.c: Include FT_INTERNAL_CALC_H.
-
- * src/truetype/ttgload.c (load_truetype_glyph): Pacify compiler.
-
-2015-11-28 Nikolaus Waxweiler <madigens@gmail.com>
-
- Change default LCD filter to be normalized and color-balanced.
-
- * src/base/ftlcdfil.c (FT_Library_SetLcdFilter): Update
- `default_filter'.
-
-2015-11-28 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Allow references to section names.
-
- In the reference, we show the section's title enclosed in single
- quotes.
-
- * src/tools/docmaker/formatter.py (Formatter::__init__): Collect
- section names as identifiers.
-
- * src/tools/docmaker/tohtml.py (section_title_header): Split into...
- (section_title_header1, section_title_header2): ... these two
- strings.
- (HtmlFormatter::make_block_url, make_html_word, html_source_quote):
- Handle sections.
- (HtmlFormatter::section_enter): Updated to add `id' HTML attribute.
-
-2015-11-27 Tamas Kenez <tamas.kenez@adasworks.com>
-
- [cmake] Add script to test the config module.
-
- * builds/cmake/testbuild.sh: New file.
-
-2015-11-27 Tamas Kenez <tamas.kenez@adasworks.com>
-
- * CMakeLists.txt: Create `freetype-config.cmake' config module.
-
-2015-11-27 Tamas Kenez <tamas.kenez@adasworks.com>
-
- * CMakeLists.txt: Set CMAKE_DEBUG_POSTFIX to `d'.
-
-2015-11-27 Tamas Kenez <tamas.kenez@adasworks.com>
-
- [cmake] Add better control of library dependencies.
-
- * CMakeLists.txt: Add `WITH_*' variables to force/auto/omit
- ZLIB/BZip2/PNG/HarfBuzz.
-
-2015-11-27 Tamas Kenez <tamas.kenez@adasworks.com>
-
- [cmake] Make `FindHarfBuzz' observe the REQUIRED option.
-
- * builds/cmake/FindHarfBuzz.cmake: Implement it.
-
-2015-11-27 Werner Lemberg <wl@gnu.org>
-
- [cmake] Collect files specific to cmake in `builds/cmake'.
-
- * builds/FindHarfBuzz.cmake: Move to ...
- * builds/cmake/FindHarfBuzz.cmake: ... this place.
-
- * CMakeLists.txt (CMAKE_MODULE_PATH): Updated.
-
-2015-11-27 Alexander Bock <alexander.j.bock@nasa.gov>
-
- CMakeLists.txt: Honour new command line flag `FREETYPE_NO_DIST'.
-
-2015-11-26 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Allow `foo[bar]' as identifier.
-
- We need this to handle equally named properties in different
- modules.
-
- * src/tools/docmaker/content.py (re_identifier),
- src/tools/docmaker/sources.py (re_crossref): Allow `foo[bar]'.
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter::make_html_word,
- HtmlFormatter::index_exit, HtmlFormatter::section_enter,
- HtmlFormatter::block_enter): Handle `foo[bar]'.
-
-2015-11-25 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdflib.c (bdf_load_font): Fix small memory leak (#46480).
-
- (_bdf_parse_glyphs): Always reset `p->glyph_name' after moving its
- contents.
-
-2015-11-21 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/ftcalc.h: Don't use `register' keyword.
-
- This fixes compiler warnings.
-
- Reported by Behdad.
-
-2015-11-20 Werner Lemberg <wl@gnu.org>
-
- Add `FT_LCD_FILTER_LEGACY1' enum value.
-
- This does the same as `FT_LCD_FILTER_LEGACY'.
-
- See
-
- https://bugs.freedesktop.org/show_bug.cgi?id=92981
-
- for the reasoning.
-
- * include/freetype/ftlcdfil.h (FT_LcdFilter): New value
- `FT_LCD_FILTER_LEGACY1'.
-
- * src/base/ftlcdfil.c (FT_Library_SetLcdFilter): Use it.
-
-2015-11-15 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afhints.c (af_get_segment_index): Fix it.
-
- The old code was too simple, returning invalid values in most cases
- where a segment crosses the contour start.
-
-2015-11-15 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdflib.c (bdf_load_font): Fix small memory leak (#46439).
-
-2015-11-11 Werner Lemberg <wl@gnu.org>
-
- [cff, autofit] Switch off stem darkening by default.
-
- * src/autofit/afmodule.c (af_autofitter_init), src/cff/cffobjs.c
- (cff_driver_init): Do it.
-
-2015-11-10 Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
-
- Allow native CFF hinter in FT_RENDER_MODE_LIGHT.
-
- Both the native CFF hinter and the auto-hinter now have a very
- similar rendering style.
-
- * include/freetype/freetype.h: Mention that FT_LOAD_TARGET_LIGHT no
- longer implies FT_LOAD_FORCE_AUTOHINT.
-
- * include/freetype/ftmodapi.h (FT_MODULE_DRIVER_HINTS_LIGHTLY): New
- macro.
-
- * include/freetype/internal/ftobjs.h (FT_DRIVER_HINTS_LIGHTLY): New
- macro.
-
- * src/cff/cffdrivr.c (cff_driver_class): Use it.
-
- * src/base/ftobjs.c (FT_Load_Glyph): Update auto-hinter selection
- logic.
-
-2015-11-09 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidload.c (cid_face_open): Fix GDBytes guard (#46408).
-
-2015-11-09 Werner Lemberg <wl@gnu.org>
-
- [truetype] Remove integer to pointer conversion compiler warning.
-
- Problem reported by Alexei.
-
- * src/truetype/ttgload.c (load_truetype_glyph): Use a solution found
- in the glib library to fix the issue.
-
-2015-11-08 Behdad Esfahbod <behdad@behdad.org>
-
- [sfnt] Accept version 3 of `EBLC' and `CBLC' tables also.
-
- * src/sfnt/ttsbit.c (tt_face_load_sbit): Implement it.
-
-2015-11-08 Philipp Knechtges <philipp-dev@knechtges.com>
-
- [autofit] Don't distort (latin) glyphs too much (#46195).
-
- * src/autofit/aflatin.h (AF_LatinBlueRec): Add `ascender' and
- `descender' fields.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Collect
- ascender and descender data for blue zones.
- (af_latin_metrics_scale_dim): Reject vertical scaling values that
- change the result by more than two pixels.
-
-2015-11-05 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Ignore embedded bitmaps with zero size (#46379).
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bit_aligned): Implement
- it.
-
-2015-11-04 Werner Lemberg <wl@gnu.org>
-
- [truetype] Catch infinite recursion in subglyphs (#46372).
-
- * include/freetype/internal/tttypes.h (TT_LoaderRec): New field
- `composites'.
-
- * src/truetype/ttgload.c: Include FT_LIST_H.
- (load_truetype_glyph): Add composite subglyph index to a list;
- abort if index is already in list.
- (tt_loader_init): Updated.
- (tt_loader_done): New function.
- (TT_Load_Glyph): Call `tt_loader_done'.
-
-2015-11-04 Werner Lemberg <wl@gnu.org>
-
- [truetype] Better tracing of composite glyphs.
-
- * src/truetype/ttgload.c (TT_Load_Composite_Glyph,
- load_truetype_glyph): Implement it.
-
-2015-11-03 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Protect against zero-size bitmaps (#46345).
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap): Check
- `glyph_size'.
-
-2015-11-02 Nikolaus Waxweiler <madigens@gmail.com>
-
- * src/autofit/afloader.c (af_loader_load_g): Implement emboldening.
-
-2015-11-02 Nikolaus Waxweiler <madigens@gmail.com>
-
- [autofit] Implement darkening computation function.
-
- This is a crude adaption of the original `cf2_computeDarkening'
- function.
-
- * src/autofit/afloader.c (af_intToFixed, af_fixedToInt,
- af_floatToFixed): New macros, taken from `cf2fixed.h'.
- (af_loader_compute_darkening): New function.
- * src/autofit/afloader.h: Updated.
-
-2015-11-02 Nikolaus Waxweiler <madigens@gmail.com>
-
- [autofit] Add functions to get standard widths for writing systems.
-
- We need the computed standard horizontal and vertical widths for the
- emboldening calculation. This method provides a convenient way to
- extract it from writing-system-specific metrics structures, which
- all script definitions must implement.
-
- * src/autofit/aftypes.h (AF_WritingSystem_GetStdWidthsFunc): New
- function type.
- (AF_WritingSystemClassRec): New member `style_metrics_getstdw'.
- (AF_DEFINE_WRITING_SYSTEM_CLASS): Updated.
-
- * src/autofit/afcjk.c (af_cjk_get_standard_width): New function.
- (af_cjk_writing_system_class): Updated.
- * src/autofit/afdummy.c (af_dummy_writing_system_class): Updated.
- * src/autofit/afindic.c (af_cjk_get_standard_width): New function.
- (af_indic_writing_system_class): Updated.
- * src/autofit/aflatin.c (af_latin_get_standard_width): New function.
- (af_indic_writing_system_class): Updated.
- * src/autofit/aflatin.c (af_latin_get_standard_width): New function.
- (af_indic_writing_system_class): Updated.
-
-2015-11-02 Nikolaus Waxweiler <madigens@gmail.com>
-
- [autofit] Extend `AF_FaceGlobalsRec' to hold emboldening data.
-
- * src/autofit/afglobal.h (AF_FaceGlobalsRec): Add fields.
-
- * src/autofit/afglobal.c (af_face_globals_new): Initialize new
- fields.
- (af_face_globals_free): Reset new fields.
-
-2015-11-02 Nikolaus Waxweiler <madigens@gmail.com>
-
- [autofit] Add stem-darkening properties.
-
- Actual code follows in a later commit.
-
- * include/freetype/ftautoh.h: Document `no-stem-darkening' and
- `darkening-parameters'.
-
- * src/autofit/afmodule.h: New fields `no_stem_darkening' and
- `darken_params'.
-
- * src/autofit/afmodule.c (af_property_set, af_property_get):
- Handle them.
- (af_autofitter_init): Initialize them.
-
-2015-11-02 Ben Wagner <bungeman@gmail.com>
-
- [ftfuzzer] Add support for multiple files (patch #8779).
-
- Currently, libFuzzer only supports mutation of a single file. We
- circumvent this problem by using an uncompressed tar archive as
- multiple-file input for the fuzzer.
-
- This patch enables tests of `FT_Attach_Stream' and AFM/PFM parsing;
- a constructed tarball should contain a font file as the first
- element, and files to be attached as further elements.
-
- * src/tools/ftfuzzer/ftfuzzer.cc: Include libarchive headers.
- (archive_read_entry_data, parse_data): New functions.
- (LLVMFuzzerTestOneInput): Updated.
-
- * src/tools/ftfuzzer/ftmutator.cc: New file, providing a custom
- mutator for libFuzzer that can mutate tarballs in a sensible way.
-
-2015-10-31 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix cmap 14 validation (#46346).
-
- * src/sfnt/ttcmap.c (tt_cmap14_validate): Check limit before
- accessing `numRanges' and `numMappings'.
- Fix size check for non-default UVS table.
-
-2015-10-31 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Handle infinite recursion in bitmap strikes (#46344).
-
- * src/sfnt/ttsbit.c (TT_SBitDecoder_LoadFunc,
- tt_sbit_decoder_load_bitmap, tt_sbit_decoder_load_byte_aligned,
- tt_sbit_decoder_load_bit_aligned, tt_sbit_decoder_load_png): Add
- argument for recursion depth.
- (tt_sbit_decoder_load_compound): Add argument for recursion depth.
- Increase recursion counter for recursive call.
- (tt_sbit_decoder_load_image): Add argument for recursion depth.
- Check recurse depth.
- (tt_face_load_sbit_image): Updated.
-
-2015-10-29 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afhints.c (af_glyph_hints_dump_points): Minor.
-
-2015-10-29 Werner Lemberg <wl@gnu.org>
-
- * CMakeLists.txt: Remove code to set MSVC's /FD compiler switch.
-
- Problem reported by David Capello <davidcapello@gmail.com>; see
-
- http://lists.nongnu.org/archive/html/freetype-devel/2015-10/msg00108.html
-
- for details.
-
-2015-10-27 Werner Lemberg <wl@gnu.org>
-
- [pfr] Add some safety guards (#46302).
-
- * src/pfr/pfrload.h (PFR_CHECK): Rename to...
- (PFR_CHECK_SIZE): ... this.
- (PFR_SIZE): [!PFR_CONFIG_NO_CHECKS]: Define to PFR_CHECK_SIZE.
-
- * src/pfr/pfrload.c (pfr_log_font_count): Check `count'.
- (pfr_extra_item_load_kerning_pairs): Remove tracing message.
- (pfr_phy_font_load): Use PFR_CHECK_SIZE where appropriate.
- Allocate `chars' after doing a size checks.
-
- * src/pfr/pfrsbit.c (pfr_load_bitmap_bits): Move test for invalid
- bitmap format to...
- (pfr_slot_load_bitmap): ... this function.
- Check bitmap size.
-
-2015-10-26 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix sanitizing logic for `loca' (#46223).
-
- * src/truetype/ttpload.c (tt_face_load_loca): A thinko caused an
- incorrect adjustment of the number of glyphs, most often using far
- too large values.
-
-2015-10-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve tracing.
-
- * src/autofit/afhints.c (af_print_idx, af_get_segment_index,
- af_get_edge_index): New functions.
-
- (af_glyph_hints_dump_points): Remove unnecessary `|', `[', and `]'.
- Add segment and edge index for each point.
- Slightly change printing order of some elements.
- Don't print `-1' but `--' for missing elements.
-
- (af_glyph_hints_dump_segments, af_glyph_hints_dump_edges): Remove
- unnecessary `|', `[', and `]'.
- Don't print `-1' but `--' for missing elements.
-
-2015-10-24 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Sanitize bitmap strike glyph height.
-
- Problem reported by Nikolay Sivov <bunglehead@gmail.com>.
-
- * src/sfnt/ttsbit.c (tt_face_load_strike_metrics): Avoid zero value
- for `metrics->height' by applying some heuristics.
-
-2015-10-22 Werner Lemberg <wl@gnu.org>
-
- [sfnt, type42] Fix clang compiler warnings.
-
- * src/sfnt/sfobjs.c (sfnt_init_face): Initialize `offset'.
-
- * src/type42/t42parse.c (t42_parse_sfnts): Use proper cast.
-
-2015-10-22 Dave Arnold <darnold@adobe.com>
- Werner Lemberg <wl@gnu.org>
-
- [cff] Avoid overflow/module arithmetic.
-
- This modifies the addition of subroutine number to subroutine bias
- from unsigned to signed, but does not change any results.
-
- * src/cff/cf2ft.c (cf2_initGlobalRegionBuffer,
- cf2_initLocalRegionBuffer): Change variable names from (unsigned)
- `idx' to (signed) `subrNum', since it is not an index until after
- the bias is added.
- * src/cff/cf2ft.h: Updated.
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdCALLSUBR>:
- Updated similarly.
-
-2015-10-22 Werner Lemberg <wl@gnu.org>
-
- [cid] Better check of `SubrCount' dictionary entry (#46272).
-
- * src/cid/cidload.c (cid_face_open): Add more sanity tests for
- `fd_bytes', `gd_bytes', `sd_bytes', and `num_subrs'.
-
-2015-10-21 Werner Lemberg <wl@gnu.org>
-
- [base] Pacify compiler (#46266).
-
- * src/base/ftoutln.c (FT_Outline_EmboldenXY): Initialize `in' and
- `anchor'.
-
-2015-10-21 Werner Lemberg <wl@gnu.org>
-
- [type42] Fix heap buffer overflow (#46269).
-
- * src/type42/t42parse.c (t42_parse_sfnts): Fix off-by-one error in
- bounds checking.
-
-2015-10-21 Dave Arnold <darnold@adobe.com>
-
- [cff] Fix limit in assert for max hints.
-
- * src/cff/cf2interp.c (cf2_hintmask_setAll): Allow mask equal to the
- limit (96 bits).
-
-2015-10-21 Dave Arnold <darnold@adobe.com>
-
- [cff] Remove an assert (#46107).
-
- * src/cff/cf2hints.c (cf2_hintmap_insertHint): Ignore paired edges
- in wrong order.
-
-2015-10-21 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Avoid unnecessarily large allocation for WOFFs (#46257).
-
- * src/sfnt/sfobjs.c (woff_open_font): Use WOFF's `totalSfntSize'
- only after thorough checks.
- Add tracing messages.
-
-2015-10-21 Werner Lemberg <wl@gnu.org>
-
- [type42] Better check invalid `sfnts' array data (#46255).
-
- * src/type42/t42parse.c (t42_parse_sfnts): Table lengths must be
- checked individually against available data size.
-
-2015-10-20 Werner Lemberg <wl@gnu.org>
-
- [cid] Add a bunch of safety checks.
-
- * src/cid/cidload.c (parse_fd_array): Check `num_dicts' against
- stream size.
- (cid_read_subrs): Check largest offset against stream size.
- (cid_parse_dict): Move safety check to ...
- (cid_face_open): ... this function.
- Also test length of binary data and values of `SDBytes',
- `SubrMapOffset', `SubrCount', `CIDMapOffset', and `CIDCount'.
-
-2015-10-20 Werner Lemberg <wl@gnu.org>
-
- [cid] Avoid segfault with malformed input (#46250).
-
- * src/cid/cidload.c (cid_read_subrs): Return a proper error code for
- unsorted offsets.
-
-2015-10-20 StudioEtrange <nomorgan@gmail.com>
-
- * CMakeLists.txt: Enable shared library builds on MinGW (#46233).
-
-2015-10-20 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1afm.c (T1_Read_Metrics): Fix memory leak (#46229).
-
-2015-10-19 Ben Wagner <bungeman@gmail.com>
-
- [cid] Better handle invalid glyph stream offsets (#46221).
-
- * src/cid/cidgload.c (cid_load_glyph): Check minimum size of glyph
- length.
-
-2015-10-18 Werner Lemberg <wl@gnu.org>
-
- [psaux] Fix tracing of negative numbers.
-
- Due to incorrect casting negative numbers were shown as very large
- (positive) integers on 64bit systems.
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstrings) <op_none>:
- Use division instead of shift.
-
-2015-10-18 Werner Lemberg <wl@gnu.org>
-
- [truetype] Improve TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES (#46223).
-
- * devel/ftoption.h, include/freetype/config/ftoption.h: Surround it
- with #ifndef ... #endif, as suggested in the tracker issue.
-
-2015-10-18 Werner Lemberg <wl@gnu.org>
-
- [truetype] Better protection against malformed `fpgm' (#46223).
-
- * src/truetype/ttobjs.c (tt_size_init_bytecode): Don't execute a
- malformed `fpgm' table more than once.
-
-2015-10-17 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidgload.c (cid_load_glyph): Fix memory leak.
-
- Reported by Kostya Serebryany <kcc@google.com>.
-
-2015-10-17 Werner Lemberg <wl@gnu.org>
-
- [bdf] Prevent memory leak (#46217).
-
- * src/bdf/bdflib.c (_bdf_parse_glyphs) <STARTCHAR>: Check
- _BDF_GLYPH_BITS.
-
-2015-10-17 Werner Lemberg <wl@gnu.org>
-
- [bdf] Use stream size to adjust number of glyphs.
-
- * src/bdf/bdflib.c (ACMSG17): New message macro.
- (_bdf_parse_t): Add member `size'.
- (bdf_load_font): Set `size'.
- (_bdf_parse_glyphs): Adjust `cnt' if necessary.
-
-2015-10-17 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidload.c (cid_parse_dict): Check `[FG]DBytes' size.
-
-2015-10-17 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidgload.c (cid_glyph_load): Check file offsets (#46222).
-
-2015-10-17 Werner Lemberg <wl@gnu.org>
-
- [psaux] Fix heap buffer overflow (#46221).
-
- * src/psaux/t1decode.c (t1_decoder_parse_charstring) <operator 12>:
- Fix limit check.
-
-2015-10-17 Werner Lemberg <wl@gnu.org>
-
- * src/cid/cidload.c (cid_parse_dict): Handle invalid input (#46220).
-
-2015-10-15 Kostya Serebryany <kcc@google.com>
-
- [ftfuzzer] Add README.
-
- * src/tools/ftfuzzer/README: New file.
-
-2015-10-15 Ben Wagner <bungeman@gmail.com>
-
- [bdf] Fix memory leak (#46213).
-
- * src/bdf/bdflib.c (bdf_load_font): Always go to label `Fail' in
- case of error.
-
-2015-10-15 Werner Lemberg <wl@gnu.org>
-
- [truetype] Add TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES (#46208).
-
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES): New configuration macro.
-
- * src/truetype/ttinterp.c (MAX_RUNNABLE_OPCODES): Removed.
- (TT_RunIns): Updated.
-
-2015-10-15 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (TT_RunIns): Fix bytecode stack tracing.
-
- The used indices were off by 1.
-
-2015-10-15 Ben Wagner <bungeman@gmail.com>
- Werner Lemberg <wl@gnu.org>
-
- * src/tools/ftfuzzer/ftfuzzer.cc: Handle fixed sizes (#46211).
-
-2015-10-15 Werner Lemberg <wl@gnu.org>
-
- [base] Compute MD5 checksums only if explicitly requested.
-
- This improves profiling accuracy.
-
- * src/base/ftobjs.c (FT_Render_Glyph_Internal): Implement it.
-
-2015-10-14 Werner Lemberg <wl@gnu.org>
-
- [base] Use `FT_' namespace for MD5 functions (#42366).
-
- * src/base/ftobjs.c (MD5_*): Define as `FT_MD5_*'.
- Undefine HAVE_OPENSSL.
-
-2015-10-13 Werner Lemberg <wl@gnu.org>
-
- [type1] Correctly handle missing MM axis names (#46202).
-
- * src/type1/t1load.c (T1_Get_MM_Var): Implement it.
-
-2015-10-13 Werner Lemberg <wl@gnu.org>
-
- [pcf] Quickly exit if font index < 0.
-
- Similar to other font formats, this commit makes the parser no
- longer check the whole PCF file but only the header and the TOC if
- we just want to get the number of available faces (and a proper
- recognition of the font format).
-
- * src/pcf/pcfdrivr.c (PCF_Face_Init): Updated.
- Exit quickly if face_index < 0.
-
- * src/pcfread.c (pcf_load_font): Add `face_index' argument.
- Exit quickly if face_index < 0.
-
- * src/pcf/pcf.h: Updated.
-
-2015-10-13 Werner Lemberg <wl@gnu.org>
-
- [ftfuzzer] Handle TTCs and MM/GX variations.
-
- This patch also contains various other improvements.
-
- * src/tools/ftfuzzer/ftfuzzer.cc: Add preprocessor guard to reject
- pre-C++11 compilers.
- (FT_Global): New class. Use it to provide a global constructor and
- destructor for the `FT_Library' object.
- (setIntermediateAxis): New function to select an (arbitrary)
- instance.
- (LLVMFuzzerTestOneInput): Loop over all faces and named instances.
- Also call `FT_Set_Char_Size'.
-
-2015-10-13 Werner Lemberg <wl@gnu.org>
-
- [truetype] Refine some GX sanity tests.
-
- Use the `gvar' table size instead of the remaining bytes in the
- stream.
-
- * src/truetype/ttgxvar.h (GX_BlendRec): New field `gvar_size'.
-
- * src/truetype/ttgxvar.c (ft_var_load_gvar): Set `gvar_size'.
- (ft_var_readpackedpoints, ft_var_readpackeddeltas: New argument
- `size'.
- (tt_face_vary_cvt, TT_Vary_Apply_Glyph_Deltas): Updated.
-
-2015-10-13 Werner Lemberg <wl@gnu.org>
-
- [truetype] Another GX sanity test.
-
- * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Check
- `tupleCount'.
- Add tracing message.
-
-2015-10-13 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix memory leak for broken GX fonts (#46188).
-
- * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Fix scope of
- deallocation.
-
-2015-10-13 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix commit from 2015-10-10.
-
- * src/truetype/ttgxvar.c (ft_var_load_gvar): Add missing error
- handling body to condition.
-
-2015-10-12 Werner Lemberg <wl@gnu.org>
-
- [unix] Make MKDIR_P actually work.
-
- * builds/unix/configure.raw: Fix underquoting of `INSTALL' and
- `MKDIR_P'.
-
- Problem reported by Dan Liddell <lddll@yahoo.com>.
-
-2015-10-11 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Improve extraction of number of named instances.
-
- * src/sfnt/sfobjs.c (sfnt_init_face)
- [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Check number of instances against
- `fvar' table size.
-
-2015-10-10 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftoutln.c (FT_Outline_Get_Orientation): Fix overflow
- (#46149).
-
-2015-10-10 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix infinite loops with broken cmaps (#46167).
-
- * src/sfnt/ttcmap.c (tt_cmap8_char_next, tt_cmap12_next): Take care
- of border conditions (i.e., if the loops exit naturally).
-
-2015-10-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] More sanity tests for GX handling.
-
- These tests should mainly help avoid unnecessarily large memory
- allocations in case of malformed fonts.
-
- * src/truetype/ttgxvar.c (ft_var_readpackedpoints,
- ft_var_readpackeddeltas): Check number of points against stream
- size.
- (ft_var_load_avar): Check `pairCount' against table length.
- (ft_var_load_gvar): Check `globalCoordCount' and `glyphCount'
- against table length.
- (tt_face_vary_cvt): Check `tupleCount' and `offsetToData'.
- Fix trace.
- (TT_Vary_Apply_Glyph_Deltas): Fix trace.
- Free `sharedpoints' to avoid memory leak.
-
-2015-10-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] Better protection against malformed GX data (#46166).
-
- * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Correctly
- handle empty `localpoints' array.
-
-2015-10-10 Werner Lemberg <wl@gnu.org>
-
- * src/pcf/pcfread.c (pcf_read_TOC): Check stream size (#46162).
-
-2015-10-09 Werner Lemberg <wl@gnu.org>
-
- * src/gzip/ftgzip.c (FT_Stream_OpenGzip): Use real stream size.
-
-2015-10-08 Werner Lemberg <wl@gnu.org>
-
- [pcf] Protect against invalid number of TOC entries (#46159).
-
- * src/pcf/pcfread.c (pcf_read_TOC): Check number of TOC entries
- against size of data stream.
-
-2015-10-08 Werner Lemberg <wl@gnu.org>
-
- [type42] Protect against invalid number of glyphs (#46159).
-
- * src/type42/t42parse.c (t42_parse_charstrings): Check number of
- `CharStrings' dictionary entries against size of data stream.
-
-2015-10-08 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix some signed overflows (#46149).
-
- * src/sfnt/ttsbit.c (tt_face_load_strike_metrics)
- <TT_SBIT_TABLE_TYPE_SBIX>: Use `FT_MulDiv'.
-
-2015-10-08 Werner Lemberg <wl@gnu.org>
-
- [type1] Protect against invalid number of subroutines (#46150).
-
- * src/type1/t1load.c (parse_subrs): Check number of
- `Subrs' dictionary entries against size of data stream.
-
-2015-10-07 Kostya Serebryany <kcc@google.com>
-
- [ftfuzzer] Add support for LLVM's LibFuzzer.
-
- * src/tools/ftfuzzer/ftfuzzer.cc, src/tools/runinput.cc: New files.
-
-2015-10-06 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Faster alternative line renderer.
-
- This implementation renders the entire line segment at once without
- subdividing it into scanlines. The main speed improvement comes from
- reducing the number of divisions to just two per line segment, which
- is a bare minimum to calculate cell coverage in a smooth rasterizer.
- Notably, the progression from cell to cell does not itself require any
- divisions at all. The speed improvement is more noticeable at larger
- sizes.
-
- * src/smooth/ftgrays.c (gray_render_line): New implementation.
-
-2015-10-06 Werner Lemberg <wl@gnu.org>
-
- [cff] Return correct PS names from pure CFF (#46130).
-
- * src/cff/cffdrivr.c (cff_get_ps_name): Use SFNT service only for
- SFNT.
-
-2015-10-04 Werner Lemberg <wl@gnu.org>
-
- [base] Replace left shifts with multiplication (#46118).
-
- * src/base/ftglyph.c (ft_bitmap_glyph_bbox, FT_Get_Glyph): Do it.
-
-2015-10-04 Werner Lemberg <wl@gnu.org>
-
- * Version 2.6.1 released.
- =========================
-
-
- Tag sources with `VER-2-6-1'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.6.1.
-
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/index.html,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualc/index.html,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj,
- builds/windows/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.6/2.6.1/, s/26/261/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
-
- * builds/unix/configure.raw (version_info): Set to 18:1:12.
- * CMakeLists.txt (VERSION_PATCH): Set to 1.
-
- * src/autofit/afmodule.c [AF_DEBUG_AUTOFIT]: Ensure C linking for
- dumping functions.
-
-2015-10-04 Werner Lemberg <wl@gnu.org>
-
- [bzip2, gzip] Avoid access of uninitialized memory (#46109).
-
- * src/bzip2/ftbzip2.c (ft_bzip2_file_fill_input), src/gzip/ftgzip.c
- (ft_gzip_file_fill_input): In case of an error, adjust the limit to
- avoid copying uninitialized memory.
-
-2015-10-03 Werner Lemberg <wl@gnu.org>
-
- [bzip2, gzip] Avoid access of uninitialized memory (#46109).
-
- * src/bzip2/ftbzip2.c (ft_bzip2_file_fill_output), src/gzip/ftgzip.c
- (ft_gzip_file_fill_output): In case of an error, adjust the limit to
- avoid copying uninitialized memory.
-
-2015-10-01 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Clean up worker.
-
- * src/smooth/ftgrays.c (gray_TWorker): Remove never used fields.
-
-2015-10-01 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Make `tt_cmap4_char_map_linear' more robust (#46078).
-
- * src/sfnt/ttcmap.c (tt_cmap4_char_map_linear): Take care of
- border conditions (i.e., if the loop exits naturally).
-
-2015-10-01 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afranges.c (af_deva_nonbase_uniranges): Fix ranges.
- They should be a subset of `af_deva_uniranges'.
-
-2015-10-01 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Make `tt_cmap4_char_map_linear' faster (#46078).
-
- * src/sfnt/ttcmap.c (tt_cmap4_char_map_linear): Use inner loop to
- reject too large glyph indices.
-
-2015-09-30 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Clean up worker.
-
- * src/smooth/ftgrays.c (gray_TWorker): Remove lightly used `last_ey'.
- (gray_start_cell, gray_render_line): Update.
-
-2015-09-30 Werner Lemberg <wl@gnu.org>
-
- [autofit] Replace `no-base' with `non-base'.
-
- * src/autofit/*: Do it.
-
-2015-09-30 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Rewrite `tt_cmap4_char_map_linear' (#46078).
-
- * src/sfnt/ttcmap.c (tt_cmap4_char_map_linear): Add code to better
- skip invalid segments.
- If searching the next character, provide a more efficient logic to
- speed up the code.
-
-2015-09-30 Werner Lemberg <wl@gnu.org>
-
- [truetype] Adjust number of glyphs for malformed `loca' tables.
-
- * src/truetype/ttpload.c (tt_face_load_loca): Implement it.
-
-2015-09-29 Werner Lemberg <wl@gnu.org>
-
- [pshinter] Avoid harmless overflow (#45984).
-
- * src/pshinter/pshglob.c (psh_blues_set_zones): Fix it.
-
-2015-09-28 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add support for Lao script.
-
- Thanks to Danh Hong <danhhong@gmail.com> for guidance with blue zone
- characters!
-
- * src/autofit/afblue.dat: Add blue zone data for Lao.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Lao standard characters.
-
- * src/autofit/afranges.c: Add Lao data.
-
- * src/autofit/afstyles.h: Add Lao data.
-
-2015-09-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [base] Fix a leak by broken sfnt-PS or resource fork (#46028).
-
- open_face_from_buffer() frees passed buffer if valid font
- is not found. But if copying to the buffer is failed,
- the allocated buffer should be freed within the caller.
-
- * src/base/ftobjs.c (open_face_PS_from_sfnt_stream): Free
- the buffer `sfnt_ps' if an error caused before calling
- open_face_from_buffer().
- (Mac_Read_sfnt_Resource): Free the buffer `sfnt_data' if
- an error caused before calling open_face_from_buffer();
-
-2015-09-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [mac] Fix buffer size calculation for LWFN font.
-
- * src/base/ftmac.c (read_lwfn): Cast post_size to FT_ULong
- to prevent confused copy by too large chunk size.
-
-2015-09-26 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/smooth/ftgrays.c (PIXEL_MASK): Remove unused macro.
-
-2015-09-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor tracing improvement.
-
- * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Don't emit
- blue zones header line if there are no blue zones.
-
-2015-09-26 Werner Lemberg <wl@gnu.org>
-
- [bzip2, gzip, lzw] Harmonize function signatures with prototype.
-
- Suggested by Hin-Tak Leung.
-
- * src/bzip2/ftbzip2.c (ft_bzip2_stream_io), src/gzip/ftgzip.c
- (ft_gzip_stream_io), src/lzw/ftlzw.c (ft_lzw_stream_io): Do it.
-
-2015-09-26 Hin-Tak Leung <htl10@users.sourceforge.net>
-
- Add new FT_LOAD_COMPUTE_METRICS load flag.
-
- * include/freetype/freetype.h (FT_LOAD_COMPUTE_METRICS): New macro.
- * src/truetype/ttgload.c (compute_glyph_metrics): Usage.
-
-2015-09-26 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (Mac_Read_sfnt_Resource): Add cast.
-
-2015-09-25 Werner Lemberg <wl@gnu.org>
-
- [type1] Protect against invalid number of glyphs (#46029).
-
- * src/type1/t1load.c (parse_charstrings): Check number of
- `CharStrings' dictionary entries against size of data stream.
-
-2015-09-23 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Better checks for invalid cmaps (2/2) (#46019).
-
- While the current code in `FT_Get_Next_Char' correctly rejects
- out-of-bounds glyph indices, it can be extremely slow for malformed
- cmaps that use 32bit values. This commit tries to improve that.
-
- * src/sfnt/ttcmap.c (tt_cmap8_char_next, tt_cmap12_next,
- tt_cmap12_char_map_binary, tt_cmap13_next,
- tt_cmap13_char_map_binary): Reject glyph indices larger than or
- equal to the number of glyphs.
-
-2015-09-23 Werner Lemberg <wl@gnu.org>
-
- [base, sfnt] Better checks for invalid cmaps (1/2).
-
- * src/base/ftobjs.c (FT_Get_Char_Index): Don't return out-of-bounds
- glyph indices.
- (FT_Get_First_Char): Updated.
-
- * src/sfnt/ttcmap.c (tt_cmap6_char_next): Don't return character
- codes greater than 0xFFFF.
-
- (tt_cmap8_char_index): Avoid integer overflow in computation of
- glyph index.
- (tt_cmap8_char_next): Avoid integer overflows in computation of
- both next character code and glyph index.
-
- (tt_cmap10_char_index): Fix unsigned integer logic.
- (tt_cmap10_char_next): Avoid integer overflow in computation of
- next character code.
-
- (tt_cmap12_next): Avoid integer overflows in computation of both
- next character code and glyph index.
- (tt_cmap12_char_map_binary): Ditto.
- (tt_cmap12_char_next): Simplify.
-
- (tt_cmap13_char_map_binary): Avoid integer overflow in computation
- of next character code.
- (tt_cmap13_char_next): Simplify.
-
-2015-09-21 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [base] Check too long POST and sfnt resource (#45919).
-
- * src/base/ftbase.h (FT_MAC_RFORK_MAX_LEN): Maximum length of the
- resource fork for Mac OS. Resource forks larger than 16 MB can be
- written but can't be handled correctly, at least in Carbon routine.
- See https://support.microsoft.com/en-us/kb/130437.
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): No need to use `0x'
- prefix for `%p' formatter.
-
- * src/base/ftbase.c (Mac_Read_POST_Resource): Check the fragment and
- total size of the concatenated POST resource before buffer
- allocation.
- (Mac_Read_sfnt_Resource): Check the declared size of sfnt resource
- before buffer allocation.
-
- * src/base/ftmac.c (read_lwfn, FT_New_Face_From_SFNT): Check the
- total resource size before buffer allocation.
-
-2015-09-19 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Improve handling of invalid SFNT table entries (#45987).
-
- This patch fixes weaknesses in function `tt_face_load_font_dir'.
-
- - It incorrectly assumed that valid tables are always at the
- beginning. As a consequence, some valid tables after invalid
- entries (which are ignored) were never seen.
-
- - Duplicate table entries (this is, having the same tag) were not
- rejected.
-
- - The number of valid tables was sometimes too large, leading to
- access of invalid tables.
-
- * src/sfnt/ttload.c (check_table_dir): Add argument to return number
- of valid tables.
- Add another tracing message.
- (tt_face_load_font_dir): Only allocate table array for valid
- entries as returned by `check_table_dir'.
- Reject duplicate tables and adjust number of valid tables
- accordingly.
-
-2015-09-19 Werner Lemberg <wl@gnu.org>
-
- [pcf] Improve `FT_ABS' fix from 2015-09-17 (#45999).
-
- * src/pcf/pcfread.c (pcf_load_font): Do first the cast to FT_Short,
- then take the absolute value.
- Also apply FT_ABS to `height'.
-
-2015-09-17 Werner Lemberg <wl@gnu.org>
-
- [type42] Fix memory leak (#45989).
-
- * src/type42/t42parse.c (t42_parse_charstrings): Allow only a single
- `CharStrings' array.
-
-2015-09-17 Werner Lemberg <wl@gnu.org>
-
- [psaux] Fix memory leak (#45986).
-
- * src/psaux/psobjs.c (ps_parser_load_field) <T1_FIELD_TYPE_MM_BBOX>:
- Free `temp' in case of error.
-
-2015-09-17 Werner Lemberg <wl@gnu.org>
-
- [psaux] Improve tracing message.
-
- * src/psaux/psobjs.c (ps_parser_load_field) <T1_FIELD_TYPE_MM_BBOX>:
- Handle plural correctly.
-
-2015-09-17 Werner Lemberg <wl@gnu.org>
-
- [pcf] Fix integer overflows (#45985).
-
- * src/pcf/pcfread.c (pcf_load_font): Use FT_MulDiv.
-
-2015-09-17 Werner Lemberg <wl@gnu.org>
-
- [pcf] Use FT_ABS for some property values (#45893).
-
- * src/pcf/pcfread.c (pcf_load_font): Take absolute values for
- AVERAGE_WIDTH, POINT_SIZE, PIXEL_SIZE, RESOLUTION_X, and
- RESOLUTION_Y. In tracing mode, add warnings.
-
-2015-09-16 Werner Lemberg <wl@gnu.org>
-
- Minor fixes for some clang warnings.
-
- * src/base/ftoutln.c (FT_Outline_EmboldenXY): Cast, possible missing
- initialization.
-
- * src/truetype/ttgload.c (TT_Process_Composite_Component): Cast.
-
-2015-09-15 Werner Lemberg <wl@gnu.org>
-
- [type1, type42] Fix memory leaks (#45966).
-
- * src/type1/t1load.c (parse_blend_axis_types): Handle multiple axis
- names.
- (parse_blend_design_map): Allow only a single design map.
- (parse_encoding): Handle multiple encoding vectors.
-
- * src/type42/t42parse.c (t42_parse_encoding): Handle multiple
- encoding vectors.
-
-2015-09-15 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix integer type (#45965).
-
- * src/truetype/ttobjs.c (tt_synth_sfnt_checksum): Implement it.
-
-2015-09-15 Werner Lemberg <wl@gnu.org>
-
- * src/pcf/pcfread.c (pcf_load_font): Fix integer overflow (#45964).
-
-2015-09-15 Werner Lemberg <wl@gnu.org>
-
- [type1, type42] Check encoding array size (#45961).
-
- * src/type1/t1load.c (parse_encoding), src/type42/t42parse.c
- (t42_parse_encoding): Do it.
-
-2015-09-14 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftcalc.c (FT_MulFix) [FT_LONG64]: Improve.
-
-2015-09-14 Werner Lemberg <wl@gnu.org>
-
- [type1] Fix another potential buffer overflow (#45955).
-
- * src/type1/t1parse (T1_Get_Private_Dict): Assure that check for
- `eexec' doesn't exceed `limit'.
-
-2015-09-13 Werner Lemberg <wl@gnu.org>
-
- Replace `mkinstalldirs' with AC_PROG_MKDIR_P.
-
- * builds/unix/mkinstalldirs: Removed, no longer needed.
-
- * builds/unix/configure.raw: Call `AC_PROG_MKDIR_P'.
- Update pwd call for `$INSTALL'.
-
- * builds/unix/unix-def.in (MKINSTALLDIRS): Use `@MKDIR_P@'.
-
- * autogen.sh: Updated.
-
-2015-09-13 Werner Lemberg <wl@gnu.org>
-
- [winfonts] Check alignment shift count for resource data (#45938).
-
- * src/winfonts/winfnt.c (fnt_face_get_dll_font): Implement it.
-
-2015-09-13 Werner Lemberg <wl@gnu.org>
-
- [type1] Fix potential buffer overflow (#45923).
-
- * src/type1/t1parse.c (T1_Get_Private_Dict): Assure `cur' doesn't
- point to end of file buffer.
-
-2015-09-13 Werner Lemberg <wl@gnu.org>
-
- [gzip] Fix access of small compressed files (#45937).
-
- * src/gzip/ftgzip.c (ft_gzip_stream_close): Avoid memory leak.
-
- (ft_gzip_get_uncompressed_file): Correct byte order while reading
- unsigned long value. Without this change, the whole optimization of
- accessing small files in `FT_Stream_OpenGzip' is never executed! As
- a consequence, access to PCF files in general (which are normally
- small files) should be much improved now as originally intended.
-
-2015-09-11 Werner Lemberg <wl@gnu.org>
-
- [psaux] Fix potential buffer overflow (#45922).
-
- * src/psaux/psobjs.c (ps_parser_skip_PS_token): If a token is
- enclosed in balanced expressions, ensure that the cursor position
- doesn't get larger than the current limit.
-
-2015-09-11 Werner Lemberg <wl@gnu.org>
-
- [base] Avoid crash while tracing `load_mac_face'.
-
- Reported in Savannah bug #45919.
-
- * src/base/ftobjs.c (load_mac_face): Honour FT_OPEN_MEMORY while
- tracing.
-
-2015-09-11 Werner Lemberg <wl@gnu.org>
-
- [type42] Fix endless loop (#45920).
-
- * src/type42/t42parse.c (t42_parse_encoding): Synchronize with
- type1's `parse_encoding'.
-
-2015-09-10 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Allow `-' in bold and italic markup.
-
- * src/tools/docmaker/sources.py (re_italic, re_bold): Adjust
- accordingly.
-
-2015-09-09 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftcalc.c (FT_RoundFix): Improve.
-
-2015-09-09 Wojciech Mamrak <wmamrak@gmail.com>
-
- * src/base/ftcalc.c (FT_CeilFix, FT_FloorFix): Normalize.
-
- This commit makes the functions behave as expected, this is,
- rounding towards plus or minus infinity.
-
-2015-09-07 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/smooth/ftgrays.c (gray_render_line): Simplify clipping.
-
-2015-09-04 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [raster,smooth] Microoptimizations.
-
- * src/raster/ftraster.c (Insert_Y_Turn, Finalize_Profile_Table,
- Bezier_Up): Use do-while loops.
-
- * src/smooth/ftgrays.c (gray_render_scanline, gray_render_line,
- gray_convert_glyph): Ditto.
-
-2015-09-04 Werner Lemberg <wl@gnu.org>
-
- [autofit] Redesign code ranges (2/2).
-
- This commit adds two fallback scripts (`latb', `latp') and
- implements support for the no-base character ranges introduced in
- the previous commit.
-
- * src/autofit/aftypes.h (AF_ScriptClassRec): Add
- `script_uni_nobase_ranges' field.
- (AF_DEFINE_SCRIPT_CLASS): Updated.
-
- * src/autofit/afscript.h, src/autofit/afstyles.h: Add `latb' and
- `latp' fallback scripts.
-
- * src/autofit/afblue.dat: Add blue zones for Latin subscript and
- superscript fallback scripts.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afglobal.h (AF_NOBASE): New style flag for no-base
- characters.
- (AF_STYLE_MASK): Updated.
-
- * src/autofit/afglobal.c (SCRIPT): Updated.
- (af_face_globals_compute_style_coverage): Handle new style flag.
-
- * src/autofit/aflatin.c (af_latin_hints_apply): Handle new style
- flag.
-
- * src/autofit/afranges.h (SCRIPT): Use it to export no-base ranges.
-
-2015-09-04 Werner Lemberg <wl@gnu.org>
-
- [autofit] Redesign code ranges (1/2).
-
- This patch introduces auxiliary code ranges that identify no-base
- characters; they refer to glyphs of a script that should be hinted
- without alignments to blue zones (mostly diacritics).
-
- It also splits off ranges for fallback scripts that handle subscript
- and superscript characters not covered by OpenType features. For
- example, this greatly helps improve the hinting of various phonetic
- alphabets, which contain a large amount characters that look like
- superscript glyphs.
-
- Finally, code ranges are updated to Unicode 8.0, and enclosed
- characters are removed in general since they normally look better if
- they stay unhinted.
-
- * src/autofit/afranges.c (af_latn_uniranges): Updated to Unicode
- 8.0.
- Split off superscript-like and subscript-like glyphs into...
-
- (af_latb_uniranges, af_latp_uniranges): ... these two new arrays.
-
- (af_xxxx_nobase_uniranges): New arrays that hold no-base characters
- of the corresponding character ranges.
-
-2015-09-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Pass glyph index to hinting function.
-
- No functionality change yet.
-
- * src/autofit/aftypes.h (AF_WritingSystem_ApplyHintsFunc): Pass
- glyph index.
-
- * src/autofit/afcjk.c, src/autofit/afcjk.h (af_cjk_hints_apply),
- src/autofit/afdummy.c (af_dummy_hints_apply), src/autofit/afindic.c
- (af_indic_hints_apply), src/autofit/aflatin.c
- (af_latin_hints_apply), src/autofit/aflatin2.c
- (af_latin2_hints_apply), src/autofit/afloader.c (af_loader_load_g):
- Updated.
-
-2015-08-30 Werner Lemberg <wl@gnu.org>
-
- [autofit] Code clean-up.
-
- * src/autofit/afglobal.h (AF_STYLE_MASK): New macro.
- (AF_STYLE_UNASSIGNED): Use AF_STYLE_MASK for definition.
-
- * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
- Updated.
-
-2015-08-30 Werner Lemberg <wl@gnu.org>
-
- [autofit] Make glyph style array use 16bit values.
-
- * include/freetype/ftautoh.h (FT_Prop_GlyphToScriptMap): Use
- `FT_UShort' for `map' field.
-
- * src/autofit/afglobal.c (af_face_globals_compute_style_coverage,
- af_face_globals_new), src/autofit/hbshim.c, src/autofit/hbshim.h
- (af_get_coverage): Use FT_UShort for `glyph_styles' array.
-
- * src/autofit/afglobal.h (AF_STYLE_UNASSIGNED, AF_DIGIT): Extend to
- 16 bits.
- (AF_FaceGlobalsRec): Use `FT_UShort' for `glyph_styles' field.
-
-2015-08-26 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/configure.raw: Need harfbuzz >= 0.9.21 (#45828).
-
-2015-08-25 Werner Lemberg <wl@gnu.org>
-
- [base] Improve kerning tracing and documentation.
-
- * src/base/ftobjs.c (FT_Get_Kerning): Emit tracing message if
- scaled-down kerning values differ.
-
-2015-08-18 Werner Lemberg <wl@gnu.org>
-
- [raster] Remove last remnants of `raster5' driver.
-
- * src/raster/ftrend1.h (ft_raster5_renderer_class): Removed.
-
- * src/raster/rastpic.c, src/raster/rastpic.h
- (ft_raster5_renderer_class_pic_init,
- ft_raster5_renderer_class_pic_free): Removed.
-
-2015-08-17 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Improve emboldener (#45596).
-
- * src/base/ftoutln.c (FT_Outline_EmboldenXY): Correct displacement
- of zero-length segments.
-
-2015-08-16 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Reoptimize arithmetic.
-
- * src/base/ftcalc.c (FT_MulDiv, FT_MulFix) [!FT_LONG64]: Remove
- special cases that slow down the general use.
-
-2015-08-15 pazer <ibemad@gmail.com>
-
- Fix C++ compilation (#45762).
-
- * src/base/ftstroke.c (ft_outline_glyph_class): Use
- FT_CALLBACK_TABLE.
-
-2015-08-14 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Clean up.
-
- * src/truetype/ttgload.c (TT_Process_Composite_Component): Use
- `FT_Outline_Transform' and `FT_Outline_Translate'.
- (translate_array): Dropped.
-
-2015-08-14 Andreas Enge <andreas.enge@inria.fr>
-
- * builds/unix/detect.mk (CONFIG_SHELL): Don't handle it (#44261).
-
-2015-08-13 Werner Lemberg <wl@gnu.org>
-
- [truetype] Introduce named instance access to GX fonts.
-
- For functions querying a face, bits 16-30 of the face index can hold
- the named instance index if we have a GX font. The indices start
- with value 1; value 0 indicates font access without GX variation
- data.
-
- * include/freetype/freetype.h (FT_FaceRec): Update documentation.
- * include/freetype/internal/sfnt.h: Ditto.
-
- * src/sfnt/sfobjs.c (sfnt_init_face)
- [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Get number of named instances and
- do argument checks.
- (sfnt_load_face): Updated.
-
- * src/truetype/ttobjs.c (tt_face_init)
- [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Use named instance, overwriting
- the style name.
-
- * src/base/ftobjs.c (open_face_from_buffer,
- open_face_PS_from_sfnt_stream): Updated.
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Updated.
- * src/cff/cffload.c (cff_font_load): Updated.
-
- * src/cff/cffobjs.c (cff_face_init): Make function exit early for
- pure CFF fonts if `font_index < 0'.
- Updated.
-
- * src/cid/cidobjs.c (cid_face_init): Updated.
- * src/pcf/pcfdrivr.c (PCF_Face_Init): Updated.
- * src/pfr/pfrobjs.c (pfr_face_init): Updated.
- * src/type1/t1objs.c (T1_Face_Init): Updated.
- * src/type42/t42objs.c (T42_Face_Init): Updated.
- * src/winfonts/winfnt.c (fnt_face_get_dll_font, FNT_Face_Init):
- Updated.
-
- * docs/CHANGES: Updated.
-
-2015-08-12 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [type1,cff,cid] Streamline font matrix application.
-
- * src/type1/t1gload.c (T1_Load_Glyph): Directly modify advances only
- if font matrix is not trivial.
- * src/cff/cffgload.c (cff_slot_load): Ditto.
- * src/cid/cidgload.c (cid_slot_load_glyph): Ditto for advances and the
- entire outline.
-
-2015-08-11 Werner Lemberg <wl@gnu.org>
-
- [builds/unix] Minor.
-
- * builds/unix/configure.raw:
- s/lib{priv,staticconf}/libs{priv,staticconf}/ for orthogonality with
- similarly named uppercase variables.
-
-2015-08-10 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [type1,cid,type42] Minor improvements.
-
- * src/type1/t1load.c (t1_parse_font_matrix): Scale units per EM only
- when necessary. Refresh comments.
- * src/cid/cidload.c (cid_parse_font_matrix): Ditto.
- * src/type42/t42parse.c (t42_parse_font_matrix): Refresh comments.
-
-2015-08-08 Werner Lemberg <wl@gnu.org>
-
- [type42] Fix glyph access.
-
- This is a severe bug: We've missed one level of indirection, as
- described in the Type 42 specification. As a result, ftview
- sometimes showed incorrect glyphs for given glyph names, and even
- displayed `error 0x0006' (invalid argument!) in case the number of
- glyph indices differed between the Type 42 font and the embedded
- TTF.
-
- Apparently, noone ever noticed it; this shows how much Type 42 fonts
- are in use...
-
- * src/type42/t42objs.c (T42_GlyphSlot_Load): Map Type 42 glyph index
- to embedded TTF's glyph index.
-
-2015-08-08 Werner Lemberg <wl@gnu.org>
-
- [type42] Minor clean-up.
-
- * src/type42/t42parse.c (t42_parse_font_matrix): Remove unused
- variable.
-
-2015-08-06 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [type42] Parse FontMatrix according to specifications.
-
- * src/type42/t42parse.c (t42_parse_font_matrix): Type 42 FontMatrix
- does not need scaling by 1000. Units_per_EM are taken from the
- embedded TrueType.
-
-2015-08-06 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve Arabic hinting.
-
- Problem reported by Titus Nemeth <tn@tntypography.eu> (by using
- ttfautohint).
-
- * src/autofit/afblue.dat: Add neutral blue zone for the tatweel
- character.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
-2015-08-05 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Clean up types.
-
- * src/truetype/ttobjs.c (TT_Size): Move declaration from here.
- * include/freetype/internal/tttypes.h (TT_Size): ... to here.
- (TT_LoaderRec): Switch to appropriate types for `face' and `size'.
- * src/truetype/ttgload.c: Remove corresponding type casts.
- * src/truetype/ttsubpix.c: Ditto.
-
-2015-08-05 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve recognition of flat vs. rounded segments.
-
- Lower the flatness threshold from upem/8 to upem/14, making the
- auto-hinter accept shorter elements.
-
- Synchronize flat/round stem selection algorithm with blue zone code.
-
- * src/autofit/aflatin.c (FLAT_THRESHOLD): New macro.
- (af_latin_metrics_init_blues): Use it.
- (af_latin_hints_compute_segments): Collect information on maximum
- and minimum coordinates of `on' points; use this to add a constraint
- for the flat/round decision similar to
- `af_latin_metrics_init_blues'.
-
-2015-08-04 Werner Lemberg <wl@gnu.org>
-
- Another left-shift bug (#45681).
-
- * src/base/ftobjs.c (IsMacBinary): Only accept positive values for
- `dlen'.
-
-2015-08-03 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Fix `ft_corner_orientation'.
-
- Remove casting from `FT_Long' to `FT_Int' that might change the sign
- of the return value and make it faster too.
-
- * src/base/ftcalc.c (ft_corner_orientation): On 32-bit systems, stay
- with 32-bit arithmetic when safe. Use plain math on 64-bit systems.
- * src/pshinter/pshalgo.c: Remove old unused code.
-
-2015-08-03 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgload.c (load_truetype_glyph)
- [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Fix crash for composite glyphs
- having a depth greater than 1.
-
-2015-08-03 Werner Lemberg <wl@gnu.org>
-
- Fix typo in clang bug from 2015-07-31 (#45678).
-
- * src/base/ftrfork.c (FT_Raccess_Get_HeaderInfo): Fix inequality.
-
-2015-08-02 Werner Lemberg <wl@gnu.org>
-
- * CMakeLists.txt: Improve shared library support.
-
- Based on a patch from John Cary <cary@txcorp.com>.
-
-2015-08-02 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/freetype-config.in (enable_shared): Remove. Unused.
-
-2015-08-02 Werner Lemberg <wl@gnu.org>
-
- Fix more invalid left-shifts.
-
- * src/pfr/pfrgload.c (pfr_glyph_load_compound): Use multiplication,
- not left-shift.
-
- * src/truetype/ttgxvar.c (ft_var_load_avar, ft_var_load_gvar,
- tt_face_vary_cvt, TT_Vary_Apply_Glyph_Deltas): Use multiplication,
- not left-shift.
-
-2015-07-31 Werner Lemberg <wl@gnu.org>
-
- Fix some bugs found by clang's `-fsanitize=undefined' (#45661).
-
- * src/base/ftrfork.c (FT_Raccess_Get_HeaderInfo): Only accept
- positive values from header.
- Check overflow.
-
- * src/base/ftoutln.c (SCALED): Correctly handle left-shift of
- negative values.
-
- * src/bdf/bdf.h (_bdf_glyph_modified, _bdf_set_glyph_modified,
- _bdf_clear_glyph_modified): Use unsigned long constant.
-
- * src/bdf/bdfdrivr.c (BDF_Size_Select, BDF_Glyph_Load): Don't
- left-shift values that can be negative.
-
- * src/pcf/pcfdrivr.c (PCF_Size_Select, PCF_Glyph_Load): Don't
- left-shift values that can be negative.
-
- * src/raster/ftraster.c (SCALED): Correctly handle left-shift of
- negative values.
-
- * src/sfnt/ttsbit.c (tt_face_load_strike_metrics): Don't left-shift
- values that can be negative.
-
- * src/truetype/ttgload.c (TT_Load_Composite_Glyph,
- compute_glyph_metrics, load_sbit_image): Don't left-shift values
- that can be negative.
-
-2015-07-31 Werner Lemberg <wl@gnu.org>
-
- Define FT_LONG_MAX.
-
- * include/freetype/config/ftstdlib.h (FT_LONG_MAX): New macro.
- * src/cff/cf2arrst.c (cf2_arrstack_setNumElements): Use it.
-
-2015-07-28 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftcalc.c (FT_Vector_NormLen): Clarify.
-
-2015-07-27 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftcalc.c (FT_Vector_NormLen): Explicate type conversions.
-
-2015-07-26 Matthias Clasen <matthias.clasen@gmail.com>
-
- [cff] Don't use `hmtx' table for LSB (#45520).
-
- * src/cff/cffgload.c (cff_slot_load): Use `htmx' table for advance
- width only. Bug introduced 2015-04-10.
-
-2015-07-09 Werner Lemberg <wl@gnu.org>
-
- Better support of user-supplied C++ namespaces.
-
- See
-
- http://lists.nongnu.org/archive/html/freetype-devel/2015-07/msg00008.html
-
- for a rationale.
-
- * src/autofit/afpic.h, src/base/basepic.h, src/cff/cffpic.h,
- src/pshinter/pshpic.h, src/psnames/pspic.h, src/raster/rastpic.h,
- src/sfnt/sfntpic.h, src/smooth/ftspic.h, src/truetype/ttpic.h
- (FT_BEGIN_HEADER, FT_END_HEADER): Move macro calls to not enclose
- header files that contain FT_{BEGIN,END}_HEADER macros by
- themselves.
-
- * src/autofit/aftypes.h [FT_DEBUG_AUTOFIT]: Include
- FT_CONFIG_STANDARD_LIBRARY_H earlier.
-
- * src/truetype/ttpic.h: Include FT_INTERNAL_PIC_H.
-
-2015-07-07 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Make `tt_face_get_name' member of the SFNT interface.
-
- * include/freetype/internal/sfnt.h (TT_Get_Name_Func): New
- prototype.
- (SFNT_Interface, FT_DEFINE_SFNT_INTERFACE): New member `get_name'.
-
- * src/sfnt/sfdriver.c (sfnt_interface): Updated.
-
- * src/sfnt/sfobjs.c (tt_face_get_name): Tag it with `LOCAL_DEF'.
- * src/sfnt/sfobjs.h: Add prototype for it.
-
-2015-06-30 Werner Lemberg <wl@gnu.org>
-
- Fix some clang compiler warnings.
-
- * src/base/ftoutln.c (FT_Outline_EmboldenXY), src/cff/cf2intrp.c
- (cf2_interpT2CharString), src/truetype/ttgload.c
- (load_truetype_glyph), src/truetype/ttgxvar.c (tt_handle_deltas),
- src/truetype/ttinterp.c (Ins_INSTCTRL): Fix signedness issues.
-
-2015-06-29 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Speed up bytecode interpreter.
-
- * src/truetype/ttinterp.c (Normalize): Use `FT_Vector_NormLen'.
-
-2015-06-29 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Speed up emboldening.
-
- * src/base/ftoutln.c (FT_Outline_EmboldenXY): Use
- `FT_Vector_NormLen'.
-
-2015-06-29 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Implement fast vector normalization.
-
- The function uses Newton's iterations instead of dividing vector
- components by its length, which needs a square root. This is,
- literally, a bit less accurate but a lot faster.
-
- * src/base/ftcalc.c (FT_Vector_NormLen): New function.
-
-2015-06-28 Werner Lemberg <wl@gnu.org>
-
- * CMakeLists.txt: Always create `ftconfig.h'.
-
- For non-UNIX builds, the file stays unmodified. However, it's
- better to have the main configuration files at the same place
- regardless of the OS.
-
-2015-06-28 Werner Lemberg <wl@gnu.org>
-
- * CMakeLists.txt: Improve MSVC support (#43737).
-
-2015-06-28 Werner Lemberg <wl@gnu.org>
-
- [cmake] Check for libraries and create `ftoption.h'.
-
- * builds/FindHarfBuzz.cmake: New file, taken from
-
- https://trac.webkit.org/browser/trunk/Source/cmake/FindHarfBuzz.cmake
-
- * CMakeLists.Txt: Add path to local cmake modules.
- Find dependencies for zlib, bzip2, libpng, and harfbuzz.
- Create `ftoption.h' file.
- Set up include and linker stuff for libraries.
-
-2015-06-28 Werner Lemberg <wl@gnu.org>
-
- * CMakeLists.txt: Fix creation of `ftconfig.h'.
- Check for UNIX header files using `check_include_file'.
- Set up correct header include directories.
-
-2015-06-28 Werner Lemberg <wl@gnu.org>
-
- * CMakeLists.txt: Disallow in-source builds.
-
-2015-06-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/utils.py (check_output): Add missing `\n'.
-
-2015-06-26 Werner Lemberg <wl@gnu.org>
-
- * CMakeLists.txt: Select platform-dependent `ftdebug.c'.
-
-2015-06-25 Werner Lemberg <wl@gnu.org>
-
- * CMakeLists.txt: Use cmake functions for generating `ftconfig.h'.
- Additionally, do this for UNIX only.
-
-2015-06-25 Werner Lemberg <wl@gnu.org>
-
- * CMakeLists.txt (BASE_SRCS): Use `ftbase.c' and `psnames.c'.
-
-2015-06-25 Werner Lemberg <wl@gnu.org>
-
- Another adjustment to header locations.
-
- This change is a result of a discussion thread on freetype-devel
-
- http://lists.nongnu.org/archive/html/freetype-devel/2015-06/msg00041.html
-
- Re-introduce the `freetype2' subdirectory for all FreeType header
- files after installation, and rename the `freetype2' subdirectory in
- the git repository to `freetype'.
-
- * include/freetype2: Renamed to...
- * include/freetype: This.
-
- * CMakeLists.txt (PUBLIC_HEADERS, PUBLIC_CONFIG_HEADERS,
- PRIVATE_HEADERS): Updated.
- Update creation of `ftconfig.h'.
- Install generated `ftconfig.h'.
-
- * Jamfile (HDRMACRO, RefDoc), autogen.sh: Updated.
-
- * builds/amiga/include/config/ftconfig.h, builds/freetype.mk
- (PUBLIC_DIR), builds/symbian/bld.inf, builds/toplevel.mk (work),
- builds/unix/freetype2.in: Updated.
-
- * builds/unix/freetype-config.in: Updated.
- * builds/unix/configure.raw: Don't check for `rmdir'.
- * builds/unix/unix-def.in (DELDIR): Use `rm -rf', which is portable
- according to the autoconf info manual.
- * builds/unix/install.mk (install, uninstall,
- distclean_project_unix): Update and simplify.
-
- * builds/wince/*, builds/windows/*: Updated.
-
- * devel/ft2build.h, include/ft2build.h: Updated.
-
- * include/freetype2/config/ftheader.h,
- include/freetype2/internal/ftserv.h,
- include/freetype2/internal/internal.h: Update all header file
- macros.
-
- * src/tools/chktrcmp.py (TRACE_DEF_FILES): Updated.
-
- * docs/*: Updated.
-
-2015-06-24 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/bdf/bdflib.c (_bdf_parse_start): Disallow 0 bpp.
-
-2015-06-24 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/bdf/bdflib.c (_bdf_parse_start): Simplify bpp parsing.
-
-2015-06-23 Werner Lemberg <wl@gnu.org>
-
- s/TYPEOF/FT_TYPEOF/ (#45376).
-
- * builds/unix/ftconfig.in, builds/vms/ftconfig.in,
- include/freetype2/config/ftconfig.h,
- include/freetype2/internal/ftobjs.h, src/autofit/afwarp.h: Do it.
-
-2015-06-22 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #45097.
-
- We no longer `pollute' the namespace of possible header file names;
- instead we move `ft2build.h' up by one level so that it gets
- installed in the default include directory (e.g.,
- /usr/local/include). After this commit, only `ft2build.h' stays in
- the compiler's include path.
-
- No visible changes for the user who follows the standard FreeType
- header inclusion rules.
-
- * include/*: Move to ...
- * include/freetype2/*: This directory, except `ft2build.h'.
-
- * CMakeLists.txt (PUBLIC_HEADERS, PUBLIC_CONFIG_HEADERS,
- PRIVATE_HEADERS), Jamfile (HDRMACRO, RefDoc), autogen.sh: Updated.
-
- * builds/amiga/include/config/ftconfig.h, builds/freetype.mk
- (PUBLIC_DIR), builds/symbian/bld.inf, builds/toplevel.mk (work),
- builds/unix/install.mk (install, uninstall),
- builds/unix/freetype2.in: Updated.
-
- * builds/unix/freetype-config.in: Updated.
- Emit -I directory only if it is not `/usr/include'.
-
- * builds/wince/*, builds/windows/*: Updated.
-
- * devel/ft2build.h, include/ft2build.h: Updated.
-
- * include/freetype2/config/ftheader.h,
- include/freetype2/internal/ftserv.h,
- include/freetype2/internal/internal.h: Update all header file
- macros.
-
- * src/tools/chktrcmp.py (TRACE_DEF_FILES): Updated.
-
-2015-06-21 Werner Lemberg <wl@gnu.org>
-
- Make Jam support work again.
-
- This is just very basic stuff and just a little bit tested on
- GNU/Linux only. I won't delve into this since I'm not a Jam user.
-
- * Jamfile: Call `HDRMACRO' for `ftserv.h' also.
- (DEFINES): Replace with...
- (CCFLAGS): ... this.
-
- * src/Jamfile: Don't call `HDRMACRO' for `internal.h'; this is
- already handled in the top-level Jamfile.
-
- * src/autofit/Jamfile (DEFINES): Replace with...
- (CCFLAGS): ... this.
- (_sources): Add missing files.
-
- * src/cache/Jamfile: Don't call `HDRMACRO' for `ftcache.h'; it no
- longer contains macro header definitions.
-
- * src/base/Jamfile, src/cff/Jamfile, src/sfnt/Jamfile,
- src/truetype/Jamfile (_sources): Add missing files.
-
-2015-06-16 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #45326.
-
- * src/sfnt/sfntpic.h (SFNT_SERVICES_GET): Remove duplicate
- definitions.
-
-2015-06-07 Werner Lemberg <wl@gnu.org>
-
- * Version 2.6 released.
- =======================
-
-
- Tag sources with `VER-2-6'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.6.
-
- * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2008/index.html,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/index.html,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualc/index.html,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj,
- builds/windows/visualce/index.html,
- builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2005-ce/index.html,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/wince/vc2008-ce/index.html: s/2.5.5/2.6/, s/255/26/.
-
- * include/freetype/freetype.h (FREETYPE_MINOR): Set to 6.
- (FREETYPE_PATCH): Set to 0.
-
- * builds/unix/configure.raw (version_info): Set to 18:0:12.
- * CMakeLists.txt (VERSION_MINOR): Set to 6.
- (VERSION_PATCH): Set to 0.
-
- * src/autofit/afmodule.c [!FT_MAKE_OPTION_SINGLE_OBJECT]: Add
- declarations for dumping functions.
-
- * src/truetype/ttinterp.c (TT_New_Context): Pacify compiler.
-
- * builds/toplevel.mk: Use `freetype.mk's code to compute the version
- string.
- Don't include a zero patch level in version string.
- * builds/freetype.mk: Remove code for computing the version string.
-
-2015-06-06 Ashish Azad <ashish.azad@samsung.com>
-
- Fix Savannah bug #45260.
-
- * src/pfr/pfrdrivr.c (pfr_get_kerning): Fix typo.
-
-2015-06-03 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix memory leak.
-
- Problem reported by Grissiom <chaos.proton@gmail.com>; in
-
- http://lists.nongnu.org/archive/html/freetype/2015-05/msg00013.html
-
- there is an example code to trigger the bug.
-
- * src/truetype/ttobjs.c (tt_size_init_bytecode): Free old `size'
- data before allocating again. Bug most probably introduced four
- years ago in version 2.4.3.
-
-2015-06-02 Werner Lemberg <wl@gnu.org>
-
- [raster] Add more tracing.
-
- * src/raster/ftraster.c (FT_TRACE7) [_STANDALONE_]: Define.
- (Vertical_Sweep_Span, Vertical_Sweep_Drop, Horizontal_Sweep_Span,
- Horizontal_Sweep_Drop, Render_Glyph): Add tracing calls.
-
-2015-06-01 Werner Lemberg <wl@gnu.org>
-
- [truetype] While tracing opcodes, show code position and stack.
-
- * src/truetype/ttinterp.c: Change all existing TRACE7 calls to
- TRACE6.
- (opcode_name): Add string lengths.
- (TT_RunIns): Implement display of code position and stack.
-
-2015-05-31 Werner Lemberg <wl@gnu.org>
-
- [truetype] In GX, make private point numbers work correctly.
-
- This is completely missing in Apple's documentation: If a `gvar'
- tuple uses private point numbers (this is, deltas are specified for
- some points only), the uncovered points must be interpolated for
- this tuple similar to the IUP bytecode instruction. Examples that
- need this functionality are glyphs `Oslash' and `Q' in Skia.ttf.
-
- * src/truetype/ttgxvar.c (tt_delta_shift, tt_delta_interpolate,
- tt_handle_deltas): New functions.
- (TT_Vary_Get_Glyph_Deltas): Renamed to...
- (TT_Vary_Apply_Glyph_Deltas): ... this; it directly processes the
- points and does no longer return an array of deltas.
- Add tracing information.
- Call `tt_handle_deltas' to interpolate missing deltas.
- Also fix a minor memory leak in case of error.
-
- * src/truetype/ttgxvar.h: Updated.
-
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
- load_truetype_glyph): Updated.
-
-2015-05-31 Werner Lemberg <wl@gnu.org>
-
- [truetype] In GX, make intermediate tuplets work at extrema.
-
- * src/truetype/ttgxvar.c (ft_var_apply_tuple): Fix range condition.
-
-2015-05-31 Werner Lemberg <wl@gnu.org>
-
- [truetype] Add tracing information to GX code.
-
- * src/truetype/ttgxvar.c (ft_var_load_avar, ft_var_load_gvar,
- ft_var_apply_tuple, TT_Get_MM_Var, TT_Set_MM_Blend,
- TT_Set_Var_Design, tt_face_vary_cvt): Do it.
-
-2015-05-28 Werner Lemberg <wl@gnu.org>
-
- * src/tools/apinames.c (names_dump): Fix invalid reference.
-
- Problem reported by Guzman Mosqueda, Jose R
- <jose.r.guzman.mosqueda@intel.com>.
-
-2015-05-24 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix commit from 2015-05-22.
-
- * src/truetype/ttgload.c, src/truetype/ttinterp.c: Guard new code
- with `TT_CONFIG_OPTION_SUBPIXEL_HINTING'.
-
- Problem reported by Nikolaus Waxweiler <madigens@gmail.com>.
-
-2015-05-23 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix return values of GETINFO bytecode instruction.
-
- * src/truetype/ttinterp.h (TT_ExecContextRec): New fields
- `vertical_lcd' and `gray_cleartype'.
-
- * src/truetype/ttgload.c (tt_loader_init): Initialize new fields.
- Change `symmetrical smoothing' to TRUE, since FreeType produces
- exactly this.
-
- * src/truetype/ttinterp.c (Ins_GETINFO): Fix selector/return bit
- values for symmetrical smoothing, namely 11/18.
- Handle bits for vertical LCD subpixels (8/15) and Gray ClearType
- (12/19).
-
-2015-05-23 Werner Lemberg <wl@gnu.org>
-
- [truetype] Minor.
-
- * src/truetype/ttinterp.h (TT_ExecContext):
- s/subpixel/subpixel_hinting.
-
- * src/truetype/ttgload.c, src/truetype/ttgload.h: Updated.
-
-2015-05-22 Werner Lemberg <wl@gnu.org>
-
- [truetype] Support selector index 3 of the INSTCTRL instruction.
-
- This flag activates `native ClearType hinting', disabling backward
- compatibility mode as described in Greg Hitchcocks whitepaper. In
- other words, it enables unrestricted functionality of all TrueType
- instructions in ClearType.
-
- * src/truetype/ttgload.c (tt_get_metrics): Call `sph_set_tweaks'
- unconditionally.
- (tt_loader_init): Unset `ignore_x_mode' flag if bit 2 of
- `GS.instruct_control' is active.
-
- * src/truetype/ttinterp.c (Ins_INSTCTRL): Handle selector index 3.
- (Ins_GETINFO): Updated.
-
- * docs/CHANGES: Document it.
-
-2015-05-20 Werner Lemberg <wl@gnu.org>
-
- [truetype] Minor.
-
- * src/truetype/ttinterp.h (SetSuperRound): Fix type of `GridPeriod'
- argument.
-
-2015-05-17 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix loading of composite glyphs.
-
- * src/truetype/ttgload.c (TT_Load_Composite_Glyph): If the
- ARGS_ARE_XY_VALUES flag is not set, handle argument values as
- unsigned. I trust `ttx' (which has exactly such code) that it does
- the right thing here...
-
- The reason that noone has ever noticed this bug is probably the fact
- that point-aligned subglyphs are rare, as are subglyphs with a
- number of points in the range [128;255], which is quite large (or
- even in the range [32768;65535], which is extremely unlikely).
-
-2015-05-12 Chris Liddell <chris.liddell@artifex.com>
-
- [cff] Make the `*curveto' operators more tolerant.
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString): The opcodes
- `vvcurveto', `hhcurveto', `vhcurveto', and `hvcurveto' all iterate,
- pulling values off the stack until the stack is exhausted.
- Implicitly the stack must be a multiple (or for subtly different
- behaviour) a multiple plus a specific number of extra values deep.
- If that's not the case, enforce it (as the old code did).
-
-2015-05-12 Chris Liddell <chris.liddell@artifex.com>
-
- [cff] fix incremental interface with new cff code.
-
- * src/cff/cf2ft.c (cf2_getSeacComponent): When using the incremental
- interface to retrieve glyph data for a SEAC, it be left to the
- incremental interface callback to apply the encoding to raw
- character index (as it was in the previous code).
-
-2015-04-29 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [autofit] Speed up IUP.
-
- * src/autofit/afhints.c (af_iup_interp): Separate trivial snapping to
- the same position from true interpolation, use `scale' to reduce
- divisions.
-
-2015-04-28 Werner Lemberg <wl@gnu.org>
-
- [cff] Use `name' table for PS name if we have a SFNT-CFF.
-
- This follows the OpenType 1.7 specification. See
-
- http://tug.org/pipermail/tex-live/2015-April/036634.html
-
- for a discussion.
-
- * src/cff/cffdrivr.c (cff_get_ps_name): Use the `sfnt' service if we
- have an SFNT.
-
-2015-04-27 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Speed up IUP.
-
- * src/truetype/ttinterp.c (_iup_worker_interpolate): Separate trivial
- snapping to the same position from true interpolation.
-
-2015-04-21 Werner Lemberg <wl@gnu.org>
-
- [autofit] By default, enable warping code but switch off warping.
-
- Suggested by Behdad.
-
- * include/config/ftoption.h: Define AF_CONFIG_OPTION_USE_WARPER.
-
- * src/autofit/afmodule.c (af_autofitter_init): Initialize `warping'
- with `false'.
-
-2015-04-21 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2015-04-21 Werner Lemberg <wl@gnu.org>
-
- [autofit] Introduce `warping' property.
-
- This code replaces the debugging hook from the previous commit with
- a better, more generic solution.
-
- * include/ftautoh.h: Document it.
-
- * src/autofit/afmodule.h (AF_ModuleRec)
- [AF_CONFIG_OPTION_USE_WARPER]: Add `warping' field.
-
- * src/autofit/afmodule.c (_af_debug_disable_warper): Remove.
- (af_property_set, af_property_get, af_autofitter_init)
- [AF_CONFIG_OPTION_USE_WARPER]: Handle `warping' option.
-
- * src/autofit/afhints.h (AF_HINTS_DO_WARP): Remove use of the no
- longer existing `_af_debug_disable_warper'.
-
- * src/autofit/afcjk.c (af_cjk_hints_init), src/autofit/aflatin.c
- (af_latin_hints_init), src/autofit/aflatin2.c (af_latin2_hints_init)
- [AF_CONFIG_OPTION_USE_WARPER]: Add `AF_SCALER_FLAG_NO_WARPER' to the
- scaler flags if warping is off.
-
- * src/autofit/aftypes.h: Updated.
-
-2015-04-16 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add debugging hook to disable warper.
-
- * src/autofit/afmodule.c (_af_debug_disable_warper)
- [FT_DEBUG_AUTOFIT]: New global variable.
-
- * src/autofit/aftypes.h: Updated.
- (AF_SCALER_FLAG_NO_WARPER): New macro (not actively used yet).
-
- * src/autofit/afhints.h (AF_HINTS_DO_WARP): New macro.
-
- * src/autofit/aflatin.c (af_latin_hints_apply)
- [AF_CONFIG_OPTION_USE_WARPER]: Use `AF_HINTS_DO_WARP' to control use
- of warper.
-
- * src/autofit/afcjk.c (af_cjk_hints_init, af_cjk_hints_apply)
- [AF_CONFIG_OPTION_USE_WARPER]: Synchronize with `aflatin.c'.
-
- * src/autofit/aflatin2.c (af_latin2_hints_apply)
- [AF_CONFIG_OPTION_USE_WARPER]: Synchronize with `aflatin.c'.
-
-2015-04-10 Werner Lemberg <wl@gnu.org>
-
- [cff] Update advance width handling to OpenType 1.7.
-
- Problem reported by Behdad.
-
- * src/cff/cffdrivr.c (cff_get_advances): Handle SFNT case
- separately.
-
- * src/cff/cffgload.c (cff_slot_load): Use advance width and side
- bearing values from `hmtx' table if present.
-
-2015-04-03 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/autofit/afhints.c (af_glyph_hints_reload): Use do-while loop.
-
-2015-04-02 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/autofit/aflatin.c (af_latin_hint_edges): Reduce logic.
-
-2015-04-01 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [autofit] Finish the thought.
-
- * src/autofit/afhints.c (af_direction_compute): make sure the long arm
- is never negative so that its `FT_ABS' is not necessary.
-
-2015-04-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Call dumper functions for tracing.
-
- * src/autofit/afcjk.c (af_cjk_hints_apply): Remove dead code.
- * src/autofit/afhints.c (af_glyph_hints_dump_points): Minor
- improvement.
- * src/autofit/afmodule.c (af_autofitter_load_glyph): Implement it.
-
-2015-04-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Make debugging stuff work again.
-
- The interface to ftgrid was broken in the series of commits starting
- with
-
- [autofit] Allocate AF_Loader on the stack instead of AF_Module.
-
- from 2015-01-14.
-
- * src/autofit/afmodule.c (_af_debug_hints_rec) [FT_DEBUG_AUTOFIT]:
- Use a global AF_GlyphHintsRec object for debugging.
- (af_autofitter_done, af_autofitter_load_glyph): Updated.
-
- * src/autofit/afloader.c (af_loader_init, af_loader_done): Updated.
-
-2015-04-01 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afhints.c (af_glyph_hints_done): Fix minor thinko.
-
-2015-03-29 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix Savannah bug #44629.
-
- * src/cff/cf2font.h (CF2_MAX_SUBR), src/cff/cffgload.h
- (CFF_MAX_SUBRS_CALLS): Set to 16.
-
-2015-03-29 Werner Lemberg <wl@gnu.org>
-
- [type1, truetype] Make the MM API more flexible w.r.t. `num_coords'.
-
- This commit allows `num_coords' to be larger or smaller than the
- number of available axes while selecting a design instance, either
- ignoring excess data or using defaults if data is missing.
-
- * src/truetype/ttgxvar.c (TT_Set_MM_Blend, TT_Set_Var_Design):
- Implement it.
-
- * src/type1/t1load.c (T1_Set_MM_Blend, T1_Set_MM_Design,
- T1_Set_Var_Design): Ditto.
-
-2015-03-29 Werner Lemberg <wl@gnu.org>
-
- [type1] Minor.
-
- * src/type1/t1load.c (T1_Set_MM_Blend, T1_Set_MM_Design): Use
- FT_THROW.
- (T1_Set_Var_Design): Use T1_MAX_MM_AXIS and FT_THROW.
-
-2015-03-27 Werner Lemberg <wl@gnu.org>
-
- [cff] Trace charstring nesting levels.
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdCALLGSUBR,
- cf2_cmdCALLSUBR, cf2_cmdRETURN>: Implement it.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings)
- <cff_op_callsubr, cff_op_callgsubr, cff_op_return>: Ditto.
-
-2015-03-21 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Optimize `FT_Angle_Diff'.
-
- Under normal circumstances we are usually close to the desired range
- of angle values, so that the remainder is not really necessary.
-
- * src/base/fttrigon.c (FT_Angle_Diff): Use loops instead of remainder.
-
- * src/autofit/aftypes.h (AF_ANGLE_DIFF): Ditto in the unused macro.
-
-2015-03-21 Werner Lemberg <wl@gnu.org>
-
- [truetype] Improve `gvar' handling.
-
- * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Correctly handle
- single-element runs. Cf. glyph `Q' in Skia.ttf with weights larger
- than the default.
-
-2015-03-20 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/fttrigon.c (FT_Vector_Rotate): Minor refactoring.
-
-2015-03-17 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Fix Savannah bug #44412 (part 2).
-
- * src/base/fttrigon.c (FT_Sin, FT_Cos, FT_Tan): Call `FT_Vector_Unit'.
-
-2015-03-11 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add support for Arabic script.
-
- Thanks to Titus Nemeth <tn@tntypography.eu> for guidance!
-
- * src/autofit/afblue.dat: Add blue zone data for Arabic.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Arabic standard characters.
-
- * src/autofit/afranges.c: Add Arabic data.
-
- * src/autofit/afstyles.h: Add Arabic data.
-
- * docs/CHANGES: Document it.
-
-2015-03-11 Werner Lemberg <wl@gnu.org>
-
- Rename `svxf86nm.h' to `svfntfmt.h'; update related symbols.
-
- * include/internal/ftserv.h (FT_SERVICE_XFREE86_NAME_H): Renamed
- to...
- (FT_SERVICE_FONT_FORMAT_H): This.
-
- * include/internal/services/svfntfmt.h (FT_XF86_FORMAT_*): Renamed
- to ...
- (FT_FONT_FORMAT_*): This.
-
- src/base/ftfntfmt.c, src/bdf/bdfdrivr.c, src/cff/cffdrivr.c,
- src/cid/cidriver.c, src/pcf/pcfdrivr.c, src/pfr/pfrdrivr.c,
- src/truetype/ttdriver.c, src/type1/t1driver.c,
- src/type42/t42drivr.c, src/winfonts/winfnt.c: Updated.
-
-2015-03-11 Werner Lemberg <wl@gnu.org>
-
- [base] Rename `FT_XFREE86_H' to `FT_FONT_FORMATS_H'.
-
- * include/config/ftheader.h: Implement it.
- * src/base/ftfntfmt.c, docs/CHANGES: Updated.
-
-2015-03-11 Werner Lemberg <wl@gnu.org>
-
- [base] Rename `FT_Get_X11_Font_Format' to `FT_Get_Font_Format'.
-
- * include/ftfntfmt.h, src/base/ftfntfmt.c: Implement it.
-
- * docs/CHANGES: Updated.
-
-2015-03-11 Werner Lemberg <wl@gnu.org>
-
- Fix automatic copyright updating.
-
- * src/tools/update-copyright: Make scanning of `no-copyright'
- actually work.
-
- * src/tools/no-copyright: Don't include README in general.
-
-2015-03-11 Werner Lemberg <wl@gnu.org>
-
- Rename `ftxf86.[ch]' to `ftfntfmt.[ch]'.
-
- CMakeLists.txt, builds/amiga/makefile, builds/amiga/makefile.os4,
- builds/amiga/smakefile, builds/mac/FreeType.m68k_cfm.make.txt,
- builds/mac/FreeType.m68k_far.make.txt,
- builds/mac/FreeType.ppc_carbon.make.txt,
- builds/mac/FreeType.ppc_classic.make.txt, builds/symbian/bld.inf,
- builds/symbian/freetype.mmp, builds/wince/vc2005-ce/freetype.vcproj,
- builds/wince/vc2008-ce/freetype.vcproj,
- builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2008/freetype.vcproj,
- builds/windows/vc2010/freetype.vcxproj,
- builds/windows/vc2010/freetype.vcxproj.filters,
- builds/windows/visualc/freetype.dsp,
- builds/windows/visualc/freetype.vcproj,
- builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj, docs/INSTALL.ANY,
- include/config/ftheader.h, include/ftfntfmt.h, modules.cfg,
- src/base/ftfntfmt.c, vms_make.com: Updated.
-
-2015-03-10 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Fix Savannah bug #44412 (part 1).
-
- * src/base/ftstroke.c (ft_stroker_inside): Handle near U-turns.
-
-2015-03-10 Werner Lemberg <wl@gnu.org>
-
- [base] Rename `FT_Bitmap_New' to `FT_Bitmap_Init'.
-
- * include/ftbitmap.h, src/base/ftbitmap.c: Implement it.
- Update all callers.
-
- * docs/CHANGES: Updated.
-
-2015-03-06 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttload.c (tt_face_load_font_dir): Fix compiler warning.
-
- Found by Alexei.
-
-2015-03-05 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftstroke.c: Simplify.
-
-2015-03-04 Werner Lemberg <wl@gnu.org>
-
- [truetype] Some fixes and code refactoring in `ttgxvar.c'.
-
- * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Fix return value
- of `point_cnt' if two bytes are read.
- Use a more vertical coding style.
- (ft_var_readpackeddeltas): Use FT_UInt for `delta_cnt' parameter.
- Use a more vertical coding style.
-
-2015-03-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix Savannah bug #44241.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Reject glyphs
- with less than 3 points.
-
-2015-03-02 Werner Lemberg <wl@gnu.org>
-
- Simplify `TYPEOF' macro.
-
- No need for two arguments.
-
- * include/config/ftconfig.h, builds/unix/ftconfig.in,
- builds/vms/ftconfig.h (TYPEOF): Updated.
-
- * include/internal/ftobjs.h (FT_PAD_FLOOR, FT_PIX_FLOOR),
- src/autofit/afwarp.h (AF_WARPER_FLOOR): Updated.
-
-2015-03-01 Werner Lemberg <wl@gnu.org>
-
- Various compiler warning fixes for `make multi'.
-
- * src/autofit/afcjk.c (af_cjk_hints_compute_blue_edges),
- src/autofit/aflatin.c (af_latin_hint_compute_blue_edges,
- af_latin_hint_edges), src/autofit/aflatin2.c
- (af_latin2_hints_compute_blue_edges, af_latin2_hint_edges): Declare
- as `static'.
-
- * src/cache/ftccmap.c (FTC_CMAP_QUERY_HASH, FTC_CMAP_NODE_HASH):
- Removed. Unused.
- * src/cache/ftcimage.c: Include FT_INTERNAL_OBJECTS_H.
- * src/cache/ftcmanag.c (FTC_LRU_GET_MANAGER): Removed. Unused.
-
- * src/cff/cf2intrp.c: Include `cf2intrp.h'.
- * src/cff/cffdrivr.c (PAIR_TAG): Removed. Unused.
-
- * src/gzip/ftgzip.c (NO_DUMMY_DECL): Removed. Unused.
-
- * src/psaux/afmparse.c (afm_parser_read_int): Declare as `static'.
-
- * src/pshinter/pshalgo.c (STRONGER, PSH_ZONE_MIN, PSH_ZONE_MAX):
- Removed. Unused.
-
- * src/raster/ftraster.c (Render_Glyph): Declare as `static'.
-
- * src/sfnt/ttpost.c (load_format_20): Fix signedness warning.
-
- * src/truetype/ttdriver.c (PAIR_TAG): Removed. Unused.
- * src/truetype/ttsubpix.c (is_member_of_family_class,
- is_member_of_style_class): Declare as `static'.
-
- * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Declare
- as `static'.
- * src/type1/t1load.c (mm_axis_unmap, mm_weights_unmap): Declare as
- `static'.
- (T1_FIELD_COUNT): Removed. Unused.
- * src/type1/t1parse.h (T1_Done_Table): Removed. Unused.
-
- * src/type42/t42parse.c (T1_Done_Table): Removed. Unused.
-
-2015-02-25 Werner Lemberg <wl@gnu.org>
-
- [psaux] Signedness fixes.
-
- * include/internal/psaux.h, src/psaux/afmparse.c,
- src/psaux/afmparse.h, src/psaux/psconv.c, src/psaux/psobjs.c,
- src/psaux/t1cmap.c, src/psaux/t1decode.c: Apply.
-
-2015-02-25 Werner Lemberg <wl@gnu.org>
-
- [otvalid] Signedness fixes.
-
- * src/otvalid/otvcommn.c, src/otvalid/otvgdef.c,
- src/otvalid/otvgpos.c, src/otvalid/otvgsub.c, src/otvalid/otvmath.c:
- Apply.
-
-2015-02-25 Werner Lemberg <wl@gnu.org>
-
- * src/bzip2/ftbzip2.c (ft_bzip2_alloc): Signedness fix.
-
-2015-02-25 Werner Lemberg <wl@gnu.org>
-
- [lzw] Signedness fixes.
-
- * src/lzw/ftzopen.c, src/lzw/ftzopen.h: Apply.
-
-2015-02-25 Werner Lemberg <wl@gnu.org>
-
- [gxvalid] Signedness fixes.
-
- * src/gxvalid/gxvbsln.c, src/gxvalid/gxvcommn.c,
- src/gxvalid/gxvcommn.h, src/gxvalid/gxvjust.c,
- src/gxvalid/gxvkern.c, src/gxvalid/gxvlcar.c, src/gxvalid/gxvmort.c,
- src/gxvalid/gxvmort1.c, src/gxvalid/gxvmort2.c,
- src/gxvalid/gxvmorx.c, src/gxvalid/gxvmorx1.c,
- src/gxvalid/gxvmorx2.c, src/gxvalid/gxvopbd.c,
- src/gxvalid/gxvprop.c, src/gxvalid/gxvtrak.c: Apply.
-
-2015-02-25 Werner Lemberg <wl@gnu.org>
-
- [cache] Signedness fixes.
-
- * src/cache/ftcbasic.c, src/cache/ftccmap.c, src/cache/ftcimage.c,
- src/cache/ftcmanag.c, src/cache/ftcsbits.c: Apply.
-
-2015-02-25 Werner Lemberg <wl@gnu.org>
-
- Change dimension fields in `FTC_ImageTypeRec' to unsigned type.
-
- This doesn't break ABI.
-
- * include/ftcache.h (FTC_ImageTypeRec): Use unsigned types for
- `width' and `height'.
-
- * docs/CHANGES: Document it.
-
-2015-02-25 Werner Lemberg <wl@gnu.org>
-
- [cache] Don't use `labs'.
-
- This is the only place in FreeType where this function was used.
-
- * include/config/ftstdlib.h (ft_labs): Remove.
-
- * src/cache/ftcimage.c (ftc_inode_weight): Replace `ft_labs' with
- `FT_ABS'.
-
-2015-02-23 Werner Lemberg <wl@gnu.org>
-
- [cache] Replace `FT_PtrDist' with `FT_Offset'.
-
- * src/cache/ftccache.h (FTC_NodeRec): `FT_Offset' (a.k.a. `size_t')
- is a better choice for `hash' to hold a pointer than `FT_PtrDist'
- (a.k.a. `ptrdiff_t'), especially since the latter is signed,
- causing zillions of signedness warnings. [Note that `hash' was of
- type `FT_UInt32' before the change to `FT_PtrDist'.]
- Update all users.
-
- * src/cache/ftcbasic.c, src/cache/ftccache.c, src/cache/ftccmap.c,
- src/cache/ftcglyph.c, src/cache/ftcglyph.h: Updated.
-
-2015-02-23 Werner Lemberg <wl@gnu.org>
-
- [smooth, raster] Re-enable standalone compilation.
-
- * src/raster/ftraster.c (FT_RENDER_POOL_SIZE, FT_MAX)
- [_STANDALONE_]: Define macros.
-
- * src/smooth/ftgrays.c (FT_RENDER_POOL_SIZE, FT_MAX, FT_ABS,
- FT_HYPOT) [_STANDALONE_]: Define macros.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- [smooth] Signedness fixes.
-
- * src/smooth/ftgrays.c, src/smooth/ftsmooth.c: Apply.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- * src/raster/ftraster.c: Use the file's typedefs everywhere.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttpost.c (load_format_20): Fix error tracing message.
-
- Bug introduced 6 commits earlier.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- [pshinter] Fix thinko.
-
- * src/pshinter/pshalgo.c (psh_glyph_find_strong_points): Correctly
- check `count'.
- Bug introduced two commits earlier.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- [raster] Signedness fixes.
-
- * src/raster/ftraster.c, src/raster/ftrend1.c: Apply.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- [pshinter] Signedness fixes.
-
- * src/pshinter/pshalgo.c, src/pshinter/pshglob.c,
- src/pshinter/pshrec.c: Apply.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- [pshinter] Use macros for (unsigned) flags, not enumerations.
-
- * src/pshinter/pshalgo.h (PSH_Hint_Flags): Replace with macros.
- Updated.
- * src/pshinter/pshrec.h (PS_Hint_Flags): Replace with macros.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- * src/pshinter/pshrec.c: Simplify.
- (ps_hints_open, ps_hints_stem): Remove switch statement.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Signedness fixes.
-
- * src/sfnt/pngshim.c, src/sfnt/sfobjs.c, src/sfnt/ttcmap.c,
- src/sfnt/ttkern.c, src/sfnt/ttload.c, src/sfnt/ttpost.c,
- src/sfnt/ttsbit.c: Apply.
- * src/sfnt/sfdriver.c: Apply.
- (sfnt_get_ps_name): Simplify.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- [bdf] Signedness fixes.
-
- * src/bdf/bdf.h, src/bdf/bdfdrivr.c, src/bdf/bdfdrivr.h,
- src/bdf/bdflib.c: Apply.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdflib.c (_bdf_atous): New function.
- (_bdf_parse_glyphs, _bdf_parse_start): Use it.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- [pcf] Signedness fixes.
-
- * src/pcf/pcf.h, src/pcf/pcfdrivr.c: Apply.
- * src/pcf/pcfread.c: Apply.
- (pcf_get_encodings): Ignore invalid negative encoding offsets.
-
-2015-02-21 Werner Lemberg <wl@gnu.org>
-
- * src/winfonts/winfnt.c: Signedness fixes.
-
-2015-02-21 Werner Lemberg <wl@gnu.org>
-
- [type42] Signedness fixes.
-
- * src/type42/t42parse.c, src/type42/t42parse.h,
- src/type42/t42types.h: Apply.
-
-2015-02-21 Werner Lemberg <wl@gnu.org>
-
- [pfr] Signedness fixes.
-
- * src/pfr/pfrdrivr.c, src/pfr/pfrgload.c, src/pfr/pfrload.c,
- src/pfr/pfrload.h, src/pfr/pfrobjs.c, src/pfr/pfrsbit.c,
- src/pfr/pfrtypes.h: Apply.
-
-2015-02-21 Werner Lemberg <wl@gnu.org>
-
- [cff] Minor signedness fixes related to last commit.
-
- * src/cff/cf2ft.c, src/cff/cf2intrp.c, src/cff/cffgload.c: Apply.
-
-2015-02-20 Werner Lemberg <wl@gnu.org>
-
- [cff] Thinkos in bias handling.
-
- Only the final result is always positive.
-
- Bug introduced three commits earlier.
-
- * src/cff/cffgload.c, src/cff/cffgload.h: Apply.
-
-2015-02-20 Werner Lemberg <wl@gnu.org>
-
- [cid] Fix signedness issues and emit some better error codes.
-
- * src/cid/cidgload.c, src/cid/cidload.h, src/cid/cidobjs.c,
- src/cid/cidparse.h: Apply.
- * src/cid/cidload.c: Apply.
- (parse_fd_array): Reject negative values for number of dictionaries.
- * src/cid/cidparse.c: Apply.
- (cid_parser_new): Reject negative values for hex data length.
-
-2015-02-20 Werner Lemberg <wl@gnu.org>
-
- [cff] Signedness fixes for new engine.
-
- * src/cff/cf2arrst.c, src/cff/cf2fixed.h, src/cff/cf2ft.c,
- src/cff/cf2ft.h, src/cff/cf2hints.c, src/cff/cf2intrp.c: Apply.
-
-2015-02-20 Werner Lemberg <wl@gnu.org>
-
- [cff] Signedness fixes for basic infrastructure and old engine.
-
- * include/internal/pshints.h, src/cff/cffdrivr.c,
- src/cff/cffgload.c, src/cff/cffgload.h, src/cff/cffload.c,
- src/cff/cffobjs.c, src/cff/cffparse.c, src/pshinter/pshrec.c: Apply.
-
-2015-02-19 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): Ignore `countSizePairs'.
-
- This is hard-coded to value 2 in `fvar' version 1.0 (and no newer
- version exists), but some fonts set it incorrectly.
-
- Problem reported by Adam Twardoch <adam@fontlab.com>.
-
-2015-02-19 Werner Lemberg <wl@gnu.org>
-
- [cff] Emit better error code for invalid private dict size.
-
- * src/cff/cffparse.c (cff_parse_private_dict): Reject negative
- values for size and offset.
-
-2015-02-19 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix signedness issues.
-
- * src/autofit/afangles.c, src/autofit/afcjk.c,
- src/autofit/afglobal.c, src/autofit/afhints.c,
- src/autofit/aflatin.c, src/autofit/aflatin2.c, src/autofit/afwarp.c,
- src/autofit/hbshim.c: Apply.
-
-2015-02-19 Werner Lemberg <wl@gnu.org>
-
- [autofit] Use macros for (unsigned) flags, not enumerations.
-
- This harmonizes with other code in FreeType (and reduces the number
- of necessary casts to avoid compiler warnings).
-
- * src/autofit/afblue.hin: Make flag macros unsigned.
- * src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afcjk.h: Replace flag enumeration with macros.
- * src/autofit/afcjk.c: Updated.
-
- * src/autofit/afhints.h (AF_Flags, AF_Edge_Flags): Replace with
- macros.
- * src/autofit/afhints.c: Updated.
-
- * src/autofit/aflatin.h: Replace flag enumerations with macros.
- * src/autofit/aflatin.c, src/autofit/aflatin2.c: Updated.
-
- * src/autofit/aftypes.h (AF_ScalerFlags): Replace with macros.
-
-2015-02-18 Werner Lemberg <wl@gnu.org>
-
- [type1] Fix signedness issues.
-
- * include/internal/psaux.h, include/internal/t1types.h,
- src/psaux/psobjs.c, src/psaux/psobjs.h, src/psaux/t1decode.c,
- src/type1/t1gload.c, src/type1/t1load.c, src/type1/t1parse.c: Apply.
-
-2015-02-18 Werner Lemberg <wl@gnu.org>
-
- [psaux, type1] Fix minor AFM issues.
-
- * include/internal/t1types.h (AFM_KernPairRec): Make indices
- unsigned.
- Update users.
- (AFM_FontInfoRec): Make element counters unsigned.
- Update users.
- * src/psaux/afmparse.h (AFM_ValueRec): Add union member for unsigned
- int.
-
- * src/psaux/afmparse.c (afm_parse_track_kern, afm_parse_kern_pairs):
- Reject negative values for number of kerning elements.
-
- * src/type1/t1afm.c, src/tools/test_afm.c: Updated.
-
-2015-02-18 Werner Lemberg <wl@gnu.org>
-
- Don't use `FT_PtrDist' for lengths.
-
- Use FT_UInt instead.
-
- * include/internal/psaux.h (PS_Table_FuncsRec, PS_TableRec,
- T1_DecoderRec): Do it.
-
- * include/internal/t1types.h (T1_FontRec): Ditto.
-
- * src/cid/cidload.c (cid_parse_dict): Updated.
- * src/pfr/pfrload.c (pfr_extra_item_load_font_id): Ditto.
- * src/psaux/psobjs.c (ps_table_add), src/psaux/psobjs.h: Ditto.
- * src/type1/t1load.c (parse_blend_axis_types, parse_encoding,
- parse_charstrings, parse_dict): Ditto.
- * src/type42/t42parse.c (t42_parse_encoding, t42_parse_charstrings,
- t42_parse_dict): Ditto.
-
-2015-02-18 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1driver.c (t1_ps_get_font_value): Clean up.
- This handles negative values better, avoiding many casts.
-
-2015-02-17 Werner Lemberg <wl@gnu.org>
-
- [base] Fix Savannah bug #44284.
-
- * src/base/ftcalc.c (FT_MulFix): Typos.
-
-2015-02-17 Werner Lemberg <wl@gnu.org>
-
- [truetype] Finish compiler warning fixes for signedness issues.
-
- * src/truetype/ttgxvar.c, src/truetype/ttsubpix.c,
- src/truetype/ttsubpix.h: Apply.
-
-2015-02-17 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttsubpix.c: Adding missing `static' keywords.
-
-2015-02-17 Werner Lemberg <wl@gnu.org>
-
- [truetype] More signedness fixes.
-
- * include/internal/tttypes.h, src/truetype/ttinterp.h,
- src/truetype/ttobjs.h, src/truetype/ttinterp.c,
- src/truetype/ttobjs.c: Apply.
-
-2015-02-17 Werner Lemberg <wl@gnu.org>
-
- [truetype] Various signedness fixes.
-
- * include/internal/ftgloadr.h, src/truetype/ttpload.c: Apply.
-
- * src/truetype/ttgload.c: Apply.
- (TT_Get_VMetrics): Protect against invalid ascenders and descenders
- while constructing advance height.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- [base] Finish compiler warning fixes for signedness issues.
-
- * src/base/ftglyph.c, src/base/ftlcdfil.c, src/base/ftstroke.c:
- Apply.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- * include/tttables.h (TT_OS2): `fsType' must be FT_UShort.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- More minor signedness warning fixes.
-
- * src/base/ftbbox.c, src/base/ftbitmap.c, src/base/fttrigon.c,
- src/base/ftutil.c: Apply.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- Next round of minor compiler warning fixes.
-
- * include/internal/ftrfork.h (FT_RFork_Ref): Change `offset' member
- type to `FT_Long'.
- (CONST_FT_RFORK_RULE_ARRAY_BEGIN): Add `static' keyword.
-
- * include/internal/ftstream.h (FT_Stream_Pos): Return `FT_ULong'.
-
- * src/base/ftoutln.c, src/base/ftrfork.c, src/base/ftstream.c:
- Signedness fixes.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- Various minor signedness fixes.
-
- * include/ftadvanc.h, include/internal/ftobjs.h,
- src/base/ftgloadr.c, src/base/ftobjs.c: Apply.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- New `TYPEOF' macro.
-
- This helps suppress signedness warnings, avoiding issues with
- implicit conversion changes.
-
- * include/config/ftconfig.h, builds/unix/ftconfig.in,
- builds/vms/ftconfig.h (TYPEOF): Define.
-
- * include/internal/ftobjs.h (FT_PAD_FLOOR, FT_PIX_FLOOR),
- src/autofit/afwarp.h (AF_WARPER_FLOOR): Use it.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftsystem.c: Use casts in standard C function wrappers.
- (ft_alloc, ft_realloc, ft_ansi_stream_io, FT_Stream_Open): Do it.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #44261.
-
- * builds/unix/detect.mk (setup) [unix]: Set `CONFIG_SHELL' in the
- environment also while calling the configure script.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- * include/internal/ftmemory.h: Add some `FT_Offset' casts.
- (FT_MEM_SET, FT_MEM_COPY, FT_MEM_MOVE, FT_ARRAY_ZERO, FT_ARRAY_COPY,
- FT_MEM_MOVE): Do it.
-
-2015-02-15 Werner Lemberg <wl@gnu.org>
-
- [base] Clean up signedness issues in `ftdbgmem.c'.
-
- Also fix other minor issues.
-
- * src/base/ftdbgmem.c (FT_MemTableRec): Replace all FT_ULong types
- with FT_Long for consistency.
- (ft_mem_primes): Change type to `FT_Int'.
- (ft_mem_closest_prime, ft_mem_table_set): Updated.
-
- (ft_mem_debug_panic, ft_mem_debug_alloc, ft_mem_debug_free,
- ft_mem_debug_realloc): Use `static' keyword and fix signedness
- warnings where necessary.
-
- (ft_mem_table_resize, ft_mem_table_new, ft_mem_table_destroy,
- ft_mem_table_get_nodep, ft_mem_debug_init, FT_DumpMemory): Fix types
- and add or remove casts to avoid signedness warnings.
-
-2015-02-15 Werner Lemberg <wl@gnu.org>
-
- [base] Clean up signedness in arithmetic functions.
-
- This makes the code more readable and reduces compiler warnings.
-
- * src/base/ftcalc.c (FT_MulDiv, FT_MulDiv_No_Round, FT_MulFix,
- FT_DivFix): Convert input parameters to unsigned, do the
- computation, then convert the result back to signed.
- (ft_corner_orientation): Fix casts.
-
-2015-02-07 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #44184.
-
- * src/sfnt/ttload.c (check_table_dir, tt_face_load_font_dir): No
- longer reject `htmx' and `vmtx' tables with invalid length but
- sanitize them.
-
-2015-02-06 Jon Anderson <jon@websupergoo.com>
-
- [truetype] Fix regression in the incremental glyph loader.
-
- * src/truetype/ttgload.c (load_truetype_glyph): For incremental
- fonts, the glyph index may be greater than the number of glyphs
- indicated, so guard the check with a preprocessor conditional.
-
-2015-02-06 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix potential memory leak.
-
- While this doesn't show up with FreeType, exactly the same code
- leaks with ttfautohint's modified auto-hinter code (which gets used
- in a slightly different way).
-
- It certainly doesn't harm since it is similar to already existing
- checks in the code for embedded arrays.
-
- * src/autofit/afhints.c (af_glyph_hints_reload): Set `max_contours'
- and `max_points' for all cases.
-
-2015-01-31 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add support for Thai script.
-
- Thanks to Ben Mitchell <ben@rosettatype.com> for guidance with blue
- zone characters!
-
- * src/autofit/afblue.dat: Add blue zone data for Thai.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Thai standard characters.
-
- * src/autofit/afranges.c: Add Thai data.
-
- * src/autofit/afstyles.h: Add Thai data.
-
-2015-01-23 Behdad Esfahbod <behdad@behdad.org>
-
- [raster] Handle `FT_RASTER_FLAG_AA' correctly.
-
- This fixes a breakage caused by the commit `[raster] Remove
- 5-level gray AA mode from monochrome rasterizer.'.
-
- Problem reported by Markus Trippelsdorf <markus@trippelsdorf.de>.
-
- * src/raster/ftraster.c (ft_black_render): Handle
- `FT_RASTER_FLAG_AA'.
-
- * src/raster/ftrend1.c (ft_raster1_render): Remove gray AA mode
- remnants.
-
-2015-01-18 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_New_Library): Fix compiler warning.
-
-2015-01-18 Chris Liddell <chris.liddell@artifex.com>
-
- [raster] Fix Savannah bug #44022.
-
- Add fallback for glyphs with degenerate bounding boxes.
-
- If a glyph has only one very narrow feature, the bbox can end up
- with either the width or height of the bbox being 0, in which case
- no raster memory is allocated and no attempt is made to render the
- glyph. This is less than ideal when the drop-out compensation in
- the rendering code would actually result in the glyph being
- rendered.
-
- This problem can be observed with the `I' glyph (gid 47) in the
- Autodesk RomanS TrueType font.
-
- * src/raster/ftrend1.c (ft_raster1_render): Add a fallback if either
- dimension is zero to explicitly round up/down (instead of simply
- round).
-
-2015-01-17 Werner Lemberg <wl@gnu.org>
-
- Add some tools to handle yearly copyright notice updates.
-
- We are now following the GNU guidelines: A new release automatically
- means that the copyright year of all affected files gets updated; it
- is no longer used to track years of modification changes.
-
- * src/tools/update-copyright-year: New Perl script.
- * src/tools/update-copyright: New shell script that calls
- `update-copyright-year' on all files.
- * src/tools/no-copyright: Exceptions that should not be handled by
- `update-copyright'
-
-2015-01-14 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated, using a description from Behdad.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- * src/autofit/afmodule.c (af_autofitter_done): Fix compiler warning.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [autofit] Add embedded array of segments and edges.
-
- Avoids multiple mallocs per typical glyphs.
-
- With this and recent changes to avoid mallocs, the thread-safe
- stack-based loader is now as fast as the previous model that had one
- cached singleton.
-
- * src/autofit/afhints.h (AF_SEGMENTS_EMBEDDED, AF_EDGES_EMBEDDED):
- New macros.
- (AF_AxisHintsRec): Add two arrays for segments and edges.
-
- * src/autofit/afhints.c (af_axis_hints_new_segment): Only allocate
- data if number of segments exceeds given threshold value.
- (af_axis_hints_new_edge): Only allocate data if number of edges
- exceeds given threshold value.
- (af_glyph_hints_done): Updated.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [autofit] Add embedded arrays for points and contours.
-
- This avoids at least two malloc calls for typical glyphs.
-
- * src/autofit/afhints.h (AF_POINTS_EMBEDDED, AF_CONTOURS_EMBEDDED):
- New macros.
- (AF_GlyphHintsRec): Add two arrays for contours and points.
-
- * src/autofit/afhints.c (af_glyph_hints_init, af_glyph_hints_done):
- Updated.
- (af_glyph_hints_reload): Only allocate data if number of contours or
- points exceeds given threshold values.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [autofit] Allocate hints object on the stack.
-
- This avoids one malloc per load.
-
- * src/autofit/afloader.h (AF_LoaderRec): Change type of `hints' to
- `AF_GlyphHints'.
- Update prototype.
-
- * src/autofit/afloader.c (af_loader_init): Use `AF_GlyphHints'
- parameter instead of `FT_Memory'.
- (af_loader_done): Directly reset `load_hints'.
- (af_loader_load_g): Updated.
-
- * src/autofit/afmodule.c (af_autofitter_load_glyph): Use local
- `hints' object.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [autofit] Reuse slot glyph loader.
-
- No need to create a new glyph loader; we can reuse the one from
- `slot->internal->loader'. It's hard to tell why it was written that
- way originally, but new code looks sound and correct to me, and
- avoids lots of allocations.
-
- * src/autofit/afloader.c (af_loader_init): Change return type to
- `void'.
- Don't call `FT_GlyphLoader_New'.
- (af_loader_reset): Don't call `FT_GlyphLoader_Rewind'.
- (af_loader_load_g): Update code to use `internal->loader', which
- doesn't need copying of data.
-
- * src/autofit/afloader.h (AF_LoaderRec): Remove `gloader' member.
- Update prototype.
-
- * src/autofit/afmodule.c (af_autofitter_load_glyph): Updated.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [autofit] Remove (unused) support for composite glyphs.
-
- We never have to deal with composite glyphs in the autohinter, as
- those will be loaded into FORMAT_OUTLINE by the recursed
- `FT_Load_Glyph' function.
-
- In the rare cases that FT_LOAD_NO_RECURSE is set, it will imply
- FT_LOAD_NO_SCALE as per `FT_Load_Glyph', which then implies
- FT_LOAD_NO_HINTING:
-
- /* resolve load flags dependencies */
-
- if ( load_flags & FT_LOAD_NO_RECURSE )
- load_flags |= FT_LOAD_NO_SCALE |
- FT_LOAD_IGNORE_TRANSFORM;
-
- if ( load_flags & FT_LOAD_NO_SCALE )
- {
- load_flags |= FT_LOAD_NO_HINTING |
- FT_LOAD_NO_BITMAP;
-
- load_flags &= ~FT_LOAD_RENDER;
- }
-
- and as such the auto-hinter is never called. Thus, the recursion in
- `af_loader_load_g' never actually happens. So remove the depth
- counter as well.
-
- * src/autofit/afloader.c (af_loader_load_g): Remove `depth'
- parameter.
- <FT_GLYPH_FORMAT_COMPOSITE>: Remove associated code.
- (af_loader_load_glyph): Updated.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [raster] Fix uninitialized memory access.
-
- Apparently `ras.cProfile' might be uninitialized. This will be the
- case if `ras.top == ras.cProfile->offset', as can be seen in
- `End_Profile'. The overshoot code introduced in a change `Fix B/W
- rasterization of subglyphs with different drop-out modes.' (from
- 2009-06-18) violated this, accessing `ras.cProfile->flags'
- unconditionally just before calling `End_Profile' (which then
- detected that `cProfile' is uninitialized and didn't touch it).
-
- This was harmless, and was not detected by valgrind before because
- the objects were allocated on the `raster_pool', which was always
- initialized. With recent change to allocate raster buffers on the
- stack, valgrind now reported this invalid access.
-
- * src/raster/ftraster.c (Convert_Glyph): Don't access an
- uninitialized `cProfile'.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [smooth] Fix uninitialized memory access.
-
- Looks like `ras.span_y' could always be used without initialization.
- This was never detected by valgrind before because the library-wide
- `raster_pool' was used for the worker object and `raster_pool' was
- originally zero'ed. But subsequent reuses of it were using `span_y'
- uninitialized. With the recent change to not use `render_pool' and
- allocate worker and buffer on the stack, valgrind now detects this
- uninitialized access.
-
- * src/smooth/ftgrays.c (gray_raster_render): Initialize
- `ras.span_y'.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [base] Don't initialize unused `driver->glyph_loader'.
-
- * src/base/ftobjs.c (Destroy_Driver): Don't call
- `FT_GlyphLoader_Done'.
- (FT_Add_Module): Don't call `FT_GlyphLoader_New'.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [base] Don't allocate `library->raster_pool' anymore.
-
- It's unused after the following commits:
-
- [raster] Allocate render pool for mono rasterizer on the stack.
- [raster] Remove 5-level gray AA mode from monochrome rasterizer.
-
- The value of FT_RENDER_POOL_SIZE still serves the purpose it used to
- serve, which is, to adjust the pool size. But the pool is now
- allocated on the stack on demand.
-
- * src/base/ftobjs.c (FT_New_Library, FT_Done_Library): Implement.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [base] Do not reorder library->renderers upon use.
-
- Instead of keeping `library->renderers' in a MRU order, just leave
- it as-is. The MRU machinery wasn't thread-safe.
-
- With this patch, rasterizing glyphs from different faces from
- different threads doesn't fail choosing rasterizer
- (FT_Err_Cannot_Render_Glyph).
-
- Easiest to see that crash was to add a `printf' (or otherwise let
- thread yield in FT_Throw with debugging enabled).
-
- * src/base/ftobjs.c (FT_Render_Glyph_Internal), src/base/ftoutln.c
- (FT_Outline_Render): Don't call `FT_Set_Renderer'.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [raster] Allocate render pool for mono rasterizer on the stack.
-
- Instead of using the `render_pool' member of `FT_Library' that is
- provided down to the rasterizer, completely ignore that and allocate
- needed objects on the stack instead.
-
- With this patch, rasterizing glyphs from different faces from
- different threads doesn't crash in the monochrome rasterizer.
-
- * src/raster/ftraster.c (black_TRaster): Remove `buffer',
- `buffer_size', and `worker' members.
-
- (ft_black_render): Create `buffer' locally.
- (ft_black_reset): Updated.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [raster] Remove 5-level gray AA mode from monochrome rasterizer.
-
- It was off by default and couldn't be turned on at runtime. And the
- smooth rasterizer superseded it over ten years ago. No point in
- keeping. Comments suggested that it was there for compatibility
- with FreeType 1.
-
- 550 lines down.
-
- * src/raster/ftraster.c (FT_RASTER_OPTION_ANTI_ALIASING,
- RASTER_GRAY_LINES): Remove macros and all associated code.
-
- (black_TWorker): Remove `gray_min_x' and `gray_max_x'.
- (black_TRaster): Remove `grays' and `gray_width'.
-
- (Vertical_Sweep_Init, Vertical_Sweep_Span, Vertical_Sweep_Drop,
- ft_black_render): Updated.
-
- * src/raster/ftrend1.c (ft_raster1_render): Simplify code.
- (ft_raster5_renderer_class): Removed.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [smooth] Allocate render pool for smooth rasterizer on the stack.
-
- Instead of using the `render_pool' member of `FT_Library' that is
- provided down to the rasterizer, completely ignore that and allocate
- needed objects on the stack instead.
-
- With this patch, rasterizing glyphs from different faces from
- different threads doesn't crash in the smooth rasterizer.
-
- Bugs:
-
- https://bugzilla.redhat.com/show_bug.cgi?id=678397
- https://bugzilla.redhat.com/show_bug.cgi?id=1004315
- https://bugzilla.redhat.com/show_bug.cgi?id=1165471
- https://bugs.freedesktop.org/show_bug.cgi?id=69034
-
- * src/smooth/ftgrays.c (gray_TRaster): Remove `buffer',
- `buffer_size', `band_size', and `worker' members.
-
- (gray_raster_render): Create `buffer', `buffer_size', and
- `band_size' locally.
- (gray_raster_reset): Updated.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [truetype] Allocate TT_ExecContext in TT_Size instead of TT_Driver.
-
- Previously the code had stipulation for using a per-TT_Size exec
- context if `size->debug' was true. But there was no way that
- `size->debug' could *ever* be true. As such, the code was always
- using the singleton `TT_ExecContext' that was stored in `TT_Driver'.
- This was, clearly, not threadsafe.
-
- With this patch, loading glyphs from different faces from different
- threads doesn't crash in the bytecode loader code.
-
- * src/truetype/ttobjs.h (TT_SizeRec): Remove `debug' member.
- (TT_DriverRec): Remove `context' member.
-
- * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): Remove
- `TT_ExecContext' code related to a global `TT_Driver' object.
-
- (tt_driver_done): Don't remove `TT_ExecContext' object here but ...
- (tt_size_done_bytecode): ... here.
-
- (tt_driver_init): Don't create `TT_ExecContext' object here but ...
- (tt_size_init_bytecode): ... here, only on demand.
-
- * src/truetype/ttinterp.c (TT_Run_Context): Remove defunct debug
- code.
- (TT_New_Context): Remove `TT_ExecContext' code related to a global
- `TT_Driver' object.
-
- * src/truetype/ttinterp.h: Updated.
-
- * src/truetype/ttgload.c (TT_Hint_Glyph, tt_loader_init): Updated.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [autofit] Allocate AF_Loader on the stack instead of AF_Module.
-
- Stop sharing a global `AF_Loader'. Allocate one on the stack during
- glyph load.
-
- Right now this results in about 25% slowdown, to be fixed in a
- following commit.
-
- With this patch loading glyphs from different faces from different
- threads doesn't immediately crash in the autohinting loader code.
-
- Bugs:
-
- https://bugzilla.redhat.com/show_bug.cgi?id=1164941
-
- * src/autofit/afloader.c (af_loader_init): Pass
- `AF_Loader' and `FT_Memory' instead of `AF_Module' as arguments.
- (af_loader_reset, af_loader_load_glyph): Also pass `loader' as
- argument.
- (af_loader_done): Use `AF_Loader' instead of `AF_Module' as
- argument.
-
- * src/autofit/afmodule.c (af_autofitter_init): Don't call
- `af_loader_init'.
- (af_autofitter_done): Don't call `af_loader_done'.
- (af_autofitter_load_glyph): Use a local `AF_Loader' object.
-
- * src/autofit/afloader.h: Include `afmodule.h'.
- Update prototypes.
- Move typedef for `AF_Module' to...
-
- * src/autofit/afmodule.h: ... this place.
- No longer include `afloader.h'.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- * src/type42/t42objs.h (T42_DriverRec): Remove unused member.
-
-2015-01-12 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #43976.
-
- Assure that FreeType's internal include directories are found before
- `CPPFLAGS' (which might be set by the user in the environment), and
- `CPPFLAGS' before `CFLAGS'.
-
- * builds/freetype.mk (FT_CFLAGS): Don't add `INCLUDE_FLAGS'.
- (FT_COMPILE): Make this a special variable for compiling only the
- files handled in `freetype.mk'.
- (.c.$O): Removed, unused.
-
- * src/*/rules.mk (*_COMPILE): Fix order of include directories.
-
-2015-01-11 Werner Lemberg <wl@gnu.org>
-
- [truetype] Prettifying.
-
- * src/truetype/ttinterp.c (project, dualproj, fast_project,
- fast_dualproj): Rename to...
- (PROJECT, DUALPROJ, FAST_PROJECT, FAST_DUALPROJ): ... this.
-
-2015-01-11 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (Ins_JROT, Ins_JROF): Simplify.
-
- Based on a patch from Behdad.
-
-2015-01-11 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (Ins_SxVTL): Simplify function call.
-
-2015-01-11 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (Normalize): Remove unused argument.
-
-2015-01-11 Werner Lemberg <wl@gnu.org>
-
- [truetype] More macro expansions.
-
- * src/truetype/ttinterp.c (FT_UNUSED_EXEC): Remove macro by
- expansion.
-
-2015-01-11 Werner Lemberg <wl@gnu.org>
-
- [truetype] More macro expansions.
-
- * src/truetype/ttinterp.c (INS_ARG): Remove macro by expansion,
- adjusting function calls where necessary.
- (FT_UNUSED_ARG): Removed, no longer needed.
-
-2015-01-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] More macro expansions.
-
- Based on a patch from Behdad.
-
- * src/truetype/ttinterp.c (DO_*): Expand macros into corresponding
- `Ins_*' functions.
- (TT_RunIns): Replace `DO_*' macros with `Ins_*' function calls.
- (ARRAY_BOUND_ERROR): Remove second definition, which is no longer
- needed.
- (Ins_SVTCA, Ins_SPVTCA, Ins_SFVTCA): Replaced with...
- (Ins_SxyTCA): New function.
-
-2015-01-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] Remove TT_CONFIG_OPTION_INTERPRETER_SWITCH.
-
- Behdad suggested this code simplification, and nobody objected...
-
- * include/config/ftoption.h, devel/ftoption.h
- (TT_CONFIG_OPTION_INTERPRETER_SWITCH): Remove.
-
- * src/truetype/ttinterp.c [TT_CONFIG_OPTION_INTERPRETER_SWITCH]:
- Remove related code.
- (ARRAY_BOUND_ERROR): Use do-while loop.
-
-2015-01-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] More macro expansions.
-
- * src/truetype/ttinterp.c, src/truetype/ttinterp.h (EXEC_ARG_,
- EXEC_ARG): Remove by replacing with expansion.
-
-2015-01-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] More macro expansions.
-
- Based on a patch from Behdad.
-
- * src/truetype/ttinterp.c (SKIP_Code, GET_ShortIns, NORMalize,
- SET_SuperRound, ROUND_None, INS_Goto_CodeRange, CUR_Func_move,
- CUR_Func_move_orig, CUR_Func_round, CUR_Func_cur_ppem,
- CUR_Func_read_cvt, CUR_Func_write_cvt, CUR_Func_move_cvt,
- CURRENT_Ratio, INS_SxVTL, COMPUTE_Funcs, COMPUTE_Round,
- COMPUTE_Point_Displacement, MOVE_Zp2_Point): Remove by replacing
- with expansion.
-
- (Cur_Func_project, CUR_Func_dualproj, CUR_fast_project,
- CUR_fast_dualproj): Replace with macros `project', `dualproj',
- `fast_project', `fast_dualproj'.
-
-2015-01-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] More macro expansions.
-
- * src/truetype/ttinterp.c (EXEC_OP_, EXEC_OP): Remove by replacing
- with expansion.
-
-2015-01-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] Remove code for static TrueType interpreter.
-
- This is a follow-up patch.
-
- * src/truetype/ttinterp.c, src/truetype/ttinterp.h
- [TT_CONFIG_OPTION_STATIC_INTERPRETER,
- TT_CONFIG_OPTION_STATIC_RASTER]: Remove macros and related code.
-
-2015-01-10 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (CUR): Remove by replacing with expansion.
-
- This starts a series of patches that simplifies the code of the
- bytecode interpreter.
-
-
-----------------------------------------------------------------------------
-
-Copyright 2015-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used, modified,
-and distributed under the terms of the FreeType project license,
-LICENSE.TXT. By continuing to use, modify, or distribute this file you
-indicate that you have read the license and understand and accept it
-fully.
-
-
-Local Variables:
-version-control: never
-coding: utf-8
-End:
diff --git a/Jamfile b/Jamfile
deleted file mode 100644
index 5df9b8fef..000000000
--- a/Jamfile
+++ /dev/null
@@ -1,222 +0,0 @@
-# FreeType 2 top Jamfile.
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# The HDRMACRO is already defined in FTJam and is used to add
-# the content of certain macros to the list of included header
-# files.
-#
-# We can compile FreeType 2 with classic Jam however thanks to
-# the following code
-#
-if ! $(JAM_TOOLSET)
-{
- rule HDRMACRO
- {
- # nothing
- }
-}
-
-
-# We need to invoke a SubDir rule if the FT2 source directory top is not the
-# current directory. This allows us to build FreeType 2 as part of a larger
-# project easily.
-#
-if $(FT2_TOP) != $(DOT)
-{
- SubDir FT2_TOP ;
-}
-
-
-# The following macros define the include directory, the source directory,
-# and the final library name (without library extensions). They can be
-# replaced by other definitions when the library is compiled as part of
-# a larger project.
-#
-
-# Name of FreeType include directory during compilation.
-# This is relative to FT2_TOP.
-#
-FT2_INCLUDE_DIR ?= include ;
-
-# Name of FreeType source directory during compilation.
-# This is relative to FT2_TOP.
-#
-FT2_SRC_DIR ?= src ;
-
-# Name of final library, without extension.
-#
-FT2_LIB ?= $(LIBPREFIX)freetype ;
-
-
-# Define FT2_BUILD_INCLUDE to point to your build-specific directory.
-# This is prepended to FT2_INCLUDE_DIR. It can be used to specify
-# the location of a custom <ft2build.h> which will point to custom
-# versions of `ftmodule.h' and `ftoption.h', for example.
-#
-FT2_BUILD_INCLUDE ?= ;
-
-# The list of modules to compile on any given build of the library.
-# By default, this will contain _all_ modules defined in FT2_SRC_DIR.
-#
-# IMPORTANT: You'll need to change the content of `ftmodule.h' as well
-# if you modify this list or provide your own.
-#
-FT2_COMPONENTS ?= autofit # auto-fitter
- base # base component (public APIs)
- bdf # BDF font driver
- bzip2 # support for bzip2-compressed PCF font
- cache # cache sub-system
- cff # CFF/CEF font driver
- cid # PostScript CID-keyed font driver
- gzip # support for gzip-compressed PCF font
- lzw # support for LZW-compressed PCF font
- pcf # PCF font driver
- pfr # PFR/TrueDoc font driver
- psaux # common PostScript routines module
- pshinter # PostScript hinter module
- psnames # PostScript names handling
- raster # monochrome rasterizer
- sfnt # SFNT-based format support routines
- smooth # anti-aliased rasterizer
- truetype # TrueType font driver
- type1 # PostScript Type 1 font driver
- type42 # PostScript Type 42 (embedded TrueType) driver
- winfonts # Windows FON/FNT font driver
- ;
-
-
-# Don't touch.
-#
-FT2_INCLUDE = $(FT2_BUILD_INCLUDE)
- [ FT2_SubDir $(FT2_INCLUDE_DIR) ] ;
-
-FT2_SRC = [ FT2_SubDir $(FT2_SRC_DIR) ] ;
-
-# Location of API Reference Documentation
-#
-if $(DOC_DIR)
-{
- DOC_DIR = $(DOCDIR:T) ;
-}
-else
-{
- DOC_DIR = docs/reference ;
-}
-
-
-# Only used by FreeType developers.
-#
-if $(DEBUG_HINTER)
-{
- CCFLAGS += -DDEBUG_HINTER ;
-}
-
-
-# We need `include' in the current include path in order to
-# compile any part of FreeType 2.
-#
-HDRS += $(FT2_INCLUDE) ;
-
-
-# We need to #define FT2_BUILD_LIBRARY so that our sources find the
-# internal headers
-#
-CCFLAGS += -DFT2_BUILD_LIBRARY ;
-
-# Uncomment the following line if you want to build individual source files
-# for each FreeType 2 module. This is only useful during development, and
-# is better defined as an environment variable anyway!
-#
-# FT2_MULTI = true ;
-
-
-# The files `ftheader.h', `internal.h', and `ftserv.h' are used to define
-# macros that are later used in #include statements. They need to be parsed
-# in order to record these definitions.
-#
-HDRMACRO [ FT2_SubDir $(FT2_INCLUDE_DIR) freetype config ftheader.h ] ;
-HDRMACRO [ FT2_SubDir $(FT2_INCLUDE_DIR) freetype internal internal.h ] ;
-HDRMACRO [ FT2_SubDir $(FT2_INCLUDE_DIR) freetype internal ftserv.h ] ;
-
-
-# Now include the Jamfile in `freetype2/src', used to drive the compilation
-# of each FreeType 2 component and/or module.
-#
-SubInclude FT2_TOP $(FT2_SRC_DIR) ;
-
-# Handle the generation of the `ftexport.sym' file, which contains the list
-# of exported symbols. This can be used on Unix by libtool.
-#
-SubInclude FT2_TOP $(FT2_SRC_DIR) tools ;
-
-rule GenExportSymbols
-{
- local apinames = apinames$(SUFEXE) ;
- local aheader ;
- local headers ;
-
- for aheader in [ Glob $(2) : *.h ]
- {
- switch $(aheader)
- {
- case */ftmac.h :
- if ( $(MAC) || $(OS) = MACOSX ) {
- headers += $(aheader) ;
- }
- case *.h : headers += $(aheader) ;
- }
- }
-
- LOCATE on $(1) = $(ALL_LOCATE_TARGET) ;
-
- APINAMES on $(1) = apinames$(SUFEXE) ;
-
- Depends $(1) : $(apinames) $(headers) ;
- GenExportSymbols1 $(1) : $(headers) ;
- Clean clean : $(1) ;
-}
-
-actions GenExportSymbols1 bind APINAMES
-{
- $(APINAMES) $(2) > $(1)
-}
-
-GenExportSymbols ftexport.sym : include/freetype ;
-
-# Test files (hinter debugging). Only used by FreeType developers.
-#
-if $(DEBUG_HINTER)
-{
- SubInclude FT2_TOP tests ;
-}
-
-rule RefDoc
-{
- Depends $1 : all ;
- NotFile $1 ;
- Always $1 ;
-}
-
-actions RefDoc
-{
- python $(FT2_SRC)/tools/docmaker/docmaker.py
- --prefix=ft2
- --title=FreeType-2.8
- --output=$(DOC_DIR)
- $(FT2_INCLUDE)/freetype/*.h
- $(FT2_INCLUDE)/freetype/config/*.h
-}
-
-RefDoc refdoc ;
-
-
-# end of top Jamfile
diff --git a/Jamrules b/Jamrules
deleted file mode 100644
index 0047e5399..000000000
--- a/Jamrules
+++ /dev/null
@@ -1,71 +0,0 @@
-# FreeType 2 JamRules.
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# This file contains the Jam rules needed to build the FreeType 2 library.
-# It is shared by all Jamfiles and is included only once in the build
-# process.
-#
-
-
-# Call SubDirHdrs on a list of directories.
-#
-rule AddSubDirHdrs
-{
- local x ;
-
- for x in $(<)
- {
- SubDirHdrs $(x) ;
- }
-}
-
-
-# Determine prefix of library file. We must use "libxxxxx" on Unix systems,
-# while all other simply use the real name.
-#
-if $(UNIX)
-{
- LIBPREFIX ?= lib ;
-}
-else
-{
- LIBPREFIX ?= "" ;
-}
-
-# FT2_TOP contains the location of the FreeType source directory. You can
-# set it to a specific value if you want to compile the library as part of a
-# larger project.
-#
-FT2_TOP ?= $(DOT) ;
-
-# Define a new rule used to declare a sub directory of the Nirvana source
-# tree.
-#
-rule FT2_SubDir
-{
- if $(FT2_TOP) = $(DOT)
- {
- return [ FDirName $(<) ] ;
- }
- else
- {
- return [ FDirName $(FT2_TOP) $(<) ] ;
- }
-}
-
-# We also set ALL_LOCATE_TARGET in order to place all object and library
-# files in "objs".
-#
-ALL_LOCATE_TARGET ?= [ FT2_SubDir objs ] ;
-
-
-# end of Jamrules
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 1c4145840..000000000
--- a/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# FreeType 2 build system -- top-level Makefile
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# Project names
-#
-PROJECT := freetype
-PROJECT_TITLE := FreeType
-
-# The variable TOP_DIR holds the path to the topmost directory in the project
-# engine source hierarchy. If it is not defined, default it to `.'.
-#
-TOP_DIR ?= .
-
-# The variable OBJ_DIR gives the location where object files and the
-# FreeType library are built.
-#
-OBJ_DIR ?= $(TOP_DIR)/objs
-
-
-include $(TOP_DIR)/builds/toplevel.mk
-
-# EOF
diff --git a/README b/README
deleted file mode 100644
index 926e9dc11..000000000
--- a/README
+++ /dev/null
@@ -1,84 +0,0 @@
- FreeType 2.8
- ============
-
- Homepage: http://www.freetype.org
-
- FreeType is a freely available software library to render fonts.
-
- It is written in C, designed to be small, efficient, highly
- customizable, and portable while capable of producing high-quality
- output (glyph images) of most vector and bitmap font formats.
-
- Please read the docs/CHANGES file, it contains IMPORTANT
- INFORMATION.
-
- Read the files `docs/INSTALL*' for installation instructions; see
- the file `docs/LICENSE.TXT' for the available licenses.
-
- The FreeType 2 API reference is located in `docs/reference'; use the
- file `ft2-toc.html' as the top entry point. Additional
- documentation is available as a separate package from our sites. Go
- to
-
- http://download.savannah.gnu.org/releases/freetype/
-
- and download one of the following files.
-
- freetype-doc-2.8.tar.bz2
- freetype-doc-2.8.tar.gz
- ftdoc28.zip
-
- To view the documentation online, go to
-
- http://www.freetype.org/freetype2/documentation.html
-
-
- Mailing Lists
- =============
-
- The preferred way of communication with the FreeType team is using
- e-mail lists.
-
- general use and discussion: freetype@nongnu.org
- engine internals, porting, etc.: freetype-devel@nongnu.org
- announcements: freetype-announce@nongnu.org
- git repository tracker: freetype-commit@nongnu.org
-
- The lists are moderated; see
-
- http://www.freetype.org/contact.html
-
- how to subscribe.
-
-
- Bugs
- ====
-
- Please submit bug reports at
-
- https://savannah.nongnu.org/bugs/?group=freetype
-
- Alternatively, you might report bugs by e-mail to
- `freetype-devel@nongnu.org'. Don't forget to send a detailed
- explanation of the problem -- there is nothing worse than receiving
- a terse message that only says `it doesn't work'.
-
-
- Enjoy!
-
-
- The FreeType Team
-
-----------------------------------------------------------------------
-
-Copyright 2006-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute
-this file you indicate that you have read the license and understand
-and accept it fully.
-
-
---- end of README ---
diff --git a/README.git b/README.git
deleted file mode 100644
index 06f778b48..000000000
--- a/README.git
+++ /dev/null
@@ -1,50 +0,0 @@
-The git archive doesn't contain pre-built configuration scripts for
-UNIXish platforms. To generate them say
-
- sh autogen.sh
-
-which in turn depends on the following packages:
-
- automake (1.10.1)
- libtool (2.2.4)
- autoconf (2.62)
-
-The versions given in parentheses are known to work. Newer versions
-should work too, of course. Note that autogen.sh also sets up proper
-file permissions for the `configure' and auxiliary scripts.
-
-The autogen.sh script now checks the version of above three packages
-whether they match the numbers above. Otherwise it will complain and
-suggest either upgrading or using an environment variable to point to
-a more recent version of the required tool(s).
-
-Note that `aclocal' is provided by the `automake' package on Linux,
-and that `libtoolize' is called `glibtoolize' on Darwin (OS X).
-
-
-For static builds which don't use platform specific optimizations, no
-configure script is necessary at all; saying
-
- make setup ansi
- make
-
-should work on all platforms which have GNU make (or makepp).
-
-
-Similarly, a build with `cmake' can be done directly from the git
-repository.
-
-
-----------------------------------------------------------------------
-
-Copyright 2005-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute
-this file you indicate that you have read the license and understand
-and accept it fully.
-
-
---- end of README.git ---
diff --git a/autogen.sh b/autogen.sh
deleted file mode 100755
index 31c1534bc..000000000
--- a/autogen.sh
+++ /dev/null
@@ -1,165 +0,0 @@
-#!/bin/sh
-
-# Copyright 2005-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-run ()
-{
- echo "running \`$*'"
- eval $*
-
- if test $? != 0 ; then
- echo "error while running \`$*'"
- exit 1
- fi
-}
-
-get_major_version ()
-{
- echo $1 | sed -e 's/\([0-9][0-9]*\)\..*/\1/g'
-}
-
-get_minor_version ()
-{
- echo $1 | sed -e 's/[0-9][0-9]*\.\([0-9][0-9]*\).*/\1/g'
-}
-
-get_patch_version ()
-{
- # tricky: some version numbers don't include a patch
- # separated with a point, but something like 1.4-p6
- patch=`echo $1 | sed -e 's/[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*/\1/g'`
- if test "$patch" = "$1"; then
- patch=`echo $1 | sed -e 's/[0-9][0-9]*\.[0-9][0-9]*\-p\([0-9][0-9]*\).*/\1/g'`
- # if there isn't any patch number, default to 0
- if test "$patch" = "$1"; then
- patch=0
- fi
- fi
- echo $patch
-}
-
-# $1: version to check
-# $2: minimum version
-
-compare_to_minimum_version ()
-{
- MAJOR1=`get_major_version $1`
- MAJOR2=`get_major_version $2`
- if test $MAJOR1 -lt $MAJOR2; then
- echo 0
- return
- else
- if test $MAJOR1 -gt $MAJOR2; then
- echo 1
- return
- fi
- fi
-
- MINOR1=`get_minor_version $1`
- MINOR2=`get_minor_version $2`
- if test $MINOR1 -lt $MINOR2; then
- echo 0
- return
- else
- if test $MINOR1 -gt $MINOR2; then
- echo 1
- return
- fi
- fi
-
- PATCH1=`get_patch_version $1`
- PATCH2=`get_patch_version $2`
- if test $PATCH1 -lt $PATCH2; then
- echo 0
- else
- echo 1
- fi
-}
-
-# check the version of a given tool against a minimum version number
-#
-# $1: tool path
-# $2: tool usual name (e.g. `aclocal')
-# $3: tool variable (e.g. `ACLOCAL')
-# $4: minimum version to check against
-# $5: option field index used to extract the tool version from the
-# output of --version
-
-check_tool_version ()
-{
- field=$5
- # assume the output of "[TOOL] --version" is "toolname (GNU toolname foo bar) version"
- if test "$field"x = x; then
- field=3 # default to 3 for all GNU autotools, after filtering enclosed string
- fi
- version=`$1 --version | head -1 | sed 's/([^)]*)/()/g' | cut -d ' ' -f $field`
- version_check=`compare_to_minimum_version $version $4`
- if test "$version_check"x = 0x; then
- echo "ERROR: Your version of the \`$2' tool is too old."
- echo " Minimum version $4 is required (yours is version $version)."
- echo " Please upgrade or use the $3 variable to point to a more recent one."
- echo ""
- exit 1
- fi
-}
-
-if test ! -f ./builds/unix/configure.raw; then
- echo "You must be in the same directory as \`autogen.sh'."
- echo "Bootstrapping doesn't work if srcdir != builddir."
- exit 1
-fi
-
-# On MacOS X, the GNU libtool is named `glibtool'.
-HOSTOS=`uname`
-if test "$LIBTOOLIZE"x != x; then
- :
-elif test "$HOSTOS"x = Darwinx; then
- LIBTOOLIZE=glibtoolize
-else
- LIBTOOLIZE=libtoolize
-fi
-
-if test "$ACLOCAL"x = x; then
- ACLOCAL=aclocal
-fi
-
-if test "$AUTOCONF"x = x; then
- AUTOCONF=autoconf
-fi
-
-check_tool_version $ACLOCAL aclocal ACLOCAL 1.10.1
-check_tool_version $LIBTOOLIZE libtoolize LIBTOOLIZE 2.2.4
-check_tool_version $AUTOCONF autoconf AUTOCONF 2.62
-
-# This sets freetype_major, freetype_minor, and freetype_patch.
-eval `sed -nf version.sed include/freetype/freetype.h`
-
-# We set freetype-patch to an empty value if it is zero.
-if test "$freetype_patch" = ".0"; then
- freetype_patch=
-fi
-
-cd builds/unix
-
-echo "generating \`configure.ac'"
-sed -e "s;@VERSION@;$freetype_major$freetype_minor$freetype_patch;" \
- < configure.raw > configure.ac
-
-run aclocal -I . --force
-run $LIBTOOLIZE --force --copy --install
-run autoconf --force
-
-chmod +x install-sh
-
-cd ../..
-
-chmod +x ./configure
-
-# EOF
diff --git a/glyphtest/bitmap.c b/bitmap.c
index 5d7e3c36a..5d7e3c36a 100644
--- a/glyphtest/bitmap.c
+++ b/bitmap.c
diff --git a/glyphtest/bitmap.h b/bitmap.h
index e8945de47..e8945de47 100644
--- a/glyphtest/bitmap.h
+++ b/bitmap.h
diff --git a/builds/amiga/README b/builds/amiga/README
deleted file mode 100644
index fb44116ed..000000000
--- a/builds/amiga/README
+++ /dev/null
@@ -1,110 +0,0 @@
-
-README for the builds/amiga subdirectory.
-
-Copyright 2005-2017 by
-Werner Lemberg and Detlef Würkner.
-
-This file is part of the FreeType project, and may only be used, modified,
-and distributed under the terms of the FreeType project license,
-LICENSE.TXT. By continuing to use, modify, or distribute this file you
-indicate that you have read the license and understand and accept it
-fully.
-
-
-The makefile.os4 is for the AmigaOS4 SDK. To use it, type
-"make -f makefile.os4", it produces a link library libft2_ppc.a.
-
-The makefile is for ppc-morphos-gcc-2.95.3-bin.tgz (gcc 2.95.3 hosted on
-68k-Amiga producing MorphOS-PPC-binaries from http://www.morphos.de).
-To use it, type "make assign", then "make"; it produces a link library
-libft2_ppc.a.
-
-The smakefile is a makefile for Amiga SAS/C 6.58 (no longer available,
-latest sold version was 6.50, updates can be found in Aminet). It is
-based on the version found in the sourcecode of ttf.library 0.83b for
-FreeType 1.3.1 from Richard Griffith (ragriffi@sprynet.com,
-http://ragriffi.home.sprynet.com).
-
-You will also need the latest include files and amiga.lib from the
-Amiga web site (http://www.amiga.com/3.9/download/NDK3.9.lha) for
-AmigaOS 3.9; the generated code should work under AmigaOS 2.04 and up.
-
-To use it, call "smake assign" and then "smake" from the builds/amiga
-directory. The results are:
-
-- A link library "ft2_680x0.lib" (where x depends on the setting of
- the CPU entry in the smakefile) containing all FreeType2 parts
- except of the init code, debugging code, and the system interface
- code.
-
-- ftsystem.o, an object module containing the standard version of the
- system interface code which uses fopen() fclose() fread() fseek()
- ftell() malloc() realloc() and free() from lib:sc.lib (not pure).
-
-- ftsystempure.o, an object module containing the pure version of the
- system interface code which uses Open() Close() Read() Seek()
- ExamineFH() AsmAllocPooled() AsmFreePooled() etc. This version can
- be used in both normal programs and in Amiga run-time shared system
- librarys (can be linked with lib:libinit.o, no copying of DATA and
- BSS hunks for each OpenLibrary() necessary). Source code is in
- src/base/ftsystem.c.
-
-- ftdebug.o, an object module containing the standard version of the
- debugging code which uses vprintf() and exit() (not pure).
- Debugging can be turned on in FT:include/freetype/config/ftoption.h
- and with FT_SetTraceLevel().
-
-- ftdebugpure.o, an object module containing the pure version of the
- debugging code which uses KVPrintf() from lib:debug.lib and no
- exit(). For debugging of Amiga run-time shared system libraries.
- Source code is in src/base/ftdebug.c.
-
-- NO ftinit.o. Because linking with a link library should result in
- linking only the needed object modules in it, but standard
- ftsystem.o would force ALL FreeType2 modules to be linked to your
- program, I decided to use a different scheme: You must #include
- FT:src/base/ftinit.c in your sourcecode and specify with #define
- statements which modules you need. See
- include/freetype/config/ftmodule.h.
-
-
-To use in your own programs:
-
-- Insert the #define and #include statements from top of
- include/freetype/config/ftmodule.h in your source code and
- uncomment the #define statements for the FreeType2 modules you need.
-
-- You can use either PARAMETERS=REGISTER or PARAMETERS=STACK for
- calling the FreeType2 functions, because the link library and the
- object files are compiled with PARAMETERS=BOTH.
-
-- "smake assign" (assign "FT:" to the FreeType2 main directory).
-
-- Compile your program.
-
-- Link with either ftsystem.o or ftsystempure.o, if debugging enabled
- with either ftdebug.o or (ftdebugpure.o and lib:debug.lib), and with
- ft2_680x0.lib as link library.
-
-
-To adapt to other compilers:
-
-- The standard ANSI C maximum length of 31 significant characters in
- identifiers is not enough for FreeType2. Check if your compiler has
- a minimum length of 40 significant characters or can be switched to
- it. "idlen=40" is the option for SAS/C. Setting #define
- HAVE_LIMIT_ON_IDENTS in an include file may also work (not tested).
-
-- Make sure that the include directory in builds/amiga is searched
- before the normal FreeType2 include directory, so you are able to
- replace problematic include files with your own version (same may be
- useful for the src directory).
-
-- An example of how to replace/workaround a problematic include file
- is include/freetype/config/ftconfig.h; it changes a #define that
- would prevent SAS/C from generating XDEF's where it should do that and
- then includes the standard FreeType2 include file.
-
-Local Variables:
-coding: latin-1
-End:
diff --git a/builds/amiga/include/config/ftconfig.h b/builds/amiga/include/config/ftconfig.h
deleted file mode 100644
index 9434841e6..000000000
--- a/builds/amiga/include/config/ftconfig.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftconfig.h */
-/* */
-/* Amiga-specific configuration file (specification only). */
-/* */
-/* Copyright 2005-2017 by */
-/* Werner Lemberg and Detlef Würkner. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/*
- * This is an example how to override the default FreeType2 header files
- * with Amiga-specific changes. When the compiler searches this directory
- * before the default directory, we can do some modifications.
- *
- * Here we must change FT_EXPORT_DEF so that SAS/C does
- * generate the needed XDEFs.
- */
-
-#if 0
-#define FT_EXPORT_DEF( x ) extern x
-#endif
-
-#undef FT_EXPORT_DEF
-#define FT_EXPORT_DEF( x ) x
-
-/* Now include the original file */
-#ifndef __MORPHOS__
-#ifdef __SASC
-#include "FT:include/freetype/config/ftconfig.h"
-#else
-#include "/FT/include/freetype/config/ftconfig.h"
-#endif
-#else
-/* We must define that, it seems that
- * lib/gcc-lib/ppc-morphos/2.95.3/include/syslimits.h is missing in
- * ppc-morphos-gcc-2.95.3-bin.tgz (gcc for 68k producing MorphOS PPC elf
- * binaries from http://www.morphos.de)
- */
-#define _LIBC_LIMITS_H_
-#include "/FT/include/freetype/config/ftconfig.h"
-#endif
-
-/*
-Local Variables:
-coding: latin-1
-End:
-*/
diff --git a/builds/amiga/include/config/ftmodule.h b/builds/amiga/include/config/ftmodule.h
deleted file mode 100644
index 38ea4c900..000000000
--- a/builds/amiga/include/config/ftmodule.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmodule.h */
-/* */
-/* Amiga-specific FreeType module selection. */
-/* */
-/* Copyright 2005-2017 by */
-/* Werner Lemberg and Detlef Würkner. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/*
- * To avoid that all your programs include all FreeType modules,
- * you copy the following piece of source code into your own
- * source file and specify which modules you really need in your
- * application by uncommenting the appropriate lines.
- */
-/*
-//#define FT_USE_AUTOFIT // autofitter
-//#define FT_USE_RASTER // monochrome rasterizer
-//#define FT_USE_SMOOTH // anti-aliasing rasterizer
-//#define FT_USE_TT // truetype font driver
-//#define FT_USE_T1 // type1 font driver
-//#define FT_USE_T42 // type42 font driver
-//#define FT_USE_T1CID // cid-keyed type1 font driver // no cmap support
-//#define FT_USE_CFF // opentype font driver
-//#define FT_USE_BDF // bdf bitmap font driver
-//#define FT_USE_PCF // pcf bitmap font driver
-//#define FT_USE_PFR // pfr font driver
-//#define FT_USE_WINFNT // windows .fnt|.fon bitmap font driver
-//#define FT_USE_OTV // opentype validator
-//#define FT_USE_GXV // truetype gx validator
-#include "FT:src/base/ftinit.c"
-*/
-
-/* Make sure that the needed support modules are built in.
- * Dependencies can be found by searching for FT_Get_Module.
- */
-
-#ifdef FT_USE_T42
-#define FT_USE_TT
-#endif
-
-#ifdef FT_USE_TT
-#define FT_USE_SFNT
-#endif
-
-#ifdef FT_USE_CFF
-#define FT_USE_SFNT
-#define FT_USE_PSHINT
-#define FT_USE_PSNAMES
-#endif
-
-#ifdef FT_USE_T1
-#define FT_USE_PSAUX
-#define FT_USE_PSHINT
-#define FT_USE_PSNAMES
-#endif
-
-#ifdef FT_USE_T1CID
-#define FT_USE_PSAUX
-#define FT_USE_PSHINT
-#define FT_USE_PSNAMES
-#endif
-
-#ifdef FT_USE_PSAUX
-#define FT_USE_PSNAMES
-#endif
-
-#ifdef FT_USE_SFNT
-#define FT_USE_PSNAMES
-#endif
-
-/* Now include the modules */
-
-#ifdef FT_USE_AUTOFIT
-FT_USE_MODULE( FT_Module_Class, autofit_module_class )
-#endif
-
-#ifdef FT_USE_TT
-FT_USE_MODULE( FT_Driver_ClassRec, tt_driver_class )
-#endif
-
-#ifdef FT_USE_T1
-FT_USE_MODULE( FT_Driver_ClassRec, t1_driver_class )
-#endif
-
-#ifdef FT_USE_CFF
-FT_USE_MODULE( FT_Driver_ClassRec, cff_driver_class )
-#endif
-
-#ifdef FT_USE_T1CID
-FT_USE_MODULE( FT_Driver_ClassRec, t1cid_driver_class )
-#endif
-
-#ifdef FT_USE_PFR
-FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class )
-#endif
-
-#ifdef FT_USE_T42
-FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class )
-#endif
-
-#ifdef FT_USE_WINFNT
-FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class )
-#endif
-
-#ifdef FT_USE_PCF
-FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class )
-#endif
-
-#ifdef FT_USE_PSAUX
-FT_USE_MODULE( FT_Module_Class, psaux_module_class )
-#endif
-
-#ifdef FT_USE_PSNAMES
-FT_USE_MODULE( FT_Module_Class, psnames_module_class )
-#endif
-
-#ifdef FT_USE_PSHINT
-FT_USE_MODULE( FT_Module_Class, pshinter_module_class )
-#endif
-
-#ifdef FT_USE_RASTER
-FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )
-#endif
-
-#ifdef FT_USE_SFNT
-FT_USE_MODULE( FT_Module_Class, sfnt_module_class )
-#endif
-
-#ifdef FT_USE_SMOOTH
-FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class )
-FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcd_renderer_class )
-FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcdv_renderer_class )
-#endif
-
-#ifdef FT_USE_OTV
-FT_USE_MODULE( FT_Module_Class, otv_module_class )
-#endif
-
-#ifdef FT_USE_BDF
-FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
-#endif
-
-#ifdef FT_USE_GXV
-FT_USE_MODULE( FT_Module_Class, gxv_module_class )
-#endif
-
-/*
-Local Variables:
-coding: latin-1
-End:
-*/
diff --git a/builds/amiga/makefile b/builds/amiga/makefile
deleted file mode 100644
index e467f9ab6..000000000
--- a/builds/amiga/makefile
+++ /dev/null
@@ -1,299 +0,0 @@
-#
-# Makefile for FreeType2 link library using ppc-morphos-gcc-2.95.3-bin.tgz
-# (gcc 2.95.3 hosted on 68k-Amiga producing MorphOS-PPC-binaries from
-# http://www.morphos.de)
-#
-
-
-# Copyright 2005-2017 by
-# Werner Lemberg and Detlef Würkner.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-#
-# to build from the builds/amiga directory call
-#
-# make assign
-# make
-#
-# Your programs source code should start with this
-# (uncomment the parts you do not need to keep the program small):
-# ---8<---
-#define FT_USE_AUTOFIT // autofitter
-#define FT_USE_RASTER // monochrome rasterizer
-#define FT_USE_SMOOTH // anti-aliasing rasterizer
-#define FT_USE_TT // truetype font driver
-#define FT_USE_T1 // type1 font driver
-#define FT_USE_T42 // type42 font driver
-#define FT_USE_T1CID // cid-keyed type1 font driver
-#define FT_USE_CFF // opentype font driver
-#define FT_USE_BDF // bdf bitmap font driver
-#define FT_USE_PCF // pcf bitmap font driver
-#define FT_USE_PFR // pfr font driver
-#define FT_USE_WINFNT // windows .fnt|.fon bitmap font driver
-#define FT_USE_OTV // opentype validator
-#define FT_USE_GXV // truetype gx validator
-#include "FT:src/base/ftinit.c"
-# ---8<---
-#
-# link your programs with libft2_ppc.a and either ftsystem.ppc.o or ftsystempure.ppc.o
-# (and either ftdebug.ppc.o or ftdebugpure.ppc.o if you enabled FT_DEBUG_LEVEL_ERROR or
-# FT_DEBUG_LEVEL_TRACE in include/freetype/config/ftoption.h).
-
-all: libft2_ppc.a ftsystem.ppc.o ftsystempure.ppc.o
-
-assign:
- assign FT: //
-
-FTSRC = /FT/src
-
-CC = ppc-morphos-gcc
-AR = ppc-morphos-ar rc
-RANLIB = ppc-morphos-ranlib
-LD = ppc-morphos-ld
-CFLAGS = -DFT2_BUILD_LIBRARY -O2 -I/emu/emulinclude/includegcc -I/emu/include -Iinclude -I$(FTSRC) -I/FT/include
-
-#
-# FreeType2 library base
-#
-ftbase.ppc.o: $(FTSRC)/base/ftbase.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftinit.ppc.o: $(FTSRC)/base/ftinit.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftsystem.ppc.o: $(FTSRC)/base/ftsystem.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-# pure version for use in run-time library etc
-ftsystempure.ppc.o: src/base/ftsystem.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftdebug.ppc.o: $(FTSRC)/base/ftdebug.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-# pure version for use in run-time library etc
-ftdebugpure.ppc.o: src/base/ftdebug.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library base extensions
-#
-ftbbox.ppc.o: $(FTSRC)/base/ftbbox.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftbdf.ppc.o: $(FTSRC)/base/ftbdf.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftbitmap.ppc.o: $(FTSRC)/base/ftbitmap.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftcid.ppc.o: $(FTSRC)/base/ftcid.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftfntfmt.ppc.o: $(FTSRC)/base/ftfntfmt.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftfstype.ppc.o: $(FTSRC)/base/ftfstype.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftgasp.ppc.o: $(FTSRC)/base/ftgasp.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftglyph.ppc.o: $(FTSRC)/base/ftglyph.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftgxval.ppc.o: $(FTSRC)/base/ftgxval.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftlcdfil.ppc.o: $(FTSRC)/base/ftlcdfil.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftmm.ppc.o: $(FTSRC)/base/ftmm.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftotval.ppc.o: $(FTSRC)/base/ftotval.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftpatent.ppc.o: $(FTSRC)/base/ftpatent.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftpfr.ppc.o: $(FTSRC)/base/ftpfr.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftstroke.ppc.o: $(FTSRC)/base/ftstroke.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftsynth.ppc.o: $(FTSRC)/base/ftsynth.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-fttype1.ppc.o: $(FTSRC)/base/fttype1.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-ftwinfnt.ppc.o: $(FTSRC)/base/ftwinfnt.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library autofitting module
-#
-autofit.ppc.o: $(FTSRC)/autofit/autofit.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library postscript hinting module
-#
-pshinter.ppc.o: $(FTSRC)/pshinter/pshinter.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library PS support module
-#
-psaux.ppc.o: $(FTSRC)/psaux/psaux.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library PS glyph names module
-#
-psnames.ppc.o: $(FTSRC)/psnames/psnames.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library monochrome raster module
-#
-raster.ppc.o: $(FTSRC)/raster/raster.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library anti-aliasing raster module
-#
-smooth.ppc.o: $(FTSRC)/smooth/smooth.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library 'sfnt' module
-#
-sfnt.ppc.o: $(FTSRC)/sfnt/sfnt.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library glyph and image caching system
-#
-ftcache.ppc.o: $(FTSRC)/cache/ftcache.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library OpenType font driver
-#
-cff.ppc.o: $(FTSRC)/cff/cff.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library TrueType font driver
-#
-truetype.ppc.o: $(FTSRC)/truetype/truetype.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library Type1 font driver
-#
-type1.ppc.o: $(FTSRC)/type1/type1.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library Type42 font driver
-#
-type42.ppc.o: $(FTSRC)/type42/type42.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library CID-keyed Type1 font driver
-#
-type1cid.ppc.o: $(FTSRC)/cid/type1cid.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library BDF bitmap font driver
-#
-bdf.ppc.o: $(FTSRC)/bdf/bdf.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library PCF bitmap font driver
-#
-pcf.ppc.o: $(FTSRC)/pcf/pcf.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library gzip support for compressed PCF bitmap fonts
-#
-gzip.ppc.o: $(FTSRC)/gzip/ftgzip.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-# FreeType2 library bzip2 support for compressed PCF bitmap fonts
-#
-bzip2.ppc.o: $(FTSRC)/bzip2/ftbzip2.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library compress support for compressed PCF bitmap fonts
-#
-lzw.ppc.o: $(FTSRC)/lzw/ftlzw.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library PFR font driver
-#
-pfr.ppc.o: $(FTSRC)/pfr/pfr.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library Windows FNT/FON bitmap font driver
-#
-winfnt.ppc.o: $(FTSRC)/winfonts/winfnt.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library TrueTypeGX Validator
-#
-gxvalid.ppc.o: $(FTSRC)/gxvalid/gxvalid.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-#
-# FreeType2 library OpenType validator
-#
-otvalid.ppc.o: $(FTSRC)/otvalid/otvalid.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
-BASEPPC = ftbase.ppc.o ftbbox.ppc.o ftbdf.ppc.o ftbitmap.ppc.o ftcid.ppc.o \
- ftfntfmt.ppc.oftfstype.ppc.o ftgasp.ppc.o ftglyph.ppc.o \
- ftgxval.ppc.o ftlcdfil.ppc.o ftmm.ppc.o ftotval.ppc.o \
- ftpatent.ppc.o ftpfr.ppc.o ftstroke.ppc.o ftsynth.ppc.o \
- fttype1.ppc.o ftwinfnt.ppc.o
-
-DEBUGPPC = ftdebug.ppc.o ftdebugpure.ppc.o
-
-AFITPPC = autofit.ppc.o
-
-GXVPPC = gxvalid.ppc.o
-
-OTVPPC = otvalid.ppc.o
-
-PSPPC = psaux.ppc.o psnames.ppc.o pshinter.ppc.o
-
-RASTERPPC = raster.ppc.o smooth.ppc.o
-
-FONTDPPC = cff.ppc.o type1.ppc.o type42.ppc.o type1cid.ppc.o truetype.ppc.o\
- bdf.ppc.o pcf.ppc.o pfr.ppc.o winfnt.ppc.o
-
-libft2_ppc.a: $(BASEPPC) $(AFITPPC) $(GXVPPC) $(OTVPPC) $(PSPPC) $(RASTERPPC) sfnt.ppc.o ftcache.ppc.o $(FONTDPPC) gzip.ppc.o bzip2.ppc.o lzw.ppc.o
- $(AR) $@ $(BASEPPC) $(AFITPPC) $(GXVPPC) $(OTVPPC) $(PSPPC) $(RASTERPPC) sfnt.ppc.o ftcache.ppc.o $(FONTDPPC) gzip.ppc.o bzip2.ppc.o lzw.ppc.o
- -@ ($(RANLIB) $@ || true) >/dev/null 2>&1
-
-#Local Variables:
-#coding: latin-1
-#End:
diff --git a/builds/amiga/makefile.os4 b/builds/amiga/makefile.os4
deleted file mode 100644
index 82ee86449..000000000
--- a/builds/amiga/makefile.os4
+++ /dev/null
@@ -1,303 +0,0 @@
-#
-# Makefile for FreeType2 link library using gcc 4.0.3 from the
-# AmigaOS4 SDK
-#
-
-
-# Copyright 2005-2017 by
-# Werner Lemberg and Detlef Würkner.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# to build from the builds/amiga directory call
-#
-# make -f makefile.os4
-#
-# Your programs source code should start with this
-# (uncomment the parts you do not need to keep the program small):
-# ---8<---
-#define FT_USE_AUTOFIT // autofitter
-#define FT_USE_RASTER // monochrome rasterizer
-#define FT_USE_SMOOTH // anti-aliasing rasterizer
-#define FT_USE_TT // truetype font driver
-#define FT_USE_T1 // type1 font driver
-#define FT_USE_T42 // type42 font driver
-#define FT_USE_T1CID // cid-keyed type1 font driver
-#define FT_USE_CFF // opentype font driver
-#define FT_USE_BDF // bdf bitmap font driver
-#define FT_USE_PCF // pcf bitmap font driver
-#define FT_USE_PFR // pfr font driver
-#define FT_USE_WINFNT // windows .fnt|.fon bitmap font driver
-#define FT_USE_OTV // opentype validator
-#define FT_USE_GXV // truetype gx validator
-#include "FT:src/base/ftinit.c"
-# ---8<---
-#
-# link your programs with libft2_ppc.a and either ftsystem.ppc.o or ftsystempure.ppc.o
-# (and either ftdebug.ppc.o or ftdebugpure.ppc.o if you enabled FT_DEBUG_LEVEL_ERROR or
-# FT_DEBUG_LEVEL_TRACE in include/freetype/config/ftoption.h).
-
-all: assign libft2_ppc.a ftsystem.ppc.o ftsystempure.ppc.o
-
-assign:
- assign FT: //
-
-CC = ppc-amigaos-gcc
-AR = ppc-amigaos-ar
-RANLIB = ppc-amigaos-ranlib
-
-DIRFLAGS = -Iinclude -I/FT/src -I/FT/include -I/SDK/include
-
-WARNINGS = -Wall -W -Wundef -Wpointer-arith -Wbad-function-cast \
- -Waggregate-return -Wwrite-strings -Wshadow
-
-OPTIONS = -DFT2_BUILD_LIBRARY -DNDEBUG -fno-builtin
-OPTIMIZE = -O2 -fomit-frame-pointer -fstrength-reduce -finline-functions
-
-CFLAGS = -mcrt=clib2 $(DIRFLAGS) $(WARNINGS) $(FT2FLAGS) $(OPTIONS) $(OPTIMIZE)
-
-#
-# FreeType2 library base
-#
-ftbase.ppc.o: FT:src/base/ftbase.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftbase.c
-
-ftinit.ppc.o: FT:src/base/ftinit.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftinit.c
-
-ftsystem.ppc.o: FT:src/base/ftsystem.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftsystem.c
-
-# pure version for use in run-time library etc
-ftsystempure.ppc.o: src/base/ftsystem.c
- $(CC) -c $(CFLAGS) -o $@ src/base/ftsystem.c
-
-#
-# FreeType2 library base extensions
-#
-ftbbox.ppc.o: FT:src/base/ftbbox.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftbbox.c
-
-ftbdf.ppc.o: FT:src/base/ftbdf.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftbdf.c
-
-ftbitmap.ppc.o: FT:src/base/ftbitmap.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftbitmap.c
-
-ftcid.ppc.o: FT:src/base/ftcid.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftcid.c
-
-ftdebug.ppc.o: FT:src/base/ftdebug.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftdebug.c
-
-# pure version for use in run-time library etc
-ftdebugpure.ppc.o: src/base/ftdebug.c
- $(CC) -c $(CFLAGS) -o $@ src/base/ftdebug.c
-
-ftfntfmt.ppc.o: FT:src/base/ftfntfmt.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftfntfmt.c
-
-ftfstype.ppc.o: FT:src/base/ftfstype.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftfstype.c
-
-ftgasp.ppc.o: FT:src/base/ftgasp.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftgasp.c
-
-ftglyph.ppc.o: FT:src/base/ftglyph.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftglyph.c
-
-ftgxval.ppc.o: FT:src/base/ftgxval.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftgxval.c
-
-ftlcdfil.ppc.o: FT:src/base/ftlcdfil.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftlcdfil.c
-
-ftmm.ppc.o: FT:src/base/ftmm.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftmm.c
-
-ftotval.ppc.o: FT:src/base/ftotval.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftotval.c
-
-ftpatent.ppc.o: FT:src/base/ftpatent.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftpatent.c
-
-ftpfr.ppc.o: FT:src/base/ftpfr.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftpfr.c
-
-ftstroke.ppc.o: FT:src/base/ftstroke.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftstroke.c
-
-ftsynth.ppc.o: FT:src/base/ftsynth.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftsynth.c
-
-fttype1.ppc.o: FT:src/base/fttype1.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/fttype1.c
-
-ftwinfnt.ppc.o: FT:src/base/ftwinfnt.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftwinfnt.c
-
-#
-# FreeType2 library autofitting module
-#
-autofit.ppc.o: FT:src/autofit/autofit.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/autofit/autofit.c
-
-#
-# FreeType2 library postscript hinting module
-#
-pshinter.ppc.o: FT:src/pshinter/pshinter.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/pshinter/pshinter.c
-
-#
-# FreeType2 library PS support module
-#
-psaux.ppc.o: FT:src/psaux/psaux.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/psaux/psaux.c
-
-#
-# FreeType2 library PS glyph names module
-#
-psnames.ppc.o: FT:src/psnames/psnames.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/psnames/psnames.c
-
-#
-# FreeType2 library monochrome raster module
-#
-raster.ppc.o: FT:src/raster/raster.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/raster/raster.c
-
-#
-# FreeType2 library anti-aliasing raster module
-#
-smooth.ppc.o: FT:src/smooth/smooth.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/smooth/smooth.c
-
-#
-# FreeType2 library 'sfnt' module
-#
-sfnt.ppc.o: FT:src/sfnt/sfnt.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/sfnt/sfnt.c
-
-#
-# FreeType2 library glyph and image caching system
-#
-ftcache.ppc.o: FT:src/cache/ftcache.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/cache/ftcache.c
-
-#
-# FreeType2 library OpenType font driver
-#
-cff.ppc.o: FT:src/cff/cff.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/cff/cff.c
-
-#
-# FreeType2 library TrueType font driver
-#
-truetype.ppc.o: FT:src/truetype/truetype.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/truetype/truetype.c
-
-#
-# FreeType2 library Type1 font driver
-#
-type1.ppc.o: FT:src/type1/type1.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/type1/type1.c
-
-#
-# FreeType2 library Type42 font driver
-#
-type42.ppc.o: FT:src/type42/type42.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/type42/type42.c
-
-#
-# FreeType2 library CID-keyed Type1 font driver
-#
-type1cid.ppc.o: FT:src/cid/type1cid.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/cid/type1cid.c
-
-#
-# FreeType2 library BDF bitmap font driver
-#
-bdf.ppc.o: FT:src/bdf/bdf.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/bdf/bdf.c
-
-#
-# FreeType2 library PCF bitmap font driver
-#
-pcf.ppc.o: FT:src/pcf/pcf.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/pcf/pcf.c
-
-#
-# FreeType2 library gzip support for compressed PCF bitmap fonts
-#
-gzip.ppc.o: FT:src/gzip/ftgzip.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/gzip/ftgzip.c
-
-#
-# FreeType2 library bzip2 support for compressed PCF bitmap fonts
-#
-bzip2.ppc.o: FT:src/bzip2/ftbzip2.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/bzip2/ftbzip2.c
-
-#
-# FreeType2 library compress support for compressed PCF bitmap fonts
-#
-lzw.ppc.o: FT:src/lzw/ftlzw.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/lzw/ftlzw.c
-
-#
-# FreeType2 library PFR font driver
-#
-pfr.ppc.o: FT:src/pfr/pfr.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/pfr/pfr.c
-
-#
-# FreeType2 library Windows FNT/FON bitmap font driver
-#
-winfnt.ppc.o: FT:src/winfonts/winfnt.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/winfonts/winfnt.c
-
-#
-# FreeType2 library TrueTypeGX Validator
-#
-gxvalid.ppc.o: FT:src/gxvalid/gxvalid.c
- $(CC) -c $(CFLAGS) -Wno-aggregate-return -o $@ /FT/src/gxvalid/gxvalid.c
-
-#
-# FreeType2 library OpenType validator
-#
-otvalid.ppc.o: FT:src/otvalid/otvalid.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/otvalid/otvalid.c
-
-BASE = ftbase.ppc.o ftbbox.ppc.o ftbdf.ppc.o ftbitmap.ppc.o ftcid.ppc.o \
- ftfntfmt.ppc.o ftfstype.ppc.o ftgasp.ppc.o ftglyph.ppc.o \
- ftgxval.ppc.o ftlcdfil.ppc.o ftmm.ppc.o ftotval.ppc.o \
- ftpatent.ppc.o ftpfr.ppc.o ftstroke.ppc.o ftsynth.ppc.o \
- fttype1.ppc.o ftwinfnt.ppc.o
-
-DEBUG = ftdebug.ppc.o ftdebugpure.ppc.o
-
-AFIT = autofit.ppc.o
-
-GXV = gxvalid.ppc.o
-
-OTV = otvalid.ppc.o
-
-PS = psaux.ppc.o psnames.ppc.o pshinter.ppc.o
-
-RASTER = raster.ppc.o smooth.ppc.o
-
-FONTD = cff.ppc.o type1.ppc.o type42.ppc.o type1cid.ppc.o truetype.ppc.o\
- bdf.ppc.o pcf.ppc.o pfr.ppc.o winfnt.ppc.o
-
-libft2_ppc.a: $(BASE) $(AFIT) $(GXV) $(OTV) $(PS) $(RASTER) sfnt.ppc.o ftcache.ppc.o $(FONTD) gzip.ppc.o lzw.ppc.o
- $(AR) r $@ $(BASE) $(AFIT) $(GXV) $(OTV) $(PS) $(RASTER) sfnt.ppc.o ftcache.ppc.o $(FONTD) gzip.ppc.o lzw.ppc.o
- $(RANLIB) $@
-
-#Local Variables:
-#coding: latin-1
-#End:
diff --git a/builds/amiga/smakefile b/builds/amiga/smakefile
deleted file mode 100644
index 08e0a3892..000000000
--- a/builds/amiga/smakefile
+++ /dev/null
@@ -1,303 +0,0 @@
-#
-# Makefile for FreeType2 link library using Amiga SAS/C 6.58
-#
-
-
-# Copyright 2005-2017 by
-# Werner Lemberg and Detlef Würkner.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# to build from the builds/amiga directory call
-#
-# smake assign
-# smake
-#
-# Your programs source code should start with this
-# (uncomment the parts you do not need to keep the program small):
-# ---8<---
-#define FT_USE_AUTOFIT // autofitter
-#define FT_USE_RASTER // monochrome rasterizer
-#define FT_USE_SMOOTH // anti-aliasing rasterizer
-#define FT_USE_TT // truetype font driver
-#define FT_USE_T1 // type1 font driver
-#define FT_USE_T42 // type42 font driver
-#define FT_USE_T1CID // cid-keyed type1 font driver
-#define FT_USE_CFF // opentype font driver
-#define FT_USE_BDF // bdf bitmap font driver
-#define FT_USE_PCF // pcf bitmap font driver
-#define FT_USE_PFR // pfr font driver
-#define FT_USE_WINFNT // windows .fnt|.fon bitmap font driver
-#define FT_USE_OTV // opentype validator
-#define FT_USE_GXV // truetype gx validator
-#include "FT:src/base/ftinit.c"
-# ---8<---
-#
-# link your programs with ft2_680x0.lib and either ftsystem.o or ftsystempure.o
-# (and either ftdebug.o or ftdebugpure.o if you enabled FT_DEBUG_LEVEL_ERROR or
-# FT_DEBUG_LEVEL_TRACE in include/freetype/config/ftoption.h).
-
-OBJBASE = ftbase.o ftbbox.o ftbdf.o ftbitmap.o ftcid.o ftfntfmt.o ftfstype.o \
- ftgasp.o ftglyph.o ftgxval.o ftlcdfil.o ftmm.o ftotval.o \
- ftpatent.o ftpfr.o ftstroke.o ftsynth.o fttype1.o ftwinfnt.o
-
-OBJSYSTEM = ftsystem.o ftsystempure.o
-
-OBJDEBUG = ftdebug.o ftdebugpure.o
-
-OBJAFIT = autofit.o
-
-OBJGXV = gxvalid.o
-
-OBJOTV = otvalid.o
-
-OBJPS = psaux.o psnames.o pshinter.o
-
-OBJRASTER = raster.o smooth.o
-
-OBJSFNT = sfnt.o
-
-OBJCACHE = ftcache.o
-
-OBJFONTD = cff.o type1.o type42.o type1cid.o\
- truetype.o winfnt.o bdf.o pcf.o pfr.o
-
-CORE = FT:src/
-
-CPU = 68000
-#CPU = 68020
-#CPU = 68030
-#CPU = 68040
-#CPU = 68060
-
-OPTIMIZER = optinlocal
-
-SCFLAGS = optimize opttime optsched strmerge data=faronly idlen=50 cpu=$(CPU)\
- idir=include/ idir=$(CORE) idir=FT:include/ nostackcheck nochkabort\
- noicons ignore=79,85,110,306 parameters=both define=FT2_BUILD_LIBRARY
-
-LIB = ft2_$(CPU).lib
-
-# sample linker options
-OPTS = link lib=$(LIB),lib:sc.lib,lib:amiga.lib,lib:debug.lib\
- smallcode smalldata noicons utillib
-
-# sample program entry
-#myprog: myprog.c ftsystem.o $(LIB)
-# sc $< programname=$@ ftsystem.o $(SCFLAGS) $(OPTS)
-
-all: $(LIB) $(OBJSYSTEM) $(OBJDEBUG)
-
-assign:
- assign FT: //
-
-# uses separate object modules in lib to make for easier debugging
-# also, can make smaller programs if entire engine is not used
-ft2_$(CPU).lib: $(OBJBASE) $(OBJAFIT) $(OBJOTV) $(OBJPS) $(OBJRASTER) $(OBJSFNT) $(OBJCACHE) $(OBJFONTD) lzw.o gzip.o bzip2.o
- oml $@ r $(OBJBASE) $(OBJAFIT) $(OBJOTV) $(OBJPS) $(OBJRASTER) $(OBJSFNT) $(OBJCACHE) $(OBJFONTD) lzw.o gzip.o bzip2.o
-
-clean:
- -delete \#?.o
-
-realclean: clean
- -delete ft2$(CPU).lib
-
-#
-# freetype library base
-#
-ftbase.o: $(CORE)base/ftbase.c
- sc $(SCFLAGS) objname=$@ $<
-ftinit.o: $(CORE)base/ftinit.c
- sc $(SCFLAGS) objname=$@ $<
-ftsystem.o: $(CORE)base/ftsystem.c
- sc $(SCFLAGS) objname=$@ $<
-ftsystempure.o: src/base/ftsystem.c ## pure version for use in run-time library etc
- sc $(SCFLAGS) objname=$@ $<
-ftdebug.o: $(CORE)base/ftdebug.c
- sc $(SCFLAGS) objname=$@ $<
-ftdebugpure.o: src/base/ftdebug.c ## pure version for use in run-time library etc
- sc $(SCFLAGS) objname=$@ $<
-#
-# freetype library base extensions
-#
-ftbbox.o: $(CORE)base/ftbbox.c
- sc $(SCFLAGS) objname=$@ $<
-ftbdf.o: $(CORE)base/ftbdf.c
- sc $(SCFLAGS) objname=$@ $<
-ftbitmap.o: $(CORE)base/ftbitmap.c
- sc $(SCFLAGS) objname=$@ $<
-ftcid.o: $(CORE)base/ftcid.c
- sc $(SCFLAGS) objname=$@ $<
-ftfntfmt.o: $(CORE)base/ftfntfmt.c
- sc $(SCFLAGS) objname=$@ $<
-ftfstype.o: $(CORE)base/ftfstype.c
- sc $(SCFLAGS) objname=$@ $<
-ftgasp.o: $(CORE)base/ftgasp.c
- sc $(SCFLAGS) objname=$@ $<
-ftglyph.o: $(CORE)base/ftglyph.c
- sc $(SCFLAGS) objname=$@ $<
-ftgxval.o: $(CORE)base/ftgxval.c
- sc $(SCFLAGS) objname=$@ $<
-ftlcdfil.o: $(CORE)base/ftlcdfil.c
- sc $(SCFLAGS) objname=$@ $<
-ftmm.o: $(CORE)base/ftmm.c
- sc $(SCFLAGS) objname=$@ $<
-ftotval.o: $(CORE)base/ftotval.c
- sc $(SCFLAGS) objname=$@ $<
-ftpatent.o: $(CORE)base/ftpatent.c
- sc $(SCFLAGS) objname=$@ $<
-ftpfr.o: $(CORE)base/ftpfr.c
- sc $(SCFLAGS) objname=$@ $<
-ftstroke.o: $(CORE)base/ftstroke.c
- sc $(SCFLAGS) objname=$@ $<
-ftsynth.o: $(CORE)base/ftsynth.c
- sc $(SCFLAGS) objname=$@ $<
-fttype1.o: $(CORE)base/fttype1.c
- sc $(SCFLAGS) objname=$@ $<
-ftwinfnt.o: $(CORE)base/ftwinfnt.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library autofitter module
-#
-autofit.o: $(CORE)autofit/autofit.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library PS hinting module
-#
-pshinter.o: $(CORE)pshinter/pshinter.c
- sc $(SCFLAGS) objname=$@ $<
-#
-# freetype library PS support module
-#
-psaux.o: $(CORE)psaux/psaux.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library PS glyph names module
-#
-psnames.o: $(CORE)psnames/psnames.c
- sc $(SCFLAGS) code=far objname=$@ $<
-
-#
-# freetype library monochrome raster module
-#
-raster.o: $(CORE)raster/raster.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library anti-aliasing raster module
-#
-smooth.o: $(CORE)smooth/smooth.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library 'sfnt' module
-#
-sfnt.o: $(CORE)sfnt/sfnt.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library glyph and image caching system (still experimental)
-#
-ftcache.o: $(CORE)cache/ftcache.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library OpenType font driver
-#
-cff.o: $(CORE)cff/cff.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library TrueType font driver
-#
-truetype.o: $(CORE)truetype/truetype.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library Type1 font driver
-#
-type1.o: $(CORE)type1/type1.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# FreeType2 library Type42 font driver
-#
-type42.o: $(CORE)type42/type42.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library CID-keyed Type1 font driver
-#
-type1cid.o: $(CORE)cid/type1cid.c
- sc $(SCFLAGS) objname=$@ $<
-#
-# freetype library CID-keyed Type1 font driver extensions
-#
-#cidafm.o: $(CORE)cid/cidafm.c
-# sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library BDF bitmap font driver
-#
-bdf.o: $(CORE)bdf/bdf.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library PCF bitmap font driver
-#
-pcf.o: $(CORE)pcf/pcf.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library gzip support for compressed PCF bitmap fonts
-#
-gzip.o: $(CORE)gzip/ftgzip.c
- sc $(SCFLAGS) define FAR objname=$@ $<
-
-#
-# freetype library bzip2 support for compressed PCF bitmap fonts
-#
-bzip2.o: $(CORE)bzip2/ftbzip2.c
- sc $(SCFLAGS) define FAR objname=$@ $<
-
-#
-# freetype library compress support for compressed PCF bitmap fonts
-#
-lzw.o: $(CORE)lzw/ftlzw.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library PFR font driver
-#
-pfr.o: $(CORE)pfr/pfr.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library Windows FNT/FON bitmap font driver
-#
-winfnt.o: $(CORE)winfonts/winfnt.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library TrueTypeGX validator
-#
-gxvalid.o: $(CORE)gxvalid/gxvalid.c
- sc $(SCFLAGS) objname=$@ $<
-
-#
-# freetype library OpenType validator
-#
-otvalid.o: $(CORE)otvalid/otvalid.c
- sc $(SCFLAGS) objname=$@ $<
-
-#Local Variables:
-#coding: latin-1
-#End:
diff --git a/builds/amiga/src/base/ftdebug.c b/builds/amiga/src/base/ftdebug.c
deleted file mode 100644
index 1a897cf2d..000000000
--- a/builds/amiga/src/base/ftdebug.c
+++ /dev/null
@@ -1,297 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftdebug.c */
-/* */
-/* Debugging and logging component for amiga (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, Werner Lemberg and Detlef Würkner. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This component contains various macros and functions used to ease the */
- /* debugging of the FreeType engine. Its main purpose is in assertion */
- /* checking, tracing, and error detection. */
- /* */
- /* There are now three debugging modes: */
- /* */
- /* - trace mode */
- /* */
- /* Error and trace messages are sent to the log file (which can be the */
- /* standard error output). */
- /* */
- /* - error mode */
- /* */
- /* Only error messages are generated. */
- /* */
- /* - release mode: */
- /* */
- /* No error message is sent or generated. The code is free from any */
- /* debugging parts. */
- /* */
- /*************************************************************************/
-
-
- /*
- * Based on the default ftdebug.c,
- * replaced vprintf() with KVPrintF(),
- * commented out exit(),
- * replaced getenv() with GetVar().
- */
-
-#include <exec/types.h>
-#include <utility/tagitem.h>
-#include <dos/exall.h>
-#include <dos/var.h>
-#define __NOLIBBASE__
-#define __NOLOBALIFACE__
-#define __USE_INLINE__
-#include <proto/dos.h>
-#include <clib/debug_protos.h>
-
-#ifndef __amigaos4__
- extern struct Library *DOSBase;
-#else
- extern struct DOSIFace *IDOS;
-#endif
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_DEBUG_H
-
-
-#if defined( FT_DEBUG_LEVEL_ERROR )
-
- /* documentation is in ftdebug.h */
-
- FT_BASE_DEF( void )
- FT_Message( const char* fmt,
- ... )
- {
- va_list ap;
-
-
- va_start( ap, fmt );
- KVPrintF( fmt, ap );
- va_end( ap );
- }
-
-
- /* documentation is in ftdebug.h */
-
- FT_BASE_DEF( void )
- FT_Panic( const char* fmt,
- ... )
- {
- va_list ap;
-
-
- va_start( ap, fmt );
- KVPrintF( fmt, ap );
- va_end( ap );
-
-/* exit( EXIT_FAILURE ); */
- }
-
-
- /* documentation is in ftdebug.h */
-
- FT_BASE_DEF( int )
- FT_Throw( FT_Error error,
- int line,
- const char* file )
- {
- FT_UNUSED( error );
- FT_UNUSED( line );
- FT_UNUSED( file );
-
- return 0;
- }
-
-#endif /* FT_DEBUG_LEVEL_ERROR */
-
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
- /* array of trace levels, initialized to 0 */
- int ft_trace_levels[trace_count];
-
-
- /* define array of trace toggle names */
-#define FT_TRACE_DEF( x ) #x ,
-
- static const char* ft_trace_toggles[trace_count + 1] =
- {
-#include FT_INTERNAL_TRACE_H
- NULL
- };
-
-#undef FT_TRACE_DEF
-
-
- /* documentation is in ftdebug.h */
-
- FT_BASE_DEF( FT_Int )
- FT_Trace_Get_Count( void )
- {
- return trace_count;
- }
-
-
- /* documentation is in ftdebug.h */
-
- FT_BASE_DEF( const char * )
- FT_Trace_Get_Name( FT_Int idx )
- {
- int max = FT_Trace_Get_Count();
-
-
- if ( idx < max )
- return ft_trace_toggles[idx];
- else
- return NULL;
- }
-
-
- /*************************************************************************/
- /* */
- /* Initialize the tracing sub-system. This is done by retrieving the */
- /* value of the `FT2_DEBUG' environment variable. It must be a list of */
- /* toggles, separated by spaces, `;', or `,'. Example: */
- /* */
- /* export FT2_DEBUG="any:3 memory:7 stream:5" */
- /* */
- /* This requests that all levels be set to 3, except the trace level for */
- /* the memory and stream components which are set to 7 and 5, */
- /* respectively. */
- /* */
- /* See the file `include/freetype/internal/fttrace.h' for details of the */
- /* available toggle names. */
- /* */
- /* The level must be between 0 and 7; 0 means quiet (except for serious */
- /* runtime errors), and 7 means _very_ verbose. */
- /* */
- FT_BASE_DEF( void )
- ft_debug_init( void )
- {
-/* const char* ft2_debug = getenv( "FT2_DEBUG" ); */
- char buf[256];
- const char* ft2_debug = &buf[0];
-
-
-/* if ( ft2_debug ) */
- if ( GetVar( "FT2_DEBUG", (STRPTR)ft2_debug, 256, LV_VAR ) > 0 )
- {
- const char* p = ft2_debug;
- const char* q;
-
-
- for ( ; *p; p++ )
- {
- /* skip leading whitespace and separators */
- if ( *p == ' ' || *p == '\t' || *p == ',' || *p == ';' || *p == '=' )
- continue;
-
- /* read toggle name, followed by ':' */
- q = p;
- while ( *p && *p != ':' )
- p++;
-
- if ( !*p )
- break;
-
- if ( *p == ':' && p > q )
- {
- FT_Int n, i, len = (FT_Int)( p - q );
- FT_Int level = -1, found = -1;
-
-
- for ( n = 0; n < trace_count; n++ )
- {
- const char* toggle = ft_trace_toggles[n];
-
-
- for ( i = 0; i < len; i++ )
- {
- if ( toggle[i] != q[i] )
- break;
- }
-
- if ( i == len && toggle[i] == 0 )
- {
- found = n;
- break;
- }
- }
-
- /* read level */
- p++;
- if ( *p )
- {
- level = *p - '0';
- if ( level < 0 || level > 7 )
- level = -1;
- }
-
- if ( found >= 0 && level >= 0 )
- {
- if ( found == trace_any )
- {
- /* special case for `any' */
- for ( n = 0; n < trace_count; n++ )
- ft_trace_levels[n] = level;
- }
- else
- ft_trace_levels[found] = level;
- }
- }
- }
- }
- }
-
-
-#else /* !FT_DEBUG_LEVEL_TRACE */
-
-
- FT_BASE_DEF( void )
- ft_debug_init( void )
- {
- /* nothing */
- }
-
-
- FT_BASE_DEF( FT_Int )
- FT_Trace_Get_Count( void )
- {
- return 0;
- }
-
-
- FT_BASE_DEF( const char * )
- FT_Trace_Get_Name( FT_Int idx )
- {
- FT_UNUSED( idx );
-
- return NULL;
- }
-
-
-#endif /* !FT_DEBUG_LEVEL_TRACE */
-
-/*
-Local Variables:
-coding: latin-1
-End:
-*/
-/* END */
diff --git a/builds/amiga/src/base/ftsystem.c b/builds/amiga/src/base/ftsystem.c
deleted file mode 100644
index c3960d96a..000000000
--- a/builds/amiga/src/base/ftsystem.c
+++ /dev/null
@@ -1,530 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsystem.c */
-/* */
-/* Amiga-specific FreeType low-level system interface (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, Werner Lemberg and Detlef Würkner. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* This file contains the Amiga interface used by FreeType to access */
- /* low-level, i.e. memory management, i/o access as well as thread */
- /* synchronisation. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Maintained by Detlef Würkner <TetiSoft@apg.lahn.de> */
- /* */
- /* Based on the original ftsystem.c, */
- /* modified to avoid fopen(), fclose(), fread(), fseek(), ftell(), */
- /* malloc(), realloc(), and free(). */
- /* */
- /* Those C library functions are often not thread-safe or cant be */
- /* used in a shared Amiga library. If that's not a problem for you, */
- /* you can of course use the default ftsystem.c with C library calls */
- /* instead. */
- /* */
- /* This implementation needs exec V39+ because it uses AllocPooled() etc */
- /* */
- /*************************************************************************/
-
-#define __NOLIBBASE__
-#define __NOGLOBALIFACE__
-#define __USE_INLINE__
-#include <proto/exec.h>
-#include <dos/stdio.h>
-#include <proto/dos.h>
-#ifdef __amigaos4__
-extern struct ExecIFace *IExec;
-extern struct DOSIFace *IDOS;
-#else
-extern struct Library *SysBase;
-extern struct Library *DOSBase;
-#endif
-
-#define IOBUF_SIZE 512
-
-/* structure that helps us to avoid
- * useless calls of Seek() and Read()
- */
-struct SysFile
-{
- BPTR file;
- ULONG iobuf_start;
- ULONG iobuf_end;
- UBYTE iobuf[IOBUF_SIZE];
-};
-
-#ifndef __amigaos4__
-/* C implementation of AllocVecPooled (see autodoc exec/AllocPooled) */
-APTR
-Alloc_VecPooled( APTR poolHeader,
- ULONG memSize )
-{
- ULONG newSize = memSize + sizeof ( ULONG );
- ULONG *mem = AllocPooled( poolHeader, newSize );
-
- if ( !mem )
- return NULL;
- *mem = newSize;
- return mem + 1;
-}
-
-/* C implementation of FreeVecPooled (see autodoc exec/AllocPooled) */
-void
-Free_VecPooled( APTR poolHeader,
- APTR memory )
-{
- ULONG *realmem = (ULONG *)memory - 1;
-
- FreePooled( poolHeader, realmem, *realmem );
-}
-#endif
-
-#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_SYSTEM_H
-#include FT_ERRORS_H
-#include FT_TYPES_H
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
- /*************************************************************************/
- /* */
- /* MEMORY MANAGEMENT INTERFACE */
- /* */
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* It is not necessary to do any error checking for the */
- /* allocation-related functions. This is done by the higher level */
- /* routines like ft_mem_alloc() or ft_mem_realloc(). */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_alloc */
- /* */
- /* <Description> */
- /* The memory allocation function. */
- /* */
- /* <Input> */
- /* memory :: A pointer to the memory object. */
- /* */
- /* size :: The requested size in bytes. */
- /* */
- /* <Return> */
- /* The address of newly allocated block. */
- /* */
- FT_CALLBACK_DEF( void* )
- ft_alloc( FT_Memory memory,
- long size )
- {
-#ifdef __amigaos4__
- return AllocVecPooled( memory->user, size );
-#else
- return Alloc_VecPooled( memory->user, size );
-#endif
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_realloc */
- /* */
- /* <Description> */
- /* The memory reallocation function. */
- /* */
- /* <Input> */
- /* memory :: A pointer to the memory object. */
- /* */
- /* cur_size :: The current size of the allocated memory block. */
- /* */
- /* new_size :: The newly requested size in bytes. */
- /* */
- /* block :: The current address of the block in memory. */
- /* */
- /* <Return> */
- /* The address of the reallocated memory block. */
- /* */
- FT_CALLBACK_DEF( void* )
- ft_realloc( FT_Memory memory,
- long cur_size,
- long new_size,
- void* block )
- {
- void* new_block;
-
-#ifdef __amigaos4__
- new_block = AllocVecPooled ( memory->user, new_size );
-#else
- new_block = Alloc_VecPooled ( memory->user, new_size );
-#endif
- if ( new_block != NULL )
- {
- CopyMem ( block, new_block,
- ( new_size > cur_size ) ? cur_size : new_size );
-#ifdef __amigaos4__
- FreeVecPooled ( memory->user, block );
-#else
- Free_VecPooled ( memory->user, block );
-#endif
- }
- return new_block;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_free */
- /* */
- /* <Description> */
- /* The memory release function. */
- /* */
- /* <Input> */
- /* memory :: A pointer to the memory object. */
- /* */
- /* block :: The address of block in memory to be freed. */
- /* */
- FT_CALLBACK_DEF( void )
- ft_free( FT_Memory memory,
- void* block )
- {
-#ifdef __amigaos4__
- FreeVecPooled( memory->user, block );
-#else
- Free_VecPooled( memory->user, block );
-#endif
- }
-
-
- /*************************************************************************/
- /* */
- /* RESOURCE MANAGEMENT INTERFACE */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_io
-
- /* We use the macro STREAM_FILE for convenience to extract the */
- /* system-specific stream handle from a given FreeType stream object */
-#define STREAM_FILE( stream ) ( (struct SysFile *)stream->descriptor.pointer )
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_amiga_stream_close */
- /* */
- /* <Description> */
- /* The function to close a stream. */
- /* */
- /* <Input> */
- /* stream :: A pointer to the stream object. */
- /* */
- FT_CALLBACK_DEF( void )
- ft_amiga_stream_close( FT_Stream stream )
- {
- struct SysFile* sysfile;
-
- sysfile = STREAM_FILE( stream );
- Close ( sysfile->file );
- FreeMem ( sysfile, sizeof ( struct SysFile ));
-
- stream->descriptor.pointer = NULL;
- stream->size = 0;
- stream->base = 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_amiga_stream_io */
- /* */
- /* <Description> */
- /* The function to open a stream. */
- /* */
- /* <Input> */
- /* stream :: A pointer to the stream object. */
- /* */
- /* offset :: The position in the data stream to start reading. */
- /* */
- /* buffer :: The address of buffer to store the read data. */
- /* */
- /* count :: The number of bytes to read from the stream. */
- /* */
- /* <Return> */
- /* The number of bytes actually read. */
- /* */
- FT_CALLBACK_DEF( unsigned long )
- ft_amiga_stream_io( FT_Stream stream,
- unsigned long offset,
- unsigned char* buffer,
- unsigned long count )
- {
- struct SysFile* sysfile;
- unsigned long read_bytes;
-
- if ( count != 0 )
- {
- sysfile = STREAM_FILE( stream );
-
- /* handle the seek */
- if ( (offset < sysfile->iobuf_start) || (offset + count > sysfile->iobuf_end) )
- {
- /* requested offset implies we need a buffer refill */
- if ( !sysfile->iobuf_end || offset != sysfile->iobuf_end )
- {
- /* a physical seek is necessary */
- Seek( sysfile->file, offset, OFFSET_BEGINNING );
- }
- sysfile->iobuf_start = offset;
- sysfile->iobuf_end = 0; /* trigger a buffer refill */
- }
-
- /* handle the read */
- if ( offset + count <= sysfile->iobuf_end )
- {
- /* we have buffer and requested bytes are all inside our buffer */
- CopyMem( &sysfile->iobuf[offset - sysfile->iobuf_start], buffer, count );
- read_bytes = count;
- }
- else
- {
- /* (re)fill buffer */
- if ( count <= IOBUF_SIZE )
- {
- /* requested bytes is a subset of the buffer */
- read_bytes = Read( sysfile->file, sysfile->iobuf, IOBUF_SIZE );
- if ( read_bytes == -1UL )
- {
- /* error */
- read_bytes = 0;
- }
- else
- {
- sysfile->iobuf_end = offset + read_bytes;
- CopyMem( sysfile->iobuf, buffer, count );
- if ( read_bytes > count )
- {
- read_bytes = count;
- }
- }
- }
- else
- {
- /* we actually need more than our buffer can hold, so we decide
- ** to do a single big read, and then copy the last IOBUF_SIZE
- ** bytes of that to our internal buffer for later use */
- read_bytes = Read( sysfile->file, buffer, count );
- if ( read_bytes == -1UL )
- {
- /* error */
- read_bytes = 0;
- }
- else
- {
- ULONG bufsize;
-
- bufsize = ( read_bytes > IOBUF_SIZE ) ? IOBUF_SIZE : read_bytes;
- sysfile->iobuf_end = offset + read_bytes;
- sysfile->iobuf_start = sysfile->iobuf_end - bufsize;
- CopyMem( &buffer[read_bytes - bufsize] , sysfile->iobuf, bufsize );
- }
- }
- }
- }
- else
- {
- read_bytes = 0;
- }
-
- return read_bytes;
- }
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( FT_Error )
- FT_Stream_Open( FT_Stream stream,
- const char* filepathname )
- {
- struct FileInfoBlock* fib;
- struct SysFile* sysfile;
-
-
- if ( !stream )
- return FT_THROW( Invalid_Stream_Handle );
-
-#ifdef __amigaos4__
- sysfile = AllocMem ( sizeof (struct SysFile ), MEMF_SHARED );
-#else
- sysfile = AllocMem ( sizeof (struct SysFile ), MEMF_PUBLIC );
-#endif
- if ( !sysfile )
- {
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " could not open `%s'\n", filepathname ));
-
- return FT_THROW( Cannot_Open_Resource );
- }
- sysfile->file = Open( (STRPTR)filepathname, MODE_OLDFILE );
- if ( !sysfile->file )
- {
- FreeMem ( sysfile, sizeof ( struct SysFile ));
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " could not open `%s'\n", filepathname ));
-
- return FT_THROW( Cannot_Open_Resource );
- }
-
- fib = AllocDosObject( DOS_FIB, NULL );
- if ( !fib )
- {
- Close ( sysfile->file );
- FreeMem ( sysfile, sizeof ( struct SysFile ));
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " could not open `%s'\n", filepathname ));
-
- return FT_THROW( Cannot_Open_Resource );
- }
- if ( !( ExamineFH( sysfile->file, fib ) ) )
- {
- FreeDosObject( DOS_FIB, fib );
- Close ( sysfile->file );
- FreeMem ( sysfile, sizeof ( struct SysFile ));
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " could not open `%s'\n", filepathname ));
-
- return FT_THROW( Cannot_Open_Resource );
- }
- stream->size = fib->fib_Size;
- FreeDosObject( DOS_FIB, fib );
-
- stream->descriptor.pointer = (void *)sysfile;
- stream->pathname.pointer = (char*)filepathname;
- sysfile->iobuf_start = 0;
- sysfile->iobuf_end = 0;
- stream->pos = 0;
-
- stream->read = ft_amiga_stream_io;
- stream->close = ft_amiga_stream_close;
-
- if ( !stream->size )
- {
- ft_amiga_stream_close( stream );
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " opened `%s' but zero-sized\n", filepathname ));
- return FT_THROW( Cannot_Open_Stream );
- }
-
- FT_TRACE1(( "FT_Stream_Open:" ));
- FT_TRACE1(( " opened `%s' (%ld bytes) successfully\n",
- filepathname, stream->size ));
-
- return FT_Err_Ok;
- }
-
-
-#ifdef FT_DEBUG_MEMORY
-
- extern FT_Int
- ft_mem_debug_init( FT_Memory memory );
-
- extern void
- ft_mem_debug_done( FT_Memory memory );
-
-#endif
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( FT_Memory )
- FT_New_Memory( void )
- {
- FT_Memory memory;
-
-
-#ifdef __amigaos4__
- memory = (FT_Memory)AllocVec( sizeof ( *memory ), MEMF_SHARED );
-#else
- memory = (FT_Memory)AllocVec( sizeof ( *memory ), MEMF_PUBLIC );
-#endif
- if ( memory )
- {
-#ifdef __amigaos4__
- memory->user = CreatePool( MEMF_SHARED, 16384, 16384 );
-#else
- memory->user = CreatePool( MEMF_PUBLIC, 16384, 16384 );
-#endif
- if ( memory->user == NULL )
- {
- FreeVec( memory );
- memory = NULL;
- }
- else
- {
- memory->alloc = ft_alloc;
- memory->realloc = ft_realloc;
- memory->free = ft_free;
-#ifdef FT_DEBUG_MEMORY
- ft_mem_debug_init( memory );
-#endif
- }
- }
-
- return memory;
- }
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( void )
- FT_Done_Memory( FT_Memory memory )
- {
-#ifdef FT_DEBUG_MEMORY
- ft_mem_debug_done( memory );
-#endif
-
- DeletePool( memory->user );
- FreeVec( memory );
- }
-
-/*
-Local Variables:
-coding: latin-1
-End:
-*/
-/* END */
diff --git a/builds/ansi/ansi-def.mk b/builds/ansi/ansi-def.mk
deleted file mode 100644
index d3c0f282a..000000000
--- a/builds/ansi/ansi-def.mk
+++ /dev/null
@@ -1,74 +0,0 @@
-#
-# FreeType 2 configuration rules for a `normal' ANSI system
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-DELETE := rm -f
-CAT := cat
-SEP := /
-BUILD_DIR := $(TOP_DIR)/builds/ansi
-PLATFORM := ansi
-
-
-# The directory where all library files are placed.
-#
-# By default, this is the same as $(OBJ_DIR); however, this can be changed
-# to suit particular needs.
-#
-LIB_DIR := $(OBJ_DIR)
-
-
-# The name of the final library file. Note that the DOS-specific Makefile
-# uses a shorter (8.3) name.
-#
-LIBRARY := lib$(PROJECT)
-
-
-# Path inclusion flag. Some compilers use a different flag than `-I' to
-# specify an additional include path. Examples are `/i=' or `-J'.
-#
-I := -I
-
-
-# C flag used to define a macro before the compilation of a given source
-# object. Usually it is `-D' like in `-DDEBUG'.
-#
-D := -D
-
-
-# The link flag used to specify a given library file on link. Note that
-# this is only used to compile the demo programs, not the library itself.
-#
-L := -l
-
-
-# Target flag.
-#
-T := -o$(space)
-
-
-# C flags
-#
-# These should concern: debug output, optimization & warnings.
-#
-# Use the ANSIFLAGS variable to define the compiler flags used to enfore
-# ANSI compliance.
-#
-CFLAGS ?= -c
-
-# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
-#
-ANSIFLAGS :=
-
-
-# EOF
diff --git a/builds/ansi/ansi.mk b/builds/ansi/ansi.mk
deleted file mode 100644
index b33e8cec5..000000000
--- a/builds/ansi/ansi.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# FreeType 2 configuration rules for a `normal' pseudo ANSI compiler/system
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-include $(TOP_DIR)/builds/ansi/ansi-def.mk
-include $(TOP_DIR)/builds/compiler/ansi-cc.mk
-include $(TOP_DIR)/builds/link_std.mk
-
-
-# EOF
diff --git a/builds/atari/ATARI.H b/builds/atari/ATARI.H
deleted file mode 100644
index 4ddd2eb2e..000000000
--- a/builds/atari/ATARI.H
+++ /dev/null
@@ -1,20 +0,0 @@
-#if defined( GXVALID_H_ )
-#pragma warn -aus /* too many unevaluated variables in gxvalid */
-#endif
-
-#ifndef ATARI_H
-#define ATARI_H
-
-#pragma warn -stu
-
-/* PureC doesn't like 32bit enumerations */
-
-#ifndef FT_IMAGE_TAG
-#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value
-#endif /* FT_IMAGE_TAG */
-
-#ifndef FT_ENC_TAG
-#define FT_ENC_TAG( value, a, b, c, d ) value
-#endif /* FT_ENC_TAG */
-
-#endif /* ATARI_H */
diff --git a/builds/atari/FNames.SIC b/builds/atari/FNames.SIC
deleted file mode 100644
index f3657179d..000000000
--- a/builds/atari/FNames.SIC
+++ /dev/null
@@ -1,37 +0,0 @@
-/* the following changes file names for PureC projects */
-
-if (argc > 0)
-{
- ordner = argv[0];
- if (basename(ordner) == "") /* ist Ordner */
- {
- ChangeFilenames(ordner);
- }
-}
-
-proc ChangeFilenames(folder)
-local i,entries,directory,file;
-{
- entries = filelist(directory,folder);
- for (i = 0; i < entries; ++i)
- {
- file = directory[i,0];
- if ((directory[i,3]&16) > 0) /* subdirectory */
- {
- ChangeFilenames(folder+file+"\\");
- }
- else
- {
- if ((stricmp(suffix(file),".h")==0)|(stricmp(suffix(file),".c")==0))
- ChangeFilename(folder,file);
- }
- }
-}
-
-proc ChangeFilename(path,datei)
-local newfile,err;
-{
- newfile=datei;
- newfile[0]=(newfile[0] | 32) ^ 32;
- err=files.rename("-q",path+datei,newfile);
-}
diff --git a/builds/atari/FREETYPE.PRJ b/builds/atari/FREETYPE.PRJ
deleted file mode 100644
index 4776a5bc6..000000000
--- a/builds/atari/FREETYPE.PRJ
+++ /dev/null
@@ -1,32 +0,0 @@
-;FreeType project file
-
-FREETYPE.LIB
-
-.C [-K -P -R -A]
-.L [-J -V]
-.S
-
-=
-
-..\..\src\base\ftsystem.c
-..\..\src\base\ftdebug.c
-
-..\..\src\base\ftinit.c
-..\..\src\base\ftglyph.c
-..\..\src\base\ftmm
-..\..\src\base\ftbbox
-
-..\..\src\base\ftbase.c
-..\..\src\autohint\autohint.c
-;..\..\src\cache\ftcache.c
-..\..\src\cff\cff.c
-..\..\src\cid\type1cid.c
-..\..\src\psaux\psaux.c
-..\..\src\pshinter\pshinter.c
-..\..\src\psnames\psnames.c
-..\..\src\raster\raster.c
-..\..\src\sfnt\sfnt.c
-..\..\src\smooth\smooth.c
-..\..\src\truetype\truetype.c
-..\..\src\type1\type1.c
-..\..\src\type42\type42.c
diff --git a/builds/atari/README.TXT b/builds/atari/README.TXT
deleted file mode 100644
index ffe65456d..000000000
--- a/builds/atari/README.TXT
+++ /dev/null
@@ -1,51 +0,0 @@
-Compiling FreeType 2 with PureC compiler
-========================================
-
-[See below for a German version.]
-
-To compile FreeType 2 as a library the following changes must be applied:
-
-- All *.c files must start with an uppercase letter.
- (In case GEMSCRIPT is available:
- Simply drag the whole FreeType 2 directory to the file `FNames.SIC'.)
-
-- You have to change the INCLUDE directory in PureC's compiler options
- to contain both the `INCLUDE' and `freetype2\include' directory.
- Example:
-
- INCLUDE;E:\freetype2\include
-
-- The file `freetype2/include/Ft2build.h' must be patched as follows to
- include ATARI.H:
-
- #ifndef FT2_BUILD_GENERIC_H_
- #define FT2_BUILD_GENERIC_H_
-
- #include "ATARI.H"
-
-
-
-Compilieren von FreeType 2 mit PureC
-====================================
-
-Um FreeType 2 als eine Bibliothek (library) zu compilieren, muss folgendes
-ge„ndert werden:
-
-- Alle *.c-files mssen mit einem GROSSBUCHSTABEN beginnen.
- (Falls GEMSCRIPT zur Verfgung steht:
- Den kompletten Ordner freetype2 auf die Datei `FNames.SIC' draggen.)
-
-- In den Compiler-Optionen von PureC muss das INCLUDE directory auf INCLUDE
- und freetype2\include verweisen. Z.B.:
-
- INCLUDE;E:\freetype2\include
-
-- In der Datei freetype2/include/Ft2build.h muss zu Beginn
- ein #include "ATARI.H" wie folgt eingefgt werden:
-
- #ifndef FT2_BUILD_GENERIC_H_
- #define FT2_BUILD_GENERIC_H_
-
- #include "ATARI.H"
-
---- end of README.TXT ---
diff --git a/builds/atari/deflinejoiner.awk b/builds/atari/deflinejoiner.awk
deleted file mode 100644
index 16d9e6dd9..000000000
--- a/builds/atari/deflinejoiner.awk
+++ /dev/null
@@ -1,181 +0,0 @@
-#!/usr/bin/env awk
-
-
-function shift( array, \
- junk, elm0, l )
-{
- elm0 = array[0]
- for ( l = 0; l < asorti( array, junk ) - 1; l++ )
- array[l] = array[l+1];
- delete array[l]
- return elm0
-}
-
-
-function init_cpp_src_line()
-{
- logical_line = ""
- delete break_pos
-}
-
-
-function shift_valid_bp( array, \
- junk, elm )
-{
- elm = -1
-
- if ( 0 < asorti( array, junk ) )
- do {
- elm = shift( array )
- } while ( 0 > elm );
-
- return elm
-}
-
-
-function check_cpp_src_line_break_pos( \
- i, junk )
-{
- printf( "break_pos:" )
- for ( i = 0; i < asorti( break_pos, junk ); i++ )
- printf( " %d", break_pos[i] );
- printf( "\n" )
-}
-
-
-function check_cpp_src_line()
-{
- printf( "logical_line[%s]\n", logical_line )
- check_cpp_src_line_break_pos()
-}
-
-
-function append_line( phys_line, \
- filt_line, bp_len )
-{
- filt_line = phys_line
- sub( /\\$/, " ", filt_line )
- logical_line = logical_line filt_line
- bp_len = asorti( break_pos, junk )
- break_pos[bp_len] = length( logical_line ) - 1
-}
-
-
-function print_line( \
- c0, c1, i, junk, part_str )
-{
- c0 = 0
-
- while( asorti( break_pos, junk ) > 1 )
- {
- if ( ( c1 = shift_valid_bp( break_pos ) ) < 1 )
- {
- part_str = substr( logical_line, c0 + 1 )
- printf( "%s\n", part_str )
- return
- }
-
- part_str = substr( logical_line, c0 + 1, c1 - c0 + 1 )
- gsub( / $/, "\\", part_str )
- printf( "%s\n", part_str )
- c0 = c1 + 1
- }
-
- part_str = substr( logical_line, c0 + 1 )
- printf( "%s\n", part_str )
-}
-
-
-function shrink_spaces( pos, \
- tail, removed_length, k )
-{
- tail = substr( logical_line, pos )
- sub( /^[ \t]+/, " ", tail )
- removed_length = length( logical_line ) - pos - length( tail ) + 1
- logical_line = substr( logical_line, 0, pos - 1 ) tail
-
-
- for ( k = 0; k < asorti( break_pos, junk ); k++ )
- if ( ( pos + removed_length ) <= break_pos[k] )
- break_pos[k] = break_pos[k] - removed_length;
- else if ( pos <= break_pos[k] )
- break_pos[k] = -1;
-
- return removed_length
-}
-
-
-function shrink_spaces_to_linebreak( pos, \
- junk, part_str, removed_length, i )
-{
- for ( i = 0; i < asorti( break_pos, junk ) && break_pos[i] < pos ; i++ )
- ;
-
- if ( break_pos[i] < 1 )
- return;
-
- part_str = substr( logical_line, pos, break_pos[i] - pos + 1 )
- sub( /^[ \t]+/, " ", part_str )
- removed_length = ( break_pos[i] - pos + 1 ) - length( part_str )
-
- tail = substr( logical_line, pos + removed_length )
- logical_line = substr( logical_line, 0, pos - 1 ) tail
-
- for ( ; i < asorti( break_pos, junk ); i++ )
- break_pos[i] -= removed_length;
-
- return removed_length
-}
-
-
-function delete_linebreaks_in_2nd_token( \
- tail, paren_depth, junk, i, j, k, l )
-{
- if ( logical_line ~ /^[ \t]*#[ \t]*define[ \t]+[0-9A-Za-z_]+\(/ )
- {
- tail = logical_line
- sub( /^[ \t]*#[ \t]*define[ \t]+[0-9A-Za-z_]+/, "", tail )
-
- paren_depth = 0
- l = 0
- i = length( logical_line ) - length( tail ) + 1 # seek to the 1st op paren
- j = i
- do {
- if ( substr( logical_line, j, 2 ) ~ /[ \t][ \t]/ )
- l = shrink_spaces( j );
- else if ( substr( logical_line, j, 1 ) == "(" )
- paren_depth += 1;
- else if ( substr( logical_line, j, 1 ) == ")" )
- paren_depth -= 1;
- j += 1
- } while ( j < length( logical_line ) && paren_depth != 0 )
-
- for ( k = 0; k < asorti( break_pos, junk ); k++ )
- if ( i <= break_pos[k] && break_pos[k] < j )
- break_pos[k] = -1;
-
- if ( l > 0 )
- shrink_spaces_to_linebreak( j );
- }
-}
-
-
-BEGIN{
- init_cpp_src_line()
-}
-{
- append_line( $0 )
- if ( $0 !~ /\\$/ )
- {
- delete_linebreaks_in_2nd_token()
- print_line()
- init_cpp_src_line()
- }
-}
-END{
- if ( 0 < length( logical_line ) )
- {
- delete_linebreaks_in_2nd_token()
- print_line()
- }
-}
diff --git a/builds/atari/gen-purec-patch.sh b/builds/atari/gen-purec-patch.sh
deleted file mode 100755
index 1ec050c11..000000000
--- a/builds/atari/gen-purec-patch.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/sh
-
-TOP_DIR=.
-OBJ_DIR=.
-
-for x in "$@"
-do
- case x"$x" in
- x--srcdir=* | x--topdir=* )
- TOP_DIR=`echo $x | sed 's/^--[a-z]*dir=//'`
- ;;
- x--builddir=* | x--objdir=* )
- OBJ_DIR=`echo $x | sed 's/^--[a-z]*dir=//'`
- ;;
- esac
-done
-
-mkdir -p ${OBJ_DIR}/builds/atari/tmp/orig
-
-( cd ${TOP_DIR} && find . -name '*.[CHch]' -type f | fgrep -v builds/atari/tmp | cpio -o ) | \
-( cd ${OBJ_DIR}/builds/atari/tmp/orig && cpio -idum )
-cp ${TOP_DIR}/builds/atari/deflinejoiner.awk ${OBJ_DIR}/builds/atari/tmp
-
-pushd ${OBJ_DIR}/builds/atari/tmp
-
- cp -pr orig purec
- for f in `cd orig && find . -type f`
- do
- echo filter $f
- env LANG=C awk -f deflinejoiner.awk < orig/$f > purec/$f
- done
-
- echo '#define FT2_BUILD_LIBRARY' > purec/include/ft2build.h
- echo '#include "ATARI.H"' >> purec/include/ft2build.h
- env LANG=C awk -f deflinejoiner.awk < orig/include/ft2build.h >> purec/include/ft2build.h
-
- env LANG=C diff -ur orig purec > ../purec.diff
-
-popd
-rm -rf ${OBJ_DIR}/builds/atari/tmp
diff --git a/builds/beos/beos-def.mk b/builds/beos/beos-def.mk
deleted file mode 100644
index fa6f236dd..000000000
--- a/builds/beos/beos-def.mk
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# FreeType 2 configuration rules for a BeOS system
-#
-# this is similar to the "ansi-def.mk" file, except for BUILD and PLATFORM
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-DELETE := rm -f
-CAT := cat
-SEP := /
-BUILD_DIR := $(TOP_DIR)/builds/beos
-PLATFORM := beos
-
-
-# The directory where all library files are placed.
-#
-# By default, this is the same as $(OBJ_DIR); however, this can be changed
-# to suit particular needs.
-#
-LIB_DIR := $(OBJ_DIR)
-
-
-# The name of the final library file. Note that the DOS-specific Makefile
-# uses a shorter (8.3) name.
-#
-LIBRARY := lib$(PROJECT)
-
-
-# Path inclusion flag. Some compilers use a different flag than `-I' to
-# specify an additional include path. Examples are `/i=' or `-J'.
-#
-I := -I
-
-
-# C flag used to define a macro before the compilation of a given source
-# object. Usually it is `-D' like in `-DDEBUG'.
-#
-D := -D
-
-
-# The link flag used to specify a given library file on link. Note that
-# this is only used to compile the demo programs, not the library itself.
-#
-L := -l
-
-
-# Target flag.
-#
-T := -o$(space)
-
-
-# C flags
-#
-# These should concern: debug output, optimization & warnings.
-#
-# Use the ANSIFLAGS variable to define the compiler flags used to enfore
-# ANSI compliance.
-#
-CFLAGS ?= -c
-
-# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
-#
-ANSIFLAGS :=
-
-
-# EOF
diff --git a/builds/beos/beos.mk b/builds/beos/beos.mk
deleted file mode 100644
index 181efe440..000000000
--- a/builds/beos/beos.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# FreeType 2 configuration rules for a BeOS system
-#
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-include $(TOP_DIR)/builds/beos/beos-def.mk
-include $(TOP_DIR)/builds/compiler/ansi-cc.mk
-include $(TOP_DIR)/builds/link_std.mk
-
-
-# EOF
diff --git a/builds/beos/detect.mk b/builds/beos/detect.mk
deleted file mode 100644
index 30f6d10d4..000000000
--- a/builds/beos/detect.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# FreeType 2 configuration file to detect an BeOS host platform.
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-.PHONY: setup
-
-
-ifeq ($(PLATFORM),ansi)
-
- ifdef BE_HOST_CPU
-
- PLATFORM := beos
-
- endif # test MACHTYPE beos
-endif
-
-ifeq ($(PLATFORM),beos)
-
- DELETE := rm -f
- CAT := cat
- SEP := /
- BUILD_DIR := $(TOP_DIR)/builds/beos
- CONFIG_FILE := beos.mk
-
- setup: std_setup
-
-endif # test PLATFORM beos
-
-
-# EOF
diff --git a/builds/cmake/FindHarfBuzz.cmake b/builds/cmake/FindHarfBuzz.cmake
deleted file mode 100644
index f394b82bf..000000000
--- a/builds/cmake/FindHarfBuzz.cmake
+++ /dev/null
@@ -1,72 +0,0 @@
-# Copyright (c) 2012, Intel Corporation
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright notice, this
-# list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-# * Neither the name of Intel Corporation nor the names of its contributors may
-# be used to endorse or promote products derived from this software without
-# specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# Try to find Harfbuzz include and library directories.
-#
-# After successful discovery, this will set for inclusion where needed:
-# HARFBUZZ_INCLUDE_DIRS - containg the HarfBuzz headers
-# HARFBUZZ_LIBRARIES - containg the HarfBuzz library
-
-include(FindPkgConfig)
-
-pkg_check_modules(PC_HARFBUZZ harfbuzz>=0.9.7)
-
-find_path(HARFBUZZ_INCLUDE_DIRS NAMES hb.h
- HINTS ${PC_HARFBUZZ_INCLUDE_DIRS} ${PC_HARFBUZZ_INCLUDEDIR}
-)
-
-find_library(HARFBUZZ_LIBRARIES NAMES harfbuzz
- HINTS ${PC_HARFBUZZ_LIBRARY_DIRS} ${PC_HARFBUZZ_LIBDIR}
-)
-
-# HarfBuzz 0.9.18 split ICU support into a separate harfbuzz-icu library.
-if ("${PC_HARFBUZZ_VERSION}" VERSION_GREATER "0.9.17")
- if (HarfBuzz_FIND_REQUIRED)
- set(_HARFBUZZ_REQUIRED REQUIRED)
- else ()
- set(_HARFBUZZ_REQUIRED "")
- endif ()
- pkg_check_modules(PC_HARFBUZZ_ICU harfbuzz-icu>=0.9.18 ${_HARFBUZZ_REQUIRED})
- find_library(HARFBUZZ_ICU_LIBRARIES NAMES harfbuzz-icu
- HINTS ${PC_HARFBUZZ_ICU_LIBRARY_DIRS} ${PC_HARFBUZZ_ICU_LIBDIR}
- )
- if (HARFBUZZ_ICU_LIBRARIES)
- list(APPEND HARFBUZZ_LIBRARIES "${HARFBUZZ_ICU_LIBRARIES}")
- endif ()
- set(_HARFBUZZ_EXTRA_REQUIRED_VAR "HARFBUZZ_ICU_LIBRARIES")
-else ()
- set(_HARFBUZZ_EXTRA_REQUIRED_VAR "")
-endif ()
-
-include(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(HarfBuzz DEFAULT_MSG HARFBUZZ_INCLUDE_DIRS
- HARFBUZZ_LIBRARIES ${_HARFBUZZ_EXTRA_REQUIRED_VAR})
-
-mark_as_advanced(
- HARFBUZZ_ICU_LIBRARIES
- HARFBUZZ_INCLUDE_DIRS
- HARFBUZZ_LIBRARIES
-)
diff --git a/builds/cmake/iOS.cmake b/builds/cmake/iOS.cmake
deleted file mode 100644
index 5717e6a7b..000000000
--- a/builds/cmake/iOS.cmake
+++ /dev/null
@@ -1,270 +0,0 @@
-# iOS.cmake
-#
-# Copyright 2014-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# Written by David Wimsey <david@wimsey.us>
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-#
-#
-# This file is derived from the files `Platform/Darwin.cmake' and
-# `Platform/UnixPaths.cmake', which are part of CMake 2.8.4. It has been
-# altered for iOS development.
-
-
-# Options
-# -------
-#
-# IOS_PLATFORM = OS | SIMULATOR
-#
-# This decides whether SDKS are selected from the `iPhoneOS.platform' or
-# `iPhoneSimulator.platform' folders.
-#
-# OS - the default, used to build for iPhone and iPad physical devices,
-# which have an ARM architecture.
-# SIMULATOR - used to build for the Simulator platforms, which have an
-# x86 architecture.
-#
-# CMAKE_IOS_DEVELOPER_ROOT = /path/to/platform/Developer folder
-#
-# By default, this location is automatically chosen based on the
-# IOS_PLATFORM value above. If you manually set this variable, it
-# overrides the default location and forces the use of a particular
-# Developer Platform.
-#
-# CMAKE_IOS_SDK_ROOT = /path/to/platform/Developer/SDKs/SDK folder
-#
-# By default, this location is automatically chosen based on the
-# CMAKE_IOS_DEVELOPER_ROOT value. In this case it is always the most
-# up-to-date SDK found in the CMAKE_IOS_DEVELOPER_ROOT path. If you
-# manually set this variable, it forces the use of a specific SDK
-# version.
-#
-#
-# Macros
-# ------
-#
-# set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE)
-#
-# A convenience macro for setting Xcode specific properties on targets.
-#
-# Example:
-#
-# set_xcode_property(myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1")
-#
-# find_host_package (PROGRAM ARGS)
-#
-# A macro to find executable programs on the host system, not within the
-# iOS environment. Thanks to the `android-cmake' project for providing
-# the command.
-
-
-# standard settings
-set(CMAKE_SYSTEM_NAME Darwin)
-set(CMAKE_SYSTEM_VERSION 1)
-set(UNIX True)
-set(APPLE True)
-set(IOS True)
-
-# required as of cmake 2.8.10
-set(CMAKE_OSX_DEPLOYMENT_TARGET ""
- CACHE STRING "Force unset of the deployment target for iOS" FORCE
-)
-
-# determine the cmake host system version so we know where to find the iOS
-# SDKs
-find_program(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin)
-if (CMAKE_UNAME)
- exec_program(uname ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION)
- string(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1"
- DARWIN_MAJOR_VERSION "${CMAKE_HOST_SYSTEM_VERSION}")
-endif (CMAKE_UNAME)
-
-# skip the platform compiler checks for cross compiling
-set(CMAKE_CXX_COMPILER_WORKS TRUE)
-set(CMAKE_C_COMPILER_WORKS TRUE)
-
-# all iOS/Darwin specific settings - some may be redundant
-set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
-set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
-set(CMAKE_SHARED_MODULE_PREFIX "lib")
-set(CMAKE_SHARED_MODULE_SUFFIX ".so")
-set(CMAKE_MODULE_EXISTS 1)
-set(CMAKE_DL_LIBS "")
-
-set(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG
- "-compatibility_version ")
-set(CMAKE_C_OSX_CURRENT_VERSION_FLAG
- "-current_version ")
-set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG
- "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
-set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG
- "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
-
-# hidden visibility is required for cxx on iOS
-set(CMAKE_C_FLAGS_INIT "")
-set(CMAKE_CXX_FLAGS_INIT
- "-headerpad_max_install_names -fvisibility=hidden -fvisibility-inlines-hidden")
-
-set(CMAKE_C_LINK_FLAGS
- "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
-set(CMAKE_CXX_LINK_FLAGS
- "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
-
-set(CMAKE_PLATFORM_HAS_INSTALLNAME 1)
-set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS
- "-dynamiclib -headerpad_max_install_names")
-set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS
- "-bundle -headerpad_max_install_names")
-set(CMAKE_SHARED_MODULE_LOADER_C_FLAG
- "-Wl,-bundle_loader,")
-set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG
- "-Wl,-bundle_loader,")
-set(CMAKE_FIND_LIBRARY_SUFFIXES
- ".dylib" ".so" ".a")
-
-# hack: If a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old
-# build tree (where `install_name_tool' was hardcoded), and where
-# CMAKE_INSTALL_NAME_TOOL isn't in the cache and still cmake didn't
-# fail in `CMakeFindBinUtils.cmake' (because it isn't rerun), hardcode
-# CMAKE_INSTALL_NAME_TOOL here to `install_name_tool' so it behaves as
-# it did before.
-if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
- find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool)
-endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
-
-# set up iOS platform unless specified manually with IOS_PLATFORM
-if (NOT DEFINED IOS_PLATFORM)
- set(IOS_PLATFORM "OS")
-endif (NOT DEFINED IOS_PLATFORM)
-
-set(IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform")
-
-# check the platform selection and setup for developer root
-if (${IOS_PLATFORM} STREQUAL "OS")
- set(IOS_PLATFORM_LOCATION "iPhoneOS.platform")
-
- # this causes the installers to properly locate the output libraries
- set(CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos")
-
-elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
- set(IOS_PLATFORM_LOCATION "iPhoneSimulator.platform")
-
- # this causes the installers to properly locate the output libraries
- set(CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator")
-
-else (${IOS_PLATFORM} STREQUAL "OS")
- message(FATAL_ERROR
- "Unsupported IOS_PLATFORM value selected. Please choose OS or SIMULATOR.")
-
-endif (${IOS_PLATFORM} STREQUAL "OS")
-
-# set up iOS developer location unless specified manually with
-# CMAKE_IOS_DEVELOPER_ROOT --
-# note that Xcode 4.3 changed the installation location; choose the most
-# recent one available
-set(XCODE_POST_43_ROOT
- "/Applications/Xcode.app/Contents/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
-set(XCODE_PRE_43_ROOT
- "/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
-
-if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
- if (EXISTS ${XCODE_POST_43_ROOT})
- set(CMAKE_IOS_DEVELOPER_ROOT ${XCODE_POST_43_ROOT})
- elseif (EXISTS ${XCODE_PRE_43_ROOT})
- set(CMAKE_IOS_DEVELOPER_ROOT ${XCODE_PRE_43_ROOT})
- endif (EXISTS ${XCODE_POST_43_ROOT})
-endif (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
-
-set(CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT}
- CACHE PATH "Location of iOS Platform"
-)
-
-# find and use the most recent iOS SDK unless specified manually with
-# CMAKE_IOS_SDK_ROOT
-if (NOT DEFINED CMAKE_IOS_SDK_ROOT)
- file(GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*")
- if (_CMAKE_IOS_SDKS)
- list(SORT _CMAKE_IOS_SDKS)
- list(REVERSE _CMAKE_IOS_SDKS)
- list(GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT)
- else (_CMAKE_IOS_SDKS)
- message(FATAL_ERROR
- "No iOS SDK's found in default search path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.")
- endif (_CMAKE_IOS_SDKS)
-
- message(STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}")
-endif (NOT DEFINED CMAKE_IOS_SDK_ROOT)
-
-set(CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT}
- CACHE PATH "Location of the selected iOS SDK"
-)
-
-# set the sysroot default to the most recent SDK
-set(CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT}
- CACHE PATH "Sysroot used for iOS support"
-)
-
-# set the architecture for iOS --
-# note that currently both ARCHS_STANDARD_32_BIT and
-# ARCHS_UNIVERSAL_IPHONE_OS set armv7 only, so set both manually
-if (${IOS_PLATFORM} STREQUAL "OS")
- set(IOS_ARCH $(ARCHS_STANDARD_32_64_BIT))
-else (${IOS_PLATFORM} STREQUAL "OS")
- set(IOS_ARCH i386)
-endif (${IOS_PLATFORM} STREQUAL "OS")
-
-set(CMAKE_OSX_ARCHITECTURES ${IOS_ARCH}
- CACHE string "Build architecture for iOS"
-)
-
-# set the find root to the iOS developer roots and to user defined paths
-set(CMAKE_FIND_ROOT_PATH
- ${CMAKE_IOS_DEVELOPER_ROOT}
- ${CMAKE_IOS_SDK_ROOT}
- ${CMAKE_PREFIX_PATH}
- CACHE string "iOS find search path root"
-)
-
-# default to searching for frameworks first
-set(CMAKE_FIND_FRAMEWORK FIRST)
-
-# set up the default search directories for frameworks
-set(CMAKE_SYSTEM_FRAMEWORK_PATH
- ${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks
- ${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks
- ${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks
-)
-
-# only search the iOS SDKs, not the remainder of the host filesystem
-set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-
-# this little macro lets you set any Xcode specific property
-macro(set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
- set_property(TARGET ${TARGET}
- PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
-endmacro(set_xcode_property)
-
-# this macro lets you find executable programs on the host system
-macro(find_host_package)
- set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
- set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
- set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
- set(IOS FALSE)
-
- find_package(${ARGN})
-
- set(IOS TRUE)
- set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
- set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
- set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-endmacro(find_host_package)
-
-# eof
diff --git a/builds/cmake/testbuild.sh b/builds/cmake/testbuild.sh
deleted file mode 100755
index 34aded722..000000000
--- a/builds/cmake/testbuild.sh
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/bin/sh -e
-
-# Copyright 2015-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-# This script tests the CMake build. Simply run
-#
-# builds/cmake/testbuild.sh
-#
-# or
-#
-# BUILD_SHARED_LIBS=1 builds/cmake/testbuild.sh
-#
-# The script:
-#
-# - builds the main CMakeLists.txt
-# - builds and runs a small test app in a separate build tree so
-# the config-module is tested, too
-#
-# Options (environment variables):
-#
-# - The variable BUILD_SHARED_LIBS will be forwarded to the CMake project
-# that builds the library.
-#
-
-
-# prepare temporary dir
-
-cd `dirname $0`/../..
-ftdir=`pwd`
-tmpdir=/tmp/freetype-cmake-testbuild
-rm -rf $tmpdir
-mkdir -p $tmpdir
-
-
-# build and install freetype
-
-if test -n "$BUILD_SHARED_LIBS"; then
- bsl=-DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS
-else
- bsl=-UBUILD_SHARED_LIBS
-fi
-
-build_opts="-DWITH_ZLIB=0 \
- -DWITH_BZip2=0 \
- -DWITH_PNG=0 \
- -DWITH_HarfBuzz=0 \
- $bsl \
- -DCMAKE_INSTALL_PREFIX=$tmpdir/out"
-
-(set -x; cmake -H$ftdir \
- -B$tmpdir/ftb \
- -DCMAKE_BUILD_TYPE=Debug \
- $build_opts)
-(set -x; cmake --build $tmpdir/ftb \
- --config Debug \
- --target install)
-
-(set -x; cmake $tmpdir/ftb \
- -DCMAKE_BUILD_TYPE=Release)
-(set -x; cmake --build $tmpdir/ftb \
- --config Release \
- --target install \
- --clean-first)
-
-
-# create test project CMakeLists.txt
-
-cat >$tmpdir/CMakeLists.txt << END
-cmake_minimum_required(VERSION 2.6)
-project(freetype-cmake-testbuild)
-
-find_package(Freetype REQUIRED CONFIG)
-
-add_executable(freetype-cmake-test main.c)
-target_link_libraries(freetype-cmake-test freetype)
-
-enable_testing()
-add_test(freetype-cmake-test freetype-cmake-test)
-END
-
-
-# create test project main.c
-
-cat >$tmpdir/main.c << END
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-
-FT_Library library;
-
-
-int main(int argc,
- char*argv[])
-{
- FT_Error error;
- FT_Int major = 0;
- FT_Int minor = 0;
- FT_Int patch = 0;
-
- error = FT_Init_FreeType(&library);
- if (error)
- return EXIT_FAILURE;
-
- FT_Library_Version(library, &major, &minor, &patch);
- if (major != FREETYPE_MAJOR
- || minor != FREETYPE_MINOR
- || patch != FREETYPE_PATCH)
- return EXIT_FAILURE;
-
- printf("FT_Library_Version: %d.%d.%d\n", major, minor, patch);
-
- error = FT_Done_FreeType(library);
- if (error)
- return EXIT_FAILURE;
-
- return EXIT_SUCCESS;
-}
-END
-
-
-# build and test
-
-mkdir -p $tmpdir/tb
-cd $tmpdir/tb
-
-LD_LIBRARY_PATH=$tmpdir/out/lib:$LD_LIBRARY_PATH
-DYLD_LIBRARY_PATH=$tmpdir/out/lib:$DYLD_LIBRARY_PATH
-export LD_LIBRARY_PATH
-export DYLD_LIBRARY_PATH
-
-(set -x; cmake $tmpdir \
- -DCMAKE_BUILD_TYPE=Debug \
- -DCMAKE_PREFIX_PATH=$tmpdir/out)
-(set -x; cmake --build . \
- --config Debug)
-(set -x; ctest -V -C Debug)
-
-(set -x; cmake . \
- -DCMAKE_BUILD_TYPE=Release)
-(set -x; cmake --build . \
- --config Release \
- --clean-first)
-(set -x; ctest -V -C Release)
-
-rm -rf $tmpdir
-
-# EOF
diff --git a/builds/compiler/ansi-cc.mk b/builds/compiler/ansi-cc.mk
deleted file mode 100644
index d61964110..000000000
--- a/builds/compiler/ansi-cc.mk
+++ /dev/null
@@ -1,80 +0,0 @@
-#
-# FreeType 2 generic pseudo ANSI compiler
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# Compiler command line name
-#
-CC := cc
-COMPILER_SEP := $(SEP)
-
-
-# The object file extension (for standard and static libraries). This can be
-# .o, .tco, .obj, etc., depending on the platform.
-#
-O := o
-SO := o
-
-# The library file extension (for standard and static libraries). This can
-# be .a, .lib, etc., depending on the platform.
-#
-A := a
-SA := a
-
-
-# Path inclusion flag. Some compilers use a different flag than `-I' to
-# specify an additional include path. Examples are `/i=' or `-J'.
-#
-I := -I
-
-
-# C flag used to define a macro before the compilation of a given source
-# object. Usually it is `-D' like in `-DDEBUG'.
-#
-D := -D
-
-
-# The link flag used to specify a given library file on link. Note that
-# this is only used to compile the demo programs, not the library itself.
-#
-L := -l
-
-
-# Target flag.
-#
-T := -o$(space)
-
-
-# C flags
-#
-# These should concern: debug output, optimization & warnings.
-#
-# Use the ANSIFLAGS variable to define the compiler flags used to enfore
-# ANSI compliance.
-#
-CFLAGS ?= -c
-
-# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
-#
-# we assume the compiler is already strictly ANSI
-#
-ANSIFLAGS :=
-
-
-# Library linking
-#
-CLEAN_LIBRARY ?= $(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY))
-LINK_LIBRARY = $(AR) -r $@ $(subst /,$(COMPILER_SEP),$(OBJECTS_LIST))
-
-
-# EOF
diff --git a/builds/compiler/bcc-dev.mk b/builds/compiler/bcc-dev.mk
deleted file mode 100644
index 9b43fd1d9..000000000
--- a/builds/compiler/bcc-dev.mk
+++ /dev/null
@@ -1,86 +0,0 @@
-#
-# FreeType 2 Borland C++-specific with NO OPTIMIZATIONS + DEBUGGING
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# Compiler command line name
-#
-CC := bcc32
-COMPILER_SEP := $(SEP)
-
-
-# The object file extension (for standard and static libraries). This can be
-# .o, .tco, .obj, etc., depending on the platform.
-#
-O := obj
-SO := obj
-
-# The library file extension (for standard and static libraries). This can
-# be .a, .lib, etc., depending on the platform.
-#
-A := lib
-SA := lib
-
-
-# Path inclusion flag. Some compilers use a different flag than `-I' to
-# specify an additional include path. Examples are `/i=' or `-J'.
-#
-I := -I
-
-
-# C flag used to define a macro before the compilation of a given source
-# object. Usually it is `-D' like in `-DDEBUG'.
-#
-D := -D
-
-
-# The link flag used to specify a given library file on link. Note that
-# this is only used to compile the demo programs, not the library itself.
-#
-L :=
-
-
-# Target flag -- no trailing space.
-#
-T := -o
-TE := -e
-
-
-# C flags
-#
-# These should concern: debug output, optimization & warnings.
-#
-# Use the ANSIFLAGS variable to define the compiler flags used to enfore
-# ANSI compliance.
-#
-CFLAGS ?= -q -c -y -d -v -Od -w-par -w-ccc -w-rch -w-pro -w-aus
-
-# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
-#
-ANSIFLAGS := -A
-
-
-# Library linking
-#
-CLEAN_LIBRARY ?= $(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY))
-LINK_LIBRARY = tlib /u /P128 $(subst /,$(COMPILER_SEP),$@ $(OBJECTS_LIST:%=+%))
-
-
-# Borland C++ specific temporary files
-#
-CLEAN += \
- $(subst /,$(SEP),$(TOP_DIR)/apinames.$(O)) \
- $(subst /,$(SEP),$(OBJ_DIR)/apinames.tds)
-
-
-# EOF
diff --git a/builds/compiler/bcc.mk b/builds/compiler/bcc.mk
deleted file mode 100644
index 82e38294f..000000000
--- a/builds/compiler/bcc.mk
+++ /dev/null
@@ -1,86 +0,0 @@
-#
-# FreeType 2 Borland C++-specific rules
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# Compiler command line name
-#
-CC := bcc32
-COMPILER_SEP := $(SEP)
-
-
-# The object file extension (for standard and static libraries). This can be
-# .o, .tco, .obj, etc., depending on the platform.
-#
-O := obj
-SO := obj
-
-# The library file extension (for standard and static libraries). This can
-# be .a, .lib, etc., depending on the platform.
-#
-A := lib
-SA := lib
-
-
-# Path inclusion flag. Some compilers use a different flag than `-I' to
-# specify an additional include path. Examples are `/i=' or `-J'.
-#
-I := -I
-
-
-# C flag used to define a macro before the compilation of a given source
-# object. Usually it is `-D' like in `-DDEBUG'.
-#
-D := -D
-
-
-# The link flag used to specify a given library file on link. Note that
-# this is only used to compile the demo programs, not the library itself.
-#
-L :=
-
-
-# Target flag -- no trailing space.
-#
-T := -o
-TE := -e
-
-
-# C flags
-#
-# These should concern: debug output, optimization & warnings.
-#
-# Use the ANSIFLAGS variable to define the compiler flags used to enfore
-# ANSI compliance.
-#
-CFLAGS ?= -c -q -y -d -v -Od -w-par -w-ccc -w-rch -w-pro -w-aus
-
-# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
-#
-ANSIFLAGS := -A
-
-
-# Library linking
-#
-CLEAN_LIBRARY ?= $(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY))
-LINK_LIBRARY = tlib /u /P128 $(subst /,$(COMPILER_SEP),$@ $(OBJECTS_LIST:%=+%))
-
-
-# Borland C++ specific temporary files
-#
-CLEAN += \
- $(subst /,$(SEP),$(TOP_DIR)/apinames.$(O)) \
- $(subst /,$(SEP),$(OBJ_DIR)/apinames.tds)
-
-
-# EOF
diff --git a/builds/compiler/emx.mk b/builds/compiler/emx.mk
deleted file mode 100644
index a25e4bc1f..000000000
--- a/builds/compiler/emx.mk
+++ /dev/null
@@ -1,77 +0,0 @@
-#
-# FreeType 2 emx-specific definitions
-#
-
-
-# Copyright 2003-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# Compiler command line name
-#
-CC := set GCCOPT="-ansi -pedantic"; gcc
-COMPILER_SEP := /
-
-
-# The object file extension (for standard and static libraries). This can be
-# .o, .tco, .obj, etc., depending on the platform.
-#
-O := o
-SO := o
-
-# The library file extension (for standard and static libraries). This can
-# be .a, .lib, etc., depending on the platform.
-#
-A := a
-SA := a
-
-
-# Path inclusion flag. Some compilers use a different flag than `-I' to
-# specify an additional include path. Examples are `/i=' or `-J'.
-#
-I := -I
-
-
-# C flag used to define a macro before the compilation of a given source
-# object. Usually it is `-D' like in `-DDEBUG'.
-#
-D := -D
-
-
-# The link flag used to specify a given library file on link. Note that
-# this is only used to compile the demo programs, not the library itself.
-#
-L := -l
-
-
-# Target flag.
-#
-T := -o$(space)
-
-# C flags
-#
-# These should concern: debug output, optimization & warnings.
-#
-# Use the ANSIFLAGS variable to define the compiler flags used to enfore
-# ANSI compliance.
-#
-CFLAGS ?= -c -g -O6 -Wall
-
-# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
-#
-ANSIFLAGS :=
-
-
-# Library linking
-#
-CLEAN_LIBRARY ?= $(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY))
-LINK_LIBRARY = $(foreach m,$(OBJECTS_LIST),$(AR) -r $@ $(m);) echo > nul
-
-
-# EOF
diff --git a/builds/compiler/gcc-dev.mk b/builds/compiler/gcc-dev.mk
deleted file mode 100644
index 8994fa290..000000000
--- a/builds/compiler/gcc-dev.mk
+++ /dev/null
@@ -1,95 +0,0 @@
-#
-# FreeType 2 gcc-specific with NO OPTIMIZATIONS + DEBUGGING
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# Compiler command line name
-#
-CC := gcc
-COMPILER_SEP := /
-
-
-# The object file extension (for standard and static libraries). This can be
-# .o, .tco, .obj, etc., depending on the platform.
-#
-O := o
-SO := o
-
-# The library file extension (for standard and static libraries). This can
-# be .a, .lib, etc., depending on the platform.
-#
-A := a
-SA := a
-
-
-# Path inclusion flag. Some compilers use a different flag than `-I' to
-# specify an additional include path. Examples are `/i=' or `-J'.
-#
-I := -I
-
-
-# C flag used to define a macro before the compilation of a given source
-# object. Usually it is `-D' like in `-DDEBUG'.
-#
-D := -D
-
-
-# The link flag used to specify a given library file on link. Note that
-# this is only used to compile the demo programs, not the library itself.
-#
-L := -l
-
-
-# Target flag.
-#
-T := -o$(space)
-
-
-# C flags
-#
-# These should concern: debug output, optimization & warnings.
-#
-# Use the ANSIFLAGS variable to define the compiler flags used to enfore
-# ANSI compliance.
-#
-ifndef CFLAGS
- ifeq ($(findstring g++,$(CC)),)
- nested_externs := -Wnested-externs
- strict_prototypes := -Wstrict-prototypes
- endif
-
- CFLAGS := -c -g -O0 \
- -Wall \
- -W \
- -Wundef \
- -Wshadow \
- -Wpointer-arith \
- -Wwrite-strings \
- -Wredundant-decls \
- -Wno-long-long \
- $(nested_externs) \
- $(strict_prototypes)
-endif
-
-# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
-#
-ANSIFLAGS := -ansi -pedantic
-
-
-# Library linking
-#
-CLEAN_LIBRARY ?= $(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY))
-LINK_LIBRARY = $(AR) -r $@ $(OBJECTS_LIST)
-
-
-# EOF
diff --git a/builds/compiler/gcc.mk b/builds/compiler/gcc.mk
deleted file mode 100644
index 3465038c9..000000000
--- a/builds/compiler/gcc.mk
+++ /dev/null
@@ -1,77 +0,0 @@
-#
-# FreeType 2 gcc-specific definitions
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# Compiler command line name
-#
-CC := gcc
-COMPILER_SEP := /
-
-
-# The object file extension (for standard and static libraries). This can be
-# .o, .tco, .obj, etc., depending on the platform.
-#
-O := o
-SO := o
-
-# The library file extension (for standard and static libraries). This can
-# be .a, .lib, etc., depending on the platform.
-#
-A := a
-SA := a
-
-
-# Path inclusion flag. Some compilers use a different flag than `-I' to
-# specify an additional include path. Examples are `/i=' or `-J'.
-#
-I := -I
-
-
-# C flag used to define a macro before the compilation of a given source
-# object. Usually it is `-D' like in `-DDEBUG'.
-#
-D := -D
-
-
-# The link flag used to specify a given library file on link. Note that
-# this is only used to compile the demo programs, not the library itself.
-#
-L := -l
-
-
-# Target flag.
-#
-T := -o$(space)
-
-# C flags
-#
-# These should concern: debug output, optimization & warnings.
-#
-# Use the ANSIFLAGS variable to define the compiler flags used to enfore
-# ANSI compliance.
-#
-CFLAGS ?= -c -g -O3 -Wall
-
-# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
-#
-ANSIFLAGS := -ansi -pedantic
-
-
-# Library linking
-#
-CLEAN_LIBRARY ?= $(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY))
-LINK_LIBRARY = $(AR) -r $@ $(OBJECTS_LIST)
-
-
-# EOF
diff --git a/builds/compiler/intelc.mk b/builds/compiler/intelc.mk
deleted file mode 100644
index 287db441c..000000000
--- a/builds/compiler/intelc.mk
+++ /dev/null
@@ -1,85 +0,0 @@
-#
-# FreeType 2 Intel C/C++ definitions (VC++ compatibility mode)
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# compiler command line name
-#
-CC := icl
-COMPILER_SEP := $(SEP)
-
-
-# The object file extension (for standard and static libraries). This can be
-# .o, .tco, .obj, etc., depending on the platform.
-#
-O := obj
-SO := obj
-
-
-# The library file extension (for standard and static libraries). This can
-# be .a, .lib, etc., depending on the platform.
-#
-A := lib
-SA := lib
-
-
-# Path inclusion flag. Some compilers use a different flag than `-I' to
-# specify an additional include path. Examples are `/i=' or `-J'.
-#
-I := /I
-
-
-# C flag used to define a macro before the compilation of a given source
-# object. Usually it is `-D' like in `-DDEBUG'.
-#
-D := /D
-
-
-# The link flag used to specify a given library file on link. Note that
-# this is only used to compile the demo programs, not the library itself.
-#
-L := /Fl
-
-
-# Target flag.
-#
-T := /Fo
-TE := /Fe
-
-
-# C flags
-#
-# These should concern: debug output, optimization & warnings.
-#
-# Use the ANSIFLAGS variable to define the compiler flags used to enfore
-# ANSI compliance.
-#
-# Note that the Intel C/C++ compiler version 4.5 complains about
-# the use of FT_FIELD_OFFSET with "value must be arithmetic type"!
-# This really looks like a bug in the compiler because the macro
-# _does_ compute an arithmetic value, so we disable this warning
-# with "/Qwd32".
-#
-CFLAGS ?= /nologo /c /Ox /G5 /W3 /Qwd32
-
-# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
-#
-ANSIFLAGS := /Qansi_alias /Za
-
-# Library linking
-#
-#CLEAN_LIBRARY =
-LINK_LIBRARY = lib /nologo /out:$(subst /,$(COMPILER_SEP),$@ $(OBJECTS_LIST))
-
-
-# EOF
diff --git a/builds/compiler/unix-lcc.mk b/builds/compiler/unix-lcc.mk
deleted file mode 100644
index 560c61bf3..000000000
--- a/builds/compiler/unix-lcc.mk
+++ /dev/null
@@ -1,83 +0,0 @@
-#
-# FreeType 2 Unix LCC specific definitions
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# Command line name
-#
-CC := lcc
-COMPILER_SEP := $(SEP)
-
-
-# The object file extension (for standard and static libraries). This can be
-# .o, .tco, .obj, etc., depending on the platform.
-#
-O := o
-SO := o
-
-
-# The library file extension (for standard and static libraries). This can
-# be .a, .lib, etc., depending on the platform.
-#
-A := a
-SA := a
-
-
-# Path inclusion flag. Some compilers use a different flag than `-I' to
-# specify an additional include path. Examples are `/i=' or `-J'.
-#
-I := -I
-
-
-# C flag used to define a macro before the compilation of a given source
-# object. Usually it is `-D' like in `-DDEBUG'.
-#
-D := -D
-
-
-# The link flag used to specify a given library file on link. Note that
-# this is only used to compile the demo programs, not the library itself.
-#
-L := -l
-
-
-# Target flag.
-#
-T := -o$(space)
-
-
-# C flags
-#
-# These should concern: debug output, optimization & warnings.
-#
-# Use the ANSIFLAGS variable to define the compiler flags used to enfore
-# ANSI compliance.
-#
-CFLAGS ?= -c -g
-
-# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
-#
-# LCC is pure ANSI anyway!
-#
-# the "-A" flag simply increments verbosity about non ANSI code
-#
-ANSIFLAGS := -A
-
-
-# library linking
-#
-CLEAN_LIBRARY ?= $(DELETE) $(PROJECT_LIBRARY)
-LINK_LIBRARY = $(AR) -r $@ $(OBJECTS_LIST)
-
-
-# EOF
diff --git a/builds/compiler/visualage.mk b/builds/compiler/visualage.mk
deleted file mode 100644
index 2aa4fbe83..000000000
--- a/builds/compiler/visualage.mk
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# FreeType 2 Visual Age C++ specific definitions
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# command line compiler name
-#
-CC := icc
-COMPILER_SEP := $(SEP)
-
-
-# The object file extension (for standard and static libraries). This can be
-# .o, .tco, .obj, etc., depending on the platform.
-#
-O := obj
-SO := obj
-
-
-# The library file extension (for standard and static libraries). This can
-# be .a, .lib, etc., depending on the platform.
-#
-A := lib
-SA := lib
-
-
-# Path inclusion flag. Some compilers use a different flag than `-I' to
-# specify an additional include path. Examples are `/i=' or `-J'.
-#
-I := /I
-
-
-# C flag used to define a macro before the compilation of a given source
-# object. Usually it is `-D' like in `-DDEBUG'.
-#
-D := /D
-
-
-# The link flag used to specify a given library file on link. Note that
-# this is only used to compile the demo programs, not the library itself.
-#
-L := /Fl
-
-
-# Target flag.
-#
-T := /Fo
-
-
-# C flags
-#
-# These should concern: debug output, optimization & warnings.
-#
-CFLAGS ?= /Q- /Gd+ /O2 /G5 /W3 /C
-
-# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
-#
-ANSI_FLAGS := /Sa
-
-
-# Library linking
-#
-#CLEAN_LIBRARY :=
-LINK_LIBRARY = lib /nologo /out:$(subst /,$(COMPILER_SEP),$@ $(OBJECTS_LIST))
-
-
-# EOF
diff --git a/builds/compiler/visualc.mk b/builds/compiler/visualc.mk
deleted file mode 100644
index e86ecc5f6..000000000
--- a/builds/compiler/visualc.mk
+++ /dev/null
@@ -1,82 +0,0 @@
-#
-# FreeType 2 Visual C++ definitions
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# compiler command line name
-#
-CC := cl
-COMPILER_SEP := $(SEP)
-
-
-# The object file extension (for standard and static libraries). This can be
-# .o, .tco, .obj, etc., depending on the platform.
-#
-O := obj
-SO := obj
-
-
-# The library file extension (for standard and static libraries). This can
-# be .a, .lib, etc., depending on the platform.
-#
-A := lib
-SA := lib
-
-
-# Path inclusion flag. Some compilers use a different flag than `-I' to
-# specify an additional include path. Examples are `/i=' or `-J'.
-#
-I := /I
-
-
-# C flag used to define a macro before the compilation of a given source
-# object. Usually it is `-D' like in `-DDEBUG'.
-#
-D := /D
-
-
-# The link flag used to specify a given library file on link. Note that
-# this is only used to compile the demo programs, not the library itself.
-#
-L := /Fl
-
-
-# Target flag.
-#
-T := /Fo
-
-# Target executable flag
-#
-TE := /Fe
-
-# C flags
-#
-# These should concern: debug output, optimization & warnings.
-#
-# Use the ANSIFLAGS variable to define the compiler flags used to enfore
-# ANSI compliance.
-#
-CFLAGS ?= /nologo /c /Ox /W3 /WX
-
-# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
-#
-ANSIFLAGS := /Za /D_CRT_SECURE_NO_DEPRECATE
-
-
-# Library linking
-#
-#CLEAN_LIBRARY =
-LINK_LIBRARY = lib /nologo /out:$(subst /,$(COMPILER_SEP),$@ $(OBJECTS_LIST))
-
-
-# EOF
diff --git a/builds/compiler/watcom.mk b/builds/compiler/watcom.mk
deleted file mode 100644
index 62a481184..000000000
--- a/builds/compiler/watcom.mk
+++ /dev/null
@@ -1,81 +0,0 @@
-#
-# FreeType 2 Watcom-specific definitions
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# Compiler command line name
-#
-CC := wcc386
-COMPILER_SEP := $(SEP)
-
-
-# The object file extension (for standard and static libraries). This can be
-# .o, .tco, .obj, etc., depending on the platform.
-#
-O := obj
-SO := obj
-
-
-# The library file extension (for standard and static libraries). This can
-# be .a, .lib, etc., depending on the platform.
-#
-A := lib
-SA := lib
-
-
-# Path inclusion flag. Some compilers use a different flag than `-I' to
-# specify an additional include path. Examples are `/i=' or `-J'.
-#
-I := -I=
-
-
-# C flag used to define a macro before the compilation of a given source
-# object. Usually it is `-D' like in `-DDEBUG'.
-#
-D := -D
-
-
-# The link flag used to specify a given library file on link. Note that
-# this is only used to compile the demo programs, not the library itself.
-#
-L := -l
-
-
-# Target flag.
-#
-T := -FO=
-
-
-# C flags
-#
-# These should concern: debug output, optimization & warnings.
-#
-# Use the ANSIFLAGS variable to define the compiler flags used to enfore
-# ANSI compliance.
-#
-CFLAGS ?= -zq
-
-# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
-#
-ANSIFLAGS := -za
-
-
-# Library linking
-#
-CLEAN_LIBRARY ?= $(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY))
-LINK_LIBRARY = $(subst /,$(COMPILER_SEP), \
- wlib -q -n $@; \
- $(foreach m, $(OBJECTS_LIST), wlib -q $@ +$(m);) \
- echo > nul)
-
-# EOF
diff --git a/builds/compiler/win-lcc.mk b/builds/compiler/win-lcc.mk
deleted file mode 100644
index 91b429e0e..000000000
--- a/builds/compiler/win-lcc.mk
+++ /dev/null
@@ -1,81 +0,0 @@
-#
-# FreeType 2 Win32-LCC specific definitions
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# Command line name
-#
-CC := lcc
-COMPILER_SEP := $(SEP)
-
-
-# The object file extension (for standard and static libraries). This can be
-# .o, .tco, .obj, etc., depending on the platform.
-#
-O := obj
-SO := obj
-
-
-# The library file extension (for standard and static libraries). This can
-# be .a, .lib, etc., depending on the platform.
-#
-A := lib
-SA := lib
-
-
-# Path inclusion flag. Some compilers use a different flag than `-I' to
-# specify an additional include path. Examples are `/i=' or `-J'.
-#
-I := -I
-
-
-# C flag used to define a macro before the compilation of a given source
-# object. Usually it is `-D' like in `-DDEBUG'.
-#
-D := -D
-
-
-# The link flag used to specify a given library file on link. Note that
-# this is only used to compile the demo programs, not the library itself.
-#
-L := -Fl
-
-
-# Target flag.
-#
-T := -Fo
-
-
-# C flags
-#
-# These should concern: debug output, optimization & warnings.
-#
-# Use the ANSIFLAGS variable to define the compiler flags used to enfore
-# ANSI compliance.
-#
-CFLAGS ?= -c -g2 -O
-
-# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
-#
-# LCC is pure ANSI anyway!
-#
-ANSIFLAGS :=
-
-
-# library linking
-#
-#CLEAN_LIBRARY :=
-LINK_LIBRARY = lcclib /out:$(subst /,$(COMPILER_SEP),$@ $(OBJECTS_LIST))
-
-
-# EOF
diff --git a/builds/detect.mk b/builds/detect.mk
deleted file mode 100644
index 4ed478e43..000000000
--- a/builds/detect.mk
+++ /dev/null
@@ -1,154 +0,0 @@
-#
-# FreeType 2 host platform detection rules
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# This sub-Makefile is in charge of detecting the current platform. It sets
-# the following variables:
-#
-# BUILD_DIR The configuration and system-specific directory. Usually
-# `builds/$(PLATFORM)' but can be different for custom builds
-# of the library.
-#
-# The following variables must be defined in system specific `detect.mk'
-# files:
-#
-# PLATFORM The detected platform. This will default to `ansi' if
-# auto-detection fails.
-# CONFIG_FILE The configuration sub-makefile to use. This usually depends
-# on the compiler defined in the `CC' environment variable.
-# DELETE The shell command used to remove a given file.
-# COPY The shell command used to copy one file.
-# SEP The platform-specific directory separator.
-# COMPILER_SEP The separator used in arguments of the compilation tools.
-# CC The compiler to use.
-#
-# You need to set the following variable(s) before calling it:
-#
-# TOP_DIR The top-most directory in the FreeType library source
-# hierarchy. If not defined, it will default to `.'.
-
-# Set auto-detection default to `ansi' resp. UNIX-like operating systems.
-#
-PLATFORM := ansi
-DELETE := $(RM)
-COPY := cp
-CAT := cat
-SEP := /
-
-BUILD_CONFIG := $(TOP_DIR)/builds
-
-# These two assignments must be delayed.
-BUILD_DIR = $(BUILD_CONFIG)/$(PLATFORM)
-CONFIG_RULES = $(BUILD_DIR)/$(CONFIG_FILE)
-
-# We define the BACKSLASH variable to hold a single back-slash character.
-# This is needed because a line like
-#
-# SEP := \
-#
-# does not work with GNU Make (the backslash is interpreted as a line
-# continuation). While a line like
-#
-# SEP := \\
-#
-# really defines $(SEP) as `\' on Unix, and `\\' on Dos and Windows!
-#
-BACKSLASH := $(strip \ )
-
-# Find all auto-detectable platforms.
-#
-PLATFORMS := $(notdir $(subst /detect.mk,,$(wildcard $(BUILD_CONFIG)/*/detect.mk)))
-.PHONY: $(PLATFORMS) ansi
-
-# Filter out platform specified as setup target.
-#
-PLATFORM := $(firstword $(filter $(MAKECMDGOALS),$(PLATFORMS)))
-
-# If no setup target platform was specified, enable auto-detection/
-# default platform.
-#
-ifeq ($(PLATFORM),)
- PLATFORM := ansi
-endif
-
-# If the user has explicitly asked for `ansi' on the command line,
-# disable auto-detection.
-#
-ifeq ($(findstring ansi,$(MAKECMDGOALS)),)
- # Now, include all detection rule files found in the `builds/<system>'
- # directories. Note that the calling order of the various `detect.mk'
- # files isn't predictable.
- #
- include $(wildcard $(BUILD_CONFIG)/*/detect.mk)
-endif
-
-# In case no detection rule file was successful, use the default.
-#
-ifndef CONFIG_FILE
- CONFIG_FILE := ansi.mk
- setup: std_setup
- .PHONY: setup
-endif
-
-# The following targets are equivalent, with the exception that they use
-# a slightly different syntax for the `echo' command.
-#
-# std_setup: defined for most (i.e. Unix-like) platforms
-# dos_setup: defined for Dos-ish platforms like Dos, Windows & OS/2
-#
-.PHONY: std_setup dos_setup
-
-std_setup:
- @echo ""
- @echo "$(PROJECT_TITLE) build system -- automatic system detection"
- @echo ""
- @echo "The following settings are used:"
- @echo ""
- @echo " platform $(PLATFORM)"
- @echo " compiler $(CC)"
- @echo " configuration directory $(BUILD_DIR)"
- @echo " configuration rules $(CONFIG_RULES)"
- @echo ""
- @echo "If this does not correspond to your system or settings please remove the file"
- @echo "\`$(CONFIG_MK)' from this directory then read the INSTALL file for help."
- @echo ""
- @echo "Otherwise, simply type \`$(MAKE)' again to build the library,"
- @echo "or \`$(MAKE) refdoc' to build the API reference (this needs python >= 2.6)."
- @echo ""
- @$(COPY) $(CONFIG_RULES) $(CONFIG_MK)
-
-
-# Special case for Dos, Windows, OS/2, where echo "" doesn't work correctly!
-#
-dos_setup:
- @type builds$(SEP)newline
- @echo $(PROJECT_TITLE) build system -- automatic system detection
- @type builds$(SEP)newline
- @echo The following settings are used:
- @type builds$(SEP)newline
- @echo platformÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$(PLATFORM)
- @echo compilerÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$(CC)
- @echo configuration directoryÿÿÿÿÿÿ$(subst /,$(SEP),$(BUILD_DIR))
- @echo configuration rulesÿÿÿÿÿÿÿÿÿÿ$(subst /,$(SEP),$(CONFIG_RULES))
- @type builds$(SEP)newline
- @echo If this does not correspond to your system or settings please remove the file
- @echo '$(CONFIG_MK)' from this directory then read the INSTALL file for help.
- @type builds$(SEP)newline
- @echo Otherwise, simply type 'make' again to build the library.
- @echo or 'make refdoc' to build the API reference (this needs python >= 2.6).
- @type builds$(SEP)newline
- @$(COPY) $(subst /,$(SEP),$(CONFIG_RULES) $(CONFIG_MK)) > nul
-
-
-# EOF
diff --git a/builds/dos/detect.mk b/builds/dos/detect.mk
deleted file mode 100644
index 85c48df9e..000000000
--- a/builds/dos/detect.mk
+++ /dev/null
@@ -1,142 +0,0 @@
-#
-# FreeType 2 configuration file to detect a DOS host platform.
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-.PHONY: setup
-
-
-ifeq ($(PLATFORM),ansi)
-
- # Test for DJGPP by checking the DJGPP environment variable, which must be
- # set in order to use the system (ie. it will always be present when the
- # `make' utility is run).
- #
- # We test for the COMSPEC environment variable, then run the `ver'
- # command-line program to see if its output contains the word `Dos' or
- # `DOS'.
- #
- # If this is true, we are running a Dos-ish platform (or an emulation).
- #
- ifdef DJGPP
- PLATFORM := dos
- else
- ifdef COMSPEC
- is_dos := $(findstring DOS,$(subst Dos,DOS,$(shell ver)))
-
- # We try to recognize a Dos session under OS/2. The `ver' command
- # returns `Operating System/2 ...' there, so `is_dos' should be empty.
- #
- # To recognize a Dos session under OS/2, we check COMSPEC for the
- # substring `MDOS\COMMAND'
- #
- ifeq ($(is_dos),)
- is_dos := $(findstring MDOS\COMMAND,$(COMSPEC))
- endif
-
- # We also try to recognize Dos 7.x without Windows 9X launched.
- # See builds/windows/detect.mk for explanations about the logic.
- #
- ifeq ($(is_dos),)
- ifdef winbootdir
-#ifneq ($(OS),Windows_NT)
- # If windows is available, do not trigger this test.
- ifndef windir
- is_dos := $(findstring Windows,$(strip $(shell ver)))
- endif
-#endif
- endif
- endif
-
- endif # test COMSPEC
-
- ifneq ($(is_dos),)
-
- PLATFORM := dos
-
- endif # test Dos
- endif # test DJGPP
-endif # test PLATFORM ansi
-
-ifeq ($(PLATFORM),dos)
-
- # Use DJGPP (i.e. gcc) by default.
- #
- CONFIG_FILE := dos-gcc.mk
- CC ?= gcc
-
- # additionally, we provide hooks for various other compilers
- #
- ifneq ($(findstring emx,$(MAKECMDGOALS)),) # EMX gcc
- CONFIG_FILE := dos-emx.mk
- CC := gcc
- emx: setup
- .PHONY: emx
- endif
-
- ifneq ($(findstring turboc,$(MAKECMDGOALS)),) # Turbo C
- CONFIG_FILE := dos-tcc.mk
- CC := tcc
- turboc: setup
- .PHONY: turboc
- endif
-
- ifneq ($(findstring watcom,$(MAKECMDGOALS)),) # Watcom C/C++
- CONFIG_FILE := dos-wat.mk
- CC := wcc386
- watcom: setup
- .PHONY: watcom
- endif
-
- ifneq ($(findstring borlandc,$(MAKECMDGOALS)),) # Borland C/C++ 32-bit
- CONFIG_FILE := dos-bcc.mk
- CC := bcc32
- borlandc: setup
- .PHONY: borlandc
- endif
-
- ifneq ($(findstring borlandc16,$(MAKECMDGOALS)),) # Borland C/C++ 16-bit
- CONFIG_FILE := dos-bcc.mk
- CC := bcc
- borlandc16: setup
- .PHONY: borlandc16
- endif
-
- ifneq ($(findstring bash,$(SHELL)),) # check for bash
- SEP := /
- DELETE := rm
- COPY := cp
- CAT := cat
- setup: std_setup
- else
- SEP := $(BACKSLASH)
- DELETE := del
- CAT := type
-
- # Setting COPY is a bit trickier. We can be running DJGPP on some
- # Windows NT derivatives, like XP. See builds/windows/detect.mk for
- # explanations why we need hacking here.
- #
- ifeq ($(OS),Windows_NT)
- COPY := cmd.exe /c copy
- else
- COPY := copy
- endif # test NT
-
- setup: dos_setup
- endif
-
-endif # test PLATFORM dos
-
-
-# EOF
diff --git a/builds/dos/dos-def.mk b/builds/dos/dos-def.mk
deleted file mode 100644
index a6c2f225f..000000000
--- a/builds/dos/dos-def.mk
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# FreeType 2 DOS specific definitions
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-DELETE := del
-CAT := type
-SEP := $(strip \ )
-BUILD_DIR := $(TOP_DIR)/builds/dos
-PLATFORM := dos
-
-
-# The executable file extension (for tools), *with* leading dot.
-#
-E := .exe
-
-# The directory where all library files are placed.
-#
-# By default, this is the same as $(OBJ_DIR); however, this can be changed
-# to suit particular needs.
-#
-LIB_DIR := $(OBJ_DIR)
-
-# The name of the final library file. Note that the DOS-specific Makefile
-# uses a shorter (8.3) name.
-#
-LIBRARY := $(PROJECT)
-
-
-# The NO_OUTPUT macro is used to ignore the output of commands.
-#
-NO_OUTPUT = > nul
-
-
-# EOF
diff --git a/builds/dos/dos-emx.mk b/builds/dos/dos-emx.mk
deleted file mode 100644
index 85de03778..000000000
--- a/builds/dos/dos-emx.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# FreeType 2 configuration rules for the EMX gcc compiler
-#
-
-
-# Copyright 2003-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-include $(TOP_DIR)/builds/dos/dos-def.mk
-include $(TOP_DIR)/builds/compiler/emx.mk
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/builds/dos/dos-gcc.mk b/builds/dos/dos-gcc.mk
deleted file mode 100644
index e38acfbea..000000000
--- a/builds/dos/dos-gcc.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# FreeType 2 configuration rules for the DJGPP compiler
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-include $(TOP_DIR)/builds/dos/dos-def.mk
-include $(TOP_DIR)/builds/compiler/gcc.mk
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/builds/dos/dos-wat.mk b/builds/dos/dos-wat.mk
deleted file mode 100644
index ddb4876b7..000000000
--- a/builds/dos/dos-wat.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# FreeType 2 configuration rules for the Watcom C/C++ compiler
-#
-
-
-# Copyright 2003-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-include $(TOP_DIR)/builds/dos/dos-def.mk
-include $(TOP_DIR)/builds/compiler/watcom.mk
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/builds/exports.mk b/builds/exports.mk
deleted file mode 100644
index 10b79d355..000000000
--- a/builds/exports.mk
+++ /dev/null
@@ -1,80 +0,0 @@
-#
-# FreeType 2 exports sub-Makefile
-#
-
-
-# Copyright 2005-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# DO NOT INVOKE THIS MAKEFILE DIRECTLY! IT IS MEANT TO BE INCLUDED BY
-# OTHER MAKEFILES.
-
-
-# This sub-Makefile is used to compute the list of exported symbols whenever
-# the EXPORTS_LIST variable is defined by one of the platform or compiler
-# specific build files.
-#
-# EXPORTS_LIST contains the name of the `list' file, for example a Windows
-# .DEF file.
-#
-ifneq ($(EXPORTS_LIST),)
-
- # CCexe is the compiler used to compile the `apinames' tool program
- # on the host machine. This isn't necessarily the same as the compiler
- # which can be a cross-compiler for a different architecture, for example.
- #
- ifeq ($(CCexe),)
- CCexe := $(CC)
- endif
-
- # TE acts like T, but for executables instead of object files.
- ifeq ($(TE),)
- TE := $T
- endif
-
- # The list of public headers we're going to parse.
- PUBLIC_HEADERS := $(filter-out $(PUBLIC_DIR)/ftmac.h, \
- $(wildcard $(PUBLIC_DIR)/*.h))
- ifneq ($(ftmac_c),)
- PUBLIC_HEADERS += $(PUBLIC_DIR)/ftmac.h
- endif
-
- # The `apinames' source and executable. We use $E_BUILD as the host
- # executable suffix, which *includes* the final dot.
- #
- # Note that $(APINAMES_OPTIONS) is empty, except for Windows compilers.
- #
- APINAMES_SRC := $(subst /,$(SEP),$(TOP_DIR)/src/tools/apinames.c)
- APINAMES_EXE := $(subst /,$(SEP),$(OBJ_DIR)/apinames$(E_BUILD))
-
- $(APINAMES_EXE): $(APINAMES_SRC)
- $(CCexe) $(CCexe_CFLAGS) $(TE)$@ $< $(CCexe_LDFLAGS)
-
- .PHONY: symbols_list
-
- symbols_list: $(EXPORTS_LIST)
-
- # We manually add TT_New_Context and TT_RunIns, which are needed by TT
- # debuggers, to the EXPORTS_LIST.
- #
- $(EXPORTS_LIST): $(APINAMES_EXE) $(PUBLIC_HEADERS)
- $(subst /,$(SEP),$(APINAMES_EXE)) -o$@ $(APINAMES_OPTIONS) $(PUBLIC_HEADERS)
- @echo TT_New_Context >> $(EXPORTS_LIST)
- @echo TT_RunIns >> $(EXPORTS_LIST)
-
- $(PROJECT_LIBRARY): $(EXPORTS_LIST)
-
- CLEAN += $(EXPORTS_LIST) \
- $(APINAMES_EXE)
-
-endif
-
-
-# EOF
diff --git a/builds/freetype.mk b/builds/freetype.mk
deleted file mode 100644
index f8cfd411c..000000000
--- a/builds/freetype.mk
+++ /dev/null
@@ -1,339 +0,0 @@
-#
-# FreeType 2 library sub-Makefile
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# DO NOT INVOKE THIS MAKEFILE DIRECTLY! IT IS MEANT TO BE INCLUDED BY
-# OTHER MAKEFILES.
-
-
-# The following variables (set by other Makefile components, in the
-# environment, or on the command line) are used:
-#
-# BUILD_DIR The architecture dependent directory,
-# e.g. `$(TOP_DIR)/builds/unix'. Added to INCLUDES also.
-#
-# OBJ_DIR The directory in which object files are created.
-#
-# LIB_DIR The directory in which the library is created.
-#
-# DOC_DIR The directory in which the API reference is created.
-#
-# INCLUDES A list of directories to be included additionally.
-#
-# DEVEL_DIR Development directory which is added to the INCLUDES
-# variable before the standard include directories.
-#
-# CFLAGS Compilation flags. This overrides the default settings
-# in the platform-specific configuration files.
-#
-# FTSYS_SRC If set, its value is used as the name of a replacement
-# file for `src/base/ftsystem.c'.
-#
-# FTDEBUG_SRC If set, its value is used as the name of a replacement
-# file for `src/base/ftdebug.c'. [For a normal build, this
-# file does nothing.]
-#
-# FTMODULE_H The file which contains the list of module classes for
-# the current build. Usually, this is automatically
-# created by `modules.mk'.
-#
-# BASE_OBJ_S
-# BASE_OBJ_M A list of base objects (for single object and multiple
-# object builds, respectively). Set up in
-# `src/base/rules.mk'.
-#
-# BASE_EXT_OBJ A list of base extension objects. Set up in
-# `src/base/rules.mk'.
-#
-# DRV_OBJ_S
-# DRV_OBJ_M A list of driver objects (for single object and multiple
-# object builds, respectively). Set up cumulatively in
-# `src/<driver>/rules.mk'.
-#
-# CLEAN
-# DISTCLEAN The sub-makefiles can append additional stuff to these two
-# variables which is to be removed for the `clean' resp.
-# `distclean' target.
-#
-# TOP_DIR, SEP,
-# COMPILER_SEP,
-# LIBRARY, CC,
-# A, I, O, T Check `config.mk' for details.
-
-
-# The targets `objects' and `library' are defined at the end of this
-# Makefile after all other rules have been included.
-#
-.PHONY: single multi objects library refdoc
-
-# default target -- build single objects and library
-#
-single: objects library
-
-# `multi' target -- build multiple objects and library
-#
-multi: objects library
-
-
-# The FreeType source directory, usually `./src'.
-#
-SRC_DIR := $(TOP_DIR)/src
-
-# The directory where the base layer components are placed, usually
-# `./src/base'.
-#
-BASE_DIR := $(SRC_DIR)/base
-
-# Other derived directories.
-#
-PUBLIC_DIR := $(TOP_DIR)/include/freetype
-INTERNAL_DIR := $(PUBLIC_DIR)/internal
-SERVICES_DIR := $(INTERNAL_DIR)/services
-CONFIG_DIR := $(PUBLIC_DIR)/config
-
-# The documentation directory.
-#
-DOC_DIR ?= $(TOP_DIR)/docs/reference
-
-# The final name of the library file.
-#
-PROJECT_LIBRARY := $(LIB_DIR)/$(LIBRARY).$A
-
-
-# include paths
-#
-# IMPORTANT NOTE: The architecture-dependent directory must ALWAYS be placed
-# before the standard include list. Porters are then able to
-# put their own version of some of the FreeType components
-# in the `builds/<system>' directory, as these files will
-# override the default sources.
-#
-INCLUDES := $(subst /,$(COMPILER_SEP),$(OBJ_DIR) \
- $(DEVEL_DIR) \
- $(BUILD_DIR) \
- $(TOP_DIR)/include)
-
-INCLUDE_FLAGS := $(INCLUDES:%=$I%)
-
-ifdef DEVEL_DIR
- # We assume that all library dependencies for FreeType are fulfilled for a
- # development build, so we directly access the necessary include directory
- # information using `pkg-config'.
- INCLUDE_FLAGS += $(shell pkg-config --cflags libpng \
- harfbuzz )
-endif
-
-
-# C flags used for the compilation of an object file. This must include at
-# least the paths for the `base' and `builds/<system>' directories;
-# debug/optimization/warning flags + ansi compliance if needed.
-#
-# $(INCLUDE_FLAGS) should come before $(CFLAGS) to avoid problems with
-# old FreeType versions.
-#
-# Note what we also define the macro FT2_BUILD_LIBRARY when building
-# FreeType. This is required to let our sources include the internal
-# headers (something forbidden by clients).
-#
-# Finally, we define FT_CONFIG_MODULES_H so that the compiler uses the
-# generated version of `ftmodule.h' in $(OBJ_DIR). If there is an
-# `ftoption.h' files in $(OBJ_DIR), define FT_CONFIG_OPTIONS_H too.
-#
-ifneq ($(wildcard $(OBJ_DIR)/ftoption.h),)
- FTOPTION_H := $(OBJ_DIR)/ftoption.h
- FTOPTION_FLAG := $DFT_CONFIG_OPTIONS_H="<ftoption.h>"
-endif
-
-# `CPPFLAGS' might be specified by the user in the environment.
-#
-FT_CFLAGS = $(CPPFLAGS) \
- $(CFLAGS) \
- $DFT2_BUILD_LIBRARY \
- $DFT_CONFIG_MODULES_H="<ftmodule.h>" \
- $(FTOPTION_FLAG)
-
-
-# Include the `exports' rules file.
-#
-include $(TOP_DIR)/builds/exports.mk
-
-
-# Initialize the list of objects.
-#
-OBJECTS_LIST :=
-
-
-# Define $(PUBLIC_H) as the list of all public header files located in
-# `$(TOP_DIR)/include/freetype'. $(INTERNAL_H), and $(CONFIG_H) are defined
-# similarly.
-#
-# This is used to simplify the dependency rules -- if one of these files
-# changes, the whole library is recompiled.
-#
-PUBLIC_H := $(wildcard $(PUBLIC_DIR)/*.h)
-INTERNAL_H := $(wildcard $(INTERNAL_DIR)/*.h) \
- $(wildcard $(SERVICES_DIR)/*.h)
-CONFIG_H := $(wildcard $(CONFIG_DIR)/*.h) \
- $(wildcard $(BUILD_DIR)/config/*.h) \
- $(FTMODULE_H) \
- $(FTOPTION_H)
-DEVEL_H := $(wildcard $(TOP_DIR)/devel/*.h)
-
-FREETYPE_H := $(PUBLIC_H) $(INTERNAL_H) $(CONFIG_H) $(DEVEL_H)
-
-
-FT_COMPILE := $(CC) $(ANSIFLAGS) $(INCLUDE_FLAGS) $(FT_CFLAGS)
-
-# ftsystem component
-#
-FTSYS_SRC ?= $(BASE_DIR)/ftsystem.c
-
-FTSYS_OBJ := $(OBJ_DIR)/ftsystem.$O
-
-OBJECTS_LIST += $(FTSYS_OBJ)
-
-$(FTSYS_OBJ): $(FTSYS_SRC) $(FREETYPE_H)
- $(FT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# ftdebug component
-#
-FTDEBUG_SRC ?= $(BASE_DIR)/ftdebug.c
-
-FTDEBUG_OBJ := $(OBJ_DIR)/ftdebug.$O
-
-OBJECTS_LIST += $(FTDEBUG_OBJ)
-
-$(FTDEBUG_OBJ): $(FTDEBUG_SRC) $(FREETYPE_H)
- $(FT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# Include all rule files from FreeType components.
-#
-include $(SRC_DIR)/base/rules.mk
-include $(patsubst %,$(SRC_DIR)/%/rules.mk,$(MODULES))
-
-
-# ftinit component
-#
-# The C source `ftinit.c' contains the FreeType initialization routines.
-# It is able to automatically register one or more drivers when the API
-# function FT_Init_FreeType() is called.
-#
-# The set of initial drivers is determined by the driver Makefiles
-# includes above. Each driver Makefile updates the FTINIT_xxx lists
-# which contain additional include paths and macros used to compile the
-# single `ftinit.c' source.
-#
-FTINIT_SRC := $(BASE_DIR)/ftinit.c
-FTINIT_OBJ := $(OBJ_DIR)/ftinit.$O
-
-OBJECTS_LIST += $(FTINIT_OBJ)
-
-$(FTINIT_OBJ): $(FTINIT_SRC) $(FREETYPE_H)
- $(FT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# All FreeType library objects.
-#
-OBJ_M := $(BASE_OBJ_M) $(BASE_EXT_OBJ) $(DRV_OBJS_M)
-OBJ_S := $(BASE_OBJ_S) $(BASE_EXT_OBJ) $(DRV_OBJS_S)
-
-
-# The target `multi' on the Make command line indicates that we want to
-# compile each source file independently.
-#
-# Otherwise, each module/driver is compiled in a single object file through
-# source file inclusion (see `src/base/ftbase.c' or
-# `src/truetype/truetype.c' for examples).
-#
-BASE_OBJECTS := $(OBJECTS_LIST)
-
-ifneq ($(findstring multi,$(MAKECMDGOALS)),)
- OBJECTS_LIST += $(OBJ_M)
-else
- OBJECTS_LIST += $(OBJ_S)
-endif
-
-objects: $(OBJECTS_LIST)
-
-library: $(PROJECT_LIBRARY)
-
-
-# Option `-B' disables generation of .pyc files (available since python 2.6)
-#
-refdoc:
- python -B $(SRC_DIR)/tools/docmaker/docmaker.py \
- --prefix=ft2 \
- --title=FreeType-$(version) \
- --output=$(DOC_DIR) \
- $(PUBLIC_DIR)/*.h \
- $(PUBLIC_DIR)/config/*.h \
- $(PUBLIC_DIR)/cache/*.h
-
-
-.PHONY: clean_project_std distclean_project_std
-
-# Standard cleaning and distclean rules. These are not accepted
-# on all systems though.
-#
-clean_project_std:
- -$(DELETE) $(BASE_OBJECTS) $(OBJ_M) $(OBJ_S) $(CLEAN)
-
-distclean_project_std: clean_project_std
- -$(DELETE) $(PROJECT_LIBRARY)
- -$(DELETE) *.orig *~ core *.core $(DISTCLEAN)
-
-
-.PHONY: clean_project_dos distclean_project_dos
-
-# The Dos command shell does not support very long list of arguments, so
-# we are stuck with wildcards.
-#
-# Don't break the command lines with \; this prevents the "del" command from
-# working correctly on Win9x.
-#
-clean_project_dos:
- -$(DELETE) $(subst /,$(SEP),$(OBJ_DIR)/*.$O $(CLEAN) $(NO_OUTPUT))
-
-distclean_project_dos: clean_project_dos
- -$(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY) $(DISTCLEAN) $(NO_OUTPUT))
-
-
-.PHONY: remove_config_mk remove_ftmodule_h
-
-# Remove configuration file (used for distclean).
-#
-remove_config_mk:
- -$(DELETE) $(subst /,$(SEP),$(CONFIG_MK) $(NO_OUTPUT))
-
-# Remove module list (used for distclean).
-#
-remove_ftmodule_h:
- -$(DELETE) $(subst /,$(SEP),$(FTMODULE_H) $(NO_OUTPUT))
-
-
-.PHONY: clean distclean
-
-# The `config.mk' file must define `clean_freetype' and
-# `distclean_freetype'. Implementations may use to relay these to either
-# the `std' or `dos' versions from above, or simply provide their own
-# implementation.
-#
-clean: clean_project
-distclean: distclean_project remove_config_mk remove_ftmodule_h
- -$(DELETE) $(subst /,$(SEP),$(DOC_DIR)/*.html $(NO_OUTPUT))
-
-
-# EOF
diff --git a/builds/link_dos.mk b/builds/link_dos.mk
deleted file mode 100644
index 3854e7072..000000000
--- a/builds/link_dos.mk
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Link instructions for Dos-like systems (Dos, Win32, OS/2)
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-ifdef BUILD_PROJECT
-
- .PHONY: clean_project distclean_project
-
- # Now include the main sub-makefile. It contains all the rules used to
- # build the library with the previous variables defined.
- #
- include $(TOP_DIR)/builds/$(PROJECT).mk
-
- # The cleanup targets.
- #
- clean_project: clean_project_dos
- distclean_project: distclean_project_dos
-
- # This final rule is used to link all object files into a single library.
- # this is compiler-specific
- #
- $(PROJECT_LIBRARY): $(OBJECTS_LIST)
- ifdef CLEAN_LIBRARY
- -$(CLEAN_LIBRARY) $(NO_OUTPUT)
- endif
- $(LINK_LIBRARY)
-
-endif
-
-
-# EOF
diff --git a/builds/link_std.mk b/builds/link_std.mk
deleted file mode 100644
index 4cc2dc913..000000000
--- a/builds/link_std.mk
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Link instructions for standard systems
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-ifdef BUILD_PROJECT
-
- .PHONY: clean_project distclean_project
-
- # Now include the main sub-makefile. It contains all the rules used to
- # build the library with the previous variables defined.
- #
- include $(TOP_DIR)/builds/$(PROJECT).mk
-
- # The cleanup targets.
- #
- clean_project: clean_project_std
- distclean_project: distclean_project_std
-
- # This final rule is used to link all object files into a single library.
- # this is compiler-specific
- #
- $(PROJECT_LIBRARY): $(OBJECTS_LIST)
- ifdef CLEAN_LIBRARY
- -$(CLEAN_LIBRARY) $(NO_OUTPUT)
- endif
- $(LINK_LIBRARY)
-
-endif
-
-
-# EOF
diff --git a/builds/mac/FreeType.m68k_cfm.make.txt b/builds/mac/FreeType.m68k_cfm.make.txt
deleted file mode 100644
index c0a55f510..000000000
--- a/builds/mac/FreeType.m68k_cfm.make.txt
+++ /dev/null
@@ -1,212 +0,0 @@
-# File: FreeType.m68k_cfm.make
-# Target: FreeType.m68k_cfm
-# Created: Thursday, October 27, 2005 09:23:25 PM
-
-
-MAKEFILE = FreeType.m68k_cfm.make
-\xA5MondoBuild\xA5 = {MAKEFILE} # Make blank to avoid rebuilds when makefile is modified
-
-ObjDir = :objs:
-Includes = \xB6
- -ansi strict \xB6
- -includes unix \xB6
- -i :include: \xB6
- -i :src: \xB6
- -i :include:freetype:config:
-
-Sym-68K = -sym off
-
-COptions = \xB6
- -d FT_MACINTOSH=1 \xB6
- -d HAVE_FSSPEC=1 \xB6
- -d HAVE_FSREF=0 \xB6
- -d HAVE_QUICKDRAW_TOOLBOX=1 \xB6
- -d HAVE_QUICKDRAW_CARBON=0 \xB6
- -d HAVE_ATS=0 \xB6
- -d FT2_BUILD_LIBRARY \xB6
- -d FT_CONFIG_CONFIG_H="<ftconfig.h>" \xB6
- -d FT_CONFIG_MODULES_H="<ftmodule.h>" \xB6
- {Includes} {Sym-68K} -model cfmseg
-
-
-### Source Files ###
-
-SrcFiles = \xB6
- :src:autofit:autofit.c \xB6
- :builds:mac:ftbase.c \xB6
- :src:base:ftbbox.c \xB6
- :src:base:ftbdf.c \xB6
- :src:base:ftbitmap.c \xB6
- :src:base:ftdebug.c \xB6
- :src:base:ftfntfmt.c \xB6
- :src:base:ftfstype.c \xB6
- :src:base:ftglyph.c \xB6
- :src:base:ftgxval.c \xB6
- :src:base:ftinit.c \xB6
- :src:base:ftmm.c \xB6
- :src:base:ftotval.c \xB6
- :src:base:ftpfr.c \xB6
- :src:base:ftstroke.c \xB6
- :src:base:ftsynth.c \xB6
- :src:base:ftsystem.c \xB6
- :src:base:fttype1.c \xB6
- :src:base:ftwinfnt.c \xB6
- :src:cache:ftcache.c \xB6
- :src:bdf:bdf.c \xB6
- :src:cff:cff.c \xB6
- :src:cid:type1cid.c \xB6
-# :src:gxvalid:gxvalid.c \xB6
- :src:gzip:ftgzip.c \xB6
- :src:bzip2:ftbzip2.c \xB6
- :src:lzw:ftlzw.c \xB6
- :src:otvalid:otvalid.c \xB6
- :src:pcf:pcf.c \xB6
- :src:pfr:pfr.c \xB6
- :src:psaux:psaux.c \xB6
- :src:pshinter:pshinter.c \xB6
- :src:psnames:psmodule.c \xB6
- :src:raster:raster.c \xB6
- :src:sfnt:sfnt.c \xB6
- :src:smooth:smooth.c \xB6
- :src:truetype:truetype.c \xB6
- :src:type1:type1.c \xB6
- :src:type42:type42.c \xB6
- :src:winfonts:winfnt.c
-
-
-### Object Files ###
-
-ObjFiles-68K = \xB6
- "{ObjDir}autofit.c.o" \xB6
- "{ObjDir}ftbase.c.o" \xB6
- "{ObjDir}ftbbox.c.o" \xB6
- "{ObjDir}ftbdf.c.o" \xB6
- "{ObjDir}ftbitmap.c.o" \xB6
- "{ObjDir}ftdebug.c.o" \xB6
- "{ObjDir}ftfntfmt.c.o" \xB6
- "{ObjDir}ftfstype.c.o" \xB6
- "{ObjDir}ftglyph.c.o" \xB6
- "{ObjDir}ftgxval.c.o" \xB6
- "{ObjDir}ftinit.c.o" \xB6
- "{ObjDir}ftmm.c.o" \xB6
- "{ObjDir}ftotval.c.o" \xB6
- "{ObjDir}ftpfr.c.o" \xB6
- "{ObjDir}ftstroke.c.o" \xB6
- "{ObjDir}ftsynth.c.o" \xB6
- "{ObjDir}ftsystem.c.o" \xB6
- "{ObjDir}fttype1.c.o" \xB6
- "{ObjDir}ftwinfnt.c.o" \xB6
- "{ObjDir}ftcache.c.o" \xB6
- "{ObjDir}bdf.c.o" \xB6
- "{ObjDir}cff.c.o" \xB6
- "{ObjDir}type1cid.c.o" \xB6
-# "{ObjDir}gxvalid.c.o" \xB6
- "{ObjDir}ftgzip.c.o" \xB6
- "{ObjDir}ftbzip2.c.o" \xB6
- "{ObjDir}ftlzw.c.o" \xB6
- "{ObjDir}otvalid.c.o" \xB6
- "{ObjDir}pcf.c.o" \xB6
- "{ObjDir}pfr.c.o" \xB6
- "{ObjDir}psaux.c.o" \xB6
- "{ObjDir}pshinter.c.o" \xB6
- "{ObjDir}psmodule.c.o" \xB6
- "{ObjDir}raster.c.o" \xB6
- "{ObjDir}sfnt.c.o" \xB6
- "{ObjDir}smooth.c.o" \xB6
- "{ObjDir}truetype.c.o" \xB6
- "{ObjDir}type1.c.o" \xB6
- "{ObjDir}type42.c.o" \xB6
- "{ObjDir}winfnt.c.o"
-
-
-### Libraries ###
-
-LibFiles-68K =
-
-
-### Default Rules ###
-
-.c.o \xC4 .c {\xA5MondoBuild\xA5}
- {C} {depDir}{default}.c -o {targDir}{default}.c.o {COptions}
-
-
-### Build Rules ###
-
-:builds:mac:ftbase.c \xC4\xC4 :src:base:ftbase.c
- Duplicate :src:base:ftbase.c :builds:mac:ftbase.c
-
-"{ObjDir}ftbase.c.o" \xC4\xC4 :builds:mac:ftbase.c
- {C} :builds:mac:ftbase.c -o "{ObjDir}ftbase.c.o" \xB6
- -i :builds:mac: \xB6
- -i :src:base: \xB6
- {COptions}
-
-FreeType.m68k_cfm \xC4\xC4 FreeType.m68k_cfm.o
-
-FreeType.m68k_cfm.o \xC4\xC4 {ObjFiles-68K} {LibFiles-68K} {\xA5MondoBuild\xA5}
- Lib \xB6
- -o {Targ} \xB6
- {ObjFiles-68K} \xB6
- {LibFiles-68K} \xB6
- {Sym-68K} \xB6
- -mf -d
-
-
-
-### Required Dependencies ###
-
-"{ObjDir}autofit.c.o" \xC4 :src:autofit:autofit.c
-# "{ObjDir}ftbase.c.o" \xC4 :src:base:ftbase.c
-"{ObjDir}ftbbox.c.o" \xC4 :src:base:ftbbox.c
-"{ObjDir}ftbdf.c.o" \xC4 :src:base:ftbdf.c
-"{ObjDir}ftbitmap.c.o" \xC4 :src:base:ftbitmap.c
-"{ObjDir}ftdebug.c.o" \xC4 :src:base:ftdebug.c
-"{ObjDir}ftfntfmt.c.o" \xC4 :src:base:ftfntfmt.c
-"{ObjDir}ftfstype.c.o" \xC4 :src:base:ftfstype.c
-"{ObjDir}ftglyph.c.o" \xC4 :src:base:ftglyph.c
-"{ObjDir}ftgxval.c.o" \xC4 :src:base:ftgxval.c
-"{ObjDir}ftinit.c.o" \xC4 :src:base:ftinit.c
-"{ObjDir}ftmm.c.o" \xC4 :src:base:ftmm.c
-"{ObjDir}ftotval.c.o" \xC4 :src:base:ftotval.c
-"{ObjDir}ftpfr.c.o" \xC4 :src:base:ftpfr.c
-"{ObjDir}ftstroke.c.o" \xC4 :src:base:ftstroke.c
-"{ObjDir}ftsynth.c.o" \xC4 :src:base:ftsynth.c
-"{ObjDir}ftsystem.c.o" \xC4 :src:base:ftsystem.c
-"{ObjDir}fttype1.c.o" \xC4 :src:base:fttype1.c
-"{ObjDir}ftwinfnt.c.o" \xC4 :src:base:ftwinfnt.c
-"{ObjDir}ftcache.c.o" \xC4 :src:cache:ftcache.c
-"{ObjDir}bdf.c.o" \xC4 :src:bdf:bdf.c
-"{ObjDir}cff.c.o" \xC4 :src:cff:cff.c
-"{ObjDir}type1cid.c.o" \xC4 :src:cid:type1cid.c
-# "{ObjDir}gxvalid.c.o" \xC4 :src:gxvalid:gxvalid.c
-"{ObjDir}ftgzip.c.o" \xC4 :src:gzip:ftgzip.c
-"{ObjDir}ftbzip2.c.o" \xC4 :src:bzip2:ftbzip2.c
-"{ObjDir}ftlzw.c.o" \xC4 :src:lzw:ftlzw.c
-"{ObjDir}otvalid.c.o" \xC4 :src:otvalid:otvalid.c
-"{ObjDir}pcf.c.o" \xC4 :src:pcf:pcf.c
-"{ObjDir}pfr.c.o" \xC4 :src:pfr:pfr.c
-"{ObjDir}psaux.c.o" \xC4 :src:psaux:psaux.c
-"{ObjDir}pshinter.c.o" \xC4 :src:pshinter:pshinter.c
-"{ObjDir}psmodule.c.o" \xC4 :src:psnames:psmodule.c
-"{ObjDir}raster.c.o" \xC4 :src:raster:raster.c
-"{ObjDir}sfnt.c.o" \xC4 :src:sfnt:sfnt.c
-"{ObjDir}smooth.c.o" \xC4 :src:smooth:smooth.c
-"{ObjDir}truetype.c.o" \xC4 :src:truetype:truetype.c
-"{ObjDir}type1.c.o" \xC4 :src:type1:type1.c
-"{ObjDir}type42.c.o" \xC4 :src:type42:type42.c
-"{ObjDir}winfnt.c.o" \xC4 :src:winfonts:winfnt.c
-
-
-### Optional Dependencies ###
-### Build this target to generate "include file" dependencies. ###
-
-Dependencies \xC4 $OutOfDate
- MakeDepend \xB6
- -append {MAKEFILE} \xB6
- -ignore "{CIncludes}" \xB6
- -objdir "{ObjDir}" \xB6
- -objext .o \xB6
- {Includes} \xB6
- {SrcFiles}
-
-
diff --git a/builds/mac/FreeType.m68k_far.make.txt b/builds/mac/FreeType.m68k_far.make.txt
deleted file mode 100644
index e9b7f6f5f..000000000
--- a/builds/mac/FreeType.m68k_far.make.txt
+++ /dev/null
@@ -1,211 +0,0 @@
-# File: FreeType.m68k_far.make
-# Target: FreeType.m68k_far
-# Created: Tuesday, October 25, 2005 03:34:05 PM
-
-
-MAKEFILE = FreeType.m68k_far.make
-\xA5MondoBuild\xA5 = {MAKEFILE} # Make blank to avoid rebuilds when makefile is modified
-
-ObjDir = :objs:
-Includes = \xB6
- -includes unix \xB6
- -i :include: \xB6
- -i :src: \xB6
- -i :include:freetype:config:
-
-Sym-68K = -sym off
-
-COptions = \xB6
- -d FT_MACINTOSH=1 \xB6
- -d HAVE_FSSPEC=1 \xB6
- -d HAVE_FSREF=0 \xB6
- -d HAVE_QUICKDRAW_TOOLBOX=1 \xB6
- -d HAVE_QUICKDRAW_CARBON=0 \xB6
- -d HAVE_ATS=0 \xB6
- -d FT2_BUILD_LIBRARY \xB6
- -d FT_CONFIG_CONFIG_H="<ftconfig.h>" \xB6
- -d FT_CONFIG_MODULES_H="<ftmodule.h>" \xB6
- {Includes} {Sym-68K} -model far
-
-
-### Source Files ###
-
-SrcFiles = \xB6
- :src:autofit:autofit.c \xB6
- :builds:mac:ftbase.c \xB6
- :src:base:ftbbox.c \xB6
- :src:base:ftbdf.c \xB6
- :src:base:ftbitmap.c \xB6
- :src:base:ftdebug.c \xB6
- :src:base:ftfntfmt.c \xB6
- :src:base:ftfstype.c \xB6
- :src:base:ftglyph.c \xB6
- :src:base:ftgxval.c \xB6
- :src:base:ftinit.c \xB6
- :src:base:ftmm.c \xB6
- :src:base:ftotval.c \xB6
- :src:base:ftpfr.c \xB6
- :src:base:ftstroke.c \xB6
- :src:base:ftsynth.c \xB6
- :src:base:ftsystem.c \xB6
- :src:base:fttype1.c \xB6
- :src:base:ftwinfnt.c \xB6
- :src:cache:ftcache.c \xB6
- :src:bdf:bdf.c \xB6
- :src:cff:cff.c \xB6
- :src:cid:type1cid.c \xB6
- :src:gxvalid:gxvalid.c \xB6
- :src:gzip:ftgzip.c \xB6
- :src:bzip2:ftbzip2.c \xB6
- :src:lzw:ftlzw.c \xB6
- :src:otvalid:otvalid.c \xB6
- :src:pcf:pcf.c \xB6
- :src:pfr:pfr.c \xB6
- :src:psaux:psaux.c \xB6
- :src:pshinter:pshinter.c \xB6
- :src:psnames:psmodule.c \xB6
- :src:raster:raster.c \xB6
- :src:sfnt:sfnt.c \xB6
- :src:smooth:smooth.c \xB6
- :src:truetype:truetype.c \xB6
- :src:type1:type1.c \xB6
- :src:type42:type42.c \xB6
- :src:winfonts:winfnt.c
-
-
-### Object Files ###
-
-ObjFiles-68K = \xB6
- "{ObjDir}autofit.c.o" \xB6
- "{ObjDir}ftbase.c.o" \xB6
- "{ObjDir}ftbbox.c.o" \xB6
- "{ObjDir}ftbdf.c.o" \xB6
- "{ObjDir}ftbitmap.c.o" \xB6
- "{ObjDir}ftdebug.c.o" \xB6
- "{ObjDir}ftfntfmt.c.o" \xB6
- "{ObjDir}ftfstype.c.o" \xB6
- "{ObjDir}ftglyph.c.o" \xB6
- "{ObjDir}ftgxval.c.o" \xB6
- "{ObjDir}ftinit.c.o" \xB6
- "{ObjDir}ftmm.c.o" \xB6
- "{ObjDir}ftotval.c.o" \xB6
- "{ObjDir}ftpfr.c.o" \xB6
- "{ObjDir}ftstroke.c.o" \xB6
- "{ObjDir}ftsynth.c.o" \xB6
- "{ObjDir}ftsystem.c.o" \xB6
- "{ObjDir}fttype1.c.o" \xB6
- "{ObjDir}ftwinfnt.c.o" \xB6
- "{ObjDir}ftcache.c.o" \xB6
- "{ObjDir}bdf.c.o" \xB6
- "{ObjDir}cff.c.o" \xB6
- "{ObjDir}type1cid.c.o" \xB6
- "{ObjDir}gxvalid.c.o" \xB6
- "{ObjDir}ftgzip.c.o" \xB6
- "{ObjDir}ftbzip2.c.o" \xB6
- "{ObjDir}ftlzw.c.o" \xB6
- "{ObjDir}otvalid.c.o" \xB6
- "{ObjDir}pcf.c.o" \xB6
- "{ObjDir}pfr.c.o" \xB6
- "{ObjDir}psaux.c.o" \xB6
- "{ObjDir}pshinter.c.o" \xB6
- "{ObjDir}psmodule.c.o" \xB6
- "{ObjDir}raster.c.o" \xB6
- "{ObjDir}sfnt.c.o" \xB6
- "{ObjDir}smooth.c.o" \xB6
- "{ObjDir}truetype.c.o" \xB6
- "{ObjDir}type1.c.o" \xB6
- "{ObjDir}type42.c.o" \xB6
- "{ObjDir}winfnt.c.o"
-
-
-### Libraries ###
-
-LibFiles-68K =
-
-
-### Default Rules ###
-
-.c.o \xC4 .c {\xA5MondoBuild\xA5}
- {C} {depDir}{default}.c -o {targDir}{default}.c.o {COptions} \xB6
- -ansi strict
-
-### Build Rules ###
-
-:builds:mac:ftbase.c \xC4\xC4 :src:base:ftbase.c
- Duplicate :src:base:ftbase.c :builds:mac:ftbase.c
-
-"{ObjDir}ftbase.c.o" \xC4\xC4 :builds:mac:ftbase.c
- {C} :builds:mac:ftbase.c -o "{ObjDir}ftbase.c.o" \xB6
- -i :builds:mac: \xB6
- -i :src:base: \xB6
- {COptions}
-
-FreeType.m68k_far \xC4\xC4 FreeType.m68k_far.o
-
-FreeType.m68k_far.o \xC4\xC4 {ObjFiles-68K} {LibFiles-68K} {\xA5MondoBuild\xA5}
- Lib \xB6
- -o {Targ} \xB6
- {ObjFiles-68K} \xB6
- {LibFiles-68K} \xB6
- {Sym-68K} \xB6
- -mf -d
-
-
-
-### Required Dependencies ###
-
-"{ObjDir}autofit.c.o" \xC4 :src:autofit:autofit.c
-# "{ObjDir}ftbase.c.o" \xC4 :src:base:ftbase.c
-"{ObjDir}ftbbox.c.o" \xC4 :src:base:ftbbox.c
-"{ObjDir}ftbdf.c.o" \xC4 :src:base:ftbdf.c
-"{ObjDir}ftbitmap.c.o" \xC4 :src:base:ftbitmap.c
-"{ObjDir}ftdebug.c.o" \xC4 :src:base:ftdebug.c
-"{ObjDir}ftfntfmt.c.o" \xC4 :src:base:ftfntfmt.c
-"{ObjDir}ftfstype.c.o" \xC4 :src:base:ftfstype.c
-"{ObjDir}ftglyph.c.o" \xC4 :src:base:ftglyph.c
-"{ObjDir}ftgxval.c.o" \xC4 :src:base:ftgxval.c
-"{ObjDir}ftinit.c.o" \xC4 :src:base:ftinit.c
-"{ObjDir}ftmm.c.o" \xC4 :src:base:ftmm.c
-"{ObjDir}ftotval.c.o" \xC4 :src:base:ftotval.c
-"{ObjDir}ftpfr.c.o" \xC4 :src:base:ftpfr.c
-"{ObjDir}ftstroke.c.o" \xC4 :src:base:ftstroke.c
-"{ObjDir}ftsynth.c.o" \xC4 :src:base:ftsynth.c
-"{ObjDir}ftsystem.c.o" \xC4 :src:base:ftsystem.c
-"{ObjDir}fttype1.c.o" \xC4 :src:base:fttype1.c
-"{ObjDir}ftwinfnt.c.o" \xC4 :src:base:ftwinfnt.c
-"{ObjDir}ftcache.c.o" \xC4 :src:cache:ftcache.c
-"{ObjDir}bdf.c.o" \xC4 :src:bdf:bdf.c
-"{ObjDir}cff.c.o" \xC4 :src:cff:cff.c
-"{ObjDir}type1cid.c.o" \xC4 :src:cid:type1cid.c
-"{ObjDir}gxvalid.c.o" \xC4 :src:gxvalid:gxvalid.c
-"{ObjDir}ftgzip.c.o" \xC4 :src:gzip:ftgzip.c
-"{ObjDir}ftbzip2.c.o" \xC4 :src:bzip2:ftbzip2.c
-"{ObjDir}ftlzw.c.o" \xC4 :src:lzw:ftlzw.c
-"{ObjDir}otvalid.c.o" \xC4 :src:otvalid:otvalid.c
-"{ObjDir}pcf.c.o" \xC4 :src:pcf:pcf.c
-"{ObjDir}pfr.c.o" \xC4 :src:pfr:pfr.c
-"{ObjDir}psaux.c.o" \xC4 :src:psaux:psaux.c
-"{ObjDir}pshinter.c.o" \xC4 :src:pshinter:pshinter.c
-"{ObjDir}psmodule.c.o" \xC4 :src:psnames:psmodule.c
-"{ObjDir}raster.c.o" \xC4 :src:raster:raster.c
-"{ObjDir}sfnt.c.o" \xC4 :src:sfnt:sfnt.c
-"{ObjDir}smooth.c.o" \xC4 :src:smooth:smooth.c
-"{ObjDir}truetype.c.o" \xC4 :src:truetype:truetype.c
-"{ObjDir}type1.c.o" \xC4 :src:type1:type1.c
-"{ObjDir}type42.c.o" \xC4 :src:type42:type42.c
-"{ObjDir}winfnt.c.o" \xC4 :src:winfonts:winfnt.c
-
-
-### Optional Dependencies ###
-### Build this target to generate "include file" dependencies. ###
-
-Dependencies \xC4 $OutOfDate
- MakeDepend \xB6
- -append {MAKEFILE} \xB6
- -ignore "{CIncludes}" \xB6
- -objdir "{ObjDir}" \xB6
- -objext .o \xB6
- {Includes} \xB6
- {SrcFiles}
-
-
diff --git a/builds/mac/FreeType.ppc_carbon.make.txt b/builds/mac/FreeType.ppc_carbon.make.txt
deleted file mode 100644
index 9eb1dac4e..000000000
--- a/builds/mac/FreeType.ppc_carbon.make.txt
+++ /dev/null
@@ -1,215 +0,0 @@
-# File: FreeType.ppc_carbon.make
-# Target: FreeType.ppc_carbon
-# Created: Friday, October 28, 2005 03:40:06 PM
-
-
-MAKEFILE = FreeType.ppc_carbon.make
-\xA5MondoBuild\xA5 = {MAKEFILE} # Make blank to avoid rebuilds when makefile is modified
-
-ObjDir = :objs:
-Includes = \xB6
- -ansi strict \xB6
- -includes unix \xB6
- -i :include: \xB6
- -i :src: \xB6
- -i :include:freetype:config:
-
-Sym-PPC = -sym off
-
-PPCCOptions = \xB6
- -d FT_MACINTOSH=1 \xB6
- -d HAVE_FSSPEC=1 \xB6
- -d HAVE_FSREF=1 \xB6
- -d HAVE_QUICKDRAW_TOOLBOX=1 \xB6
- -d HAVE_QUICKDRAW_CARBON=1 \xB6
- -d HAVE_ATS=0 \xB6
- -d FT2_BUILD_LIBRARY \xB6
- -d FT_CONFIG_CONFIG_H="<ftconfig.h>" \xB6
- -d FT_CONFIG_MODULES_H="<ftmodule.h>" \xB6
- {Includes} {Sym-PPC} -d TARGET_API_MAC_CARBON=1
-
-
-### Source Files ###
-
-SrcFiles = \xB6
- :src:autofit:autofit.c \xB6
- :builds:mac:ftbase.c \xB6
- :src:base:ftbbox.c \xB6
- :src:base:ftbdf.c \xB6
- :src:base:ftbitmap.c \xB6
- :src:base:ftdebug.c \xB6
- :src:base:ftfntfmt.c \xB6
- :src:base:ftfstype.c \xB6
- :src:base:ftglyph.c \xB6
- :src:base:ftgxval.c \xB6
- :src:base:ftinit.c \xB6
- :src:base:ftmm.c \xB6
- :src:base:ftotval.c \xB6
- :src:base:ftpfr.c \xB6
- :src:base:ftstroke.c \xB6
- :src:base:ftsynth.c \xB6
- :src:base:ftsystem.c \xB6
- :src:base:fttype1.c \xB6
- :src:base:ftwinfnt.c \xB6
- :src:cache:ftcache.c \xB6
- :src:bdf:bdf.c \xB6
- :src:cff:cff.c \xB6
- :src:cid:type1cid.c \xB6
- :src:gxvalid:gxvalid.c \xB6
- :src:gzip:ftgzip.c \xB6
- :src:bzip2:ftbzip2.c \xB6
- :src:lzw:ftlzw.c \xB6
- :src:otvalid:otvalid.c \xB6
- :src:pcf:pcf.c \xB6
- :src:pfr:pfr.c \xB6
- :src:psaux:psaux.c \xB6
- :src:pshinter:pshinter.c \xB6
- :src:psnames:psmodule.c \xB6
- :src:raster:raster.c \xB6
- :src:sfnt:sfnt.c \xB6
- :src:smooth:smooth.c \xB6
- :src:truetype:truetype.c \xB6
- :src:type1:type1.c \xB6
- :src:type42:type42.c \xB6
- :src:winfonts:winfnt.c
-
-
-### Object Files ###
-
-ObjFiles-PPC = \xB6
- "{ObjDir}autofit.c.x" \xB6
- "{ObjDir}ftbase.c.x" \xB6
- "{ObjDir}ftbbox.c.x" \xB6
- "{ObjDir}ftbdf.c.x" \xB6
- "{ObjDir}ftbitmap.c.x" \xB6
- "{ObjDir}ftdebug.c.x" \xB6
- "{ObjDir}ftfntfmt.c.x" \xB6
- "{ObjDir}ftfstype.c.x" \xB6
- "{ObjDir}ftglyph.c.x" \xB6
- "{ObjDir}ftgxval.c.x" \xB6
- "{ObjDir}ftinit.c.x" \xB6
- "{ObjDir}ftmm.c.x" \xB6
- "{ObjDir}ftotval.c.x" \xB6
- "{ObjDir}ftpfr.c.x" \xB6
- "{ObjDir}ftstroke.c.x" \xB6
- "{ObjDir}ftsynth.c.x" \xB6
- "{ObjDir}ftsystem.c.x" \xB6
- "{ObjDir}fttype1.c.x" \xB6
- "{ObjDir}ftwinfnt.c.x" \xB6
- "{ObjDir}ftcache.c.x" \xB6
- "{ObjDir}bdf.c.x" \xB6
- "{ObjDir}cff.c.x" \xB6
- "{ObjDir}type1cid.c.x" \xB6
- "{ObjDir}gxvalid.c.x" \xB6
- "{ObjDir}ftgzip.c.x" \xB6
- "{ObjDir}ftbzip2.c.x" \xB6
- "{ObjDir}ftlzw.c.x" \xB6
- "{ObjDir}otvalid.c.x" \xB6
- "{ObjDir}pcf.c.x" \xB6
- "{ObjDir}pfr.c.x" \xB6
- "{ObjDir}psaux.c.x" \xB6
- "{ObjDir}pshinter.c.x" \xB6
- "{ObjDir}psmodule.c.x" \xB6
- "{ObjDir}raster.c.x" \xB6
- "{ObjDir}sfnt.c.x" \xB6
- "{ObjDir}smooth.c.x" \xB6
- "{ObjDir}truetype.c.x" \xB6
- "{ObjDir}type1.c.x" \xB6
- "{ObjDir}type42.c.x" \xB6
- "{ObjDir}winfnt.c.x"
-
-
-### Libraries ###
-
-LibFiles-PPC =
-
-
-### Default Rules ###
-
-.c.x \xC4 .c {\xA5MondoBuild\xA5}
- {PPCC} {depDir}{default}.c -o {targDir}{default}.c.x {PPCCOptions}
-
-
-### Build Rules ###
-
-:builds:mac:ftbase.c \xC4\xC4 :src:base:ftbase.c
- Duplicate :src:base:ftbase.c :builds:mac:ftbase.c
-
-"{ObjDir}ftbase.c.x" \xC4\xC4 :builds:mac:ftbase.c
- {PPCC} :builds:mac:ftbase.c -o {ObjDir}ftbase.c.x \xB6
- -i :builds:mac: \xB6
- -i :src:base: \xB6
- {PPCCOptions}
-
-FreeType.ppc_carbon \xC4\xC4 FreeType.ppc_carbon.o
-
-FreeType.ppc_carbon.o \xC4\xC4 {ObjFiles-PPC} {LibFiles-PPC} {\xA5MondoBuild\xA5}
- PPCLink \xB6
- -o {Targ} \xB6
- {ObjFiles-PPC} \xB6
- {LibFiles-PPC} \xB6
- {Sym-PPC} \xB6
- -mf -d \xB6
- -t 'XCOF' \xB6
- -c 'MPS ' \xB6
- -xm l
-
-
-
-### Required Dependencies ###
-
-"{ObjDir}autofit.c.x" \xC4 :src:autofit:autofit.c
-# "{ObjDir}ftbase.c.x" \xC4 :builds:mac:ftbase.c
-"{ObjDir}ftbbox.c.x" \xC4 :src:base:ftbbox.c
-"{ObjDir}ftbdf.c.x" \xC4 :src:base:ftbdf.c
-"{ObjDir}ftbitmap.c.x" \xC4 :src:base:ftbitmap.c
-"{ObjDir}ftdebug.c.x" \xC4 :src:base:ftdebug.c
-"{ObjDir}ftfntfmt.c.x" \xC4 :src:base:ftfntfmt.c
-"{ObjDir}ftfstype.c.x" \xC4 :src:base:ftfstype.c
-"{ObjDir}ftglyph.c.x" \xC4 :src:base:ftglyph.c
-"{ObjDir}ftgxval.c.x" \xC4 :src:base:ftgxval.c
-"{ObjDir}ftinit.c.x" \xC4 :src:base:ftinit.c
-"{ObjDir}ftmm.c.x" \xC4 :src:base:ftmm.c
-"{ObjDir}ftotval.c.x" \xC4 :src:base:ftotval.c
-"{ObjDir}ftpfr.c.x" \xC4 :src:base:ftpfr.c
-"{ObjDir}ftstroke.c.x" \xC4 :src:base:ftstroke.c
-"{ObjDir}ftsynth.c.x" \xC4 :src:base:ftsynth.c
-"{ObjDir}ftsystem.c.x" \xC4 :src:base:ftsystem.c
-"{ObjDir}fttype1.c.x" \xC4 :src:base:fttype1.c
-"{ObjDir}ftwinfnt.c.x" \xC4 :src:base:ftwinfnt.c
-"{ObjDir}ftcache.c.x" \xC4 :src:cache:ftcache.c
-"{ObjDir}bdf.c.x" \xC4 :src:bdf:bdf.c
-"{ObjDir}cff.c.x" \xC4 :src:cff:cff.c
-"{ObjDir}type1cid.c.x" \xC4 :src:cid:type1cid.c
-"{ObjDir}gxvalid.c.x" \xC4 :src:gxvalid:gxvalid.c
-"{ObjDir}ftgzip.c.x" \xC4 :src:gzip:ftgzip.c
-"{ObjDir}ftbzip2.c.x" \xC4 :src:bzip2:ftbzip2.c
-"{ObjDir}ftlzw.c.x" \xC4 :src:lzw:ftlzw.c
-"{ObjDir}otvalid.c.x" \xC4 :src:otvalid:otvalid.c
-"{ObjDir}pcf.c.x" \xC4 :src:pcf:pcf.c
-"{ObjDir}pfr.c.x" \xC4 :src:pfr:pfr.c
-"{ObjDir}psaux.c.x" \xC4 :src:psaux:psaux.c
-"{ObjDir}pshinter.c.x" \xC4 :src:pshinter:pshinter.c
-"{ObjDir}psmodule.c.x" \xC4 :src:psnames:psmodule.c
-"{ObjDir}raster.c.x" \xC4 :src:raster:raster.c
-"{ObjDir}sfnt.c.x" \xC4 :src:sfnt:sfnt.c
-"{ObjDir}smooth.c.x" \xC4 :src:smooth:smooth.c
-"{ObjDir}truetype.c.x" \xC4 :src:truetype:truetype.c
-"{ObjDir}type1.c.x" \xC4 :src:type1:type1.c
-"{ObjDir}type42.c.x" \xC4 :src:type42:type42.c
-"{ObjDir}winfnt.c.x" \xC4 :src:winfonts:winfnt.c
-
-
-### Optional Dependencies ###
-### Build this target to generate "include file" dependencies. ###
-
-Dependencies \xC4 $OutOfDate
- MakeDepend \xB6
- -append {MAKEFILE} \xB6
- -ignore "{CIncludes}" \xB6
- -objdir "{ObjDir}" \xB6
- -objext .x \xB6
- {Includes} \xB6
- {SrcFiles}
-
-
diff --git a/builds/mac/FreeType.ppc_classic.make.txt b/builds/mac/FreeType.ppc_classic.make.txt
deleted file mode 100644
index 0627eeaa9..000000000
--- a/builds/mac/FreeType.ppc_classic.make.txt
+++ /dev/null
@@ -1,216 +0,0 @@
-# File: FreeType.ppc_classic.make
-# Target: FreeType.ppc_classic
-# Created: Thursday, October 27, 2005 07:42:43 PM
-
-
-MAKEFILE = FreeType.ppc_classic.make
-\xA5MondoBuild\xA5 = {MAKEFILE} # Make blank to avoid rebuilds when makefile is modified
-
-ObjDir = :objs:
-Includes = \xB6
- -ansi strict \xB6
- -includes unix \xB6
- -i :include: \xB6
- -i :src: \xB6
- -i :include:freetype:config:
-
-Sym-PPC = -sym off
-
-PPCCOptions = \xB6
- -d FT_MACINTOSH=1 \xB6
- -d HAVE_FSSPEC=1 \xB6
- -d HAVE_FSREF=0 \xB6
- -d HAVE_QUICKDRAW_TOOLBOX=1 \xB6
- -d HAVE_QUICKDRAW_CARBON=0 \xB6
- -d HAVE_ATS=0 \xB6
- -d FT2_BUILD_LIBRARY \xB6
- -d FT_CONFIG_CONFIG_H="<ftconfig.h>" \xB6
- -d FT_CONFIG_MODULES_H="<ftmodule.h>" \xB6
- {Includes} {Sym-PPC}
-
-
-### Source Files ###
-
-SrcFiles = \xB6
- :src:autofit:autofit.c \xB6
- :builds:mac:ftbase.c \xB6
- :src:base:ftbbox.c \xB6
- :src:base:ftbdf.c \xB6
- :src:base:ftbitmap.c \xB6
- :src:base:ftdebug.c \xB6
- :src:base:ftfntfmt.c \xB6
- :src:base:ftfstype.c \xB6
- :src:base:ftglyph.c \xB6
- :src:base:ftgxval.c \xB6
- :src:base:ftinit.c \xB6
- :src:base:ftmm.c \xB6
- :src:base:ftotval.c \xB6
- :src:base:ftpfr.c \xB6
- :src:base:ftstroke.c \xB6
- :src:base:ftsynth.c \xB6
- :src:base:ftsystem.c \xB6
- :src:base:fttype1.c \xB6
- :src:base:ftwinfnt.c \xB6
- :src:cache:ftcache.c \xB6
- :src:bdf:bdf.c \xB6
- :src:cff:cff.c \xB6
- :src:cid:type1cid.c \xB6
- :src:gxvalid:gxvalid.c \xB6
- :src:gzip:ftgzip.c \xB6
- :src:bzip2:ftbzip2.c \xB6
- :src:lzw:ftlzw.c \xB6
- :src:otvalid:otvalid.c \xB6
- :src:pcf:pcf.c \xB6
- :src:pfr:pfr.c \xB6
- :src:psaux:psaux.c \xB6
- :src:pshinter:pshinter.c \xB6
- :src:psnames:psmodule.c \xB6
- :src:raster:raster.c \xB6
- :src:sfnt:sfnt.c \xB6
- :src:smooth:smooth.c \xB6
- :src:truetype:truetype.c \xB6
- :src:type1:type1.c \xB6
- :src:type42:type42.c \xB6
- :src:winfonts:winfnt.c
-
-
-### Object Files ###
-
-ObjFiles-PPC = \xB6
- "{ObjDir}autofit.c.x" \xB6
- "{ObjDir}ftbase.c.x" \xB6
- "{ObjDir}ftbbox.c.x" \xB6
- "{ObjDir}ftbdf.c.x" \xB6
- "{ObjDir}ftbitmap.c.x" \xB6
- "{ObjDir}ftdebug.c.x" \xB6
- "{ObjDir}ftfntfmt.c.x" \xB6
- "{ObjDir}ftfstype.c.x" \xB6
- "{ObjDir}ftglyph.c.x" \xB6
- "{ObjDir}ftgxval.c.x" \xB6
- "{ObjDir}ftinit.c.x" \xB6
- "{ObjDir}ftmm.c.x" \xB6
- "{ObjDir}ftotval.c.x" \xB6
- "{ObjDir}ftpfr.c.x" \xB6
- "{ObjDir}ftstroke.c.x" \xB6
- "{ObjDir}ftsynth.c.x" \xB6
- "{ObjDir}ftsystem.c.x" \xB6
- "{ObjDir}fttype1.c.x" \xB6
- "{ObjDir}ftwinfnt.c.x" \xB6
- "{ObjDir}ftcache.c.x" \xB6
- "{ObjDir}bdf.c.x" \xB6
- "{ObjDir}cff.c.x" \xB6
- "{ObjDir}type1cid.c.x" \xB6
- "{ObjDir}gxvalid.c.x" \xB6
- "{ObjDir}ftgzip.c.x" \xB6
- "{ObjDir}ftbzip2.c.x" \xB6
- "{ObjDir}ftlzw.c.x" \xB6
- "{ObjDir}otvalid.c.x" \xB6
- "{ObjDir}pcf.c.x" \xB6
- "{ObjDir}pfr.c.x" \xB6
- "{ObjDir}psaux.c.x" \xB6
- "{ObjDir}pshinter.c.x" \xB6
- "{ObjDir}psmodule.c.x" \xB6
- "{ObjDir}raster.c.x" \xB6
- "{ObjDir}sfnt.c.x" \xB6
- "{ObjDir}smooth.c.x" \xB6
- "{ObjDir}truetype.c.x" \xB6
- "{ObjDir}type1.c.x" \xB6
- "{ObjDir}type42.c.x" \xB6
- "{ObjDir}winfnt.c.x"
-
-
-### Libraries ###
-
-LibFiles-PPC =
-
-
-### Default Rules ###
-
-.c.x \xC4 .c {\xA5MondoBuild\xA5}
- {PPCC} {depDir}{default}.c -o {targDir}{default}.c.x {PPCCOptions}
-
-
-### Build Rules ###
-
-:builds:mac:ftbase.c \xC4\xC4 :src:base:ftbase.c
- Duplicate :src:base:ftbase.c :builds:mac:ftbase.c
-
-"{ObjDir}ftbase.c.x" \xC4\xC4 :builds:mac:ftbase.c
- {PPCC} :builds:mac:ftbase.c -o "{ObjDir}ftbase.c.x" \xB6
- -i :builds:mac: \xB6
- -i :src:base: \xB6
- {PPCCOptions}
-
-FreeType.ppc_classic \xC4\xC4 FreeType.ppc_classic.o
-
-FreeType.ppc_classic.o \xC4\xC4 {ObjFiles-PPC} {LibFiles-PPC} {\xA5MondoBuild\xA5}
- PPCLink \xB6
- -o {Targ} \xB6
- {ObjFiles-PPC} \xB6
- {LibFiles-PPC} \xB6
- {Sym-PPC} \xB6
- -mf -d \xB6
- -t 'XCOF' \xB6
- -c 'MPS ' \xB6
- -xm l
-
-
-
-### Required Dependencies ###
-
-"{ObjDir}autofit.c.x" \xC4 :src:autofit:autofit.c
-# "{ObjDir}ftbase.c.x" \xC4 :builds:mac:ftbase.c
-"{ObjDir}ftbbox.c.x" \xC4 :src:base:ftbbox.c
-"{ObjDir}ftbdf.c.x" \xC4 :src:base:ftbdf.c
-"{ObjDir}ftbitmap.c.x" \xC4 :src:base:ftbitmap.c
-"{ObjDir}ftdebug.c.x" \xC4 :src:base:ftdebug.c
-"{ObjDir}ftfntfmt.c.x" \xC4 :src:base:ftfntfmt.c
-"{ObjDir}ftfstype.c.x" \xC4 :src:base:ftfstype.c
-"{ObjDir}ftglyph.c.x" \xC4 :src:base:ftglyph.c
-"{ObjDir}ftgxval.c.x" \xC4 :src:base:ftgxval.c
-"{ObjDir}ftinit.c.x" \xC4 :src:base:ftinit.c
-"{ObjDir}ftmm.c.x" \xC4 :src:base:ftmm.c
-"{ObjDir}ftotval.c.x" \xC4 :src:base:ftotval.c
-"{ObjDir}ftpfr.c.x" \xC4 :src:base:ftpfr.c
-"{ObjDir}ftstroke.c.x" \xC4 :src:base:ftstroke.c
-"{ObjDir}ftsynth.c.x" \xC4 :src:base:ftsynth.c
-"{ObjDir}ftsystem.c.x" \xC4 :src:base:ftsystem.c
-"{ObjDir}fttype1.c.x" \xC4 :src:base:fttype1.c
-"{ObjDir}ftwinfnt.c.x" \xC4 :src:base:ftwinfnt.c
-"{ObjDir}ftcache.c.x" \xC4 :src:cache:ftcache.c
-"{ObjDir}bdf.c.x" \xC4 :src:bdf:bdf.c
-"{ObjDir}cff.c.x" \xC4 :src:cff:cff.c
-"{ObjDir}type1cid.c.x" \xC4 :src:cid:type1cid.c
-"{ObjDir}gxvalid.c.x" \xC4 :src:gxvalid:gxvalid.c
-"{ObjDir}ftgzip.c.x" \xC4 :src:gzip:ftgzip.c
-"{ObjDir}ftbzip2.c.x" \xC4 :src:bzip2:ftbzip2.c
-"{ObjDir}ftlzw.c.x" \xC4 :src:lzw:ftlzw.c
-"{ObjDir}otvalid.c.x" \xC4 :src:otvalid:otvalid.c
-"{ObjDir}pcf.c.x" \xC4 :src:pcf:pcf.c
-"{ObjDir}pfr.c.x" \xC4 :src:pfr:pfr.c
-"{ObjDir}psaux.c.x" \xC4 :src:psaux:psaux.c
-"{ObjDir}pshinter.c.x" \xC4 :src:pshinter:pshinter.c
-"{ObjDir}psmodule.c.x" \xC4 :src:psnames:psmodule.c
-"{ObjDir}raster.c.x" \xC4 :src:raster:raster.c
-"{ObjDir}sfnt.c.x" \xC4 :src:sfnt:sfnt.c
-"{ObjDir}smooth.c.x" \xC4 :src:smooth:smooth.c
-"{ObjDir}truetype.c.x" \xC4 :src:truetype:truetype.c
-"{ObjDir}type1.c.x" \xC4 :src:type1:type1.c
-"{ObjDir}type42.c.x" \xC4 :src:type42:type42.c
-"{ObjDir}winfnt.c.x" \xC4 :src:winfonts:winfnt.c
-
-
-
-### Optional Dependencies ###
-### Build this target to generate "include file" dependencies. ###
-
-Dependencies \xC4 $OutOfDate
- MakeDepend \xB6
- -append {MAKEFILE} \xB6
- -ignore "{CIncludes}" \xB6
- -objdir "{ObjDir}" \xB6
- -objext .x \xB6
- {Includes} \xB6
- {SrcFiles}
-
-
diff --git a/builds/mac/README b/builds/mac/README
deleted file mode 100644
index f58e47d4a..000000000
--- a/builds/mac/README
+++ /dev/null
@@ -1,401 +0,0 @@
-This folder contains
-
- * Makefile skeletons for Apple MPW (Macintosh's Programmer's Workshop)
-
- * Python script to generate MPW makefile from skeleton
-
- * Metrowerks CodeWarrior 9.0 project file in XML format
-
-------------------------------------------------------------
-
-1. What is this
----------------
-
-Files in this directory are designed to build FreeType
-running on classic MacOS. To build FreeType running on
-Mac OS X, build as the system is UNIX.
-
-However, Mac OS X is most useful to manipulate files in
-vanilla FreeType to fit classic MacOS.
-
-The information about MacOS specific API is written in
-appendix of this document.
-
-2. Requirement
---------------
-
-You can use MPW: a free-charged developer environment
-by Apple, or CodeWarrior: a commercial developer
-environment by Metrowerks. GCC for MPW and Symantec
-"Think C" are not tested at present.
-
-
- 2-1. Apple MPW
- --------------
-
- Following C compilers are tested:
-
- m68k target: Apple SC 8.9.0d3e1
- ppc target: Apple MrC 5.0.0d3c1
-
- The final MPW-GM (official release on 1999/Dec) is too
- old and cannot compile FreeType, because bundled C
- compilers cannot search header files in sub directories.
- Updating by the final MPW-PR (pre-release on 2001/Feb)
- is required.
-
- Required files are downloadable from:
-
- http://developer.apple.com/tools/mpw-tools/index.html
-
- Also you can find documents how to update by MPW-PR.
-
- Python is required to restore MPW makefiles from the
- skeletons. Python bundled to Mac OS X is enough. For
- classic MacOS, MacPython is available:
-
- http://homepages.cwi.nl/~jack/macpython/
-
- MPW requires all files are typed by resource fork.
- ResEdit bundled to MPW is enough. In Mac OS X,
- /Developer/Tools/SetFile of DevTool is useful to
- manipulate from commandline.
-
- 2-2. Metrowerks CodeWarrior
- ---------------------------
-
- XML project file is generated and tested by
- CodeWarrior 9.0. Older versions are not tested
- at all. At present, static library for ppc target
- is available in the project file.
-
-
-3. How to build
----------------
-
- 3-1. Apple MPW
- --------------
- Detailed building procedure by Apple MPW is
- described in following.
-
- 3-1-1. Generate MPW makefiles from the skeletons
- ------------------------------------------------
-
- Here are 4 skeletons for following targets are
- included.
-
- - FreeType.m68k_far.make.txt
- Ancient 32bit binary executable format for
- m68k MacOS: System 6, with 32bit addressing
- mode (far-pointer-model) So-called "Toolbox"
- API is used.
-
- - FreeType.m68k_cfm.make.txt
- CFM binary executable format for m68k MacOS:
- System 7. So-called "Toolbox" API is used.
-
- - FreeType.ppc_classic.make.txt
- CFM binary executable format for ppc MacOS:
- System 7, MacOS 8, MacOS 9. So-called "Toolbox"
- API is used.
-
- - FreeType.ppc_carbon.make.txt
- CFM binary executable format for ppc MacOS:
- MacOS 9. Carbon API is used.
-
- At present, static library is only supported,
- although targets except of m68k_far are capable
- to use shared library.
-
- MPW makefile syntax uses 8bit characters. To keep
- from violating them during version control, here
- we store skeletons in pure ASCII format. You must
- generate MPW makefile by Python script ascii2mpw.py.
-
- In Mac OS X terminal, you can convert as:
-
- python builds/mac/ascii2mpw.py \
- < builds/mac/FreeType.m68k_far.make.txt \
- > FreeType.m68k_far.make
-
- The skeletons are designed to use in the top
- directory where there are builds, include, src etc.
- You must name the generated MPW makefile by removing
- ".txt" from source skeleton name.
-
- 3-1-2. Add resource forks to related files
- ------------------------------------------
-
- MPW's Make and C compilers cannot recognize files
- without resource fork. You have to add resource
- fork to the files that MPW uses. In Mac OS X
- terminal of the system, you can do as:
-
- find . -name '*.[ch]' -exec \
- /Developer/Tools/SetFile -a l -c "MPS " -t TEXT \{\} \;
-
- find . -name '*.make' -exec \
- /Developer/Tools/SetFile -a l -c "MPS " -t TEXT \{\} \;
-
-
- 3-1-3. Open MPW shell and build
- -------------------------------
-
- Open MPW shell and go to the top directory that
- FreeType sources are extracted (MPW makefile must
- be located in there), from "Set Directory" in
- "Directory" menu.
-
- Choose "Build" from "Build" menu, and type the
- name of project by removing ".make" from MPW
- makefile, as: FreeType.m68k_far
-
- If building is successfully finished, you can find
- built library in objs/ directory.
-
-
- 3-2. Metrowerks CodeWarrior
- ---------------------------
-
- Detailed building procedure by Metrowerks
- CodeWarrior (CW) 9.0 is described in following.
-
- 3-2-1. Import XML project file
- ------------------------------
-
- CW XML project file is not ready for double-
- click. Start CodeWarrior IDE, and choose
- "Import project" in "File" menu. Choose XML
- project file: builds/mac/ftlib.prj.xml.
- In next, you will be asked where to save CW
- native project file: you must choose
- "builds/mac/ftlib.prj". The project file is
- designed with relative path from there. After
- CW native project file is generated, it is
- automatically loaded, small project window
- titled "ftlib.prj" is displayed.
-
- 3-2-2. Building
- ---------------
- Choose "Make" from "Project" menu. If building
- is successfully finished, you can find built
- library at objs/FreeTypeLib.
-
-4. TODO
--------
-
- 4-1. All modules should be included
- -----------------------------------
-
- At present, MPW makefiles and CW project file are
- just updated versions of these by Leonard. Some
- modules are added after the last maintenance, they
- are not included.
-
- 4-2. Working test with ftdemos
- ------------------------------
-
- At present, MPW makefiles and CW project file can
- build FreeType for classic MacOS. But their working
- behaviours are not tested at all. Building ftdemos
- for classic MacOS and working test is required.
-
- 4-3. Porting Jam onto MPW
- -------------------------
-
- FreeType uses Jam (and FT-Jam) for unified cross-
- platform building tool. At present, Jam is not ported
- to MPW. To update classic MacOS support easily,
- building by Jam is expected on MPW.
-
-
-APPENDIX I
-----------
-
- A-1. Framework dependencies
- ---------------------------
-
- src/base/ftmac.c adds two Mac-specific features to
- FreeType. These features are based on MacOS libraries.
-
- * accessing resource-fork font
- The fonts for classic MacOS store their graphical data
- in resource forks which cannot be accessed via ANSI C
- functions. FreeType2 provides functions to handle such
- resource fork fonts, they are based on File Manager
- framework of MacOS. In addition, HFS and HFS+ file
- system driver of Linux is supported. Following
- functions are for this purpose.
-
- FT_New_Face_From_Resource()
- FT_New_Face_From_FSSpec()
- FT_New_Face_From_FSRef()
-
- * resolving font name to font file
- The font menu of MacOS application prefers font name
- written in FOND resource than sfnt resource. FreeType2
- provides functions to find font file by name in MacOS
- application, they are based on QuickDraw Font Manager
- and Apple Type Service framework of MacOS.
-
- FT_GetFile_From_Mac_Name()
- FT_GetFile_From_Mac_ATS_Name()
-
- Working functions for each MacOS are summarized as
- following.
-
- upto MacOS 6:
- not tested (you have to obtain MPW 2.x)
-
- MacOS 7.x, 8.x, 9.x (without CarbonLib):
- FT_GetFile_From_Mac_Name()
- FT_New_Face_From_Resource()
- FT_New_Face_From_FSSpec()
-
- MacOS 9.x (with CarbonLib):
- FT_GetFile_From_Mac_Name()
- FT_New_Face_From_Resource()
- FT_New_Face_From_FSSpec()
- FT_New_Face_From_FSRef()
-
- Mac OS X upto 10.4.x:
- FT_GetFile_From_Mac_Name() deprecated
- FT_New_Face_From_FSSpec() deprecated
- FT_GetFile_From_Mac_ATS_Name() deprecated?
- FT_New_Face_From_FSRef()
-
- A-2. Deprecated Functions
- -------------------------
-
- A-2-1. FileManager
- ------------------
-
- For convenience to write MacOS application, ftmac.c
- provides functions to specify a file by FSSpec and FSRef,
- because the file identification pathname had ever been
- unrecommended method in MacOS programming.
-
- Toward to MacOS X 10.4 & 5, Carbon functions using FSSpec
- datatype is noticed as deprecated, and recommended to
- migrate to FSRef datatype. The big differences of FSRef
- against FSSpec are explained in Apple TechNotes 2078.
-
- http://developer.apple.com/technotes/tn2002/tn2078.html
-
- - filename length: the max length of file
- name of FSRef is 255 chars (it is limit of HFS+),
- that of FSSpec is 31 chars (it is limit of HFS).
-
- - filename encoding: FSSpec is localized by
- legacy encoding for each language system,
- FSRef is Unicode enabled.
-
- A-2-2. FontManager
- ------------------
-
- Following functions receive QuickDraw fontname:
-
- FT_GetFile_From_Mac_Name()
-
- QuickDraw is deprecated and replaced by Quartz
- since Mac OS X 10.4. They are still kept for
- backward compatibility. By undefinition of
- HAVE_QUICKDRAW in building, you can change these
- functions to return FT_Err_Unimplemented always.
-
- Replacement functions are added for migration.
-
- FT_GetFile_From_Mac_ATS_Name()
-
- They are usable on Mac OS X only. On older systems,
- these functions return FT_Err_Unimplemented always.
-
- The detailed incompatibilities and possibility
- of FontManager emulation without QuickDraw is
- explained in
-
- http://www.gyve.org/~mpsuzuki/ats_benchmark.html
-
- A-3. Framework Availabilities
- -----------------------------
-
- The framework of MacOS are often revised, especially
- when new format of binary executable is introduced.
- Following table is the minimum version of frameworks
- to use functions used in FreeType2. The table is
- extracted from MPW header files for assembly language.
-
- *** NOTE ***
- The conditional definition of available data type
- in MPW compiler is insufficient. You can compile
- program using FSRef data type for older systems
- (MacOS 7, 8) that don't know FSRef data type.
-
-
- +-------------------+-----------------------------+
- CPU | mc680x0 | PowerPC |
- +---------+---------+---------+---------+---------+
- Binary Executable Format | Classic | 68K-CFM | CFM | CFM | Mach-O |
- +---------+---------+---------+---------+---------+
- Framework API | Toolbox | Toolbox | Toolbox | Carbon | Carbon |
- +---------+---------+---------+---------+---------+
-
- +---------+---------+---------+---------+---------+
- | ?(*) |Interface|Interface|CarbonLib|Mac OS X |
- | |Lib |Lib | | |
-* Files.h +---------+---------+---------+---------+---------+
-PBGetFCBInfoSync() | o | 7.1- | 7.1- | 1.0- | o |
-FSMakeFSSpec() | o | 7.1- | 7.1- | 1.0- | o |
-FSGetForkCBInfo() | o | (**) | 9.0- | 1.0- | o |
-FSpMakeFSRef() | o | (**) | 9.0- | 1.0- | o |
-FSGetCatalogInfo() | o | (**) | 9.0- | 1.0- | -10.3 |
-FSPathMakeRef() | x | x | x | 1.1- | -10.3 |
- +---------+---------+---------+---------+---------+
-
- +---------+---------+---------+---------+---------+
- | ?(*) |Font |Font |CarbonLib|Mac OS X |
- | |Manager |Manager | | |
-* Fonts.h +---------+---------+---------+---------+---------+
-FMCreateFontFamilyIterator() | x | x | 9.0- | 1.0- | -10.3 |
-FMDisposeFontFamilyIterator() | x | x | 9.0- | 1.0- | -10.3 |
-FMGetNextFontFamily() | x | x | 9.0- | 1.0- | -10.3 |
-FMGetFontFamilyName() | x | x | 9.0- | 1.0- | -10.3 |
-FMCreateFontFamilyInstanceIterator() | x | x | 9.0- | 1.0- | -10.3 |
-FMDisposeFontFamilyInstanceIterator() | x | x | 9.0- | 1.0- | -10.3 |
-FMGetNextFontFamilyInstance() | x | x | 9.0- | 1.0- | -10.3 |
- +---------+---------+---------+---------+---------+
-
- +---------+---------+---------+---------+---------+
- | - | - | - |CarbonLib|Mac OS X |
-* ATSFont.h (***) +---------+---------+---------+---------+---------+
-ATSFontFindFromName() | x | x | x | x | o |
-ATSFontGetFileSpecification() | x | x | x | x | o |
- +---------+---------+---------+---------+---------+
-
- (*)
- In the "Classic": the original binary executable
- format, these framework functions are directly
- transformed to MacOS system call. Therefore, the
- exact availability should be checked by running
- system.
-
- (**)
- InterfaceLib is bundled to MacOS and its version
- is usually equal to MacOS. There's no separate
- update for InterfaceLib. It is supposed that
- there's no InterfaceLib 9.x for m68k platforms.
- In fact, these functions are FSRef dependent.
-
- (***)
- ATSUI framework is available on ATSUnicode 8.5 on
- ppc Toolbox CFM, CarbonLib 1.0 too. But its base:
- ATS font manager is not published in these versions.
-
-------------------------------------------------------------
-Last update: 2013-Nov-03.
-
-Currently maintained by
- suzuki toshiya, <mpsuzuki@hiroshima-u.ac.jp>
-Originally prepared by
- Leonard Rosenthol, <leonardr@lazerware.com>
- Just van Rossum, <just@letterror.com>
diff --git a/builds/mac/ascii2mpw.py b/builds/mac/ascii2mpw.py
deleted file mode 100755
index ad32b2197..000000000
--- a/builds/mac/ascii2mpw.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-import sys
-import string
-
-if len( sys.argv ) == 1 :
- for asc_line in sys.stdin.readlines():
- mpw_line = string.replace(asc_line, "\\xA5", "\245")
- mpw_line = string.replace(mpw_line, "\\xB6", "\266")
- mpw_line = string.replace(mpw_line, "\\xC4", "\304")
- mpw_line = string.replace(mpw_line, "\\xC5", "\305")
- mpw_line = string.replace(mpw_line, "\\xFF", "\377")
- mpw_line = string.replace(mpw_line, "\n", "\r")
- mpw_line = string.replace(mpw_line, "\\n", "\n")
- sys.stdout.write(mpw_line)
-elif sys.argv[1] == "-r" :
- for mpw_line in sys.stdin.readlines():
- asc_line = string.replace(mpw_line, "\n", "\\n")
- asc_line = string.replace(asc_line, "\r", "\n")
- asc_line = string.replace(asc_line, "\245", "\\xA5")
- asc_line = string.replace(asc_line, "\266", "\\xB6")
- asc_line = string.replace(asc_line, "\304", "\\xC4")
- asc_line = string.replace(asc_line, "\305", "\\xC5")
- asc_line = string.replace(asc_line, "\377", "\\xFF")
- sys.stdout.write(asc_line)
diff --git a/builds/mac/freetype-Info.plist b/builds/mac/freetype-Info.plist
deleted file mode 100644
index b3d114dad..000000000
--- a/builds/mac/freetype-Info.plist
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
- "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-
-<plist version="1.0">
-
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
-
- <key>CFBundleExecutable</key>
- <string>FreeType</string>
-
- <key>CFBundleGetInfoString</key>
- <string>FreeType ${PROJECT_VERSION}</string>
-
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
-
- <key>CFBundleName</key>
- <string>FreeType</string>
-
- <key>CFBundlePackageType</key>
- <string>FMWK</string>
-
- <key>CFBundleShortVersionString</key>
- <string>${PROJECT_VERSION}</string>
-
- <key>CFBundleSignature</key>
- <string>????</string>
-
- <key>CFBundleVersion</key>
- <string>${PROJECT_VERSION}</string>
-</dict>
-
-</plist>
diff --git a/builds/mac/ftlib.prj.xml b/builds/mac/ftlib.prj.xml
deleted file mode 100644
index cbbc45ee5..000000000
--- a/builds/mac/ftlib.prj.xml
+++ /dev/null
@@ -1,1194 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-<?codewarrior exportversion="1.0.1" ideversion="5.0" ?>
-
-<!DOCTYPE PROJECT [
-<!ELEMENT PROJECT (TARGETLIST, TARGETORDER, GROUPLIST, DESIGNLIST?)>
-<!ELEMENT TARGETLIST (TARGET+)>
-<!ELEMENT TARGET (NAME, SETTINGLIST, FILELIST?, LINKORDER?, SEGMENTLIST?, OVERLAYGROUPLIST?, SUBTARGETLIST?, SUBPROJECTLIST?, FRAMEWORKLIST?, PACKAGEACTIONSLIST?)>
-<!ELEMENT NAME (#PCDATA)>
-<!ELEMENT USERSOURCETREETYPE (#PCDATA)>
-<!ELEMENT PATH (#PCDATA)>
-<!ELEMENT FILELIST (FILE*)>
-<!ELEMENT FILE (PATHTYPE, PATHROOT?, ACCESSPATH?, PATH, PATHFORMAT?, ROOTFILEREF?, FILEKIND?, FILEFLAGS?)>
-<!ELEMENT PATHTYPE (#PCDATA)>
-<!ELEMENT PATHROOT (#PCDATA)>
-<!ELEMENT ACCESSPATH (#PCDATA)>
-<!ELEMENT PATHFORMAT (#PCDATA)>
-<!ELEMENT ROOTFILEREF (PATHTYPE, PATHROOT?, ACCESSPATH?, PATH, PATHFORMAT?)>
-<!ELEMENT FILEKIND (#PCDATA)>
-<!ELEMENT FILEFLAGS (#PCDATA)>
-<!ELEMENT FILEREF (TARGETNAME?, PATHTYPE, PATHROOT?, ACCESSPATH?, PATH, PATHFORMAT?)>
-<!ELEMENT TARGETNAME (#PCDATA)>
-<!ELEMENT SETTINGLIST ((SETTING|PANELDATA)+)>
-<!ELEMENT SETTING (NAME?, (VALUE|(SETTING+)))>
-<!ELEMENT PANELDATA (NAME, VALUE)>
-<!ELEMENT VALUE (#PCDATA)>
-<!ELEMENT LINKORDER (FILEREF*)>
-<!ELEMENT SEGMENTLIST (SEGMENT+)>
-<!ELEMENT SEGMENT (NAME, ATTRIBUTES?, FILEREF*)>
-<!ELEMENT ATTRIBUTES (#PCDATA)>
-<!ELEMENT OVERLAYGROUPLIST (OVERLAYGROUP+)>
-<!ELEMENT OVERLAYGROUP (NAME, BASEADDRESS, OVERLAY*)>
-<!ELEMENT BASEADDRESS (#PCDATA)>
-<!ELEMENT OVERLAY (NAME, FILEREF*)>
-<!ELEMENT SUBTARGETLIST (SUBTARGET+)>
-<!ELEMENT SUBTARGET (TARGETNAME, ATTRIBUTES?, FILEREF?)>
-<!ELEMENT SUBPROJECTLIST (SUBPROJECT+)>
-<!ELEMENT SUBPROJECT (FILEREF, SUBPROJECTTARGETLIST)>
-<!ELEMENT SUBPROJECTTARGETLIST (SUBPROJECTTARGET*)>
-<!ELEMENT SUBPROJECTTARGET (TARGETNAME, ATTRIBUTES?, FILEREF?)>
-<!ELEMENT FRAMEWORKLIST (FRAMEWORK+)>
-<!ELEMENT FRAMEWORK (FILEREF, LIBRARYFILE?, VERSION?)>
-<!ELEMENT PACKAGEACTIONSLIST (PACKAGEACTION+)>
-<!ELEMENT PACKAGEACTION (#PCDATA)>
-<!ELEMENT LIBRARYFILE (FILEREF)>
-<!ELEMENT VERSION (#PCDATA)>
-<!ELEMENT TARGETORDER (ORDEREDTARGET|ORDEREDDESIGN)*>
-<!ELEMENT ORDEREDTARGET (NAME)>
-<!ELEMENT ORDEREDDESIGN (NAME, ORDEREDTARGET+)>
-<!ELEMENT GROUPLIST (GROUP|FILEREF)*>
-<!ELEMENT GROUP (NAME, (GROUP|FILEREF)*)>
-<!ELEMENT DESIGNLIST (DESIGN+)>
-<!ELEMENT DESIGN (NAME, DESIGNDATA)>
-<!ELEMENT DESIGNDATA (#PCDATA)>
-]>
-
-<PROJECT>
- <TARGETLIST>
- <TARGET>
- <NAME>FreeTypeLib</NAME>
- <SETTINGLIST>
-
- <!-- Settings for "Source Trees" panel -->
- <SETTING><NAME>UserSourceTrees</NAME><VALUE></VALUE></SETTING>
-
- <!-- Settings for "Access Paths" panel -->
- <SETTING><NAME>AlwaysSearchUserPaths</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>InterpretDOSAndUnixPaths</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>RequireFrameworkStyleIncludes</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>SourceRelativeIncludes</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>UserSearchPaths</NAME>
- <SETTING>
- <SETTING><NAME>SearchPath</NAME>
- <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
- <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>SearchPath</NAME>
- <SETTING><NAME>Path</NAME><VALUE>:::include:</VALUE></SETTING>
- <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>SearchPath</NAME>
- <SETTING><NAME>Path</NAME><VALUE>:::src:</VALUE></SETTING>
- <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>SearchPath</NAME>
- <SETTING><NAME>Path</NAME><VALUE>::</VALUE></SETTING>
- <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
- </SETTING>
- </SETTING>
- <SETTING><NAME>SystemSearchPaths</NAME>
- <SETTING>
- <SETTING><NAME>SearchPath</NAME>
- <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
- <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>CodeWarrior</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
- </SETTING>
- </SETTING>
-
- <!-- Settings for "Debugger Runtime" panel -->
- <SETTING><NAME>MWRuntimeSettings_WorkingDirectory</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>MWRuntimeSettings_CommandLine</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>MWRuntimeSettings_HostApplication</NAME>
- <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>MWRuntimeSettings_EnvVars</NAME><VALUE></VALUE></SETTING>
-
- <!-- Settings for "Target Settings" panel -->
- <SETTING><NAME>Linker</NAME><VALUE>MacOS PPC Linker</VALUE></SETTING>
- <SETTING><NAME>PreLinker</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>PostLinker</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Targetname</NAME><VALUE>FreeTypeLib</VALUE></SETTING>
- <SETTING><NAME>OutputDirectory</NAME>
- <SETTING><NAME>Path</NAME><VALUE>:::objs:</VALUE></SETTING>
- <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>SaveEntriesUsingRelativePaths</NAME><VALUE>false</VALUE></SETTING>
-
- <!-- Settings for "File Mappings" panel -->
- <SETTING><NAME>FileMappings</NAME>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>APPL</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>Appl</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>MMLB</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>MPLF</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>MWCD</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>RSRC</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.bh</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>Balloon Help</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.c</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.c++</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.cc</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.cp</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.cpp</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.exp</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.h</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.p</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>MW Pascal PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.pas</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>MW Pascal PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.pch</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.pch++</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.ppu</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>MW Pascal PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.r</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>Rez</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE>Rez</VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.s</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>PPCAsm</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>XCOF</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>XCOFF Import PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>docu</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>rsrc</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>shlb</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileType</NAME><VALUE>stub</VALUE></SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.doc</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.o</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE>XCOFF Import PPC</VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.ppob</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- <SETTING>
- <SETTING><NAME>FileExtension</NAME><VALUE>.rsrc</VALUE></SETTING>
- <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
- </SETTING>
- </SETTING>
-
- <!-- Settings for "Build Extras" panel -->
- <SETTING><NAME>CacheModDates</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>DumpBrowserInfo</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>CacheSubprojects</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>UseThirdPartyDebugger</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>BrowserGenerator</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>DebuggerAppPath</NAME>
- <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>DebuggerCmdLineArgs</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>DebuggerWorkingDir</NAME>
- <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>CodeCompletionPrefixFileName</NAME><VALUE>MacHeaders.c</VALUE></SETTING>
- <SETTING><NAME>CodeCompletionMacroFileName</NAME><VALUE>MacOS_Carbon_C++_Macros.h</VALUE></SETTING>
-
- <!-- Settings for "Debugger Target" panel -->
- <SETTING><NAME>ConsoleEncoding</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>LogSystemMessages</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>AutoTargetDLLs</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>StopAtWatchpoints</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>PauseWhileRunning</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>PauseInterval</NAME><VALUE>5</VALUE></SETTING>
- <SETTING><NAME>PauseUIFlags</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>AltExePath</NAME>
- <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>StopAtTempBPOnLaunch</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>CacheSymbolics</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>TempBPFunctionName</NAME><VALUE>main</VALUE></SETTING>
- <SETTING><NAME>TempBPType</NAME><VALUE>0</VALUE></SETTING>
-
- <!-- Settings for "Remote Debug" panel -->
- <SETTING><NAME>Enabled</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ConnectionName</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>DownloadPath</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>LaunchRemoteApp</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>RemoteAppPath</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>CoreID</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>JTAGClockSpeed</NAME><VALUE>8000</VALUE></SETTING>
- <SETTING><NAME>IsMultiCore</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>OSDownload</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>UseGlobalOSDownload</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>OSDownloadConnectionName</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>OSDownloadPath</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>AltDownload</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>AltDownloadConnectionName</NAME><VALUE></VALUE></SETTING>
-
- <!-- Settings for "Auto-target" panel -->
- <SETTING><NAME>OtherExecutables</NAME><VALUE></VALUE></SETTING>
-
- <!-- Settings for "Analyzer Connections" panel -->
- <SETTING><NAME>AnalyzerConnectionName</NAME><VALUE></VALUE></SETTING>
-
- <!-- Settings for "Custom Keywords" panel -->
- <SETTING><NAME>CustomColor1</NAME>
- <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
- <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>CustomColor2</NAME>
- <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
- <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>CustomColor3</NAME>
- <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
- <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>CustomColor4</NAME>
- <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
- <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
- </SETTING>
-
- <!-- Settings for "C/C++ Compiler" panel -->
- <SETTING><NAME>MWFrontEnd_C_cplusplus</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_checkprotos</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_arm</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_trigraphs</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_onlystdkeywords</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_enumsalwaysint</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_ansistrict</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_wchar_type</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_enableexceptions</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_dontreusestrings</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_poolstrings</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_dontinline</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_useRTTI</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_unsignedchars</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_autoinline</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_booltruefalse</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_inlinelevel</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_ecplusplus</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_defer_codegen</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_templateparser</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_c99</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_bottomupinline</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_gcc_extensions</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWFrontEnd_C_instance_manager</NAME><VALUE>0</VALUE></SETTING>
-
- <!-- Settings for "C/C++ Preprocessor" panel -->
- <SETTING><NAME>C_CPP_Preprocessor_EmitFile</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>C_CPP_Preprocessor_EmitLine</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>C_CPP_Preprocessor_EmitFullPath</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>C_CPP_Preprocessor_KeepComments</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>C_CPP_Preprocessor_PCHUsesPrefixText</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>C_CPP_Preprocessor_EmitPragmas</NAME><VALUE>true</VALUE></SETTING>
- <SETTING><NAME>C_CPP_Preprocessor_KeepWhiteSpace</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>C_CPP_Preprocessor_MultiByteEncoding</NAME><VALUE>encASCII_Unicode</VALUE></SETTING>
- <SETTING><NAME>C_CPP_Preprocessor_PrefixText</NAME><VALUE>/* settings imported from old "C/C++ Language" panel */
-
-#if !__option(precompile)
-#include "ftoption.h" /* was "Prefix file" */
-#endif
-</VALUE></SETTING>
-
- <!-- Settings for "C/C++ Warnings" panel -->
- <SETTING><NAME>MWWarning_C_warn_illpragma</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_emptydecl</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_possunwant</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_unusedvar</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_unusedarg</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_extracomma</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_pedantic</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warningerrors</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_hidevirtual</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_implicitconv</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_notinlined</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_structclass</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_missingreturn</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_no_side_effect</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_resultnotused</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_padding</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_impl_i2f_conv</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_impl_f2i_conv</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_impl_s2u_conv</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_illtokenpasting</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_filenamecaps</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_filenamecapssystem</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_undefmacro</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWWarning_C_warn_ptrintconv</NAME><VALUE>0</VALUE></SETTING>
-
- <!-- Settings for "MacOS Merge Panel" panel -->
- <SETTING><NAME>MWMerge_MacOS_projectType</NAME><VALUE>Application</VALUE></SETTING>
- <SETTING><NAME>MWMerge_MacOS_outputName</NAME><VALUE>Merge Out</VALUE></SETTING>
- <SETTING><NAME>MWMerge_MacOS_outputCreator</NAME><VALUE>????</VALUE></SETTING>
- <SETTING><NAME>MWMerge_MacOS_outputType</NAME><VALUE>APPL</VALUE></SETTING>
- <SETTING><NAME>MWMerge_MacOS_suppressWarning</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWMerge_MacOS_copyFragments</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWMerge_MacOS_copyResources</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWMerge_MacOS_flattenResource</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWMerge_MacOS_flatFileName</NAME><VALUE>a.rsrc</VALUE></SETTING>
- <SETTING><NAME>MWMerge_MacOS_flatFileOutputPath</NAME>
- <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
- <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>MWMerge_MacOS_skipResources</NAME>
- <SETTING><VALUE>DLGX</VALUE></SETTING>
- <SETTING><VALUE>ckid</VALUE></SETTING>
- <SETTING><VALUE>Proj</VALUE></SETTING>
- <SETTING><VALUE>WSPC</VALUE></SETTING>
- </SETTING>
-
- <!-- Settings for "Output Flags" panel -->
- <SETTING><NAME>FileLocked</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>ResourcesMapIsReadOnly</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>PrinterDriverIsMultiFinderCompatible</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Invisible</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>HasBundle</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>NameLocked</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Stationery</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>HasCustomIcon</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Shared</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>HasBeenInited</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>Label</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>Comments</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>HasCustomBadge</NAME><VALUE>false</VALUE></SETTING>
- <SETTING><NAME>HasRoutingInfo</NAME><VALUE>false</VALUE></SETTING>
-
- <!-- Settings for "PPC CodeGen" panel -->
- <SETTING><NAME>MWCodeGen_PPC_structalignment</NAME><VALUE>PPC_mw</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_tracebacktables</NAME><VALUE>None</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_processor</NAME><VALUE>Generic</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_function_align</NAME><VALUE>4</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_tocdata</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_largetoc</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_profiler</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_vectortocdata</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_poolconst</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_peephole</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_readonlystrings</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_linkerpoolsstrings</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_volatileasm</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_schedule</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_altivec</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_altivec_move_block</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_strictIEEEfp</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_fpcontract</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_genfsel</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_PPC_orderedfpcmp</NAME><VALUE>0</VALUE></SETTING>
-
- <!-- Settings for "PPC CodeGen Mach-O" panel -->
- <SETTING><NAME>MWCodeGen_MachO_structalignment</NAME><VALUE>PPC_mw</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_profiler_enum</NAME><VALUE>Off</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_processor</NAME><VALUE>Generic</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_function_align</NAME><VALUE>4</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_common</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_boolisint</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_peephole</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_readonlystrings</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_linkerpoolsstrings</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_volatileasm</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_schedule</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_altivec</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_vecmove</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_fp_ieee_strict</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_fpcontract</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_genfsel</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWCodeGen_MachO_fp_cmps_ordered</NAME><VALUE>0</VALUE></SETTING>
-
- <!-- Settings for "PPC Disassembler" panel -->
- <SETTING><NAME>MWDisassembler_PPC_showcode</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWDisassembler_PPC_extended</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWDisassembler_PPC_mix</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWDisassembler_PPC_nohex</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWDisassembler_PPC_showdata</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWDisassembler_PPC_showexceptions</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWDisassembler_PPC_showsym</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWDisassembler_PPC_shownames</NAME><VALUE>1</VALUE></SETTING>
-
- <!-- Settings for "PPC Global Optimizer" panel -->
- <SETTING><NAME>GlobalOptimizer_PPC_optimizationlevel</NAME><VALUE>Level0</VALUE></SETTING>
- <SETTING><NAME>GlobalOptimizer_PPC_optfor</NAME><VALUE>Speed</VALUE></SETTING>
-
- <!-- Settings for "PPC Linker" panel -->
- <SETTING><NAME>MWLinker_PPC_linksym</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWLinker_PPC_symfullpath</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWLinker_PPC_linkmap</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWLinker_PPC_nolinkwarnings</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWLinker_PPC_dontdeadstripinitcode</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWLinker_PPC_permitmultdefs</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWLinker_PPC_linkmode</NAME><VALUE>Fast</VALUE></SETTING>
- <SETTING><NAME>MWLinker_PPC_code_folding</NAME><VALUE>None</VALUE></SETTING>
- <SETTING><NAME>MWLinker_PPC_initname</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>MWLinker_PPC_mainname</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>MWLinker_PPC_termname</NAME><VALUE></VALUE></SETTING>
-
- <!-- Settings for "PPC Mac OS X Linker" panel -->
- <SETTING><NAME>MWLinker_MacOSX_linksym</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_symfullpath</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_nolinkwarnings</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_linkmap</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_dontdeadstripinitcode</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_permitmultdefs</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_use_objectivec_semantics</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_strip_debug_symbols</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_split_segs</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_report_msl_overloads</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_objects_follow_linkorder</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_linkmode</NAME><VALUE>Normal</VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_exports</NAME><VALUE>ReferencedGlobals</VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_sortcode</NAME><VALUE>None</VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_mainname</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_initname</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_code_folding</NAME><VALUE>None</VALUE></SETTING>
- <SETTING><NAME>MWLinker_MacOSX_stabsgen</NAME><VALUE>None</VALUE></SETTING>
-
- <!-- Settings for "PPC Mac OS X Project" panel -->
- <SETTING><NAME>MWProject_MacOSX_type</NAME><VALUE>Executable</VALUE></SETTING>
- <SETTING><NAME>MWProject_MacOSX_outfile</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>MWProject_MacOSX_filecreator</NAME><VALUE>????</VALUE></SETTING>
- <SETTING><NAME>MWProject_MacOSX_filetype</NAME><VALUE>MEXE</VALUE></SETTING>
- <SETTING><NAME>MWProject_MacOSX_vmaddress</NAME><VALUE>4096</VALUE></SETTING>
- <SETTING><NAME>MWProject_MacOSX_usedefaultvmaddr</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWProject_MacOSX_flatrsrc</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWProject_MacOSX_flatrsrcfilename</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>MWProject_MacOSX_flatrsrcoutputdir</NAME>
- <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
- <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>MWProject_MacOSX_installpath</NAME><VALUE>./</VALUE></SETTING>
- <SETTING><NAME>MWProject_MacOSX_dont_prebind</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWProject_MacOSX_flat_namespace</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWProject_MacOSX_frameworkversion</NAME><VALUE>A</VALUE></SETTING>
- <SETTING><NAME>MWProject_MacOSX_currentversion</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWProject_MacOSX_flat_oldimpversion</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWProject_MacOSX_AddrMode</NAME><VALUE>1</VALUE></SETTING>
-
- <!-- Settings for "PPC PEF" panel -->
- <SETTING><NAME>MWPEF_exports</NAME><VALUE>None</VALUE></SETTING>
- <SETTING><NAME>MWPEF_libfolder</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWPEF_sortcode</NAME><VALUE>None</VALUE></SETTING>
- <SETTING><NAME>MWPEF_expandbss</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWPEF_sharedata</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWPEF_olddefversion</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWPEF_oldimpversion</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWPEF_currentversion</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWPEF_fragmentname</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>MWPEF_collapsereloads</NAME><VALUE>0</VALUE></SETTING>
-
- <!-- Settings for "PPC Project" panel -->
- <SETTING><NAME>MWProject_PPC_type</NAME><VALUE>Library</VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_outfile</NAME><VALUE>FreeTypeLib</VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_filecreator</NAME><VALUE>????</VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_filetype</NAME><VALUE>????</VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_size</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_minsize</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_stacksize</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_flags</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_symfilename</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_rsrcname</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_rsrcheader</NAME><VALUE>Native</VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_rsrctype</NAME><VALUE>????</VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_rsrcid</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_rsrcflags</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_rsrcstore</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_rsrcmerge</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_flatrsrc</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWProject_PPC_flatrsrcoutputdir</NAME>
- <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
- <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>MWProject_PPC_flatrsrcfilename</NAME><VALUE></VALUE></SETTING>
-
- <!-- Settings for "PPCAsm Panel" panel -->
- <SETTING><NAME>MWAssembler_PPC_auxheader</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWAssembler_PPC_symmode</NAME><VALUE>Mac</VALUE></SETTING>
- <SETTING><NAME>MWAssembler_PPC_dialect</NAME><VALUE>PPC</VALUE></SETTING>
- <SETTING><NAME>MWAssembler_PPC_prefixfile</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>MWAssembler_PPC_typecheck</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWAssembler_PPC_warnings</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWAssembler_PPC_casesensitive</NAME><VALUE>0</VALUE></SETTING>
-
- <!-- Settings for "Property List" panel -->
- <SETTING><NAME>PList_OutputType</NAME><VALUE>File</VALUE></SETTING>
- <SETTING><NAME>PList_OutputEncoding</NAME><VALUE>UTF-8</VALUE></SETTING>
- <SETTING><NAME>PList_PListVersion</NAME><VALUE>1.0</VALUE></SETTING>
- <SETTING><NAME>PList_Prefix</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>PList_FileFilename</NAME><VALUE>Info.plist</VALUE></SETTING>
- <SETTING><NAME>PList_FileDirectory</NAME>
- <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
- <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
- </SETTING>
- <SETTING><NAME>PList_ResourceType</NAME><VALUE>plst</VALUE></SETTING>
- <SETTING><NAME>PList_ResourceID</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>PList_ResourceName</NAME><VALUE></VALUE></SETTING>
-
- <!-- Settings for "Rez Compiler" panel -->
- <SETTING><NAME>MWRez_Language_maxwidth</NAME><VALUE>80</VALUE></SETTING>
- <SETTING><NAME>MWRez_Language_script</NAME><VALUE>Roman</VALUE></SETTING>
- <SETTING><NAME>MWRez_Language_alignment</NAME><VALUE>Align1</VALUE></SETTING>
- <SETTING><NAME>MWRez_Language_filtermode</NAME><VALUE>FilterSkip</VALUE></SETTING>
- <SETTING><NAME>MWRez_Language_suppresswarnings</NAME><VALUE>0</VALUE></SETTING>
- <SETTING><NAME>MWRez_Language_escapecontrolchars</NAME><VALUE>1</VALUE></SETTING>
- <SETTING><NAME>MWRez_Language_prefixname</NAME><VALUE></VALUE></SETTING>
- <SETTING><NAME>MWRez_Language_filteredtypes</NAME><VALUE>'CODE' 'DATA' 'PICT'</VALUE></SETTING>
- </SETTINGLIST>
- <FILELIST>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftsystem.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftbase.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftinit.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>sfnt.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>psnames.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftdebug.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>type1cid.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>cff.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>smooth.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>winfnt.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>truetype.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftmac.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>psaux.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS></FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftcache.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS></FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftglyph.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS></FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>type1.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>pshinter.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>pcf.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftraster.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- <FILE>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftrend1.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- <FILEKIND>Text</FILEKIND>
- <FILEFLAGS>Debug</FILEFLAGS>
- </FILE>
- </FILELIST>
- <LINKORDER>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftsystem.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftbase.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftinit.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>sfnt.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>psnames.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftdebug.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>type1cid.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>cff.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>smooth.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>winfnt.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>truetype.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftmac.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>psaux.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftcache.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftglyph.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>type1.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>pshinter.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>pcf.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftraster.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftrend1.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- </LINKORDER>
- </TARGET>
- </TARGETLIST>
-
- <TARGETORDER>
- <ORDEREDTARGET><NAME>FreeTypeLib</NAME></ORDEREDTARGET>
- </TARGETORDER>
-
- <GROUPLIST>
- <GROUP><NAME>base</NAME>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftbase.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftdebug.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftglyph.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftinit.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftsystem.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftmac.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- </GROUP>
- <GROUP><NAME>ftmodules</NAME>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>cff.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftcache.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>psaux.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>psnames.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>sfnt.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>smooth.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>truetype.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>type1cid.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>winfnt.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>type1.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>pshinter.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>pcf.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftraster.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- <FILEREF>
- <TARGETNAME>FreeTypeLib</TARGETNAME>
- <PATHTYPE>Name</PATHTYPE>
- <PATH>ftrend1.c</PATH>
- <PATHFORMAT>MacOS</PATHFORMAT>
- </FILEREF>
- </GROUP>
- </GROUPLIST>
-
-</PROJECT>
diff --git a/builds/mac/ftmac.c b/builds/mac/ftmac.c
deleted file mode 100644
index 60cf73e5a..000000000
--- a/builds/mac/ftmac.c
+++ /dev/null
@@ -1,1542 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmac.c */
-/* */
-/* Mac FOND support. Written by just@letterror.com. */
-/* Heavily Fixed by mpsuzuki, George Williams and Sean McBride */
-/* */
-/* Copyright 1996-2017 by */
-/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*
- Notes
-
- Mac suitcase files can (and often do!) contain multiple fonts. To
- support this I use the face_index argument of FT_(Open|New)_Face()
- functions, and pretend the suitcase file is a collection.
-
- Warning: fbit and NFNT bitmap resources are not supported yet. In old
- sfnt fonts, bitmap glyph data for each size is stored in each `NFNT'
- resources instead of the `bdat' table in the sfnt resource. Therefore,
- face->num_fixed_sizes is set to 0, because bitmap data in `NFNT'
- resource is unavailable at present.
-
- The Mac FOND support works roughly like this:
-
- - Check whether the offered stream points to a Mac suitcase file. This
- is done by checking the file type: it has to be 'FFIL' or 'tfil'. The
- stream that gets passed to our init_face() routine is a stdio stream,
- which isn't usable for us, since the FOND resources live in the
- resource fork. So we just grab the stream->pathname field.
-
- - Read the FOND resource into memory, then check whether there is a
- TrueType font and/or(!) a Type 1 font available.
-
- - If there is a Type 1 font available (as a separate `LWFN' file), read
- its data into memory, massage it slightly so it becomes PFB data, wrap
- it into a memory stream, load the Type 1 driver and delegate the rest
- of the work to it by calling FT_Open_Face(). (XXX TODO: after this
- has been done, the kerning data from the FOND resource should be
- appended to the face: On the Mac there are usually no AFM files
- available. However, this is tricky since we need to map Mac char
- codes to ps glyph names to glyph ID's...)
-
- - If there is a TrueType font (an `sfnt' resource), read it into memory,
- wrap it into a memory stream, load the TrueType driver and delegate
- the rest of the work to it, by calling FT_Open_Face().
-
- - Some suitcase fonts (notably Onyx) might point the `LWFN' file to
- itself, even though it doesn't contains `POST' resources. To handle
- this special case without opening the file an extra time, we just
- ignore errors from the `LWFN' and fallback to the `sfnt' if both are
- available.
- */
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_INTERNAL_STREAM_H
-#include "ftbase.h"
-
-#if defined( __GNUC__ ) || defined( __IBMC__ )
- /* This is for Mac OS X. Without redefinition, OS_INLINE */
- /* expands to `static inline' which doesn't survive the */
- /* -ansi compilation flag of GCC. */
-#if !HAVE_ANSI_OS_INLINE
-#undef OS_INLINE
-#define OS_INLINE static __inline__
-#endif
-#include <CoreServices/CoreServices.h>
-#include <ApplicationServices/ApplicationServices.h>
-#include <sys/syslimits.h> /* PATH_MAX */
-#else
-#include <Resources.h>
-#include <Fonts.h>
-#include <Endian.h>
-#include <Errors.h>
-#include <Files.h>
-#include <TextUtils.h>
-#endif
-
-#ifndef PATH_MAX
-#define PATH_MAX 1024 /* same with Mac OS X's syslimits.h */
-#endif
-
-#if defined( __MWERKS__ ) && !TARGET_RT_MAC_MACHO
-#include <FSp_fopen.h>
-#endif
-
-#define FT_DEPRECATED_ATTRIBUTE
-
-#include FT_MAC_H
-
- /* undefine blocking-macros in ftmac.h */
-#undef FT_GetFile_From_Mac_Name
-#undef FT_GetFile_From_Mac_ATS_Name
-#undef FT_New_Face_From_FOND
-#undef FT_New_Face_From_FSSpec
-#undef FT_New_Face_From_FSRef
-
-
- /* FSSpec functions are deprecated since Mac OS X 10.4 */
-#ifndef HAVE_FSSPEC
-#if TARGET_API_MAC_OS8 || TARGET_API_MAC_CARBON
-#define HAVE_FSSPEC 1
-#else
-#define HAVE_FSSPEC 0
-#endif
-#endif
-
- /* most FSRef functions were introduced since Mac OS 9 */
-#ifndef HAVE_FSREF
-#if TARGET_API_MAC_OSX
-#define HAVE_FSREF 1
-#else
-#define HAVE_FSREF 0
-#endif
-#endif
-
- /* QuickDraw is deprecated since Mac OS X 10.4 */
-#ifndef HAVE_QUICKDRAW_CARBON
-#if TARGET_API_MAC_OS8 || TARGET_API_MAC_CARBON
-#define HAVE_QUICKDRAW_CARBON 1
-#else
-#define HAVE_QUICKDRAW_CARBON 0
-#endif
-#endif
-
- /* AppleTypeService is available since Mac OS X */
-#ifndef HAVE_ATS
-#if TARGET_API_MAC_OSX
-#define HAVE_ATS 1
-#ifndef kATSOptionFlagsUnRestrictedScope /* since Mac OS X 10.1 */
-#define kATSOptionFlagsUnRestrictedScope kATSOptionFlagsDefault
-#endif
-#else
-#define HAVE_ATS 0
-#endif
-#endif
-
- /* `configure' checks the availability of `ResourceIndex' strictly */
- /* and sets HAVE_TYPE_RESOURCE_INDEX to 1 or 0 always. If it is */
- /* not set (e.g., a build without `configure'), the availability */
- /* is guessed from the SDK version. */
-#ifndef HAVE_TYPE_RESOURCE_INDEX
-#if !defined( MAC_OS_X_VERSION_10_5 ) || \
- ( MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 )
-#define HAVE_TYPE_RESOURCE_INDEX 0
-#else
-#define HAVE_TYPE_RESOURCE_INDEX 1
-#endif
-#endif /* !HAVE_TYPE_RESOURCE_INDEX */
-
-#if ( HAVE_TYPE_RESOURCE_INDEX == 0 )
-typedef short ResourceIndex;
-#endif
-
- /* Set PREFER_LWFN to 1 if LWFN (Type 1) is preferred over
- TrueType in case *both* are available (this is not common,
- but it *is* possible). */
-#ifndef PREFER_LWFN
-#define PREFER_LWFN 1
-#endif
-
-#ifdef FT_MACINTOSH
-
-#if !HAVE_QUICKDRAW_CARBON /* QuickDraw is deprecated since Mac OS X 10.4 */
-
- FT_EXPORT_DEF( FT_Error )
- FT_GetFile_From_Mac_Name( const char* fontName,
- FSSpec* pathSpec,
- FT_Long* face_index )
- {
- FT_UNUSED( fontName );
- FT_UNUSED( pathSpec );
- FT_UNUSED( face_index );
-
- return FT_THROW( Unimplemented_Feature );
- }
-
-#else
-
- FT_EXPORT_DEF( FT_Error )
- FT_GetFile_From_Mac_Name( const char* fontName,
- FSSpec* pathSpec,
- FT_Long* face_index )
- {
- OptionBits options = kFMUseGlobalScopeOption;
-
- FMFontFamilyIterator famIter;
- OSStatus status = FMCreateFontFamilyIterator( NULL, NULL,
- options,
- &famIter );
- FMFont the_font = 0;
- FMFontFamily family = 0;
-
-
- if ( !fontName || !face_index )
- return FT_THROW( Invalid_Argument );
-
- *face_index = 0;
- while ( status == 0 && !the_font )
- {
- status = FMGetNextFontFamily( &famIter, &family );
- if ( status == 0 )
- {
- int stat2;
- FMFontFamilyInstanceIterator instIter;
- Str255 famNameStr;
- char famName[256];
-
-
- /* get the family name */
- FMGetFontFamilyName( family, famNameStr );
- CopyPascalStringToC( famNameStr, famName );
-
- /* iterate through the styles */
- FMCreateFontFamilyInstanceIterator( family, &instIter );
-
- *face_index = 0;
- stat2 = 0;
-
- while ( stat2 == 0 && !the_font )
- {
- FMFontStyle style;
- FMFontSize size;
- FMFont font;
-
-
- stat2 = FMGetNextFontFamilyInstance( &instIter, &font,
- &style, &size );
- if ( stat2 == 0 && size == 0 )
- {
- char fullName[256];
-
-
- /* build up a complete face name */
- ft_strcpy( fullName, famName );
- if ( style & bold )
- ft_strcat( fullName, " Bold" );
- if ( style & italic )
- ft_strcat( fullName, " Italic" );
-
- /* compare with the name we are looking for */
- if ( ft_strcmp( fullName, fontName ) == 0 )
- {
- /* found it! */
- the_font = font;
- }
- else
- ++(*face_index);
- }
- }
-
- FMDisposeFontFamilyInstanceIterator( &instIter );
- }
- }
-
- FMDisposeFontFamilyIterator( &famIter );
-
- if ( the_font )
- {
- FMGetFontContainer( the_font, pathSpec );
- return FT_Err_Ok;
- }
- else
- return FT_THROW( Unknown_File_Format );
- }
-
-#endif /* HAVE_QUICKDRAW_CARBON */
-
-
-#if HAVE_ATS
-
- /* Private function. */
- /* The FSSpec type has been discouraged for a long time, */
- /* unfortunately an FSRef replacement API for */
- /* ATSFontGetFileSpecification() is only available in */
- /* Mac OS X 10.5 and later. */
- static OSStatus
- FT_ATSFontGetFileReference( ATSFontRef ats_font_id,
- FSRef* ats_font_ref )
- {
- OSStatus err;
-
-#if !defined( MAC_OS_X_VERSION_10_5 ) || \
- MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
- FSSpec spec;
-
-
- err = ATSFontGetFileSpecification( ats_font_id, &spec );
- if ( noErr == err )
- err = FSpMakeFSRef( &spec, ats_font_ref );
-#else
- err = ATSFontGetFileReference( ats_font_id, ats_font_ref );
-#endif
-
- return err;
- }
-
-
- static FT_Error
- FT_GetFileRef_From_Mac_ATS_Name( const char* fontName,
- FSRef* ats_font_ref,
- FT_Long* face_index )
- {
- CFStringRef cf_fontName;
- ATSFontRef ats_font_id;
-
-
- *face_index = 0;
-
- cf_fontName = CFStringCreateWithCString( NULL, fontName,
- kCFStringEncodingMacRoman );
- ats_font_id = ATSFontFindFromName( cf_fontName,
- kATSOptionFlagsUnRestrictedScope );
- CFRelease( cf_fontName );
-
- if ( ats_font_id == 0 || ats_font_id == 0xFFFFFFFFUL )
- return FT_THROW( Unknown_File_Format );
-
- if ( noErr != FT_ATSFontGetFileReference( ats_font_id, ats_font_ref ) )
- return FT_THROW( Unknown_File_Format );
-
- /* face_index calculation by searching preceding fontIDs */
- /* with same FSRef */
- {
- ATSFontRef id2 = ats_font_id - 1;
- FSRef ref2;
-
-
- while ( id2 > 0 )
- {
- if ( noErr != FT_ATSFontGetFileReference( id2, &ref2 ) )
- break;
- if ( noErr != FSCompareFSRefs( ats_font_ref, &ref2 ) )
- break;
-
- id2--;
- }
- *face_index = ats_font_id - ( id2 + 1 );
- }
-
- return FT_Err_Ok;
- }
-
-#endif
-
-#if !HAVE_ATS
-
- FT_EXPORT_DEF( FT_Error )
- FT_GetFilePath_From_Mac_ATS_Name( const char* fontName,
- UInt8* path,
- UInt32 maxPathSize,
- FT_Long* face_index )
- {
- FT_UNUSED( fontName );
- FT_UNUSED( path );
- FT_UNUSED( maxPathSize );
- FT_UNUSED( face_index );
-
- return FT_THROW( Unimplemented_Feature );
- }
-
-#else
-
- FT_EXPORT_DEF( FT_Error )
- FT_GetFilePath_From_Mac_ATS_Name( const char* fontName,
- UInt8* path,
- UInt32 maxPathSize,
- FT_Long* face_index )
- {
- FSRef ref;
- FT_Error err;
-
-
- err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index );
- if ( err )
- return err;
-
- if ( noErr != FSRefMakePath( &ref, path, maxPathSize ) )
- return FT_THROW( Unknown_File_Format );
-
- return FT_Err_Ok;
- }
-
-#endif /* HAVE_ATS */
-
-
-#if !HAVE_FSSPEC || !HAVE_ATS
-
- FT_EXPORT_DEF( FT_Error )
- FT_GetFile_From_Mac_ATS_Name( const char* fontName,
- FSSpec* pathSpec,
- FT_Long* face_index )
- {
- FT_UNUSED( fontName );
- FT_UNUSED( pathSpec );
- FT_UNUSED( face_index );
-
- return FT_THROW( Unimplemented_Feature );
- }
-
-#else
-
- /* This function is deprecated because FSSpec is deprecated in Mac OS X. */
- FT_EXPORT_DEF( FT_Error )
- FT_GetFile_From_Mac_ATS_Name( const char* fontName,
- FSSpec* pathSpec,
- FT_Long* face_index )
- {
- FSRef ref;
- FT_Error err;
-
-
- err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index );
- if ( err )
- return err;
-
- if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone, NULL, NULL,
- pathSpec, NULL ) )
- return FT_THROW( Unknown_File_Format );
-
- return FT_Err_Ok;
- }
-
-#endif
-
-
-#if defined( __MWERKS__ ) && !TARGET_RT_MAC_MACHO
-
-#define STREAM_FILE( stream ) ( (FT_FILE*)stream->descriptor.pointer )
-
-
- FT_CALLBACK_DEF( void )
- ft_FSp_stream_close( FT_Stream stream )
- {
- ft_fclose( STREAM_FILE( stream ) );
-
- stream->descriptor.pointer = NULL;
- stream->size = 0;
- stream->base = 0;
- }
-
-
- FT_CALLBACK_DEF( unsigned long )
- ft_FSp_stream_io( FT_Stream stream,
- unsigned long offset,
- unsigned char* buffer,
- unsigned long count )
- {
- FT_FILE* file;
-
-
- file = STREAM_FILE( stream );
-
- ft_fseek( file, offset, SEEK_SET );
-
- return (unsigned long)ft_fread( buffer, 1, count, file );
- }
-
-#endif /* __MWERKS__ && !TARGET_RT_MAC_MACHO */
-
-
-#if HAVE_FSSPEC && !HAVE_FSREF
-
- /* isDirectory is a dummy to synchronize API with FSPathMakeRef() */
- static OSErr
- FT_FSPathMakeSpec( const UInt8* pathname,
- FSSpec* spec_p,
- Boolean isDirectory )
- {
- const char *p, *q;
- short vRefNum;
- long dirID;
- Str255 nodeName;
- OSErr err;
- FT_UNUSED( isDirectory );
-
-
- p = q = (const char *)pathname;
- dirID = 0;
- vRefNum = 0;
-
- while ( 1 )
- {
- int len = ft_strlen( p );
-
-
- if ( len > 255 )
- len = 255;
-
- q = p + len;
-
- if ( q == p )
- return 0;
-
- if ( 255 < ft_strlen( (char *)pathname ) )
- {
- while ( p < q && *q != ':' )
- q--;
- }
-
- if ( p < q )
- *(char *)nodeName = q - p;
- else if ( ft_strlen( p ) < 256 )
- *(char *)nodeName = ft_strlen( p );
- else
- return errFSNameTooLong;
-
- ft_strncpy( (char *)nodeName + 1, (char *)p, *(char *)nodeName );
- err = FSMakeFSSpec( vRefNum, dirID, nodeName, spec_p );
- if ( err || '\0' == *q )
- return err;
-
- vRefNum = spec_p->vRefNum;
- dirID = spec_p->parID;
-
- p = q;
- }
- }
-
-
- static OSErr
- FT_FSpMakePath( const FSSpec* spec_p,
- UInt8* path,
- UInt32 maxPathSize )
- {
- OSErr err;
- FSSpec spec = *spec_p;
- short vRefNum;
- long dirID;
- Str255 parDir_name;
-
-
- FT_MEM_SET( path, 0, maxPathSize );
- while ( 1 )
- {
- int child_namelen = ft_strlen( (char *)path );
- unsigned char node_namelen = spec.name[0];
- unsigned char* node_name = spec.name + 1;
-
-
- if ( node_namelen + child_namelen > maxPathSize )
- return errFSNameTooLong;
-
- FT_MEM_MOVE( path + node_namelen + 1, path, child_namelen );
- FT_MEM_COPY( path, node_name, node_namelen );
- if ( child_namelen > 0 )
- path[node_namelen] = ':';
-
- vRefNum = spec.vRefNum;
- dirID = spec.parID;
- parDir_name[0] = '\0';
- err = FSMakeFSSpec( vRefNum, dirID, parDir_name, &spec );
- if ( noErr != err || dirID == spec.parID )
- break;
- }
- return noErr;
- }
-
-#endif /* HAVE_FSSPEC && !HAVE_FSREF */
-
-
- static OSErr
- FT_FSPathMakeRes( const UInt8* pathname,
- ResFileRefNum* res )
- {
-
-#if HAVE_FSREF
-
- OSErr err;
- FSRef ref;
-
-
- if ( noErr != FSPathMakeRef( pathname, &ref, FALSE ) )
- return FT_THROW( Cannot_Open_Resource );
-
- /* at present, no support for dfont format */
- err = FSOpenResourceFile( &ref, 0, NULL, fsRdPerm, res );
- if ( noErr == err )
- return err;
-
- /* fallback to original resource-fork font */
- *res = FSOpenResFile( &ref, fsRdPerm );
- err = ResError();
-
-#else
-
- OSErr err;
- FSSpec spec;
-
-
- if ( noErr != FT_FSPathMakeSpec( pathname, &spec, FALSE ) )
- return FT_THROW( Cannot_Open_Resource );
-
- /* at present, no support for dfont format without FSRef */
- /* (see above), try original resource-fork font */
- *res = FSpOpenResFile( &spec, fsRdPerm );
- err = ResError();
-
-#endif /* HAVE_FSREF */
-
- return err;
- }
-
-
- /* Return the file type for given pathname */
- static OSType
- get_file_type_from_path( const UInt8* pathname )
- {
-
-#if HAVE_FSREF
-
- FSRef ref;
- FSCatalogInfo info;
-
-
- if ( noErr != FSPathMakeRef( pathname, &ref, FALSE ) )
- return ( OSType ) 0;
-
- if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoFinderInfo, &info,
- NULL, NULL, NULL ) )
- return ( OSType ) 0;
-
- return ((FInfo *)(info.finderInfo))->fdType;
-
-#else
-
- FSSpec spec;
- FInfo finfo;
-
-
- if ( noErr != FT_FSPathMakeSpec( pathname, &spec, FALSE ) )
- return ( OSType ) 0;
-
- if ( noErr != FSpGetFInfo( &spec, &finfo ) )
- return ( OSType ) 0;
-
- return finfo.fdType;
-
-#endif /* HAVE_FSREF */
-
- }
-
-
- /* Given a PostScript font name, create the Macintosh LWFN file name. */
- static void
- create_lwfn_name( char* ps_name,
- Str255 lwfn_file_name )
- {
- int max = 5, count = 0;
- FT_Byte* p = lwfn_file_name;
- FT_Byte* q = (FT_Byte*)ps_name;
-
-
- lwfn_file_name[0] = 0;
-
- while ( *q )
- {
- if ( ft_isupper( *q ) )
- {
- if ( count )
- max = 3;
- count = 0;
- }
- if ( count < max && ( ft_isalnum( *q ) || *q == '_' ) )
- {
- *++p = *q;
- lwfn_file_name[0]++;
- count++;
- }
- q++;
- }
- }
-
-
- static short
- count_faces_sfnt( char* fond_data )
- {
- /* The count is 1 greater than the value in the FOND. */
- /* Isn't that cute? :-) */
-
- return EndianS16_BtoN( *( (short*)( fond_data +
- sizeof ( FamRec ) ) ) ) + 1;
- }
-
-
- static short
- count_faces_scalable( char* fond_data )
- {
- AsscEntry* assoc;
- short i, face, face_all;
-
-
- face_all = EndianS16_BtoN( *( (short *)( fond_data +
- sizeof ( FamRec ) ) ) ) + 1;
- assoc = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 );
- face = 0;
-
- for ( i = 0; i < face_all; i++ )
- {
- if ( 0 == EndianS16_BtoN( assoc[i].fontSize ) )
- face++;
- }
- return face;
- }
-
-
- /* Look inside the FOND data, answer whether there should be an SFNT
- resource, and answer the name of a possible LWFN Type 1 file.
-
- Thanks to Paul Miller (paulm@profoundeffects.com) for the fix
- to load a face OTHER than the first one in the FOND!
- */
-
- static void
- parse_fond( char* fond_data,
- short* have_sfnt,
- ResID* sfnt_id,
- Str255 lwfn_file_name,
- short face_index )
- {
- AsscEntry* assoc;
- AsscEntry* base_assoc;
- FamRec* fond;
-
-
- *sfnt_id = 0;
- *have_sfnt = 0;
- lwfn_file_name[0] = 0;
-
- fond = (FamRec*)fond_data;
- assoc = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 );
- base_assoc = assoc;
-
- /* the maximum faces in a FOND is 48, size of StyleTable.indexes[] */
- if ( 47 < face_index )
- return;
-
- /* Let's do a little range checking before we get too excited here */
- if ( face_index < count_faces_sfnt( fond_data ) )
- {
- assoc += face_index; /* add on the face_index! */
-
- /* if the face at this index is not scalable,
- fall back to the first one (old behavior) */
- if ( EndianS16_BtoN( assoc->fontSize ) == 0 )
- {
- *have_sfnt = 1;
- *sfnt_id = EndianS16_BtoN( assoc->fontID );
- }
- else if ( base_assoc->fontSize == 0 )
- {
- *have_sfnt = 1;
- *sfnt_id = EndianS16_BtoN( base_assoc->fontID );
- }
- }
-
- if ( EndianS32_BtoN( fond->ffStylOff ) )
- {
- unsigned char* p = (unsigned char*)fond_data;
- StyleTable* style;
- unsigned short string_count;
- char ps_name[256];
- unsigned char* names[64];
- int i;
-
-
- p += EndianS32_BtoN( fond->ffStylOff );
- style = (StyleTable*)p;
- p += sizeof ( StyleTable );
- string_count = EndianS16_BtoN( *(short*)(p) );
- p += sizeof ( short );
-
- for ( i = 0; i < string_count && i < 64; i++ )
- {
- names[i] = p;
- p += names[i][0];
- p++;
- }
-
- {
- size_t ps_name_len = (size_t)names[0][0];
-
-
- if ( ps_name_len != 0 )
- {
- ft_memcpy(ps_name, names[0] + 1, ps_name_len);
- ps_name[ps_name_len] = 0;
- }
- if ( style->indexes[face_index] > 1 &&
- style->indexes[face_index] <= FT_MIN( string_count, 64 ) )
- {
- unsigned char* suffixes = names[style->indexes[face_index] - 1];
-
-
- for ( i = 1; i <= suffixes[0]; i++ )
- {
- unsigned char* s;
- size_t j = suffixes[i] - 1;
-
-
- if ( j < string_count && ( s = names[j] ) != NULL )
- {
- size_t s_len = (size_t)s[0];
-
-
- if ( s_len != 0 && ps_name_len + s_len < sizeof ( ps_name ) )
- {
- ft_memcpy( ps_name + ps_name_len, s + 1, s_len );
- ps_name_len += s_len;
- ps_name[ps_name_len] = 0;
- }
- }
- }
- }
- }
-
- create_lwfn_name( ps_name, lwfn_file_name );
- }
- }
-
-
- static FT_Error
- lookup_lwfn_by_fond( const UInt8* path_fond,
- ConstStr255Param base_lwfn,
- UInt8* path_lwfn,
- int path_size )
- {
-
-#if HAVE_FSREF
-
- FSRef ref, par_ref;
- int dirname_len;
-
-
- /* Pathname for FSRef can be in various formats: HFS, HFS+, and POSIX. */
- /* We should not extract parent directory by string manipulation. */
-
- if ( noErr != FSPathMakeRef( path_fond, &ref, FALSE ) )
- return FT_THROW( Invalid_Argument );
-
- if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone,
- NULL, NULL, NULL, &par_ref ) )
- return FT_THROW( Invalid_Argument );
-
- if ( noErr != FSRefMakePath( &par_ref, path_lwfn, path_size ) )
- return FT_THROW( Invalid_Argument );
-
- if ( ft_strlen( (char *)path_lwfn ) + 1 + base_lwfn[0] > path_size )
- return FT_THROW( Invalid_Argument );
-
- /* now we have absolute dirname in path_lwfn */
- if ( path_lwfn[0] == '/' )
- ft_strcat( (char *)path_lwfn, "/" );
- else
- ft_strcat( (char *)path_lwfn, ":" );
-
- dirname_len = ft_strlen( (char *)path_lwfn );
- ft_strcat( (char *)path_lwfn, (char *)base_lwfn + 1 );
- path_lwfn[dirname_len + base_lwfn[0]] = '\0';
-
- if ( noErr != FSPathMakeRef( path_lwfn, &ref, FALSE ) )
- return FT_THROW( Cannot_Open_Resource );
-
- if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone,
- NULL, NULL, NULL, NULL ) )
- return FT_THROW( Cannot_Open_Resource );
-
- return FT_Err_Ok;
-
-#else
-
- int i;
- FSSpec spec;
-
-
- /* pathname for FSSpec is always HFS format */
- if ( ft_strlen( (char *)path_fond ) > path_size )
- return FT_THROW( Invalid_Argument );
-
- ft_strcpy( (char *)path_lwfn, (char *)path_fond );
-
- i = ft_strlen( (char *)path_lwfn ) - 1;
- while ( i > 0 && ':' != path_lwfn[i] )
- i--;
-
- if ( i + 1 + base_lwfn[0] > path_size )
- return FT_THROW( Invalid_Argument );
-
- if ( ':' == path_lwfn[i] )
- {
- ft_strcpy( (char *)path_lwfn + i + 1, (char *)base_lwfn + 1 );
- path_lwfn[i + 1 + base_lwfn[0]] = '\0';
- }
- else
- {
- ft_strcpy( (char *)path_lwfn, (char *)base_lwfn + 1 );
- path_lwfn[base_lwfn[0]] = '\0';
- }
-
- if ( noErr != FT_FSPathMakeSpec( path_lwfn, &spec, FALSE ) )
- return FT_THROW( Cannot_Open_Resource );
-
- return FT_Err_Ok;
-
-#endif /* HAVE_FSREF */
-
- }
-
-
- static short
- count_faces( Handle fond,
- const UInt8* pathname )
- {
- ResID sfnt_id;
- short have_sfnt, have_lwfn;
- Str255 lwfn_file_name;
- UInt8 buff[PATH_MAX];
- FT_Error err;
- short num_faces;
-
-
- have_sfnt = have_lwfn = 0;
-
- HLock( fond );
- parse_fond( *fond, &have_sfnt, &sfnt_id, lwfn_file_name, 0 );
-
- if ( lwfn_file_name[0] )
- {
- err = lookup_lwfn_by_fond( pathname, lwfn_file_name,
- buff, sizeof ( buff ) );
- if ( !err )
- have_lwfn = 1;
- }
-
- if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) )
- num_faces = 1;
- else
- num_faces = count_faces_scalable( *fond );
-
- HUnlock( fond );
- return num_faces;
- }
-
-
- /* Read Type 1 data from the POST resources inside the LWFN file,
- return a PFB buffer. This is somewhat convoluted because the FT2
- PFB parser wants the ASCII header as one chunk, and the LWFN
- chunks are often not organized that way, so we glue chunks
- of the same type together. */
- static FT_Error
- read_lwfn( FT_Memory memory,
- ResFileRefNum res,
- FT_Byte** pfb_data,
- FT_ULong* size )
- {
- FT_Error error = FT_Err_Ok;
- ResID res_id;
- unsigned char *buffer, *p, *size_p = NULL;
- FT_ULong total_size = 0;
- FT_ULong old_total_size = 0;
- FT_ULong post_size, pfb_chunk_size;
- Handle post_data;
- char code, last_code;
-
-
- UseResFile( res );
-
- /* First pass: load all POST resources, and determine the size of */
- /* the output buffer. */
- res_id = 501;
- last_code = -1;
-
- for (;;)
- {
- post_data = Get1Resource( TTAG_POST, res_id++ );
- if ( post_data == NULL )
- break; /* we are done */
-
- code = (*post_data)[0];
-
- if ( code != last_code )
- {
- if ( code == 5 )
- total_size += 2; /* just the end code */
- else
- total_size += 6; /* code + 4 bytes chunk length */
- }
-
- total_size += GetHandleSize( post_data ) - 2;
- last_code = code;
-
- /* detect integer overflows */
- if ( total_size < old_total_size )
- {
- error = FT_ERR( Array_Too_Large );
- goto Error;
- }
-
- old_total_size = total_size;
- }
-
- if ( FT_ALLOC( buffer, (FT_Long)total_size ) )
- goto Error;
-
- /* Second pass: append all POST data to the buffer, add PFB fields. */
- /* Glue all consecutive chunks of the same type together. */
- p = buffer;
- res_id = 501;
- last_code = -1;
- pfb_chunk_size = 0;
-
- for (;;)
- {
- post_data = Get1Resource( TTAG_POST, res_id++ );
- if ( post_data == NULL )
- break; /* we are done */
-
- post_size = (FT_ULong)GetHandleSize( post_data ) - 2;
- code = (*post_data)[0];
-
- if ( code != last_code )
- {
- if ( last_code != -1 )
- {
- /* we are done adding a chunk, fill in the size field */
- if ( size_p != NULL )
- {
- *size_p++ = (FT_Byte)( pfb_chunk_size & 0xFF );
- *size_p++ = (FT_Byte)( ( pfb_chunk_size >> 8 ) & 0xFF );
- *size_p++ = (FT_Byte)( ( pfb_chunk_size >> 16 ) & 0xFF );
- *size_p++ = (FT_Byte)( ( pfb_chunk_size >> 24 ) & 0xFF );
- }
- pfb_chunk_size = 0;
- }
-
- *p++ = 0x80;
- if ( code == 5 )
- *p++ = 0x03; /* the end */
- else if ( code == 2 )
- *p++ = 0x02; /* binary segment */
- else
- *p++ = 0x01; /* ASCII segment */
-
- if ( code != 5 )
- {
- size_p = p; /* save for later */
- p += 4; /* make space for size field */
- }
- }
-
- ft_memcpy( p, *post_data + 2, post_size );
- pfb_chunk_size += post_size;
- p += post_size;
- last_code = code;
- }
-
- *pfb_data = buffer;
- *size = total_size;
-
- Error:
- CloseResFile( res );
- return error;
- }
-
-
- /* Create a new FT_Face from a file spec to an LWFN file. */
- static FT_Error
- FT_New_Face_From_LWFN( FT_Library library,
- const UInt8* pathname,
- FT_Long face_index,
- FT_Face* aface )
- {
- FT_Byte* pfb_data;
- FT_ULong pfb_size;
- FT_Error error;
- ResFileRefNum res;
-
-
- if ( noErr != FT_FSPathMakeRes( pathname, &res ) )
- return FT_THROW( Cannot_Open_Resource );
-
- pfb_data = NULL;
- pfb_size = 0;
- error = read_lwfn( library->memory, res, &pfb_data, &pfb_size );
- CloseResFile( res ); /* PFB is already loaded, useless anymore */
- if ( error )
- return error;
-
- return open_face_from_buffer( library,
- pfb_data,
- pfb_size,
- face_index,
- "type1",
- aface );
- }
-
-
- /* Create a new FT_Face from an SFNT resource, specified by res ID. */
- static FT_Error
- FT_New_Face_From_SFNT( FT_Library library,
- ResID sfnt_id,
- FT_Long face_index,
- FT_Face* aface )
- {
- Handle sfnt = NULL;
- FT_Byte* sfnt_data;
- size_t sfnt_size;
- FT_Error error = FT_Err_Ok;
- FT_Memory memory = library->memory;
- int is_cff, is_sfnt_ps;
-
-
- sfnt = GetResource( TTAG_sfnt, sfnt_id );
- if ( sfnt == NULL )
- return FT_THROW( Invalid_Handle );
-
- sfnt_size = (FT_ULong)GetHandleSize( sfnt );
- if ( FT_ALLOC( sfnt_data, (FT_Long)sfnt_size ) )
- {
- ReleaseResource( sfnt );
- return error;
- }
-
- HLock( sfnt );
- ft_memcpy( sfnt_data, *sfnt, sfnt_size );
- HUnlock( sfnt );
- ReleaseResource( sfnt );
-
- is_cff = sfnt_size > 4 && !ft_memcmp( sfnt_data, "OTTO", 4 );
- is_sfnt_ps = sfnt_size > 4 && !ft_memcmp( sfnt_data, "typ1", 4 );
-
- if ( is_sfnt_ps )
- {
- FT_Stream stream;
-
-
- if ( FT_NEW( stream ) )
- goto Try_OpenType;
-
- FT_Stream_OpenMemory( stream, sfnt_data, sfnt_size );
- if ( !open_face_PS_from_sfnt_stream( library,
- stream,
- face_index,
- 0, NULL,
- aface ) )
- {
- FT_Stream_Close( stream );
- FT_FREE( stream );
- FT_FREE( sfnt_data );
- goto Exit;
- }
-
- FT_FREE( stream );
- }
- Try_OpenType:
- error = open_face_from_buffer( library,
- sfnt_data,
- sfnt_size,
- face_index,
- is_cff ? "cff" : "truetype",
- aface );
- Exit:
- return error;
- }
-
-
- /* Create a new FT_Face from a file spec to a suitcase file. */
- static FT_Error
- FT_New_Face_From_Suitcase( FT_Library library,
- const UInt8* pathname,
- FT_Long face_index,
- FT_Face* aface )
- {
- FT_Error error = FT_ERR( Cannot_Open_Resource );
- ResFileRefNum res_ref;
- ResourceIndex res_index;
- Handle fond;
- short num_faces_in_res;
-
-
- if ( noErr != FT_FSPathMakeRes( pathname, &res_ref ) )
- return FT_THROW( Cannot_Open_Resource );
-
- UseResFile( res_ref );
- if ( ResError() )
- return FT_THROW( Cannot_Open_Resource );
-
- num_faces_in_res = 0;
- for ( res_index = 1; ; ++res_index )
- {
- short num_faces_in_fond;
-
-
- fond = Get1IndResource( TTAG_FOND, res_index );
- if ( ResError() )
- break;
-
- num_faces_in_fond = count_faces( fond, pathname );
- num_faces_in_res += num_faces_in_fond;
-
- if ( 0 <= face_index && face_index < num_faces_in_fond && error )
- error = FT_New_Face_From_FOND( library, fond, face_index, aface );
-
- face_index -= num_faces_in_fond;
- }
-
- CloseResFile( res_ref );
- if ( !error && aface )
- (*aface)->num_faces = num_faces_in_res;
- return error;
- }
-
-
- /* documentation is in ftmac.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_New_Face_From_FOND( FT_Library library,
- Handle fond,
- FT_Long face_index,
- FT_Face* aface )
- {
- short have_sfnt, have_lwfn = 0;
- ResID sfnt_id, fond_id;
- OSType fond_type;
- Str255 fond_name;
- Str255 lwfn_file_name;
- UInt8 path_lwfn[PATH_MAX];
- OSErr err;
- FT_Error error = FT_Err_Ok;
-
-
- /* test for valid `aface' and `library' delayed to */
- /* `FT_New_Face_From_XXX' */
-
- GetResInfo( fond, &fond_id, &fond_type, fond_name );
- if ( ResError() != noErr || fond_type != TTAG_FOND )
- return FT_THROW( Invalid_File_Format );
-
- HLock( fond );
- parse_fond( *fond, &have_sfnt, &sfnt_id, lwfn_file_name, face_index );
- HUnlock( fond );
-
- if ( lwfn_file_name[0] )
- {
- ResFileRefNum res;
-
-
- res = HomeResFile( fond );
- if ( noErr != ResError() )
- goto found_no_lwfn_file;
-
-#if HAVE_FSREF
-
- {
- UInt8 path_fond[PATH_MAX];
- FSRef ref;
-
-
- err = FSGetForkCBInfo( res, kFSInvalidVolumeRefNum,
- NULL, NULL, NULL, &ref, NULL );
- if ( noErr != err )
- goto found_no_lwfn_file;
-
- err = FSRefMakePath( &ref, path_fond, sizeof ( path_fond ) );
- if ( noErr != err )
- goto found_no_lwfn_file;
-
- error = lookup_lwfn_by_fond( path_fond, lwfn_file_name,
- path_lwfn, sizeof ( path_lwfn ) );
- if ( !error )
- have_lwfn = 1;
- }
-
-#elif HAVE_FSSPEC
-
- {
- UInt8 path_fond[PATH_MAX];
- FCBPBRec pb;
- Str255 fond_file_name;
- FSSpec spec;
-
-
- FT_MEM_SET( &spec, 0, sizeof ( FSSpec ) );
- FT_MEM_SET( &pb, 0, sizeof ( FCBPBRec ) );
-
- pb.ioNamePtr = fond_file_name;
- pb.ioVRefNum = 0;
- pb.ioRefNum = res;
- pb.ioFCBIndx = 0;
-
- err = PBGetFCBInfoSync( &pb );
- if ( noErr != err )
- goto found_no_lwfn_file;
-
- err = FSMakeFSSpec( pb.ioFCBVRefNum, pb.ioFCBParID,
- fond_file_name, &spec );
- if ( noErr != err )
- goto found_no_lwfn_file;
-
- err = FT_FSpMakePath( &spec, path_fond, sizeof ( path_fond ) );
- if ( noErr != err )
- goto found_no_lwfn_file;
-
- error = lookup_lwfn_by_fond( path_fond, lwfn_file_name,
- path_lwfn, sizeof ( path_lwfn ) );
- if ( !error )
- have_lwfn = 1;
- }
-
-#endif /* HAVE_FSREF, HAVE_FSSPEC */
-
- }
-
- if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) )
- error = FT_New_Face_From_LWFN( library,
- path_lwfn,
- face_index,
- aface );
- else
- error = FT_ERR( Unknown_File_Format );
-
- found_no_lwfn_file:
- if ( have_sfnt && error )
- error = FT_New_Face_From_SFNT( library,
- sfnt_id,
- face_index,
- aface );
-
- return error;
- }
-
-
- /* Common function to load a new FT_Face from a resource file. */
- static FT_Error
- FT_New_Face_From_Resource( FT_Library library,
- const UInt8* pathname,
- FT_Long face_index,
- FT_Face* aface )
- {
- OSType file_type;
- FT_Error error;
-
-
- /* LWFN is a (very) specific file format, check for it explicitly */
- file_type = get_file_type_from_path( pathname );
- if ( file_type == TTAG_LWFN )
- return FT_New_Face_From_LWFN( library, pathname, face_index, aface );
-
- /* Otherwise the file type doesn't matter (there are more than */
- /* `FFIL' and `tfil'). Just try opening it as a font suitcase; */
- /* if it works, fine. */
-
- error = FT_New_Face_From_Suitcase( library, pathname, face_index, aface );
- if ( !error )
- return error;
-
- /* let it fall through to normal loader (.ttf, .otf, etc.); */
- /* we signal this by returning no error and no FT_Face */
- *aface = NULL;
- return 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Face */
- /* */
- /* <Description> */
- /* This is the Mac-specific implementation of FT_New_Face. In */
- /* addition to the standard FT_New_Face() functionality, it also */
- /* accepts pathnames to Mac suitcase files. For further */
- /* documentation see the original FT_New_Face() in freetype.h. */
- /* */
- FT_EXPORT_DEF( FT_Error )
- FT_New_Face( FT_Library library,
- const char* pathname,
- FT_Long face_index,
- FT_Face* aface )
- {
- FT_Open_Args args;
- FT_Error error;
-
-
- /* test for valid `library' and `aface' delayed to FT_Open_Face() */
- if ( !pathname )
- return FT_THROW( Invalid_Argument );
-
- *aface = NULL;
-
- /* try resourcefork based font: LWFN, FFIL */
- error = FT_New_Face_From_Resource( library, (UInt8 *)pathname,
- face_index, aface );
- if ( error || *aface )
- return error;
-
- /* let it fall through to normal loader (.ttf, .otf, etc.) */
- args.flags = FT_OPEN_PATHNAME;
- args.pathname = (char*)pathname;
- return FT_Open_Face( library, &args, face_index, aface );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Face_From_FSRef */
- /* */
- /* <Description> */
- /* FT_New_Face_From_FSRef is identical to FT_New_Face except it */
- /* accepts an FSRef instead of a path. */
- /* */
- /* This function is deprecated because Carbon data types (FSRef) */
- /* are not cross-platform, and thus not suitable for the freetype API. */
- FT_EXPORT_DEF( FT_Error )
- FT_New_Face_From_FSRef( FT_Library library,
- const FSRef* ref,
- FT_Long face_index,
- FT_Face* aface )
- {
-
-#if !HAVE_FSREF
-
- FT_UNUSED( library );
- FT_UNUSED( ref );
- FT_UNUSED( face_index );
- FT_UNUSED( aface );
-
- return FT_THROW( Unimplemented_Feature );
-
-#else
-
- FT_Error error;
- FT_Open_Args args;
- OSErr err;
- UInt8 pathname[PATH_MAX];
-
-
- /* test for valid `library' and `aface' delayed to `FT_Open_Face' */
-
- if ( !ref )
- return FT_THROW( Invalid_Argument );
-
- err = FSRefMakePath( ref, pathname, sizeof ( pathname ) );
- if ( err )
- error = FT_ERR( Cannot_Open_Resource );
-
- error = FT_New_Face_From_Resource( library, pathname, face_index, aface );
- if ( error || *aface )
- return error;
-
- /* fallback to datafork font */
- args.flags = FT_OPEN_PATHNAME;
- args.pathname = (char*)pathname;
- return FT_Open_Face( library, &args, face_index, aface );
-
-#endif /* HAVE_FSREF */
-
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Face_From_FSSpec */
- /* */
- /* <Description> */
- /* FT_New_Face_From_FSSpec is identical to FT_New_Face except it */
- /* accepts an FSSpec instead of a path. */
- /* */
- /* This function is deprecated because Carbon data types (FSSpec) */
- /* are not cross-platform, and thus not suitable for the freetype API. */
- FT_EXPORT_DEF( FT_Error )
- FT_New_Face_From_FSSpec( FT_Library library,
- const FSSpec* spec,
- FT_Long face_index,
- FT_Face* aface )
- {
-
-#if HAVE_FSREF
-
- FSRef ref;
-
-
- if ( !spec || FSpMakeFSRef( spec, &ref ) != noErr )
- return FT_THROW( Invalid_Argument );
- else
- return FT_New_Face_From_FSRef( library, &ref, face_index, aface );
-
-#elif HAVE_FSSPEC
-
- FT_Error error;
- FT_Open_Args args;
- OSErr err;
- UInt8 pathname[PATH_MAX];
-
-
- if ( !spec )
- return FT_THROW( Invalid_Argument );
-
- err = FT_FSpMakePath( spec, pathname, sizeof ( pathname ) );
- if ( err )
- error = FT_ERR( Cannot_Open_Resource );
-
- error = FT_New_Face_From_Resource( library, pathname, face_index, aface );
- if ( error || *aface )
- return error;
-
- /* fallback to datafork font */
- args.flags = FT_OPEN_PATHNAME;
- args.pathname = (char*)pathname;
- return FT_Open_Face( library, &args, face_index, aface );
-
-#else
-
- FT_UNUSED( library );
- FT_UNUSED( spec );
- FT_UNUSED( face_index );
- FT_UNUSED( aface );
-
- return FT_THROW( Unimplemented_Feature );
-
-#endif /* HAVE_FSREF, HAVE_FSSPEC */
-
- }
-
-#endif /* FT_MACINTOSH */
-
-
-/* END */
diff --git a/builds/modules.mk b/builds/modules.mk
deleted file mode 100644
index a89d5791b..000000000
--- a/builds/modules.mk
+++ /dev/null
@@ -1,79 +0,0 @@
-#
-# FreeType 2 modules sub-Makefile
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# DO NOT INVOKE THIS MAKEFILE DIRECTLY! IT IS MEANT TO BE INCLUDED BY
-# OTHER MAKEFILES.
-
-
-# This file is in charge of handling the generation of the modules list
-# file.
-
-
-# Build the modules list.
-#
-$(FTMODULE_H): $(MODULES_CFG)
- $(FTMODULE_H_INIT)
- $(FTMODULE_H_CREATE)
- $(FTMODULE_H_DONE)
-
-ifneq ($(findstring $(PLATFORM),dos windows os2),)
- OPEN_MODULE := @echo$(space)
- CLOSE_MODULE := >> $(subst /,$(SEP),$(FTMODULE_H))
- REMOVE_MODULE := @-$(DELETE) $(subst /,$(SEP),$(FTMODULE_H))
-else
- OPEN_MODULE := @echo "
- CLOSE_MODULE := " >> $(FTMODULE_H)
- REMOVE_MODULE := @-$(DELETE) $(FTMODULE_H)
-endif
-
-
-define FTMODULE_H_INIT
-$(REMOVE_MODULE)
-@-echo Generating modules list in $(FTMODULE_H)...
-$(OPEN_MODULE)/* This is a generated file. */$(CLOSE_MODULE)
-endef
-
-# It is no mistake that the final closing parenthesis is on the
-# next line -- it produces proper newlines during the expansion
-# of `foreach'.
-#
-define FTMODULE_H_CREATE
-$(foreach COMMAND,$(FTMODULE_H_COMMANDS),$($(COMMAND))
-)
-endef
-
-define FTMODULE_H_DONE
-$(OPEN_MODULE)/* EOF */$(CLOSE_MODULE)
-@echo done.
-endef
-
-
-# $(OPEN_DRIVER) & $(CLOSE_DRIVER) are used to specify a given font driver
-# in the `module.mk' rules file.
-#
-OPEN_DRIVER := $(OPEN_MODULE)FT_USE_MODULE(
-CLOSE_DRIVER := )$(CLOSE_MODULE)
-
-ECHO_DRIVER := @echo "* module:$(space)
-ECHO_DRIVER_DESC := (
-ECHO_DRIVER_DONE := )"
-
-# Each `module.mk' in the `src/*' subdirectories adds a variable with
-# commands to $(FTMODULE_H_COMMANDS). Note that we can't use SRC_DIR here.
-#
--include $(patsubst %,$(TOP_DIR)/src/%/module.mk,$(MODULES))
-
-
-# EOF
diff --git a/builds/newline b/builds/newline
deleted file mode 100644
index 8b1378917..000000000
--- a/builds/newline
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/builds/os2/detect.mk b/builds/os2/detect.mk
deleted file mode 100644
index 3ea68fb5e..000000000
--- a/builds/os2/detect.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-#
-# FreeType 2 configuration file to detect an OS/2 host platform.
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-.PHONY: setup
-
-
-ifeq ($(PLATFORM),ansi)
-
- ifdef OS2_SHELL
-
- PLATFORM := os2
-
- endif # test OS2_SHELL
-endif
-
-ifeq ($(PLATFORM),os2)
-
- COPY := copy
- DELETE := del
- CAT := type
- SEP := $(BACKSLASH)
-
- # gcc-emx by default
- CONFIG_FILE := os2-gcc.mk
-
- # additionally, we provide hooks for various other compilers
- #
- ifneq ($(findstring visualage,$(MAKECMDGOALS)),) # Visual Age C++
- CONFIG_FILE := os2-icc.mk
- CC := icc
- visualage: setup
- .PHONY: visualage
- endif
-
- ifneq ($(findstring watcom,$(MAKECMDGOALS)),) # Watcom C/C++
- CONFIG_FILE := os2-wat.mk
- CC := wcc386
- watcom: setup
- .PHONY: watcom
- endif
-
- ifneq ($(findstring borlandc,$(MAKECMDGOALS)),) # Borland C++ 32-bit
- CONFIG_FILE := os2-bcc.mk
- CC := bcc32
- borlandc: setup
- .PHONY: borlandc
- endif
-
- ifneq ($(findstring devel,$(MAKECMDGOALS)),) # development target
- CONFIG_FILE := os2-dev.mk
- CC := gcc
- devel: setup
- .PHONY: devel
- endif
-
- setup: dos_setup
-
-endif # test PLATFORM os2
-
-
-# EOF
diff --git a/builds/os2/os2-def.mk b/builds/os2/os2-def.mk
deleted file mode 100644
index 2fe626345..000000000
--- a/builds/os2/os2-def.mk
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# FreeType 2 OS/2 specific definitions
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-DELETE := del
-CAT := type
-SEP := $(strip \ )
-BUILD_DIR := $(TOP_DIR)/builds/os2
-PLATFORM := os2
-
-# The executable file extension (for tools), *with* leading dot.
-#
-E := .exe
-
-# The directory where all library files are placed.
-#
-# By default, this is the same as $(OBJ_DIR); however, this can be changed
-# to suit particular needs.
-#
-LIB_DIR := $(OBJ_DIR)
-
-# The name of the final library file. Note that the DOS-specific Makefile
-# uses a shorter (8.3) name.
-#
-LIBRARY := $(PROJECT)
-
-
-# The NO_OUTPUT macro is used to ignore the output of commands.
-#
-NO_OUTPUT = 2> nul
-
-
-# EOF
diff --git a/builds/os2/os2-dev.mk b/builds/os2/os2-dev.mk
deleted file mode 100644
index 842a289ab..000000000
--- a/builds/os2/os2-dev.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# FreeType 2 configuration rules for OS/2 + GCC
-#
-# Development version without optimizations.
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-DEVEL_DIR := $(TOP_DIR)/devel
-
-# include OS/2-specific definitions
-include $(TOP_DIR)/builds/os2/os2-def.mk
-
-# include gcc-specific definitions
-include $(TOP_DIR)/builds/compiler/gcc-dev.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/builds/os2/os2-gcc.mk b/builds/os2/os2-gcc.mk
deleted file mode 100644
index 4cdffba57..000000000
--- a/builds/os2/os2-gcc.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# FreeType 2 configuration rules for the OS/2 + gcc
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# include OS/2-specific definitions
-include $(TOP_DIR)/builds/os2/os2-def.mk
-
-# include gcc-specific definitions
-include $(TOP_DIR)/builds/compiler/gcc.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/builds/symbian/bld.inf b/builds/symbian/bld.inf
deleted file mode 100644
index 8087202c2..000000000
--- a/builds/symbian/bld.inf
+++ /dev/null
@@ -1,66 +0,0 @@
-//
-// FreeType 2 project for the symbian platform
-//
-
-// Copyright 2008-2017 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used, modified,
-// and distributed under the terms of the FreeType project license,
-// LICENSE.TXT. By continuing to use, modify, or distribute this file you
-// indicate that you have read the license and understand and accept it
-// fully.
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_MMPFILES
-freetype.mmp
-
-PRJ_EXPORTS
-../../include/freetype/ft2build.h
-../../include/freetype/config/ftconfig.h config/ftconfig.h
-../../include/freetype/config/ftheader.h config/ftheader.h
-../../include/freetype/config/ftmodule.h config/ftmodule.h
-../../include/freetype/config/ftoption.h config/ftoption.h
-../../include/freetype/config/ftstdlib.h config/ftstdlib.h
-../../include/freetype/freetype.h freetype.h
-../../include/freetype/ftbbox.h ftbbox.h
-../../include/freetype/ftbdf.h ftbdf.h
-../../include/freetype/ftbitmap.h ftbitmap.h
-../../include/freetype/ftcache.h ftcache.h
-../../include/freetype/ftcid.h ftcid.h
-../../include/freetype/fterrdef.h fterrdef.h
-../../include/freetype/fterrors.h fterrors.h
-../../include/freetype/ftfntfmt.h ftfntfmt.h
-../../include/freetype/ftgasp.h ftgasp.h
-../../include/freetype/ftglyph.h ftglyph.h
-../../include/freetype/ftgxval.h ftgxval.h
-../../include/freetype/ftgzip.h ftgzip.h
-../../include/freetype/ftbzip2.h ftbzip2.h
-../../include/freetype/ftimage.h ftimage.h
-../../include/freetype/ftincrem.h ftincrem.h
-../../include/freetype/ftlcdfil.h ftlcdfil.h
-../../include/freetype/ftlist.h ftlist.h
-../../include/freetype/ftlzw.h ftlzw.h
-../../include/freetype/ftmac.h ftmac.h
-../../include/freetype/ftmm.h ftmm.h
-../../include/freetype/ftmodapi.h ftmodapi.h
-../../include/freetype/ftmoderr.h ftmoderr.h
-../../include/freetype/ftotval.h ftotval.h
-../../include/freetype/ftoutln.h ftoutln.h
-../../include/freetype/ftpfr.h ftpfr.h
-../../include/freetype/ftrender.h ftrender.h
-../../include/freetype/ftsizes.h ftsizes.h
-../../include/freetype/ftsnames.h ftsnames.h
-../../include/freetype/ftstroke.h ftstroke.h
-../../include/freetype/ftsynth.h ftsynth.h
-../../include/freetype/ftsystem.h ftsystem.h
-../../include/freetype/fttrigon.h fttrigon.h
-../../include/freetype/fttypes.h fttypes.h
-../../include/freetype/ftwinfnt.h ftwinfnt.h
-../../include/freetype/t1tables.h t1tables.h
-../../include/freetype/ttnameid.h ttnameid.h
-../../include/freetype/tttables.h tttables.h
-../../include/freetype/tttags.h tttags.h
-../../include/freetype/ttunpat.h ttunpat.h
diff --git a/builds/symbian/freetype.mmp b/builds/symbian/freetype.mmp
deleted file mode 100644
index 6fe73332d..000000000
--- a/builds/symbian/freetype.mmp
+++ /dev/null
@@ -1,148 +0,0 @@
-//
-// FreeType 2 makefile for the symbian platform
-//
-
-// Copyright 2008-2017 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used, modified,
-// and distributed under the terms of the FreeType project license,
-// LICENSE.TXT. By continuing to use, modify, or distribute this file you
-// indicate that you have read the license and understand and accept it
-// fully.
-
-target freetype.lib
-targettype lib
-
-macro NDEBUG
-macro FT2_BUILD_LIBRARY
-
-sourcepath ..\..\src\autofit
-
-source autofit.c
-
-sourcepath ..\..\src\base
-
-source ftbase.c
-source ftbbox.c
-source ftbdf.c
-source ftbitmap.c
-source ftcid.c
-source ftfntfmt.c
-source ftfstype.c
-source ftgasp.c
-source ftglyph.c
-source ftgxval.c
-source ftinit.c
-source ftlcdfil.c
-source ftmm.c
-source ftotval.c
-source ftpatent.c
-source ftpfr.c
-source ftstroke.c
-source ftsynth.c
-source ftsystem.c
-source fttype1.c
-source ftwinfnt.c
-
-sourcepath ..\..\src\bdf
-
-source bdf.c
-
-sourcepath ..\..\src\cache
-
-source ftcache.c
-
-sourcepath ..\..\src\cff
-
-source cff.c
-
-sourcepath ..\..\src\cid
-
-source type1cid.c
-
-sourcepath ..\..\src\gzip
-
-source ftgzip.c
-
-sourcepath ..\..\src\bzip2
-
-source ftbzip2.c
-
-sourcepath ..\..\src\lzw
-
-source ftlzw.c
-
-sourcepath ..\..\src\pcf
-
-source pcf.c
-
-sourcepath ..\..\src\pfr
-
-source pfr.c
-
-sourcepath ..\..\src\psaux
-
-source psaux.c
-
-sourcepath ..\..\src\pshinter
-
-source pshinter.c
-
-sourcepath ..\..\src\psnames
-
-source psmodule.c
-
-sourcepath ..\..\src\raster
-
-source raster.c
-
-sourcepath ..\..\src\sfnt
-
-source sfnt.c
-
-sourcepath ..\..\src\smooth
-
-source smooth.c
-
-sourcepath ..\..\src\truetype
-
-source truetype.c
-
-sourcepath ..\..\src\type1
-
-source type1.c
-
-sourcepath ..\..\src\type42
-
-source type42.c
-
-sourcepath ..\..\src\winfonts
-
-source winfnt.c
-
-
-systeminclude ..\..\include
-systeminclude \epoc32\include\stdapis
-userinclude ..\..\src\autofit
-userinclude ..\..\src\bdf
-userinclude ..\..\src\cache
-userinclude ..\..\src\cff
-userinclude ..\..\src\cid
-userinclude ..\..\src\gxvalid
-userinclude ..\..\src\gzip
-userinclude ..\..\src\bzip2
-userinclude ..\..\src\lzw
-userinclude ..\..\src\otvalid
-userinclude ..\..\src\pcf
-userinclude ..\..\src\pfr
-userinclude ..\..\src\psaux
-userinclude ..\..\src\pshinter
-userinclude ..\..\src\psnames
-userinclude ..\..\src\raster
-userinclude ..\..\src\sfnt
-userinclude ..\..\src\smooth
-userinclude ..\..\src\truetype
-userinclude ..\..\src\type1
-userinclude ..\..\src\type42
-userinclude ..\..\src\winfonts
diff --git a/builds/toplevel.mk b/builds/toplevel.mk
deleted file mode 100644
index 7b1d03be3..000000000
--- a/builds/toplevel.mk
+++ /dev/null
@@ -1,276 +0,0 @@
-#
-# FreeType build system -- top-level sub-Makefile
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# This file is designed for GNU Make, do not use it with another Make tool!
-#
-# It works as follows:
-#
-# - When invoked for the first time, this Makefile includes the rules found
-# in `PROJECT/builds/detect.mk'. They are in charge of detecting the
-# current platform.
-#
-# A summary of the detection is displayed, and the file `config.mk' is
-# created in the current directory.
-#
-# - When invoked later, this Makefile includes the rules found in
-# `config.mk'. This sub-Makefile defines some system-specific variables
-# (like compiler, compilation flags, object suffix, etc.), then includes
-# the rules found in `PROJECT/builds/PROJECT.mk', used to build the
-# library.
-#
-# See the comments in `builds/detect.mk' and `builds/PROJECT.mk' for more
-# details on host platform detection and library builds.
-
-
-# First of all, check whether we have `$(value ...)'. We do this by testing
-# for `$(eval ...)' which has been introduced in the same GNU make version.
-
-eval_available :=
-$(eval eval_available := T)
-ifneq ($(eval_available),T)
- $(error FreeType's build system needs a Make program which supports $$(value))
-endif
-
-
-.PHONY: all dist distclean modules setup
-
-
-# The `space' variable is used to avoid trailing spaces in defining the
-# `T' variable later.
-#
-empty :=
-space := $(empty) $(empty)
-
-
-# The main configuration file, defining the `XXX_MODULES' variables. We
-# prefer a `modules.cfg' file in OBJ_DIR over TOP_DIR.
-#
-ifndef MODULES_CFG
- MODULES_CFG := $(TOP_DIR)/modules.cfg
- ifneq ($(wildcard $(OBJ_DIR)/modules.cfg),)
- MODULES_CFG := $(OBJ_DIR)/modules.cfg
- endif
-endif
-
-
-# FTMODULE_H, as its name suggests, indicates where the FreeType module
-# class file resides.
-#
-FTMODULE_H ?= $(OBJ_DIR)/ftmodule.h
-
-
-include $(MODULES_CFG)
-
-
-# The list of modules we are using.
-#
-MODULES := $(FONT_MODULES) \
- $(HINTING_MODULES) \
- $(RASTER_MODULES) \
- $(AUX_MODULES)
-
-
-CONFIG_MK ?= config.mk
-
-# If no configuration sub-makefile is present, or if `setup' is the target
-# to be built, run the auto-detection rules to figure out which
-# configuration rules file to use.
-#
-# Note that the configuration file is put in the current directory, which is
-# not necessarily $(TOP_DIR).
-
-# If `config.mk' is not present, set `check_platform'.
-#
-ifeq ($(wildcard $(CONFIG_MK)),)
- check_platform := 1
-endif
-
-# If `setup' is one of the targets requested, set `check_platform'.
-#
-ifneq ($(findstring setup,$(MAKECMDGOALS)),)
- check_platform := 1
-endif
-
-# Include the automatic host platform detection rules when we need to
-# check the platform.
-#
-ifdef check_platform
-
- all modules: setup
-
- include $(TOP_DIR)/builds/detect.mk
-
- # This rule makes sense for Unix only to remove files created by a run of
- # the configure script which hasn't been successful (so that no
- # `config.mk' has been created). It uses the built-in $(RM) command of
- # GNU make. Similarly, `nul' is created if e.g. `make setup windows' has
- # been erroneously used.
- #
- # Note: This test is duplicated in `builds/unix/detect.mk'.
- #
- is_unix := $(strip $(wildcard /sbin/init) \
- $(wildcard /usr/sbin/init) \
- $(wildcard /dev/null) \
- $(wildcard /hurd/auth))
- ifneq ($(is_unix),)
-
- distclean:
- $(RM) builds/unix/config.cache
- $(RM) builds/unix/config.log
- $(RM) builds/unix/config.status
- $(RM) builds/unix/unix-def.mk
- $(RM) builds/unix/unix-cc.mk
- $(RM) builds/unix/freetype2.pc
- $(RM) nul
-
- endif # test is_unix
-
- # IMPORTANT:
- #
- # `setup' must be defined by the host platform detection rules to create
- # the `config.mk' file in the current directory.
-
-else
-
- # A configuration sub-Makefile is present -- simply run it.
- #
- all: single
-
- BUILD_PROJECT := yes
- include $(CONFIG_MK)
-
-endif # test check_platform
-
-
-# We always need the list of modules in ftmodule.h.
-#
-all setup: $(FTMODULE_H)
-
-
-# The `modules' target unconditionally rebuilds the module list.
-#
-modules:
- $(FTMODULE_H_INIT)
- $(FTMODULE_H_CREATE)
- $(FTMODULE_H_DONE)
-
-include $(TOP_DIR)/builds/modules.mk
-
-
-# get FreeType version string, using a
-# poor man's `sed' emulation with make's built-in string functions
-#
-work := $(strip $(shell $(CAT) $(TOP_DIR)/include/freetype/freetype.h))
-work := $(subst |,x,$(work))
-work := $(subst $(space),|,$(work))
-work := $(subst \#define|FREETYPE_MAJOR|,$(space),$(work))
-work := $(word 2,$(work))
-major := $(subst |,$(space),$(work))
-major := $(firstword $(major))
-
-work := $(subst \#define|FREETYPE_MINOR|,$(space),$(work))
-work := $(word 2,$(work))
-minor := $(subst |,$(space),$(work))
-minor := $(firstword $(minor))
-
-work := $(subst \#define|FREETYPE_PATCH|,$(space),$(work))
-work := $(word 2,$(work))
-patch := $(subst |,$(space),$(work))
-patch := $(firstword $(patch))
-
-ifneq ($(findstring x0x,x$(patch)x),)
- version := $(major).$(minor)
- winversion := $(major)$(minor)
-else
- version := $(major).$(minor).$(patch)
- winversion := $(major)$(minor)$(patch)
-endif
-
-
-# This target builds the tarballs.
-#
-# Not to be run by a normal user -- there are no attempts to make it
-# generic.
-
-dist:
- -rm -rf tmp
- rm -f freetype-$(version).tar.gz
- rm -f freetype-$(version).tar.bz2
- rm -f ft$(winversion).zip
-
- for d in `find . -wholename '*/.git' -prune \
- -o -type f \
- -o -print` ; do \
- mkdir -p tmp/$$d ; \
- done ;
-
- currdir=`pwd` ; \
- for f in `find . -wholename '*/.git' -prune \
- -o -name .gitignore \
- -o -name .mailmap \
- -o -type d \
- -o -print` ; do \
- ln -s $$currdir/$$f tmp/$$f ; \
- done
-
- @# Prevent generation of .pyc files. Python follows (soft) links if
- @# the link's directory is write protected, so we have temporarily
- @# disable write access here too.
- chmod -w src/tools/docmaker
-
- cd tmp ; \
- $(MAKE) devel ; \
- $(MAKE) do-dist
-
- chmod +w src/tools/docmaker
-
- mv tmp freetype-$(version)
-
- tar -H ustar -chf - freetype-$(version) \
- | gzip -9 -c > freetype-$(version).tar.gz
- tar -H ustar -chf - freetype-$(version) \
- | bzip2 -c > freetype-$(version).tar.bz2
-
- @# Use CR/LF for zip files.
- zip -lr9 ft$(winversion).zip freetype-$(version)
-
- rm -fr freetype-$(version)
-
-
-# The locations of the latest `config.guess' and `config.sub' versions (from
-# GNU `config' git repository), relative to the `tmp' directory used during
-# `make dist'.
-#
-CONFIG_GUESS = ~/git/config/config.guess
-CONFIG_SUB = ~/git/config/config.sub
-
-
-# Don't say `make do-dist'. Always use `make dist' instead.
-#
-.PHONY: do-dist
-
-do-dist: distclean refdoc
- @# Without removing the files, `autoconf' and friends follow links.
- rm -f builds/unix/aclocal.m4
- rm -f builds/unix/configure.ac
- rm -f builds/unix/configure
-
- sh autogen.sh
- rm -rf builds/unix/autom4te.cache
-
- cp $(CONFIG_GUESS) builds/unix
- cp $(CONFIG_SUB) builds/unix
-
-# EOF
diff --git a/builds/unix/.gitignore b/builds/unix/.gitignore
deleted file mode 100644
index e4e0a12c6..000000000
--- a/builds/unix/.gitignore
+++ /dev/null
@@ -1,17 +0,0 @@
-aclocal.m4
-autom4te.cache
-config.cache
-config.guess
-config.log
-config.status
-config.sub
-configure
-configure.ac
-freetype2.pc
-freetype-config
-ftconfig.h
-install-sh
-libtool
-ltmain.sh
-unix-cc.mk
-unix-def.mk
diff --git a/builds/unix/configure.raw b/builds/unix/configure.raw
deleted file mode 100644
index ef6debed4..000000000
--- a/builds/unix/configure.raw
+++ /dev/null
@@ -1,1032 +0,0 @@
-# This file is part of the FreeType project.
-#
-# Process this file with autoconf to produce a configure script.
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-AC_INIT([FreeType], [@VERSION@], [freetype@nongnu.org], [freetype])
-AC_CONFIG_SRCDIR([ftconfig.in])
-
-
-# Don't forget to update `docs/VERSIONS.TXT'!
-
-version_info='20:0:14'
-AC_SUBST([version_info])
-ft_version=`echo $version_info | tr : .`
-AC_SUBST([ft_version])
-
-
-# checks for system type
-
-AC_CANONICAL_HOST
-
-
-# checks for programs
-
-AC_PROG_CC
-AC_PROG_CPP
-AC_SUBST(EXEEXT)
-
-PKG_PROG_PKG_CONFIG([0.24])
-
-LT_INIT(win32-dll)
-
-
-# checks for native programs to generate building tool
-
-if test ${cross_compiling} = yes; then
- AC_CHECK_PROG(CC_BUILD, ${build}-gcc, ${build}-gcc)
- test -z "${CC_BUILD}" && AC_CHECK_PROG(CC_BUILD, gcc, gcc)
- test -z "${CC_BUILD}" && AC_CHECK_PROG(CC_BUILD, cc, cc, , , /usr/ucb/cc)
- test -z "${CC_BUILD}" && AC_MSG_ERROR([cannot find native C compiler])
-
- AC_MSG_CHECKING([for suffix of native executables])
- rm -f a.* b.* a_out.exe conftest.*
- echo > conftest.c "int main() { return 0;}"
- ${CC_BUILD} conftest.c || AC_MSG_ERROR([native C compiler is not working])
- rm -f conftest.c
- if test -x a.out -o -x b.out -o -x conftest; then
- EXEEXT_BUILD=""
- elif test -x a_out.exe -o -x conftest.exe; then
- EXEEXT_BUILD=".exe"
- elif test -x conftest.*; then
- EXEEXT_BUILD=`echo conftest.* | sed -n '1s/^.*\././'`
- fi
- rm -f a.* b.* a_out.exe conftest.*
- AC_MSG_RESULT($EXEEXT_BUILD)
-else
- CC_BUILD=${CC}
- EXEEXT_BUILD=${EXEEXT}
-fi
-
-AC_SUBST(CC_BUILD)
-AC_SUBST(EXEEXT_BUILD)
-
-
-# Since these files will be eventually called from another directory (namely
-# from the top level) we make the path of the scripts absolute.
-#
-# This small code snippet has been taken from automake's `ylwrap' script.
-
-AC_PROG_INSTALL
-case "$INSTALL" in
-[[\\/]]* | ?:[[\\/]]*)
- ;;
-*[[\\/]]*)
- INSTALL="`pwd`/$INSTALL"
- ;;
-esac
-
-AC_PROG_MKDIR_P
-case "$MKDIR_P" in
-[[\\/]]* | ?:[[\\/]]*)
- ;;
-*[[\\/]]*)
- MKDIR_P="`pwd`/$MKDIR_P"
- ;;
-esac
-
-
-# checks for header files
-
-AC_HEADER_STDC
-AC_CHECK_HEADERS([fcntl.h unistd.h])
-
-
-# checks for typedefs, structures, and compiler characteristics
-
-AC_C_CONST
-AC_CHECK_SIZEOF([int])
-AC_CHECK_SIZEOF([long])
-AC_TYPE_LONG_LONG_INT
-
-
-# check whether cpp computation of size of int and long in ftconfig.in works
-
-AC_MSG_CHECKING([whether cpp computation of bit length in ftconfig.in works])
-orig_CPPFLAGS="${CPPFLAGS}"
-CPPFLAGS="-I${srcdir} -I. ${CPPFLAGS}"
-
-ac_clean_files=
-for f in ft2build.h ftoption.h ftstdlib.h; do
- if test ! -f $f; then
- ac_clean_files="$ac_clean_files $f"
- touch $f
- fi
-done
-
-cat > conftest.c <<\_ACEOF
-#include <limits.h>
-#define FT_CONFIG_OPTIONS_H "ftoption.h"
-#define FT_CONFIG_STANDARD_LIBRARY_H "ftstdlib.h"
-#define FT_UINT_MAX UINT_MAX
-#define FT_ULONG_MAX ULONG_MAX
-#include "ftconfig.in"
-_ACEOF
-echo >> conftest.c "#if FT_SIZEOF_INT == "${ac_cv_sizeof_int}
-echo >> conftest.c "ac_cpp_ft_sizeof_int="${ac_cv_sizeof_int}
-echo >> conftest.c "#endif"
-echo >> conftest.c "#if FT_SIZEOF_LONG == "${ac_cv_sizeof_long}
-echo >> conftest.c "ac_cpp_ft_sizeof_long="${ac_cv_sizeof_long}
-echo >> conftest.c "#endif"
-
-${CPP} ${CPPFLAGS} conftest.c | ${GREP} ac_cpp_ft > conftest.sh
-eval `cat conftest.sh`
-rm -f conftest.* $ac_clean_files
-
-if test x != "x${ac_cpp_ft_sizeof_int}" \
- -a x != x"${ac_cpp_ft_sizeof_long}"; then
- unset ft_use_autoconf_sizeof_types
-else
- ft_use_autoconf_sizeof_types=yes
-fi
-
-AC_ARG_ENABLE(biarch-config,
-[ --enable-biarch-config install biarch ftconfig.h to support multiple
- architectures by single file], [], [])
-
-case :${ft_use_autoconf_sizeof_types}:${enable_biarch_config}: in
- :yes:yes:)
- AC_MSG_RESULT([broken but use it])
- unset ft_use_autoconf_sizeof_types
- ;;
- ::no:)
- AC_MSG_RESULT([works but ignore it])
- ft_use_autoconf_sizeof_types=yes
- ;;
- ::yes: | :::)
- AC_MSG_RESULT([yes])
- unset ft_use_autoconf_sizeof_types
- ;;
- *)
- AC_MSG_RESULT([no])
- ft_use_autoconf_sizeof_types=yes
- ;;
-esac
-
-if test x"${ft_use_autoconf_sizeof_types}" = xyes; then
- AC_DEFINE([FT_USE_AUTOCONF_SIZEOF_TYPES], [],
- [Define if autoconf sizeof types should be used.])
-fi
-
-CPPFLAGS="${orig_CPPFLAGS}"
-
-
-# checks for library functions
-
-AC_SYS_LARGEFILE
-
-# Here we check whether we can use our mmap file component.
-
-AC_ARG_ENABLE([mmap],
- AS_HELP_STRING([--disable-mmap],
- [do not check mmap() and do not use]),
- [enable_mmap="no"],[enable_mmap="yes"])
-if test "x${enable_mmap}" != "xno"; then
- AC_FUNC_MMAP
-fi
-if test "x${enable_mmap}" = "xno" \
- -o "$ac_cv_func_mmap_fixed_mapped" != "yes"; then
- FTSYS_SRC='$(BASE_DIR)/ftsystem.c'
-else
- FTSYS_SRC='$(BUILD_DIR)/ftsystem.c'
-
- AC_CHECK_DECLS([munmap],
- [],
- [],
- [
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/mman.h>
-
- ])
-
- FT_MUNMAP_PARAM
-fi
-AC_SUBST([FTSYS_SRC])
-
-AC_CHECK_FUNCS([memcpy memmove])
-
-
-# get compiler flags right
-#
-# We try to make the compiler work for C89-strict source. Even if the
-# C compiler is gcc and C89 flags are available, some system headers
-# (e.g., Android Bionic libc) are broken in C89 mode. We have to check
-# whether the compilation finishes successfully.
-#
-# Due to bugs in mingwrt 4.0.3 we don't use `-ansi' for MinGW.
-#
-# To avoid zillions of
-#
-# ISO C90 does not support 'long long'
-#
-# warnings, we disable `-pedantic' for gcc version < 4.6.
-#
-if test "x$GCC" = xyes; then
- XX_CFLAGS="-Wall"
- case "$host" in
- *-*-mingw*)
- XX_ANSIFLAGS="-pedantic"
- ;;
- *-*-aix*)
- XX_ANSIFLAGS="-pedantic"
- ;;
- *)
- GCC_VERSION=`$CC -dumpversion`
- GCC_MAJOR=`echo "$GCC_VERSION" | sed 's/\([[^.]][[^.]]*\).*/\1/'`
- GCC_MINOR=`echo "$GCC_VERSION" | sed 's/[[^.]][[^.]]*.\([[^.]][[^.]]*\).*/\1/'`
-
- XX_PEDANTIC=-pedantic
- if test $GCC_MAJOR -lt 4; then
- XX_PEDANTIC=
- else
- if test $GCC_MAJOR -eq 4 -a $GCC_MINOR -lt 6; then
- XX_PEDANTIC=
- fi
- fi
-
- XX_ANSIFLAGS=""
- for a in $XX_PEDANTIC -ansi
- do
- AC_MSG_CHECKING([gcc compiler flag ${a} to assure ANSI C works correctly])
- orig_CFLAGS="${CFLAGS}"
- CFLAGS="${CFLAGS} ${XX_ANSIFLAGS} ${a}"
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([
-
-#include <stdio.h>
-
- ],
- [
-
- {
- puts( "" );
- return 0;
- }
-
- ])],
- [AC_MSG_RESULT([ok, add it to XX_ANSIFLAGS])
- XX_ANSIFLAGS="${XX_ANSIFLAGS} ${a}"
- ],
- [AC_MSG_RESULT([no])])
- CFLAGS="${orig_CFLAGS}"
- done
- ;;
- esac
-else
- case "$host" in
- *-dec-osf*)
- CFLAGS=
- XX_CFLAGS="-std1 -g3"
- XX_ANSIFLAGS=
- ;;
- *)
- XX_CFLAGS=
- XX_ANSIFLAGS=
- ;;
- esac
-fi
-AC_SUBST([XX_CFLAGS])
-AC_SUBST([XX_ANSIFLAGS])
-
-
-# All library tests below try `pkg-config' first. If that fails, a function
-# from the library is tested in the traditional autoconf way (zlib, bzip2),
-# or a config script is called (libpng).
-#
-# The `xxx_reqpriv' variables are for the `Requires.private' field in
-# `freetype2.pc'. The `xxx_libspriv' variables are for the `Libs.private'
-# field in `freetype2.pc' if pkg-config doesn't find a proper .pc file.
-#
-# The `xxx_libsstaticconf' variables are for the `freetype-config' script.
-#
-# Note that a call to PKG_CHECK_MODULES(XXX, ...) sets and creates the
-# output variables `XXX_CFLAGS' and `XXX_LIBS'. In case one or both are set
-# for a library by the user, no entry for this library is added to
-# `Requires.private'. Instead, it gets added to `Libs.private'
-
-
-# check for system zlib
-
-AC_ARG_WITH([zlib],
- [AS_HELP_STRING([--with-zlib=@<:@yes|no|auto@:>@],
- [use system zlib instead of internal library @<:@default=auto@:>@])],
- [], [with_zlib=auto])
-
-have_zlib=no
-if test x"$with_zlib" = xyes -o x"$with_zlib" = xauto; then
- zlib_pkg="zlib"
- have_zlib_pkg=no
-
- if test x"$ZLIB_CFLAGS" = x -a x"$ZLIB_LIBS" = x; then
- PKG_CHECK_EXISTS([$zlib_pkg], [have_zlib_pkg=yes])
- fi
- PKG_CHECK_MODULES([ZLIB], [$zlib_pkg],
- [have_zlib="yes (pkg-config)"], [:])
-
- if test $have_zlib_pkg = yes; then
- # we have zlib.pc
- zlib_reqpriv="$zlib_pkg"
- zlib_libspriv=
- zlib_libsstaticconf=`$PKG_CONFIG --static --libs "$zlib_pkg"`
- else
- zlib_reqpriv=
-
- if test "$have_zlib" != no; then
- # ZLIB_CFLAGS and ZLIB_LIBS are set by the user
- zlib_libspriv="$ZLIB_LIBS"
- zlib_libsstaticconf="$ZLIB_LIBS"
- have_zlib="yes (ZLIB_CFLAGS and ZLIB_LIBS)"
- else
- # fall back to standard autoconf test
- AC_CHECK_LIB([z],
- [gzsetparams],
- [AC_CHECK_HEADER([zlib.h],
- [have_zlib="yes (autoconf test)"
- zlib_libspriv="-lz"
- zlib_libsstaticconf="$zlib_libspriv"
- ZLIB_LIBS="$zlib_libspriv"])])
- fi
- fi
-fi
-
-if test x"$with_zlib" = xyes -a "$have_zlib" = no; then
- AC_MSG_ERROR([external zlib support requested but library not found])
-fi
-
-
-# check for system libbz2
-
-AC_ARG_WITH([bzip2],
- [AS_HELP_STRING([--with-bzip2=@<:@yes|no|auto@:>@],
- [support bzip2 compressed fonts @<:@default=auto@:>@])],
- [], [with_bzip2=auto])
-
-have_bzip2=no
-if test x"$with_bzip2" = xyes -o x"$with_bzip2" = xauto; then
- bzip2_pkg="bzip2"
- have_bzip2_pkg=no
-
- if test x"$BZIP2_CFLAGS" = x -a x"$BZIP2_LIBS" = x; then
- PKG_CHECK_EXISTS([$bzip2_pkg], [have_bzip2_pkg=yes])
- fi
- PKG_CHECK_MODULES([BZIP2], [$bzip2_pkg],
- [have_bzip2="yes (pkg-config)"], [:])
-
- if test $have_bzip2_pkg = yes; then
- # we have bzip2.pc
- bzip2_reqpriv="$bzip2_pkg"
- bzip2_libspriv=
- bzip2_libsstaticconf=`$PKG_CONFIG --static --libs "$bzip2_pkg"`
- else
- bzip2_reqpriv=
-
- if test "$have_bzip2" != no; then
- # BZIP2_CFLAGS and BZIP2_LIBS are set by the user
- bzip2_libspriv="$BZIP2_LIBS"
- bzip2_libsstaticconf="$BZIP2_LIBS"
- have_bzip2="yes (BZIP2_CFLAGS and BZIP2_LIBS)"
- else
- # fall back to standard autoconf test
- AC_CHECK_LIB([bz2],
- [BZ2_bzDecompress],
- [AC_CHECK_HEADER([bzlib.h],
- [have_bzip2="yes (autoconf test)"
- bzip2_libspriv="-lbz2"
- bzip2_libsstaticconf="$bzip2_libspriv"
- BZIP2_LIBS="$bzip2_libspriv"])])
- fi
- fi
-fi
-
-if test x"$with_bzip2" = xyes -a "$have_bzip2" = no; then
- AC_MSG_ERROR([bzip2 support requested but library not found])
-fi
-
-
-# check for system libpng
-
-AC_ARG_WITH([png],
- [AS_HELP_STRING([--with-png=@<:@yes|no|auto@:>@],
- [support png compressed OpenType embedded bitmaps @<:@default=auto@:>@])],
- [], [with_png=auto])
-
-have_libpng=no
-if test x"$with_png" = xyes -o x"$with_png" = xauto; then
- libpng_pkg="libpng"
- have_libpng_pkg=no
-
- if test x"$LIBPNG_CFLAGS" = x -a x"$LIBPNG_LIBS" = x; then
- PKG_CHECK_EXISTS([$libpng_pkg], [have_libpng_pkg=yes])
- fi
- PKG_CHECK_MODULES([LIBPNG], [$libpng_pkg],
- [have_libpng="yes (pkg-config)"], [:])
-
- if test $have_libpng_pkg = yes; then
- # we have libpng.pc
- libpng_reqpriv="$libpng_pkg"
- libpng_libspriv=
- libpng_libsstaticconf=`$PKG_CONFIG --static --libs "$libpng_pkg"`
- else
- libpng_reqpriv=
-
- if test "$have_libpng" != no; then
- # LIBPNG_CFLAGS and LIBPNG_LIBS are set by the user
- libpng_libspriv="$LIBPNG_LIBS"
- libpng_libsstaticconf="$LIBPNG_LIBS"
- have_libpng="yes (LIBPNG_CFLAGS and LIBPNG_LIBS)"
- else
- # fall back to config script.
- AC_MSG_CHECKING([for libpng-config])
- if which libpng-config > /dev/null 2>&1; then
- LIBPNG_CFLAGS=`libpng-config --cflags`
- LIBPNG_LIBS=`libpng-config --ldflags`
- libpng_libspriv=`libpng-config --static --ldflags`
- libpng_libsstaticconf="$libpng_libspriv"
- have_libpng="yes (libpng-config)"
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- fi
- fi
- fi
-fi
-
-if test x"$with_png" = xyes -a "$have_libpng" = no; then
- AC_MSG_ERROR([libpng support requested but library not found])
-fi
-
-
-# check for system libharfbuzz
-
-AC_ARG_WITH([harfbuzz],
- [AS_HELP_STRING([--with-harfbuzz=@<:@yes|no|auto@:>@],
- [improve auto-hinting of OpenType fonts @<:@default=auto@:>@])],
- [], [with_harfbuzz=auto])
-
-have_harfbuzz=no
-if test x"$with_harfbuzz" = xyes -o x"$with_harfbuzz" = xauto; then
- harfbuzz_pkg="harfbuzz >= 0.9.21"
- have_harfbuzz_pkg=no
-
- if test x"$HARFBUZZ_CFLAGS" = x -a x"$HARFBUZZ_LIBS" = x; then
- PKG_CHECK_EXISTS([$harfbuzz_pkg], [have_harfbuzz_pkg=yes])
- fi
- PKG_CHECK_MODULES([HARFBUZZ], [$harfbuzz_pkg],
- [have_harfbuzz="yes (pkg-config)"], [:])
-
- if test $have_harfbuzz_pkg = yes; then
- # we have harfbuzz.pc
- harfbuzz_reqpriv="$harfbuzz_pkg"
- harfbuzz_libspriv=
- harfbuzz_libsstaticconf=`$PKG_CONFIG --static --libs "$harfbuzz_pkg"`
- else
- harfbuzz_reqpriv=
-
- if test "$have_harfbuzz" != no; then
- # HARFBUZZ_CFLAGS and HARFBUZZ_LIBS are set by the user
- harfbuzz_libspriv="$HARFBUZZ_LIBS"
- harfbuzz_libsstaticconf="$HARFBUZZ_LIBS"
- have_harfbuzz="yes (HARFBUZZ_CFLAGS and HARFBUZZ_LIBS)"
- else
- # since HarfBuzz is quite a new library we don't fall back to a
- # different test; additionally, it has too many dependencies
- :
- fi
- fi
-fi
-
-if test x"$with_harfbuzz" = xyes -a "$have_harfbuzz" = no; then
- AC_MSG_ERROR([harfbuzz support requested but library not found])
-fi
-
-
-# Some options handling SDKs/archs in CFLAGS should be copied
-# to LDFLAGS. Apple TechNote 2137 recommends to include these
-# options in CFLAGS but not in LDFLAGS.
-
-save_config_args=$*
-set dummy ${CFLAGS}
-i=1
-while test $i -le $#
-do
- c=$1
-
- case "${c}" in
- -isysroot|-arch) # options taking 1 argument
- a=$2
- AC_MSG_CHECKING([whether CFLAGS and LDFLAGS share ${c} ${a}])
- if expr " ${LDFLAGS} " : ".* ${c} *${a}.*" > /dev/null
- then
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no, copy to LDFLAGS])
- LDFLAGS="${LDFLAGS} ${c} ${a}"
- fi
- shift 1
- ;;
- -m32|-m64|-march=*|-mcpu=*) # options taking no argument
- AC_MSG_CHECKING([whether CFLAGS and LDFLAGS share ${c}])
- if expr " ${LDFLAGS} " : ".* ${c} *${a}.*" > /dev/null
- then
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no, copy to LDFLAGS])
- LDFLAGS="${LDFLAGS} ${c}"
- fi
- ;;
- # *)
- # AC_MSG_RESULT([${c} is not copied to LDFLAGS])
- # ;;
- esac
-
- shift 1
-done
-set ${save_config_args}
-
-
-# Whether to use Mac OS resource-based fonts.
-
-ftmac_c="" # src/base/ftmac.c should not be included in makefiles by default
-
-AC_ARG_WITH([old-mac-fonts],
- AS_HELP_STRING([--with-old-mac-fonts],
- [allow Mac resource-based fonts to be used]))
-if test x$with_old_mac_fonts = xyes; then
- orig_LDFLAGS="${LDFLAGS}"
- AC_MSG_CHECKING([CoreServices & ApplicationServices of Mac OS X])
- ft2_extra_libs="-Wl,-framework,CoreServices -Wl,-framework,ApplicationServices"
- LDFLAGS="$LDFLAGS $ft2_extra_libs"
- AC_LINK_IFELSE([
- AC_LANG_PROGRAM([
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-#endif
-
- ],
- [
-
- short res = 0;
-
-
- UseResFile( res );
-
- ])],
- [AC_MSG_RESULT([ok])
- ftmac_c='ftmac.c'
- AC_MSG_CHECKING([whether OS_INLINE macro is ANSI compatible])
- orig_CFLAGS="$CFLAGS -DFT_MACINTOSH"
- CFLAGS="$CFLAGS $XX_CFLAGS $XX_ANSIFLAGS"
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-#endif
-
- ],
- [
-
- /* OSHostByteOrder() is typed as OS_INLINE */
- int32_t os_byte_order = OSHostByteOrder();
-
-
- if ( OSBigEndian != os_byte_order )
- return 1;
-
- ])],
- [AC_MSG_RESULT([ok])
- CFLAGS="$orig_CFLAGS"
- CFLAGS="$CFLAGS -DHAVE_ANSI_OS_INLINE=1"
- ],
- [AC_MSG_RESULT([no, ANSI incompatible])
- CFLAGS="$orig_CFLAGS"
- ])
- AC_MSG_CHECKING([type ResourceIndex])
- orig_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $XX_CFLAGS $XX_ANSIFLAGS"
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-# include <Resources.h>
-#endif
-
- ],
- [
-
- ResourceIndex i = 0;
- return i;
-
- ])],
- [AC_MSG_RESULT([ok])
- CFLAGS="$orig_CFLAGS"
- CFLAGS="$CFLAGS -DHAVE_TYPE_RESOURCE_INDEX=1"
- ],
- [AC_MSG_RESULT([no])
- CFLAGS="$orig_CFLAGS"
- CFLAGS="$CFLAGS -DHAVE_TYPE_RESOURCE_INDEX=0"
- ])],
- [AC_MSG_RESULT([not found])
- ft2_extra_libs=""
- LDFLAGS="${orig_LDFLAGS}"
- CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"])
-else
- case x$host_os in
- xdarwin*)
- dnl AC_MSG_WARN([host system is MacOS but configured to build without Carbon])
- CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"
- ;;
- *)
- ;;
- esac
-fi
-
-
-# Whether to use FileManager, which is deprecated since Mac OS X 10.4.
-
-AC_ARG_WITH([fsspec],
- AS_HELP_STRING([--with-fsspec],
- [use obsolete FSSpec API of MacOS, if available (default=yes)]))
-if test x$with_fsspec = xno; then
- CFLAGS="$CFLAGS -DHAVE_FSSPEC=0"
-elif test x$with_old_mac_fonts = xyes -a x$with_fsspec != x; then
- AC_MSG_CHECKING([FSSpec-based FileManager])
- AC_LINK_IFELSE([
- AC_LANG_PROGRAM([
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-#endif
-
- ],
- [
-
- FCBPBPtr paramBlock;
- short vRefNum;
- long dirID;
- ConstStr255Param fileName;
- FSSpec* spec;
-
-
- /* FSSpec functions: deprecated since Mac OS X 10.4 */
- PBGetFCBInfoSync( paramBlock );
- FSMakeFSSpec( vRefNum, dirID, fileName, spec );
-
- ])],
- [AC_MSG_RESULT([ok])
- CFLAGS="$CFLAGS -DHAVE_FSSPEC=1"],
- [AC_MSG_RESULT([not found])
- CFLAGS="$CFLAGS -DHAVE_FSSPEC=0"])
-fi
-
-
-# Whether to use FileManager in Carbon since MacOS 9.x.
-
-AC_ARG_WITH([fsref],
- AS_HELP_STRING([--with-fsref],
- [use Carbon FSRef API of MacOS, if available (default=yes)]))
-if test x$with_fsref = xno; then
- AC_MSG_WARN([
-*** WARNING
- FreeType2 built without FSRef API cannot load
- data-fork fonts on MacOS, except of XXX.dfont.
- ])
- CFLAGS="$CFLAGS -DHAVE_FSREF=0"
-elif test x$with_old_mac_fonts = xyes -a x$with_fsref != x; then
- AC_MSG_CHECKING([FSRef-based FileManager])
- AC_LINK_IFELSE([
- AC_LANG_PROGRAM([
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-#endif
-
- ],
- [
-
- short vRefNum;
- long dirID;
- ConstStr255Param fileName;
-
- Boolean* isDirectory;
- UInt8* path;
- SInt16 desiredRefNum;
- SInt16* iterator;
- SInt16* actualRefNum;
- HFSUniStr255* outForkName;
- FSVolumeRefNum volume;
- FSCatalogInfoBitmap whichInfo;
- FSCatalogInfo* catalogInfo;
- FSForkInfo* forkInfo;
- FSRef* ref;
-
-#if HAVE_FSSPEC
- FSSpec* spec;
-#endif
-
- /* FSRef functions: no need to check? */
- FSGetForkCBInfo( desiredRefNum, volume, iterator,
- actualRefNum, forkInfo, ref,
- outForkName );
- FSPathMakeRef( path, ref, isDirectory );
-
-#if HAVE_FSSPEC
- FSpMakeFSRef ( spec, ref );
- FSGetCatalogInfo( ref, whichInfo, catalogInfo,
- outForkName, spec, ref );
-#endif
- ])],
- [AC_MSG_RESULT([ok])
- CFLAGS="$CFLAGS -DHAVE_FSREF=1"],
- [AC_MSG_RESULT([not found])
- CFLAGS="$CFLAGS -DHAVE_FSREF=0"])
-fi
-
-
-# Whether to use QuickDraw API in ToolBox, which is deprecated since
-# Mac OS X 10.4.
-
-AC_ARG_WITH([quickdraw-toolbox],
- AS_HELP_STRING([--with-quickdraw-toolbox],
- [use MacOS QuickDraw in ToolBox, if available (default=yes)]))
-if test x$with_quickdraw_toolbox = xno; then
- CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=0"
-elif test x$with_old_mac_fonts = xyes -a x$with_quickdraw_toolbox != x; then
- AC_MSG_CHECKING([QuickDraw FontManager functions in ToolBox])
- AC_LINK_IFELSE([
- AC_LANG_PROGRAM([
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Fonts.h>
-#endif
-
- ],
- [
-
- Str255 familyName;
- SInt16 familyID = 0;
- FMInput* fmIn = NULL;
- FMOutput* fmOut = NULL;
-
-
- GetFontName( familyID, familyName );
- GetFNum( familyName, &familyID );
- fmOut = FMSwapFont( fmIn );
-
- ])],
- [AC_MSG_RESULT([ok])
- CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=1"],
- [AC_MSG_RESULT([not found])
- CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=0"])
-fi
-
-
-# Whether to use QuickDraw API in Carbon, which is deprecated since
-# Mac OS X 10.4.
-
-AC_ARG_WITH([quickdraw-carbon],
- AS_HELP_STRING([--with-quickdraw-carbon],
- [use MacOS QuickDraw in Carbon, if available (default=yes)]))
-if test x$with_quickdraw_carbon = xno; then
- CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=0"
-elif test x$with_old_mac_fonts = xyes -a x$with_quickdraw_carbon != x; then
- AC_MSG_CHECKING([QuickDraw FontManager functions in Carbon])
- AC_LINK_IFELSE([
- AC_LANG_PROGRAM([
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Fonts.h>
-#endif
-
- ],
- [
-
- FMFontFamilyIterator famIter;
- FMFontFamily family;
- Str255 famNameStr;
- FMFontFamilyInstanceIterator instIter;
- FMFontStyle style;
- FMFontSize size;
- FMFont font;
- FSSpec* pathSpec;
-
-
- FMCreateFontFamilyIterator( NULL, NULL, kFMUseGlobalScopeOption,
- &famIter );
- FMGetNextFontFamily( &famIter, &family );
- FMGetFontFamilyName( family, famNameStr );
- FMCreateFontFamilyInstanceIterator( family, &instIter );
- FMGetNextFontFamilyInstance( &instIter, &font, &style, &size );
- FMDisposeFontFamilyInstanceIterator( &instIter );
- FMDisposeFontFamilyIterator( &famIter );
- FMGetFontContainer( font, pathSpec );
-
- ])],
- [AC_MSG_RESULT([ok])
- CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=1"],
- [AC_MSG_RESULT([not found])
- CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=0"])
-fi
-
-
-# Whether to use AppleTypeService since Mac OS X.
-
-AC_ARG_WITH([ats],
- AS_HELP_STRING([--with-ats],
- [use AppleTypeService, if available (default=yes)]))
-if test x$with_ats = xno; then
- CFLAGS="$CFLAGS -DHAVE_ATS=0"
-elif test x$with_old_mac_fonts = xyes -a x$with_ats != x; then
- AC_MSG_CHECKING([AppleTypeService functions])
- AC_LINK_IFELSE([
- AC_LANG_PROGRAM([
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <CoreServices/CoreServices.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-#endif
-
- ],
- [
-
- FSSpec* pathSpec;
-
-
- ATSFontFindFromName( NULL, kATSOptionFlagsUnRestrictedScope );
-#if HAVE_FSSPEC
- ATSFontGetFileSpecification( 0, pathSpec );
-#endif
-
- ])],
- [AC_MSG_RESULT([ok])
- CFLAGS="$CFLAGS -DHAVE_ATS=1"],
- [AC_MSG_RESULT([not found])
- CFLAGS="$CFLAGS -DHAVE_ATS=0"])
-fi
-
-case "$CFLAGS" in
- *HAVE_FSSPEC* | *HAVE_FSREF* | *HAVE_QUICKDRAW* | *HAVE_ATS* )
- AC_MSG_WARN([
-*** WARNING
- FSSpec/FSRef/QuickDraw/ATS options are explicitly given,
- thus it is recommended to replace src/base/ftmac.c by builds/mac/ftmac.c.
- ])
- CFLAGS="$CFLAGS "'-I$(TOP_DIR)/builds/mac/'
- ;;
- *)
- ;;
-esac
-
-
-# entries in Requires.private are separated by commas;
-REQUIRES_PRIVATE="$zlib_reqpriv, \
- $bzip2_reqpriv, \
- $libpng_reqpriv, \
- $harfbuzz_reqpriv"
-# beautify
-REQUIRES_PRIVATE=`echo "$REQUIRES_PRIVATE" \
- | sed -e 's/^ *//' \
- -e 's/ *$//' \
- -e 's/, */,/g' \
- -e 's/,,*/,/g' \
- -e 's/^,*//' \
- -e 's/,*$//' \
- -e 's/,/, /g'`
-
-LIBS_PRIVATE="$zlib_libspriv \
- $bzip2_libspriv \
- $libpng_libspriv \
- $harfbuzz_libspriv \
- $ft2_extra_libs"
-# beautify
-LIBS_PRIVATE=`echo "$LIBS_PRIVATE" \
- | sed -e 's/^ *//' \
- -e 's/ *$//' \
- -e 's/ */ /g'`
-
-LIBSSTATIC_CONFIG="-lfreetype \
- $zlib_libsstaticconf \
- $bzip2_libsstaticconf \
- $libpng_libsstaticconf \
- $harfbuzz_libsstaticconf \
- $ft2_extra_libs"
-# remove -L/usr/lib and -L/usr/lib64 since `freetype-config' adds them later
-# on if necessary; also beautify
-LIBSSTATIC_CONFIG=`echo "$LIBSSTATIC_CONFIG" \
- | sed -e 's|-L */usr/lib64/* | |g' \
- -e 's|-L */usr/lib/* | |g' \
- -e 's/^ *//' \
- -e 's/ *$//' \
- -e 's/ */ /g'`
-
-
-AC_SUBST([ftmac_c])
-AC_SUBST([REQUIRES_PRIVATE])
-AC_SUBST([LIBS_PRIVATE])
-AC_SUBST([LIBSSTATIC_CONFIG])
-
-AC_SUBST([hardcode_libdir_flag_spec])
-AC_SUBST([wl])
-AC_SUBST([build_libtool_libs])
-
-
-# changing LDFLAGS value should only be done after
-# lt_cv_prog_compiler_static_works test
-
-if test "$have_zlib" != no; then
- CFLAGS="$CFLAGS $ZLIB_CFLAGS -DFT_CONFIG_OPTION_SYSTEM_ZLIB"
- LDFLAGS="$LDFLAGS $ZLIB_LIBS"
-fi
-
-if test "$have_bzip2" != no; then
- CFLAGS="$CFLAGS $BZIP2_CFLAGS -DFT_CONFIG_OPTION_USE_BZIP2"
- LDFLAGS="$LDFLAGS $BZIP2_LIBS"
-fi
-if test "$have_libpng" != no; then
- CFLAGS="$CFLAGS $LIBPNG_CFLAGS -DFT_CONFIG_OPTION_USE_PNG"
- LDFLAGS="$LDFLAGS $LIBPNG_LIBS"
-fi
-if test "$have_harfbuzz" != no; then
- CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS -DFT_CONFIG_OPTION_USE_HARFBUZZ"
- LDFLAGS="$LDFLAGS $HARFBUZZ_LIBS"
-fi
-
-AC_SUBST([CFLAGS])
-AC_SUBST([LDFLAGS])
-
-# configuration file -- stay in 8.3 limit
-#
-# since #undef doesn't survive in configuration header files we replace
-# `/undef' with `#undef' after creating the output file
-
-AC_CONFIG_HEADERS([ftconfig.h:ftconfig.in],
- [mv ftconfig.h ftconfig.tmp
- sed 's|/undef|#undef|' < ftconfig.tmp > ftconfig.h
- rm ftconfig.tmp])
-
-# create the Unix-specific sub-Makefiles `builds/unix/unix-def.mk'
-# and `builds/unix/unix-cc.mk' that will be used by the build system
-#
-AC_CONFIG_FILES([unix-cc.mk:unix-cc.in
- unix-def.mk:unix-def.in])
-
-# re-generate the Jamfile to use libtool now
-#
-# AC_CONFIG_FILES([../../Jamfile:../../Jamfile.in])
-
-AC_OUTPUT
-
-AC_MSG_NOTICE([
-
-Library configuration:
- external zlib: $have_zlib
- bzip2: $have_bzip2
- libpng: $have_libpng
- harfbuzz: $have_harfbuzz
-])
-
-# end of configure.raw
diff --git a/builds/unix/detect.mk b/builds/unix/detect.mk
deleted file mode 100644
index a2cf0a72b..000000000
--- a/builds/unix/detect.mk
+++ /dev/null
@@ -1,93 +0,0 @@
-#
-# FreeType 2 configuration file to detect a UNIX host platform.
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-.PHONY: setup
-
-ifeq ($(PLATFORM),ansi)
-
- # Note: this test is duplicated in "builds/toplevel.mk".
- #
- is_unix := $(strip $(wildcard /sbin/init) \
- $(wildcard /usr/sbin/init) \
- $(wildcard /dev/null) \
- $(wildcard /hurd/auth))
- ifneq ($(is_unix),)
-
- PLATFORM := unix
-
- endif # test is_unix
-endif # test PLATFORM ansi
-
-ifeq ($(PLATFORM),unix)
- COPY := cp
- DELETE := rm -f
- CAT := cat
-
- # If `devel' is the requested target, we use a special configuration
- # file named `unix-dev.mk'. It disables optimization and libtool.
- #
- ifneq ($(findstring devel,$(MAKECMDGOALS)),)
- CONFIG_FILE := unix-dev.mk
- CC := gcc
- devel: setup
- .PHONY: devel
- else
-
- # If `lcc' is the requested target, we use a special configuration
- # file named `unix-lcc.mk'. It disables libtool for LCC.
- #
- ifneq ($(findstring lcc,$(MAKECMDGOALS)),)
- CONFIG_FILE := unix-lcc.mk
- CC := lcc
- lcc: setup
- .PHONY: lcc
- else
-
- # If a Unix platform is detected, the configure script is called and
- # `unix-def.mk' together with `unix-cc.mk' is created.
- #
- # Arguments to `configure' should be in the CFG variable. Example:
- #
- # make CFG="--prefix=/usr --disable-static"
- #
- # If you need to set CFLAGS or LDFLAGS, do it here also.
- #
- # Feel free to add support for other platform specific compilers in
- # this directory (e.g. solaris.mk + changes here to detect the
- # platform).
- #
- CONFIG_FILE := unix.mk
- unix: setup
- must_configure := 1
- .PHONY: unix
- endif
- endif
-
- have_Makefile := $(wildcard $(OBJ_DIR)/Makefile)
-
- setup: std_setup
- ifdef must_configure
- ifneq ($(have_Makefile),)
- # we are building FT2 not in the src tree
- $(TOP_DIR)/builds/unix/configure $(value CFG)
- else
- cd builds/unix; \
- ./configure $(value CFG)
- endif
- endif
-
-endif # test PLATFORM unix
-
-
-# EOF
diff --git a/builds/unix/freetype-config.in b/builds/unix/freetype-config.in
deleted file mode 100644
index 2c1c160f8..000000000
--- a/builds/unix/freetype-config.in
+++ /dev/null
@@ -1,211 +0,0 @@
-#! /bin/sh
-#
-# Copyright 2000-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-LC_ALL=C
-export LC_ALL
-
-
-# if `pkg-config' is available, use values from `freetype2.pc'
-%PKG_CONFIG% --atleast-pkgconfig-version 0.24 >/dev/null 2>&1
-if test $? -eq 0 ; then
- # note that option `--variable' is not affected by the
- # PKG_CONFIG_SYSROOT_DIR environment variable
- if test "x$SYSROOT" != "x" ; then
- PKG_CONFIG_SYSROOT_DIR="$SYSROOT"
- export PKG_CONFIG_SYSROOT_DIR
- fi
-
- prefix=`%PKG_CONFIG% --variable prefix freetype2`
- exec_prefix=`%PKG_CONFIG% --variable exec_prefix freetype2`
-
- includedir=`%PKG_CONFIG% --variable includedir freetype2`
- libdir=`%PKG_CONFIG% --variable libdir freetype2`
-
- version=`%PKG_CONFIG% --modversion freetype2`
-
- cflags=`%PKG_CONFIG% --cflags freetype2`
- dynamic_libs=`%PKG_CONFIG% --libs freetype2`
- static_libs=`%PKG_CONFIG% --static --libs freetype2`
-else
- prefix="%prefix%"
- exec_prefix="%exec_prefix%"
-
- includedir="%includedir%"
- libdir="%libdir%"
-
- version=%ft_version%
-
- cflags="-I${SYSROOT}$includedir/freetype2"
- dynamic_libs="-lfreetype"
- static_libs="%LIBSSTATIC_CONFIG%"
- if test "${SYSROOT}$libdir" != "/usr/lib" &&
- test "${SYSROOT}$libdir" != "/usr/lib64" ; then
- libs_L="-L${SYSROOT}$libdir"
- fi
-fi
-
-orig_prefix=$prefix
-orig_exec_prefix=$exec_prefix
-
-orig_includedir=$includedir
-orig_libdir=$libdir
-
-include_suffix=`echo $includedir | sed "s|$prefix||"`
-lib_suffix=`echo $libdir | sed "s|$exec_prefix||"`
-
-
-usage()
-{
- cat <<EOF
-Usage: freetype-config [OPTION]...
-Get FreeType compilation and linking information.
-
-Options:
- --prefix display \`--prefix' value used for building the
- FreeType library
- --prefix=PREFIX override \`--prefix' value with PREFIX
- --exec-prefix display \`--exec-prefix' value used for building
- the FreeType library
- --exec-prefix=EPREFIX override \`--exec-prefix' value with EPREFIX
- --version display libtool version of the FreeType library
- --ftversion display FreeType version number
- --libs display flags for linking with the FreeType library
- --libtool display library name for linking with libtool
- --cflags display flags for compiling with the FreeType
- library
- --static make command line options display flags
- for static linking
- --help display this help and exit
-EOF
- exit $1
-}
-
-
-if test $# -eq 0 ; then
- usage 1 1>&2
-fi
-
-
-while test $# -gt 0 ; do
- case "$1" in
- -*=*)
- optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
- ;;
- *)
- optarg=
- ;;
- esac
-
- case $1 in
- --prefix=*)
- prefix=$optarg
- local_prefix=yes
- ;;
- --prefix)
- echo_prefix=yes
- ;;
- --exec-prefix=*)
- exec_prefix=$optarg
- exec_prefix_set=yes
- local_prefix=yes
- ;;
- --exec-prefix)
- echo_exec_prefix=yes
- ;;
- --version)
- echo_version=yes
- break
- ;;
- --ftversion)
- echo_ft_version=yes
- ;;
- --cflags)
- echo_cflags=yes
- ;;
- --libs)
- echo_libs=yes
- ;;
- --libtool)
- echo_libtool=yes
- ;;
- --static)
- show_static=yes
- ;;
- --help)
- usage 0
- ;;
- *)
- usage 1 1>&2
- ;;
- esac
- shift
-done
-
-
-if test "$local_prefix" = "yes" ; then
- if test "$exec_prefix_set" != "yes" ; then
- exec_prefix=$prefix
- fi
-fi
-
-if test "$local_prefix" = "yes" ; then
- includedir=${prefix}${include_suffix}
- if test "$exec_prefix_set" = "yes" ; then
- libdir=${exec_prefix}${lib_suffix}
- else
- libdir=${prefix}${lib_suffix}
- fi
-fi
-
-
-if test "$echo_version" = "yes" ; then
- echo $version
-fi
-
-if test "$echo_prefix" = "yes" ; then
- echo ${SYSROOT}$prefix
-fi
-
-if test "$echo_exec_prefix" = "yes" ; then
- echo ${SYSROOT}$exec_prefix
-fi
-
-if test "$echo_ft_version" = "yes" ; then
- major=`grep define ${SYSROOT}$includedir/freetype2/freetype/freetype.h \
- | grep FREETYPE_MAJOR \
- | sed 's/.*[ ]\([0-9][0-9]*\).*/\1/'`
- minor=`grep define ${SYSROOT}$includedir/freetype2/freetype/freetype.h \
- | grep FREETYPE_MINOR \
- | sed 's/.*[ ]\([0-9][0-9]*\).*/\1/'`
- patch=`grep define ${SYSROOT}$includedir/freetype2/freetype/freetype.h \
- | grep FREETYPE_PATCH \
- | sed 's/.*[ ]\([0-9][0-9]*\).*/\1/'`
- echo $major.$minor.$patch
-fi
-
-if test "$echo_cflags" = "yes" ; then
- echo $cflags | sed "s|$orig_includedir/freetype2|$includedir/freetype2|"
-fi
-
-if test "$echo_libs" = "yes" ; then
- if test "$show_static" = "yes" ; then
- libs="$libs_L $static_libs"
- else
- libs="$libs_L $dynamic_libs"
- fi
- echo $libs | sed "s|$orig_libdir|$libdir|"
-fi
-
-if test "$echo_libtool" = "yes" ; then
- echo ${SYSROOT}$libdir/libfreetype.la
-fi
-
-# EOF
diff --git a/builds/unix/freetype2.in b/builds/unix/freetype2.in
deleted file mode 100644
index c4dfda4ab..000000000
--- a/builds/unix/freetype2.in
+++ /dev/null
@@ -1,14 +0,0 @@
-prefix=%prefix%
-exec_prefix=%exec_prefix%
-libdir=%libdir%
-includedir=%includedir%
-
-Name: FreeType 2
-URL: http://freetype.org
-Description: A free, high-quality, and portable font engine.
-Version: %ft_version%
-Requires:
-Requires.private: %REQUIRES_PRIVATE%
-Libs: -L${libdir} -lfreetype
-Libs.private: %LIBS_PRIVATE%
-Cflags: -I${includedir}/freetype2
diff --git a/builds/unix/freetype2.m4 b/builds/unix/freetype2.m4
deleted file mode 100644
index 172212f10..000000000
--- a/builds/unix/freetype2.m4
+++ /dev/null
@@ -1,194 +0,0 @@
-# Configure paths for FreeType2
-# Marcelo Magallon 2001-10-26, based on gtk.m4 by Owen Taylor
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-#
-# As a special exception to the FreeType project license, this file may be
-# distributed as part of a program that contains a configuration script
-# generated by Autoconf, under the same distribution terms as the rest of
-# that program.
-#
-# serial 4
-
-# AC_CHECK_FT2([MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
-# Test for FreeType 2, and define FT2_CFLAGS and FT2_LIBS.
-# MINIMUM-VERSION is what libtool reports; the default is `7.0.1' (this is
-# FreeType 2.0.4).
-#
-AC_DEFUN([AC_CHECK_FT2],
- [# Get the cflags and libraries from the freetype-config script
- #
- AC_ARG_WITH([ft-prefix],
- dnl don't quote AS_HELP_STRING!
- AS_HELP_STRING([--with-ft-prefix=PREFIX],
- [Prefix where FreeType is installed (optional)]),
- [ft_config_prefix="$withval"],
- [ft_config_prefix=""])
-
- AC_ARG_WITH([ft-exec-prefix],
- dnl don't quote AS_HELP_STRING!
- AS_HELP_STRING([--with-ft-exec-prefix=PREFIX],
- [Exec prefix where FreeType is installed (optional)]),
- [ft_config_exec_prefix="$withval"],
- [ft_config_exec_prefix=""])
-
- AC_ARG_ENABLE([freetypetest],
- dnl don't quote AS_HELP_STRING!
- AS_HELP_STRING([--disable-freetypetest],
- [Do not try to compile and run a test FreeType program]),
- [],
- [enable_fttest=yes])
-
- if test x$ft_config_exec_prefix != x ; then
- ft_config_args="$ft_config_args --exec-prefix=$ft_config_exec_prefix"
- if test x${FT2_CONFIG+set} != xset ; then
- FT2_CONFIG=$ft_config_exec_prefix/bin/freetype-config
- fi
- fi
-
- if test x$ft_config_prefix != x ; then
- ft_config_args="$ft_config_args --prefix=$ft_config_prefix"
- if test x${FT2_CONFIG+set} != xset ; then
- FT2_CONFIG=$ft_config_prefix/bin/freetype-config
- fi
- fi
-
- if test "x$FT2_CONFIG" = x ; then
- AC_PATH_TOOL([FT2_CONFIG], [freetype-config], [no])
- fi
-
- min_ft_version=m4_if([$1], [], [7.0.1], [$1])
- AC_MSG_CHECKING([for FreeType -- version >= $min_ft_version])
- no_ft=""
- if test "$FT2_CONFIG" = "no" ; then
- no_ft=yes
- else
- FT2_CFLAGS=`$FT2_CONFIG $ft_config_args --cflags`
- FT2_LIBS=`$FT2_CONFIG $ft_config_args --libs`
- ft_config_major_version=`$FT2_CONFIG $ft_config_args --version | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
- ft_config_minor_version=`$FT2_CONFIG $ft_config_args --version | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
- ft_config_micro_version=`$FT2_CONFIG $ft_config_args --version | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
- ft_min_major_version=`echo $min_ft_version | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
- ft_min_minor_version=`echo $min_ft_version | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
- ft_min_micro_version=`echo $min_ft_version | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
- if test x$enable_fttest = xyes ; then
- ft_config_is_lt=""
- if test $ft_config_major_version -lt $ft_min_major_version ; then
- ft_config_is_lt=yes
- else
- if test $ft_config_major_version -eq $ft_min_major_version ; then
- if test $ft_config_minor_version -lt $ft_min_minor_version ; then
- ft_config_is_lt=yes
- else
- if test $ft_config_minor_version -eq $ft_min_minor_version ; then
- if test $ft_config_micro_version -lt $ft_min_micro_version ; then
- ft_config_is_lt=yes
- fi
- fi
- fi
- fi
- fi
- if test x$ft_config_is_lt = xyes ; then
- no_ft=yes
- else
- ac_save_CFLAGS="$CFLAGS"
- ac_save_LIBS="$LIBS"
- CFLAGS="$CFLAGS $FT2_CFLAGS"
- LIBS="$FT2_LIBS $LIBS"
-
- #
- # Sanity checks for the results of freetype-config to some extent.
- #
- AC_RUN_IFELSE([
- AC_LANG_SOURCE([[
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include <stdio.h>
-#include <stdlib.h>
-
-int
-main()
-{
- FT_Library library;
- FT_Error error;
-
- error = FT_Init_FreeType(&library);
-
- if (error)
- return 1;
- else
- {
- FT_Done_FreeType(library);
- return 0;
- }
-}
-
- ]])
- ],
- [],
- [no_ft=yes],
- [echo $ECHO_N "cross compiling; assuming OK... $ECHO_C"])
-
- CFLAGS="$ac_save_CFLAGS"
- LIBS="$ac_save_LIBS"
- fi # test $ft_config_version -lt $ft_min_version
- fi # test x$enable_fttest = xyes
- fi # test "$FT2_CONFIG" = "no"
-
- if test x$no_ft = x ; then
- AC_MSG_RESULT([yes])
- m4_if([$2], [], [:], [$2])
- else
- AC_MSG_RESULT([no])
- if test "$FT2_CONFIG" = "no" ; then
- AC_MSG_WARN([
-
- The freetype-config script installed by FreeType 2 could not be found.
- If FreeType 2 was installed in PREFIX, make sure PREFIX/bin is in
- your path, or set the FT2_CONFIG environment variable to the
- full path to freetype-config.
- ])
- else
- if test x$ft_config_is_lt = xyes ; then
- AC_MSG_WARN([
-
- Your installed version of the FreeType 2 library is too old.
- If you have different versions of FreeType 2, make sure that
- correct values for --with-ft-prefix or --with-ft-exec-prefix
- are used, or set the FT2_CONFIG environment variable to the
- full path to freetype-config.
- ])
- else
- AC_MSG_WARN([
-
- The FreeType test program failed to run. If your system uses
- shared libraries and they are installed outside the normal
- system library path, make sure the variable LD_LIBRARY_PATH
- (or whatever is appropriate for your system) is correctly set.
- ])
- fi
- fi
-
- FT2_CFLAGS=""
- FT2_LIBS=""
- m4_if([$3], [], [:], [$3])
- fi
-
- AC_SUBST([FT2_CFLAGS])
- AC_SUBST([FT2_LIBS])])
-
-# end of freetype2.m4
diff --git a/builds/unix/ft-munmap.m4 b/builds/unix/ft-munmap.m4
deleted file mode 100644
index 27dd7d50c..000000000
--- a/builds/unix/ft-munmap.m4
+++ /dev/null
@@ -1,32 +0,0 @@
-## FreeType specific autoconf tests
-#
-# Copyright 2002-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-# serial 2
-
-AC_DEFUN([FT_MUNMAP_PARAM],
- [AC_MSG_CHECKING([for munmap's first parameter type])
- AC_COMPILE_IFELSE([
- AC_LANG_SOURCE([[
-
-#include <unistd.h>
-#include <sys/mman.h>
-int munmap(void *, size_t);
-
- ]])
- ],
- [AC_MSG_RESULT([void *])
- AC_DEFINE([MUNMAP_USES_VOIDP],
- [],
- [Define to 1 if the first argument of munmap is of type void *])],
- [AC_MSG_RESULT([char *])])
- ])
-
-# end of ft-munmap.m4
diff --git a/builds/unix/ftconfig.in b/builds/unix/ftconfig.in
deleted file mode 100644
index abd101de9..000000000
--- a/builds/unix/ftconfig.in
+++ /dev/null
@@ -1,523 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftconfig.in */
-/* */
-/* UNIX-specific configuration file (specification only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This header file contains a number of macro definitions that are used */
- /* by the rest of the engine. Most of the macros here are automatically */
- /* determined at compile time, and you should not need to change it to */
- /* port FreeType, except to compile the library with a non-ANSI */
- /* compiler. */
- /* */
- /* Note however that if some specific modifications are needed, we */
- /* advise you to place a modified copy in your build directory. */
- /* */
- /* The build directory is usually `builds/<system>', and contains */
- /* system-specific files that are always included first when building */
- /* the library. */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTCONFIG_H_
-#define FTCONFIG_H_
-
-#include <ft2build.h>
-#include FT_CONFIG_OPTIONS_H
-#include FT_CONFIG_STANDARD_LIBRARY_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* PLATFORM-SPECIFIC CONFIGURATION MACROS */
- /* */
- /* These macros can be toggled to suit a specific system. The current */
- /* ones are defaults used to compile FreeType in an ANSI C environment */
- /* (16bit compilers are also supported). Copy this file to your own */
- /* `builds/<system>' directory, and edit it to port the engine. */
- /* */
- /*************************************************************************/
-
-
-#undef HAVE_UNISTD_H
-#undef HAVE_FCNTL_H
-#undef HAVE_STDINT_H
-
-
- /* There are systems (like the Texas Instruments 'C54x) where a `char' */
- /* has 16 bits. ANSI C says that sizeof(char) is always 1. Since an */
- /* `int' has 16 bits also for this system, sizeof(int) gives 1 which */
- /* is probably unexpected. */
- /* */
- /* `CHAR_BIT' (defined in limits.h) gives the number of bits in a */
- /* `char' type. */
-
-#ifndef FT_CHAR_BIT
-#define FT_CHAR_BIT CHAR_BIT
-#endif
-
-
-#undef FT_USE_AUTOCONF_SIZEOF_TYPES
-#ifdef FT_USE_AUTOCONF_SIZEOF_TYPES
-
-#undef SIZEOF_INT
-#undef SIZEOF_LONG
-#define FT_SIZEOF_INT SIZEOF_INT
-#define FT_SIZEOF_LONG SIZEOF_LONG
-
-#else /* !FT_USE_AUTOCONF_SIZEOF_TYPES */
-
- /* Following cpp computation of the bit length of int and long */
- /* is copied from default include/freetype/config/ftconfig.h. */
- /* If any improvement is required for this file, it should be */
- /* applied to the original header file for the builders that */
- /* do not use configure script. */
-
- /* The size of an `int' type. */
-#if FT_UINT_MAX == 0xFFFFUL
-#define FT_SIZEOF_INT (16 / FT_CHAR_BIT)
-#elif FT_UINT_MAX == 0xFFFFFFFFUL
-#define FT_SIZEOF_INT (32 / FT_CHAR_BIT)
-#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL
-#define FT_SIZEOF_INT (64 / FT_CHAR_BIT)
-#else
-#error "Unsupported size of `int' type!"
-#endif
-
- /* The size of a `long' type. A five-byte `long' (as used e.g. on the */
- /* DM642) is recognized but avoided. */
-#if FT_ULONG_MAX == 0xFFFFFFFFUL
-#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
-#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL
-#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
-#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL
-#define FT_SIZEOF_LONG (64 / FT_CHAR_BIT)
-#else
-#error "Unsupported size of `long' type!"
-#endif
-
-#endif /* !FT_USE_AUTOCONF_SIZEOF_TYPES */
-
-
- /* FT_UNUSED is a macro used to indicate that a given parameter is not */
- /* used -- this is only used to get rid of unpleasant compiler warnings */
-#ifndef FT_UNUSED
-#define FT_UNUSED( arg ) ( (arg) = (arg) )
-#endif
-
-
- /*************************************************************************/
- /* */
- /* AUTOMATIC CONFIGURATION MACROS */
- /* */
- /* These macros are computed from the ones defined above. Don't touch */
- /* their definition, unless you know precisely what you are doing. No */
- /* porter should need to mess with them. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Mac support */
- /* */
- /* This is the only necessary change, so it is defined here instead */
- /* providing a new configuration file. */
- /* */
-#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
- /* no Carbon frameworks for 64bit 10.4.x */
- /* AvailabilityMacros.h is available since Mac OS X 10.2, */
- /* so guess the system version by maximum errno before inclusion */
-#include <errno.h>
-#ifdef ECANCELED /* defined since 10.2 */
-#include "AvailabilityMacros.h"
-#endif
-#if defined( __LP64__ ) && \
- ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
-/undef FT_MACINTOSH
-#endif
-
-#elif defined( __SC__ ) || defined( __MRC__ )
- /* Classic MacOS compilers */
-#include "ConditionalMacros.h"
-#if TARGET_OS_MAC
-#define FT_MACINTOSH 1
-#endif
-
-#endif
-
-
- /* Fix compiler warning with sgi compiler */
-#if defined( __sgi ) && !defined( __GNUC__ )
-#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
-#pragma set woff 3505
-#endif
-#endif
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* basic_types */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int16 */
- /* */
- /* <Description> */
- /* A typedef for a 16bit signed integer type. */
- /* */
- typedef signed short FT_Int16;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt16 */
- /* */
- /* <Description> */
- /* A typedef for a 16bit unsigned integer type. */
- /* */
- typedef unsigned short FT_UInt16;
-
- /* */
-
-
- /* this #if 0 ... #endif clause is for documentation purposes */
-#if 0
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int32 */
- /* */
- /* <Description> */
- /* A typedef for a 32bit signed integer type. The size depends on */
- /* the configuration. */
- /* */
- typedef signed XXX FT_Int32;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt32 */
- /* */
- /* A typedef for a 32bit unsigned integer type. The size depends on */
- /* the configuration. */
- /* */
- typedef unsigned XXX FT_UInt32;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int64 */
- /* */
- /* A typedef for a 64bit signed integer type. The size depends on */
- /* the configuration. Only defined if there is real 64bit support; */
- /* otherwise, it gets emulated with a structure (if necessary). */
- /* */
- typedef signed XXX FT_Int64;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt64 */
- /* */
- /* A typedef for a 64bit unsigned integer type. The size depends on */
- /* the configuration. Only defined if there is real 64bit support; */
- /* otherwise, it gets emulated with a structure (if necessary). */
- /* */
- typedef unsigned XXX FT_UInt64;
-
- /* */
-
-#endif
-
-#if FT_SIZEOF_INT == 4
-
- typedef signed int FT_Int32;
- typedef unsigned int FT_UInt32;
-
-#elif FT_SIZEOF_LONG == 4
-
- typedef signed long FT_Int32;
- typedef unsigned long FT_UInt32;
-
-#else
-#error "no 32bit type found -- please check your configuration files"
-#endif
-
-
- /* look up an integer type that is at least 32 bits */
-#if FT_SIZEOF_INT >= 4
-
- typedef int FT_Fast;
- typedef unsigned int FT_UFast;
-
-#elif FT_SIZEOF_LONG >= 4
-
- typedef long FT_Fast;
- typedef unsigned long FT_UFast;
-
-#endif
-
-
- /* determine whether we have a 64-bit int type */
- /* (mostly for environments without `autoconf') */
-#if FT_SIZEOF_LONG == 8
-
- /* FT_LONG64 must be defined if a 64-bit type is available */
-#define FT_LONG64
-#define FT_INT64 long
-#define FT_UINT64 unsigned long
-
- /* we handle the LLP64 scheme separately for GCC and clang, */
- /* suppressing the `long long' warning */
-#elif ( FT_SIZEOF_LONG == 4 ) && \
- defined( HAVE_LONG_LONG_INT ) && \
- defined( __GNUC__ )
-#pragma GCC diagnostic ignored "-Wlong-long"
-#define FT_LONG64
-#define FT_INT64 long long int
-#define FT_UINT64 unsigned long long int
-
- /*************************************************************************/
- /* */
- /* A 64-bit data type may create compilation problems if you compile */
- /* in strict ANSI mode. To avoid them, we disable other 64-bit data */
- /* types if __STDC__ is defined. You can however ignore this rule */
- /* by defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
- /* */
-#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
-
-#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
-
-#define FT_LONG64
-#define FT_INT64 long long int
-#define FT_UINT64 unsigned long long int
-
-#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
-
- /* this compiler provides the __int64 type */
-#define FT_LONG64
-#define FT_INT64 __int64
-#define FT_UINT64 unsigned __int64
-
-#elif defined( __BORLANDC__ ) /* Borland C++ */
-
- /* XXXX: We should probably check the value of __BORLANDC__ in order */
- /* to test the compiler version. */
-
- /* this compiler provides the __int64 type */
-#define FT_LONG64
-#define FT_INT64 __int64
-#define FT_UINT64 unsigned __int64
-
-#elif defined( __WATCOMC__ ) /* Watcom C++ */
-
- /* Watcom doesn't provide 64-bit data types */
-
-#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
-
-#define FT_LONG64
-#define FT_INT64 long long int
-#define FT_UINT64 unsigned long long int
-
-#elif defined( __GNUC__ )
-
- /* GCC provides the `long long' type */
-#define FT_LONG64
-#define FT_INT64 long long int
-#define FT_UINT64 unsigned long long int
-
-#endif /* __STDC_VERSION__ >= 199901L */
-
-#endif /* FT_SIZEOF_LONG == 8 */
-
-#ifdef FT_LONG64
- typedef FT_INT64 FT_Int64;
- typedef FT_UINT64 FT_UInt64;
-#endif
-
-
-#ifdef _WIN64
- /* only 64bit Windows uses the LLP64 data model, i.e., */
- /* 32bit integers, 64bit pointers */
-#define FT_UINT_TO_POINTER( x ) (void*)(unsigned __int64)(x)
-#else
-#define FT_UINT_TO_POINTER( x ) (void*)(unsigned long)(x)
-#endif
-
-
- /*************************************************************************/
- /* */
- /* miscellaneous */
- /* */
- /*************************************************************************/
-
-
-#define FT_BEGIN_STMNT do {
-#define FT_END_STMNT } while ( 0 )
-#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
-
-
- /* typeof condition taken from gnulib's `intprops.h' header file */
-#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \
- ( defined( __IBMC__ ) && __IBMC__ >= 1210 && \
- defined( __IBM__TYPEOF__ ) ) || \
- ( defined( __SUNPRO_C ) && __SUNPRO_C >= 0x5110 && !__STDC__ ) )
-#define FT_TYPEOF( type ) ( __typeof__ ( type ) )
-#else
-#define FT_TYPEOF( type ) /* empty */
-#endif
-
-
-#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
-
-#define FT_LOCAL( x ) static x
-#define FT_LOCAL_DEF( x ) static x
-
-#else
-
-#ifdef __cplusplus
-#define FT_LOCAL( x ) extern "C" x
-#define FT_LOCAL_DEF( x ) extern "C" x
-#else
-#define FT_LOCAL( x ) extern x
-#define FT_LOCAL_DEF( x ) x
-#endif
-
-#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
-
-#define FT_LOCAL_ARRAY( x ) extern const x
-#define FT_LOCAL_ARRAY_DEF( x ) const x
-
-
-#ifndef FT_BASE
-
-#ifdef __cplusplus
-#define FT_BASE( x ) extern "C" x
-#else
-#define FT_BASE( x ) extern x
-#endif
-
-#endif /* !FT_BASE */
-
-
-#ifndef FT_BASE_DEF
-
-#ifdef __cplusplus
-#define FT_BASE_DEF( x ) x
-#else
-#define FT_BASE_DEF( x ) x
-#endif
-
-#endif /* !FT_BASE_DEF */
-
-
-#ifndef FT_EXPORT
-
-#ifdef __cplusplus
-#define FT_EXPORT( x ) extern "C" x
-#else
-#define FT_EXPORT( x ) extern x
-#endif
-
-#endif /* !FT_EXPORT */
-
-
-#ifndef FT_EXPORT_DEF
-
-#ifdef __cplusplus
-#define FT_EXPORT_DEF( x ) extern "C" x
-#else
-#define FT_EXPORT_DEF( x ) extern x
-#endif
-
-#endif /* !FT_EXPORT_DEF */
-
-
-#ifndef FT_EXPORT_VAR
-
-#ifdef __cplusplus
-#define FT_EXPORT_VAR( x ) extern "C" x
-#else
-#define FT_EXPORT_VAR( x ) extern x
-#endif
-
-#endif /* !FT_EXPORT_VAR */
-
- /* The following macros are needed to compile the library with a */
- /* C++ compiler and with 16bit compilers. */
- /* */
-
- /* This is special. Within C++, you must specify `extern "C"' for */
- /* functions which are used via function pointers, and you also */
- /* must do that for structures which contain function pointers to */
- /* assure C linkage -- it's not possible to have (local) anonymous */
- /* functions which are accessed by (global) function pointers. */
- /* */
- /* */
- /* FT_CALLBACK_DEF is used to _define_ a callback function. */
- /* */
- /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
- /* contains pointers to callback functions. */
- /* */
- /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
- /* that contains pointers to callback functions. */
- /* */
- /* */
- /* Some 16bit compilers have to redefine these macros to insert */
- /* the infamous `_cdecl' or `__fastcall' declarations. */
- /* */
-#ifndef FT_CALLBACK_DEF
-#ifdef __cplusplus
-#define FT_CALLBACK_DEF( x ) extern "C" x
-#else
-#define FT_CALLBACK_DEF( x ) static x
-#endif
-#endif /* FT_CALLBACK_DEF */
-
-#ifndef FT_CALLBACK_TABLE
-#ifdef __cplusplus
-#define FT_CALLBACK_TABLE extern "C"
-#define FT_CALLBACK_TABLE_DEF extern "C"
-#else
-#define FT_CALLBACK_TABLE extern
-#define FT_CALLBACK_TABLE_DEF /* nothing */
-#endif
-#endif /* FT_CALLBACK_TABLE */
-
-
-FT_END_HEADER
-
-
-#endif /* FTCONFIG_H_ */
-
-
-/* END */
diff --git a/builds/unix/ftsystem.c b/builds/unix/ftsystem.c
deleted file mode 100644
index 48a235ba3..000000000
--- a/builds/unix/ftsystem.c
+++ /dev/null
@@ -1,420 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsystem.c */
-/* */
-/* Unix-specific FreeType low-level system interface (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
- /* we use our special ftconfig.h file, not the standard one */
-#include <ftconfig.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_SYSTEM_H
-#include FT_ERRORS_H
-#include FT_TYPES_H
-#include FT_INTERNAL_STREAM_H
-
- /* memory-mapping includes and definitions */
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sys/mman.h>
-#ifndef MAP_FILE
-#define MAP_FILE 0x00
-#endif
-
-#ifdef MUNMAP_USES_VOIDP
-#define MUNMAP_ARG_CAST void *
-#else
-#define MUNMAP_ARG_CAST char *
-#endif
-
-#ifdef NEED_MUNMAP_DECL
-
-#ifdef __cplusplus
- extern "C"
-#else
- extern
-#endif
- int
- munmap( char* addr,
- int len );
-
-#define MUNMAP_ARG_CAST char *
-
-#endif /* NEED_DECLARATION_MUNMAP */
-
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-
- /*************************************************************************/
- /* */
- /* MEMORY MANAGEMENT INTERFACE */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_alloc */
- /* */
- /* <Description> */
- /* The memory allocation function. */
- /* */
- /* <Input> */
- /* memory :: A pointer to the memory object. */
- /* */
- /* size :: The requested size in bytes. */
- /* */
- /* <Return> */
- /* The address of newly allocated block. */
- /* */
- FT_CALLBACK_DEF( void* )
- ft_alloc( FT_Memory memory,
- long size )
- {
- FT_UNUSED( memory );
-
- return malloc( size );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_realloc */
- /* */
- /* <Description> */
- /* The memory reallocation function. */
- /* */
- /* <Input> */
- /* memory :: A pointer to the memory object. */
- /* */
- /* cur_size :: The current size of the allocated memory block. */
- /* */
- /* new_size :: The newly requested size in bytes. */
- /* */
- /* block :: The current address of the block in memory. */
- /* */
- /* <Return> */
- /* The address of the reallocated memory block. */
- /* */
- FT_CALLBACK_DEF( void* )
- ft_realloc( FT_Memory memory,
- long cur_size,
- long new_size,
- void* block )
- {
- FT_UNUSED( memory );
- FT_UNUSED( cur_size );
-
- return realloc( block, new_size );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_free */
- /* */
- /* <Description> */
- /* The memory release function. */
- /* */
- /* <Input> */
- /* memory :: A pointer to the memory object. */
- /* */
- /* block :: The address of block in memory to be freed. */
- /* */
- FT_CALLBACK_DEF( void )
- ft_free( FT_Memory memory,
- void* block )
- {
- FT_UNUSED( memory );
-
- free( block );
- }
-
-
- /*************************************************************************/
- /* */
- /* RESOURCE MANAGEMENT INTERFACE */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_io
-
- /* We use the macro STREAM_FILE for convenience to extract the */
- /* system-specific stream handle from a given FreeType stream object */
-#define STREAM_FILE( stream ) ( (FILE*)stream->descriptor.pointer )
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_close_stream_by_munmap */
- /* */
- /* <Description> */
- /* The function to close a stream which is opened by mmap. */
- /* */
- /* <Input> */
- /* stream :: A pointer to the stream object. */
- /* */
- FT_CALLBACK_DEF( void )
- ft_close_stream_by_munmap( FT_Stream stream )
- {
- munmap( (MUNMAP_ARG_CAST)stream->descriptor.pointer, stream->size );
-
- stream->descriptor.pointer = NULL;
- stream->size = 0;
- stream->base = 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_close_stream_by_free */
- /* */
- /* <Description> */
- /* The function to close a stream which is created by ft_alloc. */
- /* */
- /* <Input> */
- /* stream :: A pointer to the stream object. */
- /* */
- FT_CALLBACK_DEF( void )
- ft_close_stream_by_free( FT_Stream stream )
- {
- ft_free( NULL, stream->descriptor.pointer );
-
- stream->descriptor.pointer = NULL;
- stream->size = 0;
- stream->base = 0;
- }
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( FT_Error )
- FT_Stream_Open( FT_Stream stream,
- const char* filepathname )
- {
- int file;
- struct stat stat_buf;
-
-
- if ( !stream )
- return FT_THROW( Invalid_Stream_Handle );
-
- /* open the file */
- file = open( filepathname, O_RDONLY );
- if ( file < 0 )
- {
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " could not open `%s'\n", filepathname ));
- return FT_THROW( Cannot_Open_Resource );
- }
-
- /* Here we ensure that a "fork" will _not_ duplicate */
- /* our opened input streams on Unix. This is critical */
- /* since it avoids some (possible) access control */
- /* issues and cleans up the kernel file table a bit. */
- /* */
-#ifdef F_SETFD
-#ifdef FD_CLOEXEC
- (void)fcntl( file, F_SETFD, FD_CLOEXEC );
-#else
- (void)fcntl( file, F_SETFD, 1 );
-#endif /* FD_CLOEXEC */
-#endif /* F_SETFD */
-
- if ( fstat( file, &stat_buf ) < 0 )
- {
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " could not `fstat' file `%s'\n", filepathname ));
- goto Fail_Map;
- }
-
- /* XXX: TODO -- real 64bit platform support */
- /* */
- /* `stream->size' is typedef'd to unsigned long (in `ftsystem.h'); */
- /* `stat_buf.st_size', however, is usually typedef'd to off_t */
- /* (in sys/stat.h). */
- /* On some platforms, the former is 32bit and the latter is 64bit. */
- /* To avoid overflow caused by fonts in huge files larger than */
- /* 2GB, do a test. Temporary fix proposed by Sean McBride. */
- /* */
- if ( stat_buf.st_size > LONG_MAX )
- {
- FT_ERROR(( "FT_Stream_Open: file is too big\n" ));
- goto Fail_Map;
- }
- else if ( stat_buf.st_size == 0 )
- {
- FT_ERROR(( "FT_Stream_Open: zero-length file\n" ));
- goto Fail_Map;
- }
-
- /* This cast potentially truncates a 64bit to 32bit! */
- stream->size = (unsigned long)stat_buf.st_size;
- stream->pos = 0;
- stream->base = (unsigned char *)mmap( NULL,
- stream->size,
- PROT_READ,
- MAP_FILE | MAP_PRIVATE,
- file,
- 0 );
-
- /* on some RTOS, mmap might return 0 */
- if ( (long)stream->base != -1 && stream->base != NULL )
- stream->close = ft_close_stream_by_munmap;
- else
- {
- ssize_t total_read_count;
-
-
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " could not `mmap' file `%s'\n", filepathname ));
-
- stream->base = (unsigned char*)ft_alloc( NULL, stream->size );
-
- if ( !stream->base )
- {
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " could not `alloc' memory\n" ));
- goto Fail_Map;
- }
-
- total_read_count = 0;
- do
- {
- ssize_t read_count;
-
-
- read_count = read( file,
- stream->base + total_read_count,
- stream->size - total_read_count );
-
- if ( read_count <= 0 )
- {
- if ( read_count == -1 && errno == EINTR )
- continue;
-
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " error while `read'ing file `%s'\n", filepathname ));
- goto Fail_Read;
- }
-
- total_read_count += read_count;
-
- } while ( (unsigned long)total_read_count != stream->size );
-
- stream->close = ft_close_stream_by_free;
- }
-
- close( file );
-
- stream->descriptor.pointer = stream->base;
- stream->pathname.pointer = (char*)filepathname;
-
- stream->read = 0;
-
- FT_TRACE1(( "FT_Stream_Open:" ));
- FT_TRACE1(( " opened `%s' (%d bytes) successfully\n",
- filepathname, stream->size ));
-
- return FT_Err_Ok;
-
- Fail_Read:
- ft_free( NULL, stream->base );
-
- Fail_Map:
- close( file );
-
- stream->base = NULL;
- stream->size = 0;
- stream->pos = 0;
-
- return FT_THROW( Cannot_Open_Stream );
- }
-
-
-#ifdef FT_DEBUG_MEMORY
-
- extern FT_Int
- ft_mem_debug_init( FT_Memory memory );
-
- extern void
- ft_mem_debug_done( FT_Memory memory );
-
-#endif
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( FT_Memory )
- FT_New_Memory( void )
- {
- FT_Memory memory;
-
-
- memory = (FT_Memory)malloc( sizeof ( *memory ) );
- if ( memory )
- {
- memory->user = 0;
- memory->alloc = ft_alloc;
- memory->realloc = ft_realloc;
- memory->free = ft_free;
-#ifdef FT_DEBUG_MEMORY
- ft_mem_debug_init( memory );
-#endif
- }
-
- return memory;
- }
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( void )
- FT_Done_Memory( FT_Memory memory )
- {
-#ifdef FT_DEBUG_MEMORY
- ft_mem_debug_done( memory );
-#endif
- memory->free( memory, memory );
- }
-
-
-/* END */
diff --git a/builds/unix/install.mk b/builds/unix/install.mk
deleted file mode 100644
index fae486cb3..000000000
--- a/builds/unix/install.mk
+++ /dev/null
@@ -1,95 +0,0 @@
-#
-# FreeType 2 installation instructions for Unix systems
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-# If you say
-#
-# make install DESTDIR=/tmp/somewhere/
-#
-# don't forget the final backslash (this command is mainly for package
-# maintainers).
-
-
-.PHONY: install uninstall check
-
-# Unix installation and deinstallation targets.
-#
-# Note that we remove any data found in `$(includedir)/freetype2' before
-# installing new files to avoid interferences with files installed by
-# previous FreeType versions (which use slightly different locations).
-#
-# We also remove `$(includedir)/ft2build.h' for the same reason.
-#
-install: $(PROJECT_LIBRARY)
- -$(DELDIR) $(DESTDIR)$(includedir)/freetype2
- -$(DELETE) $(DESTDIR)$(includedir)/ft2build.h
- $(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
- $(DESTDIR)$(libdir)/pkgconfig \
- $(DESTDIR)$(includedir)/freetype2/freetype/config \
- $(DESTDIR)$(bindir) \
- $(DESTDIR)$(datadir)/aclocal \
- $(DESTDIR)$(mandir)/man1
- $(LIBTOOL) --mode=install $(INSTALL) \
- $(PROJECT_LIBRARY) $(DESTDIR)$(libdir)
- -for P in $(PUBLIC_H) ; do \
- $(INSTALL_DATA) \
- $$P $(DESTDIR)$(includedir)/freetype2/freetype ; \
- done
- -for P in $(CONFIG_H) ; do \
- $(INSTALL_DATA) \
- $$P $(DESTDIR)$(includedir)/freetype2/freetype/config ; \
- done
- $(INSTALL_DATA) $(TOP_DIR)/include/ft2build.h \
- $(DESTDIR)$(includedir)/freetype2/ft2build.h
- $(INSTALL_DATA) $(OBJ_BUILD)/ftconfig.h \
- $(DESTDIR)$(includedir)/freetype2/freetype/config/ftconfig.h
- $(INSTALL_DATA) $(OBJ_DIR)/ftmodule.h \
- $(DESTDIR)$(includedir)/freetype2/freetype/config/ftmodule.h
- $(INSTALL_SCRIPT) -m 755 $(OBJ_BUILD)/freetype-config \
- $(DESTDIR)$(bindir)/freetype-config
- $(INSTALL_SCRIPT) -m 644 $(BUILD_DIR)/freetype2.m4 \
- $(DESTDIR)$(datadir)/aclocal/freetype2.m4
- $(INSTALL_SCRIPT) -m 644 $(OBJ_BUILD)/freetype2.pc \
- $(DESTDIR)$(libdir)/pkgconfig/freetype2.pc
- $(INSTALL_DATA) $(TOP_DIR)/docs/freetype-config.1 \
- $(DESTDIR)$(mandir)/man1/freetype-config.1
-
-
-uninstall:
- -$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/$(LIBRARY).$A
- -$(DELDIR) $(DESTDIR)$(includedir)/freetype2
- -$(DELETE) $(DESTDIR)$(bindir)/freetype-config
- -$(DELETE) $(DESTDIR)$(datadir)/aclocal/freetype2.m4
- -$(DELETE) $(DESTDIR)$(libdir)/pkgconfig/freetype2.pc
- -$(DELETE) $(DESTDIR)$(mandir)/man1/freetype-config.1
-
-
-check:
- @echo There is no validation suite for this package.
-
-
-.PHONY: clean_project_unix distclean_project_unix
-
-# Unix cleaning and distclean rules.
-#
-clean_project_unix:
- -$(DELETE) $(BASE_OBJECTS) $(OBJ_M) $(OBJ_S)
- -$(DELETE) $(patsubst %.$O,%.$(SO),$(BASE_OBJECTS) $(OBJ_M) $(OBJ_S)) \
- $(CLEAN)
-
-distclean_project_unix: clean_project_unix
- -$(DELETE) $(PROJECT_LIBRARY)
- -$(DELDIR) $(OBJ_DIR)/.libs
- -$(DELETE) *.orig *~ core *.core $(DISTCLEAN)
-
-# EOF
diff --git a/builds/unix/pkg.m4 b/builds/unix/pkg.m4
deleted file mode 100644
index 260e1fb92..000000000
--- a/builds/unix/pkg.m4
+++ /dev/null
@@ -1,199 +0,0 @@
-# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
-# serial 1 (pkg-config-0.24)
-#
-# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
-#
-# 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.
-#
-# 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.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# PKG_PROG_PKG_CONFIG([MIN-VERSION])
-# ----------------------------------
-AC_DEFUN([PKG_PROG_PKG_CONFIG],
-[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
-m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
-m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
-AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
-AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
-AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
-
-if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
- AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
-fi
-if test -n "$PKG_CONFIG"; then
- _pkg_min_version=m4_default([$1], [0.9.0])
- AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
- if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- PKG_CONFIG=""
- fi
-fi[]dnl
-])# PKG_PROG_PKG_CONFIG
-
-# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-#
-# Check to see whether a particular set of modules exists. Similar
-# to PKG_CHECK_MODULES(), but does not set variables or print errors.
-#
-# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-# only at the first occurrence in configure.ac, so if the first place
-# it's called might be skipped (such as if it is within an "if", you
-# have to call PKG_CHECK_EXISTS manually
-# --------------------------------------------------------------
-AC_DEFUN([PKG_CHECK_EXISTS],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-if test -n "$PKG_CONFIG" && \
- AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
- m4_default([$2], [:])
-m4_ifvaln([$3], [else
- $3])dnl
-fi])
-
-# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
-# ---------------------------------------------
-m4_define([_PKG_CONFIG],
-[if test -n "$$1"; then
- pkg_cv_[]$1="$$1"
- elif test -n "$PKG_CONFIG"; then
- PKG_CHECK_EXISTS([$3],
- [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes ],
- [pkg_failed=yes])
- else
- pkg_failed=untried
-fi[]dnl
-])# _PKG_CONFIG
-
-# _PKG_SHORT_ERRORS_SUPPORTED
-# -----------------------------
-AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi[]dnl
-])# _PKG_SHORT_ERRORS_SUPPORTED
-
-
-# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-# [ACTION-IF-NOT-FOUND])
-#
-#
-# Note that if there is a possibility the first call to
-# PKG_CHECK_MODULES might not happen, you should be sure to include an
-# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-#
-#
-# --------------------------------------------------------------
-AC_DEFUN([PKG_CHECK_MODULES],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
-AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
-
-pkg_failed=no
-AC_MSG_CHECKING([for $1])
-
-_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
-_PKG_CONFIG([$1][_LIBS], [libs], [$2])
-
-m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
-and $1[]_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.])
-
-if test $pkg_failed = yes; then
- AC_MSG_RESULT([no])
- _PKG_SHORT_ERRORS_SUPPORTED
- if test $_pkg_short_errors_supported = yes; then
- $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
- else
- $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
-
- m4_default([$4], [AC_MSG_ERROR(
-[Package requirements ($2) were not met:
-
-$$1_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-_PKG_TEXT])[]dnl
- ])
-elif test $pkg_failed = untried; then
- AC_MSG_RESULT([no])
- m4_default([$4], [AC_MSG_FAILURE(
-[The pkg-config script could not be found or is too old. Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-_PKG_TEXT
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
- ])
-else
- $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
- $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
- AC_MSG_RESULT([yes])
- $3
-fi[]dnl
-])# PKG_CHECK_MODULES
-
-
-# PKG_INSTALLDIR(DIRECTORY)
-# -------------------------
-# Substitutes the variable pkgconfigdir as the location where a module
-# should install pkg-config .pc files. By default the directory is
-# $libdir/pkgconfig, but the default can be changed by passing
-# DIRECTORY. The user can override through the --with-pkgconfigdir
-# parameter.
-AC_DEFUN([PKG_INSTALLDIR],
-[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
-m4_pushdef([pkg_description],
- [pkg-config installation directory @<:@]pkg_default[@:>@])
-AC_ARG_WITH([pkgconfigdir],
- [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
- [with_pkgconfigdir=]pkg_default)
-AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
-m4_popdef([pkg_default])
-m4_popdef([pkg_description])
-]) dnl PKG_INSTALLDIR
-
-
-# PKG_NOARCH_INSTALLDIR(DIRECTORY)
-# -------------------------
-# Substitutes the variable noarch_pkgconfigdir as the location where a
-# module should install arch-independent pkg-config .pc files. By
-# default the directory is $datadir/pkgconfig, but the default can be
-# changed by passing DIRECTORY. The user can override through the
-# --with-noarch-pkgconfigdir parameter.
-AC_DEFUN([PKG_NOARCH_INSTALLDIR],
-[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
-m4_pushdef([pkg_description],
- [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
-AC_ARG_WITH([noarch-pkgconfigdir],
- [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
- [with_noarch_pkgconfigdir=]pkg_default)
-AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
-m4_popdef([pkg_default])
-m4_popdef([pkg_description])
-]) dnl PKG_NOARCH_INSTALLDIR
diff --git a/builds/unix/unix-cc.in b/builds/unix/unix-cc.in
deleted file mode 100644
index a967cee93..000000000
--- a/builds/unix/unix-cc.in
+++ /dev/null
@@ -1,114 +0,0 @@
-#
-# FreeType 2 template for Unix-specific compiler definitions
-#
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CC := @CC@
-COMPILER_SEP := $(SEP)
-FT_LIBTOOL_DIR ?= $(BUILD_DIR)
-
-LIBTOOL := $(FT_LIBTOOL_DIR)/libtool
-
-
-# The object file extension (for standard and static libraries). This can be
-# .o, .tco, .obj, etc., depending on the platform.
-#
-O := lo
-SO := o
-
-
-# The executable file extension. Although most Unix platforms use no
-# extension, we copy the extension detected by autoconf. Useful for cross
-# building on Unix systems for non-Unix systems.
-#
-E := @EXEEXT@
-
-
-# The library file extension (for standard and static libraries). This can
-# be .a, .lib, etc., depending on the platform.
-#
-A := la
-SA := a
-
-
-# The name of the final library file. Note that the DOS-specific Makefile
-# uses a shorter (8.3) name.
-#
-LIBRARY := lib$(PROJECT)
-
-
-# Path inclusion flag. Some compilers use a different flag than `-I' to
-# specify an additional include path. Examples are `/i=' or `-J'.
-#
-I := -I
-
-
-# C flag used to define a macro before the compilation of a given source
-# object. Usually it is `-D' like in `-DDEBUG'.
-#
-D := -D
-
-
-# The link flag used to specify a given library file on link. Note that
-# this is only used to compile the demo programs, not the library itself.
-#
-L := -l
-
-
-# Target flag.
-#
-T := -o$(space)
-
-
-# C flags
-#
-# These should concern: debug output, optimization & warnings.
-#
-# Use the ANSIFLAGS variable to define the compiler flags used to enfore
-# ANSI compliance.
-#
-# We use our own FreeType configuration file.
-#
-CPPFLAGS := @CPPFLAGS@
-CFLAGS := -c @XX_CFLAGS@ @CFLAGS@ -DFT_CONFIG_CONFIG_H="<ftconfig.h>"
-
-# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
-#
-ANSIFLAGS := @XX_ANSIFLAGS@
-
-# C compiler to use -- we use libtool!
-#
-#
-CCraw := $(CC)
-CC := $(LIBTOOL) --mode=compile $(CCraw)
-
-# Linker flags.
-#
-LDFLAGS := @LDFLAGS@
-
-
-# export symbols
-#
-CCraw_build := @CC_BUILD@ # native CC of building system
-E_BUILD := @EXEEXT_BUILD@ # extension for executable on building system
-EXPORTS_LIST := $(OBJ_DIR)/ftexport.sym
-CCexe := $(CCraw_build) # used to compile `apinames' only
-
-
-# Library linking
-#
-LINK_LIBRARY = $(LIBTOOL) --mode=link $(CCraw) -o $@ $(OBJECTS_LIST) \
- -rpath $(libdir) -version-info $(version_info) \
- $(LDFLAGS) -no-undefined \
- -export-symbols $(EXPORTS_LIST)
-
-# EOF
diff --git a/builds/unix/unix-def.in b/builds/unix/unix-def.in
deleted file mode 100644
index 34e06e380..000000000
--- a/builds/unix/unix-def.in
+++ /dev/null
@@ -1,150 +0,0 @@
-#
-# FreeType 2 configuration rules templates for Unix + configure
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SHELL := @SHELL@
-
-TOP_DIR := $(shell cd $(TOP_DIR); pwd)
-
-DELETE := rm -f
-DELDIR := rm -rf
-CAT := cat
-SEP := /
-
-# this is used for `make distclean' and `make install'
-OBJ_BUILD ?= $(BUILD_DIR)
-
-# don't use `:=' here since the path stuff will be included after this file
-#
-FTSYS_SRC = @FTSYS_SRC@
-
-INSTALL := @INSTALL@
-INSTALL_DATA := @INSTALL_DATA@
-INSTALL_PROGRAM := @INSTALL_PROGRAM@
-INSTALL_SCRIPT := @INSTALL_SCRIPT@
-MKINSTALLDIRS := @MKDIR_P@
-
-CLEAN += $(OBJ_BUILD)/freetype-config \
- $(OBJ_BUILD)/freetype2.pc
-
-DISTCLEAN += $(OBJ_BUILD)/config.cache \
- $(OBJ_BUILD)/config.log \
- $(OBJ_BUILD)/config.status \
- $(OBJ_BUILD)/unix-def.mk \
- $(OBJ_BUILD)/unix-cc.mk \
- $(OBJ_BUILD)/ftconfig.h \
- $(LIBTOOL) \
- $(OBJ_BUILD)/Makefile
-
-
-# Standard installation variables.
-#
-prefix := @prefix@
-exec_prefix := @exec_prefix@
-libdir := @libdir@
-bindir := @bindir@
-includedir := @includedir@
-datarootdir := @datarootdir@
-datadir := @datadir@
-mandir := @mandir@
-
-version_info := @version_info@
-
-# Variables needed for `freetype-config' and `freetype.pc'.
-#
-PKG_CONFIG := @PKG_CONFIG@
-REQUIRES_PRIVATE := @REQUIRES_PRIVATE@
-LIBS_PRIVATE := @LIBS_PRIVATE@
-LIBSSTATIC_CONFIG := @LIBSSTATIC_CONFIG@
-build_libtool_libs := @build_libtool_libs@
-ft_version := @ft_version@
-
-# The directory where all library files are placed.
-#
-# By default, this is the same as $(OBJ_DIR); however, this can be changed
-# to suit particular needs.
-#
-LIB_DIR := $(OBJ_DIR)
-
-# The BASE_SRC macro lists all source files that should be included in
-# src/base/ftbase.c. When configure sets up CFLAGS to build ftmac.c,
-# ftmac.c should be added to BASE_SRC.
-ftmac_c := @ftmac_c@
-
-# The SYSTEM_ZLIB macro is defined if the user wishes to link dynamically
-# with its system wide zlib. If SYSTEM_ZLIB is 'yes', the zlib part of the
-# ftgzip module is not compiled in.
-SYSTEM_ZLIB := @SYSTEM_ZLIB@
-
-
-# The NO_OUTPUT macro is appended to command lines in order to ignore
-# the output of some programs.
-#
-NO_OUTPUT := 2> /dev/null
-
-
-# To support calls like
-#
-# configure --includedir='${libdir}'/freetype2/include
-#
-# we generate `freetype-config' and `freetype.pc' at compile time so that
-# those variables are properly expanded.
-
-$(OBJ_BUILD)/freetype-config: $(TOP_DIR)/builds/unix/freetype-config.in
- rm -f $@ $@.tmp
- sed -e 's|%LIBSSTATIC_CONFIG%|$(LIBSSTATIC_CONFIG)|' \
- -e 's|%PKG_CONFIG%|$(PKG_CONFIG)|' \
- -e 's|%build_libtool_libs%|$(build_libtool_libs)|' \
- -e 's|%exec_prefix%|$(exec_prefix)|' \
- -e 's|%ft_version%|$(ft_version)|' \
- -e 's|%includedir%|$(includedir)|' \
- -e 's|%libdir%|$(libdir)|' \
- -e 's|%prefix%|$(prefix)|' \
- $< \
- > $@.tmp
- chmod +x $@.tmp
- chmod go-w $@.tmp
- mv $@.tmp $@
-
-# To support directory names with spaces (as might easily happen on Windows
-# platforms), the right solution would be to surround the pkg-variables in
-# `freetype2.pc' with double quotes. However, doing so ironically disables
-# the prefix override mechanism especially written for Windows. This is a
-# bug in pkg-config version 0.28 and earlier.
-#
-# For this reason, we escape spaces with backslashes.
-
-exec_prefix_x := $(subst $(space),\\$(space),$(exec_prefix))
-includedir_x := $(subst $(space),\\$(space),$(includedir))
-libdir_x := $(subst $(space),\\$(space),$(libdir))
-prefix_x := $(subst $(space),\\$(space),$(prefix))
-
-$(OBJ_BUILD)/freetype2.pc: $(TOP_DIR)/builds/unix/freetype2.in
- rm -f $@ $@.tmp
- sed -e 's|%REQUIRES_PRIVATE%|$(REQUIRES_PRIVATE)|' \
- -e 's|%LIBS_PRIVATE%|$(LIBS_PRIVATE)|' \
- -e 's|%build_libtool_libs%|$(build_libtool_libs)|' \
- -e 's|%exec_prefix%|$(exec_prefix_x)|' \
- -e 's|%ft_version%|$(ft_version)|' \
- -e 's|%includedir%|$(includedir_x)|' \
- -e 's|%libdir%|$(libdir_x)|' \
- -e 's|%prefix%|$(prefix_x)|' \
- $< \
- > $@.tmp
- chmod a-w $@.tmp
- mv $@.tmp $@
-
-all install: $(OBJ_BUILD)/freetype-config \
- $(OBJ_BUILD)/freetype2.pc
-
-# EOF
diff --git a/builds/unix/unix-dev.mk b/builds/unix/unix-dev.mk
deleted file mode 100644
index 92c06001b..000000000
--- a/builds/unix/unix-dev.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# FreeType 2 Configuration rules for Unix + GCC
-#
-# Development version without optimizations & libtool
-# and no installation.
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-DEVEL_DIR := $(TOP_DIR)/devel
-
-include $(TOP_DIR)/builds/unix/unixddef.mk
-include $(TOP_DIR)/builds/compiler/gcc-dev.mk
-include $(TOP_DIR)/builds/link_std.mk
-
-
-# EOF
diff --git a/builds/unix/unix-lcc.mk b/builds/unix/unix-lcc.mk
deleted file mode 100644
index 5122fdece..000000000
--- a/builds/unix/unix-lcc.mk
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# FreeType 2 Configuration rules for Unix + LCC
-#
-# Development version without optimizations & libtool
-# and no installation.
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-include $(TOP_DIR)/builds/unix/unixddef.mk
-include $(TOP_DIR)/builds/compiler/unix-lcc.mk
-include $(TOP_DIR)/builds/link_std.mk
-
-
-# EOF
diff --git a/builds/unix/unix.mk b/builds/unix/unix.mk
deleted file mode 100644
index 14d5c0cbb..000000000
--- a/builds/unix/unix.mk
+++ /dev/null
@@ -1,62 +0,0 @@
-#
-# FreeType 2 configuration rules for UNIX platforms
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-# We need these declarations here since unix-def.mk is a generated file.
-BUILD_DIR := $(TOP_DIR)/builds/unix
-PLATFORM := unix
-
-have_mk := $(wildcard $(OBJ_DIR)/unix-def.mk)
-ifneq ($(have_mk),)
- # We are building FreeType 2 not in the src tree.
- include $(OBJ_DIR)/unix-def.mk
- include $(OBJ_DIR)/unix-cc.mk
-else
- include $(BUILD_DIR)/unix-def.mk
- include $(BUILD_DIR)/unix-cc.mk
-endif
-
-ifdef BUILD_PROJECT
-
- .PHONY: clean_project distclean_project
-
- # Now include the main sub-makefile. It contains all the rules used to
- # build the library with the previous variables defined.
- #
- include $(TOP_DIR)/builds/$(PROJECT).mk
-
-
- # The cleanup targets.
- #
- clean_project: clean_project_unix
- distclean_project: distclean_project_unix
-
-
- # This final rule is used to link all object files into a single library.
- # It is part of the system-specific sub-Makefile because not all
- # librarians accept a simple syntax like
- #
- # librarian library_file {list of object files}
- #
- $(PROJECT_LIBRARY): $(OBJECTS_LIST)
- ifdef CLEAN_LIBRARY
- -$(CLEAN_LIBRARY) $(NO_OUTPUT)
- endif
- $(LINK_LIBRARY)
-
- include $(TOP_DIR)/builds/unix/install.mk
-
-endif
-
-
-# EOF
diff --git a/builds/unix/unixddef.mk b/builds/unix/unixddef.mk
deleted file mode 100644
index 30f2307c0..000000000
--- a/builds/unix/unixddef.mk
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# FreeType 2 configuration rules templates for
-# development under Unix with no configure script (gcc only)
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-TOP_DIR := $(shell cd $(TOP_DIR); pwd)
-OBJ_DIR := $(shell cd $(OBJ_DIR); pwd)
-
-PLATFORM := unix
-
-DELETE := rm -f
-CAT := cat
-SEP := /
-
-# we use a special devel ftoption.h
-DEVEL_DIR := $(TOP_DIR)/devel
-
-
-# library file name
-#
-LIBRARY := lib$(PROJECT)
-
-
-# The directory where all library files are placed.
-#
-# By default, this is the same as $(OBJ_DIR); however, this can be changed
-# to suit particular needs.
-#
-LIB_DIR := $(OBJ_DIR)
-
-
-NO_OUTPUT := 2> /dev/null
-
-# EOF
diff --git a/builds/vms/ftconfig.h b/builds/vms/ftconfig.h
deleted file mode 100644
index f8ac2ecbe..000000000
--- a/builds/vms/ftconfig.h
+++ /dev/null
@@ -1,464 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftconfig.h */
-/* */
-/* VMS-specific configuration file (specification only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This header file contains a number of macro definitions that are used */
- /* by the rest of the engine. Most of the macros here are automatically */
- /* determined at compile time, and you should not need to change it to */
- /* port FreeType, except to compile the library with a non-ANSI */
- /* compiler. */
- /* */
- /* Note however that if some specific modifications are needed, we */
- /* advise you to place a modified copy in your build directory. */
- /* */
- /* The build directory is usually `builds/<system>', and contains */
- /* system-specific files that are always included first when building */
- /* the library. */
- /* */
- /*************************************************************************/
-
-#ifndef FTCONFIG_H_
-#define FTCONFIG_H_
-
-#include <ft2build.h>
-#include FT_CONFIG_OPTIONS_H
-#include FT_CONFIG_STANDARD_LIBRARY_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* PLATFORM-SPECIFIC CONFIGURATION MACROS */
- /* */
- /* These macros can be toggled to suit a specific system. The current */
- /* ones are defaults used to compile FreeType in an ANSI C environment */
- /* (16bit compilers are also supported). Copy this file to your own */
- /* `builds/<system>' directory, and edit it to port the engine. */
- /* */
- /*************************************************************************/
-
-
-#define HAVE_UNISTD_H 1
-#define HAVE_FCNTL_H 1
-
-#define SIZEOF_INT 4
-#define SIZEOF_LONG 4
-
-#define FT_SIZEOF_INT 4
-#define FT_SIZEOF_LONG 4
-
-#define FT_CHAR_BIT 8
-
-
- /* FT_UNUSED is a macro used to indicate that a given parameter is not */
- /* used -- this is only used to get rid of unpleasant compiler warnings */
-#ifndef FT_UNUSED
-#define FT_UNUSED( arg ) ( (arg) = (arg) )
-#endif
-
-
- /*************************************************************************/
- /* */
- /* AUTOMATIC CONFIGURATION MACROS */
- /* */
- /* These macros are computed from the ones defined above. Don't touch */
- /* their definition, unless you know precisely what you are doing. No */
- /* porter should need to mess with them. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Mac support */
- /* */
- /* This is the only necessary change, so it is defined here instead */
- /* providing a new configuration file. */
- /* */
-#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
- /* no Carbon frameworks for 64bit 10.4.x */
- /* AvailabilityMacros.h is available since Mac OS X 10.2, */
- /* so guess the system version by maximum errno before inclusion */
-#include <errno.h>
-#ifdef ECANCELED /* defined since 10.2 */
-#include "AvailabilityMacros.h"
-#endif
-#if defined( __LP64__ ) && \
- ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
-#undef FT_MACINTOSH
-#endif
-
-#elif defined( __SC__ ) || defined( __MRC__ )
- /* Classic MacOS compilers */
-#include "ConditionalMacros.h"
-#if TARGET_OS_MAC
-#define FT_MACINTOSH 1
-#endif
-
-#endif
-
-
- /* Fix compiler warning with sgi compiler */
-#if defined( __sgi ) && !defined( __GNUC__ )
-#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
-#pragma set woff 3505
-#endif
-#endif
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* basic_types */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int16 */
- /* */
- /* <Description> */
- /* A typedef for a 16bit signed integer type. */
- /* */
- typedef signed short FT_Int16;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt16 */
- /* */
- /* <Description> */
- /* A typedef for a 16bit unsigned integer type. */
- /* */
- typedef unsigned short FT_UInt16;
-
- /* */
-
-
- /* this #if 0 ... #endif clause is for documentation purposes */
-#if 0
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int32 */
- /* */
- /* <Description> */
- /* A typedef for a 32bit signed integer type. The size depends on */
- /* the configuration. */
- /* */
- typedef signed XXX FT_Int32;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt32 */
- /* */
- /* A typedef for a 32bit unsigned integer type. The size depends on */
- /* the configuration. */
- /* */
- typedef unsigned XXX FT_UInt32;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int64 */
- /* */
- /* A typedef for a 64bit signed integer type. The size depends on */
- /* the configuration. Only defined if there is real 64bit support; */
- /* otherwise, it gets emulated with a structure (if necessary). */
- /* */
- typedef signed XXX FT_Int64;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt64 */
- /* */
- /* A typedef for a 64bit unsigned integer type. The size depends on */
- /* the configuration. Only defined if there is real 64bit support; */
- /* otherwise, it gets emulated with a structure (if necessary). */
- /* */
- typedef unsigned XXX FT_UInt64;
-
- /* */
-
-#endif
-
-#if FT_SIZEOF_INT == (32 / FT_CHAR_BIT)
-
- typedef signed int FT_Int32;
- typedef unsigned int FT_UInt32;
-
-#elif FT_SIZEOF_LONG == (32 / FT_CHAR_BIT)
-
- typedef signed long FT_Int32;
- typedef unsigned long FT_UInt32;
-
-#else
-#error "no 32bit type found -- please check your configuration files"
-#endif
-
-
- /* look up an integer type that is at least 32 bits */
-#if FT_SIZEOF_INT >= (32 / FT_CHAR_BIT)
-
- typedef int FT_Fast;
- typedef unsigned int FT_UFast;
-
-#elif FT_SIZEOF_LONG >= (32 / FT_CHAR_BIT)
-
- typedef long FT_Fast;
- typedef unsigned long FT_UFast;
-
-#endif
-
-
- /* determine whether we have a 64-bit int type for platforms without */
- /* Autoconf */
-#if FT_SIZEOF_LONG == (64 / FT_CHAR_BIT)
-
- /* FT_LONG64 must be defined if a 64-bit type is available */
-#define FT_LONG64
-#define FT_INT64 long
-#define FT_UINT64 unsigned long
-
- /*************************************************************************/
- /* */
- /* A 64-bit data type may create compilation problems if you compile */
- /* in strict ANSI mode. To avoid them, we disable other 64-bit data */
- /* types if __STDC__ is defined. You can however ignore this rule */
- /* by defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
- /* */
-#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
-
-#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
-
-#define FT_LONG64
-#define FT_INT64 long long int
-#define FT_UINT64 unsigned long long int
-
-#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
-
- /* this compiler provides the __int64 type */
-#define FT_LONG64
-#define FT_INT64 __int64
-#define FT_UINT64 unsigned __int64
-
-#elif defined( __BORLANDC__ ) /* Borland C++ */
-
- /* XXXX: We should probably check the value of __BORLANDC__ in order */
- /* to test the compiler version. */
-
- /* this compiler provides the __int64 type */
-#define FT_LONG64
-#define FT_INT64 __int64
-#define FT_UINT64 unsigned __int64
-
-#elif defined( __WATCOMC__ ) /* Watcom C++ */
-
- /* Watcom doesn't provide 64-bit data types */
-
-#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
-
-#define FT_LONG64
-#define FT_INT64 long long int
-#define FT_UINT64 unsigned long long int
-
-#elif defined( __GNUC__ )
-
- /* GCC provides the `long long' type */
-#define FT_LONG64
-#define FT_INT64 long long int
-#define FT_UINT64 unsigned long long int
-
-#endif /* __STDC_VERSION__ >= 199901L */
-
-#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
-
-#ifdef FT_LONG64
- typedef FT_INT64 FT_Int64;
- typedef FT_UINT64 FT_UInt64;
-#endif
-
-
-#ifdef _WIN64
- /* only 64bit Windows uses the LLP64 data model, i.e., */
- /* 32bit integers, 64bit pointers */
-#define FT_UINT_TO_POINTER( x ) (void*)(unsigned __int64)(x)
-#else
-#define FT_UINT_TO_POINTER( x ) (void*)(unsigned long)(x)
-#endif
-
-
- /*************************************************************************/
- /* */
- /* miscellaneous */
- /* */
- /*************************************************************************/
-
-
-#define FT_BEGIN_STMNT do {
-#define FT_END_STMNT } while ( 0 )
-#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
-
-
- /* typeof condition taken from gnulib's `intprops.h' header file */
-#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \
- ( defined( __IBMC__ ) && __IBMC__ >= 1210 && \
- defined( __IBM__TYPEOF__ ) ) || \
- ( defined( __SUNPRO_C ) && __SUNPRO_C >= 0x5110 && !__STDC__ ) )
-#define FT_TYPEOF( type ) ( __typeof__ ( type ) )
-#else
-#define FT_TYPEOF( type ) /* empty */
-#endif
-
-
-#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
-
-#define FT_LOCAL( x ) static x
-#define FT_LOCAL_DEF( x ) static x
-
-#else
-
-#ifdef __cplusplus
-#define FT_LOCAL( x ) extern "C" x
-#define FT_LOCAL_DEF( x ) extern "C" x
-#else
-#define FT_LOCAL( x ) extern x
-#define FT_LOCAL_DEF( x ) x
-#endif
-
-#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
-
-#define FT_LOCAL_ARRAY( x ) extern const x
-#define FT_LOCAL_ARRAY_DEF( x ) const x
-
-
-#ifndef FT_BASE
-
-#ifdef __cplusplus
-#define FT_BASE( x ) extern "C" x
-#else
-#define FT_BASE( x ) extern x
-#endif
-
-#endif /* !FT_BASE */
-
-
-#ifndef FT_BASE_DEF
-
-#ifdef __cplusplus
-#define FT_BASE_DEF( x ) x
-#else
-#define FT_BASE_DEF( x ) x
-#endif
-
-#endif /* !FT_BASE_DEF */
-
-
-#ifndef FT_EXPORT
-
-#ifdef __cplusplus
-#define FT_EXPORT( x ) extern "C" x
-#else
-#define FT_EXPORT( x ) extern x
-#endif
-
-#endif /* !FT_EXPORT */
-
-
-#ifndef FT_EXPORT_DEF
-
-#ifdef __cplusplus
-#define FT_EXPORT_DEF( x ) extern "C" x
-#else
-#define FT_EXPORT_DEF( x ) extern x
-#endif
-
-#endif /* !FT_EXPORT_DEF */
-
-
-#ifndef FT_EXPORT_VAR
-
-#ifdef __cplusplus
-#define FT_EXPORT_VAR( x ) extern "C" x
-#else
-#define FT_EXPORT_VAR( x ) extern x
-#endif
-
-#endif /* !FT_EXPORT_VAR */
-
- /* The following macros are needed to compile the library with a */
- /* C++ compiler and with 16bit compilers. */
- /* */
-
- /* This is special. Within C++, you must specify `extern "C"' for */
- /* functions which are used via function pointers, and you also */
- /* must do that for structures which contain function pointers to */
- /* assure C linkage -- it's not possible to have (local) anonymous */
- /* functions which are accessed by (global) function pointers. */
- /* */
- /* */
- /* FT_CALLBACK_DEF is used to _define_ a callback function. */
- /* */
- /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
- /* contains pointers to callback functions. */
- /* */
- /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
- /* that contains pointers to callback functions. */
- /* */
- /* */
- /* Some 16bit compilers have to redefine these macros to insert */
- /* the infamous `_cdecl' or `__fastcall' declarations. */
- /* */
-#ifndef FT_CALLBACK_DEF
-#ifdef __cplusplus
-#define FT_CALLBACK_DEF( x ) extern "C" x
-#else
-#define FT_CALLBACK_DEF( x ) static x
-#endif
-#endif /* FT_CALLBACK_DEF */
-
-#ifndef FT_CALLBACK_TABLE
-#ifdef __cplusplus
-#define FT_CALLBACK_TABLE extern "C"
-#define FT_CALLBACK_TABLE_DEF extern "C"
-#else
-#define FT_CALLBACK_TABLE extern
-#define FT_CALLBACK_TABLE_DEF /* nothing */
-#endif
-#endif /* FT_CALLBACK_TABLE */
-
-
-FT_END_HEADER
-
-
-#endif /* FTCONFIG_H_ */
-
-
-/* END */
diff --git a/builds/vms/ftsystem.c b/builds/vms/ftsystem.c
deleted file mode 100644
index d83e8ec6f..000000000
--- a/builds/vms/ftsystem.c
+++ /dev/null
@@ -1,328 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsystem.c */
-/* */
-/* VMS-specific FreeType low-level system interface (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
- /* we use our special ftconfig.h file, not the standard one */
-#include <ftconfig.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_SYSTEM_H
-#include FT_ERRORS_H
-#include FT_TYPES_H
-#include FT_INTERNAL_OBJECTS_H
-
- /* memory-mapping includes and definitions */
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sys/mman.h>
-#ifndef MAP_FILE
-#define MAP_FILE 0x00
-#endif
-
-#ifdef MUNMAP_USES_VOIDP
-#define MUNMAP_ARG_CAST void *
-#else
-#define MUNMAP_ARG_CAST char *
-#endif
-
-#ifdef NEED_MUNMAP_DECL
-
-#ifdef __cplusplus
- extern "C"
-#else
- extern
-#endif
- int
- munmap( char* addr,
- int len );
-
-#define MUNMAP_ARG_CAST char *
-
-#endif /* NEED_DECLARATION_MUNMAP */
-
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
- /*************************************************************************/
- /* */
- /* MEMORY MANAGEMENT INTERFACE */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_alloc */
- /* */
- /* <Description> */
- /* The memory allocation function. */
- /* */
- /* <Input> */
- /* memory :: A pointer to the memory object. */
- /* */
- /* size :: The requested size in bytes. */
- /* */
- /* <Return> */
- /* The address of newly allocated block. */
- /* */
- FT_CALLBACK_DEF( void* )
- ft_alloc( FT_Memory memory,
- long size )
- {
- FT_UNUSED( memory );
-
- return malloc( size );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_realloc */
- /* */
- /* <Description> */
- /* The memory reallocation function. */
- /* */
- /* <Input> */
- /* memory :: A pointer to the memory object. */
- /* */
- /* cur_size :: The current size of the allocated memory block. */
- /* */
- /* new_size :: The newly requested size in bytes. */
- /* */
- /* block :: The current address of the block in memory. */
- /* */
- /* <Return> */
- /* The address of the reallocated memory block. */
- /* */
- FT_CALLBACK_DEF( void* )
- ft_realloc( FT_Memory memory,
- long cur_size,
- long new_size,
- void* block )
- {
- FT_UNUSED( memory );
- FT_UNUSED( cur_size );
-
- return realloc( block, new_size );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_free */
- /* */
- /* <Description> */
- /* The memory release function. */
- /* */
- /* <Input> */
- /* memory :: A pointer to the memory object. */
- /* */
- /* block :: The address of block in memory to be freed. */
- /* */
- FT_CALLBACK_DEF( void )
- ft_free( FT_Memory memory,
- void* block )
- {
- FT_UNUSED( memory );
-
- free( block );
- }
-
-
- /*************************************************************************/
- /* */
- /* RESOURCE MANAGEMENT INTERFACE */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_io
-
- /* We use the macro STREAM_FILE for convenience to extract the */
- /* system-specific stream handle from a given FreeType stream object */
-#define STREAM_FILE( stream ) ( (FILE*)stream->descriptor.pointer )
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_close_stream */
- /* */
- /* <Description> */
- /* The function to close a stream. */
- /* */
- /* <Input> */
- /* stream :: A pointer to the stream object. */
- /* */
- FT_CALLBACK_DEF( void )
- ft_close_stream( FT_Stream stream )
- {
- munmap( (MUNMAP_ARG_CAST)stream->descriptor.pointer, stream->size );
-
- stream->descriptor.pointer = NULL;
- stream->size = 0;
- stream->base = 0;
- }
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( FT_Error )
- FT_Stream_Open( FT_Stream stream,
- const char* filepathname )
- {
- int file;
- struct stat stat_buf;
-
-
- if ( !stream )
- return FT_THROW( Invalid_Stream_Handle );
-
- /* open the file */
- file = open( filepathname, O_RDONLY );
- if ( file < 0 )
- {
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " could not open `%s'\n", filepathname ));
- return FT_THROW( Cannot_Open_Resource );
- }
-
- if ( fstat( file, &stat_buf ) < 0 )
- {
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " could not `fstat' file `%s'\n", filepathname ));
- goto Fail_Map;
- }
-
- stream->size = stat_buf.st_size;
- if ( !stream->size )
- {
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " opened `%s' but zero-sized\n", filepathname ));
- goto Fail_Map;
- }
-
- stream->pos = 0;
- stream->base = (unsigned char *)mmap( NULL,
- stream->size,
- PROT_READ,
- MAP_FILE | MAP_PRIVATE,
- file,
- 0 );
-
- if ( (long)stream->base == -1 )
- {
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " could not `mmap' file `%s'\n", filepathname ));
- goto Fail_Map;
- }
-
- close( file );
-
- stream->descriptor.pointer = stream->base;
- stream->pathname.pointer = (char*)filepathname;
-
- stream->close = ft_close_stream;
- stream->read = 0;
-
- FT_TRACE1(( "FT_Stream_Open:" ));
- FT_TRACE1(( " opened `%s' (%d bytes) successfully\n",
- filepathname, stream->size ));
-
- return FT_Err_Ok;
-
- Fail_Map:
- close( file );
-
- stream->base = NULL;
- stream->size = 0;
- stream->pos = 0;
-
- return FT_THROW( Cannot_Open_Stream );
- }
-
-
-#ifdef FT_DEBUG_MEMORY
-
- extern FT_Int
- ft_mem_debug_init( FT_Memory memory );
-
- extern void
- ft_mem_debug_done( FT_Memory memory );
-
-#endif
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( FT_Memory )
- FT_New_Memory( void )
- {
- FT_Memory memory;
-
-
- memory = (FT_Memory)malloc( sizeof ( *memory ) );
- if ( memory )
- {
- memory->user = 0;
- memory->alloc = ft_alloc;
- memory->realloc = ft_realloc;
- memory->free = ft_free;
-#ifdef FT_DEBUG_MEMORY
- ft_mem_debug_init( memory );
-#endif
- }
-
- return memory;
- }
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( void )
- FT_Done_Memory( FT_Memory memory )
- {
-#ifdef FT_DEBUG_MEMORY
- ft_mem_debug_done( memory );
-#endif
- memory->free( memory, memory );
- }
-
-
-/* END */
diff --git a/builds/wince/ftdebug.c b/builds/wince/ftdebug.c
deleted file mode 100644
index 7a20e2fac..000000000
--- a/builds/wince/ftdebug.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftdebug.c */
-/* */
-/* Debugging and logging component for WinCE (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This component contains various macros and functions used to ease the */
- /* debugging of the FreeType engine. Its main purpose is in assertion */
- /* checking, tracing, and error detection. */
- /* */
- /* There are now three debugging modes: */
- /* */
- /* - trace mode */
- /* */
- /* Error and trace messages are sent to the log file (which can be the */
- /* standard error output). */
- /* */
- /* - error mode */
- /* */
- /* Only error messages are generated. */
- /* */
- /* - release mode: */
- /* */
- /* No error message is sent or generated. The code is free from any */
- /* debugging parts. */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-
-
-#ifdef FT_DEBUG_LEVEL_ERROR
-
-
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <windows.h>
-
-
- void
- OutputDebugStringEx( const char* str )
- {
- static WCHAR buf[8192];
-
-
- int sz = MultiByteToWideChar( CP_ACP, 0, str, -1, buf,
- sizeof ( buf ) / sizeof ( *buf ) );
- if ( !sz )
- lstrcpyW( buf, L"OutputDebugStringEx: MultiByteToWideChar failed" );
-
- OutputDebugStringW( buf );
- }
-
-
- FT_BASE_DEF( void )
- FT_Message( const char* fmt,
- ... )
- {
- static char buf[8192];
- va_list ap;
-
-
- va_start( ap, fmt );
- vprintf( fmt, ap );
- /* send the string to the debugger as well */
- vsprintf( buf, fmt, ap );
- OutputDebugStringEx( buf );
- va_end( ap );
- }
-
-
- FT_BASE_DEF( void )
- FT_Panic( const char* fmt,
- ... )
- {
- static char buf[8192];
- va_list ap;
-
-
- va_start( ap, fmt );
- vsprintf( buf, fmt, ap );
- OutputDebugStringEx( buf );
- va_end( ap );
-
- exit( EXIT_FAILURE );
- }
-
-
- /* documentation is in ftdebug.h */
-
- FT_BASE_DEF( int )
- FT_Throw( FT_Error error,
- int line,
- const char* file )
- {
- FT_UNUSED( error );
- FT_UNUSED( line );
- FT_UNUSED( file );
-
- return 0;
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
-
- /* array of trace levels, initialized to 0 */
- int ft_trace_levels[trace_count];
-
- /* define array of trace toggle names */
-#define FT_TRACE_DEF( x ) #x ,
-
- static const char* ft_trace_toggles[trace_count + 1] =
- {
-#include FT_INTERNAL_TRACE_H
- NULL
- };
-
-#undef FT_TRACE_DEF
-
-
- /*************************************************************************/
- /* */
- /* Initialize the tracing sub-system. This is done by retrieving the */
- /* value of the "FT2_DEBUG" environment variable. It must be a list of */
- /* toggles, separated by spaces, `;' or `,'. Example: */
- /* */
- /* "any:3 memory:6 stream:5" */
- /* */
- /* This will request that all levels be set to 3, except the trace level */
- /* for the memory and stream components which are set to 6 and 5, */
- /* respectively. */
- /* */
- /* See the file `include/freetype/internal/fttrace.h' for details of the */
- /* available toggle names. */
- /* */
- /* The level must be between 0 and 6; 0 means quiet (except for serious */
- /* runtime errors), and 6 means _very_ verbose. */
- /* */
- FT_BASE_DEF( void )
- ft_debug_init( void )
- {
- /* Windows Mobile doesn't have environment API: */
- /* GetEnvironmentStrings, GetEnvironmentVariable, getenv. */
- /* */
- /* FIXME!!! How to set debug mode? */
-
- /* const char* ft2_debug = getenv( "FT2_DEBUG" ); */
-
- const char* ft2_debug = 0;
-
-
- if ( ft2_debug )
- {
- const char* p = ft2_debug;
- const char* q;
-
-
- for ( ; *p; p++ )
- {
- /* skip leading whitespace and separators */
- if ( *p == ' ' || *p == '\t' || *p == ',' || *p == ';' || *p == '=' )
- continue;
-
- /* read toggle name, followed by ':' */
- q = p;
- while ( *p && *p != ':' )
- p++;
-
- if ( !*p )
- break;
-
- if ( *p == ':' && p > q )
- {
- int n, i, len = (int)( p - q );
- int level = -1, found = -1;
-
-
- for ( n = 0; n < trace_count; n++ )
- {
- const char* toggle = ft_trace_toggles[n];
-
-
- for ( i = 0; i < len; i++ )
- {
- if ( toggle[i] != q[i] )
- break;
- }
-
- if ( i == len && toggle[i] == 0 )
- {
- found = n;
- break;
- }
- }
-
- /* read level */
- p++;
- if ( *p )
- {
- level = *p - '0';
- if ( level < 0 || level > 7 )
- level = -1;
- }
-
- if ( found >= 0 && level >= 0 )
- {
- if ( found == trace_any )
- {
- /* special case for "any" */
- for ( n = 0; n < trace_count; n++ )
- ft_trace_levels[n] = level;
- }
- else
- ft_trace_levels[found] = level;
- }
- }
- }
- }
- }
-
-
-#else /* !FT_DEBUG_LEVEL_TRACE */
-
-
- FT_BASE_DEF( void )
- ft_debug_init( void )
- {
- /* nothing */
- }
-
-
-#endif /* !FT_DEBUG_LEVEL_TRACE */
-
-#endif /* FT_DEBUG_LEVEL_ERROR */
-
-
-/* END */
diff --git a/builds/wince/vc2005-ce/freetype.sln b/builds/wince/vc2005-ce/freetype.sln
deleted file mode 100644
index ff4546388..000000000
--- a/builds/wince/vc2005-ce/freetype.sln
+++ /dev/null
@@ -1,157 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "freetype.vcproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- LIB Debug Multithreaded|Pocket PC 2003 (ARMV4) = LIB Debug Multithreaded|Pocket PC 2003 (ARMV4)
- LIB Debug Multithreaded|Smartphone 2003 (ARMV4) = LIB Debug Multithreaded|Smartphone 2003 (ARMV4)
- LIB Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = LIB Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- LIB Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = LIB Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- LIB Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I) = LIB Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- LIB Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I) = LIB Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- LIB Debug Singlethreaded|Pocket PC 2003 (ARMV4) = LIB Debug Singlethreaded|Pocket PC 2003 (ARMV4)
- LIB Debug Singlethreaded|Smartphone 2003 (ARMV4) = LIB Debug Singlethreaded|Smartphone 2003 (ARMV4)
- LIB Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = LIB Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- LIB Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = LIB Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- LIB Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I) = LIB Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- LIB Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I) = LIB Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- LIB Debug|Pocket PC 2003 (ARMV4) = LIB Debug|Pocket PC 2003 (ARMV4)
- LIB Debug|Smartphone 2003 (ARMV4) = LIB Debug|Smartphone 2003 (ARMV4)
- LIB Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = LIB Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- LIB Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = LIB Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- LIB Debug|Windows Mobile 6 Professional SDK (ARMV4I) = LIB Debug|Windows Mobile 6 Professional SDK (ARMV4I)
- LIB Debug|Windows Mobile 6 Standard SDK (ARMV4I) = LIB Debug|Windows Mobile 6 Standard SDK (ARMV4I)
- LIB Release Multithreaded|Pocket PC 2003 (ARMV4) = LIB Release Multithreaded|Pocket PC 2003 (ARMV4)
- LIB Release Multithreaded|Smartphone 2003 (ARMV4) = LIB Release Multithreaded|Smartphone 2003 (ARMV4)
- LIB Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = LIB Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- LIB Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = LIB Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- LIB Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I) = LIB Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- LIB Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I) = LIB Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- LIB Release Singlethreaded|Pocket PC 2003 (ARMV4) = LIB Release Singlethreaded|Pocket PC 2003 (ARMV4)
- LIB Release Singlethreaded|Smartphone 2003 (ARMV4) = LIB Release Singlethreaded|Smartphone 2003 (ARMV4)
- LIB Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = LIB Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- LIB Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = LIB Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- LIB Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I) = LIB Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- LIB Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I) = LIB Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- LIB Release|Pocket PC 2003 (ARMV4) = LIB Release|Pocket PC 2003 (ARMV4)
- LIB Release|Smartphone 2003 (ARMV4) = LIB Release|Smartphone 2003 (ARMV4)
- LIB Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = LIB Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- LIB Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = LIB Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- LIB Release|Windows Mobile 6 Professional SDK (ARMV4I) = LIB Release|Windows Mobile 6 Professional SDK (ARMV4I)
- LIB Release|Windows Mobile 6 Standard SDK (ARMV4I) = LIB Release|Windows Mobile 6 Standard SDK (ARMV4I)
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Pocket PC 2003 (ARMV4).ActiveCfg = Debug Multithreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Pocket PC 2003 (ARMV4).Build.0 = Debug Multithreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Pocket PC 2003 (ARMV4).Deploy.0 = Debug Multithreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Smartphone 2003 (ARMV4).ActiveCfg = Debug Multithreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Smartphone 2003 (ARMV4).Build.0 = Debug Multithreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Smartphone 2003 (ARMV4).Deploy.0 = Debug Multithreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I).ActiveCfg = Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I).Build.0 = Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I).Deploy.0 = Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I).ActiveCfg = Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I).Build.0 = Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I).Deploy.0 = Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Pocket PC 2003 (ARMV4).ActiveCfg = Debug Singlethreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Pocket PC 2003 (ARMV4).Build.0 = Debug Singlethreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Pocket PC 2003 (ARMV4).Deploy.0 = Debug Singlethreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Smartphone 2003 (ARMV4).ActiveCfg = Debug Singlethreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Smartphone 2003 (ARMV4).Build.0 = Debug Singlethreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Smartphone 2003 (ARMV4).Deploy.0 = Debug Singlethreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I).ActiveCfg = Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I).Build.0 = Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I).Deploy.0 = Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I).ActiveCfg = Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I).Build.0 = Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I).Deploy.0 = Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 6 Professional SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 6 Professional SDK (ARMV4I).Build.0 = Debug|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 6 Professional SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 6 Standard SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 6 Standard SDK (ARMV4I).Build.0 = Debug|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 6 Standard SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Pocket PC 2003 (ARMV4).ActiveCfg = Release Multithreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Pocket PC 2003 (ARMV4).Build.0 = Release Multithreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Pocket PC 2003 (ARMV4).Deploy.0 = Release Multithreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Smartphone 2003 (ARMV4).ActiveCfg = Release Multithreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Smartphone 2003 (ARMV4).Build.0 = Release Multithreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Smartphone 2003 (ARMV4).Deploy.0 = Release Multithreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I).ActiveCfg = Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I).Build.0 = Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I).Deploy.0 = Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I).ActiveCfg = Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I).Build.0 = Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I).Deploy.0 = Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Pocket PC 2003 (ARMV4).ActiveCfg = Release Singlethreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Pocket PC 2003 (ARMV4).Build.0 = Release Singlethreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Pocket PC 2003 (ARMV4).Deploy.0 = Release Singlethreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Smartphone 2003 (ARMV4).ActiveCfg = Release Singlethreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Smartphone 2003 (ARMV4).Build.0 = Release Singlethreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Smartphone 2003 (ARMV4).Deploy.0 = Release Singlethreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I).ActiveCfg = Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I).Build.0 = Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I).Deploy.0 = Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I).ActiveCfg = Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I).Build.0 = Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I).Deploy.0 = Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 6 Professional SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 6 Professional SDK (ARMV4I).Build.0 = Release|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Releaase|Windows Mobile 6 Professional SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 6 Standard SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 6 Standard SDK (ARMV4I).Build.0 = Release|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 6 Standard SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 6 Standard SDK (ARMV4I)
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/builds/wince/vc2005-ce/freetype.vcproj b/builds/wince/vc2005-ce/freetype.vcproj
deleted file mode 100644
index a1c0e3729..000000000
--- a/builds/wince/vc2005-ce/freetype.vcproj
+++ /dev/null
@@ -1,3839 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject ProjectType="Visual C++" Version="8.00" Name="freetype" ProjectGUID="{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}" TargetFrameworkVersion="0">
- <Platforms>
- <Platform Name="Pocket PC 2003 (ARMV4)" />
- <Platform Name="Smartphone 2003 (ARMV4)" />
- <Platform Name="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)" />
- <Platform Name="Windows Mobile 5.0 Smartphone SDK (ARMV4I)" />
- <Platform Name="Windows Mobile 6 Professional SDK (ARMV4I)" />
- <Platform Name="Windows Mobile 6 Standard SDK (ARMV4I)" />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration Name="Release|Pocket PC 2003 (ARMV4)" OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)" IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="false" MinimalRebuild="true" RuntimeLibrary="2" EnableFunctionLevelLinking="false" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release/" ObjectFile=".\..\..\..\objs\release/" ProgramDataBaseFileName=".\..\..\..\objs\release/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release|Smartphone 2003 (ARMV4)" OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)" IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="false" MinimalRebuild="true" RuntimeLibrary="2" EnableFunctionLevelLinking="false" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release/" ObjectFile=".\..\..\..\objs\release/" ProgramDataBaseFileName=".\..\..\..\objs\release/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)" OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="false" MinimalRebuild="true" RuntimeLibrary="2" EnableFunctionLevelLinking="false" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release/" ObjectFile=".\..\..\..\objs\release/" ProgramDataBaseFileName=".\..\..\..\objs\release/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)" OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="false" MinimalRebuild="true" RuntimeLibrary="2" EnableFunctionLevelLinking="false" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release/" ObjectFile=".\..\..\..\objs\release/" ProgramDataBaseFileName=".\..\..\..\objs\release/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)" OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="false" MinimalRebuild="true" RuntimeLibrary="2" EnableFunctionLevelLinking="false" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release/" ObjectFile=".\..\..\..\objs\release/" ProgramDataBaseFileName=".\..\..\..\objs\release/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)" OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="false" MinimalRebuild="true" RuntimeLibrary="2" EnableFunctionLevelLinking="false" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release/" ObjectFile=".\..\..\..\objs\release/" ProgramDataBaseFileName=".\..\..\..\objs\release/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)" OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)" IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_mt/" ObjectFile=".\..\..\..\objs\release_mt/" ProgramDataBaseFileName=".\..\..\..\objs\release_mt/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28MT.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release Multithreaded|Smartphone 2003 (ARMV4)" OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)" IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_mt/" ObjectFile=".\..\..\..\objs\release_mt/" ProgramDataBaseFileName=".\..\..\..\objs\release_mt/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28MT.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)" OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_mt/" ObjectFile=".\..\..\..\objs\release_mt/" ProgramDataBaseFileName=".\..\..\..\objs\release_mt/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28MT.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)" OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_mt/" ObjectFile=".\..\..\..\objs\release_mt/" ProgramDataBaseFileName=".\..\..\..\objs\release_mt/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28MT.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)" OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_mt/" ObjectFile=".\..\..\..\objs\release_mt/" ProgramDataBaseFileName=".\..\..\..\objs\release_mt/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28MT.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)" OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_mt/" ObjectFile=".\..\..\..\objs\release_mt/" ProgramDataBaseFileName=".\..\..\..\objs\release_mt/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28MT.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)" OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)" IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);WIN32;_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="false" RuntimeLibrary="0" EnableFunctionLevelLinking="false" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_st/" ObjectFile=".\..\..\..\objs\release_st/" ProgramDataBaseFileName=".\..\..\..\objs\release_st/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28ST.lib" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)" OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)" IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);WIN32;_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="false" RuntimeLibrary="0" EnableFunctionLevelLinking="false" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_st/" ObjectFile=".\..\..\..\objs\release_st/" ProgramDataBaseFileName=".\..\..\..\objs\release_st/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28ST.lib" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)" OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);WIN32;_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="false" RuntimeLibrary="0" EnableFunctionLevelLinking="false" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_st/" ObjectFile=".\..\..\..\objs\release_st/" ProgramDataBaseFileName=".\..\..\..\objs\release_st/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28ST.lib" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)" OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);WIN32;_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="false" RuntimeLibrary="0" EnableFunctionLevelLinking="false" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_st/" ObjectFile=".\..\..\..\objs\release_st/" ProgramDataBaseFileName=".\..\..\..\objs\release_st/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28ST.lib" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)" OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);WIN32;_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="false" RuntimeLibrary="0" EnableFunctionLevelLinking="false" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_st/" ObjectFile=".\..\..\..\objs\release_st/" ProgramDataBaseFileName=".\..\..\..\objs\release_st/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28ST.lib" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)" OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);WIN32;_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H" StringPooling="false" RuntimeLibrary="0" EnableFunctionLevelLinking="false" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_st/" ObjectFile=".\..\..\..\objs\release_st/" ProgramDataBaseFileName=".\..\..\..\objs\release_st/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28ST.lib" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug|Pocket PC 2003 (ARMV4)" OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)" IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;NO_ERRNO_H" RuntimeLibrary="3" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug/" ObjectFile=".\..\..\..\objs\debug/" ProgramDataBaseFileName=".\..\..\..\objs\debug/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug|Smartphone 2003 (ARMV4)" OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)" IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;NO_ERRNO_H" RuntimeLibrary="3" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug/" ObjectFile=".\..\..\..\objs\debug/" ProgramDataBaseFileName=".\..\..\..\objs\debug/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)" OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;NO_ERRNO_H" RuntimeLibrary="3" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug/" ObjectFile=".\..\..\..\objs\debug/" ProgramDataBaseFileName=".\..\..\..\objs\debug/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)" OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;NO_ERRNO_H" RuntimeLibrary="3" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug/" ObjectFile=".\..\..\..\objs\debug/" ProgramDataBaseFileName=".\..\..\..\objs\debug/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)" OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;NO_ERRNO_H" RuntimeLibrary="3" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug/" ObjectFile=".\..\..\..\objs\debug/" ProgramDataBaseFileName=".\..\..\..\objs\debug/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)" OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;NO_ERRNO_H" RuntimeLibrary="3" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug/" ObjectFile=".\..\..\..\objs\debug/" ProgramDataBaseFileName=".\..\..\..\objs\debug/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)" OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)" IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY" RuntimeLibrary="1" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_st/" ObjectFile=".\..\..\..\objs\debug_st/" ProgramDataBaseFileName=".\..\..\..\objs\debug_st/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28ST_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)" OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)" IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY" RuntimeLibrary="1" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_st/" ObjectFile=".\..\..\..\objs\debug_st/" ProgramDataBaseFileName=".\..\..\..\objs\debug_st/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28ST_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)" OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;NO_ERRNO_H" RuntimeLibrary="1" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_st/" ObjectFile=".\..\..\..\objs\debug_st/" ProgramDataBaseFileName=".\..\..\..\objs\debug_st/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28ST_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)" OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY" RuntimeLibrary="1" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_st/" ObjectFile=".\..\..\..\objs\debug_st/" ProgramDataBaseFileName=".\..\..\..\objs\debug_st/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28ST_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)" OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY" RuntimeLibrary="1" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_st/" ObjectFile=".\..\..\..\objs\debug_st/" ProgramDataBaseFileName=".\..\..\..\objs\debug_st/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28ST_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)" OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY" RuntimeLibrary="1" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_st/" ObjectFile=".\..\..\..\objs\debug_st/" ProgramDataBaseFileName=".\..\..\..\objs\debug_st/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28ST_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)" OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)" IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE" GeneratePreprocessedFile="0" RuntimeLibrary="1" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_mt/" ObjectFile=".\..\..\..\objs\debug_mt/" ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28MT_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)" OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)" IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE" GeneratePreprocessedFile="0" RuntimeLibrary="1" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_mt/" ObjectFile=".\..\..\..\objs\debug_mt/" ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28MT_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)" OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE;NO_ERRNO_H" GeneratePreprocessedFile="0" RuntimeLibrary="1" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_mt/" ObjectFile=".\..\..\..\objs\debug_mt/" ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28MT_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)" OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE" GeneratePreprocessedFile="0" RuntimeLibrary="1" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_mt/" ObjectFile=".\..\..\..\objs\debug_mt/" ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28MT_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)" OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE" GeneratePreprocessedFile="0" RuntimeLibrary="1" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_mt/" ObjectFile=".\..\..\..\objs\debug_mt/" ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28MT_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)" OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)" IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" TargetEnvironment="1" />
- <Tool Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE" GeneratePreprocessedFile="0" RuntimeLibrary="1" DisableLanguageExtensions="false" PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_mt/" ObjectFile=".\..\..\..\objs\debug_mt/" ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28MT_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCCodeSignTool" />
- <Tool Name="VCPostBuildEventTool" />
- <DeploymentTool ForceDirty="-1" RemoteDirectory="" RegisterOutput="0" AdditionalFiles="" />
- <DebuggerTool />
- </Configuration>
- <Configuration Name="Release Multithreaded|Win32" OutputDirectory=".\..\..\..\objs\release_mt" IntermediateDirectory=".\..\..\..\objs\release_mt" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" />
- <Tool Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_mt/" ObjectFile=".\..\..\..\objs\release_mt/" ProgramDataBaseFileName=".\..\..\..\objs\release_mt/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28MT.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCPostBuildEventTool" />
- </Configuration>
- <Configuration Name="Debug Multithreaded|Win32" OutputDirectory=".\..\..\..\objs\debug_mt" IntermediateDirectory=".\..\..\..\objs\debug_mt" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" />
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE" GeneratePreprocessedFile="0" BasicRuntimeChecks="3" RuntimeLibrary="1" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_mt/" ObjectFile=".\..\..\..\objs\debug_mt/" ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype28MT_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCPostBuildEventTool" />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
- <File RelativePath="..\..\..\src\autofit\autofit.c">
- </File>
- <File RelativePath="..\..\..\src\bdf\bdf.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\cff\cff.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\base\ftbase.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\base\ftbitmap.c">
- </File>
- <File RelativePath="..\..\..\src\cache\ftcache.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\ftdebug.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" DisableLanguageExtensions="false" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\base\ftfstype.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftgasp.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftglyph.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\gzip\ftgzip.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\base\ftinit.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\lzw\ftlzw.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\base\ftstroke.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftsystem.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\smooth\smooth.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <Filter Name="FT_MODULES">
- <File RelativePath="..\..\..\src\base\ftbbox.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftbdf.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftcid.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftfntfmt.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftgxval.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftlcdfil.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftmm.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\base\ftotval.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftpatent.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftpfr.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftsynth.c">
- </File>
- <File RelativePath="..\..\..\src\base\fttype1.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftwinfnt.c">
- </File>
- <File RelativePath="..\..\..\src\pcf\pcf.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\pfr\pfr.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\psaux\psaux.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\pshinter\pshinter.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\psnames\psmodule.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\raster\raster.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\sfnt\sfnt.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\truetype\truetype.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\type1\type1.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\cid\type1cid.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\type42\type42.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\winfonts\winfnt.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- </Filter>
- </Filter>
- <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl">
- <File RelativePath="..\..\..\include\ft2build.h">
- </File>
- <File RelativePath="..\..\..\include\freetype\config\ftconfig.h">
- </File>
- <File RelativePath="..\..\..\include\freetype\config\ftheader.h">
- </File>
- <File RelativePath="..\..\..\include\freetype\config\ftmodule.h">
- </File>
- <File RelativePath="..\..\..\include\freetype\config\ftoption.h">
- </File>
- <File RelativePath="..\..\..\include\freetype\config\ftstdlib.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject> \ No newline at end of file
diff --git a/builds/wince/vc2005-ce/index.html b/builds/wince/vc2005-ce/index.html
deleted file mode 100644
index fcb52bc5b..000000000
--- a/builds/wince/vc2005-ce/index.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<html>
-<header>
-<title>
- FreeType&nbsp;2 Project Files for VS.NET&nbsp;2005
- (Pocket PC)
-</title>
-
-<body>
-<h1>
- FreeType&nbsp;2 Project Files for VS.NET&nbsp;2005
- (Pocket PC)
-</h1>
-
-<p>This directory contains project files for Visual C++, named
-<tt>freetype.vcproj</tt>, and Visual Studio, called <tt>freetype.sln</tt> for
-the following targets:
-
-<ul>
- <li>PPC/SP 2003 (Pocket PC 2003)</li>
- <li>PPC/SP WM5 (Windows Mobile 5)</li>
- <li>PPC/SP WM6 (Windows Mobile 6)</li>
-</ul>
-
-It compiles the following libraries from the FreeType 2.8 sources:</p>
-
-<ul>
- <pre>
- freetype28.lib - release build; single threaded
- freetype28_D.lib - debug build; single threaded
- freetype28MT.lib - release build; multi-threaded
- freetype28MT_D.lib - debug build; multi-threaded</pre>
-</ul>
-
-<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
-archives are already stored this way, so no further action is required. If
-you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
-tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
-file smart CR/LF Conversion</em> option. Alternatively, you may consider
-using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
-around, which specifically deal with this particular problem.
-
-<p>Build directories are placed in the top-level <tt>objs</tt>
-directory.</p>
-
-</body>
-</html>
diff --git a/builds/wince/vc2008-ce/freetype.sln b/builds/wince/vc2008-ce/freetype.sln
deleted file mode 100644
index 23914323c..000000000
--- a/builds/wince/vc2008-ce/freetype.sln
+++ /dev/null
@@ -1,157 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "freetype.vcproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- LIB Debug Multithreaded|Pocket PC 2003 (ARMV4) = LIB Debug Multithreaded|Pocket PC 2003 (ARMV4)
- LIB Debug Multithreaded|Smartphone 2003 (ARMV4) = LIB Debug Multithreaded|Smartphone 2003 (ARMV4)
- LIB Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = LIB Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- LIB Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = LIB Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- LIB Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I) = LIB Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- LIB Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I) = LIB Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- LIB Debug Singlethreaded|Pocket PC 2003 (ARMV4) = LIB Debug Singlethreaded|Pocket PC 2003 (ARMV4)
- LIB Debug Singlethreaded|Smartphone 2003 (ARMV4) = LIB Debug Singlethreaded|Smartphone 2003 (ARMV4)
- LIB Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = LIB Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- LIB Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = LIB Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- LIB Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I) = LIB Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- LIB Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I) = LIB Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- LIB Debug|Pocket PC 2003 (ARMV4) = LIB Debug|Pocket PC 2003 (ARMV4)
- LIB Debug|Smartphone 2003 (ARMV4) = LIB Debug|Smartphone 2003 (ARMV4)
- LIB Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = LIB Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- LIB Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = LIB Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- LIB Debug|Windows Mobile 6 Professional SDK (ARMV4I) = LIB Debug|Windows Mobile 6 Professional SDK (ARMV4I)
- LIB Debug|Windows Mobile 6 Standard SDK (ARMV4I) = LIB Debug|Windows Mobile 6 Standard SDK (ARMV4I)
- LIB Release Multithreaded|Pocket PC 2003 (ARMV4) = LIB Release Multithreaded|Pocket PC 2003 (ARMV4)
- LIB Release Multithreaded|Smartphone 2003 (ARMV4) = LIB Release Multithreaded|Smartphone 2003 (ARMV4)
- LIB Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = LIB Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- LIB Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = LIB Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- LIB Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I) = LIB Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- LIB Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I) = LIB Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- LIB Release Singlethreaded|Pocket PC 2003 (ARMV4) = LIB Release Singlethreaded|Pocket PC 2003 (ARMV4)
- LIB Release Singlethreaded|Smartphone 2003 (ARMV4) = LIB Release Singlethreaded|Smartphone 2003 (ARMV4)
- LIB Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = LIB Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- LIB Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = LIB Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- LIB Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I) = LIB Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- LIB Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I) = LIB Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- LIB Release|Pocket PC 2003 (ARMV4) = LIB Release|Pocket PC 2003 (ARMV4)
- LIB Release|Smartphone 2003 (ARMV4) = LIB Release|Smartphone 2003 (ARMV4)
- LIB Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = LIB Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- LIB Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = LIB Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- LIB Release|Windows Mobile 6 Professional SDK (ARMV4I) = LIB Release|Windows Mobile 6 Professional SDK (ARMV4I)
- LIB Release|Windows Mobile 6 Standard SDK (ARMV4I) = LIB Release|Windows Mobile 6 Standard SDK (ARMV4I)
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Pocket PC 2003 (ARMV4).ActiveCfg = Debug Multithreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Pocket PC 2003 (ARMV4).Build.0 = Debug Multithreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Pocket PC 2003 (ARMV4).Deploy.0 = Debug Multithreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Smartphone 2003 (ARMV4).ActiveCfg = Debug Multithreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Smartphone 2003 (ARMV4).Build.0 = Debug Multithreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Smartphone 2003 (ARMV4).Deploy.0 = Debug Multithreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I).ActiveCfg = Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I).Build.0 = Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I).Deploy.0 = Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I).ActiveCfg = Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I).Build.0 = Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I).Deploy.0 = Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Pocket PC 2003 (ARMV4).ActiveCfg = Debug Singlethreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Pocket PC 2003 (ARMV4).Build.0 = Debug Singlethreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Pocket PC 2003 (ARMV4).Deploy.0 = Debug Singlethreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Smartphone 2003 (ARMV4).ActiveCfg = Debug Singlethreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Smartphone 2003 (ARMV4).Build.0 = Debug Singlethreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Smartphone 2003 (ARMV4).Deploy.0 = Debug Singlethreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I).ActiveCfg = Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I).Build.0 = Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I).Deploy.0 = Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I).ActiveCfg = Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I).Build.0 = Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I).Deploy.0 = Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 6 Professional SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 6 Professional SDK (ARMV4I).Build.0 = Debug|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 6 Professional SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 6 Standard SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 6 Standard SDK (ARMV4I).Build.0 = Debug|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Windows Mobile 6 Standard SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Pocket PC 2003 (ARMV4).ActiveCfg = Release Multithreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Pocket PC 2003 (ARMV4).Build.0 = Release Multithreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Pocket PC 2003 (ARMV4).Deploy.0 = Release Multithreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Smartphone 2003 (ARMV4).ActiveCfg = Release Multithreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Smartphone 2003 (ARMV4).Build.0 = Release Multithreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Smartphone 2003 (ARMV4).Deploy.0 = Release Multithreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I).ActiveCfg = Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I).Build.0 = Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I).Deploy.0 = Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I).ActiveCfg = Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I).Build.0 = Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I).Deploy.0 = Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Pocket PC 2003 (ARMV4).ActiveCfg = Release Singlethreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Pocket PC 2003 (ARMV4).Build.0 = Release Singlethreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Pocket PC 2003 (ARMV4).Deploy.0 = Release Singlethreaded|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Smartphone 2003 (ARMV4).ActiveCfg = Release Singlethreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Smartphone 2003 (ARMV4).Build.0 = Release Singlethreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Smartphone 2003 (ARMV4).Deploy.0 = Release Singlethreaded|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I).ActiveCfg = Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I).Build.0 = Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I).Deploy.0 = Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I).ActiveCfg = Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I).Build.0 = Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I).Deploy.0 = Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 6 Professional SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 6 Professional SDK (ARMV4I).Build.0 = Release|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 6 Professional SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 6 Professional SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 6 Standard SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 6 Standard SDK (ARMV4I).Build.0 = Release|Windows Mobile 6 Standard SDK (ARMV4I)
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Windows Mobile 6 Standard SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 6 Standard SDK (ARMV4I)
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/builds/wince/vc2008-ce/freetype.vcproj b/builds/wince/vc2008-ce/freetype.vcproj
deleted file mode 100644
index 273aa53d4..000000000
--- a/builds/wince/vc2008-ce/freetype.vcproj
+++ /dev/null
@@ -1,13495 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9,00"
- Name="freetype"
- ProjectGUID="{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
- TargetFrameworkVersion="0"
- >
- <Platforms>
- <Platform
- Name="Pocket PC 2003 (ARMV4)"
- />
- <Platform
- Name="Smartphone 2003 (ARMV4)"
- />
- <Platform
- Name="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- />
- <Platform
- Name="Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- />
- <Platform
- Name="Windows Mobile 6 Professional SDK (ARMV4I)"
- />
- <Platform
- Name="Windows Mobile 6 Standard SDK (ARMV4I)"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Release|Pocket PC 2003 (ARMV4)"
- OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="false"
- MinimalRebuild="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release|Smartphone 2003 (ARMV4)"
- OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="false"
- MinimalRebuild="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="false"
- MinimalRebuild="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="false"
- MinimalRebuild="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="false"
- MinimalRebuild="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="false"
- MinimalRebuild="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);WIN32;_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="false"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);WIN32;_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="false"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);WIN32;_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="false"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);WIN32;_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="false"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);WIN32;_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="false"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);WIN32;_LIB;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- StringPooling="false"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- RuntimeLibrary="3"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug|Smartphone 2003 (ARMV4)"
- OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- RuntimeLibrary="3"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- RuntimeLibrary="3"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- RuntimeLibrary="3"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- RuntimeLibrary="3"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- RuntimeLibrary="3"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;NO_ERRNO_H"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- RuntimeLibrary="1"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- RuntimeLibrary="1"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE;NO_ERRNO_H"
- GeneratePreprocessedFile="0"
- RuntimeLibrary="1"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- RuntimeLibrary="1"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- RuntimeLibrary="1"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- RuntimeLibrary="1"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Win32"
- OutputDirectory=".\..\..\..\objs\release_mt"
- IntermediateDirectory=".\..\..\..\objs\release_mt"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Win32"
- OutputDirectory=".\..\..\..\objs\debug_mt"
- IntermediateDirectory=".\..\..\..\objs\debug_mt"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
- >
- <File
- RelativePath="..\..\..\src\autofit\autofit.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\bdf\bdf.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\cff\cff.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftbase.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftbitmap.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\cache\ftcache.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\ftdebug.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftfstype.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftgasp.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftglyph.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\gzip\ftgzip.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftinit.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\lzw\ftlzw.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftstroke.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftsystem.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\smooth\smooth.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <Filter
- Name="FT_MODULES"
- >
- <File
- RelativePath="..\..\..\src\base\ftbbox.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftbdf.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftcid.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftfntfmt.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftgxval.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftlcdfil.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftmm.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftotval.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftpatent.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftpfr.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftsynth.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\fttype1.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftwinfnt.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\pcf\pcf.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\pfr\pfr.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\psaux\psaux.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\pshinter\pshinter.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\psnames\psmodule.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\raster\raster.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\sfnt\sfnt.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\truetype\truetype.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\type1\type1.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\cid\type1cid.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\type42\type42.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\winfonts\winfnt.c"
- >
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- </Filter>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl"
- >
- <File
- RelativePath="..\..\..\include\ft2build.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftconfig.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftheader.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftmodule.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftoption.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftstdlib.h"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/builds/wince/vc2008-ce/index.html b/builds/wince/vc2008-ce/index.html
deleted file mode 100644
index 736684374..000000000
--- a/builds/wince/vc2008-ce/index.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<html>
-<header>
-<title>
- FreeType&nbsp;2 Project Files for VS.NET&nbsp;2008
- (Pocket PC)
-</title>
-
-<body>
-<h1>
- FreeType&nbsp;2 Project Files for VS.NET&nbsp;2008
- (Pocket PC)
-</h1>
-
-<p>This directory contains project files for Visual C++, named
-<tt>freetype.dsp</tt>, and Visual Studio, called <tt>freetype.sln</tt> for
-the following targets:
-
-<ul>
- <li>PPC/SP 2003 (Pocket PC 2003)</li>
- <li>PPC/SP WM5 (Windows Mobile 5)</li>
- <li>PPC/SP WM6 (Windows Mobile 6)</li>
-</ul>
-
-It compiles the following libraries from the FreeType 2.8 sources:</p>
-
-<ul>
- <pre>
- freetype28.lib - release build; single threaded
- freetype28_D.lib - debug build; single threaded
- freetype28MT.lib - release build; multi-threaded
- freetype28MT_D.lib - debug build; multi-threaded</pre>
-</ul>
-
-<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
-archives are already stored this way, so no further action is required. If
-you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
-tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
-file smart CR/LF Conversion</em> option. Alternatively, you may consider
-using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
-around, which specifically deal with this particular problem.
-
-<p>Build directories are placed in the top-level <tt>objs</tt>
-directory.</p>
-
-</body>
-</html>
diff --git a/builds/windows/.gitignore b/builds/windows/.gitignore
deleted file mode 100644
index 41456a48a..000000000
--- a/builds/windows/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-# user-specific cache/settings files
-*.opensdf
-*.sdf
-*.suo
-*.user
diff --git a/builds/windows/detect.mk b/builds/windows/detect.mk
deleted file mode 100644
index 350d15605..000000000
--- a/builds/windows/detect.mk
+++ /dev/null
@@ -1,184 +0,0 @@
-#
-# FreeType 2 configuration file to detect a Win32 host platform.
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-.PHONY: setup
-
-
-ifeq ($(PLATFORM),ansi)
-
- # Detecting Windows NT is easy, as the OS variable must be defined and
- # contains `Windows_NT'. This also works with Windows 2000 and XP.
- #
- ifeq ($(OS),Windows_NT)
-
- PLATFORM := windows
-
- else
-
- # Detecting Windows 9X
-
- # We used to run the `ver' command to see if its output contains the
- # word `Windows'. If this is true, we are running Windows 95 or later:
- #
- # ifdef COMSPEC
- # # First, check if we have the COMSPEC environment variable, which
- # # indicates we can use COMMAND.COM's internal commands
- # is_windows := $(findstring Windows,$(strip $(shell ver)))
- # endif
- #
- # Unfortunately, this also detects the case when one is running
- # DOS 7.x (the MS-DOS version that lies below Windows) without actually
- # launching the GUI.
- #
- # A better test is to check whether there are both the environment
- # variables `winbootdir' and `windir'. The first indicates an
- # underlying DOS 7.x, while the second is set only if windows is
- # available.
- #
- # Note that on Windows NT, such an environment variable will not be seen
- # from DOS-based tools like DJGPP's make; this is not actually a problem
- # since NT is detected independently above. But do not try to be clever!
- #
- ifdef winbootdir
- ifdef windir
-
- PLATFORM := windows
-
- endif
- endif
-
- endif # test NT
-
-endif # test PLATFORM ansi
-
-ifeq ($(PLATFORM),windows)
-
- DELETE := del
- CAT := type
- SEP := $(BACKSLASH)
-
- # Setting COPY is a bit trickier. Plain COPY on NT will not work
- # correctly, because it will uppercase 8.3 filenames, creating a
- # `CONFIG.MK' file which isn't found later on by `make'.
- # Since we do not want that, we need to force execution of CMD.EXE.
- # Unfortunately, CMD.EXE is not available on Windows 9X.
- # So we need to hack.
- #
- # Kudos to Eli Zaretskii (DJGPP guru) that helped debug it.
- # Details are available in threads of the freetype mailing list
- # (2004-11-11), and then in the devel mailing list (2004-11-20 to -23).
- #
- ifeq ($(OS),Windows_NT)
- COPY := cmd.exe /c copy
- else
- COPY := copy
- endif # test NT
-
-
- # gcc Makefile by default
- CONFIG_FILE := w32-gcc.mk
- ifeq ($(firstword $(CC)),cc)
- CC := gcc
- endif
-
- ifneq ($(findstring list,$(MAKECMDGOALS)),) # test for the "list" target
- dump_target_list:
- @echo ÿ
- @echo $(PROJECT_TITLE) build system -- supported compilers
- @echo ÿ
- @echo Several command-line compilers are supported on Win32:
- @echo ÿ
- @echo ÿÿmake setupÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿgcc (with Mingw)
- @echo ÿÿmake setup visualcÿÿÿÿÿÿÿÿÿÿÿÿÿMicrosoft Visual C++
- @echo ÿÿmake setup bcc32ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBorland C/C++
- @echo ÿÿmake setup lccÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWin32-LCC
- @echo ÿÿmake setup intelcÿÿÿÿÿÿÿÿÿÿÿÿÿÿIntel C/C++
- @echo ÿ
-
- setup: dump_target_list
- .PHONY: dump_target_list list
- else
- setup: dos_setup
- endif
-
- # additionally, we provide hooks for various other compilers
- #
- ifneq ($(findstring visualc,$(MAKECMDGOALS)),) # Visual C/C++
- CONFIG_FILE := w32-vcc.mk
- CC := cl
- visualc: setup
- .PHONY: visualc
- endif
-
- ifneq ($(findstring intelc,$(MAKECMDGOALS)),) # Intel C/C++
- CONFIG_FILE := w32-intl.mk
- CC := cl
- visualc: setup
- .PHONY: intelc
- endif
-
- ifneq ($(findstring watcom,$(MAKECMDGOALS)),) # Watcom C/C++
- CONFIG_FILE := w32-wat.mk
- CC := wcc386
- watcom: setup
- .PHONY: watcom
- endif
-
- ifneq ($(findstring visualage,$(MAKECMDGOALS)),) # Visual Age C++
- CONFIG_FILE := w32-icc.mk
- CC := icc
- visualage: setup
- .PHONY: visualage
- endif
-
- ifneq ($(findstring lcc,$(MAKECMDGOALS)),) # LCC-Win32
- CONFIG_FILE := w32-lcc.mk
- CC := lcc
- lcc: setup
- .PHONY: lcc
- endif
-
- ifneq ($(findstring mingw32,$(MAKECMDGOALS)),) # mingw32
- CONFIG_FILE := w32-mingw32.mk
- CC := gcc
- mingw32: setup
- .PHONY: mingw32
- endif
-
- ifneq ($(findstring bcc32,$(MAKECMDGOALS)),) # Borland C++
- CONFIG_FILE := w32-bcc.mk
- CC := bcc32
- bcc32: setup
- .PHONY: bcc32
- endif
-
- ifneq ($(findstring devel-bcc,$(MAKECMDGOALS)),) # development target
- CONFIG_FILE := w32-bccd.mk
- CC := bcc32
- devel-bcc: setup
- .PHONY: devel-bcc
- endif
-
- ifneq ($(findstring devel-gcc,$(MAKECMDGOALS)),) # development target
- CONFIG_FILE := w32-dev.mk
- CC := gcc
- devel-gcc: setup
- .PHONY: devel-gcc
- endif
-
-endif # test PLATFORM windows
-
-
-# EOF
diff --git a/builds/windows/ftdebug.c b/builds/windows/ftdebug.c
deleted file mode 100644
index cadfceade..000000000
--- a/builds/windows/ftdebug.c
+++ /dev/null
@@ -1,237 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftdebug.c */
-/* */
-/* Debugging and logging component for Win32 (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This component contains various macros and functions used to ease the */
- /* debugging of the FreeType engine. Its main purpose is in assertion */
- /* checking, tracing, and error detection. */
- /* */
- /* There are now three debugging modes: */
- /* */
- /* - trace mode */
- /* */
- /* Error and trace messages are sent to the log file (which can be the */
- /* standard error output). */
- /* */
- /* - error mode */
- /* */
- /* Only error messages are generated. */
- /* */
- /* - release mode: */
- /* */
- /* No error message is sent or generated. The code is free from any */
- /* debugging parts. */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-
-
-#ifdef FT_DEBUG_LEVEL_ERROR
-
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <windows.h>
-
-
- /* documentation is in ftdebug.h */
-
- FT_BASE_DEF( void )
- FT_Message( const char* fmt,
- ... )
- {
- static char buf[8192];
- va_list ap;
-
-
- va_start( ap, fmt );
- vprintf( fmt, ap );
- /* send the string to the debugger as well */
- vsprintf( buf, fmt, ap );
- OutputDebugStringA( buf );
- va_end( ap );
- }
-
-
- /* documentation is in ftdebug.h */
-
- FT_BASE_DEF( void )
- FT_Panic( const char* fmt,
- ... )
- {
- static char buf[8192];
- va_list ap;
-
-
- va_start( ap, fmt );
- vsprintf( buf, fmt, ap );
- OutputDebugStringA( buf );
- va_end( ap );
-
- exit( EXIT_FAILURE );
- }
-
-
- /* documentation is in ftdebug.h */
-
- FT_BASE_DEF( int )
- FT_Throw( FT_Error error,
- int line,
- const char* file )
- {
- FT_UNUSED( error );
- FT_UNUSED( line );
- FT_UNUSED( file );
-
- return 0;
- }
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
-
- /* array of trace levels, initialized to 0 */
- int ft_trace_levels[trace_count];
-
- /* define array of trace toggle names */
-#define FT_TRACE_DEF( x ) #x ,
-
- static const char* ft_trace_toggles[trace_count + 1] =
- {
-#include FT_INTERNAL_TRACE_H
- NULL
- };
-
-#undef FT_TRACE_DEF
-
-
- /*************************************************************************/
- /* */
- /* Initialize the tracing sub-system. This is done by retrieving the */
- /* value of the "FT2_DEBUG" environment variable. It must be a list of */
- /* toggles, separated by spaces, `;' or `,'. Example: */
- /* */
- /* "any:3 memory:6 stream:5" */
- /* */
- /* This will request that all levels be set to 3, except the trace level */
- /* for the memory and stream components which are set to 6 and 5, */
- /* respectively. */
- /* */
- /* See the file `include/freetype/internal/fttrace.h' for details of the */
- /* available toggle names. */
- /* */
- /* The level must be between 0 and 6; 0 means quiet (except for serious */
- /* runtime errors), and 6 means _very_ verbose. */
- /* */
- FT_BASE_DEF( void )
- ft_debug_init( void )
- {
- const char* ft2_debug = getenv( "FT2_DEBUG" );
-
-
- if ( ft2_debug )
- {
- const char* p = ft2_debug;
- const char* q;
-
-
- for ( ; *p; p++ )
- {
- /* skip leading whitespace and separators */
- if ( *p == ' ' || *p == '\t' || *p == ',' || *p == ';' || *p == '=' )
- continue;
-
- /* read toggle name, followed by ':' */
- q = p;
- while ( *p && *p != ':' )
- p++;
-
- if ( !*p )
- break;
-
- if ( *p == ':' && p > q )
- {
- int n, i, len = (int)( p - q );
- int level = -1, found = -1;
-
-
- for ( n = 0; n < trace_count; n++ )
- {
- const char* toggle = ft_trace_toggles[n];
-
-
- for ( i = 0; i < len; i++ )
- {
- if ( toggle[i] != q[i] )
- break;
- }
-
- if ( i == len && toggle[i] == 0 )
- {
- found = n;
- break;
- }
- }
-
- /* read level */
- p++;
- if ( *p )
- {
- level = *p - '0';
- if ( level < 0 || level > 7 )
- level = -1;
- }
-
- if ( found >= 0 && level >= 0 )
- {
- if ( found == trace_any )
- {
- /* special case for "any" */
- for ( n = 0; n < trace_count; n++ )
- ft_trace_levels[n] = level;
- }
- else
- ft_trace_levels[found] = level;
- }
- }
- }
- }
- }
-
-
-#else /* !FT_DEBUG_LEVEL_TRACE */
-
-
- FT_BASE_DEF( void )
- ft_debug_init( void )
- {
- /* nothing */
- }
-
-
-#endif /* !FT_DEBUG_LEVEL_TRACE */
-
-#endif /* FT_DEBUG_LEVEL_ERROR */
-
-
-/* END */
diff --git a/builds/windows/vc2005/freetype.sln b/builds/windows/vc2005/freetype.sln
deleted file mode 100644
index ec3345d18..000000000
--- a/builds/windows/vc2005/freetype.sln
+++ /dev/null
@@ -1,31 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "freetype.vcproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- LIB Debug Multithreaded|Win32 = LIB Debug Multithreaded|Win32
- LIB Debug Singlethreaded|Win32 = LIB Debug Singlethreaded|Win32
- LIB Debug|Win32 = LIB Debug|Win32
- LIB Release Multithreaded|Win32 = LIB Release Multithreaded|Win32
- LIB Release Singlethreaded|Win32 = LIB Release Singlethreaded|Win32
- LIB Release|Win32 = LIB Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Win32.ActiveCfg = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Win32.Build.0 = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Win32.ActiveCfg = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Win32.Build.0 = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Win32.ActiveCfg = Debug|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Win32.Build.0 = Debug|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Win32.ActiveCfg = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Win32.Build.0 = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Win32.ActiveCfg = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Win32.Build.0 = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Win32.ActiveCfg = Release|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/builds/windows/vc2005/freetype.vcproj b/builds/windows/vc2005/freetype.vcproj
deleted file mode 100644
index e5e67d5b3..000000000
--- a/builds/windows/vc2005/freetype.vcproj
+++ /dev/null
@@ -1,646 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject ProjectType="Visual C++" Version="8.00" Name="freetype" ProjectGUID="{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}" TargetFrameworkVersion="131072">
- <Platforms>
- <Platform Name="Win32" />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration Name="Release|Win32" OutputDirectory=".\..\..\..\objs\release" IntermediateDirectory=".\..\..\..\objs\release" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" />
- <Tool Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY" StringPooling="true" RuntimeLibrary="2" EnableFunctionLevelLinking="true" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release/" ObjectFile=".\..\..\..\objs\release/" ProgramDataBaseFileName=".\..\..\..\objs\release/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype28.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCPostBuildEventTool" />
- </Configuration>
- <Configuration Name="Release Multithreaded|Win32" OutputDirectory=".\..\..\..\objs\release_mt" IntermediateDirectory=".\..\..\..\objs\release_mt" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" />
- <Tool Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_mt/" ObjectFile=".\..\..\..\objs\release_mt/" ProgramDataBaseFileName=".\..\..\..\objs\release_mt/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype28MT.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCPostBuildEventTool" />
- </Configuration>
- <Configuration Name="Release Singlethreaded|Win32" OutputDirectory=".\..\..\..\objs\release_st" IntermediateDirectory=".\..\..\..\objs\release_st" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" />
- <Tool Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_st/" ObjectFile=".\..\..\..\objs\release_st/" ProgramDataBaseFileName=".\..\..\..\objs\release_st/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype28ST.lib" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCPostBuildEventTool" />
- </Configuration>
- <Configuration Name="Debug|Win32" OutputDirectory=".\..\..\..\objs\debug" IntermediateDirectory=".\..\..\..\objs\debug" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" />
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY" BasicRuntimeChecks="3" RuntimeLibrary="3" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug/" ObjectFile=".\..\..\..\objs\debug/" ProgramDataBaseFileName=".\..\..\..\objs\debug/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype28_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCPostBuildEventTool" />
- </Configuration>
- <Configuration Name="Debug Singlethreaded|Win32" OutputDirectory=".\..\..\..\objs\debug_st" IntermediateDirectory=".\..\..\..\objs\debug_st" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" />
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY" BasicRuntimeChecks="3" RuntimeLibrary="1" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_st/" ObjectFile=".\..\..\..\objs\debug_st/" ProgramDataBaseFileName=".\..\..\..\objs\debug_st/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype28ST_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCPostBuildEventTool" />
- </Configuration>
- <Configuration Name="Debug Multithreaded|Win32" OutputDirectory=".\..\..\..\objs\debug_mt" IntermediateDirectory=".\..\..\..\objs\debug_mt" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">
- <Tool Name="VCPreBuildEventTool" />
- <Tool Name="VCCustomBuildTool" />
- <Tool Name="VCXMLDataGeneratorTool" />
- <Tool Name="VCWebServiceProxyGeneratorTool" />
- <Tool Name="VCMIDLTool" />
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE" GeneratePreprocessedFile="0" BasicRuntimeChecks="3" RuntimeLibrary="1" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_mt/" ObjectFile=".\..\..\..\objs\debug_mt/" ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />
- <Tool Name="VCManagedResourceCompilerTool" />
- <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
- <Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype28MT_D.lib" SuppressStartupBanner="true" />
- <Tool Name="VCALinkTool" />
- <Tool Name="VCXDCMakeTool" />
- <Tool Name="VCBscMakeTool" />
- <Tool Name="VCFxCopTool" />
- <Tool Name="VCPostBuildEventTool" />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
- <File RelativePath="..\..\..\src\autofit\autofit.c">
- </File>
- <File RelativePath="..\..\..\src\bdf\bdf.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\cff\cff.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\base\ftbase.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\base\ftbitmap.c">
- </File>
- <File RelativePath="..\..\..\src\cache\ftcache.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\ftdebug.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" DisableLanguageExtensions="false" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\base\ftfstype.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftgasp.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftglyph.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\gzip\ftgzip.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\base\ftinit.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\lzw\ftlzw.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\base\ftstroke.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftsystem.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\smooth\smooth.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <Filter Name="FT_MODULES">
- <File RelativePath="..\..\..\src\base\ftbbox.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftfntfmt.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftmm.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\base\ftpfr.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftsynth.c">
- </File>
- <File RelativePath="..\..\..\src\base\fttype1.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftwinfnt.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftlcdfil.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftgxval.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftotval.c">
- </File>
- <File RelativePath="..\..\..\src\base\ftpatent.c">
- </File>
- <File RelativePath="..\..\..\src\pcf\pcf.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\pfr\pfr.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\psaux\psaux.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\pshinter\pshinter.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\psnames\psmodule.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\raster\raster.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\sfnt\sfnt.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\truetype\truetype.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\type1\type1.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\cid\type1cid.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\type42\type42.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- <File RelativePath="..\..\..\src\winfonts\winfnt.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- </File>
- </Filter>
- </Filter>
- <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl">
- <File RelativePath="..\..\..\include\ft2build.h">
- </File>
- <File RelativePath="..\..\..\include\freetype\config\ftconfig.h">
- </File>
- <File RelativePath="..\..\..\include\freetype\config\ftheader.h">
- </File>
- <File RelativePath="..\..\..\include\freetype\config\ftmodule.h">
- </File>
- <File RelativePath="..\..\..\include\freetype\config\ftoption.h">
- </File>
- <File RelativePath="..\..\..\include\freetype\config\ftstdlib.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject> \ No newline at end of file
diff --git a/builds/windows/vc2005/index.html b/builds/windows/vc2005/index.html
deleted file mode 100644
index 4bd9b75b7..000000000
--- a/builds/windows/vc2005/index.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<html>
-<header>
-<title>
- FreeType&nbsp;2 Project Files for VS.NET&nbsp;2005
-</title>
-
-<body>
-<h1>
- FreeType&nbsp;2 Project Files for VS.NET&nbsp;2005
-</h1>
-
-<p>This directory contains project files for Visual C++, named
-<tt>freetype.vcproj</tt>, and Visual Studio, called <tt>freetype.sln</tt>. It
-compiles the following libraries from the FreeType 2.8 sources:</p>
-
-<ul>
- <pre>
- freetype28.lib - release build; single threaded
- freetype28_D.lib - debug build; single threaded
- freetype28MT.lib - release build; multi-threaded
- freetype28MT_D.lib - debug build; multi-threaded</pre>
-</ul>
-
-<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
-archives are already stored this way, so no further action is required. If
-you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
-tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
-file smart CR/LF Conversion</em> option. Alternatively, you may consider
-using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
-around, which specifically deal with this particular problem.
-
-<p>Build directories are placed in the top-level <tt>objs</tt>
-directory.</p>
-
-</body>
-</html>
diff --git a/builds/windows/vc2008/freetype.sln b/builds/windows/vc2008/freetype.sln
deleted file mode 100644
index 6c522f943..000000000
--- a/builds/windows/vc2008/freetype.sln
+++ /dev/null
@@ -1,31 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "freetype.vcproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- LIB Debug Multithreaded|Win32 = LIB Debug Multithreaded|Win32
- LIB Debug Singlethreaded|Win32 = LIB Debug Singlethreaded|Win32
- LIB Debug|Win32 = LIB Debug|Win32
- LIB Release Multithreaded|Win32 = LIB Release Multithreaded|Win32
- LIB Release Singlethreaded|Win32 = LIB Release Singlethreaded|Win32
- LIB Release|Win32 = LIB Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Win32.ActiveCfg = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Win32.Build.0 = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Win32.ActiveCfg = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Win32.Build.0 = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Win32.ActiveCfg = Debug|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Win32.Build.0 = Debug|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Win32.ActiveCfg = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Win32.Build.0 = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Win32.ActiveCfg = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Win32.Build.0 = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Win32.ActiveCfg = Release|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/builds/windows/vc2008/freetype.vcproj b/builds/windows/vc2008/freetype.vcproj
deleted file mode 100644
index a8bc67295..000000000
--- a/builds/windows/vc2008/freetype.vcproj
+++ /dev/null
@@ -1,2180 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9,00"
- Name="freetype"
- ProjectGUID="{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\..\..\..\objs\release"
- IntermediateDirectory=".\..\..\..\objs\release"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype28.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Win32"
- OutputDirectory=".\..\..\..\objs\release_mt"
- IntermediateDirectory=".\..\..\..\objs\release_mt"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Win32"
- OutputDirectory=".\..\..\..\objs\release_st"
- IntermediateDirectory=".\..\..\..\objs\release_st"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype28ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\..\..\..\objs\debug"
- IntermediateDirectory=".\..\..\..\objs\debug"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype28_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Win32"
- OutputDirectory=".\..\..\..\objs\debug_st"
- IntermediateDirectory=".\..\..\..\objs\debug_st"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype28ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Win32"
- OutputDirectory=".\..\..\..\objs\debug_mt"
- IntermediateDirectory=".\..\..\..\objs\debug_mt"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
- >
- <File
- RelativePath="..\..\..\src\autofit\autofit.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\bdf\bdf.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\cff\cff.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftbase.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftbitmap.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\cache\ftcache.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\ftdebug.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftfstype.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftgasp.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftglyph.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\gzip\ftgzip.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftinit.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\lzw\ftlzw.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftstroke.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftsystem.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\smooth\smooth.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <Filter
- Name="FT_MODULES"
- >
- <File
- RelativePath="..\..\..\src\base\ftbbox.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftfntfmt.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftmm.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftpfr.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftsynth.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\fttype1.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftwinfnt.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftlcdfil.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftgxval.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftotval.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftpatent.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\pcf\pcf.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\pfr\pfr.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\psaux\psaux.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\pshinter\pshinter.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\psnames\psmodule.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\raster\raster.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\sfnt\sfnt.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\truetype\truetype.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\type1\type1.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\cid\type1cid.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\type42\type42.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\winfonts\winfnt.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- </Filter>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl"
- >
- <File
- RelativePath="..\..\..\include\ft2build.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftconfig.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftheader.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftmodule.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftoption.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftstdlib.h"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/builds/windows/vc2008/index.html b/builds/windows/vc2008/index.html
deleted file mode 100644
index fa5909d88..000000000
--- a/builds/windows/vc2008/index.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<html>
-<header>
-<title>
- FreeType&nbsp;2 Project Files for VS.NET&nbsp;2008
-</title>
-
-<body>
-<h1>
- FreeType&nbsp;2 Project Files for VS.NET&nbsp;2008
-</h1>
-
-<p>This directory contains project files for Visual C++, named
-<tt>freetype.vcproj</tt>, and Visual Studio, called <tt>freetype.sln</tt>. It
-compiles the following libraries from the FreeType 2.8 sources:</p>
-
-<ul>
- <pre>
- freetype28.lib - release build; single threaded
- freetype28_D.lib - debug build; single threaded
- freetype28MT.lib - release build; multi-threaded
- freetype28MT_D.lib - debug build; multi-threaded</pre>
-</ul>
-
-<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
-archives are already stored this way, so no further action is required. If
-you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
-tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
-file smart CR/LF Conversion</em> option. Alternatively, you may consider
-using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
-around, which specifically deal with this particular problem.
-
-<p>Build directories are placed in the top-level <tt>objs</tt>
-directory.</p>
-
-</body>
-</html>
diff --git a/builds/windows/vc2010/freetype.sln b/builds/windows/vc2010/freetype.sln
deleted file mode 100644
index b209eddd2..000000000
--- a/builds/windows/vc2010/freetype.sln
+++ /dev/null
@@ -1,49 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio Express 2012 for Windows Desktop
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "freetype.vcxproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Debug|x64 = Debug|x64
- Debug Multithreaded|Win32 = Debug Multithreaded|Win32
- Debug Multithreaded|x64 = Debug Multithreaded|x64
- Debug Singlethreaded|Win32 = Debug Singlethreaded|Win32
- Debug Singlethreaded|x64 = Debug Singlethreaded|x64
- Release|Win32 = Release|Win32
- Release|x64 = Release|x64
- Release Multithreaded|Win32 = Release Multithreaded|Win32
- Release Multithreaded|x64 = Release Multithreaded|x64
- Release Singlethreaded|Win32 = Release Singlethreaded|Win32
- Release Singlethreaded|x64 = Release Singlethreaded|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.ActiveCfg = Debug|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.Build.0 = Debug|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|x64.ActiveCfg = Debug|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|x64.Build.0 = Debug|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|Win32.ActiveCfg = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|Win32.Build.0 = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|x64.ActiveCfg = Debug Multithreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|x64.Build.0 = Debug Multithreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|Win32.ActiveCfg = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|Win32.Build.0 = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|x64.ActiveCfg = Debug Singlethreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|x64.Build.0 = Debug Singlethreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.ActiveCfg = Release|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.Build.0 = Release|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|x64.ActiveCfg = Release|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|x64.Build.0 = Release|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|Win32.ActiveCfg = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|Win32.Build.0 = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|x64.ActiveCfg = Release Multithreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|x64.Build.0 = Release Multithreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|Win32.ActiveCfg = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|Win32.Build.0 = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|x64.ActiveCfg = Release Singlethreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|x64.Build.0 = Release Singlethreaded|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/builds/windows/vc2010/freetype.user.props b/builds/windows/vc2010/freetype.user.props
deleted file mode 100644
index 234dd5d79..000000000
--- a/builds/windows/vc2010/freetype.user.props
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- * freetype.user.props
- *
- *
- * You can specify custom options here without altering the project file.
- *
- * Multiple entries within each property are separated by semicolons (;).
- *
- * NOTE: If you want to link against zlib, libpng, bzip2 or harfbuzz, you
- * should alter these values appropriately.
- -->
-
-<Project ToolsVersion="4.0"
- xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup Label="Globals">
-
- <!--
- * `;'-separated list of symbols to #define
- -->
- <UserDefines></UserDefines>
-
- <!--
- * path where your custom `ftoption.h' lives;
- * this is searched BEFORE any other path
- -->
- <!-- <UserOptionDirectory>..\..\..\devel</UserOptionDirectory> -->
- <UserOptionDirectory></UserOptionDirectory>
-
- <!--
- * `;'-separated list of paths to additional include directories,
- * e.g., where to find zlib.h, png.h, etc.;
- * this is searched AFTER any other path
- -->
- <!-- <UserIncludeDirectories>..\..\..\..\zlib-1.2.8;..\..\..\..\libpng-1.6.12</UserIncludeDirectories> -->
- <UserIncludeDirectories></UserIncludeDirectories>
-
- <!--
- * `;'-separated list of paths to additional library directories,
- * e.g., where to find zlib.lib, libpng.lib, etc.
- -->
- <!-- <UserLibraryDirectories>..\..\..\..\zlib-1.2.8;..\..\..\..\libpng-1.6.12</UserLibraryDirectories> -->
- <UserLibraryDirectories></UserLibraryDirectories>
-
- <!--
- * `;'-separated list of additional linker dependencies,
- * e.g., zlib.lib, libpng.lib, etc.
- -->
- <!-- <UserDependencies>zlib.lib;libpng16.lib</UserDependencies> -->
- <UserDependencies></UserDependencies>
-
- </PropertyGroup>
-
- <!--
- * Example configuration for x64 debug build only
- -->
-
- <!--
- <PropertyGroup Label="DebugProperties"
- Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <UserDefines>ENABLE_DEBUG_HELPER;ENABLE_DEBUG_LOGGING</UserDefines>
- <UserOptionDirectory>config\debug</UserOptionDirectory>
- <UserIncludeDirectories>C:\mydebughelp\include</UserIncludeDirectories>
- <UserLibraryDirectories>C:\mydebughelp\lib</UserLibraryDirectories>
- <UserDependencies>dhelper64.lib</UserDependencies>
- </PropertyGroup>
- -->
-</Project>
diff --git a/builds/windows/vc2010/freetype.vcxproj b/builds/windows/vc2010/freetype.vcxproj
deleted file mode 100644
index e4f11fc11..000000000
--- a/builds/windows/vc2010/freetype.vcxproj
+++ /dev/null
@@ -1,1718 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug Multithreaded|Win32">
- <Configuration>Debug Multithreaded</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug Multithreaded|x64">
- <Configuration>Debug Multithreaded</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug Singlethreaded|Win32">
- <Configuration>Debug Singlethreaded</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug Singlethreaded|x64">
- <Configuration>Debug Singlethreaded</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release Multithreaded|Win32">
- <Configuration>Release Multithreaded</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release Multithreaded|x64">
- <Configuration>Release Multithreaded</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release Singlethreaded|Win32">
- <Configuration>Release Singlethreaded</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release Singlethreaded|x64">
- <Configuration>Release Singlethreaded</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}</ProjectGuid>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'" />
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'" />
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'" />
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'" />
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'" />
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">freetype28d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">freetype28d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">freetype28MTd</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">freetype28MTd</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">freetype28STd</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">freetype28STd</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">freetype28</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">freetype28</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">freetype28MT</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">freetype28MT</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">freetype28ST</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">freetype28ST</TargetName>
- </PropertyGroup>
- <Import Project="$(SolutionDir)\freetype.user.props" Condition="exists('$(SolutionDir)\freetype.user.props')" Label="UserProperties" />
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
- <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <TargetMachine>MachineX86</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
- <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <TargetMachine>MachineX64</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessToFile>false</PreprocessToFile>
- <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
- <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <TargetMachine>MachineX86</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessToFile>false</PreprocessToFile>
- <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
- <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <TargetMachine>MachineX64</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
- <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <TargetMachine>MachineX86</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
- <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <TargetMachine>MachineX64</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <Optimization>Full</Optimization>
- <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
- <FloatingPointExceptions>false</FloatingPointExceptions>
- <CreateHotpatchableImage>false</CreateHotpatchableImage>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>
- </ProgramDataBaseFileName>
- <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
- <DebugInformationFormat>
- </DebugInformationFormat>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
- <OmitFramePointers>true</OmitFramePointers>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
- <TargetMachine>MachineX86</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <Optimization>Full</Optimization>
- <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
- <FloatingPointExceptions>false</FloatingPointExceptions>
- <CreateHotpatchableImage>false</CreateHotpatchableImage>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>
- </ProgramDataBaseFileName>
- <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
- <DebugInformationFormat>
- </DebugInformationFormat>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
- <OmitFramePointers>true</OmitFramePointers>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
- <TargetMachine>MachineX64</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">
- <ClCompile>
- <Optimization>Full</Optimization>
- <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
- <FloatingPointExceptions>false</FloatingPointExceptions>
- <CreateHotpatchableImage>false</CreateHotpatchableImage>
- <RuntimeTypeInfo>false</RuntimeTypeInfo>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>
- </ProgramDataBaseFileName>
- <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
- <DebugInformationFormat>
- </DebugInformationFormat>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
- <OmitFramePointers>true</OmitFramePointers>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
- <TargetMachine>MachineX86</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">
- <ClCompile>
- <Optimization>Full</Optimization>
- <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
- <FloatingPointExceptions>false</FloatingPointExceptions>
- <CreateHotpatchableImage>false</CreateHotpatchableImage>
- <RuntimeTypeInfo>false</RuntimeTypeInfo>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>
- </ProgramDataBaseFileName>
- <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
- <DebugInformationFormat>
- </DebugInformationFormat>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
- <OmitFramePointers>true</OmitFramePointers>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
- <TargetMachine>MachineX64</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">
- <ClCompile>
- <Optimization>Full</Optimization>
- <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
- <FloatingPointExceptions>false</FloatingPointExceptions>
- <CreateHotpatchableImage>false</CreateHotpatchableImage>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>
- </ProgramDataBaseFileName>
- <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
- <DebugInformationFormat>
- </DebugInformationFormat>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
- <OmitFramePointers>true</OmitFramePointers>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib />
- <Lib>
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
- <TargetMachine>MachineX86</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">
- <ClCompile>
- <Optimization>Full</Optimization>
- <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
- <FloatingPointExceptions>false</FloatingPointExceptions>
- <CreateHotpatchableImage>false</CreateHotpatchableImage>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>
- </ProgramDataBaseFileName>
- <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
- <DebugInformationFormat>
- </DebugInformationFormat>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
- <OmitFramePointers>true</OmitFramePointers>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib />
- <Lib>
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
- <TargetMachine>MachineX64</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\src\autofit\autofit.c" />
- <ClCompile Include="..\..\..\src\bdf\bdf.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\cff\cff.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftbase.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftbitmap.c" />
- <ClCompile Include="..\..\..\src\cache\ftcache.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\ftdebug.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">false</DisableLanguageExtensions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">false</DisableLanguageExtensions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">false</DisableLanguageExtensions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">false</DisableLanguageExtensions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">false</DisableLanguageExtensions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">false</DisableLanguageExtensions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">false</DisableLanguageExtensions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">false</DisableLanguageExtensions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DisableLanguageExtensions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftfstype.c" />
- <ClCompile Include="..\..\..\src\base\ftgasp.c" />
- <ClCompile Include="..\..\..\src\base\ftglyph.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\gzip\ftgzip.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftinit.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\lzw\ftlzw.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftstroke.c" />
- <ClCompile Include="..\..\..\src\base\ftsystem.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\smooth\smooth.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftbbox.c" />
- <ClCompile Include="..\..\..\src\base\ftfntfmt.c" />
- <ClCompile Include="..\..\..\src\base\ftmm.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftpfr.c" />
- <ClCompile Include="..\..\..\src\base\ftsynth.c" />
- <ClCompile Include="..\..\..\src\base\fttype1.c" />
- <ClCompile Include="..\..\..\src\base\ftwinfnt.c" />
- <ClCompile Include="..\..\..\src\base\ftlcdfil.c" />
- <ClCompile Include="..\..\..\src\base\ftgxval.c" />
- <ClCompile Include="..\..\..\src\base\ftotval.c" />
- <ClCompile Include="..\..\..\src\base\ftpatent.c" />
- <ClCompile Include="..\..\..\src\pcf\pcf.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\pfr\pfr.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\psaux\psaux.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\pshinter\pshinter.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\psnames\psmodule.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\raster\raster.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\sfnt\sfnt.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\truetype\truetype.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\type1\type1.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\cid\type1cid.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\type42\type42.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\winfonts\winfnt.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\include\ft2build.h" />
- <ClInclude Include="..\..\..\include\freetype\config\ftconfig.h" />
- <ClInclude Include="..\..\..\include\freetype\config\ftheader.h" />
- <ClInclude Include="..\..\..\include\freetype\config\ftmodule.h" />
- <ClInclude Include="..\..\..\include\freetype\config\ftoption.h" />
- <ClInclude Include="..\..\..\include\freetype\config\ftstdlib.h" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/builds/windows/vc2010/freetype.vcxproj.filters b/builds/windows/vc2010/freetype.vcxproj.filters
deleted file mode 100644
index 0e947f4ba..000000000
--- a/builds/windows/vc2010/freetype.vcxproj.filters
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <UniqueIdentifier>{b4c15893-ec11-491d-9507-0ac184f9cc78}</UniqueIdentifier>
- <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
- </Filter>
- <Filter Include="Source Files\FT_MODULES">
- <UniqueIdentifier>{4d3e4eff-3fbc-4b20-b413-2743b23b7109}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files">
- <UniqueIdentifier>{e6cf6a0f-0404-4024-8bf8-ff5b29f35657}</UniqueIdentifier>
- <Extensions>h;hpp;hxx;hm;inl</Extensions>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\src\autofit\autofit.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\bdf\bdf.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\cff\cff.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftbase.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftbitmap.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\cache\ftcache.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\ftdebug.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftfstype.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftgasp.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftglyph.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\gzip\ftgzip.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftinit.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\lzw\ftlzw.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftstroke.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftsystem.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\smooth\smooth.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftbbox.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftfntfmt.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftmm.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftpfr.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftsynth.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\fttype1.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftwinfnt.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftlcdfil.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftgxval.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftotval.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftpatent.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\pcf\pcf.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\pfr\pfr.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\psaux\psaux.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\pshinter\pshinter.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\psnames\psmodule.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\raster\raster.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\sfnt\sfnt.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\truetype\truetype.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\type1\type1.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\cid\type1cid.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\type42\type42.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\winfonts\winfnt.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\include\ft2build.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\..\..\include\freetype\config\ftconfig.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\..\..\include\freetype\config\ftheader.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\..\..\include\freetype\config\ftmodule.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\..\..\include\freetype\config\ftoption.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\..\..\include\freetype\config\ftstdlib.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- </ItemGroup>
-</Project>
diff --git a/builds/windows/vc2010/index.html b/builds/windows/vc2010/index.html
deleted file mode 100644
index c2b580045..000000000
--- a/builds/windows/vc2010/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<html>
-<header>
-<title>
- FreeType&nbsp;2 Project Files for VS.NET&nbsp;2010 or newer
-</title>
-
-<body>
-<h1>
- FreeType&nbsp;2 Project Files for VS.NET&nbsp;2010 or newer
-</h1>
-
-<p>This directory contains a project file for Visual C++ (VS.NET&nbsp;2010
-or newer), named <tt>freetype.vcxproj</tt>, and Visual Studio, called
-<tt>freetype.sln</tt>. It compiles the following libraries from the
-FreeType 2.8 sources:</p>
-
-<ul>
- <pre>
- freetype28.lib - release build
- freetype28d.lib - debug build
- freetype28ST.lib - release build; single threaded
- freetype28STd.lib - debug build; single threaded
- freetype28MT.lib - release build; multi-threaded
- freetype28MTd.lib - debug build; multi-threaded</pre>
-</ul>
-
-<p>Both Win32 and x64 builds are supported.</p>
-
-<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
-archives are already stored this way, so no further action is required. If
-you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
-tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
-file smart CR/LF Conversion</em> option. Alternatively, you may consider
-using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
-around, which specifically deal with this particular problem.
-
-<p>Build directories are placed in the top-level <tt>objs\vc2010</tt>
-directory.</p>
-
-<p>Customization of the FreeType library is done by editing the
-<tt>ftoption.h</tt> header file in the top-level <tt>devel</tt> path.
-Alternatively, you may copy the file to another directory and change the
-include directory in <tt>freetype.users.props</tt>.</p>
-
-<p>To configure library dependencies like <em>zlib</em> and <em>libpng</em>,
-edit the <tt>freetype.users.props</tt> file in this directory. It also
-simplifies automated (command-line) builds using <a
-href="http://msdn.microsoft.com/library/dd393574%28v=vs.100%29.aspx">msbuild</a>.</p>
-
-</body>
-</html>
diff --git a/builds/windows/visualc/freetype.dsp b/builds/windows/visualc/freetype.dsp
deleted file mode 100644
index fc14b48ce..000000000
--- a/builds/windows/visualc/freetype.dsp
+++ /dev/null
@@ -1,400 +0,0 @@
-# Microsoft Developer Studio Project File - Name="freetype" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=freetype - Win32 Debug Singlethreaded
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "freetype.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "freetype.mak" CFG="freetype - Win32 Debug Singlethreaded"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "freetype - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "freetype - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "freetype - Win32 Debug Multithreaded" (based on "Win32 (x86) Static Library")
-!MESSAGE "freetype - Win32 Release Multithreaded" (based on "Win32 (x86) Static Library")
-!MESSAGE "freetype - Win32 Release Singlethreaded" (based on "Win32 (x86) Static Library")
-!MESSAGE "freetype - Win32 Debug Singlethreaded" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "freetype - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\objs\release"
-# PROP Intermediate_Dir "..\..\..\objs\release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /MD /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c
-# SUBTRACT CPP /nologo /Z<none> /YX
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype28.lib"
-
-!ELSEIF "$(CFG)" == "freetype - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\objs\debug"
-# PROP Intermediate_Dir "..\..\..\objs\debug"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /MDd /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c
-# SUBTRACT CPP /nologo /X /YX
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype28_D.lib"
-
-!ELSEIF "$(CFG)" == "freetype - Win32 Debug Multithreaded"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "freetype___Win32_Debug_Multithreaded"
-# PROP BASE Intermediate_Dir "freetype___Win32_Debug_Multithreaded"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\objs\debug_mt"
-# PROP Intermediate_Dir "..\..\..\objs\debug_mt"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /Za /W3 /Gm /GX /ZI /Od /I "..\include\\" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_FLAT_COMPILE" /YX /FD /GZ /c
-# SUBTRACT BASE CPP /X
-# ADD CPP /MTd /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c
-# SUBTRACT CPP /nologo /X /YX
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype28_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype28MT_D.lib"
-
-!ELSEIF "$(CFG)" == "freetype - Win32 Release Multithreaded"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "freetype___Win32_Release_Multithreaded"
-# PROP BASE Intermediate_Dir "freetype___Win32_Release_Multithreaded"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\objs\release_mt"
-# PROP Intermediate_Dir "..\..\..\objs\release_mt"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /Za /W3 /GX /O2 /I "..\include\\" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_FLAT_COMPILE" /YX /FD /c
-# ADD CPP /MT /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c
-# SUBTRACT CPP /nologo /Z<none> /YX
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype28.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype28MT.lib"
-
-!ELSEIF "$(CFG)" == "freetype - Win32 Release Singlethreaded"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "freetype___Win32_Release_Singlethreaded"
-# PROP BASE Intermediate_Dir "freetype___Win32_Release_Singlethreaded"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\objs\release_st"
-# PROP Intermediate_Dir "..\..\..\objs\release_st"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /Za /W4 /GX /Zi /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FD /c
-# SUBTRACT BASE CPP /YX
-# ADD CPP /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c
-# SUBTRACT CPP /nologo /Z<none> /YX
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype28.lib"
-# ADD LIB32 /out:"..\..\..\objs\freetype28ST.lib"
-# SUBTRACT LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "freetype - Win32 Debug Singlethreaded"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "freetype___Win32_Debug_Singlethreaded"
-# PROP BASE Intermediate_Dir "freetype___Win32_Debug_Singlethreaded"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\objs\debug_st"
-# PROP Intermediate_Dir "..\..\..\objs\debug_st"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /Za /W4 /Gm /GX /Zi /Od /I "..\..\..\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /FD /GZ /c
-# SUBTRACT BASE CPP /X /YX
-# ADD CPP /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c
-# SUBTRACT CPP /nologo /X /YX
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype28_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype28ST_D.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "freetype - Win32 Release"
-# Name "freetype - Win32 Debug"
-# Name "freetype - Win32 Debug Multithreaded"
-# Name "freetype - Win32 Release Multithreaded"
-# Name "freetype - Win32 Release Singlethreaded"
-# Name "freetype - Win32 Debug Singlethreaded"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\src\autofit\autofit.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\bdf\bdf.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\cff\cff.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftbase.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftbbox.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftbdf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftbitmap.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftfntfmt.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftfstype.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftgasp.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\cache\ftcache.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\ftdebug.c
-# ADD CPP /Ze
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftglyph.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftgxval.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\gzip\ftgzip.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftinit.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\lzw\ftlzw.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftmm.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftotval.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftpfr.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftstroke.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftsynth.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftsystem.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\fttype1.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftwinfnt.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\pcf\pcf.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\pfr\pfr.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\psaux\psaux.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\pshinter\pshinter.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\psnames\psmodule.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\raster\raster.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\sfnt\sfnt.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\smooth\smooth.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\truetype\truetype.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\type1\type1.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\cid\type1cid.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\type42\type42.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\winfonts\winfnt.c
-# SUBTRACT CPP /Fr
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\include\ft2build.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\include\freetype\config\ftconfig.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\include\freetype\config\ftheader.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\include\freetype\config\ftmodule.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\include\freetype\config\ftoption.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\include\freetype\config\ftstdlib.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/builds/windows/visualc/freetype.dsw b/builds/windows/visualc/freetype.dsw
deleted file mode 100644
index b149e769b..000000000
--- a/builds/windows/visualc/freetype.dsw
+++ /dev/null
@@ -1,29 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "freetype"=.\freetype.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/builds/windows/visualc/freetype.sln b/builds/windows/visualc/freetype.sln
deleted file mode 100644
index 1f64be282..000000000
--- a/builds/windows/visualc/freetype.sln
+++ /dev/null
@@ -1,31 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "freetype.vcproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug Multithreaded|Win32 = Debug Multithreaded|Win32
- Debug Singlethreaded|Win32 = Debug Singlethreaded|Win32
- Debug|Win32 = Debug|Win32
- Release Multithreaded|Win32 = Release Multithreaded|Win32
- Release Singlethreaded|Win32 = Release Singlethreaded|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|Win32.ActiveCfg = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|Win32.Build.0 = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|Win32.ActiveCfg = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|Win32.Build.0 = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.ActiveCfg = Debug|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.Build.0 = Debug|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|Win32.ActiveCfg = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|Win32.Build.0 = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|Win32.ActiveCfg = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|Win32.Build.0 = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.ActiveCfg = Release|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/builds/windows/visualc/freetype.vcproj b/builds/windows/visualc/freetype.vcproj
deleted file mode 100644
index 968f2ee75..000000000
--- a/builds/windows/visualc/freetype.vcproj
+++ /dev/null
@@ -1,2179 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="freetype"
- ProjectGUID="{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\..\..\..\objs\release"
- IntermediateDirectory=".\..\..\..\objs\release"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Win32"
- OutputDirectory=".\..\..\..\objs\release_mt"
- IntermediateDirectory=".\..\..\..\objs\release_mt"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Win32"
- OutputDirectory=".\..\..\..\objs\release_st"
- IntermediateDirectory=".\..\..\..\objs\release_st"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\..\..\..\objs\debug"
- IntermediateDirectory=".\..\..\..\objs\debug"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Win32"
- OutputDirectory=".\..\..\..\objs\debug_st"
- IntermediateDirectory=".\..\..\..\objs\debug_st"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Win32"
- OutputDirectory=".\..\..\..\objs\debug_mt"
- IntermediateDirectory=".\..\..\..\objs\debug_mt"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
- >
- <File
- RelativePath="..\..\..\src\autofit\autofit.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\bdf\bdf.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\cff\cff.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftbase.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftbitmap.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftfstype.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftgasp.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\cache\ftcache.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\ftdebug.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftglyph.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\gzip\ftgzip.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftinit.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\lzw\ftlzw.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftstroke.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftsystem.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\smooth\smooth.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <Filter
- Name="FT_MODULES"
- >
- <File
- RelativePath="..\..\..\src\base\ftbbox.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftfntfmt.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftmm.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftpfr.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftsynth.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\fttype1.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftwinfnt.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftlcdfil.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftgxval.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftotval.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftpatent.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\pcf\pcf.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\pfr\pfr.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\psaux\psaux.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\pshinter\pshinter.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\psnames\psmodule.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\raster\raster.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\sfnt\sfnt.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\truetype\truetype.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\type1\type1.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\cid\type1cid.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\type42\type42.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\winfonts\winfnt.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- </Filter>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl"
- >
- <File
- RelativePath="..\..\..\include\ft2build.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftconfig.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftheader.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftmodule.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftoption.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftstdlib.h"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/builds/windows/visualc/index.html b/builds/windows/visualc/index.html
deleted file mode 100644
index e2f868c1d..000000000
--- a/builds/windows/visualc/index.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<html>
-<header>
-<title>
- FreeType&nbsp;2 Project Files for Visual&nbsp;C++ and VS.NET&nbsp;2005
-</title>
-
-<body>
-<h1>
- FreeType&nbsp;2 Project Files for Visual&nbsp;C++ and VS.NET&nbsp;2005
-</h1>
-
-<p>This directory contains project files for Visual C++, named
-<tt>freetype.dsp</tt>, and Visual Studio, called <tt>freetype.sln</tt>. It
-compiles the following libraries from the FreeType 2.8 sources:</p>
-
-<ul>
- <pre>
- freetype28.lib - release build; single threaded
- freetype28_D.lib - debug build; single threaded
- freetype28MT.lib - release build; multi-threaded
- freetype28MT_D.lib - debug build; multi-threaded</pre>
-</ul>
-
-<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
-archives are already stored this way, so no further action is required. If
-you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
-tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
-file smart CR/LF Conversion</em> option. Alternatively, you may consider
-using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
-around, which specifically deal with this particular problem.
-
-<p>Build directories are placed in the top-level <tt>objs</tt>
-directory.</p>
-
-</body>
-</html>
diff --git a/builds/windows/visualce/freetype.dsp b/builds/windows/visualce/freetype.dsp
deleted file mode 100644
index fc14b48ce..000000000
--- a/builds/windows/visualce/freetype.dsp
+++ /dev/null
@@ -1,400 +0,0 @@
-# Microsoft Developer Studio Project File - Name="freetype" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=freetype - Win32 Debug Singlethreaded
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "freetype.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "freetype.mak" CFG="freetype - Win32 Debug Singlethreaded"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "freetype - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "freetype - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "freetype - Win32 Debug Multithreaded" (based on "Win32 (x86) Static Library")
-!MESSAGE "freetype - Win32 Release Multithreaded" (based on "Win32 (x86) Static Library")
-!MESSAGE "freetype - Win32 Release Singlethreaded" (based on "Win32 (x86) Static Library")
-!MESSAGE "freetype - Win32 Debug Singlethreaded" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "freetype - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\objs\release"
-# PROP Intermediate_Dir "..\..\..\objs\release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /MD /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c
-# SUBTRACT CPP /nologo /Z<none> /YX
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype28.lib"
-
-!ELSEIF "$(CFG)" == "freetype - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\objs\debug"
-# PROP Intermediate_Dir "..\..\..\objs\debug"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /MDd /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c
-# SUBTRACT CPP /nologo /X /YX
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype28_D.lib"
-
-!ELSEIF "$(CFG)" == "freetype - Win32 Debug Multithreaded"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "freetype___Win32_Debug_Multithreaded"
-# PROP BASE Intermediate_Dir "freetype___Win32_Debug_Multithreaded"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\objs\debug_mt"
-# PROP Intermediate_Dir "..\..\..\objs\debug_mt"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /Za /W3 /Gm /GX /ZI /Od /I "..\include\\" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_FLAT_COMPILE" /YX /FD /GZ /c
-# SUBTRACT BASE CPP /X
-# ADD CPP /MTd /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c
-# SUBTRACT CPP /nologo /X /YX
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype28_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype28MT_D.lib"
-
-!ELSEIF "$(CFG)" == "freetype - Win32 Release Multithreaded"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "freetype___Win32_Release_Multithreaded"
-# PROP BASE Intermediate_Dir "freetype___Win32_Release_Multithreaded"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\objs\release_mt"
-# PROP Intermediate_Dir "..\..\..\objs\release_mt"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /Za /W3 /GX /O2 /I "..\include\\" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_FLAT_COMPILE" /YX /FD /c
-# ADD CPP /MT /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c
-# SUBTRACT CPP /nologo /Z<none> /YX
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype28.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype28MT.lib"
-
-!ELSEIF "$(CFG)" == "freetype - Win32 Release Singlethreaded"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "freetype___Win32_Release_Singlethreaded"
-# PROP BASE Intermediate_Dir "freetype___Win32_Release_Singlethreaded"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\objs\release_st"
-# PROP Intermediate_Dir "..\..\..\objs\release_st"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /Za /W4 /GX /Zi /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FD /c
-# SUBTRACT BASE CPP /YX
-# ADD CPP /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c
-# SUBTRACT CPP /nologo /Z<none> /YX
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype28.lib"
-# ADD LIB32 /out:"..\..\..\objs\freetype28ST.lib"
-# SUBTRACT LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "freetype - Win32 Debug Singlethreaded"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "freetype___Win32_Debug_Singlethreaded"
-# PROP BASE Intermediate_Dir "freetype___Win32_Debug_Singlethreaded"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\objs\debug_st"
-# PROP Intermediate_Dir "..\..\..\objs\debug_st"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /Za /W4 /Gm /GX /Zi /Od /I "..\..\..\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /FD /GZ /c
-# SUBTRACT BASE CPP /X /YX
-# ADD CPP /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c
-# SUBTRACT CPP /nologo /X /YX
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype28_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype28ST_D.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "freetype - Win32 Release"
-# Name "freetype - Win32 Debug"
-# Name "freetype - Win32 Debug Multithreaded"
-# Name "freetype - Win32 Release Multithreaded"
-# Name "freetype - Win32 Release Singlethreaded"
-# Name "freetype - Win32 Debug Singlethreaded"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\src\autofit\autofit.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\bdf\bdf.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\cff\cff.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftbase.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftbbox.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftbdf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftbitmap.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftfntfmt.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftfstype.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftgasp.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\cache\ftcache.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\ftdebug.c
-# ADD CPP /Ze
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftglyph.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftgxval.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\gzip\ftgzip.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftinit.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\lzw\ftlzw.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftmm.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftotval.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftpfr.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftstroke.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftsynth.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftsystem.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\fttype1.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\base\ftwinfnt.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\pcf\pcf.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\pfr\pfr.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\psaux\psaux.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\pshinter\pshinter.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\psnames\psmodule.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\raster\raster.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\sfnt\sfnt.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\smooth\smooth.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\truetype\truetype.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\type1\type1.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\cid\type1cid.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\type42\type42.c
-# SUBTRACT CPP /Fr
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\src\winfonts\winfnt.c
-# SUBTRACT CPP /Fr
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\include\ft2build.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\include\freetype\config\ftconfig.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\include\freetype\config\ftheader.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\include\freetype\config\ftmodule.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\include\freetype\config\ftoption.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\include\freetype\config\ftstdlib.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/builds/windows/visualce/freetype.dsw b/builds/windows/visualce/freetype.dsw
deleted file mode 100644
index b149e769b..000000000
--- a/builds/windows/visualce/freetype.dsw
+++ /dev/null
@@ -1,29 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "freetype"=.\freetype.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/builds/windows/visualce/freetype.vcproj b/builds/windows/visualce/freetype.vcproj
deleted file mode 100644
index f28b3c140..000000000
--- a/builds/windows/visualce/freetype.vcproj
+++ /dev/null
@@ -1,13885 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="freetype"
- ProjectGUID="{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- <Platform
- Name="Pocket PC 2003 (ARMV4)"
- />
- <Platform
- Name="Smartphone 2003 (ARMV4)"
- />
- <Platform
- Name="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- />
- <Platform
- Name="Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- />
- <Platform
- Name="Windows Mobile 6 Professional SDK (ARMV4I)"
- />
- <Platform
- Name="Windows Mobile 6 Standard SDK (ARMV4I)"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\..\..\..\objs\release"
- IntermediateDirectory=".\..\..\..\objs\release"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Win32"
- OutputDirectory=".\..\..\..\objs\release_mt"
- IntermediateDirectory=".\..\..\..\objs\release_mt"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Win32"
- OutputDirectory=".\..\..\..\objs\release_st"
- IntermediateDirectory=".\..\..\..\objs\release_st"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\..\..\..\objs\debug"
- IntermediateDirectory=".\..\..\..\objs\debug"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Win32"
- OutputDirectory=".\..\..\..\objs\debug_st"
- IntermediateDirectory=".\..\..\..\objs\debug_st"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Win32"
- OutputDirectory=".\..\..\..\objs\debug_mt"
- IntermediateDirectory=".\..\..\..\objs\debug_mt"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Pocket PC 2003 (ARMV4)"
- OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
- StringPooling="false"
- MinimalRebuild="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
- StringPooling="false"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="3"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- RuntimeLibrary="1"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release|Smartphone 2003 (ARMV4)"
- OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
- StringPooling="false"
- MinimalRebuild="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
- StringPooling="false"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug|Smartphone 2003 (ARMV4)"
- OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="3"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- RuntimeLibrary="1"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
- StringPooling="false"
- MinimalRebuild="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
- StringPooling="false"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="3"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- RuntimeLibrary="1"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
- StringPooling="false"
- MinimalRebuild="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
- StringPooling="false"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="3"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- RuntimeLibrary="1"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
- StringPooling="false"
- MinimalRebuild="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
- StringPooling="false"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="3"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- RuntimeLibrary="1"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
- StringPooling="false"
- MinimalRebuild="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release/"
- ObjectFile=".\..\..\..\objs\release/"
- ProgramDataBaseFileName=".\..\..\..\objs\release/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_mt/"
- ObjectFile=".\..\..\..\objs\release_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
- StringPooling="false"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\release_st/"
- ObjectFile=".\..\..\..\objs\release_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
- WarningLevel="4"
- DebugInformationFormat="0"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="3"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug/"
- ObjectFile=".\..\..\..\objs\debug/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
- RuntimeLibrary="1"
- DisableLanguageExtensions="true"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_st/"
- ObjectFile=".\..\..\..\objs\debug_st/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28ST_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- <Configuration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="1"
- />
- <Tool
- Name="VCCLCompilerTool"
- ExecutionBucket="7"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\include"
- PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
- GeneratePreprocessedFile="0"
- RuntimeLibrary="1"
- DisableLanguageExtensions="false"
- PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
- AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
- ObjectFile=".\..\..\..\objs\debug_mt/"
- ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
- WarningLevel="4"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype28MT_D.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCCodeSignTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- <DeploymentTool
- ForceDirty="-1"
- RemoteDirectory=""
- RegisterOutput="0"
- AdditionalFiles=""
- />
- <DebuggerTool
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
- >
- <File
- RelativePath="..\..\..\src\autofit\autofit.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\bdf\bdf.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\cff\cff.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftbase.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftbitmap.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftfstype.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\cache\ftcache.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\ftdebug.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftgasp.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftglyph.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\gzip\ftgzip.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftinit.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\lzw\ftlzw.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftstroke.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftsystem.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\smooth\smooth.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <Filter
- Name="FT_MODULES"
- >
- <File
- RelativePath="..\..\..\src\base\ftbbox.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftfntfmt.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftmm.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\base\ftpfr.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftsynth.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\fttype1.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftwinfnt.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftlcdfil.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftgxval.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftotval.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\base\ftpatent.c"
- >
- </File>
- <File
- RelativePath="..\..\..\src\pcf\pcf.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\pfr\pfr.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\psaux\psaux.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\pshinter\pshinter.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\psnames\psmodule.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\raster\raster.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\sfnt\sfnt.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\truetype\truetype.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\type1\type1.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\cid\type1cid.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\type42\type42.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\src\winfonts\winfnt.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- </Filter>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl"
- >
- <File
- RelativePath="..\..\..\include\ft2build.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftconfig.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftheader.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftmodule.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftoption.h"
- >
- </File>
- <File
- RelativePath="..\..\..\include\freetype\config\ftstdlib.h"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/builds/windows/visualce/index.html b/builds/windows/visualce/index.html
deleted file mode 100644
index 06107ae4f..000000000
--- a/builds/windows/visualce/index.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<html>
-<header>
-<title>
- FreeType&nbsp;2 Project Files for Visual&nbsp;C++ and VS.NET&nbsp;2005
- (Pocket PC)
-</title>
-
-<body>
-<h1>
- FreeType&nbsp;2 Project Files for Visual&nbsp;C++ and VS.NET&nbsp;2005
- (Pocket PC)
-</h1>
-
-<p>This directory contains project files for Visual C++, named
-<tt>freetype.dsp</tt>, and Visual Studio, called <tt>freetype.sln</tt> for
-the following targets:
-
-<ul>
- <li>PPC/SP 2003 (Pocket PC 2003)</li>
- <li>PPC/SP WM5 (Windows Mobile 5)</li>
- <li>PPC/SP WM6 (Windows Mobile 6)</li>
-</ul>
-
-It compiles the following libraries from the FreeType 2.8 sources:</p>
-
-<ul>
- <pre>
- freetype28.lib - release build; single threaded
- freetype28_D.lib - debug build; single threaded
- freetype28MT.lib - release build; multi-threaded
- freetype28MT_D.lib - debug build; multi-threaded</pre>
-</ul>
-
-<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
-archives are already stored this way, so no further action is required. If
-you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
-tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
-file smart CR/LF Conversion</em> option. Alternatively, you may consider
-using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
-around, which specifically deal with this particular problem.
-
-<p>Build directories are placed in the top-level <tt>objs</tt>
-directory.</p>
-
-</body>
-</html>
diff --git a/builds/windows/w32-bcc.mk b/builds/windows/w32-bcc.mk
deleted file mode 100644
index d8d33b10b..000000000
--- a/builds/windows/w32-bcc.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# FreeType 2 Borland C++ on Win32
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-# default definitions of the export list
-#
-EXPORTS_LIST = $(OBJ_DIR)/freetype.def
-EXPORTS_OPTIONS = /DEF:$(EXPORTS_LIST)
-APINAMES_OPTIONS := -dfreetype.dll -wB
-
-include $(TOP_DIR)/builds/windows/win32-def.mk
-include $(TOP_DIR)/builds/compiler/bcc.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/builds/windows/w32-bccd.mk b/builds/windows/w32-bccd.mk
deleted file mode 100644
index ea634e502..000000000
--- a/builds/windows/w32-bccd.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# FreeType 2 Borland C++ on Win32 + debugging
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-DEVEL_DIR := $(TOP_DIR)/devel
-
-include $(TOP_DIR)/builds/windows/win32-def.mk
-
-include $(TOP_DIR)/builds/compiler/bcc-dev.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/builds/windows/w32-dev.mk b/builds/windows/w32-dev.mk
deleted file mode 100644
index c9b96e9b8..000000000
--- a/builds/windows/w32-dev.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# FreeType 2 configuration rules for Win32 + GCC
-#
-# Development version without optimizations.
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# NOTE: This version requires that GNU Make is invoked from the Windows
-# Shell (_not_ Cygwin BASH)!
-#
-
-DEVEL_DIR := $(TOP_DIR)/devel
-
-include $(TOP_DIR)/builds/windows/win32-def.mk
-
-include $(TOP_DIR)/builds/compiler/gcc-dev.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/builds/windows/w32-gcc.mk b/builds/windows/w32-gcc.mk
deleted file mode 100644
index 27a0a8f7d..000000000
--- a/builds/windows/w32-gcc.mk
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# FreeType 2 configuration rules for Win32 + GCC
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-# default definitions of the export list
-#
-EXPORTS_LIST = $(OBJ_DIR)/freetype.def
-EXPORTS_OPTIONS = $(EXPORTS_LIST)
-APINAMES_OPTIONS := -dfreetype.dll -w
-
-# include Win32-specific definitions
-include $(TOP_DIR)/builds/windows/win32-def.mk
-
-# include gcc-specific definitions
-include $(TOP_DIR)/builds/compiler/gcc.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/builds/windows/w32-icc.mk b/builds/windows/w32-icc.mk
deleted file mode 100644
index c4f3dbf6b..000000000
--- a/builds/windows/w32-icc.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# FreeType 2 configuration rules for Win32 + IBM Visual Age C++
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-# default definitions of the export list
-#
-EXPORTS_LIST = $(OBJ_DIR)/freetype.def
-EXPORTS_OPTIONS = /DEF:$(EXPORTS_LIST)
-APINAMES_OPTIONS := -dfreetype.dll -w
-
-include $(TOP_DIR)/builds/windows/win32-def.mk
-include $(TOP_DIR)/builds/compiler/visualage.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/builds/windows/w32-intl.mk b/builds/windows/w32-intl.mk
deleted file mode 100644
index 4442bd314..000000000
--- a/builds/windows/w32-intl.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# FreeType 2 configuration rules for Intel C/C++ on Win32
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-# default definitions of the export list
-#
-EXPORTS_LIST = $(OBJ_DIR)/freetype.def
-EXPORTS_OPTIONS = /DEF:$(EXPORTS_LIST)
-APINAMES_OPTIONS := -dfreetype.dll -w
-
-include $(TOP_DIR)/builds/windows/win32-def.mk
-include $(TOP_DIR)/builds/compiler/intelc.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/builds/windows/w32-lcc.mk b/builds/windows/w32-lcc.mk
deleted file mode 100644
index 0508fbb9b..000000000
--- a/builds/windows/w32-lcc.mk
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# FreeType 2 configuration rules for Win32 + LCC
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-SEP := /
-include $(TOP_DIR)/builds/windows/win32-def.mk
-include $(TOP_DIR)/builds/compiler/win-lcc.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-# EOF
-
diff --git a/builds/windows/w32-mingw32.mk b/builds/windows/w32-mingw32.mk
deleted file mode 100644
index ae408239c..000000000
--- a/builds/windows/w32-mingw32.mk
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# FreeType 2 configuration rules for mingw32
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-# default definitions of the export list
-#
-EXPORTS_LIST = $(OBJ_DIR)/freetype.def
-EXPORTS_OPTIONS = $(EXPORTS_LIST)
-APINAMES_OPTIONS := -dfreetype.dll -w
-
-# include Win32-specific definitions
-include $(TOP_DIR)/builds/windows/win32-def.mk
-
-LIBRARY := lib$(PROJECT)
-
-# include gcc-specific definitions
-include $(TOP_DIR)/builds/compiler/gcc.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/builds/windows/w32-vcc.mk b/builds/windows/w32-vcc.mk
deleted file mode 100644
index 922fc60d1..000000000
--- a/builds/windows/w32-vcc.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# FreeType 2 Visual C++ on Win32
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-# definitions of the export list
-#
-EXPORTS_LIST = $(OBJ_DIR)/freetype.def
-EXPORTS_OPTIONS = /DEF:$(EXPORTS_LIST)
-APINAMES_OPTIONS := -dfreetype.dll -w
-
-include $(TOP_DIR)/builds/windows/win32-def.mk
-include $(TOP_DIR)/builds/compiler/visualc.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/builds/windows/w32-wat.mk b/builds/windows/w32-wat.mk
deleted file mode 100644
index 4d6138e71..000000000
--- a/builds/windows/w32-wat.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# FreeType 2 configuration rules for Watcom C/C++
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-# redefine export symbol definitions
-#
-EXPORTS_LIST = $(OBJ_DIR)/watcom-ftexports.lbc
-EXPORTS_OPTIONS = -\"export @$(EXPORTS_LIST)\"-
-APINAMES_OPTIONS := -wW
-
-include $(TOP_DIR)/builds/windows/win32-def.mk
-include $(TOP_DIR)/builds/compiler/watcom.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/builds/windows/win32-def.mk b/builds/windows/win32-def.mk
deleted file mode 100644
index c9bebdbb0..000000000
--- a/builds/windows/win32-def.mk
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# FreeType 2 Win32 specific definitions
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-DELETE := del
-CAT := type
-SEP := $(strip \ )
-BUILD_DIR := $(TOP_DIR)/builds/windows
-PLATFORM := windows
-
-# The executable file extension (for tools). NOTE: WE INCLUDE THE DOT HERE !!
-#
-E := .exe
-E_BUILD := .exe
-
-
-# The directory where all library files are placed.
-#
-# By default, this is the same as $(OBJ_DIR); however, this can be changed
-# to suit particular needs.
-#
-LIB_DIR := $(OBJ_DIR)
-
-
-# The name of the final library file. Note that the DOS-specific Makefile
-# uses a shorter (8.3) name.
-#
-LIBRARY := $(PROJECT)
-
-
-# The NO_OUTPUT macro is used to ignore the output of commands.
-#
-NO_OUTPUT = 2> nul
-
-
-# EOF
diff --git a/glyphtest/compare-new-to-old.c b/compare-new-to-old.c
index 52942a7f4..52942a7f4 100644
--- a/glyphtest/compare-new-to-old.c
+++ b/compare-new-to-old.c
diff --git a/configure b/configure
deleted file mode 100755
index 68dbd9919..000000000
--- a/configure
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2002-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-#
-#
-# Call the `configure' script located in `builds/unix'.
-#
-
-rm -f config.mk builds/unix/unix-def.mk builds/unix/unix-cc.mk
-
-# respect GNUMAKE environment variable for backward compatibility
-if test "x$GNUMAKE" = x; then
- if test "x$MAKE" = x; then
- if test "x`make -v 2>/dev/null | egrep 'GNU|makepp'`" = x; then
- MAKE=gmake
- else
- MAKE=make
- fi
- fi
-else
- MAKE=$GNUMAKE
-fi
-
-if test "x`$MAKE -v 2>/dev/null | egrep 'GNU|makepp'`" = x; then
- echo "GNU make (>= 3.80) or makepp (>= 1.19) is required to build FreeType2." >&2
- echo "Please try" >&2
- echo >&2
- echo " MAKE=<GNU make command name> $0" >&2
- echo >&2
- echo "or" >&2
- echo >&2
- echo " MAKE=\"makepp --norc-substitution\" $0" >&2
- exit 1
-fi
-
-# Get `dirname' functionality. This is taken and adapted from autoconf's
-# m4sh.m4 (_AS_EXPR_PREPARE, AS_DIRNAME_EXPR, and AS_DIRNAME_SED).
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
- ft_expr=expr
-else
- ft_expr=false
-fi
-
-ft2_dir=`(dirname "$0") 2>/dev/null ||
- $ft_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$0" : 'X\(//\)[^/]' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
- echo X"$0" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-abs_curr_dir=`pwd`
-abs_ft2_dir=`cd "$ft2_dir" && pwd`
-
-# `--srcdir=' option can override abs_ft2_dir
-
-if test $# -gt 0; then
- for x in "$@"; do
- case x"$x" in
- x--srcdir=*)
- abs_ft2_dir=`echo $x | sed 's/^--srcdir=//'` ;;
- esac
- done
-fi
-
-# build a dummy Makefile if we are not building in the source tree;
-# we use inodes to avoid issues with symbolic links
-inode_src=`ls -id $abs_ft2_dir | awk '{print $1}'`
-inode_dst=`ls -id $abs_curr_dir | awk '{print $1}'`
-
-if test $inode_src -ne $inode_dst; then
- if test ! -d reference; then
- mkdir reference
- fi
- if test ! -r $abs_curr_dir/modules.cfg; then
- echo "Copying \`modules.cfg'"
- cp $abs_ft2_dir/modules.cfg $abs_curr_dir
- fi
- echo "Generating \`Makefile'"
- echo "TOP_DIR := $abs_ft2_dir" > Makefile
- echo "OBJ_DIR := $abs_curr_dir" >> Makefile
- echo "OBJ_BUILD := \$(OBJ_DIR)" >> Makefile
- echo "DOC_DIR := \$(OBJ_DIR)/reference" >> Makefile
- echo "FT_LIBTOOL_DIR := \$(OBJ_DIR)" >> Makefile
- echo "ifndef FT2DEMOS" >> Makefile
- echo " include \$(TOP_DIR)/Makefile" >> Makefile
- echo "else" >> Makefile
- echo " TOP_DIR_2 := \$(TOP_DIR)/../ft2demos" >> Makefile
- echo " PROJECT := freetype" >> Makefile
- echo " CONFIG_MK := \$(OBJ_DIR)/config.mk" >> Makefile
- echo " include \$(TOP_DIR_2)/Makefile" >> Makefile
- echo "endif" >> Makefile
-fi
-
-# call make
-
-CFG=
-# work around zsh bug which doesn't like `${1+"$@"}'
-case $# in
-0) ;;
-*) for x in "$@"; do
- case x"$x" in
- x--srcdir=* ) CFG="$CFG '$x'/builds/unix" ;;
- *) CFG="$CFG '$x'" ;;
- esac
- done ;;
-esac
-CFG=$CFG $MAKE setup unix
-
-# eof
diff --git a/devel/ft2build.h b/devel/ft2build.h
deleted file mode 100644
index c805cf989..000000000
--- a/devel/ft2build.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/***************************************************************************/
-/* */
-/* ft2build.h */
-/* */
-/* FreeType 2 build and setup macros (development version). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*
- * This is a development version of <ft2build.h> to build the library in
- * debug mode. Its only difference to the default version is that it
- * includes a local `ftoption.h' header file with different settings for
- * many configuration macros.
- *
- * To use it, simply ensure that the directory containing this file is
- * scanned by the compiler before the default FreeType header directory.
- *
- */
-
-#ifndef FT2BUILD_H_
-#define FT2BUILD_H_
-
-#define FT_CONFIG_OPTIONS_H <ftoption.h>
-
-#include <freetype/config/ftheader.h>
-
-#endif /* FT2BUILD_H_ */
-
-
-/* END */
diff --git a/devel/ftoption.h b/devel/ftoption.h
deleted file mode 100644
index db661e7fc..000000000
--- a/devel/ftoption.h
+++ /dev/null
@@ -1,962 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftoption.h (for development) */
-/* */
-/* User-selectable configuration macros (specification only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTOPTION_H_
-#define FTOPTION_H_
-
-
-#include <ft2build.h>
-
-
-FT_BEGIN_HEADER
-
- /*************************************************************************/
- /* */
- /* USER-SELECTABLE CONFIGURATION MACROS */
- /* */
- /* This file contains the default configuration macro definitions for */
- /* a standard build of the FreeType library. There are three ways to */
- /* use this file to build project-specific versions of the library: */
- /* */
- /* - You can modify this file by hand, but this is not recommended in */
- /* cases where you would like to build several versions of the */
- /* library from a single source directory. */
- /* */
- /* - You can put a copy of this file in your build directory, more */
- /* precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD' */
- /* is the name of a directory that is included _before_ the FreeType */
- /* include path during compilation. */
- /* */
- /* The default FreeType Makefiles and Jamfiles use the build */
- /* directory `builds/<system>' by default, but you can easily change */
- /* that for your own projects. */
- /* */
- /* - Copy the file <ft2build.h> to `$BUILD/ft2build.h' and modify it */
- /* slightly to pre-define the macro FT_CONFIG_OPTIONS_H used to */
- /* locate this file during the build. For example, */
- /* */
- /* #define FT_CONFIG_OPTIONS_H <myftoptions.h> */
- /* #include <freetype/config/ftheader.h> */
- /* */
- /* will use `$BUILD/myftoptions.h' instead of this file for macro */
- /* definitions. */
- /* */
- /* Note also that you can similarly pre-define the macro */
- /* FT_CONFIG_MODULES_H used to locate the file listing of the modules */
- /* that are statically linked to the library at compile time. By */
- /* default, this file is <freetype/config/ftmodule.h>. */
- /* */
- /* We highly recommend using the third method whenever possible. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** G E N E R A L F R E E T Y P E 2 C O N F I G U R A T I O N ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* If you enable this configuration option, FreeType recognizes an */
- /* environment variable called `FREETYPE_PROPERTIES', which can be used */
- /* to control the various font drivers and modules. The controllable */
- /* properties are listed in the section `Controlling FreeType Modules' */
- /* in the reference's table of contents; currently there are properties */
- /* for the auto-hinter (file `ftautoh.h'), CFF (file `ftcffdrv.h'), */
- /* TrueType (file `ftttdrv.h'), and PCF (file `ftpcfdrv.h'). */
- /* */
- /* `FREETYPE_PROPERTIES' has the following syntax form (broken here into */
- /* multiple lines for better readability). */
- /* */
- /* <optional whitespace> */
- /* <module-name1> ':' */
- /* <property-name1> '=' <property-value1> */
- /* <whitespace> */
- /* <module-name2> ':' */
- /* <property-name2> '=' <property-value2> */
- /* ... */
- /* */
- /* Example: */
- /* */
- /* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ */
- /* cff:no-stem-darkening=1 \ */
- /* autofitter:warping=1 */
- /* */
-#define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
-
-
- /*************************************************************************/
- /* */
- /* Uncomment the line below if you want to activate sub-pixel rendering */
- /* (a.k.a. LCD rendering, or ClearType) in this build of the library. */
- /* */
- /* Note that this feature is covered by several Microsoft patents */
- /* and should not be activated in any default build of the library. */
- /* */
- /* This macro has no impact on the FreeType API, only on its */
- /* _implementation_. For example, using FT_RENDER_MODE_LCD when calling */
- /* FT_Render_Glyph still generates a bitmap that is 3 times wider than */
- /* the original size in case this macro isn't defined; however, each */
- /* triplet of subpixels has R=G=B. */
- /* */
- /* This is done to allow FreeType clients to run unmodified, forcing */
- /* them to display normal gray-level anti-aliased glyphs. */
- /* */
-#define FT_CONFIG_OPTION_SUBPIXEL_RENDERING
-
-
- /*************************************************************************/
- /* */
- /* Many compilers provide a non-ANSI 64-bit data type that can be used */
- /* by FreeType to speed up some computations. However, this will create */
- /* some problems when compiling the library in strict ANSI mode. */
- /* */
- /* For this reason, the use of 64-bit integers is normally disabled when */
- /* the __STDC__ macro is defined. You can however disable this by */
- /* defining the macro FT_CONFIG_OPTION_FORCE_INT64 here. */
- /* */
- /* For most compilers, this will only create compilation warnings when */
- /* building the library. */
- /* */
- /* ObNote: The compiler-specific 64-bit integers are detected in the */
- /* file `ftconfig.h' either statically or through the */
- /* `configure' script on supported platforms. */
- /* */
-#undef FT_CONFIG_OPTION_FORCE_INT64
-
-
- /*************************************************************************/
- /* */
- /* If this macro is defined, do not try to use an assembler version of */
- /* performance-critical functions (e.g. FT_MulFix). You should only do */
- /* that to verify that the assembler function works properly, or to */
- /* execute benchmark tests of the various implementations. */
-/* #define FT_CONFIG_OPTION_NO_ASSEMBLER */
-
-
- /*************************************************************************/
- /* */
- /* If this macro is defined, try to use an inlined assembler version of */
- /* the `FT_MulFix' function, which is a `hotspot' when loading and */
- /* hinting glyphs, and which should be executed as fast as possible. */
- /* */
- /* Note that if your compiler or CPU is not supported, this will default */
- /* to the standard and portable implementation found in `ftcalc.c'. */
- /* */
-#define FT_CONFIG_OPTION_INLINE_MULFIX
-
-
- /*************************************************************************/
- /* */
- /* LZW-compressed file support. */
- /* */
- /* FreeType now handles font files that have been compressed with the */
- /* `compress' program. This is mostly used to parse many of the PCF */
- /* files that come with various X11 distributions. The implementation */
- /* uses NetBSD's `zopen' to partially uncompress the file on the fly */
- /* (see src/lzw/ftgzip.c). */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
-#define FT_CONFIG_OPTION_USE_LZW
-
-
- /*************************************************************************/
- /* */
- /* Gzip-compressed file support. */
- /* */
- /* FreeType now handles font files that have been compressed with the */
- /* `gzip' program. This is mostly used to parse many of the PCF files */
- /* that come with XFree86. The implementation uses `zlib' to */
- /* partially uncompress the file on the fly (see src/gzip/ftgzip.c). */
- /* */
- /* Define this macro if you want to enable this `feature'. See also */
- /* the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below. */
- /* */
-#define FT_CONFIG_OPTION_USE_ZLIB
-
-
- /*************************************************************************/
- /* */
- /* ZLib library selection */
- /* */
- /* This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined. */
- /* It allows FreeType's `ftgzip' component to link to the system's */
- /* installation of the ZLib library. This is useful on systems like */
- /* Unix or VMS where it generally is already available. */
- /* */
- /* If you let it undefined, the component will use its own copy */
- /* of the zlib sources instead. These have been modified to be */
- /* included directly within the component and *not* export external */
- /* function names. This allows you to link any program with FreeType */
- /* _and_ ZLib without linking conflicts. */
- /* */
- /* Do not #undef this macro here since the build system might define */
- /* it for certain configurations only. */
- /* */
-/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
-
-
- /*************************************************************************/
- /* */
- /* Bzip2-compressed file support. */
- /* */
- /* FreeType now handles font files that have been compressed with the */
- /* `bzip2' program. This is mostly used to parse many of the PCF */
- /* files that come with XFree86. The implementation uses `libbz2' to */
- /* partially uncompress the file on the fly (see src/bzip2/ftbzip2.c). */
- /* Contrary to gzip, bzip2 currently is not included and need to use */
- /* the system available bzip2 implementation. */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
-#define FT_CONFIG_OPTION_USE_BZIP2
-
-
- /*************************************************************************/
- /* */
- /* Define to disable the use of file stream functions and types, FILE, */
- /* fopen() etc. Enables the use of smaller system libraries on embedded */
- /* systems that have multiple system libraries, some with or without */
- /* file stream support, in the cases where file stream support is not */
- /* necessary such as memory loading of font files. */
- /* */
-/* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */
-
-
- /*************************************************************************/
- /* */
- /* PNG bitmap support. */
- /* */
- /* FreeType now handles loading color bitmap glyphs in the PNG format. */
- /* This requires help from the external libpng library. Uncompressed */
- /* color bitmaps do not need any external libraries and will be */
- /* supported regardless of this configuration. */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
-#define FT_CONFIG_OPTION_USE_PNG
-
-
- /*************************************************************************/
- /* */
- /* HarfBuzz support. */
- /* */
- /* FreeType uses the HarfBuzz library to improve auto-hinting of */
- /* OpenType fonts. If available, many glyphs not directly addressable */
- /* by a font's character map will be hinted also. */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
-#define FT_CONFIG_OPTION_USE_HARFBUZZ
-
-
- /*************************************************************************/
- /* */
- /* DLL export compilation */
- /* */
- /* When compiling FreeType as a DLL, some systems/compilers need a */
- /* special keyword in front OR after the return type of function */
- /* declarations. */
- /* */
- /* Two macros are used within the FreeType source code to define */
- /* exported library functions: FT_EXPORT and FT_EXPORT_DEF. */
- /* */
- /* FT_EXPORT( return_type ) */
- /* */
- /* is used in a function declaration, as in */
- /* */
- /* FT_EXPORT( FT_Error ) */
- /* FT_Init_FreeType( FT_Library* alibrary ); */
- /* */
- /* */
- /* FT_EXPORT_DEF( return_type ) */
- /* */
- /* is used in a function definition, as in */
- /* */
- /* FT_EXPORT_DEF( FT_Error ) */
- /* FT_Init_FreeType( FT_Library* alibrary ) */
- /* { */
- /* ... some code ... */
- /* return FT_Err_Ok; */
- /* } */
- /* */
- /* You can provide your own implementation of FT_EXPORT and */
- /* FT_EXPORT_DEF here if you want. If you leave them undefined, they */
- /* will be later automatically defined as `extern return_type' to */
- /* allow normal compilation. */
- /* */
- /* Do not #undef these macros here since the build system might define */
- /* them for certain configurations only. */
- /* */
-/* #define FT_EXPORT(x) extern x */
-/* #define FT_EXPORT_DEF(x) x */
-
-
- /*************************************************************************/
- /* */
- /* Glyph Postscript Names handling */
- /* */
- /* By default, FreeType 2 is compiled with the `psnames' module. This */
- /* module is in charge of converting a glyph name string into a */
- /* Unicode value, or return a Macintosh standard glyph name for the */
- /* use with the TrueType `post' table. */
- /* */
- /* Undefine this macro if you do not want `psnames' compiled in your */
- /* build of FreeType. This has the following effects: */
- /* */
- /* - The TrueType driver will provide its own set of glyph names, */
- /* if you build it to support postscript names in the TrueType */
- /* `post' table. */
- /* */
- /* - The Type 1 driver will not be able to synthesize a Unicode */
- /* charmap out of the glyphs found in the fonts. */
- /* */
- /* You would normally undefine this configuration macro when building */
- /* a version of FreeType that doesn't contain a Type 1 or CFF driver. */
- /* */
-#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES
-
-
- /*************************************************************************/
- /* */
- /* Postscript Names to Unicode Values support */
- /* */
- /* By default, FreeType 2 is built with the `PSNames' module compiled */
- /* in. Among other things, the module is used to convert a glyph name */
- /* into a Unicode value. This is especially useful in order to */
- /* synthesize on the fly a Unicode charmap from the CFF/Type 1 driver */
- /* through a big table named the `Adobe Glyph List' (AGL). */
- /* */
- /* Undefine this macro if you do not want the Adobe Glyph List */
- /* compiled in your `PSNames' module. The Type 1 driver will not be */
- /* able to synthesize a Unicode charmap out of the glyphs found in the */
- /* fonts. */
- /* */
-#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
-
-
- /*************************************************************************/
- /* */
- /* Support for Mac fonts */
- /* */
- /* Define this macro if you want support for outline fonts in Mac */
- /* format (mac dfont, mac resource, macbinary containing a mac */
- /* resource) on non-Mac platforms. */
- /* */
- /* Note that the `FOND' resource isn't checked. */
- /* */
-#define FT_CONFIG_OPTION_MAC_FONTS
-
-
- /*************************************************************************/
- /* */
- /* Guessing methods to access embedded resource forks */
- /* */
- /* Enable extra Mac fonts support on non-Mac platforms (e.g. */
- /* GNU/Linux). */
- /* */
- /* Resource forks which include fonts data are stored sometimes in */
- /* locations which users or developers don't expected. In some cases, */
- /* resource forks start with some offset from the head of a file. In */
- /* other cases, the actual resource fork is stored in file different */
- /* from what the user specifies. If this option is activated, */
- /* FreeType tries to guess whether such offsets or different file */
- /* names must be used. */
- /* */
- /* Note that normal, direct access of resource forks is controlled via */
- /* the FT_CONFIG_OPTION_MAC_FONTS option. */
- /* */
-#ifdef FT_CONFIG_OPTION_MAC_FONTS
-#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
-#endif
-
-
- /*************************************************************************/
- /* */
- /* Allow the use of FT_Incremental_Interface to load typefaces that */
- /* contain no glyph data, but supply it via a callback function. */
- /* This is required by clients supporting document formats which */
- /* supply font data incrementally as the document is parsed, such */
- /* as the Ghostscript interpreter for the PostScript language. */
- /* */
-#define FT_CONFIG_OPTION_INCREMENTAL
-
-
- /*************************************************************************/
- /* */
- /* The size in bytes of the render pool used by the scan-line converter */
- /* to do all of its work. */
- /* */
-#define FT_RENDER_POOL_SIZE 16384L
-
-
- /*************************************************************************/
- /* */
- /* FT_MAX_MODULES */
- /* */
- /* The maximum number of modules that can be registered in a single */
- /* FreeType library object. 32 is the default. */
- /* */
-#define FT_MAX_MODULES 32
-
-
- /*************************************************************************/
- /* */
- /* Debug level */
- /* */
- /* FreeType can be compiled in debug or trace mode. In debug mode, */
- /* errors are reported through the `ftdebug' component. In trace */
- /* mode, additional messages are sent to the standard output during */
- /* execution. */
- /* */
- /* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */
- /* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */
- /* */
- /* Don't define any of these macros to compile in `release' mode! */
- /* */
- /* Do not #undef these macros here since the build system might define */
- /* them for certain configurations only. */
- /* */
-#define FT_DEBUG_LEVEL_ERROR
-#define FT_DEBUG_LEVEL_TRACE
-
-
- /*************************************************************************/
- /* */
- /* Autofitter debugging */
- /* */
- /* If FT_DEBUG_AUTOFIT is defined, FreeType provides some means to */
- /* control the autofitter behaviour for debugging purposes with global */
- /* boolean variables (consequently, you should *never* enable this */
- /* while compiling in `release' mode): */
- /* */
- /* _af_debug_disable_horz_hints */
- /* _af_debug_disable_vert_hints */
- /* _af_debug_disable_blue_hints */
- /* */
- /* Additionally, the following functions provide dumps of various */
- /* internal autofit structures to stdout (using `printf'): */
- /* */
- /* af_glyph_hints_dump_points */
- /* af_glyph_hints_dump_segments */
- /* af_glyph_hints_dump_edges */
- /* af_glyph_hints_get_num_segments */
- /* af_glyph_hints_get_segment_offset */
- /* */
- /* As an argument, they use another global variable: */
- /* */
- /* _af_debug_hints */
- /* */
- /* Please have a look at the `ftgrid' demo program to see how those */
- /* variables and macros should be used. */
- /* */
- /* Do not #undef these macros here since the build system might define */
- /* them for certain configurations only. */
- /* */
-#define FT_DEBUG_AUTOFIT
-
-
- /*************************************************************************/
- /* */
- /* Memory Debugging */
- /* */
- /* FreeType now comes with an integrated memory debugger that is */
- /* capable of detecting simple errors like memory leaks or double */
- /* deletes. To compile it within your build of the library, you */
- /* should define FT_DEBUG_MEMORY here. */
- /* */
- /* Note that the memory debugger is only activated at runtime when */
- /* when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */
- /* */
- /* Do not #undef this macro here since the build system might define */
- /* it for certain configurations only. */
- /* */
-#define FT_DEBUG_MEMORY
-
-
- /*************************************************************************/
- /* */
- /* Module errors */
- /* */
- /* If this macro is set (which is _not_ the default), the higher byte */
- /* of an error code gives the module in which the error has occurred, */
- /* while the lower byte is the real error code. */
- /* */
- /* Setting this macro makes sense for debugging purposes only, since */
- /* it would break source compatibility of certain programs that use */
- /* FreeType 2. */
- /* */
- /* More details can be found in the files ftmoderr.h and fterrors.h. */
- /* */
-#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
-
-
- /*************************************************************************/
- /* */
- /* Position Independent Code */
- /* */
- /* If this macro is set (which is _not_ the default), FreeType2 will */
- /* avoid creating constants that require address fixups. Instead the */
- /* constants will be moved into a struct and additional intialization */
- /* code will be used. */
- /* */
- /* Setting this macro is needed for systems that prohibit address */
- /* fixups, such as BREW. [Note that standard compilers like gcc or */
- /* clang handle PIC generation automatically; you don't have to set */
- /* FT_CONFIG_OPTION_PIC, which is only necessary for very special */
- /* compilers.] */
- /* */
- /* Note that FT_CONFIG_OPTION_PIC support is not available for all */
- /* modules (see `modules.cfg' for a complete list). For building with */
- /* FT_CONFIG_OPTION_PIC support, do the following. */
- /* */
- /* 0. Clone the repository. */
- /* 1. Define FT_CONFIG_OPTION_PIC. */
- /* 2. Remove all subdirectories in `src' that don't have */
- /* FT_CONFIG_OPTION_PIC support. */
- /* 3. Comment out the corresponding modules in `modules.cfg'. */
- /* 4. Compile. */
- /* */
-/* #define FT_CONFIG_OPTION_PIC */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** S F N T D R I V E R C O N F I G U R A T I O N ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_EMBEDDED_BITMAPS if you want to support */
- /* embedded bitmaps in all formats using the SFNT module (namely */
- /* TrueType & OpenType). */
- /* */
-#define TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_POSTSCRIPT_NAMES if you want to be able to */
- /* load and enumerate the glyph Postscript names in a TrueType or */
- /* OpenType file. */
- /* */
- /* Note that when you do not compile the `PSNames' module by undefining */
- /* the above FT_CONFIG_OPTION_POSTSCRIPT_NAMES, the `sfnt' module will */
- /* contain additional code used to read the PS Names table from a font. */
- /* */
- /* (By default, the module uses `PSNames' to extract glyph names.) */
- /* */
-#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to */
- /* access the internal name table in a SFNT-based format like TrueType */
- /* or OpenType. The name table contains various strings used to */
- /* describe the font, like family name, copyright, version, etc. It */
- /* does not contain any glyph name though. */
- /* */
- /* Accessing SFNT names is done through the functions declared in */
- /* `ftsnames.h'. */
- /* */
-#define TT_CONFIG_OPTION_SFNT_NAMES
-
-
- /*************************************************************************/
- /* */
- /* TrueType CMap support */
- /* */
- /* Here you can fine-tune which TrueType CMap table format shall be */
- /* supported. */
-#define TT_CONFIG_CMAP_FORMAT_0
-#define TT_CONFIG_CMAP_FORMAT_2
-#define TT_CONFIG_CMAP_FORMAT_4
-#define TT_CONFIG_CMAP_FORMAT_6
-#define TT_CONFIG_CMAP_FORMAT_8
-#define TT_CONFIG_CMAP_FORMAT_10
-#define TT_CONFIG_CMAP_FORMAT_12
-#define TT_CONFIG_CMAP_FORMAT_13
-#define TT_CONFIG_CMAP_FORMAT_14
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */
- /* a bytecode interpreter in the TrueType driver. */
- /* */
- /* By undefining this, you will only compile the code necessary to load */
- /* TrueType glyphs without hinting. */
- /* */
- /* Do not #undef this macro here, since the build system might */
- /* define it for certain configurations only. */
- /* */
-#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_SUBPIXEL_HINTING if you want to compile */
- /* subpixel hinting support into the TrueType driver. This modifies the */
- /* TrueType hinting mechanism when anything but FT_RENDER_MODE_MONO is */
- /* requested. */
- /* */
- /* In particular, it modifies the bytecode interpreter to interpret (or */
- /* not) instructions in a certain way so that all TrueType fonts look */
- /* like they do in a Windows ClearType (DirectWrite) environment. See */
- /* [1] for a technical overview on what this means. See `ttinterp.h' */
- /* for more details on the LEAN option. */
- /* */
- /* There are three options. */
- /* */
- /* 1. This option is associated with the `Infinality' moniker. */
- /* Contributed by an individual nicknamed Infinality with the goal of */
- /* making TrueType fonts render better than on Windows. A high */
- /* amount of configurability and flexibility, down to rules for */
- /* single glyphs in fonts, but also very slow. Its experimental and */
- /* slow nature and the original developer losing interest meant that */
- /* this option was never enabled in default builds. */
- /* */
- /* 2. The new default mode for the TrueType driver. The Infinality code */
- /* base was stripped to the bare minimum and all configurability */
- /* removed in the name of speed and simplicity. The configurability */
- /* was mainly aimed at legacy fonts like Arial, Times New Roman, or */
- /* Courier. Legacy fonts are fonts that modify vertical stems to */
- /* achieve clean black-and-white bitmaps. The new mode focuses on */
- /* applying a minimal set of rules to all fonts indiscriminately so */
- /* that modern and web fonts render well while legacy fonts render */
- /* okay. */
- /* */
- /* 3. Compile both. */
- /* */
- /* By undefining these, you get rendering behavior like on Windows */
- /* without ClearType, i.e., Windows XP without ClearType enabled and */
- /* Win9x (interpreter version v35). Or not, depending on how much */
- /* hinting blood and testing tears the font designer put into a given */
- /* font. If you define one or both subpixel hinting options, you can */
- /* switch between between v35 and the ones you define. */
- /* */
- /* This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be */
- /* defined. */
- /* */
- /* [1] http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */
- /* */
-/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */
-/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2 */
-#define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 )
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */
- /* TrueType glyph loader to use Apple's definition of how to handle */
- /* component offsets in composite glyphs. */
- /* */
- /* Apple and MS disagree on the default behavior of component offsets */
- /* in composites. Apple says that they should be scaled by the scaling */
- /* factors in the transformation matrix (roughly, it's more complex) */
- /* while MS says they should not. OpenType defines two bits in the */
- /* composite flags array which can be used to disambiguate, but old */
- /* fonts will not have them. */
- /* */
- /* http://www.microsoft.com/typography/otspec/glyf.htm */
- /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html */
- /* */
-#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */
- /* support for Apple's distortable font technology (fvar, gvar, cvar, */
- /* and avar tables). This has many similarities to Type 1 Multiple */
- /* Masters support. */
- /* */
-#define TT_CONFIG_OPTION_GX_VAR_SUPPORT
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_BDF if you want to include support for */
- /* an embedded `BDF ' table within SFNT-based bitmap formats. */
- /* */
-#define TT_CONFIG_OPTION_BDF
-
-
- /*************************************************************************/
- /* */
- /* Option TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES controls the maximum */
- /* number of bytecode instructions executed for a single run of the */
- /* bytecode interpreter, needed to prevent infinite loops. You don't */
- /* want to change this except for very special situations (e.g., making */
- /* a library fuzzer spend less time to handle broken fonts). */
- /* */
- /* It is not expected that this value is ever modified by a configuring */
- /* script; instead, it gets surrounded with #ifndef ... #endif so that */
- /* the value can be set as a preprocessor option on the compiler's */
- /* command line. */
- /* */
-#ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES
-#define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L
-#endif
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* T1_MAX_DICT_DEPTH is the maximum depth of nest dictionaries and */
- /* arrays in the Type 1 stream (see t1load.c). A minimum of 4 is */
- /* required. */
- /* */
-#define T1_MAX_DICT_DEPTH 5
-
-
- /*************************************************************************/
- /* */
- /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */
- /* calls during glyph loading. */
- /* */
-#define T1_MAX_SUBRS_CALLS 16
-
-
- /*************************************************************************/
- /* */
- /* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A */
- /* minimum of 16 is required. */
- /* */
- /* The Chinese font MingTiEG-Medium (CNS 11643 character set) needs 256. */
- /* */
-#define T1_MAX_CHARSTRINGS_OPERANDS 256
-
-
- /*************************************************************************/
- /* */
- /* Define this configuration macro if you want to prevent the */
- /* compilation of `t1afm', which is in charge of reading Type 1 AFM */
- /* files into an existing face. Note that if set, the T1 driver will be */
- /* unable to produce kerning distances. */
- /* */
-#undef T1_CONFIG_OPTION_NO_AFM
-
-
- /*************************************************************************/
- /* */
- /* Define this configuration macro if you want to prevent the */
- /* compilation of the Multiple Masters font support in the Type 1 */
- /* driver. */
- /* */
-#undef T1_CONFIG_OPTION_NO_MM_SUPPORT
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** C F F D R I V E R C O N F I G U R A T I O N ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Using CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} it is */
- /* possible to set up the default values of the four control points that */
- /* define the stem darkening behaviour of the (new) CFF engine. For */
- /* more details please read the documentation of the */
- /* `darkening-parameters' property of the cff driver module (file */
- /* `ftcffdrv.h'), which allows the control at run-time. */
- /* */
- /* Do *not* undefine these macros! */
- /* */
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 500
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 400
-
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 1000
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 275
-
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 1667
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 275
-
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 2333
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 0
-
-
- /*************************************************************************/
- /* */
- /* CFF_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe CFF */
- /* engine gets compiled into FreeType. If defined, it is possible to */
- /* switch between the two engines using the `hinting-engine' property of */
- /* the cff driver module. */
- /* */
-#define CFF_CONFIG_OPTION_OLD_ENGINE
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** P C F D R I V E R C O N F I G U R A T I O N ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* There are many PCF fonts just called `Fixed' which look completely */
- /* different, and which have nothing to do with each other. When */
- /* selecting `Fixed' in KDE or Gnome one gets results that appear rather */
- /* random, the style changes often if one changes the size and one */
- /* cannot select some fonts at all. This option makes the PCF module */
- /* prepend the foundry name (plus a space) to the family name. */
- /* */
- /* We also check whether we have `wide' characters; all put together, we */
- /* get family names like `Sony Fixed' or `Misc Fixed Wide'. */
- /* */
- /* If this option is activated, it can be controlled with the */
- /* `no-long-family-names' property of the pcf driver module. */
- /* */
-#define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Compile autofit module with CJK (Chinese, Japanese, Korean) script */
- /* support. */
- /* */
-#define AF_CONFIG_OPTION_CJK
-
- /*************************************************************************/
- /* */
- /* Compile autofit module with Indic script support. */
- /* */
-#define AF_CONFIG_OPTION_INDIC
-
- /*************************************************************************/
- /* */
- /* Compile autofit module with warp hinting. The idea of the warping */
- /* code is to slightly scale and shift a glyph within a single dimension */
- /* so that as much of its segments are aligned (more or less) on the */
- /* grid. To find out the optimal scaling and shifting value, various */
- /* parameter combinations are tried and scored. */
- /* */
- /* This experimental option is active only if the rendering mode is */
- /* FT_RENDER_MODE_LIGHT; you can switch warping on and off with the */
- /* `warping' property of the auto-hinter (see file `ftautoh.h' for more */
- /* information; by default it is switched off). */
- /* */
-#define AF_CONFIG_OPTION_USE_WARPER
-
- /* */
-
-
- /*
- * This macro is obsolete. Support has been removed in FreeType
- * version 2.5.
- */
-/* #define FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
- /*
- * This macro is defined if native TrueType hinting is requested by the
- * definitions above.
- */
-#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
-#define TT_USE_BYTECODE_INTERPRETER
-
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
-#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 1
-#define TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-#endif
-
-#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 2
-#define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
-#endif
-#endif
-#endif
-
-
- /*
- * Check CFF darkening parameters. The checks are the same as in function
- * `cff_property_set' in file `cffdrivr.c'.
- */
-#if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 < 0 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 < 0 || \
- \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 < 0 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 < 0 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 < 0 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 < 0 || \
- \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 > \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 > \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 > \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 || \
- \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 > 500 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 > 500 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 > 500 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 > 500
-#error "Invalid CFF darkening parameters!"
-#endif
-
-FT_END_HEADER
-
-
-#endif /* FTOPTION_H_ */
-
-
-/* END */
diff --git a/docs/CHANGES b/docs/CHANGES
deleted file mode 100644
index 3ee9510d0..000000000
--- a/docs/CHANGES
+++ /dev/null
@@ -1,4807 +0,0 @@
-
-CHANGES BETWEEN 2.7.1 and 2.8
-
- I. IMPORTANT CHANGES
-
- - Support for OpenType Variation Fonts is now complete. The last
- missing part was handling the `VVAR' and `MVAR' tables, which is
- available with this release.
-
- - A new function `FT_Face_Properties' allows the control of some
- module and library properties per font. Currently, the
- following properties can be handled: stem darkening, LCD filter
- weights, and the random seed for the `random' CFF operator.
-
- - The PCF change to show more `colourful' family names (introduced
- in version 2.7.1) was too radical; it can now be configured with
- PCF_CONFIG_OPTION_LONG_FAMILY_NAMES at compile time. If
- activated, it can be switched off at run time with the new pcf
- property `no-long-family-names'. If the `FREETYPE_PROPERTIES'
- environment variable is available, you can say
-
- FREETYPE_PROPERTIES=pcf:no-long-family-names=1
-
- - Support for the following scripts has been added to the
- auto-hinter.
-
- Adlam, Avestan, Bamum, Buhid, Carian, Chakma, Coptic, Cypriot,
- Deseret, Glagolitic, Gothic, Kayah, Lisu, N'Ko, Ol Chiki, Old
- Turkic, Osage, Osmanya, Saurashtra, Shavian, Sundanese, Tai
- Viet, Tifinagh, Unified Canadian Syllabics, Vai
-
-
- II. IMPORTANT BUG FIXES
-
- - `Light' auto-hinting mode no longer uses TrueType metrics for
- TrueType fonts. This bug was introduced in version 2.4.6,
- causing horizontal scaling also. Almost all GNU/Linux
- distributions (with Fedora as a notable exception) disabled the
- corresponding patch for good reasons; chances are thus high that
- you won't notice a difference.
-
- If optical backward compatibility for legacy applications is
- necessary, you might enable the AF_CONFIG_OPTION_TT_SIZE_METRICS
- configuration option. However, it is strongly recommended to
- avoid that, adjusting font sizes instead.
-
- - If a TrueType font gets loaded with FT_LOAD_NO_HINTING, FreeType
- now scales the font linearly again (bug introduced in version
- 2.4.6).
-
- - CVE-2017-8105, CVE-2017-8287: Older FreeType versions have
- out-of-bounds writes caused by heap-based buffer overflows
- related to Type 1 fonts.
-
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8105
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8287
-
-
- III. MISCELLANEOUS
-
- - A new function `FT_Set_Default_Properties' has been added to
- parse the `FREETYPE_PROPERTIES' environment variable
- (previously, it was internal only). `FT_Init_FreeType' always
- call this function, but `FT_New_Library' does not (similar to
- `FT_Add_Default_Modules').
-
- - To be in sync with OpenType version 1.7 and newer, macros
-
- FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY,
- FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY,
- TT_NAME_ID_PREFERRED_FAMILY
- TT_NAME_ID_PREFERRED_SUBFAMILY
-
- are renamed to
-
- FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY,
- FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY,
- TT_NAME_ID_TYPOGRAPHIC_FAMILY
- TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
-
- The old macro names are deprecated (but still available).
-
- - Support for SFNT `name' tables has been improved.
-
- . Format 1 `name' tables are now supported. Use new function
- `FT_Get_Sfnt_LangTag' to access associated language tags.
-
- . Language, encoding, and name IDs have been updated to OpenType
- version 1.8.1.
-
- - The new CFF engine now handles the `random' operator. All CFF
- opcodes are now supported.
-
- - The CFF module has a new property `random-seed' to control the
- pseudo-random number generation for the `random' operator.
-
- - The `freetype-config' script is now a wrapper of `pkg-config' if
- this program is available in the path.
-
- - FT_LOAD_TARGET_LCD is now a variant of FT_LOAD_TARGET_LIGHT;
- this should provide better rendering results.
-
- - A mode to display light auto-hinting with sub-pixel positioning
- has been added to `ftdiff'.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.7 and 2.7.1
-
- I. IMPORTANT CHANGES
-
- - Support for the new CFF2 font format as introduced with OpenType
- 1.8 has been contributed by Dave Arnolds from Adobe.
-
- - Preliminary support for variation fonts as specified in OpenType
- 1.8 (in addition to the already existing support for Adobe's MM
- and Apple's GX formats). Dave Arnolds contributed handling of
- advance width change variation; more will come in the next
- version.
-
-
- II. IMPORTANT BUG FIXES
-
- - Handling of raw CID fonts was partially broken (bug introduced
- in 2.6.4).
-
- - CVE-2016-10328: Older FreeType versions had an out-of-bounds
- write caused by a heap-based buffer overflow related to the CFF
- fonts.
-
- http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10328
-
-
- III. MISCELLANEOUS
-
- - Some limits for TrueType bytecode execution have been tightened
- to speed up FreeType's handling of malformed fonts, in
- particular to quickly abort endless loops.
-
- - The number of twilight points can no longer be set to an
- arbitrarily large value.
-
- - The total number of jump opcode instructions (like JMPR) with
- negative arguments is dynamically restricted; the same holds
- for the total number of iterations in LOOPCALL opcodes.
-
- The dynamic limits are based on the number of points in a glyph
- and the number of CVT entries. Please report if you encounter a
- font where the selected values are not adequate.
-
- - PCF family names are made more `colourful'; they now include the
- foundry and information whether they contain wide characters.
- For example, you no longer get `Fixed' but rather `Sony Fixed'
- or `Misc Fixed Wide'.
-
- - A new function `FT_Get_Var_Blend_Coordinates' (with its alias
- name `FT_Get_MM_Blend_Coordinates') to retrieve the normalized
- blend coordinates of the currently selected variation instance
- has been added to the Multiple Masters interface.
-
- - A new function `FT_Get_Var_Design_Coordinates' to retrieve the
- design coordinates of the currently selected variation instance
- has been added to the Multiple Masters interface.
-
- - A new load flag `FT_LOAD_BITMAP_METRICS_ONLY' to retrieve bitmap
- information without loading the (embedded) bitmap itself.
-
- - Retrieving advance widths from bitmap strikes (using
- `FT_Get_Advance' and `FT_Get_Advances') have been sped up.
-
- - The usual round of fuzzer fixes to better reject malformed
- fonts.
-
- - The `ftmulti' demo program can now switch engines with key `H'.
-
- - The `ftstring' demo program can now show some built-in,
- non-latin sample strings (to be selected with the TAB key).
-
- - The `ftview' demo program can now switch between a font's
- charmaps using the TAB key.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.6.5 and 2.7
-
- I. IMPORTANT CHANGES
-
- - As announced earlier, the 2.7.x series now uses the new subpixel
- hinting mode as the default, emulating a modern version of
- ClearType.
-
- This change inevitably leads to different rendering results, and
- you might change the `TT_CONFIG_OPTION_SUBPIXEL_HINTING'
- configuration option to adapt it to your taste (or use the new
- `FREETYPE_PROPERTIES' environment variable). See the
- corresponding entry below for version 2.6.4, which gives more
- information.
-
- - A new option `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES' has been
- introduced. If set (which is the default), an environment
- variable `FREETYPE_PROPERTIES' can be used to control driver
- properties. Example:
-
- FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
- cff:no-stem-darkening=1 \
- autofitter:warping=1
-
- This allows to select, say, the subpixel hinting mode at runtime
- for a given application. See file `ftoption.h' for more.
-
-
- II. IMPORTANT BUG FIXES
-
- - After loading a named instance of a GX variation font, the
- `face_index' value in the returned `FT_Face' structure now
- correctly holds the named instance index in the upper 16bits as
- documented.
-
-
- III. MISCELLANEOUS
-
- - A new macro `FT_IS_NAMED_INSTANCE' to test whether a given face
- is a named instance.
-
- - More fixes to GX font handling.
-
- - Apple's `GETVARIATION' bytecode operator (needed for GX
- variation font support) has been implemented.
-
- - Another round of fuzzer fixes, mainly to reject invalid fonts
- faster.
-
- - Handling of raw CID fonts was broken (bug introduced in version
- 2.6.4).
-
- - The smooth rasterizer has been streamlined to make it faster by
- approx. 20%.
-
- - The `ftgrid' demo program now understands command line option
- `-d' to give start-up design coordinates.
-
- - The `ftdump' demo program has a new command line option `-p' to
- dump TrueType bytecode instructions.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.6.4 and 2.6.5
-
- I. IMPORTANT BUG FIXES
-
- - Compilation works again on Mac OS X (bug introduced in version
- 2.6.4).
-
-
- II. IMPORTANT CHANGES
-
- - The new subpixel hinting mode is now disabled by default; it
- will be enabled by default in the forthcoming 2.7.x series.
- Main reason for reverting this feature is the principle of least
- surprise: a sudden change in appearance of all fonts (even if
- the rendering improves for almost all recent fonts) should not
- be expected in a new micro version of a series.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.6.3 and 2.6.4
-
- I. IMPORTANT CHANGES
-
- - A new subpixel hinting mode has been contributed by Nikolaus
- Waxweiler, which is now the default rendering mode for TrueType
- fonts. It implements (almost everything of) version 40 of the
- bytecode engine.
-
- The existing code base in FreeType (the `Infinality code') was
- stripped to the bare minimum and all configurability removed in
- the name of speed and simplicity. The configurability was
- mainly aimed at legacy fonts like Arial, Times New Roman, or
- Courier. [Legacy fonts are fonts that modify vertical stems to
- achieve clean black-and-white bitmaps.] The new mode focuses on
- applying a minimal set of rules to all fonts indiscriminately so
- that modern and web fonts render well while legacy fonts render
- okay.
-
- Activation of the subpixel hinting support can be controlled
- with the `TT_CONFIG_OPTION_SUBPIXEL_HINTING' configuration
- option at compile time: If set to value 1, you get the old
- Infinality mode (which was never the default due to its
- slowness). Value 2 activates the new subpixel hinting mode, and
- value 3 activates both. The default is value 2.
-
- At run time, you can select the subpixel hinting mode with the
- `interpreter-version' property (provided you have compiled in
- the corresponding hinting mode); see `ftttdrv.h' for more.
-
- - Support for the following scripts has been added to the
- auto-hinter.
-
- Armenian, Cherokee, Ethiopic, Georgian, Gujarati, Gurmukhi,
- Malayalam, Sinhala, Tamil
-
-
- II. MISCELLANEOUS
-
- - Type 42 fonts as created by LilyPond are now supported.
-
- - Minor rendering improvements in the auto-hinter.
-
- - For experimental reasons, the old CFF engine now supports all
- CFF operators except `random', including the deprecated Multiple
- Masters instructions. This allows the display of fonts like
- `ITCGaramondMM-It.otf' (without font variations, though).
-
- - Another round of fixes to improve handling of invalid fonts.
-
- - The `ftgrid' demo program now displays the rendered pixels also;
- this can be switched off with the `b' key. Selection of various
- LCD filtering modes can be done with the `L' key.
-
- - The demo programs have been extended to allow selection of all
- available TrueType bytecode engines.
-
- - A very early beta version of a new, Qt based demo program called
- `ftinspect' is part of the source code bundle; it will
- eventually supersede the other demo programs. Currently, you
- have to compile it manually with `qmake; make'; note that many
- features are still missing.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.6.2 and 2.6.3
-
- I. IMPORTANT CHANGES
-
- - Khmer, Myanmar, Bengali, and Kannada script support has been
- added to the auto-hinter.
-
-
- II. MISCELLANEOUS
-
- - Better support of Indic scripts like Devanagari by using a
- top-to-bottom hinting flow.
-
- - All FreeType macros starting with two underscores have been
- renamed to avoid a violation of both the C and C++ standards.
- Example: Header macros of the form `__FOO_H__' are now called
- `FOO_H_'. In most cases, this should be completely transparent
- to the user. The exception to this is `__FTERRORS_H__', which
- must be sometimes undefined by the user to get FreeType error
- strings: Both this form and the new `FTERRORS_H_' macro are
- accepted for backward compatibility.
-
- - Minor improvements mainly to the Type 1 driver.
-
- - The new CFF engine now supports all Type 2 operators except
- `random'.
-
- - The macro `_STANDALONE_', used for compiling the B/W and smooth
- rasterizers as stand-alone modules, has been renamed to
- `STANDALONE_', since macro names starting with an underscore and
- followed by an uppercase letter are reserved in both C and C++.
-
- - Function `FT_Library_SetLcdFilterWeights' now also activates
- custom LCD filter weights (instead of just adjusting them).
-
- - Support for `unpatented hinting' has been completely removed:
- Consequently, the two functions `FT_Face_CheckTrueTypePatents'
- and `FT_Face_SetUnpatentedHinting' now return always false,
- doing nothing.
-
- - The `ftgamma' demo program has been modernized; the gamma grid
- display has been moved from `ftview' to this program.
-
- - In `ftview', it is now possible to cycle through the available
- LCD filtering modes.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.6.1 and 2.6.2
-
- I. IMPORTANT CHANGES
-
- - The auto-hinter now supports stem darkening, to be controlled by
- the new `no-stem-darkening' and `darkening-parameters'
- properties. This is an experimental feature contributed by
- Nikolaus Waxweiler, and the interface might change in a future
- release.
-
- - By default, stem darkening is now switched off (for both the CFF
- engine and the auto-hinter). The main reason is that you need
- linear alpha blending and gamma correction to get correct
- rendering results, and the latter is not yet available in most
- freely available rendering stacks like X11. Applying stem
- darkening without proper gamma correction leads to far too dark
- rendering results.
-
- - The meaning of `FT_RENDER_MODE_LIGHT' has been slightly
- modified. It now essentially means `no hinting along the
- horizontal axis'; in particular, no change of glyph advance
- widths. Consequently, the auto-hinter is used for all scalable
- font formats except for CFF. It is planned that other
- font-specific rendering engines (TrueType, Type 1) will follow.
-
-
- II. MISCELLANEOUS
-
- - The default LCD filter has been changed to be normalized and
- color-balanced.
-
- - For better compatibility with FontConfig, function
- `FT_Library_SetLcdFilter' accepts a new enumeration value
- `FT_LCD_FILTER_LEGACY1' (which has the same meaning as
- `FT_LCD_FILTER_LEGACY').
-
- - A large number of bugs have been detected by using the libFuzzer
- framework, which should further improve handling of invalid
- fonts. Thanks again to Kostya Serebryany and Bungeman!
-
- - `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES', a new configuration
- option, controls the maximum number of executed opcodes within a
- bytecode program. You don't want to change this except for very
- special situations (e.g., making a library fuzzer spend less
- time to handle broken fonts).
-
- - The smooth renderer has been made faster.
-
- - The `ftstring' demo program now supports sub-pixel rendering;
- use key `l' to cycle through the LCD modes.
-
- - The `ftstring' demo program now supports colour rendering; use
- the `space' key to cycle through various colour combinations.
-
- - The graphical demo programs now use a default gamma value of 1.8
- (instead of 1.2).
-
-
-======================================================================
-
-CHANGES BETWEEN 2.6 and 2.6.1
-
- I. IMPORTANT BUG FIXES
-
- - It turned out that for CFFs only the advance widths should be
- taken from the `htmx' table, not the side bearings. This bug,
- introduced in version 2.6.0, makes it necessary to upgrade if
- you are using CFFs; otherwise, you get cropped glyphs with GUI
- interfaces like GTK or Qt.
-
- - Accessing Type 42 fonts returned incorrect results if the glyph
- order of the embedded TrueType font differs from the glyph order
- of the Type 42 charstrings table.
-
-
- II. IMPORTANT CHANGES
-
- - The header file layout has been changed (again), moving all
- header files except `ft2build.h' into a subdirectory tree.
-
- Doing so reduces the possibility of header file name clashes
- (e.g., FTGL's `FTGlyph.h' with FreeType's `ftglyph.h') on case
- insensitive file systems like Mac OS X or Windows.
-
- Applications that use (a) the `freetype-config' script or
- FreeType's `freetype2.pc' file for pkg-config to get the include
- directory for the compiler, and (b) the documented way for
- header inclusion like
-
- #include <ft2build.h>
- #include FT_FREETYPE_H
- ...
-
- don't need any change to the source code.
-
- - Simple access to named instances in GX variation fonts is now
- available (in addition to the previous method via FreeType's MM
- interface). In the `FT_Face' structure, bits 16-30 of the
- `face_index' field hold the current named instance index for the
- given face index, and bits 16-30 of `style_flags' contain the
- number of instances for the given face index. `FT_Open_Face'
- and friends also understand the extended bits of the face index
- parameter.
-
- You need to enable TT_CONFIG_OPTION_GX_VAR_SUPPORT for this new
- feature. Otherwise, bits 16-30 of the two fields are zero (or
- are ignored).
-
- - Lao script support has been added to the auto-hinter.
-
-
- III. MISCELLANEOUS
-
- - The auto-hinter's Arabic script support has been enhanced.
-
- - Superscript-like and subscript-like glyphs as used by various
- phonetic alphabets like the IPA are now better supported by the
- auto-hinter.
-
- - The TrueType bytecode interpreter now runs slightly faster.
-
- - Improved support for builds with cmake.
-
- - The function `FT_CeilFix' now always rounds towards plus
- infinity.
-
- - The function `FT_FloorFix' now always rounds towards minus
- infinity.
-
- - A new load flag `FT_LOAD_COMPUTE_METRICS' has been added; it
- makes FreeType ignore pre-computed metrics, as needed by font
- validating or font editing programs. Right now, only the
- TrueType module supports it to ignore data from the `hdmx'
- table.
-
- - Another round of bug fixes to better handle broken fonts, found
- by Kostya Serebryany <kcc@google.com>.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.5.5 and 2.6
-
- I. IMPORTANT CHANGES
-
- - Behdad Esfahbod contributed code for improved thread-safety,
- which results in the following model.
-
- * An `FT_Face' object can only be safely used from one thread at
- a time.
-
- * An `FT_Library' object can now be used without modification
- from multiple threads at the same time.
-
- * `FT_Face' creation and destruction with the same `FT_Library'
- object can only be done from one thread at a time.
-
- One can use a single `FT_Library' object across threads as long
- as a mutex lock is used around `FT_New_Face' and `FT_Done_Face'.
- Any calls to `FT_Load_Glyph' and similar API are safe and do not
- need the lock to be held as long as the same `FT_Face' is not
- used from multiple threads at the same time.
-
- - Thai script support has been added to the auto-hinter.
-
- - Arabic script support has been added to the auto-hinter.
-
- - Following OpenType version 1.7, advance widths and side bearing
- values in CFFs (wrapped in an SFNT structure) are now always
- taken from the `hmtx' table.
-
- - Following OpenType version 1.7, the PostScript font name of a
- CFF font (wrapped in an SFNT structure) is now always taken from
- the `name' table. This is also true for OpenType Collections
- (i.e., TTCs using CFFs subfonts instead of TTFs), where it may
- have a significant difference.
-
- - Fonts natively hinted for ClearType are now supported, properly
- handling selector index 3 of the INSTCTRL bytecode instruction.
-
- - Major improvements to the GX TrueType variation font handling.
-
-
- II. MISCELLANEOUS
-
- - A new auto-hinter property `warping' can switch on and off the
- warping code if this experimental feature is compiled in (by
- defining the AF_CONFIG_OPTION_USE_WARPER configuration option;
- by default this option is now enabled but warping is switched
- off).
-
- The AF_CONFIG_OPTION_USE_WARPER option itself is an old feature,
- available since 2006. Warping only works in `light'
- auto-hinting mode. The idea of the code is to slightly scale
- and shift a glyph along the non-hinted dimension (which is
- usually the horizontal axis) so that as much of its segments are
- aligned (more or less) to the grid. To find out a glyph's
- optimal scaling and shifting value, various parameter
- combinations are tried and scored.
-
- See file `ftautoh.h' for more; the demo programs `ftdiff',
- `ftview', and `ftgrid' can toggle warping with key `w'.
-
- - Some fields in the `FTC_ImageTypeRec' structure have been
- changed from signed to unsigned type, which better reflects the
- actual usage. It is also an additional means to protect against
- malformed input.
-
- This change doesn't break the ABI; however, it might cause
- compiler warnings.
-
- - Function `FT_Bitmap_New' has been renamed to `FT_Bitmap_Init',
- since this name better reflects its function. For backward
- compatibility, the old function name is still available.
-
- - Function `FT_Get_X11_Font_Format' has been renamed to
- `FT_Get_Font_Format', since this name better reflects its
- function. For backward compatibility, the old function name is
- still available.
-
- Additionally, the header file macro for this function has been
- renamed to `FT_FONT_FORMATS_H' (the old name `FT_XFREE86_H' is
- retained for backward compatibility).
-
- - Various improvements to the `ftgrid' demo program.
-
- . It can now display GX and MM fonts while interactively
- manipulating the axes (with keys F2, F3, and F4).
-
- . Anti-aliasing rendering modes can now be selected (with keys
- F5 and F6).
-
- . The display of point numbers can be toggled with key `D'.
-
- - Various improvements to the `ftdump' demo program.
-
- . It now displays information on MM and GX variation axes.
-
- . New command line option `-u' makes it output data in utf-8
- encoding.
-
- - The `ftmulti' demo program can now handle up to six MM or GX
- axes.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.5.4 and 2.5.5
-
- I. IMPORTANT BUG FIXES
-
- - Handling of uncompressed PCF files works again (bug introduced
- in version 2.5.4).
-
-
-======================================================================
-
-CHANGES BETWEEN 2.5.3 and 2.5.4
-
- I. IMPORTANT BUG FIXES
-
- - A variant of vulnerability CVE-2014-2240 was identified
- (cf. http://savannah.nongnu.org/bugs/?43661) and fixed in the
- new CFF driver. All users should upgrade.
-
- - The new auto-hinter code using HarfBuzz crashed for some invalid
- fonts.
-
- - Many fixes to better protect against malformed input.
-
-
- II. IMPORTANT CHANGES
-
- - Full auto-hinter support of the Devanagari script.
-
- - Experimental auto-hinter support of the Telugu script.
-
- - CFF stem darkening behaviour can now be controlled at build time
- using the eight macros
-
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} .
-
- - Some fields in the `FT_Bitmap' structure have been changed from
- signed to unsigned type, which better reflects the actual usage.
- It is also an additional means to protect against malformed
- input.
-
- This change doesn't break the ABI; however, it might cause
- compiler warnings.
-
-
- III. MISCELLANEOUS
-
- - Improvements to the auto-hinter's algorithm to recognize stems
- and local extrema.
-
- - Function `FT_Get_SubGlyph_Info' always returned an error even in
- case of success.
-
- - Version 2.5.1 introduced major bugs in the cjk part of the
- auto-hinter, which are now fixed.
-
- - The `FT_Sfnt_Tag' enumeration values have been changed to
- uppercase, e.g. `FT_SFNT_HEAD'. The lowercase variants are
- deprecated. This is for orthogonality with all other
- enumeration (and enumeration-like) values in FreeType.
-
- - `cmake' now supports builds of FreeType as an OS X framework and
- for iOS.
-
- - Improved project files for vc2010, introducing a property file.
-
- - The documentation generator for the API reference has been
- updated to produce better HTML code (with proper CSS). At the
- same time, the documentation got a better structure.
-
- - The FT_LOAD_BITMAP_CROP flag is obsolete; it is not used by any
- driver.
-
- - The TrueType DELTAP[123] bytecode instructions now work in
- subpixel hinting mode as described in the ClearType whitepaper
- (i.e., for touched points in the non-subpixel direction).
-
- - Many small improvements to the internal arithmetic routines.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.5.2 and 2.5.3
-
- I. IMPORTANT BUG FIXES
-
- - A vulnerability (CVE-2014-2240) was identified and fixed in the
- new CFF driver (cf. http://savannah.nongnu.org/bugs/?41697).
- All users should upgrade.
-
- - More bug fixes related to correct positioning of composite
- glyphs.
-
- - Many fixes to better protect against malformed input.
-
-
- II. IMPORTANT CHANGES
-
- - FreeType can now use the HarfBuzz library to greatly improve the
- auto-hinting of fonts that use OpenType features: Many glyphs
- that are part of such features but don't have cmap entries are
- now handled properly, for example small caps or superscripts.
- Define the configuration macro FT_CONFIG_OPTION_USE_HARFBUZZ to
- activate HarfBuzz support.
-
- You need HarfBuzz version 0.9.19 or newer.
-
- Note that HarfBuzz depends on FreeType; this currently causes a
- chicken-and-egg problem that can be solved as follows in case
- HarfBuzz is not yet installed on your system.
-
- 1. Compile and install FreeType without the configuration
- macro FT_CONFIG_OPTION_USE_HARFBUZZ.
-
- 2. Compile and install HarfBuzz.
-
- 3. Define macro FT_CONFIG_OPTION_USE_HARFBUZZ, then compile
- and install FreeType again.
-
- With FreeType's `configure' script the procedure boils down to
- configure, build, and install Freetype, then configure, compile,
- and install HarfBuzz, then configure, compile, and install
- FreeType again (after executing `make distclean').
-
- - All libraries FreeType depends on are now checked using the
- `pkg-config' configuration files first, followed by alternative
- methods.
-
- - The new value `auto' for the various `--with-XXX' library
- options (for example `--with-harfbuzz=auto') makes the
- `configure' script automatically link to the libraries it finds.
- This is now the default.
-
- - In case FreeType's `configure' script can't find a library, you
- can pass environment variables to circumvent pkg-config, and
- those variables have been harmonized as a consequence of the
- changes mentioned above:
-
- LIBZ -> removed; use LIBZ_CFLAGS and LIBZ_LIBS
- LIBBZ2 -> removed; use BZIP2_CFLAGS and BZIP2_LIBS
- LIBPNG_LDFLAGS -> LIBPNG_LIBS
-
- `./configure --help' shows all available environment variables.
-
- - The `freetype-config' script now understands option `--static'
- to emit static linking information.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.5.1 and 2.5.2
-
- I. IMPORTANT BUG FIXES
-
- - Improving the display of some broken TrueType fonts introduced a
- bug that made FreeType crash on some popular (but not fully
- conformant) fonts like `ahronbd.ttf'.
-
- - Another round of improvements to correct positioning and hinting
- of composite glyphs in TrueType fonts.
-
-
- II. MISCELLANEOUS
-
- - Version 2.5.1 introduced a bug in handling embedded bitmap
- strikes of TrueType fonts, causing garbage display under some
- circumstances.
-
- - The `ftgrid' demo program couldn't be compiled in
- non-development builds.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.5 and 2.5.1
-
- I. IMPORTANT BUG FIXES
-
- - For some WinFNT files, the last glyph wasn't displayed but
- incorrectly marked as invalid.
-
- - The vertical size of glyphs was incorrectly set after a call to
- `FT_GlyphSlot_Embolden', resulting in clipped glyphs.
-
- - Many fields of the `PCLT' table in SFNT based fonts (if accessed
- with `FT_Get_Sfnt_Table') were computed incorrectly.
-
- - In TrueType fonts, hinting of composite glyphs could sometimes
- deliver incorrect positions of components or even distorted
- shapes.
-
-
- II. IMPORTANT CHANGES
-
- - WOFF font format support has been added.
-
- - The auto-hinter now supports Hebrew. Greek and Cyrillic support
- has been improved.
-
- - Support for the forthcoming `OS/2' SFNT table version 5, as can
- be found e.g. in the `Sitka' font family for Windows 8.1.
-
- - The header file layout has been changed. After installation,
- all files are now located in `<prefix>/include/freetype2'.
-
- Applications that use (a) `freetype-config' or FreeType's
- `pkg-config' file to get the include directory for the compiler,
- and (b) the documented way for header inclusion like
-
- #include <ft2build.h>
- #include FT_FREETYPE_H
- ...
-
- don't need any change to the source code.
-
-
- III. MISCELLANEOUS
-
- - The stem darkening feature of the new CFF engine can now be
- fine-tuned with the new `darkening-parameters' property.
-
- - `ftgrid' has been updated to toggle various engines with the `H'
- key, similar to `ftview' and `ftdiff'.
-
- - The functionality of `ttdebug' has been greatly enhanced.
-
- . It now displays twilight, storage, and control value data; key
- `T' shows the twilight point table, key `S' the storage data,
- and key `C' the control value table.
-
- . Some keys have been reassigned from lowercase to their
- uppercase equivalents; for example `q' to quit the program is
- now `Q'.
-
- . Key `f' finishes the current function.
-
- . Key `R' restarts the debugger.
-
- . Keys `b' and `p' set a breakpoint.
-
- . Key `B' provides a function call backtrace.
-
- - Better support of ARMv7 and x86_64 processors.
-
- - Apple's `sbix' color bitmap format is now supported.
-
- - Improved auto-hinter rendering for many TrueType fonts,
- especially in the range 20-40ppem.
-
- - A new face flag `FT_FACE_FLAG_COLOR' has been added (to be
- accessed with the macro `FT_HAS_COLOR').
-
- - `FT_Gzip_Uncompress' (modeled after zlib's `uncompress'
- function) has been added; this is a by-product of the newly
- added WOFF support.
-
- - Support for a build with `cmake' has been contributed by John
- Cary <cary@txcorp.com>.
-
- - Support for x64 builds with Visual C++ has been contributed by
- Kenneth Miller <kennethadammiller@yahoo.com>
-
- - Manual pages for most demo programs have been added.
-
- - The GETINFO bytecode instruction for TrueType fonts was buggy if
- used to retrieve subpixel hinting information. It was necessary
- to set selector bit 6 to get results for selector bits 7-10,
- which is wrong.
-
- - Improved computation of emulated vertical metrics for TrueType
- fonts.
-
- - Fixed horizontal start-up position of vertical phantom points in
- TrueType bytecode.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.4.12 and 2.5
-
- I. IMPORTANT BUG FIXES
-
- - The cache manager function `FTC_Manager_Reset' didn't flush the
- cache.
-
-
- II. IMPORTANT CHANGES
-
- - Behdad Esfahbod (on behalf of Google) contributed support for
- color embedded bitmaps (eg. color emoji).
-
- A new load flag, FT_LOAD_COLOR, makes FreeType load color
- embedded-bitmaps, following this draft specification
-
- https://color-emoji.googlecode.com/git/specification/v1.html
-
- which defines two new SFNT tables, `CBDT' and `CBLC' (named and
- modeled after `EBDT' and `EBLC', respectively). The color
- bitmaps are stored in the new FT_PIXEL_MODE_BGRA format to
- represent BGRA pre-multiplied sRGB images. If PNG support is
- available, PNG color images as defined in the same proposed
- specification are supported also.
-
- Note that color bitmaps are converted to grayscale if client
- didn't ask for color.
-
- - As announced in the previous release, the old FreeType CFF
- engine is now disabled by default. It can be conditionally
- compiled by defining the configuration macro
- CFF_CONFIG_OPTION_OLD_ENGINE.
-
- - As announced in the previous release, all code related to macro
- FT_CONFIG_OPTION_OLD_INTERNALS has been removed, thus becoming
- obsolete.
-
-
- III. MISCELLANEOUS
-
- - The property API (`FT_Property_Get' and `FT_Property_Set') is
- now declared as stable.
-
- The exception, however, are the experimental auto-hinter
- properties `glyph-to-script-map' and `fallback-script' which are
- subject to change in a forthcoming release.
-
- - `ftview' has been updated to support color embedded bitmaps; it
- can be toggled on and off with key `c'. The small cache toggle
- is now key `K'.
-
- - It is now possible to control the version of the TrueType
- hinting engine using the new `interpreter-version' property of
- the `truetype' module: Versions 35 and 38 (the default) are
- supported, which roughly corresponds to disable and enable
- subpixel hinting support, respectively.
-
- In both `ftview' and `ftdiff', switching between the two
- versions can be done with key `H'. In the `ftbench' demo
- program, command line option `-H' has been extended to activate
- the non-default interpreter version.
-
- - The `ttdebug' program has been further improved. In particular,
- it accepts a new command line option `-H' to select the hinting
- engine.
-
- - `ftdump's verbose option has been renamed to `-V'. For all demo
- programs, `-v' now shows version information.
-
- - Another round of TrueType subpixel hinting fixes.
-
- - The `apinames' tool can now create an import file for NetWare.
-
- - 64bit compilation of the new CFF engine was buggy.
-
- - Some fixes to improve robustness in memory-tight situations.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.4.11 and 2.4.12
-
- - We have another CFF parsing and hinting engine! Written by Dave
- Arnold <darnold@adobe.com>, this work has been contributed by
- Adobe in collaboration with Google. It is vastly superior to
- the old CFF engine, and it will replace it in the next release.
- Right now, it is still off by default, and you have to
- explicitly select it using the new `hinting-engine' property of
- the cff driver:
-
- ...
- #include FT_MODULE_H
- #include FT_CFF_DRIVER_H
-
- FT_Library library;
- int engine = FT_CFF_HINTING_ADOBE;
-
-
- ...
- FT_Property_Set( library, "cff", "hinting-engine", &engine );
-
- The code has a (mature) beta status; we encourage all users to
- test it and report any problems.
-
- In case you want to activate the new CFF engine unconditionally,
- apply this patch:
-
---- snip ---
-diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c
-index ebcf189..3f2ce6b 100644
---- a/src/cff/cffobjs.c
-+++ b/src/cff/cffobjs.c
-@@ -1056,7 +1056,7 @@
-
-
- /* set default property values */
-- driver->hinting_engine = FT_CFF_HINTING_FREETYPE;
-+ driver->hinting_engine = FT_CFF_HINTING_ADOBE;
- driver->no_stem_darkening = FALSE;
-
- return FT_Err_Ok;
---- snip ---
-
- - The macro FT_CONFIG_OPTION_OLD_INTERNALS is no longer set by
- default. In the next release, we will completely remove the
- associated code. Please update your programs in case you are
- still using this macro.
-
-
- II. MISCELLANEOUS
-
- - The (top-level) `configure' script now respects the MAKE
- environment variable to specify a `make' binary. For backward
- compatibility, GNUMAKE still overrides MAKE, though.
-
- - The `ftview' and `ftdiff' demo programs have been redesigned,
- showing more options permanently on the screen, among other
- minor improvements.
-
- - Using the `H' key, it is now possible to select the CFF engine
- in both `ftview' and `ftdiff'.
-
- - The new command line option `-H' for `ftbench' selects the Adobe
- CFF engine.
-
- - It is now possible to directly select the LCD rendering mode
- with the keys `A'-`F' in `ftview'. The key mapping for cycling
- through LCD modes has been changed from `K' and `L' to `k' and
- `l', and toggling custom LCD filtering is no longer mapped to
- key `F' but to key `L'.
-
- - In `ftdiff', key `x' toggles between layout modes: Either use
- the advance width (this is new and now the default) or the
- bounding box information to determine line breaks.
-
- - For all demo tools, the new command line option `-v' shows the
- version.
-
- - For the demo tools with a GUI, the new command line options `-w'
- and `-h' select the width and the height of the output window,
- respectively.
-
- - The `ttdebug' program was broken and has been reactivated. Note
- that this program is not compiled by default.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.4.10 and 2.4.11
-
- I. IMPORTANT BUG FIXES
-
- - Some vulnerabilities in the BDF implementation have been fixed.
- Users of this font format should upgrade.
-
-
- II. IMPORTANT CHANGES
-
- - Subpixel hinting support has been contributed by Infinality,
- based on Greg Hitchcock's whitepaper at
-
- http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
-
- Originally, it was a separate patch available from
-
- http://www.infinality.net/blog/
-
- and which has been integrated.
-
- Note that ClearType support is not completely implemented! In
- particular, full support for the options `compatible_widths',
- `symmetrical_smoothing, and `bgr' (via the GETINFO bytecode
- instruction) is missing.
-
- Activation of subpixel hinting support can be controlled with
- the `TT_CONFIG_OPTION_SUBPIXEL_HINTING' configuration option; it
- is switched off by default. This feature is still experimental;
- we welcome test reports!
-
- - Support for OpenType collections (OTC) has been added.
-
- - Pure CFF fonts within an SFNT wrapper are now supported.
-
-
- III. MISCELLANEOUS
-
- - Minor rendering improvements to the auto-hinter.
-
- - `FT_GlyphSlot_Oblique' now uses a shear angle of 12°.
-
- - Experimental support to handle `property modules', for example
- to control the behaviour of the auto-hinter. The API consists
- of two new functions, `FT_Property_Set' and `FT_Property_Get'.
-
- The code is still subject to change and should not be used for
- production.
-
- - The `ftdiff' demo program now supports UTF-8 encoded input files
- for option `-f'.
-
- - Using keys `r' and `R', you can now adjust the stroker radius in
- the `ftview' demo program.
-
- - Other, minor fixes and improvements.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.4.9 and 2.4.10
-
- I. IMPORTANT BUG FIXES
-
- - Incremental glyph loading as needed by ghostscript was broken.
-
-
- II. MISCELLANEOUS
-
- - A new function `FT_Outline_EmboldenXY', contributed by Alexei
- Podtelezhnikov.
-
- - In the `ftview' demo program, key `e' has been replaced with `x'
- and `y' to embolden in the horizontal and vertical direction,
- respectively.
-
- - The glyph spacing computation in `FT_GlyphSlot_Embolden' (and
- similar code in `ftview') has been improved.
-
- - Minor improvements to the TrueType bytecode interpreter and
- glyph loader, the auto-hinter, and the B/W rasterizer.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.4.8 and 2.4.9
-
- I. IMPORTANT BUG FIXES
-
- - Another round of fixes to better handle invalid fonts. Many of
- them are vulnerabilities (see CVE-2012-1126 up to CVE-2012-1144
- and SA48320) so all users should upgrade.
-
-
- II. MISCELLANEOUS
-
- - The `ENCODING -1 <n>' format of BDF fonts is now supported.
-
- - For BDF fonts, support for the whole Unicode encoding range has
- been added.
-
- - Better TTF support for x_ppem != y_ppem.
-
- - `FT_Get_Advances' sometimes returned bogus values.
-
- - The demo programs no longer recognize and handle default
- suffixes; you now have to always specify the complete font name.
-
- - Better rendering and LCD mode cycling added to `ftview'.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.4.7 and 2.4.8
-
- I. IMPORTANT BUG FIXES
-
- - Some vulnerabilities in handling CID-keyed PostScript fonts have
- been fixed; see CVE-2011-3439.
-
-
- II. MISCELLANEOUS
-
- - Chris Liddell contributed a new API, `FT_Get_PS_Font_Value', to
- retrieve most of the dictionary keys in Type 1 fonts.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.4.6 and 2.4.7
-
- I. IMPORTANT BUG FIXES
-
- - Some vulnerabilities in handling Type 1 fonts have been fixed;
- see CVE-2011-3256.
-
-
- II. MISCELLANEOUS
-
- - FreeType now properly handles ZapfDingbats glyph names while
- constructing a Unicode character map (for fonts which don't have
- one).
-
-
-======================================================================
-
-CHANGES BETWEEN 2.4.5 and 2.4.6
-
- I. IMPORTANT BUG FIXES
-
- - For TrueType based fonts, the ascender and descender values were
- incorrect sometimes (off by a pixel if the ppem value was not a
- multiple of 5). Depending on the use you might now experience
- a different layout; the change should result in better, more
- consistent line spacing.
-
- - Fix CVE-2011-0226 which causes a vulnerability while handling
- Type 1 fonts.
-
- - BDF fonts containing glyphs with negative values for ENCODING
- were incorrectly rejected. This bug has been introduced in
- FreeType version 2.2.0.
-
- - David Bevan contributed a major revision of the FreeType stroker
- code:
-
- . The behaviour of FT_STROKER_LINEJOIN_BEVEL has been corrected.
-
- . A new line join style, FT_STROKER_LINEJOIN_MITER_FIXED, has
- been introduced to support PostScript and PDF miter joins.
-
- . FT_STROKER_LINEJOIN_MITER_VARIABLE has been introduced as an
- alias for FT_STROKER_LINEJOIN_MITER.
-
- . Various stroking glitches has been fixed.
-
-
- II. MISCELLANEOUS
-
- - SFNT bitmap fonts which contain an outline glyph for `.notdef'
- only no longer set the FT_FACE_FLAG_SCALABLE flag.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.4.4 and 2.4.5
-
- I. IMPORTANT BUG FIXES
-
- - A rendering regression for second-order Bézier curves has been
- fixed, introduced in 2.4.3.
-
-
- II. IMPORTANT CHANGES
-
- - If autohinting is not explicitly disabled, FreeType now uses
- the autohinter if a TrueType based font doesn't contain native
- hints.
-
- - The load flag FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH has been made
- redundant and is simply ignored; this means that FreeType now
- ignores the global advance width value in TrueType fonts.
-
-
- III. MISCELLANEOUS
-
- - `FT_Sfnt_Table_Info' can now return the number of SFNT tables of
- a font.
-
- - Support for PCF files compressed with bzip2 has been contributed
- by Joel Klinghed. To make this work, the OS must provide a
- bzip2 library.
-
- - Bradley Grainger contributed project and solution files in
- Visual Studio 2010 format.
-
- - Again some fixes to better handle broken fonts.
-
- - Some improvements to the B/W rasterizer.
-
- - Fixes to the cache module to improve robustness.
-
- - Just Fill Bugs contributed (experimental) code to compute blue
- zones for CJK Ideographs, improving the alignment of horizontal
- stems at the top or bottom edges.
-
- - The `ftgrid' demo program can now display autohinter segments,
- to be toggled on and off with key `s'.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.4.3 and 2.4.4
-
- I. IMPORTANT BUG FIXES
-
- - UVS support (TrueType/OpenType cmap format 14) support is fixed.
- This regression has been introduced in version 2.4.0.
-
-
- II. MISCELLANEOUS
-
- - Detect tricky fonts (e.g. MingLiU) by the lengths and checksums
- of Type42-persistent subtables (`cvt ', `fpgm', and `prep') when
- a TrueType font without family name is given. The previous fix,
- introduced in 2.4.3, was too rigorous, causing many subsetted
- fonts (mainly from PDF files) displayed badly because FreeType
- forced rendering with the TrueType bytecode engine instead of
- the autohinter.
-
- - Better support for 64bit platforms.
-
- - More fixes to improve handling of broken fonts.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.4.2 and 2.4.3
-
- I. IMPORTANT BUG FIXES
-
- - Fix rendering of certain cubic, S-shaped arcs. This regression
- has been introduced in version 2.4.0.
-
-
- II. MISCELLANEOUS
-
- - To fix the above mentioned rendering issue, a new spline
- flattening algorithm has been introduced which speeds up both
- conic and cubic arcs.
-
- - Handling of broken fonts has been further improved.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.4.1 and 2.4.2
-
- I. IMPORTANT BUG FIXES
-
- - A stack overflow in CFF Type2 CharStrings interpreter is fixed.
-
- - Handling Type 42 font deallocation was broken; additionally, the
- library is now more robust against malformed Type 42 fonts.
-
-
- II. MISCELLANEOUS
-
- - Two new functions, `FT_Reference_Library' (in FT_MODULE_H) and
- `FT_Reference_Face' (in FT_FREETYPE_H), have been added to
- simplify life-cycle management. A counter gets initialized to 1
- at the time an FT_Library (or FT_Face) structure is created.
- The two new functions increment the respective counter.
- `FT_Done_Library' and `FT_Done_Face' then only destroy a library
- or face if the counter is 1, otherwise they simply decrement the
- counter.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.4.0 and 2.4.1
-
- I. IMPORTANT CHANGES
-
- - A serious bug in the CFF font module prevented display of many
- glyphs in CFF fonts like `MinionPro-Regular.otf'.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.3.12 and 2.4.0
-
- I. IMPORTANT CHANGES
-
- - Since May 2010, all patents regarding the TrueType bytecode
- interpreter have expired worldwide. Consequently, we now define
- TT_CONFIG_OPTION_BYTECODE_INTERPRETER by default (and undefine
- TT_CONFIG_OPTION_UNPATENTED_HINTING).
-
- - A new function `FT_Library_SetLcdFilterWeights' is available to
- adjust the filter weights set by `FT_Library_SetLcdFilter'.
-
-
- II. MISCELLANEOUS
-
- - Thanks to many reports from Robert Święcki, FreeType's stability
- in handling broken or damaged fonts is much improved.
-
- - Support for LCD filter control has been added to the demo
- programs `ftdiff' and `ftview'.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.3.11 and 2.3.12
-
- I. IMPORTANT CHANGES
-
- - For `FT_Open_Face', new parameters are available to ignore
- preferred family names: FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY and
- FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY.
-
-
- II. MISCELLANEOUS
-
- - Support for incremental font loading (controlled with the
- FT_CONFIG_OPTION_INCREMENTAL macro) is now active by default.
-
- - Better support for vertical metrics.
-
- - Various minor bug fixes.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.3.10 and 2.3.11
-
- I. IMPORTANT BUG FIXES
-
- - Version 2.3.10 broke PCF support.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.3.10 and 2.3.9
-
- I. IMPORTANT BUG FIXES
-
- - If all ASCII digits in a font have the same (unscaled) width,
- the autohinter respects this and won't change it.
-
- - TrueType fonts are now rasterized correctly if the horizontal
- and vertical resolution differ.
-
- - Type 1 fonts are now handled with increased precision internally
- to avoid serious rounding issues if non-integral coordinates are
- encountered.
-
- - Horizontally condensed CFF fonts (using the font matrix) were
- rendered incorrectly. This bug has been introduced after
- release 2.3.5.
-
-
- II. IMPORTANT CHANGES
-
- - Support for the SFNT cmap 13 table format (as defined by the new
- OpenType 1.6 specification) has been added.
-
- - B/W rasterization of well-hinted TrueType fonts at small sizes
- has been greatly improved.
-
- - Calculation of vertical metrics in OpenType fonts has been
- improved.
-
-
- III. MISCELLANEOUS
-
- - It is now possible to change the emboldening factor in the
- `ftview' demo program with keys `e' and `E'.
-
- - It is now possible to change the slant value in the `ftview'
- demo program with keys `s' and `S'.
-
- - The 5-levels grayscale mode of the `ftraster' module (which
- FreeType doesn't use by default) was broken since version 2.3.0.
-
- - Compilation of the `ftgrays' and `ftraster' modules was broken
- in stand-alone mode.
-
- - Various fixes for compilation on 64bit and 16bit architectures.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.3.9 and 2.3.8
-
- I. IMPORTANT BUG FIXES
-
- - Very unfortunately, FreeType 2.3.8 contained a change that broke
- its official ABI. The end result is that programs compiled
- against previous versions of the library, but dynamically linked
- to 2.3.8 can experience memory corruption if they call the
- `FT_Get_PS_Font_Info' function.
-
- We recommend all users to upgrade to 2.3.9 as soon as possible,
- or to downgrade to a previous release of the library if this is
- not an option.
-
- The origin of the bug is that a new field was added to the
- publicly defined `PS_FontInfoRec' structure. Unfortunately,
- objects of this type can be stack or heap allocated by callers
- of `FT_Get_PS_Font_Info', resulting in a memory buffer
- overwrite with its implementation in 2.3.8.
-
- If you want to know whether your code is vulnerable to this
- issue, simply search for the substrings `PS_FontInfo' and
- `PS_Font_Info' in your source code. If none is found, your code
- is safe and is not affected.
-
- The FreeType team apologizes for the problem.
-
- - The POSIX support of MacOS resource-fork fonts (Suitcase fonts
- and LaserWriter Type1 PostScript fonts) was broken in 2.3.8. If
- FreeType2 is built without Carbon framework, these fonts are not
- handled correctly. Version 2.3.7 didn't have this bug.
-
- - `FT_Get_Advance' (and `FT_Get_Advances') returned bad values for
- almost all font formats except TrueType fonts.
-
- - Fix a bug in the SFNT kerning table loader/parser which could
- crash the engine if certain malformed tables were encountered.
-
- - Composite SFNT bitmaps are now handled correctly.
-
-
- II. IMPORTANT CHANGES
-
- - The new functions `FT_Get_CID_Is_Internally_CID_keyed' and
- `FT_Get_CID_From_Glyph_Index' can be used to access CID-keyed
- CFF fonts via CID values. This code has been contributed by
- Michael Toftdal.
-
-
- III. MISCELLANEOUS
-
- - `FT_Outline_Get_InsideBorder' returns FT_STROKER_BORDER_RIGHT
- for empty outlines. This was incorrectly documented.
-
- - The `ftview' demo program now supports UTF-8 encoded strings.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.3.8 and 2.3.7
-
- I. IMPORTANT BUG FIXES
-
- - CID-keyed fonts in an SFNT wrapper were not handled correctly.
-
- - The smooth renderer produced truncated images (on the right) for
- outline parts with negative horizontal values. Most fonts don't
- contain outlines left to the y coordinate axis, but the effect
- was very noticeable for outlines processed with FT_Glyph_Stroke,
- using thick strokes.
-
- - `FT_Get_TrueType_Engine_Type' returned a wrong value if both
- configuration macros TT_CONFIG_OPTION_BYTECODE_INTERPRETER and
- TT_CONFIG_OPTION_UNPATENTED_HINTING were defined.
-
- - The `face_index' field in the `FT_Face' structure wasn't
- initialized properly after calling FT_Open_Face and friends with
- a positive face index for CFFs, WinFNTs, and, most importantly,
- for TrueType Collections (TTCs).
-
-
- II. IMPORTANT CHANGES
-
- - Rudimentary support for Type 1 fonts and CID-keyed Type 1 fonts
- in an SFNT wrapper has been added -- such fonts are used on the
- Mac. The core SFNT tables `TYP1' and `CID ' are passed to the
- PS Type 1 and CID-keyed PS font drivers; other tables (`ALMX',
- `BBOX', etc.) are not supported yet.
-
- - A new interface to extract advance values of glyphs without
- loading their outlines has been added. The functions are called
- `FT_Get_Advance' and `FT_Get_Advances'; they are defined in file
- `ftadvanc.h' (to be accessed as FT_ADVANCES_H).
-
- - A new function `FT_Get_FSType_Flags' (in FT_FREETYPE_H) has been
- contributed by David Bevan to access the embedding and
- subsetting restriction information of fonts.
-
-
- III. MISCELLANEOUS
-
- - FT_MulFix is now an inlined function; by default, assembler code
- is provided for x86 and ARM. See FT_CONFIG_OPTION_INLINE_MULFIX
- and FT_CONFIG_OPTION_NO_ASSEMBLER (in ftoption.h) for more.
-
- - The handling of `tricky' fonts (this is, fonts which don't work
- with the autohinter, needing the font format's hinting engine)
- has been generalized and changed slightly:
-
- . A new face flag FT_FACE_FLAG_TRICKY indicates that the font
- format's hinting engine is necessary for correct rendering.
- The macro FT_IS_TRICKY can be used to check this flag.
-
- . FT_LOAD_NO_HINTING is now ignored for tricky fonts. To really
- force raw loading of such fonts (without hinting), both
- FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT must be used --
- this is something which you probably never want to do.
-
- . Tricky TrueType fonts always use the bytecode interpreter,
- either the patented or unpatented version.
-
- - The function `FT_GlyphSlot_Own_Bitmap' has been moved from
- FT_SYNTHESIS_H to FT_BITMAP_H; it is now part of the `official'
- API. (The functions in FT_SYNTHESIS_H are still subject to
- change, however.)
-
- - In the `ftdiff' demo program you can now toggle the use of
- FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH with key `a'.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.3.7 and 2.3.6
-
- I. IMPORTANT BUG FIXES
-
- - If the library was compiled on an i386 platform using gcc, and
- compiler option -O3 was given, `FT_MulFix' sometimes returned
- incorrect results which could have caused problems with
- `FT_Request_Metrics' and `FT_Select_Metrics', returning an
- incorrect descender size.
-
- - Pure CFFs without subfonts were scaled incorrectly if the font
- matrix was non-standard. This bug has been introduced in
- version 2.3.6.
-
- - The `style_name' field in the `FT_FaceRec' structure often
- contained a wrong value for Type 1 fonts. This misbehaviour
- has been introduced in version 2.3.6 while trying to fix
- another problem. [Note, however, that this value is
- informative only since the used algorithm to extract it is
- very simplistic.]
-
-
- II. IMPORTANT CHANGES
-
- - Two new macros, FT_OUTLINE_SMART_DROPOUTS and
- FT_OUTLINE_EXCLUDE_STUBS, have been introduced. Together with
- FT_OUTLINE_IGNORE_DROPOUTS (which was ignored previously) it is
- now possible to control the dropout mode of the `raster' module
- (for B&W rasterization), using the `flags' field in the
- `FT_Outline' structure.
-
- - The TrueType bytecode interpreter now passes the dropout mode to
- the B&W rasterizer. This greatly increases the output for small
- ppem values of many fonts like `pala.ttf'.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.3.6 and 2.3.5
-
- I. IMPORTANT BUG FIXES
-
- - A bunch of potential security problems have been found. All
- users should update.
-
- - Microsoft Unicode cmaps in TrueType fonts are now always
- preferred over Apple cmaps. This is not a bug per se, but there
- exist some buggy fonts created for MS which have broken Apple
- cmaps. This affects only the automatic selection of FreeType;
- it's always possible to manually select an Apple Unicode cmap if
- desired.
-
- - Many bug fixes to the TrueType bytecode interpreter.
-
- - Improved Mac support.
-
- - Subsetted CID-keyed CFFs are now supported correctly.
-
- - CID-keyed CFFs with subfonts which are scaled in a non-standard
- way are now handled correctly.
-
- - A call to FT_Open_Face with `face_index' < 0 crashed FreeType if
- the font was a Windows (bitmap) FNT/FON.
-
-
- II. IMPORTANT CHANGES
-
- - The new function `FT_Get_CID_Registry_Ordering_Supplement' gives
- access to those fields in a CID-keyed font. The code has been
- contributed by Derek Clegg.
-
- - George Williams contributed code to validate the new `MATH'
- OpenType table (within the `otvalid' module). The `ftvalid'
- demo program has been extended accordingly.
-
- - An API for cmap 14 support (for Unicode Variant Selectors, UVS)
- has been contributed by George Williams.
-
- - A new face flag FT_FACE_FLAG_CID_KEYED has been added, together
- with a macro FT_IS_CID_KEYED which evaluates to 1 if the font is
- CID-keyed.
-
-
- III. MISCELLANEOUS
-
- - Build support for symbian has been contributed.
-
- - Better WGL4 glyph name support, contributed by Sergey Tolstov.
-
- - Debugging output of the various FT_TRACEX macros is now sent to
- stderr.
-
- - The `ftview' demo program now provides artificial slanting too.
-
- - The `ftvalid' demo program has a new option `-f' to select the
- font index.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.3.5 and 2.3.4
-
- I. IMPORTANT BUG FIXES
-
- - Some subglyphs in TrueType fonts were handled incorrectly due to
- a missing graphics state reinitialization.
-
- - Large .Z files (as distributed with some X11 packages) weren't
- handled correctly, making FreeType increase the heap stack in an
- endless loop.
-
- - A large number of bugs have been fixed to avoid crashes and
- endless loops with invalid fonts.
-
-
- II. IMPORTANT CHANGES
-
- - The two new cache functions `FTC_ImageCache_LookupScaler' and
- `FTC_SBit_Cache_LookupScaler' have been added to allow lookup of
- glyphs using an `FTC_Scaler' object; this makes it possible to
- use fractional pixel sizes in the cache. The demo programs have
- been updated accordingly to use this feature.
-
- - A new API `FT_Get_CMap_Format' has been added to get the cmap
- format of a TrueType font. This is useful in handling PDF
- files. The code has been contributed by Derek Clegg.
-
- - The auto-hinter now produces better output by default for
- non-Latin scripts like Indic. This was done by using the CJK
- hinting module as the default instead of the Latin one. Thanks
- to Rahul Bhalerao for this suggestion.
-
- - A new API `FT_Face_CheckTrueTypePatents' has been added to find
- out whether a given TrueType font uses patented bytecode
- instructions. The `ft2demos' bundle contains a new program
- called `ftpatchk' which demonstrates its usage.
-
- - A new API `FT_Face_SetUnpatentedHinting' has been added to
- enable or disable the unpatented hinter.
-
- - Support for Windows FON files in PE format has been contributed
- by Dmitry Timoshkov.
-
-
- III. MISCELLANEOUS
-
- - Vincent Richomme contributed Visual C++ project files for Pocket
- PCs.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.3.4 and 2.3.3
-
- I. IMPORTANT BUG FIXES
-
- - A serious bug in the handling of bitmap fonts (and bitmap
- strikes of outline fonts) has been introduced in 2.3.3.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.3.3 and 2.3.2
-
- I. IMPORTANT BUG FIXES
-
- - Remove a serious regression in the TrueType bytecode interpreter
- that was introduced in version 2.3.2. Note that this does not
- disable the improvements introduced to the interpreter in
- version 2.3.2, only some ill cases that occurred with certain
- fonts (though a few popular ones).
-
- - The auto-hinter now ignores single-point contours for computing
- blue zones. This bug created `wavy' baselines when rendering
- text with various fonts that use these contours to model
- mark-attach points (these are points that are never rasterized
- and are placed outside of the glyph's real outline).
-
- - The `rsb_delta' and `lsb_delta' glyph slot fields are now set to
- zero for mono-spaced fonts. Otherwise code that uses them would
- essentially ruin the fixed-advance property.
-
- - Fix CVE-2007-1351 which can cause an integer overflow while
- parsing BDF fonts, leading to a potentially exploitable heap
- overflow condition.
-
-
- II. MISCELLANEOUS
-
- - Fixed compilation issues on some 64-bit platforms (see ChangeLog
- for details).
-
- - A new demo program `ftdiff' has been added to compare TrueType
- hinting, FreeType's auto hinting, and rendering without hinting
- in three columns.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.3.2 and 2.3.1
-
- I. IMPORTANT BUG FIXES
-
- - FreeType returned incorrect kerning information from TrueType
- fonts when the bytecode interpreter was enabled. This happened
- due to a typo introduced in version 2.3.0.
-
- - Negative kerning values from PFM files are now reported
- correctly (they were read as 16-bit unsigned values from the
- file).
-
- - Fixed a small memory leak when `FT_Init_FreeType' failed for
- some reason.
-
- - The Postscript hinter placed and sized very thin and ghost stems
- incorrectly.
-
- - The TrueType bytecode interpreter has been fixed to get rid of
- most of the rare differences seen in comparison to the Windows
- font loader.
-
-
- II. IMPORTANT CHANGES
-
- - The auto-hinter now better deals with serifs and corner cases
- (e.g., glyph '9' in Arial at 9pt, 96dpi). It also improves
- spacing adjustments and doesn't change widths for non-spacing
- glyphs.
-
- - Many Mac-specific functions are deprecated (but still
- available); modern replacements have been provided for them.
- See the documentation in file `ftmac.h'.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.3.1 and 2.3.0
-
- I. IMPORTANT BUG FIXES
-
- - The TrueType interpreter sometimes returned incorrect horizontal
- metrics due to a bug in the handling of the SHZ instruction.
-
- - A typo in a security check introduced after version 2.2.1
- prevented FreeType to render some glyphs in CFF fonts.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.3.0 and 2.2.1
-
- I. IMPORTANT BUG FIXES
-
- - The PCF font loader is now much more robust while loading
- malformed font files.
-
- - Various memory leaks have been found and fixed.
-
- - The TrueType name loader now deals properly with some fonts that
- encode their names in UTF-16 (the specification was vague, and
- the code incorrectly assumed UCS-4).
-
- - Fixed the TrueType bytecode loader to deal properly with subtle
- monochrome/gray issues when scaling the CVT. Some fonts
- exhibited bad rendering artifacts otherwise.
-
- - `FT_GlyphSlot_Embolden' now supports vertical layouts correctly
- (it mangled the vertical advance height).
-
- - Fixed byte endian issues of `ftmac.c' to support Mac OS X on
- i386.
-
- - The PFR font loader no longer erroneously tags font files
- without any outlines as FT_FACE_FLAG_SCALABLE.
-
-
- II. NEW API FUNCTIONS
-
- - `FT_Library_SetLcdFilter' allows you to select a special filter
- to be applied to the bitmaps generated by `FT_Render_Glyph' if
- one of the FT_RENDER_MODE_LCD and FT_RENDER_MODE_LCD_V modes has
- been selected. This filter is used to reduce color fringes;
- several settings are available through the FT_LCD_FILTER_XXX
- enumeration.
-
- Its declaration and documentation can be found in file
- `include/freetype/ftlcdfil.h' (to be accessed with macro
- FT_LCD_FILTER_H).
-
- *IMPORTANT*: This function returns an error
- (FT_Err_Unimplemented_Feature) in default builds of the library
- for patent reasons. See below.
-
- - `FT_Get_Gasp' allows you to query the flags of the TrueType
- `gasp' table for a given character pixel size. This is useful
- to duplicate the text rendering of MS Windows when the native
- bytecode interpreter is enabled (which isn't the default for
- other patent reasons).
-
- Its declaration and documentation can be found in file
- `include/freetype/ftgasp.h' (to be accessed with macro
- FT_GASP_H).
-
-
- III. IMPORTANT CHANGES
-
- - The auto-hinter has been tuned a lot to improve its results with
- serif fonts, resulting in much better font rendering of many web
- pages.
-
- - The unpatented hinter is now part of the default build of the
- library; we have added code to automatically support `tricky'
- fonts that need it.
-
- This means that FreeType should `just work' with certain Asian
- fonts, like MingLiU, which cannot properly be loaded without a
- bytecode interpreter, but which fortunately do not use any of
- the patented bytecode opcodes. We detect these fonts by name,
- so please report any font file that doesn't seem to work with
- FreeType, and we shall do what we can to support it in a next
- release.
-
- Note that the API hasn't changed, so you can still force
- unpatented hinting with a special parameter to `FT_Open_Face' as
- well. This might be useful in same cases; for example, a PDF
- reader might present a user option to activate it to deal with
- certain `tricky' embedded fonts which cannot be clearly
- identified.
-
- If you are a developer for embedded systems, you might want to
- *disable* the feature to save code space by undefining
- TT_CONFIG_OPTION_UNPATENTED_HINTING in file `ftoption.h'.
-
- - LCD-optimized rendering is now *disabled* in all default builds
- of the library, mainly due to patent issues. For more
- information see:
-
- http://lists.gnu.org/archive/html/freetype/2006-09/msg00064.html
-
- A new configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING
- has been introduced in `ftoption.h'; manually define it in this
- file if you want to re-enable the feature.
-
- The change only affects the implementation, not the FreeType
- API. This means that clients don't need to be modified, because
- the library still generates LCD decimated bitmaps, but with the
- added constraint that R=G=B on each triplet.
-
- The displayed result should be equal to normal anti-aliased
- rendering.
-
- Additionally, if FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
- defined, the new `FT_Library_SetLcdFilter' function returns the
- FT_Err_Unimplemented_Feature error code.
-
- - Some computation bugs in the TrueType bytecode interpreter were
- found, which allow us to get rid of very subtle and rare
- differences we had experienced with the Windows renderer.
-
- - It is now possible to cross-compile the library easily. See the
- file `docs/INSTALL.CROSS' for details.
-
- - The file `src/base/ftmac.c' now contains code for Mac OS X only;
- its deprecated function `FT_GetFile_From_Mac_Font_Name' always
- returns an error even if the QuickDraw framework is available.
- The previous version has been moved to `builds/mac/ftmac.c'.
-
- Selecting configure option `--with-quickdraw-carbon' makes the
- build process use the original `ftmac.c' file instead of the Mac
- OS X-only version.
-
-
- IV. MISCELLANEOUS
-
- - Various performance and memory footprint optimizations have been
- performed on the TrueType and CFF font loaders, sometimes with
- very drastic benefits (e.g., the TrueType loader is now about
- 25% faster; FreeType should use less heap memory under nearly
- all conditions).
-
- - The anti-aliased rasterizer has been optimized and is now 15% to
- 25% percent faster than in previous versions, depending on
- content.
-
- - The Type 1 loader has been improved; as an example, it now skips
- top-level dictionaries properly.
-
- - Better support for Mac fonts on POSIX systems, plus compilation
- fixes for Mac OS X on ppc64 where `ftmac.c' cannot be built.
-
- - Configuration without `--with-old-mac-fonts' does not include
- `ftmac.c' (this was the behaviour in FreeType version 2.1.10).
-
- - The TrueTypeGX validator (gxvalid) checks the order of glyph IDs
- in the kern table.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.2.1 and 2.2
-
- I. IMPORTANT BUG FIXES
-
- - Various integer overflows have been fixed.
-
- - PFB fonts with MacOS resource fork weren't handled correctly on
- non-MacOS platforms.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.2 and 2.1.10
-
-(not released officially)
-
- I. IMPORTANT BUG FIXES
-
- - Vertical metrics for SFNT fonts were incorrect sometimes.
-
- - The FT_HAS_KERNING macro always returned 0.
-
- - CFF OpenType fonts didn't return correct vertical metrics for
- glyphs with outlines.
-
- - If FreeType was compiled without hinters, all font formats based
- on PS outlines weren't scaled correctly.
-
-
- II. IMPORTANT CHANGES
-
- - Version 2.2 no longer exposes its internals, this is, the header
- files located in the `include/freetype/internal' directory of
- the source package are not copied anymore by the `make install'
- command. Consequently, a number of rogue clients which directly
- access FreeType's internal functions and structures won't
- compile without modification.
-
- We provide patches for most of those rogue clients. See the
- following page for more information:
-
- http://www.freetype.org/freetype2/patches/rogue-patches.html
-
- Note that, as a convenience to our Unix desktop users, version
- 2.2 is *binary* compatible with FreeType 2.1.7, which means that
- installing this release on an existing distribution shall not
- break any working desktop.
-
- - FreeType's build mechanism has been redesigned. With GNU make
- it is now sufficient in most cases to edit two files:
- `modules.cfg', to select the library components, and the
- configuration file `include/freetype/config/ftoption.h' (which
- can be copied to the objects directory). Removing unused module
- directories to prevent its compilation and editing
- `include/freetype/config/ftmodule.h' is no longer necessary.
-
- - The LIGHT hinting algorithm produces more pleasant results.
- Also, using the FT_LOAD_TARGET_LIGHT flags within FT_Load_Glyph
- always forces auto-hinting, as a special exception. This allows
- you to experiment with it even if you have enabled the TrueType
- bytecode interpreter in your build.
-
- - The auto hinter now employs a new algorithm for CJK fonts, based
- on Akito Hirai's patch. Note that this only works for fonts
- with a Unicode charmap at the moment.
-
- - The following callback function types have changed slightly (by
- adding the `const' keyword where appropriate):
-
- FT_Outline_MoveToFunc
- FT_Outline_LineToFunc
- FT_Outline_ConicToFunc
- FT_Outline_CubicToFunc
- FT_SpanFunc
- FT_Raster_RenderFunc
-
- FT_Glyph_TransformFunc
- FT_Renderer_RenderFunc
- FT_Renderer_TransformFunc
-
- Note that this doesn't affect binary backward compatibility.
-
- - On MacOS, new APIs have been added as replacements for legacy
- APIs: `FT_New_Face_From_FSRef' for `FT_New_Face_From_FSSpec',
- and `FT_GetFile_From_Mac_ATS_Name' for
- `FT_GetFile_From_Mac_Name'. Legacy APIs are still available, if
- FreeType is built without disabling them.
-
- - A new API `FT_Select_Size' has been added to select a bitmap
- strike by its index. Code using other functions to select
- bitmap strikes should be updated to use this function.
-
- - A new API `FT_Get_SubGlyph_Info' has been added to retrieve
- subglyph data. This can be used by rogue clients which used to
- access the internal headers to get the corresponding data.
-
- - In 2.1.10, the behaviour of `FT_Set_Pixel_Sizes' was changed for
- BDF/PCF fonts, and only for them. This causes inconsistency.
- In this release, we undo the change. The intent of the change
- in 2.1.10 is to allow size selection through real dimensions,
- which can now be done through `FT_Request_Size'.
-
- - Some security issues were discovered and fixed in the CFF and
- Type 1 loader, causing crashes of FreeType by malformed font
- files.
-
-
- III. MISCELLANEOUS
-
- - The documentation for FT_LOAD_TARGET_XXX and FT_RENDER_MODE_XXX
- values now better reflects its usage and differences: One set is
- used to specify the hinting algorithm, the other to specify the
- pixel rendering mode.
-
- - `FT_New_Face' and `FT_New_Face_From_FSSpec' in ftmac.c have been
- changed to count supported scalable faces (sfnt, LWFN) only, and
- to return the number of available faces via face->num_faces.
- Unsupported bitmap faces (fbit, NFNT) are ignored.
-
- - builds/unix/configure has been improved for MacOS X. It now
- automatically checks available functions in Carbon library, and
- prepare to use newest functions by default. Options to specify
- the dependencies of each Carbon APIs (FSSpec, FSRef, old/new
- QuickDraw, ATS) are available too. By manual disabling of all
- QuickDraw functionality, FreeType can be built without
- `deprecated function' warnings on MacOS 10.4.x, but
- FT_GetFile_Mac_Name in ftmac.c then is changed to a dummy
- function, and returns an `unimplemented' error. For details see
- builds/mac/README.
-
- - SFNT cmap handling has been improved, mainly to run much faster
- with CJK fonts.
-
- - A new function `FT_Get_TrueType_Engine_Type (declared in
- `FT_MODULE_H') is provided to determine the status of the
- TrueType bytecode interpreter compiled into the library
- (patented, unpatented, unimplemented).
-
- - Vertical metrics of glyphs are synthesized if the font does not
- provide such information. You can tell whether the metrics are
- synthesized or not by checking the FT_FACE_FLAG_VERTICAL flag of
- the face.
-
- - The demo programs `ftview' and `ftstring' have been rewritten
- for better readability. `ftview' has a new switch `-p' to test
- FT_New_Memory_Face (instead of FT_New_Face).
-
- - FreeType now honours bit 1 in the `head' table of TrueType fonts
- (meaning `left sidebearing point at x=0'). This helps with some
- buggy fonts.
-
- - Rudimentary support for Adobe's new `SING Glyphlet' format. See
-
- http://www.adobe.com/products/indesign/sing_gaiji.html
-
- for more information.
-
- - The `ftdump' program from the `ft2demos' bundle now shows some
- information about charmaps. It also supports a new switch `-v'
- to increase verbosity.
-
- - Better AFM support. This includes track kerning support.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.1.10 and 2.1.9
-
- I. IMPORTANT BUG FIXES
-
- - The size comparison for BDF and PCF files could fail sometimes.
-
- - Some CFF files were still not loaded correctly. Patch from
- Derek Noonburg.
-
- - The stroker still had some serious bugs.
-
- - Boris Letocha fixed a bug in the TrueType interpreter: The
- NPUSHW instruction wasn't skipped correctly in IF clauses. Some
- fonts like `Helvetica 75 Bold' failed.
-
- - Another serious bug in handling TrueType hints caused many
- distortions. It has been introduced in version 2.1.8, and it is
- highly recommended to upgrade.
-
- - FreeType didn't properly parse empty Type 1 glyphs.
-
- - An unbound dynamic buffer growth was fixed in the PFR loader.
-
- - Several bugs have been fixed in the cache sub-system.
-
- - FreeType behaved incorrectly when resizing two distinct but very
- close character pixel sizes through `FT_Set_Char_Size' (Savannah
- bug #12263).
-
- - The auto-hinter didn't work properly for fonts without a Unicode
- charmap -- it even refused to load the glyphs.
-
-
- II. IMPORTANT CHANGES
-
- - Many fixes have been applied to drastically reduce the amount of
- heap memory used by FreeType, especially when using
- memory-mapped font files (which is the default on Unix systems
- which support them).
-
- - The auto-hinter has been replaced with a new module, called the
- `auto-fitter'. It consumes less memory than its predecessor,
- and it is prepared to support non-latin scripts better in next
- releases.
-
- - George Williams contributed code to read kerning data from PFM
- files.
-
- - FreeType now uses the TT_NAME_ID_PREFERRED_FAMILY and
- TT_NAME_ID_PREFERRED_SUBFAMILY strings (if available) for
- setting family and style in SFNT fonts (patch from Kornfeld
- Eliyahu Peter).
-
- - A new API `FT_Sfnt_Table_Info' (in FT_TRUETYPE_TABLES_H) has
- been added to retrieve name and size information of SFNT tables.
-
- - A new API `FT_OpenType_Validate' (in FT_OPENTYPE_VALIDATE_H) has
- been added to validate OpenType tables (BASE, GDEF, GPOS, GSUB,
- JSTF). After validation it is no longer necessary to check
- for errors in those tables while accessing them.
-
- Note that this module might be moved to another library in the
- future to avoid a tight dependency between FreeType and the
- OpenType specification.
-
- - A new API in FT_BITMAP_H (`FT_Bitmap_New', `FT_Bitmap_Convert',
- `FT_Bitmap_Copy', `FT_Bitmap_Embolden', `FT_Bitmap_Done') has
- been added. Its use is to convert an FT_Bitmap structure in
- 1bpp, 2bpp, 4bpp, or 8bpp format into another 8bpp FT_Bitmap,
- probably using a different pitch, and to further manipulate it.
-
- - A new API `FT_Outline_Embolden' (in FT_OUTLINE_H) gives finer
- control how outlines are emboldened.
-
- - `FT_GlyphSlot_Embolden' (in FT_SYNTHESIS_H) now handles bitmaps
- also (code contributed by Chia I Wu). Note that this function
- is still experimental and may be replaced with a better API.
-
- - The method how BDF and PCF bitmap fonts are accessed has been
- refined. Formerly, FT_Set_Pixel_Sizes and FT_Set_Char_Size
- were synonyms in FreeType's BDF and PCF interface. This has
- changed now. FT_Set_Pixel_Sizes should be used to select the
- actual font dimensions (the `strike', which is the sum of the
- `FONT_ASCENT' and `FONT_DESCENT' properties), while
- FT_Set_Char_Size selects the `nominal' size (the `PIXELSIZE'
- property). In both functions, the width parameter is ignored.
-
-
- III. MISCELLANEOUS
-
- - The BDF driver no longer converts all returned bitmaps with a
- depth of 2bpp or 4bpp to a depth of 8bpp. The documentation has
- not mentioned this explicitly, but implementors might have
- relied on this after looking into the source files.
-
- - A new option `--ftversion' has been added to freetype-config to
- return the FreeType version.
-
- - The memory debugger has been updated to dump allocation
- statistics on all allocation sources in the library. This is
- useful to spot greedy allocations when loading and processing
- fonts.
-
- - We removed a huge array of constant pointers to constant strings
- in the `psnames' module. The problem was that compilations in
- PIC mode (i.e., when generating a Unix shared object/dll) put
- the array into the non-shared writable section of the library
- since absolute pointers are not relocatable by nature.
-
- This reduces the memory consumption by approximately 16KByte per
- process linked to FreeType. We now also store the array in a
- compressed form (as a trie) which saves about 20KByte of code as
- well.
-
- - Kirill Smelkov provided patches to make src/raster/ftraster.c
- compile stand-alone again.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.1.9 and 2.1.8
-
- I. IMPORTANT BUG FIXES
-
- - The function `FT_Get_CharMap_Index' was only declared, without
- any real code. For consistency, it has been renamed to
- `FT_Get_Charmap_Index'. (This function is needed to implement
- cmap caches.)
-
- - `FT_Outline_Get_BBox' sometimes returned incorrect values for
- conic outlines (e.g., for TrueType fonts).
-
- - Handling of `bhed' table has been fixed.
-
- - The TrueType driver with enabled byte code interpreter sometimes
- returned artifacts due to incorrect rounding. This bug has been
- introduced after version 2.1.4.
-
- - The BDF driver dropped the last glyph in the font.
-
- - The BDF driver now uses the DEFAULT_CHAR property (if available)
- to select a glyph shape for the undefined glyph.
-
- - The stroker failed for closed outlines and single points.
-
-
- II. IMPORTANT CHANGES
-
- - George Williams contributed code to handle Apple's font
- distortion technology found in GX fonts (`avar', `cvar', `fvar',
- and `gvar' tables; the Multiple Masters API has been slightly
- extended to cope with the new functionality).
-
- - The `FT_GlyphSlotRec' structure has been extended: The elements
- `lsb_delta' and `rsb_delta' give the difference between hinted
- and unhinted left and right side bearings if autohinting is
- active. Using those values can improve the inter-letter spacing
- considerably. See the documentation of `FT_GlyphSlotRec' and
- the `ftstring' demo program how to use it.
-
- - Loading TrueType and Type 1 fonts has been made much faster.
-
- - The stroker is no longer experimental (but the cache subsystem
- still is).
-
-
- III. MISCELLANEOUS
-
- - A new documentation file `formats.txt' describes various font
- formats supported (and not supported) by FreeType.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.1.8 and 2.1.7
-
- I. IMPORTANT BUG FIXES
-
- - The native TrueType hinter contained some bugs which prevented
- some fonts to be rendered correctly, most notably Legendum.otf.
-
- - The PostScript hinter now produces improved results.
-
- - The linear advance width and height values were incorrectly
- rounded, making them virtually unusable if not loaded with
- FT_LOAD_LINEAR_DESIGN.
-
- - Indexing CID-keyed CFF fonts is now working: The glyph index is
- correctly treated as a CID, similar to FreeType's CID driver
- module. Note that CID CMap support is still missing.
-
- - The FT_FACE_FLAG_GLYPH_NAMES flag is now set correctly for all
- font formats.
-
- - Some subsetted Type 1 fonts weren't parsed correctly. This bug
- has been introduced in 2.1.7. In summary, the Type 1 parser has
- become more robust.
-
- - Non-decimal numbers weren't parsed correctly in PS fonts.
-
- - The WinFNT driver now correctly reports FT_ENCODING_NONE for all
- but one encoding. Use the new FT_WinFNT_ID_XXX values together
- with `FT_Get_WinFNT_Header' to get the WinFNT charset ID.
-
- - The descender metrics (face->size->metrics.descender) for WinFNT
- bitmap fonts had the wrong sign.
-
- - The (emulated) `seac' support for CFF fonts was broken.
-
- - The `flex' operator didn't work for CFF fonts.
-
- - PS glyphs which use the `hintmask' operator haven't been
- rendered correctly in some cases.
-
- - Metrics for BDF and PCF bitmap font formats have been fixed.
-
- - Autohinting is now disabled for glyphs which are vertically
- distorted or mirrored (using a transformation matrix). This
- fixes a bug which produced zero-height glyphs.
-
- - The `freetype-config' script now handles --prefix and
- --exec-prefix correctly; it also returns the proper --rpath (or
- -R) value if FreeType has been built as a shared library.
-
-
- II. IMPORTANT CHANGES
-
- - Both PCF and BDF drivers now handle the SETWIDTH_NAME and
- ADD_STYLE_NAME properties. Values are appended to
- face->style_name; example: `Bold SemiCondensed'.
-
- - The PCF driver now handles bitmap fonts compressed with the LZW
- algorithm (extension .pcf.Z, compressed with `compress').
-
- - A new API function `FT_Get_CMap_Language_ID' (declared in
- `tttables.h') is available to get the language ID of a
- TrueType/SFNT cmap.
-
- - The hexadecimal format of data after the `StartData' command in
- CID-keyed Type 1 fonts is now supported. While this can't occur
- in file-based fonts, it can happen in document-embedded
- resources of PostScript documents.
-
- - Embedded bitmaps in SFNT-based CFF fonts are now supported.
-
- - A simple API is now available to control FreeType's tracing
- mechanism if compiled with FT_DEBUG_LEVEL_TRACE. See the file
- `ftdebug.h' for more details.
-
- - YAMATO Masatake contributed improved handling of MacOS resource
- forks on non-MacOS platforms (for example, Linux can mount MacOS
- file systems).
-
- - Support for MacOS has been improved; there is now a new function
- `FT_New_Face_From_FSSpec' similar to `FT_New_Face' except that
- it accepts an FSSpec instead of a path.
-
- - The cache sub-system has been rewritten.
-
- - There is now support for deinstallation of faces.
-
- - A new API function `FTC_Manager_RemoveFaceID' has been added
- to delete all `idle' nodes that correspond to a given
- FTC_FaceID. All `locked' nodes (i.e., those with a reference
- count > 0), will be modified to prevent them from appearing in
- further lookups (they will be cleaned normally when their
- reference count reaches 0).
-
- - There is now support for point scaling (i.e., providing
- character sizes in points + dpis, instead of pixels).
-
- - Three abstract cache classes are now available:
-
- FTC_GCache: Used to store one glyph item per cache node,
- with the ability to group common attributes into
- `families'. This replaces the old
- FTC_GlyphCache class.
-
- FTC_ICache: Used to store one FT_Glyph per cache node. This
- extends FTC_GCache. Family definition, family
- comparison, and glyph loading are however left
- to sub-classes.
-
- FTC_SCache: Used to store up to 16 small bitmaps per cache
- node. This extends FTC_GCache. Family
- definition, family comparison and glyph loading
- are however left to sub-classes.
-
- - The file `src/cache/ftcbasic.c' implements:
-
- FTC_ImageCache: Extends FTC_ICache; implements family
- definitions and glyph loading similar to the
- old API.
-
- FTC_SBitCache: Extends FTC_SCache, implements family
- definitions and glyph loading similar to the
- old API
-
- Client applications should be able to extend FTC_GCache,
- FTC_ICache, or FTC_SCache much more easily (i.e., less code to
- write, and less callbacks). For example, one could envision
- caches that are capable of storing transformed (obliqued),
- stroked, emboldened, or colored glyph images. Use
- `ftcbasic.c' as an example.
-
- - All public APIs are now in `include/freetype/ftcache.h', (to
- be accessed as `FT_CACHE_H'). The contents of
- `include/freetype/cache/' is only needed by applications that
- wish to implement their own caches.
-
- - There were some major performance improvements through the use
- of various programming tricks. Cache hits are up to 70%
- faster than in the old code.
-
- - The FTC_CMapCache has been simplified. Charmaps can only be
- accessed by index right now. There is also a new API named
- `FT_Charmap_GetIndex' for this purpose.
-
- - The demo programs have been updated to the new code. The
- previous versions will not work with the current one.
-
- - Using an invalid face index in FT_Open_Face and friends now
- causes an error even if the font contains a single face only.
-
-
- III. MISCELLANEOUS
-
- - Wolfgang Domröse contributed support files for building FreeType
- on the Atari using the PureC compiler. Note that the Atari is a
- 16bit platform.
-
- - Vitaliy Pasternak contributed project files for VS.NET 2003.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.1.7 and 2.1.6
-
- I. IMPORTANT BUG FIXES
-
- - Updated to newest libtool version, fixing build problems on
- various platforms.
-
- - On Unix platforms, `make install' didn't copy the correct
- `ftconfig.h' file.
-
- Note that version 2.1.7 contains the same library C source code as
- version 2.1.6.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.1.6 and 2.1.5
-
- I. IMPORTANT BUG FIXES
-
- - The PFR font driver didn't load kerning tables correctly, and
- the functions in FT_PFR_H didn't work at all.
-
- - Type 1 font files in binary format (PFB) with an end-of-file
- indicator weren't accepted by the FreeType engine.
-
- - Fonts which contain /PaintType and /StrokeWidth no longer cause
- a segfault. This bug has been introduced in version 2.1.5.
-
- - Fonts loaded with FT_LOAD_RENDER no longer cause strange
- results. This bug has been introduced in version 2.1.5.
-
- - Some Windows (bitmap) FNT/FON files couldn't be handled
- correctly.
-
-
- II. IMPORTANT CHANGES
-
- - The internal module API has been heavily changed in favor of
- massive simplifications within the font engine. This also means
- that authors of third-party modules must adapt their code to the
- new scheme.
-
- NOTE: THE NEW SCHEME IS NOT COMPLETED YET. PLEASE WAIT UNTIL A
- FINAL ANNOUNCEMENT!
-
- - The PostScript parser has been enhanced to handle comments and
- strings correctly. Additionally, more syntax forms are
- recognized.
-
- - Added the optional unpatented hinting system for TrueType. It
- allows typefaces which need hinting to produce correct glyph
- forms (e.g., Chinese typefaces from Dynalab) to work acceptably
- without infringing Apple patents. This system is compiled only
- if TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING is defined in
- ftoption.h (activated by default).
-
-
- III. MISCELLANEOUS
-
- - There is now a guard in the public header files to protect
- against inclusion of freetype.h from FreeType 1.
-
- - Direct inclusion of freetype.h and other public header files no
- longer works. You have to use the documented scheme
-
- #include <ft2build.h>
- #include FT_FREETYPE_H
-
- to load freetype.h with a symbolic name. This protects against
- renaming of public header files (which shouldn't happen but
- actually has, avoiding two public header files with the same
- name).
-
-
-======================================================================
-
-CHANGES BETWEEN 2.1.5 and 2.1.4
-
- I. IMPORTANT BUG FIXES
-
- - Parsing the /CIDFontName field now removes the leading slash to
- be in sync with other font drivers.
-
- - gzip support was buggy. Some fonts could not be read.
-
- - Fonts which have nested subglyphs more than one level deep no
- longer cause a segfault.
-
- - Creation of synthetic cmaps for fonts in CFF format was broken
- partially.
-
- - Numeric font dictionary entries for synthetic fonts are no
- longer overwritten.
-
- - The font matrix wasn't applied to the advance width for Type1,
- CID, and CFF fonts. This caused problems when loading certain
- synthetic Type 1 fonts like `Helvetica Narrow'.
-
- - The test for the charset registry in BDF and PCF fonts is now
- case-insensitive.
-
- - FT_Vector_Rotate sometimes returned strange values due to
- rounding errors.
-
- - The PCF driver now returns the correct number of glyphs
- (including an artificial `notdef' glyph at index 0).
-
- - FreeType now supports buggy CMaps which are contained in many
- CJK fonts from Dynalab.
-
- - Opening an invalid font on a Mac caused a segfault due to
- double-freeing memory.
-
- - BDF fonts with more than 32768 glyphs weren't supported
- properly.
-
-
- II. IMPORTANT CHANGES
-
- - Accessing bitmap font formats has been synchronized. To do that
- the FT_Bitmap_Size structure has been extended to contain new
- fields `size', `x_ppem', and `y_ppem'.
-
- - The FNT driver now returns multiple faces, not multiple strikes.
-
- - The `psnames' module has been updated to the Adobe Glyph List
- version 2.0.
-
- - The `psnames' module now understands `uXXXX[X[X]]' glyph names.
-
- - The algorithm for guessing the font style has been improved.
-
- - For fonts in SFNT format, root->height is no longer increased if
- the line gap is zero. There exist fonts (containing e.g. form
- drawing characters) which intentionally have a zero line gap
- value.
-
- - ft_glyph_bbox_xxx flags are now deprecated in favour of
- FT_GLYPH_BBOX_XXX.
-
- - ft_module_xxx flags are now deprecated in favour of
- FT_MODULE_XXX.
-
- - FT_ENCODING_MS_{SJIS,GB2312,BIG5,WANSUNG,JOHAB} are now
- deprecated in favour of
- FT_ENCODING_{SJIS,GB2312,BIG5,WANSUNG,JOHAB} -- those encodings
- are not specific to Microsoft.
-
-
- III. MISCELLANEOUS
-
- - The autohinter has been further improved; for example, `m'
- glyphs now retain its vertical symmetry.
-
- - Partial support of Mac fonts on non-Mac platforms.
-
- - `make refdoc' (after first `make') builds the HTML
- documentation. You need Python for this.
-
- - The make build system should now work more reliably on DOS-like
- platforms.
-
- - Support for EMX gcc and Watson C/C++ compilers on MS-DOS has
- been added.
-
- - Better VMS build support.
-
- - Support for the pkg-config package by providing a `freetype.pc'
- file.
-
- - New configure option --with-old-mac-fonts for Darwin.
-
- - Some source files have been renamed (mainly to fit into the 8.3
- naming scheme).
-
-
-======================================================================
-
-CHANGES BETWEEN 2.1.4 and 2.1.3
-
- I. IMPORTANT BUG FIXES
-
- - Updated to newest libtool version, fixing build problems on
- various platforms.
-
- - A fix in the Gzip stream reader: It couldn't read certain .gz
- files properly due to a small typo. In certain cases, FreeType
- could also loop endlessly when trying to load tiny gzipped
- files.
-
- - The configure script now tries to use the system-wide zlib when
- it finds one (instead of the copy found in src/gzip). And
- `freetype-config' has been updated to return relevant flags in
- this case when invoked with `--libs' (e.g. `-lzlib').
-
- - Certain fonts couldn't be loaded by 2.1.3 because they lacked a
- Unicode charmap (e.g. SYMBOL.TTF). FreeType erroneously
- rejected them.
-
- - The CFF loader was modified to accept fonts which only contain a
- subset of their reference charset. This prevented the correct
- use of PDF-embedded fonts.
-
- - The logic to detect Unicode charmaps has been modified. This is
- required to support fonts which include both 16-bit and 32-bit
- charmaps (like very recent asian ones) using the new 10 and 12
- SFNT formats.
-
- - The TrueType loader now limits the depth of composite glyphs.
- This is necessary to prevent broken fonts to break the engine by
- blowing the stack with recursive glyph definitions.
-
- - The CMap cache is now capable of managing UCS-4 character codes
- that are mapped through extended charmaps in recent
- TrueType/OpenType fonts.
-
- - The cache sub-system now properly manages out-of-memory
- conditions instead of blindly reporting them to the caller.
- This means that it will try to empty the cache before restarting
- its allocations to see if that can help.
-
- - The PFR driver didn't return the list of available embedded
- bitmaps properly.
-
- - There was a nasty memory leak when using embedded bitmaps in
- certain font formats.
-
-
- II. IMPORTANT CHANGES
-
- - David Chester contributed some enhancements to the auto-hinter
- that significantly increase the quality of its output. The
- Postscript hinter was also improved in several ways.
-
- - The FT_RENDER_MODE_LIGHT render mode was implemented.
-
- - A new API function called `FT_Get_BDF_Property' has been added
- to FT_BDF_H to retrieve BDF properties from BDF _and_ PCF font
- files. THIS IS STILL EXPERIMENTAL, since it hasn't been
- properly tested yet.
-
- - A Windows FNT specific API has been added, mostly to access font
- headers. This is used by Wine.
-
- - TrueType tables without an `hmtx' table are now tolerated when
- an incremental interface is used. This happens for certain
- Type42 fonts passed from Ghostscript to FreeType.
-
- - The PFR font driver is now capable of returning the font family
- and style names when they are available (instead of the sole
- `FontID'). This is performed by parsing an *undocumented*
- portion of the font file!
-
-
- III. MISCELLANEOUS
-
- - The path stroker in FT_STROKER_H has entered beta stage. It now
- works very well, but its interface might change a bit in the
- future. More on this in later releases.
-
- - The documentation for FT_Size_Metrics didn't appear properly in
- the API reference.
-
- - The file docs/VERSION.DLL has been updated to explain versioning
- with FreeType (i.e., comparing release/libtool/so numbers, and
- how to use them in autoconf scripts).
-
- - The installation documentation has been seriously revamped.
- Everything is now in the `docs' directory.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.1.3 and 2.1.2
-
- I. IMPORTANT BUG FIXES
-
- - FT_Vector_Transform had been incorrectly modified in 2.1.2,
- resulting in incorrect transformations being applied (for
- example, rotations were processed in opposite angles).
-
- - The format 8 and 12 TrueType charmap enumeration routines have
- been fixed (FT_Get_Next_Char returned invalid values).
-
- - The PFR font driver returned incorrect advance widths if the
- outline and metrics resolution defined in the font file were
- different.
-
- - FT_Glyph_To_Bitmap now returns successfully when called with an
- FT_BitmapGlyph argument (it previously returned an error).
-
- - A bug in the Type 1 loader that prevented valid font bounding
- boxes to be loaded from multiple master fonts.
-
- - The SFNT validation code has been rewritten. FreeType can now
- load `broken' fonts that were usable on Windows, but not with
- previous versions of the library.
-
- - The computation of bearings in the BDF driver has been fixed.
-
- - The Postscript hinter crashed when trying to hint certain glyphs
- (more precisely, when trying to apply hints to an empty glyph
- outline).
-
- - The TrueType glyph loader now supports composites in `Apple
- format' (they differ slightly from Microsoft/OpenType ones in
- the way transformation offsets are computed).
-
- - FreeType was very slow at opening certain asian CID/CFF fonts,
- due to fixed increment in dynamic array re-allocations. This
- has been changed to exponential behaviour to get acceptable
- performance.
-
-
-
- II. IMPORTANT CHANGES
-
- - The PCF driver now supports gzip-compressed font files natively.
- This means that you will be able to use all these bitmap fonts
- that come with XFree86 with FreeType (and libXft/libXft2, by
- extension).
-
- - The automatic and postscript hinters have both been updated.
- This results in a relatively important increase of rendering
- quality since many nasty defaults have been suppressed. Please
- visit the web page:
-
- http://www.freetype.org/hinting/smooth-hinting.html
-
- for additional details on this topic.
-
- - The `load_flags' parameter of `FT_Load_Glyph' is now an FT_Int32
- (instead of just being an FT_Int). This breaks source and
- binary compatibility for 16bit systems only, while retaining
- both of them for 32 and 64 bit ones.
-
- Some new flags have been added consequently:
-
- FT_LOAD_NO_AUTOHINT :: Disable the use of the auto-hinter
- (but not native format hinters).
-
- FT_LOAD_TARGET_NORMAL :: Hint and render for normal
- anti-aliased displays.
-
- FT_LOAD_TARGET_MONO :: Hint and render for 1-bit displays.
-
- FT_LOAD_TARGET_LCD :: Hint and render for horizontal RGB or
- BGR sub-pixel displays (like LCD
- screens). THIS IS STILL
- EXPERIMENTAL!
-
- FT_LOAD_TARGET_LCD_V :: Same as FT_LOAD_TARGET_LCD, for
- vertical sub-pixel displays (like
- rotated LCD screens). THIS IS STILL
- EXPERIMENTAL!
-
- FT_LOAD_MONOCHROME is still supported, but only affects
- rendering, not the hinting.
-
- Note that the `ftview' demo program available in the `ft2demos'
- package has been updated to support LCD-optimized display on
- non-paletted displays (under Win32 and X11).
-
- - The PFR driver now supports embedded bitmaps (all formats
- supported), and returns correct kerning metrics for all glyphs.
-
- - The TrueType charmap loader now supports certain `broken' fonts
- that load under Windows without problems.
-
- - The cache API has been slightly modified (it's still a beta!):
-
- - The type FTC_ImageDesc has been removed; it is now replaced
- by FTC_ImageTypeRec. Note that one of its fields is a
- `load_flag' parameter for FT_Load_Glyph.
-
- - The field `num_grays' of FT_SBitRec has been changed to
- `max_grays' in order to fit within a single byte. Its
- maximum value is thus 255 (instead of 256 as previously).
-
-
- III. MISCELLANEOUS
-
- - Added support for the DESTDIR variable during `make install'.
- This simplifies packaging of FreeType.
-
- - Included modified copies of the ZLib sources in `src/gzip' in
- order to support gzip-compressed PCF fonts. We do not use the
- system-provided zlib for now, though this is a probable
- enhancement for future releases.
-
- - The DocMaker tool used to generate the on-line API reference has
- been completely rewritten. It is now located in
- `src/tools/docmaker/docmaker.py'. Features:
-
- - better cross-referenced output
- - more polished output
- - uses Python regular expressions (though it didn't speed the
- program)
- - much more modular structure, which allows for different
- `backends' in order to generate HTML, XML, or whatever
- format.
-
- One can regenerate the API reference by calling:
-
- python src/tools/docmaker/docmaker.py \
- --prefix=ft2 \
- --title=FreeType-2.1.3 \
- --output=<outputdirectory>
- include/freetype/*.h \
- include/freetype/config/*.h \
- include/freetype/cache/*.h
-
- - A new, experimental, support for incremental font loading (i.e.,
- loading of fonts where the glyphs are not in the font file
- itself, but provided by an external component, like a Postscript
- interpreter) has been added by Graham Asher. This is still work
- in progress, however.
-
- - A new, EXPERIMENTAL, path stroker has been added. It doesn't
- suffer from severe rounding errors and treat bezier arcs
- directly. Still work in progress (i.e. not part of the official
- API). See the file <freetype/ftstroker.h> for some of the
- details.
-
- - The massive re-formatting of sources and internal re-design is
- still under-way. Many internal functions, constants, and types
- have been renamed.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.1.2 and 2.1.1
-
- I. IMPORTANT BUG FIXES
-
- - Many font drivers didn't select a Unicode charmap by default
- when a new face was opened (with the FT_CONFIG_OPTION_USE_CMAPS
- options enabled), causing many applications to not be able to
- display text correctly with the 2.1.x releases.
-
- - The PFR driver had a bug in its composite loading code that
- produces incorrectly placed accents with many fonts.
-
- - The Type42 driver crashed sometimes due to a nasty bug.
-
- - The Type 1 custom encoding charmap didn't handle the case where
- the first glyph index wasn't 0.
-
- - A serious typo in the TrueType composite loader produced
- incorrectly placed glyphs in fonts like `Wingdings' and a few
- others.
-
-
- II. MISCELLANEOUS
-
- - The Win32 Visual C++ project file has been updated to include
- the PFR driver as well.
-
- - `freetype.m4' is now installed by default by `make install' on
- Unix systems.
-
- - The function FT_Get_PS_Font_Info now works with CID and Type42
- fonts as well.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.1.1 and 2.1.0
-
- I. IMPORTANT BUG FIXES
-
- - The `version_info' returned by `freetype-config' in 2.1.0
- returned an invalid value. It now returns 9:1:3 (2.0.9 returned
- 9:0:3).
-
- - Version 2.1.0 couldn't be linked against applications on Win32
- and Amiga systems due to a new debug function that wasn't
- properly propagated to the system-specific directory in
- `builds'.
-
- - Various MacOS and Mac OS X specific fixes.
-
- - Fixed a bug in the TrueType charmap validation routines that
- made version 2.1.0 too restrictive -- many popular fonts have
- been rejected.
-
- - There was still a very small difference between the monochrome
- glyph bitmaps produced by FreeType 1.x and FreeType 2.x with the
- bytecode interpreter enabled. This was caused by an invalid
- flag setting in the TrueType glyph loader, making the rasterizer
- change its drop-out control mode. Now the results should
- _really_ be completely identical.
-
- - The TrueType name table loader has been improved to support many
- popular though buggy Asian fonts. It now ignores empty name
- entries, invalid pointer offsets and a few other incorrect
- subtleties. Moreover, name strings are now loaded on demand,
- which reduces the memory load of many faces (e.g. the ARIAL.TTF
- font file contains a 10kByte name table with 70 names).
-
- - Fixed a bug in the Postscript hinter that prevented family blues
- substitution to happen correctly.
-
-
- II. NEW FEATURES
-
- - Three new font drivers in this release:
-
- * A BDF font driver, contributed by Franco Zappa Nardelli,
- heavily modified by Werner Lemberg. It also supports
- anti-aliased bitmaps (using a slightly extended BDF format).
-
- * A Type42 font driver, contributed by Roberto Alameda. It is
- still experimental but seems to work relatively well.
-
- * A PFR font driver, contributed by David Turner himself. It
- doesn't support PFR hinting -- note that BitStream has at
- least two patents on this format!
-
-
- III. MISCELLANEOUS
-
- - The cache sub-system has been optimized in important ways.
- Cache hits are now significantly faster. For example, using the
- CMap cache is about twice faster than calling FT_Get_Char_Index
- on most platforms. Similarly, using an SBit cache is about five
- times faster than loading the bitmaps from a bitmap file, and
- 300 to 500 times faster than generating them from a scalable
- format.
-
- Note that you should recompile your sources if you designed a
- custom cache class for the FT2 Cache subsystem, since the
- changes performed are source, but not binary, compatible.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.1.0 and 2.0.9
-
- I. IMPORTANT BUG FIXES
-
- - The TrueType bytecode interpreter has been fixed to produce
- _exactly_ the same output as FreeType 1.x. Previous differences
- were due to slightly distinct fixed-point computation routines
- used to perform dot products and vector length measurements.
-
- It seems that native TrueType hinting is _extremely_ sensitive
- to rounding errors. The required vector computation routines
- have been optimized and placed within the `ttinterp.c' file.
-
- - Fixed the parsing of accelerator tables in the PCF font driver.
-
- - Fixed the Type1 glyph loader routine used to compute the font's
- maximum advance width.
-
-
- II. NEW FEATURES
-
- - The `configure' script used on Unix systems has been modified to
- check that GNU Make is being used to build the library.
- Otherwise, it will display a message proposing to use the
- GNUMAKE environment variable to name it.
-
- The Unix-specific file README.UNX has been modified accordingly.
-
-
- III. MISCELLANEOUS
-
- - The FreeType License in `docs/FTL.TXT' has been updated to
- include a proposed preferred disclaimer. If you are using
- FreeType in your products, you are encouraged (but not mandated)
- to use the following text in your documentation:
-
- """
- Portions of this software are copyright © 1996-2002 The
- FreeType Project (www.freetype.org). All rights reserved.
- """
-
- - The default size of the render pool has been reduced to 16kByte.
- This shouldn't result in any noticeable performance penalty,
- unless you are using the engine as-is to render very large and
- complex glyphs.
-
- - The FreeType 2 redesign has begun. More information can be
- found at this URL:
-
- http://www.freetype.org/freetype2/redesign.html
-
- The following internal changes have been performed within the
- sources of this release:
-
- - Many internal types have been renamed to increase
- consistency. The following should be true, except for
- public types:
-
- * All structure types have a name ending in `Rec' (short
- for `record').
-
- * A pointer-to-structure type has the same name as the
- structure, _without_ the `Rec' suffix.
-
- Example:
-
- typedef struct FooRec_
- {
- ...
-
- } FooRec, *Foo;
-
- - Many internal macros have been renamed to increase
- consistency. The following should be true:
-
- * All macros have a name beginning with `FT_'. This
- required a few changes like
-
- ALLOC => FT_ALLOC
- FREE => FT_FREE
- REALLOC => FT_REALLOC
-
- * All macros are completely UPPERCASE. This required a
- few changes like:
-
- READ_Short => FT_READ_SHORT
- NEXT_Short => FT_NEXT_SHORT
- GET_ULongLE => FT_GET_ULONG_LE
- MEM_Set => FT_MEM_SET
- MEM_Copy => FT_MEM_COPY
- etc.
-
- * Whenever possible, all macro names follow the
- FT_<OBJECT>_<METHOD> pattern. For example
-
- ACCESS_Frame => FT_FRAME_ENTER
- FORGET_Frame => FT_FRAME_EXIT
- EXTRACT_Frame => FT_FRAME_EXTRACT
- RELEASE_Frame => FT_FRAME_RELEASE
-
- FILE_Pos => FT_STREAM_POS
- FILE_Seek => FT_STREAM_SEEK
- FILE_Read => FT_STREAM_READ
- FILE_ReadAt => FT_STREAM_READ_AT
- READ_Fields => FT_STREAM_READ_FIELDS
-
- - Many internal functions have been renamed to follow the
- FT_<Object>_<Method> pattern. For example:
-
- FT_Seek_Stream => FT_Stream_Seek
- FT_Read_Stream_At => FT_Stream_ReadAt
- FT_Done_Stream => FT_Stream_Close
- FT_New_Stream => FT_Stream_Open
- FT_New_Memory_Stream => FT_Stream_OpenMemory
- FT_Extract_Frame => FT_Stream_ExtractFrame
-
- Note that method names do not contain `_'.
-
- - The FT_ALLOC_ARRAY and FT_REALLOC_ARRAY have been replaced
- with FT_NEW_ARRAY and FT_RENEW_ARRAY which do not take a
- type as the fourth argument. Instead, the array element
- type size is computed automatically from the type of the
- target pointer used.
-
- - A new object class, FT_CMap, has been introduced. These
- internal objects are used to model character maps. This
- eases the support of additional charmap types within the
- engine.
-
- - A new configuration file named `ftstdlib.h' has been added
- to `include/freetype/config'. It is used to define aliases
- for _every_ routine of the ISO C library that the font
- engine uses. Each aliases has a `ft_' prefix
- (e.g. `ft_strlen' is an alias for `strlen').
-
- This is used to ease the porting of FreeType 2 to exotic
- runtime environments where the ISO C Library isn't available
- (e.g. XFree86 extension modules).
-
- More details are available in the `ChangeLog' file.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.0.9 and 2.0.8
-
- I. IMPORTANT BUG FIXES
-
- - Certain fonts like `foxjump.ttf' contain broken name tables with
- invalid entries and wild offsets. This caused FreeType to crash
- when trying to load them.
-
- The SFNT `name' table loader has been fixed to be able to
- support these strange fonts.
-
- Moreover, the code in charge of processing this table has been
- changed to always favour Windows-formatted entries over other
- ones. Hence, a font that works on Windows but not on the Mac
- will load cleanly in FreeType and report accurate values for
- Family & PostScript names.
-
- - The CID font driver has been fixed. It unfortunately returned a
- Postscript Font name with a leading slash, as in
- `/MunhwaGothic-Regular'.
-
- - FreeType 2 should now compile fine on AIX 4.3.3 as a shared
- library.
-
- - A bug in the Postscript hinter has been found and fixed,
- removing un-even stem widths at small pixel sizes (like 14-17).
-
- This improves the quality of a certain number of Postscript
- fonts.
-
-
- II. NEW FEATURES
-
- - A new function named `FT_Library_Version' has been added to
- return the current library's major, minor, and patch version
- numbers. This is important since the macros FREETYPE_MAJOR,
- FREETYPE_MINOR, and FREETYPE_PATCH cannot be used when the
- library is dynamically linked by a program.
-
- - Two new APIs have been added: `FT_Get_First_Char' and
- `FT_Get_Next_Char'.
-
- Together, these can be used to iterate efficiently over the
- currently selected charmap of a given face. Read the API
- reference for more details.
-
-
- III. MISCELLANEOUS
-
- - The FreeType sources are under heavy internal re-factoring. As
- a consequence, we have created a branch named `STABLE' on the
- CVS to hold all future releases/fixes in the 2.0.x family.
-
- The HEAD branch now contains the re-factored sources and
- shouldn't be used for testing or packaging new releases. In
- case you would like to access the 2.0.9 sources from our CVS
- repository, use the tag `VER-2-0-9'.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.0.8 and 2.0.7
-
- I. IMPORTANT BUG FIXES
-
- - There was a small but nasty bug in `freetype-config.in' which
- caused the `freetype-config' script to fail on Unix.
-
- This didn't prevent the installation of the library or even its
- execution, but caused problems when trying to compile many Unix
- packages that depend on it.
-
- - Some TrueType or OpenType fonts embedded in PDF documents do not
- have a 'cmap', 'post' and 'name' as is required by the
- specification. FreeType no longer refuses to load such fonts.
-
- - Various fixes to the PCF font driver.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.0.7 and 2.0.6
-
- I. IMPORTANT BUG FIXES
-
- - Fixed two bugs in the Type 1 font driver. The first one
- resulted in a memory leak in subtle cases. The other one caused
- FreeType to crash when trying to load `.gsf' files (Ghostscript
- so-called Postscript fonts).
-
- (This made _many_ KDE applications crash on certain systems.
- FreeType _is_ becoming a critical system component on Linux :-)
-
- - Fixed a memory leak in the CFF font driver.
-
- - Fixed a memory leak in the PCF font driver.
-
- - Fixed the Visual C++ project file
- `builds/win32/visualc/freetype.dsp' since it didn't include the
- Postscript hinter component, causing errors at build time.
-
- - Fixed a small rendering bug in the anti-aliased renderer that
- only occurred when trying to draw thin (less than 1 pixel)
- strokes.
-
- - Fixed `builds/unix/freetype2.a4' which is used to generate a
- valid `freetype2.m4' for use with autoconf.
-
- - Fixed the OpenVMS Makefiles.
-
-
- II. MISCELLANEOUS
-
- - Added `configure' and `install' scripts to the top-level
- directory. A GNU-style installation is thus now easily possible
- with
-
- ./configure <options>
- make
- make install
-
-
-======================================================================
-
-CHANGES BETWEEN 2.0.6 and 2.0.5
-
- I. IMPORTANT BUG FIXES
-
- - It wasn't possible to load embedded bitmaps when the auto-hinter
- was used. This is now fixed.
-
- - The TrueType font driver didn't load some composites properly
- (the sub-glyphs were slightly shifted, and this was only
- noticeable when using monochrome rendering).
-
- - Various fixes to the auto-hinter. They merely improve the
- output of sans-serif fonts. Note that there are still problems
- with serifed fonts and composites (accented characters).
-
- - All scalable font drivers erroneously returned un-fitted glyph
- advances when hinting was requested. This created problems for
- a number of layout applications. This is a very old bug that
- got undetected mainly because most test/demo program perform
- rounding explicitly or implicitly (through the cache).
-
- - `FT_Glyph_To_Bitmap' did erroneously modify the source glyph in
- certain cases.
-
- - `glnames.py' still contained a bug that made FreeType return
- invalid names for certain glyphs.
-
- - The library crashed when loading certain Type 1 fonts like
- `sadn.pfb' (`Stalingrad Normal'), which appear to contain
- pathetic font info dictionaries.
-
- - The TrueType glyph loader is now much more paranoid and checks
- everything when loading a given glyph image. This was necessary
- to avoid problems (crashes and/or memory overwrites) with broken
- fonts that came from a really buggy automatic font converter.
-
-
- II. IMPORTANT UPDATES AND NEW FEATURES
-
- - Important updates to the Mac-specific parts of the library.
-
- - The caching sub-system has been completely re-designed, and its
- API has evolved (the old one is still supported for backward
- compatibility).
-
- The documentation for it is not yet completed, sorry. For now,
- you are encouraged to continue using the old API. However, the
- ftview demo program in the ft2demos package has already been
- updated to use the new caching functions.
-
- - A new charmap cache is provided too. See `FTC_CMapCache'. This
- is useful to perform character code -> glyph index translations
- quickly, without the need for an opened FT_Face.
-
- - A NEW POSTSCRIPT HINTER module has been added to support native
- hints in the following formats: PostScript Type 1, PostScript
- CID, and CFF/CEF.
-
- Please test! Note that the auto-hinter produces better results
- for a number of badly-hinted fonts (mostly auto-generated ones)
- though.
-
- - A memory debugger is now part of the standard FreeType sources.
- To enable it, define FT_DEBUG_MEMORY in
- <freetype/config/ftoption.h>, and recompile the library.
-
- Additionally, define the _environment_ variable FT_DEBUG_MEMORY
- and run any program using FreeType. When the library is exited,
- a summary of memory footprints and possible leaks will be
- displayed.
-
- This works transparently with _any_ program that uses FreeType.
- However, you will need a lot of memory to use this (allocated
- blocks are never released to the heap to detect double deletes
- easily).
-
-
- III. MISCELLANEOUS
-
- - We are aware of subtle differences between the output of
- FreeType versions 1 and 2 when it comes to monochrome
- TrueType-hinted glyphs. These are most probably due to small
- differences in the monochrome rasterizers and will be worked out
- in an upcoming release.
-
- - We have decided to fork the sources in a `stable' branch, and an
- `unstable' one, since FreeType is becoming a critical component
- of many Unix systems.
-
- The next bug-fix releases of the library will be named 2.0.7,
- 2.0.8, etc., while the `2.1' branch will contain a version of
- the sources where we will start major reworking of the library's
- internals, in order to produce FreeType 2.2.0 (or even 3.0) in a
- more distant future.
-
- We also hope that this scheme will allow much more frequent
- releases than in the past.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.0.5 and 2.0.4
-
- NOTE THAT 2.0.5 DOES NOT CONTAIN THE POSTSCRIPT HINTER. THIS MODULE
- WILL BE PART OF THE NEXT RELEASE (EITHER 2.0.6 or 2.1)
-
- - Fixed a bug that made certain glyphs, like `Cacute', `cacute' and
- `lslash' unavailable from Unicode charmaps of Postscript fonts.
- This prevented the correct display of Polish text, for example.
-
- - The kerning table of Type 1 fonts was loaded by FreeType, when its
- AFM file was attached to its face, but the
- FT_FACE_FLAG_HAS_KERNING bit flags was not set correctly,
- preventing FT_Get_Kerning to return meaningful values.
-
- - Improved SFNT (TrueType & OpenType) charmap support. Slightly
- better performance, as well as support for the new formats defined
- by the OpenType 1.3 specification (8, 10, and 12)
-
- - Fixed a serious typo in `src/base/ftcalc.c' which caused invalid
- computations in certain rare cases, producing ugly artefacts.
-
- - The size of the EM square is computed with a more accurate
- algorithm for Postscript fonts. The old one caused slight errors
- with embedded fonts found in PDF documents.
-
- - Fixed a bug in the cache manager that prevented normal LRU
- behaviour within the cache manager, causing unnecessary reloads
- (for FT_Face and FT_Size objects only).
-
- - Added a new function named `FT_Get_Name_Index' to retrieve the
- glyph index of a given glyph name, when found in a face.
-
- - Added a new function named `FT_Get_Postscript_Name' to retrieve
- the `unique' Postscript font name of a given face.
-
- - Added a new public header size named FT_SIZES_H (or
- <freetype/ftsizes.h>) providing new FT_Size-management functions:
- FT_New_Size, FT_Activate_Size, FT_Done_Size.
-
- - Fixed a reallocation bug that generated a dangling pointer (and
- possibly memory leaks) with Postscript fonts (in
- src/psaux/psobjs.c).
-
- - Many fixes for 16-bit correctness.
-
- - Removed many pedantic compiler warnings from the sources.
-
- - Added an Amiga build directory in `builds/amiga'.
-
-
-======================================================================
-
-CHANGES BETWEEN 2.0.4 and 2.0.3
-
- - Fixed a rather annoying bug that was introduced in 2.0.3. Namely,
- the font transformation set through FT_Set_Transform was applied
- twice to auto-hinted glyphs, resulting in incorrectly rotated text
- output.
-
- - Fixed _many_ compiler warnings. FT2 should now compile cleanly
- with Visual C++'s most pedantic warning level (/W4). It already
- compiled fine with GCC and a few other compilers.
-
- - Fixed a bug that prevented the linear advance width of composite
- TrueType glyphs to be correctly returned.
-
- - Fixed the Visual C++ project files located in
- `builds/win32/visualc' (previous versions used older names of the
- library).
-
- - Many 32-bit constants have an `L' appended to their value, in
- order to improve the 16-bitness of the code. Someone is actually
- trying to use FT2 on an Atari ST machine!
-
- - Updated the `builds/detect.mk' file in order to automatically
- build FT2 on AIX systems. AIX uses `/usr/sbin/init' instead of
- `/sbin/init' and wasn't previously detected as a Unix platform by
- the FreeType build system.
-
- - Updated the Unix-specific portions of the build system (new
- libtool version, etc.).
-
- - The SFNT kerning loader now ensures that the table is sorted
- (since some problem fonts do not meet this requirement).
-
-
-=======================================================================
-
-CHANGES BETWEEN 2.0.3 and 2.0.2
-
- I. CHANGES TO THE MODULES / FONT DRIVERS
-
- - THE AUTO-HINTER HAS BEEN SLIGHTLY IMPROVED, in order to fix
- several annoying artefacts, mainly:
-
- - Blue zone alignment of horizontal stems wasn't performed
- correctly, resulting in artefacts like the `d' being placed
- one pixel below the `b' in some fonts like Time New Roman.
-
- - Overshoot thresholding wasn't performed correctly, creating
- unpleasant artefacts at large character pixel sizes.
-
- - Composite glyph loading has been simplified. This gets rid
- of various artefacts where the components of a composite
- glyphs were not correctly spaced.
-
- These are the last changes to the current auto-hinting module.
- A new hinting sub-system is currently in the work in order to
- support native hints in Type 1 / CFF / OpenType fonts, as well
- as globally improve rendering.
-
- - The PCF driver has been fixed. It reported invalid glyph
- dimensions for the fonts available on Solaris.
-
- - The Type 1, CID and CFF drivers have been modified to fix the
- computation of the EM size.
-
- - The Type 1 driver has been fixed to avoid a dangerous bug that
- crashed the library with non-conforming fonts (i.e. ones that do
- not place the .notdef glyph at position 0).
-
- - The TrueType driver had a rather subtle bug (dangling pointer
- when loading composite glyphs) that could crash the library in
- rare occasions!
-
-
- II. HIGH-LEVEL API CHANGES
-
- - The error code enumeration values have been changed. An error
- value is decomposed in a generic error code, and a module
- number. see <freetype/fterrors.h> for details.
-
- - A new public header file has been introduced, named
- FT_TRIGONOMETRY_H (include/freetype/fttrigon.h), providing
- trigonometric functions to compute sines, cosines, arctangents,
- etc. with 16.16 fixed precision. The implementation is based on
- the CORDIC algorithm and is very fast while being sufficiently
- accurate.
-
-
- III. INTERNALS
-
- - Added BeOS-specific files in the old build sub-system. Note
- that no changes were required to compile the library with Jam.
-
- - The configuration is now capable of automatically detecting
- 64-bit integers on a set of predefined compilers (GCC, Visual
- C++, Borland C++) and will use them by default. This provides a
- small performance boost.
-
- - A small memory leak that happened when opening 0-sized files
- (duh!) have been fixed.
-
- - Fixed bezier stack depth bug in the routines provided by the
- FT_BBOX_H header file. Also fixed similar bugs in the
- rasterizers.
-
- - The outline bounding box code has been rewritten to use direct
- computations, instead of bezier sub-division, to compute the
- exact bounding box of glyphs. This is slightly slower but more
- accurate.
-
- - The build system has been improved and fixed, mainly to support
- `make' on Windows 2000 correctly, avoid problems with `make
- distclean' on non Unix systems, etc.
-
- - Hexadecimal constants have been suffixed with `U' to avoid
- problems with certain compilers on 64-bit platforms.
-
- - A new directory named `src/tools' has been created. It contains
- Python scripts and simple unit test programs used to develop the
- library.
-
- - The DocMaker tool has been moved from `docs' to `src/tools' and
- has been updated with the following:
-
- - Now accepts the `--title=XXXX' or `-t XXXX' option from the
- command line to set the project's name in the generated API
- reference.
-
- - Now accepts the `--output=DIR' or `-o DIR' option from the
- command line to set the output directory for all generated
- HTML files.
-
- - Now accepts the `--prefix=XXXX' or `-p XXX' option from the
- command line to set the file prefix to use for all
- generated HTML files.
-
- - Now generates the current time/data on each generated page
- in order to distinguish between versions.
-
- DocMaker can be used with other projects now, not only FT2
- (e.g. MLib, FTLayout, etc.).
-
-
-======================================================================
-
-CHANGES BETWEEN 2.0.2 and 2.0.1
-
- I. CHANGES TO THE MODULES / FONT DRIVERS
-
- - THE TRUETYPE BYTECODE INTERPRETER IS NOW TURNED OFF, in order to
- avoid legal problems with the Apple patents. It seems that we
- mistakenly turned this option on in previous releases of the
- build.
-
- Note that if you want to use the bytecode interpreter in order
- to get high-quality TrueType rendering, you will need to toggle
- by hand the definition of the
- TT_CONFIG_OPTION_BYTECODE_INTERPRETER macro in the file
- `include/freetype/config/ftoption.h'.
-
- - The CFF driver has been improved by Tom Kacvinsky and Sander van
- der Wal:
-
- * Support for `seac' emulation.
- * Support for `dotsection'.
- * Support for retrieving glyph names through
- `FT_Get_Glyph_Name'.
-
- The first two items are necessary to correctly a large number of
- Type 1 fonts converted to the CFF formats by Adobe Acrobat.
-
- - The Type 1 driver was also improved by Tom & others:
-
- * Better EM size computation.
- * Better support for synthetic (transformed) fonts.
- * The Type 1 driver returns the charstrings corresponding to
- each glyph in the `glyph->control_data' field after a call to
- `FT_Load_Glyph' (thanks Ha Shao).
-
- - Various other bugfixes, including the following:
-
- * Fixed a nasty memory leak in the Type 1 driver.
- * The autohinter and the pcf driver used static writable data
- when they shouldn't.
- * Many casts were added to make the code more 64-bits safe. It
- also now compiles on Windows XP 64-bits without warnings.
- * Some incorrect writable statics were removed in the `autohint'
- and `pcf' drivers. FreeType 2 now compiles on Epoc again.
-
-
- II. CHANGES TO THE HIGH-LEVEL API
-
- - The library header files inclusion scheme has been changed. The
- old scheme looked like:
-
- #include <freetype/freetype.h>
- #include <freetype/ftglyph.h>
- #include <freetype/ftcache.h>
- #include <freetype/cache/ftimage.h>
-
- Now you should use:
-
- #include <ft2build.h>
- #include FT_FREETYPE_H
- #include FT_GLYPH_H
- #include FT_CACHE_H
- #include FT_CACHE_IMAGE_H
-
- NOTE THAT THE OLD INCLUSION SCHEME WILL STILL WORK WITH THIS
- RELEASE. HOWEVER, WE DO NOT GUARANTEE THAT THIS WILL STILL BE
- TRUE IN THE NEXT ONE (A.K.A. FREETYPE 2.1).
-
- The file <ft2build.h> is used to define the header filename
- macros. The complete and commented list of macros is available
- in the API reference under the section name `Header File Macros'
- in Chapter I.
-
- For more information, see section I of the following document:
-
- http://www.freetype.org/
- freetype2/docs/tutorial/step1.html
-
- or
-
- http://freetype.sourceforge.net/
- freetype2/docs/tutorial/step1.html
-
- - Many, many comments have been added to the public source file in
- order to automatically generate the API Reference through the
- `docmaker.py' Python script.
-
- The latter has been updated to support the grouping of sections
- in chapters and better index sort. See:
-
- http://www.freetype.org/freetype2/docs/reference/ft2-toc.html
-
-
- III. CHANGES TO THE BUILD PROCESS
-
- - If you are not building FreeType 2 with its own build system
- (but with your own Makefiles or project files), you will need to
- be aware that the build process has changed a little bit.
-
- You don't need to put the `src' directory in the include path
- when compiling any FT2 component. Instead, simply put the
- component's directory in the current include path.
-
- So, if you were doing something like:
-
- cc -c -Iinclude -Isrc src/base/ftbase.c
-
- change the line to:
-
- cc -c -Iinclude -Isrc/base src/base/ftbase.c
-
- If you were doing something like:
-
- cd src/base
- cc -c -I../../include -I.. ftbase.c
-
- change it to:
-
- cd src/base
- cc -c -I../../include ftbase.c
-
-
-======================================================================
-
-CHANGES BETWEEN 2.0.1 and 2.0
-
- 2.0.1 introduces a few changes:
-
- - Fixed many bugs related to the support of CFF / OpenType fonts.
- These formats are now much better supported though there is
- still work planned to deal with charset tables and PDF-embedded
- CFF files that use the old `seac' command.
-
- - The library could not be compiled in debug mode with a very
- small number of C compilers whose pre-processors didn't
- implement the `##' directive correctly (i.e. per se the ANSI C
- specification!) An elegant fix was found.
-
- - Added support for the free Borland command-line C++ Builder
- compiler. Use `make setup bcc32'. Also fixed a few source
- lines that generated new warnings with BCC32.
-
- - Fixed a bug in FT_Outline_Get_BBox when computing the extrema of
- a conic Bezier arc.
-
- - Updated the INSTALL file to add IDE compilation.
-
- - Other minor bug fixes, from invalid Type 1 style flags to
- correct support of synthetic (obliqued) fonts in the
- auto-hinter, better support for embedded bitmaps in a SFNT font.
-
- - Fixed some problems with `freetype-config'.
-
- Finally, the `standard' scheme for including FreeType headers is now
- gradually changing, but this will be explained in a later release
- (probably 2.0.2).
-
- And very special thanks to Tom Kacvinsky and YAMANO-UCHI Hidetoshi
- for their contributions!
-
-
-======================================================================
-
-CHANGES BETWEEN beta8 and 2.0
-
- - Changed the default installation path for public headers from
- `include/freetype' to `include/freetype2'.
-
- Also added a new `freetype-config' that is automatically generated
- and installed on Unix and Cygwin systems. The script itself is
- used to retrieve the current install path, C compilation flags as
- well as linker flags.
-
- - Fixed several small bugs:
-
- * Incorrect max advance width for fixed-pitch Type 1 fonts.
- * Incorrect glyph names for certain TrueType fonts.
- * The glyph advance was not copied when FT_Glyph_To_Bitmap was
- called.
- * The linearHoriAdvance and linearVertAdvance fields were not
- correctly returned for glyphs processed by the auto-hinter.
- * `type1z' renamed back to `type1'; the old `type1' module has
- been removed.
-
- - Revamped the build system to make it a lot more generic. This
- will allow us to re-use nearly un-modified in lots of other
- projects (including FreeType Layout).
-
- - Changed `cid' to use `psaux' too.
-
- - Added the cache sub-system. See <freetype/ftcache.h> as well as
- the sources in `src/cache'. Note that it compiles but is still
- untested for now.
-
- - Updated `docs/docmaker.py', a draft API reference is available at
- http://www.freetype.org/ft2api.html.
-
- - Changed `type1' to use `psaux'.
-
- - Created a new module named `psaux' to hold the Type 1 & Type 2
- parsing routines. It should be used by `type1', `cid', and `cff'
- in the future.
-
- - Fixed an important bug in `FT_Glyph_Get_CBox'.
-
- - Fixed some compiler warnings that happened since the TrueType
- bytecode decoder was deactivated by default.
-
- - Fixed two memory leaks:
-
- * The memory manager (16 bytes) isn't released in
- FT_Done_FreeType!
- * Using custom input streams, the copy of the original stream was
- never released.
-
- - Fixed the auto-hinter by performing automatic computation of the
- `filling direction' of each glyph. This is done through a simple
- and fast approximation, and seems to work (problems spotted by
- Werner though). The Arphic fonts are a lot nicer though there are
- still a lot of things to do to handle Asian fonts correctly.
-
-
-======================================================================
-
-BETA-8 (RELEASE CANDIDATE) CHANGES
-
- - Deactivated the TrueType bytecode interpreter by default.
-
- - Deactivated the `src/type1' font driver. Now `src/type1z' is used
- by default.
-
- - Updates to the build system. We now compile the library correctly
- under Unix system through `configure' which is automatically
- called on the first `make' invocation.
-
- - Added the auto-hinting module! Fixing some bugs here and there.
-
- - Found some bugs in the composite loader (seac) of the Type1-based
- font drivers.
-
- - Renamed the directory `freetype2/config' to `freetype2/builds' and
- updated all relevant files.
-
- - Found a memory leak in the `type1' driver.
-
- - Incorporated Tom's patches to support flex operators correctly in
- OpenType/CFF fonts. Now all I need is to support pure CFF and CEF
- fonts to be done with this driver :-)
-
- - Added the Windows FNT/FON driver in `src/winfonts'. For now, it
- always `simulates' a Unicode charmap, so it shouldn't be
- considered completed right now.
-
- It is there to be more a proof of concept than anything else
- anyway. The driver is a single C source file, that compiles to 3
- Kb of code.
-
- I'm still working on the PCF/BDF drivers, but I'm too lazy to
- finish them now.
-
- - CHANGES TO THE HIGH-LEVEL API
-
- * FT_Get_Kerning has a new parameter that allows you to select the
- coordinates of the kerning vector (font units, scaled, scaled +
- grid-fitted).
- * The outline functions are now in <freetype/ftoutln.h> and not
- part of <freetype/freetype.h> anymore.
- * <freetype/ftmodule.h> now contains declarations for
- FT_New_Library, FT_Done_Library, FT_Add_Default_Modules.
- * The so-called convenience functions have moved from `ftoutln.c'
- to `ftglyph.c', and are thus available with this optional
- component of the library. They are declared in
- <freetype/ftglyph.h> now.
- * Anti-aliased rendering is now the default for FT_Render_Glyph
- (i.e. corresponds to render_mode == 0 == ft_render_mode_normal).
- To generate a monochrome bitmap, use ft_render_mode_mono, or the
- FT_LOAD_MONOCHROME flag in FT_Load_Glyph/FT_Load_Char.
- FT_LOAD_ANTI_ALIAS is still defined, but values to 0.
- * <freetype/freetype.h> now include <freetype/config/ftconfig.h>,
- solving a few headaches :-)
- * The type FT_GlyphSlotRec has now a `library' field.
-
- - CHANGES TO THE `ftglyph.h' API
-
- This API has been severely modified in order to make it simpler,
- clearer, and more efficient. It certainly now looks like a real
- `glyph factory' object, and allows client applications to manage
- (i.e. transform, bbox and render) glyph images without ever
- knowing their original format.
-
- - Added support for CID-keyed fonts to the CFF driver. Maybe
- support for pure CFF + CEF fonts should come in?
-
- - Cleaned up source code in order to avoid two functions with the
- same name. Also changed the names of the files in `type1z' from
- `t1XXXX' to `z1XXXX' in order to avoid any conflicts.
-
- `make multi' now works well :-)
-
- Also removed the use of `cidafm' for now, even if the source files
- are still there. This functionality will certainly go into a
- specific module.
-
- - ADDED SUPPORT FOR THE AUTO-HINTER
-
- It works :-) I have a demo program which simply is a copy of
- `ftview' that does a `FT_Add_Module(library,
- &autohinter_module_class)' after library initialization, and Type
- 1 & OpenType/CFF fonts are now hinted.
-
- CID fonts are not hinted, as they include no charmap and the
- auto-hinter doesn't include `generic' global metrics computations
- yet.
-
- Now, I need to release this thing to the FreeType 2 source.
-
- - CHANGES TO THE RENDERER MODULES
-
- The monochrome and smooth renderers are now in two distinct
- directories, namely `src/raster1' and `src/smooth'. Note that the
- old `src/renderer' is now gone.
-
- I ditched the 5-gray-levels renderers. Basically, it involved a
- simple #define toggle in 'src/raster1/ftraster.c'.
-
- FT_Render_Glyph, FT_Outline_Render & FT_Outline_Get_Bitmap now
- select the best renderer available, depending on render mode. If
- the current renderer for a given glyph image format isn't capable
- of supporting the render mode, another one will be found in the
- library's list. This means that client applications do not need
- to switch or set the renderers themselves (as in the latest
- change), they'll get what they want automatically. At last.
-
- Changed the demo programs accordingly.
-
- - MAJOR INTERNAL REDESIGN:
-
- A lot of internal modifications have been performed lately on the
- source in order to provide the following enhancements:
-
- * More generic module support:
-
- The FT_Module type is now defined to represent a handle to a
- given module. The file <freetype/ftmodule.h> contains the
- FT_Module_Class definition, as well as the module-loading public
- API.
-
- The FT_Driver type is still defined, and still represents a
- pointer to a font driver. Note that FT_Add_Driver is replaced
- by FT_Add_Module, FT_Get_Driver by FT_Get_Module, etc.
-
- * Support for generic glyph image types:
-
- The FT_Renderer type is a pointer to a module used to perform
- various operations on glyph image.
-
- Each renderer is capable of handling images in a single format
- (e.g. ft_glyph_format_outline). Its functions are used to:
-
- - transform an glyph image
- - render a glyph image into a bitmap
- - return the control box (dimensions) of a given glyph image
-
- The scan converters `ftraster.c' and `ftgrays.c' have been moved
- to the new directory `src/renderer', and are used to provide two
- default renderer modules.
-
- One corresponds to the `standard' scan-converter, the other to
- the `smooth' one.
-
- he current renderer can be set through the new function
- FT_Set_Renderer.
-
- The old raster-related function FT_Set_Raster, FT_Get_Raster and
- FT_Set_Raster_Mode have now disappeared, in favor of the new:
-
- FT_Get_Renderer
- FT_Set_Renderer
-
- See the file <freetype/ftrender.h> for more details.
-
- These changes were necessary to properly support different
- scalable formats in the future, like bi-color glyphs, etc.
-
- * Glyph loader object:
-
- A new internal object, called a 'glyph loader' has been
- introduced in the base layer. It is used by all scalable format
- font drivers to load glyphs and composites.
-
- This object has been created to reduce the code size of each
- driver, as each one of them basically re-implemented its
- functionality.
-
- See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
- more information.
-
- * FT_GlyphSlot has new fields:
-
- In order to support extended features (see below), the
- FT_GlyphSlot structure has a few new fields:
-
- linearHoriAdvance:
-
- This field gives the linearly scaled (i.e. scaled but
- unhinted) advance width for the glyph, expressed as a 16.16
- fixed pixel value. This is useful to perform WYSIWYG text.
-
- linearVertAdvance:
- This field gives the linearly scaled advance height for the
- glyph (relevant in vertical glyph layouts only). This is
- useful to perform WYSIWYG text.
-
- Note that the two above field replace the removed `metrics2'
- field in the glyph slot.
-
- advance:
- This field is a vector that gives the transformed advance for
- the glyph. By default, it corresponds to the advance width,
- unless FT_LOAD_VERTICAL_LAYOUT was specified when calling
- FT_Load_Glyph or FT_Load_Char.
-
- bitmap_left:
- This field gives the distance in integer pixels from the
- current pen position to the left-most pixel of a glyph image
- IF IT IS A BITMAP. It is only valid when the `format' field
- is set to `ft_glyph_format_bitmap', for example, after calling
- the new function FT_Render_Glyph.
-
- bitmap_top:
- This field gives the distance in integer pixels from the
- current pen position (located on the baseline) to the top-most
- pixel of the glyph image IF IT IS A BITMAP. Positive values
- correspond to upwards Y.
-
- loader:
- This is a new private field for the glyph slot. Client
- applications should not touch it.
-
-
- * Support for transforms and direct rendering in FT_Load_Glyph:
-
- Most of the functionality found in <freetype/ftglyph.h> has been
- moved to the core library. Hence, the following:
-
- - A transform can be specified for a face through
- FT_Set_Transform. this transform is applied by FT_Load_Glyph
- to scalable glyph images (i.e. NOT TO BITMAPS) before the
- function returns, unless the bit flag FT_LOAD_IGNORE_TRANSFORM
- was set in the load flags.
-
- - Once a glyph image has been loaded, it can be directly
- converted to a bitmap by using the new FT_Render_Glyph
- function. Note that this function takes the glyph image from
- the glyph slot, and converts it to a bitmap whose properties
- are returned in `face.glyph.bitmap', `face.glyph.bitmap_left'
- and `face.glyph.bitmap_top'. The original native image might
- be lost after the conversion.
-
- - When using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
- and FT_Load_Char functions will call FT_Render_Glyph
- automatically when needed.
-
- - Reformatted all modules source code in order to get rid of the
- basic data types redefinitions (i.e. `TT_Int' instead of `FT_Int',
- `T1_Fixed' instead of `FT_Fixed'). Hence the format-specific
- prefixes like `TT_', `T1_', `T2_' and `CID_' are only used for
- relevant structures.
-
-
-======================================================================
-
-OLD CHANGES FOR BETA 7
-
- - bug-fixed the OpenType/CFF parser. It now loads and displays my
- two fonts nicely, but I'm pretty certain that more testing is
- needed :-)
-
- - fixed the crummy Type 1 hinter, it now handles accented characters
- correctly (well, the accent is not always well placed, but that's
- another problem..)
-
- - added the CID-keyed Type 1 driver in `src/cid'. Works pretty well
- for only 13 Kb of code ;-) Doesn't read AFM files though, nor the
- really useful CMAP files..
-
- - fixed two bugs in the smooth renderer (src/base/ftgrays.c).
- Thanks to Boris Letocha for spotting them and providing a fix.
-
- - fixed potential `divide by zero' bugs in ftcalc.c.
-
- - added source code for the OpenType/CFF driver (still incomplete
- though..)
-
- - modified the SFNT driver slightly to perform more robust header
- checks in TT_Load_SFNT_Header. This prevents certain font files
- (e.g. some Type 1 Multiple Masters) from being incorrectly
- `recognized' as TrueType font files..
-
- - moved a lot of stuff from the TrueType driver to the SFNT module,
- this allows greater code re-use between font drivers
- (e.g. TrueType, OpenType, Compact-TrueType, etc..)
-
- - added a tiny segment cache to the SFNT Charmap 4 decoder, in order
- to minimally speed it up..
-
- - added support for Multiple Master fonts in `type1z'. There is
- also a new file named <freetype/ftmm.h> which defines functions to
- manage them from client applications.
-
- The new file `src/base/ftmm.c' is also optional to the engine..
-
- - various formatting changes (e.g. EXPORT_DEF -> FT_EXPORT_DEF) +
- small bug fixes in FT_Load_Glyph, the `type1' driver, etc..
-
- - a minor fix to the Type 1 driver to let them apply the font matrix
- correctly (used for many oblique fonts..)
-
- - some fixes for 64-bit systems (mainly changing some FT_TRACE calls
- to use %p instead of %lx). Thanks to Karl Robillard.
-
- - fixed some bugs in the sbit loader (src/base/sfnt/ttsbit.c) +
- added a new flag, FT_LOAD_CROP_BITMAP to query that bitmaps be
- cropped when loaded from a file (maybe I should move the bitmap
- cropper to the base layer ??).
-
- - changed the default number of gray levels of the smooth renderer
- to 256 (instead of the previous 128). Of course, the human eye
- can't see any difference ;-)
-
- - removed TT_MAX_SUBGLYPHS, there is no static limit on the number
- of subglyphs in a TrueType font now..
-
-
-======================================================================
-
-OLD CHANGES 16 May 2000
-
- - tagged `BETA-6' in the CVS tree. This one is a serious release
- candidate even though it doesn't incorporate the auto-hinter yet..
-
- - various obsolete files were removed, and copyright header updated
-
- - finally updated the standard raster to fix the monochrome
- rendering bug + re-enable support for 5-gray levels anti-aliasing
- (suck, suck..)
-
- - created new header files, and modified sources accordingly:
-
- <freetype/fttypes.h>
- - simple FreeType types, without the API
- <freetype/internal/ftmemory.h>
- - definition of memory-management macros
-
- - added the `DSIG' (OpenType Digital Signature) tag to
- <freetype/tttags.h>
-
- - light update/cleaning of the build system + changes to the sources
- in order to get rid of _all_ compiler warnings with three
- compilers, i.e:
-
- gcc with `-ansi -pedantic -Wall -W', Visual C++ with `/W3 /WX' and
- LCC
-
- IMPORTANT NOTE FOR WIN32-LCC USERS:
- |
- | It seems the C pre-processor that comes with LCC is broken, it
- | doesn't recognize the ANSI standard directives # and ##
- | correctly when one of the argument is a macro. Also,
- | something like:
- |
- | #define F(x) print##x
- |
- | F(("hello"))
- |
- | will get incorrectly translated to:
- |
- | print "hello")
- |
- | by its pre-processor. For this reason, you simply cannot build
- | FreeType 2 in debug mode with this compiler..
-
- - yet another massive grunt work. I've changed the definition of
- the EXPORT_DEF, EXPORT_FUNC, BASE_DEF & BASE_FUNC macros. These
- now take an argument, which is the function's return value type.
-
- This is necessary to compile FreeType as a DLL on Windows and
- OS/2. Depending on the compiler used, a compiler-specific keyword
- like __export or __system must be placed before (VisualC++) or
- after (BorlandC++) the type..
-
- Of course, this needed a lot of changes throughout the source code
- to make it compile again... All cleaned up now, apparently..
-
- Note also that there is a new EXPORT_VAR macro defined to allow
- the _declaration_ of an exportable public (constant)
- variable. This is the case of the raster interfaces (see
- ftraster.h and ftgrays.h), as well as each module's interface (see
- sfdriver.h, psdriver.h, etc..)
-
- - new feature: it is now possible to pass extra parameters to font
- drivers when creating a new face object. For now,
- this capability is unused. It could however prove to
- be useful in a near future..
-
- the FT_Open_Args structure was changes, as well as the internal
- driver interface (the specific `init_face' module function has
- now a different signature).
-
- - updated the tutorial (not finished though).
-
- - updated the top-level BUILD document
-
- - fixed a potential memory leak that could occur when loading
- embedded bitmaps.
-
- - added the declaration of FT_New_Memory_Face in
- <freetype/freetype.h>, as it was missing from the public header
- (the implementation was already in `ftobjs.c').
-
- - the file <freetype/fterrors.h> has been seriously updated in order
- to allow the automatic generation of error message tables. See
- the comments within it for more information.
-
- - major directory hierarchy re-organisation. This was done for two
- things:
-
- * first, to ease the `manual' compilation of the library by
- requiring at lot less include paths :-)
-
- * second, to allow external programs to effectively access
- internal data fields. For example, this can be extremely
- useful if someone wants to write a font producer or a font
- manager on top of FreeType.
-
- Basically, you should now use the 'freetype/' prefix for header
- inclusion, as in:
-
- #include <freetype/freetype.h>
- #include <freetype/ftglyph.h>
-
- Some new include sub-directories are available:
-
- a. the `freetype/config' directory, contains two files used to
- configure the build of the library. Client applications
- should not need to look at these normally, but they can if
- they want.
-
- #include <freetype/config/ftoption.h>
- #include <freetype/config/ftconfig.h>
-
- b. the `freetype/internal' directory, contains header files that
- describes library internals. These are the header files that
- were previously found in the `src/base' and `src/shared'
- directories.
-
-
- As usual, the build system and the demos have been updated to
- reflect the change..
-
- Here's a layout of the new directory hierarchy:
-
- TOP_DIR
- include/
- freetype/
- freetype.h
- ...
- config/
- ftoption.h
- ftconfig.h
- ftmodule.h
-
- internal/
- ftobjs.h
- ftstream.h
- ftcalc.h
- ...
-
- src/
- base/
- ...
-
- sfnt/
- psnames/
- truetype/
- type1/
- type1z/
-
-
- Compiling a module is now much easier, for example, the following
- should work when in the TOP_DIR directory on an ANSI build:
-
- gcc -c -I./include -I./src/base src/base/ftbase.c
- gcc -c -I./include -I./src/sfnt src/sfnt/sfnt.c
- etc..
-
- (of course, using -Iconfig/<system> if you provide system-specific
- configuration files).
-
- - updated the structure of FT_Outline_Funcs in order to allow direct
- coordinate scaling within the outline decomposition routine (this
- is important for virtual `on' points with TrueType outlines) +
- updates to the rasters to support this..
-
- - updated the OS/2 table loading code in `src/sfnt/ttload.c' in
- order to support version 2 of the table (see OpenType 1.2 spec)
-
- - created `include/tttables.h' and `include/t1tables.h' to allow
- client applications to access some of the SFNT and T1 tables of a
- face with a procedural interface (see `FT_Get_Sfnt_Table') +
- updates to internal source files to reflect the change..
-
- - some cleanups in the source code to get rid of warnings when
- compiling with the `-Wall -W -ansi -pedantic' options in gcc.
-
- - debugged and moved the smooth renderer to `src/base/ftgrays.c' and
- its header to `include/ftgrays.h'
-
- - updated TT_MAX_SUBGLYPHS to 96 as some CJK fonts have composites
- with up to 80 sub-glyphs !! Thanks to Werner
-
-
-======================================================================
-
-OLD CHANGES - 14-apr-2000
-
- - fixed a bug in the TrueType glyph loader that prevented the
- correct loading of some CJK glyphs in mingli.ttf
-
- - improved the standard Type 1 hinter in `src/type1'
-
- - fixed two bugs in the experimental Type 1 driver in `src/type1z'
- to handle the new XFree86 4.0 fonts (and a few other ones..)
-
- - the smooth renderer is now complete and supports sub-banding to
- render large glyphs at high speed. However, it is still located
- in `demos/src/ftgrays.c' and should move to the library itself in
- the next beta. NOTE: The smooth renderer doesn't compile in
- stand-alone mode anymore, but this should be fixed RSN..
-
- - introduced convenience functions to more easily deal with glyph
- images, see `include/ftglyph.h' for more details, as well as the
- new demo program named `demos/src/ftstring.c' that demonstrates
- its use
-
- - implemented FT_LOAD_NO_RECURSE in both the TrueType and Type 1
- drivers (this is required by the auto-hinter to improve its
- results).
-
- - changed the raster interface, in order to allow client
- applications to provide their own span-drawing callbacks.
- However, only the smooth renderer supports this. See
- `FT_Raster_Params' in the file `include/ftimage.h'.
-
- - fixed a small bug in FT_MulFix that caused incorrect transform
- computation!
-
- - Note: The tutorial is out-of-date.
-
-
-======================================================================
-
-OLD CHANGES - 12-mar-2000
-
- - changed the layout of configuration files : now, all ANSI
- configuration files are located in
- `freetype2/config'. System-specific over-rides can be placed in
- `freetype2/config/<system>'.
-
- - moved all configuration macros to `config/ftoption.h'
-
- - improvements in the Type 1 driver with AFM support
-
- - changed the fields in the FT_Outline structure : the old `flags'
- array is re-named `tags', while all ancient flags are encoded into
- a single unsigned int named `flags'.
-
- - introduced new flags in FT_Outline.flags (see
- ft_outline_.... enums in `ftimage.h').
-
- - changed outline functions to `FT_Outline_<action>' syntax
-
- - added a smooth anti-alias renderer to the demonstration programs
-
- - added Mac graphics driver (thanks Just)
-
- - FT_Open_Face changed in order to received a pointer to a
- FT_Open_Args descriptor..
-
- - various cleanups, a few more API functions implemented (see
- FT_Attach_File)
-
- - updated some docs
-
-
-======================================================================
-
-OLD CHANGES - 22-feb-2000
-
- - introduced the `psnames' module. It is used to:
-
- o convert a Postscript glyph name into the equivalent Unicode
- character code (used by the Type 1 driver(s) to synthesize on
- the fly a Unicode charmap).
-
- o provide an interface to retrieve the Postscript names of the
- Macintosh, Adobe Standard & Adobe Expert character codes.
- (the Macintosh names are used by the SFNT-module postscript
- names support routines, while the other two tables are used by
- the Type 1 driver(s)).
-
- - introduced the `type1z' alternate Type 1 driver. This is a (still
- experimental) driver for the Type 1 format that will ultimately
- replace the one in `src/type1'. It uses pattern matching to load
- data from the font, instead of a finite state analyzer. It works
- much better than the `old' driver with `broken' fonts. It is also
- much smaller (under 15 Kb).
-
- - the Type 1 drivers (both in `src/type1' and `src/type1z') are
- nearly complete. They both provide automatic Unicode charmap
- synthesis through the `psnames' module. No re-encoding vector is
- needed. (note that they still leak memory due to some code
- missing, and I'm getting lazy).
-
- Trivial AFM support has been added to read kerning information but
- wasn't exactly tested as it should ;-)
-
- - The TrueType glyph loader has been seriously rewritten (see the
- file `src/truetype/ttgload.c'. It is now much, much simpler as
- well as easier to read, maintain and understand :-) Preliminary
- versions introduced a memory leak that has been reported by Jack
- Davis, and is now fixed..
-
- - introduced the new `ft_glyph_format_plotter', used to represent
- stroked outlines like Windows `Vector' fonts, and certain Type 1
- fonts like `Hershey'. The corresponding raster will be written
- soon.
-
- - FT_New_Memory_Face is gone. Likewise, FT_Open_Face has a new
- interface that uses a structure to describe the input stream, the
- driver (if required), etc..
-
-
-TODO
-
- - Write FT_Get_Glyph_Bitmap and FT_Load_Glyph_Bitmap
-
- - Add a function like FT_Load_Character(face, char_code, load_flags)
- that would really embed a call to FT_Get_Char_Index then
- FT_Load_Glyph to ease developer's work.
-
- - Update the tutorial!
-
- - consider adding support for Multiple Master fonts in the Type 1
- drivers.
-
- - Test the AFM routines of the Type 1 drivers to check that kerning
- information is returned correctly.
-
- - write a decent auto-gridding component !! We need this to release
- FreeType 2.0 gold !
-
-
-less urgent needs:
-
- - add a CFF/Type2 driver
- - add a BDF driver
- - add a FNT/PCF/HBF driver
- - add a Speedo driver from the X11 sources
-
-
-======================================================================
-
-OLDER CHANGES - 27-jan-2000
-
- - updated the `sfnt' module interface to allow several SFNT-based
- drivers to co-exist peacefully
-
- - updated the `T1_Face' type to better separate Postscript font
- content from the rest of the FT_Face structure. Might be used
- later by the CFF/Type2 driver..
-
- - added an experimental replacement Type 1 driver featuring advanced
- (and speedy) pattern matching to retrieve the data from postscript
- fonts.
-
- - very minor changes in the implementation of FT_Set_Char_Size and
- FT_Set_Pixel_Sizes (they now implement default to lighten the font
- driver's code).
-
-
-======================================================================
-
-OLD MESSAGE
-
-This file summarizes the changes that occurred since the last `beta'
-of FreeType 2. Because the list is important, it has been divided into
-separate sections:
-
-Table Of Contents:
-
- I High-Level Interface (easier !)
- II Directory Structure
- III Glyph Image Formats
- IV Build System
- V Portability
- VI Font Drivers
-
-
-----------------------------------------------------------------------
-
-High-Level Interface:
-
- The high-level API has been considerably simplified. Here is how:
-
- - resource objects have disappeared. this means that face objects
- can now be created with a single function call (see FT_New_Face
- and FT_Open_Face)
-
- - when calling either FT_New_Face & FT_Open_Face, a size object
- and a glyph slot object are automatically created for the face,
- and can be accessed through `face->glyph' and `face->size' if
- one really needs to. In most cases, there's no need to call
- FT_New_Size or FT_New_Glyph.
-
- - similarly, FT_Load_Glyph now only takes a `face' argument
- (instead of a glyph slot and a size). Also, its `result'
- parameter is gone, as the glyph image type is returned in the
- field `face->glyph.format'
-
- - the list of available charmaps is directly accessible through
- `face->charmaps', counting `face->num_charmaps' elements. Each
- charmap has an 'encoding' field which specifies which known
- encoding it deals with. Valid values are, for example:
-
- ft_encoding_unicode (for ASCII, Latin-1 and Unicode)
- ft_encoding_apple_roman
- ft_encoding_sjis
- ft_encoding_adobe_standard
- ft_encoding_adobe_expert
-
- other values may be added in the future. Each charmap still
- holds its `platform_id' and `encoding_id' values in case the
- encoding is too exotic for the current library
-
-
-----------------------------------------------------------------------
-
-Directory Structure:
-
- Should seem obvious to most of you:
-
- freetype/
- config/ -- configuration sub-makefiles
- ansi/
- unix/ -- platform-specific configuration files
- win32/
- os2/
- msdos/
-
- include/ -- public header files, those to be included
- directly by client apps
-
- src/ -- sources of the library
- base/ -- the base layer
- sfnt/ -- the sfnt `driver' (see the drivers section
- below)
- truetype/ -- the truetype driver
- type1/ -- the type1 driver
- shared/ -- some header files shared between drivers
-
- demos/ -- demos/tools
-
- docs/ -- documentation (a bit empty for now)
-
-
-----------------------------------------------------------------------
-
-Glyph Image Formats:
-
- Drivers are now able to register new glyph image formats within the
- library. For now, the base layer supports of course bitmaps and
- vector outlines, but one could imagine something different like
- colored bitmaps, bi-color vectors or whatever else (Metafonts anyone
- ??).
-
- See the file `include/ftimage.h'. Note also that the type
- FT_Raster_Map is gone, and is now replaced by FT_Bitmap, which
- should encompass all known bitmap types.
-
- Each new image format must provide at least one `raster', i.e. a
- module capable of transforming the glyph image into a bitmap. It's
- also possible to change the default raster used for a given glyph
- image format.
-
- The default outline scan-converter now uses 128 levels of grays by
- default, which tends to smooth many things. Note that the demo
- programs have been updated significantly in order to display these..
-
-
-----------------------------------------------------------------------
-
-Build system:
-
- You still need GNU Make to build the library. The build system has
- been very seriously re-vamped in order to provide things like :
-
- - automatic host platform detection (reverting to 'config/ansi' if
- it is not detected, with pseudo-standard compilation flags)
-
- - the ability to compile from the Makefiles with very different and
- exotic compilers. Note that linking the library can be difficult
- for some platforms.
-
- For example, the file `config/win32/lcclib.bat' is invoked by the
- build system to create the `.lib' file with LCC-Win32 because its
- librarian has too many flaws to be invoked directly from the
- Makefile.
-
- Here's how it works:
-
- - the first time you type `make', the build system runs a series of
- sub-makefiles in order to detect your host platform. It then
- dumps what it found, and creates a file called `config.mk' in the
- current directory. This is a sub-Makefile used to define many
- important Make variables used to build the library.
-
- - the second time, the build system detects the `config.mk' then use
- it to build the library. All object files go into 'obj' by
- default, as well as the library file, but this can easily be
- changed.
-
- Note that you can run `make setup' to force another host platform
- detection even if a `config.mk' is present in the current
- directory. Another solution is simply to delete the file, then
- re-run make.
-
- Finally, the default compiler for all platforms is gcc (for now,
- this will hopefully changed in the future). You can however specify
- a different compiler by specifying it after the 'setup' target as
- in:
-
- gnumake setup lcc on Win32 to use the LCC compiler
- gnumake setup visualc on Win32 to use Visual C++
-
- See the file `config/<system>/detect.mk' for a list of supported
- compilers for your platforms.
-
- It should be relatively easy to write new detection rules files and
- config.mk..
-
- Finally, to build the demo programs, go to `demos' and launch GNU
- Make, it will use the `config.mk' in the top directory to build the
- test programs..
-
-
-----------------------------------------------------------------------
-
-Portability:
-
- In the previous beta, a single FT_System object was used to
- encompass all low-level operations like thread synchronisation,
- memory management and i/o access. This has been greatly simplified:
-
- - thread synchronisation has been dropped, for the simple reason
- that the library is already re-entrant, and that if you really
- need two threads accessing the same FT_Library, you should
- really synchronize access to it yourself with a simple mutex.
-
- - memory management is performed through a very simple object
- called `FT_Memory', which really is a table containing a table
- of pointers to functions like malloc, realloc and free as well
- as some user data (closure).
-
- - resources have disappeared (they created more problems than they
- solved), and i/o management have been simplified greatly as a
- result. Streams are defined through FT_Stream objects, which
- can be either memory-based or disk-based.
-
- Note that each face has its own stream, which is closed only
- when the face object is destroyed. Hence, a function like
- TT_Flush_Face in 1.x cannot be directly supported. However, if
- you really need something like this, you can easily tailor your
- own streams to achieve the same feature at a lower level (and
- use FT_Open_Face instead of FT_New_Face to create the face).
-
- See the file `include/ftsystem.h' for more details, as well as the
- implementations found in `config/unix' and `config/ansi'.
-
-
-----------------------------------------------------------------------
-
-Font Drivers:
-
- The Font Driver interface has been modified in order to support
- extensions & versioning.
-
-
- The list of the font drivers that are statically linked to the
- library at compile time is managed through a new configuration file
- called `config/<platform>/ftmodule.h'.
-
- This file is autogenerated when invoking `make modules'. This
- target will parse all sub-directories of 'src', looking for a
- `module.mk' rules file, used to describe the driver to the build
- system.
-
- Hence, one should call `make modules' each time a font driver is
- added or removed from the `src' directory.
-
- Finally, this version provides a `pseudo-driver' in `src/sfnt'.
- This driver doesn't support font files directly, but provides
- services used by all TrueType-like font drivers. Hence, its code is
- shared between the TrueType & OpenType font formats, and possibly
- more formats to come if we're lucky..
-
-
-----------------------------------------------------------------------
-
-Extensions support:
-
- The extensions support is inspired by the one found in 1.x.
-
- Now, each font driver has its own `extension registry', which lists
- which extensions are available for the font faces managed by the
- driver.
-
- Extension ids are now strings, rather than 4-byte tags, as this is
- usually more readable.
-
- Each extension has:
- - some data, associated to each face object
- - an interface (table of function pointers)
-
- An extension that is format-specific should simply register itself
- to the correct font driver. Here is some example code:
-
- // Registering an extensions
- //
- FT_Error FT_Init_XXXX_Extension( FT_Library library )
- {
- FT_DriverInterface* tt_driver;
-
- driver = FT_Get_Driver( library, "truetype" );
- if (!driver) return FT_Err_Unimplemented_Feature;
-
- return FT_Register_Extension( driver, &extension_class );
- }
-
-
- // Implementing the extensions
- //
- FT_Error FT_Proceed_Extension_XXX( FT_Face face )
- {
- FT_XXX_Extension ext;
- FT_XXX_Extension_Interface ext_interface;
-
- ext = FT_Get_Extension( face, "extensionid", &ext_interface );
- if (!ext) return error;
-
- return ext_interface->do_it(ext);
- }
-
-------------------------------------------------------------------------
-
-Copyright 2000-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute this
-file you indicate that you have read the license and understand and
-accept it fully.
-
-
-Local Variables:
-version-control: never
-coding: utf-8
-End:
-
---- end of CHANGES ---
diff --git a/docs/CMAKE b/docs/CMAKE
deleted file mode 100644
index 31237ae15..000000000
--- a/docs/CMAKE
+++ /dev/null
@@ -1,2 +0,0 @@
-Support for a cmake build has been contributed. See the remarks in the
-top-level `CMakeLists.txt' file for more.
diff --git a/docs/CUSTOMIZE b/docs/CUSTOMIZE
deleted file mode 100644
index 6d1587e09..000000000
--- a/docs/CUSTOMIZE
+++ /dev/null
@@ -1,152 +0,0 @@
-How to customize the compilation of the library
-===============================================
-
- FreeType is highly customizable to fit various needs, and this
- document describes how it is possible to select options and
- components at compilation time.
-
-
-I. Configuration macros
-
- The file `include/freetype/config/ftoption.h' contains a list of
- commented configuration macros that can be toggled by developers to
- indicate which features should be active while building the library.
-
- These options range from debug level to availability of certain
- features, like native TrueType hinting through a bytecode
- interpreter.
-
- We invite you to read this file for more information. You can
- change the file's content to suit your needs, or override it with
- one of the techniques described below.
-
-
-II. Modules list
-
- If you use GNU make please edit the top-level file `modules.cfg'.
- It contains a list of available FreeType modules and extensions to
- be compiled. Change it to suit your own preferences. Be aware that
- certain modules depend on others, as described in the file. GNU
- make uses `modules.cfg' to generate `ftmodule.h' (in the object
- directory).
-
- If you build FreeType in a directory separate from the source files,
- put your customized `modules.cfg' in that directory; that way you
- can keep the source files `clean'.
-
- If you don't use GNU make you have to manually edit the file
- `include/freetype/config/ftmodule.h' (which is *not* used with if
- compiled with GNU make) to add or remove the drivers and components
- you want to compile into the library. See `INSTALL.ANY' for more
- information.
-
-
-III. System interface
-
- FreeType's default interface to the system (i.e., the parts that
- deal with memory management and i/o streams) is located in
- `src/base/ftsystem.c'.
-
- The current implementation uses standard C library calls to manage
- memory and to read font files. It is however possible to write
- custom implementations to suit specific systems.
-
- To tell the GNU Make-based build system to use a custom system
- interface, you have to define the environment variable FTSYS_SRC to
- point to the relevant implementation:
-
- on Unix:
-
- ./configure <your options>
- export FTSYS_SRC=foo/my_ftsystem.c
- make
- make install
-
- on Windows:
-
- make setup <compiler>
- set FTSYS_SRC=foo/my_ftsystem.c
- make
-
-
-IV. Overriding default configuration and module headers
-
- It is possible to override the default configuration and module
- headers without changing the original files. There are three ways
- to do that:
-
-
- 1. With GNU make
-
- [This is actually a combination of method 2 and 3.]
-
- Just put your custom `ftoption.h' file into the objects directory
- (normally `<topdir>/objs' if you build in the source tree, or the
- directory where you invoke configure if you build in a separate
- directory), which GNU make prefers over the standard location. No
- action is needed for `ftmodule.h' because it is generated
- automatically in the objects directory.
-
- 2. Using the C include path
-
- Use the C include path to ensure that your own versions of the
- files are used at compile time when the lines
-
- #include FT_CONFIG_OPTIONS_H
- #include FT_CONFIG_MODULES_H
-
- are compiled. Their default values being
- <freetype/config/ftoption.h> and <freetype/config/ftmodule.h>, you
- can do something like:
-
- custom/
- config/
- ftoption.h => custom options header
- ftmodule.h => custom modules list
-
- include/ => normal FreeType 2 include
- ...
-
- then change the C include path to always give the path to `custom'
- before the FreeType 2 `include'.
-
-
- 3. Redefining FT_CONFIG_OPTIONS_H and FT_CONFIG_MODULES_H
-
- Another way to do the same thing is to redefine the macros used to
- name the configuration headers. To do so, you need a custom
- `ft2build.h' whose content can be as simple as:
-
- #ifndef FT2_BUILD_MY_PLATFORM_H_
- #define FT2_BUILD_MY_PLATFORM_H_
-
- #define FT_CONFIG_OPTIONS_H <custom/my-ftoption.h>
- #define FT_CONFIG_MODULES_H <custom/my-ftmodule.h>
-
- #include <freetype/config/ftheader.h>
-
- #endif /* FT2_BUILD_MY_PLATFORM_H_ */
-
- Place those files in a separate directory, e.g.,
-
- custom/
- ft2build.h => custom version described above
- my-ftoption.h => custom options header
- my-ftmodule.h => custom modules list header
-
- and change the C include path to ensure that `custom' is always
- placed before the FT2 `include' during compilation.
-
-----------------------------------------------------------------------
-
-Copyright 2003-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute
-this file you indicate that you have read the license and understand
-and accept it fully.
-
-
---- end of CUSTOMIZE ---
diff --git a/docs/DEBUG b/docs/DEBUG
deleted file mode 100644
index e5e9390c7..000000000
--- a/docs/DEBUG
+++ /dev/null
@@ -1,204 +0,0 @@
-Debugging within the FreeType sources
-=====================================
-
-I. Configuration macros
------------------------
-
-There are several ways to enable debugging features in a FreeType 2
-builds. This is controlled through the definition of special macros
-located in the file `ftoption.h'. The macros are:
-
-
- FT_DEBUG_LEVEL_ERROR
-
- #define this macro if you want to compile the FT_ERROR macro calls
- to print error messages during program execution. This will not
- stop the program. Very useful to spot invalid fonts during
- development and to code workarounds for them.
-
- FT_DEBUG_LEVEL_TRACE
-
- #define this macro if you want to compile both macros FT_ERROR and
- FT_TRACE. This also includes the variants FT_TRACE0, FT_TRACE1,
- FT_TRACE2, ..., FT_TRACE7.
-
- The trace macros are used to send debugging messages when an
- appropriate `debug level' is configured at runtime through the
- FT2_DEBUG environment variable (more on this later).
-
- FT_DEBUG_MEMORY
-
- If this macro is #defined, the FreeType engine is linked with a
- small but effective debugging memory manager that tracks all
- allocations and frees that are performed within the font engine.
-
- When the FT2_DEBUG_MEMORY environment variable is defined at
- runtime, a call to FT_Done_FreeType will dump memory statistics,
- including the list of leaked memory blocks with the source
- locations where these were allocated. It is always a very good
- idea to define this in development builds. This works with _any_
- program linked to FreeType, but requires a big deal of memory (the
- debugging memory manager never frees the blocks to the heap in
- order to detect double frees).
-
- When FT2_DEBUG_MEMORY isn't defined at runtime, the debugging
- memory manager is ignored, and performance is unaffected.
-
-
-II. Debugging macros
---------------------
-
-Several macros can be used within the FreeType sources to help
-debugging its code:
-
-
- 1. FT_ERROR(( ... ))
-
- This macro is used to send debug messages that indicate relatively
- serious errors (like broken font files), but will not stop the
- execution of the running program. Its code is compiled only when
- either FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined in
- `ftoption.h'.
-
- Note that you have to use a printf-like signature, but with double
- parentheses, like in
-
- FT_ERROR(( "your %s is not %s\n", "foo", "bar" ));
-
-
- 2. FT_ASSERT( condition )
-
- This macro is used to check strong assertions at runtime. If its
- condition isn't TRUE, the program will abort with a panic message.
- Its code is compiled when either FT_DEBUG_LEVEL_ERROR or
- FT_DEBUG_LEVEL_TRACE are defined. You don't need double
- parentheses here. For example
-
- FT_ASSERT( ptr != NULL );
-
-
- 3. FT_TRACE( level, (message...) )
-
- The FT_TRACE macro is used to send general-purpose debugging
- messages during program execution. This macro uses an *implicit*
- macro named FT_COMPONENT used to name the current FreeType
- component being run.
-
- The developer should always define FT_COMPONENT as appropriate,
- for example as in
-
- #undef FT_COMPONENT
- #define FT_COMPONENT trace_io
-
- The value of the FT_COMPONENT macro is an enumeration named
- `trace_XXXX' where `XXXX' is one of the component names defined in
- the internal file `internal/fttrace.h'. If you modify FreeType
- source and insert new `trace_XXXX' macro, you must register it in
- `fttrace.h'. If you insert or remove many trace macros, you can
- check the undefined or the unused trace macro by
- `src/tools/chktrcmp.py'.
-
- Each such component is assigned a `debug level', ranging from 0 to
- 7, through the use of the FT2_DEBUG environment variable
- (described below) when a program linked with FreeType starts.
-
- When FT_TRACE is called, its level is compared to the one of the
- corresponding component. Messages with trace levels *higher* than
- the corresponding component level are filtered and never printed.
-
- This means that trace messages with level 0 are always printed,
- those with level 2 are only printed when the component level is
- *at least* 2.
-
- The second parameter to FT_TRACE must contain parentheses and
- correspond to a printf-like call, as in
-
- FT_TRACE( 2, ( "your %s is not %s\n", "foo", "bar" ) )
-
- The shortcut macros FT_TRACE0, FT_TRACE1, FT_TRACE2, ...,
- FT_TRACE7 can be used with constant level indices, and are much
- cleaner to use, as in
-
- FT_TRACE2(( "your %s is not %s\n", "foo", "bar" ));
-
-
-III. Environment variables
---------------------------
-
-The following environment variables control debugging output and
-behaviour of FreeType at runtime.
-
-
- FT2_DEBUG
-
- This variable is only used when FreeType is built with
- FT_DEBUG_LEVEL_TRACE defined. It contains a list of component
- level definitions, following this format:
-
- component1:level1 component2:level2 component3:level3 ...
-
- where `componentX' is the name of a tracing component, as defined
- in `fttrace.h', but without the `trace_' prefix. `levelX' is the
- corresponding level to use at runtime.
-
- `any' is a special component name that will be interpreted as
- `any/all components'. For example, the following definitions
-
- set FT2_DEBUG=any:2 memory:5 io:4 (on Windows)
- export FT2_DEBUG="any:2 memory:5 io:4" (on Linux with bash)
-
- both stipulate that all components should have level 2, except for
- the memory and io components which will be set to trace levels 5
- and 4, respectively.
-
-
- FT2_DEBUG_MEMORY
-
- This environment variable, when defined, tells FreeType to use a
- debugging memory manager that will track leaking memory blocks as
- well as other common errors like double frees. It is also capable
- of reporting _where_ the leaking blocks were allocated, which
- considerably saves time when debugging new additions to the
- library.
-
- This code is only compiled when FreeType is built with the
- FT_DEBUG_MEMORY macro #defined in `ftoption.h' though, it will be
- ignored in other builds.
-
-
- FT2_ALLOC_TOTAL_MAX
-
- This variable is ignored if FT2_DEBUG_MEMORY is not defined. It
- allows you to specify a maximum heap size for all memory
- allocations performed by FreeType. This is very useful to test
- the robustness of the font engine and programs that use it in
- tight memory conditions.
-
- If it is undefined, or if its value is not strictly positive, then
- no allocation bounds are checked at runtime.
-
-
- FT2_ALLOC_COUNT_MAX
-
- This variable is ignored if FT2_DEBUG_MEMORY is not defined. It
- allows you to specify a maximum number of memory allocations
- performed by FreeType before returning the error
- FT_Err_Out_Of_Memory. This is useful for debugging and testing
- the engine's robustness.
-
- If it is undefined, or if its value is not strictly positive, then
- no allocation bounds are checked at runtime.
-
-------------------------------------------------------------------------
-
-Copyright 2002-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute this
-file you indicate that you have read the license and understand and
-accept it fully.
-
-
---- end of DEBUG ---
diff --git a/docs/FTL.TXT b/docs/FTL.TXT
deleted file mode 100644
index 433ab060e..000000000
--- a/docs/FTL.TXT
+++ /dev/null
@@ -1,169 +0,0 @@
- The FreeType Project LICENSE
- ----------------------------
-
- 2006-Jan-27
-
- Copyright 1996-2002, 2006 by
- David Turner, Robert Wilhelm, and Werner Lemberg
-
-
-
-Introduction
-============
-
- The FreeType Project is distributed in several archive packages;
- some of them may contain, in addition to the FreeType font engine,
- various tools and contributions which rely on, or relate to, the
- FreeType Project.
-
- This license applies to all files found in such packages, and
- which do not fall under their own explicit license. The license
- affects thus the FreeType font engine, the test programs,
- documentation and makefiles, at the very least.
-
- This license was inspired by the BSD, Artistic, and IJG
- (Independent JPEG Group) licenses, which all encourage inclusion
- and use of free software in commercial and freeware products
- alike. As a consequence, its main points are that:
-
- o We don't promise that this software works. However, we will be
- interested in any kind of bug reports. (`as is' distribution)
-
- o You can use this software for whatever you want, in parts or
- full form, without having to pay us. (`royalty-free' usage)
-
- o You may not pretend that you wrote this software. If you use
- it, or only parts of it, in a program, you must acknowledge
- somewhere in your documentation that you have used the
- FreeType code. (`credits')
-
- We specifically permit and encourage the inclusion of this
- software, with or without modifications, in commercial products.
- We disclaim all warranties covering The FreeType Project and
- assume no liability related to The FreeType Project.
-
-
- Finally, many people asked us for a preferred form for a
- credit/disclaimer to use in compliance with this license. We thus
- encourage you to use the following text:
-
- """
- Portions of this software are copyright © <year> The FreeType
- Project (www.freetype.org). All rights reserved.
- """
-
- Please replace <year> with the value from the FreeType version you
- actually use.
-
-
-Legal Terms
-===========
-
-0. Definitions
---------------
-
- Throughout this license, the terms `package', `FreeType Project',
- and `FreeType archive' refer to the set of files originally
- distributed by the authors (David Turner, Robert Wilhelm, and
- Werner Lemberg) as the `FreeType Project', be they named as alpha,
- beta or final release.
-
- `You' refers to the licensee, or person using the project, where
- `using' is a generic term including compiling the project's source
- code as well as linking it to form a `program' or `executable'.
- This program is referred to as `a program using the FreeType
- engine'.
-
- This license applies to all files distributed in the original
- FreeType Project, including all source code, binaries and
- documentation, unless otherwise stated in the file in its
- original, unmodified form as distributed in the original archive.
- If you are unsure whether or not a particular file is covered by
- this license, you must contact us to verify this.
-
- The FreeType Project is copyright (C) 1996-2000 by David Turner,
- Robert Wilhelm, and Werner Lemberg. All rights reserved except as
- specified below.
-
-1. No Warranty
---------------
-
- THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY
- KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
- BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO
- USE, OF THE FREETYPE PROJECT.
-
-2. Redistribution
------------------
-
- This license grants a worldwide, royalty-free, perpetual and
- irrevocable right and license to use, execute, perform, compile,
- display, copy, create derivative works of, distribute and
- sublicense the FreeType Project (in both source and object code
- forms) and derivative works thereof for any purpose; and to
- authorize others to exercise some or all of the rights granted
- herein, subject to the following conditions:
-
- o Redistribution of source code must retain this license file
- (`FTL.TXT') unaltered; any additions, deletions or changes to
- the original files must be clearly indicated in accompanying
- documentation. The copyright notices of the unaltered,
- original files must be preserved in all copies of source
- files.
-
- o Redistribution in binary form must provide a disclaimer that
- states that the software is based in part of the work of the
- FreeType Team, in the distribution documentation. We also
- encourage you to put an URL to the FreeType web page in your
- documentation, though this isn't mandatory.
-
- These conditions apply to any software derived from or based on
- the FreeType Project, not just the unmodified files. If you use
- our work, you must acknowledge us. However, no fee need be paid
- to us.
-
-3. Advertising
---------------
-
- Neither the FreeType authors and contributors nor you shall use
- the name of the other for commercial, advertising, or promotional
- purposes without specific prior written permission.
-
- We suggest, but do not require, that you use one or more of the
- following phrases to refer to this software in your documentation
- or advertising materials: `FreeType Project', `FreeType Engine',
- `FreeType library', or `FreeType Distribution'.
-
- As you have not signed this license, you are not required to
- accept it. However, as the FreeType Project is copyrighted
- material, only this license, or another one contracted with the
- authors, grants you the right to use, distribute, and modify it.
- Therefore, by using, distributing, or modifying the FreeType
- Project, you indicate that you understand and accept all the terms
- of this license.
-
-4. Contacts
------------
-
- There are two mailing lists related to FreeType:
-
- o freetype@nongnu.org
-
- Discusses general use and applications of FreeType, as well as
- future and wanted additions to the library and distribution.
- If you are looking for support, start in this list if you
- haven't found anything to help you in the documentation.
-
- o freetype-devel@nongnu.org
-
- Discusses bugs, as well as engine internals, design issues,
- specific licenses, porting, etc.
-
- Our home page can be found at
-
- http://www.freetype.org
-
-
---- end of FTL.TXT ---
diff --git a/docs/GPLv2.TXT b/docs/GPLv2.TXT
deleted file mode 100644
index b2fe7b6af..000000000
--- a/docs/GPLv2.TXT
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- 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.
-
- 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/docs/INSTALL b/docs/INSTALL
deleted file mode 100644
index d6ec0d83b..000000000
--- a/docs/INSTALL
+++ /dev/null
@@ -1,90 +0,0 @@
-
-There are several ways to build the FreeType library, depending on
-your system and the level of customization you need. Here is a short
-overview of the documentation available:
-
-
-I. Normal installation and upgrades
-===================================
-
- 1. Unix Systems (including Mac OS X, Cygwin, and MSys on Windows)
-
- Please read `INSTALL.UNIX' to install or upgrade FreeType 2 on a
- Unix system. Note that you *need* GNU Make for automatic
- compilation, since other make tools won't work (this includes BSD
- Make).
-
- GNU Make VERSION 3.80 OR NEWER IS NEEDED!
-
- [For `cmake' see below.]
-
-
- 2. On VMS with the `mms' build tool
-
- See `INSTALL.VMS' for installation instructions on this platform.
-
-
- 3. Other systems using GNU Make
-
- On non-Unix platforms, it is possible to build the library using
- GNU Make utility. Note that *NO OTHER MAKE TOOL WILL WORK*[1]!
- This methods supports several compilers on Windows, OS/2, and
- BeOS, including MinGW, Visual C++, Borland C++, and more.
-
- Instructions are provided in the file `INSTALL.GNU'.
-
-
- 4. With an IDE Project File (e.g., for Visual Studio or CodeWarrior)
-
- We provide a small number of `project files' for various IDEs to
- automatically build the library as well. Note that these files
- are not supported and only sporadically maintained by FreeType
- developers, so don't expect them to work in each release.
-
- To find them, have a look at the content of the `builds/<system>'
- directory, where <system> stands for your OS or environment.
-
-
- 5. Using cmake
-
- See the top-level `CMakeLists.txt' file for more information.
-
-
- 6. From you own IDE, or own Makefiles
-
- If you want to create your own project file, follow the
- instructions given in the `INSTALL.ANY' document of this
- directory.
-
-
-II. Custom builds of the library
-================================
-
- Customizing the compilation of FreeType is easy, and allows you to
- select only the components of the font engine that you really need.
- For more details read the file `CUSTOMIZE'.
-
-
-----------------------------------------------------------------------
-
-[1] make++, a make tool written in Perl, has sufficient support of GNU
- make extensions to build FreeType. See
-
- http://makepp.sourceforge.net
-
- for more information; you need version 1.19 or newer, and you must
- pass option `--norc-substitution'.
-
-----------------------------------------------------------------------
-
-Copyright 2000-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute
-this file you indicate that you have read the license and understand
-and accept it fully.
-
-
---- end of INSTALL ---
diff --git a/docs/INSTALL.ANY b/docs/INSTALL.ANY
deleted file mode 100644
index 30b957859..000000000
--- a/docs/INSTALL.ANY
+++ /dev/null
@@ -1,156 +0,0 @@
-Instructions on how to build FreeType with your own build tool
-==============================================================
-
-See the file `CUSTOMIZE' to learn how to customize FreeType to
-specific environments.
-
-
-I. Standard procedure
----------------------
-
- * DISABLE PRE-COMPILED HEADERS! This is very important for Visual
- C++, because FreeType uses lines like:
-
- #include FT_FREETYPE_H
-
- which are not correctly supported by this compiler while being ISO
- C compliant!
-
- * You need to add the directory `include' to your include path when
- compiling the library.
-
- * FreeType 2 is made of several components; each of them is located
- in a subdirectory of `freetype2/src'. For example,
- `freetype2/src/truetype/' contains the TrueType font driver.
-
- * DO NOT COMPILE ALL C FILES! Rather, compile the following ones.
-
- -- base components (required)
-
- src/base/ftsystem.c
- src/base/ftinit.c
- src/base/ftdebug.c
-
- src/base/ftbase.c
-
- src/base/ftbbox.c -- recommended, see <ftbbox.h>
- src/base/ftglyph.c -- recommended, see <ftglyph.h>
-
- src/base/ftbdf.c -- optional, see <ftbdf.h>
- src/base/ftbitmap.c -- optional, see <ftbitmap.h>
- src/base/ftcid.c -- optional, see <ftcid.h>
- src/base/ftfntfmt.c -- optional, see <ftfntfmt.h>
- src/base/ftfstype.c -- optional
- src/base/ftgasp.c -- optional, see <ftgasp.h>
- src/base/ftgxval.c -- optional, see <ftgxval.h>
- src/base/ftlcdfil.c -- optional, see <ftlcdfil.h>
- src/base/ftmm.c -- optional, see <ftmm.h>
- src/base/ftotval.c -- optional, see <ftotval.h>
- src/base/ftpatent.c -- optional
- src/base/ftpfr.c -- optional, see <ftpfr.h>
- src/base/ftstroke.c -- optional, see <ftstroke.h>
- src/base/ftsynth.c -- optional, see <ftsynth.h>
- src/base/fttype1.c -- optional, see <t1tables.h>
- src/base/ftwinfnt.c -- optional, see <ftwinfnt.h>
-
- src/base/ftmac.c -- only on the Macintosh
-
- -- font drivers (optional; at least one is needed)
-
- src/bdf/bdf.c -- BDF font driver
- src/cff/cff.c -- CFF/OpenType font driver
- src/cid/type1cid.c -- Type 1 CID-keyed font driver
- src/pcf/pcf.c -- PCF font driver
- src/pfr/pfr.c -- PFR/TrueDoc font driver
- src/sfnt/sfnt.c -- SFNT files support
- (TrueType & OpenType)
- src/truetype/truetype.c -- TrueType font driver
- src/type1/type1.c -- Type 1 font driver
- src/type42/type42.c -- Type 42 font driver
- src/winfonts/winfnt.c -- Windows FONT / FNT font driver
-
- -- rasterizers (optional; at least one is needed for vector
- formats)
-
- src/raster/raster.c -- monochrome rasterizer
- src/smooth/smooth.c -- anti-aliasing rasterizer
-
- -- auxiliary modules (optional)
-
- src/autofit/autofit.c -- auto hinting module
- src/cache/ftcache.c -- cache sub-system (in beta)
- src/gzip/ftgzip.c -- support for compressed fonts (.gz)
- src/lzw/ftlzw.c -- support for compressed fonts (.Z)
- src/bzip2/ftbzip2.c -- support for compressed fonts (.bz2)
- src/gxvalid/gxvalid.c -- TrueTypeGX/AAT table validation
- src/otvalid/otvalid.c -- OpenType table validation
- src/psaux/psaux.c -- PostScript Type 1 parsing
- src/pshinter/pshinter.c -- PS hinting module
- src/psnames/psnames.c -- PostScript glyph names support
-
-
- Notes:
-
- `ftcache.c' needs `ftglyph.c'
- `ftfstype.c' needs `fttype1.c'
- `ftglyph.c' needs `ftbitmap.c'
- `ftstroke.c' needs `ftglyph.c'
- `ftsynth.c' needs `ftbitmap.c'
-
- `cff.c' needs `sfnt.c', `pshinter.c', and `psnames.c'
- `truetype.c' needs `sfnt.c' and `psnames.c'
- `type1.c' needs `psaux.c' `pshinter.c', and `psnames.c'
- `type1cid.c' needs `psaux.c', `pshinter.c', and `psnames.c'
- `type42.c' needs `truetype.c'
-
- Please consult the central `include/freetype/config/ftoption.h'
- configuration file for details on additional libraries necessary
- for some optional features.
-
-
- Read the file `CUSTOMIZE' in case you want to compile only a subset
- of the drivers, renderers, and optional modules; a detailed
- description of the various base extension is given in the top-level
- file `modules.cfg'.
-
- You are done. In case of problems, see the archives of the FreeType
- development mailing list.
-
-
-II. Support for flat-directory compilation
-------------------------------------------
-
- It is possible to put all FreeType 2 source files into a single
- directory, with the *exception* of the `include' hierarchy.
-
- 1. Copy all files in current directory
-
- cp freetype2/src/base/*.[hc] .
- cp freetype2/src/raster1/*.[hc] .
- cp freetype2/src/smooth/*.[hc] .
- etc.
-
- 2. Compile sources
-
- cc -c -Iinclude -DFT2_BUILD_LIBRARY ftsystem.c
- cc -c -Iinclude -DFT2_BUILD_LIBRARY ftinit.c
- cc -c -Iinclude -DFT2_BUILD_LIBRARY ftdebug.c
- cc -c -Iinclude -DFT2_BUILD_LIBRARY ftbase.c
- etc.
-
- You don't need to define the FT_FLAT_COMPILATION macro (as this
- was required in previous releases of FreeType 2).
-
-----------------------------------------------------------------------
-
-Copyright 2003-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute
-this file you indicate that you have read the license and understand
-and accept it fully.
-
-
---- end of INSTALL.ANY ---
diff --git a/docs/INSTALL.CROSS b/docs/INSTALL.CROSS
deleted file mode 100644
index 1a837aeee..000000000
--- a/docs/INSTALL.CROSS
+++ /dev/null
@@ -1,177 +0,0 @@
-This document contains instructions on how to cross-build the FreeType
-library on Unix systems, for example, building binaries for Linux/MIPS
-on FreeBSD/i386. Before reading this document, please consult the
-file `INSTALL.UNIX' for required tools and the basic self-building
-procedure.
-
-
- 1. Required Tools
- -----------------
-
- For self-building the FreeType library on a Unix system, GNU Make
- 3.80 or newer is required. `INSTALL.UNIX' contains hints how to
- check the installed `make'.
-
- The GNU C compiler to cross-build the target system is required.
- Currently, using a non-GNU cross compiler is untested. The cross
- compiler is expected to be installed with a system prefix. For
- example, if your building system is FreeBSD/i386 and the target
- system is Linux/MIPS, the cross compiler should be installed with
- the name `mips-ip22-linuxelf-gcc'.
-
- A C compiler for a self-build is required also, to build a tool
- (`apinames') that is executed during the build procedure. Non-GNU
- self compilers are acceptable, but such a setup is untested.
-
-
- 2. Configuration
- ----------------
-
- 2.1. Building and target system
-
- To configure a cross-build, the options `--host=<system>' and
- `--build=<system>' must be passed to the `configure' script.
- For example, if your build system is FreeBSD/i386 and the target
- system is Linux/MIPS, say
-
- ./configure \
- --build=i386-unknown-freebsd \
- --host=mips-ip22-linuxelf \
- [other options]
-
- It should be noted that `--host=<system>' specifies the system
- where the built binaries will be executed, not the system where
- the build actually happens. Older versions of GNU autoconf use
- the option pair `--host=' and `--target='. This is broken and
- doesn't work. Similarly, an explicit CC specification like
-
- env CC=mips-ip22-linux-gcc ./configure # BAD
-
- or
-
- env CC=/usr/local/mips-ip22-linux/bin/gcc ./configure # BAD
-
- doesn't work either; such a configuration confuses the
- `configure' script while trying to find the cross and native C
- compilers.
-
-
- 2.2. The prefix to install FreeType2
-
- Setting `--prefix=<prefix>' properly is important. The prefix
- to install FreeType2 is written into the `freetype-config'
- script and `freetype2.pc' configuration file.
-
- If the built FreeType 2 library is used as a part of the
- cross-building system, the prefix is expected to be different
- from the self-building system. For example, a configuration
- with `--prefix=/usr/local' installs binaries into the
- system-wide `/usr/local' directory, which then can't be executed
- due to the incorrect architecture. This causes confusion in
- configuration of all applications that use FreeType2. Instead,
- use a prefix to install the cross-build into a separate system
- tree, for example, `--prefix=/usr/local/mips-ip22-linux/'.
-
- On the other hand, if the built FreeType 2 library is used as a
- part of the target system, the prefix to install should reflect
- the file system structure of the target system.
-
-
- 2.3. Library dependencies
-
- FreeType normally depends on external libraries like `libpng' or
- `libharfbuzz'. The easiest case is to deactivate all such
- dependencies using the `--without-XXX' configuration options.
- However, if you want to use those libraries, you should ensure
- that they are available both on the target system and as
- (cross-compiled) libraries on the build system.
-
- FreeType uses `pkg-config' to find most of the libraries; the
- other libraries it links to are expected in the standard system
- directories. Since the default pkg-config's meta-information
- files (like `harfbuzz.pc') of the build platform don't work, use
- one of the two possible solutions below.
-
- o Use pkg-config's meta-information files that are adjusted to
- cross-compile and cross-link with the target platform's
- libraries. Make sure those files are found before the build
- system's default files. Example:
-
- ./configure \
- --build=i386-unknown-freebsd \
- --host=mips-ip22-linuxelf \
- PKG_CONFIG_LIBDIR="/usr/local/mips-ip22-linux/lib/pkgconfig" \
- [other options]
-
- See the manpage of `pkg-config' for more details.
-
- o Set variables like LIBPNG_LIBS as additional options to the
- `configure' script, overriding the values `pkg-config' would
- provide. `configure --help' shows the available environment
- variables. Example:
-
- ./configure \
- --build=i386-unknown-freebsd \
- --host=mips-ip22-linuxelf \
- LIBPNG_CFLAGS="-I/usr/local/mips-ip22-linux/include" \
- LIBPNG_LIBS="-L/usr/local/mips-ip22-linux/lib -lpng12" \
- [other options]
-
-
- 3. Building command
- -------------------
-
- If the configuration finishes successfully, invoking GNU make
- builds FreeType2. Just say
-
- make
-
- or
-
- gmake
-
- depending on the name the GNU make binary actually has.
-
-
- 4. Installation
- ---------------
-
- Saying
-
- make install
-
- as usual to install FreeType2 into the directory tree specified by
- the argument of the `--prefix' option.
-
- As noted in section 2.2, FreeType2 is sometimes configured to be
- installed into the system directory of the target system, and
- should not be installed in the cross-building system. In such
- cases, the make variable `DESTDIR' is useful to change the root
- directory in the installation. For example, after
-
- make DESTDIR=/mnt/target_system_root/ install
-
- the built FreeType2 library files are installed into the directory
- `/mnt/target_system_root/<prefix_in_configure>/lib'.
-
-
- 5. TODO
- -------
-
- Cross building between Cygwin (or MSys) and Unix must be tested.
-
-
-----------------------------------------------------------------------
-
-Copyright 2006-2017 by
-suzuki toshiya, David Turner, Robert Wilhelm, and Werner Lemberg.
-
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute
-this file you indicate that you have read the license and understand
-and accept it fully.
-
-
---- end of INSTALL.CROSS ---
diff --git a/docs/INSTALL.GNU b/docs/INSTALL.GNU
deleted file mode 100644
index 79b53d842..000000000
--- a/docs/INSTALL.GNU
+++ /dev/null
@@ -1,161 +0,0 @@
-This document contains instructions how to build the FreeType library
-on non-Unix systems with the help of GNU Make. Note that if you are
-running Cygwin or MinGW/MSYS in Windows, you should follow the
-instructions in the file `INSTALL.UNIX' instead.
-
-
- FreeType 2 includes a powerful and flexible build system that allows
- you to easily compile it on a great variety of platforms from the
- command line. To do so, just follow these simple instructions.
-
- 1. Install GNU Make
- -------------------
-
- Because GNU Make is the only Make tool supported to compile
- FreeType 2, you should install it on your machine.
-
- The FreeType 2 build system relies on many features special to GNU
- Make.
-
- NEARLY ALL OTHER MAKE TOOLS FAIL, INCLUDING `BSD MAKE', SO REALLY
- INSTALL A RECENT VERSION OF GNU MAKE ON YOUR SYSTEM!
-
- Note that make++, a make tool written in Perl, supports enough
- features of GNU make to compile FreeType. See
-
- http://makepp.sourceforge.net
-
- for more information; you need version 1.19 or newer, and you must
- pass option `--norc-substitution'.
-
- Make sure that you are invoking GNU Make from the command line, by
- typing something like:
-
- make -v
-
- to display its version number.
-
- VERSION 3.80 OR NEWER IS NEEDED!
-
-
- 2. Invoke `make'
- ----------------
-
- Go to the root directory of FreeType 2, then simply invoke GNU
- Make from the command line. This will launch the FreeType 2 host
- platform detection routines. A summary will be displayed, for
- example, on Win32.
-
-
- ==============================================================
- FreeType build system -- automatic system detection
-
- The following settings are used:
-
- platform windows
- compiler gcc
- configuration directory .\builds\windows
- configuration rules .\builds\windows\w32-gcc.mk
-
- If this does not correspond to your system or settings please
- remove the file 'config.mk' from this directory then read the
- INSTALL file for help.
-
- Otherwise, simply type 'make' again to build the library
- or 'make refdoc' to build the API reference (the latter needs
- python).
- =============================================================
-
-
- If the detected settings correspond to your platform and compiler,
- skip to step 5. Note that if your platform is completely alien to
- the build system, the detected platform will be `ansi'.
-
-
- 3. Configure the build system for a different compiler
- ------------------------------------------------------
-
- If the build system correctly detected your platform, but you want
- to use a different compiler than the one specified in the summary
- (for most platforms, gcc is the default compiler), invoke GNU Make
- with
-
- make setup <compiler>
-
- Examples:
-
- to use Visual C++ on Win32, type: `make setup visualc'
- to use Borland C++ on Win32, type `make setup bcc32'
- to use Watcom C++ on Win32, type `make setup watcom'
- to use Intel C++ on Win32, type `make setup intelc'
- to use LCC-Win32 on Win32, type: `make setup lcc'
- to use Watcom C++ on OS/2, type `make setup watcom'
- to use VisualAge C++ on OS/2, type `make setup visualage'
-
- The <compiler> name to use is platform-dependent. The list of
- available compilers for your system is available in the file
- `builds/<system>/detect.mk'.
-
- If you are satisfied by the new configuration summary, skip to
- step 5.
-
-
- 4. Configure the build system for an unknown platform/compiler
- --------------------------------------------------------------
-
- The auto-detection/setup phase of the build system copies a file
- to the current directory under the name `config.mk'.
-
- For example, on OS/2+gcc, it would simply copy
- `builds/os2/os2-gcc.mk' to `./config.mk'.
-
- If for some reason your platform isn't correctly detected, copy
- manually the configuration sub-makefile to `./config.mk' and go to
- step 5.
-
- Note that this file is a sub-Makefile used to specify Make
- variables for compiler and linker invocation during the build.
- You can easily create your own version from one of the existing
- configuration files, then copy it to the current directory under
- the name `./config.mk'.
-
-
- 5. Build the library
- --------------------
-
- The auto-detection/setup phase should have copied a file in the
- current directory, called `./config.mk'. This file contains
- definitions of various Make variables used to invoke the compiler
- and linker during the build. [It has also generated a file called
- `ftmodule.h' in the objects directory (which is normally
- `<toplevel>/objs/'); please read the file `docs/CUSTOMIZE' for
- customization of FreeType.]
-
- To launch the build, simply invoke GNU Make again: The top
- Makefile will detect the configuration file and run the build with
- it.
-
-
- Final note
-
- The above instructions build a _statically_ linked library of the
- font engine in the `objs' directory. On Windows, you can build a
- DLL either with MinGW (within an MSYS shell, following the
- instructions in `INSTALL.UNIX'), or you use one of the Visual C++
- project files; see the subdirectories of `builds/windows'. For
- everything else, you are on your own, and you might follow the
- instructions in `INSTALL.ANY' to create your own Makefiles.
-
-----------------------------------------------------------------------
-
-Copyright 2003-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute
-this file you indicate that you have read the license and understand
-and accept it fully.
-
-
---- end of INSTALL.GNU ---
diff --git a/docs/INSTALL.MAC b/docs/INSTALL.MAC
deleted file mode 100644
index 2587e24a6..000000000
--- a/docs/INSTALL.MAC
+++ /dev/null
@@ -1,32 +0,0 @@
-Please follow the instructions in INSTALL.UNIX to install FreeType on
-Mac OS X.
-
-Currently FreeType2 functions based on some deprecated Carbon APIs
-return `FT_Err_Unimplemented_Feature' always, even if FreeType2 is
-configured and built on the system that deprecated Carbon APIs are
-available. To enable deprecated FreeType2 functions as far as
-possible, replace `src/base/ftmac.c' by `builds/mac/ftmac.c'.
-
-Starting with Mac OS X 10.5, gcc defaults the deployment target to
-10.5. In previous versions of Mac OS X, this defaulted to 10.1. If
-you want your built binaries to run only on 10.5, this change does not
-concern you. If you want them to also run on older versions of Mac
-OS X, then you must either set the MACOSX_DEPLOYMENT_TARGET
-environment variable or pass `-mmacosx-version-min' to gcc. You
-should specify the oldest version of Mac OS you want the code to run
-on. For example, if you use Bourne shell:
-
- export MACOSX_DEPLOYMENT_TARGET=10.2
-
-or, if you use C shell:
-
- setenv MACOSX_DEPLOYMENT_TARGET 10.2
-
-Alternatively, you could pass `-mmacosx-version-min=10.2' to gcc.
-
-Here the number 10.2 is the lowest version that the built binaries can
-run on. In the above cases, the built binaries will run on Mac OS X
-10.2 and later, but _not_ earlier. If you want to run on earlier, you
-have to set lower version, e.g., 10.0.
-
-For classic Mac OS (Mac OS 7, 8, 9) please refer to builds/mac/README.
diff --git a/docs/INSTALL.UNIX b/docs/INSTALL.UNIX
deleted file mode 100644
index 8b620da68..000000000
--- a/docs/INSTALL.UNIX
+++ /dev/null
@@ -1,118 +0,0 @@
-This document contains instructions on how to build the FreeType
-library on Unix systems. This also works for emulations like Cygwin
-or MSys on Win32:
-
-
- 1. Ensure that you are using GNU Make
- -------------------------------------
-
- The FreeType build system _exclusively_ works with GNU Make. You
- will not be able to compile the library with the instructions
- below using any other alternative (including BSD Make).
-
- Check that you have GNU make by running the command:
-
- make -v
-
- This should dump some text that begins with:
-
- GNU Make <version number>
- Copyright (C) <year> Free Software Foundation Inc.
-
- Note that version 3.80 or higher is *required* or the build will
- fail.
-
- It is also fine to have GNU Make under another name (e.g. 'gmake')
- if you use the MAKE variable as described below.
-
- As a special exception, 'makepp' can also be used to build
- FreeType 2. See the file docs/MAKEPP for details.
-
- For builds with `cmake' please check file `CMakeLists.txt'; this
- is a contributed file not directly supported by the FreeType team.
-
-
- 2. Regenerate the configure script if needed
- --------------------------------------------
-
- This only applies if you are building a git snapshot or checkout,
- *not* if you grabbed the sources of an official release.
-
- You need to invoke the `autogen.sh' script in the top-level
- directory in order to create the `configure' script for your
- platform. Normally, this simply means typing:
-
- sh autogen.sh
-
- In case of problems, you may need to install or upgrade Automake,
- Autoconf or Libtool. See README.git in the top-level directory
- for more information.
-
-
- 3. Build and install the library
- --------------------------------
-
- The following should work on all Unix systems where the `make'
- command invokes GNU Make:
-
- ./configure [options]
- make
- make install (as root)
-
- The default installation path is `/usr/local'. It can be changed
- with the `--prefix=<path>' option. Example:
-
- ./configure --prefix=/usr
-
- When using a different command to invoke GNU Make, use the MAKE
- variable. For example, if `gmake' is the command to use on your
- system, do something like:
-
- MAKE=gmake ./configure [options]
- gmake
- gmake install (as root)
-
- If this still doesn't work, there must be a problem with your
- system (e.g., you are using a very old version of GNU Make).
-
- It is possible to compile FreeType in a different directory.
- Assuming the FreeType source files in directory `/src/freetype' a
- compilation in directory `foo' works as follows:
-
- cd foo
- /src/freetype/configure [options]
- make
- make install
-
-
- 3.1 Interdependency with HarfBuzz
- .................................
-
- Note that there is a chicken-and-egg problem currently since the
- HarfBuzz library (used by the auto-hinter to improve support of
- OpenType fonts) depends on FreeType, which can be solved as
- follows in case HarfBuzz is not yet installed on your system.
-
- 1. Call FreeType's `configure' script with option
- `--without-harfbuzz', then compile and install FreeType.
-
- 2. Compile and install HarfBuzz.
-
- 3. Call FreeType's `configure' script without option
- `--without-harfbuzz' (after executing `make distclean'), then
- compile and install FreeType again.
-
-
-----------------------------------------------------------------------
-
-Copyright 2003-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute
-this file you indicate that you have read the license and understand
-and accept it fully.
-
-
---- end of INSTALL.UNIX ---
diff --git a/docs/INSTALL.VMS b/docs/INSTALL.VMS
deleted file mode 100644
index 7a5174d2e..000000000
--- a/docs/INSTALL.VMS
+++ /dev/null
@@ -1,62 +0,0 @@
-How to build the freetype2 library on VMS
------------------------------------------
-
-It is actually very straightforward to install the Freetype2 library.
-Just execute vms_make.com from the toplevel directory to build the
-library. This procedure currently accepts the following options:
-
-DEBUG
- Build the library with debug information and without optimization.
-
-lopts=<value>
- Options to pass to the link command e.g. lopts=/traceback
-
-ccopt=<value>
- Options to pass to the C compiler e.g. ccopt=/float=ieee
-
-In case you did download the demos, place them in a separate directory
-sharing the same toplevel as the directory of Freetype2 and follow the
-same instructions as above for the demos from there. The build
-process relies on this to figure the location of the Freetype2 include
-files.
-
-
-To rebuild the sources it is necessary to have MMS/MMK installed on
-the system.
-
-The library is available in the directory
-
- [.LIB]
-
-To compile applications using FreeType 2 you have to define the
-logical FREETYPE pointing to the directory
-
- [.INCLUDE.FREETYPE]
-
-i.e., if the directory in which this INSTALL.VMS file is located is
-$disk:[freetype] then define the logical with
-
- define freetype $disk:[freetype.include.freetype]
-
-This version has been tested with Compaq C V6.2-006 on OpenVMS Alpha
-V7.2-1.
-
-
- Any problems can be reported to
-
- Jouk Jansen <joukj@hrem.stm.tudelft.nl> or
- Martin P.J. Zinser <zinser@zinser.no-ip.info>
-
-------------------------------------------------------------------------
-
-Copyright 2000-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute this
-file you indicate that you have read the license and understand and
-accept it fully.
-
-
---- end of INSTALL.VMS ---
diff --git a/docs/LICENSE.TXT b/docs/LICENSE.TXT
deleted file mode 100644
index af5a1c50f..000000000
--- a/docs/LICENSE.TXT
+++ /dev/null
@@ -1,39 +0,0 @@
-
-The FreeType 2 font engine is copyrighted work and cannot be used
-legally without a software license. In order to make this project
-usable to a vast majority of developers, we distribute it under two
-mutually exclusive open-source licenses.
-
-This means that *you* must choose *one* of the two licenses described
-below, then obey all its terms and conditions when using FreeType 2 in
-any of your projects or products.
-
- - The FreeType License, found in the file `FTL.TXT', which is similar
- to the original BSD license *with* an advertising clause that forces
- you to explicitly cite the FreeType project in your product's
- documentation. All details are in the license file. This license
- is suited to products which don't use the GNU General Public
- License.
-
- Note that this license is compatible to the GNU General Public
- License version 3, but not version 2.
-
- - The GNU General Public License version 2, found in `GPLv2.TXT' (any
- later version can be used also), for programs which already use the
- GPL. Note that the FTL is incompatible with GPLv2 due to its
- advertisement clause.
-
-The contributed BDF and PCF drivers come with a license similar to that
-of the X Window System. It is compatible to the above two licenses (see
-file src/bdf/README and src/pcf/README). The same holds for the files
-`fthash.c' and `fthash.h'; their code was part of the BDF driver in
-earlier FreeType versions.
-
-The gzip module uses the zlib license (see src/gzip/zlib.h) which too is
-compatible to the above two licenses.
-
-The MD5 checksum support (only used for debugging in development builds)
-is in the public domain.
-
-
---- end of LICENSE.TXT ---
diff --git a/docs/MAKEPP b/docs/MAKEPP
deleted file mode 100644
index 58eaf551d..000000000
--- a/docs/MAKEPP
+++ /dev/null
@@ -1,5 +0,0 @@
-As a special exception, FreeType can also be built with the 'makepp'
-build tool, available from http://makepp.sourceforge.net.
-
-Note, however. that you will need at least version 1.19 and pass the
-option --norc-substitution to have it work correctly.
diff --git a/docs/PROBLEMS b/docs/PROBLEMS
deleted file mode 100644
index 40bdc35a6..000000000
--- a/docs/PROBLEMS
+++ /dev/null
@@ -1,90 +0,0 @@
-This file describes various problems that have been encountered in
-compiling, installing and running FreeType 2. Suggestions for
-additions or other improvements to this file are welcome.
-
-----------------------------------------------------------------------
-
-Running Problems
-================
-
-
-* Some Type 1, Multiple Masters, and CID-keyed PostScript fonts aren't
- handled correctly.
-
------
-
-Of course, there might be bugs in FreeType, but some fonts based on
-the PostScript format can't be handled indeed. The reason is that
-FreeType doesn't contain a full PostScript interpreter but applies
-pattern matching instead. In case a font doesn't follow the standard
-structure of the given font format, FreeType fails. A typical example
-is Adobe's `Optima' font family which contains extra code to switch
-between low and high resolution versions of the glyphs.
-
-It might be possible to patch FreeType in some situations, though.
-Please report failing fonts so that we investigate the problem and set
-up a list of such problematic fonts.
-
-
-* Why do identical FreeType versions render differently on different
- platforms?
-
------
-
-Different distributions compile FreeType with different options. The
-developer version of a distribution's FreeType package, which is
-needed to compile your program against FreeType, includes the file
-ftoption.h. Compare each platform's copy of ftoption.h to find the
-differences.
-
-
-----------------------------------------------------------------------
-
-
-Compilation Problems
-====================
-
-
-* I get an `internal compilation error' (ICE) while compiling FreeType
- 2.2.1 with Intel C++.
-
- This has been reported for the following compiler version:
-
- Intel(R) C++ Compiler for 32-bit applications,
- Version 9.0 Build 20050430Z Package ID: W_CC_P_9.0.019
-
------
-
-The best solution is to update the compiler to version
-
- Intel(R) C++ Compiler for 32-bit applications,
- Version 9.1 Build 20060323Z Package ID: W_CC_P_9.1.022
-
-or newer. If this isn't feasible, apply the following patch.
-
-
---- src/cache/ftcbasic.c 20 Mar 2006 12:10:24 -0000 1.20
-+++ src/cache/ftcbasic.c.patched 15 May 2006 02:51:02 -0000
-@@ -252,7 +252,7 @@
- */
-
- FT_CALLBACK_TABLE_DEF
-- const FTC_IFamilyClassRec ftc_basic_image_family_class =
-+ FTC_IFamilyClassRec ftc_basic_image_family_class =
- {
- {
- sizeof ( FTC_BasicFamilyRec ),
-@@ -266,7 +266,7 @@
-
-
- FT_CALLBACK_TABLE_DEF
-- const FTC_GCacheClassRec ftc_basic_image_cache_class =
-+ FTC_GCacheClassRec ftc_basic_image_cache_class =
- {
- {
- ftc_inode_new,
-
-
-----------------------------------------------------------------------
-
---- end of PROBLEMS ---
diff --git a/docs/TODO b/docs/TODO
deleted file mode 100644
index c4304b323..000000000
--- a/docs/TODO
+++ /dev/null
@@ -1,40 +0,0 @@
-Here is a list of items that need to be addressed in FreeType 2
----------------------------------------------------------------
-
-* Implement stem3/counter hints properly in the Postscript hinter.
-
-* Add CIDCMap support to the CID driver.
-
-* Add track kerning support to the PFR driver.
-
-* Add kerning (AFM file) support to the CID driver.
-
-
-Here is a list of bugs which should be handled
-----------------------------------------------
-
-Other bugs have been registered at the savannah bugzilla of FreeType.
-
-* CID driver:
- Handle the case where a CID font has a top-level font matrix also
- (see PLRM, 5.11.3, Type 0 CIDFonts). Since CID_FaceInfoRec lacks
- a font_matrix entry we have to directly apply it to all subfont
- matrices.
-
-* CID driver:
- Use top-level font matrix entry for setting the upem value, not the
- entries in the FDarray. If absent, use 1000.
-
-------------------------------------------------------------------------
-
-Copyright 2001-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute this
-file you indicate that you have read the license and understand and
-accept it fully.
-
-
---- end of TODO ---
diff --git a/docs/VERSIONS.TXT b/docs/VERSIONS.TXT
deleted file mode 100644
index e116d34cb..000000000
--- a/docs/VERSIONS.TXT
+++ /dev/null
@@ -1,124 +0,0 @@
-Due to our use of `libtool' to generate and install the FreeType 2
-libraries on Unix systems, as well as other historical events, it is
-generally very difficult to know precisely which release of the font
-engine is installed on a given system.
-
-This file tries to explain why and to document ways to properly detect
-FreeType on Unix.
-
-
-1. Version and Release numbers
-------------------------------
-
-For each new public release of FreeType 2, there are generally *three*
-distinct `version' numbers to consider:
-
- * The official FreeType 2 release number, like 2.3.1 or 2.4.10.
-
- * The libtool (and Unix) specific version number, like 13.0.7. This
- is what `freetype-config --version' returns.
-
- * The platform-specific shared object number, used for example when
- the library is installed as `/usr/lib/libfreetype.so.6.7.1'.
-
-The platform-specific number is, unsurprisingly, platform-specific and
-varies with the operating system you are using (several variants of
-Linux, FreeBSD, Solaris, etc.). You should thus _never_ use it, even
-for simple tests.
-
-The libtool-specific number does not equal the release number but is
-tied to it.
-
-The release number is available at *compile* time through the following
-macros defined in FT_FREETYPE_H:
-
- - FREETYPE_MAJOR: major release number
- - FREETYPE_MINOR: minor release number
- - FREETYPE_PATCH: patch release number
-
-See below for a small autoconf fragment.
-
-The release number is also available at *runtime* through the
-`FT_Library_Version' API.
-
-
-2. History
-----------
-
-The following table gives, for all releases since 2.4.0, the
-corresponding libtool number, as well as the shared object number found
-on _most_ systems, but not all of them:
-
-
- release libtool so
- -------------------------------
- 2.8.0 20.0.14 6.14.0
- 2.7.1 19.0.13 6.13.0
- 2.7.0 18.6.12 6.12.6
- 2.6.5 18.5.12 6.12.5
- 2.6.4 18.4.12 6.12.4
- 2.6.3 18.3.12 6.12.3
- 2.6.2 18.2.12 6.12.2
- 2.6.1 18.1.12 6.12.1
- 2.6.0 18.0.12 6.12.0
- 2.5.5 17.4.11 6.11.4
- 2.5.4 17.3.11 6.11.3
- 2.5.3 17.2.11 6.11.2
- 2.5.2 17.1.11 6.11.1
- 2.5.1 17.0.11 6.11.0
- 2.5.0 16.2.10 6.10.2
- 2.4.12 16.1.10 6.10.1
- 2.4.11 16.0.10 6.10.0
- 2.4.10 15.0.9 6.9.0
- 2.4.9 14.1.8 6.8.1
- 2.4.8 14.0.8 6.8.0
- 2.4.7 13.2.7 6.7.2
- 2.4.6 13.1.7 6.7.1
- 2.4.5 13.0.7 6.7.0
- 2.4.4 12.2.6 6.6.2
- 2.4.3 12.1.6 6.6.1
- 2.4.2 12.0.6 6.6.0
- 2.4.1 11.1.5 6.5.1
- 2.4.0 11.0.5 6.5.0
-
-
-3. Autoconf Code Fragment
--------------------------
-
-Lars Clausen contributed the following autoconf fragment to detect which
-version of FreeType is installed on a system. This one tests for a
-version that is at least 2.0.9; you should change it to check against
-other release numbers.
-
-
- AC_MSG_CHECKING([whether FreeType version is 2.0.9 or higher])
- old_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS=`freetype-config --cflags`
- AC_TRY_CPP([
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#if (FREETYPE_MAJOR*1000 + FREETYPE_MINOR)*1000 + FREETYPE_PATCH < 2000009
-#error Freetype version too low.
-#endif
- ],
- [AC_MSG_RESULT(yes)
- FREETYPE_LIBS=`freetype-config --libs`
- AC_SUBST(FREETYPE_LIBS)
- AC_DEFINE(HAVE_FREETYPE,1,[Define if you have the FreeType2 library])
- CPPFLAGS="$old_CPPFLAGS"],
- [AC_MSG_ERROR([Need FreeType library version 2.0.9 or higher])])
-
-------------------------------------------------------------------------
-
-Copyright 2002-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute this
-file you indicate that you have read the license and understand and
-accept it fully.
-
-
---- end of VERSIONS.TXT ---
diff --git a/docs/formats.txt b/docs/formats.txt
deleted file mode 100644
index 1c494f063..000000000
--- a/docs/formats.txt
+++ /dev/null
@@ -1,209 +0,0 @@
-This file contains a list of various font formats. It gives the
-reference document and whether it is supported in FreeType 2.
-
-Table fields
-------------
-
- wrapper format
- The format used to represent the font data. In the table below it
- is used only if the font format differs. Possible values are
-
- SFNT binary
- PFB binary
- PS a text header, followed by binary or text data
- LZW compressed with either `gzip' or `compress'
- BZ2 compressed with `bzip2'.
-
- font format
- How the font is to be accessed, possibly after converting the file
- type and wrapper format into a generic form. Bitmap formats are
- `BDF', `PCF', and one form of `WINFNT'; all others are vector
- formats. `PS' indicates third-order, `TT' second-order Bézier
- curves.
-
- font type
- Sub-formats of the font format. `SBIT' and `MACSBIT' are bitmap
- formats, `MM' and `VAR' support optical axes. `CFF2' supports
- optical axes also.
-
- glyph access
- If not specified, the glyph access is `standard' to the font
- format. Values are `CID' for CID-keyed fonts, `SYNTHETIC' for
- fonts that are modified versions of other fonts by means of a
- transformation matrix, and `TYPE_0' for PS fonts which are to be
- accessed in a tree-like structure.
-
- FreeType driver
- The module in the FreeType library which handles the specific font
- format. A missing entry means that FreeType doesn't support the
- font format (yet).
-
-
-Notes
------
-
- The SFNT container format also provides `collections' (usually
- having the file extension `.ttc' or `.otc'). A collection contains
- multiple font faces that share some tables to avoid redundancy, thus
- reducing the file size. In FreeType, elements of a collection can
- be accessed with a proper face index.
-
- Both the GX and the OpenType 1.8 variation fonts provide `named
- instances'. FreeType maps them to face indices (they can also be
- accessed with the standard MM interface).
-
- Other font formats (not using the SFNT wrapper) also provide
- multiple faces within one file; they are marked with an asterisk
- (`*') in the table below.
-
- FreeType can be configured to support Mac files (on older Mac OS
- versions, a `file' is stored as a data and a resource fork, this is,
- within two separate data chunks). If a file can't be opened as a
- font, FreeType then checks whether it is a resource fork, trying to
- extract the contained font data from either a `POST' or `sfnt'
- resource.
-
-
-Please send additions and/or corrections to wl@gnu.org or to the
-FreeType developer's list at freetype-devel@nongnu.org (for
-subscribers only). If you can provide a font example for a format
-which isn't supported yet please send a mail too.
-
-
- wrapper font font glyph FreeType reference
- format format type access driver documents
- -----------------------------------------------------------------------------
-
- --- BDF --- --- bdf 5005.BDF_Spec.pdf, X11
-
-
- SFNT PS TYPE_1 --- type1 Type 1 GX Font Format
- (for the Mac) [3]
- SFNT PS TYPE_1 CID cid 5180.sfnt.pdf (for the Mac)
- [3]
- SFNT PS CFF --- cff OT spec, 5176.CFF.pdf
- (`OTTO' format)
- SFNT PS CFF CID cff OT spec, 5176.CFF.pdf
- SFNT PS CFF SYNTHETIC --- OT spec, 5176.CFF.pdf
- SFNT PS CFF2 --- cff OT spec 1.8
-
- SFNT TT SBIT --- sfnt XFree86 (bitmaps only;
- with `head' table)
- SFNT TT MACSBIT --- sfnt OT spec (for the Mac;
- bitmaps only; `bhed' table)
- SFNT TT --- --- truetype OT spec (`normal' TT font)
- SFNT TT VAR --- truetype GX spec (`?var' tables)
- SFNT TT VAR --- truetype OT spec 1.8
- (`?var' + `?VAR' tables)
-
-
- --- PS TYPE_1 --- type1 T1_SPEC.pdf
- (PFA, Type 1 font resource)
- PFB PS TYPE_1 --- type1 T1_SPEC.pdf,
- 5040.Download_Fonts.pdf
- (`normal' Type 1 font)
- --- PS TYPE_1 CID cid PLRM.pdf (CID Font Type 0;
- Type 9 font)
- --- PS MM --- type1 5015.Type1_Supp.pdf
- (Multiple Masters)
- --- PS CFF --- cff 5176.CFF.pdf (`pure' CFF)
- --- PS* CFF CID cff 5176.CFF.pdf (`pure' CFF)
- --- PS CFF SYNTHETIC --- 5176.CFF.pdf (`pure' CFF)
- --- PS CFF/MM --- cff old 5167.CFF.pdf (`pure' CFF)
- [3]
- --- PS* CFF/MM CID cff old 5167.CFF.pdf (`pure' CFF)
- [3]
- --- PS CFF/MM SYNTHETIC --- old 5167.CFF.pdf (`pure' CFF)
- [3]
- PS PS CFF --- --- PLRM.pdf (Type 2) [1]
- PS PS* CFF CID --- PLRM.pdf (Type 2) [1]
- PS PS CFF SYNTHETIC --- PLRM.pdf (Type 2) [1]
- PS PS CFF/MM --- --- PLRM.pdf (Type 2) [1]
- PS PS* CFF/MM CID --- PLRM.pdf (Type 2) [1]
- PS PS CFF/MM SYNTHETIC --- PLRM.pdf (Type 2) [1]
- --- PS --- TYPE_0 --- PLRM.pdf
- --- PS TYPE_3 --- --- PLRM.pdf (never supported)
- --- PS TYPE_3 CID --- PLRM.pdf (CID Font Type 1;
- Type 10 font; never supported)
- PS PS TYPE_14 --- --- PLRM.pdf (Chameleon font;
- Type 14 font; never supported?)
- --- PS TYPE_32 CID --- PLRM.pdf (CID Font Type 4;
- Type 32 font; never supported?)
- PS TT --- --- type42 5012.Type42_Spec.pdf
- (Type 42 font)
- PS TT --- CID --- PLRM.pdf (CID Font Type 2;
- Type 11 font)
-
-
- ? ? CEF ? cff ?
-
-
- --- PCF --- --- pcf X11 [4]
- LZW PCF --- --- pcf X11 [4]
- BZ2 PCF --- --- pcf X11 [4]
-
-
- --- PFR* PFR0 --- pfr [2]
- --- PFR PFR1 --- --- (undocumented, proprietary;
- probably never supported)
-
-
- --- WINFNT* --- --- winfonts Windows developer's notes [5]
- --- WINFNT VECTOR --- --- Windows developer's notes [5]
-
-
-[1] Support should be rather simple since this is identical to `CFF'
- but in a PS wrapper.
-
-[2] Official PFR specification:
-
- http://www.bitstream.com/categories/developer/truedoc/pfrspec.html
- http://www.bitstream.com/categories/developer/truedoc/pfrspec1.2.pdf
-
- The syntax of the auxiliary data is not defined there, but is
- partially defined in MHP 1.0.3 (also called ETSI TS 101812 V1.3.1)
- section 7.4.
-
- http://www.etsi.org/
- http://webapp.etsi.org/workprogram/Report_WorkItem.asp?WKI_ID=18799
-
- (free registration required).
-
-[3] Support is rudimentary currently; some tables or data are not
- loaded yet.
-
-[4] See
-
- THE X WINDOW SYSTEM SERVER: X VERSION 11, RELEASE 5
- Elias Israel, Erik Fortune, Digital Press, 1992
- ISBN 1-55558-096-3
-
- for a specification given in Appendix D on pgs. 436-450. However,
- this information might be out of date; unfortunately, there is no
- PCF specification available online, and this book is out of print.
- George Williams deduced the font format from the X11 sources and
- documented it for his FontForge font editor:
-
- http://fontforge.github.io/pcf-format.html
-
-[5] This is from MS Windows 3; see Microsoft's Knowledge Base article at
-
- http://support.microsoft.com/kb/65123
-
-------------------------------------------------------------------------
-
-Copyright 2004-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute this
-file you indicate that you have read the license and understand and
-accept it fully.
-
-
---- end of formats.txt ---
-
-Local Variables:
-coding: utf-8
-End:
diff --git a/docs/freetype-config.1 b/docs/freetype-config.1
deleted file mode 100644
index eaaa1b95b..000000000
--- a/docs/freetype-config.1
+++ /dev/null
@@ -1,146 +0,0 @@
-.TH FREETYPE-CONFIG 1 "May 2017" "FreeType 2.8"
-.
-.
-.SH NAME
-.
-freetype-config \- Get information about a libfreetype installation
-.
-.
-.SH SYNOPSIS
-.
-.B freetype-config
-.RI [ options ]
-.
-.
-.SH DESCRIPTION
-.
-.B freetype-config
-returns information needed for compiling and linking programs with the
-FreeType library, such as linker flags and compilation parameters.
-.
-Alternatively, it can be used to query information about the
-FreeType library version installed on the system, such as the
-installation (directory path) prefix or the FreeType version number.
-.
-.PP
-If
-.BR pkg-config (1)
-is found in the path,
-.B freetype-config
-acts as a wrapper for
-.BR pkg-config .
-.
-.PP
-This program is part of the FreeType package.
-.
-.
-.SH OPTIONS
-.
-There are two types of options: output/display selection options, and
-path override options.
-.
-.
-.SS Output selection options
-.
-Only one of the output selection options should be given at each program
-invocation.
-.
-.TP
-.B \-\-prefix
-Return the prefix value of the installed FreeType library (the default
-prefix will be `/usr' in most cases for distribution-installed
-packages).
-.
-.TP
-.B \-\-exec-prefix
-Return the executable prefix value of the installed FreeType library
-(will often be the same as the prefix value).
-.
-.TP
-.B \-\-ftversion
-Return the FreeType version number, directly derived from file
-`freetype.h'.
-.
-.TP
-.B \-\-version
-Return the `libtool version' of the FreeType library.
-.
-.TP
-.B \-\-libtool
-Return the library name for linking with libtool.
-.
-.TP
-.B \-\-libs
-Return compiler flags for linking with the installed FreeType library.
-.
-.TP
-.B \-\-cflags
-Return compiler flags for compiling against the installed FreeType library.
-.
-.TP
-.B \-\-static
-Make command line options display flags for static linking.
-.
-.TP
-.B \-\-help
-Show help and exit.
-.
-.
-.SS Path override options
-.
-These affect any selected output option, except the libtool version
-returned by
-.BR \-\-version .
-.
-.TP
-.BI \-\-prefix= PREFIX
-Override
-.B \-\-prefix
-value with
-.IR PREFIX .
-.
-This also sets
-.BI \-\-exec-prefix= PREFIX
-if option
-.B \-\-exec-prefix
-is not explicitly given.
-.
-.TP
-.BI \-\-exec-prefix= EPREFIX
-Override
-.B \-\-exec-prefix
-value with
-.IR EPREFIX .
-.
-.
-.SH BUGS
-In case the libraries FreeType links to are located in non-standard
-directories, and
-.BR pkg-config (1)
-is not available, the output from option
-.B \-\-libs
-might be incomplete.
-.
-It is thus recommended to use the
-.BR pkg-config (1)
-interface instead, which is able to correctly resolve all dependencies.
-.
-.PP
-Setting
-.B \-\-exec-prefix
-(either explicitly or implicitly) might return incorrect results if
-combined with option
-.BR \-\-static .
-.
-The same problem can occur if you set the
-.B SYSROOT
-environment variable.
-.
-.
-.SH AUTHOR
-.
-This manual page was contributed by Nis Martensen <nis.martensen@web.de>,
-with further refinements from the FreeType team.
-.
-.
-.\" eof
diff --git a/docs/raster.txt b/docs/raster.txt
deleted file mode 100644
index bd3fd00f3..000000000
--- a/docs/raster.txt
+++ /dev/null
@@ -1,635 +0,0 @@
-
- How FreeType's rasterizer work
-
- by David Turner
-
- Revised 2007-Feb-01
-
-
-This file is an attempt to explain the internals of the FreeType
-rasterizer. The rasterizer is of quite general purpose and could
-easily be integrated into other programs.
-
-
- I. Introduction
-
- II. Rendering Technology
- 1. Requirements
- 2. Profiles and Spans
- a. Sweeping the Shape
- b. Decomposing Outlines into Profiles
- c. The Render Pool
- d. Computing Profiles Extents
- e. Computing Profiles Coordinates
- f. Sweeping and Sorting the Spans
-
-
-I. Introduction
-===============
-
- A rasterizer is a library in charge of converting a vectorial
- representation of a shape into a bitmap. The FreeType rasterizer
- has been originally developed to render the glyphs found in
- TrueType files, made up of segments and second-order Béziers.
- Meanwhile it has been extended to render third-order Bézier curves
- also. This document is an explanation of its design and
- implementation.
-
- While these explanations start from the basics, a knowledge of
- common rasterization techniques is assumed.
-
-
-II. Rendering Technology
-========================
-
-1. Requirements
----------------
-
- We assume that all scaling, rotating, hinting, etc., has been
- already done. The glyph is thus described by a list of points in
- the device space.
-
- - All point coordinates are in the 26.6 fixed float format. The
- used orientation is:
-
-
- ^ y
- | reference orientation
- |
- *----> x
- 0
-
-
- `26.6' means that 26 bits are used for the integer part of a
- value and 6 bits are used for the fractional part.
- Consequently, the `distance' between two neighbouring pixels is
- 64 `units' (1 unit = 1/64th of a pixel).
-
- Note that, for the rasterizer, pixel centers are located at
- integer coordinates. The TrueType bytecode interpreter,
- however, assumes that the lower left edge of a pixel (which is
- taken to be a square with a length of 1 unit) has integer
- coordinates.
-
-
- ^ y ^ y
- | |
- | (1,1) | (0.5,0.5)
- +-----------+ +-----+-----+
- | | | | |
- | | | | |
- | | | o-----+-----> x
- | | | (0,0) |
- | | | |
- o-----------+-----> x +-----------+
- (0,0) (-0.5,-0.5)
-
- TrueType bytecode interpreter FreeType rasterizer
-
-
- A pixel line in the target bitmap is called a `scanline'.
-
- - A glyph is usually made of several contours, also called
- `outlines'. A contour is simply a closed curve that delimits an
- outer or inner region of the glyph. It is described by a series
- of successive points of the points table.
-
- Each point of the glyph has an associated flag that indicates
- whether it is `on' or `off' the curve. Two successive `on'
- points indicate a line segment joining the two points.
-
- One `off' point amidst two `on' points indicates a second-degree
- (conic) Bézier parametric arc, defined by these three points
- (the `off' point being the control point, and the `on' ones the
- start and end points). Similarly, a third-degree (cubic) Bézier
- curve is described by four points (two `off' control points
- between two `on' points).
-
- Finally, for second-order curves only, two successive `off'
- points forces the rasterizer to create, during rendering, an
- `on' point amidst them, at their exact middle. This greatly
- facilitates the definition of successive Bézier arcs.
-
- The parametric form of a second-order Bézier curve is:
-
- P(t) = (1-t)^2*P1 + 2*t*(1-t)*P2 + t^2*P3
-
- (P1 and P3 are the end points, P2 the control point.)
-
- The parametric form of a third-order Bézier curve is:
-
- P(t) = (1-t)^3*P1 + 3*t*(1-t)^2*P2 + 3*t^2*(1-t)*P3 + t^3*P4
-
- (P1 and P4 are the end points, P2 and P3 the control points.)
-
- For both formulae, t is a real number in the range [0..1].
-
- Note that the rasterizer does not use these formulae directly.
- They exhibit, however, one very useful property of Bézier arcs:
- Each point of the curve is a weighted average of the control
- points.
-
- As all weights are positive and always sum up to 1, whatever the
- value of t, each arc point lies within the triangle (polygon)
- defined by the arc's three (four) control points.
-
- In the following, only second-order curves are discussed since
- rasterization of third-order curves is completely identical.
-
- Here some samples for second-order curves.
-
-
- * # on curve
- * off curve
- __---__
- #-__ _-- -_
- --__ _- -
- --__ # \
- --__ #
- -#
- Two `on' points
- Two `on' points and one `off' point
- between them
-
- *
- # __ Two `on' points with two `off'
- \ - - points between them. The point
- \ / \ marked `0' is the middle of the
- - 0 \ `off' points, and is a `virtual
- -_ _- # on' point where the curve passes.
- -- It does not appear in the point
- * list.
-
-
-2. Profiles and Spans
----------------------
-
- The following is a basic explanation of the _kind_ of computations
- made by the rasterizer to build a bitmap from a vector
- representation. Note that the actual implementation is slightly
- different, due to performance tuning and other factors.
-
- However, the following ideas remain in the same category, and are
- more convenient to understand.
-
-
- a. Sweeping the Shape
-
- The best way to fill a shape is to decompose it into a number of
- simple horizontal segments, then turn them on in the target
- bitmap. These segments are called `spans'.
-
- __---__
- _-- -_
- _- -
- - \
- / \
- / \
- | \
-
- __---__ Example: filling a shape
- _----------_ with spans.
- _--------------
- ----------------\
- /-----------------\ This is typically done from the top
- / \ to the bottom of the shape, in a
- | | \ movement called a `sweep'.
- V
-
- __---__
- _----------_
- _--------------
- ----------------\
- /-----------------\
- /-------------------\
- |---------------------\
-
-
- In order to draw a span, the rasterizer must compute its
- coordinates, which are simply the x coordinates of the shape's
- contours, taken on the y scanlines.
-
-
- /---/ |---| Note that there are usually
- /---/ |---| several spans per scanline.
- | /---/ |---|
- | /---/_______|---| When rendering this shape to the
- V /----------------| current scanline y, we must
- /-----------------| compute the x values of the
- a /----| |---| points a, b, c, and d.
- - - - * * - - - - * * - - y -
- / / b c| |d
-
-
- /---/ |---|
- /---/ |---| And then turn on the spans a-b
- /---/ |---| and c-d.
- /---/_______|---|
- /----------------|
- /-----------------|
- a /----| |---|
- - - - ####### - - - - ##### - - y -
- / / b c| |d
-
-
- b. Decomposing Outlines into Profiles
-
- For each scanline during the sweep, we need the following
- information:
-
- o The number of spans on the current scanline, given by the
- number of shape points intersecting the scanline (these are
- the points a, b, c, and d in the above example).
-
- o The x coordinates of these points.
-
- x coordinates are computed before the sweep, in a phase called
- `decomposition' which converts the glyph into *profiles*.
-
- Put it simply, a `profile' is a contour's portion that can only
- be either ascending or descending, i.e., it is monotonic in the
- vertical direction (we also say y-monotonic). There is no such
- thing as a horizontal profile, as we shall see.
-
- Here are a few examples:
-
-
- this square
- 1 2
- ---->---- is made of two
- | | | |
- | | profiles | |
- ^ v ^ + v
- | | | |
- | | | |
- ----<----
-
- up down
-
-
- this triangle
-
- P2 1 2
-
- |\ is made of two | \
- ^ | \ \ | \
- | | \ \ profiles | \ |
- | | \ v ^ | \ |
- | \ | | + \ v
- | \ | | \
- P1 ---___ \ ---___ \
- ---_\ ---_ \
- <--__ P3 up down
-
-
-
- A more general contour can be made of more than two profiles:
-
- __ ^
- / | / ___ / |
- / | / | / | / |
- | | / / => | v / /
- | | | | | | ^ |
- ^ | |___| | | ^ + | + | + v
- | | | v | |
- | | | up |
- |___________| | down |
-
- <-- up down
-
-
- Successive profiles are always joined by horizontal segments
- that are not part of the profiles themselves.
-
- For the rasterizer, a profile is simply an *array* that
- associates one horizontal *pixel* coordinate to each bitmap
- *scanline* crossed by the contour's section containing the
- profile. Note that profiles are *oriented* up or down along the
- glyph's original flow orientation.
-
- In other graphics libraries, profiles are also called `edges' or
- `edgelists'.
-
-
- c. The Render Pool
-
- FreeType has been designed to be able to run well on _very_
- light systems, including embedded systems with very few memory.
-
- A render pool will be allocated once; the rasterizer uses this
- pool for all its needs by managing this memory directly in it.
- The algorithms that are used for profile computation make it
- possible to use the pool as a simple growing heap. This means
- that this memory management is actually quite easy and faster
- than any kind of malloc()/free() combination.
-
- Moreover, we'll see later that the rasterizer is able, when
- dealing with profiles too large and numerous to lie all at once
- in the render pool, to immediately decompose recursively the
- rendering process into independent sub-tasks, each taking less
- memory to be performed (see `sub-banding' below).
-
- The render pool doesn't need to be large. A 4KByte pool is
- enough for nearly all renditions, though nearly 100% slower than
- a more comfortable 16KByte or 32KByte pool (that was tested with
- complex glyphs at sizes over 500 pixels).
-
-
- d. Computing Profiles Extents
-
- Remember that a profile is an array, associating a _scanline_ to
- the x pixel coordinate of its intersection with a contour.
-
- Though it's not exactly how the FreeType rasterizer works, it is
- convenient to think that we need a profile's height before
- allocating it in the pool and computing its coordinates.
-
- The profile's height is the number of scanlines crossed by the
- y-monotonic section of a contour. We thus need to compute these
- sections from the vectorial description. In order to do that,
- we are obliged to compute all (local and global) y extrema of
- the glyph (minima and maxima).
-
-
- P2 For instance, this triangle has only
- two y-extrema, which are simply
- |\
- | \ P2.y as a vertical maximum
- | \ P3.y as a vertical minimum
- | \
- | \ P1.y is not a vertical extremum (though
- | \ it is a horizontal minimum, which we
- P1 ---___ \ don't need).
- ---_\
- P3
-
-
- Note that the extrema are expressed in pixel units, not in
- scanlines. The triangle's height is certainly (P3.y-P2.y+1)
- pixel units, but its profiles' heights are computed in
- scanlines. The exact conversion is simple:
-
- - min scanline = FLOOR ( min y )
- - max scanline = CEILING( max y )
-
- A problem arises with Bézier Arcs. While a segment is always
- necessarily y-monotonic (i.e., flat, ascending, or descending),
- which makes extrema computations easy, the ascent of an arc can
- vary between its control points.
-
-
- P2
- *
- # on curve
- * off curve
- __-x--_
- _-- -_
- P1 _- - A non y-monotonic Bézier arc.
- # \
- - The arc goes from P1 to P3.
- \
- \ P3
- #
-
-
- We first need to be able to easily detect non-monotonic arcs,
- according to their control points. I will state here, without
- proof, that the monotony condition can be expressed as:
-
- P1.y <= P2.y <= P3.y for an ever-ascending arc
-
- P1.y >= P2.y >= P3.y for an ever-descending arc
-
- with the special case of
-
- P1.y = P2.y = P3.y where the arc is said to be `flat'.
-
- As you can see, these conditions can be very easily tested.
- They are, however, extremely important, as any arc that does not
- satisfy them necessarily contains an extremum.
-
- Note also that a monotonic arc can contain an extremum too,
- which is then one of its `on' points:
-
-
- P1 P2
- #---__ * P1P2P3 is ever-descending, but P1
- -_ is an y-extremum.
- -
- ---_ \
- -> \
- \ P3
- #
-
-
- Let's go back to our previous example:
-
-
- P2
- *
- # on curve
- * off curve
- __-x--_
- _-- -_
- P1 _- - A non-y-monotonic Bézier arc.
- # \
- - Here we have
- \ P2.y >= P1.y &&
- \ P3 P2.y >= P3.y (!)
- #
-
-
- We need to compute the vertical maximum of this arc to be able
- to compute a profile's height (the point marked by an `x'). The
- arc's equation indicates that a direct computation is possible,
- but we rely on a different technique, which use will become
- apparent soon.
-
- Bézier arcs have the special property of being very easily
- decomposed into two sub-arcs, which are themselves Bézier arcs.
- Moreover, it is easy to prove that there is at most one vertical
- extremum on each Bézier arc (for second-degree curves; similar
- conditions can be found for third-order arcs).
-
- For instance, the following arc P1P2P3 can be decomposed into
- two sub-arcs Q1Q2Q3 and R1R2R3:
-
-
- P2
- *
- # on curve
- * off curve
-
-
- original Bézier arc P1P2P3.
- __---__
- _-- --_
- _- -_
- - -
- / \
- / \
- # #
- P1 P3
-
-
-
- P2
- *
-
-
-
- Q3 Decomposed into two subarcs
- Q2 R2 Q1Q2Q3 and R1R2R3
- * __-#-__ *
- _-- --_
- _- R1 -_ Q1 = P1 R3 = P3
- - - Q2 = (P1+P2)/2 R2 = (P2+P3)/2
- / \
- / \ Q3 = R1 = (Q2+R2)/2
- # #
- Q1 R3 Note that Q2, R2, and Q3=R1
- are on a single line which is
- tangent to the curve.
-
-
- We have then decomposed a non-y-monotonic Bézier curve into two
- smaller sub-arcs. Note that in the above drawing, both sub-arcs
- are monotonic, and that the extremum is then Q3=R1. However, in
- a more general case, only one sub-arc is guaranteed to be
- monotonic. Getting back to our former example:
-
-
- Q2
- *
-
- __-x--_ R1
- _-- #_
- Q1 _- Q3 - R2
- # \ *
- -
- \
- \ R3
- #
-
-
- Here, we see that, though Q1Q2Q3 is still non-monotonic, R1R2R3
- is ever descending: We thus know that it doesn't contain the
- extremum. We can then re-subdivide Q1Q2Q3 into two sub-arcs and
- go on recursively, stopping when we encounter two monotonic
- subarcs, or when the subarcs become simply too small.
-
- We will finally find the vertical extremum. Note that the
- iterative process of finding an extremum is called `flattening'.
-
-
- e. Computing Profiles Coordinates
-
- Once we have the height of each profile, we are able to allocate
- it in the render pool. The next task is to compute coordinates
- for each scanline.
-
- In the case of segments, the computation is straightforward,
- using the Euclidean algorithm (also known as Bresenham).
- However, for Bézier arcs, the job is a little more complicated.
-
- We assume that all Béziers that are part of a profile are the
- result of flattening the curve, which means that they are all
- y-monotonic (ascending or descending, and never flat). We now
- have to compute the intersections of arcs with the profile's
- scanlines. One way is to use a similar scheme to flattening
- called `stepping'.
-
-
- Consider this arc, going from P1 to
- --------------------- P3. Suppose that we need to
- compute its intersections with the
- drawn scanlines. As already
- --------------------- mentioned this can be done
- directly, but the involved
- * P2 _---# P3 algorithm is far too slow.
- ------------- _-- --
- _-
- _/ Instead, it is still possible to
- ---------/----------- use the decomposition property in
- / the same recursive way, i.e.,
- | subdivide the arc into subarcs
- ------|-------------- until these get too small to cross
- | more than one scanline!
- |
- -----|--------------- This is very easily done using a
- | rasterizer-managed stack of
- | subarcs.
- # P1
-
-
- f. Sweeping and Sorting the Spans
-
- Once all our profiles have been computed, we begin the sweep to
- build (and fill) the spans.
-
- As both the TrueType and Type 1 specifications use the winding
- fill rule (but with opposite directions), we place, on each
- scanline, the present profiles in two separate lists.
-
- One list, called the `left' one, only contains ascending
- profiles, while the other `right' list contains the descending
- profiles.
-
- As each glyph is made of closed curves, a simple geometric
- property ensures that the two lists contain the same number of
- elements.
-
- Creating spans is thus straightforward:
-
- 1. We sort each list in increasing horizontal order.
-
- 2. We pair each value of the left list with its corresponding
- value in the right list.
-
-
- / / | | For example, we have here
- / / | | four profiles. Two of
- >/ / | | | them are ascending (1 &
- 1// / ^ | | | 2 3), while the two others
- // // 3| | | v are descending (2 & 4).
- / //4 | | | On the given scanline,
- a / /< | | the left list is (1,3),
- - - - *-----* - - - - *---* - - y - and the right one is
- / / b c| |d (4,2) (sorted).
-
- There are then two spans, joining
- 1 to 4 (i.e. a-b) and 3 to 2
- (i.e. c-d)!
-
-
- Sorting doesn't necessarily take much time, as in 99 cases out
- of 100, the lists' order is kept from one scanline to the next.
- We can thus implement it with two simple singly-linked lists,
- sorted by a classic bubble-sort, which takes a minimum amount of
- time when the lists are already sorted.
-
- A previous version of the rasterizer used more elaborate
- structures, like arrays to perform `faster' sorting. It turned
- out that this old scheme is not faster than the one described
- above.
-
- Once the spans have been `created', we can simply draw them in
- the target bitmap.
-
-------------------------------------------------------------------------
-
-Copyright 2003-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute this
-file you indicate that you have read the license and understand and
-accept it fully.
-
-
---- end of raster.txt ---
-
-Local Variables:
-coding: utf-8
-End:
diff --git a/docs/reference/.gitignore b/docs/reference/.gitignore
deleted file mode 100644
index 2d19fc766..000000000
--- a/docs/reference/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.html
diff --git a/docs/reference/README b/docs/reference/README
deleted file mode 100644
index 51b04d6f1..000000000
--- a/docs/reference/README
+++ /dev/null
@@ -1,5 +0,0 @@
-After saying `make refdoc' this directory contains the FreeType API
-reference. You need python to make this target.
-
-This also works with Jam: Just type `jam refdoc' in the main directory.
-
diff --git a/docs/release b/docs/release
deleted file mode 100644
index f07b067c3..000000000
--- a/docs/release
+++ /dev/null
@@ -1,202 +0,0 @@
-How to prepare a new release
-----------------------------
-
-. include/freetype/freetype.h: Update FREETYPE_MAJOR, FREETYPE_MINOR,
- and FREETYPE_PATCH.
-
-. Update version numbers in all files where necessary (for example, do
- a grep for both `2.3.1' and `231' for release 2.3.1).
-
-. builds/unix/configure.raw: Update `version_info'.
-
-. docs/CHANGES: Document differences to last release.
-
-. README: Update.
-
-. docs/VERSIONS.TXT: Document changed `version_info'.
-
-. ChangeLog: Announce new release (both in the freetype2 and
- freetype2-demos modules).
-
-. Clone the git archive to another directory with
-
- git clone -l -s . ../freetype2.test
-
- or something like this and run
-
- make distclean; make devel; make
- make distclean; make devel; make multi
- make distclean; make devel CC=g++; make CC=g++
- make distclean; make devel CC=g++; make multi CC=g++
-
- sh autogen.sh
- make distclean; ./configure; make
- make distclean; ./configure CC=g++; make
-
- in the cloned repository to test compilation with both gcc and g++.
-
-. Test C++ compilation for freetype2-demos too (using `git clone' as
- above).
-
-. Run src/tools/chktrcmp.py and check that there are no undefined
- trace_XXXX macros.
-
-. After pushing the new release, tag the git repositories (freetype2,
- freetype2-demos) with
-
- git tag VER-<version> -m "" -u <committer>
-
- and push the tags with
-
- git push --tags
-
-. Check with
-
- git clean -ndx
-
- that the git directory is really clean (and remove extraneous files
- if necessary).
-
-. Say `make dist' in both the freetype2 and freetype2-demos modules
- to generate the .tar.gz, .tar.bz2, and .zip files.
-
-. Create the doc bundles (freetype-doc-<version>.tar.gz,
- freetype-doc-<version>.tar.bz2, ftdoc<version>.zip). This is
- everything in
-
- <freetype-web git repository>/freetype2/docs
-
- except the `reference' subdirectory. Do *not* use option `-l' from
- zip!
-
-. Run the following script (with updated `$VERSION', `$SAVANNAH_USER',
- and $SOURCEFORGE_USER variables) to sign and upload the bundles to
- both Savannah and SourceForge. The signing code has been taken from
- the `gnupload' script (part of the automake bundle).
-
- #!/bin/sh
-
- VERSION=2.5.1
- SAVANNAH_USER=wl
- SOURCEFORGE_USER=wlemb
-
- #####################################################################
-
- GPG='/usr/bin/gpg --batch --no-tty'
-
- version=`echo $VERSION | sed "s/\\.//g"`
-
- FREETYPE_PACKAGES="freetype-$VERSION.tar.gz \
- freetype-$VERSION.tar.bz2 \
- ft$version.zip"
- FT2DEMOS_PACKAGES="ft2demos-$VERSION.tar.gz \
- ft2demos-$VERSION.tar.bz2 \
- ftdmo$version.zip"
- FTDOC_PACKAGES="freetype-doc-$VERSION.tar.gz \
- freetype-doc-$VERSION.tar.bz2 \
- ftdoc$version.zip"
-
- PACKAGE_LIST="$FREETYPE_PACKAGES \
- $FT2DEMOS_PACKAGES \
- $FTDOC_PACKAGES"
-
- set -e
- unset passphrase
-
- PATH=/empty echo -n "Enter GPG passphrase: "
- stty -echo
- read -r passphrase
- stty echo
- echo
-
- for f in $PACKAGE_LIST; do
- if test ! -f $f; then
- echo "$0: Cannot find \`$f'" 1>&2
- exit 1
- else
- :
- fi
- done
-
- for f in $PACKAGE_LIST; do
- echo "Signing $f..."
- rm -f $f.sig
- echo $passphrase | $GPG --passphrase-fd 0 -ba -o $f.sig $f
- done
-
- FREETYPE_SIGNATURES=
- for i in $FREETYPE_PACKAGES; do
- FREETYPE_SIGNATURES="$FREETYPE_SIGNATURES $i.sig"
- done
-
- FT2DEMOS_SIGNATURES=
- for i in $FT2DEMOS_PACKAGES; do
- FT2DEMOS_SIGNATURES="$FT2DEMOS_SIGNATURES $i.sig"
- done
-
- FTDOC_SIGNATURES=
- for i in $FTDOC_PACKAGES; do
- FTDOC_SIGNATURES="$FTDOC_SIGNATURES $i.sig"
- done
-
- SIGNATURE_LIST="$FREETYPE_SIGNATURES \
- $FT2DEMOS_SIGNATURES \
- $FTDOC_SIGNATURES"
-
- scp $PACKAGE_LIST $SIGNATURE_LIST \
- $SAVANNAH_USER@dl.sv.nongnu.org:/releases/freetype/
-
- rsync -avP -e ssh $FREETYPE_PACKAGES $FREETYPE_SIGNATURES \
- $SOURCEFORGE_USER,freetype@frs.sf.net:/home/frs/project/f/fr/freetype/freetype2/$VERSION/
- rsync -avP -e ssh $FT2DEMOS_PACKAGES $FT2DEMOS_SIGNATURES \
- $SOURCEFORGE_USER,freetype@frs.sf.net:/home/frs/project/f/fr/freetype/freetype-demos/$VERSION/
- rsync -avP -e ssh $FTDOC_PACKAGES $FTDOC_SIGNATURES \
- $SOURCEFORGE_USER,freetype@frs.sf.net:/home/frs/project/f/fr/freetype/freetype-docs/$VERSION/
-
- # EOF
-
-. Prepare a README for SourceForge and upload it with the following
- script (with updated `$VERSION' and $SOURCEFORGE_USER variables).
-
- #!/bin/sh
-
- VERSION=2.5.1
- SOURCEFORGE_USER=wlemb
-
- #####################################################################
-
- rsync -avP -e ssh README \
- $SOURCEFORGE_USER,freetype@frs.sf.net:/home/frs/project/f/fr/freetype/freetype2/$VERSION/
-
- # EOF
-
-. On SourceForge, tag the just uploaded `ftXXX.zip' and
- `freetype-XXX.tar.bz2' files as the default files to download for
- `Windows' and `Others', respectively.
-
-. Copy the reference files (generated by `make dist') to
-
- <freetype-web git repository>/freetype2/docs/reference
-
-. Update the `freetype-web' repository. `git push' then automatically
- triggers an update of the public web pages within ten minutes, due
- to a cron script (on wl@freedesktop.org) that rsyncs with
-
- freedesktop.org://srv/freetype.freedesktop.org/www
-
-. Announce new release on freetype-announce@nongnu.org and to relevant
- newsgroups.
-
-----------------------------------------------------------------------
-
-Copyright 2003-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute
-this file you indicate that you have read the license and understand
-and accept it fully.
-
-
---- end of release ---
diff --git a/glyphtest/generate-old-hashes.c b/generate-old-hashes.c
index 13b6304af..13b6304af 100644
--- a/glyphtest/generate-old-hashes.c
+++ b/generate-old-hashes.c
diff --git a/include/freetype/config/ftconfig.h b/include/freetype/config/ftconfig.h
deleted file mode 100644
index 889aebf5a..000000000
--- a/include/freetype/config/ftconfig.h
+++ /dev/null
@@ -1,491 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftconfig.h */
-/* */
-/* ANSI-specific configuration file (specification only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This header file contains a number of macro definitions that are used */
- /* by the rest of the engine. Most of the macros here are automatically */
- /* determined at compile time, and you should not need to change it to */
- /* port FreeType, except to compile the library with a non-ANSI */
- /* compiler. */
- /* */
- /* Note however that if some specific modifications are needed, we */
- /* advise you to place a modified copy in your build directory. */
- /* */
- /* The build directory is usually `builds/<system>', and contains */
- /* system-specific files that are always included first when building */
- /* the library. */
- /* */
- /* This ANSI version should stay in `include/config/'. */
- /* */
- /*************************************************************************/
-
-#ifndef FTCONFIG_H_
-#define FTCONFIG_H_
-
-#include <ft2build.h>
-#include FT_CONFIG_OPTIONS_H
-#include FT_CONFIG_STANDARD_LIBRARY_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* PLATFORM-SPECIFIC CONFIGURATION MACROS */
- /* */
- /* These macros can be toggled to suit a specific system. The current */
- /* ones are defaults used to compile FreeType in an ANSI C environment */
- /* (16bit compilers are also supported). Copy this file to your own */
- /* `builds/<system>' directory, and edit it to port the engine. */
- /* */
- /*************************************************************************/
-
-
- /* There are systems (like the Texas Instruments 'C54x) where a `char' */
- /* has 16 bits. ANSI C says that sizeof(char) is always 1. Since an */
- /* `int' has 16 bits also for this system, sizeof(int) gives 1 which */
- /* is probably unexpected. */
- /* */
- /* `CHAR_BIT' (defined in limits.h) gives the number of bits in a */
- /* `char' type. */
-
-#ifndef FT_CHAR_BIT
-#define FT_CHAR_BIT CHAR_BIT
-#endif
-
-
- /* The size of an `int' type. */
-#if FT_UINT_MAX == 0xFFFFUL
-#define FT_SIZEOF_INT (16 / FT_CHAR_BIT)
-#elif FT_UINT_MAX == 0xFFFFFFFFUL
-#define FT_SIZEOF_INT (32 / FT_CHAR_BIT)
-#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL
-#define FT_SIZEOF_INT (64 / FT_CHAR_BIT)
-#else
-#error "Unsupported size of `int' type!"
-#endif
-
- /* The size of a `long' type. A five-byte `long' (as used e.g. on the */
- /* DM642) is recognized but avoided. */
-#if FT_ULONG_MAX == 0xFFFFFFFFUL
-#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
-#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL
-#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
-#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL
-#define FT_SIZEOF_LONG (64 / FT_CHAR_BIT)
-#else
-#error "Unsupported size of `long' type!"
-#endif
-
-
- /* FT_UNUSED is a macro used to indicate that a given parameter is not */
- /* used -- this is only used to get rid of unpleasant compiler warnings */
-#ifndef FT_UNUSED
-#define FT_UNUSED( arg ) ( (arg) = (arg) )
-#endif
-
-
- /*************************************************************************/
- /* */
- /* AUTOMATIC CONFIGURATION MACROS */
- /* */
- /* These macros are computed from the ones defined above. Don't touch */
- /* their definition, unless you know precisely what you are doing. No */
- /* porter should need to mess with them. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Mac support */
- /* */
- /* This is the only necessary change, so it is defined here instead */
- /* providing a new configuration file. */
- /* */
-#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
- /* no Carbon frameworks for 64bit 10.4.x */
- /* AvailabilityMacros.h is available since Mac OS X 10.2, */
- /* so guess the system version by maximum errno before inclusion */
-#include <errno.h>
-#ifdef ECANCELED /* defined since 10.2 */
-#include "AvailabilityMacros.h"
-#endif
-#if defined( __LP64__ ) && \
- ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
-#undef FT_MACINTOSH
-#endif
-
-#elif defined( __SC__ ) || defined( __MRC__ )
- /* Classic MacOS compilers */
-#include "ConditionalMacros.h"
-#if TARGET_OS_MAC
-#define FT_MACINTOSH 1
-#endif
-
-#endif
-
-
- /* Fix compiler warning with sgi compiler */
-#if defined( __sgi ) && !defined( __GNUC__ )
-#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
-#pragma set woff 3505
-#endif
-#endif
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* basic_types */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int16 */
- /* */
- /* <Description> */
- /* A typedef for a 16bit signed integer type. */
- /* */
- typedef signed short FT_Int16;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt16 */
- /* */
- /* <Description> */
- /* A typedef for a 16bit unsigned integer type. */
- /* */
- typedef unsigned short FT_UInt16;
-
- /* */
-
-
- /* this #if 0 ... #endif clause is for documentation purposes */
-#if 0
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int32 */
- /* */
- /* <Description> */
- /* A typedef for a 32bit signed integer type. The size depends on */
- /* the configuration. */
- /* */
- typedef signed XXX FT_Int32;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt32 */
- /* */
- /* A typedef for a 32bit unsigned integer type. The size depends on */
- /* the configuration. */
- /* */
- typedef unsigned XXX FT_UInt32;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int64 */
- /* */
- /* A typedef for a 64bit signed integer type. The size depends on */
- /* the configuration. Only defined if there is real 64bit support; */
- /* otherwise, it gets emulated with a structure (if necessary). */
- /* */
- typedef signed XXX FT_Int64;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt64 */
- /* */
- /* A typedef for a 64bit unsigned integer type. The size depends on */
- /* the configuration. Only defined if there is real 64bit support; */
- /* otherwise, it gets emulated with a structure (if necessary). */
- /* */
- typedef unsigned XXX FT_UInt64;
-
- /* */
-
-#endif
-
-#if FT_SIZEOF_INT == (32 / FT_CHAR_BIT)
-
- typedef signed int FT_Int32;
- typedef unsigned int FT_UInt32;
-
-#elif FT_SIZEOF_LONG == (32 / FT_CHAR_BIT)
-
- typedef signed long FT_Int32;
- typedef unsigned long FT_UInt32;
-
-#else
-#error "no 32bit type found -- please check your configuration files"
-#endif
-
-
- /* look up an integer type that is at least 32 bits */
-#if FT_SIZEOF_INT >= (32 / FT_CHAR_BIT)
-
- typedef int FT_Fast;
- typedef unsigned int FT_UFast;
-
-#elif FT_SIZEOF_LONG >= (32 / FT_CHAR_BIT)
-
- typedef long FT_Fast;
- typedef unsigned long FT_UFast;
-
-#endif
-
-
- /* determine whether we have a 64-bit int type for platforms without */
- /* Autoconf */
-#if FT_SIZEOF_LONG == (64 / FT_CHAR_BIT)
-
- /* FT_LONG64 must be defined if a 64-bit type is available */
-#define FT_LONG64
-#define FT_INT64 long
-#define FT_UINT64 unsigned long
-
- /*************************************************************************/
- /* */
- /* A 64-bit data type may create compilation problems if you compile */
- /* in strict ANSI mode. To avoid them, we disable other 64-bit data */
- /* types if __STDC__ is defined. You can however ignore this rule */
- /* by defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
- /* */
-#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
-
-#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
-
-#define FT_LONG64
-#define FT_INT64 long long int
-#define FT_UINT64 unsigned long long int
-
-#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
-
- /* this compiler provides the __int64 type */
-#define FT_LONG64
-#define FT_INT64 __int64
-#define FT_UINT64 unsigned __int64
-
-#elif defined( __BORLANDC__ ) /* Borland C++ */
-
- /* XXXX: We should probably check the value of __BORLANDC__ in order */
- /* to test the compiler version. */
-
- /* this compiler provides the __int64 type */
-#define FT_LONG64
-#define FT_INT64 __int64
-#define FT_UINT64 unsigned __int64
-
-#elif defined( __WATCOMC__ ) /* Watcom C++ */
-
- /* Watcom doesn't provide 64-bit data types */
-
-#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
-
-#define FT_LONG64
-#define FT_INT64 long long int
-#define FT_UINT64 unsigned long long int
-
-#elif defined( __GNUC__ )
-
- /* GCC provides the `long long' type */
-#define FT_LONG64
-#define FT_INT64 long long int
-#define FT_UINT64 unsigned long long int
-
-#endif /* __STDC_VERSION__ >= 199901L */
-
-#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
-
-#ifdef FT_LONG64
- typedef FT_INT64 FT_Int64;
- typedef FT_UINT64 FT_UInt64;
-#endif
-
-
-#ifdef _WIN64
- /* only 64bit Windows uses the LLP64 data model, i.e., */
- /* 32bit integers, 64bit pointers */
-#define FT_UINT_TO_POINTER( x ) (void*)(unsigned __int64)(x)
-#else
-#define FT_UINT_TO_POINTER( x ) (void*)(unsigned long)(x)
-#endif
-
-
- /*************************************************************************/
- /* */
- /* miscellaneous */
- /* */
- /*************************************************************************/
-
-
-#define FT_BEGIN_STMNT do {
-#define FT_END_STMNT } while ( 0 )
-#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
-
-
- /* typeof condition taken from gnulib's `intprops.h' header file */
-#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \
- ( defined( __IBMC__ ) && __IBMC__ >= 1210 && \
- defined( __IBM__TYPEOF__ ) ) || \
- ( defined( __SUNPRO_C ) && __SUNPRO_C >= 0x5110 && !__STDC__ ) )
-#define FT_TYPEOF( type ) ( __typeof__ ( type ) )
-#else
-#define FT_TYPEOF( type ) /* empty */
-#endif
-
-
-#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
-
-#define FT_LOCAL( x ) static x
-#define FT_LOCAL_DEF( x ) static x
-
-#else
-
-#ifdef __cplusplus
-#define FT_LOCAL( x ) extern "C" x
-#define FT_LOCAL_DEF( x ) extern "C" x
-#else
-#define FT_LOCAL( x ) extern x
-#define FT_LOCAL_DEF( x ) x
-#endif
-
-#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
-
-#define FT_LOCAL_ARRAY( x ) extern const x
-#define FT_LOCAL_ARRAY_DEF( x ) const x
-
-
-#ifndef FT_BASE
-
-#ifdef __cplusplus
-#define FT_BASE( x ) extern "C" x
-#else
-#define FT_BASE( x ) extern x
-#endif
-
-#endif /* !FT_BASE */
-
-
-#ifndef FT_BASE_DEF
-
-#ifdef __cplusplus
-#define FT_BASE_DEF( x ) x
-#else
-#define FT_BASE_DEF( x ) x
-#endif
-
-#endif /* !FT_BASE_DEF */
-
-
-#ifndef FT_EXPORT
-
-#ifdef __cplusplus
-#define FT_EXPORT( x ) extern "C" x
-#else
-#define FT_EXPORT( x ) extern x
-#endif
-
-#endif /* !FT_EXPORT */
-
-
-#ifndef FT_EXPORT_DEF
-
-#ifdef __cplusplus
-#define FT_EXPORT_DEF( x ) extern "C" x
-#else
-#define FT_EXPORT_DEF( x ) extern x
-#endif
-
-#endif /* !FT_EXPORT_DEF */
-
-
-#ifndef FT_EXPORT_VAR
-
-#ifdef __cplusplus
-#define FT_EXPORT_VAR( x ) extern "C" x
-#else
-#define FT_EXPORT_VAR( x ) extern x
-#endif
-
-#endif /* !FT_EXPORT_VAR */
-
- /* The following macros are needed to compile the library with a */
- /* C++ compiler and with 16bit compilers. */
- /* */
-
- /* This is special. Within C++, you must specify `extern "C"' for */
- /* functions which are used via function pointers, and you also */
- /* must do that for structures which contain function pointers to */
- /* assure C linkage -- it's not possible to have (local) anonymous */
- /* functions which are accessed by (global) function pointers. */
- /* */
- /* */
- /* FT_CALLBACK_DEF is used to _define_ a callback function. */
- /* */
- /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
- /* contains pointers to callback functions. */
- /* */
- /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
- /* that contains pointers to callback functions. */
- /* */
- /* */
- /* Some 16bit compilers have to redefine these macros to insert */
- /* the infamous `_cdecl' or `__fastcall' declarations. */
- /* */
-#ifndef FT_CALLBACK_DEF
-#ifdef __cplusplus
-#define FT_CALLBACK_DEF( x ) extern "C" x
-#else
-#define FT_CALLBACK_DEF( x ) static x
-#endif
-#endif /* FT_CALLBACK_DEF */
-
-#ifndef FT_CALLBACK_TABLE
-#ifdef __cplusplus
-#define FT_CALLBACK_TABLE extern "C"
-#define FT_CALLBACK_TABLE_DEF extern "C"
-#else
-#define FT_CALLBACK_TABLE extern
-#define FT_CALLBACK_TABLE_DEF /* nothing */
-#endif
-#endif /* FT_CALLBACK_TABLE */
-
-
-FT_END_HEADER
-
-
-#endif /* FTCONFIG_H_ */
-
-
-/* END */
diff --git a/include/freetype/config/ftheader.h b/include/freetype/config/ftheader.h
deleted file mode 100644
index d491af57c..000000000
--- a/include/freetype/config/ftheader.h
+++ /dev/null
@@ -1,846 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftheader.h */
-/* */
-/* Build macros of the FreeType 2 library. */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-#ifndef FTHEADER_H_
-#define FTHEADER_H_
-
-
- /*@***********************************************************************/
- /* */
- /* <Macro> */
- /* FT_BEGIN_HEADER */
- /* */
- /* <Description> */
- /* This macro is used in association with @FT_END_HEADER in header */
- /* files to ensure that the declarations within are properly */
- /* encapsulated in an `extern "C" { .. }' block when included from a */
- /* C++ compiler. */
- /* */
-#ifdef __cplusplus
-#define FT_BEGIN_HEADER extern "C" {
-#else
-#define FT_BEGIN_HEADER /* nothing */
-#endif
-
-
- /*@***********************************************************************/
- /* */
- /* <Macro> */
- /* FT_END_HEADER */
- /* */
- /* <Description> */
- /* This macro is used in association with @FT_BEGIN_HEADER in header */
- /* files to ensure that the declarations within are properly */
- /* encapsulated in an `extern "C" { .. }' block when included from a */
- /* C++ compiler. */
- /* */
-#ifdef __cplusplus
-#define FT_END_HEADER }
-#else
-#define FT_END_HEADER /* nothing */
-#endif
-
-
- /*************************************************************************/
- /* */
- /* Aliases for the FreeType 2 public and configuration files. */
- /* */
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* header_file_macros */
- /* */
- /* <Title> */
- /* Header File Macros */
- /* */
- /* <Abstract> */
- /* Macro definitions used to #include specific header files. */
- /* */
- /* <Description> */
- /* The following macros are defined to the name of specific */
- /* FreeType~2 header files. They can be used directly in #include */
- /* statements as in: */
- /* */
- /* { */
- /* #include FT_FREETYPE_H */
- /* #include FT_MULTIPLE_MASTERS_H */
- /* #include FT_GLYPH_H */
- /* } */
- /* */
- /* There are several reasons why we are now using macros to name */
- /* public header files. The first one is that such macros are not */
- /* limited to the infamous 8.3~naming rule required by DOS (and */
- /* `FT_MULTIPLE_MASTERS_H' is a lot more meaningful than `ftmm.h'). */
- /* */
- /* The second reason is that it allows for more flexibility in the */
- /* way FreeType~2 is installed on a given system. */
- /* */
- /*************************************************************************/
-
-
- /* configuration files */
-
- /*************************************************************************
- *
- * @macro:
- * FT_CONFIG_CONFIG_H
- *
- * @description:
- * A macro used in #include statements to name the file containing
- * FreeType~2 configuration data.
- *
- */
-#ifndef FT_CONFIG_CONFIG_H
-#define FT_CONFIG_CONFIG_H <freetype/config/ftconfig.h>
-#endif
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_CONFIG_STANDARD_LIBRARY_H
- *
- * @description:
- * A macro used in #include statements to name the file containing
- * FreeType~2 interface to the standard C library functions.
- *
- */
-#ifndef FT_CONFIG_STANDARD_LIBRARY_H
-#define FT_CONFIG_STANDARD_LIBRARY_H <freetype/config/ftstdlib.h>
-#endif
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_CONFIG_OPTIONS_H
- *
- * @description:
- * A macro used in #include statements to name the file containing
- * FreeType~2 project-specific configuration options.
- *
- */
-#ifndef FT_CONFIG_OPTIONS_H
-#define FT_CONFIG_OPTIONS_H <freetype/config/ftoption.h>
-#endif
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_CONFIG_MODULES_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * list of FreeType~2 modules that are statically linked to new library
- * instances in @FT_Init_FreeType.
- *
- */
-#ifndef FT_CONFIG_MODULES_H
-#define FT_CONFIG_MODULES_H <freetype/config/ftmodule.h>
-#endif
-
- /* */
-
- /* public headers */
-
- /*************************************************************************
- *
- * @macro:
- * FT_FREETYPE_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * base FreeType~2 API.
- *
- */
-#define FT_FREETYPE_H <freetype/freetype.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_ERRORS_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * list of FreeType~2 error codes (and messages).
- *
- * It is included by @FT_FREETYPE_H.
- *
- */
-#define FT_ERRORS_H <freetype/fterrors.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_MODULE_ERRORS_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * list of FreeType~2 module error offsets (and messages).
- *
- */
-#define FT_MODULE_ERRORS_H <freetype/ftmoderr.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_SYSTEM_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * FreeType~2 interface to low-level operations (i.e., memory management
- * and stream i/o).
- *
- * It is included by @FT_FREETYPE_H.
- *
- */
-#define FT_SYSTEM_H <freetype/ftsystem.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_IMAGE_H
- *
- * @description:
- * A macro used in #include statements to name the file containing type
- * definitions related to glyph images (i.e., bitmaps, outlines,
- * scan-converter parameters).
- *
- * It is included by @FT_FREETYPE_H.
- *
- */
-#define FT_IMAGE_H <freetype/ftimage.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_TYPES_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * basic data types defined by FreeType~2.
- *
- * It is included by @FT_FREETYPE_H.
- *
- */
-#define FT_TYPES_H <freetype/fttypes.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_LIST_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * list management API of FreeType~2.
- *
- * (Most applications will never need to include this file.)
- *
- */
-#define FT_LIST_H <freetype/ftlist.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_OUTLINE_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * scalable outline management API of FreeType~2.
- *
- */
-#define FT_OUTLINE_H <freetype/ftoutln.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_SIZES_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * API which manages multiple @FT_Size objects per face.
- *
- */
-#define FT_SIZES_H <freetype/ftsizes.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_MODULE_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * module management API of FreeType~2.
- *
- */
-#define FT_MODULE_H <freetype/ftmodapi.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_RENDER_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * renderer module management API of FreeType~2.
- *
- */
-#define FT_RENDER_H <freetype/ftrender.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_AUTOHINTER_H
- *
- * @description:
- * A macro used in #include statements to name the file containing
- * structures and macros related to the auto-hinting module.
- *
- */
-#define FT_AUTOHINTER_H <freetype/ftautoh.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_CFF_DRIVER_H
- *
- * @description:
- * A macro used in #include statements to name the file containing
- * structures and macros related to the CFF driver module.
- *
- */
-#define FT_CFF_DRIVER_H <freetype/ftcffdrv.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_TRUETYPE_DRIVER_H
- *
- * @description:
- * A macro used in #include statements to name the file containing
- * structures and macros related to the TrueType driver module.
- *
- */
-#define FT_TRUETYPE_DRIVER_H <freetype/ftttdrv.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_PCF_DRIVER_H
- *
- * @description:
- * A macro used in #include statements to name the file containing
- * structures and macros related to the PCF driver module.
- *
- */
-#define FT_PCF_DRIVER_H <freetype/ftpcfdrv.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_TYPE1_TABLES_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * types and API specific to the Type~1 format.
- *
- */
-#define FT_TYPE1_TABLES_H <freetype/t1tables.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_TRUETYPE_IDS_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * enumeration values which identify name strings, languages, encodings,
- * etc. This file really contains a _large_ set of constant macro
- * definitions, taken from the TrueType and OpenType specifications.
- *
- */
-#define FT_TRUETYPE_IDS_H <freetype/ttnameid.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_TRUETYPE_TABLES_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * types and API specific to the TrueType (as well as OpenType) format.
- *
- */
-#define FT_TRUETYPE_TABLES_H <freetype/tttables.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_TRUETYPE_TAGS_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * definitions of TrueType four-byte `tags' which identify blocks in
- * SFNT-based font formats (i.e., TrueType and OpenType).
- *
- */
-#define FT_TRUETYPE_TAGS_H <freetype/tttags.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_BDF_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * definitions of an API which accesses BDF-specific strings from a
- * face.
- *
- */
-#define FT_BDF_H <freetype/ftbdf.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_CID_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * definitions of an API which access CID font information from a
- * face.
- *
- */
-#define FT_CID_H <freetype/ftcid.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_GZIP_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * definitions of an API which supports gzip-compressed files.
- *
- */
-#define FT_GZIP_H <freetype/ftgzip.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_LZW_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * definitions of an API which supports LZW-compressed files.
- *
- */
-#define FT_LZW_H <freetype/ftlzw.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_BZIP2_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * definitions of an API which supports bzip2-compressed files.
- *
- */
-#define FT_BZIP2_H <freetype/ftbzip2.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_WINFONTS_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * definitions of an API which supports Windows FNT files.
- *
- */
-#define FT_WINFONTS_H <freetype/ftwinfnt.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_GLYPH_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * API of the optional glyph management component.
- *
- */
-#define FT_GLYPH_H <freetype/ftglyph.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_BITMAP_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * API of the optional bitmap conversion component.
- *
- */
-#define FT_BITMAP_H <freetype/ftbitmap.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_BBOX_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * API of the optional exact bounding box computation routines.
- *
- */
-#define FT_BBOX_H <freetype/ftbbox.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_CACHE_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * API of the optional FreeType~2 cache sub-system.
- *
- */
-#define FT_CACHE_H <freetype/ftcache.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_CACHE_IMAGE_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * `glyph image' API of the FreeType~2 cache sub-system.
- *
- * It is used to define a cache for @FT_Glyph elements. You can also
- * use the API defined in @FT_CACHE_SMALL_BITMAPS_H if you only need to
- * store small glyph bitmaps, as it will use less memory.
- *
- * This macro is deprecated. Simply include @FT_CACHE_H to have all
- * glyph image-related cache declarations.
- *
- */
-#define FT_CACHE_IMAGE_H FT_CACHE_H
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_CACHE_SMALL_BITMAPS_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * `small bitmaps' API of the FreeType~2 cache sub-system.
- *
- * It is used to define a cache for small glyph bitmaps in a relatively
- * memory-efficient way. You can also use the API defined in
- * @FT_CACHE_IMAGE_H if you want to cache arbitrary glyph images,
- * including scalable outlines.
- *
- * This macro is deprecated. Simply include @FT_CACHE_H to have all
- * small bitmaps-related cache declarations.
- *
- */
-#define FT_CACHE_SMALL_BITMAPS_H FT_CACHE_H
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_CACHE_CHARMAP_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * `charmap' API of the FreeType~2 cache sub-system.
- *
- * This macro is deprecated. Simply include @FT_CACHE_H to have all
- * charmap-based cache declarations.
- *
- */
-#define FT_CACHE_CHARMAP_H FT_CACHE_H
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_MAC_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * Macintosh-specific FreeType~2 API. The latter is used to access
- * fonts embedded in resource forks.
- *
- * This header file must be explicitly included by client applications
- * compiled on the Mac (note that the base API still works though).
- *
- */
-#define FT_MAC_H <freetype/ftmac.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_MULTIPLE_MASTERS_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * optional multiple-masters management API of FreeType~2.
- *
- */
-#define FT_MULTIPLE_MASTERS_H <freetype/ftmm.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_SFNT_NAMES_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * optional FreeType~2 API which accesses embedded `name' strings in
- * SFNT-based font formats (i.e., TrueType and OpenType).
- *
- */
-#define FT_SFNT_NAMES_H <freetype/ftsnames.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_OPENTYPE_VALIDATE_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * optional FreeType~2 API which validates OpenType tables (BASE, GDEF,
- * GPOS, GSUB, JSTF).
- *
- */
-#define FT_OPENTYPE_VALIDATE_H <freetype/ftotval.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_GX_VALIDATE_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * optional FreeType~2 API which validates TrueTypeGX/AAT tables (feat,
- * mort, morx, bsln, just, kern, opbd, trak, prop).
- *
- */
-#define FT_GX_VALIDATE_H <freetype/ftgxval.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_PFR_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * FreeType~2 API which accesses PFR-specific data.
- *
- */
-#define FT_PFR_H <freetype/ftpfr.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_STROKER_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * FreeType~2 API which provides functions to stroke outline paths.
- */
-#define FT_STROKER_H <freetype/ftstroke.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_SYNTHESIS_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * FreeType~2 API which performs artificial obliquing and emboldening.
- */
-#define FT_SYNTHESIS_H <freetype/ftsynth.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_FONT_FORMATS_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * FreeType~2 API which provides functions specific to font formats.
- */
-#define FT_FONT_FORMATS_H <freetype/ftfntfmt.h>
-
- /* deprecated */
-#define FT_XFREE86_H FT_FONT_FORMATS_H
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_TRIGONOMETRY_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * FreeType~2 API which performs trigonometric computations (e.g.,
- * cosines and arc tangents).
- */
-#define FT_TRIGONOMETRY_H <freetype/fttrigon.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_LCD_FILTER_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * FreeType~2 API which performs color filtering for subpixel rendering.
- */
-#define FT_LCD_FILTER_H <freetype/ftlcdfil.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_UNPATENTED_HINTING_H
- *
- * @description:
- * Deprecated.
- */
-#define FT_UNPATENTED_HINTING_H <freetype/ttunpat.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_INCREMENTAL_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * FreeType~2 API which performs incremental glyph loading.
- */
-#define FT_INCREMENTAL_H <freetype/ftincrem.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_GASP_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * FreeType~2 API which returns entries from the TrueType GASP table.
- */
-#define FT_GASP_H <freetype/ftgasp.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_ADVANCES_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * FreeType~2 API which returns individual and ranged glyph advances.
- */
-#define FT_ADVANCES_H <freetype/ftadvanc.h>
-
-
- /* */
-
-#define FT_ERROR_DEFINITIONS_H <freetype/fterrdef.h>
-
-
- /* The internals of the cache sub-system are no longer exposed. We */
- /* default to FT_CACHE_H at the moment just in case, but we know of */
- /* no rogue client that uses them. */
- /* */
-#define FT_CACHE_MANAGER_H <freetype/ftcache.h>
-#define FT_CACHE_INTERNAL_MRU_H <freetype/ftcache.h>
-#define FT_CACHE_INTERNAL_MANAGER_H <freetype/ftcache.h>
-#define FT_CACHE_INTERNAL_CACHE_H <freetype/ftcache.h>
-#define FT_CACHE_INTERNAL_GLYPH_H <freetype/ftcache.h>
-#define FT_CACHE_INTERNAL_IMAGE_H <freetype/ftcache.h>
-#define FT_CACHE_INTERNAL_SBITS_H <freetype/ftcache.h>
-
-
-#define FT_INCREMENTAL_H <freetype/ftincrem.h>
-
-#define FT_TRUETYPE_UNPATENTED_H <freetype/ttunpat.h>
-
-
- /*
- * Include internal headers definitions from <internal/...>
- * only when building the library.
- */
-#ifdef FT2_BUILD_LIBRARY
-#define FT_INTERNAL_INTERNAL_H <freetype/internal/internal.h>
-#include FT_INTERNAL_INTERNAL_H
-#endif /* FT2_BUILD_LIBRARY */
-
-
-#endif /* FTHEADER_H_ */
-
-
-/* END */
diff --git a/include/freetype/config/ftmodule.h b/include/freetype/config/ftmodule.h
deleted file mode 100644
index 76d271a74..000000000
--- a/include/freetype/config/ftmodule.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * This file registers the FreeType modules compiled into the library.
- *
- * If you use GNU make, this file IS NOT USED! Instead, it is created in
- * the objects directory (normally `<topdir>/objs/') based on information
- * from `<topdir>/modules.cfg'.
- *
- * Please read `docs/INSTALL.ANY' and `docs/CUSTOMIZE' how to compile
- * FreeType without GNU make.
- *
- */
-
-FT_USE_MODULE( FT_Module_Class, autofit_module_class )
-FT_USE_MODULE( FT_Driver_ClassRec, tt_driver_class )
-FT_USE_MODULE( FT_Driver_ClassRec, t1_driver_class )
-FT_USE_MODULE( FT_Driver_ClassRec, cff_driver_class )
-FT_USE_MODULE( FT_Driver_ClassRec, t1cid_driver_class )
-FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class )
-FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class )
-FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class )
-FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class )
-FT_USE_MODULE( FT_Module_Class, psaux_module_class )
-FT_USE_MODULE( FT_Module_Class, psnames_module_class )
-FT_USE_MODULE( FT_Module_Class, pshinter_module_class )
-FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )
-FT_USE_MODULE( FT_Module_Class, sfnt_module_class )
-FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class )
-FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcd_renderer_class )
-FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcdv_renderer_class )
-FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
-
-/* EOF */
diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h
deleted file mode 100644
index 1bf6e8f53..000000000
--- a/include/freetype/config/ftoption.h
+++ /dev/null
@@ -1,993 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftoption.h */
-/* */
-/* User-selectable configuration macros (specification only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTOPTION_H_
-#define FTOPTION_H_
-
-
-#include <ft2build.h>
-
-
-FT_BEGIN_HEADER
-
- /*************************************************************************/
- /* */
- /* USER-SELECTABLE CONFIGURATION MACROS */
- /* */
- /* This file contains the default configuration macro definitions for */
- /* a standard build of the FreeType library. There are three ways to */
- /* use this file to build project-specific versions of the library: */
- /* */
- /* - You can modify this file by hand, but this is not recommended in */
- /* cases where you would like to build several versions of the */
- /* library from a single source directory. */
- /* */
- /* - You can put a copy of this file in your build directory, more */
- /* precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD' */
- /* is the name of a directory that is included _before_ the FreeType */
- /* include path during compilation. */
- /* */
- /* The default FreeType Makefiles and Jamfiles use the build */
- /* directory `builds/<system>' by default, but you can easily change */
- /* that for your own projects. */
- /* */
- /* - Copy the file <ft2build.h> to `$BUILD/ft2build.h' and modify it */
- /* slightly to pre-define the macro FT_CONFIG_OPTIONS_H used to */
- /* locate this file during the build. For example, */
- /* */
- /* #define FT_CONFIG_OPTIONS_H <myftoptions.h> */
- /* #include <freetype/config/ftheader.h> */
- /* */
- /* will use `$BUILD/myftoptions.h' instead of this file for macro */
- /* definitions. */
- /* */
- /* Note also that you can similarly pre-define the macro */
- /* FT_CONFIG_MODULES_H used to locate the file listing of the modules */
- /* that are statically linked to the library at compile time. By */
- /* default, this file is <freetype/config/ftmodule.h>. */
- /* */
- /* We highly recommend using the third method whenever possible. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** G E N E R A L F R E E T Y P E 2 C O N F I G U R A T I O N ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* If you enable this configuration option, FreeType recognizes an */
- /* environment variable called `FREETYPE_PROPERTIES', which can be used */
- /* to control the various font drivers and modules. The controllable */
- /* properties are listed in the section `Controlling FreeType Modules' */
- /* in the reference's table of contents; currently there are properties */
- /* for the auto-hinter (file `ftautoh.h'), CFF (file `ftcffdrv.h'), */
- /* TrueType (file `ftttdrv.h'), and PCF (file `ftpcfdrv.h'). */
- /* */
- /* `FREETYPE_PROPERTIES' has the following syntax form (broken here into */
- /* multiple lines for better readability). */
- /* */
- /* <optional whitespace> */
- /* <module-name1> ':' */
- /* <property-name1> '=' <property-value1> */
- /* <whitespace> */
- /* <module-name2> ':' */
- /* <property-name2> '=' <property-value2> */
- /* ... */
- /* */
- /* Example: */
- /* */
- /* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ */
- /* cff:no-stem-darkening=1 \ */
- /* autofitter:warping=1 */
- /* */
-#define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
-
-
- /*************************************************************************/
- /* */
- /* Uncomment the line below if you want to activate sub-pixel rendering */
- /* (a.k.a. LCD rendering, or ClearType) in this build of the library. */
- /* */
- /* Note that this feature is covered by several Microsoft patents */
- /* and should not be activated in any default build of the library. */
- /* */
- /* This macro has no impact on the FreeType API, only on its */
- /* _implementation_. For example, using FT_RENDER_MODE_LCD when calling */
- /* FT_Render_Glyph still generates a bitmap that is 3 times wider than */
- /* the original size in case this macro isn't defined; however, each */
- /* triplet of subpixels has R=G=B. */
- /* */
- /* This is done to allow FreeType clients to run unmodified, forcing */
- /* them to display normal gray-level anti-aliased glyphs. */
- /* */
-/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
-
-
- /*************************************************************************/
- /* */
- /* Many compilers provide a non-ANSI 64-bit data type that can be used */
- /* by FreeType to speed up some computations. However, this will create */
- /* some problems when compiling the library in strict ANSI mode. */
- /* */
- /* For this reason, the use of 64-bit integers is normally disabled when */
- /* the __STDC__ macro is defined. You can however disable this by */
- /* defining the macro FT_CONFIG_OPTION_FORCE_INT64 here. */
- /* */
- /* For most compilers, this will only create compilation warnings when */
- /* building the library. */
- /* */
- /* ObNote: The compiler-specific 64-bit integers are detected in the */
- /* file `ftconfig.h' either statically or through the */
- /* `configure' script on supported platforms. */
- /* */
-#undef FT_CONFIG_OPTION_FORCE_INT64
-
-
- /*************************************************************************/
- /* */
- /* If this macro is defined, do not try to use an assembler version of */
- /* performance-critical functions (e.g. FT_MulFix). You should only do */
- /* that to verify that the assembler function works properly, or to */
- /* execute benchmark tests of the various implementations. */
-/* #define FT_CONFIG_OPTION_NO_ASSEMBLER */
-
-
- /*************************************************************************/
- /* */
- /* If this macro is defined, try to use an inlined assembler version of */
- /* the `FT_MulFix' function, which is a `hotspot' when loading and */
- /* hinting glyphs, and which should be executed as fast as possible. */
- /* */
- /* Note that if your compiler or CPU is not supported, this will default */
- /* to the standard and portable implementation found in `ftcalc.c'. */
- /* */
-#define FT_CONFIG_OPTION_INLINE_MULFIX
-
-
- /*************************************************************************/
- /* */
- /* LZW-compressed file support. */
- /* */
- /* FreeType now handles font files that have been compressed with the */
- /* `compress' program. This is mostly used to parse many of the PCF */
- /* files that come with various X11 distributions. The implementation */
- /* uses NetBSD's `zopen' to partially uncompress the file on the fly */
- /* (see src/lzw/ftgzip.c). */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
-#define FT_CONFIG_OPTION_USE_LZW
-
-
- /*************************************************************************/
- /* */
- /* Gzip-compressed file support. */
- /* */
- /* FreeType now handles font files that have been compressed with the */
- /* `gzip' program. This is mostly used to parse many of the PCF files */
- /* that come with XFree86. The implementation uses `zlib' to */
- /* partially uncompress the file on the fly (see src/gzip/ftgzip.c). */
- /* */
- /* Define this macro if you want to enable this `feature'. See also */
- /* the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below. */
- /* */
-#define FT_CONFIG_OPTION_USE_ZLIB
-
-
- /*************************************************************************/
- /* */
- /* ZLib library selection */
- /* */
- /* This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined. */
- /* It allows FreeType's `ftgzip' component to link to the system's */
- /* installation of the ZLib library. This is useful on systems like */
- /* Unix or VMS where it generally is already available. */
- /* */
- /* If you let it undefined, the component will use its own copy */
- /* of the zlib sources instead. These have been modified to be */
- /* included directly within the component and *not* export external */
- /* function names. This allows you to link any program with FreeType */
- /* _and_ ZLib without linking conflicts. */
- /* */
- /* Do not #undef this macro here since the build system might define */
- /* it for certain configurations only. */
- /* */
-/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
-
-
- /*************************************************************************/
- /* */
- /* Bzip2-compressed file support. */
- /* */
- /* FreeType now handles font files that have been compressed with the */
- /* `bzip2' program. This is mostly used to parse many of the PCF */
- /* files that come with XFree86. The implementation uses `libbz2' to */
- /* partially uncompress the file on the fly (see src/bzip2/ftbzip2.c). */
- /* Contrary to gzip, bzip2 currently is not included and need to use */
- /* the system available bzip2 implementation. */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
-/* #define FT_CONFIG_OPTION_USE_BZIP2 */
-
-
- /*************************************************************************/
- /* */
- /* Define to disable the use of file stream functions and types, FILE, */
- /* fopen() etc. Enables the use of smaller system libraries on embedded */
- /* systems that have multiple system libraries, some with or without */
- /* file stream support, in the cases where file stream support is not */
- /* necessary such as memory loading of font files. */
- /* */
-/* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */
-
-
- /*************************************************************************/
- /* */
- /* PNG bitmap support. */
- /* */
- /* FreeType now handles loading color bitmap glyphs in the PNG format. */
- /* This requires help from the external libpng library. Uncompressed */
- /* color bitmaps do not need any external libraries and will be */
- /* supported regardless of this configuration. */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
-/* #define FT_CONFIG_OPTION_USE_PNG */
-
-
- /*************************************************************************/
- /* */
- /* HarfBuzz support. */
- /* */
- /* FreeType uses the HarfBuzz library to improve auto-hinting of */
- /* OpenType fonts. If available, many glyphs not directly addressable */
- /* by a font's character map will be hinted also. */
- /* */
- /* Define this macro if you want to enable this `feature'. */
- /* */
-/* #define FT_CONFIG_OPTION_USE_HARFBUZZ */
-
-
- /*************************************************************************/
- /* */
- /* DLL export compilation */
- /* */
- /* When compiling FreeType as a DLL, some systems/compilers need a */
- /* special keyword in front OR after the return type of function */
- /* declarations. */
- /* */
- /* Two macros are used within the FreeType source code to define */
- /* exported library functions: FT_EXPORT and FT_EXPORT_DEF. */
- /* */
- /* FT_EXPORT( return_type ) */
- /* */
- /* is used in a function declaration, as in */
- /* */
- /* FT_EXPORT( FT_Error ) */
- /* FT_Init_FreeType( FT_Library* alibrary ); */
- /* */
- /* */
- /* FT_EXPORT_DEF( return_type ) */
- /* */
- /* is used in a function definition, as in */
- /* */
- /* FT_EXPORT_DEF( FT_Error ) */
- /* FT_Init_FreeType( FT_Library* alibrary ) */
- /* { */
- /* ... some code ... */
- /* return FT_Err_Ok; */
- /* } */
- /* */
- /* You can provide your own implementation of FT_EXPORT and */
- /* FT_EXPORT_DEF here if you want. If you leave them undefined, they */
- /* will be later automatically defined as `extern return_type' to */
- /* allow normal compilation. */
- /* */
- /* Do not #undef these macros here since the build system might define */
- /* them for certain configurations only. */
- /* */
-/* #define FT_EXPORT(x) extern x */
-/* #define FT_EXPORT_DEF(x) x */
-
-
- /*************************************************************************/
- /* */
- /* Glyph Postscript Names handling */
- /* */
- /* By default, FreeType 2 is compiled with the `psnames' module. This */
- /* module is in charge of converting a glyph name string into a */
- /* Unicode value, or return a Macintosh standard glyph name for the */
- /* use with the TrueType `post' table. */
- /* */
- /* Undefine this macro if you do not want `psnames' compiled in your */
- /* build of FreeType. This has the following effects: */
- /* */
- /* - The TrueType driver will provide its own set of glyph names, */
- /* if you build it to support postscript names in the TrueType */
- /* `post' table. */
- /* */
- /* - The Type 1 driver will not be able to synthesize a Unicode */
- /* charmap out of the glyphs found in the fonts. */
- /* */
- /* You would normally undefine this configuration macro when building */
- /* a version of FreeType that doesn't contain a Type 1 or CFF driver. */
- /* */
-#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES
-
-
- /*************************************************************************/
- /* */
- /* Postscript Names to Unicode Values support */
- /* */
- /* By default, FreeType 2 is built with the `PSNames' module compiled */
- /* in. Among other things, the module is used to convert a glyph name */
- /* into a Unicode value. This is especially useful in order to */
- /* synthesize on the fly a Unicode charmap from the CFF/Type 1 driver */
- /* through a big table named the `Adobe Glyph List' (AGL). */
- /* */
- /* Undefine this macro if you do not want the Adobe Glyph List */
- /* compiled in your `PSNames' module. The Type 1 driver will not be */
- /* able to synthesize a Unicode charmap out of the glyphs found in the */
- /* fonts. */
- /* */
-#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
-
-
- /*************************************************************************/
- /* */
- /* Support for Mac fonts */
- /* */
- /* Define this macro if you want support for outline fonts in Mac */
- /* format (mac dfont, mac resource, macbinary containing a mac */
- /* resource) on non-Mac platforms. */
- /* */
- /* Note that the `FOND' resource isn't checked. */
- /* */
-#define FT_CONFIG_OPTION_MAC_FONTS
-
-
- /*************************************************************************/
- /* */
- /* Guessing methods to access embedded resource forks */
- /* */
- /* Enable extra Mac fonts support on non-Mac platforms (e.g. */
- /* GNU/Linux). */
- /* */
- /* Resource forks which include fonts data are stored sometimes in */
- /* locations which users or developers don't expected. In some cases, */
- /* resource forks start with some offset from the head of a file. In */
- /* other cases, the actual resource fork is stored in file different */
- /* from what the user specifies. If this option is activated, */
- /* FreeType tries to guess whether such offsets or different file */
- /* names must be used. */
- /* */
- /* Note that normal, direct access of resource forks is controlled via */
- /* the FT_CONFIG_OPTION_MAC_FONTS option. */
- /* */
-#ifdef FT_CONFIG_OPTION_MAC_FONTS
-#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
-#endif
-
-
- /*************************************************************************/
- /* */
- /* Allow the use of FT_Incremental_Interface to load typefaces that */
- /* contain no glyph data, but supply it via a callback function. */
- /* This is required by clients supporting document formats which */
- /* supply font data incrementally as the document is parsed, such */
- /* as the Ghostscript interpreter for the PostScript language. */
- /* */
-#define FT_CONFIG_OPTION_INCREMENTAL
-
-
- /*************************************************************************/
- /* */
- /* The size in bytes of the render pool used by the scan-line converter */
- /* to do all of its work. */
- /* */
-#define FT_RENDER_POOL_SIZE 16384L
-
-
- /*************************************************************************/
- /* */
- /* FT_MAX_MODULES */
- /* */
- /* The maximum number of modules that can be registered in a single */
- /* FreeType library object. 32 is the default. */
- /* */
-#define FT_MAX_MODULES 32
-
-
- /*************************************************************************/
- /* */
- /* Debug level */
- /* */
- /* FreeType can be compiled in debug or trace mode. In debug mode, */
- /* errors are reported through the `ftdebug' component. In trace */
- /* mode, additional messages are sent to the standard output during */
- /* execution. */
- /* */
- /* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */
- /* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */
- /* */
- /* Don't define any of these macros to compile in `release' mode! */
- /* */
- /* Do not #undef these macros here since the build system might define */
- /* them for certain configurations only. */
- /* */
-/* #define FT_DEBUG_LEVEL_ERROR */
-/* #define FT_DEBUG_LEVEL_TRACE */
-
-
- /*************************************************************************/
- /* */
- /* Autofitter debugging */
- /* */
- /* If FT_DEBUG_AUTOFIT is defined, FreeType provides some means to */
- /* control the autofitter behaviour for debugging purposes with global */
- /* boolean variables (consequently, you should *never* enable this */
- /* while compiling in `release' mode): */
- /* */
- /* _af_debug_disable_horz_hints */
- /* _af_debug_disable_vert_hints */
- /* _af_debug_disable_blue_hints */
- /* */
- /* Additionally, the following functions provide dumps of various */
- /* internal autofit structures to stdout (using `printf'): */
- /* */
- /* af_glyph_hints_dump_points */
- /* af_glyph_hints_dump_segments */
- /* af_glyph_hints_dump_edges */
- /* af_glyph_hints_get_num_segments */
- /* af_glyph_hints_get_segment_offset */
- /* */
- /* As an argument, they use another global variable: */
- /* */
- /* _af_debug_hints */
- /* */
- /* Please have a look at the `ftgrid' demo program to see how those */
- /* variables and macros should be used. */
- /* */
- /* Do not #undef these macros here since the build system might define */
- /* them for certain configurations only. */
- /* */
-/* #define FT_DEBUG_AUTOFIT */
-
-
- /*************************************************************************/
- /* */
- /* Memory Debugging */
- /* */
- /* FreeType now comes with an integrated memory debugger that is */
- /* capable of detecting simple errors like memory leaks or double */
- /* deletes. To compile it within your build of the library, you */
- /* should define FT_DEBUG_MEMORY here. */
- /* */
- /* Note that the memory debugger is only activated at runtime when */
- /* when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */
- /* */
- /* Do not #undef this macro here since the build system might define */
- /* it for certain configurations only. */
- /* */
-/* #define FT_DEBUG_MEMORY */
-
-
- /*************************************************************************/
- /* */
- /* Module errors */
- /* */
- /* If this macro is set (which is _not_ the default), the higher byte */
- /* of an error code gives the module in which the error has occurred, */
- /* while the lower byte is the real error code. */
- /* */
- /* Setting this macro makes sense for debugging purposes only, since */
- /* it would break source compatibility of certain programs that use */
- /* FreeType 2. */
- /* */
- /* More details can be found in the files ftmoderr.h and fterrors.h. */
- /* */
-#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
-
-
- /*************************************************************************/
- /* */
- /* Position Independent Code */
- /* */
- /* If this macro is set (which is _not_ the default), FreeType2 will */
- /* avoid creating constants that require address fixups. Instead the */
- /* constants will be moved into a struct and additional intialization */
- /* code will be used. */
- /* */
- /* Setting this macro is needed for systems that prohibit address */
- /* fixups, such as BREW. [Note that standard compilers like gcc or */
- /* clang handle PIC generation automatically; you don't have to set */
- /* FT_CONFIG_OPTION_PIC, which is only necessary for very special */
- /* compilers.] */
- /* */
- /* Note that FT_CONFIG_OPTION_PIC support is not available for all */
- /* modules (see `modules.cfg' for a complete list). For building with */
- /* FT_CONFIG_OPTION_PIC support, do the following. */
- /* */
- /* 0. Clone the repository. */
- /* 1. Define FT_CONFIG_OPTION_PIC. */
- /* 2. Remove all subdirectories in `src' that don't have */
- /* FT_CONFIG_OPTION_PIC support. */
- /* 3. Comment out the corresponding modules in `modules.cfg'. */
- /* 4. Compile. */
- /* */
-/* #define FT_CONFIG_OPTION_PIC */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** S F N T D R I V E R C O N F I G U R A T I O N ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_EMBEDDED_BITMAPS if you want to support */
- /* embedded bitmaps in all formats using the SFNT module (namely */
- /* TrueType & OpenType). */
- /* */
-#define TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_POSTSCRIPT_NAMES if you want to be able to */
- /* load and enumerate the glyph Postscript names in a TrueType or */
- /* OpenType file. */
- /* */
- /* Note that when you do not compile the `PSNames' module by undefining */
- /* the above FT_CONFIG_OPTION_POSTSCRIPT_NAMES, the `sfnt' module will */
- /* contain additional code used to read the PS Names table from a font. */
- /* */
- /* (By default, the module uses `PSNames' to extract glyph names.) */
- /* */
-#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to */
- /* access the internal name table in a SFNT-based format like TrueType */
- /* or OpenType. The name table contains various strings used to */
- /* describe the font, like family name, copyright, version, etc. It */
- /* does not contain any glyph name though. */
- /* */
- /* Accessing SFNT names is done through the functions declared in */
- /* `ftsnames.h'. */
- /* */
-#define TT_CONFIG_OPTION_SFNT_NAMES
-
-
- /*************************************************************************/
- /* */
- /* TrueType CMap support */
- /* */
- /* Here you can fine-tune which TrueType CMap table format shall be */
- /* supported. */
-#define TT_CONFIG_CMAP_FORMAT_0
-#define TT_CONFIG_CMAP_FORMAT_2
-#define TT_CONFIG_CMAP_FORMAT_4
-#define TT_CONFIG_CMAP_FORMAT_6
-#define TT_CONFIG_CMAP_FORMAT_8
-#define TT_CONFIG_CMAP_FORMAT_10
-#define TT_CONFIG_CMAP_FORMAT_12
-#define TT_CONFIG_CMAP_FORMAT_13
-#define TT_CONFIG_CMAP_FORMAT_14
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */
- /* a bytecode interpreter in the TrueType driver. */
- /* */
- /* By undefining this, you will only compile the code necessary to load */
- /* TrueType glyphs without hinting. */
- /* */
- /* Do not #undef this macro here, since the build system might */
- /* define it for certain configurations only. */
- /* */
-#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_SUBPIXEL_HINTING if you want to compile */
- /* subpixel hinting support into the TrueType driver. This modifies the */
- /* TrueType hinting mechanism when anything but FT_RENDER_MODE_MONO is */
- /* requested. */
- /* */
- /* In particular, it modifies the bytecode interpreter to interpret (or */
- /* not) instructions in a certain way so that all TrueType fonts look */
- /* like they do in a Windows ClearType (DirectWrite) environment. See */
- /* [1] for a technical overview on what this means. See `ttinterp.h' */
- /* for more details on the LEAN option. */
- /* */
- /* There are three possible values. */
- /* */
- /* Value 1: */
- /* This value is associated with the `Infinality' moniker, */
- /* contributed by an individual nicknamed Infinality with the goal of */
- /* making TrueType fonts render better than on Windows. A high */
- /* amount of configurability and flexibility, down to rules for */
- /* single glyphs in fonts, but also very slow. Its experimental and */
- /* slow nature and the original developer losing interest meant that */
- /* this option was never enabled in default builds. */
- /* */
- /* The corresponding interpreter version is v38. */
- /* */
- /* Value 2: */
- /* The new default mode for the TrueType driver. The Infinality code */
- /* base was stripped to the bare minimum and all configurability */
- /* removed in the name of speed and simplicity. The configurability */
- /* was mainly aimed at legacy fonts like Arial, Times New Roman, or */
- /* Courier. Legacy fonts are fonts that modify vertical stems to */
- /* achieve clean black-and-white bitmaps. The new mode focuses on */
- /* applying a minimal set of rules to all fonts indiscriminately so */
- /* that modern and web fonts render well while legacy fonts render */
- /* okay. */
- /* */
- /* The corresponding interpreter version is v40. */
- /* */
- /* Value 3: */
- /* Compile both, making both v38 and v40 available (the latter is the */
- /* default). */
- /* */
- /* By undefining these, you get rendering behavior like on Windows */
- /* without ClearType, i.e., Windows XP without ClearType enabled and */
- /* Win9x (interpreter version v35). Or not, depending on how much */
- /* hinting blood and testing tears the font designer put into a given */
- /* font. If you define one or both subpixel hinting options, you can */
- /* switch between between v35 and the ones you define (using */
- /* `FT_Property_Set'). */
- /* */
- /* This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be */
- /* defined. */
- /* */
- /* [1] http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */
- /* */
-/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */
-#define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2
-/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 ) */
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */
- /* TrueType glyph loader to use Apple's definition of how to handle */
- /* component offsets in composite glyphs. */
- /* */
- /* Apple and MS disagree on the default behavior of component offsets */
- /* in composites. Apple says that they should be scaled by the scaling */
- /* factors in the transformation matrix (roughly, it's more complex) */
- /* while MS says they should not. OpenType defines two bits in the */
- /* composite flags array which can be used to disambiguate, but old */
- /* fonts will not have them. */
- /* */
- /* http://www.microsoft.com/typography/otspec/glyf.htm */
- /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html */
- /* */
-#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */
- /* support for Apple's distortable font technology (fvar, gvar, cvar, */
- /* and avar tables). This has many similarities to Type 1 Multiple */
- /* Masters support. */
- /* */
-#define TT_CONFIG_OPTION_GX_VAR_SUPPORT
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_BDF if you want to include support for */
- /* an embedded `BDF ' table within SFNT-based bitmap formats. */
- /* */
-#define TT_CONFIG_OPTION_BDF
-
-
- /*************************************************************************/
- /* */
- /* Option TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES controls the maximum */
- /* number of bytecode instructions executed for a single run of the */
- /* bytecode interpreter, needed to prevent infinite loops. You don't */
- /* want to change this except for very special situations (e.g., making */
- /* a library fuzzer spend less time to handle broken fonts). */
- /* */
- /* It is not expected that this value is ever modified by a configuring */
- /* script; instead, it gets surrounded with #ifndef ... #endif so that */
- /* the value can be set as a preprocessor option on the compiler's */
- /* command line. */
- /* */
-#ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES
-#define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L
-#endif
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* T1_MAX_DICT_DEPTH is the maximum depth of nest dictionaries and */
- /* arrays in the Type 1 stream (see t1load.c). A minimum of 4 is */
- /* required. */
- /* */
-#define T1_MAX_DICT_DEPTH 5
-
-
- /*************************************************************************/
- /* */
- /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */
- /* calls during glyph loading. */
- /* */
-#define T1_MAX_SUBRS_CALLS 16
-
-
- /*************************************************************************/
- /* */
- /* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A */
- /* minimum of 16 is required. */
- /* */
- /* The Chinese font MingTiEG-Medium (CNS 11643 character set) needs 256. */
- /* */
-#define T1_MAX_CHARSTRINGS_OPERANDS 256
-
-
- /*************************************************************************/
- /* */
- /* Define this configuration macro if you want to prevent the */
- /* compilation of `t1afm', which is in charge of reading Type 1 AFM */
- /* files into an existing face. Note that if set, the T1 driver will be */
- /* unable to produce kerning distances. */
- /* */
-#undef T1_CONFIG_OPTION_NO_AFM
-
-
- /*************************************************************************/
- /* */
- /* Define this configuration macro if you want to prevent the */
- /* compilation of the Multiple Masters font support in the Type 1 */
- /* driver. */
- /* */
-#undef T1_CONFIG_OPTION_NO_MM_SUPPORT
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** C F F D R I V E R C O N F I G U R A T I O N ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Using CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} it is */
- /* possible to set up the default values of the four control points that */
- /* define the stem darkening behaviour of the (new) CFF engine. For */
- /* more details please read the documentation of the */
- /* `darkening-parameters' property of the cff driver module (file */
- /* `ftcffdrv.h'), which allows the control at run-time. */
- /* */
- /* Do *not* undefine these macros! */
- /* */
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 500
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 400
-
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 1000
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 275
-
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 1667
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 275
-
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 2333
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 0
-
-
- /*************************************************************************/
- /* */
- /* CFF_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe CFF */
- /* engine gets compiled into FreeType. If defined, it is possible to */
- /* switch between the two engines using the `hinting-engine' property of */
- /* the cff driver module. */
- /* */
-/* #define CFF_CONFIG_OPTION_OLD_ENGINE */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** P C F D R I V E R C O N F I G U R A T I O N ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* There are many PCF fonts just called `Fixed' which look completely */
- /* different, and which have nothing to do with each other. When */
- /* selecting `Fixed' in KDE or Gnome one gets results that appear rather */
- /* random, the style changes often if one changes the size and one */
- /* cannot select some fonts at all. This option makes the PCF module */
- /* prepend the foundry name (plus a space) to the family name. */
- /* */
- /* We also check whether we have `wide' characters; all put together, we */
- /* get family names like `Sony Fixed' or `Misc Fixed Wide'. */
- /* */
- /* If this option is activated, it can be controlled with the */
- /* `no-long-family-names' property of the pcf driver module. */
- /* */
-/* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Compile autofit module with CJK (Chinese, Japanese, Korean) script */
- /* support. */
- /* */
-#define AF_CONFIG_OPTION_CJK
-
- /*************************************************************************/
- /* */
- /* Compile autofit module with fallback Indic script support, covering */
- /* some scripts that the `latin' submodule of the autofit module doesn't */
- /* (yet) handle. */
- /* */
-#define AF_CONFIG_OPTION_INDIC
-
- /*************************************************************************/
- /* */
- /* Compile autofit module with warp hinting. The idea of the warping */
- /* code is to slightly scale and shift a glyph within a single dimension */
- /* so that as much of its segments are aligned (more or less) on the */
- /* grid. To find out the optimal scaling and shifting value, various */
- /* parameter combinations are tried and scored. */
- /* */
- /* This experimental option is active only if the rendering mode is */
- /* FT_RENDER_MODE_LIGHT; you can switch warping on and off with the */
- /* `warping' property of the auto-hinter (see file `ftautoh.h' for more */
- /* information; by default it is switched off). */
- /* */
-#define AF_CONFIG_OPTION_USE_WARPER
-
- /*************************************************************************/
- /* */
- /* Use TrueType-like size metrics for `light' auto-hinting. */
- /* */
- /* It is strongly recommended to avoid this option, which exists only to */
- /* help some legacy applications retain its appearance and behaviour */
- /* with respect to auto-hinted TrueType fonts. */
- /* */
- /* The very reason this option exists at all are GNU/Linux distributions */
- /* like Fedora that did not un-patch the following change (which was */
- /* present in FreeType between versions 2.4.6 and 2.7.1, inclusive). */
- /* */
- /* 2011-07-16 Steven Chu <steven.f.chu@gmail.com> */
- /* */
- /* [truetype] Fix metrics on size request for scalable fonts. */
- /* */
- /* This problematic commit is now reverted (more or less). */
- /* */
-/* #define AF_CONFIG_OPTION_TT_SIZE_METRICS */
-
- /* */
-
-
- /*
- * This macro is obsolete. Support has been removed in FreeType
- * version 2.5.
- */
-/* #define FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
- /*
- * This macro is defined if native TrueType hinting is requested by the
- * definitions above.
- */
-#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
-#define TT_USE_BYTECODE_INTERPRETER
-
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
-#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 1
-#define TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-#endif
-
-#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 2
-#define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
-#endif
-#endif
-#endif
-
-
- /*
- * Check CFF darkening parameters. The checks are the same as in function
- * `cff_property_set' in file `cffdrivr.c'.
- */
-#if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 < 0 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 < 0 || \
- \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 < 0 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 < 0 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 < 0 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 < 0 || \
- \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 > \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 > \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 > \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 || \
- \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 > 500 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 > 500 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 > 500 || \
- CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 > 500
-#error "Invalid CFF darkening parameters!"
-#endif
-
-FT_END_HEADER
-
-
-#endif /* FTOPTION_H_ */
-
-
-/* END */
diff --git a/include/freetype/config/ftstdlib.h b/include/freetype/config/ftstdlib.h
deleted file mode 100644
index 05a4845fd..000000000
--- a/include/freetype/config/ftstdlib.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftstdlib.h */
-/* */
-/* ANSI-specific library and header configuration file (specification */
-/* only). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to group all #includes to the ANSI C library that */
- /* FreeType normally requires. It also defines macros to rename the */
- /* standard functions within the FreeType source code. */
- /* */
- /* Load a file which defines FTSTDLIB_H_ before this one to override it. */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTSTDLIB_H_
-#define FTSTDLIB_H_
-
-
-#include <stddef.h>
-
-#define ft_ptrdiff_t ptrdiff_t
-
-
- /**********************************************************************/
- /* */
- /* integer limits */
- /* */
- /* UINT_MAX and ULONG_MAX are used to automatically compute the size */
- /* of `int' and `long' in bytes at compile-time. So far, this works */
- /* for all platforms the library has been tested on. */
- /* */
- /* Note that on the extremely rare platforms that do not provide */
- /* integer types that are _exactly_ 16 and 32 bits wide (e.g. some */
- /* old Crays where `int' is 36 bits), we do not make any guarantee */
- /* about the correct behaviour of FT2 with all fonts. */
- /* */
- /* In these case, `ftconfig.h' will refuse to compile anyway with a */
- /* message like `couldn't find 32-bit type' or something similar. */
- /* */
- /**********************************************************************/
-
-
-#include <limits.h>
-
-#define FT_CHAR_BIT CHAR_BIT
-#define FT_USHORT_MAX USHRT_MAX
-#define FT_INT_MAX INT_MAX
-#define FT_INT_MIN INT_MIN
-#define FT_UINT_MAX UINT_MAX
-#define FT_LONG_MIN LONG_MIN
-#define FT_LONG_MAX LONG_MAX
-#define FT_ULONG_MAX ULONG_MAX
-
-
- /**********************************************************************/
- /* */
- /* character and string processing */
- /* */
- /**********************************************************************/
-
-
-#include <string.h>
-
-#define ft_memchr memchr
-#define ft_memcmp memcmp
-#define ft_memcpy memcpy
-#define ft_memmove memmove
-#define ft_memset memset
-#define ft_strcat strcat
-#define ft_strcmp strcmp
-#define ft_strcpy strcpy
-#define ft_strlen strlen
-#define ft_strncmp strncmp
-#define ft_strncpy strncpy
-#define ft_strrchr strrchr
-#define ft_strstr strstr
-
-
- /**********************************************************************/
- /* */
- /* file handling */
- /* */
- /**********************************************************************/
-
-
-#include <stdio.h>
-
-#define FT_FILE FILE
-#define ft_fclose fclose
-#define ft_fopen fopen
-#define ft_fread fread
-#define ft_fseek fseek
-#define ft_ftell ftell
-#define ft_sprintf sprintf
-
-
- /**********************************************************************/
- /* */
- /* sorting */
- /* */
- /**********************************************************************/
-
-
-#include <stdlib.h>
-
-#define ft_qsort qsort
-
-
- /**********************************************************************/
- /* */
- /* memory allocation */
- /* */
- /**********************************************************************/
-
-
-#define ft_scalloc calloc
-#define ft_sfree free
-#define ft_smalloc malloc
-#define ft_srealloc realloc
-
-
- /**********************************************************************/
- /* */
- /* miscellaneous */
- /* */
- /**********************************************************************/
-
-
-#define ft_strtol strtol
-#define ft_getenv getenv
-
-
- /**********************************************************************/
- /* */
- /* execution control */
- /* */
- /**********************************************************************/
-
-
-#include <setjmp.h>
-
-#define ft_jmp_buf jmp_buf /* note: this cannot be a typedef since */
- /* jmp_buf is defined as a macro */
- /* on certain platforms */
-
-#define ft_longjmp longjmp
-#define ft_setjmp( b ) setjmp( *(ft_jmp_buf*) &(b) ) /* same thing here */
-
-
- /* the following is only used for debugging purposes, i.e., if */
- /* FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined */
-
-#include <stdarg.h>
-
-
-#endif /* FTSTDLIB_H_ */
-
-
-/* END */
diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h
deleted file mode 100644
index bb59d0901..000000000
--- a/include/freetype/freetype.h
+++ /dev/null
@@ -1,4549 +0,0 @@
-/***************************************************************************/
-/* */
-/* freetype.h */
-/* */
-/* FreeType high-level API and common types (specification only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FREETYPE_H_
-#define FREETYPE_H_
-
-
-#ifndef FT_FREETYPE_H
-#error "`ft2build.h' hasn't been included yet!"
-#error "Please always use macros to include FreeType header files."
-#error "Example:"
-#error " #include <ft2build.h>"
-#error " #include FT_FREETYPE_H"
-#endif
-
-
-#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H
-#include FT_TYPES_H
-#include FT_ERRORS_H
-
-
-FT_BEGIN_HEADER
-
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* header_inclusion */
- /* */
- /* <Title> */
- /* FreeType's header inclusion scheme */
- /* */
- /* <Abstract> */
- /* How client applications should include FreeType header files. */
- /* */
- /* <Description> */
- /* To be as flexible as possible (and for historical reasons), */
- /* FreeType uses a very special inclusion scheme to load header */
- /* files, for example */
- /* */
- /* { */
- /* #include <ft2build.h> */
- /* */
- /* #include FT_FREETYPE_H */
- /* #include FT_OUTLINE_H */
- /* } */
- /* */
- /* A compiler and its preprocessor only needs an include path to find */
- /* the file `ft2build.h'; the exact locations and names of the other */
- /* FreeType header files are hidden by preprocessor macro names, */
- /* loaded by `ft2build.h'. The API documentation always gives the */
- /* header macro name needed for a particular function. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* user_allocation */
- /* */
- /* <Title> */
- /* User allocation */
- /* */
- /* <Abstract> */
- /* How client applications should allocate FreeType data structures. */
- /* */
- /* <Description> */
- /* FreeType assumes that structures allocated by the user and passed */
- /* as arguments are zeroed out except for the actual data. In other */
- /* words, it is recommended to use `calloc' (or variants of it) */
- /* instead of `malloc' for allocation. */
- /* */
- /*************************************************************************/
-
-
-
- /*************************************************************************/
- /*************************************************************************/
- /* */
- /* B A S I C T Y P E S */
- /* */
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* base_interface */
- /* */
- /* <Title> */
- /* Base Interface */
- /* */
- /* <Abstract> */
- /* The FreeType~2 base font interface. */
- /* */
- /* <Description> */
- /* This section describes the most important public high-level API */
- /* functions of FreeType~2. */
- /* */
- /* <Order> */
- /* FT_Library */
- /* FT_Face */
- /* FT_Size */
- /* FT_GlyphSlot */
- /* FT_CharMap */
- /* FT_Encoding */
- /* FT_ENC_TAG */
- /* */
- /* FT_FaceRec */
- /* */
- /* FT_FACE_FLAG_SCALABLE */
- /* FT_FACE_FLAG_FIXED_SIZES */
- /* FT_FACE_FLAG_FIXED_WIDTH */
- /* FT_FACE_FLAG_HORIZONTAL */
- /* FT_FACE_FLAG_VERTICAL */
- /* FT_FACE_FLAG_COLOR */
- /* FT_FACE_FLAG_SFNT */
- /* FT_FACE_FLAG_CID_KEYED */
- /* FT_FACE_FLAG_TRICKY */
- /* FT_FACE_FLAG_KERNING */
- /* FT_FACE_FLAG_MULTIPLE_MASTERS */
- /* FT_FACE_FLAG_GLYPH_NAMES */
- /* FT_FACE_FLAG_EXTERNAL_STREAM */
- /* FT_FACE_FLAG_HINTER */
- /* */
- /* FT_HAS_HORIZONTAL */
- /* FT_HAS_VERTICAL */
- /* FT_HAS_KERNING */
- /* FT_HAS_FIXED_SIZES */
- /* FT_HAS_GLYPH_NAMES */
- /* FT_HAS_MULTIPLE_MASTERS */
- /* FT_HAS_COLOR */
- /* */
- /* FT_IS_SFNT */
- /* FT_IS_SCALABLE */
- /* FT_IS_FIXED_WIDTH */
- /* FT_IS_CID_KEYED */
- /* FT_IS_TRICKY */
- /* */
- /* FT_STYLE_FLAG_BOLD */
- /* FT_STYLE_FLAG_ITALIC */
- /* */
- /* FT_SizeRec */
- /* FT_Size_Metrics */
- /* */
- /* FT_GlyphSlotRec */
- /* FT_Glyph_Metrics */
- /* FT_SubGlyph */
- /* */
- /* FT_Bitmap_Size */
- /* */
- /* FT_Init_FreeType */
- /* FT_Done_FreeType */
- /* */
- /* FT_New_Face */
- /* FT_Done_Face */
- /* FT_Reference_Face */
- /* FT_New_Memory_Face */
- /* FT_Face_Properties */
- /* FT_Open_Face */
- /* FT_Open_Args */
- /* FT_Parameter */
- /* FT_Attach_File */
- /* FT_Attach_Stream */
- /* */
- /* FT_Set_Char_Size */
- /* FT_Set_Pixel_Sizes */
- /* FT_Request_Size */
- /* FT_Select_Size */
- /* FT_Size_Request_Type */
- /* FT_Size_RequestRec */
- /* FT_Size_Request */
- /* FT_Set_Transform */
- /* FT_Load_Glyph */
- /* FT_Get_Char_Index */
- /* FT_Get_First_Char */
- /* FT_Get_Next_Char */
- /* FT_Get_Name_Index */
- /* FT_Load_Char */
- /* */
- /* FT_OPEN_MEMORY */
- /* FT_OPEN_STREAM */
- /* FT_OPEN_PATHNAME */
- /* FT_OPEN_DRIVER */
- /* FT_OPEN_PARAMS */
- /* */
- /* FT_LOAD_DEFAULT */
- /* FT_LOAD_RENDER */
- /* FT_LOAD_MONOCHROME */
- /* FT_LOAD_LINEAR_DESIGN */
- /* FT_LOAD_NO_SCALE */
- /* FT_LOAD_NO_HINTING */
- /* FT_LOAD_NO_BITMAP */
- /* FT_LOAD_NO_AUTOHINT */
- /* FT_LOAD_COLOR */
- /* */
- /* FT_LOAD_VERTICAL_LAYOUT */
- /* FT_LOAD_IGNORE_TRANSFORM */
- /* FT_LOAD_FORCE_AUTOHINT */
- /* FT_LOAD_NO_RECURSE */
- /* FT_LOAD_PEDANTIC */
- /* */
- /* FT_LOAD_TARGET_NORMAL */
- /* FT_LOAD_TARGET_LIGHT */
- /* FT_LOAD_TARGET_MONO */
- /* FT_LOAD_TARGET_LCD */
- /* FT_LOAD_TARGET_LCD_V */
- /* */
- /* FT_LOAD_TARGET_MODE */
- /* */
- /* FT_Render_Glyph */
- /* FT_Render_Mode */
- /* FT_Get_Kerning */
- /* FT_Kerning_Mode */
- /* FT_Get_Track_Kerning */
- /* FT_Get_Glyph_Name */
- /* FT_Get_Postscript_Name */
- /* */
- /* FT_CharMapRec */
- /* FT_Select_Charmap */
- /* FT_Set_Charmap */
- /* FT_Get_Charmap_Index */
- /* */
- /* FT_Get_FSType_Flags */
- /* FT_Get_SubGlyph_Info */
- /* */
- /* FT_Face_Internal */
- /* FT_Size_Internal */
- /* FT_Slot_Internal */
- /* */
- /* FT_FACE_FLAG_XXX */
- /* FT_STYLE_FLAG_XXX */
- /* FT_OPEN_XXX */
- /* FT_LOAD_XXX */
- /* FT_LOAD_TARGET_XXX */
- /* FT_SUBGLYPH_FLAG_XXX */
- /* FT_FSTYPE_XXX */
- /* */
- /* FT_HAS_FAST_GLYPHS */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Glyph_Metrics */
- /* */
- /* <Description> */
- /* A structure to model the metrics of a single glyph. The values */
- /* are expressed in 26.6 fractional pixel format; if the flag */
- /* @FT_LOAD_NO_SCALE has been used while loading the glyph, values */
- /* are expressed in font units instead. */
- /* */
- /* <Fields> */
- /* width :: */
- /* The glyph's width. */
- /* */
- /* height :: */
- /* The glyph's height. */
- /* */
- /* horiBearingX :: */
- /* Left side bearing for horizontal layout. */
- /* */
- /* horiBearingY :: */
- /* Top side bearing for horizontal layout. */
- /* */
- /* horiAdvance :: */
- /* Advance width for horizontal layout. */
- /* */
- /* vertBearingX :: */
- /* Left side bearing for vertical layout. */
- /* */
- /* vertBearingY :: */
- /* Top side bearing for vertical layout. Larger positive values */
- /* mean further below the vertical glyph origin. */
- /* */
- /* vertAdvance :: */
- /* Advance height for vertical layout. Positive values mean the */
- /* glyph has a positive advance downward. */
- /* */
- /* <Note> */
- /* If not disabled with @FT_LOAD_NO_HINTING, the values represent */
- /* dimensions of the hinted glyph (in case hinting is applicable). */
- /* */
- /* Stroking a glyph with an outside border does not increase */
- /* `horiAdvance' or `vertAdvance'; you have to manually adjust these */
- /* values to account for the added width and height. */
- /* */
- /* FreeType doesn't use the `VORG' table data for CFF fonts because */
- /* it doesn't have an interface to quickly retrieve the glyph height. */
- /* The y~coordinate of the vertical origin can be simply computed as */
- /* `vertBearingY + height' after loading a glyph. */
- /* */
- typedef struct FT_Glyph_Metrics_
- {
- FT_Pos width;
- FT_Pos height;
-
- FT_Pos horiBearingX;
- FT_Pos horiBearingY;
- FT_Pos horiAdvance;
-
- FT_Pos vertBearingX;
- FT_Pos vertBearingY;
- FT_Pos vertAdvance;
-
- } FT_Glyph_Metrics;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Bitmap_Size */
- /* */
- /* <Description> */
- /* This structure models the metrics of a bitmap strike (i.e., a set */
- /* of glyphs for a given point size and resolution) in a bitmap font. */
- /* It is used for the `available_sizes' field of @FT_Face. */
- /* */
- /* <Fields> */
- /* height :: The vertical distance, in pixels, between two */
- /* consecutive baselines. It is always positive. */
- /* */
- /* width :: The average width, in pixels, of all glyphs in the */
- /* strike. */
- /* */
- /* size :: The nominal size of the strike in 26.6 fractional */
- /* points. This field is not very useful. */
- /* */
- /* x_ppem :: The horizontal ppem (nominal width) in 26.6 fractional */
- /* pixels. */
- /* */
- /* y_ppem :: The vertical ppem (nominal height) in 26.6 fractional */
- /* pixels. */
- /* */
- /* <Note> */
- /* Windows FNT: */
- /* The nominal size given in a FNT font is not reliable. If the */
- /* driver finds it incorrect, it sets `size' to some calculated */
- /* values, and `x_ppem' and `y_ppem' to the pixel width and height */
- /* given in the font, respectively. */
- /* */
- /* TrueType embedded bitmaps: */
- /* `size', `width', and `height' values are not contained in the */
- /* bitmap strike itself. They are computed from the global font */
- /* parameters. */
- /* */
- typedef struct FT_Bitmap_Size_
- {
- FT_Short height;
- FT_Short width;
-
- FT_Pos size;
-
- FT_Pos x_ppem;
- FT_Pos y_ppem;
-
- } FT_Bitmap_Size;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /* */
- /* O B J E C T C L A S S E S */
- /* */
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Library */
- /* */
- /* <Description> */
- /* A handle to a FreeType library instance. Each `library' is */
- /* completely independent from the others; it is the `root' of a set */
- /* of objects like fonts, faces, sizes, etc. */
- /* */
- /* It also embeds a memory manager (see @FT_Memory), as well as a */
- /* scan-line converter object (see @FT_Raster). */
- /* */
- /* In multi-threaded applications it is easiest to use one */
- /* `FT_Library' object per thread. In case this is too cumbersome, */
- /* a single `FT_Library' object across threads is possible also */
- /* (since FreeType version 2.5.6), as long as a mutex lock is used */
- /* around @FT_New_Face and @FT_Done_Face. */
- /* */
- /* <Note> */
- /* Library objects are normally created by @FT_Init_FreeType, and */
- /* destroyed with @FT_Done_FreeType. If you need reference-counting */
- /* (cf. @FT_Reference_Library), use @FT_New_Library and */
- /* @FT_Done_Library. */
- /* */
- typedef struct FT_LibraryRec_ *FT_Library;
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* module_management */
- /* */
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Module */
- /* */
- /* <Description> */
- /* A handle to a given FreeType module object. A module can be a */
- /* font driver, a renderer, or anything else that provides services */
- /* to the former. */
- /* */
- typedef struct FT_ModuleRec_* FT_Module;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Driver */
- /* */
- /* <Description> */
- /* A handle to a given FreeType font driver object. A font driver */
- /* is a module capable of creating faces from font files. */
- /* */
- typedef struct FT_DriverRec_* FT_Driver;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Renderer */
- /* */
- /* <Description> */
- /* A handle to a given FreeType renderer. A renderer is a module in */
- /* charge of converting a glyph's outline image to a bitmap. It */
- /* supports a single glyph image format, and one or more target */
- /* surface depths. */
- /* */
- typedef struct FT_RendererRec_* FT_Renderer;
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* base_interface */
- /* */
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Face */
- /* */
- /* <Description> */
- /* A handle to a typographic face object. A face object models a */
- /* given typeface, in a given style. */
- /* */
- /* <Note> */
- /* A face object also owns a single @FT_GlyphSlot object, as well */
- /* as one or more @FT_Size objects. */
- /* */
- /* Use @FT_New_Face or @FT_Open_Face to create a new face object from */
- /* a given filepath or a custom input stream. */
- /* */
- /* Use @FT_Done_Face to destroy it (along with its slot and sizes). */
- /* */
- /* An `FT_Face' object can only be safely used from one thread at a */
- /* time. Similarly, creation and destruction of `FT_Face' with the */
- /* same @FT_Library object can only be done from one thread at a */
- /* time. On the other hand, functions like @FT_Load_Glyph and its */
- /* siblings are thread-safe and do not need the lock to be held as */
- /* long as the same `FT_Face' object is not used from multiple */
- /* threads at the same time. */
- /* */
- /* <Also> */
- /* See @FT_FaceRec for the publicly accessible fields of a given face */
- /* object. */
- /* */
- typedef struct FT_FaceRec_* FT_Face;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Size */
- /* */
- /* <Description> */
- /* A handle to an object that models a face scaled to a given */
- /* character size. */
- /* */
- /* <Note> */
- /* An @FT_Face has one _active_ @FT_Size object that is used by */
- /* functions like @FT_Load_Glyph to determine the scaling */
- /* transformation that in turn is used to load and hint glyphs and */
- /* metrics. */
- /* */
- /* You can use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, */
- /* @FT_Request_Size or even @FT_Select_Size to change the content */
- /* (i.e., the scaling values) of the active @FT_Size. */
- /* */
- /* You can use @FT_New_Size to create additional size objects for a */
- /* given @FT_Face, but they won't be used by other functions until */
- /* you activate it through @FT_Activate_Size. Only one size can be */
- /* activated at any given time per face. */
- /* */
- /* <Also> */
- /* See @FT_SizeRec for the publicly accessible fields of a given size */
- /* object. */
- /* */
- typedef struct FT_SizeRec_* FT_Size;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_GlyphSlot */
- /* */
- /* <Description> */
- /* A handle to a given `glyph slot'. A slot is a container that can */
- /* hold any of the glyphs contained in its parent face. */
- /* */
- /* In other words, each time you call @FT_Load_Glyph or */
- /* @FT_Load_Char, the slot's content is erased by the new glyph data, */
- /* i.e., the glyph's metrics, its image (bitmap or outline), and */
- /* other control information. */
- /* */
- /* <Also> */
- /* See @FT_GlyphSlotRec for the publicly accessible glyph fields. */
- /* */
- typedef struct FT_GlyphSlotRec_* FT_GlyphSlot;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_CharMap */
- /* */
- /* <Description> */
- /* A handle to a character map (usually abbreviated to `charmap'). A */
- /* charmap is used to translate character codes in a given encoding */
- /* into glyph indexes for its parent's face. Some font formats may */
- /* provide several charmaps per font. */
- /* */
- /* Each face object owns zero or more charmaps, but only one of them */
- /* can be `active', providing the data used by @FT_Get_Char_Index or */
- /* @FT_Load_Char. */
- /* */
- /* The list of available charmaps in a face is available through the */
- /* `face->num_charmaps' and `face->charmaps' fields of @FT_FaceRec. */
- /* */
- /* The currently active charmap is available as `face->charmap'. */
- /* You should call @FT_Set_Charmap to change it. */
- /* */
- /* <Note> */
- /* When a new face is created (either through @FT_New_Face or */
- /* @FT_Open_Face), the library looks for a Unicode charmap within */
- /* the list and automatically activates it. If there is no Unicode */
- /* charmap, FreeType doesn't set an `active' charmap. */
- /* */
- /* <Also> */
- /* See @FT_CharMapRec for the publicly accessible fields of a given */
- /* character map. */
- /* */
- typedef struct FT_CharMapRec_* FT_CharMap;
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_ENC_TAG */
- /* */
- /* <Description> */
- /* This macro converts four-letter tags into an unsigned long. It is */
- /* used to define `encoding' identifiers (see @FT_Encoding). */
- /* */
- /* <Note> */
- /* Since many 16-bit compilers don't like 32-bit enumerations, you */
- /* should redefine this macro in case of problems to something like */
- /* this: */
- /* */
- /* { */
- /* #define FT_ENC_TAG( value, a, b, c, d ) value */
- /* } */
- /* */
- /* to get a simple enumeration without assigning special numbers. */
- /* */
-
-#ifndef FT_ENC_TAG
-#define FT_ENC_TAG( value, a, b, c, d ) \
- value = ( ( (FT_UInt32)(a) << 24 ) | \
- ( (FT_UInt32)(b) << 16 ) | \
- ( (FT_UInt32)(c) << 8 ) | \
- (FT_UInt32)(d) )
-
-#endif /* FT_ENC_TAG */
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Encoding */
- /* */
- /* <Description> */
- /* An enumeration to specify character sets supported by charmaps. */
- /* Used in the @FT_Select_Charmap API function. */
- /* */
- /* <Note> */
- /* Despite the name, this enumeration lists specific character */
- /* repertories (i.e., charsets), and not text encoding methods (e.g., */
- /* UTF-8, UTF-16, etc.). */
- /* */
- /* Other encodings might be defined in the future. */
- /* */
- /* <Values> */
- /* FT_ENCODING_NONE :: */
- /* The encoding value~0 is reserved. */
- /* */
- /* FT_ENCODING_UNICODE :: */
- /* The Unicode character set. This value covers all versions of */
- /* the Unicode repertoire, including ASCII and Latin-1. Most fonts */
- /* include a Unicode charmap, but not all of them. */
- /* */
- /* For example, if you want to access Unicode value U+1F028 (and */
- /* the font contains it), use value 0x1F028 as the input value for */
- /* @FT_Get_Char_Index. */
- /* */
- /* FT_ENCODING_MS_SYMBOL :: */
- /* Microsoft Symbol encoding, used to encode mathematical symbols */
- /* and wingdings. For more information, see */
- /* `http://www.microsoft.com/typography/otspec/recom.htm', */
- /* `http://www.kostis.net/charsets/symbol.htm', and */
- /* `http://www.kostis.net/charsets/wingding.htm'. */
- /* */
- /* This encoding uses character codes from the PUA (Private Unicode */
- /* Area) in the range U+F020-U+F0FF. */
- /* */
- /* FT_ENCODING_SJIS :: */
- /* Shift JIS encoding for Japanese. More info at */
- /* `http://en.wikipedia.org/wiki/Shift_JIS'. See note on */
- /* multi-byte encodings below. */
- /* */
- /* FT_ENCODING_PRC :: */
- /* Corresponds to encoding systems mainly for Simplified Chinese as */
- /* used in People's Republic of China (PRC). The encoding layout */
- /* is based on GB~2312 and its supersets GBK and GB~18030. */
- /* */
- /* FT_ENCODING_BIG5 :: */
- /* Corresponds to an encoding system for Traditional Chinese as */
- /* used in Taiwan and Hong Kong. */
- /* */
- /* FT_ENCODING_WANSUNG :: */
- /* Corresponds to the Korean encoding system known as Extended */
- /* Wansung (MS Windows code page 949). */
- /* For more information see */
- /* `http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit949.txt'. */
- /* */
- /* FT_ENCODING_JOHAB :: */
- /* The Korean standard character set (KS~C 5601-1992), which */
- /* corresponds to MS Windows code page 1361. This character set */
- /* includes all possible Hangul character combinations. */
- /* */
- /* FT_ENCODING_ADOBE_LATIN_1 :: */
- /* Corresponds to a Latin-1 encoding as defined in a Type~1 */
- /* PostScript font. It is limited to 256 character codes. */
- /* */
- /* FT_ENCODING_ADOBE_STANDARD :: */
- /* Adobe Standard encoding, as found in Type~1, CFF, and */
- /* OpenType/CFF fonts. It is limited to 256 character codes. */
- /* */
- /* FT_ENCODING_ADOBE_EXPERT :: */
- /* Adobe Expert encoding, as found in Type~1, CFF, and OpenType/CFF */
- /* fonts. It is limited to 256 character codes. */
- /* */
- /* FT_ENCODING_ADOBE_CUSTOM :: */
- /* Corresponds to a custom encoding, as found in Type~1, CFF, and */
- /* OpenType/CFF fonts. It is limited to 256 character codes. */
- /* */
- /* FT_ENCODING_APPLE_ROMAN :: */
- /* Apple roman encoding. Many TrueType and OpenType fonts contain */
- /* a charmap for this 8-bit encoding, since older versions of Mac */
- /* OS are able to use it. */
- /* */
- /* FT_ENCODING_OLD_LATIN_2 :: */
- /* This value is deprecated and was neither used nor reported by */
- /* FreeType. Don't use or test for it. */
- /* */
- /* FT_ENCODING_MS_SJIS :: */
- /* Same as FT_ENCODING_SJIS. Deprecated. */
- /* */
- /* FT_ENCODING_MS_GB2312 :: */
- /* Same as FT_ENCODING_PRC. Deprecated. */
- /* */
- /* FT_ENCODING_MS_BIG5 :: */
- /* Same as FT_ENCODING_BIG5. Deprecated. */
- /* */
- /* FT_ENCODING_MS_WANSUNG :: */
- /* Same as FT_ENCODING_WANSUNG. Deprecated. */
- /* */
- /* FT_ENCODING_MS_JOHAB :: */
- /* Same as FT_ENCODING_JOHAB. Deprecated. */
- /* */
- /* <Note> */
- /* By default, FreeType automatically synthesizes a Unicode charmap */
- /* for PostScript fonts, using their glyph name dictionaries. */
- /* However, it also reports the encodings defined explicitly in the */
- /* font file, for the cases when they are needed, with the Adobe */
- /* values as well. */
- /* */
- /* FT_ENCODING_NONE is set by the BDF and PCF drivers if the charmap */
- /* is neither Unicode nor ISO-8859-1 (otherwise it is set to */
- /* FT_ENCODING_UNICODE). Use @FT_Get_BDF_Charset_ID to find out */
- /* which encoding is really present. If, for example, the */
- /* `cs_registry' field is `KOI8' and the `cs_encoding' field is `R', */
- /* the font is encoded in KOI8-R. */
- /* */
- /* FT_ENCODING_NONE is always set (with a single exception) by the */
- /* winfonts driver. Use @FT_Get_WinFNT_Header and examine the */
- /* `charset' field of the @FT_WinFNT_HeaderRec structure to find out */
- /* which encoding is really present. For example, */
- /* @FT_WinFNT_ID_CP1251 (204) means Windows code page 1251 (for */
- /* Russian). */
- /* */
- /* FT_ENCODING_NONE is set if `platform_id' is @TT_PLATFORM_MACINTOSH */
- /* and `encoding_id' is not `TT_MAC_ID_ROMAN' (otherwise it is set to */
- /* FT_ENCODING_APPLE_ROMAN). */
- /* */
- /* If `platform_id' is @TT_PLATFORM_MACINTOSH, use the function */
- /* @FT_Get_CMap_Language_ID to query the Mac language ID that may */
- /* be needed to be able to distinguish Apple encoding variants. See */
- /* */
- /* http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt */
- /* */
- /* to get an idea how to do that. Basically, if the language ID */
- /* is~0, don't use it, otherwise subtract 1 from the language ID. */
- /* Then examine `encoding_id'. If, for example, `encoding_id' is */
- /* `TT_MAC_ID_ROMAN' and the language ID (minus~1) is */
- /* `TT_MAC_LANGID_GREEK', it is the Greek encoding, not Roman. */
- /* `TT_MAC_ID_ARABIC' with `TT_MAC_LANGID_FARSI' means the Farsi */
- /* variant the Arabic encoding. */
- /* */
- typedef enum FT_Encoding_
- {
- FT_ENC_TAG( FT_ENCODING_NONE, 0, 0, 0, 0 ),
-
- FT_ENC_TAG( FT_ENCODING_MS_SYMBOL, 's', 'y', 'm', 'b' ),
- FT_ENC_TAG( FT_ENCODING_UNICODE, 'u', 'n', 'i', 'c' ),
-
- FT_ENC_TAG( FT_ENCODING_SJIS, 's', 'j', 'i', 's' ),
- FT_ENC_TAG( FT_ENCODING_PRC, 'g', 'b', ' ', ' ' ),
- FT_ENC_TAG( FT_ENCODING_BIG5, 'b', 'i', 'g', '5' ),
- FT_ENC_TAG( FT_ENCODING_WANSUNG, 'w', 'a', 'n', 's' ),
- FT_ENC_TAG( FT_ENCODING_JOHAB, 'j', 'o', 'h', 'a' ),
-
- /* for backward compatibility */
- FT_ENCODING_GB2312 = FT_ENCODING_PRC,
- FT_ENCODING_MS_SJIS = FT_ENCODING_SJIS,
- FT_ENCODING_MS_GB2312 = FT_ENCODING_PRC,
- FT_ENCODING_MS_BIG5 = FT_ENCODING_BIG5,
- FT_ENCODING_MS_WANSUNG = FT_ENCODING_WANSUNG,
- FT_ENCODING_MS_JOHAB = FT_ENCODING_JOHAB,
-
- FT_ENC_TAG( FT_ENCODING_ADOBE_STANDARD, 'A', 'D', 'O', 'B' ),
- FT_ENC_TAG( FT_ENCODING_ADOBE_EXPERT, 'A', 'D', 'B', 'E' ),
- FT_ENC_TAG( FT_ENCODING_ADOBE_CUSTOM, 'A', 'D', 'B', 'C' ),
- FT_ENC_TAG( FT_ENCODING_ADOBE_LATIN_1, 'l', 'a', 't', '1' ),
-
- FT_ENC_TAG( FT_ENCODING_OLD_LATIN_2, 'l', 'a', 't', '2' ),
-
- FT_ENC_TAG( FT_ENCODING_APPLE_ROMAN, 'a', 'r', 'm', 'n' )
-
- } FT_Encoding;
-
-
- /* these constants are deprecated; use the corresponding `FT_Encoding' */
- /* values instead */
-#define ft_encoding_none FT_ENCODING_NONE
-#define ft_encoding_unicode FT_ENCODING_UNICODE
-#define ft_encoding_symbol FT_ENCODING_MS_SYMBOL
-#define ft_encoding_latin_1 FT_ENCODING_ADOBE_LATIN_1
-#define ft_encoding_latin_2 FT_ENCODING_OLD_LATIN_2
-#define ft_encoding_sjis FT_ENCODING_SJIS
-#define ft_encoding_gb2312 FT_ENCODING_PRC
-#define ft_encoding_big5 FT_ENCODING_BIG5
-#define ft_encoding_wansung FT_ENCODING_WANSUNG
-#define ft_encoding_johab FT_ENCODING_JOHAB
-
-#define ft_encoding_adobe_standard FT_ENCODING_ADOBE_STANDARD
-#define ft_encoding_adobe_expert FT_ENCODING_ADOBE_EXPERT
-#define ft_encoding_adobe_custom FT_ENCODING_ADOBE_CUSTOM
-#define ft_encoding_apple_roman FT_ENCODING_APPLE_ROMAN
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_CharMapRec */
- /* */
- /* <Description> */
- /* The base charmap structure. */
- /* */
- /* <Fields> */
- /* face :: A handle to the parent face object. */
- /* */
- /* encoding :: An @FT_Encoding tag identifying the charmap. Use */
- /* this with @FT_Select_Charmap. */
- /* */
- /* platform_id :: An ID number describing the platform for the */
- /* following encoding ID. This comes directly from */
- /* the TrueType specification and gets emulated for */
- /* other formats. */
- /* */
- /* encoding_id :: A platform specific encoding number. This also */
- /* comes from the TrueType specification and gets */
- /* emulated similarly. */
- /* */
- typedef struct FT_CharMapRec_
- {
- FT_Face face;
- FT_Encoding encoding;
- FT_UShort platform_id;
- FT_UShort encoding_id;
-
- } FT_CharMapRec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /* */
- /* B A S E O B J E C T C L A S S E S */
- /* */
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Face_Internal */
- /* */
- /* <Description> */
- /* An opaque handle to an `FT_Face_InternalRec' structure that models */
- /* the private data of a given @FT_Face object. */
- /* */
- /* This structure might change between releases of FreeType~2 and is */
- /* not generally available to client applications. */
- /* */
- typedef struct FT_Face_InternalRec_* FT_Face_Internal;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_FaceRec */
- /* */
- /* <Description> */
- /* FreeType root face class structure. A face object models a */
- /* typeface in a font file. */
- /* */
- /* <Fields> */
- /* num_faces :: The number of faces in the font file. Some */
- /* font formats can have multiple faces in */
- /* a single font file. */
- /* */
- /* face_index :: This field holds two different values. */
- /* Bits 0-15 are the index of the face in the */
- /* font file (starting with value~0). They */
- /* are set to~0 if there is only one face in */
- /* the font file. */
- /* */
- /* Bits 16-30 are relevant to GX and OpenType */
- /* variation fonts only, holding the named */
- /* instance index for the current face index */
- /* (starting with value~1; value~0 indicates */
- /* font access without a named instance). For */
- /* non-variation fonts, bits 16-30 are */
- /* ignored. If we have the third named */
- /* instance of face~4, say, `face_index' is */
- /* set to 0x00030004. */
- /* */
- /* Bit 31 is always zero (this is, */
- /* `face_index' is always a positive value). */
- /* */
- /* face_flags :: A set of bit flags that give important */
- /* information about the face; see */
- /* @FT_FACE_FLAG_XXX for the details. */
- /* */
- /* style_flags :: The lower 16~bits contain a set of bit */
- /* flags indicating the style of the face; see */
- /* @FT_STYLE_FLAG_XXX for the details. Bits */
- /* 16-30 hold the number of named instances */
- /* available for the current face if we have a */
- /* GX or OpenType variation (sub)font. Bit 31 */
- /* is always zero (this is, `style_flags' is */
- /* always a positive value). Note that a */
- /* variation font has always at least one */
- /* named instance, namely the default */
- /* instance. */
- /* */
- /* num_glyphs :: The number of glyphs in the face. If the */
- /* face is scalable and has sbits (see */
- /* `num_fixed_sizes'), it is set to the number */
- /* of outline glyphs. */
- /* */
- /* For CID-keyed fonts (not in an SFNT */
- /* wrapper) this value gives the highest CID */
- /* used in the font. */
- /* */
- /* family_name :: The face's family name. This is an ASCII */
- /* string, usually in English, that describes */
- /* the typeface's family (like `Times New */
- /* Roman', `Bodoni', `Garamond', etc). This */
- /* is a least common denominator used to list */
- /* fonts. Some formats (TrueType & OpenType) */
- /* provide localized and Unicode versions of */
- /* this string. Applications should use the */
- /* format specific interface to access them. */
- /* Can be NULL (e.g., in fonts embedded in a */
- /* PDF file). */
- /* */
- /* In case the font doesn't provide a specific */
- /* family name entry, FreeType tries to */
- /* synthesize one, deriving it from other name */
- /* entries. */
- /* */
- /* style_name :: The face's style name. This is an ASCII */
- /* string, usually in English, that describes */
- /* the typeface's style (like `Italic', */
- /* `Bold', `Condensed', etc). Not all font */
- /* formats provide a style name, so this field */
- /* is optional, and can be set to NULL. As */
- /* for `family_name', some formats provide */
- /* localized and Unicode versions of this */
- /* string. Applications should use the format */
- /* specific interface to access them. */
- /* */
- /* num_fixed_sizes :: The number of bitmap strikes in the face. */
- /* Even if the face is scalable, there might */
- /* still be bitmap strikes, which are called */
- /* `sbits' in that case. */
- /* */
- /* available_sizes :: An array of @FT_Bitmap_Size for all bitmap */
- /* strikes in the face. It is set to NULL if */
- /* there is no bitmap strike. */
- /* */
- /* Note that FreeType tries to sanitize the */
- /* strike data since they are sometimes sloppy */
- /* or incorrect, but this can easily fail. */
- /* */
- /* num_charmaps :: The number of charmaps in the face. */
- /* */
- /* charmaps :: An array of the charmaps of the face. */
- /* */
- /* generic :: A field reserved for client uses. See the */
- /* @FT_Generic type description. */
- /* */
- /* bbox :: The font bounding box. Coordinates are */
- /* expressed in font units (see */
- /* `units_per_EM'). The box is large enough */
- /* to contain any glyph from the font. Thus, */
- /* `bbox.yMax' can be seen as the `maximum */
- /* ascender', and `bbox.yMin' as the `minimum */
- /* descender'. Only relevant for scalable */
- /* formats. */
- /* */
- /* Note that the bounding box might be off by */
- /* (at least) one pixel for hinted fonts. See */
- /* @FT_Size_Metrics for further discussion. */
- /* */
- /* units_per_EM :: The number of font units per EM square for */
- /* this face. This is typically 2048 for */
- /* TrueType fonts, and 1000 for Type~1 fonts. */
- /* Only relevant for scalable formats. */
- /* */
- /* ascender :: The typographic ascender of the face, */
- /* expressed in font units. For font formats */
- /* not having this information, it is set to */
- /* `bbox.yMax'. Only relevant for scalable */
- /* formats. */
- /* */
- /* descender :: The typographic descender of the face, */
- /* expressed in font units. For font formats */
- /* not having this information, it is set to */
- /* `bbox.yMin'. Note that this field is */
- /* negative for values below the baseline. */
- /* Only relevant for scalable formats. */
- /* */
- /* height :: This value is the vertical distance */
- /* between two consecutive baselines, */
- /* expressed in font units. It is always */
- /* positive. Only relevant for scalable */
- /* formats. */
- /* */
- /* If you want the global glyph height, use */
- /* `ascender - descender'. */
- /* */
- /* max_advance_width :: The maximum advance width, in font units, */
- /* for all glyphs in this face. This can be */
- /* used to make word wrapping computations */
- /* faster. Only relevant for scalable */
- /* formats. */
- /* */
- /* max_advance_height :: The maximum advance height, in font units, */
- /* for all glyphs in this face. This is only */
- /* relevant for vertical layouts, and is set */
- /* to `height' for fonts that do not provide */
- /* vertical metrics. Only relevant for */
- /* scalable formats. */
- /* */
- /* underline_position :: The position, in font units, of the */
- /* underline line for this face. It is the */
- /* center of the underlining stem. Only */
- /* relevant for scalable formats. */
- /* */
- /* underline_thickness :: The thickness, in font units, of the */
- /* underline for this face. Only relevant for */
- /* scalable formats. */
- /* */
- /* glyph :: The face's associated glyph slot(s). */
- /* */
- /* size :: The current active size for this face. */
- /* */
- /* charmap :: The current active charmap for this face. */
- /* */
- /* <Note> */
- /* Fields may be changed after a call to @FT_Attach_File or */
- /* @FT_Attach_Stream. */
- /* */
- /* For an OpenType variation font, the values of the following fields */
- /* can change after a call to @FT_Set_Var_Design_Coordinates (and */
- /* friends) if the font contains an `MVAR' table: `ascender', */
- /* `descender', `height', `underline_position', and */
- /* `underline_thickness'. */
- /* */
- typedef struct FT_FaceRec_
- {
- FT_Long num_faces;
- FT_Long face_index;
-
- FT_Long face_flags;
- FT_Long style_flags;
-
- FT_Long num_glyphs;
-
- FT_String* family_name;
- FT_String* style_name;
-
- FT_Int num_fixed_sizes;
- FT_Bitmap_Size* available_sizes;
-
- FT_Int num_charmaps;
- FT_CharMap* charmaps;
-
- FT_Generic generic;
-
- /*# The following member variables (down to `underline_thickness') */
- /*# are only relevant to scalable outlines; cf. @FT_Bitmap_Size */
- /*# for bitmap fonts. */
- FT_BBox bbox;
-
- FT_UShort units_per_EM;
- FT_Short ascender;
- FT_Short descender;
- FT_Short height;
-
- FT_Short max_advance_width;
- FT_Short max_advance_height;
-
- FT_Short underline_position;
- FT_Short underline_thickness;
-
- FT_GlyphSlot glyph;
- FT_Size size;
- FT_CharMap charmap;
-
- /*@private begin */
-
- FT_Driver driver;
- FT_Memory memory;
- FT_Stream stream;
-
- FT_ListRec sizes_list;
-
- FT_Generic autohint; /* face-specific auto-hinter data */
- void* extensions; /* unused */
-
- FT_Face_Internal internal;
-
- /*@private end */
-
- } FT_FaceRec;
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_FACE_FLAG_XXX */
- /* */
- /* <Description> */
- /* A list of bit flags used in the `face_flags' field of the */
- /* @FT_FaceRec structure. They inform client applications of */
- /* properties of the corresponding face. */
- /* */
- /* <Values> */
- /* FT_FACE_FLAG_SCALABLE :: */
- /* The face contains outline glyphs. Note that a face can contain */
- /* bitmap strikes also, i.e., a face can have both this flag and */
- /* @FT_FACE_FLAG_FIXED_SIZES set. */
- /* */
- /* FT_FACE_FLAG_FIXED_SIZES :: */
- /* The face contains bitmap strikes. See also the */
- /* `num_fixed_sizes' and `available_sizes' fields of @FT_FaceRec. */
- /* */
- /* FT_FACE_FLAG_FIXED_WIDTH :: */
- /* The face contains fixed-width characters (like Courier, Lucida, */
- /* MonoType, etc.). */
- /* */
- /* FT_FACE_FLAG_SFNT :: */
- /* The face uses the SFNT storage scheme. For now, this means */
- /* TrueType and OpenType. */
- /* */
- /* FT_FACE_FLAG_HORIZONTAL :: */
- /* The face contains horizontal glyph metrics. This should be set */
- /* for all common formats. */
- /* */
- /* FT_FACE_FLAG_VERTICAL :: */
- /* The face contains vertical glyph metrics. This is only */
- /* available in some formats, not all of them. */
- /* */
- /* FT_FACE_FLAG_KERNING :: */
- /* The face contains kerning information. If set, the kerning */
- /* distance can be retrieved using the function @FT_Get_Kerning. */
- /* Otherwise the function always return the vector (0,0). Note */
- /* that FreeType doesn't handle kerning data from the SFNT `GPOS' */
- /* table (as present in many OpenType fonts). */
- /* */
- /* FT_FACE_FLAG_FAST_GLYPHS :: */
- /* THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT. */
- /* */
- /* FT_FACE_FLAG_MULTIPLE_MASTERS :: */
- /* The face contains multiple masters and is capable of */
- /* interpolating between them. Supported formats are Adobe MM, */
- /* TrueType GX, and OpenType variation fonts. */
- /* */
- /* See the multiple-masters specific API for details. */
- /* */
- /* FT_FACE_FLAG_GLYPH_NAMES :: */
- /* The face contains glyph names, which can be retrieved using */
- /* @FT_Get_Glyph_Name. Note that some TrueType fonts contain */
- /* broken glyph name tables. Use the function */
- /* @FT_Has_PS_Glyph_Names when needed. */
- /* */
- /* FT_FACE_FLAG_EXTERNAL_STREAM :: */
- /* Used internally by FreeType to indicate that a face's stream was */
- /* provided by the client application and should not be destroyed */
- /* when @FT_Done_Face is called. Don't read or test this flag. */
- /* */
- /* FT_FACE_FLAG_HINTER :: */
- /* The font driver has a hinting machine of its own. For example, */
- /* with TrueType fonts, it makes sense to use data from the SFNT */
- /* `gasp' table only if the native TrueType hinting engine (with */
- /* the bytecode interpreter) is available and active. */
- /* */
- /* FT_FACE_FLAG_CID_KEYED :: */
- /* The face is CID-keyed. In that case, the face is not accessed */
- /* by glyph indices but by CID values. For subsetted CID-keyed */
- /* fonts this has the consequence that not all index values are a */
- /* valid argument to @FT_Load_Glyph. Only the CID values for which */
- /* corresponding glyphs in the subsetted font exist make */
- /* `FT_Load_Glyph' return successfully; in all other cases you get */
- /* an `FT_Err_Invalid_Argument' error. */
- /* */
- /* Note that CID-keyed fonts that are in an SFNT wrapper (this is, */
- /* all OpenType/CFF fonts) don't have this flag set since the */
- /* glyphs are accessed in the normal way (using contiguous */
- /* indices); the `CID-ness' isn't visible to the application. */
- /* */
- /* FT_FACE_FLAG_TRICKY :: */
- /* The face is `tricky', this is, it always needs the font format's */
- /* native hinting engine to get a reasonable result. A typical */
- /* example is the old Chinese font `mingli.ttf' (but not */
- /* `mingliu.ttc') that uses TrueType bytecode instructions to move */
- /* and scale all of its subglyphs. */
- /* */
- /* It is not possible to auto-hint such fonts using */
- /* @FT_LOAD_FORCE_AUTOHINT; it will also ignore */
- /* @FT_LOAD_NO_HINTING. You have to set both @FT_LOAD_NO_HINTING */
- /* and @FT_LOAD_NO_AUTOHINT to really disable hinting; however, you */
- /* probably never want this except for demonstration purposes. */
- /* */
- /* Currently, there are about a dozen TrueType fonts in the list of */
- /* tricky fonts; they are hard-coded in file `ttobjs.c'. */
- /* */
- /* FT_FACE_FLAG_COLOR :: */
- /* The face has color glyph tables. To access color glyphs use */
- /* @FT_LOAD_COLOR. */
- /* */
-#define FT_FACE_FLAG_SCALABLE ( 1L << 0 )
-#define FT_FACE_FLAG_FIXED_SIZES ( 1L << 1 )
-#define FT_FACE_FLAG_FIXED_WIDTH ( 1L << 2 )
-#define FT_FACE_FLAG_SFNT ( 1L << 3 )
-#define FT_FACE_FLAG_HORIZONTAL ( 1L << 4 )
-#define FT_FACE_FLAG_VERTICAL ( 1L << 5 )
-#define FT_FACE_FLAG_KERNING ( 1L << 6 )
-#define FT_FACE_FLAG_FAST_GLYPHS ( 1L << 7 )
-#define FT_FACE_FLAG_MULTIPLE_MASTERS ( 1L << 8 )
-#define FT_FACE_FLAG_GLYPH_NAMES ( 1L << 9 )
-#define FT_FACE_FLAG_EXTERNAL_STREAM ( 1L << 10 )
-#define FT_FACE_FLAG_HINTER ( 1L << 11 )
-#define FT_FACE_FLAG_CID_KEYED ( 1L << 12 )
-#define FT_FACE_FLAG_TRICKY ( 1L << 13 )
-#define FT_FACE_FLAG_COLOR ( 1L << 14 )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_HAS_HORIZONTAL( face )
- *
- * @description:
- * A macro that returns true whenever a face object contains
- * horizontal metrics (this is true for all font formats though).
- *
- * @also:
- * @FT_HAS_VERTICAL can be used to check for vertical metrics.
- *
- */
-#define FT_HAS_HORIZONTAL( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_HORIZONTAL )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_HAS_VERTICAL( face )
- *
- * @description:
- * A macro that returns true whenever a face object contains real
- * vertical metrics (and not only synthesized ones).
- *
- */
-#define FT_HAS_VERTICAL( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_VERTICAL )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_HAS_KERNING( face )
- *
- * @description:
- * A macro that returns true whenever a face object contains kerning
- * data that can be accessed with @FT_Get_Kerning.
- *
- */
-#define FT_HAS_KERNING( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_KERNING )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_IS_SCALABLE( face )
- *
- * @description:
- * A macro that returns true whenever a face object contains a scalable
- * font face (true for TrueType, Type~1, Type~42, CID, OpenType/CFF,
- * and PFR font formats).
- *
- */
-#define FT_IS_SCALABLE( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_SCALABLE )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_IS_SFNT( face )
- *
- * @description:
- * A macro that returns true whenever a face object contains a font
- * whose format is based on the SFNT storage scheme. This usually
- * means: TrueType fonts, OpenType fonts, as well as SFNT-based embedded
- * bitmap fonts.
- *
- * If this macro is true, all functions defined in @FT_SFNT_NAMES_H and
- * @FT_TRUETYPE_TABLES_H are available.
- *
- */
-#define FT_IS_SFNT( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_SFNT )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_IS_FIXED_WIDTH( face )
- *
- * @description:
- * A macro that returns true whenever a face object contains a font face
- * that contains fixed-width (or `monospace', `fixed-pitch', etc.)
- * glyphs.
- *
- */
-#define FT_IS_FIXED_WIDTH( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_HAS_FIXED_SIZES( face )
- *
- * @description:
- * A macro that returns true whenever a face object contains some
- * embedded bitmaps. See the `available_sizes' field of the
- * @FT_FaceRec structure.
- *
- */
-#define FT_HAS_FIXED_SIZES( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_FIXED_SIZES )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_HAS_FAST_GLYPHS( face )
- *
- * @description:
- * Deprecated.
- *
- */
-#define FT_HAS_FAST_GLYPHS( face ) 0
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_HAS_GLYPH_NAMES( face )
- *
- * @description:
- * A macro that returns true whenever a face object contains some glyph
- * names that can be accessed through @FT_Get_Glyph_Name.
- *
- */
-#define FT_HAS_GLYPH_NAMES( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_HAS_MULTIPLE_MASTERS( face )
- *
- * @description:
- * A macro that returns true whenever a face object contains some
- * multiple masters. The functions provided by @FT_MULTIPLE_MASTERS_H
- * are then available to choose the exact design you want.
- *
- */
-#define FT_HAS_MULTIPLE_MASTERS( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_IS_NAMED_INSTANCE( face )
- *
- * @description:
- * A macro that returns true whenever a face object is a named instance
- * of a GX or OpenType variation font.
- *
- */
-#define FT_IS_NAMED_INSTANCE( face ) \
- ( (face)->face_index & 0x7FFF0000L )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_IS_CID_KEYED( face )
- *
- * @description:
- * A macro that returns true whenever a face object contains a CID-keyed
- * font. See the discussion of @FT_FACE_FLAG_CID_KEYED for more
- * details.
- *
- * If this macro is true, all functions defined in @FT_CID_H are
- * available.
- *
- */
-#define FT_IS_CID_KEYED( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_CID_KEYED )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_IS_TRICKY( face )
- *
- * @description:
- * A macro that returns true whenever a face represents a `tricky' font.
- * See the discussion of @FT_FACE_FLAG_TRICKY for more details.
- *
- */
-#define FT_IS_TRICKY( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_TRICKY )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_HAS_COLOR( face )
- *
- * @description:
- * A macro that returns true whenever a face object contains
- * tables for color glyphs.
- *
- */
-#define FT_HAS_COLOR( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_COLOR )
-
-
- /*************************************************************************/
- /* */
- /* <Const> */
- /* FT_STYLE_FLAG_XXX */
- /* */
- /* <Description> */
- /* A list of bit flags to indicate the style of a given face. These */
- /* are used in the `style_flags' field of @FT_FaceRec. */
- /* */
- /* <Values> */
- /* FT_STYLE_FLAG_ITALIC :: */
- /* The face style is italic or oblique. */
- /* */
- /* FT_STYLE_FLAG_BOLD :: */
- /* The face is bold. */
- /* */
- /* <Note> */
- /* The style information as provided by FreeType is very basic. More */
- /* details are beyond the scope and should be done on a higher level */
- /* (for example, by analyzing various fields of the `OS/2' table in */
- /* SFNT based fonts). */
- /* */
-#define FT_STYLE_FLAG_ITALIC ( 1 << 0 )
-#define FT_STYLE_FLAG_BOLD ( 1 << 1 )
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Size_Internal */
- /* */
- /* <Description> */
- /* An opaque handle to an `FT_Size_InternalRec' structure, used to */
- /* model private data of a given @FT_Size object. */
- /* */
- typedef struct FT_Size_InternalRec_* FT_Size_Internal;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Size_Metrics */
- /* */
- /* <Description> */
- /* The size metrics structure gives the metrics of a size object. */
- /* */
- /* <Fields> */
- /* x_ppem :: The width of the scaled EM square in pixels, hence */
- /* the term `ppem' (pixels per EM). It is also */
- /* referred to as `nominal width'. */
- /* */
- /* y_ppem :: The height of the scaled EM square in pixels, */
- /* hence the term `ppem' (pixels per EM). It is also */
- /* referred to as `nominal height'. */
- /* */
- /* x_scale :: A 16.16 fractional scaling value to convert */
- /* horizontal metrics from font units to 26.6 */
- /* fractional pixels. Only relevant for scalable */
- /* font formats. */
- /* */
- /* y_scale :: A 16.16 fractional scaling value to convert */
- /* vertical metrics from font units to 26.6 */
- /* fractional pixels. Only relevant for scalable */
- /* font formats. */
- /* */
- /* ascender :: The ascender in 26.6 fractional pixels, rounded up */
- /* to an integer value. See @FT_FaceRec for the */
- /* details. */
- /* */
- /* descender :: The descender in 26.6 fractional pixels, rounded */
- /* down to an integer value. See @FT_FaceRec for the */
- /* details. */
- /* */
- /* height :: The height in 26.6 fractional pixels, rounded to */
- /* an integer value. See @FT_FaceRec for the */
- /* details. */
- /* */
- /* max_advance :: The maximum advance width in 26.6 fractional */
- /* pixels, rounded to an integer value. See */
- /* @FT_FaceRec for the details. */
- /* */
- /* <Note> */
- /* The scaling values, if relevant, are determined first during a */
- /* size changing operation. The remaining fields are then set by the */
- /* driver. For scalable formats, they are usually set to scaled */
- /* values of the corresponding fields in @FT_FaceRec. Some values */
- /* like ascender or descender are rounded for historical reasons; */
- /* more precise values (for outline fonts) can be derived by scaling */
- /* the corresponding @FT_FaceRec values manually. */
- /* */
- /* Note that due to glyph hinting and the selected rendering mode */
- /* these values are usually not exact; consequently, they must be */
- /* treated as unreliable with an error margin of at least one pixel! */
- /* */
- /* Indeed, the only way to get the exact metrics is to render _all_ */
- /* glyphs. As this would be a definite performance hit, it is up to */
- /* client applications to perform such computations. */
- /* */
- /* The `FT_Size_Metrics' structure is valid for bitmap fonts also. */
- /* */
- typedef struct FT_Size_Metrics_
- {
- FT_UShort x_ppem; /* horizontal pixels per EM */
- FT_UShort y_ppem; /* vertical pixels per EM */
-
- FT_Fixed x_scale; /* scaling values used to convert font */
- FT_Fixed y_scale; /* units to 26.6 fractional pixels */
-
- FT_Pos ascender; /* ascender in 26.6 frac. pixels */
- FT_Pos descender; /* descender in 26.6 frac. pixels */
- FT_Pos height; /* text height in 26.6 frac. pixels */
- FT_Pos max_advance; /* max horizontal advance, in 26.6 pixels */
-
- } FT_Size_Metrics;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_SizeRec */
- /* */
- /* <Description> */
- /* FreeType root size class structure. A size object models a face */
- /* object at a given size. */
- /* */
- /* <Fields> */
- /* face :: Handle to the parent face object. */
- /* */
- /* generic :: A typeless pointer, unused by the FreeType library or */
- /* any of its drivers. It can be used by client */
- /* applications to link their own data to each size */
- /* object. */
- /* */
- /* metrics :: Metrics for this size object. This field is read-only. */
- /* */
- typedef struct FT_SizeRec_
- {
- FT_Face face; /* parent face object */
- FT_Generic generic; /* generic pointer for client uses */
- FT_Size_Metrics metrics; /* size metrics */
- FT_Size_Internal internal;
-
- } FT_SizeRec;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_SubGlyph */
- /* */
- /* <Description> */
- /* The subglyph structure is an internal object used to describe */
- /* subglyphs (for example, in the case of composites). */
- /* */
- /* <Note> */
- /* The subglyph implementation is not part of the high-level API, */
- /* hence the forward structure declaration. */
- /* */
- /* You can however retrieve subglyph information with */
- /* @FT_Get_SubGlyph_Info. */
- /* */
- typedef struct FT_SubGlyphRec_* FT_SubGlyph;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Slot_Internal */
- /* */
- /* <Description> */
- /* An opaque handle to an `FT_Slot_InternalRec' structure, used to */
- /* model private data of a given @FT_GlyphSlot object. */
- /* */
- typedef struct FT_Slot_InternalRec_* FT_Slot_Internal;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_GlyphSlotRec */
- /* */
- /* <Description> */
- /* FreeType root glyph slot class structure. A glyph slot is a */
- /* container where individual glyphs can be loaded, be they in */
- /* outline or bitmap format. */
- /* */
- /* <Fields> */
- /* library :: A handle to the FreeType library instance */
- /* this slot belongs to. */
- /* */
- /* face :: A handle to the parent face object. */
- /* */
- /* next :: In some cases (like some font tools), several */
- /* glyph slots per face object can be a good */
- /* thing. As this is rare, the glyph slots are */
- /* listed through a direct, single-linked list */
- /* using its `next' field. */
- /* */
- /* generic :: A typeless pointer unused by the FreeType */
- /* library or any of its drivers. It can be */
- /* used by client applications to link their own */
- /* data to each glyph slot object. */
- /* */
- /* metrics :: The metrics of the last loaded glyph in the */
- /* slot. The returned values depend on the last */
- /* load flags (see the @FT_Load_Glyph API */
- /* function) and can be expressed either in 26.6 */
- /* fractional pixels or font units. */
- /* */
- /* Note that even when the glyph image is */
- /* transformed, the metrics are not. */
- /* */
- /* linearHoriAdvance :: The advance width of the unhinted glyph. */
- /* Its value is expressed in 16.16 fractional */
- /* pixels, unless @FT_LOAD_LINEAR_DESIGN is set */
- /* when loading the glyph. This field can be */
- /* important to perform correct WYSIWYG layout. */
- /* Only relevant for outline glyphs. */
- /* */
- /* linearVertAdvance :: The advance height of the unhinted glyph. */
- /* Its value is expressed in 16.16 fractional */
- /* pixels, unless @FT_LOAD_LINEAR_DESIGN is set */
- /* when loading the glyph. This field can be */
- /* important to perform correct WYSIWYG layout. */
- /* Only relevant for outline glyphs. */
- /* */
- /* advance :: This shorthand is, depending on */
- /* @FT_LOAD_IGNORE_TRANSFORM, the transformed */
- /* (hinted) advance width for the glyph, in 26.6 */
- /* fractional pixel format. As specified with */
- /* @FT_LOAD_VERTICAL_LAYOUT, it uses either the */
- /* `horiAdvance' or the `vertAdvance' value of */
- /* `metrics' field. */
- /* */
- /* format :: This field indicates the format of the image */
- /* contained in the glyph slot. Typically */
- /* @FT_GLYPH_FORMAT_BITMAP, */
- /* @FT_GLYPH_FORMAT_OUTLINE, or */
- /* @FT_GLYPH_FORMAT_COMPOSITE, but other values */
- /* are possible. */
- /* */
- /* bitmap :: This field is used as a bitmap descriptor */
- /* when the slot format is */
- /* @FT_GLYPH_FORMAT_BITMAP. Note that the */
- /* address and content of the bitmap buffer can */
- /* change between calls of @FT_Load_Glyph and a */
- /* few other functions. */
- /* */
- /* bitmap_left :: The bitmap's left bearing expressed in */
- /* integer pixels. Only valid if the format is */
- /* @FT_GLYPH_FORMAT_BITMAP, this is, if the */
- /* glyph slot contains a bitmap. */
- /* */
- /* bitmap_top :: The bitmap's top bearing expressed in integer */
- /* pixels. This is the distance from the */
- /* baseline to the top-most glyph scanline, */
- /* upwards y~coordinates being *positive*. */
- /* */
- /* outline :: The outline descriptor for the current glyph */
- /* image if its format is */
- /* @FT_GLYPH_FORMAT_OUTLINE. Once a glyph is */
- /* loaded, `outline' can be transformed, */
- /* distorted, emboldened, etc. However, it must */
- /* not be freed. */
- /* */
- /* num_subglyphs :: The number of subglyphs in a composite glyph. */
- /* This field is only valid for the composite */
- /* glyph format that should normally only be */
- /* loaded with the @FT_LOAD_NO_RECURSE flag. */
- /* */
- /* subglyphs :: An array of subglyph descriptors for */
- /* composite glyphs. There are `num_subglyphs' */
- /* elements in there. Currently internal to */
- /* FreeType. */
- /* */
- /* control_data :: Certain font drivers can also return the */
- /* control data for a given glyph image (e.g. */
- /* TrueType bytecode, Type~1 charstrings, etc.). */
- /* This field is a pointer to such data; it is */
- /* currently internal to FreeType. */
- /* */
- /* control_len :: This is the length in bytes of the control */
- /* data. Currently internal to FreeType. */
- /* */
- /* other :: Reserved. */
- /* */
- /* lsb_delta :: The difference between hinted and unhinted */
- /* left side bearing while auto-hinting is */
- /* active. Zero otherwise. */
- /* */
- /* rsb_delta :: The difference between hinted and unhinted */
- /* right side bearing while auto-hinting is */
- /* active. Zero otherwise. */
- /* */
- /* <Note> */
- /* If @FT_Load_Glyph is called with default flags (see */
- /* @FT_LOAD_DEFAULT) the glyph image is loaded in the glyph slot in */
- /* its native format (e.g., an outline glyph for TrueType and Type~1 */
- /* formats). */
- /* */
- /* This image can later be converted into a bitmap by calling */
- /* @FT_Render_Glyph. This function searches the current renderer for */
- /* the native image's format, then invokes it. */
- /* */
- /* The renderer is in charge of transforming the native image through */
- /* the slot's face transformation fields, then converting it into a */
- /* bitmap that is returned in `slot->bitmap'. */
- /* */
- /* Note that `slot->bitmap_left' and `slot->bitmap_top' are also used */
- /* to specify the position of the bitmap relative to the current pen */
- /* position (e.g., coordinates (0,0) on the baseline). Of course, */
- /* `slot->format' is also changed to @FT_GLYPH_FORMAT_BITMAP. */
- /* */
- /* Here is a small pseudo code fragment that shows how to use */
- /* `lsb_delta' and `rsb_delta' to do fractional positioning of */
- /* glyphs: */
- /* */
- /* { */
- /* FT_GlyphSlot slot = face->glyph; */
- /* FT_Pos origin_x = 0; */
- /* */
- /* */
- /* for all glyphs do */
- /* <load glyph with `FT_Load_Glyph'> */
- /* */
- /* FT_Outline_Translate( slot->outline, origin_x & 63, 0 ); */
- /* */
- /* <save glyph image, or render glyph, or ...> */
- /* */
- /* <compute kern between current and next glyph */
- /* and add it to `origin_x'> */
- /* */
- /* origin_x += slot->advance.x; */
- /* origin_x += slot->rsb_delta - slot->lsb_relta; */
- /* endfor */
- /* } */
- /* */
- /* Here is another small pseudo code fragment that shows how to use */
- /* `lsb_delta' and `rsb_delta' to improve integer positioning of */
- /* glyphs: */
- /* */
- /* { */
- /* FT_GlyphSlot slot = face->glyph; */
- /* FT_Pos origin_x = 0; */
- /* FT_Pos prev_rsb_delta = 0; */
- /* */
- /* */
- /* for all glyphs do */
- /* <compute kern between current and previous glyph */
- /* and add it to `origin_x'> */
- /* */
- /* <load glyph with `FT_Load_Glyph'> */
- /* */
- /* if ( prev_rsb_delta - slot->lsb_delta >= 32 ) */
- /* origin_x -= 64; */
- /* else if ( prev_rsb_delta - slot->lsb_delta < -32 ) */
- /* origin_x += 64; */
- /* */
- /* prev_rsb_delta = slot->rsb_delta; */
- /* */
- /* <save glyph image, or render glyph, or ...> */
- /* */
- /* origin_x += slot->advance.x; */
- /* endfor */
- /* } */
- /* */
- /* If you use strong auto-hinting, you *must* apply these delta */
- /* values! Otherwise you will experience far too large inter-glyph */
- /* spacing at small rendering sizes in most cases. Note that it */
- /* doesn't harm to use the above code for other hinting modes also, */
- /* since the delta values are zero then. */
- /* */
- typedef struct FT_GlyphSlotRec_
- {
- FT_Library library;
- FT_Face face;
- FT_GlyphSlot next;
- FT_UInt reserved; /* retained for binary compatibility */
- FT_Generic generic;
-
- FT_Glyph_Metrics metrics;
- FT_Fixed linearHoriAdvance;
- FT_Fixed linearVertAdvance;
- FT_Vector advance;
-
- FT_Glyph_Format format;
-
- FT_Bitmap bitmap;
- FT_Int bitmap_left;
- FT_Int bitmap_top;
-
- FT_Outline outline;
-
- FT_UInt num_subglyphs;
- FT_SubGlyph subglyphs;
-
- void* control_data;
- long control_len;
-
- FT_Pos lsb_delta;
- FT_Pos rsb_delta;
-
- void* other;
-
- FT_Slot_Internal internal;
-
- } FT_GlyphSlotRec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /* */
- /* F U N C T I O N S */
- /* */
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Init_FreeType */
- /* */
- /* <Description> */
- /* Initialize a new FreeType library object. The set of modules */
- /* that are registered by this function is determined at build time. */
- /* */
- /* <Output> */
- /* alibrary :: A handle to a new library object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* In case you want to provide your own memory allocating routines, */
- /* use @FT_New_Library instead, followed by a call to */
- /* @FT_Add_Default_Modules (or a series of calls to @FT_Add_Module) */
- /* and @FT_Set_Default_Properties. */
- /* */
- /* See the documentation of @FT_Library and @FT_Face for */
- /* multi-threading issues. */
- /* */
- /* If you need reference-counting (cf. @FT_Reference_Library), use */
- /* @FT_New_Library and @FT_Done_Library. */
- /* */
- /* If compilation option FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES is */
- /* set, this function reads the `FREETYPE_PROPERTIES' environment */
- /* variable to control driver properties. See sections @auto_hinter, */
- /* @cff_driver, @pcf_driver, and @tt_driver for more. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Init_FreeType( FT_Library *alibrary );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Done_FreeType */
- /* */
- /* <Description> */
- /* Destroy a given FreeType library object and all of its children, */
- /* including resources, drivers, faces, sizes, etc. */
- /* */
- /* <Input> */
- /* library :: A handle to the target library object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Done_FreeType( FT_Library library );
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_OPEN_XXX */
- /* */
- /* <Description> */
- /* A list of bit field constants used within the `flags' field of the */
- /* @FT_Open_Args structure. */
- /* */
- /* <Values> */
- /* FT_OPEN_MEMORY :: This is a memory-based stream. */
- /* */
- /* FT_OPEN_STREAM :: Copy the stream from the `stream' field. */
- /* */
- /* FT_OPEN_PATHNAME :: Create a new input stream from a C~path */
- /* name. */
- /* */
- /* FT_OPEN_DRIVER :: Use the `driver' field. */
- /* */
- /* FT_OPEN_PARAMS :: Use the `num_params' and `params' fields. */
- /* */
- /* <Note> */
- /* The `FT_OPEN_MEMORY', `FT_OPEN_STREAM', and `FT_OPEN_PATHNAME' */
- /* flags are mutually exclusive. */
- /* */
-#define FT_OPEN_MEMORY 0x1
-#define FT_OPEN_STREAM 0x2
-#define FT_OPEN_PATHNAME 0x4
-#define FT_OPEN_DRIVER 0x8
-#define FT_OPEN_PARAMS 0x10
-
-
- /* these constants are deprecated; use the corresponding `FT_OPEN_XXX' */
- /* values instead */
-#define ft_open_memory FT_OPEN_MEMORY
-#define ft_open_stream FT_OPEN_STREAM
-#define ft_open_pathname FT_OPEN_PATHNAME
-#define ft_open_driver FT_OPEN_DRIVER
-#define ft_open_params FT_OPEN_PARAMS
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Parameter */
- /* */
- /* <Description> */
- /* A simple structure to pass more or less generic parameters to */
- /* @FT_Open_Face and @FT_Face_Properties. */
- /* */
- /* <Fields> */
- /* tag :: A four-byte identification tag. */
- /* */
- /* data :: A pointer to the parameter data. */
- /* */
- /* <Note> */
- /* The ID and function of parameters are driver-specific. See the */
- /* various FT_PARAM_TAG_XXX flags for more information. */
- /* */
- typedef struct FT_Parameter_
- {
- FT_ULong tag;
- FT_Pointer data;
-
- } FT_Parameter;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Open_Args */
- /* */
- /* <Description> */
- /* A structure to indicate how to open a new font file or stream. A */
- /* pointer to such a structure can be used as a parameter for the */
- /* functions @FT_Open_Face and @FT_Attach_Stream. */
- /* */
- /* <Fields> */
- /* flags :: A set of bit flags indicating how to use the */
- /* structure. */
- /* */
- /* memory_base :: The first byte of the file in memory. */
- /* */
- /* memory_size :: The size in bytes of the file in memory. */
- /* */
- /* pathname :: A pointer to an 8-bit file pathname. */
- /* */
- /* stream :: A handle to a source stream object. */
- /* */
- /* driver :: This field is exclusively used by @FT_Open_Face; */
- /* it simply specifies the font driver to use for */
- /* opening the face. If set to NULL, FreeType tries */
- /* to load the face with each one of the drivers in */
- /* its list. */
- /* */
- /* num_params :: The number of extra parameters. */
- /* */
- /* params :: Extra parameters passed to the font driver when */
- /* opening a new face. */
- /* */
- /* <Note> */
- /* The stream type is determined by the contents of `flags' that */
- /* are tested in the following order by @FT_Open_Face: */
- /* */
- /* If the @FT_OPEN_MEMORY bit is set, assume that this is a */
- /* memory file of `memory_size' bytes, located at `memory_address'. */
- /* The data are not copied, and the client is responsible for */
- /* releasing and destroying them _after_ the corresponding call to */
- /* @FT_Done_Face. */
- /* */
- /* Otherwise, if the @FT_OPEN_STREAM bit is set, assume that a */
- /* custom input stream `stream' is used. */
- /* */
- /* Otherwise, if the @FT_OPEN_PATHNAME bit is set, assume that this */
- /* is a normal file and use `pathname' to open it. */
- /* */
- /* If the @FT_OPEN_DRIVER bit is set, @FT_Open_Face only tries to */
- /* open the file with the driver whose handler is in `driver'. */
- /* */
- /* If the @FT_OPEN_PARAMS bit is set, the parameters given by */
- /* `num_params' and `params' is used. They are ignored otherwise. */
- /* */
- /* Ideally, both the `pathname' and `params' fields should be tagged */
- /* as `const'; this is missing for API backward compatibility. In */
- /* other words, applications should treat them as read-only. */
- /* */
- typedef struct FT_Open_Args_
- {
- FT_UInt flags;
- const FT_Byte* memory_base;
- FT_Long memory_size;
- FT_String* pathname;
- FT_Stream stream;
- FT_Module driver;
- FT_Int num_params;
- FT_Parameter* params;
-
- } FT_Open_Args;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Face */
- /* */
- /* <Description> */
- /* Call @FT_Open_Face to open a font by its pathname. */
- /* */
- /* <InOut> */
- /* library :: A handle to the library resource. */
- /* */
- /* <Input> */
- /* pathname :: A path to the font file. */
- /* */
- /* face_index :: See @FT_Open_Face for a detailed description of this */
- /* parameter. */
- /* */
- /* <Output> */
- /* aface :: A handle to a new face object. If `face_index' is */
- /* greater than or equal to zero, it must be non-NULL. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* Use @FT_Done_Face to destroy the created @FT_Face object (along */
- /* with its slot and sizes). */
- /* */
- FT_EXPORT( FT_Error )
- FT_New_Face( FT_Library library,
- const char* filepathname,
- FT_Long face_index,
- FT_Face *aface );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Memory_Face */
- /* */
- /* <Description> */
- /* Call @FT_Open_Face to open a font that has been loaded into */
- /* memory. */
- /* */
- /* <InOut> */
- /* library :: A handle to the library resource. */
- /* */
- /* <Input> */
- /* file_base :: A pointer to the beginning of the font data. */
- /* */
- /* file_size :: The size of the memory chunk used by the font data. */
- /* */
- /* face_index :: See @FT_Open_Face for a detailed description of this */
- /* parameter. */
- /* */
- /* <Output> */
- /* aface :: A handle to a new face object. If `face_index' is */
- /* greater than or equal to zero, it must be non-NULL. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* You must not deallocate the memory before calling @FT_Done_Face. */
- /* */
- FT_EXPORT( FT_Error )
- FT_New_Memory_Face( FT_Library library,
- const FT_Byte* file_base,
- FT_Long file_size,
- FT_Long face_index,
- FT_Face *aface );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Open_Face */
- /* */
- /* <Description> */
- /* Create a face object from a given resource described by */
- /* @FT_Open_Args. */
- /* */
- /* <InOut> */
- /* library :: A handle to the library resource. */
- /* */
- /* <Input> */
- /* args :: A pointer to an `FT_Open_Args' structure that must */
- /* be filled by the caller. */
- /* */
- /* face_index :: This field holds two different values. Bits 0-15 */
- /* are the index of the face in the font file (starting */
- /* with value~0). Set it to~0 if there is only one */
- /* face in the font file. */
- /* */
- /* Bits 16-30 are relevant to GX and OpenType variation */
- /* fonts only, specifying the named instance index for */
- /* the current face index (starting with value~1; */
- /* value~0 makes FreeType ignore named instances). For */
- /* non-variation fonts, bits 16-30 are ignored. */
- /* Assuming that you want to access the third named */
- /* instance in face~4, `face_index' should be set to */
- /* 0x00030004. If you want to access face~4 without */
- /* variation handling, simply set `face_index' to */
- /* value~4. */
- /* */
- /* `FT_Open_Face' and its siblings can be used to */
- /* quickly check whether the font format of a given */
- /* font resource is supported by FreeType. In general, */
- /* if the `face_index' argument is negative, the */
- /* function's return value is~0 if the font format is */
- /* recognized, or non-zero otherwise. The function */
- /* allocates a more or less empty face handle in */
- /* `*aface' (if `aface' isn't NULL); the only two */
- /* useful fields in this special case are */
- /* `face->num_faces' and `face->style_flags'. For any */
- /* negative value of `face_index', `face->num_faces' */
- /* gives the number of faces within the font file. For */
- /* the negative value `-(N+1)' (with `N' a non-negative */
- /* 16-bit value), bits 16-30 in `face->style_flags' */
- /* give the number of named instances in face `N' if we */
- /* have a variation font (or zero otherwise). After */
- /* examination, the returned @FT_Face structure should */
- /* be deallocated with a call to @FT_Done_Face. */
- /* */
- /* <Output> */
- /* aface :: A handle to a new face object. If `face_index' is */
- /* greater than or equal to zero, it must be non-NULL. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* Unlike FreeType 1.x, this function automatically creates a glyph */
- /* slot for the face object that can be accessed directly through */
- /* `face->glyph'. */
- /* */
- /* Each new face object created with this function also owns a */
- /* default @FT_Size object, accessible as `face->size'. */
- /* */
- /* One @FT_Library instance can have multiple face objects, this is, */
- /* @FT_Open_Face and its siblings can be called multiple times using */
- /* the same `library' argument. */
- /* */
- /* See the discussion of reference counters in the description of */
- /* @FT_Reference_Face. */
- /* */
- /* To loop over all faces, use code similar to the following snippet */
- /* (omitting the error handling). */
- /* */
- /* { */
- /* ... */
- /* FT_Face face; */
- /* FT_Long i, num_faces; */
- /* */
- /* */
- /* error = FT_Open_Face( library, args, -1, &face ); */
- /* if ( error ) { ... } */
- /* */
- /* num_faces = face->num_faces; */
- /* FT_Done_Face( face ); */
- /* */
- /* for ( i = 0; i < num_faces; i++ ) */
- /* { */
- /* ... */
- /* error = FT_Open_Face( library, args, i, &face ); */
- /* ... */
- /* FT_Done_Face( face ); */
- /* ... */
- /* } */
- /* } */
- /* */
- /* To loop over all valid values for `face_index', use something */
- /* similar to the following snippet, again without error handling. */
- /* The code accesses all faces immediately (thus only a single call */
- /* of `FT_Open_Face' within the do-loop), with and without named */
- /* instances. */
- /* */
- /* { */
- /* ... */
- /* FT_Face face; */
- /* */
- /* FT_Long num_faces = 0; */
- /* FT_Long num_instances = 0; */
- /* */
- /* FT_Long face_idx = 0; */
- /* FT_Long instance_idx = 0; */
- /* */
- /* */
- /* do */
- /* { */
- /* FT_Long id = ( instance_idx << 16 ) + face_idx; */
- /* */
- /* */
- /* error = FT_Open_Face( library, args, id, &face ); */
- /* if ( error ) { ... } */
- /* */
- /* num_faces = face->num_faces; */
- /* num_instances = face->style_flags >> 16; */
- /* */
- /* ... */
- /* */
- /* FT_Done_Face( face ); */
- /* */
- /* if ( instance_idx < num_instances ) */
- /* instance_idx++; */
- /* else */
- /* { */
- /* face_idx++; */
- /* instance_idx = 0; */
- /* } */
- /* */
- /* } while ( face_idx < num_faces ) */
- /* } */
- /* */
- FT_EXPORT( FT_Error )
- FT_Open_Face( FT_Library library,
- const FT_Open_Args* args,
- FT_Long face_index,
- FT_Face *aface );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Attach_File */
- /* */
- /* <Description> */
- /* Call @FT_Attach_Stream to attach a file. */
- /* */
- /* <InOut> */
- /* face :: The target face object. */
- /* */
- /* <Input> */
- /* filepathname :: The pathname. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Attach_File( FT_Face face,
- const char* filepathname );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Attach_Stream */
- /* */
- /* <Description> */
- /* `Attach' data to a face object. Normally, this is used to read */
- /* additional information for the face object. For example, you can */
- /* attach an AFM file that comes with a Type~1 font to get the */
- /* kerning values and other metrics. */
- /* */
- /* <InOut> */
- /* face :: The target face object. */
- /* */
- /* <Input> */
- /* parameters :: A pointer to @FT_Open_Args that must be filled by */
- /* the caller. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The meaning of the `attach' (i.e., what really happens when the */
- /* new file is read) is not fixed by FreeType itself. It really */
- /* depends on the font format (and thus the font driver). */
- /* */
- /* Client applications are expected to know what they are doing */
- /* when invoking this function. Most drivers simply do not implement */
- /* file or stream attachments. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Attach_Stream( FT_Face face,
- FT_Open_Args* parameters );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Reference_Face */
- /* */
- /* <Description> */
- /* A counter gets initialized to~1 at the time an @FT_Face structure */
- /* is created. This function increments the counter. @FT_Done_Face */
- /* then only destroys a face if the counter is~1, otherwise it simply */
- /* decrements the counter. */
- /* */
- /* This function helps in managing life-cycles of structures that */
- /* reference @FT_Face objects. */
- /* */
- /* <Input> */
- /* face :: A handle to a target face object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Since> */
- /* 2.4.2 */
- /* */
- FT_EXPORT( FT_Error )
- FT_Reference_Face( FT_Face face );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Done_Face */
- /* */
- /* <Description> */
- /* Discard a given face object, as well as all of its child slots and */
- /* sizes. */
- /* */
- /* <Input> */
- /* face :: A handle to a target face object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* See the discussion of reference counters in the description of */
- /* @FT_Reference_Face. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Done_Face( FT_Face face );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Select_Size */
- /* */
- /* <Description> */
- /* Select a bitmap strike. To be more precise, this function sets */
- /* the scaling factors of the active @FT_Size object in a face so */
- /* that bitmaps from this particular strike are taken by */
- /* @FT_Load_Glyph and friends. */
- /* */
- /* <InOut> */
- /* face :: A handle to a target face object. */
- /* */
- /* <Input> */
- /* strike_index :: The index of the bitmap strike in the */
- /* `available_sizes' field of @FT_FaceRec structure. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* For bitmaps embedded in outline fonts it is common that only a */
- /* subset of the available glyphs at a given ppem value is available. */
- /* FreeType silently uses outlines if there is no bitmap for a given */
- /* glyph index. */
- /* */
- /* For GX and OpenType variation fonts, a bitmap strike makes sense */
- /* only if the default instance is active (this is, no glyph */
- /* variation takes place); otherwise, FreeType simply ignores bitmap */
- /* strikes. The same is true for all named instances that are */
- /* different from the default instance. */
- /* */
- /* Don't use this function if you are using the FreeType cache API. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Select_Size( FT_Face face,
- FT_Int strike_index );
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Size_Request_Type */
- /* */
- /* <Description> */
- /* An enumeration type that lists the supported size request types, */
- /* i.e., what input size (in font units) maps to the requested output */
- /* size (in pixels, as computed from the arguments of */
- /* @FT_Size_Request). */
- /* */
- /* <Values> */
- /* FT_SIZE_REQUEST_TYPE_NOMINAL :: */
- /* The nominal size. The `units_per_EM' field of @FT_FaceRec is */
- /* used to determine both scaling values. */
- /* */
- /* This is the standard scaling found in most applications. In */
- /* particular, use this size request type for TrueType fonts if */
- /* they provide optical scaling or something similar. Note, */
- /* however, that `units_per_EM' is a rather abstract value which */
- /* bears no relation to the actual size of the glyphs in a font. */
- /* */
- /* FT_SIZE_REQUEST_TYPE_REAL_DIM :: */
- /* The real dimension. The sum of the `ascender' and (minus of) */
- /* the `descender' fields of @FT_FaceRec is used to determine both */
- /* scaling values. */
- /* */
- /* FT_SIZE_REQUEST_TYPE_BBOX :: */
- /* The font bounding box. The width and height of the `bbox' field */
- /* of @FT_FaceRec are used to determine the horizontal and vertical */
- /* scaling value, respectively. */
- /* */
- /* FT_SIZE_REQUEST_TYPE_CELL :: */
- /* The `max_advance_width' field of @FT_FaceRec is used to */
- /* determine the horizontal scaling value; the vertical scaling */
- /* value is determined the same way as */
- /* @FT_SIZE_REQUEST_TYPE_REAL_DIM does. Finally, both scaling */
- /* values are set to the smaller one. This type is useful if you */
- /* want to specify the font size for, say, a window of a given */
- /* dimension and 80x24 cells. */
- /* */
- /* FT_SIZE_REQUEST_TYPE_SCALES :: */
- /* Specify the scaling values directly. */
- /* */
- /* <Note> */
- /* The above descriptions only apply to scalable formats. For bitmap */
- /* formats, the behaviour is up to the driver. */
- /* */
- /* See the note section of @FT_Size_Metrics if you wonder how size */
- /* requesting relates to scaling values. */
- /* */
- typedef enum FT_Size_Request_Type_
- {
- FT_SIZE_REQUEST_TYPE_NOMINAL,
- FT_SIZE_REQUEST_TYPE_REAL_DIM,
- FT_SIZE_REQUEST_TYPE_BBOX,
- FT_SIZE_REQUEST_TYPE_CELL,
- FT_SIZE_REQUEST_TYPE_SCALES,
-
- FT_SIZE_REQUEST_TYPE_MAX
-
- } FT_Size_Request_Type;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Size_RequestRec */
- /* */
- /* <Description> */
- /* A structure to model a size request. */
- /* */
- /* <Fields> */
- /* type :: See @FT_Size_Request_Type. */
- /* */
- /* width :: The desired width, given as a 26.6 fractional */
- /* point value (with 72pt = 1in). */
- /* */
- /* height :: The desired height, given as a 26.6 fractional */
- /* point value (with 72pt = 1in). */
- /* */
- /* horiResolution :: The horizontal resolution (dpi, i.e., pixels per */
- /* inch). If set to zero, `width' is treated as a */
- /* 26.6 fractional *pixel* value, which gets */
- /* internally rounded to an integer. */
- /* */
- /* vertResolution :: The vertical resolution (dpi, i.e., pixels per */
- /* inch). If set to zero, `height' is treated as a */
- /* 26.6 fractional *pixel* value, which gets */
- /* internally rounded to an integer. */
- /* */
- /* <Note> */
- /* If `width' is zero, the horizontal scaling value is set equal */
- /* to the vertical scaling value, and vice versa. */
- /* */
- /* If `type' is FT_SIZE_REQUEST_TYPE_SCALES, `width' and `height' are */
- /* interpreted directly as 16.16 fractional scaling values, without */
- /* any further modification, and both `horiResolution' and */
- /* `vertResolution' are ignored. */
- /* */
- typedef struct FT_Size_RequestRec_
- {
- FT_Size_Request_Type type;
- FT_Long width;
- FT_Long height;
- FT_UInt horiResolution;
- FT_UInt vertResolution;
-
- } FT_Size_RequestRec;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Size_Request */
- /* */
- /* <Description> */
- /* A handle to a size request structure. */
- /* */
- typedef struct FT_Size_RequestRec_ *FT_Size_Request;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Request_Size */
- /* */
- /* <Description> */
- /* Resize the scale of the active @FT_Size object in a face. */
- /* */
- /* <InOut> */
- /* face :: A handle to a target face object. */
- /* */
- /* <Input> */
- /* req :: A pointer to a @FT_Size_RequestRec. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* Although drivers may select the bitmap strike matching the */
- /* request, you should not rely on this if you intend to select a */
- /* particular bitmap strike. Use @FT_Select_Size instead in that */
- /* case. */
- /* */
- /* The relation between the requested size and the resulting glyph */
- /* size is dependent entirely on how the size is defined in the */
- /* source face. The font designer chooses the final size of each */
- /* glyph relative to this size. For more information refer to */
- /* `https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html'. */
- /* */
- /* Contrary to @FT_Set_Char_Size, this function doesn't have special */
- /* code to normalize zero-valued widths, heights, or resolutions */
- /* (which lead to errors in most cases). */
- /* */
- /* Don't use this function if you are using the FreeType cache API. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Request_Size( FT_Face face,
- FT_Size_Request req );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Char_Size */
- /* */
- /* <Description> */
- /* Call @FT_Request_Size to request the nominal size (in points). */
- /* */
- /* <InOut> */
- /* face :: A handle to a target face object. */
- /* */
- /* <Input> */
- /* char_width :: The nominal width, in 26.6 fractional points. */
- /* */
- /* char_height :: The nominal height, in 26.6 fractional points. */
- /* */
- /* horz_resolution :: The horizontal resolution in dpi. */
- /* */
- /* vert_resolution :: The vertical resolution in dpi. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* While this function allows fractional points as input values, the */
- /* resulting ppem value for the given resolution is always rounded to */
- /* the nearest integer. */
- /* */
- /* If either the character width or height is zero, it is set equal */
- /* to the other value. */
- /* */
- /* If either the horizontal or vertical resolution is zero, it is set */
- /* equal to the other value. */
- /* */
- /* A character width or height smaller than 1pt is set to 1pt; if */
- /* both resolution values are zero, they are set to 72dpi. */
- /* */
- /* Don't use this function if you are using the FreeType cache API. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Set_Char_Size( FT_Face face,
- FT_F26Dot6 char_width,
- FT_F26Dot6 char_height,
- FT_UInt horz_resolution,
- FT_UInt vert_resolution );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Pixel_Sizes */
- /* */
- /* <Description> */
- /* Call @FT_Request_Size to request the nominal size (in pixels). */
- /* */
- /* <InOut> */
- /* face :: A handle to the target face object. */
- /* */
- /* <Input> */
- /* pixel_width :: The nominal width, in pixels. */
- /* */
- /* pixel_height :: The nominal height, in pixels. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* You should not rely on the resulting glyphs matching or being */
- /* constrained to this pixel size. Refer to @FT_Request_Size to */
- /* understand how requested sizes relate to actual sizes. */
- /* */
- /* Don't use this function if you are using the FreeType cache API. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Set_Pixel_Sizes( FT_Face face,
- FT_UInt pixel_width,
- FT_UInt pixel_height );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Load_Glyph */
- /* */
- /* <Description> */
- /* Load a glyph into the glyph slot of a face object. */
- /* */
- /* <InOut> */
- /* face :: A handle to the target face object where the glyph */
- /* is loaded. */
- /* */
- /* <Input> */
- /* glyph_index :: The index of the glyph in the font file. For */
- /* CID-keyed fonts (either in PS or in CFF format) */
- /* this argument specifies the CID value. */
- /* */
- /* load_flags :: A flag indicating what to load for this glyph. The */
- /* @FT_LOAD_XXX constants can be used to control the */
- /* glyph loading process (e.g., whether the outline */
- /* should be scaled, whether to load bitmaps or not, */
- /* whether to hint the outline, etc). */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The loaded glyph may be transformed. See @FT_Set_Transform for */
- /* the details. */
- /* */
- /* For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument' is */
- /* returned for invalid CID values (this is, for CID values that */
- /* don't have a corresponding glyph in the font). See the discussion */
- /* of the @FT_FACE_FLAG_CID_KEYED flag for more details. */
- /* */
- /* If you receive `FT_Err_Glyph_Too_Big', try getting the glyph */
- /* outline at EM size, then scale it manually and fill it as a */
- /* graphics operation. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Load_Glyph( FT_Face face,
- FT_UInt glyph_index,
- FT_Int32 load_flags );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Load_Char */
- /* */
- /* <Description> */
- /* Load a glyph into the glyph slot of a face object, accessed by its */
- /* character code. */
- /* */
- /* <InOut> */
- /* face :: A handle to a target face object where the glyph */
- /* is loaded. */
- /* */
- /* <Input> */
- /* char_code :: The glyph's character code, according to the */
- /* current charmap used in the face. */
- /* */
- /* load_flags :: A flag indicating what to load for this glyph. The */
- /* @FT_LOAD_XXX constants can be used to control the */
- /* glyph loading process (e.g., whether the outline */
- /* should be scaled, whether to load bitmaps or not, */
- /* whether to hint the outline, etc). */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* This function simply calls @FT_Get_Char_Index and @FT_Load_Glyph. */
- /* */
- /* Many fonts contain glyphs that can't be loaded by this function */
- /* since its glyph indices are not listed in any of the font's */
- /* charmaps. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Load_Char( FT_Face face,
- FT_ULong char_code,
- FT_Int32 load_flags );
-
-
- /*************************************************************************
- *
- * @enum:
- * FT_LOAD_XXX
- *
- * @description:
- * A list of bit field constants for @FT_Load_Glyph to indicate what
- * kind of operations to perform during glyph loading.
- *
- * @values:
- * FT_LOAD_DEFAULT ::
- * Corresponding to~0, this value is used as the default glyph load
- * operation. In this case, the following happens:
- *
- * 1. FreeType looks for a bitmap for the glyph corresponding to the
- * face's current size. If one is found, the function returns.
- * The bitmap data can be accessed from the glyph slot (see note
- * below).
- *
- * 2. If no embedded bitmap is searched for or found, FreeType looks
- * for a scalable outline. If one is found, it is loaded from
- * the font file, scaled to device pixels, then `hinted' to the
- * pixel grid in order to optimize it. The outline data can be
- * accessed from the glyph slot (see note below).
- *
- * Note that by default the glyph loader doesn't render outlines into
- * bitmaps. The following flags are used to modify this default
- * behaviour to more specific and useful cases.
- *
- * FT_LOAD_NO_SCALE ::
- * Don't scale the loaded outline glyph but keep it in font units.
- *
- * This flag implies @FT_LOAD_NO_HINTING and @FT_LOAD_NO_BITMAP, and
- * unsets @FT_LOAD_RENDER.
- *
- * If the font is `tricky' (see @FT_FACE_FLAG_TRICKY for more), using
- * FT_LOAD_NO_SCALE usually yields meaningless outlines because the
- * subglyphs must be scaled and positioned with hinting instructions.
- * This can be solved by loading the font without FT_LOAD_NO_SCALE and
- * setting the character size to `font->units_per_EM'.
- *
- * FT_LOAD_NO_HINTING ::
- * Disable hinting. This generally generates `blurrier' bitmap glyphs
- * when the glyph are rendered in any of the anti-aliased modes. See
- * also the note below.
- *
- * This flag is implied by @FT_LOAD_NO_SCALE.
- *
- * FT_LOAD_RENDER ::
- * Call @FT_Render_Glyph after the glyph is loaded. By default, the
- * glyph is rendered in @FT_RENDER_MODE_NORMAL mode. This can be
- * overridden by @FT_LOAD_TARGET_XXX or @FT_LOAD_MONOCHROME.
- *
- * This flag is unset by @FT_LOAD_NO_SCALE.
- *
- * FT_LOAD_NO_BITMAP ::
- * Ignore bitmap strikes when loading. Bitmap-only fonts ignore this
- * flag.
- *
- * @FT_LOAD_NO_SCALE always sets this flag.
- *
- * FT_LOAD_VERTICAL_LAYOUT ::
- * Load the glyph for vertical text layout. In particular, the
- * `advance' value in the @FT_GlyphSlotRec structure is set to the
- * `vertAdvance' value of the `metrics' field.
- *
- * In case @FT_HAS_VERTICAL doesn't return true, you shouldn't use
- * this flag currently. Reason is that in this case vertical metrics
- * get synthesized, and those values are not always consistent across
- * various font formats.
- *
- * FT_LOAD_FORCE_AUTOHINT ::
- * Prefer the auto-hinter over the font's native hinter. See also
- * the note below.
- *
- * FT_LOAD_PEDANTIC ::
- * Make the font driver perform pedantic verifications during glyph
- * loading. This is mostly used to detect broken glyphs in fonts.
- * By default, FreeType tries to handle broken fonts also.
- *
- * In particular, errors from the TrueType bytecode engine are not
- * passed to the application if this flag is not set; this might
- * result in partially hinted or distorted glyphs in case a glyph's
- * bytecode is buggy.
- *
- * FT_LOAD_NO_RECURSE ::
- * Don't load composite glyphs recursively. Instead, the font
- * driver should set the `num_subglyph' and `subglyphs' values of
- * the glyph slot accordingly, and set `glyph->format' to
- * @FT_GLYPH_FORMAT_COMPOSITE. The description of subglyphs can
- * then be accessed with @FT_Get_SubGlyph_Info.
- *
- * This flag implies @FT_LOAD_NO_SCALE and @FT_LOAD_IGNORE_TRANSFORM.
- *
- * FT_LOAD_IGNORE_TRANSFORM ::
- * Ignore the transform matrix set by @FT_Set_Transform.
- *
- * FT_LOAD_MONOCHROME ::
- * This flag is used with @FT_LOAD_RENDER to indicate that you want to
- * render an outline glyph to a 1-bit monochrome bitmap glyph, with
- * 8~pixels packed into each byte of the bitmap data.
- *
- * Note that this has no effect on the hinting algorithm used. You
- * should rather use @FT_LOAD_TARGET_MONO so that the
- * monochrome-optimized hinting algorithm is used.
- *
- * FT_LOAD_LINEAR_DESIGN ::
- * Keep `linearHoriAdvance' and `linearVertAdvance' fields of
- * @FT_GlyphSlotRec in font units. See @FT_GlyphSlotRec for
- * details.
- *
- * FT_LOAD_NO_AUTOHINT ::
- * Disable the auto-hinter. See also the note below.
- *
- * FT_LOAD_COLOR ::
- * Load embedded color bitmap images. The resulting color bitmaps,
- * if available, will have the @FT_PIXEL_MODE_BGRA format. If the
- * flag is not set and color bitmaps are found, they are converted
- * to 256-level gray bitmaps transparently, using the
- * @FT_PIXEL_MODE_GRAY format.
- *
- * FT_LOAD_COMPUTE_METRICS ::
- * Compute glyph metrics from the glyph data, without the use of
- * bundled metrics tables (for example, the `hdmx' table in TrueType
- * fonts). This flag is mainly used by font validating or font
- * editing applications, which need to ignore, verify, or edit those
- * tables.
- *
- * Currently, this flag is only implemented for TrueType fonts.
- *
- * FT_LOAD_BITMAP_METRICS_ONLY ::
- * Request loading of the metrics and bitmap image information of a
- * (possibly embedded) bitmap glyph without allocating or copying
- * the bitmap image data itself. No effect if the target glyph is
- * not a bitmap image.
- *
- * This flag unsets @FT_LOAD_RENDER.
- *
- * FT_LOAD_CROP_BITMAP ::
- * Ignored. Deprecated.
- *
- * FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ::
- * Ignored. Deprecated.
- *
- * @note:
- * By default, hinting is enabled and the font's native hinter (see
- * @FT_FACE_FLAG_HINTER) is preferred over the auto-hinter. You can
- * disable hinting by setting @FT_LOAD_NO_HINTING or change the
- * precedence by setting @FT_LOAD_FORCE_AUTOHINT. You can also set
- * @FT_LOAD_NO_AUTOHINT in case you don't want the auto-hinter to be
- * used at all.
- *
- * See the description of @FT_FACE_FLAG_TRICKY for a special exception
- * (affecting only a handful of Asian fonts).
- *
- * Besides deciding which hinter to use, you can also decide which
- * hinting algorithm to use. See @FT_LOAD_TARGET_XXX for details.
- *
- * Note that the auto-hinter needs a valid Unicode cmap (either a native
- * one or synthesized by FreeType) for producing correct results. If a
- * font provides an incorrect mapping (for example, assigning the
- * character code U+005A, LATIN CAPITAL LETTER Z, to a glyph depicting a
- * mathematical integral sign), the auto-hinter might produce useless
- * results.
- *
- */
-#define FT_LOAD_DEFAULT 0x0
-#define FT_LOAD_NO_SCALE ( 1L << 0 )
-#define FT_LOAD_NO_HINTING ( 1L << 1 )
-#define FT_LOAD_RENDER ( 1L << 2 )
-#define FT_LOAD_NO_BITMAP ( 1L << 3 )
-#define FT_LOAD_VERTICAL_LAYOUT ( 1L << 4 )
-#define FT_LOAD_FORCE_AUTOHINT ( 1L << 5 )
-#define FT_LOAD_CROP_BITMAP ( 1L << 6 )
-#define FT_LOAD_PEDANTIC ( 1L << 7 )
-#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ( 1L << 9 )
-#define FT_LOAD_NO_RECURSE ( 1L << 10 )
-#define FT_LOAD_IGNORE_TRANSFORM ( 1L << 11 )
-#define FT_LOAD_MONOCHROME ( 1L << 12 )
-#define FT_LOAD_LINEAR_DESIGN ( 1L << 13 )
-#define FT_LOAD_NO_AUTOHINT ( 1L << 15 )
- /* Bits 16-19 are used by `FT_LOAD_TARGET_' */
-#define FT_LOAD_COLOR ( 1L << 20 )
-#define FT_LOAD_COMPUTE_METRICS ( 1L << 21 )
-#define FT_LOAD_BITMAP_METRICS_ONLY ( 1L << 22 )
-
- /* */
-
- /* used internally only by certain font drivers */
-#define FT_LOAD_ADVANCE_ONLY ( 1L << 8 )
-#define FT_LOAD_SBITS_ONLY ( 1L << 14 )
-
-
- /**************************************************************************
- *
- * @enum:
- * FT_LOAD_TARGET_XXX
- *
- * @description:
- * A list of values to select a specific hinting algorithm for the
- * hinter. You should OR one of these values to your `load_flags'
- * when calling @FT_Load_Glyph.
- *
- * Note that a font's native hinters may ignore the hinting algorithm
- * you have specified (e.g., the TrueType bytecode interpreter). You
- * can set @FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is
- * used.
- *
- * @values:
- * FT_LOAD_TARGET_NORMAL ::
- * The default hinting algorithm, optimized for standard gray-level
- * rendering. For monochrome output, use @FT_LOAD_TARGET_MONO
- * instead.
- *
- * FT_LOAD_TARGET_LIGHT ::
- * A lighter hinting algorithm for gray-level modes. Many generated
- * glyphs are fuzzier but better resemble their original shape. This
- * is achieved by snapping glyphs to the pixel grid only vertically
- * (Y-axis), as is done by FreeType's new CFF engine or Microsoft's
- * ClearType font renderer. This preserves inter-glyph spacing in
- * horizontal text. The snapping is done either by the native font
- * driver, if the driver itself and the font support it, or by the
- * auto-hinter.
- *
- * Advance widths are rounded to integer values; however, using the
- * `lsb_delta' and `rsb_delta' fields of @FT_GlyphSlotRec, it is
- * possible to get fractional advance widths for sub-pixel positioning
- * (which is recommended to use).
- *
- * If configuration option AF_CONFIG_OPTION_TT_SIZE_METRICS is active,
- * TrueType-like metrics are used to make this mode behave similarly
- * as in unpatched FreeType versions between 2.4.6 and 2.7.1
- * (inclusive).
- *
- * FT_LOAD_TARGET_MONO ::
- * Strong hinting algorithm that should only be used for monochrome
- * output. The result is probably unpleasant if the glyph is rendered
- * in non-monochrome modes.
- *
- * FT_LOAD_TARGET_LCD ::
- * A variant of @FT_LOAD_TARGET_LIGHT optimized for horizontally
- * decimated LCD displays.
- *
- * FT_LOAD_TARGET_LCD_V ::
- * A variant of @FT_LOAD_TARGET_NORMAL optimized for vertically
- * decimated LCD displays.
- *
- * @note:
- * You should use only _one_ of the FT_LOAD_TARGET_XXX values in your
- * `load_flags'. They can't be ORed.
- *
- * If @FT_LOAD_RENDER is also set, the glyph is rendered in the
- * corresponding mode (i.e., the mode that matches the used algorithm
- * best). An exception is FT_LOAD_TARGET_MONO since it implies
- * @FT_LOAD_MONOCHROME.
- *
- * You can use a hinting algorithm that doesn't correspond to the same
- * rendering mode. As an example, it is possible to use the `light'
- * hinting algorithm and have the results rendered in horizontal LCD
- * pixel mode, with code like
- *
- * {
- * FT_Load_Glyph( face, glyph_index,
- * load_flags | FT_LOAD_TARGET_LIGHT );
- *
- * FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD );
- * }
- *
- * In general, you should stick with one rendering mode. For example,
- * switching between @FT_LOAD_TARGET_NORMAL and @FT_LOAD_TARGET_MONO
- * enforces a lot of recomputation for TrueType fonts, which is slow.
- * Another reason is caching: Selecting a different mode usually causes
- * changes in both the outlines and the rasterized bitmaps; it is thus
- * necessary to empty the cache after a mode switch to avoid false hits.
- *
- */
-#define FT_LOAD_TARGET_( x ) ( (FT_Int32)( (x) & 15 ) << 16 )
-
-#define FT_LOAD_TARGET_NORMAL FT_LOAD_TARGET_( FT_RENDER_MODE_NORMAL )
-#define FT_LOAD_TARGET_LIGHT FT_LOAD_TARGET_( FT_RENDER_MODE_LIGHT )
-#define FT_LOAD_TARGET_MONO FT_LOAD_TARGET_( FT_RENDER_MODE_MONO )
-#define FT_LOAD_TARGET_LCD FT_LOAD_TARGET_( FT_RENDER_MODE_LCD )
-#define FT_LOAD_TARGET_LCD_V FT_LOAD_TARGET_( FT_RENDER_MODE_LCD_V )
-
-
- /**************************************************************************
- *
- * @macro:
- * FT_LOAD_TARGET_MODE
- *
- * @description:
- * Return the @FT_Render_Mode corresponding to a given
- * @FT_LOAD_TARGET_XXX value.
- *
- */
-#define FT_LOAD_TARGET_MODE( x ) ( (FT_Render_Mode)( ( (x) >> 16 ) & 15 ) )
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Transform */
- /* */
- /* <Description> */
- /* Set the transformation that is applied to glyph images when they */
- /* are loaded into a glyph slot through @FT_Load_Glyph. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face object. */
- /* */
- /* <Input> */
- /* matrix :: A pointer to the transformation's 2x2 matrix. Use NULL */
- /* for the identity matrix. */
- /* delta :: A pointer to the translation vector. Use NULL for the */
- /* null vector. */
- /* */
- /* <Note> */
- /* The transformation is only applied to scalable image formats after */
- /* the glyph has been loaded. It means that hinting is unaltered by */
- /* the transformation and is performed on the character size given in */
- /* the last call to @FT_Set_Char_Size or @FT_Set_Pixel_Sizes. */
- /* */
- /* Note that this also transforms the `face.glyph.advance' field, but */
- /* *not* the values in `face.glyph.metrics'. */
- /* */
- FT_EXPORT( void )
- FT_Set_Transform( FT_Face face,
- FT_Matrix* matrix,
- FT_Vector* delta );
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Render_Mode */
- /* */
- /* <Description> */
- /* Render modes supported by FreeType~2. Each mode corresponds to a */
- /* specific type of scanline conversion performed on the outline. */
- /* */
- /* For bitmap fonts and embedded bitmaps the `bitmap->pixel_mode' */
- /* field in the @FT_GlyphSlotRec structure gives the format of the */
- /* returned bitmap. */
- /* */
- /* All modes except @FT_RENDER_MODE_MONO use 256 levels of opacity, */
- /* indicating pixel coverage. Use linear alpha blending and gamma */
- /* correction to correctly render non-monochrome glyph bitmaps onto a */
- /* surface; see @FT_Render_Glyph. */
- /* */
- /* <Values> */
- /* FT_RENDER_MODE_NORMAL :: */
- /* Default render mode; it corresponds to 8-bit anti-aliased */
- /* bitmaps. */
- /* */
- /* FT_RENDER_MODE_LIGHT :: */
- /* This is equivalent to @FT_RENDER_MODE_NORMAL. It is only */
- /* defined as a separate value because render modes are also used */
- /* indirectly to define hinting algorithm selectors. See */
- /* @FT_LOAD_TARGET_XXX for details. */
- /* */
- /* FT_RENDER_MODE_MONO :: */
- /* This mode corresponds to 1-bit bitmaps (with 2~levels of */
- /* opacity). */
- /* */
- /* FT_RENDER_MODE_LCD :: */
- /* This mode corresponds to horizontal RGB and BGR sub-pixel */
- /* displays like LCD screens. It produces 8-bit bitmaps that are */
- /* 3~times the width of the original glyph outline in pixels, and */
- /* which use the @FT_PIXEL_MODE_LCD mode. */
- /* */
- /* FT_RENDER_MODE_LCD_V :: */
- /* This mode corresponds to vertical RGB and BGR sub-pixel displays */
- /* (like PDA screens, rotated LCD displays, etc.). It produces */
- /* 8-bit bitmaps that are 3~times the height of the original */
- /* glyph outline in pixels and use the @FT_PIXEL_MODE_LCD_V mode. */
- /* */
- /* <Note> */
- /* The LCD-optimized glyph bitmaps produced by `FT_Render_Glyph' can */
- /* be filtered to reduce color-fringes by using */
- /* @FT_Library_SetLcdFilter (not active in the default builds). It */
- /* is up to the caller to either call `FT_Library_SetLcdFilter' (if */
- /* available) or do the filtering itself. */
- /* */
- /* The selected render mode only affects vector glyphs of a font. */
- /* Embedded bitmaps often have a different pixel mode like */
- /* @FT_PIXEL_MODE_MONO. You can use @FT_Bitmap_Convert to transform */
- /* them into 8-bit pixmaps. */
- /* */
- typedef enum FT_Render_Mode_
- {
- FT_RENDER_MODE_NORMAL = 0,
- FT_RENDER_MODE_LIGHT,
- FT_RENDER_MODE_MONO,
- FT_RENDER_MODE_LCD,
- FT_RENDER_MODE_LCD_V,
-
- FT_RENDER_MODE_MAX
-
- } FT_Render_Mode;
-
-
- /* these constants are deprecated; use the corresponding */
- /* `FT_Render_Mode' values instead */
-#define ft_render_mode_normal FT_RENDER_MODE_NORMAL
-#define ft_render_mode_mono FT_RENDER_MODE_MONO
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Render_Glyph */
- /* */
- /* <Description> */
- /* Convert a given glyph image to a bitmap. It does so by inspecting */
- /* the glyph image format, finding the relevant renderer, and */
- /* invoking it. */
- /* */
- /* <InOut> */
- /* slot :: A handle to the glyph slot containing the image to */
- /* convert. */
- /* */
- /* <Input> */
- /* render_mode :: The render mode used to render the glyph image into */
- /* a bitmap. See @FT_Render_Mode for a list of */
- /* possible values. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* To get meaningful results, font scaling values must be set with */
- /* functions like @FT_Set_Char_Size before calling `FT_Render_Glyph'. */
- /* */
- /* When FreeType outputs a bitmap of a glyph, it really outputs an */
- /* alpha coverage map. If a pixel is completely covered by a */
- /* filled-in outline, the bitmap contains 0xFF at that pixel, meaning */
- /* that 0xFF/0xFF fraction of that pixel is covered, meaning the */
- /* pixel is 100% black (or 0% bright). If a pixel is only 50% */
- /* covered (value 0x80), the pixel is made 50% black (50% bright or a */
- /* middle shade of grey). 0% covered means 0% black (100% bright or */
- /* white). */
- /* */
- /* On high-DPI screens like on smartphones and tablets, the pixels */
- /* are so small that their chance of being completely covered and */
- /* therefore completely black are fairly good. On the low-DPI */
- /* screens, however, the situation is different. The pixels are too */
- /* large for most of the details of a glyph and shades of gray are */
- /* the norm rather than the exception. */
- /* */
- /* This is relevant because all our screens have a second problem: */
- /* they are not linear. 1~+~1 is not~2. Twice the value does not */
- /* result in twice the brightness. When a pixel is only 50% covered, */
- /* the coverage map says 50% black, and this translates to a pixel */
- /* value of 128 when you use 8~bits per channel (0-255). However, */
- /* this does not translate to 50% brightness for that pixel on our */
- /* sRGB and gamma~2.2 screens. Due to their non-linearity, they */
- /* dwell longer in the darks and only a pixel value of about 186 */
- /* results in 50% brightness -- 128 ends up too dark on both bright */
- /* and dark backgrounds. The net result is that dark text looks */
- /* burnt-out, pixely and blotchy on bright background, bright text */
- /* too frail on dark backgrounds, and colored text on colored */
- /* background (for example, red on green) seems to have dark halos or */
- /* `dirt' around it. The situation is especially ugly for diagonal */
- /* stems like in `w' glyph shapes where the quality of FreeType's */
- /* anti-aliasing depends on the correct display of grays. On */
- /* high-DPI screens where smaller, fully black pixels reign supreme, */
- /* this doesn't matter, but on our low-DPI screens with all the gray */
- /* shades, it does. 0% and 100% brightness are the same things in */
- /* linear and non-linear space, just all the shades in-between */
- /* aren't. */
- /* */
- /* The blending function for placing text over a background is */
- /* */
- /* { */
- /* dst = alpha * src + (1 - alpha) * dst , */
- /* } */
- /* */
- /* which is known as the OVER operator. */
- /* */
- /* To correctly composite an antialiased pixel of a glyph onto a */
- /* surface, */
- /* */
- /* 1. take the foreground and background colors (e.g., in sRGB space) */
- /* and apply gamma to get them in a linear space, */
- /* */
- /* 2. use OVER to blend the two linear colors using the glyph pixel */
- /* as the alpha value (remember, the glyph bitmap is an alpha */
- /* coverage bitmap), and */
- /* */
- /* 3. apply inverse gamma to the blended pixel and write it back to */
- /* the image. */
- /* */
- /* Internal testing at Adobe found that a target inverse gamma of~1.8 */
- /* for step~3 gives good results across a wide range of displays with */
- /* an sRGB gamma curve or a similar one. */
- /* */
- /* This process can cost performance. There is an approximation that */
- /* does not need to know about the background color; see */
- /* https://bel.fi/alankila/lcd/ and */
- /* https://bel.fi/alankila/lcd/alpcor.html for details. */
- /* */
- /* *ATTENTION*: Linear blending is even more important when dealing */
- /* with subpixel-rendered glyphs to prevent color-fringing! A */
- /* subpixel-rendered glyph must first be filtered with a filter that */
- /* gives equal weight to the three color primaries and does not */
- /* exceed a sum of 0x100, see section @lcd_filtering. Then the */
- /* only difference to gray linear blending is that subpixel-rendered */
- /* linear blending is done 3~times per pixel: red foreground subpixel */
- /* to red background subpixel and so on for green and blue. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Render_Glyph( FT_GlyphSlot slot,
- FT_Render_Mode render_mode );
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Kerning_Mode */
- /* */
- /* <Description> */
- /* An enumeration to specify the format of kerning values returned by */
- /* @FT_Get_Kerning. */
- /* */
- /* <Values> */
- /* FT_KERNING_DEFAULT :: Return grid-fitted kerning distances in */
- /* 26.6 fractional pixels. */
- /* */
- /* FT_KERNING_UNFITTED :: Return un-grid-fitted kerning distances in */
- /* 26.6 fractional pixels. */
- /* */
- /* FT_KERNING_UNSCALED :: Return the kerning vector in original font */
- /* units. */
- /* */
- /* <Note> */
- /* FT_KERNING_DEFAULT returns full pixel values; it also makes */
- /* FreeType heuristically scale down kerning distances at small ppem */
- /* values so that they don't become too big. */
- /* */
- /* Both FT_KERNING_DEFAULT and FT_KERNING_UNFITTED use the current */
- /* horizontal scaling factor (as set e.g. with @FT_Set_Char_Size) to */
- /* convert font units to pixels. */
- /* */
- typedef enum FT_Kerning_Mode_
- {
- FT_KERNING_DEFAULT = 0,
- FT_KERNING_UNFITTED,
- FT_KERNING_UNSCALED
-
- } FT_Kerning_Mode;
-
-
- /* these constants are deprecated; use the corresponding */
- /* `FT_Kerning_Mode' values instead */
-#define ft_kerning_default FT_KERNING_DEFAULT
-#define ft_kerning_unfitted FT_KERNING_UNFITTED
-#define ft_kerning_unscaled FT_KERNING_UNSCALED
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Kerning */
- /* */
- /* <Description> */
- /* Return the kerning vector between two glyphs of the same face. */
- /* */
- /* <Input> */
- /* face :: A handle to a source face object. */
- /* */
- /* left_glyph :: The index of the left glyph in the kern pair. */
- /* */
- /* right_glyph :: The index of the right glyph in the kern pair. */
- /* */
- /* kern_mode :: See @FT_Kerning_Mode for more information. */
- /* Determines the scale and dimension of the returned */
- /* kerning vector. */
- /* */
- /* <Output> */
- /* akerning :: The kerning vector. This is either in font units, */
- /* fractional pixels (26.6 format), or pixels for */
- /* scalable formats, and in pixels for fixed-sizes */
- /* formats. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* Only horizontal layouts (left-to-right & right-to-left) are */
- /* supported by this method. Other layouts, or more sophisticated */
- /* kernings, are out of the scope of this API function -- they can be */
- /* implemented through format-specific interfaces. */
- /* */
- /* Kerning for OpenType fonts implemented in a `GPOS' table is not */
- /* supported; use @FT_HAS_KERNING to find out whether a font has data */
- /* that can be extracted with `FT_Get_Kerning'. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_Kerning( FT_Face face,
- FT_UInt left_glyph,
- FT_UInt right_glyph,
- FT_UInt kern_mode,
- FT_Vector *akerning );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Track_Kerning */
- /* */
- /* <Description> */
- /* Return the track kerning for a given face object at a given size. */
- /* */
- /* <Input> */
- /* face :: A handle to a source face object. */
- /* */
- /* point_size :: The point size in 16.16 fractional points. */
- /* */
- /* degree :: The degree of tightness. Increasingly negative */
- /* values represent tighter track kerning, while */
- /* increasingly positive values represent looser track */
- /* kerning. Value zero means no track kerning. */
- /* */
- /* <Output> */
- /* akerning :: The kerning in 16.16 fractional points, to be */
- /* uniformly applied between all glyphs. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* Currently, only the Type~1 font driver supports track kerning, */
- /* using data from AFM files (if attached with @FT_Attach_File or */
- /* @FT_Attach_Stream). */
- /* */
- /* Only very few AFM files come with track kerning data; please refer */
- /* to Adobe's AFM specification for more details. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_Track_Kerning( FT_Face face,
- FT_Fixed point_size,
- FT_Int degree,
- FT_Fixed* akerning );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Glyph_Name */
- /* */
- /* <Description> */
- /* Retrieve the ASCII name of a given glyph in a face. This only */
- /* works for those faces where @FT_HAS_GLYPH_NAMES(face) returns~1. */
- /* */
- /* <Input> */
- /* face :: A handle to a source face object. */
- /* */
- /* glyph_index :: The glyph index. */
- /* */
- /* buffer_max :: The maximum number of bytes available in the */
- /* buffer. */
- /* */
- /* <Output> */
- /* buffer :: A pointer to a target buffer where the name is */
- /* copied to. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* An error is returned if the face doesn't provide glyph names or if */
- /* the glyph index is invalid. In all cases of failure, the first */
- /* byte of `buffer' is set to~0 to indicate an empty name. */
- /* */
- /* The glyph name is truncated to fit within the buffer if it is too */
- /* long. The returned string is always zero-terminated. */
- /* */
- /* Be aware that FreeType reorders glyph indices internally so that */
- /* glyph index~0 always corresponds to the `missing glyph' (called */
- /* `.notdef'). */
- /* */
- /* This function always returns an error if the config macro */
- /* `FT_CONFIG_OPTION_NO_GLYPH_NAMES' is not defined in `ftoption.h'. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_Glyph_Name( FT_Face face,
- FT_UInt glyph_index,
- FT_Pointer buffer,
- FT_UInt buffer_max );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Postscript_Name */
- /* */
- /* <Description> */
- /* Retrieve the ASCII PostScript name of a given face, if available. */
- /* This only works with PostScript, TrueType, and OpenType fonts. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* <Return> */
- /* A pointer to the face's PostScript name. NULL if unavailable. */
- /* */
- /* <Note> */
- /* The returned pointer is owned by the face and is destroyed with */
- /* it. */
- /* */
- /* For variation fonts, this string changes if you select a different */
- /* instance, and you have to call `FT_Get_PostScript_Name' again to */
- /* retrieve it. FreeType follows Adobe TechNote #5902, `Generating */
- /* PostScript Names for Fonts Using OpenType Font Variations'. */
- /* */
- /* http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/font/pdfs/5902.AdobePSNameGeneration.html */
- /* */
- FT_EXPORT( const char* )
- FT_Get_Postscript_Name( FT_Face face );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Select_Charmap */
- /* */
- /* <Description> */
- /* Select a given charmap by its encoding tag (as listed in */
- /* `freetype.h'). */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face object. */
- /* */
- /* <Input> */
- /* encoding :: A handle to the selected encoding. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* This function returns an error if no charmap in the face */
- /* corresponds to the encoding queried here. */
- /* */
- /* Because many fonts contain more than a single cmap for Unicode */
- /* encoding, this function has some special code to select the one */
- /* that covers Unicode best (`best' in the sense that a UCS-4 cmap is */
- /* preferred to a UCS-2 cmap). It is thus preferable to */
- /* @FT_Set_Charmap in this case. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Select_Charmap( FT_Face face,
- FT_Encoding encoding );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Charmap */
- /* */
- /* <Description> */
- /* Select a given charmap for character code to glyph index mapping. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face object. */
- /* */
- /* <Input> */
- /* charmap :: A handle to the selected charmap. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* This function returns an error if the charmap is not part of */
- /* the face (i.e., if it is not listed in the `face->charmaps' */
- /* table). */
- /* */
- /* It also fails if an OpenType type~14 charmap is selected (which */
- /* doesn't map character codes to glyph indices at all). */
- /* */
- FT_EXPORT( FT_Error )
- FT_Set_Charmap( FT_Face face,
- FT_CharMap charmap );
-
-
- /*************************************************************************
- *
- * @function:
- * FT_Get_Charmap_Index
- *
- * @description:
- * Retrieve index of a given charmap.
- *
- * @input:
- * charmap ::
- * A handle to a charmap.
- *
- * @return:
- * The index into the array of character maps within the face to which
- * `charmap' belongs. If an error occurs, -1 is returned.
- *
- */
- FT_EXPORT( FT_Int )
- FT_Get_Charmap_Index( FT_CharMap charmap );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Char_Index */
- /* */
- /* <Description> */
- /* Return the glyph index of a given character code. This function */
- /* uses the currently selected charmap to do the mapping. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* charcode :: The character code. */
- /* */
- /* <Return> */
- /* The glyph index. 0~means `undefined character code'. */
- /* */
- /* <Note> */
- /* If you use FreeType to manipulate the contents of font files */
- /* directly, be aware that the glyph index returned by this function */
- /* doesn't always correspond to the internal indices used within the */
- /* file. This is done to ensure that value~0 always corresponds to */
- /* the `missing glyph'. If the first glyph is not named `.notdef', */
- /* then for Type~1 and Type~42 fonts, `.notdef' will be moved into */
- /* the glyph ID~0 position, and whatever was there will be moved to */
- /* the position `.notdef' had. For Type~1 fonts, if there is no */
- /* `.notdef' glyph at all, then one will be created at index~0 and */
- /* whatever was there will be moved to the last index -- Type~42 */
- /* fonts are considered invalid under this condition. */
- /* */
- FT_EXPORT( FT_UInt )
- FT_Get_Char_Index( FT_Face face,
- FT_ULong charcode );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_First_Char */
- /* */
- /* <Description> */
- /* Return the first character code in the current charmap of a given */
- /* face, together with its corresponding glyph index. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* <Output> */
- /* agindex :: Glyph index of first character code. 0~if charmap is */
- /* empty. */
- /* */
- /* <Return> */
- /* The charmap's first character code. */
- /* */
- /* <Note> */
- /* You should use this function together with @FT_Get_Next_Char to */
- /* parse all character codes available in a given charmap. The code */
- /* should look like this: */
- /* */
- /* { */
- /* FT_ULong charcode; */
- /* FT_UInt gindex; */
- /* */
- /* */
- /* charcode = FT_Get_First_Char( face, &gindex ); */
- /* while ( gindex != 0 ) */
- /* { */
- /* ... do something with (charcode,gindex) pair ... */
- /* */
- /* charcode = FT_Get_Next_Char( face, charcode, &gindex ); */
- /* } */
- /* } */
- /* */
- /* Be aware that character codes can have values up to 0xFFFFFFFF; */
- /* this might happen for non-Unicode or malformed cmaps. However, */
- /* even with regular Unicode encoding, so-called `last resort fonts' */
- /* (using SFNT cmap format 13, see function @FT_Get_CMap_Format) */
- /* normally have entries for all Unicode characters up to 0x1FFFFF, */
- /* which can cause *a lot* of iterations. */
- /* */
- /* Note that `*agindex' is set to~0 if the charmap is empty. The */
- /* result itself can be~0 in two cases: if the charmap is empty or */
- /* if the value~0 is the first valid character code. */
- /* */
- FT_EXPORT( FT_ULong )
- FT_Get_First_Char( FT_Face face,
- FT_UInt *agindex );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Next_Char */
- /* */
- /* <Description> */
- /* Return the next character code in the current charmap of a given */
- /* face following the value `char_code', as well as the corresponding */
- /* glyph index. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* char_code :: The starting character code. */
- /* */
- /* <Output> */
- /* agindex :: Glyph index of next character code. 0~if charmap */
- /* is empty. */
- /* */
- /* <Return> */
- /* The charmap's next character code. */
- /* */
- /* <Note> */
- /* You should use this function with @FT_Get_First_Char to walk */
- /* over all character codes available in a given charmap. See the */
- /* note for that function for a simple code example. */
- /* */
- /* Note that `*agindex' is set to~0 when there are no more codes in */
- /* the charmap. */
- /* */
- FT_EXPORT( FT_ULong )
- FT_Get_Next_Char( FT_Face face,
- FT_ULong char_code,
- FT_UInt *agindex );
-
-
- /*************************************************************************
- *
- * @function:
- * FT_Face_Properties
- *
- * @description:
- * Set or override certain (library or module-wide) properties on a
- * face-by-face basis. Useful for finer-grained control and avoiding
- * locks on shared structures (threads can modify their own faces as
- * they see fit).
- *
- * Contrary to @FT_Property_Set, this function uses @FT_Parameter so
- * that you can pass multiple properties to the target face in one call.
- * Note that only a subset of the available properties can be
- * controlled.
- *
- * * Stem darkening (@FT_PARAM_TAG_STEM_DARKENING, corresponding to the
- * property `no-stem-darkening' provided by the `autofit' and `cff'
- * modules; see @no-stem-darkening[autofit] and
- * @no-stem-darkening[cff]).
- *
- * * LCD filter weights (@FT_PARAM_TAG_LCD_FILTER_WEIGHTS, corresponding
- * to function @FT_Library_SetLcdFilterWeights).
- *
- * * Seed value for the CFF `random' operator
- * (@FT_PARAM_TAG_RANDOM_SEED, corresponding to the `random-seed'
- * property provided by the `cff' module; see @random-seed).
- *
- * Pass NULL as `data' in @FT_Parameter for a given tag to reset the
- * option and use the library or module default again.
- *
- * @input:
- * face ::
- * A handle to the source face object.
- *
- * num_properties ::
- * The number of properties that follow.
- *
- * properties ::
- * A handle to an @FT_Parameter array with `num_properties' elements.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * Here an example that sets three properties. You must define
- * FT_CONFIG_OPTION_SUBPIXEL_RENDERING to make the LCD filter examples
- * work.
- *
- * {
- * FT_Parameter property1;
- * FT_Bool darken_stems = 1;
- *
- * FT_Parameter property2;
- * FT_LcdFiveTapFilter custom_weight =
- * { 0x11, 0x44, 0x56, 0x44, 0x11 };
- *
- * FT_Parameter property3;
- * FT_Int32 random_seed = 314159265;
- *
- * FT_Parameter properties[3] = { property1,
- * property2,
- * property3 };
- *
- *
- * property1.tag = FT_PARAM_TAG_STEM_DARKENING;
- * property1.data = &darken_stems;
- *
- * property2.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS;
- * property2.data = custom_weight;
- *
- * property3.tag = FT_PARAM_TAG_RANDOM_SEED;
- * property3.data = &random_seed;
- *
- * FT_Face_Properties( face, 3, properties );
- * }
- *
- * The next example resets a single property to its default value.
- *
- * {
- * FT_Parameter property;
- *
- *
- * property.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS;
- * property.data = NULL;
- *
- * FT_Face_Properties( face, 1, &property );
- * }
- *
- */
- FT_EXPORT( FT_Error )
- FT_Face_Properties( FT_Face face,
- FT_UInt num_properties,
- FT_Parameter* properties );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Name_Index */
- /* */
- /* <Description> */
- /* Return the glyph index of a given glyph name. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* glyph_name :: The glyph name. */
- /* */
- /* <Return> */
- /* The glyph index. 0~means `undefined character code'. */
- /* */
- FT_EXPORT( FT_UInt )
- FT_Get_Name_Index( FT_Face face,
- FT_String* glyph_name );
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_SUBGLYPH_FLAG_XXX
- *
- * @description:
- * A list of constants describing subglyphs. Please refer to the
- * `glyf' table description in the OpenType specification for the
- * meaning of the various flags (which get synthesized for
- * non-OpenType subglyphs).
- *
- * @values:
- * FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS ::
- * FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES ::
- * FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID ::
- * FT_SUBGLYPH_FLAG_SCALE ::
- * FT_SUBGLYPH_FLAG_XY_SCALE ::
- * FT_SUBGLYPH_FLAG_2X2 ::
- * FT_SUBGLYPH_FLAG_USE_MY_METRICS ::
- *
- */
-#define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS 1
-#define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES 2
-#define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID 4
-#define FT_SUBGLYPH_FLAG_SCALE 8
-#define FT_SUBGLYPH_FLAG_XY_SCALE 0x40
-#define FT_SUBGLYPH_FLAG_2X2 0x80
-#define FT_SUBGLYPH_FLAG_USE_MY_METRICS 0x200
-
-
- /*************************************************************************
- *
- * @func:
- * FT_Get_SubGlyph_Info
- *
- * @description:
- * Retrieve a description of a given subglyph. Only use it if
- * `glyph->format' is @FT_GLYPH_FORMAT_COMPOSITE; an error is
- * returned otherwise.
- *
- * @input:
- * glyph ::
- * The source glyph slot.
- *
- * sub_index ::
- * The index of the subglyph. Must be less than
- * `glyph->num_subglyphs'.
- *
- * @output:
- * p_index ::
- * The glyph index of the subglyph.
- *
- * p_flags ::
- * The subglyph flags, see @FT_SUBGLYPH_FLAG_XXX.
- *
- * p_arg1 ::
- * The subglyph's first argument (if any).
- *
- * p_arg2 ::
- * The subglyph's second argument (if any).
- *
- * p_transform ::
- * The subglyph transformation (if any).
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * The values of `*p_arg1', `*p_arg2', and `*p_transform' must be
- * interpreted depending on the flags returned in `*p_flags'. See the
- * OpenType specification for details.
- *
- */
- FT_EXPORT( FT_Error )
- FT_Get_SubGlyph_Info( FT_GlyphSlot glyph,
- FT_UInt sub_index,
- FT_Int *p_index,
- FT_UInt *p_flags,
- FT_Int *p_arg1,
- FT_Int *p_arg2,
- FT_Matrix *p_transform );
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_FSTYPE_XXX */
- /* */
- /* <Description> */
- /* A list of bit flags used in the `fsType' field of the OS/2 table */
- /* in a TrueType or OpenType font and the `FSType' entry in a */
- /* PostScript font. These bit flags are returned by */
- /* @FT_Get_FSType_Flags; they inform client applications of embedding */
- /* and subsetting restrictions associated with a font. */
- /* */
- /* See */
- /* http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf */
- /* for more details. */
- /* */
- /* <Values> */
- /* FT_FSTYPE_INSTALLABLE_EMBEDDING :: */
- /* Fonts with no fsType bit set may be embedded and permanently */
- /* installed on the remote system by an application. */
- /* */
- /* FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING :: */
- /* Fonts that have only this bit set must not be modified, embedded */
- /* or exchanged in any manner without first obtaining permission of */
- /* the font software copyright owner. */
- /* */
- /* FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING :: */
- /* The font may be embedded and temporarily loaded on the remote */
- /* system. Documents containing Preview & Print fonts must be */
- /* opened `read-only'; no edits can be applied to the document. */
- /* */
- /* FT_FSTYPE_EDITABLE_EMBEDDING :: */
- /* The font may be embedded but must only be installed temporarily */
- /* on other systems. In contrast to Preview & Print fonts, */
- /* documents containing editable fonts may be opened for reading, */
- /* editing is permitted, and changes may be saved. */
- /* */
- /* FT_FSTYPE_NO_SUBSETTING :: */
- /* The font may not be subsetted prior to embedding. */
- /* */
- /* FT_FSTYPE_BITMAP_EMBEDDING_ONLY :: */
- /* Only bitmaps contained in the font may be embedded; no outline */
- /* data may be embedded. If there are no bitmaps available in the */
- /* font, then the font is unembeddable. */
- /* */
- /* <Note> */
- /* The flags are ORed together, thus more than a single value can be */
- /* returned. */
- /* */
- /* While the `fsType' flags can indicate that a font may be embedded, */
- /* a license with the font vendor may be separately required to use */
- /* the font in this way. */
- /* */
-#define FT_FSTYPE_INSTALLABLE_EMBEDDING 0x0000
-#define FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING 0x0002
-#define FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING 0x0004
-#define FT_FSTYPE_EDITABLE_EMBEDDING 0x0008
-#define FT_FSTYPE_NO_SUBSETTING 0x0100
-#define FT_FSTYPE_BITMAP_EMBEDDING_ONLY 0x0200
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_FSType_Flags */
- /* */
- /* <Description> */
- /* Return the `fsType' flags for a font. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* <Return> */
- /* The `fsType' flags, see @FT_FSTYPE_XXX. */
- /* */
- /* <Note> */
- /* Use this function rather than directly reading the `fs_type' field */
- /* in the @PS_FontInfoRec structure, which is only guaranteed to */
- /* return the correct results for Type~1 fonts. */
- /* */
- /* <Since> */
- /* 2.3.8 */
- /* */
- FT_EXPORT( FT_UShort )
- FT_Get_FSType_Flags( FT_Face face );
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* glyph_variants */
- /* */
- /* <Title> */
- /* Unicode Variation Sequences */
- /* */
- /* <Abstract> */
- /* The FreeType~2 interface to Unicode Variation Sequences (UVS), */
- /* using the SFNT cmap format~14. */
- /* */
- /* <Description> */
- /* Many characters, especially for CJK scripts, have variant forms. */
- /* They are a sort of grey area somewhere between being totally */
- /* irrelevant and semantically distinct; for this reason, the Unicode */
- /* consortium decided to introduce Variation Sequences (VS), */
- /* consisting of a Unicode base character and a variation selector */
- /* instead of further extending the already huge number of */
- /* characters. */
- /* */
- /* Unicode maintains two different sets, namely `Standardized */
- /* Variation Sequences' and registered `Ideographic Variation */
- /* Sequences' (IVS), collected in the `Ideographic Variation */
- /* Database' (IVD). */
- /* */
- /* http://unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt */
- /* http://unicode.org/reports/tr37/ */
- /* http://unicode.org/ivd/ */
- /* */
- /* To date (January 2017), the character with the most ideographic */
- /* variations is U+9089, having 32 such IVS. */
- /* */
- /* Three Mongolian Variation Selectors have the values U+180B-U+180D; */
- /* 256 generic Variation Selectors are encoded in the ranges */
- /* U+FE00-U+FE0F and U+E0100-U+E01EF. IVS currently use Variation */
- /* Selectors from the range U+E0100-U+E01EF only. */
- /* */
- /* A VS consists of the base character value followed by a single */
- /* Variation Selector. For example, to get the first variation of */
- /* U+9089, you have to write the character sequence `U+9089 U+E0100'. */
- /* */
- /* Adobe and MS decided to support both standardized and ideographic */
- /* VS with a new cmap subtable (format~14). It is an odd subtable */
- /* because it is not a mapping of input code points to glyphs, but */
- /* contains lists of all variations supported by the font. */
- /* */
- /* A variation may be either `default' or `non-default' for a given */
- /* font. A default variation is the one you will get for that code */
- /* point if you look it up in the standard Unicode cmap. A */
- /* non-default variation is a different glyph. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Face_GetCharVariantIndex */
- /* */
- /* <Description> */
- /* Return the glyph index of a given character code as modified by */
- /* the variation selector. */
- /* */
- /* <Input> */
- /* face :: */
- /* A handle to the source face object. */
- /* */
- /* charcode :: */
- /* The character code point in Unicode. */
- /* */
- /* variantSelector :: */
- /* The Unicode code point of the variation selector. */
- /* */
- /* <Return> */
- /* The glyph index. 0~means either `undefined character code', or */
- /* `undefined selector code', or `no variation selector cmap */
- /* subtable', or `current CharMap is not Unicode'. */
- /* */
- /* <Note> */
- /* If you use FreeType to manipulate the contents of font files */
- /* directly, be aware that the glyph index returned by this function */
- /* doesn't always correspond to the internal indices used within */
- /* the file. This is done to ensure that value~0 always corresponds */
- /* to the `missing glyph'. */
- /* */
- /* This function is only meaningful if */
- /* a) the font has a variation selector cmap sub table, */
- /* and */
- /* b) the current charmap has a Unicode encoding. */
- /* */
- /* <Since> */
- /* 2.3.6 */
- /* */
- FT_EXPORT( FT_UInt )
- FT_Face_GetCharVariantIndex( FT_Face face,
- FT_ULong charcode,
- FT_ULong variantSelector );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Face_GetCharVariantIsDefault */
- /* */
- /* <Description> */
- /* Check whether this variation of this Unicode character is the one */
- /* to be found in the `cmap'. */
- /* */
- /* <Input> */
- /* face :: */
- /* A handle to the source face object. */
- /* */
- /* charcode :: */
- /* The character codepoint in Unicode. */
- /* */
- /* variantSelector :: */
- /* The Unicode codepoint of the variation selector. */
- /* */
- /* <Return> */
- /* 1~if found in the standard (Unicode) cmap, 0~if found in the */
- /* variation selector cmap, or -1 if it is not a variation. */
- /* */
- /* <Note> */
- /* This function is only meaningful if the font has a variation */
- /* selector cmap subtable. */
- /* */
- /* <Since> */
- /* 2.3.6 */
- /* */
- FT_EXPORT( FT_Int )
- FT_Face_GetCharVariantIsDefault( FT_Face face,
- FT_ULong charcode,
- FT_ULong variantSelector );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Face_GetVariantSelectors */
- /* */
- /* <Description> */
- /* Return a zero-terminated list of Unicode variation selectors found */
- /* in the font. */
- /* */
- /* <Input> */
- /* face :: */
- /* A handle to the source face object. */
- /* */
- /* <Return> */
- /* A pointer to an array of selector code points, or NULL if there is */
- /* no valid variation selector cmap subtable. */
- /* */
- /* <Note> */
- /* The last item in the array is~0; the array is owned by the */
- /* @FT_Face object but can be overwritten or released on the next */
- /* call to a FreeType function. */
- /* */
- /* <Since> */
- /* 2.3.6 */
- /* */
- FT_EXPORT( FT_UInt32* )
- FT_Face_GetVariantSelectors( FT_Face face );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Face_GetVariantsOfChar */
- /* */
- /* <Description> */
- /* Return a zero-terminated list of Unicode variation selectors found */
- /* for the specified character code. */
- /* */
- /* <Input> */
- /* face :: */
- /* A handle to the source face object. */
- /* */
- /* charcode :: */
- /* The character codepoint in Unicode. */
- /* */
- /* <Return> */
- /* A pointer to an array of variation selector code points that are */
- /* active for the given character, or NULL if the corresponding list */
- /* is empty. */
- /* */
- /* <Note> */
- /* The last item in the array is~0; the array is owned by the */
- /* @FT_Face object but can be overwritten or released on the next */
- /* call to a FreeType function. */
- /* */
- /* <Since> */
- /* 2.3.6 */
- /* */
- FT_EXPORT( FT_UInt32* )
- FT_Face_GetVariantsOfChar( FT_Face face,
- FT_ULong charcode );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Face_GetCharsOfVariant */
- /* */
- /* <Description> */
- /* Return a zero-terminated list of Unicode character codes found for */
- /* the specified variation selector. */
- /* */
- /* <Input> */
- /* face :: */
- /* A handle to the source face object. */
- /* */
- /* variantSelector :: */
- /* The variation selector code point in Unicode. */
- /* */
- /* <Return> */
- /* A list of all the code points that are specified by this selector */
- /* (both default and non-default codes are returned) or NULL if there */
- /* is no valid cmap or the variation selector is invalid. */
- /* */
- /* <Note> */
- /* The last item in the array is~0; the array is owned by the */
- /* @FT_Face object but can be overwritten or released on the next */
- /* call to a FreeType function. */
- /* */
- /* <Since> */
- /* 2.3.6 */
- /* */
- FT_EXPORT( FT_UInt32* )
- FT_Face_GetCharsOfVariant( FT_Face face,
- FT_ULong variantSelector );
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* computations */
- /* */
- /* <Title> */
- /* Computations */
- /* */
- /* <Abstract> */
- /* Crunching fixed numbers and vectors. */
- /* */
- /* <Description> */
- /* This section contains various functions used to perform */
- /* computations on 16.16 fixed-float numbers or 2d vectors. */
- /* */
- /* <Order> */
- /* FT_MulDiv */
- /* FT_MulFix */
- /* FT_DivFix */
- /* FT_RoundFix */
- /* FT_CeilFix */
- /* FT_FloorFix */
- /* FT_Vector_Transform */
- /* FT_Matrix_Multiply */
- /* FT_Matrix_Invert */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_MulDiv */
- /* */
- /* <Description> */
- /* Compute `(a*b)/c' with maximum accuracy, using a 64-bit */
- /* intermediate integer whenever necessary. */
- /* */
- /* This function isn't necessarily as fast as some processor specific */
- /* operations, but is at least completely portable. */
- /* */
- /* <Input> */
- /* a :: The first multiplier. */
- /* */
- /* b :: The second multiplier. */
- /* */
- /* c :: The divisor. */
- /* */
- /* <Return> */
- /* The result of `(a*b)/c'. This function never traps when trying to */
- /* divide by zero; it simply returns `MaxInt' or `MinInt' depending */
- /* on the signs of `a' and `b'. */
- /* */
- FT_EXPORT( FT_Long )
- FT_MulDiv( FT_Long a,
- FT_Long b,
- FT_Long c );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_MulFix */
- /* */
- /* <Description> */
- /* Compute `(a*b)/0x10000' with maximum accuracy. Its main use is to */
- /* multiply a given value by a 16.16 fixed-point factor. */
- /* */
- /* <Input> */
- /* a :: The first multiplier. */
- /* */
- /* b :: The second multiplier. Use a 16.16 factor here whenever */
- /* possible (see note below). */
- /* */
- /* <Return> */
- /* The result of `(a*b)/0x10000'. */
- /* */
- /* <Note> */
- /* This function has been optimized for the case where the absolute */
- /* value of `a' is less than 2048, and `b' is a 16.16 scaling factor. */
- /* As this happens mainly when scaling from notional units to */
- /* fractional pixels in FreeType, it resulted in noticeable speed */
- /* improvements between versions 2.x and 1.x. */
- /* */
- /* As a conclusion, always try to place a 16.16 factor as the */
- /* _second_ argument of this function; this can make a great */
- /* difference. */
- /* */
- FT_EXPORT( FT_Long )
- FT_MulFix( FT_Long a,
- FT_Long b );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_DivFix */
- /* */
- /* <Description> */
- /* Compute `(a*0x10000)/b' with maximum accuracy. Its main use is to */
- /* divide a given value by a 16.16 fixed-point factor. */
- /* */
- /* <Input> */
- /* a :: The numerator. */
- /* */
- /* b :: The denominator. Use a 16.16 factor here. */
- /* */
- /* <Return> */
- /* The result of `(a*0x10000)/b'. */
- /* */
- FT_EXPORT( FT_Long )
- FT_DivFix( FT_Long a,
- FT_Long b );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_RoundFix */
- /* */
- /* <Description> */
- /* Round a 16.16 fixed number. */
- /* */
- /* <Input> */
- /* a :: The number to be rounded. */
- /* */
- /* <Return> */
- /* `a' rounded to the nearest 16.16 fixed integer, halfway cases away */
- /* from zero. */
- /* */
- /* <Note> */
- /* The function uses wrap-around arithmetic. */
- /* */
- FT_EXPORT( FT_Fixed )
- FT_RoundFix( FT_Fixed a );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_CeilFix */
- /* */
- /* <Description> */
- /* Compute the smallest following integer of a 16.16 fixed number. */
- /* */
- /* <Input> */
- /* a :: The number for which the ceiling function is to be computed. */
- /* */
- /* <Return> */
- /* `a' rounded towards plus infinity. */
- /* */
- /* <Note> */
- /* The function uses wrap-around arithmetic. */
- /* */
- FT_EXPORT( FT_Fixed )
- FT_CeilFix( FT_Fixed a );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_FloorFix */
- /* */
- /* <Description> */
- /* Compute the largest previous integer of a 16.16 fixed number. */
- /* */
- /* <Input> */
- /* a :: The number for which the floor function is to be computed. */
- /* */
- /* <Return> */
- /* `a' rounded towards minus infinity. */
- /* */
- FT_EXPORT( FT_Fixed )
- FT_FloorFix( FT_Fixed a );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Vector_Transform */
- /* */
- /* <Description> */
- /* Transform a single vector through a 2x2 matrix. */
- /* */
- /* <InOut> */
- /* vector :: The target vector to transform. */
- /* */
- /* <Input> */
- /* matrix :: A pointer to the source 2x2 matrix. */
- /* */
- /* <Note> */
- /* The result is undefined if either `vector' or `matrix' is invalid. */
- /* */
- FT_EXPORT( void )
- FT_Vector_Transform( FT_Vector* vec,
- const FT_Matrix* matrix );
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* version */
- /* */
- /* <Title> */
- /* FreeType Version */
- /* */
- /* <Abstract> */
- /* Functions and macros related to FreeType versions. */
- /* */
- /* <Description> */
- /* Note that those functions and macros are of limited use because */
- /* even a new release of FreeType with only documentation changes */
- /* increases the version number. */
- /* */
- /* <Order> */
- /* FT_Library_Version */
- /* */
- /* FREETYPE_MAJOR */
- /* FREETYPE_MINOR */
- /* FREETYPE_PATCH */
- /* */
- /* FT_Face_CheckTrueTypePatents */
- /* FT_Face_SetUnpatentedHinting */
- /* */
- /* FREETYPE_XXX */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************
- *
- * @enum:
- * FREETYPE_XXX
- *
- * @description:
- * These three macros identify the FreeType source code version.
- * Use @FT_Library_Version to access them at runtime.
- *
- * @values:
- * FREETYPE_MAJOR :: The major version number.
- * FREETYPE_MINOR :: The minor version number.
- * FREETYPE_PATCH :: The patch level.
- *
- * @note:
- * The version number of FreeType if built as a dynamic link library
- * with the `libtool' package is _not_ controlled by these three
- * macros.
- *
- */
-#define FREETYPE_MAJOR 2
-#define FREETYPE_MINOR 8
-#define FREETYPE_PATCH 0
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Library_Version */
- /* */
- /* <Description> */
- /* Return the version of the FreeType library being used. This is */
- /* useful when dynamically linking to the library, since one cannot */
- /* use the macros @FREETYPE_MAJOR, @FREETYPE_MINOR, and */
- /* @FREETYPE_PATCH. */
- /* */
- /* <Input> */
- /* library :: A source library handle. */
- /* */
- /* <Output> */
- /* amajor :: The major version number. */
- /* */
- /* aminor :: The minor version number. */
- /* */
- /* apatch :: The patch version number. */
- /* */
- /* <Note> */
- /* The reason why this function takes a `library' argument is because */
- /* certain programs implement library initialization in a custom way */
- /* that doesn't use @FT_Init_FreeType. */
- /* */
- /* In such cases, the library version might not be available before */
- /* the library object has been created. */
- /* */
- FT_EXPORT( void )
- FT_Library_Version( FT_Library library,
- FT_Int *amajor,
- FT_Int *aminor,
- FT_Int *apatch );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Face_CheckTrueTypePatents */
- /* */
- /* <Description> */
- /* Deprecated, does nothing. */
- /* */
- /* <Input> */
- /* face :: A face handle. */
- /* */
- /* <Return> */
- /* Always returns false. */
- /* */
- /* <Note> */
- /* Since May 2010, TrueType hinting is no longer patented. */
- /* */
- /* <Since> */
- /* 2.3.5 */
- /* */
- FT_EXPORT( FT_Bool )
- FT_Face_CheckTrueTypePatents( FT_Face face );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Face_SetUnpatentedHinting */
- /* */
- /* <Description> */
- /* Deprecated, does nothing. */
- /* */
- /* <Input> */
- /* face :: A face handle. */
- /* */
- /* value :: New boolean setting. */
- /* */
- /* <Return> */
- /* Always returns false. */
- /* */
- /* <Note> */
- /* Since May 2010, TrueType hinting is no longer patented. */
- /* */
- /* <Since> */
- /* 2.3.5 */
- /* */
- FT_EXPORT( FT_Bool )
- FT_Face_SetUnpatentedHinting( FT_Face face,
- FT_Bool value );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FREETYPE_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftadvanc.h b/include/freetype/ftadvanc.h
deleted file mode 100644
index dea96e0db..000000000
--- a/include/freetype/ftadvanc.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftadvanc.h */
-/* */
-/* Quick computation of advance widths (specification only). */
-/* */
-/* Copyright 2008-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTADVANC_H_
-#define FTADVANC_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /**************************************************************************
- *
- * @section:
- * quick_advance
- *
- * @title:
- * Quick retrieval of advance values
- *
- * @abstract:
- * Retrieve horizontal and vertical advance values without processing
- * glyph outlines, if possible.
- *
- * @description:
- * This section contains functions to quickly extract advance values
- * without handling glyph outlines, if possible.
- *
- * @order:
- * FT_Get_Advance
- * FT_Get_Advances
- *
- */
-
-
- /*************************************************************************/
- /* */
- /* <Const> */
- /* FT_ADVANCE_FLAG_FAST_ONLY */
- /* */
- /* <Description> */
- /* A bit-flag to be OR-ed with the `flags' parameter of the */
- /* @FT_Get_Advance and @FT_Get_Advances functions. */
- /* */
- /* If set, it indicates that you want these functions to fail if the */
- /* corresponding hinting mode or font driver doesn't allow for very */
- /* quick advance computation. */
- /* */
- /* Typically, glyphs that are either unscaled, unhinted, bitmapped, */
- /* or light-hinted can have their advance width computed very */
- /* quickly. */
- /* */
- /* Normal and bytecode hinted modes that require loading, scaling, */
- /* and hinting of the glyph outline, are extremely slow by */
- /* comparison. */
- /* */
-#define FT_ADVANCE_FLAG_FAST_ONLY 0x20000000L
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Advance */
- /* */
- /* <Description> */
- /* Retrieve the advance value of a given glyph outline in an */
- /* @FT_Face. */
- /* */
- /* <Input> */
- /* face :: The source @FT_Face handle. */
- /* */
- /* gindex :: The glyph index. */
- /* */
- /* load_flags :: A set of bit flags similar to those used when */
- /* calling @FT_Load_Glyph, used to determine what kind */
- /* of advances you need. */
- /* <Output> */
- /* padvance :: The advance value. If scaling is performed (based on */
- /* the value of `load_flags'), the advance value is in */
- /* 16.16 format. Otherwise, it is in font units. */
- /* */
- /* If @FT_LOAD_VERTICAL_LAYOUT is set, this is the */
- /* vertical advance corresponding to a vertical layout. */
- /* Otherwise, it is the horizontal advance in a */
- /* horizontal layout. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and */
- /* if the corresponding font backend doesn't have a quick way to */
- /* retrieve the advances. */
- /* */
- /* A scaled advance is returned in 16.16 format but isn't transformed */
- /* by the affine transformation specified by @FT_Set_Transform. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_Advance( FT_Face face,
- FT_UInt gindex,
- FT_Int32 load_flags,
- FT_Fixed *padvance );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Advances */
- /* */
- /* <Description> */
- /* Retrieve the advance values of several glyph outlines in an */
- /* @FT_Face. */
- /* */
- /* <Input> */
- /* face :: The source @FT_Face handle. */
- /* */
- /* start :: The first glyph index. */
- /* */
- /* count :: The number of advance values you want to retrieve. */
- /* */
- /* load_flags :: A set of bit flags similar to those used when */
- /* calling @FT_Load_Glyph. */
- /* */
- /* <Output> */
- /* padvance :: The advance values. This array, to be provided by the */
- /* caller, must contain at least `count' elements. */
- /* */
- /* If scaling is performed (based on the value of */
- /* `load_flags'), the advance values are in 16.16 format. */
- /* Otherwise, they are in font units. */
- /* */
- /* If @FT_LOAD_VERTICAL_LAYOUT is set, these are the */
- /* vertical advances corresponding to a vertical layout. */
- /* Otherwise, they are the horizontal advances in a */
- /* horizontal layout. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and */
- /* if the corresponding font backend doesn't have a quick way to */
- /* retrieve the advances. */
- /* */
- /* Scaled advances are returned in 16.16 format but aren't */
- /* transformed by the affine transformation specified by */
- /* @FT_Set_Transform. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_Advances( FT_Face face,
- FT_UInt start,
- FT_UInt count,
- FT_Int32 load_flags,
- FT_Fixed *padvances );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTADVANC_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftautoh.h b/include/freetype/ftautoh.h
deleted file mode 100644
index abd540f0b..000000000
--- a/include/freetype/ftautoh.h
+++ /dev/null
@@ -1,533 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftautoh.h */
-/* */
-/* FreeType API for controlling the auto-hinter (specification only). */
-/* */
-/* Copyright 2012-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTAUTOH_H_
-#define FTAUTOH_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /**************************************************************************
- *
- * @section:
- * auto_hinter
- *
- * @title:
- * The auto-hinter
- *
- * @abstract:
- * Controlling the auto-hinting module.
- *
- * @description:
- * While FreeType's auto-hinter doesn't expose API functions by itself,
- * it is possible to control its behaviour with @FT_Property_Set and
- * @FT_Property_Get. The following lists the available properties
- * together with the necessary macros and structures.
- *
- * Note that the auto-hinter's module name is `autofitter' for
- * historical reasons.
- *
- */
-
-
- /**************************************************************************
- *
- * @property:
- * glyph-to-script-map
- *
- * @description:
- * *Experimental* *only*
- *
- * The auto-hinter provides various script modules to hint glyphs.
- * Examples of supported scripts are Latin or CJK. Before a glyph is
- * auto-hinted, the Unicode character map of the font gets examined, and
- * the script is then determined based on Unicode character ranges, see
- * below.
- *
- * OpenType fonts, however, often provide much more glyphs than
- * character codes (small caps, superscripts, ligatures, swashes, etc.),
- * to be controlled by so-called `features'. Handling OpenType features
- * can be quite complicated and thus needs a separate library on top of
- * FreeType.
- *
- * The mapping between glyph indices and scripts (in the auto-hinter
- * sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an
- * array with `num_glyphs' elements, as found in the font's @FT_Face
- * structure. The `glyph-to-script-map' property returns a pointer to
- * this array, which can be modified as needed. Note that the
- * modification should happen before the first glyph gets processed by
- * the auto-hinter so that the global analysis of the font shapes
- * actually uses the modified mapping.
- *
- * The following example code demonstrates how to access it (omitting
- * the error handling).
- *
- * {
- * FT_Library library;
- * FT_Face face;
- * FT_Prop_GlyphToScriptMap prop;
- *
- *
- * FT_Init_FreeType( &library );
- * FT_New_Face( library, "foo.ttf", 0, &face );
- *
- * prop.face = face;
- *
- * FT_Property_Get( library, "autofitter",
- * "glyph-to-script-map", &prop );
- *
- * // adjust `prop.map' as needed right here
- *
- * FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT );
- * }
- *
- */
-
-
- /**************************************************************************
- *
- * @enum:
- * FT_AUTOHINTER_SCRIPT_XXX
- *
- * @description:
- * *Experimental* *only*
- *
- * A list of constants used for the @glyph-to-script-map property to
- * specify the script submodule the auto-hinter should use for hinting a
- * particular glyph.
- *
- * @values:
- * FT_AUTOHINTER_SCRIPT_NONE ::
- * Don't auto-hint this glyph.
- *
- * FT_AUTOHINTER_SCRIPT_LATIN ::
- * Apply the latin auto-hinter. For the auto-hinter, `latin' is a
- * very broad term, including Cyrillic and Greek also since characters
- * from those scripts share the same design constraints.
- *
- * By default, characters from the following Unicode ranges are
- * assigned to this submodule.
- *
- * {
- * U+0020 - U+007F // Basic Latin (no control characters)
- * U+00A0 - U+00FF // Latin-1 Supplement (no control characters)
- * U+0100 - U+017F // Latin Extended-A
- * U+0180 - U+024F // Latin Extended-B
- * U+0250 - U+02AF // IPA Extensions
- * U+02B0 - U+02FF // Spacing Modifier Letters
- * U+0300 - U+036F // Combining Diacritical Marks
- * U+0370 - U+03FF // Greek and Coptic
- * U+0400 - U+04FF // Cyrillic
- * U+0500 - U+052F // Cyrillic Supplement
- * U+1D00 - U+1D7F // Phonetic Extensions
- * U+1D80 - U+1DBF // Phonetic Extensions Supplement
- * U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement
- * U+1E00 - U+1EFF // Latin Extended Additional
- * U+1F00 - U+1FFF // Greek Extended
- * U+2000 - U+206F // General Punctuation
- * U+2070 - U+209F // Superscripts and Subscripts
- * U+20A0 - U+20CF // Currency Symbols
- * U+2150 - U+218F // Number Forms
- * U+2460 - U+24FF // Enclosed Alphanumerics
- * U+2C60 - U+2C7F // Latin Extended-C
- * U+2DE0 - U+2DFF // Cyrillic Extended-A
- * U+2E00 - U+2E7F // Supplemental Punctuation
- * U+A640 - U+A69F // Cyrillic Extended-B
- * U+A720 - U+A7FF // Latin Extended-D
- * U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures)
- * U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols
- * U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement
- * }
- *
- * FT_AUTOHINTER_SCRIPT_CJK ::
- * Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old
- * Vietnamese, and some other scripts.
- *
- * By default, characters from the following Unicode ranges are
- * assigned to this submodule.
- *
- * {
- * U+1100 - U+11FF // Hangul Jamo
- * U+2E80 - U+2EFF // CJK Radicals Supplement
- * U+2F00 - U+2FDF // Kangxi Radicals
- * U+2FF0 - U+2FFF // Ideographic Description Characters
- * U+3000 - U+303F // CJK Symbols and Punctuation
- * U+3040 - U+309F // Hiragana
- * U+30A0 - U+30FF // Katakana
- * U+3100 - U+312F // Bopomofo
- * U+3130 - U+318F // Hangul Compatibility Jamo
- * U+3190 - U+319F // Kanbun
- * U+31A0 - U+31BF // Bopomofo Extended
- * U+31C0 - U+31EF // CJK Strokes
- * U+31F0 - U+31FF // Katakana Phonetic Extensions
- * U+3200 - U+32FF // Enclosed CJK Letters and Months
- * U+3300 - U+33FF // CJK Compatibility
- * U+3400 - U+4DBF // CJK Unified Ideographs Extension A
- * U+4DC0 - U+4DFF // Yijing Hexagram Symbols
- * U+4E00 - U+9FFF // CJK Unified Ideographs
- * U+A960 - U+A97F // Hangul Jamo Extended-A
- * U+AC00 - U+D7AF // Hangul Syllables
- * U+D7B0 - U+D7FF // Hangul Jamo Extended-B
- * U+F900 - U+FAFF // CJK Compatibility Ideographs
- * U+FE10 - U+FE1F // Vertical forms
- * U+FE30 - U+FE4F // CJK Compatibility Forms
- * U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms
- * U+1B000 - U+1B0FF // Kana Supplement
- * U+1D300 - U+1D35F // Tai Xuan Hing Symbols
- * U+1F200 - U+1F2FF // Enclosed Ideographic Supplement
- * U+20000 - U+2A6DF // CJK Unified Ideographs Extension B
- * U+2A700 - U+2B73F // CJK Unified Ideographs Extension C
- * U+2B740 - U+2B81F // CJK Unified Ideographs Extension D
- * U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement
- * }
- *
- * FT_AUTOHINTER_SCRIPT_INDIC ::
- * Apply the indic auto-hinter, covering all major scripts from the
- * Indian sub-continent and some other related scripts like Thai, Lao,
- * or Tibetan.
- *
- * By default, characters from the following Unicode ranges are
- * assigned to this submodule.
- *
- * {
- * U+0900 - U+0DFF // Indic Range
- * U+0F00 - U+0FFF // Tibetan
- * U+1900 - U+194F // Limbu
- * U+1B80 - U+1BBF // Sundanese
- * U+A800 - U+A82F // Syloti Nagri
- * U+ABC0 - U+ABFF // Meetei Mayek
- * U+11800 - U+118DF // Sharada
- * }
- *
- * Note that currently Indic support is rudimentary only, missing blue
- * zone support.
- *
- */
-#define FT_AUTOHINTER_SCRIPT_NONE 0
-#define FT_AUTOHINTER_SCRIPT_LATIN 1
-#define FT_AUTOHINTER_SCRIPT_CJK 2
-#define FT_AUTOHINTER_SCRIPT_INDIC 3
-
-
- /**************************************************************************
- *
- * @struct:
- * FT_Prop_GlyphToScriptMap
- *
- * @description:
- * *Experimental* *only*
- *
- * The data exchange structure for the @glyph-to-script-map property.
- *
- */
- typedef struct FT_Prop_GlyphToScriptMap_
- {
- FT_Face face;
- FT_UShort* map;
-
- } FT_Prop_GlyphToScriptMap;
-
-
- /**************************************************************************
- *
- * @property:
- * fallback-script
- *
- * @description:
- * *Experimental* *only*
- *
- * If no auto-hinter script module can be assigned to a glyph, a
- * fallback script gets assigned to it (see also the
- * @glyph-to-script-map property). By default, this is
- * @FT_AUTOHINTER_SCRIPT_CJK. Using the `fallback-script' property,
- * this fallback value can be changed.
- *
- * {
- * FT_Library library;
- * FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "autofitter",
- * "fallback-script", &fallback_script );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * It's important to use the right timing for changing this value: The
- * creation of the glyph-to-script map that eventually uses the
- * fallback script value gets triggered either by setting or reading a
- * face-specific property like @glyph-to-script-map, or by auto-hinting
- * any glyph from that face. In particular, if you have already created
- * an @FT_Face structure but not loaded any glyph (using the
- * auto-hinter), a change of the fallback script will affect this face.
- *
- */
-
-
- /**************************************************************************
- *
- * @property:
- * default-script
- *
- * @description:
- * *Experimental* *only*
- *
- * If FreeType gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make
- * the HarfBuzz library access OpenType features for getting better
- * glyph coverages, this property sets the (auto-fitter) script to be
- * used for the default (OpenType) script data of a font's GSUB table.
- * Features for the default script are intended for all scripts not
- * explicitly handled in GSUB; an example is a `dlig' feature,
- * containing the combination of the characters `T', `E', and `L' to
- * form a `TEL' ligature.
- *
- * By default, this is @FT_AUTOHINTER_SCRIPT_LATIN. Using the
- * `default-script' property, this default value can be changed.
- *
- * {
- * FT_Library library;
- * FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE;
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "autofitter",
- * "default-script", &default_script );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * It's important to use the right timing for changing this value: The
- * creation of the glyph-to-script map that eventually uses the
- * default script value gets triggered either by setting or reading a
- * face-specific property like @glyph-to-script-map, or by auto-hinting
- * any glyph from that face. In particular, if you have already created
- * an @FT_Face structure but not loaded any glyph (using the
- * auto-hinter), a change of the default script will affect this face.
- *
- */
-
-
- /**************************************************************************
- *
- * @property:
- * increase-x-height
- *
- * @description:
- * For ppem values in the range 6~<= ppem <= `increase-x-height', round
- * up the font's x~height much more often than normally. If the value
- * is set to~0, which is the default, this feature is switched off. Use
- * this property to improve the legibility of small font sizes if
- * necessary.
- *
- * {
- * FT_Library library;
- * FT_Face face;
- * FT_Prop_IncreaseXHeight prop;
- *
- *
- * FT_Init_FreeType( &library );
- * FT_New_Face( library, "foo.ttf", 0, &face );
- * FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 );
- *
- * prop.face = face;
- * prop.limit = 14;
- *
- * FT_Property_Set( library, "autofitter",
- * "increase-x-height", &prop );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * Set this value right after calling @FT_Set_Char_Size, but before
- * loading any glyph (using the auto-hinter).
- *
- */
-
-
- /**************************************************************************
- *
- * @struct:
- * FT_Prop_IncreaseXHeight
- *
- * @description:
- * The data exchange structure for the @increase-x-height property.
- *
- */
- typedef struct FT_Prop_IncreaseXHeight_
- {
- FT_Face face;
- FT_UInt limit;
-
- } FT_Prop_IncreaseXHeight;
-
-
- /**************************************************************************
- *
- * @property:
- * warping
- *
- * @description:
- * *Experimental* *only*
- *
- * If FreeType gets compiled with option AF_CONFIG_OPTION_USE_WARPER to
- * activate the warp hinting code in the auto-hinter, this property
- * switches warping on and off.
- *
- * Warping only works in `light' auto-hinting mode. The idea of the
- * code is to slightly scale and shift a glyph along the non-hinted
- * dimension (which is usually the horizontal axis) so that as much of
- * its segments are aligned (more or less) to the grid. To find out a
- * glyph's optimal scaling and shifting value, various parameter
- * combinations are tried and scored.
- *
- * By default, warping is off. The example below shows how to switch on
- * warping (omitting the error handling).
- *
- * {
- * FT_Library library;
- * FT_Bool warping = 1;
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "autofitter",
- * "warping", &warping );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * This property can be set via the `FREETYPE_PROPERTIES' environment
- * variable (using values 1 and 0 for `on' and `off', respectively).
- *
- * The warping code can also change advance widths. Have a look at the
- * `lsb_delta' and `rsb_delta' fields in the @FT_GlyphSlotRec structure
- * for details on improving inter-glyph distances while rendering.
- *
- * Since warping is a global property of the auto-hinter it is best to
- * change its value before rendering any face. Otherwise, you should
- * reload all faces that get auto-hinted in `light' hinting mode.
- *
- */
-
-
- /**************************************************************************
- *
- * @property:
- * no-stem-darkening[autofit]
- *
- * @description:
- * *Experimental* *only*, *requires* *linear* *alpha* *blending* *and*
- * *gamma* *correction*
- *
- * Stem darkening emboldens glyphs at smaller sizes to make them more
- * readable on common low-DPI screens when using linear alpha blending
- * and gamma correction, see @FT_Render_Glyph. When not using linear
- * alpha blending and gamma correction, glyphs will appear heavy and
- * fuzzy!
- *
- * Gamma correction essentially lightens fonts since shades of grey are
- * shifted to higher pixel values (=~higher brightness) to match the
- * original intention to the reality of our screens. The side-effect is
- * that glyphs `thin out'. Mac OS~X and Adobe's proprietary font
- * rendering library implement a counter-measure: stem darkening at
- * smaller sizes where shades of gray dominate. By emboldening a glyph
- * slightly in relation to its pixel size, individual pixels get higher
- * coverage of filled-in outlines and are therefore `blacker'. This
- * counteracts the `thinning out' of glyphs, making text remain readable
- * at smaller sizes. All glyphs that pass through the auto-hinter will
- * be emboldened unless this property is set to TRUE.
- *
- * See the description of the CFF driver for algorithmic details. Total
- * consistency with the CFF driver is currently not achieved because the
- * emboldening method differs and glyphs must be scaled down on the
- * Y-axis to keep outline points inside their precomputed blue zones.
- * The smaller the size (especially 9ppem and down), the higher the loss
- * of emboldening versus the CFF driver.
- *
- * This property can be set via the `FREETYPE_PROPERTIES' environment
- * variable similar to the CFF driver. It can also be set per face
- * using @FT_Face_Properties with @FT_PARAM_TAG_STEM_DARKENING.
- *
- */
-
-
- /**************************************************************************
- *
- * @constant:
- * FT_PARAM_TAG_STEM_DARKENING
- *
- * @description:
- * An @FT_Parameter tag to be used with @FT_Face_Properties. The
- * corresponding Boolean argument specifies whether to apply stem
- * darkening, overriding the global default values or the values set up
- * with @FT_Property_Set (see @no-stem-darkening[autofit] and
- * @no-stem-darkening[cff]).
- *
- * This is a passive setting that only takes effect if the font driver
- * or autohinter honors it, which the CFF driver always does, but the
- * autohinter only in `light' hinting mode (as of version 2.7.0).
- *
- */
-#define FT_PARAM_TAG_STEM_DARKENING \
- FT_MAKE_TAG( 'd', 'a', 'r', 'k' )
-
-
- /**************************************************************************
- *
- * @property:
- * darkening-parameters[autofit]
- *
- * @description:
- * *Experimental* *only*
- *
- * See the description of the CFF driver for details. This
- * implementation appropriates the
- * CFF_CONFIG_OPTION_DARKENING_PARAMETER_* #defines for consistency.
- * Note the differences described in @no-stem-darkening[autofit].
- *
- * This property can be set via the `FREETYPE_PROPERTIES' environment
- * variable similar to the CFF driver.
- */
-
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTAUTOH_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftbbox.h b/include/freetype/ftbbox.h
deleted file mode 100644
index f03bdc1e1..000000000
--- a/include/freetype/ftbbox.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbbox.h */
-/* */
-/* FreeType exact bbox computation (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This component has a _single_ role: to compute exact outline bounding */
- /* boxes. */
- /* */
- /* It is separated from the rest of the engine for various technical */
- /* reasons. It may well be integrated in `ftoutln' later. */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTBBOX_H_
-#define FTBBOX_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* outline_processing */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Get_BBox */
- /* */
- /* <Description> */
- /* Compute the exact bounding box of an outline. This is slower */
- /* than computing the control box. However, it uses an advanced */
- /* algorithm that returns _very_ quickly when the two boxes */
- /* coincide. Otherwise, the outline Bézier arcs are traversed to */
- /* extract their extrema. */
- /* */
- /* <Input> */
- /* outline :: A pointer to the source outline. */
- /* */
- /* <Output> */
- /* abbox :: The outline's exact bounding box. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* If the font is tricky and the glyph has been loaded with */
- /* @FT_LOAD_NO_SCALE, the resulting BBox is meaningless. To get */
- /* reasonable values for the BBox it is necessary to load the glyph */
- /* at a large ppem value (so that the hinting instructions can */
- /* properly shift and scale the subglyphs), then extracting the BBox, */
- /* which can be eventually converted back to font units. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Outline_Get_BBox( FT_Outline* outline,
- FT_BBox *abbox );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTBBOX_H_ */
-
-
-/* END */
-
-
-/* Local Variables: */
-/* coding: utf-8 */
-/* End: */
diff --git a/include/freetype/ftbdf.h b/include/freetype/ftbdf.h
deleted file mode 100644
index 3d3106bad..000000000
--- a/include/freetype/ftbdf.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbdf.h */
-/* */
-/* FreeType API for accessing BDF-specific strings (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTBDF_H_
-#define FTBDF_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* bdf_fonts */
- /* */
- /* <Title> */
- /* BDF and PCF Files */
- /* */
- /* <Abstract> */
- /* BDF and PCF specific API. */
- /* */
- /* <Description> */
- /* This section contains the declaration of functions specific to BDF */
- /* and PCF fonts. */
- /* */
- /*************************************************************************/
-
-
- /**********************************************************************
- *
- * @enum:
- * BDF_PropertyType
- *
- * @description:
- * A list of BDF property types.
- *
- * @values:
- * BDF_PROPERTY_TYPE_NONE ::
- * Value~0 is used to indicate a missing property.
- *
- * BDF_PROPERTY_TYPE_ATOM ::
- * Property is a string atom.
- *
- * BDF_PROPERTY_TYPE_INTEGER ::
- * Property is a 32-bit signed integer.
- *
- * BDF_PROPERTY_TYPE_CARDINAL ::
- * Property is a 32-bit unsigned integer.
- */
- typedef enum BDF_PropertyType_
- {
- BDF_PROPERTY_TYPE_NONE = 0,
- BDF_PROPERTY_TYPE_ATOM = 1,
- BDF_PROPERTY_TYPE_INTEGER = 2,
- BDF_PROPERTY_TYPE_CARDINAL = 3
-
- } BDF_PropertyType;
-
-
- /**********************************************************************
- *
- * @type:
- * BDF_Property
- *
- * @description:
- * A handle to a @BDF_PropertyRec structure to model a given
- * BDF/PCF property.
- */
- typedef struct BDF_PropertyRec_* BDF_Property;
-
-
- /**********************************************************************
- *
- * @struct:
- * BDF_PropertyRec
- *
- * @description:
- * This structure models a given BDF/PCF property.
- *
- * @fields:
- * type ::
- * The property type.
- *
- * u.atom ::
- * The atom string, if type is @BDF_PROPERTY_TYPE_ATOM. May be
- * NULL, indicating an empty string.
- *
- * u.integer ::
- * A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER.
- *
- * u.cardinal ::
- * An unsigned integer, if type is @BDF_PROPERTY_TYPE_CARDINAL.
- */
- typedef struct BDF_PropertyRec_
- {
- BDF_PropertyType type;
- union {
- const char* atom;
- FT_Int32 integer;
- FT_UInt32 cardinal;
-
- } u;
-
- } BDF_PropertyRec;
-
-
- /**********************************************************************
- *
- * @function:
- * FT_Get_BDF_Charset_ID
- *
- * @description:
- * Retrieve a BDF font character set identity, according to
- * the BDF specification.
- *
- * @input:
- * face ::
- * A handle to the input face.
- *
- * @output:
- * acharset_encoding ::
- * Charset encoding, as a C~string, owned by the face.
- *
- * acharset_registry ::
- * Charset registry, as a C~string, owned by the face.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This function only works with BDF faces, returning an error otherwise.
- */
- FT_EXPORT( FT_Error )
- FT_Get_BDF_Charset_ID( FT_Face face,
- const char* *acharset_encoding,
- const char* *acharset_registry );
-
-
- /**********************************************************************
- *
- * @function:
- * FT_Get_BDF_Property
- *
- * @description:
- * Retrieve a BDF property from a BDF or PCF font file.
- *
- * @input:
- * face :: A handle to the input face.
- *
- * name :: The property name.
- *
- * @output:
- * aproperty :: The property.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This function works with BDF _and_ PCF fonts. It returns an error
- * otherwise. It also returns an error if the property is not in the
- * font.
- *
- * A `property' is a either key-value pair within the STARTPROPERTIES
- * ... ENDPROPERTIES block of a BDF font or a key-value pair from the
- * `info->props' array within a `FontRec' structure of a PCF font.
- *
- * Integer properties are always stored as `signed' within PCF fonts;
- * consequently, @BDF_PROPERTY_TYPE_CARDINAL is a possible return value
- * for BDF fonts only.
- *
- * In case of error, `aproperty->type' is always set to
- * @BDF_PROPERTY_TYPE_NONE.
- */
- FT_EXPORT( FT_Error )
- FT_Get_BDF_Property( FT_Face face,
- const char* prop_name,
- BDF_PropertyRec *aproperty );
-
- /* */
-
-FT_END_HEADER
-
-#endif /* FTBDF_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftbitmap.h b/include/freetype/ftbitmap.h
deleted file mode 100644
index 04b2402ad..000000000
--- a/include/freetype/ftbitmap.h
+++ /dev/null
@@ -1,240 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbitmap.h */
-/* */
-/* FreeType utility functions for bitmaps (specification). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTBITMAP_H_
-#define FTBITMAP_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* bitmap_handling */
- /* */
- /* <Title> */
- /* Bitmap Handling */
- /* */
- /* <Abstract> */
- /* Handling FT_Bitmap objects. */
- /* */
- /* <Description> */
- /* This section contains functions for handling @FT_Bitmap objects. */
- /* Note that none of the functions changes the bitmap's `flow' (as */
- /* indicated by the sign of the `pitch' field in `FT_Bitmap'). */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Bitmap_Init */
- /* */
- /* <Description> */
- /* Initialize a pointer to an @FT_Bitmap structure. */
- /* */
- /* <InOut> */
- /* abitmap :: A pointer to the bitmap structure. */
- /* */
- /* <Note> */
- /* A deprecated name for the same function is `FT_Bitmap_New'. */
- /* */
- FT_EXPORT( void )
- FT_Bitmap_Init( FT_Bitmap *abitmap );
-
-
- /* deprecated */
- FT_EXPORT( void )
- FT_Bitmap_New( FT_Bitmap *abitmap );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Bitmap_Copy */
- /* */
- /* <Description> */
- /* Copy a bitmap into another one. */
- /* */
- /* <Input> */
- /* library :: A handle to a library object. */
- /* */
- /* source :: A handle to the source bitmap. */
- /* */
- /* <Output> */
- /* target :: A handle to the target bitmap. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Bitmap_Copy( FT_Library library,
- const FT_Bitmap *source,
- FT_Bitmap *target);
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Bitmap_Embolden */
- /* */
- /* <Description> */
- /* Embolden a bitmap. The new bitmap will be about `xStrength' */
- /* pixels wider and `yStrength' pixels higher. The left and bottom */
- /* borders are kept unchanged. */
- /* */
- /* <Input> */
- /* library :: A handle to a library object. */
- /* */
- /* xStrength :: How strong the glyph is emboldened horizontally. */
- /* Expressed in 26.6 pixel format. */
- /* */
- /* yStrength :: How strong the glyph is emboldened vertically. */
- /* Expressed in 26.6 pixel format. */
- /* */
- /* <InOut> */
- /* bitmap :: A handle to the target bitmap. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The current implementation restricts `xStrength' to be less than */
- /* or equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO. */
- /* */
- /* If you want to embolden the bitmap owned by a @FT_GlyphSlotRec, */
- /* you should call @FT_GlyphSlot_Own_Bitmap on the slot first. */
- /* */
- /* Bitmaps in @FT_PIXEL_MODE_GRAY2 and @FT_PIXEL_MODE_GRAY@ format */
- /* are converted to @FT_PIXEL_MODE_GRAY format (i.e., 8bpp). */
- /* */
- FT_EXPORT( FT_Error )
- FT_Bitmap_Embolden( FT_Library library,
- FT_Bitmap* bitmap,
- FT_Pos xStrength,
- FT_Pos yStrength );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Bitmap_Convert */
- /* */
- /* <Description> */
- /* Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp */
- /* to a bitmap object with depth 8bpp, making the number of used */
- /* bytes line (a.k.a. the `pitch') a multiple of `alignment'. */
- /* */
- /* <Input> */
- /* library :: A handle to a library object. */
- /* */
- /* source :: The source bitmap. */
- /* */
- /* alignment :: The pitch of the bitmap is a multiple of this */
- /* parameter. Common values are 1, 2, or 4. */
- /* */
- /* <Output> */
- /* target :: The target bitmap. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* It is possible to call @FT_Bitmap_Convert multiple times without */
- /* calling @FT_Bitmap_Done (the memory is simply reallocated). */
- /* */
- /* Use @FT_Bitmap_Done to finally remove the bitmap object. */
- /* */
- /* The `library' argument is taken to have access to FreeType's */
- /* memory handling functions. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Bitmap_Convert( FT_Library library,
- const FT_Bitmap *source,
- FT_Bitmap *target,
- FT_Int alignment );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_GlyphSlot_Own_Bitmap */
- /* */
- /* <Description> */
- /* Make sure that a glyph slot owns `slot->bitmap'. */
- /* */
- /* <Input> */
- /* slot :: The glyph slot. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* This function is to be used in combination with */
- /* @FT_Bitmap_Embolden. */
- /* */
- FT_EXPORT( FT_Error )
- FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot slot );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Bitmap_Done */
- /* */
- /* <Description> */
- /* Destroy a bitmap object initialized with @FT_Bitmap_Init. */
- /* */
- /* <Input> */
- /* library :: A handle to a library object. */
- /* */
- /* bitmap :: The bitmap object to be freed. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The `library' argument is taken to have access to FreeType's */
- /* memory handling functions. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Bitmap_Done( FT_Library library,
- FT_Bitmap *bitmap );
-
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTBITMAP_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftbzip2.h b/include/freetype/ftbzip2.h
deleted file mode 100644
index 9147a790a..000000000
--- a/include/freetype/ftbzip2.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbzip2.h */
-/* */
-/* Bzip2-compressed stream support. */
-/* */
-/* Copyright 2010-2017 by */
-/* Joel Klinghed. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTBZIP2_H_
-#define FTBZIP2_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* bzip2 */
- /* */
- /* <Title> */
- /* BZIP2 Streams */
- /* */
- /* <Abstract> */
- /* Using bzip2-compressed font files. */
- /* */
- /* <Description> */
- /* This section contains the declaration of Bzip2-specific functions. */
- /* */
- /*************************************************************************/
-
-
- /************************************************************************
- *
- * @function:
- * FT_Stream_OpenBzip2
- *
- * @description:
- * Open a new stream to parse bzip2-compressed font files. This is
- * mainly used to support the compressed `*.pcf.bz2' fonts that come
- * with XFree86.
- *
- * @input:
- * stream ::
- * The target embedding stream.
- *
- * source ::
- * The source stream.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * The source stream must be opened _before_ calling this function.
- *
- * Calling the internal function `FT_Stream_Close' on the new stream will
- * *not* call `FT_Stream_Close' on the source stream. None of the stream
- * objects will be released to the heap.
- *
- * The stream implementation is very basic and resets the decompression
- * process each time seeking backwards is needed within the stream.
- *
- * In certain builds of the library, bzip2 compression recognition is
- * automatically handled when calling @FT_New_Face or @FT_Open_Face.
- * This means that if no font driver is capable of handling the raw
- * compressed file, the library will try to open a bzip2 compressed stream
- * from it and re-open the face with it.
- *
- * This function may return `FT_Err_Unimplemented_Feature' if your build
- * of FreeType was not compiled with bzip2 support.
- */
- FT_EXPORT( FT_Error )
- FT_Stream_OpenBzip2( FT_Stream stream,
- FT_Stream source );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTBZIP2_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftcache.h b/include/freetype/ftcache.h
deleted file mode 100644
index 5ff3ccf40..000000000
--- a/include/freetype/ftcache.h
+++ /dev/null
@@ -1,1057 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcache.h */
-/* */
-/* FreeType Cache subsystem (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTCACHE_H_
-#define FTCACHE_H_
-
-
-#include <ft2build.h>
-#include FT_GLYPH_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************
- *
- * <Section>
- * cache_subsystem
- *
- * <Title>
- * Cache Sub-System
- *
- * <Abstract>
- * How to cache face, size, and glyph data with FreeType~2.
- *
- * <Description>
- * This section describes the FreeType~2 cache sub-system, which is used
- * to limit the number of concurrently opened @FT_Face and @FT_Size
- * objects, as well as caching information like character maps and glyph
- * images while limiting their maximum memory usage.
- *
- * Note that all types and functions begin with the `FTC_' prefix.
- *
- * The cache is highly portable and thus doesn't know anything about the
- * fonts installed on your system, or how to access them. This implies
- * the following scheme:
- *
- * First, available or installed font faces are uniquely identified by
- * @FTC_FaceID values, provided to the cache by the client. Note that
- * the cache only stores and compares these values, and doesn't try to
- * interpret them in any way.
- *
- * Second, the cache calls, only when needed, a client-provided function
- * to convert an @FTC_FaceID into a new @FT_Face object. The latter is
- * then completely managed by the cache, including its termination
- * through @FT_Done_Face. To monitor termination of face objects, the
- * finalizer callback in the `generic' field of the @FT_Face object can
- * be used, which might also be used to store the @FTC_FaceID of the
- * face.
- *
- * Clients are free to map face IDs to anything else. The most simple
- * usage is to associate them to a (pathname,face_index) pair that is
- * used to call @FT_New_Face. However, more complex schemes are also
- * possible.
- *
- * Note that for the cache to work correctly, the face ID values must be
- * *persistent*, which means that the contents they point to should not
- * change at runtime, or that their value should not become invalid.
- *
- * If this is unavoidable (e.g., when a font is uninstalled at runtime),
- * you should call @FTC_Manager_RemoveFaceID as soon as possible, to let
- * the cache get rid of any references to the old @FTC_FaceID it may
- * keep internally. Failure to do so will lead to incorrect behaviour
- * or even crashes.
- *
- * To use the cache, start with calling @FTC_Manager_New to create a new
- * @FTC_Manager object, which models a single cache instance. You can
- * then look up @FT_Face and @FT_Size objects with
- * @FTC_Manager_LookupFace and @FTC_Manager_LookupSize, respectively.
- *
- * If you want to use the charmap caching, call @FTC_CMapCache_New, then
- * later use @FTC_CMapCache_Lookup to perform the equivalent of
- * @FT_Get_Char_Index, only much faster.
- *
- * If you want to use the @FT_Glyph caching, call @FTC_ImageCache, then
- * later use @FTC_ImageCache_Lookup to retrieve the corresponding
- * @FT_Glyph objects from the cache.
- *
- * If you need lots of small bitmaps, it is much more memory efficient
- * to call @FTC_SBitCache_New followed by @FTC_SBitCache_Lookup. This
- * returns @FTC_SBitRec structures, which are used to store small
- * bitmaps directly. (A small bitmap is one whose metrics and
- * dimensions all fit into 8-bit integers).
- *
- * We hope to also provide a kerning cache in the near future.
- *
- *
- * <Order>
- * FTC_Manager
- * FTC_FaceID
- * FTC_Face_Requester
- *
- * FTC_Manager_New
- * FTC_Manager_Reset
- * FTC_Manager_Done
- * FTC_Manager_LookupFace
- * FTC_Manager_LookupSize
- * FTC_Manager_RemoveFaceID
- *
- * FTC_Node
- * FTC_Node_Unref
- *
- * FTC_ImageCache
- * FTC_ImageCache_New
- * FTC_ImageCache_Lookup
- *
- * FTC_SBit
- * FTC_SBitCache
- * FTC_SBitCache_New
- * FTC_SBitCache_Lookup
- *
- * FTC_CMapCache
- * FTC_CMapCache_New
- * FTC_CMapCache_Lookup
- *
- *************************************************************************/
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** BASIC TYPE DEFINITIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************
- *
- * @type: FTC_FaceID
- *
- * @description:
- * An opaque pointer type that is used to identity face objects. The
- * contents of such objects is application-dependent.
- *
- * These pointers are typically used to point to a user-defined
- * structure containing a font file path, and face index.
- *
- * @note:
- * Never use NULL as a valid @FTC_FaceID.
- *
- * Face IDs are passed by the client to the cache manager that calls,
- * when needed, the @FTC_Face_Requester to translate them into new
- * @FT_Face objects.
- *
- * If the content of a given face ID changes at runtime, or if the value
- * becomes invalid (e.g., when uninstalling a font), you should
- * immediately call @FTC_Manager_RemoveFaceID before any other cache
- * function.
- *
- * Failure to do so will result in incorrect behaviour or even
- * memory leaks and crashes.
- */
- typedef FT_Pointer FTC_FaceID;
-
-
- /************************************************************************
- *
- * @functype:
- * FTC_Face_Requester
- *
- * @description:
- * A callback function provided by client applications. It is used by
- * the cache manager to translate a given @FTC_FaceID into a new valid
- * @FT_Face object, on demand.
- *
- * <Input>
- * face_id ::
- * The face ID to resolve.
- *
- * library ::
- * A handle to a FreeType library object.
- *
- * req_data ::
- * Application-provided request data (see note below).
- *
- * <Output>
- * aface ::
- * A new @FT_Face handle.
- *
- * <Return>
- * FreeType error code. 0~means success.
- *
- * <Note>
- * The third parameter `req_data' is the same as the one passed by the
- * client when @FTC_Manager_New is called.
- *
- * The face requester should not perform funny things on the returned
- * face object, like creating a new @FT_Size for it, or setting a
- * transformation through @FT_Set_Transform!
- */
- typedef FT_Error
- (*FTC_Face_Requester)( FTC_FaceID face_id,
- FT_Library library,
- FT_Pointer req_data,
- FT_Face* aface );
-
- /* */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CACHE MANAGER OBJECT *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FTC_Manager */
- /* */
- /* <Description> */
- /* This object corresponds to one instance of the cache-subsystem. */
- /* It is used to cache one or more @FT_Face objects, along with */
- /* corresponding @FT_Size objects. */
- /* */
- /* The manager intentionally limits the total number of opened */
- /* @FT_Face and @FT_Size objects to control memory usage. See the */
- /* `max_faces' and `max_sizes' parameters of @FTC_Manager_New. */
- /* */
- /* The manager is also used to cache `nodes' of various types while */
- /* limiting their total memory usage. */
- /* */
- /* All limitations are enforced by keeping lists of managed objects */
- /* in most-recently-used order, and flushing old nodes to make room */
- /* for new ones. */
- /* */
- typedef struct FTC_ManagerRec_* FTC_Manager;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FTC_Node */
- /* */
- /* <Description> */
- /* An opaque handle to a cache node object. Each cache node is */
- /* reference-counted. A node with a count of~0 might be flushed */
- /* out of a full cache whenever a lookup request is performed. */
- /* */
- /* If you look up nodes, you have the ability to `acquire' them, */
- /* i.e., to increment their reference count. This will prevent the */
- /* node from being flushed out of the cache until you explicitly */
- /* `release' it (see @FTC_Node_Unref). */
- /* */
- /* See also @FTC_SBitCache_Lookup and @FTC_ImageCache_Lookup. */
- /* */
- typedef struct FTC_NodeRec_* FTC_Node;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_Manager_New */
- /* */
- /* <Description> */
- /* Create a new cache manager. */
- /* */
- /* <Input> */
- /* library :: The parent FreeType library handle to use. */
- /* */
- /* max_faces :: Maximum number of opened @FT_Face objects managed by */
- /* this cache instance. Use~0 for defaults. */
- /* */
- /* max_sizes :: Maximum number of opened @FT_Size objects managed by */
- /* this cache instance. Use~0 for defaults. */
- /* */
- /* max_bytes :: Maximum number of bytes to use for cached data nodes. */
- /* Use~0 for defaults. Note that this value does not */
- /* account for managed @FT_Face and @FT_Size objects. */
- /* */
- /* requester :: An application-provided callback used to translate */
- /* face IDs into real @FT_Face objects. */
- /* */
- /* req_data :: A generic pointer that is passed to the requester */
- /* each time it is called (see @FTC_Face_Requester). */
- /* */
- /* <Output> */
- /* amanager :: A handle to a new manager object. 0~in case of */
- /* failure. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FTC_Manager_New( FT_Library library,
- FT_UInt max_faces,
- FT_UInt max_sizes,
- FT_ULong max_bytes,
- FTC_Face_Requester requester,
- FT_Pointer req_data,
- FTC_Manager *amanager );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_Manager_Reset */
- /* */
- /* <Description> */
- /* Empty a given cache manager. This simply gets rid of all the */
- /* currently cached @FT_Face and @FT_Size objects within the manager. */
- /* */
- /* <InOut> */
- /* manager :: A handle to the manager. */
- /* */
- FT_EXPORT( void )
- FTC_Manager_Reset( FTC_Manager manager );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_Manager_Done */
- /* */
- /* <Description> */
- /* Destroy a given manager after emptying it. */
- /* */
- /* <Input> */
- /* manager :: A handle to the target cache manager object. */
- /* */
- FT_EXPORT( void )
- FTC_Manager_Done( FTC_Manager manager );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_Manager_LookupFace */
- /* */
- /* <Description> */
- /* Retrieve the @FT_Face object that corresponds to a given face ID */
- /* through a cache manager. */
- /* */
- /* <Input> */
- /* manager :: A handle to the cache manager. */
- /* */
- /* face_id :: The ID of the face object. */
- /* */
- /* <Output> */
- /* aface :: A handle to the face object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The returned @FT_Face object is always owned by the manager. You */
- /* should never try to discard it yourself. */
- /* */
- /* The @FT_Face object doesn't necessarily have a current size object */
- /* (i.e., face->size can be~0). If you need a specific `font size', */
- /* use @FTC_Manager_LookupSize instead. */
- /* */
- /* Never change the face's transformation matrix (i.e., never call */
- /* the @FT_Set_Transform function) on a returned face! If you need */
- /* to transform glyphs, do it yourself after glyph loading. */
- /* */
- /* When you perform a lookup, out-of-memory errors are detected */
- /* _within_ the lookup and force incremental flushes of the cache */
- /* until enough memory is released for the lookup to succeed. */
- /* */
- /* If a lookup fails with `FT_Err_Out_Of_Memory' the cache has */
- /* already been completely flushed, and still no memory was available */
- /* for the operation. */
- /* */
- FT_EXPORT( FT_Error )
- FTC_Manager_LookupFace( FTC_Manager manager,
- FTC_FaceID face_id,
- FT_Face *aface );
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FTC_ScalerRec */
- /* */
- /* <Description> */
- /* A structure used to describe a given character size in either */
- /* pixels or points to the cache manager. See */
- /* @FTC_Manager_LookupSize. */
- /* */
- /* <Fields> */
- /* face_id :: The source face ID. */
- /* */
- /* width :: The character width. */
- /* */
- /* height :: The character height. */
- /* */
- /* pixel :: A Boolean. If 1, the `width' and `height' fields are */
- /* interpreted as integer pixel character sizes. */
- /* Otherwise, they are expressed as 1/64th of points. */
- /* */
- /* x_res :: Only used when `pixel' is value~0 to indicate the */
- /* horizontal resolution in dpi. */
- /* */
- /* y_res :: Only used when `pixel' is value~0 to indicate the */
- /* vertical resolution in dpi. */
- /* */
- /* <Note> */
- /* This type is mainly used to retrieve @FT_Size objects through the */
- /* cache manager. */
- /* */
- typedef struct FTC_ScalerRec_
- {
- FTC_FaceID face_id;
- FT_UInt width;
- FT_UInt height;
- FT_Int pixel;
- FT_UInt x_res;
- FT_UInt y_res;
-
- } FTC_ScalerRec;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FTC_Scaler */
- /* */
- /* <Description> */
- /* A handle to an @FTC_ScalerRec structure. */
- /* */
- typedef struct FTC_ScalerRec_* FTC_Scaler;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_Manager_LookupSize */
- /* */
- /* <Description> */
- /* Retrieve the @FT_Size object that corresponds to a given */
- /* @FTC_ScalerRec pointer through a cache manager. */
- /* */
- /* <Input> */
- /* manager :: A handle to the cache manager. */
- /* */
- /* scaler :: A scaler handle. */
- /* */
- /* <Output> */
- /* asize :: A handle to the size object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The returned @FT_Size object is always owned by the manager. You */
- /* should never try to discard it by yourself. */
- /* */
- /* You can access the parent @FT_Face object simply as `size->face' */
- /* if you need it. Note that this object is also owned by the */
- /* manager. */
- /* */
- /* <Note> */
- /* When you perform a lookup, out-of-memory errors are detected */
- /* _within_ the lookup and force incremental flushes of the cache */
- /* until enough memory is released for the lookup to succeed. */
- /* */
- /* If a lookup fails with `FT_Err_Out_Of_Memory' the cache has */
- /* already been completely flushed, and still no memory is available */
- /* for the operation. */
- /* */
- FT_EXPORT( FT_Error )
- FTC_Manager_LookupSize( FTC_Manager manager,
- FTC_Scaler scaler,
- FT_Size *asize );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_Node_Unref */
- /* */
- /* <Description> */
- /* Decrement a cache node's internal reference count. When the count */
- /* reaches 0, it is not destroyed but becomes eligible for subsequent */
- /* cache flushes. */
- /* */
- /* <Input> */
- /* node :: The cache node handle. */
- /* */
- /* manager :: The cache manager handle. */
- /* */
- FT_EXPORT( void )
- FTC_Node_Unref( FTC_Node node,
- FTC_Manager manager );
-
-
- /*************************************************************************
- *
- * @function:
- * FTC_Manager_RemoveFaceID
- *
- * @description:
- * A special function used to indicate to the cache manager that
- * a given @FTC_FaceID is no longer valid, either because its
- * content changed, or because it was deallocated or uninstalled.
- *
- * @input:
- * manager ::
- * The cache manager handle.
- *
- * face_id ::
- * The @FTC_FaceID to be removed.
- *
- * @note:
- * This function flushes all nodes from the cache corresponding to this
- * `face_id', with the exception of nodes with a non-null reference
- * count.
- *
- * Such nodes are however modified internally so as to never appear
- * in later lookups with the same `face_id' value, and to be immediately
- * destroyed when released by all their users.
- *
- */
- FT_EXPORT( void )
- FTC_Manager_RemoveFaceID( FTC_Manager manager,
- FTC_FaceID face_id );
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* cache_subsystem */
- /* */
- /*************************************************************************/
-
- /*************************************************************************
- *
- * @type:
- * FTC_CMapCache
- *
- * @description:
- * An opaque handle used to model a charmap cache. This cache is to
- * hold character codes -> glyph indices mappings.
- *
- */
- typedef struct FTC_CMapCacheRec_* FTC_CMapCache;
-
-
- /*************************************************************************
- *
- * @function:
- * FTC_CMapCache_New
- *
- * @description:
- * Create a new charmap cache.
- *
- * @input:
- * manager ::
- * A handle to the cache manager.
- *
- * @output:
- * acache ::
- * A new cache handle. NULL in case of error.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * Like all other caches, this one will be destroyed with the cache
- * manager.
- *
- */
- FT_EXPORT( FT_Error )
- FTC_CMapCache_New( FTC_Manager manager,
- FTC_CMapCache *acache );
-
-
- /************************************************************************
- *
- * @function:
- * FTC_CMapCache_Lookup
- *
- * @description:
- * Translate a character code into a glyph index, using the charmap
- * cache.
- *
- * @input:
- * cache ::
- * A charmap cache handle.
- *
- * face_id ::
- * The source face ID.
- *
- * cmap_index ::
- * The index of the charmap in the source face. Any negative value
- * means to use the cache @FT_Face's default charmap.
- *
- * char_code ::
- * The character code (in the corresponding charmap).
- *
- * @return:
- * Glyph index. 0~means `no glyph'.
- *
- */
- FT_EXPORT( FT_UInt )
- FTC_CMapCache_Lookup( FTC_CMapCache cache,
- FTC_FaceID face_id,
- FT_Int cmap_index,
- FT_UInt32 char_code );
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* cache_subsystem */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** IMAGE CACHE OBJECT *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************
- *
- * @struct:
- * FTC_ImageTypeRec
- *
- * @description:
- * A structure used to model the type of images in a glyph cache.
- *
- * @fields:
- * face_id ::
- * The face ID.
- *
- * width ::
- * The width in pixels.
- *
- * height ::
- * The height in pixels.
- *
- * flags ::
- * The load flags, as in @FT_Load_Glyph.
- *
- */
- typedef struct FTC_ImageTypeRec_
- {
- FTC_FaceID face_id;
- FT_UInt width;
- FT_UInt height;
- FT_Int32 flags;
-
- } FTC_ImageTypeRec;
-
-
- /*************************************************************************
- *
- * @type:
- * FTC_ImageType
- *
- * @description:
- * A handle to an @FTC_ImageTypeRec structure.
- *
- */
- typedef struct FTC_ImageTypeRec_* FTC_ImageType;
-
-
- /* */
-
-
-#define FTC_IMAGE_TYPE_COMPARE( d1, d2 ) \
- ( (d1)->face_id == (d2)->face_id && \
- (d1)->width == (d2)->width && \
- (d1)->flags == (d2)->flags )
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FTC_ImageCache */
- /* */
- /* <Description> */
- /* A handle to a glyph image cache object. They are designed to */
- /* hold many distinct glyph images while not exceeding a certain */
- /* memory threshold. */
- /* */
- typedef struct FTC_ImageCacheRec_* FTC_ImageCache;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_ImageCache_New */
- /* */
- /* <Description> */
- /* Create a new glyph image cache. */
- /* */
- /* <Input> */
- /* manager :: The parent manager for the image cache. */
- /* */
- /* <Output> */
- /* acache :: A handle to the new glyph image cache object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FTC_ImageCache_New( FTC_Manager manager,
- FTC_ImageCache *acache );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_ImageCache_Lookup */
- /* */
- /* <Description> */
- /* Retrieve a given glyph image from a glyph image cache. */
- /* */
- /* <Input> */
- /* cache :: A handle to the source glyph image cache. */
- /* */
- /* type :: A pointer to a glyph image type descriptor. */
- /* */
- /* gindex :: The glyph index to retrieve. */
- /* */
- /* <Output> */
- /* aglyph :: The corresponding @FT_Glyph object. 0~in case of */
- /* failure. */
- /* */
- /* anode :: Used to return the address of the corresponding cache */
- /* node after incrementing its reference count (see note */
- /* below). */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The returned glyph is owned and managed by the glyph image cache. */
- /* Never try to transform or discard it manually! You can however */
- /* create a copy with @FT_Glyph_Copy and modify the new one. */
- /* */
- /* If `anode' is _not_ NULL, it receives the address of the cache */
- /* node containing the glyph image, after increasing its reference */
- /* count. This ensures that the node (as well as the @FT_Glyph) will */
- /* always be kept in the cache until you call @FTC_Node_Unref to */
- /* `release' it. */
- /* */
- /* If `anode' is NULL, the cache node is left unchanged, which means */
- /* that the @FT_Glyph could be flushed out of the cache on the next */
- /* call to one of the caching sub-system APIs. Don't assume that it */
- /* is persistent! */
- /* */
- FT_EXPORT( FT_Error )
- FTC_ImageCache_Lookup( FTC_ImageCache cache,
- FTC_ImageType type,
- FT_UInt gindex,
- FT_Glyph *aglyph,
- FTC_Node *anode );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_ImageCache_LookupScaler */
- /* */
- /* <Description> */
- /* A variant of @FTC_ImageCache_Lookup that uses an @FTC_ScalerRec */
- /* to specify the face ID and its size. */
- /* */
- /* <Input> */
- /* cache :: A handle to the source glyph image cache. */
- /* */
- /* scaler :: A pointer to a scaler descriptor. */
- /* */
- /* load_flags :: The corresponding load flags. */
- /* */
- /* gindex :: The glyph index to retrieve. */
- /* */
- /* <Output> */
- /* aglyph :: The corresponding @FT_Glyph object. 0~in case of */
- /* failure. */
- /* */
- /* anode :: Used to return the address of the corresponding */
- /* cache node after incrementing its reference count */
- /* (see note below). */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The returned glyph is owned and managed by the glyph image cache. */
- /* Never try to transform or discard it manually! You can however */
- /* create a copy with @FT_Glyph_Copy and modify the new one. */
- /* */
- /* If `anode' is _not_ NULL, it receives the address of the cache */
- /* node containing the glyph image, after increasing its reference */
- /* count. This ensures that the node (as well as the @FT_Glyph) will */
- /* always be kept in the cache until you call @FTC_Node_Unref to */
- /* `release' it. */
- /* */
- /* If `anode' is NULL, the cache node is left unchanged, which means */
- /* that the @FT_Glyph could be flushed out of the cache on the next */
- /* call to one of the caching sub-system APIs. Don't assume that it */
- /* is persistent! */
- /* */
- /* Calls to @FT_Set_Char_Size and friends have no effect on cached */
- /* glyphs; you should always use the FreeType cache API instead. */
- /* */
- FT_EXPORT( FT_Error )
- FTC_ImageCache_LookupScaler( FTC_ImageCache cache,
- FTC_Scaler scaler,
- FT_ULong load_flags,
- FT_UInt gindex,
- FT_Glyph *aglyph,
- FTC_Node *anode );
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FTC_SBit */
- /* */
- /* <Description> */
- /* A handle to a small bitmap descriptor. See the @FTC_SBitRec */
- /* structure for details. */
- /* */
- typedef struct FTC_SBitRec_* FTC_SBit;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FTC_SBitRec */
- /* */
- /* <Description> */
- /* A very compact structure used to describe a small glyph bitmap. */
- /* */
- /* <Fields> */
- /* width :: The bitmap width in pixels. */
- /* */
- /* height :: The bitmap height in pixels. */
- /* */
- /* left :: The horizontal distance from the pen position to the */
- /* left bitmap border (a.k.a. `left side bearing', or */
- /* `lsb'). */
- /* */
- /* top :: The vertical distance from the pen position (on the */
- /* baseline) to the upper bitmap border (a.k.a. `top */
- /* side bearing'). The distance is positive for upwards */
- /* y~coordinates. */
- /* */
- /* format :: The format of the glyph bitmap (monochrome or gray). */
- /* */
- /* max_grays :: Maximum gray level value (in the range 1 to~255). */
- /* */
- /* pitch :: The number of bytes per bitmap line. May be positive */
- /* or negative. */
- /* */
- /* xadvance :: The horizontal advance width in pixels. */
- /* */
- /* yadvance :: The vertical advance height in pixels. */
- /* */
- /* buffer :: A pointer to the bitmap pixels. */
- /* */
- typedef struct FTC_SBitRec_
- {
- FT_Byte width;
- FT_Byte height;
- FT_Char left;
- FT_Char top;
-
- FT_Byte format;
- FT_Byte max_grays;
- FT_Short pitch;
- FT_Char xadvance;
- FT_Char yadvance;
-
- FT_Byte* buffer;
-
- } FTC_SBitRec;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FTC_SBitCache */
- /* */
- /* <Description> */
- /* A handle to a small bitmap cache. These are special cache objects */
- /* used to store small glyph bitmaps (and anti-aliased pixmaps) in a */
- /* much more efficient way than the traditional glyph image cache */
- /* implemented by @FTC_ImageCache. */
- /* */
- typedef struct FTC_SBitCacheRec_* FTC_SBitCache;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_SBitCache_New */
- /* */
- /* <Description> */
- /* Create a new cache to store small glyph bitmaps. */
- /* */
- /* <Input> */
- /* manager :: A handle to the source cache manager. */
- /* */
- /* <Output> */
- /* acache :: A handle to the new sbit cache. NULL in case of error. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FTC_SBitCache_New( FTC_Manager manager,
- FTC_SBitCache *acache );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_SBitCache_Lookup */
- /* */
- /* <Description> */
- /* Look up a given small glyph bitmap in a given sbit cache and */
- /* `lock' it to prevent its flushing from the cache until needed. */
- /* */
- /* <Input> */
- /* cache :: A handle to the source sbit cache. */
- /* */
- /* type :: A pointer to the glyph image type descriptor. */
- /* */
- /* gindex :: The glyph index. */
- /* */
- /* <Output> */
- /* sbit :: A handle to a small bitmap descriptor. */
- /* */
- /* anode :: Used to return the address of the corresponding cache */
- /* node after incrementing its reference count (see note */
- /* below). */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The small bitmap descriptor and its bit buffer are owned by the */
- /* cache and should never be freed by the application. They might */
- /* as well disappear from memory on the next cache lookup, so don't */
- /* treat them as persistent data. */
- /* */
- /* The descriptor's `buffer' field is set to~0 to indicate a missing */
- /* glyph bitmap. */
- /* */
- /* If `anode' is _not_ NULL, it receives the address of the cache */
- /* node containing the bitmap, after increasing its reference count. */
- /* This ensures that the node (as well as the image) will always be */
- /* kept in the cache until you call @FTC_Node_Unref to `release' it. */
- /* */
- /* If `anode' is NULL, the cache node is left unchanged, which means */
- /* that the bitmap could be flushed out of the cache on the next */
- /* call to one of the caching sub-system APIs. Don't assume that it */
- /* is persistent! */
- /* */
- FT_EXPORT( FT_Error )
- FTC_SBitCache_Lookup( FTC_SBitCache cache,
- FTC_ImageType type,
- FT_UInt gindex,
- FTC_SBit *sbit,
- FTC_Node *anode );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_SBitCache_LookupScaler */
- /* */
- /* <Description> */
- /* A variant of @FTC_SBitCache_Lookup that uses an @FTC_ScalerRec */
- /* to specify the face ID and its size. */
- /* */
- /* <Input> */
- /* cache :: A handle to the source sbit cache. */
- /* */
- /* scaler :: A pointer to the scaler descriptor. */
- /* */
- /* load_flags :: The corresponding load flags. */
- /* */
- /* gindex :: The glyph index. */
- /* */
- /* <Output> */
- /* sbit :: A handle to a small bitmap descriptor. */
- /* */
- /* anode :: Used to return the address of the corresponding */
- /* cache node after incrementing its reference count */
- /* (see note below). */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The small bitmap descriptor and its bit buffer are owned by the */
- /* cache and should never be freed by the application. They might */
- /* as well disappear from memory on the next cache lookup, so don't */
- /* treat them as persistent data. */
- /* */
- /* The descriptor's `buffer' field is set to~0 to indicate a missing */
- /* glyph bitmap. */
- /* */
- /* If `anode' is _not_ NULL, it receives the address of the cache */
- /* node containing the bitmap, after increasing its reference count. */
- /* This ensures that the node (as well as the image) will always be */
- /* kept in the cache until you call @FTC_Node_Unref to `release' it. */
- /* */
- /* If `anode' is NULL, the cache node is left unchanged, which means */
- /* that the bitmap could be flushed out of the cache on the next */
- /* call to one of the caching sub-system APIs. Don't assume that it */
- /* is persistent! */
- /* */
- FT_EXPORT( FT_Error )
- FTC_SBitCache_LookupScaler( FTC_SBitCache cache,
- FTC_Scaler scaler,
- FT_ULong load_flags,
- FT_UInt gindex,
- FTC_SBit *sbit,
- FTC_Node *anode );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTCACHE_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftcffdrv.h b/include/freetype/ftcffdrv.h
deleted file mode 100644
index 477b6ddb1..000000000
--- a/include/freetype/ftcffdrv.h
+++ /dev/null
@@ -1,321 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcffdrv.h */
-/* */
-/* FreeType API for controlling the CFF driver (specification only). */
-/* */
-/* Copyright 2013-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTCFFDRV_H_
-#define FTCFFDRV_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /**************************************************************************
- *
- * @section:
- * cff_driver
- *
- * @title:
- * The CFF driver
- *
- * @abstract:
- * Controlling the CFF driver module.
- *
- * @description:
- * While FreeType's CFF driver doesn't expose API functions by itself,
- * it is possible to control its behaviour with @FT_Property_Set and
- * @FT_Property_Get. The list below gives the available properties
- * together with the necessary macros and structures.
- *
- * The CFF driver's module name is `cff'.
- *
- * *Hinting* *and* *antialiasing* *principles* *of* *the* *new* *engine*
- *
- * The rasterizer is positioning horizontal features (e.g., ascender
- * height & x-height, or crossbars) on the pixel grid and minimizing the
- * amount of antialiasing applied to them, while placing vertical
- * features (vertical stems) on the pixel grid without hinting, thus
- * representing the stem position and weight accurately. Sometimes the
- * vertical stems may be only partially black. In this context,
- * `antialiasing' means that stems are not positioned exactly on pixel
- * borders, causing a fuzzy appearance.
- *
- * There are two principles behind this approach.
- *
- * 1) No hinting in the horizontal direction: Unlike `superhinted'
- * TrueType, which changes glyph widths to accommodate regular
- * inter-glyph spacing, Adobe's approach is `faithful to the design' in
- * representing both the glyph width and the inter-glyph spacing
- * designed for the font. This makes the screen display as close as it
- * can be to the result one would get with infinite resolution, while
- * preserving what is considered the key characteristics of each glyph.
- * Note that the distances between unhinted and grid-fitted positions at
- * small sizes are comparable to kerning values and thus would be
- * noticeable (and distracting) while reading if hinting were applied.
- *
- * One of the reasons to not hint horizontally is antialiasing for LCD
- * screens: The pixel geometry of modern displays supplies three
- * vertical sub-pixels as the eye moves horizontally across each visible
- * pixel. On devices where we can be certain this characteristic is
- * present a rasterizer can take advantage of the sub-pixels to add
- * increments of weight. In Western writing systems this turns out to
- * be the more critical direction anyway; the weights and spacing of
- * vertical stems (see above) are central to Armenian, Cyrillic, Greek,
- * and Latin type designs. Even when the rasterizer uses greyscale
- * antialiasing instead of color (a necessary compromise when one
- * doesn't know the screen characteristics), the unhinted vertical
- * features preserve the design's weight and spacing much better than
- * aliased type would.
- *
- * 2) Alignment in the vertical direction: Weights and spacing along the
- * y~axis are less critical; what is much more important is the visual
- * alignment of related features (like cap-height and x-height). The
- * sense of alignment for these is enhanced by the sharpness of grid-fit
- * edges, while the cruder vertical resolution (full pixels instead of
- * 1/3 pixels) is less of a problem.
- *
- * On the technical side, horizontal alignment zones for ascender,
- * x-height, and other important height values (traditionally called
- * `blue zones') as defined in the font are positioned independently,
- * each being rounded to the nearest pixel edge, taking care of
- * overshoot suppression at small sizes, stem darkening, and scaling.
- *
- * Hstems (this is, hint values defined in the font to help align
- * horizontal features) that fall within a blue zone are said to be
- * `captured' and are aligned to that zone. Uncaptured stems are moved
- * in one of four ways, top edge up or down, bottom edge up or down.
- * Unless there are conflicting hstems, the smallest movement is taken
- * to minimize distortion.
- *
- * @order:
- * hinting-engine[cff]
- * no-stem-darkening[cff]
- * darkening-parameters[cff]
- * random-seed
- *
- */
-
-
- /**************************************************************************
- *
- * @property:
- * hinting-engine[cff]
- *
- * @description:
- * Thanks to Adobe, which contributed a new hinting (and parsing)
- * engine, an application can select between `freetype' and `adobe' if
- * compiled with CFF_CONFIG_OPTION_OLD_ENGINE. If this configuration
- * macro isn't defined, `hinting-engine' does nothing.
- *
- * The default engine is `freetype' if CFF_CONFIG_OPTION_OLD_ENGINE is
- * defined, and `adobe' otherwise.
- *
- * The following example code demonstrates how to select Adobe's hinting
- * engine (omitting the error handling).
- *
- * {
- * FT_Library library;
- * FT_UInt hinting_engine = FT_CFF_HINTING_ADOBE;
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "cff",
- * "hinting-engine", &hinting_engine );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * This property can be set via the `FREETYPE_PROPERTIES' environment
- * variable (using values `adobe' or `freetype').
- */
-
-
- /**************************************************************************
- *
- * @enum:
- * FT_CFF_HINTING_XXX
- *
- * @description:
- * A list of constants used for the @hinting-engine[cff] property to
- * select the hinting engine for CFF fonts.
- *
- * @values:
- * FT_CFF_HINTING_FREETYPE ::
- * Use the old FreeType hinting engine.
- *
- * FT_CFF_HINTING_ADOBE ::
- * Use the hinting engine contributed by Adobe.
- *
- */
-#define FT_CFF_HINTING_FREETYPE 0
-#define FT_CFF_HINTING_ADOBE 1
-
-
- /**************************************************************************
- *
- * @property:
- * no-stem-darkening[cff]
- *
- * @description:
- * By default, the Adobe CFF engine darkens stems at smaller sizes,
- * regardless of hinting, to enhance contrast. This feature requires
- * a rendering system with proper gamma correction. Setting this
- * property, stem darkening gets switched off.
- *
- * Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set.
- *
- * {
- * FT_Library library;
- * FT_Bool no_stem_darkening = TRUE;
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "cff",
- * "no-stem-darkening", &no_stem_darkening );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * This property can be set via the `FREETYPE_PROPERTIES' environment
- * variable (using values 1 and 0 for `on' and `off', respectively).
- * It can also be set per face using @FT_Face_Properties with
- * @FT_PARAM_TAG_STEM_DARKENING.
- *
- */
-
-
- /**************************************************************************
- *
- * @property:
- * darkening-parameters[cff]
- *
- * @description:
- * By default, the Adobe CFF engine darkens stems as follows (if the
- * `no-stem-darkening' property isn't set):
- *
- * {
- * stem width <= 0.5px: darkening amount = 0.4px
- * stem width = 1px: darkening amount = 0.275px
- * stem width = 1.667px: darkening amount = 0.275px
- * stem width >= 2.333px: darkening amount = 0px
- * }
- *
- * and piecewise linear in-between. At configuration time, these four
- * control points can be set with the macro
- * `CFF_CONFIG_OPTION_DARKENING_PARAMETERS'. At runtime, the control
- * points can be changed using the `darkening-parameters' property, as
- * the following example demonstrates.
- *
- * {
- * FT_Library library;
- * FT_Int darken_params[8] = { 500, 300, // x1, y1
- * 1000, 200, // x2, y2
- * 1500, 100, // x3, y3
- * 2000, 0 }; // x4, y4
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "cff",
- * "darkening-parameters", darken_params );
- * }
- *
- * The x~values give the stem width, and the y~values the darkening
- * amount. The unit is 1000th of pixels. All coordinate values must be
- * positive; the x~values must be monotonically increasing; the
- * y~values must be monotonically decreasing and smaller than or
- * equal to 500 (corresponding to half a pixel); the slope of each
- * linear piece must be shallower than -1 (e.g., -.4).
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * This property can be set via the `FREETYPE_PROPERTIES' environment
- * variable, using eight comma-separated integers without spaces. Here
- * the above example, using `\' to break the line for readability.
- *
- * {
- * FREETYPE_PROPERTIES=\
- * cff:darkening-parameters=500,300,1000,200,1500,100,2000,0
- * }
- */
-
-
- /**************************************************************************
- *
- * @property:
- * random-seed
- *
- * @description:
- * By default, the seed value for the CFF `random' operator is set to a
- * random value. However, mainly for debugging purposes, it is often
- * necessary to use a known value as a seed so that the pseudo-random
- * number sequences generated by `random' are repeatable.
- *
- * The `random-seed' property does that. Its argument is a signed 32bit
- * integer; if the value is zero or negative, the seed given by the
- * `intitialRandomSeed' private DICT operator in a CFF file gets used
- * (or a default value if there is no such operator). If the value is
- * positive, use it instead of `initialRandomSeed', which is
- * consequently ignored.
- *
- * @note:
- * This property can be set via the `FREETYPE_PROPERTIES' environment
- * variable. It can also be set per face using @FT_Face_Properties with
- * @FT_PARAM_TAG_RANDOM_SEED.
- *
- */
-
-
- /**************************************************************************
- *
- * @constant:
- * FT_PARAM_TAG_RANDOM_SEED
- *
- * @description:
- * An @FT_Parameter tag to be used with @FT_Face_Properties. The
- * corresponding 32bit signed integer argument overrides the CFF
- * module's random seed value with a face-specific one; see
- * @random-seed.
- *
- */
-#define FT_PARAM_TAG_RANDOM_SEED \
- FT_MAKE_TAG( 's', 'e', 'e', 'd' )
-
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* FTCFFDRV_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftchapters.h b/include/freetype/ftchapters.h
deleted file mode 100644
index a0a121b0a..000000000
--- a/include/freetype/ftchapters.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/***************************************************************************/
-/* */
-/* This file defines the structure of the FreeType reference. */
-/* It is used by the python script that generates the HTML files. */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* general_remarks */
-/* */
-/* <Title> */
-/* General Remarks */
-/* */
-/* <Sections> */
-/* header_inclusion */
-/* user_allocation */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* core_api */
-/* */
-/* <Title> */
-/* Core API */
-/* */
-/* <Sections> */
-/* version */
-/* basic_types */
-/* base_interface */
-/* glyph_variants */
-/* glyph_management */
-/* mac_specific */
-/* sizes_management */
-/* header_file_macros */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* format_specific */
-/* */
-/* <Title> */
-/* Format-Specific API */
-/* */
-/* <Sections> */
-/* multiple_masters */
-/* truetype_tables */
-/* type1_tables */
-/* sfnt_names */
-/* bdf_fonts */
-/* cid_fonts */
-/* pfr_fonts */
-/* winfnt_fonts */
-/* font_formats */
-/* gasp_table */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* module_specific */
-/* */
-/* <Title> */
-/* Controlling FreeType Modules */
-/* */
-/* <Sections> */
-/* auto_hinter */
-/* cff_driver */
-/* tt_driver */
-/* pcf_driver */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* cache_subsystem */
-/* */
-/* <Title> */
-/* Cache Sub-System */
-/* */
-/* <Sections> */
-/* cache_subsystem */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* support_api */
-/* */
-/* <Title> */
-/* Support API */
-/* */
-/* <Sections> */
-/* computations */
-/* list_processing */
-/* outline_processing */
-/* quick_advance */
-/* bitmap_handling */
-/* raster */
-/* glyph_stroker */
-/* system_interface */
-/* module_management */
-/* gzip */
-/* lzw */
-/* bzip2 */
-/* lcd_filtering */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* error_codes */
-/* */
-/* <Title> */
-/* Error Codes */
-/* */
-/* <Sections> */
-/* error_enumerations */
-/* error_code_values */
-/* */
-/***************************************************************************/
diff --git a/include/freetype/ftcid.h b/include/freetype/ftcid.h
deleted file mode 100644
index 4adcbeeda..000000000
--- a/include/freetype/ftcid.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcid.h */
-/* */
-/* FreeType API for accessing CID font information (specification). */
-/* */
-/* Copyright 2007-2017 by */
-/* Dereg Clegg and Michael Toftdal. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTCID_H_
-#define FTCID_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* cid_fonts */
- /* */
- /* <Title> */
- /* CID Fonts */
- /* */
- /* <Abstract> */
- /* CID-keyed font specific API. */
- /* */
- /* <Description> */
- /* This section contains the declaration of CID-keyed font specific */
- /* functions. */
- /* */
- /*************************************************************************/
-
-
- /**********************************************************************
- *
- * @function:
- * FT_Get_CID_Registry_Ordering_Supplement
- *
- * @description:
- * Retrieve the Registry/Ordering/Supplement triple (also known as the
- * "R/O/S") from a CID-keyed font.
- *
- * @input:
- * face ::
- * A handle to the input face.
- *
- * @output:
- * registry ::
- * The registry, as a C~string, owned by the face.
- *
- * ordering ::
- * The ordering, as a C~string, owned by the face.
- *
- * supplement ::
- * The supplement.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This function only works with CID faces, returning an error
- * otherwise.
- *
- * @since:
- * 2.3.6
- */
- FT_EXPORT( FT_Error )
- FT_Get_CID_Registry_Ordering_Supplement( FT_Face face,
- const char* *registry,
- const char* *ordering,
- FT_Int *supplement);
-
-
- /**********************************************************************
- *
- * @function:
- * FT_Get_CID_Is_Internally_CID_Keyed
- *
- * @description:
- * Retrieve the type of the input face, CID keyed or not. In
- * contrast to the @FT_IS_CID_KEYED macro this function returns
- * successfully also for CID-keyed fonts in an SFNT wrapper.
- *
- * @input:
- * face ::
- * A handle to the input face.
- *
- * @output:
- * is_cid ::
- * The type of the face as an @FT_Bool.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This function only works with CID faces and OpenType fonts,
- * returning an error otherwise.
- *
- * @since:
- * 2.3.9
- */
- FT_EXPORT( FT_Error )
- FT_Get_CID_Is_Internally_CID_Keyed( FT_Face face,
- FT_Bool *is_cid );
-
-
- /**********************************************************************
- *
- * @function:
- * FT_Get_CID_From_Glyph_Index
- *
- * @description:
- * Retrieve the CID of the input glyph index.
- *
- * @input:
- * face ::
- * A handle to the input face.
- *
- * glyph_index ::
- * The input glyph index.
- *
- * @output:
- * cid ::
- * The CID as an @FT_UInt.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This function only works with CID faces and OpenType fonts,
- * returning an error otherwise.
- *
- * @since:
- * 2.3.9
- */
- FT_EXPORT( FT_Error )
- FT_Get_CID_From_Glyph_Index( FT_Face face,
- FT_UInt glyph_index,
- FT_UInt *cid );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTCID_H_ */
-
-
-/* END */
diff --git a/include/freetype/fterrdef.h b/include/freetype/fterrdef.h
deleted file mode 100644
index cabbac827..000000000
--- a/include/freetype/fterrdef.h
+++ /dev/null
@@ -1,278 +0,0 @@
-/***************************************************************************/
-/* */
-/* fterrdef.h */
-/* */
-/* FreeType error codes (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* error_code_values */
- /* */
- /* <Title> */
- /* Error Code Values */
- /* */
- /* <Abstract> */
- /* All possible error codes returned by FreeType functions. */
- /* */
- /* <Description> */
- /* The list below is taken verbatim from the file `fterrdef.h' */
- /* (loaded automatically by including `FT_FREETYPE_H'). The first */
- /* argument of the `FT_ERROR_DEF_' macro is the error label; by */
- /* default, the prefix `FT_Err_' gets added so that you get error */
- /* names like `FT_Err_Cannot_Open_Resource'. The second argument is */
- /* the error code, and the last argument an error string, which is not */
- /* used by FreeType. */
- /* */
- /* Within your application you should *only* use error names and */
- /* *never* its numeric values! The latter might (and actually do) */
- /* change in forthcoming FreeType versions. */
- /* */
- /* Macro `FT_NOERRORDEF_' defines `FT_Err_Ok', which is always zero. */
- /* See the `Error Enumerations' subsection how to automatically */
- /* generate a list of error strings. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Err_XXX */
- /* */
- /*************************************************************************/
-
- /* generic errors */
-
- FT_NOERRORDEF_( Ok, 0x00,
- "no error" )
-
- FT_ERRORDEF_( Cannot_Open_Resource, 0x01,
- "cannot open resource" )
- FT_ERRORDEF_( Unknown_File_Format, 0x02,
- "unknown file format" )
- FT_ERRORDEF_( Invalid_File_Format, 0x03,
- "broken file" )
- FT_ERRORDEF_( Invalid_Version, 0x04,
- "invalid FreeType version" )
- FT_ERRORDEF_( Lower_Module_Version, 0x05,
- "module version is too low" )
- FT_ERRORDEF_( Invalid_Argument, 0x06,
- "invalid argument" )
- FT_ERRORDEF_( Unimplemented_Feature, 0x07,
- "unimplemented feature" )
- FT_ERRORDEF_( Invalid_Table, 0x08,
- "broken table" )
- FT_ERRORDEF_( Invalid_Offset, 0x09,
- "broken offset within table" )
- FT_ERRORDEF_( Array_Too_Large, 0x0A,
- "array allocation size too large" )
- FT_ERRORDEF_( Missing_Module, 0x0B,
- "missing module" )
- FT_ERRORDEF_( Missing_Property, 0x0C,
- "missing property" )
-
- /* glyph/character errors */
-
- FT_ERRORDEF_( Invalid_Glyph_Index, 0x10,
- "invalid glyph index" )
- FT_ERRORDEF_( Invalid_Character_Code, 0x11,
- "invalid character code" )
- FT_ERRORDEF_( Invalid_Glyph_Format, 0x12,
- "unsupported glyph image format" )
- FT_ERRORDEF_( Cannot_Render_Glyph, 0x13,
- "cannot render this glyph format" )
- FT_ERRORDEF_( Invalid_Outline, 0x14,
- "invalid outline" )
- FT_ERRORDEF_( Invalid_Composite, 0x15,
- "invalid composite glyph" )
- FT_ERRORDEF_( Too_Many_Hints, 0x16,
- "too many hints" )
- FT_ERRORDEF_( Invalid_Pixel_Size, 0x17,
- "invalid pixel size" )
-
- /* handle errors */
-
- FT_ERRORDEF_( Invalid_Handle, 0x20,
- "invalid object handle" )
- FT_ERRORDEF_( Invalid_Library_Handle, 0x21,
- "invalid library handle" )
- FT_ERRORDEF_( Invalid_Driver_Handle, 0x22,
- "invalid module handle" )
- FT_ERRORDEF_( Invalid_Face_Handle, 0x23,
- "invalid face handle" )
- FT_ERRORDEF_( Invalid_Size_Handle, 0x24,
- "invalid size handle" )
- FT_ERRORDEF_( Invalid_Slot_Handle, 0x25,
- "invalid glyph slot handle" )
- FT_ERRORDEF_( Invalid_CharMap_Handle, 0x26,
- "invalid charmap handle" )
- FT_ERRORDEF_( Invalid_Cache_Handle, 0x27,
- "invalid cache manager handle" )
- FT_ERRORDEF_( Invalid_Stream_Handle, 0x28,
- "invalid stream handle" )
-
- /* driver errors */
-
- FT_ERRORDEF_( Too_Many_Drivers, 0x30,
- "too many modules" )
- FT_ERRORDEF_( Too_Many_Extensions, 0x31,
- "too many extensions" )
-
- /* memory errors */
-
- FT_ERRORDEF_( Out_Of_Memory, 0x40,
- "out of memory" )
- FT_ERRORDEF_( Unlisted_Object, 0x41,
- "unlisted object" )
-
- /* stream errors */
-
- FT_ERRORDEF_( Cannot_Open_Stream, 0x51,
- "cannot open stream" )
- FT_ERRORDEF_( Invalid_Stream_Seek, 0x52,
- "invalid stream seek" )
- FT_ERRORDEF_( Invalid_Stream_Skip, 0x53,
- "invalid stream skip" )
- FT_ERRORDEF_( Invalid_Stream_Read, 0x54,
- "invalid stream read" )
- FT_ERRORDEF_( Invalid_Stream_Operation, 0x55,
- "invalid stream operation" )
- FT_ERRORDEF_( Invalid_Frame_Operation, 0x56,
- "invalid frame operation" )
- FT_ERRORDEF_( Nested_Frame_Access, 0x57,
- "nested frame access" )
- FT_ERRORDEF_( Invalid_Frame_Read, 0x58,
- "invalid frame read" )
-
- /* raster errors */
-
- FT_ERRORDEF_( Raster_Uninitialized, 0x60,
- "raster uninitialized" )
- FT_ERRORDEF_( Raster_Corrupted, 0x61,
- "raster corrupted" )
- FT_ERRORDEF_( Raster_Overflow, 0x62,
- "raster overflow" )
- FT_ERRORDEF_( Raster_Negative_Height, 0x63,
- "negative height while rastering" )
-
- /* cache errors */
-
- FT_ERRORDEF_( Too_Many_Caches, 0x70,
- "too many registered caches" )
-
- /* TrueType and SFNT errors */
-
- FT_ERRORDEF_( Invalid_Opcode, 0x80,
- "invalid opcode" )
- FT_ERRORDEF_( Too_Few_Arguments, 0x81,
- "too few arguments" )
- FT_ERRORDEF_( Stack_Overflow, 0x82,
- "stack overflow" )
- FT_ERRORDEF_( Code_Overflow, 0x83,
- "code overflow" )
- FT_ERRORDEF_( Bad_Argument, 0x84,
- "bad argument" )
- FT_ERRORDEF_( Divide_By_Zero, 0x85,
- "division by zero" )
- FT_ERRORDEF_( Invalid_Reference, 0x86,
- "invalid reference" )
- FT_ERRORDEF_( Debug_OpCode, 0x87,
- "found debug opcode" )
- FT_ERRORDEF_( ENDF_In_Exec_Stream, 0x88,
- "found ENDF opcode in execution stream" )
- FT_ERRORDEF_( Nested_DEFS, 0x89,
- "nested DEFS" )
- FT_ERRORDEF_( Invalid_CodeRange, 0x8A,
- "invalid code range" )
- FT_ERRORDEF_( Execution_Too_Long, 0x8B,
- "execution context too long" )
- FT_ERRORDEF_( Too_Many_Function_Defs, 0x8C,
- "too many function definitions" )
- FT_ERRORDEF_( Too_Many_Instruction_Defs, 0x8D,
- "too many instruction definitions" )
- FT_ERRORDEF_( Table_Missing, 0x8E,
- "SFNT font table missing" )
- FT_ERRORDEF_( Horiz_Header_Missing, 0x8F,
- "horizontal header (hhea) table missing" )
- FT_ERRORDEF_( Locations_Missing, 0x90,
- "locations (loca) table missing" )
- FT_ERRORDEF_( Name_Table_Missing, 0x91,
- "name table missing" )
- FT_ERRORDEF_( CMap_Table_Missing, 0x92,
- "character map (cmap) table missing" )
- FT_ERRORDEF_( Hmtx_Table_Missing, 0x93,
- "horizontal metrics (hmtx) table missing" )
- FT_ERRORDEF_( Post_Table_Missing, 0x94,
- "PostScript (post) table missing" )
- FT_ERRORDEF_( Invalid_Horiz_Metrics, 0x95,
- "invalid horizontal metrics" )
- FT_ERRORDEF_( Invalid_CharMap_Format, 0x96,
- "invalid character map (cmap) format" )
- FT_ERRORDEF_( Invalid_PPem, 0x97,
- "invalid ppem value" )
- FT_ERRORDEF_( Invalid_Vert_Metrics, 0x98,
- "invalid vertical metrics" )
- FT_ERRORDEF_( Could_Not_Find_Context, 0x99,
- "could not find context" )
- FT_ERRORDEF_( Invalid_Post_Table_Format, 0x9A,
- "invalid PostScript (post) table format" )
- FT_ERRORDEF_( Invalid_Post_Table, 0x9B,
- "invalid PostScript (post) table" )
- FT_ERRORDEF_( DEF_In_Glyf_Bytecode, 0x9C,
- "found FDEF or IDEF opcode in glyf bytecode" )
-
- /* CFF, CID, and Type 1 errors */
-
- FT_ERRORDEF_( Syntax_Error, 0xA0,
- "opcode syntax error" )
- FT_ERRORDEF_( Stack_Underflow, 0xA1,
- "argument stack underflow" )
- FT_ERRORDEF_( Ignore, 0xA2,
- "ignore" )
- FT_ERRORDEF_( No_Unicode_Glyph_Name, 0xA3,
- "no Unicode glyph name found" )
- FT_ERRORDEF_( Glyph_Too_Big, 0xA4,
- "glyph too big for hinting" )
-
- /* BDF errors */
-
- FT_ERRORDEF_( Missing_Startfont_Field, 0xB0,
- "`STARTFONT' field missing" )
- FT_ERRORDEF_( Missing_Font_Field, 0xB1,
- "`FONT' field missing" )
- FT_ERRORDEF_( Missing_Size_Field, 0xB2,
- "`SIZE' field missing" )
- FT_ERRORDEF_( Missing_Fontboundingbox_Field, 0xB3,
- "`FONTBOUNDINGBOX' field missing" )
- FT_ERRORDEF_( Missing_Chars_Field, 0xB4,
- "`CHARS' field missing" )
- FT_ERRORDEF_( Missing_Startchar_Field, 0xB5,
- "`STARTCHAR' field missing" )
- FT_ERRORDEF_( Missing_Encoding_Field, 0xB6,
- "`ENCODING' field missing" )
- FT_ERRORDEF_( Missing_Bbx_Field, 0xB7,
- "`BBX' field missing" )
- FT_ERRORDEF_( Bbx_Too_Big, 0xB8,
- "`BBX' too big" )
- FT_ERRORDEF_( Corrupted_Font_Header, 0xB9,
- "Font header corrupted or missing fields" )
- FT_ERRORDEF_( Corrupted_Font_Glyphs, 0xBA,
- "Font glyphs corrupted or missing fields" )
-
- /* */
-
-
-/* END */
diff --git a/include/freetype/fterrors.h b/include/freetype/fterrors.h
deleted file mode 100644
index 42769fa7b..000000000
--- a/include/freetype/fterrors.h
+++ /dev/null
@@ -1,226 +0,0 @@
-/***************************************************************************/
-/* */
-/* fterrors.h */
-/* */
-/* FreeType error code handling (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* error_enumerations */
- /* */
- /* <Title> */
- /* Error Enumerations */
- /* */
- /* <Abstract> */
- /* How to handle errors and error strings. */
- /* */
- /* <Description> */
- /* The header file `fterrors.h' (which is automatically included by */
- /* `freetype.h' defines the handling of FreeType's enumeration */
- /* constants. It can also be used to generate error message strings */
- /* with a small macro trick explained below. */
- /* */
- /* *Error* *Formats* */
- /* */
- /* The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be */
- /* defined in `ftoption.h' in order to make the higher byte indicate */
- /* the module where the error has happened (this is not compatible */
- /* with standard builds of FreeType&nbsp;2, however). See the file */
- /* `ftmoderr.h' for more details. */
- /* */
- /* *Error* *Message* *Strings* */
- /* */
- /* Error definitions are set up with special macros that allow client */
- /* applications to build a table of error message strings. The */
- /* strings are not included in a normal build of FreeType&nbsp;2 to */
- /* save space (most client applications do not use them). */
- /* */
- /* To do so, you have to define the following macros before including */
- /* this file. */
- /* */
- /* { */
- /* FT_ERROR_START_LIST */
- /* } */
- /* */
- /* This macro is called before anything else to define the start of */
- /* the error list. It is followed by several FT_ERROR_DEF calls. */
- /* */
- /* { */
- /* FT_ERROR_DEF( e, v, s ) */
- /* } */
- /* */
- /* This macro is called to define one single error. `e' is the error */
- /* code identifier (e.g., `Invalid_Argument'), `v' is the error's */
- /* numerical value, and `s' is the corresponding error string. */
- /* */
- /* { */
- /* FT_ERROR_END_LIST */
- /* } */
- /* */
- /* This macro ends the list. */
- /* */
- /* Additionally, you have to undefine `FTERRORS_H_' before #including */
- /* this file. */
- /* */
- /* Here is a simple example. */
- /* */
- /* { */
- /* #undef FTERRORS_H_ */
- /* #define FT_ERRORDEF( e, v, s ) { e, s }, */
- /* #define FT_ERROR_START_LIST { */
- /* #define FT_ERROR_END_LIST { 0, NULL } }; */
- /* */
- /* const struct */
- /* { */
- /* int err_code; */
- /* const char* err_msg; */
- /* } ft_errors[] = */
- /* */
- /* #include FT_ERRORS_H */
- /* } */
- /* */
- /* Note that `FT_Err_Ok' is _not_ defined with `FT_ERRORDEF' but with */
- /* `FT_NOERRORDEF'; it is always zero. */
- /* */
- /*************************************************************************/
-
- /* */
-
- /* In previous FreeType versions we used `__FTERRORS_H__'. However, */
- /* using two successive underscores in a non-system symbol name */
- /* violates the C (and C++) standard, so it was changed to the */
- /* current form. In spite of this, we have to make */
- /* */
- /* #undefine __FTERRORS_H__ */
- /* */
- /* work for backward compatibility. */
- /* */
-#if !( defined( FTERRORS_H_ ) && defined ( __FTERRORS_H__ ) )
-#define FTERRORS_H_
-#define __FTERRORS_H__
-
-
- /* include module base error codes */
-#include FT_MODULE_ERRORS_H
-
-
- /*******************************************************************/
- /*******************************************************************/
- /***** *****/
- /***** SETUP MACROS *****/
- /***** *****/
- /*******************************************************************/
- /*******************************************************************/
-
-
-#undef FT_NEED_EXTERN_C
-
-
- /* FT_ERR_PREFIX is used as a prefix for error identifiers. */
- /* By default, we use `FT_Err_'. */
- /* */
-#ifndef FT_ERR_PREFIX
-#define FT_ERR_PREFIX FT_Err_
-#endif
-
-
- /* FT_ERR_BASE is used as the base for module-specific errors. */
- /* */
-#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS
-
-#ifndef FT_ERR_BASE
-#define FT_ERR_BASE FT_Mod_Err_Base
-#endif
-
-#else
-
-#undef FT_ERR_BASE
-#define FT_ERR_BASE 0
-
-#endif /* FT_CONFIG_OPTION_USE_MODULE_ERRORS */
-
-
- /* If FT_ERRORDEF is not defined, we need to define a simple */
- /* enumeration type. */
- /* */
-#ifndef FT_ERRORDEF
-
-#define FT_ERRORDEF( e, v, s ) e = v,
-#define FT_ERROR_START_LIST enum {
-#define FT_ERROR_END_LIST FT_ERR_CAT( FT_ERR_PREFIX, Max ) };
-
-#ifdef __cplusplus
-#define FT_NEED_EXTERN_C
- extern "C" {
-#endif
-
-#endif /* !FT_ERRORDEF */
-
-
- /* this macro is used to define an error */
-#define FT_ERRORDEF_( e, v, s ) \
- FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v + FT_ERR_BASE, s )
-
- /* this is only used for <module>_Err_Ok, which must be 0! */
-#define FT_NOERRORDEF_( e, v, s ) \
- FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s )
-
-
-#ifdef FT_ERROR_START_LIST
- FT_ERROR_START_LIST
-#endif
-
-
- /* now include the error codes */
-#include FT_ERROR_DEFINITIONS_H
-
-
-#ifdef FT_ERROR_END_LIST
- FT_ERROR_END_LIST
-#endif
-
-
- /*******************************************************************/
- /*******************************************************************/
- /***** *****/
- /***** SIMPLE CLEANUP *****/
- /***** *****/
- /*******************************************************************/
- /*******************************************************************/
-
-#ifdef FT_NEED_EXTERN_C
- }
-#endif
-
-#undef FT_ERROR_START_LIST
-#undef FT_ERROR_END_LIST
-
-#undef FT_ERRORDEF
-#undef FT_ERRORDEF_
-#undef FT_NOERRORDEF_
-
-#undef FT_NEED_EXTERN_C
-#undef FT_ERR_BASE
-
- /* FT_ERR_PREFIX is needed internally */
-#ifndef FT2_BUILD_LIBRARY
-#undef FT_ERR_PREFIX
-#endif
-
-#endif /* !(FTERRORS_H_ && __FTERRORS_H__) */
-
-
-/* END */
diff --git a/include/freetype/ftfntfmt.h b/include/freetype/ftfntfmt.h
deleted file mode 100644
index 337758328..000000000
--- a/include/freetype/ftfntfmt.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftfntfmt.h */
-/* */
-/* Support functions for font formats. */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTFNTFMT_H_
-#define FTFNTFMT_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* font_formats */
- /* */
- /* <Title> */
- /* Font Formats */
- /* */
- /* <Abstract> */
- /* Getting the font format. */
- /* */
- /* <Description> */
- /* The single function in this section can be used to get the font */
- /* format. Note that this information is not needed normally; */
- /* however, there are special cases (like in PDF devices) where it is */
- /* important to differentiate, in spite of FreeType's uniform API. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Font_Format */
- /* */
- /* <Description> */
- /* Return a string describing the format of a given face. Possible */
- /* values are `TrueType', `Type~1', `BDF', `PCF', `Type~42', */
- /* `CID~Type~1', `CFF', `PFR', and `Windows~FNT'. */
- /* */
- /* The return value is suitable to be used as an X11 FONT_PROPERTY. */
- /* */
- /* <Input> */
- /* face :: */
- /* Input face handle. */
- /* */
- /* <Return> */
- /* Font format string. NULL in case of error. */
- /* */
- /* <Note> */
- /* A deprecated name for the same function is */
- /* `FT_Get_X11_Font_Format'. */
- /* */
- FT_EXPORT( const char* )
- FT_Get_Font_Format( FT_Face face );
-
-
- /* deprecated */
- FT_EXPORT( const char* )
- FT_Get_X11_Font_Format( FT_Face face );
-
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTFNTFMT_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftgasp.h b/include/freetype/ftgasp.h
deleted file mode 100644
index ce18d6478..000000000
--- a/include/freetype/ftgasp.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgasp.h */
-/* */
-/* Access of TrueType's `gasp' table (specification). */
-/* */
-/* Copyright 2007-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTGASP_H_
-#define FTGASP_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
- /***************************************************************************
- *
- * @section:
- * gasp_table
- *
- * @title:
- * Gasp Table
- *
- * @abstract:
- * Retrieving TrueType `gasp' table entries.
- *
- * @description:
- * The function @FT_Get_Gasp can be used to query a TrueType or OpenType
- * font for specific entries in its `gasp' table, if any. This is
- * mainly useful when implementing native TrueType hinting with the
- * bytecode interpreter to duplicate the Windows text rendering results.
- */
-
- /*************************************************************************
- *
- * @enum:
- * FT_GASP_XXX
- *
- * @description:
- * A list of values and/or bit-flags returned by the @FT_Get_Gasp
- * function.
- *
- * @values:
- * FT_GASP_NO_TABLE ::
- * This special value means that there is no GASP table in this face.
- * It is up to the client to decide what to do.
- *
- * FT_GASP_DO_GRIDFIT ::
- * Grid-fitting and hinting should be performed at the specified ppem.
- * This *really* means TrueType bytecode interpretation. If this bit
- * is not set, no hinting gets applied.
- *
- * FT_GASP_DO_GRAY ::
- * Anti-aliased rendering should be performed at the specified ppem.
- * If not set, do monochrome rendering.
- *
- * FT_GASP_SYMMETRIC_SMOOTHING ::
- * If set, smoothing along multiple axes must be used with ClearType.
- *
- * FT_GASP_SYMMETRIC_GRIDFIT ::
- * Grid-fitting must be used with ClearType's symmetric smoothing.
- *
- * @note:
- * The bit-flags `FT_GASP_DO_GRIDFIT' and `FT_GASP_DO_GRAY' are to be
- * used for standard font rasterization only. Independently of that,
- * `FT_GASP_SYMMETRIC_SMOOTHING' and `FT_GASP_SYMMETRIC_GRIDFIT' are to
- * be used if ClearType is enabled (and `FT_GASP_DO_GRIDFIT' and
- * `FT_GASP_DO_GRAY' are consequently ignored).
- *
- * `ClearType' is Microsoft's implementation of LCD rendering, partly
- * protected by patents.
- *
- * @since:
- * 2.3.0
- */
-#define FT_GASP_NO_TABLE -1
-#define FT_GASP_DO_GRIDFIT 0x01
-#define FT_GASP_DO_GRAY 0x02
-#define FT_GASP_SYMMETRIC_GRIDFIT 0x04
-#define FT_GASP_SYMMETRIC_SMOOTHING 0x08
-
-
- /*************************************************************************
- *
- * @func:
- * FT_Get_Gasp
- *
- * @description:
- * For a TrueType or OpenType font file, return the rasterizer behaviour
- * flags from the font's `gasp' table corresponding to a given
- * character pixel size.
- *
- * @input:
- * face :: The source face handle.
- *
- * ppem :: The vertical character pixel size.
- *
- * @return:
- * Bit flags (see @FT_GASP_XXX), or @FT_GASP_NO_TABLE if there is no
- * `gasp' table in the face.
- *
- * @note:
- * If you want to use the MM functionality of OpenType variation fonts
- * (i.e., using @FT_Set_Var_Design_Coordinates and friends), call this
- * function *after* setting an instance since the return values can
- * change.
- *
- * @since:
- * 2.3.0
- */
- FT_EXPORT( FT_Int )
- FT_Get_Gasp( FT_Face face,
- FT_UInt ppem );
-
- /* */
-
-
-#endif /* FTGASP_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftglyph.h b/include/freetype/ftglyph.h
deleted file mode 100644
index db1a2c8ba..000000000
--- a/include/freetype/ftglyph.h
+++ /dev/null
@@ -1,614 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftglyph.h */
-/* */
-/* FreeType convenience functions to handle glyphs (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file contains the definition of several convenience functions */
- /* that can be used by client applications to easily retrieve glyph */
- /* bitmaps and outlines from a given face. */
- /* */
- /* These functions should be optional if you are writing a font server */
- /* or text layout engine on top of FreeType. However, they are pretty */
- /* handy for many other simple uses of the library. */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTGLYPH_H_
-#define FTGLYPH_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* glyph_management */
- /* */
- /* <Title> */
- /* Glyph Management */
- /* */
- /* <Abstract> */
- /* Generic interface to manage individual glyph data. */
- /* */
- /* <Description> */
- /* This section contains definitions used to manage glyph data */
- /* through generic FT_Glyph objects. Each of them can contain a */
- /* bitmap, a vector outline, or even images in other formats. */
- /* */
- /*************************************************************************/
-
-
- /* forward declaration to a private type */
- typedef struct FT_Glyph_Class_ FT_Glyph_Class;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Glyph */
- /* */
- /* <Description> */
- /* Handle to an object used to model generic glyph images. It is a */
- /* pointer to the @FT_GlyphRec structure and can contain a glyph */
- /* bitmap or pointer. */
- /* */
- /* <Note> */
- /* Glyph objects are not owned by the library. You must thus release */
- /* them manually (through @FT_Done_Glyph) _before_ calling */
- /* @FT_Done_FreeType. */
- /* */
- typedef struct FT_GlyphRec_* FT_Glyph;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_GlyphRec */
- /* */
- /* <Description> */
- /* The root glyph structure contains a given glyph image plus its */
- /* advance width in 16.16 fixed-point format. */
- /* */
- /* <Fields> */
- /* library :: A handle to the FreeType library object. */
- /* */
- /* clazz :: A pointer to the glyph's class. Private. */
- /* */
- /* format :: The format of the glyph's image. */
- /* */
- /* advance :: A 16.16 vector that gives the glyph's advance width. */
- /* */
- typedef struct FT_GlyphRec_
- {
- FT_Library library;
- const FT_Glyph_Class* clazz;
- FT_Glyph_Format format;
- FT_Vector advance;
-
- } FT_GlyphRec;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_BitmapGlyph */
- /* */
- /* <Description> */
- /* A handle to an object used to model a bitmap glyph image. This is */
- /* a sub-class of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec. */
- /* */
- typedef struct FT_BitmapGlyphRec_* FT_BitmapGlyph;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_BitmapGlyphRec */
- /* */
- /* <Description> */
- /* A structure used for bitmap glyph images. This really is a */
- /* `sub-class' of @FT_GlyphRec. */
- /* */
- /* <Fields> */
- /* root :: The root @FT_Glyph fields. */
- /* */
- /* left :: The left-side bearing, i.e., the horizontal distance */
- /* from the current pen position to the left border of the */
- /* glyph bitmap. */
- /* */
- /* top :: The top-side bearing, i.e., the vertical distance from */
- /* the current pen position to the top border of the glyph */
- /* bitmap. This distance is positive for upwards~y! */
- /* */
- /* bitmap :: A descriptor for the bitmap. */
- /* */
- /* <Note> */
- /* You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have */
- /* `glyph->format == FT_GLYPH_FORMAT_BITMAP'. This lets you access */
- /* the bitmap's contents easily. */
- /* */
- /* The corresponding pixel buffer is always owned by @FT_BitmapGlyph */
- /* and is thus created and destroyed with it. */
- /* */
- typedef struct FT_BitmapGlyphRec_
- {
- FT_GlyphRec root;
- FT_Int left;
- FT_Int top;
- FT_Bitmap bitmap;
-
- } FT_BitmapGlyphRec;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_OutlineGlyph */
- /* */
- /* <Description> */
- /* A handle to an object used to model an outline glyph image. This */
- /* is a sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec. */
- /* */
- typedef struct FT_OutlineGlyphRec_* FT_OutlineGlyph;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_OutlineGlyphRec */
- /* */
- /* <Description> */
- /* A structure used for outline (vectorial) glyph images. This */
- /* really is a `sub-class' of @FT_GlyphRec. */
- /* */
- /* <Fields> */
- /* root :: The root @FT_Glyph fields. */
- /* */
- /* outline :: A descriptor for the outline. */
- /* */
- /* <Note> */
- /* You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have */
- /* `glyph->format == FT_GLYPH_FORMAT_OUTLINE'. This lets you access */
- /* the outline's content easily. */
- /* */
- /* As the outline is extracted from a glyph slot, its coordinates are */
- /* expressed normally in 26.6 pixels, unless the flag */
- /* @FT_LOAD_NO_SCALE was used in @FT_Load_Glyph() or @FT_Load_Char(). */
- /* */
- /* The outline's tables are always owned by the object and are */
- /* destroyed with it. */
- /* */
- typedef struct FT_OutlineGlyphRec_
- {
- FT_GlyphRec root;
- FT_Outline outline;
-
- } FT_OutlineGlyphRec;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Glyph */
- /* */
- /* <Description> */
- /* A function used to extract a glyph image from a slot. Note that */
- /* the created @FT_Glyph object must be released with @FT_Done_Glyph. */
- /* */
- /* <Input> */
- /* slot :: A handle to the source glyph slot. */
- /* */
- /* <Output> */
- /* aglyph :: A handle to the glyph object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* Because `*aglyph->advance.x' and '*aglyph->advance.y' are 16.16 */
- /* fixed-point numbers, `slot->advance.x' and `slot->advance.y' */
- /* (which are in 26.6 fixed-point format) must be in the range */
- /* ]-32768;32768[. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_Glyph( FT_GlyphSlot slot,
- FT_Glyph *aglyph );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Glyph_Copy */
- /* */
- /* <Description> */
- /* A function used to copy a glyph image. Note that the created */
- /* @FT_Glyph object must be released with @FT_Done_Glyph. */
- /* */
- /* <Input> */
- /* source :: A handle to the source glyph object. */
- /* */
- /* <Output> */
- /* target :: A handle to the target glyph object. 0~in case of */
- /* error. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Glyph_Copy( FT_Glyph source,
- FT_Glyph *target );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Glyph_Transform */
- /* */
- /* <Description> */
- /* Transform a glyph image if its format is scalable. */
- /* */
- /* <InOut> */
- /* glyph :: A handle to the target glyph object. */
- /* */
- /* <Input> */
- /* matrix :: A pointer to a 2x2 matrix to apply. */
- /* */
- /* delta :: A pointer to a 2d vector to apply. Coordinates are */
- /* expressed in 1/64th of a pixel. */
- /* */
- /* <Return> */
- /* FreeType error code (if not 0, the glyph format is not scalable). */
- /* */
- /* <Note> */
- /* The 2x2 transformation matrix is also applied to the glyph's */
- /* advance vector. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Glyph_Transform( FT_Glyph glyph,
- FT_Matrix* matrix,
- FT_Vector* delta );
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Glyph_BBox_Mode */
- /* */
- /* <Description> */
- /* The mode how the values of @FT_Glyph_Get_CBox are returned. */
- /* */
- /* <Values> */
- /* FT_GLYPH_BBOX_UNSCALED :: */
- /* Return unscaled font units. */
- /* */
- /* FT_GLYPH_BBOX_SUBPIXELS :: */
- /* Return unfitted 26.6 coordinates. */
- /* */
- /* FT_GLYPH_BBOX_GRIDFIT :: */
- /* Return grid-fitted 26.6 coordinates. */
- /* */
- /* FT_GLYPH_BBOX_TRUNCATE :: */
- /* Return coordinates in integer pixels. */
- /* */
- /* FT_GLYPH_BBOX_PIXELS :: */
- /* Return grid-fitted pixel coordinates. */
- /* */
- typedef enum FT_Glyph_BBox_Mode_
- {
- FT_GLYPH_BBOX_UNSCALED = 0,
- FT_GLYPH_BBOX_SUBPIXELS = 0,
- FT_GLYPH_BBOX_GRIDFIT = 1,
- FT_GLYPH_BBOX_TRUNCATE = 2,
- FT_GLYPH_BBOX_PIXELS = 3
-
- } FT_Glyph_BBox_Mode;
-
-
- /* these constants are deprecated; use the corresponding */
- /* `FT_Glyph_BBox_Mode' values instead */
-#define ft_glyph_bbox_unscaled FT_GLYPH_BBOX_UNSCALED
-#define ft_glyph_bbox_subpixels FT_GLYPH_BBOX_SUBPIXELS
-#define ft_glyph_bbox_gridfit FT_GLYPH_BBOX_GRIDFIT
-#define ft_glyph_bbox_truncate FT_GLYPH_BBOX_TRUNCATE
-#define ft_glyph_bbox_pixels FT_GLYPH_BBOX_PIXELS
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Glyph_Get_CBox */
- /* */
- /* <Description> */
- /* Return a glyph's `control box'. The control box encloses all the */
- /* outline's points, including Bézier control points. Though it */
- /* coincides with the exact bounding box for most glyphs, it can be */
- /* slightly larger in some situations (like when rotating an outline */
- /* that contains Bézier outside arcs). */
- /* */
- /* Computing the control box is very fast, while getting the bounding */
- /* box can take much more time as it needs to walk over all segments */
- /* and arcs in the outline. To get the latter, you can use the */
- /* `ftbbox' component, which is dedicated to this single task. */
- /* */
- /* <Input> */
- /* glyph :: A handle to the source glyph object. */
- /* */
- /* mode :: The mode that indicates how to interpret the returned */
- /* bounding box values. */
- /* */
- /* <Output> */
- /* acbox :: The glyph coordinate bounding box. Coordinates are */
- /* expressed in 1/64th of pixels if it is grid-fitted. */
- /* */
- /* <Note> */
- /* Coordinates are relative to the glyph origin, using the y~upwards */
- /* convention. */
- /* */
- /* If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode' */
- /* must be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font */
- /* units in 26.6 pixel format. The value @FT_GLYPH_BBOX_SUBPIXELS */
- /* is another name for this constant. */
- /* */
- /* If the font is tricky and the glyph has been loaded with */
- /* @FT_LOAD_NO_SCALE, the resulting CBox is meaningless. To get */
- /* reasonable values for the CBox it is necessary to load the glyph */
- /* at a large ppem value (so that the hinting instructions can */
- /* properly shift and scale the subglyphs), then extracting the CBox, */
- /* which can be eventually converted back to font units. */
- /* */
- /* Note that the maximum coordinates are exclusive, which means that */
- /* one can compute the width and height of the glyph image (be it in */
- /* integer or 26.6 pixels) as: */
- /* */
- /* { */
- /* width = bbox.xMax - bbox.xMin; */
- /* height = bbox.yMax - bbox.yMin; */
- /* } */
- /* */
- /* Note also that for 26.6 coordinates, if `bbox_mode' is set to */
- /* @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted, */
- /* which corresponds to: */
- /* */
- /* { */
- /* bbox.xMin = FLOOR(bbox.xMin); */
- /* bbox.yMin = FLOOR(bbox.yMin); */
- /* bbox.xMax = CEILING(bbox.xMax); */
- /* bbox.yMax = CEILING(bbox.yMax); */
- /* } */
- /* */
- /* To get the bbox in pixel coordinates, set `bbox_mode' to */
- /* @FT_GLYPH_BBOX_TRUNCATE. */
- /* */
- /* To get the bbox in grid-fitted pixel coordinates, set `bbox_mode' */
- /* to @FT_GLYPH_BBOX_PIXELS. */
- /* */
- FT_EXPORT( void )
- FT_Glyph_Get_CBox( FT_Glyph glyph,
- FT_UInt bbox_mode,
- FT_BBox *acbox );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Glyph_To_Bitmap */
- /* */
- /* <Description> */
- /* Convert a given glyph object to a bitmap glyph object. */
- /* */
- /* <InOut> */
- /* the_glyph :: A pointer to a handle to the target glyph. */
- /* */
- /* <Input> */
- /* render_mode :: An enumeration that describes how the data is */
- /* rendered. */
- /* */
- /* origin :: A pointer to a vector used to translate the glyph */
- /* image before rendering. Can be~0 (if no */
- /* translation). The origin is expressed in */
- /* 26.6 pixels. */
- /* */
- /* destroy :: A boolean that indicates that the original glyph */
- /* image should be destroyed by this function. It is */
- /* never destroyed in case of error. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* This function does nothing if the glyph format isn't scalable. */
- /* */
- /* The glyph image is translated with the `origin' vector before */
- /* rendering. */
- /* */
- /* The first parameter is a pointer to an @FT_Glyph handle, that will */
- /* be _replaced_ by this function (with newly allocated data). */
- /* Typically, you would use (omitting error handling): */
- /* */
- /* */
- /* { */
- /* FT_Glyph glyph; */
- /* FT_BitmapGlyph glyph_bitmap; */
- /* */
- /* */
- /* // load glyph */
- /* error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAULT ); */
- /* */
- /* // extract glyph image */
- /* error = FT_Get_Glyph( face->glyph, &glyph ); */
- /* */
- /* // convert to a bitmap (default render mode + destroying old) */
- /* if ( glyph->format != FT_GLYPH_FORMAT_BITMAP ) */
- /* { */
- /* error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL, */
- /* 0, 1 ); */
- /* if ( error ) // `glyph' unchanged */
- /* ... */
- /* } */
- /* */
- /* // access bitmap content by typecasting */
- /* glyph_bitmap = (FT_BitmapGlyph)glyph; */
- /* */
- /* // do funny stuff with it, like blitting/drawing */
- /* ... */
- /* */
- /* // discard glyph image (bitmap or not) */
- /* FT_Done_Glyph( glyph ); */
- /* } */
- /* */
- /* */
- /* Here another example, again without error handling: */
- /* */
- /* */
- /* { */
- /* FT_Glyph glyphs[MAX_GLYPHS] */
- /* */
- /* */
- /* ... */
- /* */
- /* for ( idx = 0; i < MAX_GLYPHS; i++ ) */
- /* error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) || */
- /* FT_Get_Glyph ( face->glyph, &glyph[idx] ); */
- /* */
- /* ... */
- /* */
- /* for ( idx = 0; i < MAX_GLYPHS; i++ ) */
- /* { */
- /* FT_Glyph bitmap = glyphs[idx]; */
- /* */
- /* */
- /* ... */
- /* */
- /* // after this call, `bitmap' no longer points into */
- /* // the `glyphs' array (and the old value isn't destroyed) */
- /* FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 ); */
- /* */
- /* ... */
- /* */
- /* FT_Done_Glyph( bitmap ); */
- /* } */
- /* */
- /* ... */
- /* */
- /* for ( idx = 0; i < MAX_GLYPHS; i++ ) */
- /* FT_Done_Glyph( glyphs[idx] ); */
- /* } */
- /* */
- FT_EXPORT( FT_Error )
- FT_Glyph_To_Bitmap( FT_Glyph* the_glyph,
- FT_Render_Mode render_mode,
- FT_Vector* origin,
- FT_Bool destroy );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Done_Glyph */
- /* */
- /* <Description> */
- /* Destroy a given glyph. */
- /* */
- /* <Input> */
- /* glyph :: A handle to the target glyph object. */
- /* */
- FT_EXPORT( void )
- FT_Done_Glyph( FT_Glyph glyph );
-
- /* */
-
-
- /* other helpful functions */
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* computations */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Matrix_Multiply */
- /* */
- /* <Description> */
- /* Perform the matrix operation `b = a*b'. */
- /* */
- /* <Input> */
- /* a :: A pointer to matrix `a'. */
- /* */
- /* <InOut> */
- /* b :: A pointer to matrix `b'. */
- /* */
- /* <Note> */
- /* The result is undefined if either `a' or `b' is zero. */
- /* */
- /* Since the function uses wrap-around arithmetic, results become */
- /* meaningless if the arguments are very large. */
- /* */
- FT_EXPORT( void )
- FT_Matrix_Multiply( const FT_Matrix* a,
- FT_Matrix* b );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Matrix_Invert */
- /* */
- /* <Description> */
- /* Invert a 2x2 matrix. Return an error if it can't be inverted. */
- /* */
- /* <InOut> */
- /* matrix :: A pointer to the target matrix. Remains untouched in */
- /* case of error. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Matrix_Invert( FT_Matrix* matrix );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTGLYPH_H_ */
-
-
-/* END */
-
-
-/* Local Variables: */
-/* coding: utf-8 */
-/* End: */
diff --git a/include/freetype/ftgxval.h b/include/freetype/ftgxval.h
deleted file mode 100644
index f239c71eb..000000000
--- a/include/freetype/ftgxval.h
+++ /dev/null
@@ -1,357 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgxval.h */
-/* */
-/* FreeType API for validating TrueTypeGX/AAT tables (specification). */
-/* */
-/* Copyright 2004-2017 by */
-/* Masatake YAMATO, Redhat K.K, */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTGXVAL_H_
-#define FTGXVAL_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* gx_validation */
- /* */
- /* <Title> */
- /* TrueTypeGX/AAT Validation */
- /* */
- /* <Abstract> */
- /* An API to validate TrueTypeGX/AAT tables. */
- /* */
- /* <Description> */
- /* This section contains the declaration of functions to validate */
- /* some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, */
- /* trak, prop, lcar). */
- /* */
- /* <Order> */
- /* FT_TrueTypeGX_Validate */
- /* FT_TrueTypeGX_Free */
- /* */
- /* FT_ClassicKern_Validate */
- /* FT_ClassicKern_Free */
- /* */
- /* FT_VALIDATE_GX_LENGTH */
- /* FT_VALIDATE_GXXXX */
- /* FT_VALIDATE_CKERNXXX */
- /* */
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* */
- /* Warning: Use FT_VALIDATE_XXX to validate a table. */
- /* Following definitions are for gxvalid developers. */
- /* */
- /* */
- /*************************************************************************/
-
-#define FT_VALIDATE_feat_INDEX 0
-#define FT_VALIDATE_mort_INDEX 1
-#define FT_VALIDATE_morx_INDEX 2
-#define FT_VALIDATE_bsln_INDEX 3
-#define FT_VALIDATE_just_INDEX 4
-#define FT_VALIDATE_kern_INDEX 5
-#define FT_VALIDATE_opbd_INDEX 6
-#define FT_VALIDATE_trak_INDEX 7
-#define FT_VALIDATE_prop_INDEX 8
-#define FT_VALIDATE_lcar_INDEX 9
-#define FT_VALIDATE_GX_LAST_INDEX FT_VALIDATE_lcar_INDEX
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_VALIDATE_GX_LENGTH
- *
- * @description:
- * The number of tables checked in this module. Use it as a parameter
- * for the `table-length' argument of function @FT_TrueTypeGX_Validate.
- */
-#define FT_VALIDATE_GX_LENGTH (FT_VALIDATE_GX_LAST_INDEX + 1)
-
- /* */
-
- /* Up to 0x1000 is used by otvalid.
- Ox2xxx is reserved for feature OT extension. */
-#define FT_VALIDATE_GX_START 0x4000
-#define FT_VALIDATE_GX_BITFIELD( tag ) \
- ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX )
-
-
- /**********************************************************************
- *
- * @enum:
- * FT_VALIDATE_GXXXX
- *
- * @description:
- * A list of bit-field constants used with @FT_TrueTypeGX_Validate to
- * indicate which TrueTypeGX/AAT Type tables should be validated.
- *
- * @values:
- * FT_VALIDATE_feat ::
- * Validate `feat' table.
- *
- * FT_VALIDATE_mort ::
- * Validate `mort' table.
- *
- * FT_VALIDATE_morx ::
- * Validate `morx' table.
- *
- * FT_VALIDATE_bsln ::
- * Validate `bsln' table.
- *
- * FT_VALIDATE_just ::
- * Validate `just' table.
- *
- * FT_VALIDATE_kern ::
- * Validate `kern' table.
- *
- * FT_VALIDATE_opbd ::
- * Validate `opbd' table.
- *
- * FT_VALIDATE_trak ::
- * Validate `trak' table.
- *
- * FT_VALIDATE_prop ::
- * Validate `prop' table.
- *
- * FT_VALIDATE_lcar ::
- * Validate `lcar' table.
- *
- * FT_VALIDATE_GX ::
- * Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern,
- * opbd, trak, prop and lcar).
- *
- */
-
-#define FT_VALIDATE_feat FT_VALIDATE_GX_BITFIELD( feat )
-#define FT_VALIDATE_mort FT_VALIDATE_GX_BITFIELD( mort )
-#define FT_VALIDATE_morx FT_VALIDATE_GX_BITFIELD( morx )
-#define FT_VALIDATE_bsln FT_VALIDATE_GX_BITFIELD( bsln )
-#define FT_VALIDATE_just FT_VALIDATE_GX_BITFIELD( just )
-#define FT_VALIDATE_kern FT_VALIDATE_GX_BITFIELD( kern )
-#define FT_VALIDATE_opbd FT_VALIDATE_GX_BITFIELD( opbd )
-#define FT_VALIDATE_trak FT_VALIDATE_GX_BITFIELD( trak )
-#define FT_VALIDATE_prop FT_VALIDATE_GX_BITFIELD( prop )
-#define FT_VALIDATE_lcar FT_VALIDATE_GX_BITFIELD( lcar )
-
-#define FT_VALIDATE_GX ( FT_VALIDATE_feat | \
- FT_VALIDATE_mort | \
- FT_VALIDATE_morx | \
- FT_VALIDATE_bsln | \
- FT_VALIDATE_just | \
- FT_VALIDATE_kern | \
- FT_VALIDATE_opbd | \
- FT_VALIDATE_trak | \
- FT_VALIDATE_prop | \
- FT_VALIDATE_lcar )
-
-
- /**********************************************************************
- *
- * @function:
- * FT_TrueTypeGX_Validate
- *
- * @description:
- * Validate various TrueTypeGX tables to assure that all offsets and
- * indices are valid. The idea is that a higher-level library that
- * actually does the text layout can access those tables without
- * error checking (which can be quite time consuming).
- *
- * @input:
- * face ::
- * A handle to the input face.
- *
- * validation_flags ::
- * A bit field that specifies the tables to be validated. See
- * @FT_VALIDATE_GXXXX for possible values.
- *
- * table_length ::
- * The size of the `tables' array. Normally, @FT_VALIDATE_GX_LENGTH
- * should be passed.
- *
- * @output:
- * tables ::
- * The array where all validated sfnt tables are stored.
- * The array itself must be allocated by a client.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This function only works with TrueTypeGX fonts, returning an error
- * otherwise.
- *
- * After use, the application should deallocate the buffers pointed to by
- * each `tables' element, by calling @FT_TrueTypeGX_Free. A NULL value
- * indicates that the table either doesn't exist in the font, the
- * application hasn't asked for validation, or the validator doesn't have
- * the ability to validate the sfnt table.
- */
- FT_EXPORT( FT_Error )
- FT_TrueTypeGX_Validate( FT_Face face,
- FT_UInt validation_flags,
- FT_Bytes tables[FT_VALIDATE_GX_LENGTH],
- FT_UInt table_length );
-
-
- /**********************************************************************
- *
- * @function:
- * FT_TrueTypeGX_Free
- *
- * @description:
- * Free the buffer allocated by TrueTypeGX validator.
- *
- * @input:
- * face ::
- * A handle to the input face.
- *
- * table ::
- * The pointer to the buffer allocated by
- * @FT_TrueTypeGX_Validate.
- *
- * @note:
- * This function must be used to free the buffer allocated by
- * @FT_TrueTypeGX_Validate only.
- */
- FT_EXPORT( void )
- FT_TrueTypeGX_Free( FT_Face face,
- FT_Bytes table );
-
-
- /**********************************************************************
- *
- * @enum:
- * FT_VALIDATE_CKERNXXX
- *
- * @description:
- * A list of bit-field constants used with @FT_ClassicKern_Validate
- * to indicate the classic kern dialect or dialects. If the selected
- * type doesn't fit, @FT_ClassicKern_Validate regards the table as
- * invalid.
- *
- * @values:
- * FT_VALIDATE_MS ::
- * Handle the `kern' table as a classic Microsoft kern table.
- *
- * FT_VALIDATE_APPLE ::
- * Handle the `kern' table as a classic Apple kern table.
- *
- * FT_VALIDATE_CKERN ::
- * Handle the `kern' as either classic Apple or Microsoft kern table.
- */
-#define FT_VALIDATE_MS ( FT_VALIDATE_GX_START << 0 )
-#define FT_VALIDATE_APPLE ( FT_VALIDATE_GX_START << 1 )
-
-#define FT_VALIDATE_CKERN ( FT_VALIDATE_MS | FT_VALIDATE_APPLE )
-
-
- /**********************************************************************
- *
- * @function:
- * FT_ClassicKern_Validate
- *
- * @description:
- * Validate classic (16-bit format) kern table to assure that the offsets
- * and indices are valid. The idea is that a higher-level library that
- * actually does the text layout can access those tables without error
- * checking (which can be quite time consuming).
- *
- * The `kern' table validator in @FT_TrueTypeGX_Validate deals with both
- * the new 32-bit format and the classic 16-bit format, while
- * FT_ClassicKern_Validate only supports the classic 16-bit format.
- *
- * @input:
- * face ::
- * A handle to the input face.
- *
- * validation_flags ::
- * A bit field that specifies the dialect to be validated. See
- * @FT_VALIDATE_CKERNXXX for possible values.
- *
- * @output:
- * ckern_table ::
- * A pointer to the kern table.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * After use, the application should deallocate the buffers pointed to by
- * `ckern_table', by calling @FT_ClassicKern_Free. A NULL value
- * indicates that the table doesn't exist in the font.
- */
- FT_EXPORT( FT_Error )
- FT_ClassicKern_Validate( FT_Face face,
- FT_UInt validation_flags,
- FT_Bytes *ckern_table );
-
-
- /**********************************************************************
- *
- * @function:
- * FT_ClassicKern_Free
- *
- * @description:
- * Free the buffer allocated by classic Kern validator.
- *
- * @input:
- * face ::
- * A handle to the input face.
- *
- * table ::
- * The pointer to the buffer that is allocated by
- * @FT_ClassicKern_Validate.
- *
- * @note:
- * This function must be used to free the buffer allocated by
- * @FT_ClassicKern_Validate only.
- */
- FT_EXPORT( void )
- FT_ClassicKern_Free( FT_Face face,
- FT_Bytes table );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTGXVAL_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftgzip.h b/include/freetype/ftgzip.h
deleted file mode 100644
index bd5ceaab9..000000000
--- a/include/freetype/ftgzip.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgzip.h */
-/* */
-/* Gzip-compressed stream support. */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTGZIP_H_
-#define FTGZIP_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* gzip */
- /* */
- /* <Title> */
- /* GZIP Streams */
- /* */
- /* <Abstract> */
- /* Using gzip-compressed font files. */
- /* */
- /* <Description> */
- /* This section contains the declaration of Gzip-specific functions. */
- /* */
- /*************************************************************************/
-
-
- /************************************************************************
- *
- * @function:
- * FT_Stream_OpenGzip
- *
- * @description:
- * Open a new stream to parse gzip-compressed font files. This is
- * mainly used to support the compressed `*.pcf.gz' fonts that come
- * with XFree86.
- *
- * @input:
- * stream ::
- * The target embedding stream.
- *
- * source ::
- * The source stream.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * The source stream must be opened _before_ calling this function.
- *
- * Calling the internal function `FT_Stream_Close' on the new stream will
- * *not* call `FT_Stream_Close' on the source stream. None of the stream
- * objects will be released to the heap.
- *
- * The stream implementation is very basic and resets the decompression
- * process each time seeking backwards is needed within the stream.
- *
- * In certain builds of the library, gzip compression recognition is
- * automatically handled when calling @FT_New_Face or @FT_Open_Face.
- * This means that if no font driver is capable of handling the raw
- * compressed file, the library will try to open a gzipped stream from
- * it and re-open the face with it.
- *
- * This function may return `FT_Err_Unimplemented_Feature' if your build
- * of FreeType was not compiled with zlib support.
- */
- FT_EXPORT( FT_Error )
- FT_Stream_OpenGzip( FT_Stream stream,
- FT_Stream source );
-
-
- /************************************************************************
- *
- * @function:
- * FT_Gzip_Uncompress
- *
- * @description:
- * Decompress a zipped input buffer into an output buffer. This function
- * is modeled after zlib's `uncompress' function.
- *
- * @input:
- * memory ::
- * A FreeType memory handle.
- *
- * input ::
- * The input buffer.
- *
- * input_len ::
- * The length of the input buffer.
- *
- * @output:
- * output::
- * The output buffer.
- *
- * @inout:
- * output_len ::
- * Before calling the function, this is the total size of the output
- * buffer, which must be large enough to hold the entire uncompressed
- * data (so the size of the uncompressed data must be known in
- * advance). After calling the function, `output_len' is the size of
- * the used data in `output'.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This function may return `FT_Err_Unimplemented_Feature' if your build
- * of FreeType was not compiled with zlib support.
- */
- FT_EXPORT( FT_Error )
- FT_Gzip_Uncompress( FT_Memory memory,
- FT_Byte* output,
- FT_ULong* output_len,
- const FT_Byte* input,
- FT_ULong input_len );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTGZIP_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftimage.h b/include/freetype/ftimage.h
deleted file mode 100644
index 1c789e5a4..000000000
--- a/include/freetype/ftimage.h
+++ /dev/null
@@ -1,1205 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftimage.h */
-/* */
-/* FreeType glyph image formats and default raster interface */
-/* (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* Note: A `raster' is simply a scan-line converter, used to render */
- /* FT_Outlines into FT_Bitmaps. */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTIMAGE_H_
-#define FTIMAGE_H_
-
-
- /* STANDALONE_ is from ftgrays.c */
-#ifndef STANDALONE_
-#include <ft2build.h>
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* basic_types */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Pos */
- /* */
- /* <Description> */
- /* The type FT_Pos is used to store vectorial coordinates. Depending */
- /* on the context, these can represent distances in integer font */
- /* units, or 16.16, or 26.6 fixed-point pixel coordinates. */
- /* */
- typedef signed long FT_Pos;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Vector */
- /* */
- /* <Description> */
- /* A simple structure used to store a 2D vector; coordinates are of */
- /* the FT_Pos type. */
- /* */
- /* <Fields> */
- /* x :: The horizontal coordinate. */
- /* y :: The vertical coordinate. */
- /* */
- typedef struct FT_Vector_
- {
- FT_Pos x;
- FT_Pos y;
-
- } FT_Vector;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_BBox */
- /* */
- /* <Description> */
- /* A structure used to hold an outline's bounding box, i.e., the */
- /* coordinates of its extrema in the horizontal and vertical */
- /* directions. */
- /* */
- /* <Fields> */
- /* xMin :: The horizontal minimum (left-most). */
- /* */
- /* yMin :: The vertical minimum (bottom-most). */
- /* */
- /* xMax :: The horizontal maximum (right-most). */
- /* */
- /* yMax :: The vertical maximum (top-most). */
- /* */
- /* <Note> */
- /* The bounding box is specified with the coordinates of the lower */
- /* left and the upper right corner. In PostScript, those values are */
- /* often called (llx,lly) and (urx,ury), respectively. */
- /* */
- /* If `yMin' is negative, this value gives the glyph's descender. */
- /* Otherwise, the glyph doesn't descend below the baseline. */
- /* Similarly, if `ymax' is positive, this value gives the glyph's */
- /* ascender. */
- /* */
- /* `xMin' gives the horizontal distance from the glyph's origin to */
- /* the left edge of the glyph's bounding box. If `xMin' is negative, */
- /* the glyph extends to the left of the origin. */
- /* */
- typedef struct FT_BBox_
- {
- FT_Pos xMin, yMin;
- FT_Pos xMax, yMax;
-
- } FT_BBox;
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Pixel_Mode */
- /* */
- /* <Description> */
- /* An enumeration type used to describe the format of pixels in a */
- /* given bitmap. Note that additional formats may be added in the */
- /* future. */
- /* */
- /* <Values> */
- /* FT_PIXEL_MODE_NONE :: */
- /* Value~0 is reserved. */
- /* */
- /* FT_PIXEL_MODE_MONO :: */
- /* A monochrome bitmap, using 1~bit per pixel. Note that pixels */
- /* are stored in most-significant order (MSB), which means that */
- /* the left-most pixel in a byte has value 128. */
- /* */
- /* FT_PIXEL_MODE_GRAY :: */
- /* An 8-bit bitmap, generally used to represent anti-aliased glyph */
- /* images. Each pixel is stored in one byte. Note that the number */
- /* of `gray' levels is stored in the `num_grays' field of the */
- /* @FT_Bitmap structure (it generally is 256). */
- /* */
- /* FT_PIXEL_MODE_GRAY2 :: */
- /* A 2-bit per pixel bitmap, used to represent embedded */
- /* anti-aliased bitmaps in font files according to the OpenType */
- /* specification. We haven't found a single font using this */
- /* format, however. */
- /* */
- /* FT_PIXEL_MODE_GRAY4 :: */
- /* A 4-bit per pixel bitmap, representing embedded anti-aliased */
- /* bitmaps in font files according to the OpenType specification. */
- /* We haven't found a single font using this format, however. */
- /* */
- /* FT_PIXEL_MODE_LCD :: */
- /* An 8-bit bitmap, representing RGB or BGR decimated glyph images */
- /* used for display on LCD displays; the bitmap is three times */
- /* wider than the original glyph image. See also */
- /* @FT_RENDER_MODE_LCD. */
- /* */
- /* FT_PIXEL_MODE_LCD_V :: */
- /* An 8-bit bitmap, representing RGB or BGR decimated glyph images */
- /* used for display on rotated LCD displays; the bitmap is three */
- /* times taller than the original glyph image. See also */
- /* @FT_RENDER_MODE_LCD_V. */
- /* */
- /* FT_PIXEL_MODE_BGRA :: */
- /* An image with four 8-bit channels per pixel, representing a */
- /* color image (such as emoticons) with alpha channel. For each */
- /* pixel, the format is BGRA, which means, the blue channel comes */
- /* first in memory. The color channels are pre-multiplied and in */
- /* the sRGB colorspace. For example, full red at half-translucent */
- /* opacity will be represented as `00,00,80,80', not `00,00,FF,80'. */
- /* See also @FT_LOAD_COLOR. */
- /* */
- typedef enum FT_Pixel_Mode_
- {
- FT_PIXEL_MODE_NONE = 0,
- FT_PIXEL_MODE_MONO,
- FT_PIXEL_MODE_GRAY,
- FT_PIXEL_MODE_GRAY2,
- FT_PIXEL_MODE_GRAY4,
- FT_PIXEL_MODE_LCD,
- FT_PIXEL_MODE_LCD_V,
- FT_PIXEL_MODE_BGRA,
-
- FT_PIXEL_MODE_MAX /* do not remove */
-
- } FT_Pixel_Mode;
-
-
- /* these constants are deprecated; use the corresponding `FT_Pixel_Mode' */
- /* values instead. */
-#define ft_pixel_mode_none FT_PIXEL_MODE_NONE
-#define ft_pixel_mode_mono FT_PIXEL_MODE_MONO
-#define ft_pixel_mode_grays FT_PIXEL_MODE_GRAY
-#define ft_pixel_mode_pal2 FT_PIXEL_MODE_GRAY2
-#define ft_pixel_mode_pal4 FT_PIXEL_MODE_GRAY4
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Bitmap */
- /* */
- /* <Description> */
- /* A structure used to describe a bitmap or pixmap to the raster. */
- /* Note that we now manage pixmaps of various depths through the */
- /* `pixel_mode' field. */
- /* */
- /* <Fields> */
- /* rows :: The number of bitmap rows. */
- /* */
- /* width :: The number of pixels in bitmap row. */
- /* */
- /* pitch :: The pitch's absolute value is the number of bytes */
- /* taken by one bitmap row, including padding. */
- /* However, the pitch is positive when the bitmap has */
- /* a `down' flow, and negative when it has an `up' */
- /* flow. In all cases, the pitch is an offset to add */
- /* to a bitmap pointer in order to go down one row. */
- /* */
- /* Note that `padding' means the alignment of a */
- /* bitmap to a byte border, and FreeType functions */
- /* normally align to the smallest possible integer */
- /* value. */
- /* */
- /* For the B/W rasterizer, `pitch' is always an even */
- /* number. */
- /* */
- /* To change the pitch of a bitmap (say, to make it a */
- /* multiple of 4), use @FT_Bitmap_Convert. */
- /* Alternatively, you might use callback functions to */
- /* directly render to the application's surface; see */
- /* the file `example2.cpp' in the tutorial for a */
- /* demonstration. */
- /* */
- /* buffer :: A typeless pointer to the bitmap buffer. This */
- /* value should be aligned on 32-bit boundaries in */
- /* most cases. */
- /* */
- /* num_grays :: This field is only used with */
- /* @FT_PIXEL_MODE_GRAY; it gives the number of gray */
- /* levels used in the bitmap. */
- /* */
- /* pixel_mode :: The pixel mode, i.e., how pixel bits are stored. */
- /* See @FT_Pixel_Mode for possible values. */
- /* */
- /* palette_mode :: This field is intended for paletted pixel modes; */
- /* it indicates how the palette is stored. Not */
- /* used currently. */
- /* */
- /* palette :: A typeless pointer to the bitmap palette; this */
- /* field is intended for paletted pixel modes. Not */
- /* used currently. */
- /* */
- typedef struct FT_Bitmap_
- {
- unsigned int rows;
- unsigned int width;
- int pitch;
- unsigned char* buffer;
- unsigned short num_grays;
- unsigned char pixel_mode;
- unsigned char palette_mode;
- void* palette;
-
- } FT_Bitmap;
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* outline_processing */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Outline */
- /* */
- /* <Description> */
- /* This structure is used to describe an outline to the scan-line */
- /* converter. */
- /* */
- /* <Fields> */
- /* n_contours :: The number of contours in the outline. */
- /* */
- /* n_points :: The number of points in the outline. */
- /* */
- /* points :: A pointer to an array of `n_points' @FT_Vector */
- /* elements, giving the outline's point coordinates. */
- /* */
- /* tags :: A pointer to an array of `n_points' chars, giving */
- /* each outline point's type. */
- /* */
- /* If bit~0 is unset, the point is `off' the curve, */
- /* i.e., a Bézier control point, while it is `on' if */
- /* set. */
- /* */
- /* Bit~1 is meaningful for `off' points only. If set, */
- /* it indicates a third-order Bézier arc control point; */
- /* and a second-order control point if unset. */
- /* */
- /* If bit~2 is set, bits 5-7 contain the drop-out mode */
- /* (as defined in the OpenType specification; the value */
- /* is the same as the argument to the SCANMODE */
- /* instruction). */
- /* */
- /* Bits 3 and~4 are reserved for internal purposes. */
- /* */
- /* contours :: An array of `n_contours' shorts, giving the end */
- /* point of each contour within the outline. For */
- /* example, the first contour is defined by the points */
- /* `0' to `contours[0]', the second one is defined by */
- /* the points `contours[0]+1' to `contours[1]', etc. */
- /* */
- /* flags :: A set of bit flags used to characterize the outline */
- /* and give hints to the scan-converter and hinter on */
- /* how to convert/grid-fit it. See @FT_OUTLINE_XXX. */
- /* */
- /* <Note> */
- /* The B/W rasterizer only checks bit~2 in the `tags' array for the */
- /* first point of each contour. The drop-out mode as given with */
- /* @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and */
- /* @FT_OUTLINE_INCLUDE_STUBS in `flags' is then overridden. */
- /* */
- typedef struct FT_Outline_
- {
- short n_contours; /* number of contours in glyph */
- short n_points; /* number of points in the glyph */
-
- FT_Vector* points; /* the outline's points */
- char* tags; /* the points flags */
- short* contours; /* the contour end points */
-
- int flags; /* outline masks */
-
- } FT_Outline;
-
- /* */
-
- /* Following limits must be consistent with */
- /* FT_Outline.{n_contours,n_points} */
-#define FT_OUTLINE_CONTOURS_MAX SHRT_MAX
-#define FT_OUTLINE_POINTS_MAX SHRT_MAX
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_OUTLINE_XXX */
- /* */
- /* <Description> */
- /* A list of bit-field constants use for the flags in an outline's */
- /* `flags' field. */
- /* */
- /* <Values> */
- /* FT_OUTLINE_NONE :: */
- /* Value~0 is reserved. */
- /* */
- /* FT_OUTLINE_OWNER :: */
- /* If set, this flag indicates that the outline's field arrays */
- /* (i.e., `points', `flags', and `contours') are `owned' by the */
- /* outline object, and should thus be freed when it is destroyed. */
- /* */
- /* FT_OUTLINE_EVEN_ODD_FILL :: */
- /* By default, outlines are filled using the non-zero winding rule. */
- /* If set to 1, the outline will be filled using the even-odd fill */
- /* rule (only works with the smooth rasterizer). */
- /* */
- /* FT_OUTLINE_REVERSE_FILL :: */
- /* By default, outside contours of an outline are oriented in */
- /* clock-wise direction, as defined in the TrueType specification. */
- /* This flag is set if the outline uses the opposite direction */
- /* (typically for Type~1 fonts). This flag is ignored by the scan */
- /* converter. */
- /* */
- /* FT_OUTLINE_IGNORE_DROPOUTS :: */
- /* By default, the scan converter will try to detect drop-outs in */
- /* an outline and correct the glyph bitmap to ensure consistent */
- /* shape continuity. If set, this flag hints the scan-line */
- /* converter to ignore such cases. See below for more information. */
- /* */
- /* FT_OUTLINE_SMART_DROPOUTS :: */
- /* Select smart dropout control. If unset, use simple dropout */
- /* control. Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See */
- /* below for more information. */
- /* */
- /* FT_OUTLINE_INCLUDE_STUBS :: */
- /* If set, turn pixels on for `stubs', otherwise exclude them. */
- /* Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for */
- /* more information. */
- /* */
- /* FT_OUTLINE_HIGH_PRECISION :: */
- /* This flag indicates that the scan-line converter should try to */
- /* convert this outline to bitmaps with the highest possible */
- /* quality. It is typically set for small character sizes. Note */
- /* that this is only a hint that might be completely ignored by a */
- /* given scan-converter. */
- /* */
- /* FT_OUTLINE_SINGLE_PASS :: */
- /* This flag is set to force a given scan-converter to only use a */
- /* single pass over the outline to render a bitmap glyph image. */
- /* Normally, it is set for very large character sizes. It is only */
- /* a hint that might be completely ignored by a given */
- /* scan-converter. */
- /* */
- /* <Note> */
- /* The flags @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, */
- /* and @FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth */
- /* rasterizer. */
- /* */
- /* There exists a second mechanism to pass the drop-out mode to the */
- /* B/W rasterizer; see the `tags' field in @FT_Outline. */
- /* */
- /* Please refer to the description of the `SCANTYPE' instruction in */
- /* the OpenType specification (in file `ttinst1.doc') how simple */
- /* drop-outs, smart drop-outs, and stubs are defined. */
- /* */
-#define FT_OUTLINE_NONE 0x0
-#define FT_OUTLINE_OWNER 0x1
-#define FT_OUTLINE_EVEN_ODD_FILL 0x2
-#define FT_OUTLINE_REVERSE_FILL 0x4
-#define FT_OUTLINE_IGNORE_DROPOUTS 0x8
-#define FT_OUTLINE_SMART_DROPOUTS 0x10
-#define FT_OUTLINE_INCLUDE_STUBS 0x20
-
-#define FT_OUTLINE_HIGH_PRECISION 0x100
-#define FT_OUTLINE_SINGLE_PASS 0x200
-
-
- /* these constants are deprecated; use the corresponding */
- /* `FT_OUTLINE_XXX' values instead */
-#define ft_outline_none FT_OUTLINE_NONE
-#define ft_outline_owner FT_OUTLINE_OWNER
-#define ft_outline_even_odd_fill FT_OUTLINE_EVEN_ODD_FILL
-#define ft_outline_reverse_fill FT_OUTLINE_REVERSE_FILL
-#define ft_outline_ignore_dropouts FT_OUTLINE_IGNORE_DROPOUTS
-#define ft_outline_high_precision FT_OUTLINE_HIGH_PRECISION
-#define ft_outline_single_pass FT_OUTLINE_SINGLE_PASS
-
- /* */
-
-#define FT_CURVE_TAG( flag ) ( flag & 3 )
-
-#define FT_CURVE_TAG_ON 1
-#define FT_CURVE_TAG_CONIC 0
-#define FT_CURVE_TAG_CUBIC 2
-
-#define FT_CURVE_TAG_HAS_SCANMODE 4
-
-#define FT_CURVE_TAG_TOUCH_X 8 /* reserved for the TrueType hinter */
-#define FT_CURVE_TAG_TOUCH_Y 16 /* reserved for the TrueType hinter */
-
-#define FT_CURVE_TAG_TOUCH_BOTH ( FT_CURVE_TAG_TOUCH_X | \
- FT_CURVE_TAG_TOUCH_Y )
-
-#define FT_Curve_Tag_On FT_CURVE_TAG_ON
-#define FT_Curve_Tag_Conic FT_CURVE_TAG_CONIC
-#define FT_Curve_Tag_Cubic FT_CURVE_TAG_CUBIC
-#define FT_Curve_Tag_Touch_X FT_CURVE_TAG_TOUCH_X
-#define FT_Curve_Tag_Touch_Y FT_CURVE_TAG_TOUCH_Y
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Outline_MoveToFunc */
- /* */
- /* <Description> */
- /* A function pointer type used to describe the signature of a `move */
- /* to' function during outline walking/decomposition. */
- /* */
- /* A `move to' is emitted to start a new contour in an outline. */
- /* */
- /* <Input> */
- /* to :: A pointer to the target point of the `move to'. */
- /* */
- /* user :: A typeless pointer, which is passed from the caller of the */
- /* decomposition function. */
- /* */
- /* <Return> */
- /* Error code. 0~means success. */
- /* */
- typedef int
- (*FT_Outline_MoveToFunc)( const FT_Vector* to,
- void* user );
-
-#define FT_Outline_MoveTo_Func FT_Outline_MoveToFunc
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Outline_LineToFunc */
- /* */
- /* <Description> */
- /* A function pointer type used to describe the signature of a `line */
- /* to' function during outline walking/decomposition. */
- /* */
- /* A `line to' is emitted to indicate a segment in the outline. */
- /* */
- /* <Input> */
- /* to :: A pointer to the target point of the `line to'. */
- /* */
- /* user :: A typeless pointer, which is passed from the caller of the */
- /* decomposition function. */
- /* */
- /* <Return> */
- /* Error code. 0~means success. */
- /* */
- typedef int
- (*FT_Outline_LineToFunc)( const FT_Vector* to,
- void* user );
-
-#define FT_Outline_LineTo_Func FT_Outline_LineToFunc
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Outline_ConicToFunc */
- /* */
- /* <Description> */
- /* A function pointer type used to describe the signature of a `conic */
- /* to' function during outline walking or decomposition. */
- /* */
- /* A `conic to' is emitted to indicate a second-order Bézier arc in */
- /* the outline. */
- /* */
- /* <Input> */
- /* control :: An intermediate control point between the last position */
- /* and the new target in `to'. */
- /* */
- /* to :: A pointer to the target end point of the conic arc. */
- /* */
- /* user :: A typeless pointer, which is passed from the caller of */
- /* the decomposition function. */
- /* */
- /* <Return> */
- /* Error code. 0~means success. */
- /* */
- typedef int
- (*FT_Outline_ConicToFunc)( const FT_Vector* control,
- const FT_Vector* to,
- void* user );
-
-#define FT_Outline_ConicTo_Func FT_Outline_ConicToFunc
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Outline_CubicToFunc */
- /* */
- /* <Description> */
- /* A function pointer type used to describe the signature of a `cubic */
- /* to' function during outline walking or decomposition. */
- /* */
- /* A `cubic to' is emitted to indicate a third-order Bézier arc. */
- /* */
- /* <Input> */
- /* control1 :: A pointer to the first Bézier control point. */
- /* */
- /* control2 :: A pointer to the second Bézier control point. */
- /* */
- /* to :: A pointer to the target end point. */
- /* */
- /* user :: A typeless pointer, which is passed from the caller of */
- /* the decomposition function. */
- /* */
- /* <Return> */
- /* Error code. 0~means success. */
- /* */
- typedef int
- (*FT_Outline_CubicToFunc)( const FT_Vector* control1,
- const FT_Vector* control2,
- const FT_Vector* to,
- void* user );
-
-#define FT_Outline_CubicTo_Func FT_Outline_CubicToFunc
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Outline_Funcs */
- /* */
- /* <Description> */
- /* A structure to hold various function pointers used during outline */
- /* decomposition in order to emit segments, conic, and cubic Béziers. */
- /* */
- /* <Fields> */
- /* move_to :: The `move to' emitter. */
- /* */
- /* line_to :: The segment emitter. */
- /* */
- /* conic_to :: The second-order Bézier arc emitter. */
- /* */
- /* cubic_to :: The third-order Bézier arc emitter. */
- /* */
- /* shift :: The shift that is applied to coordinates before they */
- /* are sent to the emitter. */
- /* */
- /* delta :: The delta that is applied to coordinates before they */
- /* are sent to the emitter, but after the shift. */
- /* */
- /* <Note> */
- /* The point coordinates sent to the emitters are the transformed */
- /* version of the original coordinates (this is important for high */
- /* accuracy during scan-conversion). The transformation is simple: */
- /* */
- /* { */
- /* x' = (x << shift) - delta */
- /* y' = (y << shift) - delta */
- /* } */
- /* */
- /* Set the values of `shift' and `delta' to~0 to get the original */
- /* point coordinates. */
- /* */
- typedef struct FT_Outline_Funcs_
- {
- FT_Outline_MoveToFunc move_to;
- FT_Outline_LineToFunc line_to;
- FT_Outline_ConicToFunc conic_to;
- FT_Outline_CubicToFunc cubic_to;
-
- int shift;
- FT_Pos delta;
-
- } FT_Outline_Funcs;
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* basic_types */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_IMAGE_TAG */
- /* */
- /* <Description> */
- /* This macro converts four-letter tags to an unsigned long type. */
- /* */
- /* <Note> */
- /* Since many 16-bit compilers don't like 32-bit enumerations, you */
- /* should redefine this macro in case of problems to something like */
- /* this: */
- /* */
- /* { */
- /* #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value */
- /* } */
- /* */
- /* to get a simple enumeration without assigning special numbers. */
- /* */
-#ifndef FT_IMAGE_TAG
-#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) \
- value = ( ( (unsigned long)_x1 << 24 ) | \
- ( (unsigned long)_x2 << 16 ) | \
- ( (unsigned long)_x3 << 8 ) | \
- (unsigned long)_x4 )
-#endif /* FT_IMAGE_TAG */
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Glyph_Format */
- /* */
- /* <Description> */
- /* An enumeration type used to describe the format of a given glyph */
- /* image. Note that this version of FreeType only supports two image */
- /* formats, even though future font drivers will be able to register */
- /* their own format. */
- /* */
- /* <Values> */
- /* FT_GLYPH_FORMAT_NONE :: */
- /* The value~0 is reserved. */
- /* */
- /* FT_GLYPH_FORMAT_COMPOSITE :: */
- /* The glyph image is a composite of several other images. This */
- /* format is _only_ used with @FT_LOAD_NO_RECURSE, and is used to */
- /* report compound glyphs (like accented characters). */
- /* */
- /* FT_GLYPH_FORMAT_BITMAP :: */
- /* The glyph image is a bitmap, and can be described as an */
- /* @FT_Bitmap. You generally need to access the `bitmap' field of */
- /* the @FT_GlyphSlotRec structure to read it. */
- /* */
- /* FT_GLYPH_FORMAT_OUTLINE :: */
- /* The glyph image is a vectorial outline made of line segments */
- /* and Bézier arcs; it can be described as an @FT_Outline; you */
- /* generally want to access the `outline' field of the */
- /* @FT_GlyphSlotRec structure to read it. */
- /* */
- /* FT_GLYPH_FORMAT_PLOTTER :: */
- /* The glyph image is a vectorial path with no inside and outside */
- /* contours. Some Type~1 fonts, like those in the Hershey family, */
- /* contain glyphs in this format. These are described as */
- /* @FT_Outline, but FreeType isn't currently capable of rendering */
- /* them correctly. */
- /* */
- typedef enum FT_Glyph_Format_
- {
- FT_IMAGE_TAG( FT_GLYPH_FORMAT_NONE, 0, 0, 0, 0 ),
-
- FT_IMAGE_TAG( FT_GLYPH_FORMAT_COMPOSITE, 'c', 'o', 'm', 'p' ),
- FT_IMAGE_TAG( FT_GLYPH_FORMAT_BITMAP, 'b', 'i', 't', 's' ),
- FT_IMAGE_TAG( FT_GLYPH_FORMAT_OUTLINE, 'o', 'u', 't', 'l' ),
- FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER, 'p', 'l', 'o', 't' )
-
- } FT_Glyph_Format;
-
-
- /* these constants are deprecated; use the corresponding */
- /* `FT_Glyph_Format' values instead. */
-#define ft_glyph_format_none FT_GLYPH_FORMAT_NONE
-#define ft_glyph_format_composite FT_GLYPH_FORMAT_COMPOSITE
-#define ft_glyph_format_bitmap FT_GLYPH_FORMAT_BITMAP
-#define ft_glyph_format_outline FT_GLYPH_FORMAT_OUTLINE
-#define ft_glyph_format_plotter FT_GLYPH_FORMAT_PLOTTER
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** R A S T E R D E F I N I T I O N S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* A raster is a scan converter, in charge of rendering an outline into */
- /* a bitmap. This section contains the public API for rasters. */
- /* */
- /* Note that in FreeType 2, all rasters are now encapsulated within */
- /* specific modules called `renderers'. See `ftrender.h' for more */
- /* details on renderers. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* raster */
- /* */
- /* <Title> */
- /* Scanline Converter */
- /* */
- /* <Abstract> */
- /* How vectorial outlines are converted into bitmaps and pixmaps. */
- /* */
- /* <Description> */
- /* This section contains technical definitions. */
- /* */
- /* <Order> */
- /* FT_Raster */
- /* FT_Span */
- /* FT_SpanFunc */
- /* */
- /* FT_Raster_Params */
- /* FT_RASTER_FLAG_XXX */
- /* */
- /* FT_Raster_NewFunc */
- /* FT_Raster_DoneFunc */
- /* FT_Raster_ResetFunc */
- /* FT_Raster_SetModeFunc */
- /* FT_Raster_RenderFunc */
- /* FT_Raster_Funcs */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Raster */
- /* */
- /* <Description> */
- /* An opaque handle (pointer) to a raster object. Each object can be */
- /* used independently to convert an outline into a bitmap or pixmap. */
- /* */
- typedef struct FT_RasterRec_* FT_Raster;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Span */
- /* */
- /* <Description> */
- /* A structure used to model a single span of gray pixels when */
- /* rendering an anti-aliased bitmap. */
- /* */
- /* <Fields> */
- /* x :: The span's horizontal start position. */
- /* */
- /* len :: The span's length in pixels. */
- /* */
- /* coverage :: The span color/coverage, ranging from 0 (background) */
- /* to 255 (foreground). */
- /* */
- /* <Note> */
- /* This structure is used by the span drawing callback type named */
- /* @FT_SpanFunc that takes the y~coordinate of the span as a */
- /* parameter. */
- /* */
- /* The coverage value is always between 0 and 255. If you want less */
- /* gray values, the callback function has to reduce them. */
- /* */
- typedef struct FT_Span_
- {
- short x;
- unsigned short len;
- unsigned char coverage;
-
- } FT_Span;
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_SpanFunc */
- /* */
- /* <Description> */
- /* A function used as a call-back by the anti-aliased renderer in */
- /* order to let client applications draw themselves the gray pixel */
- /* spans on each scan line. */
- /* */
- /* <Input> */
- /* y :: The scanline's y~coordinate. */
- /* */
- /* count :: The number of spans to draw on this scanline. */
- /* */
- /* spans :: A table of `count' spans to draw on the scanline. */
- /* */
- /* user :: User-supplied data that is passed to the callback. */
- /* */
- /* <Note> */
- /* This callback allows client applications to directly render the */
- /* gray spans of the anti-aliased bitmap to any kind of surfaces. */
- /* */
- /* This can be used to write anti-aliased outlines directly to a */
- /* given background bitmap, and even perform translucency. */
- /* */
- typedef void
- (*FT_SpanFunc)( int y,
- int count,
- const FT_Span* spans,
- void* user );
-
-#define FT_Raster_Span_Func FT_SpanFunc
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Raster_BitTest_Func */
- /* */
- /* <Description> */
- /* Deprecated, unimplemented. */
- /* */
- typedef int
- (*FT_Raster_BitTest_Func)( int y,
- int x,
- void* user );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Raster_BitSet_Func */
- /* */
- /* <Description> */
- /* Deprecated, unimplemented. */
- /* */
- typedef void
- (*FT_Raster_BitSet_Func)( int y,
- int x,
- void* user );
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_RASTER_FLAG_XXX */
- /* */
- /* <Description> */
- /* A list of bit flag constants as used in the `flags' field of a */
- /* @FT_Raster_Params structure. */
- /* */
- /* <Values> */
- /* FT_RASTER_FLAG_DEFAULT :: This value is 0. */
- /* */
- /* FT_RASTER_FLAG_AA :: This flag is set to indicate that an */
- /* anti-aliased glyph image should be */
- /* generated. Otherwise, it will be */
- /* monochrome (1-bit). */
- /* */
- /* FT_RASTER_FLAG_DIRECT :: This flag is set to indicate direct */
- /* rendering. In this mode, client */
- /* applications must provide their own span */
- /* callback. This lets them directly */
- /* draw or compose over an existing bitmap. */
- /* If this bit is not set, the target */
- /* pixmap's buffer _must_ be zeroed before */
- /* rendering. */
- /* */
- /* Direct rendering is only possible with */
- /* anti-aliased glyphs. */
- /* */
- /* FT_RASTER_FLAG_CLIP :: This flag is only used in direct */
- /* rendering mode. If set, the output will */
- /* be clipped to a box specified in the */
- /* `clip_box' field of the */
- /* @FT_Raster_Params structure. */
- /* */
- /* Note that by default, the glyph bitmap */
- /* is clipped to the target pixmap, except */
- /* in direct rendering mode where all spans */
- /* are generated if no clipping box is set. */
- /* */
-#define FT_RASTER_FLAG_DEFAULT 0x0
-#define FT_RASTER_FLAG_AA 0x1
-#define FT_RASTER_FLAG_DIRECT 0x2
-#define FT_RASTER_FLAG_CLIP 0x4
-
- /* these constants are deprecated; use the corresponding */
- /* `FT_RASTER_FLAG_XXX' values instead */
-#define ft_raster_flag_default FT_RASTER_FLAG_DEFAULT
-#define ft_raster_flag_aa FT_RASTER_FLAG_AA
-#define ft_raster_flag_direct FT_RASTER_FLAG_DIRECT
-#define ft_raster_flag_clip FT_RASTER_FLAG_CLIP
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Raster_Params */
- /* */
- /* <Description> */
- /* A structure to hold the arguments used by a raster's render */
- /* function. */
- /* */
- /* <Fields> */
- /* target :: The target bitmap. */
- /* */
- /* source :: A pointer to the source glyph image (e.g., an */
- /* @FT_Outline). */
- /* */
- /* flags :: The rendering flags. */
- /* */
- /* gray_spans :: The gray span drawing callback. */
- /* */
- /* black_spans :: Unused. */
- /* */
- /* bit_test :: Unused. */
- /* */
- /* bit_set :: Unused. */
- /* */
- /* user :: User-supplied data that is passed to each drawing */
- /* callback. */
- /* */
- /* clip_box :: An optional clipping box. It is only used in */
- /* direct rendering mode. Note that coordinates here */
- /* should be expressed in _integer_ pixels (and not in */
- /* 26.6 fixed-point units). */
- /* */
- /* <Note> */
- /* An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA */
- /* bit flag is set in the `flags' field, otherwise a monochrome */
- /* bitmap is generated. */
- /* */
- /* If the @FT_RASTER_FLAG_DIRECT bit flag is set in `flags', the */
- /* raster will call the `gray_spans' callback to draw gray pixel */
- /* spans. This allows direct composition over a pre-existing bitmap */
- /* through user-provided callbacks to perform the span drawing and */
- /* composition. Not supported by the monochrome rasterizer. */
- /* */
- typedef struct FT_Raster_Params_
- {
- const FT_Bitmap* target;
- const void* source;
- int flags;
- FT_SpanFunc gray_spans;
- FT_SpanFunc black_spans; /* unused */
- FT_Raster_BitTest_Func bit_test; /* unused */
- FT_Raster_BitSet_Func bit_set; /* unused */
- void* user;
- FT_BBox clip_box;
-
- } FT_Raster_Params;
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Raster_NewFunc */
- /* */
- /* <Description> */
- /* A function used to create a new raster object. */
- /* */
- /* <Input> */
- /* memory :: A handle to the memory allocator. */
- /* */
- /* <Output> */
- /* raster :: A handle to the new raster object. */
- /* */
- /* <Return> */
- /* Error code. 0~means success. */
- /* */
- /* <Note> */
- /* The `memory' parameter is a typeless pointer in order to avoid */
- /* un-wanted dependencies on the rest of the FreeType code. In */
- /* practice, it is an @FT_Memory object, i.e., a handle to the */
- /* standard FreeType memory allocator. However, this field can be */
- /* completely ignored by a given raster implementation. */
- /* */
- typedef int
- (*FT_Raster_NewFunc)( void* memory,
- FT_Raster* raster );
-
-#define FT_Raster_New_Func FT_Raster_NewFunc
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Raster_DoneFunc */
- /* */
- /* <Description> */
- /* A function used to destroy a given raster object. */
- /* */
- /* <Input> */
- /* raster :: A handle to the raster object. */
- /* */
- typedef void
- (*FT_Raster_DoneFunc)( FT_Raster raster );
-
-#define FT_Raster_Done_Func FT_Raster_DoneFunc
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Raster_ResetFunc */
- /* */
- /* <Description> */
- /* FreeType used to provide an area of memory called the `render */
- /* pool' available to all registered rasterizers. This was not */
- /* thread safe, however, and now FreeType never allocates this pool. */
- /* */
- /* This function is called after a new raster object is created. */
- /* */
- /* <Input> */
- /* raster :: A handle to the new raster object. */
- /* */
- /* pool_base :: Previously, the address in memory of the render pool. */
- /* Set this to NULL. */
- /* */
- /* pool_size :: Previously, the size in bytes of the render pool. */
- /* Set this to 0. */
- /* */
- /* <Note> */
- /* Rasterizers should rely on dynamic or stack allocation if they */
- /* want to (a handle to the memory allocator is passed to the */
- /* rasterizer constructor). */
- /* */
- typedef void
- (*FT_Raster_ResetFunc)( FT_Raster raster,
- unsigned char* pool_base,
- unsigned long pool_size );
-
-#define FT_Raster_Reset_Func FT_Raster_ResetFunc
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Raster_SetModeFunc */
- /* */
- /* <Description> */
- /* This function is a generic facility to change modes or attributes */
- /* in a given raster. This can be used for debugging purposes, or */
- /* simply to allow implementation-specific `features' in a given */
- /* raster module. */
- /* */
- /* <Input> */
- /* raster :: A handle to the new raster object. */
- /* */
- /* mode :: A 4-byte tag used to name the mode or property. */
- /* */
- /* args :: A pointer to the new mode/property to use. */
- /* */
- typedef int
- (*FT_Raster_SetModeFunc)( FT_Raster raster,
- unsigned long mode,
- void* args );
-
-#define FT_Raster_Set_Mode_Func FT_Raster_SetModeFunc
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Raster_RenderFunc */
- /* */
- /* <Description> */
- /* Invoke a given raster to scan-convert a given glyph image into a */
- /* target bitmap. */
- /* */
- /* <Input> */
- /* raster :: A handle to the raster object. */
- /* */
- /* params :: A pointer to an @FT_Raster_Params structure used to */
- /* store the rendering parameters. */
- /* */
- /* <Return> */
- /* Error code. 0~means success. */
- /* */
- /* <Note> */
- /* The exact format of the source image depends on the raster's glyph */
- /* format defined in its @FT_Raster_Funcs structure. It can be an */
- /* @FT_Outline or anything else in order to support a large array of */
- /* glyph formats. */
- /* */
- /* Note also that the render function can fail and return a */
- /* `FT_Err_Unimplemented_Feature' error code if the raster used does */
- /* not support direct composition. */
- /* */
- /* XXX: For now, the standard raster doesn't support direct */
- /* composition but this should change for the final release (see */
- /* the files `demos/src/ftgrays.c' and `demos/src/ftgrays2.c' */
- /* for examples of distinct implementations that support direct */
- /* composition). */
- /* */
- typedef int
- (*FT_Raster_RenderFunc)( FT_Raster raster,
- const FT_Raster_Params* params );
-
-#define FT_Raster_Render_Func FT_Raster_RenderFunc
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Raster_Funcs */
- /* */
- /* <Description> */
- /* A structure used to describe a given raster class to the library. */
- /* */
- /* <Fields> */
- /* glyph_format :: The supported glyph format for this raster. */
- /* */
- /* raster_new :: The raster constructor. */
- /* */
- /* raster_reset :: Used to reset the render pool within the raster. */
- /* */
- /* raster_render :: A function to render a glyph into a given bitmap. */
- /* */
- /* raster_done :: The raster destructor. */
- /* */
- typedef struct FT_Raster_Funcs_
- {
- FT_Glyph_Format glyph_format;
-
- FT_Raster_NewFunc raster_new;
- FT_Raster_ResetFunc raster_reset;
- FT_Raster_SetModeFunc raster_set_mode;
- FT_Raster_RenderFunc raster_render;
- FT_Raster_DoneFunc raster_done;
-
- } FT_Raster_Funcs;
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTIMAGE_H_ */
-
-
-/* END */
-
-
-/* Local Variables: */
-/* coding: utf-8 */
-/* End: */
diff --git a/include/freetype/ftincrem.h b/include/freetype/ftincrem.h
deleted file mode 100644
index f6ae2baed..000000000
--- a/include/freetype/ftincrem.h
+++ /dev/null
@@ -1,354 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftincrem.h */
-/* */
-/* FreeType incremental loading (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTINCREM_H_
-#define FTINCREM_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
- /***************************************************************************
- *
- * @section:
- * incremental
- *
- * @title:
- * Incremental Loading
- *
- * @abstract:
- * Custom Glyph Loading.
- *
- * @description:
- * This section contains various functions used to perform so-called
- * `incremental' glyph loading. This is a mode where all glyphs loaded
- * from a given @FT_Face are provided by the client application.
- *
- * Apart from that, all other tables are loaded normally from the font
- * file. This mode is useful when FreeType is used within another
- * engine, e.g., a PostScript Imaging Processor.
- *
- * To enable this mode, you must use @FT_Open_Face, passing an
- * @FT_Parameter with the @FT_PARAM_TAG_INCREMENTAL tag and an
- * @FT_Incremental_Interface value. See the comments for
- * @FT_Incremental_InterfaceRec for an example.
- *
- */
-
-
- /***************************************************************************
- *
- * @type:
- * FT_Incremental
- *
- * @description:
- * An opaque type describing a user-provided object used to implement
- * `incremental' glyph loading within FreeType. This is used to support
- * embedded fonts in certain environments (e.g., PostScript interpreters),
- * where the glyph data isn't in the font file, or must be overridden by
- * different values.
- *
- * @note:
- * It is up to client applications to create and implement @FT_Incremental
- * objects, as long as they provide implementations for the methods
- * @FT_Incremental_GetGlyphDataFunc, @FT_Incremental_FreeGlyphDataFunc
- * and @FT_Incremental_GetGlyphMetricsFunc.
- *
- * See the description of @FT_Incremental_InterfaceRec to understand how
- * to use incremental objects with FreeType.
- *
- */
- typedef struct FT_IncrementalRec_* FT_Incremental;
-
-
- /***************************************************************************
- *
- * @struct:
- * FT_Incremental_MetricsRec
- *
- * @description:
- * A small structure used to contain the basic glyph metrics returned
- * by the @FT_Incremental_GetGlyphMetricsFunc method.
- *
- * @fields:
- * bearing_x ::
- * Left bearing, in font units.
- *
- * bearing_y ::
- * Top bearing, in font units.
- *
- * advance ::
- * Horizontal component of glyph advance, in font units.
- *
- * advance_v ::
- * Vertical component of glyph advance, in font units.
- *
- * @note:
- * These correspond to horizontal or vertical metrics depending on the
- * value of the `vertical' argument to the function
- * @FT_Incremental_GetGlyphMetricsFunc.
- *
- */
- typedef struct FT_Incremental_MetricsRec_
- {
- FT_Long bearing_x;
- FT_Long bearing_y;
- FT_Long advance;
- FT_Long advance_v; /* since 2.3.12 */
-
- } FT_Incremental_MetricsRec;
-
-
- /***************************************************************************
- *
- * @struct:
- * FT_Incremental_Metrics
- *
- * @description:
- * A handle to an @FT_Incremental_MetricsRec structure.
- *
- */
- typedef struct FT_Incremental_MetricsRec_* FT_Incremental_Metrics;
-
-
- /***************************************************************************
- *
- * @type:
- * FT_Incremental_GetGlyphDataFunc
- *
- * @description:
- * A function called by FreeType to access a given glyph's data bytes
- * during @FT_Load_Glyph or @FT_Load_Char if incremental loading is
- * enabled.
- *
- * Note that the format of the glyph's data bytes depends on the font
- * file format. For TrueType, it must correspond to the raw bytes within
- * the `glyf' table. For PostScript formats, it must correspond to the
- * *unencrypted* charstring bytes, without any `lenIV' header. It is
- * undefined for any other format.
- *
- * @input:
- * incremental ::
- * Handle to an opaque @FT_Incremental handle provided by the client
- * application.
- *
- * glyph_index ::
- * Index of relevant glyph.
- *
- * @output:
- * adata ::
- * A structure describing the returned glyph data bytes (which will be
- * accessed as a read-only byte block).
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * If this function returns successfully the method
- * @FT_Incremental_FreeGlyphDataFunc will be called later to release
- * the data bytes.
- *
- * Nested calls to @FT_Incremental_GetGlyphDataFunc can happen for
- * compound glyphs.
- *
- */
- typedef FT_Error
- (*FT_Incremental_GetGlyphDataFunc)( FT_Incremental incremental,
- FT_UInt glyph_index,
- FT_Data* adata );
-
-
- /***************************************************************************
- *
- * @type:
- * FT_Incremental_FreeGlyphDataFunc
- *
- * @description:
- * A function used to release the glyph data bytes returned by a
- * successful call to @FT_Incremental_GetGlyphDataFunc.
- *
- * @input:
- * incremental ::
- * A handle to an opaque @FT_Incremental handle provided by the client
- * application.
- *
- * data ::
- * A structure describing the glyph data bytes (which will be accessed
- * as a read-only byte block).
- *
- */
- typedef void
- (*FT_Incremental_FreeGlyphDataFunc)( FT_Incremental incremental,
- FT_Data* data );
-
-
- /***************************************************************************
- *
- * @type:
- * FT_Incremental_GetGlyphMetricsFunc
- *
- * @description:
- * A function used to retrieve the basic metrics of a given glyph index
- * before accessing its data. This is necessary because, in certain
- * formats like TrueType, the metrics are stored in a different place from
- * the glyph images proper.
- *
- * @input:
- * incremental ::
- * A handle to an opaque @FT_Incremental handle provided by the client
- * application.
- *
- * glyph_index ::
- * Index of relevant glyph.
- *
- * vertical ::
- * If true, return vertical metrics.
- *
- * ametrics ::
- * This parameter is used for both input and output.
- * The original glyph metrics, if any, in font units. If metrics are
- * not available all the values must be set to zero.
- *
- * @output:
- * ametrics ::
- * The replacement glyph metrics in font units.
- *
- */
- typedef FT_Error
- (*FT_Incremental_GetGlyphMetricsFunc)
- ( FT_Incremental incremental,
- FT_UInt glyph_index,
- FT_Bool vertical,
- FT_Incremental_MetricsRec *ametrics );
-
-
- /**************************************************************************
- *
- * @struct:
- * FT_Incremental_FuncsRec
- *
- * @description:
- * A table of functions for accessing fonts that load data
- * incrementally. Used in @FT_Incremental_InterfaceRec.
- *
- * @fields:
- * get_glyph_data ::
- * The function to get glyph data. Must not be null.
- *
- * free_glyph_data ::
- * The function to release glyph data. Must not be null.
- *
- * get_glyph_metrics ::
- * The function to get glyph metrics. May be null if the font does
- * not provide overriding glyph metrics.
- *
- */
- typedef struct FT_Incremental_FuncsRec_
- {
- FT_Incremental_GetGlyphDataFunc get_glyph_data;
- FT_Incremental_FreeGlyphDataFunc free_glyph_data;
- FT_Incremental_GetGlyphMetricsFunc get_glyph_metrics;
-
- } FT_Incremental_FuncsRec;
-
-
- /***************************************************************************
- *
- * @struct:
- * FT_Incremental_InterfaceRec
- *
- * @description:
- * A structure to be used with @FT_Open_Face to indicate that the user
- * wants to support incremental glyph loading. You should use it with
- * @FT_PARAM_TAG_INCREMENTAL as in the following example:
- *
- * {
- * FT_Incremental_InterfaceRec inc_int;
- * FT_Parameter parameter;
- * FT_Open_Args open_args;
- *
- *
- * // set up incremental descriptor
- * inc_int.funcs = my_funcs;
- * inc_int.object = my_object;
- *
- * // set up optional parameter
- * parameter.tag = FT_PARAM_TAG_INCREMENTAL;
- * parameter.data = &inc_int;
- *
- * // set up FT_Open_Args structure
- * open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS;
- * open_args.pathname = my_font_pathname;
- * open_args.num_params = 1;
- * open_args.params = &parameter; // we use one optional argument
- *
- * // open the font
- * error = FT_Open_Face( library, &open_args, index, &face );
- * ...
- * }
- *
- */
- typedef struct FT_Incremental_InterfaceRec_
- {
- const FT_Incremental_FuncsRec* funcs;
- FT_Incremental object;
-
- } FT_Incremental_InterfaceRec;
-
-
- /***************************************************************************
- *
- * @type:
- * FT_Incremental_Interface
- *
- * @description:
- * A pointer to an @FT_Incremental_InterfaceRec structure.
- *
- */
- typedef FT_Incremental_InterfaceRec* FT_Incremental_Interface;
-
-
- /***************************************************************************
- *
- * @constant:
- * FT_PARAM_TAG_INCREMENTAL
- *
- * @description:
- * A constant used as the tag of @FT_Parameter structures to indicate
- * an incremental loading object to be used by FreeType.
- *
- */
-#define FT_PARAM_TAG_INCREMENTAL FT_MAKE_TAG( 'i', 'n', 'c', 'r' )
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTINCREM_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftlcdfil.h b/include/freetype/ftlcdfil.h
deleted file mode 100644
index 680bd90c8..000000000
--- a/include/freetype/ftlcdfil.h
+++ /dev/null
@@ -1,321 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftlcdfil.h */
-/* */
-/* FreeType API for color filtering of subpixel bitmap glyphs */
-/* (specification). */
-/* */
-/* Copyright 2006-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTLCDFIL_H_
-#define FTLCDFIL_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
- /***************************************************************************
- *
- * @section:
- * lcd_filtering
- *
- * @title:
- * LCD Filtering
- *
- * @abstract:
- * Reduce color fringes of subpixel-rendered bitmaps.
- *
- * @description:
- * Subpixel rendering exploits the color-striped structure of LCD
- * pixels, increasing the available resolution in the direction of the
- * stripe (usually horizontal RGB) by a factor of~3. Since these
- * subpixels are color pixels, using them unfiltered creates severe
- * color fringes. Use the @FT_Library_SetLcdFilter API to specify a
- * low-pass filter, which is then applied to subpixel-rendered bitmaps
- * generated through @FT_Render_Glyph. The filter sacrifices some of
- * the higher resolution to reduce color fringes, making the glyph image
- * slightly blurrier. Positional improvements will remain.
- *
- * Note that no filter is active by default, and that this function is
- * *not* implemented in default builds of the library. You need to
- * #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your `ftoption.h' file
- * in order to activate it and explicitly call @FT_Library_SetLcdFilter
- * to enable it.
- *
- * A filter should have two properties:
- *
- * 1) It should be normalized, meaning the sum of the 5~components
- * should be 256 (0x100). It is possible to go above or under this
- * target sum, however: going under means tossing out contrast, going
- * over means invoking clamping and thereby non-linearities that
- * increase contrast somewhat at the expense of greater distortion
- * and color-fringing. Contrast is better enhanced through stem
- * darkening.
- *
- * 2) It should be color-balanced, meaning a filter `{~a, b, c, b, a~}'
- * where a~+ b~=~c. It distributes the computed coverage for one
- * subpixel to all subpixels equally, sacrificing some won resolution
- * but drastically reducing color-fringing. Positioning improvements
- * remain! Note that color-fringing can only really be minimized
- * when using a color-balanced filter and alpha-blending the glyph
- * onto a surface in linear space; see @FT_Render_Glyph.
- *
- * Regarding the form, a filter can be a `boxy' filter or a `beveled'
- * filter. Boxy filters are sharper but are less forgiving of non-ideal
- * gamma curves of a screen (viewing angles!), beveled filters are
- * fuzzier but more tolerant.
- *
- * Examples:
- *
- * - [0x10 0x40 0x70 0x40 0x10] is beveled and neither balanced nor
- * normalized.
- *
- * - [0x1A 0x33 0x4D 0x33 0x1A] is beveled and balanced but not
- * normalized.
- *
- * - [0x19 0x33 0x66 0x4c 0x19] is beveled and normalized but not
- * balanced.
- *
- * - [0x00 0x4c 0x66 0x4c 0x00] is boxily beveled and normalized but not
- * balanced.
- *
- * - [0x00 0x55 0x56 0x55 0x00] is boxy, normalized, and almost
- * balanced.
- *
- * - [0x08 0x4D 0x56 0x4D 0x08] is beveled, normalized and, almost
- * balanced.
- *
- * The filter affects glyph bitmaps rendered through @FT_Render_Glyph,
- * @FT_Load_Glyph, and @FT_Load_Char. It does _not_ affect the output
- * of @FT_Outline_Render and @FT_Outline_Get_Bitmap.
- *
- * If this feature is activated, the dimensions of LCD glyph bitmaps are
- * either wider or taller than the dimensions of the corresponding
- * outline with regard to the pixel grid. For example, for
- * @FT_RENDER_MODE_LCD, the filter adds 3~subpixels to the left, and
- * 3~subpixels to the right. The bitmap offset values are adjusted
- * accordingly, so clients shouldn't need to modify their layout and
- * glyph positioning code when enabling the filter.
- *
- * It is important to understand that linear alpha blending and gamma
- * correction is critical for correctly rendering glyphs onto surfaces
- * without artifacts and even more critical when subpixel rendering is
- * involved.
- *
- * Each of the 3~alpha values (subpixels) is independently used to blend
- * one color channel. That is, red alpha blends the red channel of the
- * text color with the red channel of the background pixel. The
- * distribution of density values by the color-balanced filter assumes
- * alpha blending is done in linear space; only then color artifacts
- * cancel out.
- */
-
-
- /****************************************************************************
- *
- * @enum:
- * FT_LcdFilter
- *
- * @description:
- * A list of values to identify various types of LCD filters.
- *
- * @values:
- * FT_LCD_FILTER_NONE ::
- * Do not perform filtering. When used with subpixel rendering, this
- * results in sometimes severe color fringes.
- *
- * FT_LCD_FILTER_DEFAULT ::
- * The default filter reduces color fringes considerably, at the cost
- * of a slight blurriness in the output.
- *
- * It is a beveled, normalized, and color-balanced five-tap filter
- * that is more forgiving to screens with non-ideal gamma curves and
- * viewing angles. Note that while color-fringing is reduced, it can
- * only be minimized by using linear alpha blending and gamma
- * correction to render glyphs onto surfaces. The default filter
- * weights are [0x08 0x4D 0x56 0x4D 0x08].
- *
- * FT_LCD_FILTER_LIGHT ::
- * The light filter is a variant that is sharper at the cost of
- * slightly more color fringes than the default one.
- *
- * It is a boxy, normalized, and color-balanced three-tap filter that
- * is less forgiving to screens with non-ideal gamma curves and
- * viewing angles. This filter works best when the rendering system
- * uses linear alpha blending and gamma correction to render glyphs
- * onto surfaces. The light filter weights are
- * [0x00 0x55 0x56 0x55 0x00].
- *
- * FT_LCD_FILTER_LEGACY ::
- * This filter corresponds to the original libXft color filter. It
- * provides high contrast output but can exhibit really bad color
- * fringes if glyphs are not extremely well hinted to the pixel grid.
- * In other words, it only works well if the TrueType bytecode
- * interpreter is enabled *and* high-quality hinted fonts are used.
- *
- * This filter is only provided for comparison purposes, and might be
- * disabled or stay unsupported in the future.
- *
- * FT_LCD_FILTER_LEGACY1 ::
- * For historical reasons, the FontConfig library returns a different
- * enumeration value for legacy LCD filtering. To make code work that
- * (incorrectly) forwards FontConfig's enumeration value to
- * @FT_Library_SetLcdFilter without proper mapping, it is thus easiest
- * to have another enumeration value, which is completely equal to
- * `FT_LCD_FILTER_LEGACY'.
- *
- * @since:
- * 2.3.0 (`FT_LCD_FILTER_LEGACY1' since 2.6.2)
- */
- typedef enum FT_LcdFilter_
- {
- FT_LCD_FILTER_NONE = 0,
- FT_LCD_FILTER_DEFAULT = 1,
- FT_LCD_FILTER_LIGHT = 2,
- FT_LCD_FILTER_LEGACY1 = 3,
- FT_LCD_FILTER_LEGACY = 16,
-
- FT_LCD_FILTER_MAX /* do not remove */
-
- } FT_LcdFilter;
-
-
- /**************************************************************************
- *
- * @func:
- * FT_Library_SetLcdFilter
- *
- * @description:
- * This function is used to apply color filtering to LCD decimated
- * bitmaps, like the ones used when calling @FT_Render_Glyph with
- * @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V.
- *
- * @input:
- * library ::
- * A handle to the target library instance.
- *
- * filter ::
- * The filter type.
- *
- * You can use @FT_LCD_FILTER_NONE here to disable this feature, or
- * @FT_LCD_FILTER_DEFAULT to use a default filter that should work
- * well on most LCD screens.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This feature is always disabled by default. Clients must make an
- * explicit call to this function with a `filter' value other than
- * @FT_LCD_FILTER_NONE in order to enable it.
- *
- * Due to *PATENTS* covering subpixel rendering, this function doesn't
- * do anything except returning `FT_Err_Unimplemented_Feature' if the
- * configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
- * defined in your build of the library, which should correspond to all
- * default builds of FreeType.
- *
- * @since:
- * 2.3.0
- */
- FT_EXPORT( FT_Error )
- FT_Library_SetLcdFilter( FT_Library library,
- FT_LcdFilter filter );
-
-
- /**************************************************************************
- *
- * @func:
- * FT_Library_SetLcdFilterWeights
- *
- * @description:
- * This function can be used to enable LCD filter with custom weights,
- * instead of using presets in @FT_Library_SetLcdFilter.
- *
- * @input:
- * library ::
- * A handle to the target library instance.
- *
- * weights ::
- * A pointer to an array; the function copies the first five bytes and
- * uses them to specify the filter weights.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * Due to *PATENTS* covering subpixel rendering, this function doesn't
- * do anything except returning `FT_Err_Unimplemented_Feature' if the
- * configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
- * defined in your build of the library, which should correspond to all
- * default builds of FreeType.
- *
- * LCD filter weights can also be set per face using @FT_Face_Properties
- * with @FT_PARAM_TAG_LCD_FILTER_WEIGHTS.
- *
- * @since:
- * 2.4.0
- */
- FT_EXPORT( FT_Error )
- FT_Library_SetLcdFilterWeights( FT_Library library,
- unsigned char *weights );
-
-
- /**************************************************************************
- *
- * @constant:
- * FT_PARAM_TAG_LCD_FILTER_WEIGHTS
- *
- * @description:
- * An @FT_Parameter tag to be used with @FT_Face_Properties. The
- * corresponding argument specifies the five LCD filter weights for a
- * given face (if using @FT_LOAD_TARGET_LCD, for example), overriding
- * the global default values or the values set up with
- * @FT_Library_SetLcdFilterWeights.
- *
- */
-#define FT_PARAM_TAG_LCD_FILTER_WEIGHTS \
- FT_MAKE_TAG( 'l', 'c', 'd', 'f' )
-
-
- /*
- * @type:
- * FT_LcdFiveTapFilter
- *
- * @description:
- * A typedef for passing the five LCD filter weights to
- * @FT_Face_Properties within an @FT_Parameter structure.
- *
- */
-#define FT_LCD_FILTER_FIVE_TAPS 5
-
- typedef FT_Byte FT_LcdFiveTapFilter[FT_LCD_FILTER_FIVE_TAPS];
-
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTLCDFIL_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftlist.h b/include/freetype/ftlist.h
deleted file mode 100644
index 5309cb18b..000000000
--- a/include/freetype/ftlist.h
+++ /dev/null
@@ -1,276 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftlist.h */
-/* */
-/* Generic list support for FreeType (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file implements functions relative to list processing. Its */
- /* data structures are defined in `freetype.h'. */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTLIST_H_
-#define FTLIST_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* list_processing */
- /* */
- /* <Title> */
- /* List Processing */
- /* */
- /* <Abstract> */
- /* Simple management of lists. */
- /* */
- /* <Description> */
- /* This section contains various definitions related to list */
- /* processing using doubly-linked nodes. */
- /* */
- /* <Order> */
- /* FT_List */
- /* FT_ListNode */
- /* FT_ListRec */
- /* FT_ListNodeRec */
- /* */
- /* FT_List_Add */
- /* FT_List_Insert */
- /* FT_List_Find */
- /* FT_List_Remove */
- /* FT_List_Up */
- /* FT_List_Iterate */
- /* FT_List_Iterator */
- /* FT_List_Finalize */
- /* FT_List_Destructor */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_List_Find */
- /* */
- /* <Description> */
- /* Find the list node for a given listed object. */
- /* */
- /* <Input> */
- /* list :: A pointer to the parent list. */
- /* data :: The address of the listed object. */
- /* */
- /* <Return> */
- /* List node. NULL if it wasn't found. */
- /* */
- FT_EXPORT( FT_ListNode )
- FT_List_Find( FT_List list,
- void* data );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_List_Add */
- /* */
- /* <Description> */
- /* Append an element to the end of a list. */
- /* */
- /* <InOut> */
- /* list :: A pointer to the parent list. */
- /* node :: The node to append. */
- /* */
- FT_EXPORT( void )
- FT_List_Add( FT_List list,
- FT_ListNode node );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_List_Insert */
- /* */
- /* <Description> */
- /* Insert an element at the head of a list. */
- /* */
- /* <InOut> */
- /* list :: A pointer to parent list. */
- /* node :: The node to insert. */
- /* */
- FT_EXPORT( void )
- FT_List_Insert( FT_List list,
- FT_ListNode node );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_List_Remove */
- /* */
- /* <Description> */
- /* Remove a node from a list. This function doesn't check whether */
- /* the node is in the list! */
- /* */
- /* <Input> */
- /* node :: The node to remove. */
- /* */
- /* <InOut> */
- /* list :: A pointer to the parent list. */
- /* */
- FT_EXPORT( void )
- FT_List_Remove( FT_List list,
- FT_ListNode node );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_List_Up */
- /* */
- /* <Description> */
- /* Move a node to the head/top of a list. Used to maintain LRU */
- /* lists. */
- /* */
- /* <InOut> */
- /* list :: A pointer to the parent list. */
- /* node :: The node to move. */
- /* */
- FT_EXPORT( void )
- FT_List_Up( FT_List list,
- FT_ListNode node );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_List_Iterator */
- /* */
- /* <Description> */
- /* An FT_List iterator function that is called during a list parse */
- /* by @FT_List_Iterate. */
- /* */
- /* <Input> */
- /* node :: The current iteration list node. */
- /* */
- /* user :: A typeless pointer passed to @FT_List_Iterate. */
- /* Can be used to point to the iteration's state. */
- /* */
- typedef FT_Error
- (*FT_List_Iterator)( FT_ListNode node,
- void* user );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_List_Iterate */
- /* */
- /* <Description> */
- /* Parse a list and calls a given iterator function on each element. */
- /* Note that parsing is stopped as soon as one of the iterator calls */
- /* returns a non-zero value. */
- /* */
- /* <Input> */
- /* list :: A handle to the list. */
- /* iterator :: An iterator function, called on each node of the list. */
- /* user :: A user-supplied field that is passed as the second */
- /* argument to the iterator. */
- /* */
- /* <Return> */
- /* The result (a FreeType error code) of the last iterator call. */
- /* */
- FT_EXPORT( FT_Error )
- FT_List_Iterate( FT_List list,
- FT_List_Iterator iterator,
- void* user );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_List_Destructor */
- /* */
- /* <Description> */
- /* An @FT_List iterator function that is called during a list */
- /* finalization by @FT_List_Finalize to destroy all elements in a */
- /* given list. */
- /* */
- /* <Input> */
- /* system :: The current system object. */
- /* */
- /* data :: The current object to destroy. */
- /* */
- /* user :: A typeless pointer passed to @FT_List_Iterate. It can */
- /* be used to point to the iteration's state. */
- /* */
- typedef void
- (*FT_List_Destructor)( FT_Memory memory,
- void* data,
- void* user );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_List_Finalize */
- /* */
- /* <Description> */
- /* Destroy all elements in the list as well as the list itself. */
- /* */
- /* <Input> */
- /* list :: A handle to the list. */
- /* */
- /* destroy :: A list destructor that will be applied to each element */
- /* of the list. Set this to NULL if not needed. */
- /* */
- /* memory :: The current memory object that handles deallocation. */
- /* */
- /* user :: A user-supplied field that is passed as the last */
- /* argument to the destructor. */
- /* */
- /* <Note> */
- /* This function expects that all nodes added by @FT_List_Add or */
- /* @FT_List_Insert have been dynamically allocated. */
- /* */
- FT_EXPORT( void )
- FT_List_Finalize( FT_List list,
- FT_List_Destructor destroy,
- FT_Memory memory,
- void* user );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTLIST_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftlzw.h b/include/freetype/ftlzw.h
deleted file mode 100644
index a82c95e7c..000000000
--- a/include/freetype/ftlzw.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftlzw.h */
-/* */
-/* LZW-compressed stream support. */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTLZW_H_
-#define FTLZW_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* lzw */
- /* */
- /* <Title> */
- /* LZW Streams */
- /* */
- /* <Abstract> */
- /* Using LZW-compressed font files. */
- /* */
- /* <Description> */
- /* This section contains the declaration of LZW-specific functions. */
- /* */
- /*************************************************************************/
-
- /************************************************************************
- *
- * @function:
- * FT_Stream_OpenLZW
- *
- * @description:
- * Open a new stream to parse LZW-compressed font files. This is
- * mainly used to support the compressed `*.pcf.Z' fonts that come
- * with XFree86.
- *
- * @input:
- * stream :: The target embedding stream.
- *
- * source :: The source stream.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * The source stream must be opened _before_ calling this function.
- *
- * Calling the internal function `FT_Stream_Close' on the new stream will
- * *not* call `FT_Stream_Close' on the source stream. None of the stream
- * objects will be released to the heap.
- *
- * The stream implementation is very basic and resets the decompression
- * process each time seeking backwards is needed within the stream
- *
- * In certain builds of the library, LZW compression recognition is
- * automatically handled when calling @FT_New_Face or @FT_Open_Face.
- * This means that if no font driver is capable of handling the raw
- * compressed file, the library will try to open a LZW stream from it
- * and re-open the face with it.
- *
- * This function may return `FT_Err_Unimplemented_Feature' if your build
- * of FreeType was not compiled with LZW support.
- */
- FT_EXPORT( FT_Error )
- FT_Stream_OpenLZW( FT_Stream stream,
- FT_Stream source );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTLZW_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftmac.h b/include/freetype/ftmac.h
deleted file mode 100644
index ad97c6e4c..000000000
--- a/include/freetype/ftmac.h
+++ /dev/null
@@ -1,274 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmac.h */
-/* */
-/* Additional Mac-specific API. */
-/* */
-/* Copyright 1996-2017 by */
-/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* NOTE: Include this file after FT_FREETYPE_H and after any */
-/* Mac-specific headers (because this header uses Mac types such as */
-/* Handle, FSSpec, FSRef, etc.) */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTMAC_H_
-#define FTMAC_H_
-
-
-#include <ft2build.h>
-
-
-FT_BEGIN_HEADER
-
-
-/* gcc-3.4.1 and later can warn about functions tagged as deprecated */
-#ifndef FT_DEPRECATED_ATTRIBUTE
-#if defined(__GNUC__) && \
- ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)))
-#define FT_DEPRECATED_ATTRIBUTE __attribute__((deprecated))
-#else
-#define FT_DEPRECATED_ATTRIBUTE
-#endif
-#endif
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* mac_specific */
- /* */
- /* <Title> */
- /* Mac Specific Interface */
- /* */
- /* <Abstract> */
- /* Only available on the Macintosh. */
- /* */
- /* <Description> */
- /* The following definitions are only available if FreeType is */
- /* compiled on a Macintosh. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Face_From_FOND */
- /* */
- /* <Description> */
- /* Create a new face object from a FOND resource. */
- /* */
- /* <InOut> */
- /* library :: A handle to the library resource. */
- /* */
- /* <Input> */
- /* fond :: A FOND resource. */
- /* */
- /* face_index :: Only supported for the -1 `sanity check' special */
- /* case. */
- /* */
- /* <Output> */
- /* aface :: A handle to a new face object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Notes> */
- /* This function can be used to create @FT_Face objects from fonts */
- /* that are installed in the system as follows. */
- /* */
- /* { */
- /* fond = GetResource( 'FOND', fontName ); */
- /* error = FT_New_Face_From_FOND( library, fond, 0, &face ); */
- /* } */
- /* */
- FT_EXPORT( FT_Error )
- FT_New_Face_From_FOND( FT_Library library,
- Handle fond,
- FT_Long face_index,
- FT_Face *aface )
- FT_DEPRECATED_ATTRIBUTE;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_GetFile_From_Mac_Name */
- /* */
- /* <Description> */
- /* Return an FSSpec for the disk file containing the named font. */
- /* */
- /* <Input> */
- /* fontName :: Mac OS name of the font (e.g., Times New Roman */
- /* Bold). */
- /* */
- /* <Output> */
- /* pathSpec :: FSSpec to the file. For passing to */
- /* @FT_New_Face_From_FSSpec. */
- /* */
- /* face_index :: Index of the face. For passing to */
- /* @FT_New_Face_From_FSSpec. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_GetFile_From_Mac_Name( const char* fontName,
- FSSpec* pathSpec,
- FT_Long* face_index )
- FT_DEPRECATED_ATTRIBUTE;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_GetFile_From_Mac_ATS_Name */
- /* */
- /* <Description> */
- /* Return an FSSpec for the disk file containing the named font. */
- /* */
- /* <Input> */
- /* fontName :: Mac OS name of the font in ATS framework. */
- /* */
- /* <Output> */
- /* pathSpec :: FSSpec to the file. For passing to */
- /* @FT_New_Face_From_FSSpec. */
- /* */
- /* face_index :: Index of the face. For passing to */
- /* @FT_New_Face_From_FSSpec. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_GetFile_From_Mac_ATS_Name( const char* fontName,
- FSSpec* pathSpec,
- FT_Long* face_index )
- FT_DEPRECATED_ATTRIBUTE;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_GetFilePath_From_Mac_ATS_Name */
- /* */
- /* <Description> */
- /* Return a pathname of the disk file and face index for given font */
- /* name that is handled by ATS framework. */
- /* */
- /* <Input> */
- /* fontName :: Mac OS name of the font in ATS framework. */
- /* */
- /* <Output> */
- /* path :: Buffer to store pathname of the file. For passing */
- /* to @FT_New_Face. The client must allocate this */
- /* buffer before calling this function. */
- /* */
- /* maxPathSize :: Lengths of the buffer `path' that client allocated. */
- /* */
- /* face_index :: Index of the face. For passing to @FT_New_Face. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_GetFilePath_From_Mac_ATS_Name( const char* fontName,
- UInt8* path,
- UInt32 maxPathSize,
- FT_Long* face_index )
- FT_DEPRECATED_ATTRIBUTE;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Face_From_FSSpec */
- /* */
- /* <Description> */
- /* Create a new face object from a given resource and typeface index */
- /* using an FSSpec to the font file. */
- /* */
- /* <InOut> */
- /* library :: A handle to the library resource. */
- /* */
- /* <Input> */
- /* spec :: FSSpec to the font file. */
- /* */
- /* face_index :: The index of the face within the resource. The */
- /* first face has index~0. */
- /* <Output> */
- /* aface :: A handle to a new face object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* @FT_New_Face_From_FSSpec is identical to @FT_New_Face except */
- /* it accepts an FSSpec instead of a path. */
- /* */
- FT_EXPORT( FT_Error )
- FT_New_Face_From_FSSpec( FT_Library library,
- const FSSpec *spec,
- FT_Long face_index,
- FT_Face *aface )
- FT_DEPRECATED_ATTRIBUTE;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Face_From_FSRef */
- /* */
- /* <Description> */
- /* Create a new face object from a given resource and typeface index */
- /* using an FSRef to the font file. */
- /* */
- /* <InOut> */
- /* library :: A handle to the library resource. */
- /* */
- /* <Input> */
- /* spec :: FSRef to the font file. */
- /* */
- /* face_index :: The index of the face within the resource. The */
- /* first face has index~0. */
- /* <Output> */
- /* aface :: A handle to a new face object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* @FT_New_Face_From_FSRef is identical to @FT_New_Face except */
- /* it accepts an FSRef instead of a path. */
- /* */
- FT_EXPORT( FT_Error )
- FT_New_Face_From_FSRef( FT_Library library,
- const FSRef *ref,
- FT_Long face_index,
- FT_Face *aface )
- FT_DEPRECATED_ATTRIBUTE;
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* FTMAC_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftmm.h b/include/freetype/ftmm.h
deleted file mode 100644
index c41b80ea6..000000000
--- a/include/freetype/ftmm.h
+++ /dev/null
@@ -1,490 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmm.h */
-/* */
-/* FreeType Multiple Master font interface (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTMM_H_
-#define FTMM_H_
-
-
-#include <ft2build.h>
-#include FT_TYPE1_TABLES_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* multiple_masters */
- /* */
- /* <Title> */
- /* Multiple Masters */
- /* */
- /* <Abstract> */
- /* How to manage Multiple Masters fonts. */
- /* */
- /* <Description> */
- /* The following types and functions are used to manage Multiple */
- /* Master fonts, i.e., the selection of specific design instances by */
- /* setting design axis coordinates. */
- /* */
- /* Besides Adobe MM fonts, the interface supports Apple's TrueType GX */
- /* and OpenType variation fonts. Some of the routines only work with */
- /* Adobe MM fonts, others will work with all three types. They are */
- /* similar enough that a consistent interface makes sense. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_MM_Axis */
- /* */
- /* <Description> */
- /* A structure to model a given axis in design space for Multiple */
- /* Masters fonts. */
- /* */
- /* This structure can't be used for TrueType GX or OpenType variation */
- /* fonts. */
- /* */
- /* <Fields> */
- /* name :: The axis's name. */
- /* */
- /* minimum :: The axis's minimum design coordinate. */
- /* */
- /* maximum :: The axis's maximum design coordinate. */
- /* */
- typedef struct FT_MM_Axis_
- {
- FT_String* name;
- FT_Long minimum;
- FT_Long maximum;
-
- } FT_MM_Axis;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Multi_Master */
- /* */
- /* <Description> */
- /* A structure to model the axes and space of a Multiple Masters */
- /* font. */
- /* */
- /* This structure can't be used for TrueType GX or OpenType variation */
- /* fonts. */
- /* */
- /* <Fields> */
- /* num_axis :: Number of axes. Cannot exceed~4. */
- /* */
- /* num_designs :: Number of designs; should be normally 2^num_axis */
- /* even though the Type~1 specification strangely */
- /* allows for intermediate designs to be present. */
- /* This number cannot exceed~16. */
- /* */
- /* axis :: A table of axis descriptors. */
- /* */
- typedef struct FT_Multi_Master_
- {
- FT_UInt num_axis;
- FT_UInt num_designs;
- FT_MM_Axis axis[T1_MAX_MM_AXIS];
-
- } FT_Multi_Master;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Var_Axis */
- /* */
- /* <Description> */
- /* A structure to model a given axis in design space for Multiple */
- /* Masters, TrueType GX, and OpenType variation fonts. */
- /* */
- /* <Fields> */
- /* name :: The axis's name. */
- /* Not always meaningful for TrueType GX or OpenType */
- /* variation fonts. */
- /* */
- /* minimum :: The axis's minimum design coordinate. */
- /* */
- /* def :: The axis's default design coordinate. */
- /* FreeType computes meaningful default values for Adobe */
- /* MM fonts. */
- /* */
- /* maximum :: The axis's maximum design coordinate. */
- /* */
- /* tag :: The axis's tag (the equivalent to `name' for TrueType */
- /* GX and OpenType variation fonts). FreeType provides */
- /* default values for Adobe MM fonts if possible. */
- /* */
- /* strid :: The axis name entry in the font's `name' table. This */
- /* is another (and often better) version of the `name' */
- /* field for TrueType GX or OpenType variation fonts. Not */
- /* meaningful for Adobe MM fonts. */
- /* */
- /* <Note> */
- /* The fields `minimum', `def', and `maximum' are 16.16 fractional */
- /* values for TrueType GX and OpenType variation fonts. For Adobe MM */
- /* fonts, the values are integers. */
- /* */
- typedef struct FT_Var_Axis_
- {
- FT_String* name;
-
- FT_Fixed minimum;
- FT_Fixed def;
- FT_Fixed maximum;
-
- FT_ULong tag;
- FT_UInt strid;
-
- } FT_Var_Axis;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Var_Named_Style */
- /* */
- /* <Description> */
- /* A structure to model a named instance in a TrueType GX or OpenType */
- /* variation font. */
- /* */
- /* This structure can't be used for Adobe MM fonts. */
- /* */
- /* <Fields> */
- /* coords :: The design coordinates for this instance. */
- /* This is an array with one entry for each axis. */
- /* */
- /* strid :: The entry in `name' table identifying this instance. */
- /* */
- /* psid :: The entry in `name' table identifying a PostScript name */
- /* for this instance. */
- /* */
- typedef struct FT_Var_Named_Style_
- {
- FT_Fixed* coords;
- FT_UInt strid;
- FT_UInt psid; /* since 2.7.1 */
-
- } FT_Var_Named_Style;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_MM_Var */
- /* */
- /* <Description> */
- /* A structure to model the axes and space of a Adobe MM, TrueType */
- /* GX, or OpenType variation font. */
- /* */
- /* Some fields are specific to one format and not to the others. */
- /* */
- /* <Fields> */
- /* num_axis :: The number of axes. The maximum value is~4 for */
- /* Adobe MM fonts; no limit in TrueType GX or */
- /* OpenType variation fonts. */
- /* */
- /* num_designs :: The number of designs; should be normally */
- /* 2^num_axis for Adobe MM fonts. Not meaningful */
- /* for TrueType GX or OpenType variation fonts */
- /* (where every glyph could have a different */
- /* number of designs). */
- /* */
- /* num_namedstyles :: The number of named styles; a `named style' is */
- /* a tuple of design coordinates that has a string */
- /* ID (in the `name' table) associated with it. */
- /* The font can tell the user that, for example, */
- /* [Weight=1.5,Width=1.1] is `Bold'. Another name */
- /* for `named style' is `named instance'. */
- /* */
- /* For Adobe Multiple Masters fonts, this value is */
- /* always zero because the format does not support */
- /* named styles. */
- /* */
- /* axis :: An axis descriptor table. */
- /* TrueType GX and OpenType variation fonts */
- /* contain slightly more data than Adobe MM fonts. */
- /* Memory management of this pointer is done */
- /* internally by FreeType. */
- /* */
- /* namedstyle :: A named style (instance) table. */
- /* Only meaningful for TrueType GX and OpenType */
- /* variation fonts. Memory management of this */
- /* pointer is done internally by FreeType. */
- /* */
- typedef struct FT_MM_Var_
- {
- FT_UInt num_axis;
- FT_UInt num_designs;
- FT_UInt num_namedstyles;
- FT_Var_Axis* axis;
- FT_Var_Named_Style* namedstyle;
-
- } FT_MM_Var;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Multi_Master */
- /* */
- /* <Description> */
- /* Retrieve a variation descriptor of a given Adobe MM font. */
- /* */
- /* This function can't be used with TrueType GX or OpenType variation */
- /* fonts. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* <Output> */
- /* amaster :: The Multiple Masters descriptor. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_Multi_Master( FT_Face face,
- FT_Multi_Master *amaster );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_MM_Var */
- /* */
- /* <Description> */
- /* Retrieve a variation descriptor for a given font. */
- /* */
- /* This function works with all supported variation formats. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* <Output> */
- /* amaster :: The variation descriptor. */
- /* Allocates a data structure, which the user must */
- /* deallocate with `free' after use. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_MM_Var( FT_Face face,
- FT_MM_Var* *amaster );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_MM_Design_Coordinates */
- /* */
- /* <Description> */
- /* For Adobe MM fonts, choose an interpolated font design through */
- /* design coordinates. */
- /* */
- /* This function can't be used with TrueType GX or OpenType variation */
- /* fonts. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face. */
- /* */
- /* <Input> */
- /* num_coords :: The number of available design coordinates. If it */
- /* is larger than the number of axes, ignore the excess */
- /* values. If it is smaller than the number of axes, */
- /* use default values for the remaining axes. */
- /* */
- /* coords :: An array of design coordinates. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Set_MM_Design_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Long* coords );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Var_Design_Coordinates */
- /* */
- /* <Description> */
- /* Choose an interpolated font design through design coordinates. */
- /* */
- /* This function works with all supported variation formats. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face. */
- /* */
- /* <Input> */
- /* num_coords :: The number of available design coordinates. If it */
- /* is larger than the number of axes, ignore the excess */
- /* values. If it is smaller than the number of axes, */
- /* use default values for the remaining axes. */
- /* */
- /* coords :: An array of design coordinates. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Set_Var_Design_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Var_Design_Coordinates */
- /* */
- /* <Description> */
- /* Get the design coordinates of the currently selected interpolated */
- /* font. */
- /* */
- /* This function works with all supported variation formats. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* num_coords :: The number of design coordinates to retrieve. If it */
- /* is larger than the number of axes, set the excess */
- /* values to~0. */
- /* */
- /* <Output> */
- /* coords :: The design coordinates array. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_Var_Design_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_MM_Blend_Coordinates */
- /* */
- /* <Description> */
- /* Choose an interpolated font design through normalized blend */
- /* coordinates. */
- /* */
- /* This function works with all supported variation formats. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face. */
- /* */
- /* <Input> */
- /* num_coords :: The number of available design coordinates. If it */
- /* is larger than the number of axes, ignore the excess */
- /* values. If it is smaller than the number of axes, */
- /* use default values for the remaining axes. */
- /* */
- /* coords :: The design coordinates array (each element must be */
- /* between 0 and 1.0 for Adobe MM fonts, and between */
- /* -1.0 and 1.0 for TrueType GX and OpenType variation */
- /* fonts). */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Set_MM_Blend_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_MM_Blend_Coordinates */
- /* */
- /* <Description> */
- /* Get the normalized blend coordinates of the currently selected */
- /* interpolated font. */
- /* */
- /* This function works with all supported variation formats. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* num_coords :: The number of normalized blend coordinates to */
- /* retrieve. If it is larger than the number of axes, */
- /* set the excess values to~0.5 for Adobe MM fonts, and */
- /* to~0 for TrueType GX and OpenType variation fonts. */
- /* */
- /* <Output> */
- /* coords :: The normalized blend coordinates array. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_MM_Blend_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Var_Blend_Coordinates */
- /* */
- /* <Description> */
- /* This is another name of @FT_Set_MM_Blend_Coordinates. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Set_Var_Blend_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Var_Blend_Coordinates */
- /* */
- /* <Description> */
- /* This is another name of @FT_Get_MM_Blend_Coordinates. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_Var_Blend_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTMM_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftmodapi.h b/include/freetype/ftmodapi.h
deleted file mode 100644
index 4147aadf8..000000000
--- a/include/freetype/ftmodapi.h
+++ /dev/null
@@ -1,710 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmodapi.h */
-/* */
-/* FreeType modules public interface (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTMODAPI_H_
-#define FTMODAPI_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* module_management */
- /* */
- /* <Title> */
- /* Module Management */
- /* */
- /* <Abstract> */
- /* How to add, upgrade, remove, and control modules from FreeType. */
- /* */
- /* <Description> */
- /* The definitions below are used to manage modules within FreeType. */
- /* Modules can be added, upgraded, and removed at runtime. */
- /* Additionally, some module properties can be controlled also. */
- /* */
- /* Here is a list of possible values of the `module_name' field in */
- /* the @FT_Module_Class structure. */
- /* */
- /* { */
- /* autofitter */
- /* bdf */
- /* cff */
- /* gxvalid */
- /* otvalid */
- /* pcf */
- /* pfr */
- /* psaux */
- /* pshinter */
- /* psnames */
- /* raster1 */
- /* sfnt */
- /* smooth, smooth-lcd, smooth-lcdv */
- /* truetype */
- /* type1 */
- /* type42 */
- /* t1cid */
- /* winfonts */
- /* } */
- /* */
- /* Note that the FreeType Cache sub-system is not a FreeType module. */
- /* */
- /* <Order> */
- /* FT_Module */
- /* FT_Module_Constructor */
- /* FT_Module_Destructor */
- /* FT_Module_Requester */
- /* FT_Module_Class */
- /* */
- /* FT_Add_Module */
- /* FT_Get_Module */
- /* FT_Remove_Module */
- /* FT_Add_Default_Modules */
- /* */
- /* FT_Property_Set */
- /* FT_Property_Get */
- /* FT_Set_Default_Properties */
- /* */
- /* FT_New_Library */
- /* FT_Done_Library */
- /* FT_Reference_Library */
- /* */
- /* FT_Renderer */
- /* FT_Renderer_Class */
- /* */
- /* FT_Get_Renderer */
- /* FT_Set_Renderer */
- /* */
- /* FT_Set_Debug_Hook */
- /* */
- /*************************************************************************/
-
-
- /* module bit flags */
-#define FT_MODULE_FONT_DRIVER 1 /* this module is a font driver */
-#define FT_MODULE_RENDERER 2 /* this module is a renderer */
-#define FT_MODULE_HINTER 4 /* this module is a glyph hinter */
-#define FT_MODULE_STYLER 8 /* this module is a styler */
-
-#define FT_MODULE_DRIVER_SCALABLE 0x100 /* the driver supports */
- /* scalable fonts */
-#define FT_MODULE_DRIVER_NO_OUTLINES 0x200 /* the driver does not */
- /* support vector outlines */
-#define FT_MODULE_DRIVER_HAS_HINTER 0x400 /* the driver provides its */
- /* own hinter */
-#define FT_MODULE_DRIVER_HINTS_LIGHTLY 0x800 /* the driver's hinter */
- /* produces LIGHT hints */
-
-
- /* deprecated values */
-#define ft_module_font_driver FT_MODULE_FONT_DRIVER
-#define ft_module_renderer FT_MODULE_RENDERER
-#define ft_module_hinter FT_MODULE_HINTER
-#define ft_module_styler FT_MODULE_STYLER
-
-#define ft_module_driver_scalable FT_MODULE_DRIVER_SCALABLE
-#define ft_module_driver_no_outlines FT_MODULE_DRIVER_NO_OUTLINES
-#define ft_module_driver_has_hinter FT_MODULE_DRIVER_HAS_HINTER
-#define ft_module_driver_hints_lightly FT_MODULE_DRIVER_HINTS_LIGHTLY
-
-
- typedef FT_Pointer FT_Module_Interface;
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Module_Constructor */
- /* */
- /* <Description> */
- /* A function used to initialize (not create) a new module object. */
- /* */
- /* <Input> */
- /* module :: The module to initialize. */
- /* */
- typedef FT_Error
- (*FT_Module_Constructor)( FT_Module module );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Module_Destructor */
- /* */
- /* <Description> */
- /* A function used to finalize (not destroy) a given module object. */
- /* */
- /* <Input> */
- /* module :: The module to finalize. */
- /* */
- typedef void
- (*FT_Module_Destructor)( FT_Module module );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Module_Requester */
- /* */
- /* <Description> */
- /* A function used to query a given module for a specific interface. */
- /* */
- /* <Input> */
- /* module :: The module to be searched. */
- /* */
- /* name :: The name of the interface in the module. */
- /* */
- typedef FT_Module_Interface
- (*FT_Module_Requester)( FT_Module module,
- const char* name );
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Module_Class */
- /* */
- /* <Description> */
- /* The module class descriptor. */
- /* */
- /* <Fields> */
- /* module_flags :: Bit flags describing the module. */
- /* */
- /* module_size :: The size of one module object/instance in */
- /* bytes. */
- /* */
- /* module_name :: The name of the module. */
- /* */
- /* module_version :: The version, as a 16.16 fixed number */
- /* (major.minor). */
- /* */
- /* module_requires :: The version of FreeType this module requires, */
- /* as a 16.16 fixed number (major.minor). Starts */
- /* at version 2.0, i.e., 0x20000. */
- /* */
- /* module_init :: The initializing function. */
- /* */
- /* module_done :: The finalizing function. */
- /* */
- /* get_interface :: The interface requesting function. */
- /* */
- typedef struct FT_Module_Class_
- {
- FT_ULong module_flags;
- FT_Long module_size;
- const FT_String* module_name;
- FT_Fixed module_version;
- FT_Fixed module_requires;
-
- const void* module_interface;
-
- FT_Module_Constructor module_init;
- FT_Module_Destructor module_done;
- FT_Module_Requester get_interface;
-
- } FT_Module_Class;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Add_Module */
- /* */
- /* <Description> */
- /* Add a new module to a given library instance. */
- /* */
- /* <InOut> */
- /* library :: A handle to the library object. */
- /* */
- /* <Input> */
- /* clazz :: A pointer to class descriptor for the module. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* An error will be returned if a module already exists by that name, */
- /* or if the module requires a version of FreeType that is too great. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Add_Module( FT_Library library,
- const FT_Module_Class* clazz );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Module */
- /* */
- /* <Description> */
- /* Find a module by its name. */
- /* */
- /* <Input> */
- /* library :: A handle to the library object. */
- /* */
- /* module_name :: The module's name (as an ASCII string). */
- /* */
- /* <Return> */
- /* A module handle. 0~if none was found. */
- /* */
- /* <Note> */
- /* FreeType's internal modules aren't documented very well, and you */
- /* should look up the source code for details. */
- /* */
- FT_EXPORT( FT_Module )
- FT_Get_Module( FT_Library library,
- const char* module_name );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Remove_Module */
- /* */
- /* <Description> */
- /* Remove a given module from a library instance. */
- /* */
- /* <InOut> */
- /* library :: A handle to a library object. */
- /* */
- /* <Input> */
- /* module :: A handle to a module object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The module object is destroyed by the function in case of success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Remove_Module( FT_Library library,
- FT_Module module );
-
-
- /**********************************************************************
- *
- * @function:
- * FT_Property_Set
- *
- * @description:
- * Set a property for a given module.
- *
- * @input:
- * library ::
- * A handle to the library the module is part of.
- *
- * module_name ::
- * The module name.
- *
- * property_name ::
- * The property name. Properties are described in the `Synopsis'
- * subsection of the module's documentation.
- *
- * Note that only a few modules have properties.
- *
- * value ::
- * A generic pointer to a variable or structure that gives the new
- * value of the property. The exact definition of `value' is
- * dependent on the property; see the `Synopsis' subsection of the
- * module's documentation.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * If `module_name' isn't a valid module name, or `property_name'
- * doesn't specify a valid property, or if `value' doesn't represent a
- * valid value for the given property, an error is returned.
- *
- * The following example sets property `bar' (a simple integer) in
- * module `foo' to value~1.
- *
- * {
- * FT_UInt bar;
- *
- *
- * bar = 1;
- * FT_Property_Set( library, "foo", "bar", &bar );
- * }
- *
- * Note that the FreeType Cache sub-system doesn't recognize module
- * property changes. To avoid glyph lookup confusion within the cache
- * you should call @FTC_Manager_Reset to completely flush the cache if
- * a module property gets changed after @FTC_Manager_New has been
- * called.
- *
- * It is not possible to set properties of the FreeType Cache
- * sub-system itself with FT_Property_Set; use @FTC_Property_Set
- * instead.
- *
- * @since:
- * 2.4.11
- *
- */
- FT_EXPORT( FT_Error )
- FT_Property_Set( FT_Library library,
- const FT_String* module_name,
- const FT_String* property_name,
- const void* value );
-
-
- /**********************************************************************
- *
- * @function:
- * FT_Property_Get
- *
- * @description:
- * Get a module's property value.
- *
- * @input:
- * library ::
- * A handle to the library the module is part of.
- *
- * module_name ::
- * The module name.
- *
- * property_name ::
- * The property name. Properties are described in the `Synopsis'
- * subsection of the module's documentation.
- *
- * @inout:
- * value ::
- * A generic pointer to a variable or structure that gives the
- * value of the property. The exact definition of `value' is
- * dependent on the property; see the `Synopsis' subsection of the
- * module's documentation.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * If `module_name' isn't a valid module name, or `property_name'
- * doesn't specify a valid property, or if `value' doesn't represent a
- * valid value for the given property, an error is returned.
- *
- * The following example gets property `baz' (a range) in module `foo'.
- *
- * {
- * typedef range_
- * {
- * FT_Int32 min;
- * FT_Int32 max;
- *
- * } range;
- *
- * range baz;
- *
- *
- * FT_Property_Get( library, "foo", "baz", &baz );
- * }
- *
- * It is not possible to retrieve properties of the FreeType Cache
- * sub-system with FT_Property_Get; use @FTC_Property_Get instead.
- *
- * @since:
- * 2.4.11
- *
- */
- FT_EXPORT( FT_Error )
- FT_Property_Get( FT_Library library,
- const FT_String* module_name,
- const FT_String* property_name,
- void* value );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Default_Properties */
- /* */
- /* <Description> */
- /* If compilation option FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES is */
- /* set, this function reads the `FREETYPE_PROPERTIES' environment */
- /* variable to control driver properties. See sections @auto_hinter, */
- /* @cff_driver, @pcf_driver, and @tt_driver for more. */
- /* */
- /* If the compilation option is not set, this function does nothing. */
- /* */
- /* `FREETYPE_PROPERTIES' has the following syntax form (broken here */
- /* into multiple lines for better readability). */
- /* */
- /* { */
- /* <optional whitespace> */
- /* <module-name1> ':' */
- /* <property-name1> '=' <property-value1> */
- /* <whitespace> */
- /* <module-name2> ':' */
- /* <property-name2> '=' <property-value2> */
- /* ... */
- /* } */
- /* */
- /* Example: */
- /* */
- /* { */
- /* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ */
- /* cff:no-stem-darkening=1 \ */
- /* autofitter:warping=1 */
- /* } */
- /* */
- /* <InOut> */
- /* library :: A handle to a new library object. */
- /* */
- FT_EXPORT( void )
- FT_Set_Default_Properties( FT_Library library );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Reference_Library */
- /* */
- /* <Description> */
- /* A counter gets initialized to~1 at the time an @FT_Library */
- /* structure is created. This function increments the counter. */
- /* @FT_Done_Library then only destroys a library if the counter is~1, */
- /* otherwise it simply decrements the counter. */
- /* */
- /* This function helps in managing life-cycles of structures that */
- /* reference @FT_Library objects. */
- /* */
- /* <Input> */
- /* library :: A handle to a target library object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Since> */
- /* 2.4.2 */
- /* */
- FT_EXPORT( FT_Error )
- FT_Reference_Library( FT_Library library );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Library */
- /* */
- /* <Description> */
- /* This function is used to create a new FreeType library instance */
- /* from a given memory object. It is thus possible to use libraries */
- /* with distinct memory allocators within the same program. Note, */
- /* however, that the used @FT_Memory structure is expected to remain */
- /* valid for the life of the @FT_Library object. */
- /* */
- /* Normally, you would call this function (followed by a call to */
- /* @FT_Add_Default_Modules or a series of calls to @FT_Add_Module, */
- /* and a call to @FT_Set_Default_Properties) instead of */
- /* @FT_Init_FreeType to initialize the FreeType library. */
- /* */
- /* Don't use @FT_Done_FreeType but @FT_Done_Library to destroy a */
- /* library instance. */
- /* */
- /* <Input> */
- /* memory :: A handle to the original memory object. */
- /* */
- /* <Output> */
- /* alibrary :: A pointer to handle of a new library object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* See the discussion of reference counters in the description of */
- /* @FT_Reference_Library. */
- /* */
- FT_EXPORT( FT_Error )
- FT_New_Library( FT_Memory memory,
- FT_Library *alibrary );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Done_Library */
- /* */
- /* <Description> */
- /* Discard a given library object. This closes all drivers and */
- /* discards all resource objects. */
- /* */
- /* <Input> */
- /* library :: A handle to the target library. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* See the discussion of reference counters in the description of */
- /* @FT_Reference_Library. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Done_Library( FT_Library library );
-
- /* */
-
- typedef void
- (*FT_DebugHook_Func)( void* arg );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Debug_Hook */
- /* */
- /* <Description> */
- /* Set a debug hook function for debugging the interpreter of a font */
- /* format. */
- /* */
- /* <InOut> */
- /* library :: A handle to the library object. */
- /* */
- /* <Input> */
- /* hook_index :: The index of the debug hook. You should use the */
- /* values defined in `ftobjs.h', e.g., */
- /* `FT_DEBUG_HOOK_TRUETYPE'. */
- /* */
- /* debug_hook :: The function used to debug the interpreter. */
- /* */
- /* <Note> */
- /* Currently, four debug hook slots are available, but only two (for */
- /* the TrueType and the Type~1 interpreter) are defined. */
- /* */
- /* Since the internal headers of FreeType are no longer installed, */
- /* the symbol `FT_DEBUG_HOOK_TRUETYPE' isn't available publicly. */
- /* This is a bug and will be fixed in a forthcoming release. */
- /* */
- FT_EXPORT( void )
- FT_Set_Debug_Hook( FT_Library library,
- FT_UInt hook_index,
- FT_DebugHook_Func debug_hook );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Add_Default_Modules */
- /* */
- /* <Description> */
- /* Add the set of default drivers to a given library object. */
- /* This is only useful when you create a library object with */
- /* @FT_New_Library (usually to plug a custom memory manager). */
- /* */
- /* <InOut> */
- /* library :: A handle to a new library object. */
- /* */
- FT_EXPORT( void )
- FT_Add_Default_Modules( FT_Library library );
-
-
-
- /**************************************************************************
- *
- * @section:
- * truetype_engine
- *
- * @title:
- * The TrueType Engine
- *
- * @abstract:
- * TrueType bytecode support.
- *
- * @description:
- * This section contains a function used to query the level of TrueType
- * bytecode support compiled in this version of the library.
- *
- */
-
-
- /**************************************************************************
- *
- * @enum:
- * FT_TrueTypeEngineType
- *
- * @description:
- * A list of values describing which kind of TrueType bytecode
- * engine is implemented in a given FT_Library instance. It is used
- * by the @FT_Get_TrueType_Engine_Type function.
- *
- * @values:
- * FT_TRUETYPE_ENGINE_TYPE_NONE ::
- * The library doesn't implement any kind of bytecode interpreter.
- *
- * FT_TRUETYPE_ENGINE_TYPE_UNPATENTED ::
- * Deprecated and removed.
- *
- * FT_TRUETYPE_ENGINE_TYPE_PATENTED ::
- * The library implements a bytecode interpreter that covers
- * the full instruction set of the TrueType virtual machine (this
- * was governed by patents until May 2010, hence the name).
- *
- * @since:
- * 2.2
- *
- */
- typedef enum FT_TrueTypeEngineType_
- {
- FT_TRUETYPE_ENGINE_TYPE_NONE = 0,
- FT_TRUETYPE_ENGINE_TYPE_UNPATENTED,
- FT_TRUETYPE_ENGINE_TYPE_PATENTED
-
- } FT_TrueTypeEngineType;
-
-
- /**************************************************************************
- *
- * @func:
- * FT_Get_TrueType_Engine_Type
- *
- * @description:
- * Return an @FT_TrueTypeEngineType value to indicate which level of
- * the TrueType virtual machine a given library instance supports.
- *
- * @input:
- * library ::
- * A library instance.
- *
- * @return:
- * A value indicating which level is supported.
- *
- * @since:
- * 2.2
- *
- */
- FT_EXPORT( FT_TrueTypeEngineType )
- FT_Get_TrueType_Engine_Type( FT_Library library );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTMODAPI_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftmoderr.h b/include/freetype/ftmoderr.h
deleted file mode 100644
index 7f608375e..000000000
--- a/include/freetype/ftmoderr.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmoderr.h */
-/* */
-/* FreeType module error offsets (specification). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the FreeType module error codes. */
- /* */
- /* If the macro FT_CONFIG_OPTION_USE_MODULE_ERRORS in `ftoption.h' is */
- /* set, the lower byte of an error value identifies the error code as */
- /* usual. In addition, the higher byte identifies the module. For */
- /* example, the error `FT_Err_Invalid_File_Format' has value 0x0003, the */
- /* error `TT_Err_Invalid_File_Format' has value 0x1303, the error */
- /* `T1_Err_Invalid_File_Format' has value 0x1403, etc. */
- /* */
- /* Note that `FT_Err_Ok', `TT_Err_Ok', etc. are always equal to zero, */
- /* including the high byte. */
- /* */
- /* If FT_CONFIG_OPTION_USE_MODULE_ERRORS isn't set, the higher byte of */
- /* an error value is set to zero. */
- /* */
- /* To hide the various `XXX_Err_' prefixes in the source code, FreeType */
- /* provides some macros in `fttypes.h'. */
- /* */
- /* FT_ERR( err ) */
- /* Add current error module prefix (as defined with the */
- /* `FT_ERR_PREFIX' macro) to `err'. For example, in the BDF module */
- /* the line */
- /* */
- /* error = FT_ERR( Invalid_Outline ); */
- /* */
- /* expands to */
- /* */
- /* error = BDF_Err_Invalid_Outline; */
- /* */
- /* For simplicity, you can always use `FT_Err_Ok' directly instead */
- /* of `FT_ERR( Ok )'. */
- /* */
- /* FT_ERR_EQ( errcode, err ) */
- /* FT_ERR_NEQ( errcode, err ) */
- /* Compare error code `errcode' with the error `err' for equality */
- /* and inequality, respectively. Example: */
- /* */
- /* if ( FT_ERR_EQ( error, Invalid_Outline ) ) */
- /* ... */
- /* */
- /* Using this macro you don't have to think about error prefixes. */
- /* Of course, if module errors are not active, the above example is */
- /* the same as */
- /* */
- /* if ( error == FT_Err_Invalid_Outline ) */
- /* ... */
- /* */
- /* FT_ERROR_BASE( errcode ) */
- /* FT_ERROR_MODULE( errcode ) */
- /* Get base error and module error code, respectively. */
- /* */
- /* */
- /* It can also be used to create a module error message table easily */
- /* with something like */
- /* */
- /* { */
- /* #undef FTMODERR_H_ */
- /* #define FT_MODERRDEF( e, v, s ) { FT_Mod_Err_ ## e, s }, */
- /* #define FT_MODERR_START_LIST { */
- /* #define FT_MODERR_END_LIST { 0, 0 } }; */
- /* */
- /* const struct */
- /* { */
- /* int mod_err_offset; */
- /* const char* mod_err_msg */
- /* } ft_mod_errors[] = */
- /* */
- /* #include FT_MODULE_ERRORS_H */
- /* } */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTMODERR_H_
-#define FTMODERR_H_
-
-
- /*******************************************************************/
- /*******************************************************************/
- /***** *****/
- /***** SETUP MACROS *****/
- /***** *****/
- /*******************************************************************/
- /*******************************************************************/
-
-
-#undef FT_NEED_EXTERN_C
-
-#ifndef FT_MODERRDEF
-
-#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS
-#define FT_MODERRDEF( e, v, s ) FT_Mod_Err_ ## e = v,
-#else
-#define FT_MODERRDEF( e, v, s ) FT_Mod_Err_ ## e = 0,
-#endif
-
-#define FT_MODERR_START_LIST enum {
-#define FT_MODERR_END_LIST FT_Mod_Err_Max };
-
-#ifdef __cplusplus
-#define FT_NEED_EXTERN_C
- extern "C" {
-#endif
-
-#endif /* !FT_MODERRDEF */
-
-
- /*******************************************************************/
- /*******************************************************************/
- /***** *****/
- /***** LIST MODULE ERROR BASES *****/
- /***** *****/
- /*******************************************************************/
- /*******************************************************************/
-
-
-#ifdef FT_MODERR_START_LIST
- FT_MODERR_START_LIST
-#endif
-
-
- FT_MODERRDEF( Base, 0x000, "base module" )
- FT_MODERRDEF( Autofit, 0x100, "autofitter module" )
- FT_MODERRDEF( BDF, 0x200, "BDF module" )
- FT_MODERRDEF( Bzip2, 0x300, "Bzip2 module" )
- FT_MODERRDEF( Cache, 0x400, "cache module" )
- FT_MODERRDEF( CFF, 0x500, "CFF module" )
- FT_MODERRDEF( CID, 0x600, "CID module" )
- FT_MODERRDEF( Gzip, 0x700, "Gzip module" )
- FT_MODERRDEF( LZW, 0x800, "LZW module" )
- FT_MODERRDEF( OTvalid, 0x900, "OpenType validation module" )
- FT_MODERRDEF( PCF, 0xA00, "PCF module" )
- FT_MODERRDEF( PFR, 0xB00, "PFR module" )
- FT_MODERRDEF( PSaux, 0xC00, "PS auxiliary module" )
- FT_MODERRDEF( PShinter, 0xD00, "PS hinter module" )
- FT_MODERRDEF( PSnames, 0xE00, "PS names module" )
- FT_MODERRDEF( Raster, 0xF00, "raster module" )
- FT_MODERRDEF( SFNT, 0x1000, "SFNT module" )
- FT_MODERRDEF( Smooth, 0x1100, "smooth raster module" )
- FT_MODERRDEF( TrueType, 0x1200, "TrueType module" )
- FT_MODERRDEF( Type1, 0x1300, "Type 1 module" )
- FT_MODERRDEF( Type42, 0x1400, "Type 42 module" )
- FT_MODERRDEF( Winfonts, 0x1500, "Windows FON/FNT module" )
- FT_MODERRDEF( GXvalid, 0x1600, "GX validation module" )
-
-
-#ifdef FT_MODERR_END_LIST
- FT_MODERR_END_LIST
-#endif
-
-
- /*******************************************************************/
- /*******************************************************************/
- /***** *****/
- /***** CLEANUP *****/
- /***** *****/
- /*******************************************************************/
- /*******************************************************************/
-
-
-#ifdef FT_NEED_EXTERN_C
- }
-#endif
-
-#undef FT_MODERR_START_LIST
-#undef FT_MODERR_END_LIST
-#undef FT_MODERRDEF
-#undef FT_NEED_EXTERN_C
-
-
-#endif /* FTMODERR_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftotval.h b/include/freetype/ftotval.h
deleted file mode 100644
index b5d27cfe7..000000000
--- a/include/freetype/ftotval.h
+++ /dev/null
@@ -1,204 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftotval.h */
-/* */
-/* FreeType API for validating OpenType tables (specification). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* */
-/* Warning: This module might be moved to a different library in the */
-/* future to avoid a tight dependency between FreeType and the */
-/* OpenType specification. */
-/* */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTOTVAL_H_
-#define FTOTVAL_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* ot_validation */
- /* */
- /* <Title> */
- /* OpenType Validation */
- /* */
- /* <Abstract> */
- /* An API to validate OpenType tables. */
- /* */
- /* <Description> */
- /* This section contains the declaration of functions to validate */
- /* some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). */
- /* */
- /* <Order> */
- /* FT_OpenType_Validate */
- /* FT_OpenType_Free */
- /* */
- /* FT_VALIDATE_OTXXX */
- /* */
- /*************************************************************************/
-
-
- /**********************************************************************
- *
- * @enum:
- * FT_VALIDATE_OTXXX
- *
- * @description:
- * A list of bit-field constants used with @FT_OpenType_Validate to
- * indicate which OpenType tables should be validated.
- *
- * @values:
- * FT_VALIDATE_BASE ::
- * Validate BASE table.
- *
- * FT_VALIDATE_GDEF ::
- * Validate GDEF table.
- *
- * FT_VALIDATE_GPOS ::
- * Validate GPOS table.
- *
- * FT_VALIDATE_GSUB ::
- * Validate GSUB table.
- *
- * FT_VALIDATE_JSTF ::
- * Validate JSTF table.
- *
- * FT_VALIDATE_MATH ::
- * Validate MATH table.
- *
- * FT_VALIDATE_OT ::
- * Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).
- *
- */
-#define FT_VALIDATE_BASE 0x0100
-#define FT_VALIDATE_GDEF 0x0200
-#define FT_VALIDATE_GPOS 0x0400
-#define FT_VALIDATE_GSUB 0x0800
-#define FT_VALIDATE_JSTF 0x1000
-#define FT_VALIDATE_MATH 0x2000
-
-#define FT_VALIDATE_OT ( FT_VALIDATE_BASE | \
- FT_VALIDATE_GDEF | \
- FT_VALIDATE_GPOS | \
- FT_VALIDATE_GSUB | \
- FT_VALIDATE_JSTF | \
- FT_VALIDATE_MATH )
-
- /**********************************************************************
- *
- * @function:
- * FT_OpenType_Validate
- *
- * @description:
- * Validate various OpenType tables to assure that all offsets and
- * indices are valid. The idea is that a higher-level library that
- * actually does the text layout can access those tables without
- * error checking (which can be quite time consuming).
- *
- * @input:
- * face ::
- * A handle to the input face.
- *
- * validation_flags ::
- * A bit field that specifies the tables to be validated. See
- * @FT_VALIDATE_OTXXX for possible values.
- *
- * @output:
- * BASE_table ::
- * A pointer to the BASE table.
- *
- * GDEF_table ::
- * A pointer to the GDEF table.
- *
- * GPOS_table ::
- * A pointer to the GPOS table.
- *
- * GSUB_table ::
- * A pointer to the GSUB table.
- *
- * JSTF_table ::
- * A pointer to the JSTF table.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This function only works with OpenType fonts, returning an error
- * otherwise.
- *
- * After use, the application should deallocate the five tables with
- * @FT_OpenType_Free. A NULL value indicates that the table either
- * doesn't exist in the font, or the application hasn't asked for
- * validation.
- */
- FT_EXPORT( FT_Error )
- FT_OpenType_Validate( FT_Face face,
- FT_UInt validation_flags,
- FT_Bytes *BASE_table,
- FT_Bytes *GDEF_table,
- FT_Bytes *GPOS_table,
- FT_Bytes *GSUB_table,
- FT_Bytes *JSTF_table );
-
- /**********************************************************************
- *
- * @function:
- * FT_OpenType_Free
- *
- * @description:
- * Free the buffer allocated by OpenType validator.
- *
- * @input:
- * face ::
- * A handle to the input face.
- *
- * table ::
- * The pointer to the buffer that is allocated by
- * @FT_OpenType_Validate.
- *
- * @note:
- * This function must be used to free the buffer allocated by
- * @FT_OpenType_Validate only.
- */
- FT_EXPORT( void )
- FT_OpenType_Free( FT_Face face,
- FT_Bytes table );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTOTVAL_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftoutln.h b/include/freetype/ftoutln.h
deleted file mode 100644
index 07f73ebb1..000000000
--- a/include/freetype/ftoutln.h
+++ /dev/null
@@ -1,582 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftoutln.h */
-/* */
-/* Support for the FT_Outline type used to store glyph shapes of */
-/* most scalable font formats (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTOUTLN_H_
-#define FTOUTLN_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* outline_processing */
- /* */
- /* <Title> */
- /* Outline Processing */
- /* */
- /* <Abstract> */
- /* Functions to create, transform, and render vectorial glyph images. */
- /* */
- /* <Description> */
- /* This section contains routines used to create and destroy scalable */
- /* glyph images known as `outlines'. These can also be measured, */
- /* transformed, and converted into bitmaps and pixmaps. */
- /* */
- /* <Order> */
- /* FT_Outline */
- /* FT_Outline_New */
- /* FT_Outline_Done */
- /* FT_Outline_Copy */
- /* FT_Outline_Translate */
- /* FT_Outline_Transform */
- /* FT_Outline_Embolden */
- /* FT_Outline_EmboldenXY */
- /* FT_Outline_Reverse */
- /* FT_Outline_Check */
- /* */
- /* FT_Outline_Get_CBox */
- /* FT_Outline_Get_BBox */
- /* */
- /* FT_Outline_Get_Bitmap */
- /* FT_Outline_Render */
- /* FT_Outline_Decompose */
- /* FT_Outline_Funcs */
- /* FT_Outline_MoveToFunc */
- /* FT_Outline_LineToFunc */
- /* FT_Outline_ConicToFunc */
- /* FT_Outline_CubicToFunc */
- /* */
- /* FT_Orientation */
- /* FT_Outline_Get_Orientation */
- /* */
- /* FT_OUTLINE_XXX */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Decompose */
- /* */
- /* <Description> */
- /* Walk over an outline's structure to decompose it into individual */
- /* segments and Bézier arcs. This function also emits `move to' */
- /* operations to indicate the start of new contours in the outline. */
- /* */
- /* <Input> */
- /* outline :: A pointer to the source target. */
- /* */
- /* func_interface :: A table of `emitters', i.e., function pointers */
- /* called during decomposition to indicate path */
- /* operations. */
- /* */
- /* <InOut> */
- /* user :: A typeless pointer that is passed to each */
- /* emitter during the decomposition. It can be */
- /* used to store the state during the */
- /* decomposition. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* A contour that contains a single point only is represented by a */
- /* `move to' operation followed by `line to' to the same point. In */
- /* most cases, it is best to filter this out before using the */
- /* outline for stroking purposes (otherwise it would result in a */
- /* visible dot when round caps are used). */
- /* */
- /* Similarly, the function returns success for an empty outline also */
- /* (doing nothing, this is, not calling any emitter); if necessary, */
- /* you should filter this out, too. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Outline_Decompose( FT_Outline* outline,
- const FT_Outline_Funcs* func_interface,
- void* user );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_New */
- /* */
- /* <Description> */
- /* Create a new outline of a given size. */
- /* */
- /* <Input> */
- /* library :: A handle to the library object from where the */
- /* outline is allocated. Note however that the new */
- /* outline will *not* necessarily be *freed*, when */
- /* destroying the library, by @FT_Done_FreeType. */
- /* */
- /* numPoints :: The maximum number of points within the outline. */
- /* Must be smaller than or equal to 0xFFFF (65535). */
- /* */
- /* numContours :: The maximum number of contours within the outline. */
- /* This value must be in the range 0 to `numPoints'. */
- /* */
- /* <Output> */
- /* anoutline :: A handle to the new outline. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The reason why this function takes a `library' parameter is simply */
- /* to use the library's memory allocator. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Outline_New( FT_Library library,
- FT_UInt numPoints,
- FT_Int numContours,
- FT_Outline *anoutline );
-
-
- FT_EXPORT( FT_Error )
- FT_Outline_New_Internal( FT_Memory memory,
- FT_UInt numPoints,
- FT_Int numContours,
- FT_Outline *anoutline );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Done */
- /* */
- /* <Description> */
- /* Destroy an outline created with @FT_Outline_New. */
- /* */
- /* <Input> */
- /* library :: A handle of the library object used to allocate the */
- /* outline. */
- /* */
- /* outline :: A pointer to the outline object to be discarded. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* If the outline's `owner' field is not set, only the outline */
- /* descriptor will be released. */
- /* */
- /* The reason why this function takes an `library' parameter is */
- /* simply to use ft_mem_free(). */
- /* */
- FT_EXPORT( FT_Error )
- FT_Outline_Done( FT_Library library,
- FT_Outline* outline );
-
-
- FT_EXPORT( FT_Error )
- FT_Outline_Done_Internal( FT_Memory memory,
- FT_Outline* outline );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Check */
- /* */
- /* <Description> */
- /* Check the contents of an outline descriptor. */
- /* */
- /* <Input> */
- /* outline :: A handle to a source outline. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* An empty outline, or an outline with a single point only is also */
- /* valid. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Outline_Check( FT_Outline* outline );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Get_CBox */
- /* */
- /* <Description> */
- /* Return an outline's `control box'. The control box encloses all */
- /* the outline's points, including Bézier control points. Though it */
- /* coincides with the exact bounding box for most glyphs, it can be */
- /* slightly larger in some situations (like when rotating an outline */
- /* that contains Bézier outside arcs). */
- /* */
- /* Computing the control box is very fast, while getting the bounding */
- /* box can take much more time as it needs to walk over all segments */
- /* and arcs in the outline. To get the latter, you can use the */
- /* `ftbbox' component, which is dedicated to this single task. */
- /* */
- /* <Input> */
- /* outline :: A pointer to the source outline descriptor. */
- /* */
- /* <Output> */
- /* acbox :: The outline's control box. */
- /* */
- /* <Note> */
- /* See @FT_Glyph_Get_CBox for a discussion of tricky fonts. */
- /* */
- FT_EXPORT( void )
- FT_Outline_Get_CBox( const FT_Outline* outline,
- FT_BBox *acbox );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Translate */
- /* */
- /* <Description> */
- /* Apply a simple translation to the points of an outline. */
- /* */
- /* <InOut> */
- /* outline :: A pointer to the target outline descriptor. */
- /* */
- /* <Input> */
- /* xOffset :: The horizontal offset. */
- /* */
- /* yOffset :: The vertical offset. */
- /* */
- FT_EXPORT( void )
- FT_Outline_Translate( const FT_Outline* outline,
- FT_Pos xOffset,
- FT_Pos yOffset );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Copy */
- /* */
- /* <Description> */
- /* Copy an outline into another one. Both objects must have the */
- /* same sizes (number of points & number of contours) when this */
- /* function is called. */
- /* */
- /* <Input> */
- /* source :: A handle to the source outline. */
- /* */
- /* <Output> */
- /* target :: A handle to the target outline. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Outline_Copy( const FT_Outline* source,
- FT_Outline *target );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Transform */
- /* */
- /* <Description> */
- /* Apply a simple 2x2 matrix to all of an outline's points. Useful */
- /* for applying rotations, slanting, flipping, etc. */
- /* */
- /* <InOut> */
- /* outline :: A pointer to the target outline descriptor. */
- /* */
- /* <Input> */
- /* matrix :: A pointer to the transformation matrix. */
- /* */
- /* <Note> */
- /* You can use @FT_Outline_Translate if you need to translate the */
- /* outline's points. */
- /* */
- FT_EXPORT( void )
- FT_Outline_Transform( const FT_Outline* outline,
- const FT_Matrix* matrix );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Embolden */
- /* */
- /* <Description> */
- /* Embolden an outline. The new outline will be at most 4~times */
- /* `strength' pixels wider and higher. You may think of the left and */
- /* bottom borders as unchanged. */
- /* */
- /* Negative `strength' values to reduce the outline thickness are */
- /* possible also. */
- /* */
- /* <InOut> */
- /* outline :: A handle to the target outline. */
- /* */
- /* <Input> */
- /* strength :: How strong the glyph is emboldened. Expressed in */
- /* 26.6 pixel format. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The used algorithm to increase or decrease the thickness of the */
- /* glyph doesn't change the number of points; this means that certain */
- /* situations like acute angles or intersections are sometimes */
- /* handled incorrectly. */
- /* */
- /* If you need `better' metrics values you should call */
- /* @FT_Outline_Get_CBox or @FT_Outline_Get_BBox. */
- /* */
- /* Example call: */
- /* */
- /* { */
- /* FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); */
- /* if ( face->glyph->format == FT_GLYPH_FORMAT_OUTLINE ) */
- /* FT_Outline_Embolden( &face->glyph->outline, strength ); */
- /* } */
- /* */
- /* To get meaningful results, font scaling values must be set with */
- /* functions like @FT_Set_Char_Size before calling FT_Render_Glyph. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Outline_Embolden( FT_Outline* outline,
- FT_Pos strength );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_EmboldenXY */
- /* */
- /* <Description> */
- /* Embolden an outline. The new outline will be `xstrength' pixels */
- /* wider and `ystrength' pixels higher. Otherwise, it is similar to */
- /* @FT_Outline_Embolden, which uses the same strength in both */
- /* directions. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Outline_EmboldenXY( FT_Outline* outline,
- FT_Pos xstrength,
- FT_Pos ystrength );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Reverse */
- /* */
- /* <Description> */
- /* Reverse the drawing direction of an outline. This is used to */
- /* ensure consistent fill conventions for mirrored glyphs. */
- /* */
- /* <InOut> */
- /* outline :: A pointer to the target outline descriptor. */
- /* */
- /* <Note> */
- /* This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in */
- /* the outline's `flags' field. */
- /* */
- /* It shouldn't be used by a normal client application, unless it */
- /* knows what it is doing. */
- /* */
- FT_EXPORT( void )
- FT_Outline_Reverse( FT_Outline* outline );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Get_Bitmap */
- /* */
- /* <Description> */
- /* Render an outline within a bitmap. The outline's image is simply */
- /* OR-ed to the target bitmap. */
- /* */
- /* <Input> */
- /* library :: A handle to a FreeType library object. */
- /* */
- /* outline :: A pointer to the source outline descriptor. */
- /* */
- /* <InOut> */
- /* abitmap :: A pointer to the target bitmap descriptor. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* This function does NOT CREATE the bitmap, it only renders an */
- /* outline image within the one you pass to it! Consequently, the */
- /* various fields in `abitmap' should be set accordingly. */
- /* */
- /* It will use the raster corresponding to the default glyph format. */
- /* */
- /* The value of the `num_grays' field in `abitmap' is ignored. If */
- /* you select the gray-level rasterizer, and you want less than 256 */
- /* gray levels, you have to use @FT_Outline_Render directly. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Outline_Get_Bitmap( FT_Library library,
- FT_Outline* outline,
- const FT_Bitmap *abitmap );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Render */
- /* */
- /* <Description> */
- /* Render an outline within a bitmap using the current scan-convert. */
- /* This function uses an @FT_Raster_Params structure as an argument, */
- /* allowing advanced features like direct composition, translucency, */
- /* etc. */
- /* */
- /* <Input> */
- /* library :: A handle to a FreeType library object. */
- /* */
- /* outline :: A pointer to the source outline descriptor. */
- /* */
- /* <InOut> */
- /* params :: A pointer to an @FT_Raster_Params structure used to */
- /* describe the rendering operation. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* You should know what you are doing and how @FT_Raster_Params works */
- /* to use this function. */
- /* */
- /* The field `params.source' will be set to `outline' before the scan */
- /* converter is called, which means that the value you give to it is */
- /* actually ignored. */
- /* */
- /* The gray-level rasterizer always uses 256 gray levels. If you */
- /* want less gray levels, you have to provide your own span callback. */
- /* See the @FT_RASTER_FLAG_DIRECT value of the `flags' field in the */
- /* @FT_Raster_Params structure for more details. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Outline_Render( FT_Library library,
- FT_Outline* outline,
- FT_Raster_Params* params );
-
-
- /**************************************************************************
- *
- * @enum:
- * FT_Orientation
- *
- * @description:
- * A list of values used to describe an outline's contour orientation.
- *
- * The TrueType and PostScript specifications use different conventions
- * to determine whether outline contours should be filled or unfilled.
- *
- * @values:
- * FT_ORIENTATION_TRUETYPE ::
- * According to the TrueType specification, clockwise contours must
- * be filled, and counter-clockwise ones must be unfilled.
- *
- * FT_ORIENTATION_POSTSCRIPT ::
- * According to the PostScript specification, counter-clockwise contours
- * must be filled, and clockwise ones must be unfilled.
- *
- * FT_ORIENTATION_FILL_RIGHT ::
- * This is identical to @FT_ORIENTATION_TRUETYPE, but is used to
- * remember that in TrueType, everything that is to the right of
- * the drawing direction of a contour must be filled.
- *
- * FT_ORIENTATION_FILL_LEFT ::
- * This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to
- * remember that in PostScript, everything that is to the left of
- * the drawing direction of a contour must be filled.
- *
- * FT_ORIENTATION_NONE ::
- * The orientation cannot be determined. That is, different parts of
- * the glyph have different orientation.
- *
- */
- typedef enum FT_Orientation_
- {
- FT_ORIENTATION_TRUETYPE = 0,
- FT_ORIENTATION_POSTSCRIPT = 1,
- FT_ORIENTATION_FILL_RIGHT = FT_ORIENTATION_TRUETYPE,
- FT_ORIENTATION_FILL_LEFT = FT_ORIENTATION_POSTSCRIPT,
- FT_ORIENTATION_NONE
-
- } FT_Orientation;
-
-
- /**************************************************************************
- *
- * @function:
- * FT_Outline_Get_Orientation
- *
- * @description:
- * This function analyzes a glyph outline and tries to compute its
- * fill orientation (see @FT_Orientation). This is done by integrating
- * the total area covered by the outline. The positive integral
- * corresponds to the clockwise orientation and @FT_ORIENTATION_POSTSCRIPT
- * is returned. The negative integral corresponds to the counter-clockwise
- * orientation and @FT_ORIENTATION_TRUETYPE is returned.
- *
- * Note that this will return @FT_ORIENTATION_TRUETYPE for empty
- * outlines.
- *
- * @input:
- * outline ::
- * A handle to the source outline.
- *
- * @return:
- * The orientation.
- *
- */
- FT_EXPORT( FT_Orientation )
- FT_Outline_Get_Orientation( FT_Outline* outline );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTOUTLN_H_ */
-
-
-/* END */
-
-
-/* Local Variables: */
-/* coding: utf-8 */
-/* End: */
diff --git a/include/freetype/ftpcfdrv.h b/include/freetype/ftpcfdrv.h
deleted file mode 100644
index 6622c936f..000000000
--- a/include/freetype/ftpcfdrv.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftpcfdrv.h */
-/* */
-/* FreeType API for controlling the PCF driver (specification only). */
-/* */
-/* Copyright 2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTPCFDRV_H_
-#define FTPCFDRV_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /**************************************************************************
- *
- * @section:
- * pcf_driver
- *
- * @title:
- * The PCF driver
- *
- * @abstract:
- * Controlling the PCF driver module.
- *
- * @description:
- * While FreeType's PCF driver doesn't expose API functions by itself,
- * it is possible to control its behaviour with @FT_Property_Set and
- * @FT_Property_Get. Right now, there is a single property
- * `no-long-family-names' available if FreeType is compiled with
- * PCF_CONFIG_OPTION_LONG_FAMILY_NAMES.
- *
- * The PCF driver's module name is `pcf'.
- *
- */
-
-
- /**************************************************************************
- *
- * @property:
- * no-long-family-names
- *
- * @description:
- * If PCF_CONFIG_OPTION_LONG_FAMILY_NAMES is active while compiling
- * FreeType, the PCF driver constructs long family names.
- *
- * There are many PCF fonts just called `Fixed' which look completely
- * different, and which have nothing to do with each other. When
- * selecting `Fixed' in KDE or Gnome one gets results that appear rather
- * random, the style changes often if one changes the size and one
- * cannot select some fonts at all. The improve this situation, the PCF
- * module prepends the foundry name (plus a space) to the family name.
- * It also checks whether there are `wide' characters; all put together,
- * family names like `Sony Fixed' or `Misc Fixed Wide' are constructed.
- *
- * If `no-long-family-names' is set, this feature gets switched off.
- *
- * {
- * FT_Library library;
- * FT_Bool no_long_family_names = TRUE;
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "pcf",
- * "no-long-family-names",
- * &no_long_family_names );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * This property can be set via the `FREETYPE_PROPERTIES' environment
- * variable (using values 1 and 0 for `on' and `off', respectively).
- *
- */
-
-
-FT_END_HEADER
-
-
-#endif /* FTPCFDRV_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftpfr.h b/include/freetype/ftpfr.h
deleted file mode 100644
index f2a6ae934..000000000
--- a/include/freetype/ftpfr.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftpfr.h */
-/* */
-/* FreeType API for accessing PFR-specific data (specification only). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTPFR_H_
-#define FTPFR_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* pfr_fonts */
- /* */
- /* <Title> */
- /* PFR Fonts */
- /* */
- /* <Abstract> */
- /* PFR/TrueDoc specific API. */
- /* */
- /* <Description> */
- /* This section contains the declaration of PFR-specific functions. */
- /* */
- /*************************************************************************/
-
-
- /**********************************************************************
- *
- * @function:
- * FT_Get_PFR_Metrics
- *
- * @description:
- * Return the outline and metrics resolutions of a given PFR face.
- *
- * @input:
- * face :: Handle to the input face. It can be a non-PFR face.
- *
- * @output:
- * aoutline_resolution ::
- * Outline resolution. This is equivalent to `face->units_per_EM'
- * for non-PFR fonts. Optional (parameter can be NULL).
- *
- * ametrics_resolution ::
- * Metrics resolution. This is equivalent to `outline_resolution'
- * for non-PFR fonts. Optional (parameter can be NULL).
- *
- * ametrics_x_scale ::
- * A 16.16 fixed-point number used to scale distance expressed
- * in metrics units to device sub-pixels. This is equivalent to
- * `face->size->x_scale', but for metrics only. Optional (parameter
- * can be NULL).
- *
- * ametrics_y_scale ::
- * Same as `ametrics_x_scale' but for the vertical direction.
- * optional (parameter can be NULL).
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * If the input face is not a PFR, this function will return an error.
- * However, in all cases, it will return valid values.
- */
- FT_EXPORT( FT_Error )
- FT_Get_PFR_Metrics( FT_Face face,
- FT_UInt *aoutline_resolution,
- FT_UInt *ametrics_resolution,
- FT_Fixed *ametrics_x_scale,
- FT_Fixed *ametrics_y_scale );
-
-
- /**********************************************************************
- *
- * @function:
- * FT_Get_PFR_Kerning
- *
- * @description:
- * Return the kerning pair corresponding to two glyphs in a PFR face.
- * The distance is expressed in metrics units, unlike the result of
- * @FT_Get_Kerning.
- *
- * @input:
- * face :: A handle to the input face.
- *
- * left :: Index of the left glyph.
- *
- * right :: Index of the right glyph.
- *
- * @output:
- * avector :: A kerning vector.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This function always return distances in original PFR metrics
- * units. This is unlike @FT_Get_Kerning with the @FT_KERNING_UNSCALED
- * mode, which always returns distances converted to outline units.
- *
- * You can use the value of the `x_scale' and `y_scale' parameters
- * returned by @FT_Get_PFR_Metrics to scale these to device sub-pixels.
- */
- FT_EXPORT( FT_Error )
- FT_Get_PFR_Kerning( FT_Face face,
- FT_UInt left,
- FT_UInt right,
- FT_Vector *avector );
-
-
- /**********************************************************************
- *
- * @function:
- * FT_Get_PFR_Advance
- *
- * @description:
- * Return a given glyph advance, expressed in original metrics units,
- * from a PFR font.
- *
- * @input:
- * face :: A handle to the input face.
- *
- * gindex :: The glyph index.
- *
- * @output:
- * aadvance :: The glyph advance in metrics units.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * You can use the `x_scale' or `y_scale' results of @FT_Get_PFR_Metrics
- * to convert the advance to device sub-pixels (i.e., 1/64th of pixels).
- */
- FT_EXPORT( FT_Error )
- FT_Get_PFR_Advance( FT_Face face,
- FT_UInt gindex,
- FT_Pos *aadvance );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTPFR_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftrender.h b/include/freetype/ftrender.h
deleted file mode 100644
index 960837580..000000000
--- a/include/freetype/ftrender.h
+++ /dev/null
@@ -1,233 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftrender.h */
-/* */
-/* FreeType renderer modules public interface (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTRENDER_H_
-#define FTRENDER_H_
-
-
-#include <ft2build.h>
-#include FT_MODULE_H
-#include FT_GLYPH_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* module_management */
- /* */
- /*************************************************************************/
-
-
- /* create a new glyph object */
- typedef FT_Error
- (*FT_Glyph_InitFunc)( FT_Glyph glyph,
- FT_GlyphSlot slot );
-
- /* destroys a given glyph object */
- typedef void
- (*FT_Glyph_DoneFunc)( FT_Glyph glyph );
-
- typedef void
- (*FT_Glyph_TransformFunc)( FT_Glyph glyph,
- const FT_Matrix* matrix,
- const FT_Vector* delta );
-
- typedef void
- (*FT_Glyph_GetBBoxFunc)( FT_Glyph glyph,
- FT_BBox* abbox );
-
- typedef FT_Error
- (*FT_Glyph_CopyFunc)( FT_Glyph source,
- FT_Glyph target );
-
- typedef FT_Error
- (*FT_Glyph_PrepareFunc)( FT_Glyph glyph,
- FT_GlyphSlot slot );
-
-/* deprecated */
-#define FT_Glyph_Init_Func FT_Glyph_InitFunc
-#define FT_Glyph_Done_Func FT_Glyph_DoneFunc
-#define FT_Glyph_Transform_Func FT_Glyph_TransformFunc
-#define FT_Glyph_BBox_Func FT_Glyph_GetBBoxFunc
-#define FT_Glyph_Copy_Func FT_Glyph_CopyFunc
-#define FT_Glyph_Prepare_Func FT_Glyph_PrepareFunc
-
-
- struct FT_Glyph_Class_
- {
- FT_Long glyph_size;
- FT_Glyph_Format glyph_format;
-
- FT_Glyph_InitFunc glyph_init;
- FT_Glyph_DoneFunc glyph_done;
- FT_Glyph_CopyFunc glyph_copy;
- FT_Glyph_TransformFunc glyph_transform;
- FT_Glyph_GetBBoxFunc glyph_bbox;
- FT_Glyph_PrepareFunc glyph_prepare;
- };
-
-
- typedef FT_Error
- (*FT_Renderer_RenderFunc)( FT_Renderer renderer,
- FT_GlyphSlot slot,
- FT_UInt mode,
- const FT_Vector* origin );
-
- typedef FT_Error
- (*FT_Renderer_TransformFunc)( FT_Renderer renderer,
- FT_GlyphSlot slot,
- const FT_Matrix* matrix,
- const FT_Vector* delta );
-
-
- typedef void
- (*FT_Renderer_GetCBoxFunc)( FT_Renderer renderer,
- FT_GlyphSlot slot,
- FT_BBox* cbox );
-
-
- typedef FT_Error
- (*FT_Renderer_SetModeFunc)( FT_Renderer renderer,
- FT_ULong mode_tag,
- FT_Pointer mode_ptr );
-
-/* deprecated identifiers */
-#define FTRenderer_render FT_Renderer_RenderFunc
-#define FTRenderer_transform FT_Renderer_TransformFunc
-#define FTRenderer_getCBox FT_Renderer_GetCBoxFunc
-#define FTRenderer_setMode FT_Renderer_SetModeFunc
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Renderer_Class */
- /* */
- /* <Description> */
- /* The renderer module class descriptor. */
- /* */
- /* <Fields> */
- /* root :: The root @FT_Module_Class fields. */
- /* */
- /* glyph_format :: The glyph image format this renderer handles. */
- /* */
- /* render_glyph :: A method used to render the image that is in a */
- /* given glyph slot into a bitmap. */
- /* */
- /* transform_glyph :: A method used to transform the image that is in */
- /* a given glyph slot. */
- /* */
- /* get_glyph_cbox :: A method used to access the glyph's cbox. */
- /* */
- /* set_mode :: A method used to pass additional parameters. */
- /* */
- /* raster_class :: For @FT_GLYPH_FORMAT_OUTLINE renderers only. */
- /* This is a pointer to its raster's class. */
- /* */
- typedef struct FT_Renderer_Class_
- {
- FT_Module_Class root;
-
- FT_Glyph_Format glyph_format;
-
- FT_Renderer_RenderFunc render_glyph;
- FT_Renderer_TransformFunc transform_glyph;
- FT_Renderer_GetCBoxFunc get_glyph_cbox;
- FT_Renderer_SetModeFunc set_mode;
-
- FT_Raster_Funcs* raster_class;
-
- } FT_Renderer_Class;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Renderer */
- /* */
- /* <Description> */
- /* Retrieve the current renderer for a given glyph format. */
- /* */
- /* <Input> */
- /* library :: A handle to the library object. */
- /* */
- /* format :: The glyph format. */
- /* */
- /* <Return> */
- /* A renderer handle. 0~if none found. */
- /* */
- /* <Note> */
- /* An error will be returned if a module already exists by that name, */
- /* or if the module requires a version of FreeType that is too great. */
- /* */
- /* To add a new renderer, simply use @FT_Add_Module. To retrieve a */
- /* renderer by its name, use @FT_Get_Module. */
- /* */
- FT_EXPORT( FT_Renderer )
- FT_Get_Renderer( FT_Library library,
- FT_Glyph_Format format );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Renderer */
- /* */
- /* <Description> */
- /* Set the current renderer to use, and set additional mode. */
- /* */
- /* <InOut> */
- /* library :: A handle to the library object. */
- /* */
- /* <Input> */
- /* renderer :: A handle to the renderer object. */
- /* */
- /* num_params :: The number of additional parameters. */
- /* */
- /* parameters :: Additional parameters. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* In case of success, the renderer will be used to convert glyph */
- /* images in the renderer's known format into bitmaps. */
- /* */
- /* This doesn't change the current renderer for other formats. */
- /* */
- /* Currently, no FreeType renderer module uses `parameters'; you */
- /* should thus always pass NULL as the value. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Set_Renderer( FT_Library library,
- FT_Renderer renderer,
- FT_UInt num_params,
- FT_Parameter* parameters );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTRENDER_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftsizes.h b/include/freetype/ftsizes.h
deleted file mode 100644
index 2f3958a85..000000000
--- a/include/freetype/ftsizes.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsizes.h */
-/* */
-/* FreeType size objects management (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Typical application would normally not need to use these functions. */
- /* However, they have been placed in a public API for the rare cases */
- /* where they are needed. */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTSIZES_H_
-#define FTSIZES_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* sizes_management */
- /* */
- /* <Title> */
- /* Size Management */
- /* */
- /* <Abstract> */
- /* Managing multiple sizes per face. */
- /* */
- /* <Description> */
- /* When creating a new face object (e.g., with @FT_New_Face), an */
- /* @FT_Size object is automatically created and used to store all */
- /* pixel-size dependent information, available in the `face->size' */
- /* field. */
- /* */
- /* It is however possible to create more sizes for a given face, */
- /* mostly in order to manage several character pixel sizes of the */
- /* same font family and style. See @FT_New_Size and @FT_Done_Size. */
- /* */
- /* Note that @FT_Set_Pixel_Sizes and @FT_Set_Char_Size only */
- /* modify the contents of the current `active' size; you thus need */
- /* to use @FT_Activate_Size to change it. */
- /* */
- /* 99% of applications won't need the functions provided here, */
- /* especially if they use the caching sub-system, so be cautious */
- /* when using these. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Size */
- /* */
- /* <Description> */
- /* Create a new size object from a given face object. */
- /* */
- /* <Input> */
- /* face :: A handle to a parent face object. */
- /* */
- /* <Output> */
- /* asize :: A handle to a new size object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* You need to call @FT_Activate_Size in order to select the new size */
- /* for upcoming calls to @FT_Set_Pixel_Sizes, @FT_Set_Char_Size, */
- /* @FT_Load_Glyph, @FT_Load_Char, etc. */
- /* */
- FT_EXPORT( FT_Error )
- FT_New_Size( FT_Face face,
- FT_Size* size );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Done_Size */
- /* */
- /* <Description> */
- /* Discard a given size object. Note that @FT_Done_Face */
- /* automatically discards all size objects allocated with */
- /* @FT_New_Size. */
- /* */
- /* <Input> */
- /* size :: A handle to a target size object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Done_Size( FT_Size size );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Activate_Size */
- /* */
- /* <Description> */
- /* Even though it is possible to create several size objects for a */
- /* given face (see @FT_New_Size for details), functions like */
- /* @FT_Load_Glyph or @FT_Load_Char only use the one that has been */
- /* activated last to determine the `current character pixel size'. */
- /* */
- /* This function can be used to `activate' a previously created size */
- /* object. */
- /* */
- /* <Input> */
- /* size :: A handle to a target size object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* If `face' is the size's parent face object, this function changes */
- /* the value of `face->size' to the input size handle. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Activate_Size( FT_Size size );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTSIZES_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftsnames.h b/include/freetype/ftsnames.h
deleted file mode 100644
index a31654057..000000000
--- a/include/freetype/ftsnames.h
+++ /dev/null
@@ -1,287 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsnames.h */
-/* */
-/* Simple interface to access SFNT `name' tables (which are used */
-/* to hold font names, copyright info, notices, etc.) (specification). */
-/* */
-/* This is _not_ used to retrieve glyph names! */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTSNAMES_H_
-#define FTSNAMES_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* sfnt_names */
- /* */
- /* <Title> */
- /* SFNT Names */
- /* */
- /* <Abstract> */
- /* Access the names embedded in TrueType and OpenType files. */
- /* */
- /* <Description> */
- /* The TrueType and OpenType specifications allow the inclusion of */
- /* a special names table (`name') in font files. This table contains */
- /* textual (and internationalized) information regarding the font, */
- /* like family name, copyright, version, etc. */
- /* */
- /* The definitions below are used to access them if available. */
- /* */
- /* Note that this has nothing to do with glyph names! */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_SfntName */
- /* */
- /* <Description> */
- /* A structure used to model an SFNT `name' table entry. */
- /* */
- /* <Fields> */
- /* platform_id :: The platform ID for `string'. */
- /* See @TT_PLATFORM_XXX for possible values. */
- /* */
- /* encoding_id :: The encoding ID for `string'. */
- /* See @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX, */
- /* @TT_ISO_ID_XXX, @TT_MS_ID_XXX, and @TT_ADOBE_ID_XXX */
- /* for possible values. */
- /* */
- /* language_id :: The language ID for `string'. */
- /* See @TT_MAC_LANGID_XXX and @TT_MS_LANGID_XXX for */
- /* possible values. */
- /* */
- /* Registered OpenType values for `language_id' are */
- /* always smaller than 0x8000; values equal or larger */
- /* than 0x8000 usually indicate a language tag string */
- /* (introduced in OpenType version 1.6). Use function */
- /* @FT_Get_Sfnt_LangTag with `language_id' as its */
- /* argument to retrieve the associated language tag. */
- /* */
- /* name_id :: An identifier for `string'. */
- /* See @TT_NAME_ID_XXX for possible values. */
- /* */
- /* string :: The `name' string. Note that its format differs */
- /* depending on the (platform,encoding) pair, being */
- /* either a string of bytes (without a terminating */
- /* NULL byte) or containing UTF-16BE entities. */
- /* */
- /* string_len :: The length of `string' in bytes. */
- /* */
- /* <Note> */
- /* Please refer to the TrueType or OpenType specification for more */
- /* details. */
- /* */
- typedef struct FT_SfntName_
- {
- FT_UShort platform_id;
- FT_UShort encoding_id;
- FT_UShort language_id;
- FT_UShort name_id;
-
- FT_Byte* string; /* this string is *not* null-terminated! */
- FT_UInt string_len; /* in bytes */
-
- } FT_SfntName;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Sfnt_Name_Count */
- /* */
- /* <Description> */
- /* Retrieve the number of name strings in the SFNT `name' table. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* <Return> */
- /* The number of strings in the `name' table. */
- /* */
- FT_EXPORT( FT_UInt )
- FT_Get_Sfnt_Name_Count( FT_Face face );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Sfnt_Name */
- /* */
- /* <Description> */
- /* Retrieve a string of the SFNT `name' table for a given index. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* idx :: The index of the `name' string. */
- /* */
- /* <Output> */
- /* aname :: The indexed @FT_SfntName structure. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The `string' array returned in the `aname' structure is not */
- /* null-terminated. Note that you don't have to deallocate `string' */
- /* by yourself; FreeType takes care of it if you call @FT_Done_Face. */
- /* */
- /* Use @FT_Get_Sfnt_Name_Count to get the total number of available */
- /* `name' table entries, then do a loop until you get the right */
- /* platform, encoding, and name ID. */
- /* */
- /* `name' table format~1 entries can use language tags also, see */
- /* @FT_Get_Sfnt_LangTag. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_Sfnt_Name( FT_Face face,
- FT_UInt idx,
- FT_SfntName *aname );
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_SfntLangTag */
- /* */
- /* <Description> */
- /* A structure to model a language tag entry from an SFNT `name' */
- /* table. */
- /* */
- /* <Fields> */
- /* string :: The language tag string, encoded in UTF-16BE */
- /* (without trailing NULL bytes). */
- /* */
- /* string_len :: The length of `string' in *bytes*. */
- /* */
- /* <Note> */
- /* Please refer to the TrueType or OpenType specification for more */
- /* details. */
- /* */
- typedef struct FT_SfntLangTag_
- {
- FT_Byte* string; /* this string is *not* null-terminated! */
- FT_UInt string_len; /* in bytes */
-
- } FT_SfntLangTag;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Sfnt_LangTag */
- /* */
- /* <Description> */
- /* Retrieve the language tag associated with a language ID of an SFNT */
- /* `name' table entry. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* langID :: The language ID, as returned by @FT_Get_Sfnt_Name. */
- /* This is always a value larger than 0x8000. */
- /* */
- /* <Output> */
- /* alangTag :: The language tag associated with the `name' table */
- /* entry's language ID. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The `string' array returned in the `alangTag' structure is not */
- /* null-terminated. Note that you don't have to deallocate `string' */
- /* by yourself; FreeType takes care of it if you call @FT_Done_Face. */
- /* */
- /* Only `name' table format~1 supports language tags. For format~0 */
- /* tables, this function always returns FT_Err_Invalid_Table. For */
- /* invalid format~1 language ID values, FT_Err_Invalid_Argument is */
- /* returned. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_Sfnt_LangTag( FT_Face face,
- FT_UInt langID,
- FT_SfntLangTag *alangTag );
-
-
- /***************************************************************************
- *
- * @constant:
- * FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY
- *
- * @description:
- * A tag for @FT_Parameter to make @FT_Open_Face ignore typographic
- * family names in the `name' table (introduced in OpenType version
- * 1.4). Use this for backward compatibility with legacy systems that
- * have a four-faces-per-family restriction.
- *
- */
-#define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY \
- FT_MAKE_TAG( 'i', 'g', 'p', 'f' )
-
-
- /* this constant is deprecated */
-#define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY \
- FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY
-
-
- /***************************************************************************
- *
- * @constant:
- * FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY
- *
- * @description:
- * A tag for @FT_Parameter to make @FT_Open_Face ignore typographic
- * subfamily names in the `name' table (introduced in OpenType version
- * 1.4). Use this for backward compatibility with legacy systems that
- * have a four-faces-per-family restriction.
- *
- */
-#define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY \
- FT_MAKE_TAG( 'i', 'g', 'p', 's' )
-
-
- /* this constant is deprecated */
-#define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY \
- FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTSNAMES_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftstroke.h b/include/freetype/ftstroke.h
deleted file mode 100644
index 4a20667c5..000000000
--- a/include/freetype/ftstroke.h
+++ /dev/null
@@ -1,785 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftstroke.h */
-/* */
-/* FreeType path stroker (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTSTROKE_H_
-#define FTSTROKE_H_
-
-#include <ft2build.h>
-#include FT_OUTLINE_H
-#include FT_GLYPH_H
-
-
-FT_BEGIN_HEADER
-
-
- /************************************************************************
- *
- * @section:
- * glyph_stroker
- *
- * @title:
- * Glyph Stroker
- *
- * @abstract:
- * Generating bordered and stroked glyphs.
- *
- * @description:
- * This component generates stroked outlines of a given vectorial
- * glyph. It also allows you to retrieve the `outside' and/or the
- * `inside' borders of the stroke.
- *
- * This can be useful to generate `bordered' glyph, i.e., glyphs
- * displayed with a coloured (and anti-aliased) border around their
- * shape.
- *
- * @order:
- * FT_Stroker
- *
- * FT_Stroker_LineJoin
- * FT_Stroker_LineCap
- * FT_StrokerBorder
- *
- * FT_Outline_GetInsideBorder
- * FT_Outline_GetOutsideBorder
- *
- * FT_Glyph_Stroke
- * FT_Glyph_StrokeBorder
- *
- * FT_Stroker_New
- * FT_Stroker_Set
- * FT_Stroker_Rewind
- * FT_Stroker_ParseOutline
- * FT_Stroker_Done
- *
- * FT_Stroker_BeginSubPath
- * FT_Stroker_EndSubPath
- *
- * FT_Stroker_LineTo
- * FT_Stroker_ConicTo
- * FT_Stroker_CubicTo
- *
- * FT_Stroker_GetBorderCounts
- * FT_Stroker_ExportBorder
- * FT_Stroker_GetCounts
- * FT_Stroker_Export
- *
- */
-
-
- /**************************************************************
- *
- * @type:
- * FT_Stroker
- *
- * @description:
- * Opaque handle to a path stroker object.
- */
- typedef struct FT_StrokerRec_* FT_Stroker;
-
-
- /**************************************************************
- *
- * @enum:
- * FT_Stroker_LineJoin
- *
- * @description:
- * These values determine how two joining lines are rendered
- * in a stroker.
- *
- * @values:
- * FT_STROKER_LINEJOIN_ROUND ::
- * Used to render rounded line joins. Circular arcs are used
- * to join two lines smoothly.
- *
- * FT_STROKER_LINEJOIN_BEVEL ::
- * Used to render beveled line joins. The outer corner of
- * the joined lines is filled by enclosing the triangular
- * region of the corner with a straight line between the
- * outer corners of each stroke.
- *
- * FT_STROKER_LINEJOIN_MITER_FIXED ::
- * Used to render mitered line joins, with fixed bevels if the
- * miter limit is exceeded. The outer edges of the strokes
- * for the two segments are extended until they meet at an
- * angle. If the segments meet at too sharp an angle (such
- * that the miter would extend from the intersection of the
- * segments a distance greater than the product of the miter
- * limit value and the border radius), then a bevel join (see
- * above) is used instead. This prevents long spikes being
- * created. FT_STROKER_LINEJOIN_MITER_FIXED generates a miter
- * line join as used in PostScript and PDF.
- *
- * FT_STROKER_LINEJOIN_MITER_VARIABLE ::
- * FT_STROKER_LINEJOIN_MITER ::
- * Used to render mitered line joins, with variable bevels if
- * the miter limit is exceeded. The intersection of the
- * strokes is clipped at a line perpendicular to the bisector
- * of the angle between the strokes, at the distance from the
- * intersection of the segments equal to the product of the
- * miter limit value and the border radius. This prevents
- * long spikes being created.
- * FT_STROKER_LINEJOIN_MITER_VARIABLE generates a mitered line
- * join as used in XPS. FT_STROKER_LINEJOIN_MITER is an alias
- * for FT_STROKER_LINEJOIN_MITER_VARIABLE, retained for
- * backward compatibility.
- */
- typedef enum FT_Stroker_LineJoin_
- {
- FT_STROKER_LINEJOIN_ROUND = 0,
- FT_STROKER_LINEJOIN_BEVEL = 1,
- FT_STROKER_LINEJOIN_MITER_VARIABLE = 2,
- FT_STROKER_LINEJOIN_MITER = FT_STROKER_LINEJOIN_MITER_VARIABLE,
- FT_STROKER_LINEJOIN_MITER_FIXED = 3
-
- } FT_Stroker_LineJoin;
-
-
- /**************************************************************
- *
- * @enum:
- * FT_Stroker_LineCap
- *
- * @description:
- * These values determine how the end of opened sub-paths are
- * rendered in a stroke.
- *
- * @values:
- * FT_STROKER_LINECAP_BUTT ::
- * The end of lines is rendered as a full stop on the last
- * point itself.
- *
- * FT_STROKER_LINECAP_ROUND ::
- * The end of lines is rendered as a half-circle around the
- * last point.
- *
- * FT_STROKER_LINECAP_SQUARE ::
- * The end of lines is rendered as a square around the
- * last point.
- */
- typedef enum FT_Stroker_LineCap_
- {
- FT_STROKER_LINECAP_BUTT = 0,
- FT_STROKER_LINECAP_ROUND,
- FT_STROKER_LINECAP_SQUARE
-
- } FT_Stroker_LineCap;
-
-
- /**************************************************************
- *
- * @enum:
- * FT_StrokerBorder
- *
- * @description:
- * These values are used to select a given stroke border
- * in @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder.
- *
- * @values:
- * FT_STROKER_BORDER_LEFT ::
- * Select the left border, relative to the drawing direction.
- *
- * FT_STROKER_BORDER_RIGHT ::
- * Select the right border, relative to the drawing direction.
- *
- * @note:
- * Applications are generally interested in the `inside' and `outside'
- * borders. However, there is no direct mapping between these and the
- * `left' and `right' ones, since this really depends on the glyph's
- * drawing orientation, which varies between font formats.
- *
- * You can however use @FT_Outline_GetInsideBorder and
- * @FT_Outline_GetOutsideBorder to get these.
- */
- typedef enum FT_StrokerBorder_
- {
- FT_STROKER_BORDER_LEFT = 0,
- FT_STROKER_BORDER_RIGHT
-
- } FT_StrokerBorder;
-
-
- /**************************************************************
- *
- * @function:
- * FT_Outline_GetInsideBorder
- *
- * @description:
- * Retrieve the @FT_StrokerBorder value corresponding to the
- * `inside' borders of a given outline.
- *
- * @input:
- * outline ::
- * The source outline handle.
- *
- * @return:
- * The border index. @FT_STROKER_BORDER_RIGHT for empty or invalid
- * outlines.
- */
- FT_EXPORT( FT_StrokerBorder )
- FT_Outline_GetInsideBorder( FT_Outline* outline );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Outline_GetOutsideBorder
- *
- * @description:
- * Retrieve the @FT_StrokerBorder value corresponding to the
- * `outside' borders of a given outline.
- *
- * @input:
- * outline ::
- * The source outline handle.
- *
- * @return:
- * The border index. @FT_STROKER_BORDER_LEFT for empty or invalid
- * outlines.
- */
- FT_EXPORT( FT_StrokerBorder )
- FT_Outline_GetOutsideBorder( FT_Outline* outline );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Stroker_New
- *
- * @description:
- * Create a new stroker object.
- *
- * @input:
- * library ::
- * FreeType library handle.
- *
- * @output:
- * astroker ::
- * A new stroker object handle. NULL in case of error.
- *
- * @return:
- * FreeType error code. 0~means success.
- */
- FT_EXPORT( FT_Error )
- FT_Stroker_New( FT_Library library,
- FT_Stroker *astroker );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Stroker_Set
- *
- * @description:
- * Reset a stroker object's attributes.
- *
- * @input:
- * stroker ::
- * The target stroker handle.
- *
- * radius ::
- * The border radius.
- *
- * line_cap ::
- * The line cap style.
- *
- * line_join ::
- * The line join style.
- *
- * miter_limit ::
- * The miter limit for the FT_STROKER_LINEJOIN_MITER_FIXED and
- * FT_STROKER_LINEJOIN_MITER_VARIABLE line join styles,
- * expressed as 16.16 fixed-point value.
- *
- * @note:
- * The radius is expressed in the same units as the outline
- * coordinates.
- *
- * This function calls @FT_Stroker_Rewind automatically.
- */
- FT_EXPORT( void )
- FT_Stroker_Set( FT_Stroker stroker,
- FT_Fixed radius,
- FT_Stroker_LineCap line_cap,
- FT_Stroker_LineJoin line_join,
- FT_Fixed miter_limit );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Stroker_Rewind
- *
- * @description:
- * Reset a stroker object without changing its attributes.
- * You should call this function before beginning a new
- * series of calls to @FT_Stroker_BeginSubPath or
- * @FT_Stroker_EndSubPath.
- *
- * @input:
- * stroker ::
- * The target stroker handle.
- */
- FT_EXPORT( void )
- FT_Stroker_Rewind( FT_Stroker stroker );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Stroker_ParseOutline
- *
- * @description:
- * A convenience function used to parse a whole outline with
- * the stroker. The resulting outline(s) can be retrieved
- * later by functions like @FT_Stroker_GetCounts and @FT_Stroker_Export.
- *
- * @input:
- * stroker ::
- * The target stroker handle.
- *
- * outline ::
- * The source outline.
- *
- * opened ::
- * A boolean. If~1, the outline is treated as an open path instead
- * of a closed one.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * If `opened' is~0 (the default), the outline is treated as a closed
- * path, and the stroker generates two distinct `border' outlines.
- *
- * If `opened' is~1, the outline is processed as an open path, and the
- * stroker generates a single `stroke' outline.
- *
- * This function calls @FT_Stroker_Rewind automatically.
- */
- FT_EXPORT( FT_Error )
- FT_Stroker_ParseOutline( FT_Stroker stroker,
- FT_Outline* outline,
- FT_Bool opened );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Stroker_BeginSubPath
- *
- * @description:
- * Start a new sub-path in the stroker.
- *
- * @input:
- * stroker ::
- * The target stroker handle.
- *
- * to ::
- * A pointer to the start vector.
- *
- * open ::
- * A boolean. If~1, the sub-path is treated as an open one.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This function is useful when you need to stroke a path that is
- * not stored as an @FT_Outline object.
- */
- FT_EXPORT( FT_Error )
- FT_Stroker_BeginSubPath( FT_Stroker stroker,
- FT_Vector* to,
- FT_Bool open );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Stroker_EndSubPath
- *
- * @description:
- * Close the current sub-path in the stroker.
- *
- * @input:
- * stroker ::
- * The target stroker handle.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * You should call this function after @FT_Stroker_BeginSubPath.
- * If the subpath was not `opened', this function `draws' a
- * single line segment to the start position when needed.
- */
- FT_EXPORT( FT_Error )
- FT_Stroker_EndSubPath( FT_Stroker stroker );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Stroker_LineTo
- *
- * @description:
- * `Draw' a single line segment in the stroker's current sub-path,
- * from the last position.
- *
- * @input:
- * stroker ::
- * The target stroker handle.
- *
- * to ::
- * A pointer to the destination point.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * You should call this function between @FT_Stroker_BeginSubPath and
- * @FT_Stroker_EndSubPath.
- */
- FT_EXPORT( FT_Error )
- FT_Stroker_LineTo( FT_Stroker stroker,
- FT_Vector* to );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Stroker_ConicTo
- *
- * @description:
- * `Draw' a single quadratic Bézier in the stroker's current sub-path,
- * from the last position.
- *
- * @input:
- * stroker ::
- * The target stroker handle.
- *
- * control ::
- * A pointer to a Bézier control point.
- *
- * to ::
- * A pointer to the destination point.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * You should call this function between @FT_Stroker_BeginSubPath and
- * @FT_Stroker_EndSubPath.
- */
- FT_EXPORT( FT_Error )
- FT_Stroker_ConicTo( FT_Stroker stroker,
- FT_Vector* control,
- FT_Vector* to );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Stroker_CubicTo
- *
- * @description:
- * `Draw' a single cubic Bézier in the stroker's current sub-path,
- * from the last position.
- *
- * @input:
- * stroker ::
- * The target stroker handle.
- *
- * control1 ::
- * A pointer to the first Bézier control point.
- *
- * control2 ::
- * A pointer to second Bézier control point.
- *
- * to ::
- * A pointer to the destination point.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * You should call this function between @FT_Stroker_BeginSubPath and
- * @FT_Stroker_EndSubPath.
- */
- FT_EXPORT( FT_Error )
- FT_Stroker_CubicTo( FT_Stroker stroker,
- FT_Vector* control1,
- FT_Vector* control2,
- FT_Vector* to );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Stroker_GetBorderCounts
- *
- * @description:
- * Call this function once you have finished parsing your paths
- * with the stroker. It returns the number of points and
- * contours necessary to export one of the `border' or `stroke'
- * outlines generated by the stroker.
- *
- * @input:
- * stroker ::
- * The target stroker handle.
- *
- * border ::
- * The border index.
- *
- * @output:
- * anum_points ::
- * The number of points.
- *
- * anum_contours ::
- * The number of contours.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * When an outline, or a sub-path, is `closed', the stroker generates
- * two independent `border' outlines, named `left' and `right'.
- *
- * When the outline, or a sub-path, is `opened', the stroker merges
- * the `border' outlines with caps. The `left' border receives all
- * points, while the `right' border becomes empty.
- *
- * Use the function @FT_Stroker_GetCounts instead if you want to
- * retrieve the counts associated to both borders.
- */
- FT_EXPORT( FT_Error )
- FT_Stroker_GetBorderCounts( FT_Stroker stroker,
- FT_StrokerBorder border,
- FT_UInt *anum_points,
- FT_UInt *anum_contours );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Stroker_ExportBorder
- *
- * @description:
- * Call this function after @FT_Stroker_GetBorderCounts to
- * export the corresponding border to your own @FT_Outline
- * structure.
- *
- * Note that this function appends the border points and
- * contours to your outline, but does not try to resize its
- * arrays.
- *
- * @input:
- * stroker ::
- * The target stroker handle.
- *
- * border ::
- * The border index.
- *
- * outline ::
- * The target outline handle.
- *
- * @note:
- * Always call this function after @FT_Stroker_GetBorderCounts to
- * get sure that there is enough room in your @FT_Outline object to
- * receive all new data.
- *
- * When an outline, or a sub-path, is `closed', the stroker generates
- * two independent `border' outlines, named `left' and `right'.
- *
- * When the outline, or a sub-path, is `opened', the stroker merges
- * the `border' outlines with caps. The `left' border receives all
- * points, while the `right' border becomes empty.
- *
- * Use the function @FT_Stroker_Export instead if you want to
- * retrieve all borders at once.
- */
- FT_EXPORT( void )
- FT_Stroker_ExportBorder( FT_Stroker stroker,
- FT_StrokerBorder border,
- FT_Outline* outline );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Stroker_GetCounts
- *
- * @description:
- * Call this function once you have finished parsing your paths
- * with the stroker. It returns the number of points and
- * contours necessary to export all points/borders from the stroked
- * outline/path.
- *
- * @input:
- * stroker ::
- * The target stroker handle.
- *
- * @output:
- * anum_points ::
- * The number of points.
- *
- * anum_contours ::
- * The number of contours.
- *
- * @return:
- * FreeType error code. 0~means success.
- */
- FT_EXPORT( FT_Error )
- FT_Stroker_GetCounts( FT_Stroker stroker,
- FT_UInt *anum_points,
- FT_UInt *anum_contours );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Stroker_Export
- *
- * @description:
- * Call this function after @FT_Stroker_GetBorderCounts to
- * export all borders to your own @FT_Outline structure.
- *
- * Note that this function appends the border points and
- * contours to your outline, but does not try to resize its
- * arrays.
- *
- * @input:
- * stroker ::
- * The target stroker handle.
- *
- * outline ::
- * The target outline handle.
- */
- FT_EXPORT( void )
- FT_Stroker_Export( FT_Stroker stroker,
- FT_Outline* outline );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Stroker_Done
- *
- * @description:
- * Destroy a stroker object.
- *
- * @input:
- * stroker ::
- * A stroker handle. Can be NULL.
- */
- FT_EXPORT( void )
- FT_Stroker_Done( FT_Stroker stroker );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Glyph_Stroke
- *
- * @description:
- * Stroke a given outline glyph object with a given stroker.
- *
- * @inout:
- * pglyph ::
- * Source glyph handle on input, new glyph handle on output.
- *
- * @input:
- * stroker ::
- * A stroker handle.
- *
- * destroy ::
- * A Boolean. If~1, the source glyph object is destroyed
- * on success.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * The source glyph is untouched in case of error.
- *
- * Adding stroke may yield a significantly wider and taller glyph
- * depending on how large of a radius was used to stroke the glyph. You
- * may need to manually adjust horizontal and vertical advance amounts
- * to account for this added size.
- */
- FT_EXPORT( FT_Error )
- FT_Glyph_Stroke( FT_Glyph *pglyph,
- FT_Stroker stroker,
- FT_Bool destroy );
-
-
- /**************************************************************
- *
- * @function:
- * FT_Glyph_StrokeBorder
- *
- * @description:
- * Stroke a given outline glyph object with a given stroker, but
- * only return either its inside or outside border.
- *
- * @inout:
- * pglyph ::
- * Source glyph handle on input, new glyph handle on output.
- *
- * @input:
- * stroker ::
- * A stroker handle.
- *
- * inside ::
- * A Boolean. If~1, return the inside border, otherwise
- * the outside border.
- *
- * destroy ::
- * A Boolean. If~1, the source glyph object is destroyed
- * on success.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * The source glyph is untouched in case of error.
- *
- * Adding stroke may yield a significantly wider and taller glyph
- * depending on how large of a radius was used to stroke the glyph. You
- * may need to manually adjust horizontal and vertical advance amounts
- * to account for this added size.
- */
- FT_EXPORT( FT_Error )
- FT_Glyph_StrokeBorder( FT_Glyph *pglyph,
- FT_Stroker stroker,
- FT_Bool inside,
- FT_Bool destroy );
-
- /* */
-
-FT_END_HEADER
-
-#endif /* FTSTROKE_H_ */
-
-
-/* END */
-
-
-/* Local Variables: */
-/* coding: utf-8 */
-/* End: */
diff --git a/include/freetype/ftsynth.h b/include/freetype/ftsynth.h
deleted file mode 100644
index 1863fa238..000000000
--- a/include/freetype/ftsynth.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsynth.h */
-/* */
-/* FreeType synthesizing code for emboldening and slanting */
-/* (specification). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /********* *********/
- /********* WARNING, THIS IS ALPHA CODE! THIS API *********/
- /********* IS DUE TO CHANGE UNTIL STRICTLY NOTIFIED BY THE *********/
- /********* FREETYPE DEVELOPMENT TEAM *********/
- /********* *********/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* Main reason for not lifting the functions in this module to a */
- /* `standard' API is that the used parameters for emboldening and */
- /* slanting are not configurable. Consider the functions as a */
- /* code resource that should be copied into the application and */
- /* adapted to the particular needs. */
-
-
-#ifndef FTSYNTH_H_
-#define FTSYNTH_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
- /* Embolden a glyph by a `reasonable' value (which is highly a matter of */
- /* taste). This function is actually a convenience function, providing */
- /* a wrapper for @FT_Outline_Embolden and @FT_Bitmap_Embolden. */
- /* */
- /* For emboldened outlines the height, width, and advance metrics are */
- /* increased by the strength of the emboldening -- this even affects */
- /* mono-width fonts! */
- /* */
- /* You can also call @FT_Outline_Get_CBox to get precise values. */
- FT_EXPORT( void )
- FT_GlyphSlot_Embolden( FT_GlyphSlot slot );
-
- /* Slant an outline glyph to the right by about 12 degrees. */
- FT_EXPORT( void )
- FT_GlyphSlot_Oblique( FT_GlyphSlot slot );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTSYNTH_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftsystem.h b/include/freetype/ftsystem.h
deleted file mode 100644
index 1aa4762ad..000000000
--- a/include/freetype/ftsystem.h
+++ /dev/null
@@ -1,355 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsystem.h */
-/* */
-/* FreeType low-level system interface definition (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTSYSTEM_H_
-#define FTSYSTEM_H_
-
-
-#include <ft2build.h>
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* system_interface */
- /* */
- /* <Title> */
- /* System Interface */
- /* */
- /* <Abstract> */
- /* How FreeType manages memory and i/o. */
- /* */
- /* <Description> */
- /* This section contains various definitions related to memory */
- /* management and i/o access. You need to understand this */
- /* information if you want to use a custom memory manager or you own */
- /* i/o streams. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* M E M O R Y M A N A G E M E N T */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************
- *
- * @type:
- * FT_Memory
- *
- * @description:
- * A handle to a given memory manager object, defined with an
- * @FT_MemoryRec structure.
- *
- */
- typedef struct FT_MemoryRec_* FT_Memory;
-
-
- /*************************************************************************
- *
- * @functype:
- * FT_Alloc_Func
- *
- * @description:
- * A function used to allocate `size' bytes from `memory'.
- *
- * @input:
- * memory ::
- * A handle to the source memory manager.
- *
- * size ::
- * The size in bytes to allocate.
- *
- * @return:
- * Address of new memory block. 0~in case of failure.
- *
- */
- typedef void*
- (*FT_Alloc_Func)( FT_Memory memory,
- long size );
-
-
- /*************************************************************************
- *
- * @functype:
- * FT_Free_Func
- *
- * @description:
- * A function used to release a given block of memory.
- *
- * @input:
- * memory ::
- * A handle to the source memory manager.
- *
- * block ::
- * The address of the target memory block.
- *
- */
- typedef void
- (*FT_Free_Func)( FT_Memory memory,
- void* block );
-
-
- /*************************************************************************
- *
- * @functype:
- * FT_Realloc_Func
- *
- * @description:
- * A function used to re-allocate a given block of memory.
- *
- * @input:
- * memory ::
- * A handle to the source memory manager.
- *
- * cur_size ::
- * The block's current size in bytes.
- *
- * new_size ::
- * The block's requested new size.
- *
- * block ::
- * The block's current address.
- *
- * @return:
- * New block address. 0~in case of memory shortage.
- *
- * @note:
- * In case of error, the old block must still be available.
- *
- */
- typedef void*
- (*FT_Realloc_Func)( FT_Memory memory,
- long cur_size,
- long new_size,
- void* block );
-
-
- /*************************************************************************
- *
- * @struct:
- * FT_MemoryRec
- *
- * @description:
- * A structure used to describe a given memory manager to FreeType~2.
- *
- * @fields:
- * user ::
- * A generic typeless pointer for user data.
- *
- * alloc ::
- * A pointer type to an allocation function.
- *
- * free ::
- * A pointer type to an memory freeing function.
- *
- * realloc ::
- * A pointer type to a reallocation function.
- *
- */
- struct FT_MemoryRec_
- {
- void* user;
- FT_Alloc_Func alloc;
- FT_Free_Func free;
- FT_Realloc_Func realloc;
- };
-
-
- /*************************************************************************/
- /* */
- /* I / O M A N A G E M E N T */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************
- *
- * @type:
- * FT_Stream
- *
- * @description:
- * A handle to an input stream.
- *
- * @also:
- * See @FT_StreamRec for the publicly accessible fields of a given
- * stream object.
- *
- */
- typedef struct FT_StreamRec_* FT_Stream;
-
-
- /*************************************************************************
- *
- * @struct:
- * FT_StreamDesc
- *
- * @description:
- * A union type used to store either a long or a pointer. This is used
- * to store a file descriptor or a `FILE*' in an input stream.
- *
- */
- typedef union FT_StreamDesc_
- {
- long value;
- void* pointer;
-
- } FT_StreamDesc;
-
-
- /*************************************************************************
- *
- * @functype:
- * FT_Stream_IoFunc
- *
- * @description:
- * A function used to seek and read data from a given input stream.
- *
- * @input:
- * stream ::
- * A handle to the source stream.
- *
- * offset ::
- * The offset of read in stream (always from start).
- *
- * buffer ::
- * The address of the read buffer.
- *
- * count ::
- * The number of bytes to read from the stream.
- *
- * @return:
- * The number of bytes effectively read by the stream.
- *
- * @note:
- * This function might be called to perform a seek or skip operation
- * with a `count' of~0. A non-zero return value then indicates an
- * error.
- *
- */
- typedef unsigned long
- (*FT_Stream_IoFunc)( FT_Stream stream,
- unsigned long offset,
- unsigned char* buffer,
- unsigned long count );
-
-
- /*************************************************************************
- *
- * @functype:
- * FT_Stream_CloseFunc
- *
- * @description:
- * A function used to close a given input stream.
- *
- * @input:
- * stream ::
- * A handle to the target stream.
- *
- */
- typedef void
- (*FT_Stream_CloseFunc)( FT_Stream stream );
-
-
- /*************************************************************************
- *
- * @struct:
- * FT_StreamRec
- *
- * @description:
- * A structure used to describe an input stream.
- *
- * @input:
- * base ::
- * For memory-based streams, this is the address of the first stream
- * byte in memory. This field should always be set to NULL for
- * disk-based streams.
- *
- * size ::
- * The stream size in bytes.
- *
- * In case of compressed streams where the size is unknown before
- * actually doing the decompression, the value is set to 0x7FFFFFFF.
- * (Note that this size value can occur for normal streams also; it is
- * thus just a hint.)
- *
- * pos ::
- * The current position within the stream.
- *
- * descriptor ::
- * This field is a union that can hold an integer or a pointer. It is
- * used by stream implementations to store file descriptors or `FILE*'
- * pointers.
- *
- * pathname ::
- * This field is completely ignored by FreeType. However, it is often
- * useful during debugging to use it to store the stream's filename
- * (where available).
- *
- * read ::
- * The stream's input function.
- *
- * close ::
- * The stream's close function.
- *
- * memory ::
- * The memory manager to use to preload frames. This is set
- * internally by FreeType and shouldn't be touched by stream
- * implementations.
- *
- * cursor ::
- * This field is set and used internally by FreeType when parsing
- * frames.
- *
- * limit ::
- * This field is set and used internally by FreeType when parsing
- * frames.
- *
- */
- typedef struct FT_StreamRec_
- {
- unsigned char* base;
- unsigned long size;
- unsigned long pos;
-
- FT_StreamDesc descriptor;
- FT_StreamDesc pathname;
- FT_Stream_IoFunc read;
- FT_Stream_CloseFunc close;
-
- FT_Memory memory;
- unsigned char* cursor;
- unsigned char* limit;
-
- } FT_StreamRec;
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTSYSTEM_H_ */
-
-
-/* END */
diff --git a/include/freetype/fttrigon.h b/include/freetype/fttrigon.h
deleted file mode 100644
index 89f035067..000000000
--- a/include/freetype/fttrigon.h
+++ /dev/null
@@ -1,350 +0,0 @@
-/***************************************************************************/
-/* */
-/* fttrigon.h */
-/* */
-/* FreeType trigonometric functions (specification). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTTRIGON_H_
-#define FTTRIGON_H_
-
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* computations */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************
- *
- * @type:
- * FT_Angle
- *
- * @description:
- * This type is used to model angle values in FreeType. Note that the
- * angle is a 16.16 fixed-point value expressed in degrees.
- *
- */
- typedef FT_Fixed FT_Angle;
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_ANGLE_PI
- *
- * @description:
- * The angle pi expressed in @FT_Angle units.
- *
- */
-#define FT_ANGLE_PI ( 180L << 16 )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_ANGLE_2PI
- *
- * @description:
- * The angle 2*pi expressed in @FT_Angle units.
- *
- */
-#define FT_ANGLE_2PI ( FT_ANGLE_PI * 2 )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_ANGLE_PI2
- *
- * @description:
- * The angle pi/2 expressed in @FT_Angle units.
- *
- */
-#define FT_ANGLE_PI2 ( FT_ANGLE_PI / 2 )
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_ANGLE_PI4
- *
- * @description:
- * The angle pi/4 expressed in @FT_Angle units.
- *
- */
-#define FT_ANGLE_PI4 ( FT_ANGLE_PI / 4 )
-
-
- /*************************************************************************
- *
- * @function:
- * FT_Sin
- *
- * @description:
- * Return the sinus of a given angle in fixed-point format.
- *
- * @input:
- * angle ::
- * The input angle.
- *
- * @return:
- * The sinus value.
- *
- * @note:
- * If you need both the sinus and cosinus for a given angle, use the
- * function @FT_Vector_Unit.
- *
- */
- FT_EXPORT( FT_Fixed )
- FT_Sin( FT_Angle angle );
-
-
- /*************************************************************************
- *
- * @function:
- * FT_Cos
- *
- * @description:
- * Return the cosinus of a given angle in fixed-point format.
- *
- * @input:
- * angle ::
- * The input angle.
- *
- * @return:
- * The cosinus value.
- *
- * @note:
- * If you need both the sinus and cosinus for a given angle, use the
- * function @FT_Vector_Unit.
- *
- */
- FT_EXPORT( FT_Fixed )
- FT_Cos( FT_Angle angle );
-
-
- /*************************************************************************
- *
- * @function:
- * FT_Tan
- *
- * @description:
- * Return the tangent of a given angle in fixed-point format.
- *
- * @input:
- * angle ::
- * The input angle.
- *
- * @return:
- * The tangent value.
- *
- */
- FT_EXPORT( FT_Fixed )
- FT_Tan( FT_Angle angle );
-
-
- /*************************************************************************
- *
- * @function:
- * FT_Atan2
- *
- * @description:
- * Return the arc-tangent corresponding to a given vector (x,y) in
- * the 2d plane.
- *
- * @input:
- * x ::
- * The horizontal vector coordinate.
- *
- * y ::
- * The vertical vector coordinate.
- *
- * @return:
- * The arc-tangent value (i.e. angle).
- *
- */
- FT_EXPORT( FT_Angle )
- FT_Atan2( FT_Fixed x,
- FT_Fixed y );
-
-
- /*************************************************************************
- *
- * @function:
- * FT_Angle_Diff
- *
- * @description:
- * Return the difference between two angles. The result is always
- * constrained to the ]-PI..PI] interval.
- *
- * @input:
- * angle1 ::
- * First angle.
- *
- * angle2 ::
- * Second angle.
- *
- * @return:
- * Constrained value of `value2-value1'.
- *
- */
- FT_EXPORT( FT_Angle )
- FT_Angle_Diff( FT_Angle angle1,
- FT_Angle angle2 );
-
-
- /*************************************************************************
- *
- * @function:
- * FT_Vector_Unit
- *
- * @description:
- * Return the unit vector corresponding to a given angle. After the
- * call, the value of `vec.x' will be `cos(angle)', and the value of
- * `vec.y' will be `sin(angle)'.
- *
- * This function is useful to retrieve both the sinus and cosinus of a
- * given angle quickly.
- *
- * @output:
- * vec ::
- * The address of target vector.
- *
- * @input:
- * angle ::
- * The input angle.
- *
- */
- FT_EXPORT( void )
- FT_Vector_Unit( FT_Vector* vec,
- FT_Angle angle );
-
-
- /*************************************************************************
- *
- * @function:
- * FT_Vector_Rotate
- *
- * @description:
- * Rotate a vector by a given angle.
- *
- * @inout:
- * vec ::
- * The address of target vector.
- *
- * @input:
- * angle ::
- * The input angle.
- *
- */
- FT_EXPORT( void )
- FT_Vector_Rotate( FT_Vector* vec,
- FT_Angle angle );
-
-
- /*************************************************************************
- *
- * @function:
- * FT_Vector_Length
- *
- * @description:
- * Return the length of a given vector.
- *
- * @input:
- * vec ::
- * The address of target vector.
- *
- * @return:
- * The vector length, expressed in the same units that the original
- * vector coordinates.
- *
- */
- FT_EXPORT( FT_Fixed )
- FT_Vector_Length( FT_Vector* vec );
-
-
- /*************************************************************************
- *
- * @function:
- * FT_Vector_Polarize
- *
- * @description:
- * Compute both the length and angle of a given vector.
- *
- * @input:
- * vec ::
- * The address of source vector.
- *
- * @output:
- * length ::
- * The vector length.
- *
- * angle ::
- * The vector angle.
- *
- */
- FT_EXPORT( void )
- FT_Vector_Polarize( FT_Vector* vec,
- FT_Fixed *length,
- FT_Angle *angle );
-
-
- /*************************************************************************
- *
- * @function:
- * FT_Vector_From_Polar
- *
- * @description:
- * Compute vector coordinates from a length and angle.
- *
- * @output:
- * vec ::
- * The address of source vector.
- *
- * @input:
- * length ::
- * The vector length.
- *
- * angle ::
- * The vector angle.
- *
- */
- FT_EXPORT( void )
- FT_Vector_From_Polar( FT_Vector* vec,
- FT_Fixed length,
- FT_Angle angle );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTTRIGON_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftttdrv.h b/include/freetype/ftttdrv.h
deleted file mode 100644
index 26bc5e966..000000000
--- a/include/freetype/ftttdrv.h
+++ /dev/null
@@ -1,328 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftttdrv.h */
-/* */
-/* FreeType API for controlling the TrueType driver */
-/* (specification only). */
-/* */
-/* Copyright 2013-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTTTDRV_H_
-#define FTTTDRV_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /**************************************************************************
- *
- * @section:
- * tt_driver
- *
- * @title:
- * The TrueType driver
- *
- * @abstract:
- * Controlling the TrueType driver module.
- *
- * @description:
- * While FreeType's TrueType driver doesn't expose API functions by
- * itself, it is possible to control its behaviour with @FT_Property_Set
- * and @FT_Property_Get. The following lists the available properties
- * together with the necessary macros and structures.
- *
- * The TrueType driver's module name is `truetype'.
- *
- * We start with a list of definitions, kindly provided by Greg
- * Hitchcock.
- *
- * _Bi-Level_ _Rendering_
- *
- * Monochromatic rendering, exclusively used in the early days of
- * TrueType by both Apple and Microsoft. Microsoft's GDI interface
- * supported hinting of the right-side bearing point, such that the
- * advance width could be non-linear. Most often this was done to
- * achieve some level of glyph symmetry. To enable reasonable
- * performance (e.g., not having to run hinting on all glyphs just to
- * get the widths) there was a bit in the head table indicating if the
- * side bearing was hinted, and additional tables, `hdmx' and `LTSH', to
- * cache hinting widths across multiple sizes and device aspect ratios.
- *
- * _Font_ _Smoothing_
- *
- * Microsoft's GDI implementation of anti-aliasing. Not traditional
- * anti-aliasing as the outlines were hinted before the sampling. The
- * widths matched the bi-level rendering.
- *
- * _ClearType_ _Rendering_
- *
- * Technique that uses physical subpixels to improve rendering on LCD
- * (and other) displays. Because of the higher resolution, many methods
- * of improving symmetry in glyphs through hinting the right-side
- * bearing were no longer necessary. This lead to what GDI calls
- * `natural widths' ClearType, see
- * http://www.beatstamm.com/typography/RTRCh4.htm#Sec21. Since hinting
- * has extra resolution, most non-linearity went away, but it is still
- * possible for hints to change the advance widths in this mode.
- *
- * _ClearType_ _Compatible_ _Widths_
- *
- * One of the earliest challenges with ClearType was allowing the
- * implementation in GDI to be selected without requiring all UI and
- * documents to reflow. To address this, a compatible method of
- * rendering ClearType was added where the font hints are executed once
- * to determine the width in bi-level rendering, and then re-run in
- * ClearType, with the difference in widths being absorbed in the font
- * hints for ClearType (mostly in the white space of hints); see
- * http://www.beatstamm.com/typography/RTRCh4.htm#Sec20. Somewhat by
- * definition, compatible width ClearType allows for non-linear widths,
- * but only when the bi-level version has non-linear widths.
- *
- * _ClearType_ _Subpixel_ _Positioning_
- *
- * One of the nice benefits of ClearType is the ability to more crisply
- * display fractional widths; unfortunately, the GDI model of integer
- * bitmaps did not support this. However, the WPF and Direct Write
- * frameworks do support fractional widths. DWrite calls this `natural
- * mode', not to be confused with GDI's `natural widths'. Subpixel
- * positioning, in the current implementation of Direct Write,
- * unfortunately does not support hinted advance widths, see
- * http://www.beatstamm.com/typography/RTRCh4.htm#Sec22. Note that the
- * TrueType interpreter fully allows the advance width to be adjusted in
- * this mode, just the DWrite client will ignore those changes.
- *
- * _ClearType_ _Backward_ _Compatibility_
- *
- * This is a set of exceptions made in the TrueType interpreter to
- * minimize hinting techniques that were problematic with the extra
- * resolution of ClearType; see
- * http://www.beatstamm.com/typography/RTRCh4.htm#Sec1 and
- * http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx.
- * This technique is not to be confused with ClearType compatible
- * widths. ClearType backward compatibility has no direct impact on
- * changing advance widths, but there might be an indirect impact on
- * disabling some deltas. This could be worked around in backward
- * compatibility mode.
- *
- * _Native_ _ClearType_ _Mode_
- *
- * (Not to be confused with `natural widths'.) This mode removes all
- * the exceptions in the TrueType interpreter when running with
- * ClearType. Any issues on widths would still apply, though.
- *
- */
-
-
- /**************************************************************************
- *
- * @property:
- * interpreter-version
- *
- * @description:
- * Currently, three versions are available, two representing the
- * bytecode interpreter with subpixel hinting support (old `Infinality'
- * code and new stripped-down and higher performance `minimal' code) and
- * one without, respectively. The default is subpixel support if
- * TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel support
- * otherwise (since it isn't available then).
- *
- * If subpixel hinting is on, many TrueType bytecode instructions behave
- * differently compared to B/W or grayscale rendering (except if `native
- * ClearType' is selected by the font). Microsoft's main idea is to
- * render at a much increased horizontal resolution, then sampling down
- * the created output to subpixel precision. However, many older fonts
- * are not suited to this and must be specially taken care of by
- * applying (hardcoded) tweaks in Microsoft's interpreter.
- *
- * Details on subpixel hinting and some of the necessary tweaks can be
- * found in Greg Hitchcock's whitepaper at
- * `http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'.
- * Note that FreeType currently doesn't really `subpixel hint' (6x1, 6x2,
- * or 6x5 supersampling) like discussed in the paper. Depending on the
- * chosen interpreter, it simply ignores instructions on vertical stems
- * to arrive at very similar results.
- *
- * The following example code demonstrates how to deactivate subpixel
- * hinting (omitting the error handling).
- *
- * {
- * FT_Library library;
- * FT_Face face;
- * FT_UInt interpreter_version = TT_INTERPRETER_VERSION_35;
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "truetype",
- * "interpreter-version",
- * &interpreter_version );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * This property can be set via the `FREETYPE_PROPERTIES' environment
- * variable (using values `35', `38', or `40').
- */
-
-
- /**************************************************************************
- *
- * @enum:
- * TT_INTERPRETER_VERSION_XXX
- *
- * @description:
- * A list of constants used for the @interpreter-version property to
- * select the hinting engine for Truetype fonts.
- *
- * The numeric value in the constant names represents the version
- * number as returned by the `GETINFO' bytecode instruction.
- *
- * @values:
- * TT_INTERPRETER_VERSION_35 ::
- * Version~35 corresponds to MS rasterizer v.1.7 as used e.g. in
- * Windows~98; only grayscale and B/W rasterizing is supported.
- *
- * TT_INTERPRETER_VERSION_38 ::
- * Version~38 corresponds to MS rasterizer v.1.9; it is roughly
- * equivalent to the hinting provided by DirectWrite ClearType (as can
- * be found, for example, in the Internet Explorer~9 running on
- * Windows~7). It is used in FreeType to select the `Infinality'
- * subpixel hinting code. The code may be removed in a future
- * version.
- *
- * TT_INTERPRETER_VERSION_40 ::
- * Version~40 corresponds to MS rasterizer v.2.1; it is roughly
- * equivalent to the hinting provided by DirectWrite ClearType (as can
- * be found, for example, in Microsoft's Edge Browser on Windows~10).
- * It is used in FreeType to select the `minimal' subpixel hinting
- * code, a stripped-down and higher performance version of the
- * `Infinality' code.
- *
- * @note:
- * This property controls the behaviour of the bytecode interpreter
- * and thus how outlines get hinted. It does *not* control how glyph
- * get rasterized! In particular, it does not control subpixel color
- * filtering.
- *
- * If FreeType has not been compiled with the configuration option
- * TT_CONFIG_OPTION_SUBPIXEL_HINTING, selecting version~38 or~40 causes
- * an `FT_Err_Unimplemented_Feature' error.
- *
- * Depending on the graphics framework, Microsoft uses different
- * bytecode and rendering engines. As a consequence, the version
- * numbers returned by a call to the `GETINFO' bytecode instruction are
- * more convoluted than desired.
- *
- * Here are two tables that try to shed some light on the possible
- * values for the MS rasterizer engine, together with the additional
- * features introduced by it.
- *
- * {
- * GETINFO framework version feature
- * -------------------------------------------------------------------
- * 3 GDI (Win 3.1), v1.0 16-bit, first version
- * TrueImage
- * 33 GDI (Win NT 3.1), v1.5 32-bit
- * HP Laserjet
- * 34 GDI (Win 95) v1.6 font smoothing,
- * new SCANTYPE opcode
- * 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET
- * bits in composite glyphs
- * 36 MGDI (Win CE 2) v1.6+ classic ClearType
- * 37 GDI (XP and later), v1.8 ClearType
- * GDI+ old (before Vista)
- * 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType,
- * WPF Y-direction ClearType,
- * additional error checking
- * 39 DWrite (before Win 8) v2.0 subpixel ClearType flags
- * in GETINFO opcode,
- * bug fixes
- * 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag
- * DWrite (Win 8) in GETINFO opcode,
- * Gray ClearType
- * }
- *
- * The `version' field gives a rough orientation only, since some
- * applications provided certain features much earlier (as an example,
- * Microsoft Reader used subpixel and Y-direction ClearType already in
- * Windows 2000). Similarly, updates to a given framework might include
- * improved hinting support.
- *
- * {
- * version sampling rendering comment
- * x y x y
- * --------------------------------------------------------------
- * v1.0 normal normal B/W B/W bi-level
- * v1.6 high high gray gray grayscale
- * v1.8 high normal color-filter B/W (GDI) ClearType
- * v1.9 high high color-filter gray Color ClearType
- * v2.1 high normal gray B/W Gray ClearType
- * v2.1 high high gray gray Gray ClearType
- * }
- *
- * Color and Gray ClearType are the two available variants of
- * `Y-direction ClearType', meaning grayscale rasterization along the
- * Y-direction; the name used in the TrueType specification for this
- * feature is `symmetric smoothing'. `Classic ClearType' is the
- * original algorithm used before introducing a modified version in
- * Win~XP. Another name for v1.6's grayscale rendering is `font
- * smoothing', and `Color ClearType' is sometimes also called `DWrite
- * ClearType'. To differentiate between today's Color ClearType and the
- * earlier ClearType variant with B/W rendering along the vertical axis,
- * the latter is sometimes called `GDI ClearType'.
- *
- * `Normal' and `high' sampling describe the (virtual) resolution to
- * access the rasterized outline after the hinting process. `Normal'
- * means 1 sample per grid line (i.e., B/W). In the current Microsoft
- * implementation, `high' means an extra virtual resolution of 16x16 (or
- * 16x1) grid lines per pixel for bytecode instructions like `MIRP'.
- * After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid
- * lines for color filtering if Color ClearType is activated.
- *
- * Note that `Gray ClearType' is essentially the same as v1.6's
- * grayscale rendering. However, the GETINFO instruction handles it
- * differently: v1.6 returns bit~12 (hinting for grayscale), while v2.1
- * returns bits~13 (hinting for ClearType), 18 (symmetrical smoothing),
- * and~19 (Gray ClearType). Also, this mode respects bits 2 and~3 for
- * the version~1 gasp table exclusively (like Color ClearType), while
- * v1.6 only respects the values of version~0 (bits 0 and~1).
- *
- * Keep in mind that the features of the above interpreter versions
- * might not map exactly to FreeType features or behavior because it is
- * a fundamentally different library with different internals.
- *
- */
-#define TT_INTERPRETER_VERSION_35 35
-#define TT_INTERPRETER_VERSION_38 38
-#define TT_INTERPRETER_VERSION_40 40
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* FTTTDRV_H_ */
-
-
-/* END */
diff --git a/include/freetype/fttypes.h b/include/freetype/fttypes.h
deleted file mode 100644
index eab8adaad..000000000
--- a/include/freetype/fttypes.h
+++ /dev/null
@@ -1,602 +0,0 @@
-/***************************************************************************/
-/* */
-/* fttypes.h */
-/* */
-/* FreeType simple types definitions (specification only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTTYPES_H_
-#define FTTYPES_H_
-
-
-#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H
-#include FT_SYSTEM_H
-#include FT_IMAGE_H
-
-#include <stddef.h>
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* basic_types */
- /* */
- /* <Title> */
- /* Basic Data Types */
- /* */
- /* <Abstract> */
- /* The basic data types defined by the library. */
- /* */
- /* <Description> */
- /* This section contains the basic data types defined by FreeType~2, */
- /* ranging from simple scalar types to bitmap descriptors. More */
- /* font-specific structures are defined in a different section. */
- /* */
- /* <Order> */
- /* FT_Byte */
- /* FT_Bytes */
- /* FT_Char */
- /* FT_Int */
- /* FT_UInt */
- /* FT_Int16 */
- /* FT_UInt16 */
- /* FT_Int32 */
- /* FT_UInt32 */
- /* FT_Int64 */
- /* FT_UInt64 */
- /* FT_Short */
- /* FT_UShort */
- /* FT_Long */
- /* FT_ULong */
- /* FT_Bool */
- /* FT_Offset */
- /* FT_PtrDist */
- /* FT_String */
- /* FT_Tag */
- /* FT_Error */
- /* FT_Fixed */
- /* FT_Pointer */
- /* FT_Pos */
- /* FT_Vector */
- /* FT_BBox */
- /* FT_Matrix */
- /* FT_FWord */
- /* FT_UFWord */
- /* FT_F2Dot14 */
- /* FT_UnitVector */
- /* FT_F26Dot6 */
- /* FT_Data */
- /* */
- /* FT_MAKE_TAG */
- /* */
- /* FT_Generic */
- /* FT_Generic_Finalizer */
- /* */
- /* FT_Bitmap */
- /* FT_Pixel_Mode */
- /* FT_Palette_Mode */
- /* FT_Glyph_Format */
- /* FT_IMAGE_TAG */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Bool */
- /* */
- /* <Description> */
- /* A typedef of unsigned char, used for simple booleans. As usual, */
- /* values 1 and~0 represent true and false, respectively. */
- /* */
- typedef unsigned char FT_Bool;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_FWord */
- /* */
- /* <Description> */
- /* A signed 16-bit integer used to store a distance in original font */
- /* units. */
- /* */
- typedef signed short FT_FWord; /* distance in FUnits */
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UFWord */
- /* */
- /* <Description> */
- /* An unsigned 16-bit integer used to store a distance in original */
- /* font units. */
- /* */
- typedef unsigned short FT_UFWord; /* unsigned distance */
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Char */
- /* */
- /* <Description> */
- /* A simple typedef for the _signed_ char type. */
- /* */
- typedef signed char FT_Char;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Byte */
- /* */
- /* <Description> */
- /* A simple typedef for the _unsigned_ char type. */
- /* */
- typedef unsigned char FT_Byte;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Bytes */
- /* */
- /* <Description> */
- /* A typedef for constant memory areas. */
- /* */
- typedef const FT_Byte* FT_Bytes;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Tag */
- /* */
- /* <Description> */
- /* A typedef for 32-bit tags (as used in the SFNT format). */
- /* */
- typedef FT_UInt32 FT_Tag;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_String */
- /* */
- /* <Description> */
- /* A simple typedef for the char type, usually used for strings. */
- /* */
- typedef char FT_String;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Short */
- /* */
- /* <Description> */
- /* A typedef for signed short. */
- /* */
- typedef signed short FT_Short;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UShort */
- /* */
- /* <Description> */
- /* A typedef for unsigned short. */
- /* */
- typedef unsigned short FT_UShort;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int */
- /* */
- /* <Description> */
- /* A typedef for the int type. */
- /* */
- typedef signed int FT_Int;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt */
- /* */
- /* <Description> */
- /* A typedef for the unsigned int type. */
- /* */
- typedef unsigned int FT_UInt;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Long */
- /* */
- /* <Description> */
- /* A typedef for signed long. */
- /* */
- typedef signed long FT_Long;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_ULong */
- /* */
- /* <Description> */
- /* A typedef for unsigned long. */
- /* */
- typedef unsigned long FT_ULong;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_F2Dot14 */
- /* */
- /* <Description> */
- /* A signed 2.14 fixed-point type used for unit vectors. */
- /* */
- typedef signed short FT_F2Dot14;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_F26Dot6 */
- /* */
- /* <Description> */
- /* A signed 26.6 fixed-point type used for vectorial pixel */
- /* coordinates. */
- /* */
- typedef signed long FT_F26Dot6;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Fixed */
- /* */
- /* <Description> */
- /* This type is used to store 16.16 fixed-point values, like scaling */
- /* values or matrix coefficients. */
- /* */
- typedef signed long FT_Fixed;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Error */
- /* */
- /* <Description> */
- /* The FreeType error code type. A value of~0 is always interpreted */
- /* as a successful operation. */
- /* */
- typedef int FT_Error;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Pointer */
- /* */
- /* <Description> */
- /* A simple typedef for a typeless pointer. */
- /* */
- typedef void* FT_Pointer;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Offset */
- /* */
- /* <Description> */
- /* This is equivalent to the ANSI~C `size_t' type, i.e., the largest */
- /* _unsigned_ integer type used to express a file size or position, */
- /* or a memory block size. */
- /* */
- typedef size_t FT_Offset;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_PtrDist */
- /* */
- /* <Description> */
- /* This is equivalent to the ANSI~C `ptrdiff_t' type, i.e., the */
- /* largest _signed_ integer type used to express the distance */
- /* between two pointers. */
- /* */
- typedef ft_ptrdiff_t FT_PtrDist;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_UnitVector */
- /* */
- /* <Description> */
- /* A simple structure used to store a 2D vector unit vector. Uses */
- /* FT_F2Dot14 types. */
- /* */
- /* <Fields> */
- /* x :: Horizontal coordinate. */
- /* */
- /* y :: Vertical coordinate. */
- /* */
- typedef struct FT_UnitVector_
- {
- FT_F2Dot14 x;
- FT_F2Dot14 y;
-
- } FT_UnitVector;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Matrix */
- /* */
- /* <Description> */
- /* A simple structure used to store a 2x2 matrix. Coefficients are */
- /* in 16.16 fixed-point format. The computation performed is: */
- /* */
- /* { */
- /* x' = x*xx + y*xy */
- /* y' = x*yx + y*yy */
- /* } */
- /* */
- /* <Fields> */
- /* xx :: Matrix coefficient. */
- /* */
- /* xy :: Matrix coefficient. */
- /* */
- /* yx :: Matrix coefficient. */
- /* */
- /* yy :: Matrix coefficient. */
- /* */
- typedef struct FT_Matrix_
- {
- FT_Fixed xx, xy;
- FT_Fixed yx, yy;
-
- } FT_Matrix;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Data */
- /* */
- /* <Description> */
- /* Read-only binary data represented as a pointer and a length. */
- /* */
- /* <Fields> */
- /* pointer :: The data. */
- /* */
- /* length :: The length of the data in bytes. */
- /* */
- typedef struct FT_Data_
- {
- const FT_Byte* pointer;
- FT_Int length;
-
- } FT_Data;
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Generic_Finalizer */
- /* */
- /* <Description> */
- /* Describe a function used to destroy the `client' data of any */
- /* FreeType object. See the description of the @FT_Generic type for */
- /* details of usage. */
- /* */
- /* <Input> */
- /* The address of the FreeType object that is under finalization. */
- /* Its client data is accessed through its `generic' field. */
- /* */
- typedef void (*FT_Generic_Finalizer)(void* object);
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Generic */
- /* */
- /* <Description> */
- /* Client applications often need to associate their own data to a */
- /* variety of FreeType core objects. For example, a text layout API */
- /* might want to associate a glyph cache to a given size object. */
- /* */
- /* Some FreeType object contains a `generic' field, of type */
- /* FT_Generic, which usage is left to client applications and font */
- /* servers. */
- /* */
- /* It can be used to store a pointer to client-specific data, as well */
- /* as the address of a `finalizer' function, which will be called by */
- /* FreeType when the object is destroyed (for example, the previous */
- /* client example would put the address of the glyph cache destructor */
- /* in the `finalizer' field). */
- /* */
- /* <Fields> */
- /* data :: A typeless pointer to any client-specified data. This */
- /* field is completely ignored by the FreeType library. */
- /* */
- /* finalizer :: A pointer to a `generic finalizer' function, which */
- /* will be called when the object is destroyed. If this */
- /* field is set to NULL, no code will be called. */
- /* */
- typedef struct FT_Generic_
- {
- void* data;
- FT_Generic_Finalizer finalizer;
-
- } FT_Generic;
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_MAKE_TAG */
- /* */
- /* <Description> */
- /* This macro converts four-letter tags that are used to label */
- /* TrueType tables into an unsigned long, to be used within FreeType. */
- /* */
- /* <Note> */
- /* The produced values *must* be 32-bit integers. Don't redefine */
- /* this macro. */
- /* */
-#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
- (FT_Tag) \
- ( ( (FT_ULong)_x1 << 24 ) | \
- ( (FT_ULong)_x2 << 16 ) | \
- ( (FT_ULong)_x3 << 8 ) | \
- (FT_ULong)_x4 )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /* */
- /* L I S T M A N A G E M E N T */
- /* */
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* list_processing */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_ListNode */
- /* */
- /* <Description> */
- /* Many elements and objects in FreeType are listed through an */
- /* @FT_List record (see @FT_ListRec). As its name suggests, an */
- /* FT_ListNode is a handle to a single list element. */
- /* */
- typedef struct FT_ListNodeRec_* FT_ListNode;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_List */
- /* */
- /* <Description> */
- /* A handle to a list record (see @FT_ListRec). */
- /* */
- typedef struct FT_ListRec_* FT_List;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_ListNodeRec */
- /* */
- /* <Description> */
- /* A structure used to hold a single list element. */
- /* */
- /* <Fields> */
- /* prev :: The previous element in the list. NULL if first. */
- /* */
- /* next :: The next element in the list. NULL if last. */
- /* */
- /* data :: A typeless pointer to the listed object. */
- /* */
- typedef struct FT_ListNodeRec_
- {
- FT_ListNode prev;
- FT_ListNode next;
- void* data;
-
- } FT_ListNodeRec;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_ListRec */
- /* */
- /* <Description> */
- /* A structure used to hold a simple doubly-linked list. These are */
- /* used in many parts of FreeType. */
- /* */
- /* <Fields> */
- /* head :: The head (first element) of doubly-linked list. */
- /* */
- /* tail :: The tail (last element) of doubly-linked list. */
- /* */
- typedef struct FT_ListRec_
- {
- FT_ListNode head;
- FT_ListNode tail;
-
- } FT_ListRec;
-
- /* */
-
-
-#define FT_IS_EMPTY( list ) ( (list).head == 0 )
-#define FT_BOOL( x ) ( (FT_Bool)( x ) )
-
- /* concatenate C tokens */
-#define FT_ERR_XCAT( x, y ) x ## y
-#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y )
-
- /* see `ftmoderr.h' for descriptions of the following macros */
-
-#define FT_ERR( e ) FT_ERR_CAT( FT_ERR_PREFIX, e )
-
-#define FT_ERROR_BASE( x ) ( (x) & 0xFF )
-#define FT_ERROR_MODULE( x ) ( (x) & 0xFF00U )
-
-#define FT_ERR_EQ( x, e ) \
- ( FT_ERROR_BASE( x ) == FT_ERROR_BASE( FT_ERR( e ) ) )
-#define FT_ERR_NEQ( x, e ) \
- ( FT_ERROR_BASE( x ) != FT_ERROR_BASE( FT_ERR( e ) ) )
-
-
-FT_END_HEADER
-
-#endif /* FTTYPES_H_ */
-
-
-/* END */
diff --git a/include/freetype/ftwinfnt.h b/include/freetype/ftwinfnt.h
deleted file mode 100644
index 1eeef6c8b..000000000
--- a/include/freetype/ftwinfnt.h
+++ /dev/null
@@ -1,275 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftwinfnt.h */
-/* */
-/* FreeType API for accessing Windows fnt-specific data. */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTWINFNT_H_
-#define FTWINFNT_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* winfnt_fonts */
- /* */
- /* <Title> */
- /* Window FNT Files */
- /* */
- /* <Abstract> */
- /* Windows FNT specific API. */
- /* */
- /* <Description> */
- /* This section contains the declaration of Windows FNT specific */
- /* functions. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************
- *
- * @enum:
- * FT_WinFNT_ID_XXX
- *
- * @description:
- * A list of valid values for the `charset' byte in
- * @FT_WinFNT_HeaderRec. Exact mapping tables for the various cpXXXX
- * encodings (except for cp1361) can be found at
- * ftp://ftp.unicode.org/Public in the MAPPINGS/VENDORS/MICSFT/WINDOWS
- * subdirectory. cp1361 is roughly a superset of
- * MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.
- *
- * @values:
- * FT_WinFNT_ID_DEFAULT ::
- * This is used for font enumeration and font creation as a
- * `don't care' value. Valid font files don't contain this value.
- * When querying for information about the character set of the font
- * that is currently selected into a specified device context, this
- * return value (of the related Windows API) simply denotes failure.
- *
- * FT_WinFNT_ID_SYMBOL ::
- * There is no known mapping table available.
- *
- * FT_WinFNT_ID_MAC ::
- * Mac Roman encoding.
- *
- * FT_WinFNT_ID_OEM ::
- * From Michael Pöttgen <michael@poettgen.de>:
- *
- * The `Windows Font Mapping' article says that FT_WinFNT_ID_OEM
- * is used for the charset of vector fonts, like `modern.fon',
- * `roman.fon', and `script.fon' on Windows.
- *
- * The `CreateFont' documentation says: The FT_WinFNT_ID_OEM value
- * specifies a character set that is operating-system dependent.
- *
- * The `IFIMETRICS' documentation from the `Windows Driver
- * Development Kit' says: This font supports an OEM-specific
- * character set. The OEM character set is system dependent.
- *
- * In general OEM, as opposed to ANSI (i.e., cp1252), denotes the
- * second default codepage that most international versions of
- * Windows have. It is one of the OEM codepages from
- *
- * https://msdn.microsoft.com/en-us/goglobal/bb964655,
- *
- * and is used for the `DOS boxes', to support legacy applications.
- * A German Windows version for example usually uses ANSI codepage
- * 1252 and OEM codepage 850.
- *
- * FT_WinFNT_ID_CP874 ::
- * A superset of Thai TIS 620 and ISO 8859-11.
- *
- * FT_WinFNT_ID_CP932 ::
- * A superset of Japanese Shift-JIS (with minor deviations).
- *
- * FT_WinFNT_ID_CP936 ::
- * A superset of simplified Chinese GB 2312-1980 (with different
- * ordering and minor deviations).
- *
- * FT_WinFNT_ID_CP949 ::
- * A superset of Korean Hangul KS~C 5601-1987 (with different
- * ordering and minor deviations).
- *
- * FT_WinFNT_ID_CP950 ::
- * A superset of traditional Chinese Big~5 ETen (with different
- * ordering and minor deviations).
- *
- * FT_WinFNT_ID_CP1250 ::
- * A superset of East European ISO 8859-2 (with slightly different
- * ordering).
- *
- * FT_WinFNT_ID_CP1251 ::
- * A superset of Russian ISO 8859-5 (with different ordering).
- *
- * FT_WinFNT_ID_CP1252 ::
- * ANSI encoding. A superset of ISO 8859-1.
- *
- * FT_WinFNT_ID_CP1253 ::
- * A superset of Greek ISO 8859-7 (with minor modifications).
- *
- * FT_WinFNT_ID_CP1254 ::
- * A superset of Turkish ISO 8859-9.
- *
- * FT_WinFNT_ID_CP1255 ::
- * A superset of Hebrew ISO 8859-8 (with some modifications).
- *
- * FT_WinFNT_ID_CP1256 ::
- * A superset of Arabic ISO 8859-6 (with different ordering).
- *
- * FT_WinFNT_ID_CP1257 ::
- * A superset of Baltic ISO 8859-13 (with some deviations).
- *
- * FT_WinFNT_ID_CP1258 ::
- * For Vietnamese. This encoding doesn't cover all necessary
- * characters.
- *
- * FT_WinFNT_ID_CP1361 ::
- * Korean (Johab).
- */
-
-#define FT_WinFNT_ID_CP1252 0
-#define FT_WinFNT_ID_DEFAULT 1
-#define FT_WinFNT_ID_SYMBOL 2
-#define FT_WinFNT_ID_MAC 77
-#define FT_WinFNT_ID_CP932 128
-#define FT_WinFNT_ID_CP949 129
-#define FT_WinFNT_ID_CP1361 130
-#define FT_WinFNT_ID_CP936 134
-#define FT_WinFNT_ID_CP950 136
-#define FT_WinFNT_ID_CP1253 161
-#define FT_WinFNT_ID_CP1254 162
-#define FT_WinFNT_ID_CP1258 163
-#define FT_WinFNT_ID_CP1255 177
-#define FT_WinFNT_ID_CP1256 178
-#define FT_WinFNT_ID_CP1257 186
-#define FT_WinFNT_ID_CP1251 204
-#define FT_WinFNT_ID_CP874 222
-#define FT_WinFNT_ID_CP1250 238
-#define FT_WinFNT_ID_OEM 255
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_WinFNT_HeaderRec */
- /* */
- /* <Description> */
- /* Windows FNT Header info. */
- /* */
- typedef struct FT_WinFNT_HeaderRec_
- {
- FT_UShort version;
- FT_ULong file_size;
- FT_Byte copyright[60];
- FT_UShort file_type;
- FT_UShort nominal_point_size;
- FT_UShort vertical_resolution;
- FT_UShort horizontal_resolution;
- FT_UShort ascent;
- FT_UShort internal_leading;
- FT_UShort external_leading;
- FT_Byte italic;
- FT_Byte underline;
- FT_Byte strike_out;
- FT_UShort weight;
- FT_Byte charset;
- FT_UShort pixel_width;
- FT_UShort pixel_height;
- FT_Byte pitch_and_family;
- FT_UShort avg_width;
- FT_UShort max_width;
- FT_Byte first_char;
- FT_Byte last_char;
- FT_Byte default_char;
- FT_Byte break_char;
- FT_UShort bytes_per_row;
- FT_ULong device_offset;
- FT_ULong face_name_offset;
- FT_ULong bits_pointer;
- FT_ULong bits_offset;
- FT_Byte reserved;
- FT_ULong flags;
- FT_UShort A_space;
- FT_UShort B_space;
- FT_UShort C_space;
- FT_UShort color_table_offset;
- FT_ULong reserved1[4];
-
- } FT_WinFNT_HeaderRec;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_WinFNT_Header */
- /* */
- /* <Description> */
- /* A handle to an @FT_WinFNT_HeaderRec structure. */
- /* */
- typedef struct FT_WinFNT_HeaderRec_* FT_WinFNT_Header;
-
-
- /**********************************************************************
- *
- * @function:
- * FT_Get_WinFNT_Header
- *
- * @description:
- * Retrieve a Windows FNT font info header.
- *
- * @input:
- * face :: A handle to the input face.
- *
- * @output:
- * aheader :: The WinFNT header.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This function only works with Windows FNT faces, returning an error
- * otherwise.
- */
- FT_EXPORT( FT_Error )
- FT_Get_WinFNT_Header( FT_Face face,
- FT_WinFNT_HeaderRec *aheader );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTWINFNT_H_ */
-
-
-/* END */
-
-
-/* Local Variables: */
-/* coding: utf-8 */
-/* End: */
diff --git a/include/freetype/internal/autohint.h b/include/freetype/internal/autohint.h
deleted file mode 100644
index bae83e738..000000000
--- a/include/freetype/internal/autohint.h
+++ /dev/null
@@ -1,244 +0,0 @@
-/***************************************************************************/
-/* */
-/* autohint.h */
-/* */
-/* High-level `autohint' module-specific interface (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* The auto-hinter is used to load and automatically hint glyphs if a */
- /* format-specific hinter isn't available. */
- /* */
- /*************************************************************************/
-
-
-#ifndef AUTOHINT_H_
-#define AUTOHINT_H_
-
-
- /*************************************************************************/
- /* */
- /* A small technical note regarding automatic hinting in order to */
- /* clarify this module interface. */
- /* */
- /* An automatic hinter might compute two kinds of data for a given face: */
- /* */
- /* - global hints: Usually some metrics that describe global properties */
- /* of the face. It is computed by scanning more or less */
- /* aggressively the glyphs in the face, and thus can be */
- /* very slow to compute (even if the size of global */
- /* hints is really small). */
- /* */
- /* - glyph hints: These describe some important features of the glyph */
- /* outline, as well as how to align them. They are */
- /* generally much faster to compute than global hints. */
- /* */
- /* The current FreeType auto-hinter does a pretty good job while */
- /* performing fast computations for both global and glyph hints. */
- /* However, we might be interested in introducing more complex and */
- /* powerful algorithms in the future, like the one described in the John */
- /* D. Hobby paper, which unfortunately requires a lot more horsepower. */
- /* */
- /* Because a sufficiently sophisticated font management system would */
- /* typically implement an LRU cache of opened face objects to reduce */
- /* memory usage, it is a good idea to be able to avoid recomputing */
- /* global hints every time the same face is re-opened. */
- /* */
- /* We thus provide the ability to cache global hints outside of the face */
- /* object, in order to speed up font re-opening time. Of course, this */
- /* feature is purely optional, so most client programs won't even notice */
- /* it. */
- /* */
- /* I initially thought that it would be a good idea to cache the glyph */
- /* hints too. However, my general idea now is that if you really need */
- /* to cache these too, you are simply in need of a new font format, */
- /* where all this information could be stored within the font file and */
- /* decoded on the fly. */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-
-FT_BEGIN_HEADER
-
-
- typedef struct FT_AutoHinterRec_ *FT_AutoHinter;
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_AutoHinter_GlobalGetFunc */
- /* */
- /* <Description> */
- /* Retrieve the global hints computed for a given face object. The */
- /* resulting data is dissociated from the face and will survive a */
- /* call to FT_Done_Face(). It must be discarded through the API */
- /* FT_AutoHinter_GlobalDoneFunc(). */
- /* */
- /* <Input> */
- /* hinter :: A handle to the source auto-hinter. */
- /* */
- /* face :: A handle to the source face object. */
- /* */
- /* <Output> */
- /* global_hints :: A typeless pointer to the global hints. */
- /* */
- /* global_len :: The size in bytes of the global hints. */
- /* */
- typedef void
- (*FT_AutoHinter_GlobalGetFunc)( FT_AutoHinter hinter,
- FT_Face face,
- void** global_hints,
- long* global_len );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_AutoHinter_GlobalDoneFunc */
- /* */
- /* <Description> */
- /* Discard the global hints retrieved through */
- /* FT_AutoHinter_GlobalGetFunc(). This is the only way these hints */
- /* are freed from memory. */
- /* */
- /* <Input> */
- /* hinter :: A handle to the auto-hinter module. */
- /* */
- /* global :: A pointer to retrieved global hints to discard. */
- /* */
- typedef void
- (*FT_AutoHinter_GlobalDoneFunc)( FT_AutoHinter hinter,
- void* global );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_AutoHinter_GlobalResetFunc */
- /* */
- /* <Description> */
- /* This function is used to recompute the global metrics in a given */
- /* font. This is useful when global font data changes (e.g. Multiple */
- /* Masters fonts where blend coordinates change). */
- /* */
- /* <Input> */
- /* hinter :: A handle to the source auto-hinter. */
- /* */
- /* face :: A handle to the face. */
- /* */
- typedef void
- (*FT_AutoHinter_GlobalResetFunc)( FT_AutoHinter hinter,
- FT_Face face );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_AutoHinter_GlyphLoadFunc */
- /* */
- /* <Description> */
- /* This function is used to load, scale, and automatically hint a */
- /* glyph from a given face. */
- /* */
- /* <Input> */
- /* face :: A handle to the face. */
- /* */
- /* glyph_index :: The glyph index. */
- /* */
- /* load_flags :: The load flags. */
- /* */
- /* <Note> */
- /* This function is capable of loading composite glyphs by hinting */
- /* each sub-glyph independently (which improves quality). */
- /* */
- /* It will call the font driver with @FT_Load_Glyph, with */
- /* @FT_LOAD_NO_SCALE set. */
- /* */
- typedef FT_Error
- (*FT_AutoHinter_GlyphLoadFunc)( FT_AutoHinter hinter,
- FT_GlyphSlot slot,
- FT_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags );
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_AutoHinter_InterfaceRec */
- /* */
- /* <Description> */
- /* The auto-hinter module's interface. */
- /* */
- typedef struct FT_AutoHinter_InterfaceRec_
- {
- FT_AutoHinter_GlobalResetFunc reset_face;
- FT_AutoHinter_GlobalGetFunc get_global_hints;
- FT_AutoHinter_GlobalDoneFunc done_global_hints;
- FT_AutoHinter_GlyphLoadFunc load_glyph;
-
- } FT_AutoHinter_InterfaceRec, *FT_AutoHinter_Interface;
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_AUTOHINTER_INTERFACE( \
- class_, \
- reset_face_, \
- get_global_hints_, \
- done_global_hints_, \
- load_glyph_ ) \
- FT_CALLBACK_TABLE_DEF \
- const FT_AutoHinter_InterfaceRec class_ = \
- { \
- reset_face_, \
- get_global_hints_, \
- done_global_hints_, \
- load_glyph_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_AUTOHINTER_INTERFACE( \
- class_, \
- reset_face_, \
- get_global_hints_, \
- done_global_hints_, \
- load_glyph_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_AutoHinter_InterfaceRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->reset_face = reset_face_; \
- clazz->get_global_hints = get_global_hints_; \
- clazz->done_global_hints = done_global_hints_; \
- clazz->load_glyph = load_glyph_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-FT_END_HEADER
-
-#endif /* AUTOHINT_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/ftcalc.h b/include/freetype/internal/ftcalc.h
deleted file mode 100644
index d93a05488..000000000
--- a/include/freetype/internal/ftcalc.h
+++ /dev/null
@@ -1,444 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcalc.h */
-/* */
-/* Arithmetic computations (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTCALC_H_
-#define FTCALC_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* FT_MulDiv() and FT_MulFix() are declared in freetype.h. */
- /* */
- /*************************************************************************/
-
-#ifndef FT_CONFIG_OPTION_NO_ASSEMBLER
- /* Provide assembler fragments for performance-critical functions. */
- /* These must be defined `static __inline__' with GCC. */
-
-#if defined( __CC_ARM ) || defined( __ARMCC__ ) /* RVCT */
-
-#define FT_MULFIX_ASSEMBLER FT_MulFix_arm
-
- /* documentation is in freetype.h */
-
- static __inline FT_Int32
- FT_MulFix_arm( FT_Int32 a,
- FT_Int32 b )
- {
- FT_Int32 t, t2;
-
-
- __asm
- {
- smull t2, t, b, a /* (lo=t2,hi=t) = a*b */
- mov a, t, asr #31 /* a = (hi >> 31) */
- add a, a, #0x8000 /* a += 0x8000 */
- adds t2, t2, a /* t2 += a */
- adc t, t, #0 /* t += carry */
- mov a, t2, lsr #16 /* a = t2 >> 16 */
- orr a, a, t, lsl #16 /* a |= t << 16 */
- }
- return a;
- }
-
-#endif /* __CC_ARM || __ARMCC__ */
-
-
-#ifdef __GNUC__
-
-#if defined( __arm__ ) && \
- ( !defined( __thumb__ ) || defined( __thumb2__ ) ) && \
- !( defined( __CC_ARM ) || defined( __ARMCC__ ) )
-
-#define FT_MULFIX_ASSEMBLER FT_MulFix_arm
-
- /* documentation is in freetype.h */
-
- static __inline__ FT_Int32
- FT_MulFix_arm( FT_Int32 a,
- FT_Int32 b )
- {
- FT_Int32 t, t2;
-
-
- __asm__ __volatile__ (
- "smull %1, %2, %4, %3\n\t" /* (lo=%1,hi=%2) = a*b */
- "mov %0, %2, asr #31\n\t" /* %0 = (hi >> 31) */
-#if defined( __clang__ ) && defined( __thumb2__ )
- "add.w %0, %0, #0x8000\n\t" /* %0 += 0x8000 */
-#else
- "add %0, %0, #0x8000\n\t" /* %0 += 0x8000 */
-#endif
- "adds %1, %1, %0\n\t" /* %1 += %0 */
- "adc %2, %2, #0\n\t" /* %2 += carry */
- "mov %0, %1, lsr #16\n\t" /* %0 = %1 >> 16 */
- "orr %0, %0, %2, lsl #16\n\t" /* %0 |= %2 << 16 */
- : "=r"(a), "=&r"(t2), "=&r"(t)
- : "r"(a), "r"(b)
- : "cc" );
- return a;
- }
-
-#endif /* __arm__ && */
- /* ( __thumb2__ || !__thumb__ ) && */
- /* !( __CC_ARM || __ARMCC__ ) */
-
-
-#if defined( __i386__ )
-
-#define FT_MULFIX_ASSEMBLER FT_MulFix_i386
-
- /* documentation is in freetype.h */
-
- static __inline__ FT_Int32
- FT_MulFix_i386( FT_Int32 a,
- FT_Int32 b )
- {
- FT_Int32 result;
-
-
- __asm__ __volatile__ (
- "imul %%edx\n"
- "movl %%edx, %%ecx\n"
- "sarl $31, %%ecx\n"
- "addl $0x8000, %%ecx\n"
- "addl %%ecx, %%eax\n"
- "adcl $0, %%edx\n"
- "shrl $16, %%eax\n"
- "shll $16, %%edx\n"
- "addl %%edx, %%eax\n"
- : "=a"(result), "=d"(b)
- : "a"(a), "d"(b)
- : "%ecx", "cc" );
- return result;
- }
-
-#endif /* i386 */
-
-#endif /* __GNUC__ */
-
-
-#ifdef _MSC_VER /* Visual C++ */
-
-#ifdef _M_IX86
-
-#define FT_MULFIX_ASSEMBLER FT_MulFix_i386
-
- /* documentation is in freetype.h */
-
- static __inline FT_Int32
- FT_MulFix_i386( FT_Int32 a,
- FT_Int32 b )
- {
- FT_Int32 result;
-
- __asm
- {
- mov eax, a
- mov edx, b
- imul edx
- mov ecx, edx
- sar ecx, 31
- add ecx, 8000h
- add eax, ecx
- adc edx, 0
- shr eax, 16
- shl edx, 16
- add eax, edx
- mov result, eax
- }
- return result;
- }
-
-#endif /* _M_IX86 */
-
-#endif /* _MSC_VER */
-
-
-#if defined( __GNUC__ ) && defined( __x86_64__ )
-
-#define FT_MULFIX_ASSEMBLER FT_MulFix_x86_64
-
- static __inline__ FT_Int32
- FT_MulFix_x86_64( FT_Int32 a,
- FT_Int32 b )
- {
- /* Temporarily disable the warning that C90 doesn't support */
- /* `long long'. */
-#if __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ >= 6 )
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wlong-long"
-#endif
-
-#if 1
- /* Technically not an assembly fragment, but GCC does a really good */
- /* job at inlining it and generating good machine code for it. */
- long long ret, tmp;
-
-
- ret = (long long)a * b;
- tmp = ret >> 63;
- ret += 0x8000 + tmp;
-
- return (FT_Int32)( ret >> 16 );
-#else
-
- /* For some reason, GCC 4.6 on Ubuntu 12.04 generates invalid machine */
- /* code from the lines below. The main issue is that `wide_a' is not */
- /* properly initialized by sign-extending `a'. Instead, the generated */
- /* machine code assumes that the register that contains `a' on input */
- /* can be used directly as a 64-bit value, which is wrong most of the */
- /* time. */
- long long wide_a = (long long)a;
- long long wide_b = (long long)b;
- long long result;
-
-
- __asm__ __volatile__ (
- "imul %2, %1\n"
- "mov %1, %0\n"
- "sar $63, %0\n"
- "lea 0x8000(%1, %0), %0\n"
- "sar $16, %0\n"
- : "=&r"(result), "=&r"(wide_a)
- : "r"(wide_b)
- : "cc" );
-
- return (FT_Int32)result;
-#endif
-
-#if __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ >= 6 )
-#pragma GCC diagnostic pop
-#endif
- }
-
-#endif /* __GNUC__ && __x86_64__ */
-
-#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */
-
-
-#ifdef FT_CONFIG_OPTION_INLINE_MULFIX
-#ifdef FT_MULFIX_ASSEMBLER
-#define FT_MulFix( a, b ) FT_MULFIX_ASSEMBLER( (FT_Int32)(a), (FT_Int32)(b) )
-#endif
-#endif
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_MulDiv_No_Round */
- /* */
- /* <Description> */
- /* A very simple function used to perform the computation `(a*b)/c' */
- /* (without rounding) with maximum accuracy (it uses a 64-bit */
- /* intermediate integer whenever necessary). */
- /* */
- /* This function isn't necessarily as fast as some processor specific */
- /* operations, but is at least completely portable. */
- /* */
- /* <Input> */
- /* a :: The first multiplier. */
- /* b :: The second multiplier. */
- /* c :: The divisor. */
- /* */
- /* <Return> */
- /* The result of `(a*b)/c'. This function never traps when trying to */
- /* divide by zero; it simply returns `MaxInt' or `MinInt' depending */
- /* on the signs of `a' and `b'. */
- /* */
- FT_BASE( FT_Long )
- FT_MulDiv_No_Round( FT_Long a,
- FT_Long b,
- FT_Long c );
-
-
- /*
- * A variant of FT_Matrix_Multiply which scales its result afterwards.
- * The idea is that both `a' and `b' are scaled by factors of 10 so that
- * the values are as precise as possible to get a correct result during
- * the 64bit multiplication. Let `sa' and `sb' be the scaling factors of
- * `a' and `b', respectively, then the scaling factor of the result is
- * `sa*sb'.
- */
- FT_BASE( void )
- FT_Matrix_Multiply_Scaled( const FT_Matrix* a,
- FT_Matrix *b,
- FT_Long scaling );
-
-
- /*
- * A variant of FT_Vector_Transform. See comments for
- * FT_Matrix_Multiply_Scaled.
- */
- FT_BASE( void )
- FT_Vector_Transform_Scaled( FT_Vector* vector,
- const FT_Matrix* matrix,
- FT_Long scaling );
-
-
- /*
- * This function normalizes a vector and returns its original length.
- * The normalized vector is a 16.16 fixed-point unit vector with length
- * close to 0x10000. The accuracy of the returned length is limited to
- * 16 bits also. The function utilizes quick inverse square root
- * approximation without divisions and square roots relying on Newton's
- * iterations instead.
- */
- FT_BASE( FT_UInt32 )
- FT_Vector_NormLen( FT_Vector* vector );
-
-
- /*
- * Return -1, 0, or +1, depending on the orientation of a given corner.
- * We use the Cartesian coordinate system, with positive vertical values
- * going upwards. The function returns +1 if the corner turns to the
- * left, -1 to the right, and 0 for undecidable cases.
- */
- FT_BASE( FT_Int )
- ft_corner_orientation( FT_Pos in_x,
- FT_Pos in_y,
- FT_Pos out_x,
- FT_Pos out_y );
-
-
- /*
- * Return TRUE if a corner is flat or nearly flat. This is equivalent to
- * saying that the corner point is close to its neighbors, or inside an
- * ellipse defined by the neighbor focal points to be more precise.
- */
- FT_BASE( FT_Int )
- ft_corner_is_flat( FT_Pos in_x,
- FT_Pos in_y,
- FT_Pos out_x,
- FT_Pos out_y );
-
-
- /*
- * Return the most significant bit index.
- */
-
-#ifndef FT_CONFIG_OPTION_NO_ASSEMBLER
-#if defined( __GNUC__ ) && \
- ( __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 4 ) )
-
-#if FT_SIZEOF_INT == 4
-
-#define FT_MSB( x ) ( 31 - __builtin_clz( x ) )
-
-#elif FT_SIZEOF_LONG == 4
-
-#define FT_MSB( x ) ( 31 - __builtin_clzl( x ) )
-
-#endif
-
-#endif /* __GNUC__ */
-#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */
-
-#ifndef FT_MSB
-
- FT_BASE( FT_Int )
- FT_MSB( FT_UInt32 z );
-
-#endif
-
-
- /*
- * Return sqrt(x*x+y*y), which is the same as `FT_Vector_Length' but uses
- * two fixed-point arguments instead.
- */
- FT_BASE( FT_Fixed )
- FT_Hypot( FT_Fixed x,
- FT_Fixed y );
-
-
-#if 0
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_SqrtFixed */
- /* */
- /* <Description> */
- /* Computes the square root of a 16.16 fixed-point value. */
- /* */
- /* <Input> */
- /* x :: The value to compute the root for. */
- /* */
- /* <Return> */
- /* The result of `sqrt(x)'. */
- /* */
- /* <Note> */
- /* This function is not very fast. */
- /* */
- FT_BASE( FT_Int32 )
- FT_SqrtFixed( FT_Int32 x );
-
-#endif /* 0 */
-
-
-#define INT_TO_F26DOT6( x ) ( (FT_Long)(x) * 64 ) /* << 6 */
-#define INT_TO_F2DOT14( x ) ( (FT_Long)(x) * 16384 ) /* << 14 */
-#define INT_TO_FIXED( x ) ( (FT_Long)(x) * 65536 ) /* << 16 */
-#define F2DOT14_TO_FIXED( x ) ( (FT_Long)(x) * 4 ) /* << 2 */
-#define FIXED_TO_INT( x ) ( FT_RoundFix( x ) >> 16 )
-
-#define ROUND_F26DOT6( x ) ( x >= 0 ? ( ( (x) + 32 ) & -64 ) \
- : ( -( ( 32 - (x) ) & -64 ) ) )
-
- /*
- * The following macros have two purposes.
- *
- * . Tag places where overflow is expected and harmless.
- *
- * . Avoid run-time sanitizer errors.
- *
- * Use with care!
- */
-#define ADD_LONG( a, b ) \
- (FT_Long)( (FT_ULong)(a) + (FT_ULong)(b) )
-#define SUB_LONG( a, b ) \
- (FT_Long)( (FT_ULong)(a) - (FT_ULong)(b) )
-#define MUL_LONG( a, b ) \
- (FT_Long)( (FT_ULong)(a) * (FT_ULong)(b) )
-#define NEG_LONG( a ) \
- (FT_Long)( -(FT_ULong)(a) )
-
-#define ADD_INT32( a, b ) \
- (FT_Int32)( (FT_UInt32)(a) + (FT_UInt32)(b) )
-#define SUB_INT32( a, b ) \
- (FT_Int32)( (FT_UInt32)(a) - (FT_UInt32)(b) )
-#define MUL_INT32( a, b ) \
- (FT_Int32)( (FT_UInt32)(a) * (FT_UInt32)(b) )
-#define NEG_INT32( a ) \
- (FT_Int32)( -(FT_UInt32)(a) )
-
-
-FT_END_HEADER
-
-#endif /* FTCALC_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/ftdebug.h b/include/freetype/internal/ftdebug.h
deleted file mode 100644
index 5dcd2b174..000000000
--- a/include/freetype/internal/ftdebug.h
+++ /dev/null
@@ -1,255 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftdebug.h */
-/* */
-/* Debugging and logging component (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/* */
-/* IMPORTANT: A description of FreeType's debugging support can be */
-/* found in `docs/DEBUG.TXT'. Read it if you need to use or */
-/* understand this code. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTDEBUG_H_
-#define FTDEBUG_H_
-
-
-#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H
-#include FT_FREETYPE_H
-
-
-FT_BEGIN_HEADER
-
-
- /* force the definition of FT_DEBUG_LEVEL_ERROR if FT_DEBUG_LEVEL_TRACE */
- /* is already defined; this simplifies the following #ifdefs */
- /* */
-#ifdef FT_DEBUG_LEVEL_TRACE
-#undef FT_DEBUG_LEVEL_ERROR
-#define FT_DEBUG_LEVEL_ERROR
-#endif
-
-
- /*************************************************************************/
- /* */
- /* Define the trace enums as well as the trace levels array when they */
- /* are needed. */
- /* */
- /*************************************************************************/
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
-#define FT_TRACE_DEF( x ) trace_ ## x ,
-
- /* defining the enumeration */
- typedef enum FT_Trace_
- {
-#include FT_INTERNAL_TRACE_H
- trace_count
-
- } FT_Trace;
-
-
- /* defining the array of trace levels, provided by `src/base/ftdebug.c' */
- extern int ft_trace_levels[trace_count];
-
-#undef FT_TRACE_DEF
-
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
-
- /*************************************************************************/
- /* */
- /* Define the FT_TRACE macro */
- /* */
- /* IMPORTANT! */
- /* */
- /* Each component must define the macro FT_COMPONENT to a valid FT_Trace */
- /* value before using any TRACE macro. */
- /* */
- /*************************************************************************/
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
-#define FT_TRACE( level, varformat ) \
- do \
- { \
- if ( ft_trace_levels[FT_COMPONENT] >= level ) \
- FT_Message varformat; \
- } while ( 0 )
-
-#else /* !FT_DEBUG_LEVEL_TRACE */
-
-#define FT_TRACE( level, varformat ) do { } while ( 0 ) /* nothing */
-
-#endif /* !FT_DEBUG_LEVEL_TRACE */
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Trace_Get_Count */
- /* */
- /* <Description> */
- /* Return the number of available trace components. */
- /* */
- /* <Return> */
- /* The number of trace components. 0 if FreeType 2 is not built with */
- /* FT_DEBUG_LEVEL_TRACE definition. */
- /* */
- /* <Note> */
- /* This function may be useful if you want to access elements of */
- /* the internal `ft_trace_levels' array by an index. */
- /* */
- FT_BASE( FT_Int )
- FT_Trace_Get_Count( void );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Trace_Get_Name */
- /* */
- /* <Description> */
- /* Return the name of a trace component. */
- /* */
- /* <Input> */
- /* The index of the trace component. */
- /* */
- /* <Return> */
- /* The name of the trace component. This is a statically allocated */
- /* C string, so do not free it after use. NULL if FreeType 2 is not */
- /* built with FT_DEBUG_LEVEL_TRACE definition. */
- /* */
- /* <Note> */
- /* Use @FT_Trace_Get_Count to get the number of available trace */
- /* components. */
- /* */
- /* This function may be useful if you want to control FreeType 2's */
- /* debug level in your application. */
- /* */
- FT_BASE( const char* )
- FT_Trace_Get_Name( FT_Int idx );
-
-
- /*************************************************************************/
- /* */
- /* You need two opening and closing parentheses! */
- /* */
- /* Example: FT_TRACE0(( "Value is %i", foo )) */
- /* */
- /* Output of the FT_TRACEX macros is sent to stderr. */
- /* */
- /*************************************************************************/
-
-#define FT_TRACE0( varformat ) FT_TRACE( 0, varformat )
-#define FT_TRACE1( varformat ) FT_TRACE( 1, varformat )
-#define FT_TRACE2( varformat ) FT_TRACE( 2, varformat )
-#define FT_TRACE3( varformat ) FT_TRACE( 3, varformat )
-#define FT_TRACE4( varformat ) FT_TRACE( 4, varformat )
-#define FT_TRACE5( varformat ) FT_TRACE( 5, varformat )
-#define FT_TRACE6( varformat ) FT_TRACE( 6, varformat )
-#define FT_TRACE7( varformat ) FT_TRACE( 7, varformat )
-
-
- /*************************************************************************/
- /* */
- /* Define the FT_ERROR macro. */
- /* */
- /* Output of this macro is sent to stderr. */
- /* */
- /*************************************************************************/
-
-#ifdef FT_DEBUG_LEVEL_ERROR
-
-#define FT_ERROR( varformat ) FT_Message varformat
-
-#else /* !FT_DEBUG_LEVEL_ERROR */
-
-#define FT_ERROR( varformat ) do { } while ( 0 ) /* nothing */
-
-#endif /* !FT_DEBUG_LEVEL_ERROR */
-
-
- /*************************************************************************/
- /* */
- /* Define the FT_ASSERT and FT_THROW macros. The call to `FT_Throw' */
- /* makes it possible to easily set a breakpoint at this function. */
- /* */
- /*************************************************************************/
-
-#ifdef FT_DEBUG_LEVEL_ERROR
-
-#define FT_ASSERT( condition ) \
- do \
- { \
- if ( !( condition ) ) \
- FT_Panic( "assertion failed on line %d of file %s\n", \
- __LINE__, __FILE__ ); \
- } while ( 0 )
-
-#define FT_THROW( e ) \
- ( FT_Throw( FT_ERR_CAT( FT_ERR_PREFIX, e ), \
- __LINE__, \
- __FILE__ ) | \
- FT_ERR_CAT( FT_ERR_PREFIX, e ) )
-
-#else /* !FT_DEBUG_LEVEL_ERROR */
-
-#define FT_ASSERT( condition ) do { } while ( 0 )
-
-#define FT_THROW( e ) FT_ERR_CAT( FT_ERR_PREFIX, e )
-
-#endif /* !FT_DEBUG_LEVEL_ERROR */
-
-
- /*************************************************************************/
- /* */
- /* Define `FT_Message' and `FT_Panic' when needed. */
- /* */
- /*************************************************************************/
-
-#ifdef FT_DEBUG_LEVEL_ERROR
-
-#include "stdio.h" /* for vfprintf() */
-
- /* print a message */
- FT_BASE( void )
- FT_Message( const char* fmt,
- ... );
-
- /* print a message and exit */
- FT_BASE( void )
- FT_Panic( const char* fmt,
- ... );
-
- /* report file name and line number of an error */
- FT_BASE( int )
- FT_Throw( FT_Error error,
- int line,
- const char* file );
-
-#endif /* FT_DEBUG_LEVEL_ERROR */
-
-
- FT_BASE( void )
- ft_debug_init( void );
-
-FT_END_HEADER
-
-#endif /* FTDEBUG_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/ftdriver.h b/include/freetype/internal/ftdriver.h
deleted file mode 100644
index e82fa8d41..000000000
--- a/include/freetype/internal/ftdriver.h
+++ /dev/null
@@ -1,400 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftdriver.h */
-/* */
-/* FreeType font driver interface (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTDRIVER_H_
-#define FTDRIVER_H_
-
-
-#include <ft2build.h>
-#include FT_MODULE_H
-
-
-FT_BEGIN_HEADER
-
-
- typedef FT_Error
- (*FT_Face_InitFunc)( FT_Stream stream,
- FT_Face face,
- FT_Int typeface_index,
- FT_Int num_params,
- FT_Parameter* parameters );
-
- typedef void
- (*FT_Face_DoneFunc)( FT_Face face );
-
-
- typedef FT_Error
- (*FT_Size_InitFunc)( FT_Size size );
-
- typedef void
- (*FT_Size_DoneFunc)( FT_Size size );
-
-
- typedef FT_Error
- (*FT_Slot_InitFunc)( FT_GlyphSlot slot );
-
- typedef void
- (*FT_Slot_DoneFunc)( FT_GlyphSlot slot );
-
-
- typedef FT_Error
- (*FT_Size_RequestFunc)( FT_Size size,
- FT_Size_Request req );
-
- typedef FT_Error
- (*FT_Size_SelectFunc)( FT_Size size,
- FT_ULong size_index );
-
- typedef FT_Error
- (*FT_Slot_LoadFunc)( FT_GlyphSlot slot,
- FT_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags );
-
-
- typedef FT_Error
- (*FT_Face_GetKerningFunc)( FT_Face face,
- FT_UInt left_glyph,
- FT_UInt right_glyph,
- FT_Vector* kerning );
-
-
- typedef FT_Error
- (*FT_Face_AttachFunc)( FT_Face face,
- FT_Stream stream );
-
-
- typedef FT_Error
- (*FT_Face_GetAdvancesFunc)( FT_Face face,
- FT_UInt first,
- FT_UInt count,
- FT_Int32 flags,
- FT_Fixed* advances );
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Driver_ClassRec */
- /* */
- /* <Description> */
- /* The font driver class. This structure mostly contains pointers to */
- /* driver methods. */
- /* */
- /* <Fields> */
- /* root :: The parent module. */
- /* */
- /* face_object_size :: The size of a face object in bytes. */
- /* */
- /* size_object_size :: The size of a size object in bytes. */
- /* */
- /* slot_object_size :: The size of a glyph object in bytes. */
- /* */
- /* init_face :: The format-specific face constructor. */
- /* */
- /* done_face :: The format-specific face destructor. */
- /* */
- /* init_size :: The format-specific size constructor. */
- /* */
- /* done_size :: The format-specific size destructor. */
- /* */
- /* init_slot :: The format-specific slot constructor. */
- /* */
- /* done_slot :: The format-specific slot destructor. */
- /* */
- /* */
- /* load_glyph :: A function handle to load a glyph to a slot. */
- /* This field is mandatory! */
- /* */
- /* get_kerning :: A function handle to return the unscaled */
- /* kerning for a given pair of glyphs. Can be */
- /* set to 0 if the format doesn't support */
- /* kerning. */
- /* */
- /* attach_file :: This function handle is used to read */
- /* additional data for a face from another */
- /* file/stream. For example, this can be used to */
- /* add data from AFM or PFM files on a Type 1 */
- /* face, or a CIDMap on a CID-keyed face. */
- /* */
- /* get_advances :: A function handle used to return advance */
- /* widths of `count' glyphs (in font units), */
- /* starting at `first'. The `vertical' flag must */
- /* be set to get vertical advance heights. The */
- /* `advances' buffer is caller-allocated. */
- /* The idea of this function is to be able to */
- /* perform device-independent text layout without */
- /* loading a single glyph image. */
- /* */
- /* request_size :: A handle to a function used to request the new */
- /* character size. Can be set to 0 if the */
- /* scaling done in the base layer suffices. */
- /* */
- /* select_size :: A handle to a function used to select a new */
- /* fixed size. It is used only if */
- /* @FT_FACE_FLAG_FIXED_SIZES is set. Can be set */
- /* to 0 if the scaling done in the base layer */
- /* suffices. */
- /* <Note> */
- /* Most function pointers, with the exception of `load_glyph', can be */
- /* set to 0 to indicate a default behaviour. */
- /* */
- typedef struct FT_Driver_ClassRec_
- {
- FT_Module_Class root;
-
- FT_Long face_object_size;
- FT_Long size_object_size;
- FT_Long slot_object_size;
-
- FT_Face_InitFunc init_face;
- FT_Face_DoneFunc done_face;
-
- FT_Size_InitFunc init_size;
- FT_Size_DoneFunc done_size;
-
- FT_Slot_InitFunc init_slot;
- FT_Slot_DoneFunc done_slot;
-
- FT_Slot_LoadFunc load_glyph;
-
- FT_Face_GetKerningFunc get_kerning;
- FT_Face_AttachFunc attach_file;
- FT_Face_GetAdvancesFunc get_advances;
-
- /* since version 2.2 */
- FT_Size_RequestFunc request_size;
- FT_Size_SelectFunc select_size;
-
- } FT_Driver_ClassRec, *FT_Driver_Class;
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_DECLARE_DRIVER */
- /* */
- /* <Description> */
- /* Used to create a forward declaration of an FT_Driver_ClassRec */
- /* struct instance. */
- /* */
- /* <Macro> */
- /* FT_DEFINE_DRIVER */
- /* */
- /* <Description> */
- /* Used to initialize an instance of FT_Driver_ClassRec struct. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is defined a `create' function has to be */
- /* called with a pointer where the allocated structure is returned. */
- /* And when it is no longer needed a `destroy' function needs to be */
- /* called to release that allocation. */
- /* */
- /* `ftinit.c' (ft_create_default_module_classes) already contains a */
- /* mechanism to call these functions for the default modules */
- /* described in `ftmodule.h'. */
- /* */
- /* Notice that the created `create' and `destroy' functions call */
- /* `pic_init' and `pic_free' to allow you to manually allocate and */
- /* initialize any additional global data, like a module specific */
- /* interface, and put them in the global pic container defined in */
- /* `ftpic.h'. If you don't need them just implement the functions as */
- /* empty to resolve the link error. Also the `pic_init' and */
- /* `pic_free' functions should be declared in `pic.h', to be referred */
- /* by driver definition calling `FT_DEFINE_DRIVER' in following. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
- /* allocated in the global scope (or the scope where the macro is */
- /* used). */
- /* */
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DECLARE_DRIVER( class_ ) \
- FT_CALLBACK_TABLE \
- const FT_Driver_ClassRec class_;
-
-#define FT_DEFINE_DRIVER( \
- class_, \
- flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_, \
- face_object_size_, \
- size_object_size_, \
- slot_object_size_, \
- init_face_, \
- done_face_, \
- init_size_, \
- done_size_, \
- init_slot_, \
- done_slot_, \
- load_glyph_, \
- get_kerning_, \
- attach_file_, \
- get_advances_, \
- request_size_, \
- select_size_ ) \
- FT_CALLBACK_TABLE_DEF \
- const FT_Driver_ClassRec class_ = \
- { \
- FT_DEFINE_ROOT_MODULE( flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_ ) \
- \
- face_object_size_, \
- size_object_size_, \
- slot_object_size_, \
- \
- init_face_, \
- done_face_, \
- \
- init_size_, \
- done_size_, \
- \
- init_slot_, \
- done_slot_, \
- \
- load_glyph_, \
- \
- get_kerning_, \
- attach_file_, \
- get_advances_, \
- \
- request_size_, \
- select_size_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DECLARE_DRIVER( class_ ) FT_DECLARE_MODULE( class_ )
-
-#define FT_DEFINE_DRIVER( \
- class_, \
- flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_, \
- face_object_size_, \
- size_object_size_, \
- slot_object_size_, \
- init_face_, \
- done_face_, \
- init_size_, \
- done_size_, \
- init_slot_, \
- done_slot_, \
- load_glyph_, \
- get_kerning_, \
- attach_file_, \
- get_advances_, \
- request_size_, \
- select_size_ ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_Module_Class* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- FT_Driver_Class dclazz = (FT_Driver_Class)clazz; \
- \
- \
- class_ ## _pic_free( library ); \
- if ( dclazz ) \
- FT_FREE( dclazz ); \
- } \
- \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_Module_Class** output_class ) \
- { \
- FT_Driver_Class clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) ) ) \
- return error; \
- \
- error = class_ ## _pic_init( library ); \
- if ( error ) \
- { \
- FT_FREE( clazz ); \
- return error; \
- } \
- \
- FT_DEFINE_ROOT_MODULE( flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_ ) \
- \
- clazz->face_object_size = face_object_size_; \
- clazz->size_object_size = size_object_size_; \
- clazz->slot_object_size = slot_object_size_; \
- \
- clazz->init_face = init_face_; \
- clazz->done_face = done_face_; \
- \
- clazz->init_size = init_size_; \
- clazz->done_size = done_size_; \
- \
- clazz->init_slot = init_slot_; \
- clazz->done_slot = done_slot_; \
- \
- clazz->load_glyph = load_glyph_; \
- \
- clazz->get_kerning = get_kerning_; \
- clazz->attach_file = attach_file_; \
- clazz->get_advances = get_advances_; \
- \
- clazz->request_size = request_size_; \
- clazz->select_size = select_size_; \
- \
- *output_class = (FT_Module_Class*)clazz; \
- \
- return FT_Err_Ok; \
- }
-
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-FT_END_HEADER
-
-#endif /* FTDRIVER_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/ftgloadr.h b/include/freetype/internal/ftgloadr.h
deleted file mode 100644
index f41c3df55..000000000
--- a/include/freetype/internal/ftgloadr.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgloadr.h */
-/* */
-/* The FreeType glyph loader (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTGLOADR_H_
-#define FTGLOADR_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_GlyphLoader */
- /* */
- /* <Description> */
- /* The glyph loader is an internal object used to load several glyphs */
- /* together (for example, in the case of composites). */
- /* */
- typedef struct FT_SubGlyphRec_
- {
- FT_Int index;
- FT_UShort flags;
- FT_Int arg1;
- FT_Int arg2;
- FT_Matrix transform;
-
- } FT_SubGlyphRec;
-
-
- typedef struct FT_GlyphLoadRec_
- {
- FT_Outline outline; /* outline */
- FT_Vector* extra_points; /* extra points table */
- FT_Vector* extra_points2; /* second extra points table */
- FT_UInt num_subglyphs; /* number of subglyphs */
- FT_SubGlyph subglyphs; /* subglyphs */
-
- } FT_GlyphLoadRec, *FT_GlyphLoad;
-
-
- typedef struct FT_GlyphLoaderRec_
- {
- FT_Memory memory;
- FT_UInt max_points;
- FT_UInt max_contours;
- FT_UInt max_subglyphs;
- FT_Bool use_extra;
-
- FT_GlyphLoadRec base;
- FT_GlyphLoadRec current;
-
- void* other; /* for possible future extension? */
-
- } FT_GlyphLoaderRec, *FT_GlyphLoader;
-
-
- /* create new empty glyph loader */
- FT_BASE( FT_Error )
- FT_GlyphLoader_New( FT_Memory memory,
- FT_GlyphLoader *aloader );
-
- /* add an extra points table to a glyph loader */
- FT_BASE( FT_Error )
- FT_GlyphLoader_CreateExtra( FT_GlyphLoader loader );
-
- /* destroy a glyph loader */
- FT_BASE( void )
- FT_GlyphLoader_Done( FT_GlyphLoader loader );
-
- /* reset a glyph loader (frees everything int it) */
- FT_BASE( void )
- FT_GlyphLoader_Reset( FT_GlyphLoader loader );
-
- /* rewind a glyph loader */
- FT_BASE( void )
- FT_GlyphLoader_Rewind( FT_GlyphLoader loader );
-
- /* check that there is enough space to add `n_points' and `n_contours' */
- /* to the glyph loader */
- FT_BASE( FT_Error )
- FT_GlyphLoader_CheckPoints( FT_GlyphLoader loader,
- FT_UInt n_points,
- FT_UInt n_contours );
-
-
-#define FT_GLYPHLOADER_CHECK_P( _loader, _count ) \
- ( (_count) == 0 || \
- ( (FT_UInt)(_loader)->base.outline.n_points + \
- (FT_UInt)(_loader)->current.outline.n_points + \
- (FT_UInt)(_count) ) <= (_loader)->max_points )
-
-#define FT_GLYPHLOADER_CHECK_C( _loader, _count ) \
- ( (_count) == 0 || \
- ( (FT_UInt)(_loader)->base.outline.n_contours + \
- (FT_UInt)(_loader)->current.outline.n_contours + \
- (FT_UInt)(_count) ) <= (_loader)->max_contours )
-
-#define FT_GLYPHLOADER_CHECK_POINTS( _loader, _points, _contours ) \
- ( ( FT_GLYPHLOADER_CHECK_P( _loader, _points ) && \
- FT_GLYPHLOADER_CHECK_C( _loader, _contours ) ) \
- ? 0 \
- : FT_GlyphLoader_CheckPoints( (_loader), \
- (FT_UInt)(_points), \
- (FT_UInt)(_contours) ) )
-
-
- /* check that there is enough space to add `n_subs' sub-glyphs to */
- /* a glyph loader */
- FT_BASE( FT_Error )
- FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader loader,
- FT_UInt n_subs );
-
- /* prepare a glyph loader, i.e. empty the current glyph */
- FT_BASE( void )
- FT_GlyphLoader_Prepare( FT_GlyphLoader loader );
-
- /* add the current glyph to the base glyph */
- FT_BASE( void )
- FT_GlyphLoader_Add( FT_GlyphLoader loader );
-
- /* copy points from one glyph loader to another */
- FT_BASE( FT_Error )
- FT_GlyphLoader_CopyPoints( FT_GlyphLoader target,
- FT_GlyphLoader source );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTGLOADR_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/fthash.h b/include/freetype/internal/fthash.h
deleted file mode 100644
index f22f9d5d3..000000000
--- a/include/freetype/internal/fthash.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/***************************************************************************/
-/* */
-/* fthash.h */
-/* */
-/* Hashing functions (specification). */
-/* */
-/***************************************************************************/
-
-/*
- * Copyright 2000 Computing Research Labs, New Mexico State University
- * Copyright 2001-2015
- * Francesco Zappa Nardelli
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
- * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
- /*************************************************************************/
- /* */
- /* This file is based on code from bdf.c,v 1.22 2000/03/16 20:08:50 */
- /* */
- /* taken from Mark Leisher's xmbdfed package */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTHASH_H_
-#define FTHASH_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-
-FT_BEGIN_HEADER
-
-
- typedef union FT_Hashkey_
- {
- FT_Int num;
- const char* str;
-
- } FT_Hashkey;
-
-
- typedef struct FT_HashnodeRec_
- {
- FT_Hashkey key;
- size_t data;
-
- } FT_HashnodeRec;
-
- typedef struct FT_HashnodeRec_ *FT_Hashnode;
-
-
- typedef FT_ULong
- (*FT_Hash_LookupFunc)( FT_Hashkey* key );
-
- typedef FT_Bool
- (*FT_Hash_CompareFunc)( FT_Hashkey* a,
- FT_Hashkey* b );
-
-
- typedef struct FT_HashRec_
- {
- FT_UInt limit;
- FT_UInt size;
- FT_UInt used;
-
- FT_Hash_LookupFunc lookup;
- FT_Hash_CompareFunc compare;
-
- FT_Hashnode* table;
-
- } FT_HashRec;
-
- typedef struct FT_HashRec_ *FT_Hash;
-
-
- FT_Error
- ft_hash_str_init( FT_Hash hash,
- FT_Memory memory );
-
- FT_Error
- ft_hash_num_init( FT_Hash hash,
- FT_Memory memory );
-
- void
- ft_hash_str_free( FT_Hash hash,
- FT_Memory memory );
-
-#define ft_hash_num_free ft_hash_str_free
-
- FT_Error
- ft_hash_str_insert( const char* key,
- size_t data,
- FT_Hash hash,
- FT_Memory memory );
-
- FT_Error
- ft_hash_num_insert( FT_Int num,
- size_t data,
- FT_Hash hash,
- FT_Memory memory );
-
- size_t*
- ft_hash_str_lookup( const char* key,
- FT_Hash hash );
-
- size_t*
- ft_hash_num_lookup( FT_Int num,
- FT_Hash hash );
-
-
-FT_END_HEADER
-
-
-#endif /* FTHASH_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/ftmemory.h b/include/freetype/internal/ftmemory.h
deleted file mode 100644
index 59e5b58a5..000000000
--- a/include/freetype/internal/ftmemory.h
+++ /dev/null
@@ -1,393 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmemory.h */
-/* */
-/* The FreeType memory management macros (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTMEMORY_H_
-#define FTMEMORY_H_
-
-
-#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H
-#include FT_TYPES_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_SET_ERROR */
- /* */
- /* <Description> */
- /* This macro is used to set an implicit `error' variable to a given */
- /* expression's value (usually a function call), and convert it to a */
- /* boolean which is set whenever the value is != 0. */
- /* */
-#undef FT_SET_ERROR
-#define FT_SET_ERROR( expression ) \
- ( ( error = (expression) ) != 0 )
-
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** M E M O R Y ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*
- * C++ refuses to handle statements like p = (void*)anything, with `p' a
- * typed pointer. Since we don't have a `typeof' operator in standard
- * C++, we have to use a template to emulate it.
- */
-
-#ifdef __cplusplus
-
-extern "C++"
-{
- template <typename T> inline T*
- cplusplus_typeof( T*,
- void *v )
- {
- return static_cast <T*> ( v );
- }
-}
-
-#define FT_ASSIGNP( p, val ) (p) = cplusplus_typeof( (p), (val) )
-
-#else
-
-#define FT_ASSIGNP( p, val ) (p) = (val)
-
-#endif
-
-
-
-#ifdef FT_DEBUG_MEMORY
-
- FT_BASE( const char* ) _ft_debug_file;
- FT_BASE( long ) _ft_debug_lineno;
-
-#define FT_DEBUG_INNER( exp ) ( _ft_debug_file = __FILE__, \
- _ft_debug_lineno = __LINE__, \
- (exp) )
-
-#define FT_ASSIGNP_INNER( p, exp ) ( _ft_debug_file = __FILE__, \
- _ft_debug_lineno = __LINE__, \
- FT_ASSIGNP( p, exp ) )
-
-#else /* !FT_DEBUG_MEMORY */
-
-#define FT_DEBUG_INNER( exp ) (exp)
-#define FT_ASSIGNP_INNER( p, exp ) FT_ASSIGNP( p, exp )
-
-#endif /* !FT_DEBUG_MEMORY */
-
-
- /*
- * The allocation functions return a pointer, and the error code
- * is written to through the `p_error' parameter.
- */
-
- /* The `q' variants of the functions below (`q' for `quick') don't fill */
- /* the allocated or reallocated memory with zero bytes. */
-
- FT_BASE( FT_Pointer )
- ft_mem_alloc( FT_Memory memory,
- FT_Long size,
- FT_Error *p_error );
-
- FT_BASE( FT_Pointer )
- ft_mem_qalloc( FT_Memory memory,
- FT_Long size,
- FT_Error *p_error );
-
- FT_BASE( FT_Pointer )
- ft_mem_realloc( FT_Memory memory,
- FT_Long item_size,
- FT_Long cur_count,
- FT_Long new_count,
- void* block,
- FT_Error *p_error );
-
- FT_BASE( FT_Pointer )
- ft_mem_qrealloc( FT_Memory memory,
- FT_Long item_size,
- FT_Long cur_count,
- FT_Long new_count,
- void* block,
- FT_Error *p_error );
-
- FT_BASE( void )
- ft_mem_free( FT_Memory memory,
- const void* P );
-
-
- /* The `Q' variants of the macros below (`Q' for `quick') don't fill */
- /* the allocated or reallocated memory with zero bytes. */
-
-#define FT_MEM_ALLOC( ptr, size ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_alloc( memory, \
- (FT_Long)(size), \
- &error ) )
-
-#define FT_MEM_FREE( ptr ) \
- FT_BEGIN_STMNT \
- ft_mem_free( memory, (ptr) ); \
- (ptr) = NULL; \
- FT_END_STMNT
-
-#define FT_MEM_NEW( ptr ) \
- FT_MEM_ALLOC( ptr, sizeof ( *(ptr) ) )
-
-#define FT_MEM_REALLOC( ptr, cursz, newsz ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, \
- 1, \
- (FT_Long)(cursz), \
- (FT_Long)(newsz), \
- (ptr), \
- &error ) )
-
-#define FT_MEM_QALLOC( ptr, size ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_qalloc( memory, \
- (FT_Long)(size), \
- &error ) )
-
-#define FT_MEM_QNEW( ptr ) \
- FT_MEM_QALLOC( ptr, sizeof ( *(ptr) ) )
-
-#define FT_MEM_QREALLOC( ptr, cursz, newsz ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \
- 1, \
- (FT_Long)(cursz), \
- (FT_Long)(newsz), \
- (ptr), \
- &error ) )
-
-#define FT_MEM_ALLOC_MULT( ptr, count, item_size ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, \
- (FT_Long)(item_size), \
- 0, \
- (FT_Long)(count), \
- NULL, \
- &error ) )
-
-#define FT_MEM_REALLOC_MULT( ptr, oldcnt, newcnt, itmsz ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, \
- (FT_Long)(itmsz), \
- (FT_Long)(oldcnt), \
- (FT_Long)(newcnt), \
- (ptr), \
- &error ) )
-
-#define FT_MEM_QALLOC_MULT( ptr, count, item_size ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \
- (FT_Long)(item_size), \
- 0, \
- (FT_Long)(count), \
- NULL, \
- &error ) )
-
-#define FT_MEM_QREALLOC_MULT( ptr, oldcnt, newcnt, itmsz) \
- FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \
- (FT_Long)(itmsz), \
- (FT_Long)(oldcnt), \
- (FT_Long)(newcnt), \
- (ptr), \
- &error ) )
-
-
-#define FT_MEM_SET_ERROR( cond ) ( (cond), error != 0 )
-
-
-#define FT_MEM_SET( dest, byte, count ) \
- ft_memset( dest, byte, (FT_Offset)(count) )
-
-#define FT_MEM_COPY( dest, source, count ) \
- ft_memcpy( dest, source, (FT_Offset)(count) )
-
-#define FT_MEM_MOVE( dest, source, count ) \
- ft_memmove( dest, source, (FT_Offset)(count) )
-
-
-#define FT_MEM_ZERO( dest, count ) FT_MEM_SET( dest, 0, count )
-
-#define FT_ZERO( p ) FT_MEM_ZERO( p, sizeof ( *(p) ) )
-
-
-#define FT_ARRAY_ZERO( dest, count ) \
- FT_MEM_ZERO( dest, \
- (FT_Offset)(count) * sizeof ( *(dest) ) )
-
-#define FT_ARRAY_COPY( dest, source, count ) \
- FT_MEM_COPY( dest, \
- source, \
- (FT_Offset)(count) * sizeof ( *(dest) ) )
-
-#define FT_ARRAY_MOVE( dest, source, count ) \
- FT_MEM_MOVE( dest, \
- source, \
- (FT_Offset)(count) * sizeof ( *(dest) ) )
-
-
- /*
- * Return the maximum number of addressable elements in an array.
- * We limit ourselves to INT_MAX, rather than UINT_MAX, to avoid
- * any problems.
- */
-#define FT_ARRAY_MAX( ptr ) ( FT_INT_MAX / sizeof ( *(ptr) ) )
-
-#define FT_ARRAY_CHECK( ptr, count ) ( (count) <= FT_ARRAY_MAX( ptr ) )
-
-
- /*************************************************************************/
- /* */
- /* The following functions macros expect that their pointer argument is */
- /* _typed_ in order to automatically compute array element sizes. */
- /* */
-
-#define FT_MEM_NEW_ARRAY( ptr, count ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, \
- sizeof ( *(ptr) ), \
- 0, \
- (FT_Long)(count), \
- NULL, \
- &error ) )
-
-#define FT_MEM_RENEW_ARRAY( ptr, cursz, newsz ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, \
- sizeof ( *(ptr) ), \
- (FT_Long)(cursz), \
- (FT_Long)(newsz), \
- (ptr), \
- &error ) )
-
-#define FT_MEM_QNEW_ARRAY( ptr, count ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \
- sizeof ( *(ptr) ), \
- 0, \
- (FT_Long)(count), \
- NULL, \
- &error ) )
-
-#define FT_MEM_QRENEW_ARRAY( ptr, cursz, newsz ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \
- sizeof ( *(ptr) ), \
- (FT_Long)(cursz), \
- (FT_Long)(newsz), \
- (ptr), \
- &error ) )
-
-#define FT_ALLOC( ptr, size ) \
- FT_MEM_SET_ERROR( FT_MEM_ALLOC( ptr, size ) )
-
-#define FT_REALLOC( ptr, cursz, newsz ) \
- FT_MEM_SET_ERROR( FT_MEM_REALLOC( ptr, cursz, newsz ) )
-
-#define FT_ALLOC_MULT( ptr, count, item_size ) \
- FT_MEM_SET_ERROR( FT_MEM_ALLOC_MULT( ptr, count, item_size ) )
-
-#define FT_REALLOC_MULT( ptr, oldcnt, newcnt, itmsz ) \
- FT_MEM_SET_ERROR( FT_MEM_REALLOC_MULT( ptr, oldcnt, \
- newcnt, itmsz ) )
-
-#define FT_QALLOC( ptr, size ) \
- FT_MEM_SET_ERROR( FT_MEM_QALLOC( ptr, size ) )
-
-#define FT_QREALLOC( ptr, cursz, newsz ) \
- FT_MEM_SET_ERROR( FT_MEM_QREALLOC( ptr, cursz, newsz ) )
-
-#define FT_QALLOC_MULT( ptr, count, item_size ) \
- FT_MEM_SET_ERROR( FT_MEM_QALLOC_MULT( ptr, count, item_size ) )
-
-#define FT_QREALLOC_MULT( ptr, oldcnt, newcnt, itmsz ) \
- FT_MEM_SET_ERROR( FT_MEM_QREALLOC_MULT( ptr, oldcnt, \
- newcnt, itmsz ) )
-
-#define FT_FREE( ptr ) FT_MEM_FREE( ptr )
-
-#define FT_NEW( ptr ) FT_MEM_SET_ERROR( FT_MEM_NEW( ptr ) )
-
-#define FT_NEW_ARRAY( ptr, count ) \
- FT_MEM_SET_ERROR( FT_MEM_NEW_ARRAY( ptr, count ) )
-
-#define FT_RENEW_ARRAY( ptr, curcnt, newcnt ) \
- FT_MEM_SET_ERROR( FT_MEM_RENEW_ARRAY( ptr, curcnt, newcnt ) )
-
-#define FT_QNEW( ptr ) \
- FT_MEM_SET_ERROR( FT_MEM_QNEW( ptr ) )
-
-#define FT_QNEW_ARRAY( ptr, count ) \
- FT_MEM_SET_ERROR( FT_MEM_NEW_ARRAY( ptr, count ) )
-
-#define FT_QRENEW_ARRAY( ptr, curcnt, newcnt ) \
- FT_MEM_SET_ERROR( FT_MEM_RENEW_ARRAY( ptr, curcnt, newcnt ) )
-
-
- FT_BASE( FT_Pointer )
- ft_mem_strdup( FT_Memory memory,
- const char* str,
- FT_Error *p_error );
-
- FT_BASE( FT_Pointer )
- ft_mem_dup( FT_Memory memory,
- const void* address,
- FT_ULong size,
- FT_Error *p_error );
-
-
-#define FT_MEM_STRDUP( dst, str ) \
- (dst) = (char*)ft_mem_strdup( memory, (const char*)(str), &error )
-
-#define FT_STRDUP( dst, str ) \
- FT_MEM_SET_ERROR( FT_MEM_STRDUP( dst, str ) )
-
-#define FT_MEM_DUP( dst, address, size ) \
- (dst) = ft_mem_dup( memory, (address), (FT_ULong)(size), &error )
-
-#define FT_DUP( dst, address, size ) \
- FT_MEM_SET_ERROR( FT_MEM_DUP( dst, address, size ) )
-
-
- /* Return >= 1 if a truncation occurs. */
- /* Return 0 if the source string fits the buffer. */
- /* This is *not* the same as strlcpy(). */
- FT_BASE( FT_Int )
- ft_mem_strcpyn( char* dst,
- const char* src,
- FT_ULong size );
-
-#define FT_STRCPYN( dst, src, size ) \
- ft_mem_strcpyn( (char*)dst, (const char*)(src), (FT_ULong)(size) )
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* FTMEMORY_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/ftobjs.h b/include/freetype/internal/ftobjs.h
deleted file mode 100644
index 4231be238..000000000
--- a/include/freetype/internal/ftobjs.h
+++ /dev/null
@@ -1,1610 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftobjs.h */
-/* */
-/* The FreeType private base classes (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file contains the definition of all internal FreeType classes. */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTOBJS_H_
-#define FTOBJS_H_
-
-#include <ft2build.h>
-#include FT_RENDER_H
-#include FT_SIZES_H
-#include FT_LCD_FILTER_H
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_GLYPH_LOADER_H
-#include FT_INTERNAL_DRIVER_H
-#include FT_INTERNAL_AUTOHINT_H
-#include FT_INTERNAL_SERVICE_H
-#include FT_INTERNAL_PIC_H
-#include FT_INTERNAL_CALC_H
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
-#include FT_INCREMENTAL_H
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* Some generic definitions. */
- /* */
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#ifndef NULL
-#define NULL (void*)0
-#endif
-
-
- /*************************************************************************/
- /* */
- /* The min and max functions missing in C. As usual, be careful not to */
- /* write things like FT_MIN( a++, b++ ) to avoid side effects. */
- /* */
-#define FT_MIN( a, b ) ( (a) < (b) ? (a) : (b) )
-#define FT_MAX( a, b ) ( (a) > (b) ? (a) : (b) )
-
-#define FT_ABS( a ) ( (a) < 0 ? -(a) : (a) )
-
- /*
- * Approximate sqrt(x*x+y*y) using the `alpha max plus beta min'
- * algorithm. We use alpha = 1, beta = 3/8, giving us results with a
- * largest error less than 7% compared to the exact value.
- */
-#define FT_HYPOT( x, y ) \
- ( x = FT_ABS( x ), \
- y = FT_ABS( y ), \
- x > y ? x + ( 3 * y >> 3 ) \
- : y + ( 3 * x >> 3 ) )
-
- /* we use FT_TYPEOF to suppress signedness compilation warnings */
-#define FT_PAD_FLOOR( x, n ) ( (x) & ~FT_TYPEOF( x )( (n)-1 ) )
-#define FT_PAD_ROUND( x, n ) FT_PAD_FLOOR( (x) + (n)/2, n )
-#define FT_PAD_CEIL( x, n ) FT_PAD_FLOOR( (x) + (n)-1, n )
-
-#define FT_PIX_FLOOR( x ) ( (x) & ~FT_TYPEOF( x )63 )
-#define FT_PIX_ROUND( x ) FT_PIX_FLOOR( (x) + 32 )
-#define FT_PIX_CEIL( x ) FT_PIX_FLOOR( (x) + 63 )
-
- /* specialized versions (for signed values) */
- /* that don't produce run-time errors due to integer overflow */
-#define FT_PAD_ROUND_LONG( x, n ) FT_PAD_FLOOR( ADD_LONG( (x), (n) / 2 ), \
- n )
-#define FT_PAD_CEIL_LONG( x, n ) FT_PAD_FLOOR( ADD_LONG( (x), (n) - 1 ), \
- n )
-#define FT_PIX_ROUND_LONG( x ) FT_PIX_FLOOR( ADD_LONG( (x), 32 ) )
-#define FT_PIX_CEIL_LONG( x ) FT_PIX_FLOOR( ADD_LONG( (x), 63 ) )
-
-#define FT_PAD_ROUND_INT32( x, n ) FT_PAD_FLOOR( ADD_INT32( (x), (n) / 2 ), \
- n )
-#define FT_PAD_CEIL_INT32( x, n ) FT_PAD_FLOOR( ADD_INT32( (x), (n) - 1 ), \
- n )
-#define FT_PIX_ROUND_INT32( x ) FT_PIX_FLOOR( ADD_INT32( (x), 32 ) )
-#define FT_PIX_CEIL_INT32( x ) FT_PIX_FLOOR( ADD_INT32( (x), 63 ) )
-
-
- /*
- * character classification functions -- since these are used to parse
- * font files, we must not use those in <ctypes.h> which are
- * locale-dependent
- */
-#define ft_isdigit( x ) ( ( (unsigned)(x) - '0' ) < 10U )
-
-#define ft_isxdigit( x ) ( ( (unsigned)(x) - '0' ) < 10U || \
- ( (unsigned)(x) - 'a' ) < 6U || \
- ( (unsigned)(x) - 'A' ) < 6U )
-
- /* the next two macros assume ASCII representation */
-#define ft_isupper( x ) ( ( (unsigned)(x) - 'A' ) < 26U )
-#define ft_islower( x ) ( ( (unsigned)(x) - 'a' ) < 26U )
-
-#define ft_isalpha( x ) ( ft_isupper( x ) || ft_islower( x ) )
-#define ft_isalnum( x ) ( ft_isdigit( x ) || ft_isalpha( x ) )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** C H A R M A P S ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- /* handle to internal charmap object */
- typedef struct FT_CMapRec_* FT_CMap;
-
- /* handle to charmap class structure */
- typedef const struct FT_CMap_ClassRec_* FT_CMap_Class;
-
- /* internal charmap object structure */
- typedef struct FT_CMapRec_
- {
- FT_CharMapRec charmap;
- FT_CMap_Class clazz;
-
- } FT_CMapRec;
-
- /* typecase any pointer to a charmap handle */
-#define FT_CMAP( x ) ((FT_CMap)( x ))
-
- /* obvious macros */
-#define FT_CMAP_PLATFORM_ID( x ) FT_CMAP( x )->charmap.platform_id
-#define FT_CMAP_ENCODING_ID( x ) FT_CMAP( x )->charmap.encoding_id
-#define FT_CMAP_ENCODING( x ) FT_CMAP( x )->charmap.encoding
-#define FT_CMAP_FACE( x ) FT_CMAP( x )->charmap.face
-
-
- /* class method definitions */
- typedef FT_Error
- (*FT_CMap_InitFunc)( FT_CMap cmap,
- FT_Pointer init_data );
-
- typedef void
- (*FT_CMap_DoneFunc)( FT_CMap cmap );
-
- typedef FT_UInt
- (*FT_CMap_CharIndexFunc)( FT_CMap cmap,
- FT_UInt32 char_code );
-
- typedef FT_UInt
- (*FT_CMap_CharNextFunc)( FT_CMap cmap,
- FT_UInt32 *achar_code );
-
- typedef FT_UInt
- (*FT_CMap_CharVarIndexFunc)( FT_CMap cmap,
- FT_CMap unicode_cmap,
- FT_UInt32 char_code,
- FT_UInt32 variant_selector );
-
- typedef FT_Bool
- (*FT_CMap_CharVarIsDefaultFunc)( FT_CMap cmap,
- FT_UInt32 char_code,
- FT_UInt32 variant_selector );
-
- typedef FT_UInt32 *
- (*FT_CMap_VariantListFunc)( FT_CMap cmap,
- FT_Memory mem );
-
- typedef FT_UInt32 *
- (*FT_CMap_CharVariantListFunc)( FT_CMap cmap,
- FT_Memory mem,
- FT_UInt32 char_code );
-
- typedef FT_UInt32 *
- (*FT_CMap_VariantCharListFunc)( FT_CMap cmap,
- FT_Memory mem,
- FT_UInt32 variant_selector );
-
-
- typedef struct FT_CMap_ClassRec_
- {
- FT_ULong size;
-
- FT_CMap_InitFunc init;
- FT_CMap_DoneFunc done;
- FT_CMap_CharIndexFunc char_index;
- FT_CMap_CharNextFunc char_next;
-
- /* Subsequent entries are special ones for format 14 -- the variant */
- /* selector subtable which behaves like no other */
-
- FT_CMap_CharVarIndexFunc char_var_index;
- FT_CMap_CharVarIsDefaultFunc char_var_default;
- FT_CMap_VariantListFunc variant_list;
- FT_CMap_CharVariantListFunc charvariant_list;
- FT_CMap_VariantCharListFunc variantchar_list;
-
- } FT_CMap_ClassRec;
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DECLARE_CMAP_CLASS( class_ ) \
- FT_CALLBACK_TABLE const FT_CMap_ClassRec class_;
-
-#define FT_DEFINE_CMAP_CLASS( \
- class_, \
- size_, \
- init_, \
- done_, \
- char_index_, \
- char_next_, \
- char_var_index_, \
- char_var_default_, \
- variant_list_, \
- charvariant_list_, \
- variantchar_list_ ) \
- FT_CALLBACK_TABLE_DEF \
- const FT_CMap_ClassRec class_ = \
- { \
- size_, \
- init_, \
- done_, \
- char_index_, \
- char_next_, \
- char_var_index_, \
- char_var_default_, \
- variant_list_, \
- charvariant_list_, \
- variantchar_list_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DECLARE_CMAP_CLASS( class_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_CMap_ClassRec* clazz );
-
-#define FT_DEFINE_CMAP_CLASS( \
- class_, \
- size_, \
- init_, \
- done_, \
- char_index_, \
- char_next_, \
- char_var_index_, \
- char_var_default_, \
- variant_list_, \
- charvariant_list_, \
- variantchar_list_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_CMap_ClassRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->size = size_; \
- clazz->init = init_; \
- clazz->done = done_; \
- clazz->char_index = char_index_; \
- clazz->char_next = char_next_; \
- clazz->char_var_index = char_var_index_; \
- clazz->char_var_default = char_var_default_; \
- clazz->variant_list = variant_list_; \
- clazz->charvariant_list = charvariant_list_; \
- clazz->variantchar_list = variantchar_list_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
- /* create a new charmap and add it to charmap->face */
- FT_BASE( FT_Error )
- FT_CMap_New( FT_CMap_Class clazz,
- FT_Pointer init_data,
- FT_CharMap charmap,
- FT_CMap *acmap );
-
- /* destroy a charmap and remove it from face's list */
- FT_BASE( void )
- FT_CMap_Done( FT_CMap cmap );
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Face_InternalRec */
- /* */
- /* <Description> */
- /* This structure contains the internal fields of each FT_Face */
- /* object. These fields may change between different releases of */
- /* FreeType. */
- /* */
- /* <Fields> */
- /* max_points :: */
- /* The maximum number of points used to store the vectorial outline */
- /* of any glyph in this face. If this value cannot be known in */
- /* advance, or if the face isn't scalable, this should be set to 0. */
- /* Only relevant for scalable formats. */
- /* */
- /* max_contours :: */
- /* The maximum number of contours used to store the vectorial */
- /* outline of any glyph in this face. If this value cannot be */
- /* known in advance, or if the face isn't scalable, this should be */
- /* set to 0. Only relevant for scalable formats. */
- /* */
- /* transform_matrix :: */
- /* A 2x2 matrix of 16.16 coefficients used to transform glyph */
- /* outlines after they are loaded from the font. Only used by the */
- /* convenience functions. */
- /* */
- /* transform_delta :: */
- /* A translation vector used to transform glyph outlines after they */
- /* are loaded from the font. Only used by the convenience */
- /* functions. */
- /* */
- /* transform_flags :: */
- /* Some flags used to classify the transform. Only used by the */
- /* convenience functions. */
- /* */
- /* services :: */
- /* A cache for frequently used services. It should be only */
- /* accessed with the macro `FT_FACE_LOOKUP_SERVICE'. */
- /* */
- /* incremental_interface :: */
- /* If non-null, the interface through which glyph data and metrics */
- /* are loaded incrementally for faces that do not provide all of */
- /* this data when first opened. This field exists only if */
- /* @FT_CONFIG_OPTION_INCREMENTAL is defined. */
- /* */
- /* no_stem_darkening :: */
- /* Overrides the module-level default, see @stem-darkening[cff], */
- /* for example. FALSE and TRUE toggle stem darkening on and off, */
- /* respectively, value~-1 means to use the module/driver default. */
- /* */
- /* random_seed :: */
- /* If positive, override the seed value for the CFF `random' */
- /* operator. Value~0 means to use the font's value. Value~-1 */
- /* means to use the CFF driver's default. */
- /* */
- /* lcd_weights :: */
- /* Overrides the library default with custom weights for the 5-tap */
- /* FIR filter. `{0, 0, 0, 0, 0}' means to use the library default. */
- /* */
- /* refcount :: */
- /* A counter initialized to~1 at the time an @FT_Face structure is */
- /* created. @FT_Reference_Face increments this counter, and */
- /* @FT_Done_Face only destroys a face if the counter is~1, */
- /* otherwise it simply decrements it. */
- /* */
- typedef struct FT_Face_InternalRec_
- {
- FT_Matrix transform_matrix;
- FT_Vector transform_delta;
- FT_Int transform_flags;
-
- FT_ServiceCacheRec services;
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- FT_Incremental_InterfaceRec* incremental_interface;
-#endif
-
- FT_Char no_stem_darkening;
- FT_Int32 random_seed;
-#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
- FT_LcdFiveTapFilter lcd_weights; /* preset or custom filter weights */
-#endif
-
- FT_Int refcount;
-
- } FT_Face_InternalRec;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Slot_InternalRec */
- /* */
- /* <Description> */
- /* This structure contains the internal fields of each FT_GlyphSlot */
- /* object. These fields may change between different releases of */
- /* FreeType. */
- /* */
- /* <Fields> */
- /* loader :: The glyph loader object used to load outlines */
- /* into the glyph slot. */
- /* */
- /* flags :: Possible values are zero or */
- /* FT_GLYPH_OWN_BITMAP. The latter indicates */
- /* that the FT_GlyphSlot structure owns the */
- /* bitmap buffer. */
- /* */
- /* glyph_transformed :: Boolean. Set to TRUE when the loaded glyph */
- /* must be transformed through a specific */
- /* font transformation. This is _not_ the same */
- /* as the face transform set through */
- /* FT_Set_Transform(). */
- /* */
- /* glyph_matrix :: The 2x2 matrix corresponding to the glyph */
- /* transformation, if necessary. */
- /* */
- /* glyph_delta :: The 2d translation vector corresponding to */
- /* the glyph transformation, if necessary. */
- /* */
- /* glyph_hints :: Format-specific glyph hints management. */
- /* */
-
-#define FT_GLYPH_OWN_BITMAP 0x1U
-
- typedef struct FT_Slot_InternalRec_
- {
- FT_GlyphLoader loader;
- FT_UInt flags;
- FT_Bool glyph_transformed;
- FT_Matrix glyph_matrix;
- FT_Vector glyph_delta;
- void* glyph_hints;
-
- } FT_GlyphSlot_InternalRec;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Size_InternalRec */
- /* */
- /* <Description> */
- /* This structure contains the internal fields of each FT_Size */
- /* object. */
- /* */
- /* <Fields> */
- /* module_data :: Data specific to a driver module. */
- /* */
- /* autohint_mode :: The used auto-hinting mode. */
- /* */
- /* autohint_metrics :: Metrics used by the auto-hinter. */
- /* */
- /*************************************************************************/
-
- typedef struct FT_Size_InternalRec_
- {
- void* module_data;
-
- FT_Render_Mode autohint_mode;
- FT_Size_Metrics autohint_metrics;
-
- } FT_Size_InternalRec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** M O D U L E S ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_ModuleRec */
- /* */
- /* <Description> */
- /* A module object instance. */
- /* */
- /* <Fields> */
- /* clazz :: A pointer to the module's class. */
- /* */
- /* library :: A handle to the parent library object. */
- /* */
- /* memory :: A handle to the memory manager. */
- /* */
- typedef struct FT_ModuleRec_
- {
- FT_Module_Class* clazz;
- FT_Library library;
- FT_Memory memory;
-
- } FT_ModuleRec;
-
-
- /* typecast an object to an FT_Module */
-#define FT_MODULE( x ) ((FT_Module)( x ))
-#define FT_MODULE_CLASS( x ) FT_MODULE( x )->clazz
-#define FT_MODULE_LIBRARY( x ) FT_MODULE( x )->library
-#define FT_MODULE_MEMORY( x ) FT_MODULE( x )->memory
-
-
-#define FT_MODULE_IS_DRIVER( x ) ( FT_MODULE_CLASS( x )->module_flags & \
- FT_MODULE_FONT_DRIVER )
-
-#define FT_MODULE_IS_RENDERER( x ) ( FT_MODULE_CLASS( x )->module_flags & \
- FT_MODULE_RENDERER )
-
-#define FT_MODULE_IS_HINTER( x ) ( FT_MODULE_CLASS( x )->module_flags & \
- FT_MODULE_HINTER )
-
-#define FT_MODULE_IS_STYLER( x ) ( FT_MODULE_CLASS( x )->module_flags & \
- FT_MODULE_STYLER )
-
-#define FT_DRIVER_IS_SCALABLE( x ) ( FT_MODULE_CLASS( x )->module_flags & \
- FT_MODULE_DRIVER_SCALABLE )
-
-#define FT_DRIVER_USES_OUTLINES( x ) !( FT_MODULE_CLASS( x )->module_flags & \
- FT_MODULE_DRIVER_NO_OUTLINES )
-
-#define FT_DRIVER_HAS_HINTER( x ) ( FT_MODULE_CLASS( x )->module_flags & \
- FT_MODULE_DRIVER_HAS_HINTER )
-
-#define FT_DRIVER_HINTS_LIGHTLY( x ) ( FT_MODULE_CLASS( x )->module_flags & \
- FT_MODULE_DRIVER_HINTS_LIGHTLY )
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Module_Interface */
- /* */
- /* <Description> */
- /* Finds a module and returns its specific interface as a typeless */
- /* pointer. */
- /* */
- /* <Input> */
- /* library :: A handle to the library object. */
- /* */
- /* module_name :: The module's name (as an ASCII string). */
- /* */
- /* <Return> */
- /* A module-specific interface if available, 0 otherwise. */
- /* */
- /* <Note> */
- /* You should better be familiar with FreeType internals to know */
- /* which module to look for, and what its interface is :-) */
- /* */
- FT_BASE( const void* )
- FT_Get_Module_Interface( FT_Library library,
- const char* mod_name );
-
- FT_BASE( FT_Pointer )
- ft_module_get_service( FT_Module module,
- const char* service_id,
- FT_Bool global );
-
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- FT_BASE( FT_Error )
- ft_property_string_set( FT_Library library,
- const FT_String* module_name,
- const FT_String* property_name,
- FT_String* value );
-#endif
-
- /* */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** F A C E, S I Z E & G L Y P H S L O T O B J E C T S ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- /* a few macros used to perform easy typecasts with minimal brain damage */
-
-#define FT_FACE( x ) ((FT_Face)(x))
-#define FT_SIZE( x ) ((FT_Size)(x))
-#define FT_SLOT( x ) ((FT_GlyphSlot)(x))
-
-#define FT_FACE_DRIVER( x ) FT_FACE( x )->driver
-#define FT_FACE_LIBRARY( x ) FT_FACE_DRIVER( x )->root.library
-#define FT_FACE_MEMORY( x ) FT_FACE( x )->memory
-#define FT_FACE_STREAM( x ) FT_FACE( x )->stream
-
-#define FT_SIZE_FACE( x ) FT_SIZE( x )->face
-#define FT_SLOT_FACE( x ) FT_SLOT( x )->face
-
-#define FT_FACE_SLOT( x ) FT_FACE( x )->glyph
-#define FT_FACE_SIZE( x ) FT_FACE( x )->size
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_GlyphSlot */
- /* */
- /* <Description> */
- /* It is sometimes useful to have more than one glyph slot for a */
- /* given face object. This function is used to create additional */
- /* slots. All of them are automatically discarded when the face is */
- /* destroyed. */
- /* */
- /* <Input> */
- /* face :: A handle to a parent face object. */
- /* */
- /* <Output> */
- /* aslot :: A handle to a new glyph slot object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_BASE( FT_Error )
- FT_New_GlyphSlot( FT_Face face,
- FT_GlyphSlot *aslot );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Done_GlyphSlot */
- /* */
- /* <Description> */
- /* Destroys a given glyph slot. Remember however that all slots are */
- /* automatically destroyed with its parent. Using this function is */
- /* not always mandatory. */
- /* */
- /* <Input> */
- /* slot :: A handle to a target glyph slot. */
- /* */
- FT_BASE( void )
- FT_Done_GlyphSlot( FT_GlyphSlot slot );
-
- /* */
-
-#define FT_REQUEST_WIDTH( req ) \
- ( (req)->horiResolution \
- ? ( (req)->width * (FT_Pos)(req)->horiResolution + 36 ) / 72 \
- : (req)->width )
-
-#define FT_REQUEST_HEIGHT( req ) \
- ( (req)->vertResolution \
- ? ( (req)->height * (FT_Pos)(req)->vertResolution + 36 ) / 72 \
- : (req)->height )
-
-
- /* Set the metrics according to a bitmap strike. */
- FT_BASE( void )
- FT_Select_Metrics( FT_Face face,
- FT_ULong strike_index );
-
-
- /* Set the metrics according to a size request. */
- FT_BASE( void )
- FT_Request_Metrics( FT_Face face,
- FT_Size_Request req );
-
-
- /* Match a size request against `available_sizes'. */
- FT_BASE( FT_Error )
- FT_Match_Size( FT_Face face,
- FT_Size_Request req,
- FT_Bool ignore_width,
- FT_ULong* size_index );
-
-
- /* Use the horizontal metrics to synthesize the vertical metrics. */
- /* If `advance' is zero, it is also synthesized. */
- FT_BASE( void )
- ft_synthesize_vertical_metrics( FT_Glyph_Metrics* metrics,
- FT_Pos advance );
-
-
- /* Free the bitmap of a given glyphslot when needed (i.e., only when it */
- /* was allocated with ft_glyphslot_alloc_bitmap). */
- FT_BASE( void )
- ft_glyphslot_free_bitmap( FT_GlyphSlot slot );
-
-
- /* Allocate a new bitmap buffer in a glyph slot. */
- FT_BASE( FT_Error )
- ft_glyphslot_alloc_bitmap( FT_GlyphSlot slot,
- FT_ULong size );
-
-
- /* Set the bitmap buffer in a glyph slot to a given pointer. The buffer */
- /* will not be freed by a later call to ft_glyphslot_free_bitmap. */
- FT_BASE( void )
- ft_glyphslot_set_bitmap( FT_GlyphSlot slot,
- FT_Byte* buffer );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** R E N D E R E R S ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
-#define FT_RENDERER( x ) ((FT_Renderer)( x ))
-#define FT_GLYPH( x ) ((FT_Glyph)( x ))
-#define FT_BITMAP_GLYPH( x ) ((FT_BitmapGlyph)( x ))
-#define FT_OUTLINE_GLYPH( x ) ((FT_OutlineGlyph)( x ))
-
-
- typedef struct FT_RendererRec_
- {
- FT_ModuleRec root;
- FT_Renderer_Class* clazz;
- FT_Glyph_Format glyph_format;
- FT_Glyph_Class glyph_class;
-
- FT_Raster raster;
- FT_Raster_Render_Func raster_render;
- FT_Renderer_RenderFunc render;
-
- } FT_RendererRec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** F O N T D R I V E R S ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* typecast a module into a driver easily */
-#define FT_DRIVER( x ) ((FT_Driver)(x))
-
- /* typecast a module as a driver, and get its driver class */
-#define FT_DRIVER_CLASS( x ) FT_DRIVER( x )->clazz
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_DriverRec */
- /* */
- /* <Description> */
- /* The root font driver class. A font driver is responsible for */
- /* managing and loading font files of a given format. */
- /* */
- /* <Fields> */
- /* root :: Contains the fields of the root module class. */
- /* */
- /* clazz :: A pointer to the font driver's class. Note that */
- /* this is NOT root.clazz. `class' wasn't used */
- /* as it is a reserved word in C++. */
- /* */
- /* faces_list :: The list of faces currently opened by this */
- /* driver. */
- /* */
- /* glyph_loader :: Unused. Used to be glyph loader for all faces */
- /* managed by this driver. */
- /* */
- typedef struct FT_DriverRec_
- {
- FT_ModuleRec root;
- FT_Driver_Class clazz;
- FT_ListRec faces_list;
- FT_GlyphLoader glyph_loader;
-
- } FT_DriverRec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** L I B R A R I E S ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* This hook is used by the TrueType debugger. It must be set to an */
- /* alternate truetype bytecode interpreter function. */
-#define FT_DEBUG_HOOK_TRUETYPE 0
-
-
- typedef void (*FT_Bitmap_LcdFilterFunc)( FT_Bitmap* bitmap,
- FT_Render_Mode render_mode,
- FT_Byte* weights );
-
-
- /* This is the default LCD filter, an in-place, 5-tap FIR filter. */
- FT_BASE( void )
- ft_lcd_filter_fir( FT_Bitmap* bitmap,
- FT_Render_Mode mode,
- FT_LcdFiveTapFilter weights );
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_LibraryRec */
- /* */
- /* <Description> */
- /* The FreeType library class. This is the root of all FreeType */
- /* data. Use FT_New_Library() to create a library object, and */
- /* FT_Done_Library() to discard it and all child objects. */
- /* */
- /* <Fields> */
- /* memory :: The library's memory object. Manages memory */
- /* allocation. */
- /* */
- /* version_major :: The major version number of the library. */
- /* */
- /* version_minor :: The minor version number of the library. */
- /* */
- /* version_patch :: The current patch level of the library. */
- /* */
- /* num_modules :: The number of modules currently registered */
- /* within this library. This is set to 0 for new */
- /* libraries. New modules are added through the */
- /* FT_Add_Module() API function. */
- /* */
- /* modules :: A table used to store handles to the currently */
- /* registered modules. Note that each font driver */
- /* contains a list of its opened faces. */
- /* */
- /* renderers :: The list of renderers currently registered */
- /* within the library. */
- /* */
- /* cur_renderer :: The current outline renderer. This is a */
- /* shortcut used to avoid parsing the list on */
- /* each call to FT_Outline_Render(). It is a */
- /* handle to the current renderer for the */
- /* FT_GLYPH_FORMAT_OUTLINE format. */
- /* */
- /* auto_hinter :: The auto-hinter module interface. */
- /* */
- /* debug_hooks :: An array of four function pointers that allow */
- /* debuggers to hook into a font format's */
- /* interpreter. Currently, only the TrueType */
- /* bytecode debugger uses this. */
- /* */
- /* lcd_filter :: If subpixel rendering is activated, the */
- /* selected LCD filter mode. */
- /* */
- /* lcd_weights :: If subpixel rendering is activated, the LCD */
- /* filter weights, if any. */
- /* */
- /* lcd_filter_func :: If subpixel rendering is activated, the LCD */
- /* filtering callback function. */
- /* */
- /* pic_container :: Contains global structs and tables, instead */
- /* of defining them globally. */
- /* */
- /* refcount :: A counter initialized to~1 at the time an */
- /* @FT_Library structure is created. */
- /* @FT_Reference_Library increments this counter, */
- /* and @FT_Done_Library only destroys a library */
- /* if the counter is~1, otherwise it simply */
- /* decrements it. */
- /* */
- typedef struct FT_LibraryRec_
- {
- FT_Memory memory; /* library's memory manager */
-
- FT_Int version_major;
- FT_Int version_minor;
- FT_Int version_patch;
-
- FT_UInt num_modules;
- FT_Module modules[FT_MAX_MODULES]; /* module objects */
-
- FT_ListRec renderers; /* list of renderers */
- FT_Renderer cur_renderer; /* current outline renderer */
- FT_Module auto_hinter;
-
- FT_DebugHook_Func debug_hooks[4];
-
-#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
- FT_LcdFilter lcd_filter;
- FT_LcdFiveTapFilter lcd_weights; /* filter weights, if any */
- FT_Bitmap_LcdFilterFunc lcd_filter_func; /* filtering callback */
-#endif
-
-#ifdef FT_CONFIG_OPTION_PIC
- FT_PIC_Container pic_container;
-#endif
-
- FT_Int refcount;
-
- } FT_LibraryRec;
-
-
- FT_BASE( FT_Renderer )
- FT_Lookup_Renderer( FT_Library library,
- FT_Glyph_Format format,
- FT_ListNode* node );
-
- FT_BASE( FT_Error )
- FT_Render_Glyph_Internal( FT_Library library,
- FT_GlyphSlot slot,
- FT_Render_Mode render_mode );
-
- typedef const char*
- (*FT_Face_GetPostscriptNameFunc)( FT_Face face );
-
- typedef FT_Error
- (*FT_Face_GetGlyphNameFunc)( FT_Face face,
- FT_UInt glyph_index,
- FT_Pointer buffer,
- FT_UInt buffer_max );
-
- typedef FT_UInt
- (*FT_Face_GetGlyphNameIndexFunc)( FT_Face face,
- FT_String* glyph_name );
-
-
-#ifndef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Memory */
- /* */
- /* <Description> */
- /* Creates a new memory object. */
- /* */
- /* <Return> */
- /* A pointer to the new memory object. 0 in case of error. */
- /* */
- FT_BASE( FT_Memory )
- FT_New_Memory( void );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Done_Memory */
- /* */
- /* <Description> */
- /* Discards memory manager. */
- /* */
- /* <Input> */
- /* memory :: A handle to the memory manager. */
- /* */
- FT_BASE( void )
- FT_Done_Memory( FT_Memory memory );
-
-#endif /* !FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM */
-
-
- /* Define default raster's interface. The default raster is located in */
- /* `src/base/ftraster.c'. */
- /* */
- /* Client applications can register new rasters through the */
- /* FT_Set_Raster() API. */
-
-#ifndef FT_NO_DEFAULT_RASTER
- FT_EXPORT_VAR( FT_Raster_Funcs ) ft_default_raster;
-#endif
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** P I C S U P P O R T ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* PIC support macros for ftimage.h */
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_DEFINE_OUTLINE_FUNCS */
- /* */
- /* <Description> */
- /* Used to initialize an instance of FT_Outline_Funcs struct. */
- /* When FT_CONFIG_OPTION_PIC is defined an init function will need */
- /* to be called with a pre-allocated structure to be filled. */
- /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
- /* allocated in the global scope (or the scope where the macro */
- /* is used). */
- /* */
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_OUTLINE_FUNCS( \
- class_, \
- move_to_, \
- line_to_, \
- conic_to_, \
- cubic_to_, \
- shift_, \
- delta_ ) \
- static const FT_Outline_Funcs class_ = \
- { \
- move_to_, \
- line_to_, \
- conic_to_, \
- cubic_to_, \
- shift_, \
- delta_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_OUTLINE_FUNCS( \
- class_, \
- move_to_, \
- line_to_, \
- conic_to_, \
- cubic_to_, \
- shift_, \
- delta_ ) \
- static FT_Error \
- Init_Class_ ## class_( FT_Outline_Funcs* clazz ) \
- { \
- clazz->move_to = move_to_; \
- clazz->line_to = line_to_; \
- clazz->conic_to = conic_to_; \
- clazz->cubic_to = cubic_to_; \
- clazz->shift = shift_; \
- clazz->delta = delta_; \
- \
- return FT_Err_Ok; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_DEFINE_RASTER_FUNCS */
- /* */
- /* <Description> */
- /* Used to initialize an instance of FT_Raster_Funcs struct. */
- /* When FT_CONFIG_OPTION_PIC is defined an init function will need */
- /* to be called with a pre-allocated structure to be filled. */
- /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
- /* allocated in the global scope (or the scope where the macro */
- /* is used). */
- /* */
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_RASTER_FUNCS( \
- class_, \
- glyph_format_, \
- raster_new_, \
- raster_reset_, \
- raster_set_mode_, \
- raster_render_, \
- raster_done_ ) \
- const FT_Raster_Funcs class_ = \
- { \
- glyph_format_, \
- raster_new_, \
- raster_reset_, \
- raster_set_mode_, \
- raster_render_, \
- raster_done_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_RASTER_FUNCS( \
- class_, \
- glyph_format_, \
- raster_new_, \
- raster_reset_, \
- raster_set_mode_, \
- raster_render_, \
- raster_done_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Raster_Funcs* clazz ) \
- { \
- clazz->glyph_format = glyph_format_; \
- clazz->raster_new = raster_new_; \
- clazz->raster_reset = raster_reset_; \
- clazz->raster_set_mode = raster_set_mode_; \
- clazz->raster_render = raster_render_; \
- clazz->raster_done = raster_done_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
- /* PIC support macros for ftrender.h */
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_DEFINE_GLYPH */
- /* */
- /* <Description> */
- /* Used to initialize an instance of FT_Glyph_Class struct. */
- /* When FT_CONFIG_OPTION_PIC is defined an init function will need */
- /* to be called with a pre-allocated structure to be filled. */
- /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
- /* allocated in the global scope (or the scope where the macro */
- /* is used). */
- /* */
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_GLYPH( \
- class_, \
- size_, \
- format_, \
- init_, \
- done_, \
- copy_, \
- transform_, \
- bbox_, \
- prepare_ ) \
- FT_CALLBACK_TABLE_DEF \
- const FT_Glyph_Class class_ = \
- { \
- size_, \
- format_, \
- init_, \
- done_, \
- copy_, \
- transform_, \
- bbox_, \
- prepare_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_GLYPH( \
- class_, \
- size_, \
- format_, \
- init_, \
- done_, \
- copy_, \
- transform_, \
- bbox_, \
- prepare_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Glyph_Class* clazz ) \
- { \
- clazz->glyph_size = size_; \
- clazz->glyph_format = format_; \
- clazz->glyph_init = init_; \
- clazz->glyph_done = done_; \
- clazz->glyph_copy = copy_; \
- clazz->glyph_transform = transform_; \
- clazz->glyph_bbox = bbox_; \
- clazz->glyph_prepare = prepare_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_DECLARE_RENDERER */
- /* */
- /* <Description> */
- /* Used to create a forward declaration of a */
- /* FT_Renderer_Class struct instance. */
- /* */
- /* <Macro> */
- /* FT_DEFINE_RENDERER */
- /* */
- /* <Description> */
- /* Used to initialize an instance of FT_Renderer_Class struct. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is defined a `create' function will */
- /* need to be called with a pointer where the allocated structure is */
- /* returned. And when it is no longer needed a `destroy' function */
- /* needs to be called to release that allocation. */
- /* `ftinit.c' (ft_create_default_module_classes) already contains */
- /* a mechanism to call these functions for the default modules */
- /* described in `ftmodule.h'. */
- /* */
- /* Notice that the created `create' and `destroy' functions call */
- /* `pic_init' and `pic_free' to allow you to manually allocate and */
- /* initialize any additional global data, like a module specific */
- /* interface, and put them in the global pic container defined in */
- /* `ftpic.h'. If you don't need them just implement the functions as */
- /* empty to resolve the link error. Also the `pic_init' and */
- /* `pic_free' functions should be declared in `pic.h', to be referred */
- /* by the renderer definition calling `FT_DEFINE_RENDERER' in the */
- /* following. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
- /* allocated in the global scope (or the scope where the macro */
- /* is used). */
- /* */
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DECLARE_RENDERER( class_ ) \
- FT_EXPORT_VAR( const FT_Renderer_Class ) class_;
-
-#define FT_DEFINE_RENDERER( \
- class_, \
- flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_, \
- glyph_format_, \
- render_glyph_, \
- transform_glyph_, \
- get_glyph_cbox_, \
- set_mode_, \
- raster_class_ ) \
- FT_CALLBACK_TABLE_DEF \
- const FT_Renderer_Class class_ = \
- { \
- FT_DEFINE_ROOT_MODULE( flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_ ) \
- glyph_format_, \
- \
- render_glyph_, \
- transform_glyph_, \
- get_glyph_cbox_, \
- set_mode_, \
- \
- raster_class_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DECLARE_RENDERER( class_ ) FT_DECLARE_MODULE( class_ )
-
-#define FT_DEFINE_RENDERER( \
- class_, \
- flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_, \
- glyph_format_, \
- render_glyph_, \
- transform_glyph_, \
- get_glyph_cbox_, \
- set_mode_, \
- raster_class_ ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_Module_Class* clazz ) \
- { \
- FT_Renderer_Class* rclazz = (FT_Renderer_Class*)clazz; \
- FT_Memory memory = library->memory; \
- \
- \
- class_ ## _pic_free( library ); \
- if ( rclazz ) \
- FT_FREE( rclazz ); \
- } \
- \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_Module_Class** output_class ) \
- { \
- FT_Renderer_Class* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) ) ) \
- return error; \
- \
- error = class_ ## _pic_init( library ); \
- if ( error ) \
- { \
- FT_FREE( clazz ); \
- return error; \
- } \
- \
- FT_DEFINE_ROOT_MODULE( flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_ ) \
- \
- clazz->glyph_format = glyph_format_; \
- \
- clazz->render_glyph = render_glyph_; \
- clazz->transform_glyph = transform_glyph_; \
- clazz->get_glyph_cbox = get_glyph_cbox_; \
- clazz->set_mode = set_mode_; \
- \
- clazz->raster_class = raster_class_; \
- \
- *output_class = (FT_Module_Class*)clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
- /* PIC support macros for ftmodapi.h **/
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Module_Creator */
- /* */
- /* <Description> */
- /* A function used to create (allocate) a new module class object. */
- /* The object's members are initialized, but the module itself is */
- /* not. */
- /* */
- /* <Input> */
- /* memory :: A handle to the memory manager. */
- /* output_class :: Initialized with the newly allocated class. */
- /* */
- typedef FT_Error
- (*FT_Module_Creator)( FT_Memory memory,
- FT_Module_Class** output_class );
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Module_Destroyer */
- /* */
- /* <Description> */
- /* A function used to destroy (deallocate) a module class object. */
- /* */
- /* <Input> */
- /* memory :: A handle to the memory manager. */
- /* clazz :: Module class to destroy. */
- /* */
- typedef void
- (*FT_Module_Destroyer)( FT_Memory memory,
- FT_Module_Class* clazz );
-
-#endif
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_DECLARE_MODULE */
- /* */
- /* <Description> */
- /* Used to create a forward declaration of a */
- /* FT_Module_Class struct instance. */
- /* */
- /* <Macro> */
- /* FT_DEFINE_MODULE */
- /* */
- /* <Description> */
- /* Used to initialize an instance of an FT_Module_Class struct. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is defined a `create' function needs */
- /* to be called with a pointer where the allocated structure is */
- /* returned. And when it is no longer needed a `destroy' function */
- /* needs to be called to release that allocation. */
- /* `ftinit.c' (ft_create_default_module_classes) already contains */
- /* a mechanism to call these functions for the default modules */
- /* described in `ftmodule.h'. */
- /* */
- /* Notice that the created `create' and `destroy' functions call */
- /* `pic_init' and `pic_free' to allow you to manually allocate and */
- /* initialize any additional global data, like a module specific */
- /* interface, and put them in the global pic container defined in */
- /* `ftpic.h'. If you don't need them just implement the functions as */
- /* empty to resolve the link error. Also the `pic_init' and */
- /* `pic_free' functions should be declared in `pic.h', to be referred */
- /* by the module definition calling `FT_DEFINE_MODULE' in the */
- /* following. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
- /* allocated in the global scope (or the scope where the macro */
- /* is used). */
- /* */
- /* <Macro> */
- /* FT_DEFINE_ROOT_MODULE */
- /* */
- /* <Description> */
- /* Used to initialize an instance of an FT_Module_Class struct inside */
- /* another struct that contains it or in a function that initializes */
- /* that containing struct. */
- /* */
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DECLARE_MODULE( class_ ) \
- FT_CALLBACK_TABLE \
- const FT_Module_Class class_;
-
-#define FT_DEFINE_ROOT_MODULE( \
- flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_ ) \
- { \
- flags_, \
- size_, \
- \
- name_, \
- version_, \
- requires_, \
- \
- interface_, \
- \
- init_, \
- done_, \
- get_interface_, \
- },
-
-#define FT_DEFINE_MODULE( \
- class_, \
- flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_ ) \
- FT_CALLBACK_TABLE_DEF \
- const FT_Module_Class class_ = \
- { \
- flags_, \
- size_, \
- \
- name_, \
- version_, \
- requires_, \
- \
- interface_, \
- \
- init_, \
- done_, \
- get_interface_, \
- };
-
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DECLARE_MODULE( class_ ) \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_Module_Class** output_class ); \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_Module_Class* clazz );
-
-#define FT_DEFINE_ROOT_MODULE( \
- flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_ ) \
- clazz->root.module_flags = flags_; \
- clazz->root.module_size = size_; \
- clazz->root.module_name = name_; \
- clazz->root.module_version = version_; \
- clazz->root.module_requires = requires_; \
- \
- clazz->root.module_interface = interface_; \
- \
- clazz->root.module_init = init_; \
- clazz->root.module_done = done_; \
- clazz->root.get_interface = get_interface_;
-
-#define FT_DEFINE_MODULE( \
- class_, \
- flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_ ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_Module_Class* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- class_ ## _pic_free( library ); \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_Module_Class** output_class ) \
- { \
- FT_Memory memory = library->memory; \
- FT_Module_Class* clazz = NULL; \
- FT_Error error; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) ) ) \
- return error; \
- error = class_ ## _pic_init( library ); \
- if ( error ) \
- { \
- FT_FREE( clazz ); \
- return error; \
- } \
- \
- clazz->module_flags = flags_; \
- clazz->module_size = size_; \
- clazz->module_name = name_; \
- clazz->module_version = version_; \
- clazz->module_requires = requires_; \
- \
- clazz->module_interface = interface_; \
- \
- clazz->module_init = init_; \
- clazz->module_done = done_; \
- clazz->get_interface = get_interface_; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-FT_END_HEADER
-
-#endif /* FTOBJS_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/ftpic.h b/include/freetype/internal/ftpic.h
deleted file mode 100644
index 0d43ed20f..000000000
--- a/include/freetype/internal/ftpic.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftpic.h */
-/* */
-/* The FreeType position independent code services (declaration). */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* Modules that ordinarily have const global data that need address */
- /* can instead define pointers here. */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTPIC_H_
-#define FTPIC_H_
-
-
-FT_BEGIN_HEADER
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- typedef struct FT_PIC_Container_
- {
- /* pic containers for base */
- void* base;
-
- /* pic containers for modules */
- void* autofit;
- void* cff;
- void* pshinter;
- void* psnames;
- void* raster;
- void* sfnt;
- void* smooth;
- void* truetype;
-
- } FT_PIC_Container;
-
-
- /* Initialize the various function tables, structs, etc. */
- /* stored in the container. */
- FT_BASE( FT_Error )
- ft_pic_container_init( FT_Library library );
-
-
- /* Destroy the contents of the container. */
- FT_BASE( void )
- ft_pic_container_destroy( FT_Library library );
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-FT_END_HEADER
-
-#endif /* FTPIC_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/ftrfork.h b/include/freetype/internal/ftrfork.h
deleted file mode 100644
index 25a44a448..000000000
--- a/include/freetype/internal/ftrfork.h
+++ /dev/null
@@ -1,267 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftrfork.h */
-/* */
-/* Embedded resource forks accessor (specification). */
-/* */
-/* Copyright 2004-2017 by */
-/* Masatake YAMATO and Redhat K.K. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* Development of the code in this file is support of */
-/* Information-technology Promotion Agency, Japan. */
-/***************************************************************************/
-
-
-#ifndef FTRFORK_H_
-#define FTRFORK_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-
-
-FT_BEGIN_HEADER
-
-
- /* Number of guessing rules supported in `FT_Raccess_Guess'. */
- /* Don't forget to increment the number if you add a new guessing rule. */
-#define FT_RACCESS_N_RULES 9
-
-
- /* A structure to describe a reference in a resource by its resource ID */
- /* and internal offset. The `POST' resource expects to be concatenated */
- /* by the order of resource IDs instead of its appearance in the file. */
-
- typedef struct FT_RFork_Ref_
- {
- FT_Short res_id;
- FT_Long offset;
-
- } FT_RFork_Ref;
-
-
-#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
- typedef FT_Error
- (*ft_raccess_guess_func)( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset );
-
- typedef enum FT_RFork_Rule_ {
- FT_RFork_Rule_invalid = -2,
- FT_RFork_Rule_uknown, /* -1 */
- FT_RFork_Rule_apple_double,
- FT_RFork_Rule_apple_single,
- FT_RFork_Rule_darwin_ufs_export,
- FT_RFork_Rule_darwin_newvfs,
- FT_RFork_Rule_darwin_hfsplus,
- FT_RFork_Rule_vfat,
- FT_RFork_Rule_linux_cap,
- FT_RFork_Rule_linux_double,
- FT_RFork_Rule_linux_netatalk
- } FT_RFork_Rule;
-
- /* For fast translation between rule index and rule type,
- * the macros FT_RFORK_xxx should be kept consistent with
- * the raccess_guess_funcs table
- */
- typedef struct ft_raccess_guess_rec_ {
- ft_raccess_guess_func func;
- FT_RFork_Rule type;
- } ft_raccess_guess_rec;
-
-#ifndef FT_CONFIG_OPTION_PIC
-
- /* this array is a storage in non-PIC mode, so ; is needed in END */
-#define CONST_FT_RFORK_RULE_ARRAY_BEGIN( name, type ) \
- static const type name[] = {
-#define CONST_FT_RFORK_RULE_ARRAY_ENTRY( func_suffix, type_suffix ) \
- { raccess_guess_ ## func_suffix, \
- FT_RFork_Rule_ ## type_suffix },
-#define CONST_FT_RFORK_RULE_ARRAY_END };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
- /* this array is a function in PIC mode, so no ; is needed in END */
-#define CONST_FT_RFORK_RULE_ARRAY_BEGIN( name, type ) \
- void \
- FT_Init_Table_ ## name( type* storage ) \
- { \
- type* local = storage; \
- \
- \
- int i = 0;
-#define CONST_FT_RFORK_RULE_ARRAY_ENTRY( func_suffix, type_suffix ) \
- local[i].func = raccess_guess_ ## func_suffix; \
- local[i].type = FT_RFork_Rule_ ## type_suffix; \
- i++;
-#define CONST_FT_RFORK_RULE_ARRAY_END }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-#endif /* FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Raccess_Guess */
- /* */
- /* <Description> */
- /* Guess a file name and offset where the actual resource fork is */
- /* stored. The macro FT_RACCESS_N_RULES holds the number of */
- /* guessing rules; the guessed result for the Nth rule is */
- /* represented as a triplet: a new file name (new_names[N]), a file */
- /* offset (offsets[N]), and an error code (errors[N]). */
- /* */
- /* <Input> */
- /* library :: */
- /* A FreeType library instance. */
- /* */
- /* stream :: */
- /* A file stream containing the resource fork. */
- /* */
- /* base_name :: */
- /* The (base) file name of the resource fork used for some */
- /* guessing rules. */
- /* */
- /* <Output> */
- /* new_names :: */
- /* An array of guessed file names in which the resource forks may */
- /* exist. If `new_names[N]' is NULL, the guessed file name is */
- /* equal to `base_name'. */
- /* */
- /* offsets :: */
- /* An array of guessed file offsets. `offsets[N]' holds the file */
- /* offset of the possible start of the resource fork in file */
- /* `new_names[N]'. */
- /* */
- /* errors :: */
- /* An array of FreeType error codes. `errors[N]' is the error */
- /* code of Nth guessing rule function. If `errors[N]' is not */
- /* FT_Err_Ok, `new_names[N]' and `offsets[N]' are meaningless. */
- /* */
- FT_BASE( void )
- FT_Raccess_Guess( FT_Library library,
- FT_Stream stream,
- char* base_name,
- char** new_names,
- FT_Long* offsets,
- FT_Error* errors );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Raccess_Get_HeaderInfo */
- /* */
- /* <Description> */
- /* Get the information from the header of resource fork. The */
- /* information includes the file offset where the resource map */
- /* starts, and the file offset where the resource data starts. */
- /* `FT_Raccess_Get_DataOffsets' requires these two data. */
- /* */
- /* <Input> */
- /* library :: */
- /* A FreeType library instance. */
- /* */
- /* stream :: */
- /* A file stream containing the resource fork. */
- /* */
- /* rfork_offset :: */
- /* The file offset where the resource fork starts. */
- /* */
- /* <Output> */
- /* map_offset :: */
- /* The file offset where the resource map starts. */
- /* */
- /* rdata_pos :: */
- /* The file offset where the resource data starts. */
- /* */
- /* <Return> */
- /* FreeType error code. FT_Err_Ok means success. */
- /* */
- FT_BASE( FT_Error )
- FT_Raccess_Get_HeaderInfo( FT_Library library,
- FT_Stream stream,
- FT_Long rfork_offset,
- FT_Long *map_offset,
- FT_Long *rdata_pos );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Raccess_Get_DataOffsets */
- /* */
- /* <Description> */
- /* Get the data offsets for a tag in a resource fork. Offsets are */
- /* stored in an array because, in some cases, resources in a resource */
- /* fork have the same tag. */
- /* */
- /* <Input> */
- /* library :: */
- /* A FreeType library instance. */
- /* */
- /* stream :: */
- /* A file stream containing the resource fork. */
- /* */
- /* map_offset :: */
- /* The file offset where the resource map starts. */
- /* */
- /* rdata_pos :: */
- /* The file offset where the resource data starts. */
- /* */
- /* tag :: */
- /* The resource tag. */
- /* */
- /* sort_by_res_id :: */
- /* A Boolean to sort the fragmented resource by their ids. */
- /* The fragmented resources for `POST' resource should be sorted */
- /* to restore Type1 font properly. For `sfnt' resources, sorting */
- /* may induce a different order of the faces in comparison to that */
- /* by QuickDraw API. */
- /* */
- /* <Output> */
- /* offsets :: */
- /* The stream offsets for the resource data specified by `tag'. */
- /* This array is allocated by the function, so you have to call */
- /* @ft_mem_free after use. */
- /* */
- /* count :: */
- /* The length of offsets array. */
- /* */
- /* <Return> */
- /* FreeType error code. FT_Err_Ok means success. */
- /* */
- /* <Note> */
- /* Normally you should use `FT_Raccess_Get_HeaderInfo' to get the */
- /* value for `map_offset' and `rdata_pos'. */
- /* */
- FT_BASE( FT_Error )
- FT_Raccess_Get_DataOffsets( FT_Library library,
- FT_Stream stream,
- FT_Long map_offset,
- FT_Long rdata_pos,
- FT_Long tag,
- FT_Bool sort_by_res_id,
- FT_Long **offsets,
- FT_Long *count );
-
-
-FT_END_HEADER
-
-#endif /* FTRFORK_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/ftserv.h b/include/freetype/internal/ftserv.h
deleted file mode 100644
index 71ef9cac3..000000000
--- a/include/freetype/internal/ftserv.h
+++ /dev/null
@@ -1,927 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftserv.h */
-/* */
-/* The FreeType services (specification only). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* Each module can export one or more `services'. Each service is */
- /* identified by a constant string and modeled by a pointer; the latter */
- /* generally corresponds to a structure containing function pointers. */
- /* */
- /* Note that a service's data cannot be a mere function pointer because */
- /* in C it is possible that function pointers might be implemented */
- /* differently than data pointers (e.g. 48 bits instead of 32). */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTSERV_H_
-#define FTSERV_H_
-
-
-FT_BEGIN_HEADER
-
- /*
- * @macro:
- * FT_FACE_FIND_SERVICE
- *
- * @description:
- * This macro is used to look up a service from a face's driver module.
- *
- * @input:
- * face ::
- * The source face handle.
- *
- * id ::
- * A string describing the service as defined in the service's
- * header files (e.g. FT_SERVICE_ID_MULTI_MASTERS which expands to
- * `multi-masters'). It is automatically prefixed with
- * `FT_SERVICE_ID_'.
- *
- * @output:
- * ptr ::
- * A variable that receives the service pointer. Will be NULL
- * if not found.
- */
-#ifdef __cplusplus
-
-#define FT_FACE_FIND_SERVICE( face, ptr, id ) \
- FT_BEGIN_STMNT \
- FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
- FT_Pointer _tmp_ = NULL; \
- FT_Pointer* _pptr_ = (FT_Pointer*)&(ptr); \
- \
- \
- if ( module->clazz->get_interface ) \
- _tmp_ = module->clazz->get_interface( module, FT_SERVICE_ID_ ## id ); \
- *_pptr_ = _tmp_; \
- FT_END_STMNT
-
-#else /* !C++ */
-
-#define FT_FACE_FIND_SERVICE( face, ptr, id ) \
- FT_BEGIN_STMNT \
- FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
- FT_Pointer _tmp_ = NULL; \
- \
- if ( module->clazz->get_interface ) \
- _tmp_ = module->clazz->get_interface( module, FT_SERVICE_ID_ ## id ); \
- ptr = _tmp_; \
- FT_END_STMNT
-
-#endif /* !C++ */
-
-
- /*
- * @macro:
- * FT_FACE_FIND_GLOBAL_SERVICE
- *
- * @description:
- * This macro is used to look up a service from all modules.
- *
- * @input:
- * face ::
- * The source face handle.
- *
- * id ::
- * A string describing the service as defined in the service's
- * header files (e.g. FT_SERVICE_ID_MULTI_MASTERS which expands to
- * `multi-masters'). It is automatically prefixed with
- * `FT_SERVICE_ID_'.
- *
- * @output:
- * ptr ::
- * A variable that receives the service pointer. Will be NULL
- * if not found.
- */
-#ifdef __cplusplus
-
-#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \
- FT_BEGIN_STMNT \
- FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
- FT_Pointer _tmp_; \
- FT_Pointer* _pptr_ = (FT_Pointer*)&(ptr); \
- \
- \
- _tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id, 1 ); \
- *_pptr_ = _tmp_; \
- FT_END_STMNT
-
-#else /* !C++ */
-
-#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \
- FT_BEGIN_STMNT \
- FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
- FT_Pointer _tmp_; \
- \
- \
- _tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id, 1 ); \
- ptr = _tmp_; \
- FT_END_STMNT
-
-#endif /* !C++ */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** S E R V I C E D E S C R I P T O R S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*
- * The following structure is used to _describe_ a given service
- * to the library. This is useful to build simple static service lists.
- */
- typedef struct FT_ServiceDescRec_
- {
- const char* serv_id; /* service name */
- const void* serv_data; /* service pointer/data */
-
- } FT_ServiceDescRec;
-
- typedef const FT_ServiceDescRec* FT_ServiceDesc;
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_DEFINE_SERVICEDESCREC1 */
- /* FT_DEFINE_SERVICEDESCREC2 */
- /* FT_DEFINE_SERVICEDESCREC3 */
- /* FT_DEFINE_SERVICEDESCREC4 */
- /* FT_DEFINE_SERVICEDESCREC5 */
- /* FT_DEFINE_SERVICEDESCREC6 */
- /* FT_DEFINE_SERVICEDESCREC7 */
- /* FT_DEFINE_SERVICEDESCREC8 */
- /* */
- /* <Description> */
- /* Used to initialize an array of FT_ServiceDescRec structures. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is defined a `create' function needs to */
- /* be called with a pointer to return an allocated array. As soon as */
- /* it is no longer needed, a `destroy' function needs to be called to */
- /* release that allocation. */
- /* */
- /* These functions should be manually called from the `pic_init' and */
- /* `pic_free' functions of your module (see FT_DEFINE_MODULE). */
- /* */
- /* When FT_CONFIG_OPTION_PIC is not defined the array will be */
- /* allocated in the global scope (or the scope where the macro is */
- /* used). */
- /* */
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SERVICEDESCREC1( class_, \
- serv_id_1, serv_data_1 ) \
- static const FT_ServiceDescRec class_[] = \
- { \
- { serv_id_1, serv_data_1 }, \
- { NULL, NULL } \
- };
-
-#define FT_DEFINE_SERVICEDESCREC2( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2 ) \
- static const FT_ServiceDescRec class_[] = \
- { \
- { serv_id_1, serv_data_1 }, \
- { serv_id_2, serv_data_2 }, \
- { NULL, NULL } \
- };
-
-#define FT_DEFINE_SERVICEDESCREC3( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3 ) \
- static const FT_ServiceDescRec class_[] = \
- { \
- { serv_id_1, serv_data_1 }, \
- { serv_id_2, serv_data_2 }, \
- { serv_id_3, serv_data_3 }, \
- { NULL, NULL } \
- };
-
-#define FT_DEFINE_SERVICEDESCREC4( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4 ) \
- static const FT_ServiceDescRec class_[] = \
- { \
- { serv_id_1, serv_data_1 }, \
- { serv_id_2, serv_data_2 }, \
- { serv_id_3, serv_data_3 }, \
- { serv_id_4, serv_data_4 }, \
- { NULL, NULL } \
- };
-
-#define FT_DEFINE_SERVICEDESCREC5( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5 ) \
- static const FT_ServiceDescRec class_[] = \
- { \
- { serv_id_1, serv_data_1 }, \
- { serv_id_2, serv_data_2 }, \
- { serv_id_3, serv_data_3 }, \
- { serv_id_4, serv_data_4 }, \
- { serv_id_5, serv_data_5 }, \
- { NULL, NULL } \
- };
-
-#define FT_DEFINE_SERVICEDESCREC6( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5, \
- serv_id_6, serv_data_6 ) \
- static const FT_ServiceDescRec class_[] = \
- { \
- { serv_id_1, serv_data_1 }, \
- { serv_id_2, serv_data_2 }, \
- { serv_id_3, serv_data_3 }, \
- { serv_id_4, serv_data_4 }, \
- { serv_id_5, serv_data_5 }, \
- { serv_id_6, serv_data_6 }, \
- { NULL, NULL } \
- };
-
-#define FT_DEFINE_SERVICEDESCREC7( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5, \
- serv_id_6, serv_data_6, \
- serv_id_7, serv_data_7 ) \
- static const FT_ServiceDescRec class_[] = \
- { \
- { serv_id_1, serv_data_1 }, \
- { serv_id_2, serv_data_2 }, \
- { serv_id_3, serv_data_3 }, \
- { serv_id_4, serv_data_4 }, \
- { serv_id_5, serv_data_5 }, \
- { serv_id_6, serv_data_6 }, \
- { serv_id_7, serv_data_7 }, \
- { NULL, NULL } \
- };
-
-#define FT_DEFINE_SERVICEDESCREC8( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5, \
- serv_id_6, serv_data_6, \
- serv_id_7, serv_data_7, \
- serv_id_8, serv_data_8 ) \
- static const FT_ServiceDescRec class_[] = \
- { \
- { serv_id_1, serv_data_1 }, \
- { serv_id_2, serv_data_2 }, \
- { serv_id_3, serv_data_3 }, \
- { serv_id_4, serv_data_4 }, \
- { serv_id_5, serv_data_5 }, \
- { serv_id_6, serv_data_6 }, \
- { serv_id_7, serv_data_7 }, \
- { serv_id_8, serv_data_8 }, \
- { NULL, NULL } \
- };
-
-#define FT_DEFINE_SERVICEDESCREC9( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5, \
- serv_id_6, serv_data_6, \
- serv_id_7, serv_data_7, \
- serv_id_8, serv_data_8, \
- serv_id_9, serv_data_9 ) \
- static const FT_ServiceDescRec class_[] = \
- { \
- { serv_id_1, serv_data_1 }, \
- { serv_id_2, serv_data_2 }, \
- { serv_id_3, serv_data_3 }, \
- { serv_id_4, serv_data_4 }, \
- { serv_id_5, serv_data_5 }, \
- { serv_id_6, serv_data_6 }, \
- { serv_id_7, serv_data_7 }, \
- { serv_id_8, serv_data_8 }, \
- { serv_id_9, serv_data_9 }, \
- { NULL, NULL } \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICEDESCREC1( class_, \
- serv_id_1, serv_data_1 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class ) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 2 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = NULL; \
- clazz[1].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC2( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class ) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 3 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = NULL; \
- clazz[2].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC3( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class ) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 4 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = serv_id_3; \
- clazz[2].serv_data = serv_data_3; \
- clazz[3].serv_id = NULL; \
- clazz[3].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC4( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class ) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 5 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = serv_id_3; \
- clazz[2].serv_data = serv_data_3; \
- clazz[3].serv_id = serv_id_4; \
- clazz[3].serv_data = serv_data_4; \
- clazz[4].serv_id = NULL; \
- clazz[4].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC5( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class ) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 6 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = serv_id_3; \
- clazz[2].serv_data = serv_data_3; \
- clazz[3].serv_id = serv_id_4; \
- clazz[3].serv_data = serv_data_4; \
- clazz[4].serv_id = serv_id_5; \
- clazz[4].serv_data = serv_data_5; \
- clazz[5].serv_id = NULL; \
- clazz[5].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC6( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5, \
- serv_id_6, serv_data_6 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 7 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = serv_id_3; \
- clazz[2].serv_data = serv_data_3; \
- clazz[3].serv_id = serv_id_4; \
- clazz[3].serv_data = serv_data_4; \
- clazz[4].serv_id = serv_id_5; \
- clazz[4].serv_data = serv_data_5; \
- clazz[5].serv_id = serv_id_6; \
- clazz[5].serv_data = serv_data_6; \
- clazz[6].serv_id = NULL; \
- clazz[6].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC7( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5, \
- serv_id_6, serv_data_6, \
- serv_id_7, serv_data_7 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 8 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = serv_id_3; \
- clazz[2].serv_data = serv_data_3; \
- clazz[3].serv_id = serv_id_4; \
- clazz[3].serv_data = serv_data_4; \
- clazz[4].serv_id = serv_id_5; \
- clazz[4].serv_data = serv_data_5; \
- clazz[5].serv_id = serv_id_6; \
- clazz[5].serv_data = serv_data_6; \
- clazz[6].serv_id = serv_id_7; \
- clazz[6].serv_data = serv_data_7; \
- clazz[7].serv_id = NULL; \
- clazz[7].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC8( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5, \
- serv_id_6, serv_data_6, \
- serv_id_7, serv_data_7, \
- serv_id_8, serv_data_8 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 9 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = serv_id_3; \
- clazz[2].serv_data = serv_data_3; \
- clazz[3].serv_id = serv_id_4; \
- clazz[3].serv_data = serv_data_4; \
- clazz[4].serv_id = serv_id_5; \
- clazz[4].serv_data = serv_data_5; \
- clazz[5].serv_id = serv_id_6; \
- clazz[5].serv_data = serv_data_6; \
- clazz[6].serv_id = serv_id_7; \
- clazz[6].serv_data = serv_data_7; \
- clazz[7].serv_id = serv_id_8; \
- clazz[7].serv_data = serv_data_8; \
- clazz[8].serv_id = NULL; \
- clazz[8].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#define FT_DEFINE_SERVICEDESCREC9( class_, \
- serv_id_1, serv_data_1, \
- serv_id_2, serv_data_2, \
- serv_id_3, serv_data_3, \
- serv_id_4, serv_data_4, \
- serv_id_5, serv_data_5, \
- serv_id_6, serv_data_6, \
- serv_id_7, serv_data_7, \
- serv_id_8, serv_data_8, \
- serv_id_9, serv_data_9 ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- \
- \
- if ( clazz ) \
- FT_FREE( clazz ); \
- } \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class) \
- { \
- FT_ServiceDescRec* clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 10 ) ) \
- return error; \
- \
- clazz[0].serv_id = serv_id_1; \
- clazz[0].serv_data = serv_data_1; \
- clazz[1].serv_id = serv_id_2; \
- clazz[1].serv_data = serv_data_2; \
- clazz[2].serv_id = serv_id_3; \
- clazz[2].serv_data = serv_data_3; \
- clazz[3].serv_id = serv_id_4; \
- clazz[3].serv_data = serv_data_4; \
- clazz[4].serv_id = serv_id_5; \
- clazz[4].serv_data = serv_data_5; \
- clazz[5].serv_id = serv_id_6; \
- clazz[5].serv_data = serv_data_6; \
- clazz[6].serv_id = serv_id_7; \
- clazz[6].serv_data = serv_data_7; \
- clazz[7].serv_id = serv_id_8; \
- clazz[7].serv_data = serv_data_8; \
- clazz[8].serv_id = serv_id_9; \
- clazz[8].serv_data = serv_data_9; \
- clazz[9].serv_id = NULL; \
- clazz[9].serv_data = NULL; \
- \
- *output_class = clazz; \
- \
- return FT_Err_Ok; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
- /*
- * Parse a list of FT_ServiceDescRec descriptors and look for
- * a specific service by ID. Note that the last element in the
- * array must be { NULL, NULL }, and that the function should
- * return NULL if the service isn't available.
- *
- * This function can be used by modules to implement their
- * `get_service' method.
- */
- FT_BASE( FT_Pointer )
- ft_service_list_lookup( FT_ServiceDesc service_descriptors,
- const char* service_id );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** S E R V I C E S C A C H E *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*
- * This structure is used to store a cache for several frequently used
- * services. It is the type of `face->internal->services'. You
- * should only use FT_FACE_LOOKUP_SERVICE to access it.
- *
- * All fields should have the type FT_Pointer to relax compilation
- * dependencies. We assume the developer isn't completely stupid.
- *
- * Each field must be named `service_XXXX' where `XXX' corresponds to
- * the correct FT_SERVICE_ID_XXXX macro. See the definition of
- * FT_FACE_LOOKUP_SERVICE below how this is implemented.
- *
- */
- typedef struct FT_ServiceCacheRec_
- {
- FT_Pointer service_POSTSCRIPT_FONT_NAME;
- FT_Pointer service_MULTI_MASTERS;
- FT_Pointer service_METRICS_VARIATIONS;
- FT_Pointer service_GLYPH_DICT;
- FT_Pointer service_PFR_METRICS;
- FT_Pointer service_WINFNT;
-
- } FT_ServiceCacheRec, *FT_ServiceCache;
-
-
- /*
- * A magic number used within the services cache.
- */
-
- /* ensure that value `1' has the same width as a pointer */
-#define FT_SERVICE_UNAVAILABLE ((FT_Pointer)~(FT_PtrDist)1)
-
-
- /*
- * @macro:
- * FT_FACE_LOOKUP_SERVICE
- *
- * @description:
- * This macro is used to look up a service from a face's driver module
- * using its cache.
- *
- * @input:
- * face::
- * The source face handle containing the cache.
- *
- * field ::
- * The field name in the cache.
- *
- * id ::
- * The service ID.
- *
- * @output:
- * ptr ::
- * A variable receiving the service data. NULL if not available.
- */
-#ifdef __cplusplus
-
-#define FT_FACE_LOOKUP_SERVICE( face, ptr, id ) \
- FT_BEGIN_STMNT \
- FT_Pointer svc; \
- FT_Pointer* Pptr = (FT_Pointer*)&(ptr); \
- \
- \
- svc = FT_FACE( face )->internal->services. service_ ## id; \
- if ( svc == FT_SERVICE_UNAVAILABLE ) \
- svc = NULL; \
- else if ( svc == NULL ) \
- { \
- FT_FACE_FIND_SERVICE( face, svc, id ); \
- \
- FT_FACE( face )->internal->services. service_ ## id = \
- (FT_Pointer)( svc != NULL ? svc \
- : FT_SERVICE_UNAVAILABLE ); \
- } \
- *Pptr = svc; \
- FT_END_STMNT
-
-#else /* !C++ */
-
-#define FT_FACE_LOOKUP_SERVICE( face, ptr, id ) \
- FT_BEGIN_STMNT \
- FT_Pointer svc; \
- \
- \
- svc = FT_FACE( face )->internal->services. service_ ## id; \
- if ( svc == FT_SERVICE_UNAVAILABLE ) \
- svc = NULL; \
- else if ( svc == NULL ) \
- { \
- FT_FACE_FIND_SERVICE( face, svc, id ); \
- \
- FT_FACE( face )->internal->services. service_ ## id = \
- (FT_Pointer)( svc != NULL ? svc \
- : FT_SERVICE_UNAVAILABLE ); \
- } \
- ptr = svc; \
- FT_END_STMNT
-
-#endif /* !C++ */
-
- /*
- * A macro used to define new service structure types.
- */
-
-#define FT_DEFINE_SERVICE( name ) \
- typedef struct FT_Service_ ## name ## Rec_ \
- FT_Service_ ## name ## Rec ; \
- typedef struct FT_Service_ ## name ## Rec_ \
- const * FT_Service_ ## name ; \
- struct FT_Service_ ## name ## Rec_
-
- /* */
-
- /*
- * The header files containing the services.
- */
-
-#define FT_SERVICE_BDF_H <freetype/internal/services/svbdf.h>
-#define FT_SERVICE_CID_H <freetype/internal/services/svcid.h>
-#define FT_SERVICE_GLYPH_DICT_H <freetype/internal/services/svgldict.h>
-#define FT_SERVICE_GX_VALIDATE_H <freetype/internal/services/svgxval.h>
-#define FT_SERVICE_KERNING_H <freetype/internal/services/svkern.h>
-#define FT_SERVICE_METRICS_VARIATIONS_H <freetype/internal/services/svmetric.h>
-#define FT_SERVICE_MULTIPLE_MASTERS_H <freetype/internal/services/svmm.h>
-#define FT_SERVICE_OPENTYPE_VALIDATE_H <freetype/internal/services/svotval.h>
-#define FT_SERVICE_PFR_H <freetype/internal/services/svpfr.h>
-#define FT_SERVICE_POSTSCRIPT_CMAPS_H <freetype/internal/services/svpscmap.h>
-#define FT_SERVICE_POSTSCRIPT_INFO_H <freetype/internal/services/svpsinfo.h>
-#define FT_SERVICE_POSTSCRIPT_NAME_H <freetype/internal/services/svpostnm.h>
-#define FT_SERVICE_PROPERTIES_H <freetype/internal/services/svprop.h>
-#define FT_SERVICE_SFNT_H <freetype/internal/services/svsfnt.h>
-#define FT_SERVICE_TRUETYPE_ENGINE_H <freetype/internal/services/svtteng.h>
-#define FT_SERVICE_TT_CMAP_H <freetype/internal/services/svttcmap.h>
-#define FT_SERVICE_WINFNT_H <freetype/internal/services/svwinfnt.h>
-#define FT_SERVICE_FONT_FORMAT_H <freetype/internal/services/svfntfmt.h>
-#define FT_SERVICE_TRUETYPE_GLYF_H <freetype/internal/services/svttglyf.h>
-
- /* */
-
-FT_END_HEADER
-
-#endif /* FTSERV_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/ftstream.h b/include/freetype/internal/ftstream.h
deleted file mode 100644
index 3e2c07b26..000000000
--- a/include/freetype/internal/ftstream.h
+++ /dev/null
@@ -1,536 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftstream.h */
-/* */
-/* Stream handling (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTSTREAM_H_
-#define FTSTREAM_H_
-
-
-#include <ft2build.h>
-#include FT_SYSTEM_H
-#include FT_INTERNAL_OBJECTS_H
-
-
-FT_BEGIN_HEADER
-
-
- /* format of an 8-bit frame_op value: */
- /* */
- /* bit 76543210 */
- /* xxxxxxes */
- /* */
- /* s is set to 1 if the value is signed. */
- /* e is set to 1 if the value is little-endian. */
- /* xxx is a command. */
-
-#define FT_FRAME_OP_SHIFT 2
-#define FT_FRAME_OP_SIGNED 1
-#define FT_FRAME_OP_LITTLE 2
-#define FT_FRAME_OP_COMMAND( x ) ( x >> FT_FRAME_OP_SHIFT )
-
-#define FT_MAKE_FRAME_OP( command, little, sign ) \
- ( ( command << FT_FRAME_OP_SHIFT ) | ( little << 1 ) | sign )
-
-#define FT_FRAME_OP_END 0
-#define FT_FRAME_OP_START 1 /* start a new frame */
-#define FT_FRAME_OP_BYTE 2 /* read 1-byte value */
-#define FT_FRAME_OP_SHORT 3 /* read 2-byte value */
-#define FT_FRAME_OP_LONG 4 /* read 4-byte value */
-#define FT_FRAME_OP_OFF3 5 /* read 3-byte value */
-#define FT_FRAME_OP_BYTES 6 /* read a bytes sequence */
-
-
- typedef enum FT_Frame_Op_
- {
- ft_frame_end = 0,
- ft_frame_start = FT_MAKE_FRAME_OP( FT_FRAME_OP_START, 0, 0 ),
-
- ft_frame_byte = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTE, 0, 0 ),
- ft_frame_schar = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTE, 0, 1 ),
-
- ft_frame_ushort_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 0, 0 ),
- ft_frame_short_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 0, 1 ),
- ft_frame_ushort_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 1, 0 ),
- ft_frame_short_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 1, 1 ),
-
- ft_frame_ulong_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 0, 0 ),
- ft_frame_long_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 0, 1 ),
- ft_frame_ulong_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 1, 0 ),
- ft_frame_long_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 1, 1 ),
-
- ft_frame_uoff3_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 0, 0 ),
- ft_frame_off3_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 0, 1 ),
- ft_frame_uoff3_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 1, 0 ),
- ft_frame_off3_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 1, 1 ),
-
- ft_frame_bytes = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTES, 0, 0 ),
- ft_frame_skip = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTES, 0, 1 )
-
- } FT_Frame_Op;
-
-
- typedef struct FT_Frame_Field_
- {
- FT_Byte value;
- FT_Byte size;
- FT_UShort offset;
-
- } FT_Frame_Field;
-
-
- /* Construct an FT_Frame_Field out of a structure type and a field name. */
- /* The structure type must be set in the FT_STRUCTURE macro before */
- /* calling the FT_FRAME_START() macro. */
- /* */
-#define FT_FIELD_SIZE( f ) \
- (FT_Byte)sizeof ( ((FT_STRUCTURE*)0)->f )
-
-#define FT_FIELD_SIZE_DELTA( f ) \
- (FT_Byte)sizeof ( ((FT_STRUCTURE*)0)->f[0] )
-
-#define FT_FIELD_OFFSET( f ) \
- (FT_UShort)( offsetof( FT_STRUCTURE, f ) )
-
-#define FT_FRAME_FIELD( frame_op, field ) \
- { \
- frame_op, \
- FT_FIELD_SIZE( field ), \
- FT_FIELD_OFFSET( field ) \
- }
-
-#define FT_MAKE_EMPTY_FIELD( frame_op ) { frame_op, 0, 0 }
-
-#define FT_FRAME_START( size ) { ft_frame_start, 0, size }
-#define FT_FRAME_END { ft_frame_end, 0, 0 }
-
-#define FT_FRAME_LONG( f ) FT_FRAME_FIELD( ft_frame_long_be, f )
-#define FT_FRAME_ULONG( f ) FT_FRAME_FIELD( ft_frame_ulong_be, f )
-#define FT_FRAME_SHORT( f ) FT_FRAME_FIELD( ft_frame_short_be, f )
-#define FT_FRAME_USHORT( f ) FT_FRAME_FIELD( ft_frame_ushort_be, f )
-#define FT_FRAME_OFF3( f ) FT_FRAME_FIELD( ft_frame_off3_be, f )
-#define FT_FRAME_UOFF3( f ) FT_FRAME_FIELD( ft_frame_uoff3_be, f )
-#define FT_FRAME_BYTE( f ) FT_FRAME_FIELD( ft_frame_byte, f )
-#define FT_FRAME_CHAR( f ) FT_FRAME_FIELD( ft_frame_schar, f )
-
-#define FT_FRAME_LONG_LE( f ) FT_FRAME_FIELD( ft_frame_long_le, f )
-#define FT_FRAME_ULONG_LE( f ) FT_FRAME_FIELD( ft_frame_ulong_le, f )
-#define FT_FRAME_SHORT_LE( f ) FT_FRAME_FIELD( ft_frame_short_le, f )
-#define FT_FRAME_USHORT_LE( f ) FT_FRAME_FIELD( ft_frame_ushort_le, f )
-#define FT_FRAME_OFF3_LE( f ) FT_FRAME_FIELD( ft_frame_off3_le, f )
-#define FT_FRAME_UOFF3_LE( f ) FT_FRAME_FIELD( ft_frame_uoff3_le, f )
-
-#define FT_FRAME_SKIP_LONG { ft_frame_long_be, 0, 0 }
-#define FT_FRAME_SKIP_SHORT { ft_frame_short_be, 0, 0 }
-#define FT_FRAME_SKIP_BYTE { ft_frame_byte, 0, 0 }
-
-#define FT_FRAME_BYTES( field, count ) \
- { \
- ft_frame_bytes, \
- count, \
- FT_FIELD_OFFSET( field ) \
- }
-
-#define FT_FRAME_SKIP_BYTES( count ) { ft_frame_skip, count, 0 }
-
-
- /*************************************************************************/
- /* */
- /* Integer extraction macros -- the `buffer' parameter must ALWAYS be of */
- /* type `char*' or equivalent (1-byte elements). */
- /* */
-
-#define FT_BYTE_( p, i ) ( ((const FT_Byte*)(p))[(i)] )
-
-#define FT_INT16( x ) ( (FT_Int16)(x) )
-#define FT_UINT16( x ) ( (FT_UInt16)(x) )
-#define FT_INT32( x ) ( (FT_Int32)(x) )
-#define FT_UINT32( x ) ( (FT_UInt32)(x) )
-
-
-#define FT_BYTE_U16( p, i, s ) ( FT_UINT16( FT_BYTE_( p, i ) ) << (s) )
-#define FT_BYTE_U32( p, i, s ) ( FT_UINT32( FT_BYTE_( p, i ) ) << (s) )
-
-
-#define FT_PEEK_SHORT( p ) FT_INT16( FT_BYTE_U16( p, 0, 8) | \
- FT_BYTE_U16( p, 1, 0) )
-
-#define FT_PEEK_USHORT( p ) FT_UINT16( FT_BYTE_U16( p, 0, 8 ) | \
- FT_BYTE_U16( p, 1, 0 ) )
-
-#define FT_PEEK_LONG( p ) FT_INT32( FT_BYTE_U32( p, 0, 24 ) | \
- FT_BYTE_U32( p, 1, 16 ) | \
- FT_BYTE_U32( p, 2, 8 ) | \
- FT_BYTE_U32( p, 3, 0 ) )
-
-#define FT_PEEK_ULONG( p ) FT_UINT32( FT_BYTE_U32( p, 0, 24 ) | \
- FT_BYTE_U32( p, 1, 16 ) | \
- FT_BYTE_U32( p, 2, 8 ) | \
- FT_BYTE_U32( p, 3, 0 ) )
-
-#define FT_PEEK_OFF3( p ) FT_INT32( FT_BYTE_U32( p, 0, 16 ) | \
- FT_BYTE_U32( p, 1, 8 ) | \
- FT_BYTE_U32( p, 2, 0 ) )
-
-#define FT_PEEK_UOFF3( p ) FT_UINT32( FT_BYTE_U32( p, 0, 16 ) | \
- FT_BYTE_U32( p, 1, 8 ) | \
- FT_BYTE_U32( p, 2, 0 ) )
-
-#define FT_PEEK_SHORT_LE( p ) FT_INT16( FT_BYTE_U16( p, 1, 8 ) | \
- FT_BYTE_U16( p, 0, 0 ) )
-
-#define FT_PEEK_USHORT_LE( p ) FT_UINT16( FT_BYTE_U16( p, 1, 8 ) | \
- FT_BYTE_U16( p, 0, 0 ) )
-
-#define FT_PEEK_LONG_LE( p ) FT_INT32( FT_BYTE_U32( p, 3, 24 ) | \
- FT_BYTE_U32( p, 2, 16 ) | \
- FT_BYTE_U32( p, 1, 8 ) | \
- FT_BYTE_U32( p, 0, 0 ) )
-
-#define FT_PEEK_ULONG_LE( p ) FT_UINT32( FT_BYTE_U32( p, 3, 24 ) | \
- FT_BYTE_U32( p, 2, 16 ) | \
- FT_BYTE_U32( p, 1, 8 ) | \
- FT_BYTE_U32( p, 0, 0 ) )
-
-#define FT_PEEK_OFF3_LE( p ) FT_INT32( FT_BYTE_U32( p, 2, 16 ) | \
- FT_BYTE_U32( p, 1, 8 ) | \
- FT_BYTE_U32( p, 0, 0 ) )
-
-#define FT_PEEK_UOFF3_LE( p ) FT_UINT32( FT_BYTE_U32( p, 2, 16 ) | \
- FT_BYTE_U32( p, 1, 8 ) | \
- FT_BYTE_U32( p, 0, 0 ) )
-
-
-#define FT_NEXT_CHAR( buffer ) \
- ( (signed char)*buffer++ )
-
-#define FT_NEXT_BYTE( buffer ) \
- ( (unsigned char)*buffer++ )
-
-#define FT_NEXT_SHORT( buffer ) \
- ( (short)( buffer += 2, FT_PEEK_SHORT( buffer - 2 ) ) )
-
-#define FT_NEXT_USHORT( buffer ) \
- ( (unsigned short)( buffer += 2, FT_PEEK_USHORT( buffer - 2 ) ) )
-
-#define FT_NEXT_OFF3( buffer ) \
- ( (long)( buffer += 3, FT_PEEK_OFF3( buffer - 3 ) ) )
-
-#define FT_NEXT_UOFF3( buffer ) \
- ( (unsigned long)( buffer += 3, FT_PEEK_UOFF3( buffer - 3 ) ) )
-
-#define FT_NEXT_LONG( buffer ) \
- ( (long)( buffer += 4, FT_PEEK_LONG( buffer - 4 ) ) )
-
-#define FT_NEXT_ULONG( buffer ) \
- ( (unsigned long)( buffer += 4, FT_PEEK_ULONG( buffer - 4 ) ) )
-
-
-#define FT_NEXT_SHORT_LE( buffer ) \
- ( (short)( buffer += 2, FT_PEEK_SHORT_LE( buffer - 2 ) ) )
-
-#define FT_NEXT_USHORT_LE( buffer ) \
- ( (unsigned short)( buffer += 2, FT_PEEK_USHORT_LE( buffer - 2 ) ) )
-
-#define FT_NEXT_OFF3_LE( buffer ) \
- ( (long)( buffer += 3, FT_PEEK_OFF3_LE( buffer - 3 ) ) )
-
-#define FT_NEXT_UOFF3_LE( buffer ) \
- ( (unsigned long)( buffer += 3, FT_PEEK_UOFF3_LE( buffer - 3 ) ) )
-
-#define FT_NEXT_LONG_LE( buffer ) \
- ( (long)( buffer += 4, FT_PEEK_LONG_LE( buffer - 4 ) ) )
-
-#define FT_NEXT_ULONG_LE( buffer ) \
- ( (unsigned long)( buffer += 4, FT_PEEK_ULONG_LE( buffer - 4 ) ) )
-
-
- /*************************************************************************/
- /* */
- /* Each GET_xxxx() macro uses an implicit `stream' variable. */
- /* */
-#if 0
-#define FT_GET_MACRO( type ) FT_NEXT_ ## type ( stream->cursor )
-
-#define FT_GET_CHAR() FT_GET_MACRO( CHAR )
-#define FT_GET_BYTE() FT_GET_MACRO( BYTE )
-#define FT_GET_SHORT() FT_GET_MACRO( SHORT )
-#define FT_GET_USHORT() FT_GET_MACRO( USHORT )
-#define FT_GET_OFF3() FT_GET_MACRO( OFF3 )
-#define FT_GET_UOFF3() FT_GET_MACRO( UOFF3 )
-#define FT_GET_LONG() FT_GET_MACRO( LONG )
-#define FT_GET_ULONG() FT_GET_MACRO( ULONG )
-#define FT_GET_TAG4() FT_GET_MACRO( ULONG )
-
-#define FT_GET_SHORT_LE() FT_GET_MACRO( SHORT_LE )
-#define FT_GET_USHORT_LE() FT_GET_MACRO( USHORT_LE )
-#define FT_GET_LONG_LE() FT_GET_MACRO( LONG_LE )
-#define FT_GET_ULONG_LE() FT_GET_MACRO( ULONG_LE )
-
-#else
-#define FT_GET_MACRO( func, type ) ( (type)func( stream ) )
-
-#define FT_GET_CHAR() FT_GET_MACRO( FT_Stream_GetChar, FT_Char )
-#define FT_GET_BYTE() FT_GET_MACRO( FT_Stream_GetChar, FT_Byte )
-#define FT_GET_SHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_Short )
-#define FT_GET_USHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_UShort )
-#define FT_GET_OFF3() FT_GET_MACRO( FT_Stream_GetUOffset, FT_Long )
-#define FT_GET_UOFF3() FT_GET_MACRO( FT_Stream_GetUOffset, FT_ULong )
-#define FT_GET_LONG() FT_GET_MACRO( FT_Stream_GetULong, FT_Long )
-#define FT_GET_ULONG() FT_GET_MACRO( FT_Stream_GetULong, FT_ULong )
-#define FT_GET_TAG4() FT_GET_MACRO( FT_Stream_GetULong, FT_ULong )
-
-#define FT_GET_SHORT_LE() FT_GET_MACRO( FT_Stream_GetUShortLE, FT_Short )
-#define FT_GET_USHORT_LE() FT_GET_MACRO( FT_Stream_GetUShortLE, FT_UShort )
-#define FT_GET_LONG_LE() FT_GET_MACRO( FT_Stream_GetULongLE, FT_Long )
-#define FT_GET_ULONG_LE() FT_GET_MACRO( FT_Stream_GetULongLE, FT_ULong )
-#endif
-
-#define FT_READ_MACRO( func, type, var ) \
- ( var = (type)func( stream, &error ), \
- error != FT_Err_Ok )
-
-#define FT_READ_BYTE( var ) FT_READ_MACRO( FT_Stream_ReadChar, FT_Byte, var )
-#define FT_READ_CHAR( var ) FT_READ_MACRO( FT_Stream_ReadChar, FT_Char, var )
-#define FT_READ_SHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_Short, var )
-#define FT_READ_USHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_UShort, var )
-#define FT_READ_OFF3( var ) FT_READ_MACRO( FT_Stream_ReadUOffset, FT_Long, var )
-#define FT_READ_UOFF3( var ) FT_READ_MACRO( FT_Stream_ReadUOffset, FT_ULong, var )
-#define FT_READ_LONG( var ) FT_READ_MACRO( FT_Stream_ReadULong, FT_Long, var )
-#define FT_READ_ULONG( var ) FT_READ_MACRO( FT_Stream_ReadULong, FT_ULong, var )
-
-#define FT_READ_SHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadUShortLE, FT_Short, var )
-#define FT_READ_USHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadUShortLE, FT_UShort, var )
-#define FT_READ_LONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadULongLE, FT_Long, var )
-#define FT_READ_ULONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadULongLE, FT_ULong, var )
-
-
-#ifndef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM
-
- /* initialize a stream for reading a regular system stream */
- FT_BASE( FT_Error )
- FT_Stream_Open( FT_Stream stream,
- const char* filepathname );
-
-#endif /* FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM */
-
-
- /* create a new (input) stream from an FT_Open_Args structure */
- FT_BASE( FT_Error )
- FT_Stream_New( FT_Library library,
- const FT_Open_Args* args,
- FT_Stream *astream );
-
- /* free a stream */
- FT_BASE( void )
- FT_Stream_Free( FT_Stream stream,
- FT_Int external );
-
- /* initialize a stream for reading in-memory data */
- FT_BASE( void )
- FT_Stream_OpenMemory( FT_Stream stream,
- const FT_Byte* base,
- FT_ULong size );
-
- /* close a stream (does not destroy the stream structure) */
- FT_BASE( void )
- FT_Stream_Close( FT_Stream stream );
-
-
- /* seek within a stream. position is relative to start of stream */
- FT_BASE( FT_Error )
- FT_Stream_Seek( FT_Stream stream,
- FT_ULong pos );
-
- /* skip bytes in a stream */
- FT_BASE( FT_Error )
- FT_Stream_Skip( FT_Stream stream,
- FT_Long distance );
-
- /* return current stream position */
- FT_BASE( FT_ULong )
- FT_Stream_Pos( FT_Stream stream );
-
- /* read bytes from a stream into a user-allocated buffer, returns an */
- /* error if not all bytes could be read. */
- FT_BASE( FT_Error )
- FT_Stream_Read( FT_Stream stream,
- FT_Byte* buffer,
- FT_ULong count );
-
- /* read bytes from a stream at a given position */
- FT_BASE( FT_Error )
- FT_Stream_ReadAt( FT_Stream stream,
- FT_ULong pos,
- FT_Byte* buffer,
- FT_ULong count );
-
- /* try to read bytes at the end of a stream; return number of bytes */
- /* really available */
- FT_BASE( FT_ULong )
- FT_Stream_TryRead( FT_Stream stream,
- FT_Byte* buffer,
- FT_ULong count );
-
- /* Enter a frame of `count' consecutive bytes in a stream. Returns an */
- /* error if the frame could not be read/accessed. The caller can use */
- /* the FT_Stream_Get_XXX functions to retrieve frame data without */
- /* error checks. */
- /* */
- /* You must _always_ call FT_Stream_ExitFrame() once you have entered */
- /* a stream frame! */
- /* */
- FT_BASE( FT_Error )
- FT_Stream_EnterFrame( FT_Stream stream,
- FT_ULong count );
-
- /* exit a stream frame */
- FT_BASE( void )
- FT_Stream_ExitFrame( FT_Stream stream );
-
- /* Extract a stream frame. If the stream is disk-based, a heap block */
- /* is allocated and the frame bytes are read into it. If the stream */
- /* is memory-based, this function simply set a pointer to the data. */
- /* */
- /* Useful to optimize access to memory-based streams transparently. */
- /* */
- /* All extracted frames must be `freed' with a call to the function */
- /* FT_Stream_ReleaseFrame(). */
- /* */
- FT_BASE( FT_Error )
- FT_Stream_ExtractFrame( FT_Stream stream,
- FT_ULong count,
- FT_Byte** pbytes );
-
- /* release an extract frame (see FT_Stream_ExtractFrame) */
- FT_BASE( void )
- FT_Stream_ReleaseFrame( FT_Stream stream,
- FT_Byte** pbytes );
-
- /* read a byte from an entered frame */
- FT_BASE( FT_Char )
- FT_Stream_GetChar( FT_Stream stream );
-
- /* read a 16-bit big-endian unsigned integer from an entered frame */
- FT_BASE( FT_UShort )
- FT_Stream_GetUShort( FT_Stream stream );
-
- /* read a 24-bit big-endian unsigned integer from an entered frame */
- FT_BASE( FT_ULong )
- FT_Stream_GetUOffset( FT_Stream stream );
-
- /* read a 32-bit big-endian unsigned integer from an entered frame */
- FT_BASE( FT_ULong )
- FT_Stream_GetULong( FT_Stream stream );
-
- /* read a 16-bit little-endian unsigned integer from an entered frame */
- FT_BASE( FT_UShort )
- FT_Stream_GetUShortLE( FT_Stream stream );
-
- /* read a 32-bit little-endian unsigned integer from an entered frame */
- FT_BASE( FT_ULong )
- FT_Stream_GetULongLE( FT_Stream stream );
-
-
- /* read a byte from a stream */
- FT_BASE( FT_Char )
- FT_Stream_ReadChar( FT_Stream stream,
- FT_Error* error );
-
- /* read a 16-bit big-endian unsigned integer from a stream */
- FT_BASE( FT_UShort )
- FT_Stream_ReadUShort( FT_Stream stream,
- FT_Error* error );
-
- /* read a 24-bit big-endian unsigned integer from a stream */
- FT_BASE( FT_ULong )
- FT_Stream_ReadUOffset( FT_Stream stream,
- FT_Error* error );
-
- /* read a 32-bit big-endian integer from a stream */
- FT_BASE( FT_ULong )
- FT_Stream_ReadULong( FT_Stream stream,
- FT_Error* error );
-
- /* read a 16-bit little-endian unsigned integer from a stream */
- FT_BASE( FT_UShort )
- FT_Stream_ReadUShortLE( FT_Stream stream,
- FT_Error* error );
-
- /* read a 32-bit little-endian unsigned integer from a stream */
- FT_BASE( FT_ULong )
- FT_Stream_ReadULongLE( FT_Stream stream,
- FT_Error* error );
-
- /* Read a structure from a stream. The structure must be described */
- /* by an array of FT_Frame_Field records. */
- FT_BASE( FT_Error )
- FT_Stream_ReadFields( FT_Stream stream,
- const FT_Frame_Field* fields,
- void* structure );
-
-
-#define FT_STREAM_POS() \
- FT_Stream_Pos( stream )
-
-#define FT_STREAM_SEEK( position ) \
- FT_SET_ERROR( FT_Stream_Seek( stream, \
- (FT_ULong)(position) ) )
-
-#define FT_STREAM_SKIP( distance ) \
- FT_SET_ERROR( FT_Stream_Skip( stream, \
- (FT_Long)(distance) ) )
-
-#define FT_STREAM_READ( buffer, count ) \
- FT_SET_ERROR( FT_Stream_Read( stream, \
- (FT_Byte*)(buffer), \
- (FT_ULong)(count) ) )
-
-#define FT_STREAM_READ_AT( position, buffer, count ) \
- FT_SET_ERROR( FT_Stream_ReadAt( stream, \
- (FT_ULong)(position), \
- (FT_Byte*)(buffer), \
- (FT_ULong)(count) ) )
-
-#define FT_STREAM_READ_FIELDS( fields, object ) \
- FT_SET_ERROR( FT_Stream_ReadFields( stream, fields, object ) )
-
-
-#define FT_FRAME_ENTER( size ) \
- FT_SET_ERROR( \
- FT_DEBUG_INNER( FT_Stream_EnterFrame( stream, \
- (FT_ULong)(size) ) ) )
-
-#define FT_FRAME_EXIT() \
- FT_DEBUG_INNER( FT_Stream_ExitFrame( stream ) )
-
-#define FT_FRAME_EXTRACT( size, bytes ) \
- FT_SET_ERROR( \
- FT_DEBUG_INNER( FT_Stream_ExtractFrame( stream, \
- (FT_ULong)(size), \
- (FT_Byte**)&(bytes) ) ) )
-
-#define FT_FRAME_RELEASE( bytes ) \
- FT_DEBUG_INNER( FT_Stream_ReleaseFrame( stream, \
- (FT_Byte**)&(bytes) ) )
-
-
-FT_END_HEADER
-
-#endif /* FTSTREAM_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/fttrace.h b/include/freetype/internal/fttrace.h
deleted file mode 100644
index caf5fc946..000000000
--- a/include/freetype/internal/fttrace.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/***************************************************************************/
-/* */
-/* fttrace.h */
-/* */
-/* Tracing handling (specification only). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /* definitions of trace levels for FreeType 2 */
-
- /* the first level must always be `trace_any' */
-FT_TRACE_DEF( any )
-
- /* base components */
-FT_TRACE_DEF( calc ) /* calculations (ftcalc.c) */
-FT_TRACE_DEF( memory ) /* memory manager (ftobjs.c) */
-FT_TRACE_DEF( stream ) /* stream manager (ftstream.c) */
-FT_TRACE_DEF( io ) /* i/o interface (ftsystem.c) */
-FT_TRACE_DEF( list ) /* list management (ftlist.c) */
-FT_TRACE_DEF( init ) /* initialization (ftinit.c) */
-FT_TRACE_DEF( objs ) /* base objects (ftobjs.c) */
-FT_TRACE_DEF( outline ) /* outline management (ftoutln.c) */
-FT_TRACE_DEF( glyph ) /* glyph management (ftglyph.c) */
-FT_TRACE_DEF( gloader ) /* glyph loader (ftgloadr.c) */
-
-FT_TRACE_DEF( raster ) /* monochrome rasterizer (ftraster.c) */
-FT_TRACE_DEF( smooth ) /* anti-aliasing raster (ftgrays.c) */
-FT_TRACE_DEF( mm ) /* MM interface (ftmm.c) */
-FT_TRACE_DEF( raccess ) /* resource fork accessor (ftrfork.c) */
-FT_TRACE_DEF( synth ) /* bold/slant synthesizer (ftsynth.c) */
-FT_TRACE_DEF( bitmap ) /* bitmap checksum (ftobjs.c) */
-
- /* Cache sub-system */
-FT_TRACE_DEF( cache ) /* cache sub-system (ftcache.c, etc.) */
-
- /* SFNT driver components */
-FT_TRACE_DEF( sfdriver ) /* SFNT font driver (sfdriver.c) */
-FT_TRACE_DEF( sfobjs ) /* SFNT object handler (sfobjs.c) */
-FT_TRACE_DEF( ttcmap ) /* charmap handler (ttcmap.c) */
-FT_TRACE_DEF( ttkern ) /* kerning handler (ttkern.c) */
-FT_TRACE_DEF( ttload ) /* basic TrueType tables (ttload.c) */
-FT_TRACE_DEF( ttmtx ) /* metrics-related tables (ttmtx.c) */
-FT_TRACE_DEF( ttpost ) /* PS table processing (ttpost.c) */
-FT_TRACE_DEF( ttsbit ) /* TrueType sbit handling (ttsbit.c) */
-FT_TRACE_DEF( ttbdf ) /* TrueType embedded BDF (ttbdf.c) */
-
- /* TrueType driver components */
-FT_TRACE_DEF( ttdriver ) /* TT font driver (ttdriver.c) */
-FT_TRACE_DEF( ttgload ) /* TT glyph loader (ttgload.c) */
-FT_TRACE_DEF( ttinterp ) /* bytecode interpreter (ttinterp.c) */
-FT_TRACE_DEF( ttobjs ) /* TT objects manager (ttobjs.c) */
-FT_TRACE_DEF( ttpload ) /* TT data/program loader (ttpload.c) */
-FT_TRACE_DEF( ttgxvar ) /* TrueType GX var handler (ttgxvar.c) */
-
- /* Type 1 driver components */
-FT_TRACE_DEF( t1afm )
-FT_TRACE_DEF( t1driver )
-FT_TRACE_DEF( t1gload )
-FT_TRACE_DEF( t1hint )
-FT_TRACE_DEF( t1load )
-FT_TRACE_DEF( t1objs )
-FT_TRACE_DEF( t1parse )
-
- /* PostScript helper module `psaux' */
-FT_TRACE_DEF( t1decode )
-FT_TRACE_DEF( psobjs )
-FT_TRACE_DEF( psconv )
-
- /* PostScript hinting module `pshinter' */
-FT_TRACE_DEF( pshrec )
-FT_TRACE_DEF( pshalgo1 )
-FT_TRACE_DEF( pshalgo2 )
-
- /* Type 2 driver components */
-FT_TRACE_DEF( cffdriver )
-FT_TRACE_DEF( cffgload )
-FT_TRACE_DEF( cffload )
-FT_TRACE_DEF( cffobjs )
-FT_TRACE_DEF( cffparse )
-
-FT_TRACE_DEF( cf2blues )
-FT_TRACE_DEF( cf2hints )
-FT_TRACE_DEF( cf2interp )
-
- /* Type 42 driver component */
-FT_TRACE_DEF( t42 )
-
- /* CID driver components */
-FT_TRACE_DEF( cidafm )
-FT_TRACE_DEF( ciddriver )
-FT_TRACE_DEF( cidgload )
-FT_TRACE_DEF( cidload )
-FT_TRACE_DEF( cidobjs )
-FT_TRACE_DEF( cidparse )
-
- /* Windows font component */
-FT_TRACE_DEF( winfnt )
-
- /* PCF font components */
-FT_TRACE_DEF( pcfdriver )
-FT_TRACE_DEF( pcfread )
-
- /* BDF font components */
-FT_TRACE_DEF( bdfdriver )
-FT_TRACE_DEF( bdflib )
-
- /* PFR font component */
-FT_TRACE_DEF( pfr )
-
- /* OpenType validation components */
-FT_TRACE_DEF( otvmodule )
-FT_TRACE_DEF( otvcommon )
-FT_TRACE_DEF( otvbase )
-FT_TRACE_DEF( otvgdef )
-FT_TRACE_DEF( otvgpos )
-FT_TRACE_DEF( otvgsub )
-FT_TRACE_DEF( otvjstf )
-FT_TRACE_DEF( otvmath )
-
- /* TrueTypeGX/AAT validation components */
-FT_TRACE_DEF( gxvmodule )
-FT_TRACE_DEF( gxvcommon )
-FT_TRACE_DEF( gxvfeat )
-FT_TRACE_DEF( gxvmort )
-FT_TRACE_DEF( gxvmorx )
-FT_TRACE_DEF( gxvbsln )
-FT_TRACE_DEF( gxvjust )
-FT_TRACE_DEF( gxvkern )
-FT_TRACE_DEF( gxvopbd )
-FT_TRACE_DEF( gxvtrak )
-FT_TRACE_DEF( gxvprop )
-FT_TRACE_DEF( gxvlcar )
-
- /* autofit components */
-FT_TRACE_DEF( afmodule )
-FT_TRACE_DEF( afhints )
-FT_TRACE_DEF( afcjk )
-FT_TRACE_DEF( aflatin )
-FT_TRACE_DEF( aflatin2 )
-FT_TRACE_DEF( afwarp )
-FT_TRACE_DEF( afshaper )
-FT_TRACE_DEF( afglobal )
-
-/* END */
diff --git a/include/freetype/internal/ftvalid.h b/include/freetype/internal/ftvalid.h
deleted file mode 100644
index df6f7c577..000000000
--- a/include/freetype/internal/ftvalid.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftvalid.h */
-/* */
-/* FreeType validation support (specification). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTVALID_H_
-#define FTVALID_H_
-
-#include <ft2build.h>
-#include FT_CONFIG_STANDARD_LIBRARY_H /* for ft_setjmp and ft_longjmp */
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** V A L I D A T I O N ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- /* handle to a validation object */
- typedef struct FT_ValidatorRec_ volatile* FT_Validator;
-
-
- /*************************************************************************/
- /* */
- /* There are three distinct validation levels defined here: */
- /* */
- /* FT_VALIDATE_DEFAULT :: */
- /* A table that passes this validation level can be used reliably by */
- /* FreeType. It generally means that all offsets have been checked to */
- /* prevent out-of-bound reads, that array counts are correct, etc. */
- /* */
- /* FT_VALIDATE_TIGHT :: */
- /* A table that passes this validation level can be used reliably and */
- /* doesn't contain invalid data. For example, a charmap table that */
- /* returns invalid glyph indices will not pass, even though it can */
- /* be used with FreeType in default mode (the library will simply */
- /* return an error later when trying to load the glyph). */
- /* */
- /* It also checks that fields which must be a multiple of 2, 4, or 8, */
- /* don't have incorrect values, etc. */
- /* */
- /* FT_VALIDATE_PARANOID :: */
- /* Only for font debugging. Checks that a table follows the */
- /* specification by 100%. Very few fonts will be able to pass this */
- /* level anyway but it can be useful for certain tools like font */
- /* editors/converters. */
- /* */
- typedef enum FT_ValidationLevel_
- {
- FT_VALIDATE_DEFAULT = 0,
- FT_VALIDATE_TIGHT,
- FT_VALIDATE_PARANOID
-
- } FT_ValidationLevel;
-
-
-#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */
- /* We disable the warning `structure was padded due to */
- /* __declspec(align())' in order to compile cleanly with */
- /* the maximum level of warnings. */
-#pragma warning( push )
-#pragma warning( disable : 4324 )
-#endif /* _MSC_VER */
-
- /* validator structure */
- typedef struct FT_ValidatorRec_
- {
- ft_jmp_buf jump_buffer; /* used for exception handling */
-
- const FT_Byte* base; /* address of table in memory */
- const FT_Byte* limit; /* `base' + sizeof(table) in memory */
- FT_ValidationLevel level; /* validation level */
- FT_Error error; /* error returned. 0 means success */
-
- } FT_ValidatorRec;
-
-#if defined( _MSC_VER )
-#pragma warning( pop )
-#endif
-
-#define FT_VALIDATOR( x ) ( (FT_Validator)( x ) )
-
-
- FT_BASE( void )
- ft_validator_init( FT_Validator valid,
- const FT_Byte* base,
- const FT_Byte* limit,
- FT_ValidationLevel level );
-
- /* Do not use this. It's broken and will cause your validator to crash */
- /* if you run it on an invalid font. */
- FT_BASE( FT_Int )
- ft_validator_run( FT_Validator valid );
-
- /* Sets the error field in a validator, then calls `longjmp' to return */
- /* to high-level caller. Using `setjmp/longjmp' avoids many stupid */
- /* error checks within the validation routines. */
- /* */
- FT_BASE( void )
- ft_validator_error( FT_Validator valid,
- FT_Error error );
-
-
- /* Calls ft_validate_error. Assumes that the `valid' local variable */
- /* holds a pointer to the current validator object. */
- /* */
-#define FT_INVALID( _error ) FT_INVALID_( _error )
-#define FT_INVALID_( _error ) \
- ft_validator_error( valid, FT_THROW( _error ) )
-
- /* called when a broken table is detected */
-#define FT_INVALID_TOO_SHORT \
- FT_INVALID( Invalid_Table )
-
- /* called when an invalid offset is detected */
-#define FT_INVALID_OFFSET \
- FT_INVALID( Invalid_Offset )
-
- /* called when an invalid format/value is detected */
-#define FT_INVALID_FORMAT \
- FT_INVALID( Invalid_Table )
-
- /* called when an invalid glyph index is detected */
-#define FT_INVALID_GLYPH_ID \
- FT_INVALID( Invalid_Glyph_Index )
-
- /* called when an invalid field value is detected */
-#define FT_INVALID_DATA \
- FT_INVALID( Invalid_Table )
-
-
-FT_END_HEADER
-
-#endif /* FTVALID_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/internal.h b/include/freetype/internal/internal.h
deleted file mode 100644
index 02046813a..000000000
--- a/include/freetype/internal/internal.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************/
-/* */
-/* internal.h */
-/* */
-/* Internal header files (specification only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is automatically included by `ft2build.h'. */
- /* Do not include it manually! */
- /* */
- /*************************************************************************/
-
-
-#define FT_INTERNAL_OBJECTS_H <freetype/internal/ftobjs.h>
-#define FT_INTERNAL_PIC_H <freetype/internal/ftpic.h>
-#define FT_INTERNAL_STREAM_H <freetype/internal/ftstream.h>
-#define FT_INTERNAL_MEMORY_H <freetype/internal/ftmemory.h>
-#define FT_INTERNAL_DEBUG_H <freetype/internal/ftdebug.h>
-#define FT_INTERNAL_CALC_H <freetype/internal/ftcalc.h>
-#define FT_INTERNAL_HASH_H <freetype/internal/fthash.h>
-#define FT_INTERNAL_DRIVER_H <freetype/internal/ftdriver.h>
-#define FT_INTERNAL_TRACE_H <freetype/internal/fttrace.h>
-#define FT_INTERNAL_GLYPH_LOADER_H <freetype/internal/ftgloadr.h>
-#define FT_INTERNAL_SFNT_H <freetype/internal/sfnt.h>
-#define FT_INTERNAL_SERVICE_H <freetype/internal/ftserv.h>
-#define FT_INTERNAL_RFORK_H <freetype/internal/ftrfork.h>
-#define FT_INTERNAL_VALIDATE_H <freetype/internal/ftvalid.h>
-
-#define FT_INTERNAL_TRUETYPE_TYPES_H <freetype/internal/tttypes.h>
-#define FT_INTERNAL_TYPE1_TYPES_H <freetype/internal/t1types.h>
-
-#define FT_INTERNAL_POSTSCRIPT_AUX_H <freetype/internal/psaux.h>
-#define FT_INTERNAL_POSTSCRIPT_HINTS_H <freetype/internal/pshints.h>
-
-#define FT_INTERNAL_AUTOHINT_H <freetype/internal/autohint.h>
-
-
-#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */
-
- /* We disable the warning `conditional expression is constant' here */
- /* in order to compile cleanly with the maximum level of warnings. */
- /* In particular, the warning complains about stuff like `while(0)' */
- /* which is very useful in macro definitions. There is no benefit */
- /* in having it enabled. */
-#pragma warning( disable : 4127 )
-
-#endif /* _MSC_VER */
-
-
-/* END */
diff --git a/include/freetype/internal/psaux.h b/include/freetype/internal/psaux.h
deleted file mode 100644
index 935eb1a9c..000000000
--- a/include/freetype/internal/psaux.h
+++ /dev/null
@@ -1,879 +0,0 @@
-/***************************************************************************/
-/* */
-/* psaux.h */
-/* */
-/* Auxiliary functions and data structures related to PostScript fonts */
-/* (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PSAUX_H_
-#define PSAUX_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_TYPE1_TYPES_H
-#include FT_INTERNAL_HASH_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** T1_TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- typedef struct PS_TableRec_* PS_Table;
- typedef const struct PS_Table_FuncsRec_* PS_Table_Funcs;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* PS_Table_FuncsRec */
- /* */
- /* <Description> */
- /* A set of function pointers to manage PS_Table objects. */
- /* */
- /* <Fields> */
- /* table_init :: Used to initialize a table. */
- /* */
- /* table_done :: Finalizes resp. destroy a given table. */
- /* */
- /* table_add :: Adds a new object to a table. */
- /* */
- /* table_release :: Releases table data, then finalizes it. */
- /* */
- typedef struct PS_Table_FuncsRec_
- {
- FT_Error
- (*init)( PS_Table table,
- FT_Int count,
- FT_Memory memory );
-
- void
- (*done)( PS_Table table );
-
- FT_Error
- (*add)( PS_Table table,
- FT_Int idx,
- void* object,
- FT_UInt length );
-
- void
- (*release)( PS_Table table );
-
- } PS_Table_FuncsRec;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* PS_TableRec */
- /* */
- /* <Description> */
- /* A PS_Table is a simple object used to store an array of objects in */
- /* a single memory block. */
- /* */
- /* <Fields> */
- /* block :: The address in memory of the growheap's block. This */
- /* can change between two object adds, due to */
- /* reallocation. */
- /* */
- /* cursor :: The current top of the grow heap within its block. */
- /* */
- /* capacity :: The current size of the heap block. Increments by */
- /* 1kByte chunks. */
- /* */
- /* init :: Set to 0xDEADBEEF if `elements' and `lengths' have */
- /* been allocated. */
- /* */
- /* max_elems :: The maximum number of elements in table. */
- /* */
- /* num_elems :: The current number of elements in table. */
- /* */
- /* elements :: A table of element addresses within the block. */
- /* */
- /* lengths :: A table of element sizes within the block. */
- /* */
- /* memory :: The object used for memory operations */
- /* (alloc/realloc). */
- /* */
- /* funcs :: A table of method pointers for this object. */
- /* */
- typedef struct PS_TableRec_
- {
- FT_Byte* block; /* current memory block */
- FT_Offset cursor; /* current cursor in memory block */
- FT_Offset capacity; /* current size of memory block */
- FT_ULong init;
-
- FT_Int max_elems;
- FT_Int num_elems;
- FT_Byte** elements; /* addresses of table elements */
- FT_UInt* lengths; /* lengths of table elements */
-
- FT_Memory memory;
- PS_Table_FuncsRec funcs;
-
- } PS_TableRec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** T1 FIELDS & TOKENS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct PS_ParserRec_* PS_Parser;
-
- typedef struct T1_TokenRec_* T1_Token;
-
- typedef struct T1_FieldRec_* T1_Field;
-
-
- /* simple enumeration type used to identify token types */
- typedef enum T1_TokenType_
- {
- T1_TOKEN_TYPE_NONE = 0,
- T1_TOKEN_TYPE_ANY,
- T1_TOKEN_TYPE_STRING,
- T1_TOKEN_TYPE_ARRAY,
- T1_TOKEN_TYPE_KEY, /* aka `name' */
-
- /* do not remove */
- T1_TOKEN_TYPE_MAX
-
- } T1_TokenType;
-
-
- /* a simple structure used to identify tokens */
- typedef struct T1_TokenRec_
- {
- FT_Byte* start; /* first character of token in input stream */
- FT_Byte* limit; /* first character after the token */
- T1_TokenType type; /* type of token */
-
- } T1_TokenRec;
-
-
- /* enumeration type used to identify object fields */
- typedef enum T1_FieldType_
- {
- T1_FIELD_TYPE_NONE = 0,
- T1_FIELD_TYPE_BOOL,
- T1_FIELD_TYPE_INTEGER,
- T1_FIELD_TYPE_FIXED,
- T1_FIELD_TYPE_FIXED_1000,
- T1_FIELD_TYPE_STRING,
- T1_FIELD_TYPE_KEY,
- T1_FIELD_TYPE_BBOX,
- T1_FIELD_TYPE_MM_BBOX,
- T1_FIELD_TYPE_INTEGER_ARRAY,
- T1_FIELD_TYPE_FIXED_ARRAY,
- T1_FIELD_TYPE_CALLBACK,
-
- /* do not remove */
- T1_FIELD_TYPE_MAX
-
- } T1_FieldType;
-
-
- typedef enum T1_FieldLocation_
- {
- T1_FIELD_LOCATION_CID_INFO,
- T1_FIELD_LOCATION_FONT_DICT,
- T1_FIELD_LOCATION_FONT_EXTRA,
- T1_FIELD_LOCATION_FONT_INFO,
- T1_FIELD_LOCATION_PRIVATE,
- T1_FIELD_LOCATION_BBOX,
- T1_FIELD_LOCATION_LOADER,
- T1_FIELD_LOCATION_FACE,
- T1_FIELD_LOCATION_BLEND,
-
- /* do not remove */
- T1_FIELD_LOCATION_MAX
-
- } T1_FieldLocation;
-
-
- typedef void
- (*T1_Field_ParseFunc)( FT_Face face,
- FT_Pointer parser );
-
-
- /* structure type used to model object fields */
- typedef struct T1_FieldRec_
- {
- const char* ident; /* field identifier */
- T1_FieldLocation location;
- T1_FieldType type; /* type of field */
- T1_Field_ParseFunc reader;
- FT_UInt offset; /* offset of field in object */
- FT_Byte size; /* size of field in bytes */
- FT_UInt array_max; /* maximum number of elements for */
- /* array */
- FT_UInt count_offset; /* offset of element count for */
- /* arrays; must not be zero if in */
- /* use -- in other words, a */
- /* `num_FOO' element must not */
- /* start the used structure if we */
- /* parse a `FOO' array */
- FT_UInt dict; /* where we expect it */
- } T1_FieldRec;
-
-#define T1_FIELD_DICT_FONTDICT ( 1 << 0 ) /* also FontInfo and FDArray */
-#define T1_FIELD_DICT_PRIVATE ( 1 << 1 )
-
-
-
-#define T1_NEW_SIMPLE_FIELD( _ident, _type, _fname, _dict ) \
- { \
- _ident, T1CODE, _type, \
- 0, \
- FT_FIELD_OFFSET( _fname ), \
- FT_FIELD_SIZE( _fname ), \
- 0, 0, \
- _dict \
- },
-
-#define T1_NEW_CALLBACK_FIELD( _ident, _reader, _dict ) \
- { \
- _ident, T1CODE, T1_FIELD_TYPE_CALLBACK, \
- (T1_Field_ParseFunc)_reader, \
- 0, 0, \
- 0, 0, \
- _dict \
- },
-
-#define T1_NEW_TABLE_FIELD( _ident, _type, _fname, _max, _dict ) \
- { \
- _ident, T1CODE, _type, \
- 0, \
- FT_FIELD_OFFSET( _fname ), \
- FT_FIELD_SIZE_DELTA( _fname ), \
- _max, \
- FT_FIELD_OFFSET( num_ ## _fname ), \
- _dict \
- },
-
-#define T1_NEW_TABLE_FIELD2( _ident, _type, _fname, _max, _dict ) \
- { \
- _ident, T1CODE, _type, \
- 0, \
- FT_FIELD_OFFSET( _fname ), \
- FT_FIELD_SIZE_DELTA( _fname ), \
- _max, 0, \
- _dict \
- },
-
-
-#define T1_FIELD_BOOL( _ident, _fname, _dict ) \
- T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_BOOL, _fname, _dict )
-
-#define T1_FIELD_NUM( _ident, _fname, _dict ) \
- T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_INTEGER, _fname, _dict )
-
-#define T1_FIELD_FIXED( _ident, _fname, _dict ) \
- T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_FIXED, _fname, _dict )
-
-#define T1_FIELD_FIXED_1000( _ident, _fname, _dict ) \
- T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_FIXED_1000, _fname, \
- _dict )
-
-#define T1_FIELD_STRING( _ident, _fname, _dict ) \
- T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_STRING, _fname, _dict )
-
-#define T1_FIELD_KEY( _ident, _fname, _dict ) \
- T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_KEY, _fname, _dict )
-
-#define T1_FIELD_BBOX( _ident, _fname, _dict ) \
- T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_BBOX, _fname, _dict )
-
-
-#define T1_FIELD_NUM_TABLE( _ident, _fname, _fmax, _dict ) \
- T1_NEW_TABLE_FIELD( _ident, T1_FIELD_TYPE_INTEGER_ARRAY, \
- _fname, _fmax, _dict )
-
-#define T1_FIELD_FIXED_TABLE( _ident, _fname, _fmax, _dict ) \
- T1_NEW_TABLE_FIELD( _ident, T1_FIELD_TYPE_FIXED_ARRAY, \
- _fname, _fmax, _dict )
-
-#define T1_FIELD_NUM_TABLE2( _ident, _fname, _fmax, _dict ) \
- T1_NEW_TABLE_FIELD2( _ident, T1_FIELD_TYPE_INTEGER_ARRAY, \
- _fname, _fmax, _dict )
-
-#define T1_FIELD_FIXED_TABLE2( _ident, _fname, _fmax, _dict ) \
- T1_NEW_TABLE_FIELD2( _ident, T1_FIELD_TYPE_FIXED_ARRAY, \
- _fname, _fmax, _dict )
-
-#define T1_FIELD_CALLBACK( _ident, _name, _dict ) \
- T1_NEW_CALLBACK_FIELD( _ident, _name, _dict )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** T1 PARSER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef const struct PS_Parser_FuncsRec_* PS_Parser_Funcs;
-
- typedef struct PS_Parser_FuncsRec_
- {
- void
- (*init)( PS_Parser parser,
- FT_Byte* base,
- FT_Byte* limit,
- FT_Memory memory );
-
- void
- (*done)( PS_Parser parser );
-
- void
- (*skip_spaces)( PS_Parser parser );
- void
- (*skip_PS_token)( PS_Parser parser );
-
- FT_Long
- (*to_int)( PS_Parser parser );
- FT_Fixed
- (*to_fixed)( PS_Parser parser,
- FT_Int power_ten );
-
- FT_Error
- (*to_bytes)( PS_Parser parser,
- FT_Byte* bytes,
- FT_Offset max_bytes,
- FT_ULong* pnum_bytes,
- FT_Bool delimiters );
-
- FT_Int
- (*to_coord_array)( PS_Parser parser,
- FT_Int max_coords,
- FT_Short* coords );
- FT_Int
- (*to_fixed_array)( PS_Parser parser,
- FT_Int max_values,
- FT_Fixed* values,
- FT_Int power_ten );
-
- void
- (*to_token)( PS_Parser parser,
- T1_Token token );
- void
- (*to_token_array)( PS_Parser parser,
- T1_Token tokens,
- FT_UInt max_tokens,
- FT_Int* pnum_tokens );
-
- FT_Error
- (*load_field)( PS_Parser parser,
- const T1_Field field,
- void** objects,
- FT_UInt max_objects,
- FT_ULong* pflags );
-
- FT_Error
- (*load_field_table)( PS_Parser parser,
- const T1_Field field,
- void** objects,
- FT_UInt max_objects,
- FT_ULong* pflags );
-
- } PS_Parser_FuncsRec;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* PS_ParserRec */
- /* */
- /* <Description> */
- /* A PS_Parser is an object used to parse a Type 1 font very quickly. */
- /* */
- /* <Fields> */
- /* cursor :: The current position in the text. */
- /* */
- /* base :: Start of the processed text. */
- /* */
- /* limit :: End of the processed text. */
- /* */
- /* error :: The last error returned. */
- /* */
- /* memory :: The object used for memory operations (alloc/realloc). */
- /* */
- /* funcs :: A table of functions for the parser. */
- /* */
- typedef struct PS_ParserRec_
- {
- FT_Byte* cursor;
- FT_Byte* base;
- FT_Byte* limit;
- FT_Error error;
- FT_Memory memory;
-
- PS_Parser_FuncsRec funcs;
-
- } PS_ParserRec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** T1 BUILDER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- typedef struct T1_BuilderRec_* T1_Builder;
-
-
- typedef FT_Error
- (*T1_Builder_Check_Points_Func)( T1_Builder builder,
- FT_Int count );
-
- typedef void
- (*T1_Builder_Add_Point_Func)( T1_Builder builder,
- FT_Pos x,
- FT_Pos y,
- FT_Byte flag );
-
- typedef FT_Error
- (*T1_Builder_Add_Point1_Func)( T1_Builder builder,
- FT_Pos x,
- FT_Pos y );
-
- typedef FT_Error
- (*T1_Builder_Add_Contour_Func)( T1_Builder builder );
-
- typedef FT_Error
- (*T1_Builder_Start_Point_Func)( T1_Builder builder,
- FT_Pos x,
- FT_Pos y );
-
- typedef void
- (*T1_Builder_Close_Contour_Func)( T1_Builder builder );
-
-
- typedef const struct T1_Builder_FuncsRec_* T1_Builder_Funcs;
-
- typedef struct T1_Builder_FuncsRec_
- {
- void
- (*init)( T1_Builder builder,
- FT_Face face,
- FT_Size size,
- FT_GlyphSlot slot,
- FT_Bool hinting );
-
- void
- (*done)( T1_Builder builder );
-
- T1_Builder_Check_Points_Func check_points;
- T1_Builder_Add_Point_Func add_point;
- T1_Builder_Add_Point1_Func add_point1;
- T1_Builder_Add_Contour_Func add_contour;
- T1_Builder_Start_Point_Func start_point;
- T1_Builder_Close_Contour_Func close_contour;
-
- } T1_Builder_FuncsRec;
-
-
- /* an enumeration type to handle charstring parsing states */
- typedef enum T1_ParseState_
- {
- T1_Parse_Start,
- T1_Parse_Have_Width,
- T1_Parse_Have_Moveto,
- T1_Parse_Have_Path
-
- } T1_ParseState;
-
-
- /*************************************************************************/
- /* */
- /* <Structure> */
- /* T1_BuilderRec */
- /* */
- /* <Description> */
- /* A structure used during glyph loading to store its outline. */
- /* */
- /* <Fields> */
- /* memory :: The current memory object. */
- /* */
- /* face :: The current face object. */
- /* */
- /* glyph :: The current glyph slot. */
- /* */
- /* loader :: XXX */
- /* */
- /* base :: The base glyph outline. */
- /* */
- /* current :: The current glyph outline. */
- /* */
- /* max_points :: maximum points in builder outline */
- /* */
- /* max_contours :: Maximum number of contours in builder outline. */
- /* */
- /* pos_x :: The horizontal translation (if composite glyph). */
- /* */
- /* pos_y :: The vertical translation (if composite glyph). */
- /* */
- /* left_bearing :: The left side bearing point. */
- /* */
- /* advance :: The horizontal advance vector. */
- /* */
- /* bbox :: Unused. */
- /* */
- /* parse_state :: An enumeration which controls the charstring */
- /* parsing state. */
- /* */
- /* load_points :: If this flag is not set, no points are loaded. */
- /* */
- /* no_recurse :: Set but not used. */
- /* */
- /* metrics_only :: A boolean indicating that we only want to compute */
- /* the metrics of a given glyph, not load all of its */
- /* points. */
- /* */
- /* funcs :: An array of function pointers for the builder. */
- /* */
- typedef struct T1_BuilderRec_
- {
- FT_Memory memory;
- FT_Face face;
- FT_GlyphSlot glyph;
- FT_GlyphLoader loader;
- FT_Outline* base;
- FT_Outline* current;
-
- FT_Pos pos_x;
- FT_Pos pos_y;
-
- FT_Vector left_bearing;
- FT_Vector advance;
-
- FT_BBox bbox; /* bounding box */
- T1_ParseState parse_state;
- FT_Bool load_points;
- FT_Bool no_recurse;
-
- FT_Bool metrics_only;
-
- void* hints_funcs; /* hinter-specific */
- void* hints_globals; /* hinter-specific */
-
- T1_Builder_FuncsRec funcs;
-
- } T1_BuilderRec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** T1 DECODER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#if 0
-
- /*************************************************************************/
- /* */
- /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */
- /* calls during glyph loading. */
- /* */
-#define T1_MAX_SUBRS_CALLS 8
-
-
- /*************************************************************************/
- /* */
- /* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A */
- /* minimum of 16 is required. */
- /* */
-#define T1_MAX_CHARSTRINGS_OPERANDS 32
-
-#endif /* 0 */
-
-
- typedef struct T1_Decoder_ZoneRec_
- {
- FT_Byte* cursor;
- FT_Byte* base;
- FT_Byte* limit;
-
- } T1_Decoder_ZoneRec, *T1_Decoder_Zone;
-
-
- typedef struct T1_DecoderRec_* T1_Decoder;
- typedef const struct T1_Decoder_FuncsRec_* T1_Decoder_Funcs;
-
-
- typedef FT_Error
- (*T1_Decoder_Callback)( T1_Decoder decoder,
- FT_UInt glyph_index );
-
-
- typedef struct T1_Decoder_FuncsRec_
- {
- FT_Error
- (*init)( T1_Decoder decoder,
- FT_Face face,
- FT_Size size,
- FT_GlyphSlot slot,
- FT_Byte** glyph_names,
- PS_Blend blend,
- FT_Bool hinting,
- FT_Render_Mode hint_mode,
- T1_Decoder_Callback callback );
-
- void
- (*done)( T1_Decoder decoder );
-
- FT_Error
- (*parse_charstrings)( T1_Decoder decoder,
- FT_Byte* base,
- FT_UInt len );
-
- } T1_Decoder_FuncsRec;
-
-
- typedef struct T1_DecoderRec_
- {
- T1_BuilderRec builder;
-
- FT_Long stack[T1_MAX_CHARSTRINGS_OPERANDS];
- FT_Long* top;
-
- T1_Decoder_ZoneRec zones[T1_MAX_SUBRS_CALLS + 1];
- T1_Decoder_Zone zone;
-
- FT_Service_PsCMaps psnames; /* for seac */
- FT_UInt num_glyphs;
- FT_Byte** glyph_names;
-
- FT_Int lenIV; /* internal for sub routine calls */
- FT_Int num_subrs;
- FT_Byte** subrs;
- FT_UInt* subrs_len; /* array of subrs length (optional) */
- FT_Hash subrs_hash; /* used if `num_subrs' was massaged */
-
- FT_Matrix font_matrix;
- FT_Vector font_offset;
-
- FT_Int flex_state;
- FT_Int num_flex_vectors;
- FT_Vector flex_vectors[7];
-
- PS_Blend blend; /* for multiple master support */
-
- FT_Render_Mode hint_mode;
-
- T1_Decoder_Callback parse_callback;
- T1_Decoder_FuncsRec funcs;
-
- FT_Long* buildchar;
- FT_UInt len_buildchar;
-
- FT_Bool seac;
-
- } T1_DecoderRec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** AFM PARSER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct AFM_ParserRec_* AFM_Parser;
-
- typedef struct AFM_Parser_FuncsRec_
- {
- FT_Error
- (*init)( AFM_Parser parser,
- FT_Memory memory,
- FT_Byte* base,
- FT_Byte* limit );
-
- void
- (*done)( AFM_Parser parser );
-
- FT_Error
- (*parse)( AFM_Parser parser );
-
- } AFM_Parser_FuncsRec;
-
-
- typedef struct AFM_StreamRec_* AFM_Stream;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* AFM_ParserRec */
- /* */
- /* <Description> */
- /* An AFM_Parser is a parser for the AFM files. */
- /* */
- /* <Fields> */
- /* memory :: The object used for memory operations (alloc and */
- /* realloc). */
- /* */
- /* stream :: This is an opaque object. */
- /* */
- /* FontInfo :: The result will be stored here. */
- /* */
- /* get_index :: A user provided function to get a glyph index by its */
- /* name. */
- /* */
- typedef struct AFM_ParserRec_
- {
- FT_Memory memory;
- AFM_Stream stream;
-
- AFM_FontInfo FontInfo;
-
- FT_Int
- (*get_index)( const char* name,
- FT_Offset len,
- void* user_data );
-
- void* user_data;
-
- } AFM_ParserRec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** TYPE1 CHARMAPS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef const struct T1_CMap_ClassesRec_* T1_CMap_Classes;
-
- typedef struct T1_CMap_ClassesRec_
- {
- FT_CMap_Class standard;
- FT_CMap_Class expert;
- FT_CMap_Class custom;
- FT_CMap_Class unicode;
-
- } T1_CMap_ClassesRec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** PSAux Module Interface *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct PSAux_ServiceRec_
- {
- /* don't use `PS_Table_Funcs' and friends to avoid compiler warnings */
- const PS_Table_FuncsRec* ps_table_funcs;
- const PS_Parser_FuncsRec* ps_parser_funcs;
- const T1_Builder_FuncsRec* t1_builder_funcs;
- const T1_Decoder_FuncsRec* t1_decoder_funcs;
-
- void
- (*t1_decrypt)( FT_Byte* buffer,
- FT_Offset length,
- FT_UShort seed );
-
- T1_CMap_Classes t1_cmap_classes;
-
- /* fields after this comment line were added after version 2.1.10 */
- const AFM_Parser_FuncsRec* afm_parser_funcs;
-
- } PSAux_ServiceRec, *PSAux_Service;
-
- /* backward compatible type definition */
- typedef PSAux_ServiceRec PSAux_Interface;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Some convenience functions *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define IS_PS_NEWLINE( ch ) \
- ( (ch) == '\r' || \
- (ch) == '\n' )
-
-#define IS_PS_SPACE( ch ) \
- ( (ch) == ' ' || \
- IS_PS_NEWLINE( ch ) || \
- (ch) == '\t' || \
- (ch) == '\f' || \
- (ch) == '\0' )
-
-#define IS_PS_SPECIAL( ch ) \
- ( (ch) == '/' || \
- (ch) == '(' || (ch) == ')' || \
- (ch) == '<' || (ch) == '>' || \
- (ch) == '[' || (ch) == ']' || \
- (ch) == '{' || (ch) == '}' || \
- (ch) == '%' )
-
-#define IS_PS_DELIM( ch ) \
- ( IS_PS_SPACE( ch ) || \
- IS_PS_SPECIAL( ch ) )
-
-#define IS_PS_DIGIT( ch ) \
- ( (ch) >= '0' && (ch) <= '9' )
-
-#define IS_PS_XDIGIT( ch ) \
- ( IS_PS_DIGIT( ch ) || \
- ( (ch) >= 'A' && (ch) <= 'F' ) || \
- ( (ch) >= 'a' && (ch) <= 'f' ) )
-
-#define IS_PS_BASE85( ch ) \
- ( (ch) >= '!' && (ch) <= 'u' )
-
-#define IS_PS_TOKEN( cur, limit, token ) \
- ( (char)(cur)[0] == (token)[0] && \
- ( (cur) + sizeof ( (token) ) == (limit) || \
- ( (cur) + sizeof( (token) ) < (limit) && \
- IS_PS_DELIM( (cur)[sizeof ( (token) ) - 1] ) ) ) && \
- ft_strncmp( (char*)(cur), (token), sizeof ( (token) ) - 1 ) == 0 )
-
-
-FT_END_HEADER
-
-#endif /* PSAUX_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/pshints.h b/include/freetype/internal/pshints.h
deleted file mode 100644
index 49116eb44..000000000
--- a/include/freetype/internal/pshints.h
+++ /dev/null
@@ -1,722 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshints.h */
-/* */
-/* Interface to Postscript-specific (Type 1 and Type 2) hints */
-/* recorders (specification only). These are used to support native */
-/* T1/T2 hints in the `type1', `cid', and `cff' font drivers. */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PSHINTS_H_
-#define PSHINTS_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TYPE1_TABLES_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** INTERNAL REPRESENTATION OF GLOBALS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct PSH_GlobalsRec_* PSH_Globals;
-
- typedef FT_Error
- (*PSH_Globals_NewFunc)( FT_Memory memory,
- T1_Private* private_dict,
- PSH_Globals* aglobals );
-
- typedef void
- (*PSH_Globals_SetScaleFunc)( PSH_Globals globals,
- FT_Fixed x_scale,
- FT_Fixed y_scale,
- FT_Fixed x_delta,
- FT_Fixed y_delta );
-
- typedef void
- (*PSH_Globals_DestroyFunc)( PSH_Globals globals );
-
-
- typedef struct PSH_Globals_FuncsRec_
- {
- PSH_Globals_NewFunc create;
- PSH_Globals_SetScaleFunc set_scale;
- PSH_Globals_DestroyFunc destroy;
-
- } PSH_Globals_FuncsRec, *PSH_Globals_Funcs;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** PUBLIC TYPE 1 HINTS RECORDER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************
- *
- * @type:
- * T1_Hints
- *
- * @description:
- * This is a handle to an opaque structure used to record glyph hints
- * from a Type 1 character glyph character string.
- *
- * The methods used to operate on this object are defined by the
- * @T1_Hints_FuncsRec structure. Recording glyph hints is normally
- * achieved through the following scheme:
- *
- * - Open a new hint recording session by calling the `open' method.
- * This rewinds the recorder and prepare it for new input.
- *
- * - For each hint found in the glyph charstring, call the corresponding
- * method (`stem', `stem3', or `reset'). Note that these functions do
- * not return an error code.
- *
- * - Close the recording session by calling the `close' method. It
- * returns an error code if the hints were invalid or something
- * strange happened (e.g., memory shortage).
- *
- * The hints accumulated in the object can later be used by the
- * PostScript hinter.
- *
- */
- typedef struct T1_HintsRec_* T1_Hints;
-
-
- /*************************************************************************
- *
- * @type:
- * T1_Hints_Funcs
- *
- * @description:
- * A pointer to the @T1_Hints_FuncsRec structure that defines the API of
- * a given @T1_Hints object.
- *
- */
- typedef const struct T1_Hints_FuncsRec_* T1_Hints_Funcs;
-
-
- /*************************************************************************
- *
- * @functype:
- * T1_Hints_OpenFunc
- *
- * @description:
- * A method of the @T1_Hints class used to prepare it for a new Type 1
- * hints recording session.
- *
- * @input:
- * hints ::
- * A handle to the Type 1 hints recorder.
- *
- * @note:
- * You should always call the @T1_Hints_CloseFunc method in order to
- * close an opened recording session.
- *
- */
- typedef void
- (*T1_Hints_OpenFunc)( T1_Hints hints );
-
-
- /*************************************************************************
- *
- * @functype:
- * T1_Hints_SetStemFunc
- *
- * @description:
- * A method of the @T1_Hints class used to record a new horizontal or
- * vertical stem. This corresponds to the Type 1 `hstem' and `vstem'
- * operators.
- *
- * @input:
- * hints ::
- * A handle to the Type 1 hints recorder.
- *
- * dimension ::
- * 0 for horizontal stems (hstem), 1 for vertical ones (vstem).
- *
- * coords ::
- * Array of 2 coordinates in 16.16 format, used as (position,length)
- * stem descriptor.
- *
- * @note:
- * Use vertical coordinates (y) for horizontal stems (dim=0). Use
- * horizontal coordinates (x) for vertical stems (dim=1).
- *
- * `coords[0]' is the absolute stem position (lowest coordinate);
- * `coords[1]' is the length.
- *
- * The length can be negative, in which case it must be either -20 or
- * -21. It is interpreted as a `ghost' stem, according to the Type 1
- * specification.
- *
- * If the length is -21 (corresponding to a bottom ghost stem), then
- * the real stem position is `coords[0]+coords[1]'.
- *
- */
- typedef void
- (*T1_Hints_SetStemFunc)( T1_Hints hints,
- FT_UInt dimension,
- FT_Fixed* coords );
-
-
- /*************************************************************************
- *
- * @functype:
- * T1_Hints_SetStem3Func
- *
- * @description:
- * A method of the @T1_Hints class used to record three
- * counter-controlled horizontal or vertical stems at once.
- *
- * @input:
- * hints ::
- * A handle to the Type 1 hints recorder.
- *
- * dimension ::
- * 0 for horizontal stems, 1 for vertical ones.
- *
- * coords ::
- * An array of 6 values in 16.16 format, holding 3 (position,length)
- * pairs for the counter-controlled stems.
- *
- * @note:
- * Use vertical coordinates (y) for horizontal stems (dim=0). Use
- * horizontal coordinates (x) for vertical stems (dim=1).
- *
- * The lengths cannot be negative (ghost stems are never
- * counter-controlled).
- *
- */
- typedef void
- (*T1_Hints_SetStem3Func)( T1_Hints hints,
- FT_UInt dimension,
- FT_Fixed* coords );
-
-
- /*************************************************************************
- *
- * @functype:
- * T1_Hints_ResetFunc
- *
- * @description:
- * A method of the @T1_Hints class used to reset the stems hints in a
- * recording session.
- *
- * @input:
- * hints ::
- * A handle to the Type 1 hints recorder.
- *
- * end_point ::
- * The index of the last point in the input glyph in which the
- * previously defined hints apply.
- *
- */
- typedef void
- (*T1_Hints_ResetFunc)( T1_Hints hints,
- FT_UInt end_point );
-
-
- /*************************************************************************
- *
- * @functype:
- * T1_Hints_CloseFunc
- *
- * @description:
- * A method of the @T1_Hints class used to close a hint recording
- * session.
- *
- * @input:
- * hints ::
- * A handle to the Type 1 hints recorder.
- *
- * end_point ::
- * The index of the last point in the input glyph.
- *
- * @return:
- * FreeType error code. 0 means success.
- *
- * @note:
- * The error code is set to indicate that an error occurred during the
- * recording session.
- *
- */
- typedef FT_Error
- (*T1_Hints_CloseFunc)( T1_Hints hints,
- FT_UInt end_point );
-
-
- /*************************************************************************
- *
- * @functype:
- * T1_Hints_ApplyFunc
- *
- * @description:
- * A method of the @T1_Hints class used to apply hints to the
- * corresponding glyph outline. Must be called once all hints have been
- * recorded.
- *
- * @input:
- * hints ::
- * A handle to the Type 1 hints recorder.
- *
- * outline ::
- * A pointer to the target outline descriptor.
- *
- * globals ::
- * The hinter globals for this font.
- *
- * hint_mode ::
- * Hinting information.
- *
- * @return:
- * FreeType error code. 0 means success.
- *
- * @note:
- * On input, all points within the outline are in font coordinates. On
- * output, they are in 1/64th of pixels.
- *
- * The scaling transformation is taken from the `globals' object which
- * must correspond to the same font as the glyph.
- *
- */
- typedef FT_Error
- (*T1_Hints_ApplyFunc)( T1_Hints hints,
- FT_Outline* outline,
- PSH_Globals globals,
- FT_Render_Mode hint_mode );
-
-
- /*************************************************************************
- *
- * @struct:
- * T1_Hints_FuncsRec
- *
- * @description:
- * The structure used to provide the API to @T1_Hints objects.
- *
- * @fields:
- * hints ::
- * A handle to the T1 Hints recorder.
- *
- * open ::
- * The function to open a recording session.
- *
- * close ::
- * The function to close a recording session.
- *
- * stem ::
- * The function to set a simple stem.
- *
- * stem3 ::
- * The function to set counter-controlled stems.
- *
- * reset ::
- * The function to reset stem hints.
- *
- * apply ::
- * The function to apply the hints to the corresponding glyph outline.
- *
- */
- typedef struct T1_Hints_FuncsRec_
- {
- T1_Hints hints;
- T1_Hints_OpenFunc open;
- T1_Hints_CloseFunc close;
- T1_Hints_SetStemFunc stem;
- T1_Hints_SetStem3Func stem3;
- T1_Hints_ResetFunc reset;
- T1_Hints_ApplyFunc apply;
-
- } T1_Hints_FuncsRec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** PUBLIC TYPE 2 HINTS RECORDER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************
- *
- * @type:
- * T2_Hints
- *
- * @description:
- * This is a handle to an opaque structure used to record glyph hints
- * from a Type 2 character glyph character string.
- *
- * The methods used to operate on this object are defined by the
- * @T2_Hints_FuncsRec structure. Recording glyph hints is normally
- * achieved through the following scheme:
- *
- * - Open a new hint recording session by calling the `open' method.
- * This rewinds the recorder and prepare it for new input.
- *
- * - For each hint found in the glyph charstring, call the corresponding
- * method (`stems', `hintmask', `counters'). Note that these
- * functions do not return an error code.
- *
- * - Close the recording session by calling the `close' method. It
- * returns an error code if the hints were invalid or something
- * strange happened (e.g., memory shortage).
- *
- * The hints accumulated in the object can later be used by the
- * Postscript hinter.
- *
- */
- typedef struct T2_HintsRec_* T2_Hints;
-
-
- /*************************************************************************
- *
- * @type:
- * T2_Hints_Funcs
- *
- * @description:
- * A pointer to the @T2_Hints_FuncsRec structure that defines the API of
- * a given @T2_Hints object.
- *
- */
- typedef const struct T2_Hints_FuncsRec_* T2_Hints_Funcs;
-
-
- /*************************************************************************
- *
- * @functype:
- * T2_Hints_OpenFunc
- *
- * @description:
- * A method of the @T2_Hints class used to prepare it for a new Type 2
- * hints recording session.
- *
- * @input:
- * hints ::
- * A handle to the Type 2 hints recorder.
- *
- * @note:
- * You should always call the @T2_Hints_CloseFunc method in order to
- * close an opened recording session.
- *
- */
- typedef void
- (*T2_Hints_OpenFunc)( T2_Hints hints );
-
-
- /*************************************************************************
- *
- * @functype:
- * T2_Hints_StemsFunc
- *
- * @description:
- * A method of the @T2_Hints class used to set the table of stems in
- * either the vertical or horizontal dimension. Equivalent to the
- * `hstem', `vstem', `hstemhm', and `vstemhm' Type 2 operators.
- *
- * @input:
- * hints ::
- * A handle to the Type 2 hints recorder.
- *
- * dimension ::
- * 0 for horizontal stems (hstem), 1 for vertical ones (vstem).
- *
- * count ::
- * The number of stems.
- *
- * coords ::
- * An array of `count' (position,length) pairs in 16.16 format.
- *
- * @note:
- * Use vertical coordinates (y) for horizontal stems (dim=0). Use
- * horizontal coordinates (x) for vertical stems (dim=1).
- *
- * There are `2*count' elements in the `coords' array. Each even
- * element is an absolute position in font units, each odd element is a
- * length in font units.
- *
- * A length can be negative, in which case it must be either -20 or
- * -21. It is interpreted as a `ghost' stem, according to the Type 1
- * specification.
- *
- */
- typedef void
- (*T2_Hints_StemsFunc)( T2_Hints hints,
- FT_UInt dimension,
- FT_Int count,
- FT_Fixed* coordinates );
-
-
- /*************************************************************************
- *
- * @functype:
- * T2_Hints_MaskFunc
- *
- * @description:
- * A method of the @T2_Hints class used to set a given hintmask (this
- * corresponds to the `hintmask' Type 2 operator).
- *
- * @input:
- * hints ::
- * A handle to the Type 2 hints recorder.
- *
- * end_point ::
- * The glyph index of the last point to which the previously defined
- * or activated hints apply.
- *
- * bit_count ::
- * The number of bits in the hint mask.
- *
- * bytes ::
- * An array of bytes modelling the hint mask.
- *
- * @note:
- * If the hintmask starts the charstring (before any glyph point
- * definition), the value of `end_point' should be 0.
- *
- * `bit_count' is the number of meaningful bits in the `bytes' array; it
- * must be equal to the total number of hints defined so far (i.e.,
- * horizontal+verticals).
- *
- * The `bytes' array can come directly from the Type 2 charstring and
- * respects the same format.
- *
- */
- typedef void
- (*T2_Hints_MaskFunc)( T2_Hints hints,
- FT_UInt end_point,
- FT_UInt bit_count,
- const FT_Byte* bytes );
-
-
- /*************************************************************************
- *
- * @functype:
- * T2_Hints_CounterFunc
- *
- * @description:
- * A method of the @T2_Hints class used to set a given counter mask
- * (this corresponds to the `hintmask' Type 2 operator).
- *
- * @input:
- * hints ::
- * A handle to the Type 2 hints recorder.
- *
- * end_point ::
- * A glyph index of the last point to which the previously defined or
- * active hints apply.
- *
- * bit_count ::
- * The number of bits in the hint mask.
- *
- * bytes ::
- * An array of bytes modelling the hint mask.
- *
- * @note:
- * If the hintmask starts the charstring (before any glyph point
- * definition), the value of `end_point' should be 0.
- *
- * `bit_count' is the number of meaningful bits in the `bytes' array; it
- * must be equal to the total number of hints defined so far (i.e.,
- * horizontal+verticals).
- *
- * The `bytes' array can come directly from the Type 2 charstring and
- * respects the same format.
- *
- */
- typedef void
- (*T2_Hints_CounterFunc)( T2_Hints hints,
- FT_UInt bit_count,
- const FT_Byte* bytes );
-
-
- /*************************************************************************
- *
- * @functype:
- * T2_Hints_CloseFunc
- *
- * @description:
- * A method of the @T2_Hints class used to close a hint recording
- * session.
- *
- * @input:
- * hints ::
- * A handle to the Type 2 hints recorder.
- *
- * end_point ::
- * The index of the last point in the input glyph.
- *
- * @return:
- * FreeType error code. 0 means success.
- *
- * @note:
- * The error code is set to indicate that an error occurred during the
- * recording session.
- *
- */
- typedef FT_Error
- (*T2_Hints_CloseFunc)( T2_Hints hints,
- FT_UInt end_point );
-
-
- /*************************************************************************
- *
- * @functype:
- * T2_Hints_ApplyFunc
- *
- * @description:
- * A method of the @T2_Hints class used to apply hints to the
- * corresponding glyph outline. Must be called after the `close'
- * method.
- *
- * @input:
- * hints ::
- * A handle to the Type 2 hints recorder.
- *
- * outline ::
- * A pointer to the target outline descriptor.
- *
- * globals ::
- * The hinter globals for this font.
- *
- * hint_mode ::
- * Hinting information.
- *
- * @return:
- * FreeType error code. 0 means success.
- *
- * @note:
- * On input, all points within the outline are in font coordinates. On
- * output, they are in 1/64th of pixels.
- *
- * The scaling transformation is taken from the `globals' object which
- * must correspond to the same font than the glyph.
- *
- */
- typedef FT_Error
- (*T2_Hints_ApplyFunc)( T2_Hints hints,
- FT_Outline* outline,
- PSH_Globals globals,
- FT_Render_Mode hint_mode );
-
-
- /*************************************************************************
- *
- * @struct:
- * T2_Hints_FuncsRec
- *
- * @description:
- * The structure used to provide the API to @T2_Hints objects.
- *
- * @fields:
- * hints ::
- * A handle to the T2 hints recorder object.
- *
- * open ::
- * The function to open a recording session.
- *
- * close ::
- * The function to close a recording session.
- *
- * stems ::
- * The function to set the dimension's stems table.
- *
- * hintmask ::
- * The function to set hint masks.
- *
- * counter ::
- * The function to set counter masks.
- *
- * apply ::
- * The function to apply the hints on the corresponding glyph outline.
- *
- */
- typedef struct T2_Hints_FuncsRec_
- {
- T2_Hints hints;
- T2_Hints_OpenFunc open;
- T2_Hints_CloseFunc close;
- T2_Hints_StemsFunc stems;
- T2_Hints_MaskFunc hintmask;
- T2_Hints_CounterFunc counter;
- T2_Hints_ApplyFunc apply;
-
- } T2_Hints_FuncsRec;
-
-
- /* */
-
-
- typedef struct PSHinter_Interface_
- {
- PSH_Globals_Funcs (*get_globals_funcs)( FT_Module module );
- T1_Hints_Funcs (*get_t1_funcs) ( FT_Module module );
- T2_Hints_Funcs (*get_t2_funcs) ( FT_Module module );
-
- } PSHinter_Interface;
-
- typedef PSHinter_Interface* PSHinter_Service;
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_PSHINTER_INTERFACE( \
- class_, \
- get_globals_funcs_, \
- get_t1_funcs_, \
- get_t2_funcs_ ) \
- static const PSHinter_Interface class_ = \
- { \
- get_globals_funcs_, \
- get_t1_funcs_, \
- get_t2_funcs_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_PSHINTER_INTERFACE( \
- class_, \
- get_globals_funcs_, \
- get_t1_funcs_, \
- get_t2_funcs_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- PSHinter_Interface* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->get_globals_funcs = get_globals_funcs_; \
- clazz->get_t1_funcs = get_t1_funcs_; \
- clazz->get_t2_funcs = get_t2_funcs_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-FT_END_HEADER
-
-#endif /* PSHINTS_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svbdf.h b/include/freetype/internal/services/svbdf.h
deleted file mode 100644
index eeebf67da..000000000
--- a/include/freetype/internal/services/svbdf.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/***************************************************************************/
-/* */
-/* svbdf.h */
-/* */
-/* The FreeType BDF services (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVBDF_H_
-#define SVBDF_H_
-
-#include FT_BDF_H
-#include FT_INTERNAL_SERVICE_H
-
-
-FT_BEGIN_HEADER
-
-
-#define FT_SERVICE_ID_BDF "bdf"
-
- typedef FT_Error
- (*FT_BDF_GetCharsetIdFunc)( FT_Face face,
- const char* *acharset_encoding,
- const char* *acharset_registry );
-
- typedef FT_Error
- (*FT_BDF_GetPropertyFunc)( FT_Face face,
- const char* prop_name,
- BDF_PropertyRec *aproperty );
-
-
- FT_DEFINE_SERVICE( BDF )
- {
- FT_BDF_GetCharsetIdFunc get_charset_id;
- FT_BDF_GetPropertyFunc get_property;
- };
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SERVICE_BDFRec( class_, \
- get_charset_id_, \
- get_property_ ) \
- static const FT_Service_BDFRec class_ = \
- { \
- get_charset_id_, get_property_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_BDFRec( class_, \
- get_charset_id_, \
- get_property_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Service_BDFRec* clazz ) \
- { \
- clazz->get_charset_id = get_charset_id_; \
- clazz->get_property = get_property_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* SVBDF_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svcid.h b/include/freetype/internal/services/svcid.h
deleted file mode 100644
index cce94d8df..000000000
--- a/include/freetype/internal/services/svcid.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/***************************************************************************/
-/* */
-/* svcid.h */
-/* */
-/* The FreeType CID font services (specification). */
-/* */
-/* Copyright 2007-2017 by */
-/* Derek Clegg and Michael Toftdal. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVCID_H_
-#define SVCID_H_
-
-#include FT_INTERNAL_SERVICE_H
-
-
-FT_BEGIN_HEADER
-
-
-#define FT_SERVICE_ID_CID "CID"
-
- typedef FT_Error
- (*FT_CID_GetRegistryOrderingSupplementFunc)( FT_Face face,
- const char* *registry,
- const char* *ordering,
- FT_Int *supplement );
- typedef FT_Error
- (*FT_CID_GetIsInternallyCIDKeyedFunc)( FT_Face face,
- FT_Bool *is_cid );
- typedef FT_Error
- (*FT_CID_GetCIDFromGlyphIndexFunc)( FT_Face face,
- FT_UInt glyph_index,
- FT_UInt *cid );
-
- FT_DEFINE_SERVICE( CID )
- {
- FT_CID_GetRegistryOrderingSupplementFunc get_ros;
- FT_CID_GetIsInternallyCIDKeyedFunc get_is_cid;
- FT_CID_GetCIDFromGlyphIndexFunc get_cid_from_glyph_index;
- };
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SERVICE_CIDREC( class_, \
- get_ros_, \
- get_is_cid_, \
- get_cid_from_glyph_index_ ) \
- static const FT_Service_CIDRec class_ = \
- { \
- get_ros_, get_is_cid_, get_cid_from_glyph_index_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_CIDREC( class_, \
- get_ros_, \
- get_is_cid_, \
- get_cid_from_glyph_index_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_Service_CIDRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->get_ros = get_ros_; \
- clazz->get_is_cid = get_is_cid_; \
- clazz->get_cid_from_glyph_index = get_cid_from_glyph_index_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* SVCID_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svfntfmt.h b/include/freetype/internal/services/svfntfmt.h
deleted file mode 100644
index 376d9255b..000000000
--- a/include/freetype/internal/services/svfntfmt.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/***************************************************************************/
-/* */
-/* svfntfmt.h */
-/* */
-/* The FreeType font format service (specification only). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVFNTFMT_H_
-#define SVFNTFMT_H_
-
-#include FT_INTERNAL_SERVICE_H
-
-
-FT_BEGIN_HEADER
-
-
- /*
- * A trivial service used to return the name of a face's font driver,
- * according to the XFree86 nomenclature. Note that the service data
- * is a simple constant string pointer.
- */
-
-#define FT_SERVICE_ID_FONT_FORMAT "font-format"
-
-#define FT_FONT_FORMAT_TRUETYPE "TrueType"
-#define FT_FONT_FORMAT_TYPE_1 "Type 1"
-#define FT_FONT_FORMAT_BDF "BDF"
-#define FT_FONT_FORMAT_PCF "PCF"
-#define FT_FONT_FORMAT_TYPE_42 "Type 42"
-#define FT_FONT_FORMAT_CID "CID Type 1"
-#define FT_FONT_FORMAT_CFF "CFF"
-#define FT_FONT_FORMAT_PFR "PFR"
-#define FT_FONT_FORMAT_WINFNT "Windows FNT"
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* SVFNTFMT_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svgldict.h b/include/freetype/internal/services/svgldict.h
deleted file mode 100644
index 0cd13618d..000000000
--- a/include/freetype/internal/services/svgldict.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/***************************************************************************/
-/* */
-/* svgldict.h */
-/* */
-/* The FreeType glyph dictionary services (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVGLDICT_H_
-#define SVGLDICT_H_
-
-#include FT_INTERNAL_SERVICE_H
-
-
-FT_BEGIN_HEADER
-
-
- /*
- * A service used to retrieve glyph names, as well as to find the
- * index of a given glyph name in a font.
- *
- */
-
-#define FT_SERVICE_ID_GLYPH_DICT "glyph-dict"
-
-
- typedef FT_Error
- (*FT_GlyphDict_GetNameFunc)( FT_Face face,
- FT_UInt glyph_index,
- FT_Pointer buffer,
- FT_UInt buffer_max );
-
- typedef FT_UInt
- (*FT_GlyphDict_NameIndexFunc)( FT_Face face,
- FT_String* glyph_name );
-
-
- FT_DEFINE_SERVICE( GlyphDict )
- {
- FT_GlyphDict_GetNameFunc get_name;
- FT_GlyphDict_NameIndexFunc name_index; /* optional */
- };
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SERVICE_GLYPHDICTREC( class_, \
- get_name_, \
- name_index_) \
- static const FT_Service_GlyphDictRec class_ = \
- { \
- get_name_, name_index_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_GLYPHDICTREC( class_, \
- get_name_, \
- name_index_) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_Service_GlyphDictRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->get_name = get_name_; \
- clazz->name_index = name_index_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* SVGLDICT_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svgxval.h b/include/freetype/internal/services/svgxval.h
deleted file mode 100644
index 71bfa97af..000000000
--- a/include/freetype/internal/services/svgxval.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/***************************************************************************/
-/* */
-/* svgxval.h */
-/* */
-/* FreeType API for validating TrueTypeGX/AAT tables (specification). */
-/* */
-/* Copyright 2004-2017 by */
-/* Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVGXVAL_H_
-#define SVGXVAL_H_
-
-#include FT_GX_VALIDATE_H
-#include FT_INTERNAL_VALIDATE_H
-
-FT_BEGIN_HEADER
-
-
-#define FT_SERVICE_ID_GX_VALIDATE "truetypegx-validate"
-#define FT_SERVICE_ID_CLASSICKERN_VALIDATE "classickern-validate"
-
- typedef FT_Error
- (*gxv_validate_func)( FT_Face face,
- FT_UInt gx_flags,
- FT_Bytes tables[FT_VALIDATE_GX_LENGTH],
- FT_UInt table_length );
-
-
- typedef FT_Error
- (*ckern_validate_func)( FT_Face face,
- FT_UInt ckern_flags,
- FT_Bytes *ckern_table );
-
-
- FT_DEFINE_SERVICE( GXvalidate )
- {
- gxv_validate_func validate;
- };
-
- FT_DEFINE_SERVICE( CKERNvalidate )
- {
- ckern_validate_func validate;
- };
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* SVGXVAL_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svkern.h b/include/freetype/internal/services/svkern.h
deleted file mode 100644
index b8344e96e..000000000
--- a/include/freetype/internal/services/svkern.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/***************************************************************************/
-/* */
-/* svkern.h */
-/* */
-/* The FreeType Kerning service (specification). */
-/* */
-/* Copyright 2006-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVKERN_H_
-#define SVKERN_H_
-
-#include FT_INTERNAL_SERVICE_H
-#include FT_TRUETYPE_TABLES_H
-
-
-FT_BEGIN_HEADER
-
-#define FT_SERVICE_ID_KERNING "kerning"
-
-
- typedef FT_Error
- (*FT_Kerning_TrackGetFunc)( FT_Face face,
- FT_Fixed point_size,
- FT_Int degree,
- FT_Fixed* akerning );
-
- FT_DEFINE_SERVICE( Kerning )
- {
- FT_Kerning_TrackGetFunc get_track;
- };
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* SVKERN_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svmetric.h b/include/freetype/internal/services/svmetric.h
deleted file mode 100644
index 1f7d5ddd0..000000000
--- a/include/freetype/internal/services/svmetric.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/***************************************************************************/
-/* */
-/* svmetric.h */
-/* */
-/* The FreeType services for metrics variations (specification). */
-/* */
-/* Copyright 2016-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVMETRIC_H_
-#define SVMETRIC_H_
-
-#include FT_INTERNAL_SERVICE_H
-
-
-FT_BEGIN_HEADER
-
-
- /*
- * A service to manage the `HVAR, `MVAR', and `VVAR' OpenType tables.
- *
- */
-
-#define FT_SERVICE_ID_METRICS_VARIATIONS "metrics-variations"
-
-
- /* HVAR */
-
- typedef FT_Error
- (*FT_HAdvance_Adjust_Func)( FT_Face face,
- FT_UInt gindex,
- FT_Int *avalue );
-
- typedef FT_Error
- (*FT_LSB_Adjust_Func)( FT_Face face,
- FT_UInt gindex,
- FT_Int *avalue );
-
- typedef FT_Error
- (*FT_RSB_Adjust_Func)( FT_Face face,
- FT_UInt gindex,
- FT_Int *avalue );
-
- /* VVAR */
-
- typedef FT_Error
- (*FT_VAdvance_Adjust_Func)( FT_Face face,
- FT_UInt gindex,
- FT_Int *avalue );
-
- typedef FT_Error
- (*FT_TSB_Adjust_Func)( FT_Face face,
- FT_UInt gindex,
- FT_Int *avalue );
-
- typedef FT_Error
- (*FT_BSB_Adjust_Func)( FT_Face face,
- FT_UInt gindex,
- FT_Int *avalue );
-
- typedef FT_Error
- (*FT_VOrg_Adjust_Func)( FT_Face face,
- FT_UInt gindex,
- FT_Int *avalue );
-
- /* MVAR */
-
- typedef void
- (*FT_Metrics_Adjust_Func)( FT_Face face );
-
-
- FT_DEFINE_SERVICE( MetricsVariations )
- {
- FT_HAdvance_Adjust_Func hadvance_adjust;
- FT_LSB_Adjust_Func lsb_adjust;
- FT_RSB_Adjust_Func rsb_adjust;
-
- FT_VAdvance_Adjust_Func vadvance_adjust;
- FT_TSB_Adjust_Func tsb_adjust;
- FT_BSB_Adjust_Func bsb_adjust;
- FT_VOrg_Adjust_Func vorg_adjust;
-
- FT_Metrics_Adjust_Func metrics_adjust;
- };
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SERVICE_METRICSVARIATIONSREC( class_, \
- hadvance_adjust_, \
- lsb_adjust_, \
- rsb_adjust_, \
- vadvance_adjust_, \
- tsb_adjust_, \
- bsb_adjust_, \
- vorg_adjust_, \
- metrics_adjust_ ) \
- static const FT_Service_MetricsVariationsRec class_ = \
- { \
- hadvance_adjust_, \
- lsb_adjust_, \
- rsb_adjust_, \
- vadvance_adjust_, \
- tsb_adjust_, \
- bsb_adjust_, \
- vorg_adjust_, \
- metrics_adjust_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_METRICSVARIATIONSREC( class_, \
- hadvance_adjust_, \
- lsb_adjust_, \
- rsb_adjust_, \
- vadvance_adjust_, \
- tsb_adjust_, \
- bsb_adjust_, \
- vorg_adjust_, \
- metrics_adjust_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Service_MetricsVariationsRec* clazz ) \
- { \
- clazz->hadvance_adjust = hadvance_adjust_; \
- clazz->lsb_adjust = lsb_adjust_; \
- clazz->rsb_adjust = rsb_adjust_; \
- clazz->vadvance_adjust = vadvance_adjust_; \
- clazz->tsb_adjust = tsb_adjust_; \
- clazz->bsb_adjust = bsb_adjust_; \
- clazz->vorg_adjust = vorg_adjust_; \
- clazz->metrics_adjust = metrics_adjust_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* SVMETRIC_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svmm.h b/include/freetype/internal/services/svmm.h
deleted file mode 100644
index 1d51cd909..000000000
--- a/include/freetype/internal/services/svmm.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/***************************************************************************/
-/* */
-/* svmm.h */
-/* */
-/* The FreeType Multiple Masters and GX var services (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVMM_H_
-#define SVMM_H_
-
-#include FT_INTERNAL_SERVICE_H
-
-
-FT_BEGIN_HEADER
-
-
- /*
- * A service used to manage multiple-masters data in a given face.
- *
- * See the related APIs in `ftmm.h' (FT_MULTIPLE_MASTERS_H).
- *
- */
-
-#define FT_SERVICE_ID_MULTI_MASTERS "multi-masters"
-
-
- typedef FT_Error
- (*FT_Get_MM_Func)( FT_Face face,
- FT_Multi_Master* master );
-
- typedef FT_Error
- (*FT_Get_MM_Var_Func)( FT_Face face,
- FT_MM_Var* *master );
-
- typedef FT_Error
- (*FT_Set_MM_Design_Func)( FT_Face face,
- FT_UInt num_coords,
- FT_Long* coords );
-
- typedef FT_Error
- (*FT_Set_Var_Design_Func)( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
- typedef FT_Error
- (*FT_Set_MM_Blend_Func)( FT_Face face,
- FT_UInt num_coords,
- FT_Long* coords );
-
- typedef FT_Error
- (*FT_Get_Var_Design_Func)( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
- typedef FT_Error
- (*FT_Get_MM_Blend_Func)( FT_Face face,
- FT_UInt num_coords,
- FT_Long* coords );
-
- typedef FT_Error
- (*FT_Get_Var_Blend_Func)( FT_Face face,
- FT_UInt *num_coords,
- FT_Fixed* *coords,
- FT_Fixed* *normalizedcoords,
- FT_MM_Var* *mm_var );
-
- typedef void
- (*FT_Done_Blend_Func)( FT_Face );
-
-
- FT_DEFINE_SERVICE( MultiMasters )
- {
- FT_Get_MM_Func get_mm;
- FT_Set_MM_Design_Func set_mm_design;
- FT_Set_MM_Blend_Func set_mm_blend;
- FT_Get_MM_Blend_Func get_mm_blend;
- FT_Get_MM_Var_Func get_mm_var;
- FT_Set_Var_Design_Func set_var_design;
- FT_Get_Var_Design_Func get_var_design;
-
- /* for internal use; only needed for code sharing between modules */
- FT_Get_Var_Blend_Func get_var_blend;
- FT_Done_Blend_Func done_blend;
- };
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \
- get_mm_, \
- set_mm_design_, \
- set_mm_blend_, \
- get_mm_blend_, \
- get_mm_var_, \
- set_var_design_, \
- get_var_design_, \
- get_var_blend_, \
- done_blend_ ) \
- static const FT_Service_MultiMastersRec class_ = \
- { \
- get_mm_, \
- set_mm_design_, \
- set_mm_blend_, \
- get_mm_blend_, \
- get_mm_var_, \
- set_var_design_, \
- get_var_design_, \
- get_var_blend_, \
- done_blend_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \
- get_mm_, \
- set_mm_design_, \
- set_mm_blend_, \
- get_mm_blend_, \
- get_mm_var_, \
- set_var_design_, \
- get_var_design_, \
- get_var_blend_, \
- done_blend_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Service_MultiMastersRec* clazz ) \
- { \
- clazz->get_mm = get_mm_; \
- clazz->set_mm_design = set_mm_design_; \
- clazz->set_mm_blend = set_mm_blend_; \
- clazz->get_mm_blend = get_mm_blend_; \
- clazz->get_mm_var = get_mm_var_; \
- clazz->set_var_design = set_var_design_; \
- clazz->get_var_design = get_var_design_; \
- clazz->get_var_blend = get_var_blend_; \
- clazz->done_blend = done_blend_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* SVMM_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svotval.h b/include/freetype/internal/services/svotval.h
deleted file mode 100644
index ac84abee4..000000000
--- a/include/freetype/internal/services/svotval.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/***************************************************************************/
-/* */
-/* svotval.h */
-/* */
-/* The FreeType OpenType validation service (specification). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVOTVAL_H_
-#define SVOTVAL_H_
-
-#include FT_OPENTYPE_VALIDATE_H
-#include FT_INTERNAL_VALIDATE_H
-
-FT_BEGIN_HEADER
-
-
-#define FT_SERVICE_ID_OPENTYPE_VALIDATE "opentype-validate"
-
-
- typedef FT_Error
- (*otv_validate_func)( FT_Face volatile face,
- FT_UInt ot_flags,
- FT_Bytes *base,
- FT_Bytes *gdef,
- FT_Bytes *gpos,
- FT_Bytes *gsub,
- FT_Bytes *jstf );
-
-
- FT_DEFINE_SERVICE( OTvalidate )
- {
- otv_validate_func validate;
- };
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* SVOTVAL_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svpfr.h b/include/freetype/internal/services/svpfr.h
deleted file mode 100644
index c9a182fe3..000000000
--- a/include/freetype/internal/services/svpfr.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/***************************************************************************/
-/* */
-/* svpfr.h */
-/* */
-/* Internal PFR service functions (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVPFR_H_
-#define SVPFR_H_
-
-#include FT_PFR_H
-#include FT_INTERNAL_SERVICE_H
-
-
-FT_BEGIN_HEADER
-
-
-#define FT_SERVICE_ID_PFR_METRICS "pfr-metrics"
-
-
- typedef FT_Error
- (*FT_PFR_GetMetricsFunc)( FT_Face face,
- FT_UInt *aoutline,
- FT_UInt *ametrics,
- FT_Fixed *ax_scale,
- FT_Fixed *ay_scale );
-
- typedef FT_Error
- (*FT_PFR_GetKerningFunc)( FT_Face face,
- FT_UInt left,
- FT_UInt right,
- FT_Vector *avector );
-
- typedef FT_Error
- (*FT_PFR_GetAdvanceFunc)( FT_Face face,
- FT_UInt gindex,
- FT_Pos *aadvance );
-
-
- FT_DEFINE_SERVICE( PfrMetrics )
- {
- FT_PFR_GetMetricsFunc get_metrics;
- FT_PFR_GetKerningFunc get_kerning;
- FT_PFR_GetAdvanceFunc get_advance;
-
- };
-
- /* */
-
-FT_END_HEADER
-
-#endif /* SVPFR_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svpostnm.h b/include/freetype/internal/services/svpostnm.h
deleted file mode 100644
index 022cdec19..000000000
--- a/include/freetype/internal/services/svpostnm.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/***************************************************************************/
-/* */
-/* svpostnm.h */
-/* */
-/* The FreeType PostScript name services (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVPOSTNM_H_
-#define SVPOSTNM_H_
-
-#include FT_INTERNAL_SERVICE_H
-
-
-FT_BEGIN_HEADER
-
- /*
- * A trivial service used to retrieve the PostScript name of a given
- * font when available. The `get_name' field should never be NULL.
- *
- * The corresponding function can return NULL to indicate that the
- * PostScript name is not available.
- *
- * The name is owned by the face and will be destroyed with it.
- */
-
-#define FT_SERVICE_ID_POSTSCRIPT_FONT_NAME "postscript-font-name"
-
-
- typedef const char*
- (*FT_PsName_GetFunc)( FT_Face face );
-
-
- FT_DEFINE_SERVICE( PsFontName )
- {
- FT_PsName_GetFunc get_ps_font_name;
- };
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SERVICE_PSFONTNAMEREC( class_, get_ps_font_name_ ) \
- static const FT_Service_PsFontNameRec class_ = \
- { \
- get_ps_font_name_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_PSFONTNAMEREC( class_, get_ps_font_name_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_Service_PsFontNameRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->get_ps_font_name = get_ps_font_name_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* SVPOSTNM_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svprop.h b/include/freetype/internal/services/svprop.h
deleted file mode 100644
index eb2d4eed1..000000000
--- a/include/freetype/internal/services/svprop.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/***************************************************************************/
-/* */
-/* svprop.h */
-/* */
-/* The FreeType property service (specification). */
-/* */
-/* Copyright 2012-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVPROP_H_
-#define SVPROP_H_
-
-
-FT_BEGIN_HEADER
-
-
-#define FT_SERVICE_ID_PROPERTIES "properties"
-
-
- typedef FT_Error
- (*FT_Properties_SetFunc)( FT_Module module,
- const char* property_name,
- const void* value,
- FT_Bool value_is_string );
-
- typedef FT_Error
- (*FT_Properties_GetFunc)( FT_Module module,
- const char* property_name,
- void* value );
-
-
- FT_DEFINE_SERVICE( Properties )
- {
- FT_Properties_SetFunc set_property;
- FT_Properties_GetFunc get_property;
- };
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SERVICE_PROPERTIESREC( class_, \
- set_property_, \
- get_property_ ) \
- static const FT_Service_PropertiesRec class_ = \
- { \
- set_property_, \
- get_property_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_PROPERTIESREC( class_, \
- set_property_, \
- get_property_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Service_PropertiesRec* clazz ) \
- { \
- clazz->set_property = set_property_; \
- clazz->get_property = get_property_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* SVPROP_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svpscmap.h b/include/freetype/internal/services/svpscmap.h
deleted file mode 100644
index b32122e5d..000000000
--- a/include/freetype/internal/services/svpscmap.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/***************************************************************************/
-/* */
-/* svpscmap.h */
-/* */
-/* The FreeType PostScript charmap service (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVPSCMAP_H_
-#define SVPSCMAP_H_
-
-#include FT_INTERNAL_OBJECTS_H
-
-
-FT_BEGIN_HEADER
-
-
-#define FT_SERVICE_ID_POSTSCRIPT_CMAPS "postscript-cmaps"
-
-
- /*
- * Adobe glyph name to unicode value.
- */
- typedef FT_UInt32
- (*PS_Unicode_ValueFunc)( const char* glyph_name );
-
- /*
- * Macintosh name id to glyph name. NULL if invalid index.
- */
- typedef const char*
- (*PS_Macintosh_NameFunc)( FT_UInt name_index );
-
- /*
- * Adobe standard string ID to glyph name. NULL if invalid index.
- */
- typedef const char*
- (*PS_Adobe_Std_StringsFunc)( FT_UInt string_index );
-
-
- /*
- * Simple unicode -> glyph index charmap built from font glyph names
- * table.
- */
- typedef struct PS_UniMap_
- {
- FT_UInt32 unicode; /* bit 31 set: is glyph variant */
- FT_UInt glyph_index;
-
- } PS_UniMap;
-
-
- typedef struct PS_UnicodesRec_* PS_Unicodes;
-
- typedef struct PS_UnicodesRec_
- {
- FT_CMapRec cmap;
- FT_UInt num_maps;
- PS_UniMap* maps;
-
- } PS_UnicodesRec;
-
-
- /*
- * A function which returns a glyph name for a given index. Returns
- * NULL if invalid index.
- */
- typedef const char*
- (*PS_GetGlyphNameFunc)( FT_Pointer data,
- FT_UInt string_index );
-
- /*
- * A function used to release the glyph name returned by
- * PS_GetGlyphNameFunc, when needed
- */
- typedef void
- (*PS_FreeGlyphNameFunc)( FT_Pointer data,
- const char* name );
-
- typedef FT_Error
- (*PS_Unicodes_InitFunc)( FT_Memory memory,
- PS_Unicodes unicodes,
- FT_UInt num_glyphs,
- PS_GetGlyphNameFunc get_glyph_name,
- PS_FreeGlyphNameFunc free_glyph_name,
- FT_Pointer glyph_data );
-
- typedef FT_UInt
- (*PS_Unicodes_CharIndexFunc)( PS_Unicodes unicodes,
- FT_UInt32 unicode );
-
- typedef FT_UInt32
- (*PS_Unicodes_CharNextFunc)( PS_Unicodes unicodes,
- FT_UInt32 *unicode );
-
-
- FT_DEFINE_SERVICE( PsCMaps )
- {
- PS_Unicode_ValueFunc unicode_value;
-
- PS_Unicodes_InitFunc unicodes_init;
- PS_Unicodes_CharIndexFunc unicodes_char_index;
- PS_Unicodes_CharNextFunc unicodes_char_next;
-
- PS_Macintosh_NameFunc macintosh_name;
- PS_Adobe_Std_StringsFunc adobe_std_strings;
- const unsigned short* adobe_std_encoding;
- const unsigned short* adobe_expert_encoding;
- };
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SERVICE_PSCMAPSREC( class_, \
- unicode_value_, \
- unicodes_init_, \
- unicodes_char_index_, \
- unicodes_char_next_, \
- macintosh_name_, \
- adobe_std_strings_, \
- adobe_std_encoding_, \
- adobe_expert_encoding_ ) \
- static const FT_Service_PsCMapsRec class_ = \
- { \
- unicode_value_, unicodes_init_, \
- unicodes_char_index_, unicodes_char_next_, macintosh_name_, \
- adobe_std_strings_, adobe_std_encoding_, adobe_expert_encoding_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_PSCMAPSREC( class_, \
- unicode_value_, \
- unicodes_init_, \
- unicodes_char_index_, \
- unicodes_char_next_, \
- macintosh_name_, \
- adobe_std_strings_, \
- adobe_std_encoding_, \
- adobe_expert_encoding_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_Service_PsCMapsRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->unicode_value = unicode_value_; \
- clazz->unicodes_init = unicodes_init_; \
- clazz->unicodes_char_index = unicodes_char_index_; \
- clazz->unicodes_char_next = unicodes_char_next_; \
- clazz->macintosh_name = macintosh_name_; \
- clazz->adobe_std_strings = adobe_std_strings_; \
- clazz->adobe_std_encoding = adobe_std_encoding_; \
- clazz->adobe_expert_encoding = adobe_expert_encoding_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* SVPSCMAP_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svpsinfo.h b/include/freetype/internal/services/svpsinfo.h
deleted file mode 100644
index 0220ce529..000000000
--- a/include/freetype/internal/services/svpsinfo.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/***************************************************************************/
-/* */
-/* svpsinfo.h */
-/* */
-/* The FreeType PostScript info service (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVPSINFO_H_
-#define SVPSINFO_H_
-
-#include FT_INTERNAL_SERVICE_H
-#include FT_INTERNAL_TYPE1_TYPES_H
-
-
-FT_BEGIN_HEADER
-
-
-#define FT_SERVICE_ID_POSTSCRIPT_INFO "postscript-info"
-
-
- typedef FT_Error
- (*PS_GetFontInfoFunc)( FT_Face face,
- PS_FontInfoRec* afont_info );
-
- typedef FT_Error
- (*PS_GetFontExtraFunc)( FT_Face face,
- PS_FontExtraRec* afont_extra );
-
- typedef FT_Int
- (*PS_HasGlyphNamesFunc)( FT_Face face );
-
- typedef FT_Error
- (*PS_GetFontPrivateFunc)( FT_Face face,
- PS_PrivateRec* afont_private );
-
- typedef FT_Long
- (*PS_GetFontValueFunc)( FT_Face face,
- PS_Dict_Keys key,
- FT_UInt idx,
- void *value,
- FT_Long value_len );
-
-
- FT_DEFINE_SERVICE( PsInfo )
- {
- PS_GetFontInfoFunc ps_get_font_info;
- PS_GetFontExtraFunc ps_get_font_extra;
- PS_HasGlyphNamesFunc ps_has_glyph_names;
- PS_GetFontPrivateFunc ps_get_font_private;
- PS_GetFontValueFunc ps_get_font_value;
- };
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SERVICE_PSINFOREC( class_, \
- get_font_info_, \
- ps_get_font_extra_, \
- has_glyph_names_, \
- get_font_private_, \
- get_font_value_ ) \
- static const FT_Service_PsInfoRec class_ = \
- { \
- get_font_info_, ps_get_font_extra_, has_glyph_names_, \
- get_font_private_, get_font_value_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_PSINFOREC( class_, \
- get_font_info_, \
- ps_get_font_extra_, \
- has_glyph_names_, \
- get_font_private_, \
- get_font_value_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_Service_PsInfoRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->ps_get_font_info = get_font_info_; \
- clazz->ps_get_font_extra = ps_get_font_extra_; \
- clazz->ps_has_glyph_names = has_glyph_names_; \
- clazz->ps_get_font_private = get_font_private_; \
- clazz->ps_get_font_value = get_font_value_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* SVPSINFO_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svsfnt.h b/include/freetype/internal/services/svsfnt.h
deleted file mode 100644
index 49d18e43e..000000000
--- a/include/freetype/internal/services/svsfnt.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/***************************************************************************/
-/* */
-/* svsfnt.h */
-/* */
-/* The FreeType SFNT table loading service (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVSFNT_H_
-#define SVSFNT_H_
-
-#include FT_INTERNAL_SERVICE_H
-#include FT_TRUETYPE_TABLES_H
-
-
-FT_BEGIN_HEADER
-
-
- /*
- * SFNT table loading service.
- */
-
-#define FT_SERVICE_ID_SFNT_TABLE "sfnt-table"
-
-
- /*
- * Used to implement FT_Load_Sfnt_Table().
- */
- typedef FT_Error
- (*FT_SFNT_TableLoadFunc)( FT_Face face,
- FT_ULong tag,
- FT_Long offset,
- FT_Byte* buffer,
- FT_ULong* length );
-
- /*
- * Used to implement FT_Get_Sfnt_Table().
- */
- typedef void*
- (*FT_SFNT_TableGetFunc)( FT_Face face,
- FT_Sfnt_Tag tag );
-
-
- /*
- * Used to implement FT_Sfnt_Table_Info().
- */
- typedef FT_Error
- (*FT_SFNT_TableInfoFunc)( FT_Face face,
- FT_UInt idx,
- FT_ULong *tag,
- FT_ULong *offset,
- FT_ULong *length );
-
-
- FT_DEFINE_SERVICE( SFNT_Table )
- {
- FT_SFNT_TableLoadFunc load_table;
- FT_SFNT_TableGetFunc get_table;
- FT_SFNT_TableInfoFunc table_info;
- };
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SERVICE_SFNT_TABLEREC( class_, load_, get_, info_ ) \
- static const FT_Service_SFNT_TableRec class_ = \
- { \
- load_, get_, info_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_SFNT_TABLEREC( class_, load_, get_, info_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Service_SFNT_TableRec* clazz ) \
- { \
- clazz->load_table = load_; \
- clazz->get_table = get_; \
- clazz->table_info = info_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* SVSFNT_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svttcmap.h b/include/freetype/internal/services/svttcmap.h
deleted file mode 100644
index 30f7feec7..000000000
--- a/include/freetype/internal/services/svttcmap.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/***************************************************************************/
-/* */
-/* svttcmap.h */
-/* */
-/* The FreeType TrueType/sfnt cmap extra information service. */
-/* */
-/* Copyright 2003-2017 by */
-/* Masatake YAMATO, Redhat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/* Development of this service is support of
- Information-technology Promotion Agency, Japan. */
-
-#ifndef SVTTCMAP_H_
-#define SVTTCMAP_H_
-
-#include FT_INTERNAL_SERVICE_H
-#include FT_TRUETYPE_TABLES_H
-
-
-FT_BEGIN_HEADER
-
-
-#define FT_SERVICE_ID_TT_CMAP "tt-cmaps"
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_CMapInfo */
- /* */
- /* <Description> */
- /* A structure used to store TrueType/sfnt specific cmap information */
- /* which is not covered by the generic @FT_CharMap structure. This */
- /* structure can be accessed with the @FT_Get_TT_CMap_Info function. */
- /* */
- /* <Fields> */
- /* language :: */
- /* The language ID used in Mac fonts. Definitions of values are in */
- /* `ttnameid.h'. */
- /* */
- /* format :: */
- /* The cmap format. OpenType 1.6 defines the formats 0 (byte */
- /* encoding table), 2~(high-byte mapping through table), 4~(segment */
- /* mapping to delta values), 6~(trimmed table mapping), 8~(mixed */
- /* 16-bit and 32-bit coverage), 10~(trimmed array), 12~(segmented */
- /* coverage), 13~(last resort font), and 14 (Unicode Variation */
- /* Sequences). */
- /* */
- typedef struct TT_CMapInfo_
- {
- FT_ULong language;
- FT_Long format;
-
- } TT_CMapInfo;
-
-
- typedef FT_Error
- (*TT_CMap_Info_GetFunc)( FT_CharMap charmap,
- TT_CMapInfo *cmap_info );
-
-
- FT_DEFINE_SERVICE( TTCMaps )
- {
- TT_CMap_Info_GetFunc get_cmap_info;
- };
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SERVICE_TTCMAPSREC( class_, get_cmap_info_ ) \
- static const FT_Service_TTCMapsRec class_ = \
- { \
- get_cmap_info_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_TTCMAPSREC( class_, get_cmap_info_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- FT_Service_TTCMapsRec* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->get_cmap_info = get_cmap_info_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* SVTTCMAP_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svtteng.h b/include/freetype/internal/services/svtteng.h
deleted file mode 100644
index e4b368ad4..000000000
--- a/include/freetype/internal/services/svtteng.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/***************************************************************************/
-/* */
-/* svtteng.h */
-/* */
-/* The FreeType TrueType engine query service (specification). */
-/* */
-/* Copyright 2006-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVTTENG_H_
-#define SVTTENG_H_
-
-#include FT_INTERNAL_SERVICE_H
-#include FT_MODULE_H
-
-
-FT_BEGIN_HEADER
-
-
- /*
- * SFNT table loading service.
- */
-
-#define FT_SERVICE_ID_TRUETYPE_ENGINE "truetype-engine"
-
- /*
- * Used to implement FT_Get_TrueType_Engine_Type
- */
-
- FT_DEFINE_SERVICE( TrueTypeEngine )
- {
- FT_TrueTypeEngineType engine_type;
- };
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* SVTTENG_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svttglyf.h b/include/freetype/internal/services/svttglyf.h
deleted file mode 100644
index b7793059f..000000000
--- a/include/freetype/internal/services/svttglyf.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/***************************************************************************/
-/* */
-/* svttglyf.h */
-/* */
-/* The FreeType TrueType glyph service. */
-/* */
-/* Copyright 2007-2017 by */
-/* David Turner. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-#ifndef SVTTGLYF_H_
-#define SVTTGLYF_H_
-
-#include FT_INTERNAL_SERVICE_H
-#include FT_TRUETYPE_TABLES_H
-
-
-FT_BEGIN_HEADER
-
-
-#define FT_SERVICE_ID_TT_GLYF "tt-glyf"
-
-
- typedef FT_ULong
- (*TT_Glyf_GetLocationFunc)( FT_Face face,
- FT_UInt gindex,
- FT_ULong *psize );
-
- FT_DEFINE_SERVICE( TTGlyf )
- {
- TT_Glyf_GetLocationFunc get_location;
- };
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SERVICE_TTGLYFREC( class_, get_location_ ) \
- static const FT_Service_TTGlyfRec class_ = \
- { \
- get_location_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_TTGLYFREC( class_, get_location_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Service_TTGlyfRec* clazz ) \
- { \
- clazz->get_location = get_location_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* SVTTGLYF_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/services/svwinfnt.h b/include/freetype/internal/services/svwinfnt.h
deleted file mode 100644
index c94b7e107..000000000
--- a/include/freetype/internal/services/svwinfnt.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/***************************************************************************/
-/* */
-/* svwinfnt.h */
-/* */
-/* The FreeType Windows FNT/FONT service (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SVWINFNT_H_
-#define SVWINFNT_H_
-
-#include FT_INTERNAL_SERVICE_H
-#include FT_WINFONTS_H
-
-
-FT_BEGIN_HEADER
-
-
-#define FT_SERVICE_ID_WINFNT "winfonts"
-
- typedef FT_Error
- (*FT_WinFnt_GetHeaderFunc)( FT_Face face,
- FT_WinFNT_HeaderRec *aheader );
-
-
- FT_DEFINE_SERVICE( WinFnt )
- {
- FT_WinFnt_GetHeaderFunc get_header;
- };
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* SVWINFNT_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/sfnt.h b/include/freetype/internal/sfnt.h
deleted file mode 100644
index b8667a003..000000000
--- a/include/freetype/internal/sfnt.h
+++ /dev/null
@@ -1,784 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfnt.h */
-/* */
-/* High-level `sfnt' driver interface (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SFNT_H_
-#define SFNT_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Init_Face_Func */
- /* */
- /* <Description> */
- /* First part of the SFNT face object initialization. This finds */
- /* the face in a SFNT file or collection, and load its format tag in */
- /* face->format_tag. */
- /* */
- /* <Input> */
- /* stream :: The input stream. */
- /* */
- /* face :: A handle to the target face object. */
- /* */
- /* face_index :: The index of the TrueType font, if we are opening a */
- /* collection, in bits 0-15. The numbered instance */
- /* index~+~1 of a GX (sub)font, if applicable, in bits */
- /* 16-30. */
- /* */
- /* num_params :: The number of additional parameters. */
- /* */
- /* params :: Optional additional parameters. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* The stream cursor must be at the font file's origin. */
- /* */
- /* This function recognizes fonts embedded in a `TrueType */
- /* collection'. */
- /* */
- /* Once the format tag has been validated by the font driver, it */
- /* should then call the TT_Load_Face_Func() callback to read the rest */
- /* of the SFNT tables in the object. */
- /* */
- typedef FT_Error
- (*TT_Init_Face_Func)( FT_Stream stream,
- TT_Face face,
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Load_Face_Func */
- /* */
- /* <Description> */
- /* Second part of the SFNT face object initialization. This loads */
- /* the common SFNT tables (head, OS/2, maxp, metrics, etc.) in the */
- /* face object. */
- /* */
- /* <Input> */
- /* stream :: The input stream. */
- /* */
- /* face :: A handle to the target face object. */
- /* */
- /* face_index :: The index of the TrueType font, if we are opening a */
- /* collection, in bits 0-15. The numbered instance */
- /* index~+~1 of a GX (sub)font, if applicable, in bits */
- /* 16-30. */
- /* */
- /* num_params :: The number of additional parameters. */
- /* */
- /* params :: Optional additional parameters. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* This function must be called after TT_Init_Face_Func(). */
- /* */
- typedef FT_Error
- (*TT_Load_Face_Func)( FT_Stream stream,
- TT_Face face,
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Done_Face_Func */
- /* */
- /* <Description> */
- /* A callback used to delete the common SFNT data from a face. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* <Note> */
- /* This function does NOT destroy the face object. */
- /* */
- typedef void
- (*TT_Done_Face_Func)( TT_Face face );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Load_Any_Func */
- /* */
- /* <Description> */
- /* Load any font table into client memory. */
- /* */
- /* <Input> */
- /* face :: The face object to look for. */
- /* */
- /* tag :: The tag of table to load. Use the value 0 if you want */
- /* to access the whole font file, else set this parameter */
- /* to a valid TrueType table tag that you can forge with */
- /* the MAKE_TT_TAG macro. */
- /* */
- /* offset :: The starting offset in the table (or the file if */
- /* tag == 0). */
- /* */
- /* length :: The address of the decision variable: */
- /* */
- /* If length == NULL: */
- /* Loads the whole table. Returns an error if */
- /* `offset' == 0! */
- /* */
- /* If *length == 0: */
- /* Exits immediately; returning the length of the given */
- /* table or of the font file, depending on the value of */
- /* `tag'. */
- /* */
- /* If *length != 0: */
- /* Loads the next `length' bytes of table or font, */
- /* starting at offset `offset' (in table or font too). */
- /* */
- /* <Output> */
- /* buffer :: The address of target buffer. */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success. */
- /* */
- typedef FT_Error
- (*TT_Load_Any_Func)( TT_Face face,
- FT_ULong tag,
- FT_Long offset,
- FT_Byte *buffer,
- FT_ULong* length );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Find_SBit_Image_Func */
- /* */
- /* <Description> */
- /* Check whether an embedded bitmap (an `sbit') exists for a given */
- /* glyph, at a given strike. */
- /* */
- /* <Input> */
- /* face :: The target face object. */
- /* */
- /* glyph_index :: The glyph index. */
- /* */
- /* strike_index :: The current strike index. */
- /* */
- /* <Output> */
- /* arange :: The SBit range containing the glyph index. */
- /* */
- /* astrike :: The SBit strike containing the glyph index. */
- /* */
- /* aglyph_offset :: The offset of the glyph data in `EBDT' table. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. Returns */
- /* SFNT_Err_Invalid_Argument if no sbit exists for the requested */
- /* glyph. */
- /* */
- typedef FT_Error
- (*TT_Find_SBit_Image_Func)( TT_Face face,
- FT_UInt glyph_index,
- FT_ULong strike_index,
- TT_SBit_Range *arange,
- TT_SBit_Strike *astrike,
- FT_ULong *aglyph_offset );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Load_SBit_Metrics_Func */
- /* */
- /* <Description> */
- /* Get the big metrics for a given embedded bitmap. */
- /* */
- /* <Input> */
- /* stream :: The input stream. */
- /* */
- /* range :: The SBit range containing the glyph. */
- /* */
- /* <Output> */
- /* big_metrics :: A big SBit metrics structure for the glyph. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* The stream cursor must be positioned at the glyph's offset within */
- /* the `EBDT' table before the call. */
- /* */
- /* If the image format uses variable metrics, the stream cursor is */
- /* positioned just after the metrics header in the `EBDT' table on */
- /* function exit. */
- /* */
- typedef FT_Error
- (*TT_Load_SBit_Metrics_Func)( FT_Stream stream,
- TT_SBit_Range range,
- TT_SBit_Metrics metrics );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Load_SBit_Image_Func */
- /* */
- /* <Description> */
- /* Load a given glyph sbit image from the font resource. This also */
- /* returns its metrics. */
- /* */
- /* <Input> */
- /* face :: */
- /* The target face object. */
- /* */
- /* strike_index :: */
- /* The strike index. */
- /* */
- /* glyph_index :: */
- /* The current glyph index. */
- /* */
- /* load_flags :: */
- /* The current load flags. */
- /* */
- /* stream :: */
- /* The input stream. */
- /* */
- /* <Output> */
- /* amap :: */
- /* The target pixmap. */
- /* */
- /* ametrics :: */
- /* A big sbit metrics structure for the glyph image. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. Returns an error if no */
- /* glyph sbit exists for the index. */
- /* */
- /* <Note> */
- /* The `map.buffer' field is always freed before the glyph is loaded. */
- /* */
- typedef FT_Error
- (*TT_Load_SBit_Image_Func)( TT_Face face,
- FT_ULong strike_index,
- FT_UInt glyph_index,
- FT_UInt load_flags,
- FT_Stream stream,
- FT_Bitmap *amap,
- TT_SBit_MetricsRec *ametrics );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Set_SBit_Strike_Func */
- /* */
- /* <Description> */
- /* Select an sbit strike for a given size request. */
- /* */
- /* <Input> */
- /* face :: The target face object. */
- /* */
- /* req :: The size request. */
- /* */
- /* <Output> */
- /* astrike_index :: The index of the sbit strike. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. Returns an error if no */
- /* sbit strike exists for the selected ppem values. */
- /* */
- typedef FT_Error
- (*TT_Set_SBit_Strike_Func)( TT_Face face,
- FT_Size_Request req,
- FT_ULong* astrike_index );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Load_Strike_Metrics_Func */
- /* */
- /* <Description> */
- /* Load the metrics of a given strike. */
- /* */
- /* <Input> */
- /* face :: The target face object. */
- /* */
- /* strike_index :: The strike index. */
- /* */
- /* <Output> */
- /* metrics :: the metrics of the strike. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. Returns an error if no */
- /* such sbit strike exists. */
- /* */
- typedef FT_Error
- (*TT_Load_Strike_Metrics_Func)( TT_Face face,
- FT_ULong strike_index,
- FT_Size_Metrics* metrics );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Get_PS_Name_Func */
- /* */
- /* <Description> */
- /* Get the PostScript glyph name of a glyph. */
- /* */
- /* <Input> */
- /* idx :: The glyph index. */
- /* */
- /* PSname :: The address of a string pointer. Will be NULL in case */
- /* of error, otherwise it is a pointer to the glyph name. */
- /* */
- /* You must not modify the returned string! */
- /* */
- /* <Output> */
- /* FreeType error code. 0 means success. */
- /* */
- typedef FT_Error
- (*TT_Get_PS_Name_Func)( TT_Face face,
- FT_UInt idx,
- FT_String** PSname );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Load_Metrics_Func */
- /* */
- /* <Description> */
- /* Load a metrics table, which is a table with a horizontal and a */
- /* vertical version. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* vertical :: A boolean flag. If set, load the vertical one. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- typedef FT_Error
- (*TT_Load_Metrics_Func)( TT_Face face,
- FT_Stream stream,
- FT_Bool vertical );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Get_Metrics_Func */
- /* */
- /* <Description> */
- /* Load the horizontal or vertical header in a face object. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* vertical :: A boolean flag. If set, load vertical metrics. */
- /* */
- /* gindex :: The glyph index. */
- /* */
- /* <Output> */
- /* abearing :: The horizontal (or vertical) bearing. Set to zero in */
- /* case of error. */
- /* */
- /* aadvance :: The horizontal (or vertical) advance. Set to zero in */
- /* case of error. */
- /* */
- typedef void
- (*TT_Get_Metrics_Func)( TT_Face face,
- FT_Bool vertical,
- FT_UInt gindex,
- FT_Short* abearing,
- FT_UShort* aadvance );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Get_Name_Func */
- /* */
- /* <Description> */
- /* From the `name' table, return a given ENGLISH name record in */
- /* ASCII. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* nameid :: The name id of the name record to return. */
- /* */
- /* <InOut> */
- /* name :: The address of an allocated string pointer. NULL if */
- /* no name is present. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- typedef FT_Error
- (*TT_Get_Name_Func)( TT_Face face,
- FT_UShort nameid,
- FT_String** name );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Get_Name_ID_Func */
- /* */
- /* <Description> */
- /* Search whether an ENGLISH version for a given name ID is in the */
- /* `name' table. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* nameid :: The name id of the name record to return. */
- /* */
- /* <Out> */
- /* win :: If non-negative, an index into the `name' table with */
- /* the corresponding (3,1) or (3,0) Windows entry. */
- /* */
- /* apple :: If non-negative, an index into the `name' table with */
- /* the corresponding (1,0) Apple entry. */
- /* */
- /* <Return> */
- /* 1 if there is either a win or apple entry (or both), 0 otheriwse. */
- /* */
- typedef FT_Bool
- (*TT_Get_Name_ID_Func)( TT_Face face,
- FT_UShort nameid,
- FT_Int *win,
- FT_Int *apple );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Load_Table_Func */
- /* */
- /* <Description> */
- /* Load a given TrueType table. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* The function uses `face->goto_table' to seek the stream to the */
- /* start of the table, except while loading the font directory. */
- /* */
- typedef FT_Error
- (*TT_Load_Table_Func)( TT_Face face,
- FT_Stream stream );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Free_Table_Func */
- /* */
- /* <Description> */
- /* Free a given TrueType table. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- typedef void
- (*TT_Free_Table_Func)( TT_Face face );
-
-
- /*
- * @functype:
- * TT_Face_GetKerningFunc
- *
- * @description:
- * Return the horizontal kerning value between two glyphs.
- *
- * @input:
- * face :: A handle to the source face object.
- * left_glyph :: The left glyph index.
- * right_glyph :: The right glyph index.
- *
- * @return:
- * The kerning value in font units.
- */
- typedef FT_Int
- (*TT_Face_GetKerningFunc)( TT_Face face,
- FT_UInt left_glyph,
- FT_UInt right_glyph );
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* SFNT_Interface */
- /* */
- /* <Description> */
- /* This structure holds pointers to the functions used to load and */
- /* free the basic tables that are required in a `sfnt' font file. */
- /* */
- /* <Fields> */
- /* Check the various xxx_Func() descriptions for details. */
- /* */
- typedef struct SFNT_Interface_
- {
- TT_Loader_GotoTableFunc goto_table;
-
- TT_Init_Face_Func init_face;
- TT_Load_Face_Func load_face;
- TT_Done_Face_Func done_face;
- FT_Module_Requester get_interface;
-
- TT_Load_Any_Func load_any;
-
- /* these functions are called by `load_face' but they can also */
- /* be called from external modules, if there is a need to do so */
- TT_Load_Table_Func load_head;
- TT_Load_Metrics_Func load_hhea;
- TT_Load_Table_Func load_cmap;
- TT_Load_Table_Func load_maxp;
- TT_Load_Table_Func load_os2;
- TT_Load_Table_Func load_post;
-
- TT_Load_Table_Func load_name;
- TT_Free_Table_Func free_name;
-
- /* this field was called `load_kerning' up to version 2.1.10 */
- TT_Load_Table_Func load_kern;
-
- TT_Load_Table_Func load_gasp;
- TT_Load_Table_Func load_pclt;
-
- /* see `ttload.h'; this field was called `load_bitmap_header' up to */
- /* version 2.1.10 */
- TT_Load_Table_Func load_bhed;
-
- TT_Load_SBit_Image_Func load_sbit_image;
-
- /* see `ttpost.h' */
- TT_Get_PS_Name_Func get_psname;
- TT_Free_Table_Func free_psnames;
-
- /* starting here, the structure differs from version 2.1.7 */
-
- /* this field was introduced in version 2.1.8, named `get_psname' */
- TT_Face_GetKerningFunc get_kerning;
-
- /* new elements introduced after version 2.1.10 */
-
- /* load the font directory, i.e., the offset table and */
- /* the table directory */
- TT_Load_Table_Func load_font_dir;
- TT_Load_Metrics_Func load_hmtx;
-
- TT_Load_Table_Func load_eblc;
- TT_Free_Table_Func free_eblc;
-
- TT_Set_SBit_Strike_Func set_sbit_strike;
- TT_Load_Strike_Metrics_Func load_strike_metrics;
-
- TT_Get_Metrics_Func get_metrics;
-
- TT_Get_Name_Func get_name;
- TT_Get_Name_ID_Func get_name_id;
-
- } SFNT_Interface;
-
-
- /* transitional */
- typedef SFNT_Interface* SFNT_Service;
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SFNT_INTERFACE( \
- class_, \
- goto_table_, \
- init_face_, \
- load_face_, \
- done_face_, \
- get_interface_, \
- load_any_, \
- load_head_, \
- load_hhea_, \
- load_cmap_, \
- load_maxp_, \
- load_os2_, \
- load_post_, \
- load_name_, \
- free_name_, \
- load_kern_, \
- load_gasp_, \
- load_pclt_, \
- load_bhed_, \
- load_sbit_image_, \
- get_psname_, \
- free_psnames_, \
- get_kerning_, \
- load_font_dir_, \
- load_hmtx_, \
- load_eblc_, \
- free_eblc_, \
- set_sbit_strike_, \
- load_strike_metrics_, \
- get_metrics_, \
- get_name_, \
- get_name_id_ ) \
- static const SFNT_Interface class_ = \
- { \
- goto_table_, \
- init_face_, \
- load_face_, \
- done_face_, \
- get_interface_, \
- load_any_, \
- load_head_, \
- load_hhea_, \
- load_cmap_, \
- load_maxp_, \
- load_os2_, \
- load_post_, \
- load_name_, \
- free_name_, \
- load_kern_, \
- load_gasp_, \
- load_pclt_, \
- load_bhed_, \
- load_sbit_image_, \
- get_psname_, \
- free_psnames_, \
- get_kerning_, \
- load_font_dir_, \
- load_hmtx_, \
- load_eblc_, \
- free_eblc_, \
- set_sbit_strike_, \
- load_strike_metrics_, \
- get_metrics_, \
- get_name_, \
- get_name_id_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_INTERNAL( a, a_ ) \
- clazz->a = a_;
-
-#define FT_DEFINE_SFNT_INTERFACE( \
- class_, \
- goto_table_, \
- init_face_, \
- load_face_, \
- done_face_, \
- get_interface_, \
- load_any_, \
- load_head_, \
- load_hhea_, \
- load_cmap_, \
- load_maxp_, \
- load_os2_, \
- load_post_, \
- load_name_, \
- free_name_, \
- load_kern_, \
- load_gasp_, \
- load_pclt_, \
- load_bhed_, \
- load_sbit_image_, \
- get_psname_, \
- free_psnames_, \
- get_kerning_, \
- load_font_dir_, \
- load_hmtx_, \
- load_eblc_, \
- free_eblc_, \
- set_sbit_strike_, \
- load_strike_metrics_, \
- get_metrics_, \
- get_name_, \
- get_name_id_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Library library, \
- SFNT_Interface* clazz ) \
- { \
- FT_UNUSED( library ); \
- \
- clazz->goto_table = goto_table_; \
- clazz->init_face = init_face_; \
- clazz->load_face = load_face_; \
- clazz->done_face = done_face_; \
- clazz->get_interface = get_interface_; \
- clazz->load_any = load_any_; \
- clazz->load_head = load_head_; \
- clazz->load_hhea = load_hhea_; \
- clazz->load_cmap = load_cmap_; \
- clazz->load_maxp = load_maxp_; \
- clazz->load_os2 = load_os2_; \
- clazz->load_post = load_post_; \
- clazz->load_name = load_name_; \
- clazz->free_name = free_name_; \
- clazz->load_kern = load_kern_; \
- clazz->load_gasp = load_gasp_; \
- clazz->load_pclt = load_pclt_; \
- clazz->load_bhed = load_bhed_; \
- clazz->load_sbit_image = load_sbit_image_; \
- clazz->get_psname = get_psname_; \
- clazz->free_psnames = free_psnames_; \
- clazz->get_kerning = get_kerning_; \
- clazz->load_font_dir = load_font_dir_; \
- clazz->load_hmtx = load_hmtx_; \
- clazz->load_eblc = load_eblc_; \
- clazz->free_eblc = free_eblc_; \
- clazz->set_sbit_strike = set_sbit_strike_; \
- clazz->load_strike_metrics = load_strike_metrics_; \
- clazz->get_metrics = get_metrics_; \
- clazz->get_name = get_name_; \
- clazz->get_name_id = get_name_id_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-FT_END_HEADER
-
-#endif /* SFNT_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/t1types.h b/include/freetype/internal/t1types.h
deleted file mode 100644
index b2e35d42d..000000000
--- a/include/freetype/internal/t1types.h
+++ /dev/null
@@ -1,257 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1types.h */
-/* */
-/* Basic Type1/Type2 type definitions and interface (specification */
-/* only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef T1TYPES_H_
-#define T1TYPES_H_
-
-
-#include <ft2build.h>
-#include FT_TYPE1_TABLES_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-#include FT_INTERNAL_SERVICE_H
-#include FT_INTERNAL_HASH_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*** ***/
- /*** ***/
- /*** REQUIRED TYPE1/TYPE2 TABLES DEFINITIONS ***/
- /*** ***/
- /*** ***/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* T1_EncodingRec */
- /* */
- /* <Description> */
- /* A structure modeling a custom encoding. */
- /* */
- /* <Fields> */
- /* num_chars :: The number of character codes in the encoding. */
- /* Usually 256. */
- /* */
- /* code_first :: The lowest valid character code in the encoding. */
- /* */
- /* code_last :: The highest valid character code in the encoding */
- /* + 1. When equal to code_first there are no valid */
- /* character codes. */
- /* */
- /* char_index :: An array of corresponding glyph indices. */
- /* */
- /* char_name :: An array of corresponding glyph names. */
- /* */
- typedef struct T1_EncodingRecRec_
- {
- FT_Int num_chars;
- FT_Int code_first;
- FT_Int code_last;
-
- FT_UShort* char_index;
- FT_String** char_name;
-
- } T1_EncodingRec, *T1_Encoding;
-
-
- /* used to hold extra data of PS_FontInfoRec that
- * cannot be stored in the publicly defined structure.
- *
- * Note these can't be blended with multiple-masters.
- */
- typedef struct PS_FontExtraRec_
- {
- FT_UShort fs_type;
-
- } PS_FontExtraRec;
-
-
- typedef struct T1_FontRec_
- {
- PS_FontInfoRec font_info; /* font info dictionary */
- PS_FontExtraRec font_extra; /* font info extra fields */
- PS_PrivateRec private_dict; /* private dictionary */
- FT_String* font_name; /* top-level dictionary */
-
- T1_EncodingType encoding_type;
- T1_EncodingRec encoding;
-
- FT_Byte* subrs_block;
- FT_Byte* charstrings_block;
- FT_Byte* glyph_names_block;
-
- FT_Int num_subrs;
- FT_Byte** subrs;
- FT_UInt* subrs_len;
- FT_Hash subrs_hash;
-
- FT_Int num_glyphs;
- FT_String** glyph_names; /* array of glyph names */
- FT_Byte** charstrings; /* array of glyph charstrings */
- FT_UInt* charstrings_len;
-
- FT_Byte paint_type;
- FT_Byte font_type;
- FT_Matrix font_matrix;
- FT_Vector font_offset;
- FT_BBox font_bbox;
- FT_Long font_id;
-
- FT_Fixed stroke_width;
-
- } T1_FontRec, *T1_Font;
-
-
- typedef struct CID_SubrsRec_
- {
- FT_Int num_subrs;
- FT_Byte** code;
-
- } CID_SubrsRec, *CID_Subrs;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*** ***/
- /*** ***/
- /*** AFM FONT INFORMATION STRUCTURES ***/
- /*** ***/
- /*** ***/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct AFM_TrackKernRec_
- {
- FT_Int degree;
- FT_Fixed min_ptsize;
- FT_Fixed min_kern;
- FT_Fixed max_ptsize;
- FT_Fixed max_kern;
-
- } AFM_TrackKernRec, *AFM_TrackKern;
-
- typedef struct AFM_KernPairRec_
- {
- FT_UInt index1;
- FT_UInt index2;
- FT_Int x;
- FT_Int y;
-
- } AFM_KernPairRec, *AFM_KernPair;
-
- typedef struct AFM_FontInfoRec_
- {
- FT_Bool IsCIDFont;
- FT_BBox FontBBox;
- FT_Fixed Ascender;
- FT_Fixed Descender;
- AFM_TrackKern TrackKerns; /* free if non-NULL */
- FT_UInt NumTrackKern;
- AFM_KernPair KernPairs; /* free if non-NULL */
- FT_UInt NumKernPair;
-
- } AFM_FontInfoRec, *AFM_FontInfo;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*** ***/
- /*** ***/
- /*** ORIGINAL T1_FACE CLASS DEFINITION ***/
- /*** ***/
- /*** ***/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- typedef struct T1_FaceRec_* T1_Face;
- typedef struct CID_FaceRec_* CID_Face;
-
-
- typedef struct T1_FaceRec_
- {
- FT_FaceRec root;
- T1_FontRec type1;
- const void* psnames;
- const void* psaux;
- const void* afm_data;
- FT_CharMapRec charmaprecs[2];
- FT_CharMap charmaps[2];
-
- /* support for Multiple Masters fonts */
- PS_Blend blend;
-
- /* undocumented, optional: indices of subroutines that express */
- /* the NormalizeDesignVector and the ConvertDesignVector procedure, */
- /* respectively, as Type 2 charstrings; -1 if keywords not present */
- FT_Int ndv_idx;
- FT_Int cdv_idx;
-
- /* undocumented, optional: has the same meaning as len_buildchar */
- /* for Type 2 fonts; manipulated by othersubrs 19, 24, and 25 */
- FT_UInt len_buildchar;
- FT_Long* buildchar;
-
- /* since version 2.1 - interface to PostScript hinter */
- const void* pshinter;
-
- } T1_FaceRec;
-
-
- typedef struct CID_FaceRec_
- {
- FT_FaceRec root;
- void* psnames;
- void* psaux;
- CID_FaceInfoRec cid;
- PS_FontExtraRec font_extra;
-#if 0
- void* afm_data;
-#endif
- CID_Subrs subrs;
-
- /* since version 2.1 - interface to PostScript hinter */
- void* pshinter;
-
- /* since version 2.1.8, but was originally positioned after `afm_data' */
- FT_Byte* binary_data; /* used if hex data has been converted */
- FT_Stream cid_stream;
-
- } CID_FaceRec;
-
-
-FT_END_HEADER
-
-#endif /* T1TYPES_H_ */
-
-
-/* END */
diff --git a/include/freetype/internal/tttypes.h b/include/freetype/internal/tttypes.h
deleted file mode 100644
index c0758e25f..000000000
--- a/include/freetype/internal/tttypes.h
+++ /dev/null
@@ -1,1691 +0,0 @@
-/***************************************************************************/
-/* */
-/* tttypes.h */
-/* */
-/* Basic SFNT/TrueType type definitions and interface (specification */
-/* only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTTYPES_H_
-#define TTTYPES_H_
-
-
-#include <ft2build.h>
-#include FT_TRUETYPE_TABLES_H
-#include FT_INTERNAL_OBJECTS_H
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include FT_MULTIPLE_MASTERS_H
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*** ***/
- /*** ***/
- /*** REQUIRED TRUETYPE/OPENTYPE TABLES DEFINITIONS ***/
- /*** ***/
- /*** ***/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TTC_HeaderRec */
- /* */
- /* <Description> */
- /* TrueType collection header. This table contains the offsets of */
- /* the font headers of each distinct TrueType face in the file. */
- /* */
- /* <Fields> */
- /* tag :: Must be `ttc ' to indicate a TrueType collection. */
- /* */
- /* version :: The version number. */
- /* */
- /* count :: The number of faces in the collection. The */
- /* specification says this should be an unsigned long, but */
- /* we use a signed long since we need the value -1 for */
- /* specific purposes. */
- /* */
- /* offsets :: The offsets of the font headers, one per face. */
- /* */
- typedef struct TTC_HeaderRec_
- {
- FT_ULong tag;
- FT_Fixed version;
- FT_Long count;
- FT_ULong* offsets;
-
- } TTC_HeaderRec;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* SFNT_HeaderRec */
- /* */
- /* <Description> */
- /* SFNT file format header. */
- /* */
- /* <Fields> */
- /* format_tag :: The font format tag. */
- /* */
- /* num_tables :: The number of tables in file. */
- /* */
- /* search_range :: Must be `16 * (max power of 2 <= num_tables)'. */
- /* */
- /* entry_selector :: Must be log2 of `search_range / 16'. */
- /* */
- /* range_shift :: Must be `num_tables * 16 - search_range'. */
- /* */
- typedef struct SFNT_HeaderRec_
- {
- FT_ULong format_tag;
- FT_UShort num_tables;
- FT_UShort search_range;
- FT_UShort entry_selector;
- FT_UShort range_shift;
-
- FT_ULong offset; /* not in file */
-
- } SFNT_HeaderRec, *SFNT_Header;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_TableRec */
- /* */
- /* <Description> */
- /* This structure describes a given table of a TrueType font. */
- /* */
- /* <Fields> */
- /* Tag :: A four-bytes tag describing the table. */
- /* */
- /* CheckSum :: The table checksum. This value can be ignored. */
- /* */
- /* Offset :: The offset of the table from the start of the TrueType */
- /* font in its resource. */
- /* */
- /* Length :: The table length (in bytes). */
- /* */
- typedef struct TT_TableRec_
- {
- FT_ULong Tag; /* table type */
- FT_ULong CheckSum; /* table checksum */
- FT_ULong Offset; /* table file offset */
- FT_ULong Length; /* table length */
-
- } TT_TableRec, *TT_Table;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* WOFF_HeaderRec */
- /* */
- /* <Description> */
- /* WOFF file format header. */
- /* */
- /* <Fields> */
- /* See */
- /* */
- /* http://www.w3.org/TR/WOFF/#WOFFHeader */
- /* */
- typedef struct WOFF_HeaderRec_
- {
- FT_ULong signature;
- FT_ULong flavor;
- FT_ULong length;
- FT_UShort num_tables;
- FT_UShort reserved;
- FT_ULong totalSfntSize;
- FT_UShort majorVersion;
- FT_UShort minorVersion;
- FT_ULong metaOffset;
- FT_ULong metaLength;
- FT_ULong metaOrigLength;
- FT_ULong privOffset;
- FT_ULong privLength;
-
- } WOFF_HeaderRec, *WOFF_Header;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* WOFF_TableRec */
- /* */
- /* <Description> */
- /* This structure describes a given table of a WOFF font. */
- /* */
- /* <Fields> */
- /* Tag :: A four-bytes tag describing the table. */
- /* */
- /* Offset :: The offset of the table from the start of the WOFF */
- /* font in its resource. */
- /* */
- /* CompLength :: Compressed table length (in bytes). */
- /* */
- /* OrigLength :: Uncompressed table length (in bytes). */
- /* */
- /* CheckSum :: The table checksum. This value can be ignored. */
- /* */
- /* OrigOffset :: The uncompressed table file offset. This value gets */
- /* computed while constructing the (uncompressed) SFNT */
- /* header. It is not contained in the WOFF file. */
- /* */
- typedef struct WOFF_TableRec_
- {
- FT_ULong Tag; /* table ID */
- FT_ULong Offset; /* table file offset */
- FT_ULong CompLength; /* compressed table length */
- FT_ULong OrigLength; /* uncompressed table length */
- FT_ULong CheckSum; /* uncompressed checksum */
-
- FT_ULong OrigOffset; /* uncompressed table file offset */
- /* (not in the WOFF file) */
- } WOFF_TableRec, *WOFF_Table;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_LongMetricsRec */
- /* */
- /* <Description> */
- /* A structure modeling the long metrics of the `hmtx' and `vmtx' */
- /* TrueType tables. The values are expressed in font units. */
- /* */
- /* <Fields> */
- /* advance :: The advance width or height for the glyph. */
- /* */
- /* bearing :: The left-side or top-side bearing for the glyph. */
- /* */
- typedef struct TT_LongMetricsRec_
- {
- FT_UShort advance;
- FT_Short bearing;
-
- } TT_LongMetricsRec, *TT_LongMetrics;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* TT_ShortMetrics */
- /* */
- /* <Description> */
- /* A simple type to model the short metrics of the `hmtx' and `vmtx' */
- /* tables. */
- /* */
- typedef FT_Short TT_ShortMetrics;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_NameRec */
- /* */
- /* <Description> */
- /* A structure modeling TrueType name records. Name records are used */
- /* to store important strings like family name, style name, */
- /* copyright, etc. in _localized_ versions (i.e., language, encoding, */
- /* etc). */
- /* */
- /* <Fields> */
- /* platformID :: The ID of the name's encoding platform. */
- /* */
- /* encodingID :: The platform-specific ID for the name's encoding. */
- /* */
- /* languageID :: The platform-specific ID for the name's language. */
- /* */
- /* nameID :: The ID specifying what kind of name this is. */
- /* */
- /* stringLength :: The length of the string in bytes. */
- /* */
- /* stringOffset :: The offset to the string in the `name' table. */
- /* */
- /* string :: A pointer to the string's bytes. Note that these */
- /* are usually UTF-16 encoded characters. */
- /* */
- typedef struct TT_NameRec_
- {
- FT_UShort platformID;
- FT_UShort encodingID;
- FT_UShort languageID;
- FT_UShort nameID;
- FT_UShort stringLength;
- FT_ULong stringOffset;
-
- /* this last field is not defined in the spec */
- /* but used by the FreeType engine */
-
- FT_Byte* string;
-
- } TT_NameRec, *TT_Name;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_LangTagRec */
- /* */
- /* <Description> */
- /* A structure modeling language tag records in SFNT `name' tables, */
- /* introduced in OpenType version 1.6. */
- /* */
- /* <Fields> */
- /* stringLength :: The length of the string in bytes. */
- /* */
- /* stringOffset :: The offset to the string in the `name' table. */
- /* */
- /* string :: A pointer to the string's bytes. Note that these */
- /* are UTF-16BE encoded characters. */
- /* */
- typedef struct TT_LangTagRec_
- {
- FT_UShort stringLength;
- FT_ULong stringOffset;
-
- /* this last field is not defined in the spec */
- /* but used by the FreeType engine */
-
- FT_Byte* string;
-
- } TT_LangTagRec, *TT_LangTag;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_NameTableRec */
- /* */
- /* <Description> */
- /* A structure modeling the TrueType name table. */
- /* */
- /* <Fields> */
- /* format :: The format of the name table. */
- /* */
- /* numNameRecords :: The number of names in table. */
- /* */
- /* storageOffset :: The offset of the name table in the `name' */
- /* TrueType table. */
- /* */
- /* names :: An array of name records. */
- /* */
- /* numLangTagRecords :: The number of language tags in table. */
- /* */
- /* langTags :: An array of language tag records. */
- /* */
- /* stream :: The file's input stream. */
- /* */
- typedef struct TT_NameTableRec_
- {
- FT_UShort format;
- FT_UInt numNameRecords;
- FT_UInt storageOffset;
- TT_NameRec* names;
- FT_UInt numLangTagRecords;
- TT_LangTagRec* langTags;
- FT_Stream stream;
-
- } TT_NameTableRec, *TT_NameTable;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*** ***/
- /*** ***/
- /*** OPTIONAL TRUETYPE/OPENTYPE TABLES DEFINITIONS ***/
- /*** ***/
- /*** ***/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_GaspRangeRec */
- /* */
- /* <Description> */
- /* A tiny structure used to model a gasp range according to the */
- /* TrueType specification. */
- /* */
- /* <Fields> */
- /* maxPPEM :: The maximum ppem value to which `gaspFlag' applies. */
- /* */
- /* gaspFlag :: A flag describing the grid-fitting and anti-aliasing */
- /* modes to be used. */
- /* */
- typedef struct TT_GaspRangeRec_
- {
- FT_UShort maxPPEM;
- FT_UShort gaspFlag;
-
- } TT_GaspRangeRec, *TT_GaspRange;
-
-
-#define TT_GASP_GRIDFIT 0x01
-#define TT_GASP_DOGRAY 0x02
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_GaspRec */
- /* */
- /* <Description> */
- /* A structure modeling the TrueType `gasp' table used to specify */
- /* grid-fitting and anti-aliasing behaviour. */
- /* */
- /* <Fields> */
- /* version :: The version number. */
- /* */
- /* numRanges :: The number of gasp ranges in table. */
- /* */
- /* gaspRanges :: An array of gasp ranges. */
- /* */
- typedef struct TT_Gasp_
- {
- FT_UShort version;
- FT_UShort numRanges;
- TT_GaspRange gaspRanges;
-
- } TT_GaspRec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*** ***/
- /*** ***/
- /*** EMBEDDED BITMAPS SUPPORT ***/
- /*** ***/
- /*** ***/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_SBit_MetricsRec */
- /* */
- /* <Description> */
- /* A structure used to hold the big metrics of a given glyph bitmap */
- /* in a TrueType or OpenType font. These are usually found in the */
- /* `EBDT' (Microsoft) or `bloc' (Apple) table. */
- /* */
- /* <Fields> */
- /* height :: The glyph height in pixels. */
- /* */
- /* width :: The glyph width in pixels. */
- /* */
- /* horiBearingX :: The horizontal left bearing. */
- /* */
- /* horiBearingY :: The horizontal top bearing. */
- /* */
- /* horiAdvance :: The horizontal advance. */
- /* */
- /* vertBearingX :: The vertical left bearing. */
- /* */
- /* vertBearingY :: The vertical top bearing. */
- /* */
- /* vertAdvance :: The vertical advance. */
- /* */
- typedef struct TT_SBit_MetricsRec_
- {
- FT_UShort height;
- FT_UShort width;
-
- FT_Short horiBearingX;
- FT_Short horiBearingY;
- FT_UShort horiAdvance;
-
- FT_Short vertBearingX;
- FT_Short vertBearingY;
- FT_UShort vertAdvance;
-
- } TT_SBit_MetricsRec, *TT_SBit_Metrics;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_SBit_SmallMetricsRec */
- /* */
- /* <Description> */
- /* A structure used to hold the small metrics of a given glyph bitmap */
- /* in a TrueType or OpenType font. These are usually found in the */
- /* `EBDT' (Microsoft) or the `bdat' (Apple) table. */
- /* */
- /* <Fields> */
- /* height :: The glyph height in pixels. */
- /* */
- /* width :: The glyph width in pixels. */
- /* */
- /* bearingX :: The left-side bearing. */
- /* */
- /* bearingY :: The top-side bearing. */
- /* */
- /* advance :: The advance width or height. */
- /* */
- typedef struct TT_SBit_Small_Metrics_
- {
- FT_Byte height;
- FT_Byte width;
-
- FT_Char bearingX;
- FT_Char bearingY;
- FT_Byte advance;
-
- } TT_SBit_SmallMetricsRec, *TT_SBit_SmallMetrics;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_SBit_LineMetricsRec */
- /* */
- /* <Description> */
- /* A structure used to describe the text line metrics of a given */
- /* bitmap strike, for either a horizontal or vertical layout. */
- /* */
- /* <Fields> */
- /* ascender :: The ascender in pixels. */
- /* */
- /* descender :: The descender in pixels. */
- /* */
- /* max_width :: The maximum glyph width in pixels. */
- /* */
- /* caret_slope_enumerator :: Rise of the caret slope, typically set */
- /* to 1 for non-italic fonts. */
- /* */
- /* caret_slope_denominator :: Rise of the caret slope, typically set */
- /* to 0 for non-italic fonts. */
- /* */
- /* caret_offset :: Offset in pixels to move the caret for */
- /* proper positioning. */
- /* */
- /* min_origin_SB :: Minimum of horiBearingX (resp. */
- /* vertBearingY). */
- /* min_advance_SB :: Minimum of */
- /* */
- /* horizontal advance - */
- /* ( horiBearingX + width ) */
- /* */
- /* resp. */
- /* */
- /* vertical advance - */
- /* ( vertBearingY + height ) */
- /* */
- /* max_before_BL :: Maximum of horiBearingY (resp. */
- /* vertBearingY). */
- /* */
- /* min_after_BL :: Minimum of */
- /* */
- /* horiBearingY - height */
- /* */
- /* resp. */
- /* */
- /* vertBearingX - width */
- /* */
- /* pads :: Unused (to make the size of the record */
- /* a multiple of 32 bits. */
- /* */
- typedef struct TT_SBit_LineMetricsRec_
- {
- FT_Char ascender;
- FT_Char descender;
- FT_Byte max_width;
- FT_Char caret_slope_numerator;
- FT_Char caret_slope_denominator;
- FT_Char caret_offset;
- FT_Char min_origin_SB;
- FT_Char min_advance_SB;
- FT_Char max_before_BL;
- FT_Char min_after_BL;
- FT_Char pads[2];
-
- } TT_SBit_LineMetricsRec, *TT_SBit_LineMetrics;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_SBit_RangeRec */
- /* */
- /* <Description> */
- /* A TrueType/OpenType subIndexTable as defined in the `EBLC' */
- /* (Microsoft) or `bloc' (Apple) tables. */
- /* */
- /* <Fields> */
- /* first_glyph :: The first glyph index in the range. */
- /* */
- /* last_glyph :: The last glyph index in the range. */
- /* */
- /* index_format :: The format of index table. Valid values are 1 */
- /* to 5. */
- /* */
- /* image_format :: The format of `EBDT' image data. */
- /* */
- /* image_offset :: The offset to image data in `EBDT'. */
- /* */
- /* image_size :: For index formats 2 and 5. This is the size in */
- /* bytes of each glyph bitmap. */
- /* */
- /* big_metrics :: For index formats 2 and 5. This is the big */
- /* metrics for each glyph bitmap. */
- /* */
- /* num_glyphs :: For index formats 4 and 5. This is the number of */
- /* glyphs in the code array. */
- /* */
- /* glyph_offsets :: For index formats 1 and 3. */
- /* */
- /* glyph_codes :: For index formats 4 and 5. */
- /* */
- /* table_offset :: The offset of the index table in the `EBLC' */
- /* table. Only used during strike loading. */
- /* */
- typedef struct TT_SBit_RangeRec_
- {
- FT_UShort first_glyph;
- FT_UShort last_glyph;
-
- FT_UShort index_format;
- FT_UShort image_format;
- FT_ULong image_offset;
-
- FT_ULong image_size;
- TT_SBit_MetricsRec metrics;
- FT_ULong num_glyphs;
-
- FT_ULong* glyph_offsets;
- FT_UShort* glyph_codes;
-
- FT_ULong table_offset;
-
- } TT_SBit_RangeRec, *TT_SBit_Range;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_SBit_StrikeRec */
- /* */
- /* <Description> */
- /* A structure used describe a given bitmap strike in the `EBLC' */
- /* (Microsoft) or `bloc' (Apple) tables. */
- /* */
- /* <Fields> */
- /* num_index_ranges :: The number of index ranges. */
- /* */
- /* index_ranges :: An array of glyph index ranges. */
- /* */
- /* color_ref :: Unused. `color_ref' is put in for future */
- /* enhancements, but these fields are already */
- /* in use by other platforms (e.g. Newton). */
- /* For details, please see */
- /* */
- /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html */
- /* */
- /* hori :: The line metrics for horizontal layouts. */
- /* */
- /* vert :: The line metrics for vertical layouts. */
- /* */
- /* start_glyph :: The lowest glyph index for this strike. */
- /* */
- /* end_glyph :: The highest glyph index for this strike. */
- /* */
- /* x_ppem :: The number of horizontal pixels per EM. */
- /* */
- /* y_ppem :: The number of vertical pixels per EM. */
- /* */
- /* bit_depth :: The bit depth. Valid values are 1, 2, 4, */
- /* and 8. */
- /* */
- /* flags :: Is this a vertical or horizontal strike? For */
- /* details, please see */
- /* */
- /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html */
- /* */
- typedef struct TT_SBit_StrikeRec_
- {
- FT_Int num_ranges;
- TT_SBit_Range sbit_ranges;
- FT_ULong ranges_offset;
-
- FT_ULong color_ref;
-
- TT_SBit_LineMetricsRec hori;
- TT_SBit_LineMetricsRec vert;
-
- FT_UShort start_glyph;
- FT_UShort end_glyph;
-
- FT_Byte x_ppem;
- FT_Byte y_ppem;
-
- FT_Byte bit_depth;
- FT_Char flags;
-
- } TT_SBit_StrikeRec, *TT_SBit_Strike;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_SBit_ComponentRec */
- /* */
- /* <Description> */
- /* A simple structure to describe a compound sbit element. */
- /* */
- /* <Fields> */
- /* glyph_code :: The element's glyph index. */
- /* */
- /* x_offset :: The element's left bearing. */
- /* */
- /* y_offset :: The element's top bearing. */
- /* */
- typedef struct TT_SBit_ComponentRec_
- {
- FT_UShort glyph_code;
- FT_Char x_offset;
- FT_Char y_offset;
-
- } TT_SBit_ComponentRec, *TT_SBit_Component;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_SBit_ScaleRec */
- /* */
- /* <Description> */
- /* A structure used describe a given bitmap scaling table, as defined */
- /* in the `EBSC' table. */
- /* */
- /* <Fields> */
- /* hori :: The horizontal line metrics. */
- /* */
- /* vert :: The vertical line metrics. */
- /* */
- /* x_ppem :: The number of horizontal pixels per EM. */
- /* */
- /* y_ppem :: The number of vertical pixels per EM. */
- /* */
- /* x_ppem_substitute :: Substitution x_ppem value. */
- /* */
- /* y_ppem_substitute :: Substitution y_ppem value. */
- /* */
- typedef struct TT_SBit_ScaleRec_
- {
- TT_SBit_LineMetricsRec hori;
- TT_SBit_LineMetricsRec vert;
-
- FT_Byte x_ppem;
- FT_Byte y_ppem;
-
- FT_Byte x_ppem_substitute;
- FT_Byte y_ppem_substitute;
-
- } TT_SBit_ScaleRec, *TT_SBit_Scale;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*** ***/
- /*** ***/
- /*** POSTSCRIPT GLYPH NAMES SUPPORT ***/
- /*** ***/
- /*** ***/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_Post_20Rec */
- /* */
- /* <Description> */
- /* Postscript names sub-table, format 2.0. Stores the PS name of */
- /* each glyph in the font face. */
- /* */
- /* <Fields> */
- /* num_glyphs :: The number of named glyphs in the table. */
- /* */
- /* num_names :: The number of PS names stored in the table. */
- /* */
- /* glyph_indices :: The indices of the glyphs in the names arrays. */
- /* */
- /* glyph_names :: The PS names not in Mac Encoding. */
- /* */
- typedef struct TT_Post_20Rec_
- {
- FT_UShort num_glyphs;
- FT_UShort num_names;
- FT_UShort* glyph_indices;
- FT_Char** glyph_names;
-
- } TT_Post_20Rec, *TT_Post_20;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_Post_25Rec */
- /* */
- /* <Description> */
- /* Postscript names sub-table, format 2.5. Stores the PS name of */
- /* each glyph in the font face. */
- /* */
- /* <Fields> */
- /* num_glyphs :: The number of glyphs in the table. */
- /* */
- /* offsets :: An array of signed offsets in a normal Mac */
- /* Postscript name encoding. */
- /* */
- typedef struct TT_Post_25_
- {
- FT_UShort num_glyphs;
- FT_Char* offsets;
-
- } TT_Post_25Rec, *TT_Post_25;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_Post_NamesRec */
- /* */
- /* <Description> */
- /* Postscript names table, either format 2.0 or 2.5. */
- /* */
- /* <Fields> */
- /* loaded :: A flag to indicate whether the PS names are loaded. */
- /* */
- /* format_20 :: The sub-table used for format 2.0. */
- /* */
- /* format_25 :: The sub-table used for format 2.5. */
- /* */
- typedef struct TT_Post_NamesRec_
- {
- FT_Bool loaded;
-
- union
- {
- TT_Post_20Rec format_20;
- TT_Post_25Rec format_25;
-
- } names;
-
- } TT_Post_NamesRec, *TT_Post_Names;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*** ***/
- /*** ***/
- /*** GX VARIATION TABLE SUPPORT ***/
- /*** ***/
- /*** ***/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- typedef struct GX_BlendRec_ *GX_Blend;
-#endif
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*** ***/
- /*** ***/
- /*** EMBEDDED BDF PROPERTIES TABLE SUPPORT ***/
- /*** ***/
- /*** ***/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- /*
- * These types are used to support a `BDF ' table that isn't part of the
- * official TrueType specification. It is mainly used in SFNT-based
- * bitmap fonts that were generated from a set of BDF fonts.
- *
- * The format of the table is as follows.
- *
- * USHORT version `BDF ' table version number, should be 0x0001.
- * USHORT strikeCount Number of strikes (bitmap sizes) in this table.
- * ULONG stringTable Offset (from start of BDF table) to string
- * table.
- *
- * This is followed by an array of `strikeCount' descriptors, having the
- * following format.
- *
- * USHORT ppem Vertical pixels per EM for this strike.
- * USHORT numItems Number of items for this strike (properties and
- * atoms). Maximum is 255.
- *
- * This array in turn is followed by `strikeCount' value sets. Each
- * `value set' is an array of `numItems' items with the following format.
- *
- * ULONG item_name Offset in string table to item name.
- * USHORT item_type The item type. Possible values are
- * 0 => string (e.g., COMMENT)
- * 1 => atom (e.g., FONT or even SIZE)
- * 2 => int32
- * 3 => uint32
- * 0x10 => A flag to indicate a properties. This
- * is ORed with the above values.
- * ULONG item_value For strings => Offset into string table without
- * the corresponding double quotes.
- * For atoms => Offset into string table.
- * For integers => Direct value.
- *
- * All strings in the string table consist of bytes and are
- * zero-terminated.
- *
- */
-
-#ifdef TT_CONFIG_OPTION_BDF
-
- typedef struct TT_BDFRec_
- {
- FT_Byte* table;
- FT_Byte* table_end;
- FT_Byte* strings;
- FT_ULong strings_size;
- FT_UInt num_strikes;
- FT_Bool loaded;
-
- } TT_BDFRec, *TT_BDF;
-
-#endif /* TT_CONFIG_OPTION_BDF */
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*** ***/
- /*** ***/
- /*** ORIGINAL TT_FACE CLASS DEFINITION ***/
- /*** ***/
- /*** ***/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This structure/class is defined here because it is common to the */
- /* following formats: TTF, OpenType-TT, and OpenType-CFF. */
- /* */
- /* Note, however, that the classes TT_Size and TT_GlyphSlot are not */
- /* shared between font drivers, and are thus defined in `ttobjs.h'. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* TT_Face */
- /* */
- /* <Description> */
- /* A handle to a TrueType face/font object. A TT_Face encapsulates */
- /* the resolution and scaling independent parts of a TrueType font */
- /* resource. */
- /* */
- /* <Note> */
- /* The TT_Face structure is also used as a `parent class' for the */
- /* OpenType-CFF class (T2_Face). */
- /* */
- typedef struct TT_FaceRec_* TT_Face;
-
-
- /* a function type used for the truetype bytecode interpreter hooks */
- typedef FT_Error
- (*TT_Interpreter)( void* exec_context );
-
- /* forward declaration */
- typedef struct TT_LoaderRec_* TT_Loader;
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Loader_GotoTableFunc */
- /* */
- /* <Description> */
- /* Seeks a stream to the start of a given TrueType table. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* tag :: A 4-byte tag used to name the table. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* <Output> */
- /* length :: The length of the table in bytes. Set to 0 if not */
- /* needed. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* The stream cursor must be at the font file's origin. */
- /* */
- typedef FT_Error
- (*TT_Loader_GotoTableFunc)( TT_Face face,
- FT_ULong tag,
- FT_Stream stream,
- FT_ULong* length );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Loader_StartGlyphFunc */
- /* */
- /* <Description> */
- /* Seeks a stream to the start of a given glyph element, and opens a */
- /* frame for it. */
- /* */
- /* <Input> */
- /* loader :: The current TrueType glyph loader object. */
- /* */
- /* glyph index :: The index of the glyph to access. */
- /* */
- /* offset :: The offset of the glyph according to the */
- /* `locations' table. */
- /* */
- /* byte_count :: The size of the frame in bytes. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* This function is normally equivalent to FT_STREAM_SEEK(offset) */
- /* followed by FT_FRAME_ENTER(byte_count) with the loader's stream, */
- /* but alternative formats (e.g. compressed ones) might use something */
- /* different. */
- /* */
- typedef FT_Error
- (*TT_Loader_StartGlyphFunc)( TT_Loader loader,
- FT_UInt glyph_index,
- FT_ULong offset,
- FT_UInt byte_count );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Loader_ReadGlyphFunc */
- /* */
- /* <Description> */
- /* Reads one glyph element (its header, a simple glyph, or a */
- /* composite) from the loader's current stream frame. */
- /* */
- /* <Input> */
- /* loader :: The current TrueType glyph loader object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- typedef FT_Error
- (*TT_Loader_ReadGlyphFunc)( TT_Loader loader );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Loader_EndGlyphFunc */
- /* */
- /* <Description> */
- /* Closes the current loader stream frame for the glyph. */
- /* */
- /* <Input> */
- /* loader :: The current TrueType glyph loader object. */
- /* */
- typedef void
- (*TT_Loader_EndGlyphFunc)( TT_Loader loader );
-
-
- typedef enum TT_SbitTableType_
- {
- TT_SBIT_TABLE_TYPE_NONE = 0,
- TT_SBIT_TABLE_TYPE_EBLC, /* `EBLC' (Microsoft), */
- /* `bloc' (Apple) */
- TT_SBIT_TABLE_TYPE_CBLC, /* `CBLC' (Google) */
- TT_SBIT_TABLE_TYPE_SBIX, /* `sbix' (Apple) */
-
- /* do not remove */
- TT_SBIT_TABLE_TYPE_MAX
-
- } TT_SbitTableType;
-
-
- /* OpenType 1.8 brings new tables for variation font support; */
- /* to make the old MM and GX fonts still work we need to check */
- /* the presence (and validity) of the functionality provided */
- /* by those tables. The following flag macros are for the */
- /* field `variation_support'. */
- /* */
- /* Note that `fvar' gets checked immediately at font loading, */
- /* while the other features are only loaded if MM support is */
- /* actually requested. */
-
- /* FVAR */
-#define TT_FACE_FLAG_VAR_FVAR ( 1 << 0 )
-
- /* HVAR */
-#define TT_FACE_FLAG_VAR_HADVANCE ( 1 << 1 )
-#define TT_FACE_FLAG_VAR_LSB ( 1 << 2 )
-#define TT_FACE_FLAG_VAR_RSB ( 1 << 3 )
-
- /* VVAR */
-#define TT_FACE_FLAG_VAR_VADVANCE ( 1 << 4 )
-#define TT_FACE_FLAG_VAR_TSB ( 1 << 5 )
-#define TT_FACE_FLAG_VAR_BSB ( 1 << 6 )
-#define TT_FACE_FLAG_VAR_VORG ( 1 << 7 )
-
- /* MVAR */
-#define TT_FACE_FLAG_VAR_MVAR ( 1 << 8 )
-
-
- /*************************************************************************/
- /* */
- /* TrueType Face Type */
- /* */
- /* <Struct> */
- /* TT_Face */
- /* */
- /* <Description> */
- /* The TrueType face class. These objects model the resolution and */
- /* point-size independent data found in a TrueType font file. */
- /* */
- /* <Fields> */
- /* root :: The base FT_Face structure, managed by the */
- /* base layer. */
- /* */
- /* ttc_header :: The TrueType collection header, used when */
- /* the file is a `ttc' rather than a `ttf'. */
- /* For ordinary font files, the field */
- /* `ttc_header.count' is set to 0. */
- /* */
- /* format_tag :: The font format tag. */
- /* */
- /* num_tables :: The number of TrueType tables in this font */
- /* file. */
- /* */
- /* dir_tables :: The directory of TrueType tables for this */
- /* font file. */
- /* */
- /* header :: The font's font header (`head' table). */
- /* Read on font opening. */
- /* */
- /* horizontal :: The font's horizontal header (`hhea' */
- /* table). This field also contains the */
- /* associated horizontal metrics table */
- /* (`hmtx'). */
- /* */
- /* max_profile :: The font's maximum profile table. Read on */
- /* font opening. Note that some maximum */
- /* values cannot be taken directly from this */
- /* table. We thus define additional fields */
- /* below to hold the computed maxima. */
- /* */
- /* vertical_info :: A boolean which is set when the font file */
- /* contains vertical metrics. If not, the */
- /* value of the `vertical' field is */
- /* undefined. */
- /* */
- /* vertical :: The font's vertical header (`vhea' table). */
- /* This field also contains the associated */
- /* vertical metrics table (`vmtx'), if found. */
- /* IMPORTANT: The contents of this field is */
- /* undefined if the `vertical_info' field is */
- /* unset. */
- /* */
- /* num_names :: The number of name records within this */
- /* TrueType font. */
- /* */
- /* name_table :: The table of name records (`name'). */
- /* */
- /* os2 :: The font's OS/2 table (`OS/2'). */
- /* */
- /* postscript :: The font's PostScript table (`post' */
- /* table). The PostScript glyph names are */
- /* not loaded by the driver on face opening. */
- /* See the `ttpost' module for more details. */
- /* */
- /* cmap_table :: Address of the face's `cmap' SFNT table */
- /* in memory (it's an extracted frame). */
- /* */
- /* cmap_size :: The size in bytes of the `cmap_table' */
- /* described above. */
- /* */
- /* goto_table :: A function called by each TrueType table */
- /* loader to position a stream's cursor to */
- /* the start of a given table according to */
- /* its tag. It defaults to TT_Goto_Face but */
- /* can be different for strange formats (e.g. */
- /* Type 42). */
- /* */
- /* access_glyph_frame :: A function used to access the frame of a */
- /* given glyph within the face's font file. */
- /* */
- /* forget_glyph_frame :: A function used to forget the frame of a */
- /* given glyph when all data has been loaded. */
- /* */
- /* read_glyph_header :: A function used to read a glyph header. */
- /* It must be called between an `access' and */
- /* `forget'. */
- /* */
- /* read_simple_glyph :: A function used to read a simple glyph. */
- /* It must be called after the header was */
- /* read, and before the `forget'. */
- /* */
- /* read_composite_glyph :: A function used to read a composite glyph. */
- /* It must be called after the header was */
- /* read, and before the `forget'. */
- /* */
- /* sfnt :: A pointer to the SFNT service. */
- /* */
- /* psnames :: A pointer to the PostScript names service. */
- /* */
- /* mm :: A pointer to the Multiple Masters service. */
- /* */
- /* var :: A pointer to the Metrics Variations */
- /* service. */
- /* */
- /* hdmx :: The face's horizontal device metrics */
- /* (`hdmx' table). This table is optional in */
- /* TrueType/OpenType fonts. */
- /* */
- /* gasp :: The grid-fitting and scaling properties */
- /* table (`gasp'). This table is optional in */
- /* TrueType/OpenType fonts. */
- /* */
- /* pclt :: The `pclt' SFNT table. */
- /* */
- /* num_sbit_scales :: The number of sbit scales for this font. */
- /* */
- /* sbit_scales :: Array of sbit scales embedded in this */
- /* font. This table is optional in a */
- /* TrueType/OpenType font. */
- /* */
- /* postscript_names :: A table used to store the Postscript names */
- /* of the glyphs for this font. See the */
- /* file `ttconfig.h' for comments on the */
- /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES option. */
- /* */
- /* font_program_size :: Size in bytecodes of the face's font */
- /* program. 0 if none defined. Ignored for */
- /* Type 2 fonts. */
- /* */
- /* font_program :: The face's font program (bytecode stream) */
- /* executed at load time, also used during */
- /* glyph rendering. Comes from the `fpgm' */
- /* table. Ignored for Type 2 font fonts. */
- /* */
- /* cvt_program_size :: The size in bytecodes of the face's cvt */
- /* program. Ignored for Type 2 fonts. */
- /* */
- /* cvt_program :: The face's cvt program (bytecode stream) */
- /* executed each time an instance/size is */
- /* changed/reset. Comes from the `prep' */
- /* table. Ignored for Type 2 fonts. */
- /* */
- /* cvt_size :: Size of the control value table (in */
- /* entries). Ignored for Type 2 fonts. */
- /* */
- /* cvt :: The face's original control value table. */
- /* Coordinates are expressed in unscaled font */
- /* units. Comes from the `cvt ' table. */
- /* Ignored for Type 2 fonts. */
- /* */
- /* interpreter :: A pointer to the TrueType bytecode */
- /* interpreters field is also used to hook */
- /* the debugger in `ttdebug'. */
- /* */
- /* extra :: Reserved for third-party font drivers. */
- /* */
- /* postscript_name :: The PS name of the font. Used by the */
- /* postscript name service. */
- /* */
- /* glyf_len :: The length of the `glyf' table. Needed */
- /* for malformed `loca' tables. */
- /* */
- /* glyf_offset :: The file offset of the `glyf' table. */
- /* */
- /* is_cff2 :: Set if the font format is CFF2. */
- /* */
- /* doblend :: A boolean which is set if the font should */
- /* be blended (this is for GX var). */
- /* */
- /* blend :: Contains the data needed to control GX */
- /* variation tables (rather like Multiple */
- /* Master data). */
- /* */
- /* is_default_instance :: Set if the glyph outlines can be used */
- /* unmodified (i.e., without applying glyph */
- /* variation deltas). */
- /* */
- /* variation_support :: Flags that indicate which OpenType */
- /* functionality related to font variation */
- /* support is present, valid, and usable. */
- /* For example, TT_FACE_FLAG_VAR_FVAR is only */
- /* set if we have at least one design axis. */
- /* */
- /* var_postscript_prefix :: */
- /* The PostScript name prefix needed for */
- /* constructing a variation font instance's */
- /* PS name . */
- /* */
- /* var_postscript_prefix_len :: */
- /* The length of the `var_postscript_prefix' */
- /* string. */
- /* */
- /* horz_metrics_size :: The size of the `hmtx' table. */
- /* */
- /* vert_metrics_size :: The size of the `vmtx' table. */
- /* */
- /* num_locations :: The number of glyph locations in this */
- /* TrueType file. This should be */
- /* identical to the number of glyphs. */
- /* Ignored for Type 2 fonts. */
- /* */
- /* glyph_locations :: An array of longs. These are offsets to */
- /* glyph data within the `glyf' table. */
- /* Ignored for Type 2 font faces. */
- /* */
- /* hdmx_table :: A pointer to the `hdmx' table. */
- /* */
- /* hdmx_table_size :: The size of the `hdmx' table. */
- /* */
- /* hdmx_record_count :: The number of hdmx records. */
- /* */
- /* hdmx_record_size :: The size of a single hdmx record. */
- /* */
- /* hdmx_record_sizes :: An array holding the ppem sizes available */
- /* in the `hdmx' table. */
- /* */
- /* sbit_table :: A pointer to the font's embedded bitmap */
- /* location table. */
- /* */
- /* sbit_table_size :: The size of `sbit_table'. */
- /* */
- /* sbit_table_type :: The sbit table type (CBLC, sbix, etc.). */
- /* */
- /* sbit_num_strikes :: The number of sbit strikes exposed by */
- /* FreeType's API, omitting invalid strikes. */
- /* */
- /* sbit_strike_map :: A mapping between the strike indices */
- /* exposed by the API and the indices used in */
- /* the font's sbit table. */
- /* */
- /* kern_table :: A pointer to the `kern' table. */
- /* */
- /* kern_table_size :: The size of the `kern' table. */
- /* */
- /* num_kern_tables :: The number of supported kern subtables */
- /* (up to 32; FreeType recognizes only */
- /* horizontal ones with format 0). */
- /* */
- /* kern_avail_bits :: The availability status of kern subtables; */
- /* if bit n is set, table n is available. */
- /* */
- /* kern_order_bits :: The sortedness status of kern subtables; */
- /* if bit n is set, table n is sorted. */
- /* */
- /* bdf :: Data related to an SFNT font's `bdf' */
- /* table; see `tttypes.h'. */
- /* */
- /* horz_metrics_offset :: The file offset of the `hmtx' table. */
- /* */
- /* vert_metrics_offset :: The file offset of the `vmtx' table. */
- /* */
- /* sph_found_func_flags :: Flags identifying special bytecode */
- /* functions (used by the v38 implementation */
- /* of the bytecode interpreter). */
- /* */
- /* sph_compatibility_mode :: */
- /* This flag is set if we are in ClearType */
- /* backward compatibility mode (used by the */
- /* v38 implementation of the bytecode */
- /* interpreter). */
- /* */
- /* ebdt_start :: The file offset of the sbit data table */
- /* (CBDT, bdat, etc.). */
- /* */
- /* ebdt_size :: The size of the sbit data table. */
- /* */
- typedef struct TT_FaceRec_
- {
- FT_FaceRec root;
-
- TTC_HeaderRec ttc_header;
-
- FT_ULong format_tag;
- FT_UShort num_tables;
- TT_Table dir_tables;
-
- TT_Header header; /* TrueType header table */
- TT_HoriHeader horizontal; /* TrueType horizontal header */
-
- TT_MaxProfile max_profile;
-
- FT_Bool vertical_info;
- TT_VertHeader vertical; /* TT Vertical header, if present */
-
- FT_UShort num_names; /* number of name records */
- TT_NameTableRec name_table; /* name table */
-
- TT_OS2 os2; /* TrueType OS/2 table */
- TT_Postscript postscript; /* TrueType Postscript table */
-
- FT_Byte* cmap_table; /* extracted `cmap' table */
- FT_ULong cmap_size;
-
- TT_Loader_GotoTableFunc goto_table;
-
- TT_Loader_StartGlyphFunc access_glyph_frame;
- TT_Loader_EndGlyphFunc forget_glyph_frame;
- TT_Loader_ReadGlyphFunc read_glyph_header;
- TT_Loader_ReadGlyphFunc read_simple_glyph;
- TT_Loader_ReadGlyphFunc read_composite_glyph;
-
- /* a typeless pointer to the SFNT_Interface table used to load */
- /* the basic TrueType tables in the face object */
- void* sfnt;
-
- /* a typeless pointer to the FT_Service_PsCMapsRec table used to */
- /* handle glyph names <-> unicode & Mac values */
- void* psnames;
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- /* a typeless pointer to the FT_Service_MultiMasters table used to */
- /* handle variation fonts */
- void* mm;
-
- /* a typeless pointer to the FT_Service_MetricsVariationsRec table */
- /* used to handle the HVAR, VVAR, and MVAR OpenType tables */
- void* var;
-#endif
-
-
- /***********************************************************************/
- /* */
- /* Optional TrueType/OpenType tables */
- /* */
- /***********************************************************************/
-
- /* grid-fitting and scaling table */
- TT_GaspRec gasp; /* the `gasp' table */
-
- /* PCL 5 table */
- TT_PCLT pclt;
-
- /* embedded bitmaps support */
- FT_ULong num_sbit_scales;
- TT_SBit_Scale sbit_scales;
-
- /* postscript names table */
- TT_Post_NamesRec postscript_names;
-
-
- /***********************************************************************/
- /* */
- /* TrueType-specific fields (ignored by the CFF driver) */
- /* */
- /***********************************************************************/
-
- /* the font program, if any */
- FT_ULong font_program_size;
- FT_Byte* font_program;
-
- /* the cvt program, if any */
- FT_ULong cvt_program_size;
- FT_Byte* cvt_program;
-
- /* the original, unscaled, control value table */
- FT_ULong cvt_size;
- FT_Short* cvt;
-
- /* A pointer to the bytecode interpreter to use. This is also */
- /* used to hook the debugger for the `ttdebug' utility. */
- TT_Interpreter interpreter;
-
-
- /***********************************************************************/
- /* */
- /* Other tables or fields. This is used by derivative formats like */
- /* OpenType. */
- /* */
- /***********************************************************************/
-
- FT_Generic extra;
-
- const char* postscript_name;
-
- FT_ULong glyf_len;
- FT_ULong glyf_offset; /* since 2.7.1 */
-
- FT_Bool is_cff2; /* since 2.7.1 */
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_Bool doblend;
- GX_Blend blend;
-
- FT_Bool is_default_instance; /* since 2.7.1 */
- FT_UInt32 variation_support; /* since 2.7.1 */
-
- const char* var_postscript_prefix; /* since 2.7.2 */
- FT_UInt var_postscript_prefix_len; /* since 2.7.2 */
-
-#endif
-
- /* since version 2.2 */
-
- FT_ULong horz_metrics_size;
- FT_ULong vert_metrics_size;
-
- FT_ULong num_locations; /* in broken TTF, gid > 0xFFFF */
- FT_Byte* glyph_locations;
-
- FT_Byte* hdmx_table;
- FT_ULong hdmx_table_size;
- FT_UInt hdmx_record_count;
- FT_ULong hdmx_record_size;
- FT_Byte* hdmx_record_sizes;
-
- FT_Byte* sbit_table;
- FT_ULong sbit_table_size;
- TT_SbitTableType sbit_table_type;
- FT_UInt sbit_num_strikes;
- FT_UInt* sbit_strike_map;
-
- FT_Byte* kern_table;
- FT_ULong kern_table_size;
- FT_UInt num_kern_tables;
- FT_UInt32 kern_avail_bits;
- FT_UInt32 kern_order_bits;
-
-#ifdef TT_CONFIG_OPTION_BDF
- TT_BDFRec bdf;
-#endif /* TT_CONFIG_OPTION_BDF */
-
- /* since 2.3.0 */
- FT_ULong horz_metrics_offset;
- FT_ULong vert_metrics_offset;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- /* since 2.4.12 */
- FT_ULong sph_found_func_flags; /* special functions found */
- /* for this face */
- FT_Bool sph_compatibility_mode;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
- /* since 2.7 */
- FT_ULong ebdt_start; /* either `CBDT', `EBDT', or `bdat' */
- FT_ULong ebdt_size;
-#endif
-
- } TT_FaceRec;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_GlyphZoneRec */
- /* */
- /* <Description> */
- /* A glyph zone is used to load, scale and hint glyph outline */
- /* coordinates. */
- /* */
- /* <Fields> */
- /* memory :: A handle to the memory manager. */
- /* */
- /* max_points :: The maximum size in points of the zone. */
- /* */
- /* max_contours :: Max size in links contours of the zone. */
- /* */
- /* n_points :: The current number of points in the zone. */
- /* */
- /* n_contours :: The current number of contours in the zone. */
- /* */
- /* org :: The original glyph coordinates (font */
- /* units/scaled). */
- /* */
- /* cur :: The current glyph coordinates (scaled/hinted). */
- /* */
- /* tags :: The point control tags. */
- /* */
- /* contours :: The contours end points. */
- /* */
- /* first_point :: Offset of the current subglyph's first point. */
- /* */
- typedef struct TT_GlyphZoneRec_
- {
- FT_Memory memory;
- FT_UShort max_points;
- FT_Short max_contours;
- FT_UShort n_points; /* number of points in zone */
- FT_Short n_contours; /* number of contours */
-
- FT_Vector* org; /* original point coordinates */
- FT_Vector* cur; /* current point coordinates */
- FT_Vector* orus; /* original (unscaled) point coordinates */
-
- FT_Byte* tags; /* current touch flags */
- FT_UShort* contours; /* contour end points */
-
- FT_UShort first_point; /* offset of first (#0) point */
-
- } TT_GlyphZoneRec, *TT_GlyphZone;
-
-
- /* handle to execution context */
- typedef struct TT_ExecContextRec_* TT_ExecContext;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* TT_Size */
- /* */
- /* <Description> */
- /* A handle to a TrueType size object. */
- /* */
- typedef struct TT_SizeRec_* TT_Size;
-
-
- /* glyph loader structure */
- typedef struct TT_LoaderRec_
- {
- TT_Face face;
- TT_Size size;
- FT_GlyphSlot glyph;
- FT_GlyphLoader gloader;
-
- FT_ULong load_flags;
- FT_UInt glyph_index;
-
- FT_Stream stream;
- FT_Int byte_len;
-
- FT_Short n_contours;
- FT_BBox bbox;
- FT_Int left_bearing;
- FT_Int advance;
- FT_Int linear;
- FT_Bool linear_def;
- FT_Vector pp1;
- FT_Vector pp2;
-
- /* the zone where we load our glyphs */
- TT_GlyphZoneRec base;
- TT_GlyphZoneRec zone;
-
- TT_ExecContext exec;
- FT_Byte* instructions;
- FT_ULong ins_pos;
-
- /* for possible extensibility in other formats */
- void* other;
-
- /* since version 2.1.8 */
- FT_Int top_bearing;
- FT_Int vadvance;
- FT_Vector pp3;
- FT_Vector pp4;
-
- /* since version 2.2.1 */
- FT_Byte* cursor;
- FT_Byte* limit;
-
- /* since version 2.6.2 */
- FT_ListRec composites;
-
- } TT_LoaderRec;
-
-
-FT_END_HEADER
-
-#endif /* TTTYPES_H_ */
-
-
-/* END */
diff --git a/include/freetype/t1tables.h b/include/freetype/t1tables.h
deleted file mode 100644
index 3f6b36e10..000000000
--- a/include/freetype/t1tables.h
+++ /dev/null
@@ -1,761 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1tables.h */
-/* */
-/* Basic Type 1/Type 2 tables definitions and interface (specification */
-/* only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef T1TABLES_H_
-#define T1TABLES_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* type1_tables */
- /* */
- /* <Title> */
- /* Type 1 Tables */
- /* */
- /* <Abstract> */
- /* Type~1 (PostScript) specific font tables. */
- /* */
- /* <Description> */
- /* This section contains the definition of Type 1-specific tables, */
- /* including structures related to other PostScript font formats. */
- /* */
- /* <Order> */
- /* PS_FontInfoRec */
- /* PS_FontInfo */
- /* PS_PrivateRec */
- /* PS_Private */
- /* */
- /* CID_FaceDictRec */
- /* CID_FaceDict */
- /* CID_FaceInfoRec */
- /* CID_FaceInfo */
- /* */
- /* FT_Has_PS_Glyph_Names */
- /* FT_Get_PS_Font_Info */
- /* FT_Get_PS_Font_Private */
- /* FT_Get_PS_Font_Value */
- /* */
- /* T1_Blend_Flags */
- /* T1_EncodingType */
- /* PS_Dict_Keys */
- /* */
- /*************************************************************************/
-
-
- /* Note that we separate font data in PS_FontInfoRec and PS_PrivateRec */
- /* structures in order to support Multiple Master fonts. */
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* PS_FontInfoRec */
- /* */
- /* <Description> */
- /* A structure used to model a Type~1 or Type~2 FontInfo dictionary. */
- /* Note that for Multiple Master fonts, each instance has its own */
- /* FontInfo dictionary. */
- /* */
- typedef struct PS_FontInfoRec_
- {
- FT_String* version;
- FT_String* notice;
- FT_String* full_name;
- FT_String* family_name;
- FT_String* weight;
- FT_Long italic_angle;
- FT_Bool is_fixed_pitch;
- FT_Short underline_position;
- FT_UShort underline_thickness;
-
- } PS_FontInfoRec;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* PS_FontInfo */
- /* */
- /* <Description> */
- /* A handle to a @PS_FontInfoRec structure. */
- /* */
- typedef struct PS_FontInfoRec_* PS_FontInfo;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* T1_FontInfo */
- /* */
- /* <Description> */
- /* This type is equivalent to @PS_FontInfoRec. It is deprecated but */
- /* kept to maintain source compatibility between various versions of */
- /* FreeType. */
- /* */
- typedef PS_FontInfoRec T1_FontInfo;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* PS_PrivateRec */
- /* */
- /* <Description> */
- /* A structure used to model a Type~1 or Type~2 private dictionary. */
- /* Note that for Multiple Master fonts, each instance has its own */
- /* Private dictionary. */
- /* */
- typedef struct PS_PrivateRec_
- {
- FT_Int unique_id;
- FT_Int lenIV;
-
- FT_Byte num_blue_values;
- FT_Byte num_other_blues;
- FT_Byte num_family_blues;
- FT_Byte num_family_other_blues;
-
- FT_Short blue_values[14];
- FT_Short other_blues[10];
-
- FT_Short family_blues [14];
- FT_Short family_other_blues[10];
-
- FT_Fixed blue_scale;
- FT_Int blue_shift;
- FT_Int blue_fuzz;
-
- FT_UShort standard_width[1];
- FT_UShort standard_height[1];
-
- FT_Byte num_snap_widths;
- FT_Byte num_snap_heights;
- FT_Bool force_bold;
- FT_Bool round_stem_up;
-
- FT_Short snap_widths [13]; /* including std width */
- FT_Short snap_heights[13]; /* including std height */
-
- FT_Fixed expansion_factor;
-
- FT_Long language_group;
- FT_Long password;
-
- FT_Short min_feature[2];
-
- } PS_PrivateRec;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* PS_Private */
- /* */
- /* <Description> */
- /* A handle to a @PS_PrivateRec structure. */
- /* */
- typedef struct PS_PrivateRec_* PS_Private;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* T1_Private */
- /* */
- /* <Description> */
- /* This type is equivalent to @PS_PrivateRec. It is deprecated but */
- /* kept to maintain source compatibility between various versions of */
- /* FreeType. */
- /* */
- typedef PS_PrivateRec T1_Private;
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* T1_Blend_Flags */
- /* */
- /* <Description> */
- /* A set of flags used to indicate which fields are present in a */
- /* given blend dictionary (font info or private). Used to support */
- /* Multiple Masters fonts. */
- /* */
- /* <Values> */
- /* T1_BLEND_UNDERLINE_POSITION :: */
- /* T1_BLEND_UNDERLINE_THICKNESS :: */
- /* T1_BLEND_ITALIC_ANGLE :: */
- /* T1_BLEND_BLUE_VALUES :: */
- /* T1_BLEND_OTHER_BLUES :: */
- /* T1_BLEND_STANDARD_WIDTH :: */
- /* T1_BLEND_STANDARD_HEIGHT :: */
- /* T1_BLEND_STEM_SNAP_WIDTHS :: */
- /* T1_BLEND_STEM_SNAP_HEIGHTS :: */
- /* T1_BLEND_BLUE_SCALE :: */
- /* T1_BLEND_BLUE_SHIFT :: */
- /* T1_BLEND_FAMILY_BLUES :: */
- /* T1_BLEND_FAMILY_OTHER_BLUES :: */
- /* T1_BLEND_FORCE_BOLD :: */
- /* */
- typedef enum T1_Blend_Flags_
- {
- /* required fields in a FontInfo blend dictionary */
- T1_BLEND_UNDERLINE_POSITION = 0,
- T1_BLEND_UNDERLINE_THICKNESS,
- T1_BLEND_ITALIC_ANGLE,
-
- /* required fields in a Private blend dictionary */
- T1_BLEND_BLUE_VALUES,
- T1_BLEND_OTHER_BLUES,
- T1_BLEND_STANDARD_WIDTH,
- T1_BLEND_STANDARD_HEIGHT,
- T1_BLEND_STEM_SNAP_WIDTHS,
- T1_BLEND_STEM_SNAP_HEIGHTS,
- T1_BLEND_BLUE_SCALE,
- T1_BLEND_BLUE_SHIFT,
- T1_BLEND_FAMILY_BLUES,
- T1_BLEND_FAMILY_OTHER_BLUES,
- T1_BLEND_FORCE_BOLD,
-
- T1_BLEND_MAX /* do not remove */
-
- } T1_Blend_Flags;
-
-
- /* these constants are deprecated; use the corresponding */
- /* `T1_Blend_Flags' values instead */
-#define t1_blend_underline_position T1_BLEND_UNDERLINE_POSITION
-#define t1_blend_underline_thickness T1_BLEND_UNDERLINE_THICKNESS
-#define t1_blend_italic_angle T1_BLEND_ITALIC_ANGLE
-#define t1_blend_blue_values T1_BLEND_BLUE_VALUES
-#define t1_blend_other_blues T1_BLEND_OTHER_BLUES
-#define t1_blend_standard_widths T1_BLEND_STANDARD_WIDTH
-#define t1_blend_standard_height T1_BLEND_STANDARD_HEIGHT
-#define t1_blend_stem_snap_widths T1_BLEND_STEM_SNAP_WIDTHS
-#define t1_blend_stem_snap_heights T1_BLEND_STEM_SNAP_HEIGHTS
-#define t1_blend_blue_scale T1_BLEND_BLUE_SCALE
-#define t1_blend_blue_shift T1_BLEND_BLUE_SHIFT
-#define t1_blend_family_blues T1_BLEND_FAMILY_BLUES
-#define t1_blend_family_other_blues T1_BLEND_FAMILY_OTHER_BLUES
-#define t1_blend_force_bold T1_BLEND_FORCE_BOLD
-#define t1_blend_max T1_BLEND_MAX
-
- /* */
-
-
- /* maximum number of Multiple Masters designs, as defined in the spec */
-#define T1_MAX_MM_DESIGNS 16
-
- /* maximum number of Multiple Masters axes, as defined in the spec */
-#define T1_MAX_MM_AXIS 4
-
- /* maximum number of elements in a design map */
-#define T1_MAX_MM_MAP_POINTS 20
-
-
- /* this structure is used to store the BlendDesignMap entry for an axis */
- typedef struct PS_DesignMap_
- {
- FT_Byte num_points;
- FT_Long* design_points;
- FT_Fixed* blend_points;
-
- } PS_DesignMapRec, *PS_DesignMap;
-
- /* backward compatible definition */
- typedef PS_DesignMapRec T1_DesignMap;
-
-
- typedef struct PS_BlendRec_
- {
- FT_UInt num_designs;
- FT_UInt num_axis;
-
- FT_String* axis_names[T1_MAX_MM_AXIS];
- FT_Fixed* design_pos[T1_MAX_MM_DESIGNS];
- PS_DesignMapRec design_map[T1_MAX_MM_AXIS];
-
- FT_Fixed* weight_vector;
- FT_Fixed* default_weight_vector;
-
- PS_FontInfo font_infos[T1_MAX_MM_DESIGNS + 1];
- PS_Private privates [T1_MAX_MM_DESIGNS + 1];
-
- FT_ULong blend_bitflags;
-
- FT_BBox* bboxes [T1_MAX_MM_DESIGNS + 1];
-
- /* since 2.3.0 */
-
- /* undocumented, optional: the default design instance; */
- /* corresponds to default_weight_vector -- */
- /* num_default_design_vector == 0 means it is not present */
- /* in the font and associated metrics files */
- FT_UInt default_design_vector[T1_MAX_MM_DESIGNS];
- FT_UInt num_default_design_vector;
-
- } PS_BlendRec, *PS_Blend;
-
-
- /* backward compatible definition */
- typedef PS_BlendRec T1_Blend;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* CID_FaceDictRec */
- /* */
- /* <Description> */
- /* A structure used to represent data in a CID top-level dictionary. */
- /* */
- typedef struct CID_FaceDictRec_
- {
- PS_PrivateRec private_dict;
-
- FT_UInt len_buildchar;
- FT_Fixed forcebold_threshold;
- FT_Pos stroke_width;
- FT_Fixed expansion_factor;
-
- FT_Byte paint_type;
- FT_Byte font_type;
- FT_Matrix font_matrix;
- FT_Vector font_offset;
-
- FT_UInt num_subrs;
- FT_ULong subrmap_offset;
- FT_Int sd_bytes;
-
- } CID_FaceDictRec;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* CID_FaceDict */
- /* */
- /* <Description> */
- /* A handle to a @CID_FaceDictRec structure. */
- /* */
- typedef struct CID_FaceDictRec_* CID_FaceDict;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* CID_FontDict */
- /* */
- /* <Description> */
- /* This type is equivalent to @CID_FaceDictRec. It is deprecated but */
- /* kept to maintain source compatibility between various versions of */
- /* FreeType. */
- /* */
- typedef CID_FaceDictRec CID_FontDict;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* CID_FaceInfoRec */
- /* */
- /* <Description> */
- /* A structure used to represent CID Face information. */
- /* */
- typedef struct CID_FaceInfoRec_
- {
- FT_String* cid_font_name;
- FT_Fixed cid_version;
- FT_Int cid_font_type;
-
- FT_String* registry;
- FT_String* ordering;
- FT_Int supplement;
-
- PS_FontInfoRec font_info;
- FT_BBox font_bbox;
- FT_ULong uid_base;
-
- FT_Int num_xuid;
- FT_ULong xuid[16];
-
- FT_ULong cidmap_offset;
- FT_Int fd_bytes;
- FT_Int gd_bytes;
- FT_ULong cid_count;
-
- FT_Int num_dicts;
- CID_FaceDict font_dicts;
-
- FT_ULong data_offset;
-
- } CID_FaceInfoRec;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* CID_FaceInfo */
- /* */
- /* <Description> */
- /* A handle to a @CID_FaceInfoRec structure. */
- /* */
- typedef struct CID_FaceInfoRec_* CID_FaceInfo;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* CID_Info */
- /* */
- /* <Description> */
- /* This type is equivalent to @CID_FaceInfoRec. It is deprecated but */
- /* kept to maintain source compatibility between various versions of */
- /* FreeType. */
- /* */
- typedef CID_FaceInfoRec CID_Info;
-
-
- /************************************************************************
- *
- * @function:
- * FT_Has_PS_Glyph_Names
- *
- * @description:
- * Return true if a given face provides reliable PostScript glyph
- * names. This is similar to using the @FT_HAS_GLYPH_NAMES macro,
- * except that certain fonts (mostly TrueType) contain incorrect
- * glyph name tables.
- *
- * When this function returns true, the caller is sure that the glyph
- * names returned by @FT_Get_Glyph_Name are reliable.
- *
- * @input:
- * face ::
- * face handle
- *
- * @return:
- * Boolean. True if glyph names are reliable.
- *
- */
- FT_EXPORT( FT_Int )
- FT_Has_PS_Glyph_Names( FT_Face face );
-
-
- /************************************************************************
- *
- * @function:
- * FT_Get_PS_Font_Info
- *
- * @description:
- * Retrieve the @PS_FontInfoRec structure corresponding to a given
- * PostScript font.
- *
- * @input:
- * face ::
- * PostScript face handle.
- *
- * @output:
- * afont_info ::
- * Output font info structure pointer.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * String pointers within the @PS_FontInfoRec structure are owned by
- * the face and don't need to be freed by the caller. Missing entries
- * in the font's FontInfo dictionary are represented by NULL pointers.
- *
- * If the font's format is not PostScript-based, this function will
- * return the `FT_Err_Invalid_Argument' error code.
- *
- */
- FT_EXPORT( FT_Error )
- FT_Get_PS_Font_Info( FT_Face face,
- PS_FontInfo afont_info );
-
-
- /************************************************************************
- *
- * @function:
- * FT_Get_PS_Font_Private
- *
- * @description:
- * Retrieve the @PS_PrivateRec structure corresponding to a given
- * PostScript font.
- *
- * @input:
- * face ::
- * PostScript face handle.
- *
- * @output:
- * afont_private ::
- * Output private dictionary structure pointer.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * The string pointers within the @PS_PrivateRec structure are owned by
- * the face and don't need to be freed by the caller.
- *
- * If the font's format is not PostScript-based, this function returns
- * the `FT_Err_Invalid_Argument' error code.
- *
- */
- FT_EXPORT( FT_Error )
- FT_Get_PS_Font_Private( FT_Face face,
- PS_Private afont_private );
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* T1_EncodingType */
- /* */
- /* <Description> */
- /* An enumeration describing the `Encoding' entry in a Type 1 */
- /* dictionary. */
- /* */
- /* <Values> */
- /* T1_ENCODING_TYPE_NONE :: */
- /* T1_ENCODING_TYPE_ARRAY :: */
- /* T1_ENCODING_TYPE_STANDARD :: */
- /* T1_ENCODING_TYPE_ISOLATIN1 :: */
- /* T1_ENCODING_TYPE_EXPERT :: */
- /* */
- typedef enum T1_EncodingType_
- {
- T1_ENCODING_TYPE_NONE = 0,
- T1_ENCODING_TYPE_ARRAY,
- T1_ENCODING_TYPE_STANDARD,
- T1_ENCODING_TYPE_ISOLATIN1,
- T1_ENCODING_TYPE_EXPERT
-
- } T1_EncodingType;
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* PS_Dict_Keys */
- /* */
- /* <Description> */
- /* An enumeration used in calls to @FT_Get_PS_Font_Value to identify */
- /* the Type~1 dictionary entry to retrieve. */
- /* */
- /* <Values> */
- /* PS_DICT_FONT_TYPE :: */
- /* PS_DICT_FONT_MATRIX :: */
- /* PS_DICT_FONT_BBOX :: */
- /* PS_DICT_PAINT_TYPE :: */
- /* PS_DICT_FONT_NAME :: */
- /* PS_DICT_UNIQUE_ID :: */
- /* PS_DICT_NUM_CHAR_STRINGS :: */
- /* PS_DICT_CHAR_STRING_KEY :: */
- /* PS_DICT_CHAR_STRING :: */
- /* PS_DICT_ENCODING_TYPE :: */
- /* PS_DICT_ENCODING_ENTRY :: */
- /* PS_DICT_NUM_SUBRS :: */
- /* PS_DICT_SUBR :: */
- /* PS_DICT_STD_HW :: */
- /* PS_DICT_STD_VW :: */
- /* PS_DICT_NUM_BLUE_VALUES :: */
- /* PS_DICT_BLUE_VALUE :: */
- /* PS_DICT_BLUE_FUZZ :: */
- /* PS_DICT_NUM_OTHER_BLUES :: */
- /* PS_DICT_OTHER_BLUE :: */
- /* PS_DICT_NUM_FAMILY_BLUES :: */
- /* PS_DICT_FAMILY_BLUE :: */
- /* PS_DICT_NUM_FAMILY_OTHER_BLUES :: */
- /* PS_DICT_FAMILY_OTHER_BLUE :: */
- /* PS_DICT_BLUE_SCALE :: */
- /* PS_DICT_BLUE_SHIFT :: */
- /* PS_DICT_NUM_STEM_SNAP_H :: */
- /* PS_DICT_STEM_SNAP_H :: */
- /* PS_DICT_NUM_STEM_SNAP_V :: */
- /* PS_DICT_STEM_SNAP_V :: */
- /* PS_DICT_FORCE_BOLD :: */
- /* PS_DICT_RND_STEM_UP :: */
- /* PS_DICT_MIN_FEATURE :: */
- /* PS_DICT_LEN_IV :: */
- /* PS_DICT_PASSWORD :: */
- /* PS_DICT_LANGUAGE_GROUP :: */
- /* PS_DICT_VERSION :: */
- /* PS_DICT_NOTICE :: */
- /* PS_DICT_FULL_NAME :: */
- /* PS_DICT_FAMILY_NAME :: */
- /* PS_DICT_WEIGHT :: */
- /* PS_DICT_IS_FIXED_PITCH :: */
- /* PS_DICT_UNDERLINE_POSITION :: */
- /* PS_DICT_UNDERLINE_THICKNESS :: */
- /* PS_DICT_FS_TYPE :: */
- /* PS_DICT_ITALIC_ANGLE :: */
- /* */
- typedef enum PS_Dict_Keys_
- {
- /* conventionally in the font dictionary */
- PS_DICT_FONT_TYPE, /* FT_Byte */
- PS_DICT_FONT_MATRIX, /* FT_Fixed */
- PS_DICT_FONT_BBOX, /* FT_Fixed */
- PS_DICT_PAINT_TYPE, /* FT_Byte */
- PS_DICT_FONT_NAME, /* FT_String* */
- PS_DICT_UNIQUE_ID, /* FT_Int */
- PS_DICT_NUM_CHAR_STRINGS, /* FT_Int */
- PS_DICT_CHAR_STRING_KEY, /* FT_String* */
- PS_DICT_CHAR_STRING, /* FT_String* */
- PS_DICT_ENCODING_TYPE, /* T1_EncodingType */
- PS_DICT_ENCODING_ENTRY, /* FT_String* */
-
- /* conventionally in the font Private dictionary */
- PS_DICT_NUM_SUBRS, /* FT_Int */
- PS_DICT_SUBR, /* FT_String* */
- PS_DICT_STD_HW, /* FT_UShort */
- PS_DICT_STD_VW, /* FT_UShort */
- PS_DICT_NUM_BLUE_VALUES, /* FT_Byte */
- PS_DICT_BLUE_VALUE, /* FT_Short */
- PS_DICT_BLUE_FUZZ, /* FT_Int */
- PS_DICT_NUM_OTHER_BLUES, /* FT_Byte */
- PS_DICT_OTHER_BLUE, /* FT_Short */
- PS_DICT_NUM_FAMILY_BLUES, /* FT_Byte */
- PS_DICT_FAMILY_BLUE, /* FT_Short */
- PS_DICT_NUM_FAMILY_OTHER_BLUES, /* FT_Byte */
- PS_DICT_FAMILY_OTHER_BLUE, /* FT_Short */
- PS_DICT_BLUE_SCALE, /* FT_Fixed */
- PS_DICT_BLUE_SHIFT, /* FT_Int */
- PS_DICT_NUM_STEM_SNAP_H, /* FT_Byte */
- PS_DICT_STEM_SNAP_H, /* FT_Short */
- PS_DICT_NUM_STEM_SNAP_V, /* FT_Byte */
- PS_DICT_STEM_SNAP_V, /* FT_Short */
- PS_DICT_FORCE_BOLD, /* FT_Bool */
- PS_DICT_RND_STEM_UP, /* FT_Bool */
- PS_DICT_MIN_FEATURE, /* FT_Short */
- PS_DICT_LEN_IV, /* FT_Int */
- PS_DICT_PASSWORD, /* FT_Long */
- PS_DICT_LANGUAGE_GROUP, /* FT_Long */
-
- /* conventionally in the font FontInfo dictionary */
- PS_DICT_VERSION, /* FT_String* */
- PS_DICT_NOTICE, /* FT_String* */
- PS_DICT_FULL_NAME, /* FT_String* */
- PS_DICT_FAMILY_NAME, /* FT_String* */
- PS_DICT_WEIGHT, /* FT_String* */
- PS_DICT_IS_FIXED_PITCH, /* FT_Bool */
- PS_DICT_UNDERLINE_POSITION, /* FT_Short */
- PS_DICT_UNDERLINE_THICKNESS, /* FT_UShort */
- PS_DICT_FS_TYPE, /* FT_UShort */
- PS_DICT_ITALIC_ANGLE, /* FT_Long */
-
- PS_DICT_MAX = PS_DICT_ITALIC_ANGLE
-
- } PS_Dict_Keys;
-
-
- /************************************************************************
- *
- * @function:
- * FT_Get_PS_Font_Value
- *
- * @description:
- * Retrieve the value for the supplied key from a PostScript font.
- *
- * @input:
- * face ::
- * PostScript face handle.
- *
- * key ::
- * An enumeration value representing the dictionary key to retrieve.
- *
- * idx ::
- * For array values, this specifies the index to be returned.
- *
- * value ::
- * A pointer to memory into which to write the value.
- *
- * valen_len ::
- * The size, in bytes, of the memory supplied for the value.
- *
- * @output:
- * value ::
- * The value matching the above key, if it exists.
- *
- * @return:
- * The amount of memory (in bytes) required to hold the requested
- * value (if it exists, -1 otherwise).
- *
- * @note:
- * The values returned are not pointers into the internal structures of
- * the face, but are `fresh' copies, so that the memory containing them
- * belongs to the calling application. This also enforces the
- * `read-only' nature of these values, i.e., this function cannot be
- * used to manipulate the face.
- *
- * `value' is a void pointer because the values returned can be of
- * various types.
- *
- * If either `value' is NULL or `value_len' is too small, just the
- * required memory size for the requested entry is returned.
- *
- * The `idx' parameter is used, not only to retrieve elements of, for
- * example, the FontMatrix or FontBBox, but also to retrieve name keys
- * from the CharStrings dictionary, and the charstrings themselves. It
- * is ignored for atomic values.
- *
- * PS_DICT_BLUE_SCALE returns a value that is scaled up by 1000. To
- * get the value as in the font stream, you need to divide by
- * 65536000.0 (to remove the FT_Fixed scale, and the x1000 scale).
- *
- * IMPORTANT: Only key/value pairs read by the FreeType interpreter can
- * be retrieved. So, for example, PostScript procedures such as NP,
- * ND, and RD are not available. Arbitrary keys are, obviously, not be
- * available either.
- *
- * If the font's format is not PostScript-based, this function returns
- * the `FT_Err_Invalid_Argument' error code.
- *
- */
- FT_EXPORT( FT_Long )
- FT_Get_PS_Font_Value( FT_Face face,
- PS_Dict_Keys key,
- FT_UInt idx,
- void *value,
- FT_Long value_len );
-
- /* */
-
-FT_END_HEADER
-
-#endif /* T1TABLES_H_ */
-
-
-/* END */
diff --git a/include/freetype/ttnameid.h b/include/freetype/ttnameid.h
deleted file mode 100644
index 494d67718..000000000
--- a/include/freetype/ttnameid.h
+++ /dev/null
@@ -1,1236 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttnameid.h */
-/* */
-/* TrueType name ID definitions (specification only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTNAMEID_H_
-#define TTNAMEID_H_
-
-
-#include <ft2build.h>
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* truetype_tables */
- /* */
-
-
- /*************************************************************************/
- /* */
- /* Possible values for the `platform' identifier code in the name */
- /* records of an SFNT `name' table. */
- /* */
- /*************************************************************************/
-
-
- /***********************************************************************
- *
- * @enum:
- * TT_PLATFORM_XXX
- *
- * @description:
- * A list of valid values for the `platform_id' identifier code in
- * @FT_CharMapRec and @FT_SfntName structures.
- *
- * @values:
- * TT_PLATFORM_APPLE_UNICODE ::
- * Used by Apple to indicate a Unicode character map and/or name entry.
- * See @TT_APPLE_ID_XXX for corresponding `encoding_id' values. Note
- * that name entries in this format are coded as big-endian UCS-2
- * character codes _only_.
- *
- * TT_PLATFORM_MACINTOSH ::
- * Used by Apple to indicate a MacOS-specific charmap and/or name entry.
- * See @TT_MAC_ID_XXX for corresponding `encoding_id' values. Note that
- * most TrueType fonts contain an Apple roman charmap to be usable on
- * MacOS systems (even if they contain a Microsoft charmap as well).
- *
- * TT_PLATFORM_ISO ::
- * This value was used to specify ISO/IEC 10646 charmaps. It is however
- * now deprecated. See @TT_ISO_ID_XXX for a list of corresponding
- * `encoding_id' values.
- *
- * TT_PLATFORM_MICROSOFT ::
- * Used by Microsoft to indicate Windows-specific charmaps. See
- * @TT_MS_ID_XXX for a list of corresponding `encoding_id' values.
- * Note that most fonts contain a Unicode charmap using
- * (TT_PLATFORM_MICROSOFT, @TT_MS_ID_UNICODE_CS).
- *
- * TT_PLATFORM_CUSTOM ::
- * Used to indicate application-specific charmaps.
- *
- * TT_PLATFORM_ADOBE ::
- * This value isn't part of any font format specification, but is used
- * by FreeType to report Adobe-specific charmaps in an @FT_CharMapRec
- * structure. See @TT_ADOBE_ID_XXX.
- */
-
-#define TT_PLATFORM_APPLE_UNICODE 0
-#define TT_PLATFORM_MACINTOSH 1
-#define TT_PLATFORM_ISO 2 /* deprecated */
-#define TT_PLATFORM_MICROSOFT 3
-#define TT_PLATFORM_CUSTOM 4
-#define TT_PLATFORM_ADOBE 7 /* artificial */
-
-
- /***********************************************************************
- *
- * @enum:
- * TT_APPLE_ID_XXX
- *
- * @description:
- * A list of valid values for the `encoding_id' for
- * @TT_PLATFORM_APPLE_UNICODE charmaps and name entries.
- *
- * @values:
- * TT_APPLE_ID_DEFAULT ::
- * Unicode version 1.0.
- *
- * TT_APPLE_ID_UNICODE_1_1 ::
- * Unicode 1.1; specifies Hangul characters starting at U+34xx.
- *
- * TT_APPLE_ID_ISO_10646 ::
- * Deprecated (identical to preceding).
- *
- * TT_APPLE_ID_UNICODE_2_0 ::
- * Unicode 2.0 and beyond (UTF-16 BMP only).
- *
- * TT_APPLE_ID_UNICODE_32 ::
- * Unicode 3.1 and beyond, using UTF-32.
- *
- * TT_APPLE_ID_VARIANT_SELECTOR ::
- * From Adobe, not Apple. Not a normal cmap. Specifies variations
- * on a real cmap.
- *
- * TT_APPLE_ID_FULL_UNICODE ::
- * Used for fallback fonts that provide complete Unicode coverage with
- * a type~13 cmap.
- */
-
-#define TT_APPLE_ID_DEFAULT 0 /* Unicode 1.0 */
-#define TT_APPLE_ID_UNICODE_1_1 1 /* specify Hangul at U+34xx */
-#define TT_APPLE_ID_ISO_10646 2 /* deprecated */
-#define TT_APPLE_ID_UNICODE_2_0 3 /* or later */
-#define TT_APPLE_ID_UNICODE_32 4 /* 2.0 or later, full repertoire */
-#define TT_APPLE_ID_VARIANT_SELECTOR 5 /* variation selector data */
-#define TT_APPLE_ID_FULL_UNICODE 6 /* used with type 13 cmaps */
-
-
- /***********************************************************************
- *
- * @enum:
- * TT_MAC_ID_XXX
- *
- * @description:
- * A list of valid values for the `encoding_id' for
- * @TT_PLATFORM_MACINTOSH charmaps and name entries.
- */
-
-#define TT_MAC_ID_ROMAN 0
-#define TT_MAC_ID_JAPANESE 1
-#define TT_MAC_ID_TRADITIONAL_CHINESE 2
-#define TT_MAC_ID_KOREAN 3
-#define TT_MAC_ID_ARABIC 4
-#define TT_MAC_ID_HEBREW 5
-#define TT_MAC_ID_GREEK 6
-#define TT_MAC_ID_RUSSIAN 7
-#define TT_MAC_ID_RSYMBOL 8
-#define TT_MAC_ID_DEVANAGARI 9
-#define TT_MAC_ID_GURMUKHI 10
-#define TT_MAC_ID_GUJARATI 11
-#define TT_MAC_ID_ORIYA 12
-#define TT_MAC_ID_BENGALI 13
-#define TT_MAC_ID_TAMIL 14
-#define TT_MAC_ID_TELUGU 15
-#define TT_MAC_ID_KANNADA 16
-#define TT_MAC_ID_MALAYALAM 17
-#define TT_MAC_ID_SINHALESE 18
-#define TT_MAC_ID_BURMESE 19
-#define TT_MAC_ID_KHMER 20
-#define TT_MAC_ID_THAI 21
-#define TT_MAC_ID_LAOTIAN 22
-#define TT_MAC_ID_GEORGIAN 23
-#define TT_MAC_ID_ARMENIAN 24
-#define TT_MAC_ID_MALDIVIAN 25
-#define TT_MAC_ID_SIMPLIFIED_CHINESE 25
-#define TT_MAC_ID_TIBETAN 26
-#define TT_MAC_ID_MONGOLIAN 27
-#define TT_MAC_ID_GEEZ 28
-#define TT_MAC_ID_SLAVIC 29
-#define TT_MAC_ID_VIETNAMESE 30
-#define TT_MAC_ID_SINDHI 31
-#define TT_MAC_ID_UNINTERP 32
-
-
- /***********************************************************************
- *
- * @enum:
- * TT_ISO_ID_XXX
- *
- * @description:
- * A list of valid values for the `encoding_id' for
- * @TT_PLATFORM_ISO charmaps and name entries.
- *
- * Their use is now deprecated.
- *
- * @values:
- * TT_ISO_ID_7BIT_ASCII ::
- * ASCII.
- * TT_ISO_ID_10646 ::
- * ISO/10646.
- * TT_ISO_ID_8859_1 ::
- * Also known as Latin-1.
- */
-
-#define TT_ISO_ID_7BIT_ASCII 0
-#define TT_ISO_ID_10646 1
-#define TT_ISO_ID_8859_1 2
-
-
- /***********************************************************************
- *
- * @enum:
- * TT_MS_ID_XXX
- *
- * @description:
- * A list of valid values for the `encoding_id' for
- * @TT_PLATFORM_MICROSOFT charmaps and name entries.
- *
- * @values:
- * TT_MS_ID_SYMBOL_CS ::
- * Microsoft symbol encoding. See @FT_ENCODING_MS_SYMBOL.
- *
- * TT_MS_ID_UNICODE_CS ::
- * Microsoft WGL4 charmap, matching Unicode. See
- * @FT_ENCODING_UNICODE.
- *
- * TT_MS_ID_SJIS ::
- * Shift JIS Japanese encoding. See @FT_ENCODING_SJIS.
- *
- * TT_MS_ID_PRC ::
- * Chinese encodings as used in the People's Republic of China (PRC).
- * This means the encodings GB~2312 and its supersets GBK and
- * GB~18030. See @FT_ENCODING_PRC.
- *
- * TT_MS_ID_BIG_5 ::
- * Traditional Chinese as used in Taiwan and Hong Kong. See
- * @FT_ENCODING_BIG5.
- *
- * TT_MS_ID_WANSUNG ::
- * Korean Extended Wansung encoding. See @FT_ENCODING_WANSUNG.
- *
- * TT_MS_ID_JOHAB ::
- * Korean Johab encoding. See @FT_ENCODING_JOHAB.
- *
- * TT_MS_ID_UCS_4 ::
- * UCS-4 or UTF-32 charmaps. This has been added to the OpenType
- * specification version 1.4 (mid-2001).
- */
-
-#define TT_MS_ID_SYMBOL_CS 0
-#define TT_MS_ID_UNICODE_CS 1
-#define TT_MS_ID_SJIS 2
-#define TT_MS_ID_PRC 3
-#define TT_MS_ID_BIG_5 4
-#define TT_MS_ID_WANSUNG 5
-#define TT_MS_ID_JOHAB 6
-#define TT_MS_ID_UCS_4 10
-
- /* this value is deprecated */
-#define TT_MS_ID_GB2312 TT_MS_ID_PRC
-
-
- /***********************************************************************
- *
- * @enum:
- * TT_ADOBE_ID_XXX
- *
- * @description:
- * A list of valid values for the `encoding_id' for
- * @TT_PLATFORM_ADOBE charmaps. This is a FreeType-specific extension!
- *
- * @values:
- * TT_ADOBE_ID_STANDARD ::
- * Adobe standard encoding.
- * TT_ADOBE_ID_EXPERT ::
- * Adobe expert encoding.
- * TT_ADOBE_ID_CUSTOM ::
- * Adobe custom encoding.
- * TT_ADOBE_ID_LATIN_1 ::
- * Adobe Latin~1 encoding.
- */
-
-#define TT_ADOBE_ID_STANDARD 0
-#define TT_ADOBE_ID_EXPERT 1
-#define TT_ADOBE_ID_CUSTOM 2
-#define TT_ADOBE_ID_LATIN_1 3
-
-
- /***********************************************************************
- *
- * @enum:
- * TT_MAC_LANGID_XXX
- *
- * @description:
- * Possible values of the language identifier field in the name records
- * of the SFNT `name' table if the `platform' identifier code is
- * @TT_PLATFORM_MACINTOSH. These values are also used as return values
- * for function @FT_Get_CMap_Language_ID.
- *
- * The canonical source for Apple's IDs is
- *
- * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html
- */
-
-#define TT_MAC_LANGID_ENGLISH 0
-#define TT_MAC_LANGID_FRENCH 1
-#define TT_MAC_LANGID_GERMAN 2
-#define TT_MAC_LANGID_ITALIAN 3
-#define TT_MAC_LANGID_DUTCH 4
-#define TT_MAC_LANGID_SWEDISH 5
-#define TT_MAC_LANGID_SPANISH 6
-#define TT_MAC_LANGID_DANISH 7
-#define TT_MAC_LANGID_PORTUGUESE 8
-#define TT_MAC_LANGID_NORWEGIAN 9
-#define TT_MAC_LANGID_HEBREW 10
-#define TT_MAC_LANGID_JAPANESE 11
-#define TT_MAC_LANGID_ARABIC 12
-#define TT_MAC_LANGID_FINNISH 13
-#define TT_MAC_LANGID_GREEK 14
-#define TT_MAC_LANGID_ICELANDIC 15
-#define TT_MAC_LANGID_MALTESE 16
-#define TT_MAC_LANGID_TURKISH 17
-#define TT_MAC_LANGID_CROATIAN 18
-#define TT_MAC_LANGID_CHINESE_TRADITIONAL 19
-#define TT_MAC_LANGID_URDU 20
-#define TT_MAC_LANGID_HINDI 21
-#define TT_MAC_LANGID_THAI 22
-#define TT_MAC_LANGID_KOREAN 23
-#define TT_MAC_LANGID_LITHUANIAN 24
-#define TT_MAC_LANGID_POLISH 25
-#define TT_MAC_LANGID_HUNGARIAN 26
-#define TT_MAC_LANGID_ESTONIAN 27
-#define TT_MAC_LANGID_LETTISH 28
-#define TT_MAC_LANGID_SAAMISK 29
-#define TT_MAC_LANGID_FAEROESE 30
-#define TT_MAC_LANGID_FARSI 31
-#define TT_MAC_LANGID_RUSSIAN 32
-#define TT_MAC_LANGID_CHINESE_SIMPLIFIED 33
-#define TT_MAC_LANGID_FLEMISH 34
-#define TT_MAC_LANGID_IRISH 35
-#define TT_MAC_LANGID_ALBANIAN 36
-#define TT_MAC_LANGID_ROMANIAN 37
-#define TT_MAC_LANGID_CZECH 38
-#define TT_MAC_LANGID_SLOVAK 39
-#define TT_MAC_LANGID_SLOVENIAN 40
-#define TT_MAC_LANGID_YIDDISH 41
-#define TT_MAC_LANGID_SERBIAN 42
-#define TT_MAC_LANGID_MACEDONIAN 43
-#define TT_MAC_LANGID_BULGARIAN 44
-#define TT_MAC_LANGID_UKRAINIAN 45
-#define TT_MAC_LANGID_BYELORUSSIAN 46
-#define TT_MAC_LANGID_UZBEK 47
-#define TT_MAC_LANGID_KAZAKH 48
-#define TT_MAC_LANGID_AZERBAIJANI 49
-#define TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT 49
-#define TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT 50
-#define TT_MAC_LANGID_ARMENIAN 51
-#define TT_MAC_LANGID_GEORGIAN 52
-#define TT_MAC_LANGID_MOLDAVIAN 53
-#define TT_MAC_LANGID_KIRGHIZ 54
-#define TT_MAC_LANGID_TAJIKI 55
-#define TT_MAC_LANGID_TURKMEN 56
-#define TT_MAC_LANGID_MONGOLIAN 57
-#define TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT 57
-#define TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT 58
-#define TT_MAC_LANGID_PASHTO 59
-#define TT_MAC_LANGID_KURDISH 60
-#define TT_MAC_LANGID_KASHMIRI 61
-#define TT_MAC_LANGID_SINDHI 62
-#define TT_MAC_LANGID_TIBETAN 63
-#define TT_MAC_LANGID_NEPALI 64
-#define TT_MAC_LANGID_SANSKRIT 65
-#define TT_MAC_LANGID_MARATHI 66
-#define TT_MAC_LANGID_BENGALI 67
-#define TT_MAC_LANGID_ASSAMESE 68
-#define TT_MAC_LANGID_GUJARATI 69
-#define TT_MAC_LANGID_PUNJABI 70
-#define TT_MAC_LANGID_ORIYA 71
-#define TT_MAC_LANGID_MALAYALAM 72
-#define TT_MAC_LANGID_KANNADA 73
-#define TT_MAC_LANGID_TAMIL 74
-#define TT_MAC_LANGID_TELUGU 75
-#define TT_MAC_LANGID_SINHALESE 76
-#define TT_MAC_LANGID_BURMESE 77
-#define TT_MAC_LANGID_KHMER 78
-#define TT_MAC_LANGID_LAO 79
-#define TT_MAC_LANGID_VIETNAMESE 80
-#define TT_MAC_LANGID_INDONESIAN 81
-#define TT_MAC_LANGID_TAGALOG 82
-#define TT_MAC_LANGID_MALAY_ROMAN_SCRIPT 83
-#define TT_MAC_LANGID_MALAY_ARABIC_SCRIPT 84
-#define TT_MAC_LANGID_AMHARIC 85
-#define TT_MAC_LANGID_TIGRINYA 86
-#define TT_MAC_LANGID_GALLA 87
-#define TT_MAC_LANGID_SOMALI 88
-#define TT_MAC_LANGID_SWAHILI 89
-#define TT_MAC_LANGID_RUANDA 90
-#define TT_MAC_LANGID_RUNDI 91
-#define TT_MAC_LANGID_CHEWA 92
-#define TT_MAC_LANGID_MALAGASY 93
-#define TT_MAC_LANGID_ESPERANTO 94
-#define TT_MAC_LANGID_WELSH 128
-#define TT_MAC_LANGID_BASQUE 129
-#define TT_MAC_LANGID_CATALAN 130
-#define TT_MAC_LANGID_LATIN 131
-#define TT_MAC_LANGID_QUECHUA 132
-#define TT_MAC_LANGID_GUARANI 133
-#define TT_MAC_LANGID_AYMARA 134
-#define TT_MAC_LANGID_TATAR 135
-#define TT_MAC_LANGID_UIGHUR 136
-#define TT_MAC_LANGID_DZONGKHA 137
-#define TT_MAC_LANGID_JAVANESE 138
-#define TT_MAC_LANGID_SUNDANESE 139
-
- /* The following codes are new as of 2000-03-10 */
-#define TT_MAC_LANGID_GALICIAN 140
-#define TT_MAC_LANGID_AFRIKAANS 141
-#define TT_MAC_LANGID_BRETON 142
-#define TT_MAC_LANGID_INUKTITUT 143
-#define TT_MAC_LANGID_SCOTTISH_GAELIC 144
-#define TT_MAC_LANGID_MANX_GAELIC 145
-#define TT_MAC_LANGID_IRISH_GAELIC 146
-#define TT_MAC_LANGID_TONGAN 147
-#define TT_MAC_LANGID_GREEK_POLYTONIC 148
-#define TT_MAC_LANGID_GREELANDIC 149
-#define TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT 150
-
-
- /***********************************************************************
- *
- * @enum:
- * TT_MS_LANGID_XXX
- *
- * @description:
- * Possible values of the language identifier field in the name records
- * of the SFNT `name' table if the `platform' identifier code is
- * @TT_PLATFORM_MICROSOFT. These values are also used as return values
- * for function @FT_Get_CMap_Language_ID.
- *
- * The canonical source for Microsoft's IDs is
- *
- * http://www.microsoft.com/globaldev/reference/lcid-all.mspx ,
- *
- * however, we only provide macros for language identifiers present in
- * the OpenType specification: Microsoft has abandoned the concept of
- * LCIDs (language code identifiers), and format~1 of the `name' table
- * provides a better mechanism for languages not covered here.
- *
- * More legacy values not listed in the reference can be found in the
- * @FT_TRUETYPE_IDS_H header file.
- */
-
-#define TT_MS_LANGID_ARABIC_SAUDI_ARABIA 0x0401
-#define TT_MS_LANGID_ARABIC_IRAQ 0x0801
-#define TT_MS_LANGID_ARABIC_EGYPT 0x0C01
-#define TT_MS_LANGID_ARABIC_LIBYA 0x1001
-#define TT_MS_LANGID_ARABIC_ALGERIA 0x1401
-#define TT_MS_LANGID_ARABIC_MOROCCO 0x1801
-#define TT_MS_LANGID_ARABIC_TUNISIA 0x1C01
-#define TT_MS_LANGID_ARABIC_OMAN 0x2001
-#define TT_MS_LANGID_ARABIC_YEMEN 0x2401
-#define TT_MS_LANGID_ARABIC_SYRIA 0x2801
-#define TT_MS_LANGID_ARABIC_JORDAN 0x2C01
-#define TT_MS_LANGID_ARABIC_LEBANON 0x3001
-#define TT_MS_LANGID_ARABIC_KUWAIT 0x3401
-#define TT_MS_LANGID_ARABIC_UAE 0x3801
-#define TT_MS_LANGID_ARABIC_BAHRAIN 0x3C01
-#define TT_MS_LANGID_ARABIC_QATAR 0x4001
-#define TT_MS_LANGID_BULGARIAN_BULGARIA 0x0402
-#define TT_MS_LANGID_CATALAN_CATALAN 0x0403
-#define TT_MS_LANGID_CHINESE_TAIWAN 0x0404
-#define TT_MS_LANGID_CHINESE_PRC 0x0804
-#define TT_MS_LANGID_CHINESE_HONG_KONG 0x0C04
-#define TT_MS_LANGID_CHINESE_SINGAPORE 0x1004
-#define TT_MS_LANGID_CHINESE_MACAO 0x1404
-#define TT_MS_LANGID_CZECH_CZECH_REPUBLIC 0x0405
-#define TT_MS_LANGID_DANISH_DENMARK 0x0406
-#define TT_MS_LANGID_GERMAN_GERMANY 0x0407
-#define TT_MS_LANGID_GERMAN_SWITZERLAND 0x0807
-#define TT_MS_LANGID_GERMAN_AUSTRIA 0x0C07
-#define TT_MS_LANGID_GERMAN_LUXEMBOURG 0x1007
-#define TT_MS_LANGID_GERMAN_LIECHTENSTEIN 0x1407
-#define TT_MS_LANGID_GREEK_GREECE 0x0408
-#define TT_MS_LANGID_ENGLISH_UNITED_STATES 0x0409
-#define TT_MS_LANGID_ENGLISH_UNITED_KINGDOM 0x0809
-#define TT_MS_LANGID_ENGLISH_AUSTRALIA 0x0C09
-#define TT_MS_LANGID_ENGLISH_CANADA 0x1009
-#define TT_MS_LANGID_ENGLISH_NEW_ZEALAND 0x1409
-#define TT_MS_LANGID_ENGLISH_IRELAND 0x1809
-#define TT_MS_LANGID_ENGLISH_SOUTH_AFRICA 0x1C09
-#define TT_MS_LANGID_ENGLISH_JAMAICA 0x2009
-#define TT_MS_LANGID_ENGLISH_CARIBBEAN 0x2409
-#define TT_MS_LANGID_ENGLISH_BELIZE 0x2809
-#define TT_MS_LANGID_ENGLISH_TRINIDAD 0x2C09
-#define TT_MS_LANGID_ENGLISH_ZIMBABWE 0x3009
-#define TT_MS_LANGID_ENGLISH_PHILIPPINES 0x3409
-#define TT_MS_LANGID_ENGLISH_INDIA 0x4009
-#define TT_MS_LANGID_ENGLISH_MALAYSIA 0x4409
-#define TT_MS_LANGID_ENGLISH_SINGAPORE 0x4809
-#define TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT 0x040A
-#define TT_MS_LANGID_SPANISH_MEXICO 0x080A
-#define TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT 0x0C0A
-#define TT_MS_LANGID_SPANISH_GUATEMALA 0x100A
-#define TT_MS_LANGID_SPANISH_COSTA_RICA 0x140A
-#define TT_MS_LANGID_SPANISH_PANAMA 0x180A
-#define TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC 0x1C0A
-#define TT_MS_LANGID_SPANISH_VENEZUELA 0x200A
-#define TT_MS_LANGID_SPANISH_COLOMBIA 0x240A
-#define TT_MS_LANGID_SPANISH_PERU 0x280A
-#define TT_MS_LANGID_SPANISH_ARGENTINA 0x2C0A
-#define TT_MS_LANGID_SPANISH_ECUADOR 0x300A
-#define TT_MS_LANGID_SPANISH_CHILE 0x340A
-#define TT_MS_LANGID_SPANISH_URUGUAY 0x380A
-#define TT_MS_LANGID_SPANISH_PARAGUAY 0x3C0A
-#define TT_MS_LANGID_SPANISH_BOLIVIA 0x400A
-#define TT_MS_LANGID_SPANISH_EL_SALVADOR 0x440A
-#define TT_MS_LANGID_SPANISH_HONDURAS 0x480A
-#define TT_MS_LANGID_SPANISH_NICARAGUA 0x4C0A
-#define TT_MS_LANGID_SPANISH_PUERTO_RICO 0x500A
-#define TT_MS_LANGID_SPANISH_UNITED_STATES 0x540A
-#define TT_MS_LANGID_FINNISH_FINLAND 0x040B
-#define TT_MS_LANGID_FRENCH_FRANCE 0x040C
-#define TT_MS_LANGID_FRENCH_BELGIUM 0x080C
-#define TT_MS_LANGID_FRENCH_CANADA 0x0C0C
-#define TT_MS_LANGID_FRENCH_SWITZERLAND 0x100C
-#define TT_MS_LANGID_FRENCH_LUXEMBOURG 0x140C
-#define TT_MS_LANGID_FRENCH_MONACO 0x180C
-#define TT_MS_LANGID_HEBREW_ISRAEL 0x040D
-#define TT_MS_LANGID_HUNGARIAN_HUNGARY 0x040E
-#define TT_MS_LANGID_ICELANDIC_ICELAND 0x040F
-#define TT_MS_LANGID_ITALIAN_ITALY 0x0410
-#define TT_MS_LANGID_ITALIAN_SWITZERLAND 0x0810
-#define TT_MS_LANGID_JAPANESE_JAPAN 0x0411
-#define TT_MS_LANGID_KOREAN_KOREA 0x0412
-#define TT_MS_LANGID_DUTCH_NETHERLANDS 0x0413
-#define TT_MS_LANGID_DUTCH_BELGIUM 0x0813
-#define TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL 0x0414
-#define TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK 0x0814
-#define TT_MS_LANGID_POLISH_POLAND 0x0415
-#define TT_MS_LANGID_PORTUGUESE_BRAZIL 0x0416
-#define TT_MS_LANGID_PORTUGUESE_PORTUGAL 0x0816
-#define TT_MS_LANGID_ROMANSH_SWITZERLAND 0x0417
-#define TT_MS_LANGID_ROMANIAN_ROMANIA 0x0418
-#define TT_MS_LANGID_RUSSIAN_RUSSIA 0x0419
-#define TT_MS_LANGID_CROATIAN_CROATIA 0x041A
-#define TT_MS_LANGID_SERBIAN_SERBIA_LATIN 0x081A
-#define TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC 0x0C1A
-#define TT_MS_LANGID_CROATIAN_BOSNIA_HERZEGOVINA 0x101A
-#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x141A
-#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_LATIN 0x181A
-#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC 0x1C1A
-#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZ_CYRILLIC 0x201A
-#define TT_MS_LANGID_SLOVAK_SLOVAKIA 0x041B
-#define TT_MS_LANGID_ALBANIAN_ALBANIA 0x041C
-#define TT_MS_LANGID_SWEDISH_SWEDEN 0x041D
-#define TT_MS_LANGID_SWEDISH_FINLAND 0x081D
-#define TT_MS_LANGID_THAI_THAILAND 0x041E
-#define TT_MS_LANGID_TURKISH_TURKEY 0x041F
-#define TT_MS_LANGID_URDU_PAKISTAN 0x0420
-#define TT_MS_LANGID_INDONESIAN_INDONESIA 0x0421
-#define TT_MS_LANGID_UKRAINIAN_UKRAINE 0x0422
-#define TT_MS_LANGID_BELARUSIAN_BELARUS 0x0423
-#define TT_MS_LANGID_SLOVENIAN_SLOVENIA 0x0424
-#define TT_MS_LANGID_ESTONIAN_ESTONIA 0x0425
-#define TT_MS_LANGID_LATVIAN_LATVIA 0x0426
-#define TT_MS_LANGID_LITHUANIAN_LITHUANIA 0x0427
-#define TT_MS_LANGID_TAJIK_TAJIKISTAN 0x0428
-#define TT_MS_LANGID_VIETNAMESE_VIET_NAM 0x042A
-#define TT_MS_LANGID_ARMENIAN_ARMENIA 0x042B
-#define TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN 0x042C
-#define TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC 0x082C
-#define TT_MS_LANGID_BASQUE_BASQUE 0x042D
-#define TT_MS_LANGID_UPPER_SORBIAN_GERMANY 0x042E
-#define TT_MS_LANGID_LOWER_SORBIAN_GERMANY 0x082E
-#define TT_MS_LANGID_MACEDONIAN_MACEDONIA 0x042F
-#define TT_MS_LANGID_SETSWANA_SOUTH_AFRICA 0x0432
-#define TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA 0x0434
-#define TT_MS_LANGID_ISIZULU_SOUTH_AFRICA 0x0435
-#define TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA 0x0436
-#define TT_MS_LANGID_GEORGIAN_GEORGIA 0x0437
-#define TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS 0x0438
-#define TT_MS_LANGID_HINDI_INDIA 0x0439
-#define TT_MS_LANGID_MALTESE_MALTA 0x043A
-#define TT_MS_LANGID_SAMI_NORTHERN_NORWAY 0x043B
-#define TT_MS_LANGID_SAMI_NORTHERN_SWEDEN 0x083B
-#define TT_MS_LANGID_SAMI_NORTHERN_FINLAND 0x0C3B
-#define TT_MS_LANGID_SAMI_LULE_NORWAY 0x103B
-#define TT_MS_LANGID_SAMI_LULE_SWEDEN 0x143B
-#define TT_MS_LANGID_SAMI_SOUTHERN_NORWAY 0x183B
-#define TT_MS_LANGID_SAMI_SOUTHERN_SWEDEN 0x1C3B
-#define TT_MS_LANGID_SAMI_SKOLT_FINLAND 0x203B
-#define TT_MS_LANGID_SAMI_INARI_FINLAND 0x243B
-#define TT_MS_LANGID_IRISH_IRELAND 0x083C
-#define TT_MS_LANGID_MALAY_MALAYSIA 0x043E
-#define TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM 0x083E
-#define TT_MS_LANGID_KAZAKH_KAZAKHSTAN 0x043F
-#define TT_MS_LANGID_KYRGYZ_KYRGYZSTAN /* Cyrillic*/ 0x0440
-#define TT_MS_LANGID_KISWAHILI_KENYA 0x0441
-#define TT_MS_LANGID_TURKMEN_TURKMENISTAN 0x0442
-#define TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN 0x0443
-#define TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC 0x0843
-#define TT_MS_LANGID_TATAR_RUSSIA 0x0444
-#define TT_MS_LANGID_BENGALI_INDIA 0x0445
-#define TT_MS_LANGID_BENGALI_BANGLADESH 0x0845
-#define TT_MS_LANGID_PUNJABI_INDIA 0x0446
-#define TT_MS_LANGID_GUJARATI_INDIA 0x0447
-#define TT_MS_LANGID_ODIA_INDIA 0x0448
-#define TT_MS_LANGID_TAMIL_INDIA 0x0449
-#define TT_MS_LANGID_TELUGU_INDIA 0x044A
-#define TT_MS_LANGID_KANNADA_INDIA 0x044B
-#define TT_MS_LANGID_MALAYALAM_INDIA 0x044C
-#define TT_MS_LANGID_ASSAMESE_INDIA 0x044D
-#define TT_MS_LANGID_MARATHI_INDIA 0x044E
-#define TT_MS_LANGID_SANSKRIT_INDIA 0x044F
-#define TT_MS_LANGID_MONGOLIAN_MONGOLIA /* Cyrillic */ 0x0450
-#define TT_MS_LANGID_MONGOLIAN_PRC 0x0850
-#define TT_MS_LANGID_TIBETAN_PRC 0x0451
-#define TT_MS_LANGID_WELSH_UNITED_KINGDOM 0x0452
-#define TT_MS_LANGID_KHMER_CAMBODIA 0x0453
-#define TT_MS_LANGID_LAO_LAOS 0x0454
-#define TT_MS_LANGID_GALICIAN_GALICIAN 0x0456
-#define TT_MS_LANGID_KONKANI_INDIA 0x0457
-#define TT_MS_LANGID_SYRIAC_SYRIA 0x045A
-#define TT_MS_LANGID_SINHALA_SRI_LANKA 0x045B
-#define TT_MS_LANGID_INUKTITUT_CANADA 0x045D
-#define TT_MS_LANGID_INUKTITUT_CANADA_LATIN 0x085D
-#define TT_MS_LANGID_AMHARIC_ETHIOPIA 0x045E
-#define TT_MS_LANGID_TAMAZIGHT_ALGERIA 0x085F
-#define TT_MS_LANGID_NEPALI_NEPAL 0x0461
-#define TT_MS_LANGID_FRISIAN_NETHERLANDS 0x0462
-#define TT_MS_LANGID_PASHTO_AFGHANISTAN 0x0463
-#define TT_MS_LANGID_FILIPINO_PHILIPPINES 0x0464
-#define TT_MS_LANGID_DHIVEHI_MALDIVES 0x0465
-#define TT_MS_LANGID_HAUSA_NIGERIA 0x0468
-#define TT_MS_LANGID_YORUBA_NIGERIA 0x046A
-#define TT_MS_LANGID_QUECHUA_BOLIVIA 0x046B
-#define TT_MS_LANGID_QUECHUA_ECUADOR 0x086B
-#define TT_MS_LANGID_QUECHUA_PERU 0x0C6B
-#define TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA 0x046C
-#define TT_MS_LANGID_BASHKIR_RUSSIA 0x046D
-#define TT_MS_LANGID_LUXEMBOURGISH_LUXEMBOURG 0x046E
-#define TT_MS_LANGID_GREENLANDIC_GREENLAND 0x046F
-#define TT_MS_LANGID_IGBO_NIGERIA 0x0470
-#define TT_MS_LANGID_YI_PRC 0x0478
-#define TT_MS_LANGID_MAPUDUNGUN_CHILE 0x047A
-#define TT_MS_LANGID_MOHAWK_MOHAWK 0x047C
-#define TT_MS_LANGID_BRETON_FRANCE 0x047E
-#define TT_MS_LANGID_UIGHUR_PRC 0x0480
-#define TT_MS_LANGID_MAORI_NEW_ZEALAND 0x0481
-#define TT_MS_LANGID_OCCITAN_FRANCE 0x0482
-#define TT_MS_LANGID_CORSICAN_FRANCE 0x0483
-#define TT_MS_LANGID_ALSATIAN_FRANCE 0x0484
-#define TT_MS_LANGID_YAKUT_RUSSIA 0x0485
-#define TT_MS_LANGID_KICHE_GUATEMALA 0x0486
-#define TT_MS_LANGID_KINYARWANDA_RWANDA 0x0487
-#define TT_MS_LANGID_WOLOF_SENEGAL 0x0488
-#define TT_MS_LANGID_DARI_AFGHANISTAN 0x048C
-
- /* */
-
-
- /* legacy macro definitions not present in OpenType 1.8.1 */
-#define TT_MS_LANGID_ARABIC_GENERAL 0x0001
-#define TT_MS_LANGID_CATALAN_SPAIN \
- TT_MS_LANGID_CATALAN_CATALAN
-#define TT_MS_LANGID_CHINESE_GENERAL 0x0004
-#define TT_MS_LANGID_CHINESE_MACAU \
- TT_MS_LANGID_CHINESE_MACAO
-#define TT_MS_LANGID_GERMAN_LIECHTENSTEI \
- TT_MS_LANGID_GERMAN_LIECHTENSTEIN
-#define TT_MS_LANGID_ENGLISH_GENERAL 0x0009
-#define TT_MS_LANGID_ENGLISH_INDONESIA 0x3809
-#define TT_MS_LANGID_ENGLISH_HONG_KONG 0x3C09
-#define TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT \
- TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT
-#define TT_MS_LANGID_SPANISH_LATIN_AMERICA 0xE40AU
-#define TT_MS_LANGID_FRENCH_WEST_INDIES 0x1C0C
-#define TT_MS_LANGID_FRENCH_REUNION 0x200C
-#define TT_MS_LANGID_FRENCH_CONGO 0x240C
- /* which was formerly: */
-#define TT_MS_LANGID_FRENCH_ZAIRE \
- TT_MS_LANGID_FRENCH_CONGO
-#define TT_MS_LANGID_FRENCH_SENEGAL 0x280C
-#define TT_MS_LANGID_FRENCH_CAMEROON 0x2C0C
-#define TT_MS_LANGID_FRENCH_COTE_D_IVOIRE 0x300C
-#define TT_MS_LANGID_FRENCH_MALI 0x340C
-#define TT_MS_LANGID_FRENCH_MOROCCO 0x380C
-#define TT_MS_LANGID_FRENCH_HAITI 0x3C0C
-#define TT_MS_LANGID_FRENCH_NORTH_AFRICA 0xE40CU
-#define TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA \
- TT_MS_LANGID_KOREAN_KOREA
-#define TT_MS_LANGID_KOREAN_JOHAB_KOREA 0x0812
-#define TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND \
- TT_MS_LANGID_ROMANSH_SWITZERLAND
-#define TT_MS_LANGID_MOLDAVIAN_MOLDAVIA 0x0818
-#define TT_MS_LANGID_RUSSIAN_MOLDAVIA 0x0819
-#define TT_MS_LANGID_URDU_INDIA 0x0820
-#define TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA 0x0827
-#define TT_MS_LANGID_SLOVENE_SLOVENIA \
- TT_MS_LANGID_SLOVENIAN_SLOVENIA
-#define TT_MS_LANGID_FARSI_IRAN 0x0429
-#define TT_MS_LANGID_BASQUE_SPAIN \
- TT_MS_LANGID_BASQUE_BASQUE
-#define TT_MS_LANGID_SORBIAN_GERMANY \
- TT_MS_LANGID_UPPER_SORBIAN_GERMANY
-#define TT_MS_LANGID_SUTU_SOUTH_AFRICA 0x0430
-#define TT_MS_LANGID_TSONGA_SOUTH_AFRICA 0x0431
-#define TT_MS_LANGID_TSWANA_SOUTH_AFRICA \
- TT_MS_LANGID_SETSWANA_SOUTH_AFRICA
-#define TT_MS_LANGID_VENDA_SOUTH_AFRICA 0x0433
-#define TT_MS_LANGID_XHOSA_SOUTH_AFRICA \
- TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA
-#define TT_MS_LANGID_ZULU_SOUTH_AFRICA \
- TT_MS_LANGID_ISIZULU_SOUTH_AFRICA
-#define TT_MS_LANGID_SAAMI_LAPONIA 0x043B
- /* the next two values are incorrectly inverted */
-#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043C
-#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083C
-#define TT_MS_LANGID_YIDDISH_GERMANY 0x043D
-#define TT_MS_LANGID_KAZAK_KAZAKSTAN \
- TT_MS_LANGID_KAZAKH_KAZAKHSTAN
-#define TT_MS_LANGID_KIRGHIZ_KIRGHIZ_REPUBLIC \
- TT_MS_LANGID_KYRGYZ_KYRGYZSTAN
-#define TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN \
- TT_MS_LANGID_KYRGYZ_KYRGYZSTAN
-#define TT_MS_LANGID_SWAHILI_KENYA \
- TT_MS_LANGID_KISWAHILI_KENYA
-#define TT_MS_LANGID_TATAR_TATARSTAN \
- TT_MS_LANGID_TATAR_RUSSIA
-#define TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN 0x0846
-#define TT_MS_LANGID_ORIYA_INDIA \
- TT_MS_LANGID_ODIA_INDIA
-#define TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN \
- TT_MS_LANGID_MONGOLIAN_PRC
-#define TT_MS_LANGID_TIBETAN_CHINA \
- TT_MS_LANGID_TIBETAN_PRC
-#define TT_MS_LANGID_DZONGHKA_BHUTAN 0x0851
-#define TT_MS_LANGID_TIBETAN_BHUTAN \
- TT_MS_LANGID_DZONGHKA_BHUTAN
-#define TT_MS_LANGID_WELSH_WALES \
- TT_MS_LANGID_WELSH_UNITED_KINGDOM
-#define TT_MS_LANGID_BURMESE_MYANMAR 0x0455
-#define TT_MS_LANGID_GALICIAN_SPAIN \
- TT_MS_LANGID_GALICIAN_GALICIAN
-#define TT_MS_LANGID_MANIPURI_INDIA /* Bengali */ 0x0458
-#define TT_MS_LANGID_SINDHI_INDIA /* Arabic */ 0x0459
-#define TT_MS_LANGID_SINDHI_PAKISTAN 0x0859
-#define TT_MS_LANGID_SINHALESE_SRI_LANKA \
- TT_MS_LANGID_SINHALA_SRI_LANKA
-#define TT_MS_LANGID_CHEROKEE_UNITED_STATES 0x045C
-#define TT_MS_LANGID_TAMAZIGHT_MOROCCO /* Arabic */ 0x045F
-#define TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN \
- TT_MS_LANGID_TAMAZIGHT_ALGERIA
-#define TT_MS_LANGID_KASHMIRI_PAKISTAN /* Arabic */ 0x0460
-#define TT_MS_LANGID_KASHMIRI_SASIA 0x0860
-#define TT_MS_LANGID_KASHMIRI_INDIA \
- TT_MS_LANGID_KASHMIRI_SASIA
-#define TT_MS_LANGID_NEPALI_INDIA 0x0861
-#define TT_MS_LANGID_DIVEHI_MALDIVES \
- TT_MS_LANGID_DHIVEHI_MALDIVES
-#define TT_MS_LANGID_EDO_NIGERIA 0x0466
-#define TT_MS_LANGID_FULFULDE_NIGERIA 0x0467
-#define TT_MS_LANGID_IBIBIO_NIGERIA 0x0469
-#define TT_MS_LANGID_SEPEDI_SOUTH_AFRICA \
- TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA
-#define TT_MS_LANGID_SOTHO_SOUTHERN_SOUTH_AFRICA \
- TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA
-#define TT_MS_LANGID_KANURI_NIGERIA 0x0471
-#define TT_MS_LANGID_OROMO_ETHIOPIA 0x0472
-#define TT_MS_LANGID_TIGRIGNA_ETHIOPIA 0x0473
-#define TT_MS_LANGID_TIGRIGNA_ERYTHREA 0x0873
-#define TT_MS_LANGID_TIGRIGNA_ERYTREA \
- TT_MS_LANGID_TIGRIGNA_ERYTHREA
-#define TT_MS_LANGID_GUARANI_PARAGUAY 0x0474
-#define TT_MS_LANGID_HAWAIIAN_UNITED_STATES 0x0475
-#define TT_MS_LANGID_LATIN 0x0476
-#define TT_MS_LANGID_SOMALI_SOMALIA 0x0477
-#define TT_MS_LANGID_YI_CHINA \
- TT_MS_LANGID_YI_PRC
-#define TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES 0x0479
-#define TT_MS_LANGID_UIGHUR_CHINA \
- TT_MS_LANGID_UIGHUR_PRC
-
-
- /***********************************************************************
- *
- * @enum:
- * TT_NAME_ID_XXX
- *
- * @description:
- * Possible values of the `name' identifier field in the name records of
- * an SFNT `name' table. These values are platform independent.
- */
-
-#define TT_NAME_ID_COPYRIGHT 0
-#define TT_NAME_ID_FONT_FAMILY 1
-#define TT_NAME_ID_FONT_SUBFAMILY 2
-#define TT_NAME_ID_UNIQUE_ID 3
-#define TT_NAME_ID_FULL_NAME 4
-#define TT_NAME_ID_VERSION_STRING 5
-#define TT_NAME_ID_PS_NAME 6
-#define TT_NAME_ID_TRADEMARK 7
-
- /* the following values are from the OpenType spec */
-#define TT_NAME_ID_MANUFACTURER 8
-#define TT_NAME_ID_DESIGNER 9
-#define TT_NAME_ID_DESCRIPTION 10
-#define TT_NAME_ID_VENDOR_URL 11
-#define TT_NAME_ID_DESIGNER_URL 12
-#define TT_NAME_ID_LICENSE 13
-#define TT_NAME_ID_LICENSE_URL 14
- /* number 15 is reserved */
-#define TT_NAME_ID_TYPOGRAPHIC_FAMILY 16
-#define TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY 17
-#define TT_NAME_ID_MAC_FULL_NAME 18
-
- /* The following code is new as of 2000-01-21 */
-#define TT_NAME_ID_SAMPLE_TEXT 19
-
- /* This is new in OpenType 1.3 */
-#define TT_NAME_ID_CID_FINDFONT_NAME 20
-
- /* This is new in OpenType 1.5 */
-#define TT_NAME_ID_WWS_FAMILY 21
-#define TT_NAME_ID_WWS_SUBFAMILY 22
-
- /* This is new in OpenType 1.7 */
-#define TT_NAME_ID_LIGHT_BACKGROUND 23
-#define TT_NAME_ID_DARK_BACKGROUND 24
-
- /* This is new in OpenType 1.8 */
-#define TT_NAME_ID_VARIATIONS_PREFIX 25
-
- /* these two values are deprecated */
-#define TT_NAME_ID_PREFERRED_FAMILY TT_NAME_ID_TYPOGRAPHIC_FAMILY
-#define TT_NAME_ID_PREFERRED_SUBFAMILY TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
-
-
- /***********************************************************************
- *
- * @enum:
- * TT_UCR_XXX
- *
- * @description:
- * Possible bit mask values for the `ulUnicodeRangeX' fields in an SFNT
- * `OS/2' table.
- */
-
- /* ulUnicodeRange1 */
- /* --------------- */
-
- /* Bit 0 Basic Latin */
-#define TT_UCR_BASIC_LATIN (1L << 0) /* U+0020-U+007E */
- /* Bit 1 C1 Controls and Latin-1 Supplement */
-#define TT_UCR_LATIN1_SUPPLEMENT (1L << 1) /* U+0080-U+00FF */
- /* Bit 2 Latin Extended-A */
-#define TT_UCR_LATIN_EXTENDED_A (1L << 2) /* U+0100-U+017F */
- /* Bit 3 Latin Extended-B */
-#define TT_UCR_LATIN_EXTENDED_B (1L << 3) /* U+0180-U+024F */
- /* Bit 4 IPA Extensions */
- /* Phonetic Extensions */
- /* Phonetic Extensions Supplement */
-#define TT_UCR_IPA_EXTENSIONS (1L << 4) /* U+0250-U+02AF */
- /* U+1D00-U+1D7F */
- /* U+1D80-U+1DBF */
- /* Bit 5 Spacing Modifier Letters */
- /* Modifier Tone Letters */
-#define TT_UCR_SPACING_MODIFIER (1L << 5) /* U+02B0-U+02FF */
- /* U+A700-U+A71F */
- /* Bit 6 Combining Diacritical Marks */
- /* Combining Diacritical Marks Supplement */
-#define TT_UCR_COMBINING_DIACRITICAL_MARKS (1L << 6) /* U+0300-U+036F */
- /* U+1DC0-U+1DFF */
- /* Bit 7 Greek and Coptic */
-#define TT_UCR_GREEK (1L << 7) /* U+0370-U+03FF */
- /* Bit 8 Coptic */
-#define TT_UCR_COPTIC (1L << 8) /* U+2C80-U+2CFF */
- /* Bit 9 Cyrillic */
- /* Cyrillic Supplement */
- /* Cyrillic Extended-A */
- /* Cyrillic Extended-B */
-#define TT_UCR_CYRILLIC (1L << 9) /* U+0400-U+04FF */
- /* U+0500-U+052F */
- /* U+2DE0-U+2DFF */
- /* U+A640-U+A69F */
- /* Bit 10 Armenian */
-#define TT_UCR_ARMENIAN (1L << 10) /* U+0530-U+058F */
- /* Bit 11 Hebrew */
-#define TT_UCR_HEBREW (1L << 11) /* U+0590-U+05FF */
- /* Bit 12 Vai */
-#define TT_UCR_VAI (1L << 12) /* U+A500-U+A63F */
- /* Bit 13 Arabic */
- /* Arabic Supplement */
-#define TT_UCR_ARABIC (1L << 13) /* U+0600-U+06FF */
- /* U+0750-U+077F */
- /* Bit 14 NKo */
-#define TT_UCR_NKO (1L << 14) /* U+07C0-U+07FF */
- /* Bit 15 Devanagari */
-#define TT_UCR_DEVANAGARI (1L << 15) /* U+0900-U+097F */
- /* Bit 16 Bengali */
-#define TT_UCR_BENGALI (1L << 16) /* U+0980-U+09FF */
- /* Bit 17 Gurmukhi */
-#define TT_UCR_GURMUKHI (1L << 17) /* U+0A00-U+0A7F */
- /* Bit 18 Gujarati */
-#define TT_UCR_GUJARATI (1L << 18) /* U+0A80-U+0AFF */
- /* Bit 19 Oriya */
-#define TT_UCR_ORIYA (1L << 19) /* U+0B00-U+0B7F */
- /* Bit 20 Tamil */
-#define TT_UCR_TAMIL (1L << 20) /* U+0B80-U+0BFF */
- /* Bit 21 Telugu */
-#define TT_UCR_TELUGU (1L << 21) /* U+0C00-U+0C7F */
- /* Bit 22 Kannada */
-#define TT_UCR_KANNADA (1L << 22) /* U+0C80-U+0CFF */
- /* Bit 23 Malayalam */
-#define TT_UCR_MALAYALAM (1L << 23) /* U+0D00-U+0D7F */
- /* Bit 24 Thai */
-#define TT_UCR_THAI (1L << 24) /* U+0E00-U+0E7F */
- /* Bit 25 Lao */
-#define TT_UCR_LAO (1L << 25) /* U+0E80-U+0EFF */
- /* Bit 26 Georgian */
- /* Georgian Supplement */
-#define TT_UCR_GEORGIAN (1L << 26) /* U+10A0-U+10FF */
- /* U+2D00-U+2D2F */
- /* Bit 27 Balinese */
-#define TT_UCR_BALINESE (1L << 27) /* U+1B00-U+1B7F */
- /* Bit 28 Hangul Jamo */
-#define TT_UCR_HANGUL_JAMO (1L << 28) /* U+1100-U+11FF */
- /* Bit 29 Latin Extended Additional */
- /* Latin Extended-C */
- /* Latin Extended-D */
-#define TT_UCR_LATIN_EXTENDED_ADDITIONAL (1L << 29) /* U+1E00-U+1EFF */
- /* U+2C60-U+2C7F */
- /* U+A720-U+A7FF */
- /* Bit 30 Greek Extended */
-#define TT_UCR_GREEK_EXTENDED (1L << 30) /* U+1F00-U+1FFF */
- /* Bit 31 General Punctuation */
- /* Supplemental Punctuation */
-#define TT_UCR_GENERAL_PUNCTUATION (1L << 31) /* U+2000-U+206F */
- /* U+2E00-U+2E7F */
-
- /* ulUnicodeRange2 */
- /* --------------- */
-
- /* Bit 32 Superscripts And Subscripts */
-#define TT_UCR_SUPERSCRIPTS_SUBSCRIPTS (1L << 0) /* U+2070-U+209F */
- /* Bit 33 Currency Symbols */
-#define TT_UCR_CURRENCY_SYMBOLS (1L << 1) /* U+20A0-U+20CF */
- /* Bit 34 Combining Diacritical Marks For Symbols */
-#define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \
- (1L << 2) /* U+20D0-U+20FF */
- /* Bit 35 Letterlike Symbols */
-#define TT_UCR_LETTERLIKE_SYMBOLS (1L << 3) /* U+2100-U+214F */
- /* Bit 36 Number Forms */
-#define TT_UCR_NUMBER_FORMS (1L << 4) /* U+2150-U+218F */
- /* Bit 37 Arrows */
- /* Supplemental Arrows-A */
- /* Supplemental Arrows-B */
- /* Miscellaneous Symbols and Arrows */
-#define TT_UCR_ARROWS (1L << 5) /* U+2190-U+21FF */
- /* U+27F0-U+27FF */
- /* U+2900-U+297F */
- /* U+2B00-U+2BFF */
- /* Bit 38 Mathematical Operators */
- /* Supplemental Mathematical Operators */
- /* Miscellaneous Mathematical Symbols-A */
- /* Miscellaneous Mathematical Symbols-B */
-#define TT_UCR_MATHEMATICAL_OPERATORS (1L << 6) /* U+2200-U+22FF */
- /* U+2A00-U+2AFF */
- /* U+27C0-U+27EF */
- /* U+2980-U+29FF */
- /* Bit 39 Miscellaneous Technical */
-#define TT_UCR_MISCELLANEOUS_TECHNICAL (1L << 7) /* U+2300-U+23FF */
- /* Bit 40 Control Pictures */
-#define TT_UCR_CONTROL_PICTURES (1L << 8) /* U+2400-U+243F */
- /* Bit 41 Optical Character Recognition */
-#define TT_UCR_OCR (1L << 9) /* U+2440-U+245F */
- /* Bit 42 Enclosed Alphanumerics */
-#define TT_UCR_ENCLOSED_ALPHANUMERICS (1L << 10) /* U+2460-U+24FF */
- /* Bit 43 Box Drawing */
-#define TT_UCR_BOX_DRAWING (1L << 11) /* U+2500-U+257F */
- /* Bit 44 Block Elements */
-#define TT_UCR_BLOCK_ELEMENTS (1L << 12) /* U+2580-U+259F */
- /* Bit 45 Geometric Shapes */
-#define TT_UCR_GEOMETRIC_SHAPES (1L << 13) /* U+25A0-U+25FF */
- /* Bit 46 Miscellaneous Symbols */
-#define TT_UCR_MISCELLANEOUS_SYMBOLS (1L << 14) /* U+2600-U+26FF */
- /* Bit 47 Dingbats */
-#define TT_UCR_DINGBATS (1L << 15) /* U+2700-U+27BF */
- /* Bit 48 CJK Symbols and Punctuation */
-#define TT_UCR_CJK_SYMBOLS (1L << 16) /* U+3000-U+303F */
- /* Bit 49 Hiragana */
-#define TT_UCR_HIRAGANA (1L << 17) /* U+3040-U+309F */
- /* Bit 50 Katakana */
- /* Katakana Phonetic Extensions */
-#define TT_UCR_KATAKANA (1L << 18) /* U+30A0-U+30FF */
- /* U+31F0-U+31FF */
- /* Bit 51 Bopomofo */
- /* Bopomofo Extended */
-#define TT_UCR_BOPOMOFO (1L << 19) /* U+3100-U+312F */
- /* U+31A0-U+31BF */
- /* Bit 52 Hangul Compatibility Jamo */
-#define TT_UCR_HANGUL_COMPATIBILITY_JAMO (1L << 20) /* U+3130-U+318F */
- /* Bit 53 Phags-Pa */
-#define TT_UCR_CJK_MISC (1L << 21) /* U+A840-U+A87F */
-#define TT_UCR_KANBUN TT_UCR_CJK_MISC /* deprecated */
-#define TT_UCR_PHAGSPA
- /* Bit 54 Enclosed CJK Letters and Months */
-#define TT_UCR_ENCLOSED_CJK_LETTERS_MONTHS (1L << 22) /* U+3200-U+32FF */
- /* Bit 55 CJK Compatibility */
-#define TT_UCR_CJK_COMPATIBILITY (1L << 23) /* U+3300-U+33FF */
- /* Bit 56 Hangul Syllables */
-#define TT_UCR_HANGUL (1L << 24) /* U+AC00-U+D7A3 */
- /* Bit 57 High Surrogates */
- /* High Private Use Surrogates */
- /* Low Surrogates */
-
- /* According to OpenType specs v.1.3+, */
- /* setting bit 57 implies that there is */
- /* at least one codepoint beyond the */
- /* Basic Multilingual Plane that is */
- /* supported by this font. So it really */
- /* means >= U+10000. */
-#define TT_UCR_SURROGATES (1L << 25) /* U+D800-U+DB7F */
- /* U+DB80-U+DBFF */
- /* U+DC00-U+DFFF */
-#define TT_UCR_NON_PLANE_0 TT_UCR_SURROGATES
- /* Bit 58 Phoenician */
-#define TT_UCR_PHOENICIAN (1L << 26) /*U+10900-U+1091F*/
- /* Bit 59 CJK Unified Ideographs */
- /* CJK Radicals Supplement */
- /* Kangxi Radicals */
- /* Ideographic Description Characters */
- /* CJK Unified Ideographs Extension A */
- /* CJK Unified Ideographs Extension B */
- /* Kanbun */
-#define TT_UCR_CJK_UNIFIED_IDEOGRAPHS (1L << 27) /* U+4E00-U+9FFF */
- /* U+2E80-U+2EFF */
- /* U+2F00-U+2FDF */
- /* U+2FF0-U+2FFF */
- /* U+3400-U+4DB5 */
- /*U+20000-U+2A6DF*/
- /* U+3190-U+319F */
- /* Bit 60 Private Use */
-#define TT_UCR_PRIVATE_USE (1L << 28) /* U+E000-U+F8FF */
- /* Bit 61 CJK Strokes */
- /* CJK Compatibility Ideographs */
- /* CJK Compatibility Ideographs Supplement */
-#define TT_UCR_CJK_COMPATIBILITY_IDEOGRAPHS (1L << 29) /* U+31C0-U+31EF */
- /* U+F900-U+FAFF */
- /*U+2F800-U+2FA1F*/
- /* Bit 62 Alphabetic Presentation Forms */
-#define TT_UCR_ALPHABETIC_PRESENTATION_FORMS (1L << 30) /* U+FB00-U+FB4F */
- /* Bit 63 Arabic Presentation Forms-A */
-#define TT_UCR_ARABIC_PRESENTATION_FORMS_A (1L << 31) /* U+FB50-U+FDFF */
-
- /* ulUnicodeRange3 */
- /* --------------- */
-
- /* Bit 64 Combining Half Marks */
-#define TT_UCR_COMBINING_HALF_MARKS (1L << 0) /* U+FE20-U+FE2F */
- /* Bit 65 Vertical forms */
- /* CJK Compatibility Forms */
-#define TT_UCR_CJK_COMPATIBILITY_FORMS (1L << 1) /* U+FE10-U+FE1F */
- /* U+FE30-U+FE4F */
- /* Bit 66 Small Form Variants */
-#define TT_UCR_SMALL_FORM_VARIANTS (1L << 2) /* U+FE50-U+FE6F */
- /* Bit 67 Arabic Presentation Forms-B */
-#define TT_UCR_ARABIC_PRESENTATION_FORMS_B (1L << 3) /* U+FE70-U+FEFE */
- /* Bit 68 Halfwidth and Fullwidth Forms */
-#define TT_UCR_HALFWIDTH_FULLWIDTH_FORMS (1L << 4) /* U+FF00-U+FFEF */
- /* Bit 69 Specials */
-#define TT_UCR_SPECIALS (1L << 5) /* U+FFF0-U+FFFD */
- /* Bit 70 Tibetan */
-#define TT_UCR_TIBETAN (1L << 6) /* U+0F00-U+0FFF */
- /* Bit 71 Syriac */
-#define TT_UCR_SYRIAC (1L << 7) /* U+0700-U+074F */
- /* Bit 72 Thaana */
-#define TT_UCR_THAANA (1L << 8) /* U+0780-U+07BF */
- /* Bit 73 Sinhala */
-#define TT_UCR_SINHALA (1L << 9) /* U+0D80-U+0DFF */
- /* Bit 74 Myanmar */
-#define TT_UCR_MYANMAR (1L << 10) /* U+1000-U+109F */
- /* Bit 75 Ethiopic */
- /* Ethiopic Supplement */
- /* Ethiopic Extended */
-#define TT_UCR_ETHIOPIC (1L << 11) /* U+1200-U+137F */
- /* U+1380-U+139F */
- /* U+2D80-U+2DDF */
- /* Bit 76 Cherokee */
-#define TT_UCR_CHEROKEE (1L << 12) /* U+13A0-U+13FF */
- /* Bit 77 Unified Canadian Aboriginal Syllabics */
-#define TT_UCR_CANADIAN_ABORIGINAL_SYLLABICS (1L << 13) /* U+1400-U+167F */
- /* Bit 78 Ogham */
-#define TT_UCR_OGHAM (1L << 14) /* U+1680-U+169F */
- /* Bit 79 Runic */
-#define TT_UCR_RUNIC (1L << 15) /* U+16A0-U+16FF */
- /* Bit 80 Khmer */
- /* Khmer Symbols */
-#define TT_UCR_KHMER (1L << 16) /* U+1780-U+17FF */
- /* U+19E0-U+19FF */
- /* Bit 81 Mongolian */
-#define TT_UCR_MONGOLIAN (1L << 17) /* U+1800-U+18AF */
- /* Bit 82 Braille Patterns */
-#define TT_UCR_BRAILLE (1L << 18) /* U+2800-U+28FF */
- /* Bit 83 Yi Syllables */
- /* Yi Radicals */
-#define TT_UCR_YI (1L << 19) /* U+A000-U+A48F */
- /* U+A490-U+A4CF */
- /* Bit 84 Tagalog */
- /* Hanunoo */
- /* Buhid */
- /* Tagbanwa */
-#define TT_UCR_PHILIPPINE (1L << 20) /* U+1700-U+171F */
- /* U+1720-U+173F */
- /* U+1740-U+175F */
- /* U+1760-U+177F */
- /* Bit 85 Old Italic */
-#define TT_UCR_OLD_ITALIC (1L << 21) /*U+10300-U+1032F*/
- /* Bit 86 Gothic */
-#define TT_UCR_GOTHIC (1L << 22) /*U+10330-U+1034F*/
- /* Bit 87 Deseret */
-#define TT_UCR_DESERET (1L << 23) /*U+10400-U+1044F*/
- /* Bit 88 Byzantine Musical Symbols */
- /* Musical Symbols */
- /* Ancient Greek Musical Notation */
-#define TT_UCR_MUSICAL_SYMBOLS (1L << 24) /*U+1D000-U+1D0FF*/
- /*U+1D100-U+1D1FF*/
- /*U+1D200-U+1D24F*/
- /* Bit 89 Mathematical Alphanumeric Symbols */
-#define TT_UCR_MATH_ALPHANUMERIC_SYMBOLS (1L << 25) /*U+1D400-U+1D7FF*/
- /* Bit 90 Private Use (plane 15) */
- /* Private Use (plane 16) */
-#define TT_UCR_PRIVATE_USE_SUPPLEMENTARY (1L << 26) /*U+F0000-U+FFFFD*/
- /*U+100000-U+10FFFD*/
- /* Bit 91 Variation Selectors */
- /* Variation Selectors Supplement */
-#define TT_UCR_VARIATION_SELECTORS (1L << 27) /* U+FE00-U+FE0F */
- /*U+E0100-U+E01EF*/
- /* Bit 92 Tags */
-#define TT_UCR_TAGS (1L << 28) /*U+E0000-U+E007F*/
- /* Bit 93 Limbu */
-#define TT_UCR_LIMBU (1L << 29) /* U+1900-U+194F */
- /* Bit 94 Tai Le */
-#define TT_UCR_TAI_LE (1L << 30) /* U+1950-U+197F */
- /* Bit 95 New Tai Lue */
-#define TT_UCR_NEW_TAI_LUE (1L << 31) /* U+1980-U+19DF */
-
- /* ulUnicodeRange4 */
- /* --------------- */
-
- /* Bit 96 Buginese */
-#define TT_UCR_BUGINESE (1L << 0) /* U+1A00-U+1A1F */
- /* Bit 97 Glagolitic */
-#define TT_UCR_GLAGOLITIC (1L << 1) /* U+2C00-U+2C5F */
- /* Bit 98 Tifinagh */
-#define TT_UCR_TIFINAGH (1L << 2) /* U+2D30-U+2D7F */
- /* Bit 99 Yijing Hexagram Symbols */
-#define TT_UCR_YIJING (1L << 3) /* U+4DC0-U+4DFF */
- /* Bit 100 Syloti Nagri */
-#define TT_UCR_SYLOTI_NAGRI (1L << 4) /* U+A800-U+A82F */
- /* Bit 101 Linear B Syllabary */
- /* Linear B Ideograms */
- /* Aegean Numbers */
-#define TT_UCR_LINEAR_B (1L << 5) /*U+10000-U+1007F*/
- /*U+10080-U+100FF*/
- /*U+10100-U+1013F*/
- /* Bit 102 Ancient Greek Numbers */
-#define TT_UCR_ANCIENT_GREEK_NUMBERS (1L << 6) /*U+10140-U+1018F*/
- /* Bit 103 Ugaritic */
-#define TT_UCR_UGARITIC (1L << 7) /*U+10380-U+1039F*/
- /* Bit 104 Old Persian */
-#define TT_UCR_OLD_PERSIAN (1L << 8) /*U+103A0-U+103DF*/
- /* Bit 105 Shavian */
-#define TT_UCR_SHAVIAN (1L << 9) /*U+10450-U+1047F*/
- /* Bit 106 Osmanya */
-#define TT_UCR_OSMANYA (1L << 10) /*U+10480-U+104AF*/
- /* Bit 107 Cypriot Syllabary */
-#define TT_UCR_CYPRIOT_SYLLABARY (1L << 11) /*U+10800-U+1083F*/
- /* Bit 108 Kharoshthi */
-#define TT_UCR_KHAROSHTHI (1L << 12) /*U+10A00-U+10A5F*/
- /* Bit 109 Tai Xuan Jing Symbols */
-#define TT_UCR_TAI_XUAN_JING (1L << 13) /*U+1D300-U+1D35F*/
- /* Bit 110 Cuneiform */
- /* Cuneiform Numbers and Punctuation */
-#define TT_UCR_CUNEIFORM (1L << 14) /*U+12000-U+123FF*/
- /*U+12400-U+1247F*/
- /* Bit 111 Counting Rod Numerals */
-#define TT_UCR_COUNTING_ROD_NUMERALS (1L << 15) /*U+1D360-U+1D37F*/
- /* Bit 112 Sundanese */
-#define TT_UCR_SUNDANESE (1L << 16) /* U+1B80-U+1BBF */
- /* Bit 113 Lepcha */
-#define TT_UCR_LEPCHA (1L << 17) /* U+1C00-U+1C4F */
- /* Bit 114 Ol Chiki */
-#define TT_UCR_OL_CHIKI (1L << 18) /* U+1C50-U+1C7F */
- /* Bit 115 Saurashtra */
-#define TT_UCR_SAURASHTRA (1L << 19) /* U+A880-U+A8DF */
- /* Bit 116 Kayah Li */
-#define TT_UCR_KAYAH_LI (1L << 20) /* U+A900-U+A92F */
- /* Bit 117 Rejang */
-#define TT_UCR_REJANG (1L << 21) /* U+A930-U+A95F */
- /* Bit 118 Cham */
-#define TT_UCR_CHAM (1L << 22) /* U+AA00-U+AA5F */
- /* Bit 119 Ancient Symbols */
-#define TT_UCR_ANCIENT_SYMBOLS (1L << 23) /*U+10190-U+101CF*/
- /* Bit 120 Phaistos Disc */
-#define TT_UCR_PHAISTOS_DISC (1L << 24) /*U+101D0-U+101FF*/
- /* Bit 121 Carian */
- /* Lycian */
- /* Lydian */
-#define TT_UCR_OLD_ANATOLIAN (1L << 25) /*U+102A0-U+102DF*/
- /*U+10280-U+1029F*/
- /*U+10920-U+1093F*/
- /* Bit 122 Domino Tiles */
- /* Mahjong Tiles */
-#define TT_UCR_GAME_TILES (1L << 26) /*U+1F030-U+1F09F*/
- /*U+1F000-U+1F02F*/
- /* Bit 123-127 Reserved for process-internal usage */
-
- /* */
-
- /* for backward compatibility with older FreeType versions */
-#define TT_UCR_ARABIC_PRESENTATION_A \
- TT_UCR_ARABIC_PRESENTATION_FORMS_A
-#define TT_UCR_ARABIC_PRESENTATION_B \
- TT_UCR_ARABIC_PRESENTATION_FORMS_B
-
-#define TT_UCR_COMBINING_DIACRITICS \
- TT_UCR_COMBINING_DIACRITICAL_MARKS
-#define TT_UCR_COMBINING_DIACRITICS_SYMB \
- TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB
-
-
-FT_END_HEADER
-
-#endif /* TTNAMEID_H_ */
-
-
-/* END */
diff --git a/include/freetype/tttables.h b/include/freetype/tttables.h
deleted file mode 100644
index 58312044c..000000000
--- a/include/freetype/tttables.h
+++ /dev/null
@@ -1,846 +0,0 @@
-/***************************************************************************/
-/* */
-/* tttables.h */
-/* */
-/* Basic SFNT/TrueType tables definitions and interface */
-/* (specification only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTTABLES_H_
-#define TTTABLES_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* truetype_tables */
- /* */
- /* <Title> */
- /* TrueType Tables */
- /* */
- /* <Abstract> */
- /* TrueType specific table types and functions. */
- /* */
- /* <Description> */
- /* This section contains definitions of some basic tables specific to */
- /* TrueType and OpenType as well as some routines used to access and */
- /* process them. */
- /* */
- /* <Order> */
- /* TT_Header */
- /* TT_HoriHeader */
- /* TT_VertHeader */
- /* TT_OS2 */
- /* TT_Postscript */
- /* TT_PCLT */
- /* TT_MaxProfile */
- /* */
- /* FT_Sfnt_Tag */
- /* FT_Get_Sfnt_Table */
- /* FT_Load_Sfnt_Table */
- /* FT_Sfnt_Table_Info */
- /* */
- /* FT_Get_CMap_Language_ID */
- /* FT_Get_CMap_Format */
- /* */
- /* FT_PARAM_TAG_UNPATENTED_HINTING */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_Header */
- /* */
- /* <Description> */
- /* A structure to model a TrueType font header table. All fields */
- /* follow the OpenType specification. */
- /* */
- typedef struct TT_Header_
- {
- FT_Fixed Table_Version;
- FT_Fixed Font_Revision;
-
- FT_Long CheckSum_Adjust;
- FT_Long Magic_Number;
-
- FT_UShort Flags;
- FT_UShort Units_Per_EM;
-
- FT_Long Created [2];
- FT_Long Modified[2];
-
- FT_Short xMin;
- FT_Short yMin;
- FT_Short xMax;
- FT_Short yMax;
-
- FT_UShort Mac_Style;
- FT_UShort Lowest_Rec_PPEM;
-
- FT_Short Font_Direction;
- FT_Short Index_To_Loc_Format;
- FT_Short Glyph_Data_Format;
-
- } TT_Header;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_HoriHeader */
- /* */
- /* <Description> */
- /* A structure to model a TrueType horizontal header, the `hhea' */
- /* table, as well as the corresponding horizontal metrics table, */
- /* `hmtx'. */
- /* */
- /* <Fields> */
- /* Version :: The table version. */
- /* */
- /* Ascender :: The font's ascender, i.e., the distance */
- /* from the baseline to the top-most of all */
- /* glyph points found in the font. */
- /* */
- /* This value is invalid in many fonts, as */
- /* it is usually set by the font designer, */
- /* and often reflects only a portion of the */
- /* glyphs found in the font (maybe ASCII). */
- /* */
- /* You should use the `sTypoAscender' field */
- /* of the `OS/2' table instead if you want */
- /* the correct one. */
- /* */
- /* Descender :: The font's descender, i.e., the distance */
- /* from the baseline to the bottom-most of */
- /* all glyph points found in the font. It */
- /* is negative. */
- /* */
- /* This value is invalid in many fonts, as */
- /* it is usually set by the font designer, */
- /* and often reflects only a portion of the */
- /* glyphs found in the font (maybe ASCII). */
- /* */
- /* You should use the `sTypoDescender' */
- /* field of the `OS/2' table instead if you */
- /* want the correct one. */
- /* */
- /* Line_Gap :: The font's line gap, i.e., the distance */
- /* to add to the ascender and descender to */
- /* get the BTB, i.e., the */
- /* baseline-to-baseline distance for the */
- /* font. */
- /* */
- /* advance_Width_Max :: This field is the maximum of all advance */
- /* widths found in the font. It can be */
- /* used to compute the maximum width of an */
- /* arbitrary string of text. */
- /* */
- /* min_Left_Side_Bearing :: The minimum left side bearing of all */
- /* glyphs within the font. */
- /* */
- /* min_Right_Side_Bearing :: The minimum right side bearing of all */
- /* glyphs within the font. */
- /* */
- /* xMax_Extent :: The maximum horizontal extent (i.e., the */
- /* `width' of a glyph's bounding box) for */
- /* all glyphs in the font. */
- /* */
- /* caret_Slope_Rise :: The rise coefficient of the cursor's */
- /* slope of the cursor (slope=rise/run). */
- /* */
- /* caret_Slope_Run :: The run coefficient of the cursor's */
- /* slope. */
- /* */
- /* caret_Offset :: The cursor's offset for slanted fonts. */
- /* */
- /* Reserved :: 8~reserved bytes. */
- /* */
- /* metric_Data_Format :: Always~0. */
- /* */
- /* number_Of_HMetrics :: Number of HMetrics entries in the `hmtx' */
- /* table -- this value can be smaller than */
- /* the total number of glyphs in the font. */
- /* */
- /* long_metrics :: A pointer into the `hmtx' table. */
- /* */
- /* short_metrics :: A pointer into the `hmtx' table. */
- /* */
- /* <Note> */
- /* For an OpenType variation font, the values of the following fields */
- /* can change after a call to @FT_Set_Var_Design_Coordinates (and */
- /* friends) if the font contains an `MVAR' table: `caret_Slope_Rise', */
- /* `caret_Slope_Run', and `caret_Offset'. */
- /* */
- typedef struct TT_HoriHeader_
- {
- FT_Fixed Version;
- FT_Short Ascender;
- FT_Short Descender;
- FT_Short Line_Gap;
-
- FT_UShort advance_Width_Max; /* advance width maximum */
-
- FT_Short min_Left_Side_Bearing; /* minimum left-sb */
- FT_Short min_Right_Side_Bearing; /* minimum right-sb */
- FT_Short xMax_Extent; /* xmax extents */
- FT_Short caret_Slope_Rise;
- FT_Short caret_Slope_Run;
- FT_Short caret_Offset;
-
- FT_Short Reserved[4];
-
- FT_Short metric_Data_Format;
- FT_UShort number_Of_HMetrics;
-
- /* The following fields are not defined by the OpenType specification */
- /* but they are used to connect the metrics header to the relevant */
- /* `hmtx' table. */
-
- void* long_metrics;
- void* short_metrics;
-
- } TT_HoriHeader;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_VertHeader */
- /* */
- /* <Description> */
- /* A structure used to model a TrueType vertical header, the `vhea' */
- /* table, as well as the corresponding vertical metrics table, */
- /* `vmtx'. */
- /* */
- /* <Fields> */
- /* Version :: The table version. */
- /* */
- /* Ascender :: The font's ascender, i.e., the distance */
- /* from the baseline to the top-most of */
- /* all glyph points found in the font. */
- /* */
- /* This value is invalid in many fonts, as */
- /* it is usually set by the font designer, */
- /* and often reflects only a portion of */
- /* the glyphs found in the font (maybe */
- /* ASCII). */
- /* */
- /* You should use the `sTypoAscender' */
- /* field of the `OS/2' table instead if */
- /* you want the correct one. */
- /* */
- /* Descender :: The font's descender, i.e., the */
- /* distance from the baseline to the */
- /* bottom-most of all glyph points found */
- /* in the font. It is negative. */
- /* */
- /* This value is invalid in many fonts, as */
- /* it is usually set by the font designer, */
- /* and often reflects only a portion of */
- /* the glyphs found in the font (maybe */
- /* ASCII). */
- /* */
- /* You should use the `sTypoDescender' */
- /* field of the `OS/2' table instead if */
- /* you want the correct one. */
- /* */
- /* Line_Gap :: The font's line gap, i.e., the distance */
- /* to add to the ascender and descender to */
- /* get the BTB, i.e., the */
- /* baseline-to-baseline distance for the */
- /* font. */
- /* */
- /* advance_Height_Max :: This field is the maximum of all */
- /* advance heights found in the font. It */
- /* can be used to compute the maximum */
- /* height of an arbitrary string of text. */
- /* */
- /* min_Top_Side_Bearing :: The minimum top side bearing of all */
- /* glyphs within the font. */
- /* */
- /* min_Bottom_Side_Bearing :: The minimum bottom side bearing of all */
- /* glyphs within the font. */
- /* */
- /* yMax_Extent :: The maximum vertical extent (i.e., the */
- /* `height' of a glyph's bounding box) for */
- /* all glyphs in the font. */
- /* */
- /* caret_Slope_Rise :: The rise coefficient of the cursor's */
- /* slope of the cursor (slope=rise/run). */
- /* */
- /* caret_Slope_Run :: The run coefficient of the cursor's */
- /* slope. */
- /* */
- /* caret_Offset :: The cursor's offset for slanted fonts. */
- /* */
- /* Reserved :: 8~reserved bytes. */
- /* */
- /* metric_Data_Format :: Always~0. */
- /* */
- /* number_Of_VMetrics :: Number of VMetrics entries in the */
- /* `vmtx' table -- this value can be */
- /* smaller than the total number of glyphs */
- /* in the font. */
- /* */
- /* long_metrics :: A pointer into the `vmtx' table. */
- /* */
- /* short_metrics :: A pointer into the `vmtx' table. */
- /* */
- /* <Note> */
- /* For an OpenType variation font, the values of the following fields */
- /* can change after a call to @FT_Set_Var_Design_Coordinates (and */
- /* friends) if the font contains an `MVAR' table: `Ascender', */
- /* `Descender', `Line_Gap', `caret_Slope_Rise', `caret_Slope_Run', */
- /* and `caret_Offset'. */
- /* */
- typedef struct TT_VertHeader_
- {
- FT_Fixed Version;
- FT_Short Ascender;
- FT_Short Descender;
- FT_Short Line_Gap;
-
- FT_UShort advance_Height_Max; /* advance height maximum */
-
- FT_Short min_Top_Side_Bearing; /* minimum top-sb */
- FT_Short min_Bottom_Side_Bearing; /* minimum bottom-sb */
- FT_Short yMax_Extent; /* ymax extents */
- FT_Short caret_Slope_Rise;
- FT_Short caret_Slope_Run;
- FT_Short caret_Offset;
-
- FT_Short Reserved[4];
-
- FT_Short metric_Data_Format;
- FT_UShort number_Of_VMetrics;
-
- /* The following fields are not defined by the OpenType specification */
- /* but they are used to connect the metrics header to the relevant */
- /* `vmtx' table. */
-
- void* long_metrics;
- void* short_metrics;
-
- } TT_VertHeader;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_OS2 */
- /* */
- /* <Description> */
- /* A structure to model a TrueType `OS/2' table. All fields comply */
- /* to the OpenType specification. */
- /* */
- /* Note that we now support old Mac fonts that do not include an */
- /* `OS/2' table. In this case, the `version' field is always set to */
- /* 0xFFFF. */
- /* */
- /* <Note> */
- /* For an OpenType variation font, the values of the following fields */
- /* can change after a call to @FT_Set_Var_Design_Coordinates (and */
- /* friends) if the font contains an `MVAR' table: `sCapHeight', */
- /* `sTypoAscender', `sTypoDescender', `sTypoLineGap', `sxHeight', */
- /* `usWinAscent', `usWinDescent', `yStrikeoutPosition', */
- /* `yStrikeoutSize', `ySubscriptXOffset', `ySubScriptXSize', */
- /* `ySubscriptYOffset', `ySubscriptYSize', `ySuperscriptXOffset', */
- /* `ySuperscriptXSize', `ySuperscriptYOffset', and */
- /* `ySuperscriptYSize'. */
- /* */
- /* Possible values for bits in the `ulUnicodeRangeX' fields are given */
- /* by the @TT_UCR_XXX macros. */
- /* */
-
- typedef struct TT_OS2_
- {
- FT_UShort version; /* 0x0001 - more or 0xFFFF */
- FT_Short xAvgCharWidth;
- FT_UShort usWeightClass;
- FT_UShort usWidthClass;
- FT_UShort fsType;
- FT_Short ySubscriptXSize;
- FT_Short ySubscriptYSize;
- FT_Short ySubscriptXOffset;
- FT_Short ySubscriptYOffset;
- FT_Short ySuperscriptXSize;
- FT_Short ySuperscriptYSize;
- FT_Short ySuperscriptXOffset;
- FT_Short ySuperscriptYOffset;
- FT_Short yStrikeoutSize;
- FT_Short yStrikeoutPosition;
- FT_Short sFamilyClass;
-
- FT_Byte panose[10];
-
- FT_ULong ulUnicodeRange1; /* Bits 0-31 */
- FT_ULong ulUnicodeRange2; /* Bits 32-63 */
- FT_ULong ulUnicodeRange3; /* Bits 64-95 */
- FT_ULong ulUnicodeRange4; /* Bits 96-127 */
-
- FT_Char achVendID[4];
-
- FT_UShort fsSelection;
- FT_UShort usFirstCharIndex;
- FT_UShort usLastCharIndex;
- FT_Short sTypoAscender;
- FT_Short sTypoDescender;
- FT_Short sTypoLineGap;
- FT_UShort usWinAscent;
- FT_UShort usWinDescent;
-
- /* only version 1 and higher: */
-
- FT_ULong ulCodePageRange1; /* Bits 0-31 */
- FT_ULong ulCodePageRange2; /* Bits 32-63 */
-
- /* only version 2 and higher: */
-
- FT_Short sxHeight;
- FT_Short sCapHeight;
- FT_UShort usDefaultChar;
- FT_UShort usBreakChar;
- FT_UShort usMaxContext;
-
- /* only version 5 and higher: */
-
- FT_UShort usLowerOpticalPointSize; /* in twips (1/20th points) */
- FT_UShort usUpperOpticalPointSize; /* in twips (1/20th points) */
-
- } TT_OS2;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_Postscript */
- /* */
- /* <Description> */
- /* A structure to model a TrueType `post' table. All fields comply */
- /* to the OpenType specification. This structure does not reference */
- /* a font's PostScript glyph names; use @FT_Get_Glyph_Name to */
- /* retrieve them. */
- /* */
- /* <Note> */
- /* For an OpenType variation font, the values of the following fields */
- /* can change after a call to @FT_Set_Var_Design_Coordinates (and */
- /* friends) if the font contains an `MVAR' table: `underlinePosition' */
- /* and `underlineThickness'. */
- /* */
- typedef struct TT_Postscript_
- {
- FT_Fixed FormatType;
- FT_Fixed italicAngle;
- FT_Short underlinePosition;
- FT_Short underlineThickness;
- FT_ULong isFixedPitch;
- FT_ULong minMemType42;
- FT_ULong maxMemType42;
- FT_ULong minMemType1;
- FT_ULong maxMemType1;
-
- /* Glyph names follow in the `post' table, but we don't */
- /* load them by default. */
-
- } TT_Postscript;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_PCLT */
- /* */
- /* <Description> */
- /* A structure to model a TrueType `PCLT' table. All fields comply */
- /* to the OpenType specification. */
- /* */
- typedef struct TT_PCLT_
- {
- FT_Fixed Version;
- FT_ULong FontNumber;
- FT_UShort Pitch;
- FT_UShort xHeight;
- FT_UShort Style;
- FT_UShort TypeFamily;
- FT_UShort CapHeight;
- FT_UShort SymbolSet;
- FT_Char TypeFace[16];
- FT_Char CharacterComplement[8];
- FT_Char FileName[6];
- FT_Char StrokeWeight;
- FT_Char WidthType;
- FT_Byte SerifStyle;
- FT_Byte Reserved;
-
- } TT_PCLT;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_MaxProfile */
- /* */
- /* <Description> */
- /* The maximum profile (`maxp') table contains many max values, which */
- /* can be used to pre-allocate arrays for speeding up glyph loading */
- /* and hinting. */
- /* */
- /* <Fields> */
- /* version :: The version number. */
- /* */
- /* numGlyphs :: The number of glyphs in this TrueType */
- /* font. */
- /* */
- /* maxPoints :: The maximum number of points in a */
- /* non-composite TrueType glyph. See also */
- /* `maxCompositePoints'. */
- /* */
- /* maxContours :: The maximum number of contours in a */
- /* non-composite TrueType glyph. See also */
- /* `maxCompositeContours'. */
- /* */
- /* maxCompositePoints :: The maximum number of points in a */
- /* composite TrueType glyph. See also */
- /* `maxPoints'. */
- /* */
- /* maxCompositeContours :: The maximum number of contours in a */
- /* composite TrueType glyph. See also */
- /* `maxContours'. */
- /* */
- /* maxZones :: The maximum number of zones used for */
- /* glyph hinting. */
- /* */
- /* maxTwilightPoints :: The maximum number of points in the */
- /* twilight zone used for glyph hinting. */
- /* */
- /* maxStorage :: The maximum number of elements in the */
- /* storage area used for glyph hinting. */
- /* */
- /* maxFunctionDefs :: The maximum number of function */
- /* definitions in the TrueType bytecode for */
- /* this font. */
- /* */
- /* maxInstructionDefs :: The maximum number of instruction */
- /* definitions in the TrueType bytecode for */
- /* this font. */
- /* */
- /* maxStackElements :: The maximum number of stack elements used */
- /* during bytecode interpretation. */
- /* */
- /* maxSizeOfInstructions :: The maximum number of TrueType opcodes */
- /* used for glyph hinting. */
- /* */
- /* maxComponentElements :: The maximum number of simple (i.e., non- */
- /* composite) glyphs in a composite glyph. */
- /* */
- /* maxComponentDepth :: The maximum nesting depth of composite */
- /* glyphs. */
- /* */
- /* <Note> */
- /* This structure is only used during font loading. */
- /* */
- typedef struct TT_MaxProfile_
- {
- FT_Fixed version;
- FT_UShort numGlyphs;
- FT_UShort maxPoints;
- FT_UShort maxContours;
- FT_UShort maxCompositePoints;
- FT_UShort maxCompositeContours;
- FT_UShort maxZones;
- FT_UShort maxTwilightPoints;
- FT_UShort maxStorage;
- FT_UShort maxFunctionDefs;
- FT_UShort maxInstructionDefs;
- FT_UShort maxStackElements;
- FT_UShort maxSizeOfInstructions;
- FT_UShort maxComponentElements;
- FT_UShort maxComponentDepth;
-
- } TT_MaxProfile;
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Sfnt_Tag */
- /* */
- /* <Description> */
- /* An enumeration to specify indices of SFNT tables loaded and parsed */
- /* by FreeType during initialization of an SFNT font. Used in the */
- /* @FT_Get_Sfnt_Table API function. */
- /* */
- /* <Values> */
- /* FT_SFNT_HEAD :: To access the font's @TT_Header structure. */
- /* */
- /* FT_SFNT_MAXP :: To access the font's @TT_MaxProfile structure. */
- /* */
- /* FT_SFNT_OS2 :: To access the font's @TT_OS2 structure. */
- /* */
- /* FT_SFNT_HHEA :: To access the font's @TT_HoriHeader structure. */
- /* */
- /* FT_SFNT_VHEA :: To access the font's @TT_VertHeader structure. */
- /* */
- /* FT_SFNT_POST :: To access the font's @TT_Postscript structure. */
- /* */
- /* FT_SFNT_PCLT :: To access the font's @TT_PCLT structure. */
- /* */
- typedef enum FT_Sfnt_Tag_
- {
- FT_SFNT_HEAD,
- FT_SFNT_MAXP,
- FT_SFNT_OS2,
- FT_SFNT_HHEA,
- FT_SFNT_VHEA,
- FT_SFNT_POST,
- FT_SFNT_PCLT,
-
- FT_SFNT_MAX
-
- } FT_Sfnt_Tag;
-
- /* these constants are deprecated; use the corresponding `FT_Sfnt_Tag' */
- /* values instead */
-#define ft_sfnt_head FT_SFNT_HEAD
-#define ft_sfnt_maxp FT_SFNT_MAXP
-#define ft_sfnt_os2 FT_SFNT_OS2
-#define ft_sfnt_hhea FT_SFNT_HHEA
-#define ft_sfnt_vhea FT_SFNT_VHEA
-#define ft_sfnt_post FT_SFNT_POST
-#define ft_sfnt_pclt FT_SFNT_PCLT
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Sfnt_Table */
- /* */
- /* <Description> */
- /* Return a pointer to a given SFNT table stored within a face. */
- /* */
- /* <Input> */
- /* face :: A handle to the source. */
- /* */
- /* tag :: The index of the SFNT table. */
- /* */
- /* <Return> */
- /* A type-less pointer to the table. This will be NULL in case of */
- /* error, or if the corresponding table was not found *OR* loaded */
- /* from the file. */
- /* */
- /* Use a typecast according to `tag' to access the structure */
- /* elements. */
- /* */
- /* <Note> */
- /* The table is owned by the face object and disappears with it. */
- /* */
- /* This function is only useful to access SFNT tables that are loaded */
- /* by the sfnt, truetype, and opentype drivers. See @FT_Sfnt_Tag for */
- /* a list. */
- /* */
- /* Here an example how to access the `vhea' table: */
- /* */
- /* { */
- /* TT_VertHeader* vert_header; */
- /* */
- /* */
- /* vert_header = */
- /* (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA ); */
- /* } */
- /* */
- FT_EXPORT( void* )
- FT_Get_Sfnt_Table( FT_Face face,
- FT_Sfnt_Tag tag );
-
-
- /**************************************************************************
- *
- * @function:
- * FT_Load_Sfnt_Table
- *
- * @description:
- * Load any SFNT font table into client memory.
- *
- * @input:
- * face ::
- * A handle to the source face.
- *
- * tag ::
- * The four-byte tag of the table to load. Use value~0 if you want
- * to access the whole font file. Otherwise, you can use one of the
- * definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new
- * one with @FT_MAKE_TAG.
- *
- * offset ::
- * The starting offset in the table (or file if tag~==~0).
- *
- * @output:
- * buffer ::
- * The target buffer address. The client must ensure that the memory
- * array is big enough to hold the data.
- *
- * @inout:
- * length ::
- * If the `length' parameter is NULL, try to load the whole table.
- * Return an error code if it fails.
- *
- * Else, if `*length' is~0, exit immediately while returning the
- * table's (or file) full size in it.
- *
- * Else the number of bytes to read from the table or file, from the
- * starting offset.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * If you need to determine the table's length you should first call this
- * function with `*length' set to~0, as in the following example:
- *
- * {
- * FT_ULong length = 0;
- *
- *
- * error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length );
- * if ( error ) { ... table does not exist ... }
- *
- * buffer = malloc( length );
- * if ( buffer == NULL ) { ... not enough memory ... }
- *
- * error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length );
- * if ( error ) { ... could not load table ... }
- * }
- *
- * Note that structures like @TT_Header or @TT_OS2 can't be used with
- * this function; they are limited to @FT_Get_Sfnt_Table. Reason is that
- * those structures depend on the processor architecture, with varying
- * size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian).
- *
- */
- FT_EXPORT( FT_Error )
- FT_Load_Sfnt_Table( FT_Face face,
- FT_ULong tag,
- FT_Long offset,
- FT_Byte* buffer,
- FT_ULong* length );
-
-
- /**************************************************************************
- *
- * @function:
- * FT_Sfnt_Table_Info
- *
- * @description:
- * Return information on an SFNT table.
- *
- * @input:
- * face ::
- * A handle to the source face.
- *
- * table_index ::
- * The index of an SFNT table. The function returns
- * FT_Err_Table_Missing for an invalid value.
- *
- * @inout:
- * tag ::
- * The name tag of the SFNT table. If the value is NULL, `table_index'
- * is ignored, and `length' returns the number of SFNT tables in the
- * font.
- *
- * @output:
- * length ::
- * The length of the SFNT table (or the number of SFNT tables, depending
- * on `tag').
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * While parsing fonts, FreeType handles SFNT tables with length zero as
- * missing.
- *
- */
- FT_EXPORT( FT_Error )
- FT_Sfnt_Table_Info( FT_Face face,
- FT_UInt table_index,
- FT_ULong *tag,
- FT_ULong *length );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_CMap_Language_ID */
- /* */
- /* <Description> */
- /* Return cmap language ID as specified in the OpenType standard. */
- /* Definitions of language ID values are in file @FT_TRUETYPE_IDS_H. */
- /* */
- /* <Input> */
- /* charmap :: */
- /* The target charmap. */
- /* */
- /* <Return> */
- /* The language ID of `charmap'. If `charmap' doesn't belong to an */
- /* SFNT face, just return~0 as the default value. */
- /* */
- /* For a format~14 cmap (to access Unicode IVS), the return value is */
- /* 0xFFFFFFFF. */
- /* */
- FT_EXPORT( FT_ULong )
- FT_Get_CMap_Language_ID( FT_CharMap charmap );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_CMap_Format */
- /* */
- /* <Description> */
- /* Return the format of an SFNT `cmap' table. */
- /* */
- /* <Input> */
- /* charmap :: */
- /* The target charmap. */
- /* */
- /* <Return> */
- /* The format of `charmap'. If `charmap' doesn't belong to an SFNT */
- /* face, return -1. */
- /* */
- FT_EXPORT( FT_Long )
- FT_Get_CMap_Format( FT_CharMap charmap );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* TTTABLES_H_ */
-
-
-/* END */
diff --git a/include/freetype/tttags.h b/include/freetype/tttags.h
deleted file mode 100644
index 32eb2fdc2..000000000
--- a/include/freetype/tttags.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/***************************************************************************/
-/* */
-/* tttags.h */
-/* */
-/* Tags for TrueType and OpenType tables (specification only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTAGS_H_
-#define TTAGS_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
-#define TTAG_avar FT_MAKE_TAG( 'a', 'v', 'a', 'r' )
-#define TTAG_BASE FT_MAKE_TAG( 'B', 'A', 'S', 'E' )
-#define TTAG_bdat FT_MAKE_TAG( 'b', 'd', 'a', 't' )
-#define TTAG_BDF FT_MAKE_TAG( 'B', 'D', 'F', ' ' )
-#define TTAG_bhed FT_MAKE_TAG( 'b', 'h', 'e', 'd' )
-#define TTAG_bloc FT_MAKE_TAG( 'b', 'l', 'o', 'c' )
-#define TTAG_bsln FT_MAKE_TAG( 'b', 's', 'l', 'n' )
-#define TTAG_CBDT FT_MAKE_TAG( 'C', 'B', 'D', 'T' )
-#define TTAG_CBLC FT_MAKE_TAG( 'C', 'B', 'L', 'C' )
-#define TTAG_CFF FT_MAKE_TAG( 'C', 'F', 'F', ' ' )
-#define TTAG_CFF2 FT_MAKE_TAG( 'C', 'F', 'F', '2' )
-#define TTAG_CID FT_MAKE_TAG( 'C', 'I', 'D', ' ' )
-#define TTAG_cmap FT_MAKE_TAG( 'c', 'm', 'a', 'p' )
-#define TTAG_cvar FT_MAKE_TAG( 'c', 'v', 'a', 'r' )
-#define TTAG_cvt FT_MAKE_TAG( 'c', 'v', 't', ' ' )
-#define TTAG_DSIG FT_MAKE_TAG( 'D', 'S', 'I', 'G' )
-#define TTAG_EBDT FT_MAKE_TAG( 'E', 'B', 'D', 'T' )
-#define TTAG_EBLC FT_MAKE_TAG( 'E', 'B', 'L', 'C' )
-#define TTAG_EBSC FT_MAKE_TAG( 'E', 'B', 'S', 'C' )
-#define TTAG_feat FT_MAKE_TAG( 'f', 'e', 'a', 't' )
-#define TTAG_FOND FT_MAKE_TAG( 'F', 'O', 'N', 'D' )
-#define TTAG_fpgm FT_MAKE_TAG( 'f', 'p', 'g', 'm' )
-#define TTAG_fvar FT_MAKE_TAG( 'f', 'v', 'a', 'r' )
-#define TTAG_gasp FT_MAKE_TAG( 'g', 'a', 's', 'p' )
-#define TTAG_GDEF FT_MAKE_TAG( 'G', 'D', 'E', 'F' )
-#define TTAG_glyf FT_MAKE_TAG( 'g', 'l', 'y', 'f' )
-#define TTAG_GPOS FT_MAKE_TAG( 'G', 'P', 'O', 'S' )
-#define TTAG_GSUB FT_MAKE_TAG( 'G', 'S', 'U', 'B' )
-#define TTAG_gvar FT_MAKE_TAG( 'g', 'v', 'a', 'r' )
-#define TTAG_HVAR FT_MAKE_TAG( 'H', 'V', 'A', 'R' )
-#define TTAG_hdmx FT_MAKE_TAG( 'h', 'd', 'm', 'x' )
-#define TTAG_head FT_MAKE_TAG( 'h', 'e', 'a', 'd' )
-#define TTAG_hhea FT_MAKE_TAG( 'h', 'h', 'e', 'a' )
-#define TTAG_hmtx FT_MAKE_TAG( 'h', 'm', 't', 'x' )
-#define TTAG_JSTF FT_MAKE_TAG( 'J', 'S', 'T', 'F' )
-#define TTAG_just FT_MAKE_TAG( 'j', 'u', 's', 't' )
-#define TTAG_kern FT_MAKE_TAG( 'k', 'e', 'r', 'n' )
-#define TTAG_lcar FT_MAKE_TAG( 'l', 'c', 'a', 'r' )
-#define TTAG_loca FT_MAKE_TAG( 'l', 'o', 'c', 'a' )
-#define TTAG_LTSH FT_MAKE_TAG( 'L', 'T', 'S', 'H' )
-#define TTAG_LWFN FT_MAKE_TAG( 'L', 'W', 'F', 'N' )
-#define TTAG_MATH FT_MAKE_TAG( 'M', 'A', 'T', 'H' )
-#define TTAG_maxp FT_MAKE_TAG( 'm', 'a', 'x', 'p' )
-#define TTAG_META FT_MAKE_TAG( 'M', 'E', 'T', 'A' )
-#define TTAG_MMFX FT_MAKE_TAG( 'M', 'M', 'F', 'X' )
-#define TTAG_MMSD FT_MAKE_TAG( 'M', 'M', 'S', 'D' )
-#define TTAG_mort FT_MAKE_TAG( 'm', 'o', 'r', 't' )
-#define TTAG_morx FT_MAKE_TAG( 'm', 'o', 'r', 'x' )
-#define TTAG_MVAR FT_MAKE_TAG( 'M', 'V', 'A', 'R' )
-#define TTAG_name FT_MAKE_TAG( 'n', 'a', 'm', 'e' )
-#define TTAG_opbd FT_MAKE_TAG( 'o', 'p', 'b', 'd' )
-#define TTAG_OS2 FT_MAKE_TAG( 'O', 'S', '/', '2' )
-#define TTAG_OTTO FT_MAKE_TAG( 'O', 'T', 'T', 'O' )
-#define TTAG_PCLT FT_MAKE_TAG( 'P', 'C', 'L', 'T' )
-#define TTAG_POST FT_MAKE_TAG( 'P', 'O', 'S', 'T' )
-#define TTAG_post FT_MAKE_TAG( 'p', 'o', 's', 't' )
-#define TTAG_prep FT_MAKE_TAG( 'p', 'r', 'e', 'p' )
-#define TTAG_prop FT_MAKE_TAG( 'p', 'r', 'o', 'p' )
-#define TTAG_sbix FT_MAKE_TAG( 's', 'b', 'i', 'x' )
-#define TTAG_sfnt FT_MAKE_TAG( 's', 'f', 'n', 't' )
-#define TTAG_SING FT_MAKE_TAG( 'S', 'I', 'N', 'G' )
-#define TTAG_trak FT_MAKE_TAG( 't', 'r', 'a', 'k' )
-#define TTAG_true FT_MAKE_TAG( 't', 'r', 'u', 'e' )
-#define TTAG_ttc FT_MAKE_TAG( 't', 't', 'c', ' ' )
-#define TTAG_ttcf FT_MAKE_TAG( 't', 't', 'c', 'f' )
-#define TTAG_TYP1 FT_MAKE_TAG( 'T', 'Y', 'P', '1' )
-#define TTAG_typ1 FT_MAKE_TAG( 't', 'y', 'p', '1' )
-#define TTAG_VDMX FT_MAKE_TAG( 'V', 'D', 'M', 'X' )
-#define TTAG_vhea FT_MAKE_TAG( 'v', 'h', 'e', 'a' )
-#define TTAG_vmtx FT_MAKE_TAG( 'v', 'm', 't', 'x' )
-#define TTAG_VVAR FT_MAKE_TAG( 'V', 'V', 'A', 'R' )
-#define TTAG_wOFF FT_MAKE_TAG( 'w', 'O', 'F', 'F' )
-
-
-FT_END_HEADER
-
-#endif /* TTAGS_H_ */
-
-
-/* END */
diff --git a/include/freetype/ttunpat.h b/include/freetype/ttunpat.h
deleted file mode 100644
index f5e417089..000000000
--- a/include/freetype/ttunpat.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttunpat.h */
-/* */
-/* Definitions for the unpatented TrueType hinting system. */
-/* Obsolete, retained for backward compatibility. */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* Written by Graham Asher <graham.asher@btinternet.com> */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTUNPAT_H_
-#define TTUNPAT_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /***************************************************************************
- *
- * @constant:
- * FT_PARAM_TAG_UNPATENTED_HINTING
- *
- * @description:
- * Deprecated.
- *
- * Previously: A constant used as the tag of an @FT_Parameter structure to
- * indicate that unpatented methods only should be used by the TrueType
- * bytecode interpreter for a typeface opened by @FT_Open_Face.
- *
- */
-#define FT_PARAM_TAG_UNPATENTED_HINTING FT_MAKE_TAG( 'u', 'n', 'p', 'a' )
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* TTUNPAT_H_ */
-
-
-/* END */
diff --git a/include/ft2build.h b/include/ft2build.h
deleted file mode 100644
index e7d808f3f..000000000
--- a/include/ft2build.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/***************************************************************************/
-/* */
-/* ft2build.h */
-/* */
-/* FreeType 2 build and setup macros. */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This is the `entry point' for FreeType header file inclusions. It is */
- /* the only header file which should be included directly; all other */
- /* FreeType header files should be accessed with macro names (after */
- /* including `ft2build.h'). */
- /* */
- /* A typical example is */
- /* */
- /* #include <ft2build.h> */
- /* #include FT_FREETYPE_H */
- /* */
- /*************************************************************************/
-
-
-#ifndef FT2BUILD_H_
-#define FT2BUILD_H_
-
-#include <freetype/config/ftheader.h>
-
-#endif /* FT2BUILD_H_ */
-
-
-/* END */
diff --git a/glyphtest/index.html b/index.html
index 94f776def..94f776def 100644
--- a/glyphtest/index.html
+++ b/index.html
diff --git a/modules.cfg b/modules.cfg
deleted file mode 100644
index 517111efe..000000000
--- a/modules.cfg
+++ /dev/null
@@ -1,270 +0,0 @@
-# modules.cfg
-#
-# Copyright 2005-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-#
-#
-# In case you compile the FreeType library with GNU make or makepp, this
-# file controls which components are built into the library. Otherwise,
-# please read this file for information on the various modules and its
-# dependencies, then follow the instructions in the file `docs/INSTALL.ANY'.
-#
-# To deactivate a module, simply comment out the corresponding line. To
-# activate a module, remove the comment character.
-#
-# Note that many modules and components are further controlled with macros
-# in the file `include/freetype/config/ftoption.h'.
-
-
-####
-#### font modules -- at least one is required
-####
-#### The order given here (from top to down) is the order used for testing
-#### font formats in the compiled library.
-####
-
-# TrueType font driver.
-#
-# This driver needs the `sfnt' module.
-FONT_MODULES += truetype
-
-# PostScript Type 1 font driver.
-#
-# This driver needs the `psaux', `pshinter', and `psnames' modules.
-# No FT_CONFIG_OPTION_PIC support.
-FONT_MODULES += type1
-
-# CFF/OpenType font driver.
-#
-# This driver needs the `sfnt', `pshinter', and `psnames' modules.
-FONT_MODULES += cff
-
-# Type 1 CID-keyed font driver.
-#
-# This driver needs the `psaux', `pshinter', and `psnames' modules.
-# No FT_CONFIG_OPTION_PIC support.
-FONT_MODULES += cid
-
-# PFR/TrueDoc font driver. See optional extension ftpfr.c below also.
-# No FT_CONFIG_OPTION_PIC support.
-FONT_MODULES += pfr
-
-# PostScript Type 42 font driver.
-#
-# This driver needs the `truetype' and `psaux' modules.
-# No FT_CONFIG_OPTION_PIC support.
-FONT_MODULES += type42
-
-# Windows FONT/FNT font driver. See optional extension ftwinfnt.c below
-# also.
-# No FT_CONFIG_OPTION_PIC support.
-FONT_MODULES += winfonts
-
-# PCF font driver.
-# No FT_CONFIG_OPTION_PIC support.
-FONT_MODULES += pcf
-
-# BDF font driver. See optional extension ftbdf.c below also.
-# No FT_CONFIG_OPTION_PIC support.
-FONT_MODULES += bdf
-
-# SFNT files support. If used without `truetype' or `cff', it supports
-# bitmap-only fonts within an SFNT wrapper.
-#
-# This driver needs the `psnames' module.
-FONT_MODULES += sfnt
-
-
-####
-#### hinting modules
-####
-
-# FreeType's auto hinter.
-HINTING_MODULES += autofit
-
-# PostScript hinter.
-HINTING_MODULES += pshinter
-
-# The TrueType hinting engine doesn't have a module of its own but is
-# controlled in file include/freetype/config/ftoption.h
-# (TT_CONFIG_OPTION_BYTECODE_INTERPRETER and friends).
-
-
-####
-#### raster modules -- at least one is required for vector font formats
-####
-
-# Monochrome rasterizer.
-RASTER_MODULES += raster
-
-# Anti-aliasing rasterizer.
-RASTER_MODULES += smooth
-
-
-####
-#### auxiliary modules
-####
-
-# FreeType's cache sub-system (quite stable but still in beta -- this means
-# that its public API is subject to change if necessary). See
-# include/freetype/ftcache.h. Needs ftglyph.c.
-# No FT_CONFIG_OPTION_PIC support.
-AUX_MODULES += cache
-
-# TrueType GX/AAT table validation. Needs ftgxval.c below.
-#
-# No FT_CONFIG_OPTION_PIC support.
-# AUX_MODULES += gxvalid
-
-# Support for streams compressed with gzip (files with suffix .gz).
-#
-# See include/freetype/ftgzip.h for the API.
-# No FT_CONFIG_OPTION_PIC support.
-AUX_MODULES += gzip
-
-# Support for streams compressed with LZW (files with suffix .Z).
-#
-# See include/freetype/ftlzw.h for the API.
-# No FT_CONFIG_OPTION_PIC support.
-AUX_MODULES += lzw
-
-# Support for streams compressed with bzip2 (files with suffix .bz2).
-#
-# See include/freetype/ftbzip2.h for the API.
-# No FT_CONFIG_OPTION_PIC support.
-AUX_MODULES += bzip2
-
-# OpenType table validation. Needs ftotval.c below.
-#
-# No FT_CONFIG_OPTION_PIC support.
-# AUX_MODULES += otvalid
-
-# Auxiliary PostScript driver component to share common code.
-#
-# This module depends on `psnames'.
-# No FT_CONFIG_OPTION_PIC support.
-AUX_MODULES += psaux
-
-# Support for PostScript glyph names.
-#
-# This module can be controlled in ftconfig.h
-# (FT_CONFIG_OPTION_POSTSCRIPT_NAMES).
-AUX_MODULES += psnames
-
-
-####
-#### base module extensions
-####
-
-# Exact bounding box calculation.
-#
-# See include/freetype/ftbbox.h for the API.
-BASE_EXTENSIONS += ftbbox.c
-
-# Access BDF-specific strings. Needs BDF font driver.
-#
-# See include/freetype/ftbdf.h for the API.
-BASE_EXTENSIONS += ftbdf.c
-
-# Utility functions for converting 1bpp, 2bpp, 4bpp, and 8bpp bitmaps into
-# 8bpp format, and for emboldening of bitmap glyphs.
-#
-# See include/freetype/ftbitmap.h for the API.
-BASE_EXTENSIONS += ftbitmap.c
-
-# Access CID font information.
-#
-# See include/freetype/ftcid.h for the API.
-BASE_EXTENSIONS += ftcid.c
-
-# Support functions for font formats.
-#
-# See include/freetype/ftfntfmt.h for the API.
-BASE_EXTENSIONS += ftfntfmt.c
-
-# Access FSType information. Needs fttype1.c.
-#
-# See include/freetype/freetype.h for the API.
-BASE_EXTENSIONS += ftfstype.c
-
-# Support for GASP table queries.
-#
-# See include/freetype/ftgasp.h for the API.
-BASE_EXTENSIONS += ftgasp.c
-
-# Convenience functions to handle glyphs. Needs ftbitmap.c.
-#
-# See include/freetype/ftglyph.h for the API.
-BASE_EXTENSIONS += ftglyph.c
-
-# Interface for gxvalid module.
-#
-# See include/freetype/ftgxval.h for the API.
-BASE_EXTENSIONS += ftgxval.c
-
-# Support for LCD color filtering of subpixel bitmaps.
-#
-# See include/freetype/ftlcdfil.h for the API.
-BASE_EXTENSIONS += ftlcdfil.c
-
-# Multiple Master font interface.
-#
-# See include/freetype/ftmm.h for the API.
-BASE_EXTENSIONS += ftmm.c
-
-# Interface for otvalid module.
-#
-# See include/freetype/ftotval.h for the API.
-BASE_EXTENSIONS += ftotval.c
-
-# Support for FT_Face_CheckTrueTypePatents.
-#
-# See include/freetype/freetype.h for the API.
-BASE_EXTENSIONS += ftpatent.c
-
-# Interface for accessing PFR-specific data. Needs PFR font driver.
-#
-# See include/freetype/ftpfr.h for the API.
-BASE_EXTENSIONS += ftpfr.c
-
-# Path stroker. Needs ftglyph.c.
-#
-# See include/freetype/ftstroke.h for the API.
-BASE_EXTENSIONS += ftstroke.c
-
-# Support for synthetic emboldening and slanting of fonts. Needs ftbitmap.c.
-#
-# See include/freetype/ftsynth.h for the API.
-BASE_EXTENSIONS += ftsynth.c
-
-# Interface to access data specific to PostScript Type 1 and Type 2 (CFF)
-# fonts.
-#
-# See include/freetype/t1tables.h for the API.
-BASE_EXTENSIONS += fttype1.c
-
-# Interface for accessing data specific to Windows FNT files. Needs winfnt
-# driver.
-#
-# See include/freetype/ftwinfnt.h for the API.
-BASE_EXTENSIONS += ftwinfnt.c
-
-####
-#### The components `ftsystem.c' (for memory allocation and stream I/O
-#### management) and `ftdebug.c' (for emitting debug messages to the user)
-#### are controlled with the following variables.
-####
-#### ftsystem.c: $(FTSYS_SRC)
-#### ftdebug.c: $(FTDEBUG_SRC)
-####
-#### Please refer to docs/CUSTOMIZE for details.
-####
-
-
-# EOF
diff --git a/glyphtest/murmur3.c b/murmur3.c
index 484ebfd03..484ebfd03 100644
--- a/glyphtest/murmur3.c
+++ b/murmur3.c
diff --git a/glyphtest/murmur3.h b/murmur3.h
index 90878b00d..90878b00d 100644
--- a/glyphtest/murmur3.h
+++ b/murmur3.h
diff --git a/objs/.gitignore b/objs/.gitignore
deleted file mode 100644
index 21b67f6ab..000000000
--- a/objs/.gitignore
+++ /dev/null
@@ -1,15 +0,0 @@
-apinames
-freetype.def
-freetype.lib
-ftexport.sym
-ftmodule.h
-ftoption.h
-libfreetype.la
-.libs
-*.lo
-*.o
-*.a
-debug*/
-release*/
-win32/
-win64/
diff --git a/objs/README b/objs/README
deleted file mode 100644
index befb63e04..000000000
--- a/objs/README
+++ /dev/null
@@ -1,2 +0,0 @@
-This directory contains all the object files created when building the
-library.
diff --git a/glyphtest/readme.txt b/readme.txt
index 48f7199f0..48f7199f0 100644
--- a/glyphtest/readme.txt
+++ b/readme.txt
diff --git a/src/Jamfile b/src/Jamfile
deleted file mode 100644
index c0bc02249..000000000
--- a/src/Jamfile
+++ /dev/null
@@ -1,19 +0,0 @@
-# FreeType 2 src Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) ;
-
-for xx in $(FT2_COMPONENTS)
-{
- SubInclude FT2_TOP $(FT2_SRC_DIR) $(xx) ;
-}
-
-# end of src Jamfile
diff --git a/src/autofit/Jamfile b/src/autofit/Jamfile
deleted file mode 100644
index 9a3dc8a4f..000000000
--- a/src/autofit/Jamfile
+++ /dev/null
@@ -1,53 +0,0 @@
-# FreeType 2 src/autofit Jamfile
-#
-# Copyright 2003-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP src autofit ;
-
-{
- local _sources ;
-
- # define FT2_AUTOFIT2 to enable experimental latin hinter replacement
- if $(FT2_AUTOFIT2)
- {
- CCFLAGS += FT_OPTION_AUTOFIT2 ;
- }
- if $(FT2_MULTI)
- {
- _sources = afangles
- afblue
- afcjk
- afdummy
- afglobal
- afhints
- afindic
- aflatin
- afloader
- afmodule
- afpic
- afranges
- afshaper
- afwarp
- ;
-
- if $(FT2_AUTOFIT2)
- {
- _sources += aflatin2 ;
- }
- }
- else
- {
- _sources = autofit ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/autofit Jamfile
diff --git a/src/autofit/afangles.c b/src/autofit/afangles.c
deleted file mode 100644
index ccdae8413..000000000
--- a/src/autofit/afangles.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/***************************************************************************/
-/* */
-/* afangles.c */
-/* */
-/* Routines used to compute vector angles with limited accuracy */
-/* and very high speed. It also contains sorting routines (body). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "aftypes.h"
-
-
- /*
- * We are not using `af_angle_atan' anymore, but we keep the source
- * code below just in case...
- */
-
-
-#if 0
-
-
- /*
- * The trick here is to realize that we don't need a very accurate angle
- * approximation. We are going to use the result of `af_angle_atan' to
- * only compare the sign of angle differences, or check whether its
- * magnitude is very small.
- *
- * The approximation
- *
- * dy * PI / (|dx|+|dy|)
- *
- * should be enough, and much faster to compute.
- */
- FT_LOCAL_DEF( AF_Angle )
- af_angle_atan( FT_Fixed dx,
- FT_Fixed dy )
- {
- AF_Angle angle;
- FT_Fixed ax = dx;
- FT_Fixed ay = dy;
-
-
- if ( ax < 0 )
- ax = -ax;
- if ( ay < 0 )
- ay = -ay;
-
- ax += ay;
-
- if ( ax == 0 )
- angle = 0;
- else
- {
- angle = ( AF_ANGLE_PI2 * dy ) / ( ax + ay );
- if ( dx < 0 )
- {
- if ( angle >= 0 )
- angle = AF_ANGLE_PI - angle;
- else
- angle = -AF_ANGLE_PI - angle;
- }
- }
-
- return angle;
- }
-
-
-#elif 0
-
-
- /* the following table has been automatically generated with */
- /* the `mather.py' Python script */
-
-#define AF_ATAN_BITS 8
-
- static const FT_Byte af_arctan[1L << AF_ATAN_BITS] =
- {
- 0, 0, 1, 1, 1, 2, 2, 2,
- 3, 3, 3, 3, 4, 4, 4, 5,
- 5, 5, 6, 6, 6, 7, 7, 7,
- 8, 8, 8, 9, 9, 9, 10, 10,
- 10, 10, 11, 11, 11, 12, 12, 12,
- 13, 13, 13, 14, 14, 14, 14, 15,
- 15, 15, 16, 16, 16, 17, 17, 17,
- 18, 18, 18, 18, 19, 19, 19, 20,
- 20, 20, 21, 21, 21, 21, 22, 22,
- 22, 23, 23, 23, 24, 24, 24, 24,
- 25, 25, 25, 26, 26, 26, 26, 27,
- 27, 27, 28, 28, 28, 28, 29, 29,
- 29, 30, 30, 30, 30, 31, 31, 31,
- 31, 32, 32, 32, 33, 33, 33, 33,
- 34, 34, 34, 34, 35, 35, 35, 35,
- 36, 36, 36, 36, 37, 37, 37, 38,
- 38, 38, 38, 39, 39, 39, 39, 40,
- 40, 40, 40, 41, 41, 41, 41, 42,
- 42, 42, 42, 42, 43, 43, 43, 43,
- 44, 44, 44, 44, 45, 45, 45, 45,
- 46, 46, 46, 46, 46, 47, 47, 47,
- 47, 48, 48, 48, 48, 48, 49, 49,
- 49, 49, 50, 50, 50, 50, 50, 51,
- 51, 51, 51, 51, 52, 52, 52, 52,
- 52, 53, 53, 53, 53, 53, 54, 54,
- 54, 54, 54, 55, 55, 55, 55, 55,
- 56, 56, 56, 56, 56, 57, 57, 57,
- 57, 57, 57, 58, 58, 58, 58, 58,
- 59, 59, 59, 59, 59, 59, 60, 60,
- 60, 60, 60, 61, 61, 61, 61, 61,
- 61, 62, 62, 62, 62, 62, 62, 63,
- 63, 63, 63, 63, 63, 64, 64, 64
- };
-
-
- FT_LOCAL_DEF( AF_Angle )
- af_angle_atan( FT_Fixed dx,
- FT_Fixed dy )
- {
- AF_Angle angle;
-
-
- /* check trivial cases */
- if ( dy == 0 )
- {
- angle = 0;
- if ( dx < 0 )
- angle = AF_ANGLE_PI;
- return angle;
- }
- else if ( dx == 0 )
- {
- angle = AF_ANGLE_PI2;
- if ( dy < 0 )
- angle = -AF_ANGLE_PI2;
- return angle;
- }
-
- angle = 0;
- if ( dx < 0 )
- {
- dx = -dx;
- dy = -dy;
- angle = AF_ANGLE_PI;
- }
-
- if ( dy < 0 )
- {
- FT_Pos tmp;
-
-
- tmp = dx;
- dx = -dy;
- dy = tmp;
- angle -= AF_ANGLE_PI2;
- }
-
- if ( dx == 0 && dy == 0 )
- return 0;
-
- if ( dx == dy )
- angle += AF_ANGLE_PI4;
- else if ( dx > dy )
- angle += af_arctan[FT_DivFix( dy, dx ) >> ( 16 - AF_ATAN_BITS )];
- else
- angle += AF_ANGLE_PI2 -
- af_arctan[FT_DivFix( dx, dy ) >> ( 16 - AF_ATAN_BITS )];
-
- if ( angle > AF_ANGLE_PI )
- angle -= AF_ANGLE_2PI;
-
- return angle;
- }
-
-
-#endif /* 0 */
-
-
- FT_LOCAL_DEF( void )
- af_sort_pos( FT_UInt count,
- FT_Pos* table )
- {
- FT_UInt i, j;
- FT_Pos swap;
-
-
- for ( i = 1; i < count; i++ )
- {
- for ( j = i; j > 0; j-- )
- {
- if ( table[j] >= table[j - 1] )
- break;
-
- swap = table[j];
- table[j] = table[j - 1];
- table[j - 1] = swap;
- }
- }
- }
-
-
- FT_LOCAL_DEF( void )
- af_sort_and_quantize_widths( FT_UInt* count,
- AF_Width table,
- FT_Pos threshold )
- {
- FT_UInt i, j;
- FT_UInt cur_idx;
- FT_Pos cur_val;
- FT_Pos sum;
- AF_WidthRec swap;
-
-
- if ( *count == 1 )
- return;
-
- /* sort */
- for ( i = 1; i < *count; i++ )
- {
- for ( j = i; j > 0; j-- )
- {
- if ( table[j].org >= table[j - 1].org )
- break;
-
- swap = table[j];
- table[j] = table[j - 1];
- table[j - 1] = swap;
- }
- }
-
- cur_idx = 0;
- cur_val = table[cur_idx].org;
-
- /* compute and use mean values for clusters not larger than */
- /* `threshold'; this is very primitive and might not yield */
- /* the best result, but normally, using reference character */
- /* `o', `*count' is 2, so the code below is fully sufficient */
- for ( i = 1; i < *count; i++ )
- {
- if ( table[i].org - cur_val > threshold ||
- i == *count - 1 )
- {
- sum = 0;
-
- /* fix loop for end of array */
- if ( table[i].org - cur_val <= threshold &&
- i == *count - 1 )
- i++;
-
- for ( j = cur_idx; j < i; j++ )
- {
- sum += table[j].org;
- table[j].org = 0;
- }
- table[cur_idx].org = sum / (FT_Pos)j;
-
- if ( i < *count - 1 )
- {
- cur_idx = i + 1;
- cur_val = table[cur_idx].org;
- }
- }
- }
-
- cur_idx = 1;
-
- /* compress array to remove zero values */
- for ( i = 1; i < *count; i++ )
- {
- if ( table[i].org )
- table[cur_idx++] = table[i];
- }
-
- *count = cur_idx;
- }
-
-
-/* END */
diff --git a/src/autofit/afangles.h b/src/autofit/afangles.h
deleted file mode 100644
index f33f9e108..000000000
--- a/src/autofit/afangles.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/*
- * afangles.h
- *
- * This is a dummy file, used to please the build system. It is never
- * included by the auto-fitter sources.
- *
- */
diff --git a/src/autofit/afblue.c b/src/autofit/afblue.c
deleted file mode 100644
index fedeacf79..000000000
--- a/src/autofit/afblue.c
+++ /dev/null
@@ -1,733 +0,0 @@
-/* This file has been generated by the Perl script `afblue.pl', */
-/* using data from file `afblue.dat'. */
-
-/***************************************************************************/
-/* */
-/* afblue.c */
-/* */
-/* Auto-fitter data for blue strings (body). */
-/* */
-/* Copyright 2013-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "aftypes.h"
-
-
- FT_LOCAL_ARRAY_DEF( char )
- af_blue_strings[] =
- {
- /* */
- '\xF0', '\x9E', '\xA4', '\x8C', ' ', '\xF0', '\x9E', '\xA4', '\x85', ' ', '\xF0', '\x9E', '\xA4', '\x88', ' ', '\xF0', '\x9E', '\xA4', '\x8F', ' ', '\xF0', '\x9E', '\xA4', '\x94', ' ', '\xF0', '\x9E', '\xA4', '\x9A', /* 𞤌 𞤅 𞤈 𞤠𞤔 𞤚 */
- '\0',
- '\xF0', '\x9E', '\xA4', '\x82', ' ', '\xF0', '\x9E', '\xA4', '\x96', /* 𞤂 𞤖 */
- '\0',
- '\xF0', '\x9E', '\xA4', '\xAC', ' ', '\xF0', '\x9E', '\xA4', '\xAE', ' ', '\xF0', '\x9E', '\xA4', '\xBB', ' ', '\xF0', '\x9E', '\xA4', '\xBC', ' ', '\xF0', '\x9E', '\xA4', '\xBE', /* 𞤬 𞤮 𞤻 𞤼 𞤾 */
- '\0',
- '\xF0', '\x9E', '\xA4', '\xA4', ' ', '\xF0', '\x9E', '\xA4', '\xA8', ' ', '\xF0', '\x9E', '\xA4', '\xA9', ' ', '\xF0', '\x9E', '\xA4', '\xAD', ' ', '\xF0', '\x9E', '\xA4', '\xB4', ' ', '\xF0', '\x9E', '\xA4', '\xB8', ' ', '\xF0', '\x9E', '\xA4', '\xBA', ' ', '\xF0', '\x9E', '\xA5', '\x80', /* 𞤤 𞤨 𞤩 𞤭 𞤴 𞤸 𞤺 𞥀 */
- '\0',
- '\xD8', '\xA7', ' ', '\xD8', '\xA5', ' ', '\xD9', '\x84', ' ', '\xD9', '\x83', ' ', '\xD8', '\xB7', ' ', '\xD8', '\xB8', /* ا إ ل ك ط ظ */
- '\0',
- '\xD8', '\xAA', ' ', '\xD8', '\xAB', ' ', '\xD8', '\xB7', ' ', '\xD8', '\xB8', ' ', '\xD9', '\x83', /* ت ث ط ظ ك */
- '\0',
- '\xD9', '\x80', /* Ù€ */
- '\0',
- '\xD4', '\xB1', ' ', '\xD5', '\x84', ' ', '\xD5', '\x92', ' ', '\xD5', '\x8D', ' ', '\xD4', '\xB2', ' ', '\xD4', '\xB3', ' ', '\xD4', '\xB4', ' ', '\xD5', '\x95', /* Ô± Õ„ Õ’ Õ Ô² Ô³ Ô´ Õ• */
- '\0',
- '\xD5', '\x92', ' ', '\xD5', '\x88', ' ', '\xD4', '\xB4', ' ', '\xD5', '\x83', ' ', '\xD5', '\x87', ' ', '\xD5', '\x8D', ' ', '\xD5', '\x8F', ' ', '\xD5', '\x95', /* Õ’ Õˆ Ô´ Õƒ Õ‡ Õ Õ Õ• */
- '\0',
- '\xD5', '\xA5', ' ', '\xD5', '\xA7', ' ', '\xD5', '\xAB', ' ', '\xD5', '\xB4', ' ', '\xD5', '\xBE', ' ', '\xD6', '\x86', ' ', '\xD5', '\xB3', /* Õ¥ Õ§ Õ« Õ´ Õ¾ Ö† Õ³ */
- '\0',
- '\xD5', '\xA1', ' ', '\xD5', '\xB5', ' ', '\xD6', '\x82', ' ', '\xD5', '\xBD', ' ', '\xD5', '\xA3', ' ', '\xD5', '\xB7', ' ', '\xD6', '\x80', ' ', '\xD6', '\x85', /* Õ¡ Õµ Ö‚ Õ½ Õ£ Õ· Ö€ Ö… */
- '\0',
- '\xD5', '\xB0', ' ', '\xD5', '\xB8', ' ', '\xD5', '\xB3', ' ', '\xD5', '\xA1', ' ', '\xD5', '\xA5', ' ', '\xD5', '\xAE', ' ', '\xD5', '\xBD', ' ', '\xD6', '\x85', /* Õ° Õ¸ Õ³ Õ¡ Õ¥ Õ® Õ½ Ö… */
- '\0',
- '\xD5', '\xA2', ' ', '\xD5', '\xA8', ' ', '\xD5', '\xAB', ' ', '\xD5', '\xAC', ' ', '\xD5', '\xB2', ' ', '\xD5', '\xBA', ' ', '\xD6', '\x83', ' ', '\xD6', '\x81', /* Õ¢ Õ¨ Õ« Õ¬ Õ² Õº Öƒ Ö */
- '\0',
- '\xF0', '\x90', '\xAC', '\x80', ' ', '\xF0', '\x90', '\xAC', '\x81', ' ', '\xF0', '\x90', '\xAC', '\x90', ' ', '\xF0', '\x90', '\xAC', '\x9B', /* 𬀠ð¬ ð¬ 𬛠*/
- '\0',
- '\xF0', '\x90', '\xAC', '\x80', ' ', '\xF0', '\x90', '\xAC', '\x81', /* 𬀠ð¬ */
- '\0',
- '\xEA', '\x9A', '\xA7', ' ', '\xEA', '\x9A', '\xA8', ' ', '\xEA', '\x9B', '\x9B', ' ', '\xEA', '\x9B', '\x89', ' ', '\xEA', '\x9B', '\x81', ' ', '\xEA', '\x9B', '\x88', ' ', '\xEA', '\x9B', '\xAB', ' ', '\xEA', '\x9B', '\xAF', /* ꚧ ꚨ ê›› ꛉ ê› ê›ˆ ꛫ ꛯ */
- '\0',
- '\xEA', '\x9A', '\xAD', ' ', '\xEA', '\x9A', '\xB3', ' ', '\xEA', '\x9A', '\xB6', ' ', '\xEA', '\x9B', '\xAC', ' ', '\xEA', '\x9A', '\xA2', ' ', '\xEA', '\x9A', '\xBD', ' ', '\xEA', '\x9B', '\xAF', ' ', '\xEA', '\x9B', '\xB2', /* ꚭ ꚳ ꚶ ꛬ ꚢ ꚽ ꛯ ꛲ */
- '\0',
- '\xE0', '\xA6', '\x85', ' ', '\xE0', '\xA6', '\xA1', ' ', '\xE0', '\xA6', '\xA4', ' ', '\xE0', '\xA6', '\xA8', ' ', '\xE0', '\xA6', '\xAC', ' ', '\xE0', '\xA6', '\xAD', ' ', '\xE0', '\xA6', '\xB2', ' ', '\xE0', '\xA6', '\x95', /* অ ড ত ন ব ভ ল ক */
- '\0',
- '\xE0', '\xA6', '\x87', ' ', '\xE0', '\xA6', '\x9F', ' ', '\xE0', '\xA6', '\xA0', ' ', '\xE0', '\xA6', '\xBF', ' ', '\xE0', '\xA7', '\x80', ' ', '\xE0', '\xA7', '\x88', ' ', '\xE0', '\xA7', '\x97', /* ই ট ঠ ি ী ৈ ৗ */
- '\0',
- '\xE0', '\xA6', '\x93', ' ', '\xE0', '\xA6', '\x8F', ' ', '\xE0', '\xA6', '\xA1', ' ', '\xE0', '\xA6', '\xA4', ' ', '\xE0', '\xA6', '\xA8', ' ', '\xE0', '\xA6', '\xAC', ' ', '\xE0', '\xA6', '\xB2', ' ', '\xE0', '\xA6', '\x95', /* ও ঠড ত ন ব ল ক */
- '\0',
- '\xE1', '\x9D', '\x90', ' ', '\xE1', '\x9D', '\x88', /* á ሠ*/
- '\0',
- '\xE1', '\x9D', '\x85', ' ', '\xE1', '\x9D', '\x8A', ' ', '\xE1', '\x9D', '\x8E', /* á… áŠ áŽ */
- '\0',
- '\xE1', '\x9D', '\x82', ' ', '\xE1', '\x9D', '\x83', ' ', '\xE1', '\x9D', '\x89', ' ', '\xE1', '\x9D', '\x8C', /* Ⴀრበጠ*/
- '\0',
- '\xE1', '\x9D', '\x80', ' ', '\xE1', '\x9D', '\x83', ' ', '\xE1', '\x9D', '\x86', ' ', '\xE1', '\x9D', '\x89', ' ', '\xE1', '\x9D', '\x8B', ' ', '\xE1', '\x9D', '\x8F', ' ', '\xE1', '\x9D', '\x91', /* ဠრᆠበዠá á‘ */
- '\0',
- '\xE1', '\x97', '\x9C', ' ', '\xE1', '\x96', '\xB4', ' ', '\xE1', '\x90', '\x81', ' ', '\xE1', '\x92', '\xA3', ' ', '\xE1', '\x91', '\xAB', ' ', '\xE1', '\x91', '\x8E', ' ', '\xE1', '\x94', '\x91', ' ', '\xE1', '\x97', '\xB0', /* á—œ á–´ á á’£ á‘« á‘Ž ᔑ á—° */
- '\0',
- '\xE1', '\x97', '\xB6', ' ', '\xE1', '\x96', '\xB5', ' ', '\xE1', '\x92', '\xA7', ' ', '\xE1', '\x90', '\x83', ' ', '\xE1', '\x91', '\x8C', ' ', '\xE1', '\x92', '\x8D', ' ', '\xE1', '\x94', '\x91', ' ', '\xE1', '\x97', '\xA2', /* ᗶ ᖵ ᒧ რᑌ ᒠᔑ ᗢ */
- '\0',
- '\xE1', '\x93', '\x93', ' ', '\xE1', '\x93', '\x95', ' ', '\xE1', '\x93', '\x80', ' ', '\xE1', '\x93', '\x82', ' ', '\xE1', '\x93', '\x84', ' ', '\xE1', '\x95', '\x84', ' ', '\xE1', '\x95', '\x86', ' ', '\xE1', '\x98', '\xA3', /* ᓓ ᓕ ᓀ ᓂ ᓄ ᕄ ᕆ ᘣ */
- '\0',
- '\xE1', '\x95', '\x83', ' ', '\xE1', '\x93', '\x82', ' ', '\xE1', '\x93', '\x80', ' ', '\xE1', '\x95', '\x82', ' ', '\xE1', '\x93', '\x97', ' ', '\xE1', '\x93', '\x9A', ' ', '\xE1', '\x95', '\x86', ' ', '\xE1', '\x98', '\xA3', /* ᕃ ᓂ ᓀ ᕂ ᓗ ᓚ ᕆ ᘣ */
- '\0',
- '\xE1', '\x90', '\xAA', ' ', '\xE1', '\x99', '\x86', ' ', '\xE1', '\xA3', '\x98', ' ', '\xE1', '\x90', '\xA2', ' ', '\xE1', '\x92', '\xBE', ' ', '\xE1', '\xA3', '\x97', ' ', '\xE1', '\x94', '\x86', /* ᪠ᙆ ᣘ ᢠᒾ ᣗ ᔆ */
- '\0',
- '\xE1', '\x99', '\x86', ' ', '\xE1', '\x97', '\xAE', ' ', '\xE1', '\x92', '\xBB', ' ', '\xE1', '\x90', '\x9E', ' ', '\xE1', '\x94', '\x86', ' ', '\xE1', '\x92', '\xA1', ' ', '\xE1', '\x92', '\xA2', ' ', '\xE1', '\x93', '\x91', /* ᙆ ᗮ ᒻ ហᔆ ᒡ ᒢ ᓑ */
- '\0',
- '\xF0', '\x90', '\x8A', '\xA7', ' ', '\xF0', '\x90', '\x8A', '\xAB', ' ', '\xF0', '\x90', '\x8A', '\xAC', ' ', '\xF0', '\x90', '\x8A', '\xAD', ' ', '\xF0', '\x90', '\x8A', '\xB1', ' ', '\xF0', '\x90', '\x8A', '\xBA', ' ', '\xF0', '\x90', '\x8A', '\xBC', ' ', '\xF0', '\x90', '\x8A', '\xBF', /* ðŠ§ ðŠ« ðŠ¬ ðŠ­ ðŠ± ðŠº ðŠ¼ ðŠ¿ */
- '\0',
- '\xF0', '\x90', '\x8A', '\xA3', ' ', '\xF0', '\x90', '\x8A', '\xA7', ' ', '\xF0', '\x90', '\x8A', '\xB7', ' ', '\xF0', '\x90', '\x8B', '\x80', ' ', '\xF0', '\x90', '\x8A', '\xAB', ' ', '\xF0', '\x90', '\x8A', '\xB8', ' ', '\xF0', '\x90', '\x8B', '\x89', /* ðŠ£ ðŠ§ ðŠ· ð‹€ ðŠ« ðŠ¸ ð‹‰ */
- '\0',
- '\xF0', '\x91', '\x84', '\x83', ' ', '\xF0', '\x91', '\x84', '\x85', ' ', '\xF0', '\x91', '\x84', '\x89', ' ', '\xF0', '\x91', '\x84', '\x99', ' ', '\xF0', '\x91', '\x84', '\x97', /* 𑄃 𑄅 𑄉 𑄙 𑄗 */
- '\0',
- '\xF0', '\x91', '\x84', '\x85', ' ', '\xF0', '\x91', '\x84', '\x9B', ' ', '\xF0', '\x91', '\x84', '\x9D', ' ', '\xF0', '\x91', '\x84', '\x97', ' ', '\xF0', '\x91', '\x84', '\x93', /* ð‘„… ð‘„› ð‘„ ð‘„— ð‘„“ */
- '\0',
- '\xF0', '\x91', '\x84', '\x96', '\xF0', '\x91', '\x84', '\xB3', '\xF0', '\x91', '\x84', '\xA2', ' ', '\xF0', '\x91', '\x84', '\x98', '\xF0', '\x91', '\x84', '\xB3', '\xF0', '\x91', '\x84', '\xA2', ' ', '\xF0', '\x91', '\x84', '\x99', '\xF0', '\x91', '\x84', '\xB3', '\xF0', '\x91', '\x84', '\xA2', ' ', '\xF0', '\x91', '\x84', '\xA4', '\xF0', '\x91', '\x84', '\xB3', '\xF0', '\x91', '\x84', '\xA2', ' ', '\xF0', '\x91', '\x84', '\xA5', '\xF0', '\x91', '\x84', '\xB3', '\xF0', '\x91', '\x84', '\xA2', /* 𑄖𑄳𑄢 𑄘𑄳𑄢 𑄙𑄳𑄢 𑄤𑄳𑄢 𑄥𑄳𑄢 */
- '\0',
- '\xE1', '\x8F', '\x86', ' ', '\xE1', '\x8E', '\xBB', ' ', '\xE1', '\x8E', '\xAC', ' ', '\xE1', '\x8F', '\x83', ' ', '\xE1', '\x8E', '\xA4', ' ', '\xE1', '\x8F', '\xA3', ' ', '\xE1', '\x8E', '\xA6', ' ', '\xE1', '\x8F', '\x95', /* ᆠᎻ Ꭼ რᎤ ᣠᎦ ᕠ*/
- '\0',
- '\xEA', '\xAE', '\x92', ' ', '\xEA', '\xAE', '\xA4', ' ', '\xEA', '\xAE', '\xB6', ' ', '\xEA', '\xAD', '\xB4', ' ', '\xEA', '\xAD', '\xBE', ' ', '\xEA', '\xAE', '\x97', ' ', '\xEA', '\xAE', '\x9D', ' ', '\xEA', '\xAE', '\xBF', /* ê®’ ꮤ ꮶ ê­´ ê­¾ ê®— ê® ê®¿ */
- '\0',
- '\xEA', '\xAE', '\x96', ' ', '\xEA', '\xAD', '\xBC', ' ', '\xEA', '\xAE', '\x93', ' ', '\xEA', '\xAE', '\xA0', ' ', '\xEA', '\xAE', '\xB3', ' ', '\xEA', '\xAD', '\xB6', ' ', '\xEA', '\xAE', '\xA5', ' ', '\xEA', '\xAE', '\xBB', /* ꮖ ꭼ ꮓ ꮠ ꮳ ꭶ ꮥ ꮻ */
- '\0',
- '\xE1', '\x8F', '\xB8', ' ', '\xEA', '\xAE', '\x90', ' ', '\xEA', '\xAD', '\xB9', ' ', '\xEA', '\xAD', '\xBB', /* á¸ ê® ê­¹ ê­» */
- '\0',
- '\xE2', '\xB2', '\x8C', ' ', '\xE2', '\xB2', '\x8E', ' ', '\xE2', '\xB2', '\xA0', ' ', '\xE2', '\xB3', '\x9E', ' ', '\xE2', '\xB2', '\x9E', ' ', '\xE2', '\xB2', '\x90', ' ', '\xE2', '\xB2', '\xA4', ' ', '\xE2', '\xB3', '\x8A', /* Ⲍ Ⲏ Ⲡ Ⳟ Ⲟ ⲠⲤ Ⳋ */
- '\0',
- '\xE2', '\xB3', '\x90', ' ', '\xE2', '\xB3', '\x98', ' ', '\xE2', '\xB3', '\x9E', ' ', '\xE2', '\xB2', '\x8E', ' ', '\xE2', '\xB2', '\x9E', ' ', '\xE2', '\xB2', '\x90', ' ', '\xE2', '\xB3', '\x9C', ' ', '\xE2', '\xB2', '\xB0', /* ⳠⳘ Ⳟ Ⲏ Ⲟ ⲠⳜ Ⲱ */
- '\0',
- '\xE2', '\xB2', '\x8D', ' ', '\xE2', '\xB2', '\x8F', ' ', '\xE2', '\xB2', '\xA1', ' ', '\xE2', '\xB3', '\x9F', ' ', '\xE2', '\xB2', '\x9F', ' ', '\xE2', '\xB2', '\x91', ' ', '\xE2', '\xB2', '\xA5', ' ', '\xE2', '\xB3', '\x8B', /* ⲠⲠⲡ ⳟ ⲟ ⲑ ⲥ ⳋ */
- '\0',
- '\xE2', '\xB3', '\x91', ' ', '\xE2', '\xB3', '\x99', ' ', '\xE2', '\xB3', '\x9F', ' ', '\xE2', '\xB2', '\x8F', ' ', '\xE2', '\xB2', '\x9F', ' ', '\xE2', '\xB2', '\x91', ' ', '\xE2', '\xB3', '\x9D', ' ', '\xE2', '\xB3', '\x92', /* ⳑ ⳙ ⳟ Ⲡⲟ ⲑ ⳠⳒ */
- '\0',
- '\xF0', '\x90', '\xA0', '\x8D', ' ', '\xF0', '\x90', '\xA0', '\x99', ' ', '\xF0', '\x90', '\xA0', '\xB3', ' ', '\xF0', '\x90', '\xA0', '\xB1', ' ', '\xF0', '\x90', '\xA0', '\x85', ' ', '\xF0', '\x90', '\xA0', '\x93', ' ', '\xF0', '\x90', '\xA0', '\xA3', ' ', '\xF0', '\x90', '\xA0', '\xA6', /* ð  ð ™ ð ³ ð ± ð … ð “ ð £ ð ¦ */
- '\0',
- '\xF0', '\x90', '\xA0', '\x83', ' ', '\xF0', '\x90', '\xA0', '\x8A', ' ', '\xF0', '\x90', '\xA0', '\x9B', ' ', '\xF0', '\x90', '\xA0', '\xA3', ' ', '\xF0', '\x90', '\xA0', '\xB3', ' ', '\xF0', '\x90', '\xA0', '\xB5', ' ', '\xF0', '\x90', '\xA0', '\x90', /* ð ƒ ð Š ð › ð £ ð ³ ð µ ð  */
- '\0',
- '\xF0', '\x90', '\xA0', '\x88', ' ', '\xF0', '\x90', '\xA0', '\x8F', ' ', '\xF0', '\x90', '\xA0', '\x96', /* ð ˆ ð  ð – */
- '\0',
- '\xD0', '\x91', ' ', '\xD0', '\x92', ' ', '\xD0', '\x95', ' ', '\xD0', '\x9F', ' ', '\xD0', '\x97', ' ', '\xD0', '\x9E', ' ', '\xD0', '\xA1', ' ', '\xD0', '\xAD', /* Б В Е П З О С Э */
- '\0',
- '\xD0', '\x91', ' ', '\xD0', '\x92', ' ', '\xD0', '\x95', ' ', '\xD0', '\xA8', ' ', '\xD0', '\x97', ' ', '\xD0', '\x9E', ' ', '\xD0', '\xA1', ' ', '\xD0', '\xAD', /* Б В Е Ш З О С Э */
- '\0',
- '\xD1', '\x85', ' ', '\xD0', '\xBF', ' ', '\xD0', '\xBD', ' ', '\xD1', '\x88', ' ', '\xD0', '\xB5', ' ', '\xD0', '\xB7', ' ', '\xD0', '\xBE', ' ', '\xD1', '\x81', /* Ñ… п н ш е з о Ñ */
- '\0',
- '\xD1', '\x80', ' ', '\xD1', '\x83', ' ', '\xD1', '\x84', /* р у ф */
- '\0',
- '\xF0', '\x90', '\x90', '\x82', ' ', '\xF0', '\x90', '\x90', '\x84', ' ', '\xF0', '\x90', '\x90', '\x8B', ' ', '\xF0', '\x90', '\x90', '\x97', ' ', '\xF0', '\x90', '\x90', '\x91', /* ð‚ ð„ ð‹ ð— ð‘ */
- '\0',
- '\xF0', '\x90', '\x90', '\x80', ' ', '\xF0', '\x90', '\x90', '\x82', ' ', '\xF0', '\x90', '\x90', '\x84', ' ', '\xF0', '\x90', '\x90', '\x97', ' ', '\xF0', '\x90', '\x90', '\x9B', /* ð€ ð‚ ð„ ð— ð› */
- '\0',
- '\xF0', '\x90', '\x90', '\xAA', ' ', '\xF0', '\x90', '\x90', '\xAC', ' ', '\xF0', '\x90', '\x90', '\xB3', ' ', '\xF0', '\x90', '\x90', '\xBF', ' ', '\xF0', '\x90', '\x90', '\xB9', /* ðª ð¬ ð³ ð¿ ð¹ */
- '\0',
- '\xF0', '\x90', '\x90', '\xA8', ' ', '\xF0', '\x90', '\x90', '\xAA', ' ', '\xF0', '\x90', '\x90', '\xAC', ' ', '\xF0', '\x90', '\x90', '\xBF', ' ', '\xF0', '\x90', '\x91', '\x83', /* ð¨ ðª ð¬ ð¿ 𑃠*/
- '\0',
- '\xE0', '\xA4', '\x95', ' ', '\xE0', '\xA4', '\xAE', ' ', '\xE0', '\xA4', '\x85', ' ', '\xE0', '\xA4', '\x86', ' ', '\xE0', '\xA4', '\xA5', ' ', '\xE0', '\xA4', '\xA7', ' ', '\xE0', '\xA4', '\xAD', ' ', '\xE0', '\xA4', '\xB6', /* क म अ आ थ ध भ श */
- '\0',
- '\xE0', '\xA4', '\x88', ' ', '\xE0', '\xA4', '\x90', ' ', '\xE0', '\xA4', '\x93', ' ', '\xE0', '\xA4', '\x94', ' ', '\xE0', '\xA4', '\xBF', ' ', '\xE0', '\xA5', '\x80', ' ', '\xE0', '\xA5', '\x8B', ' ', '\xE0', '\xA5', '\x8C', /* ई ठओ औ ि ी ो ौ */
- '\0',
- '\xE0', '\xA4', '\x95', ' ', '\xE0', '\xA4', '\xAE', ' ', '\xE0', '\xA4', '\x85', ' ', '\xE0', '\xA4', '\x86', ' ', '\xE0', '\xA4', '\xA5', ' ', '\xE0', '\xA4', '\xA7', ' ', '\xE0', '\xA4', '\xAD', ' ', '\xE0', '\xA4', '\xB6', /* क म अ आ थ ध भ श */
- '\0',
- '\xE0', '\xA5', '\x81', ' ', '\xE0', '\xA5', '\x83', /* ॠृ */
- '\0',
- '\xE1', '\x88', '\x80', ' ', '\xE1', '\x88', '\x83', ' ', '\xE1', '\x8B', '\x98', ' ', '\xE1', '\x8D', '\x90', ' ', '\xE1', '\x88', '\x9B', ' ', '\xE1', '\x89', '\xA0', ' ', '\xE1', '\x8B', '\x8B', ' ', '\xE1', '\x8B', '\x90', /* ሀ ሃ ዘ á ማ በ á‹‹ á‹ */
- '\0',
- '\xE1', '\x88', '\x88', ' ', '\xE1', '\x88', '\x90', ' ', '\xE1', '\x89', '\xA0', ' ', '\xE1', '\x8B', '\x98', ' ', '\xE1', '\x88', '\x80', ' ', '\xE1', '\x88', '\xAA', ' ', '\xE1', '\x8B', '\x90', ' ', '\xE1', '\x8C', '\xA8', /* ለ ሠበ ዘ ሀ ሪ ዠጨ */
- '\0',
- '\xE1', '\x83', '\x92', ' ', '\xE1', '\x83', '\x93', ' ', '\xE1', '\x83', '\x94', ' ', '\xE1', '\x83', '\x95', ' ', '\xE1', '\x83', '\x97', ' ', '\xE1', '\x83', '\x98', ' ', '\xE1', '\x83', '\x9D', ' ', '\xE1', '\x83', '\xA6', /* გ დ ე ვ თ ი რღ */
- '\0',
- '\xE1', '\x83', '\x90', ' ', '\xE1', '\x83', '\x96', ' ', '\xE1', '\x83', '\x9B', ' ', '\xE1', '\x83', '\xA1', ' ', '\xE1', '\x83', '\xA8', ' ', '\xE1', '\x83', '\xAB', ' ', '\xE1', '\x83', '\xAE', ' ', '\xE1', '\x83', '\x9E', /* რზ მ ს შ ძ ხ პ */
- '\0',
- '\xE1', '\x83', '\xA1', ' ', '\xE1', '\x83', '\xAE', ' ', '\xE1', '\x83', '\xA5', ' ', '\xE1', '\x83', '\x96', ' ', '\xE1', '\x83', '\x9B', ' ', '\xE1', '\x83', '\xA8', ' ', '\xE1', '\x83', '\xA9', ' ', '\xE1', '\x83', '\xAC', /* ს ხ ქ ზ მ შ ჩ წ */
- '\0',
- '\xE1', '\x83', '\x94', ' ', '\xE1', '\x83', '\x95', ' ', '\xE1', '\x83', '\x9F', ' ', '\xE1', '\x83', '\xA2', ' ', '\xE1', '\x83', '\xA3', ' ', '\xE1', '\x83', '\xA4', ' ', '\xE1', '\x83', '\xA5', ' ', '\xE1', '\x83', '\xA7', /* ე ვ ჟ ტ უ ფ ქ ყ */
- '\0',
- '\xE1', '\x82', '\xB1', ' ', '\xE1', '\x82', '\xA7', ' ', '\xE1', '\x82', '\xB9', ' ', '\xE1', '\x82', '\xBC', ' ', '\xE1', '\x82', '\xA4', ' ', '\xE1', '\x82', '\xA5', ' ', '\xE1', '\x82', '\xB3', ' ', '\xE1', '\x82', '\xBA', /* Ⴑ Ⴇ Ⴙ Ⴜ Ⴄ Ⴅ Ⴓ Ⴚ */
- '\0',
- '\xE1', '\x82', '\xA4', ' ', '\xE1', '\x82', '\xA5', ' ', '\xE1', '\x82', '\xA7', ' ', '\xE1', '\x82', '\xA8', ' ', '\xE1', '\x82', '\xA6', ' ', '\xE1', '\x82', '\xB1', ' ', '\xE1', '\x82', '\xAA', ' ', '\xE1', '\x82', '\xAB', /* Ⴄ Ⴅ Ⴇ Ⴈ Ⴆ Ⴑ Ⴊ Ⴋ */
- '\0',
- '\xE2', '\xB4', '\x81', ' ', '\xE2', '\xB4', '\x97', ' ', '\xE2', '\xB4', '\x82', ' ', '\xE2', '\xB4', '\x84', ' ', '\xE2', '\xB4', '\x85', ' ', '\xE2', '\xB4', '\x87', ' ', '\xE2', '\xB4', '\x94', ' ', '\xE2', '\xB4', '\x96', /* â´ â´— â´‚ â´„ â´… â´‡ â´” â´– */
- '\0',
- '\xE2', '\xB4', '\x88', ' ', '\xE2', '\xB4', '\x8C', ' ', '\xE2', '\xB4', '\x96', ' ', '\xE2', '\xB4', '\x8E', ' ', '\xE2', '\xB4', '\x83', ' ', '\xE2', '\xB4', '\x86', ' ', '\xE2', '\xB4', '\x8B', ' ', '\xE2', '\xB4', '\xA2', /* ⴈ ⴌ ⴖ ⴎ ⴃ ⴆ ⴋ ⴢ */
- '\0',
- '\xE2', '\xB4', '\x90', ' ', '\xE2', '\xB4', '\x91', ' ', '\xE2', '\xB4', '\x93', ' ', '\xE2', '\xB4', '\x95', ' ', '\xE2', '\xB4', '\x99', ' ', '\xE2', '\xB4', '\x9B', ' ', '\xE2', '\xB4', '\xA1', ' ', '\xE2', '\xB4', '\xA3', /* â´ â´‘ â´“ â´• â´™ â´› â´¡ â´£ */
- '\0',
- '\xE2', '\xB4', '\x84', ' ', '\xE2', '\xB4', '\x85', ' ', '\xE2', '\xB4', '\x94', ' ', '\xE2', '\xB4', '\x95', ' ', '\xE2', '\xB4', '\x81', ' ', '\xE2', '\xB4', '\x82', ' ', '\xE2', '\xB4', '\x98', ' ', '\xE2', '\xB4', '\x9D', /* â´„ â´… â´” â´• â´ â´‚ â´˜ â´ */
- '\0',
- '\xE2', '\xB0', '\x85', ' ', '\xE2', '\xB0', '\x94', ' ', '\xE2', '\xB0', '\xAA', ' ', '\xE2', '\xB0', '\x84', ' ', '\xE2', '\xB0', '\x82', ' ', '\xE2', '\xB0', '\x8A', ' ', '\xE2', '\xB0', '\xAB', ' ', '\xE2', '\xB0', '\x8B', /* â°… â°” â°ª â°„ â°‚ â°Š â°« â°‹ */
- '\0',
- '\xE2', '\xB0', '\x85', ' ', '\xE2', '\xB0', '\x84', ' ', '\xE2', '\xB0', '\x82', ' ', '\xE2', '\xB0', '\xAA', ' ', '\xE2', '\xB0', '\x9E', ' ', '\xE2', '\xB0', '\xA1', ' ', '\xE2', '\xB0', '\x8A', ' ', '\xE2', '\xB0', '\x94', /* â°… â°„ â°‚ â°ª â°ž â°¡ â°Š â°” */
- '\0',
- '\xE2', '\xB0', '\xB5', ' ', '\xE2', '\xB1', '\x84', ' ', '\xE2', '\xB1', '\x9A', ' ', '\xE2', '\xB0', '\xB4', ' ', '\xE2', '\xB0', '\xB2', ' ', '\xE2', '\xB0', '\xBA', ' ', '\xE2', '\xB1', '\x9B', ' ', '\xE2', '\xB0', '\xBB', /* ⰵ ⱄ ⱚ ⰴ ⰲ ⰺ ⱛ ⰻ */
- '\0',
- '\xE2', '\xB0', '\xB5', ' ', '\xE2', '\xB0', '\xB4', ' ', '\xE2', '\xB0', '\xB2', ' ', '\xE2', '\xB1', '\x9A', ' ', '\xE2', '\xB1', '\x8E', ' ', '\xE2', '\xB1', '\x91', ' ', '\xE2', '\xB0', '\xBA', ' ', '\xE2', '\xB1', '\x84', /* ⰵ ⰴ ⰲ ⱚ ⱎ ⱑ ⰺ ⱄ */
- '\0',
- '\xF0', '\x90', '\x8C', '\xB2', ' ', '\xF0', '\x90', '\x8C', '\xB6', ' ', '\xF0', '\x90', '\x8D', '\x80', ' ', '\xF0', '\x90', '\x8D', '\x84', ' ', '\xF0', '\x90', '\x8C', '\xB4', ' ', '\xF0', '\x90', '\x8D', '\x83', ' ', '\xF0', '\x90', '\x8D', '\x88', ' ', '\xF0', '\x90', '\x8C', '\xBE', /* ðŒ² ðŒ¶ ð€ ð„ ðŒ´ ðƒ ðˆ ðŒ¾ */
- '\0',
- '\xF0', '\x90', '\x8C', '\xB6', ' ', '\xF0', '\x90', '\x8C', '\xB4', ' ', '\xF0', '\x90', '\x8D', '\x83', ' ', '\xF0', '\x90', '\x8D', '\x88', /* ðŒ¶ ðŒ´ ðƒ ðˆ */
- '\0',
- '\xCE', '\x93', ' ', '\xCE', '\x92', ' ', '\xCE', '\x95', ' ', '\xCE', '\x96', ' ', '\xCE', '\x98', ' ', '\xCE', '\x9F', ' ', '\xCE', '\xA9', /* Γ Β Ε Ζ Θ Ο Ω */
- '\0',
- '\xCE', '\x92', ' ', '\xCE', '\x94', ' ', '\xCE', '\x96', ' ', '\xCE', '\x9E', ' ', '\xCE', '\x98', ' ', '\xCE', '\x9F', /* Β Δ Ζ Ξ Θ Ο */
- '\0',
- '\xCE', '\xB2', ' ', '\xCE', '\xB8', ' ', '\xCE', '\xB4', ' ', '\xCE', '\xB6', ' ', '\xCE', '\xBB', ' ', '\xCE', '\xBE', /* β θ δ ζ λ ξ */
- '\0',
- '\xCE', '\xB1', ' ', '\xCE', '\xB5', ' ', '\xCE', '\xB9', ' ', '\xCE', '\xBF', ' ', '\xCF', '\x80', ' ', '\xCF', '\x83', ' ', '\xCF', '\x84', ' ', '\xCF', '\x89', /* α ε ι ο π σ τ ω */
- '\0',
- '\xCE', '\xB2', ' ', '\xCE', '\xB3', ' ', '\xCE', '\xB7', ' ', '\xCE', '\xBC', ' ', '\xCF', '\x81', ' ', '\xCF', '\x86', ' ', '\xCF', '\x87', ' ', '\xCF', '\x88', /* β γ η μ Ï Ï† χ ψ */
- '\0',
- '\xE0', '\xAA', '\xA4', ' ', '\xE0', '\xAA', '\xA8', ' ', '\xE0', '\xAA', '\x8B', ' ', '\xE0', '\xAA', '\x8C', ' ', '\xE0', '\xAA', '\x9B', ' ', '\xE0', '\xAA', '\x9F', ' ', '\xE0', '\xAA', '\xB0', ' ', '\xE0', '\xAB', '\xA6', /* ત ન ઋ ઌ છ ટ ર ૦ */
- '\0',
- '\xE0', '\xAA', '\x96', ' ', '\xE0', '\xAA', '\x97', ' ', '\xE0', '\xAA', '\x98', ' ', '\xE0', '\xAA', '\x9E', ' ', '\xE0', '\xAA', '\x87', ' ', '\xE0', '\xAA', '\x88', ' ', '\xE0', '\xAA', '\xA0', ' ', '\xE0', '\xAA', '\x9C', /* ખ ગ ઘ ઞ ઇ ઈ ઠ જ */
- '\0',
- '\xE0', '\xAA', '\x88', ' ', '\xE0', '\xAA', '\x8A', ' ', '\xE0', '\xAA', '\xBF', ' ', '\xE0', '\xAB', '\x80', ' ', '\xE0', '\xAA', '\xB2', '\xE0', '\xAB', '\x80', ' ', '\xE0', '\xAA', '\xB6', '\xE0', '\xAB', '\x8D', '\xE0', '\xAA', '\x9A', '\xE0', '\xAA', '\xBF', ' ', '\xE0', '\xAA', '\x9C', '\xE0', '\xAA', '\xBF', ' ', '\xE0', '\xAA', '\xB8', '\xE0', '\xAB', '\x80', /* ઈ ઊ િ à«€ લી શà«àªšàª¿ જિ સી */
- '\0',
- '\xE0', '\xAB', '\x81', ' ', '\xE0', '\xAB', '\x83', ' ', '\xE0', '\xAB', '\x84', ' ', '\xE0', '\xAA', '\x96', '\xE0', '\xAB', '\x81', ' ', '\xE0', '\xAA', '\x9B', '\xE0', '\xAB', '\x83', ' ', '\xE0', '\xAA', '\x9B', '\xE0', '\xAB', '\x84', /* ૠૃ ૄ ખૠછૃ છૄ */
- '\0',
- '\xE0', '\xAB', '\xA6', ' ', '\xE0', '\xAB', '\xA7', ' ', '\xE0', '\xAB', '\xA8', ' ', '\xE0', '\xAB', '\xA9', ' ', '\xE0', '\xAB', '\xAD', /* ૦ ૧ ૨ ૩ ૭ */
- '\0',
- '\xE0', '\xA8', '\x95', ' ', '\xE0', '\xA8', '\x97', ' ', '\xE0', '\xA8', '\x99', ' ', '\xE0', '\xA8', '\x9A', ' ', '\xE0', '\xA8', '\x9C', ' ', '\xE0', '\xA8', '\xA4', ' ', '\xE0', '\xA8', '\xA7', ' ', '\xE0', '\xA8', '\xB8', /* ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ */
- '\0',
- '\xE0', '\xA8', '\x95', ' ', '\xE0', '\xA8', '\x97', ' ', '\xE0', '\xA8', '\x99', ' ', '\xE0', '\xA8', '\x9A', ' ', '\xE0', '\xA8', '\x9C', ' ', '\xE0', '\xA8', '\xA4', ' ', '\xE0', '\xA8', '\xA7', ' ', '\xE0', '\xA8', '\xB8', /* ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ */
- '\0',
- '\xE0', '\xA8', '\x87', ' ', '\xE0', '\xA8', '\x88', ' ', '\xE0', '\xA8', '\x89', ' ', '\xE0', '\xA8', '\x8F', ' ', '\xE0', '\xA8', '\x93', ' ', '\xE0', '\xA9', '\xB3', ' ', '\xE0', '\xA8', '\xBF', ' ', '\xE0', '\xA9', '\x80', /* ਇ ਈ ਉ ਠਓ ੳ ਿ ੀ */
- '\0',
- '\xE0', '\xA8', '\x85', ' ', '\xE0', '\xA8', '\x8F', ' ', '\xE0', '\xA8', '\x93', ' ', '\xE0', '\xA8', '\x97', ' ', '\xE0', '\xA8', '\x9C', ' ', '\xE0', '\xA8', '\xA0', ' ', '\xE0', '\xA8', '\xB0', ' ', '\xE0', '\xA8', '\xB8', /* ਅ ਠਓ ਗ ਜ ਠ ਰ ਸ */
- '\0',
- '\xE0', '\xA9', '\xA6', ' ', '\xE0', '\xA9', '\xA7', ' ', '\xE0', '\xA9', '\xA8', ' ', '\xE0', '\xA9', '\xA9', ' ', '\xE0', '\xA9', '\xAD', /* ੦ ੧ ੨ ੩ ੭ */
- '\0',
- '\xD7', '\x91', ' ', '\xD7', '\x93', ' ', '\xD7', '\x94', ' ', '\xD7', '\x97', ' ', '\xD7', '\x9A', ' ', '\xD7', '\x9B', ' ', '\xD7', '\x9D', ' ', '\xD7', '\xA1', /* ב ד ×” ×— ך ×› × ×¡ */
- '\0',
- '\xD7', '\x91', ' ', '\xD7', '\x98', ' ', '\xD7', '\x9B', ' ', '\xD7', '\x9D', ' ', '\xD7', '\xA1', ' ', '\xD7', '\xA6', /* ב ט ×› × ×¡ צ */
- '\0',
- '\xD7', '\xA7', ' ', '\xD7', '\x9A', ' ', '\xD7', '\x9F', ' ', '\xD7', '\xA3', ' ', '\xD7', '\xA5', /* ק ך ן ף ץ */
- '\0',
- '\xE0', '\xB2', '\x87', ' ', '\xE0', '\xB2', '\x8A', ' ', '\xE0', '\xB2', '\x90', ' ', '\xE0', '\xB2', '\xA3', ' ', '\xE0', '\xB2', '\xB8', '\xE0', '\xB2', '\xBE', ' ', '\xE0', '\xB2', '\xA8', '\xE0', '\xB2', '\xBE', ' ', '\xE0', '\xB2', '\xA6', '\xE0', '\xB2', '\xBE', ' ', '\xE0', '\xB2', '\xB0', '\xE0', '\xB2', '\xBE', /* ಇ ಊ ಠಣ ಸಾ ನಾ ದಾ ರಾ */
- '\0',
- '\xE0', '\xB2', '\x85', ' ', '\xE0', '\xB2', '\x89', ' ', '\xE0', '\xB2', '\x8E', ' ', '\xE0', '\xB2', '\xB2', ' ', '\xE0', '\xB3', '\xA6', ' ', '\xE0', '\xB3', '\xA8', ' ', '\xE0', '\xB3', '\xAC', ' ', '\xE0', '\xB3', '\xAD', /* ಅ ಉ ಎ ಲ ೦ ೨ ೬ ೭ */
- '\0',
- '\xEA', '\xA4', '\x85', ' ', '\xEA', '\xA4', '\x8F', ' ', '\xEA', '\xA4', '\x81', ' ', '\xEA', '\xA4', '\x8B', ' ', '\xEA', '\xA4', '\x80', ' ', '\xEA', '\xA4', '\x8D', /* ꤅ ê¤ ê¤ ê¤‹ ꤀ ê¤ */
- '\0',
- '\xEA', '\xA4', '\x88', ' ', '\xEA', '\xA4', '\x98', ' ', '\xEA', '\xA4', '\x80', ' ', '\xEA', '\xA4', '\x8D', ' ', '\xEA', '\xA4', '\xA2', /* ꤈ ꤘ ꤀ ê¤ ê¤¢ */
- '\0',
- '\xEA', '\xA4', '\x96', ' ', '\xEA', '\xA4', '\xA1', /* ꤖ ꤡ */
- '\0',
- '\xEA', '\xA4', '\x91', ' ', '\xEA', '\xA4', '\x9C', ' ', '\xEA', '\xA4', '\x9E', /* ꤑ ꤜ ꤞ */
- '\0',
- '\xEA', '\xA4', '\x91', '\xEA', '\xA4', '\xAC', ' ', '\xEA', '\xA4', '\x9C', '\xEA', '\xA4', '\xAD', ' ', '\xEA', '\xA4', '\x94', '\xEA', '\xA4', '\xAC', /* ꤑ꤬ ꤜ꤭ ꤔ꤬ */
- '\0',
- '\xE1', '\x9E', '\x81', ' ', '\xE1', '\x9E', '\x91', ' ', '\xE1', '\x9E', '\x93', ' ', '\xE1', '\x9E', '\xA7', ' ', '\xE1', '\x9E', '\xA9', ' ', '\xE1', '\x9E', '\xB6', /* ហទ ន ឧ ឩ ា */
- '\0',
- '\xE1', '\x9E', '\x80', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x80', ' ', '\xE1', '\x9E', '\x80', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x81', ' ', '\xE1', '\x9E', '\x80', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x82', ' ', '\xE1', '\x9E', '\x80', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x90', /* ក្ក ក្ហក្គ ក្ហ*/
- '\0',
- '\xE1', '\x9E', '\x81', ' ', '\xE1', '\x9E', '\x83', ' ', '\xE1', '\x9E', '\x85', ' ', '\xE1', '\x9E', '\x8B', ' ', '\xE1', '\x9E', '\x94', ' ', '\xE1', '\x9E', '\x98', ' ', '\xE1', '\x9E', '\x99', ' ', '\xE1', '\x9E', '\xB2', /* ហឃ ច ឋ ប ម យ ឲ */
- '\0',
- '\xE1', '\x9E', '\x8F', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x9A', ' ', '\xE1', '\x9E', '\x9A', '\xE1', '\x9F', '\x80', ' ', '\xE1', '\x9E', '\xB2', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x99', ' ', '\xE1', '\x9E', '\xA2', '\xE1', '\x9E', '\xBF', /* ážáŸ’ážš រៀ ឲ្យ អឿ */
- '\0',
- '\xE1', '\x9E', '\x93', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x8F', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x9A', '\xE1', '\x9F', '\x83', ' ', '\xE1', '\x9E', '\x84', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x81', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x99', ' ', '\xE1', '\x9E', '\x80', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x94', '\xE1', '\x9F', '\x80', ' ', '\xE1', '\x9E', '\x85', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x9A', '\xE1', '\x9F', '\x80', ' ', '\xE1', '\x9E', '\x93', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x8F', '\xE1', '\x9E', '\xBF', ' ', '\xE1', '\x9E', '\x9B', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x94', '\xE1', '\x9E', '\xBF', /* ន្ážáŸ’រៃ ង្ážáŸ’áž™ ក្បៀ ច្រៀ ន្ážáž¿ ល្បឿ */
- '\0',
- '\xE1', '\xA7', '\xA0', ' ', '\xE1', '\xA7', '\xA1', /* ᧠ ᧡ */
- '\0',
- '\xE1', '\xA7', '\xB6', ' ', '\xE1', '\xA7', '\xB9', /* ᧶ ᧹ */
- '\0',
- '\xE0', '\xBA', '\xB2', ' ', '\xE0', '\xBA', '\x94', ' ', '\xE0', '\xBA', '\xAD', ' ', '\xE0', '\xBA', '\xA1', ' ', '\xE0', '\xBA', '\xA5', ' ', '\xE0', '\xBA', '\xA7', ' ', '\xE0', '\xBA', '\xA3', ' ', '\xE0', '\xBA', '\x87', /* າ ດ ອ ມ ລ ວ ຣ ງ */
- '\0',
- '\xE0', '\xBA', '\xB2', ' ', '\xE0', '\xBA', '\xAD', ' ', '\xE0', '\xBA', '\x9A', ' ', '\xE0', '\xBA', '\x8D', ' ', '\xE0', '\xBA', '\xA3', ' ', '\xE0', '\xBA', '\xAE', ' ', '\xE0', '\xBA', '\xA7', ' ', '\xE0', '\xBA', '\xA2', /* າ ອ ບ ຠຣ ຮ ວ ຢ */
- '\0',
- '\xE0', '\xBA', '\x9B', ' ', '\xE0', '\xBA', '\xA2', ' ', '\xE0', '\xBA', '\x9F', ' ', '\xE0', '\xBA', '\x9D', /* ປ ຢ ຟ ຠ*/
- '\0',
- '\xE0', '\xBB', '\x82', ' ', '\xE0', '\xBB', '\x84', ' ', '\xE0', '\xBB', '\x83', /* ໂ ໄ ໃ */
- '\0',
- '\xE0', '\xBA', '\x87', ' ', '\xE0', '\xBA', '\x8A', ' ', '\xE0', '\xBA', '\x96', ' ', '\xE0', '\xBA', '\xBD', ' ', '\xE0', '\xBB', '\x86', ' ', '\xE0', '\xBA', '\xAF', /* ງ ຊ ຖ ຽ ໆ ຯ */
- '\0',
- 'T', ' ', 'H', ' ', 'E', ' ', 'Z', ' ', 'O', ' ', 'C', ' ', 'Q', ' ', 'S', /* T H E Z O C Q S */
- '\0',
- 'H', ' ', 'E', ' ', 'Z', ' ', 'L', ' ', 'O', ' ', 'C', ' ', 'U', ' ', 'S', /* H E Z L O C U S */
- '\0',
- 'f', ' ', 'i', ' ', 'j', ' ', 'k', ' ', 'd', ' ', 'b', ' ', 'h', /* f i j k d b h */
- '\0',
- 'u', ' ', 'v', ' ', 'x', ' ', 'z', ' ', 'o', ' ', 'e', ' ', 's', ' ', 'c', /* u v x z o e s c */
- '\0',
- 'n', ' ', 'r', ' ', 'x', ' ', 'z', ' ', 'o', ' ', 'e', ' ', 's', ' ', 'c', /* n r x z o e s c */
- '\0',
- 'p', ' ', 'q', ' ', 'g', ' ', 'j', ' ', 'y', /* p q g j y */
- '\0',
- '\xE2', '\x82', '\x80', ' ', '\xE2', '\x82', '\x83', ' ', '\xE2', '\x82', '\x85', ' ', '\xE2', '\x82', '\x87', ' ', '\xE2', '\x82', '\x88', /* ₀ ₃ ₅ ₇ ₈ */
- '\0',
- '\xE2', '\x82', '\x80', ' ', '\xE2', '\x82', '\x81', ' ', '\xE2', '\x82', '\x82', ' ', '\xE2', '\x82', '\x83', ' ', '\xE2', '\x82', '\x88', /* ₀ ₠₂ ₃ ₈ */
- '\0',
- '\xE1', '\xB5', '\xA2', ' ', '\xE2', '\xB1', '\xBC', ' ', '\xE2', '\x82', '\x95', ' ', '\xE2', '\x82', '\x96', ' ', '\xE2', '\x82', '\x97', /* áµ¢ â±¼ â‚• â‚– â‚— */
- '\0',
- '\xE2', '\x82', '\x90', ' ', '\xE2', '\x82', '\x91', ' ', '\xE2', '\x82', '\x92', ' ', '\xE2', '\x82', '\x93', ' ', '\xE2', '\x82', '\x99', ' ', '\xE2', '\x82', '\x9B', ' ', '\xE1', '\xB5', '\xA5', ' ', '\xE1', '\xB5', '\xA4', ' ', '\xE1', '\xB5', '\xA3', /* ₠ₑ ₒ ₓ ₙ ₛ ᵥ ᵤ ᵣ */
- '\0',
- '\xE1', '\xB5', '\xA6', ' ', '\xE1', '\xB5', '\xA7', ' ', '\xE1', '\xB5', '\xA8', ' ', '\xE1', '\xB5', '\xA9', ' ', '\xE2', '\x82', '\x9A', /* ᵦ ᵧ ᵨ ᵩ ₚ */
- '\0',
- '\xE2', '\x81', '\xB0', ' ', '\xC2', '\xB3', ' ', '\xE2', '\x81', '\xB5', ' ', '\xE2', '\x81', '\xB7', ' ', '\xE1', '\xB5', '\x80', ' ', '\xE1', '\xB4', '\xB4', ' ', '\xE1', '\xB4', '\xB1', ' ', '\xE1', '\xB4', '\xBC', /* Ⱐ³ ⵠⷠᵀ ᴴ ᴱ ᴼ */
- '\0',
- '\xE2', '\x81', '\xB0', ' ', '\xC2', '\xB9', ' ', '\xC2', '\xB2', ' ', '\xC2', '\xB3', ' ', '\xE1', '\xB4', '\xB1', ' ', '\xE1', '\xB4', '\xB8', ' ', '\xE1', '\xB4', '\xBC', ' ', '\xE1', '\xB5', '\x81', /* Ⱐ¹ ² ³ ᴱ ᴸ ᴼ ᵠ*/
- '\0',
- '\xE1', '\xB5', '\x87', ' ', '\xE1', '\xB5', '\x88', ' ', '\xE1', '\xB5', '\x8F', ' ', '\xCA', '\xB0', ' ', '\xCA', '\xB2', ' ', '\xE1', '\xB6', '\xA0', ' ', '\xE2', '\x81', '\xB1', /* ᵇ ᵈ ᵠʰ ʲ ᶠ Ⱡ*/
- '\0',
- '\xE1', '\xB5', '\x89', ' ', '\xE1', '\xB5', '\x92', ' ', '\xCA', '\xB3', ' ', '\xCB', '\xA2', ' ', '\xCB', '\xA3', ' ', '\xE1', '\xB6', '\x9C', ' ', '\xE1', '\xB6', '\xBB', /* ᵉ ᵒ ʳ ˢ ˣ ᶜ ᶻ */
- '\0',
- '\xE1', '\xB5', '\x96', ' ', '\xCA', '\xB8', ' ', '\xE1', '\xB5', '\x8D', /* ᵖ ʸ ᵠ*/
- '\0',
- '\xEA', '\x93', '\xA1', ' ', '\xEA', '\x93', '\xA7', ' ', '\xEA', '\x93', '\xB1', ' ', '\xEA', '\x93', '\xB6', ' ', '\xEA', '\x93', '\xA9', ' ', '\xEA', '\x93', '\x9A', ' ', '\xEA', '\x93', '\xB5', ' ', '\xEA', '\x93', '\xB3', /* ꓡ ꓧ ꓱ ꓶ ꓩ ꓚ ꓵ ꓳ */
- '\0',
- '\xEA', '\x93', '\x95', ' ', '\xEA', '\x93', '\x9C', ' ', '\xEA', '\x93', '\x9E', ' ', '\xEA', '\x93', '\xA1', ' ', '\xEA', '\x93', '\x9B', ' ', '\xEA', '\x93', '\xA2', ' ', '\xEA', '\x93', '\xB3', ' ', '\xEA', '\x93', '\xB4', /* ꓕ ꓜ ꓞ ꓡ ꓛ ꓢ ꓳ ꓴ */
- '\0',
- '\xE0', '\xB4', '\x92', ' ', '\xE0', '\xB4', '\x9F', ' ', '\xE0', '\xB4', '\xA0', ' ', '\xE0', '\xB4', '\xB1', ' ', '\xE0', '\xB4', '\x9A', ' ', '\xE0', '\xB4', '\xAA', ' ', '\xE0', '\xB4', '\x9A', '\xE0', '\xB5', '\x8D', '\xE0', '\xB4', '\x9A', ' ', '\xE0', '\xB4', '\xAA', '\xE0', '\xB5', '\x8D', '\xE0', '\xB4', '\xAA', /* à´’ à´Ÿ à´  à´± à´š à´ª à´šàµà´š à´ªàµà´ª */
- '\0',
- '\xE0', '\xB4', '\x9F', ' ', '\xE0', '\xB4', '\xA0', ' ', '\xE0', '\xB4', '\xA7', ' ', '\xE0', '\xB4', '\xB6', ' ', '\xE0', '\xB4', '\x98', ' ', '\xE0', '\xB4', '\x9A', ' ', '\xE0', '\xB4', '\xA5', ' ', '\xE0', '\xB4', '\xB2', /* à´Ÿ à´  à´§ à´¶ à´˜ à´š à´¥ à´² */
- '\0',
- '\xE1', '\x80', '\x81', ' ', '\xE1', '\x80', '\x82', ' ', '\xE1', '\x80', '\x84', ' ', '\xE1', '\x80', '\x92', ' ', '\xE1', '\x80', '\x9D', ' ', '\xE1', '\x81', '\xA5', ' ', '\xE1', '\x81', '\x8A', ' ', '\xE1', '\x81', '\x8B', /* ဠဂ င ဒ ဠᥠአዠ*/
- '\0',
- '\xE1', '\x80', '\x84', ' ', '\xE1', '\x80', '\x8E', ' ', '\xE1', '\x80', '\x92', ' ', '\xE1', '\x80', '\x95', ' ', '\xE1', '\x80', '\x97', ' ', '\xE1', '\x80', '\x9D', ' ', '\xE1', '\x81', '\x8A', ' ', '\xE1', '\x81', '\x8B', /* င ဎ ဒ ပ ဗ ဠአዠ*/
- '\0',
- '\xE1', '\x80', '\xA9', ' ', '\xE1', '\x80', '\xBC', ' ', '\xE1', '\x81', '\x8D', ' ', '\xE1', '\x81', '\x8F', ' ', '\xE1', '\x81', '\x86', ' ', '\xE1', '\x80', '\xAB', ' ', '\xE1', '\x80', '\xAD', /* ဩ ြ á á ᆠါ ိ */
- '\0',
- '\xE1', '\x80', '\x89', ' ', '\xE1', '\x80', '\x8A', ' ', '\xE1', '\x80', '\xA5', ' ', '\xE1', '\x80', '\xA9', ' ', '\xE1', '\x80', '\xA8', ' ', '\xE1', '\x81', '\x82', ' ', '\xE1', '\x81', '\x85', ' ', '\xE1', '\x81', '\x89', /* ဉ ည ဥ ဩ ဨ á‚ á… á‰ */
- '\0',
- '\xDF', '\x90', ' ', '\xDF', '\x89', ' ', '\xDF', '\x92', ' ', '\xDF', '\x9F', ' ', '\xDF', '\x96', ' ', '\xDF', '\x9C', ' ', '\xDF', '\xA0', ' ', '\xDF', '\xA5', /* ß ß‰ ß’ ߟ ß– ßœ ß  ߥ */
- '\0',
- '\xDF', '\x80', ' ', '\xDF', '\x98', ' ', '\xDF', '\xA1', ' ', '\xDF', '\xA0', ' ', '\xDF', '\xA5', /* ߀ ߘ ߡ ߠ ߥ */
- '\0',
- '\xDF', '\x8F', ' ', '\xDF', '\x9B', ' ', '\xDF', '\x8B', /* ß ß› ß‹ */
- '\0',
- '\xDF', '\x8E', ' ', '\xDF', '\x8F', ' ', '\xDF', '\x9B', ' ', '\xDF', '\x8B', /* ߎ ß ß› ß‹ */
- '\0',
- '\xE1', '\xB1', '\x9B', ' ', '\xE1', '\xB1', '\x9C', ' ', '\xE1', '\xB1', '\x9D', ' ', '\xE1', '\xB1', '\xA1', ' ', '\xE1', '\xB1', '\xA2', ' ', '\xE1', '\xB1', '\xA5', /* ᱛ ᱜ ᱠᱡ ᱢ ᱥ */
- '\0',
- '\xF0', '\x90', '\xB0', '\x97', ' ', '\xF0', '\x90', '\xB0', '\x98', ' ', '\xF0', '\x90', '\xB0', '\xA7', /* ð°— ð°˜ ð°§ */
- '\0',
- '\xF0', '\x90', '\xB0', '\x89', ' ', '\xF0', '\x90', '\xB0', '\x97', ' ', '\xF0', '\x90', '\xB0', '\xA6', ' ', '\xF0', '\x90', '\xB0', '\xA7', /* ð°‰ ð°— ð°¦ ð°§ */
- '\0',
- '\xF0', '\x90', '\x92', '\xBE', ' ', '\xF0', '\x90', '\x93', '\x8D', ' ', '\xF0', '\x90', '\x93', '\x92', ' ', '\xF0', '\x90', '\x93', '\x93', ' ', '\xF0', '\x90', '\x92', '\xBB', ' ', '\xF0', '\x90', '\x93', '\x82', ' ', '\xF0', '\x90', '\x92', '\xB5', ' ', '\xF0', '\x90', '\x93', '\x86', /* ð’¾ ð“ 𓒠𓓠𒻠𓂠𒵠𓆠*/
- '\0',
- '\xF0', '\x90', '\x92', '\xB0', ' ', '\xF0', '\x90', '\x93', '\x8D', ' ', '\xF0', '\x90', '\x93', '\x82', ' ', '\xF0', '\x90', '\x92', '\xBF', ' ', '\xF0', '\x90', '\x93', '\x8E', ' ', '\xF0', '\x90', '\x92', '\xB9', /* ð’° ð“ ð“‚ ð’¿ ð“Ž ð’¹ */
- '\0',
- '\xF0', '\x90', '\x92', '\xBC', ' ', '\xF0', '\x90', '\x92', '\xBD', ' ', '\xF0', '\x90', '\x92', '\xBE', /* ð’¼ ð’½ ð’¾ */
- '\0',
- '\xF0', '\x90', '\x93', '\xB5', ' ', '\xF0', '\x90', '\x93', '\xB6', ' ', '\xF0', '\x90', '\x93', '\xBA', ' ', '\xF0', '\x90', '\x93', '\xBB', ' ', '\xF0', '\x90', '\x93', '\x9D', ' ', '\xF0', '\x90', '\x93', '\xA3', ' ', '\xF0', '\x90', '\x93', '\xAA', ' ', '\xF0', '\x90', '\x93', '\xAE', /* 𓵠𓶠𓺠𓻠ð“ 𓣠𓪠𓮠*/
- '\0',
- '\xF0', '\x90', '\x93', '\x98', ' ', '\xF0', '\x90', '\x93', '\x9A', ' ', '\xF0', '\x90', '\x93', '\xA3', ' ', '\xF0', '\x90', '\x93', '\xB5', ' ', '\xF0', '\x90', '\x93', '\xA1', ' ', '\xF0', '\x90', '\x93', '\xA7', ' ', '\xF0', '\x90', '\x93', '\xAA', ' ', '\xF0', '\x90', '\x93', '\xB6', /* 𓘠𓚠𓣠𓵠𓡠𓧠𓪠𓶠*/
- '\0',
- '\xF0', '\x90', '\x93', '\xA4', ' ', '\xF0', '\x90', '\x93', '\xA6', ' ', '\xF0', '\x90', '\x93', '\xB8', ' ', '\xF0', '\x90', '\x93', '\xB9', ' ', '\xF0', '\x90', '\x93', '\x9B', /* 𓤠𓦠𓸠𓹠𓛠*/
- '\0',
- '\xF0', '\x90', '\x93', '\xA4', ' ', '\xF0', '\x90', '\x93', '\xA5', ' ', '\xF0', '\x90', '\x93', '\xA6', /* 𓤠𓥠𓦠*/
- '\0',
- '\xF0', '\x90', '\x92', '\x86', ' ', '\xF0', '\x90', '\x92', '\x89', ' ', '\xF0', '\x90', '\x92', '\x90', ' ', '\xF0', '\x90', '\x92', '\x92', ' ', '\xF0', '\x90', '\x92', '\x98', ' ', '\xF0', '\x90', '\x92', '\x9B', ' ', '\xF0', '\x90', '\x92', '\xA0', ' ', '\xF0', '\x90', '\x92', '\xA3', /* ð’† ð’‰ ð’ ð’’ ð’˜ ð’› ð’  ð’£ */
- '\0',
- '\xF0', '\x90', '\x92', '\x80', ' ', '\xF0', '\x90', '\x92', '\x82', ' ', '\xF0', '\x90', '\x92', '\x86', ' ', '\xF0', '\x90', '\x92', '\x88', ' ', '\xF0', '\x90', '\x92', '\x8A', ' ', '\xF0', '\x90', '\x92', '\x92', ' ', '\xF0', '\x90', '\x92', '\xA0', ' ', '\xF0', '\x90', '\x92', '\xA9', /* ð’€ ð’‚ ð’† ð’ˆ ð’Š ð’’ ð’  ð’© */
- '\0',
- '\xEA', '\xA2', '\x9C', ' ', '\xEA', '\xA2', '\x9E', ' ', '\xEA', '\xA2', '\xB3', ' ', '\xEA', '\xA2', '\x82', ' ', '\xEA', '\xA2', '\x96', ' ', '\xEA', '\xA2', '\x92', ' ', '\xEA', '\xA2', '\x9D', ' ', '\xEA', '\xA2', '\x9B', /* ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ê¢ ê¢› */
- '\0',
- '\xEA', '\xA2', '\x82', ' ', '\xEA', '\xA2', '\xA8', ' ', '\xEA', '\xA2', '\xBA', ' ', '\xEA', '\xA2', '\xA4', ' ', '\xEA', '\xA2', '\x8E', /* ꢂ ꢨ ꢺ ꢤ ꢎ */
- '\0',
- '\xF0', '\x90', '\x91', '\x95', ' ', '\xF0', '\x90', '\x91', '\x99', /* ð‘• ð‘™ */
- '\0',
- '\xF0', '\x90', '\x91', '\x94', ' ', '\xF0', '\x90', '\x91', '\x96', ' ', '\xF0', '\x90', '\x91', '\x97', ' ', '\xF0', '\x90', '\x91', '\xB9', ' ', '\xF0', '\x90', '\x91', '\xBB', /* 𑔠𑖠𑗠𑹠𑻠*/
- '\0',
- '\xF0', '\x90', '\x91', '\x9F', ' ', '\xF0', '\x90', '\x91', '\xA3', /* ð‘Ÿ ð‘£ */
- '\0',
- '\xF0', '\x90', '\x91', '\xB1', ' ', '\xF0', '\x90', '\x91', '\xB2', ' ', '\xF0', '\x90', '\x91', '\xB3', ' ', '\xF0', '\x90', '\x91', '\xB4', ' ', '\xF0', '\x90', '\x91', '\xB8', ' ', '\xF0', '\x90', '\x91', '\xBA', ' ', '\xF0', '\x90', '\x91', '\xBC', /* 𑱠𑲠𑳠𑴠𑸠𑺠𑼠*/
- '\0',
- '\xF0', '\x90', '\x91', '\xB4', ' ', '\xF0', '\x90', '\x91', '\xBB', ' ', '\xF0', '\x90', '\x91', '\xB9', /* 𑴠𑻠𑹠*/
- '\0',
- '\xE0', '\xB6', '\x89', ' ', '\xE0', '\xB6', '\x9A', ' ', '\xE0', '\xB6', '\x9D', ' ', '\xE0', '\xB6', '\xB3', ' ', '\xE0', '\xB6', '\xB4', ' ', '\xE0', '\xB6', '\xBA', ' ', '\xE0', '\xB6', '\xBD', ' ', '\xE0', '\xB7', '\x86', /* ඉ ක චඳ ප ය ල ෆ */
- '\0',
- '\xE0', '\xB6', '\x91', ' ', '\xE0', '\xB6', '\x94', ' ', '\xE0', '\xB6', '\x9D', ' ', '\xE0', '\xB6', '\xA2', ' ', '\xE0', '\xB6', '\xA7', ' ', '\xE0', '\xB6', '\xAE', ' ', '\xE0', '\xB6', '\xB0', ' ', '\xE0', '\xB6', '\xBB', /* එ ඔ චජ ට ථ ධ ර */
- '\0',
- '\xE0', '\xB6', '\xAF', ' ', '\xE0', '\xB6', '\xB3', ' ', '\xE0', '\xB6', '\x8B', ' ', '\xE0', '\xB6', '\xBD', ' ', '\xE0', '\xB6', '\xAD', '\xE0', '\xB7', '\x96', ' ', '\xE0', '\xB6', '\xAD', '\xE0', '\xB7', '\x94', ' ', '\xE0', '\xB6', '\xB6', '\xE0', '\xB7', '\x94', ' ', '\xE0', '\xB6', '\xAF', '\xE0', '\xB7', '\x94', /* ද ඳ උ ල තූ තු බු දු */
- '\0',
- '\xE1', '\xAE', '\x8B', ' ', '\xE1', '\xAE', '\x9E', ' ', '\xE1', '\xAE', '\xAE', ' ', '\xE1', '\xAE', '\xBD', ' ', '\xE1', '\xAE', '\xB0', ' ', '\xE1', '\xAE', '\x88', /* ᮋ ᮞ ᮮ ᮽ ᮰ ᮈ */
- '\0',
- '\xE1', '\xAE', '\x84', ' ', '\xE1', '\xAE', '\x94', ' ', '\xE1', '\xAE', '\x95', ' ', '\xE1', '\xAE', '\x97', ' ', '\xE1', '\xAE', '\xB0', ' ', '\xE1', '\xAE', '\x86', ' ', '\xE1', '\xAE', '\x88', ' ', '\xE1', '\xAE', '\x89', /* ᮄ ᮔ ᮕ ᮗ ᮰ ᮆ ᮈ ᮉ */
- '\0',
- '\xE1', '\xAE', '\xBC', ' ', '\xE1', '\xB3', '\x84', /* ᮼ ᳄ */
- '\0',
- '\xEA', '\xAA', '\x86', ' ', '\xEA', '\xAA', '\x94', ' ', '\xEA', '\xAA', '\x92', ' ', '\xEA', '\xAA', '\x96', ' ', '\xEA', '\xAA', '\xAB', /* ꪆ ꪔ ꪒ ꪖ ꪫ */
- '\0',
- '\xEA', '\xAA', '\x89', ' ', '\xEA', '\xAA', '\xAB', ' ', '\xEA', '\xAA', '\xAE', /* ꪉ ꪫ ꪮ */
- '\0',
- '\xE0', '\xAE', '\x89', ' ', '\xE0', '\xAE', '\x92', ' ', '\xE0', '\xAE', '\x93', ' ', '\xE0', '\xAE', '\xB1', ' ', '\xE0', '\xAE', '\x88', ' ', '\xE0', '\xAE', '\x95', ' ', '\xE0', '\xAE', '\x99', ' ', '\xE0', '\xAE', '\x9A', /* உ ஒ ஓ ற ஈ க ங ச */
- '\0',
- '\xE0', '\xAE', '\x95', ' ', '\xE0', '\xAE', '\x9A', ' ', '\xE0', '\xAE', '\xB2', ' ', '\xE0', '\xAE', '\xB6', ' ', '\xE0', '\xAE', '\x89', ' ', '\xE0', '\xAE', '\x99', ' ', '\xE0', '\xAE', '\x9F', ' ', '\xE0', '\xAE', '\xAA', /* க ச ல ஶ உ ங ட ப */
- '\0',
- '\xE0', '\xB0', '\x87', ' ', '\xE0', '\xB0', '\x8C', ' ', '\xE0', '\xB0', '\x99', ' ', '\xE0', '\xB0', '\x9E', ' ', '\xE0', '\xB0', '\xA3', ' ', '\xE0', '\xB0', '\xB1', ' ', '\xE0', '\xB1', '\xAF', /* ఇ ఌ ఙ ఞ ణ ఱ ౯ */
- '\0',
- '\xE0', '\xB0', '\x85', ' ', '\xE0', '\xB0', '\x95', ' ', '\xE0', '\xB0', '\x9A', ' ', '\xE0', '\xB0', '\xB0', ' ', '\xE0', '\xB0', '\xBD', ' ', '\xE0', '\xB1', '\xA8', ' ', '\xE0', '\xB1', '\xAC', /* అ క చ ర ఽ ౨ ౬ */
- '\0',
- '\xE0', '\xB8', '\x9A', ' ', '\xE0', '\xB9', '\x80', ' ', '\xE0', '\xB9', '\x81', ' ', '\xE0', '\xB8', '\xAD', ' ', '\xE0', '\xB8', '\x81', ' ', '\xE0', '\xB8', '\xB2', /* บ เ ๠อ ภา */
- '\0',
- '\xE0', '\xB8', '\x9A', ' ', '\xE0', '\xB8', '\x9B', ' ', '\xE0', '\xB8', '\xA9', ' ', '\xE0', '\xB8', '\xAF', ' ', '\xE0', '\xB8', '\xAD', ' ', '\xE0', '\xB8', '\xA2', ' ', '\xE0', '\xB8', '\xAE', /* บ ป ษ ฯ อ ย ฮ */
- '\0',
- '\xE0', '\xB8', '\x9B', ' ', '\xE0', '\xB8', '\x9D', ' ', '\xE0', '\xB8', '\x9F', /* ป ภฟ */
- '\0',
- '\xE0', '\xB9', '\x82', ' ', '\xE0', '\xB9', '\x83', ' ', '\xE0', '\xB9', '\x84', /* โ ใ ไ */
- '\0',
- '\xE0', '\xB8', '\x8E', ' ', '\xE0', '\xB8', '\x8F', ' ', '\xE0', '\xB8', '\xA4', ' ', '\xE0', '\xB8', '\xA6', /* ฎ ภฤ ฦ */
- '\0',
- '\xE0', '\xB8', '\x8D', ' ', '\xE0', '\xB8', '\x90', /* ภภ*/
- '\0',
- '\xE0', '\xB9', '\x90', ' ', '\xE0', '\xB9', '\x91', ' ', '\xE0', '\xB9', '\x93', /* ๠๑ ๓ */
- '\0',
- '\xE2', '\xB5', '\x94', ' ', '\xE2', '\xB5', '\x99', ' ', '\xE2', '\xB5', '\x9B', ' ', '\xE2', '\xB5', '\x9E', ' ', '\xE2', '\xB4', '\xB5', ' ', '\xE2', '\xB4', '\xBC', ' ', '\xE2', '\xB4', '\xB9', ' ', '\xE2', '\xB5', '\x8E', /* ⵔ ⵙ ⵛ ⵞ ⴵ ⴼ ⴹ ⵎ */
- '\0',
- '\xEA', '\x97', '\x8D', ' ', '\xEA', '\x98', '\x96', ' ', '\xEA', '\x98', '\x99', ' ', '\xEA', '\x98', '\x9C', ' ', '\xEA', '\x96', '\x9C', ' ', '\xEA', '\x96', '\x9D', ' ', '\xEA', '\x94', '\x85', ' ', '\xEA', '\x95', '\xA2', /* ê— ê˜– ꘙ ꘜ ê–œ ê– ê”… ê•¢ */
- '\0',
- '\xEA', '\x97', '\x8D', ' ', '\xEA', '\x98', '\x96', ' ', '\xEA', '\x98', '\x99', ' ', '\xEA', '\x97', '\x9E', ' ', '\xEA', '\x94', '\x85', ' ', '\xEA', '\x95', '\xA2', ' ', '\xEA', '\x96', '\x9C', ' ', '\xEA', '\x94', '\x86', /* ê— ê˜– ꘙ ê—ž ê”… ê•¢ ê–œ ꔆ */
-#ifdef AF_CONFIG_OPTION_CJK
- '\0',
- '\xE4', '\xBB', '\x96', ' ', '\xE4', '\xBB', '\xAC', ' ', '\xE4', '\xBD', '\xA0', ' ', '\xE4', '\xBE', '\x86', ' ', '\xE5', '\x80', '\x91', ' ', '\xE5', '\x88', '\xB0', ' ', '\xE5', '\x92', '\x8C', ' ', '\xE5', '\x9C', '\xB0', /* 他 们 你 來 們 到 和 地 */
- ' ', '\xE5', '\xAF', '\xB9', ' ', '\xE5', '\xB0', '\x8D', ' ', '\xE5', '\xB0', '\xB1', ' ', '\xE5', '\xB8', '\xAD', ' ', '\xE6', '\x88', '\x91', ' ', '\xE6', '\x97', '\xB6', ' ', '\xE6', '\x99', '\x82', ' ', '\xE6', '\x9C', '\x83', /* 对 å° å°± 席 我 æ—¶ 時 會 */
- ' ', '\xE6', '\x9D', '\xA5', ' ', '\xE7', '\x82', '\xBA', ' ', '\xE8', '\x83', '\xBD', ' ', '\xE8', '\x88', '\xB0', ' ', '\xE8', '\xAA', '\xAA', ' ', '\xE8', '\xAF', '\xB4', ' ', '\xE8', '\xBF', '\x99', ' ', '\xE9', '\x80', '\x99', /* æ¥ ç‚º 能 舰 說 说 è¿™ 這 */
- ' ', '\xE9', '\xBD', '\x8A', ' ', '|', /* 齊 | */
- ' ', '\xE5', '\x86', '\x9B', ' ', '\xE5', '\x90', '\x8C', ' ', '\xE5', '\xB7', '\xB2', ' ', '\xE6', '\x84', '\xBF', ' ', '\xE6', '\x97', '\xA2', ' ', '\xE6', '\x98', '\x9F', ' ', '\xE6', '\x98', '\xAF', ' ', '\xE6', '\x99', '\xAF', /* 军 åŒ å·² æ„¿ æ—¢ 星 是 景 */
- ' ', '\xE6', '\xB0', '\x91', ' ', '\xE7', '\x85', '\xA7', ' ', '\xE7', '\x8E', '\xB0', ' ', '\xE7', '\x8F', '\xBE', ' ', '\xE7', '\x90', '\x86', ' ', '\xE7', '\x94', '\xA8', ' ', '\xE7', '\xBD', '\xAE', ' ', '\xE8', '\xA6', '\x81', /* æ°‘ ç…§ 现 ç¾ ç† ç”¨ ç½® è¦ */
- ' ', '\xE8', '\xBB', '\x8D', ' ', '\xE9', '\x82', '\xA3', ' ', '\xE9', '\x85', '\x8D', ' ', '\xE9', '\x87', '\x8C', ' ', '\xE9', '\x96', '\x8B', ' ', '\xE9', '\x9B', '\xB7', ' ', '\xE9', '\x9C', '\xB2', ' ', '\xE9', '\x9D', '\xA2', /* è» é‚£ é… é‡Œ é–‹ é›· 露 é¢ */
- ' ', '\xE9', '\xA1', '\xBE', /* 顾 */
- '\0',
- '\xE4', '\xB8', '\xAA', ' ', '\xE4', '\xB8', '\xBA', ' ', '\xE4', '\xBA', '\xBA', ' ', '\xE4', '\xBB', '\x96', ' ', '\xE4', '\xBB', '\xA5', ' ', '\xE4', '\xBB', '\xAC', ' ', '\xE4', '\xBD', '\xA0', ' ', '\xE4', '\xBE', '\x86', /* 个 为 人 他 以 们 你 來 */
- ' ', '\xE5', '\x80', '\x8B', ' ', '\xE5', '\x80', '\x91', ' ', '\xE5', '\x88', '\xB0', ' ', '\xE5', '\x92', '\x8C', ' ', '\xE5', '\xA4', '\xA7', ' ', '\xE5', '\xAF', '\xB9', ' ', '\xE5', '\xB0', '\x8D', ' ', '\xE5', '\xB0', '\xB1', /* 個 們 到 å’Œ 大 对 å° å°± */
- ' ', '\xE6', '\x88', '\x91', ' ', '\xE6', '\x97', '\xB6', ' ', '\xE6', '\x99', '\x82', ' ', '\xE6', '\x9C', '\x89', ' ', '\xE6', '\x9D', '\xA5', ' ', '\xE7', '\x82', '\xBA', ' ', '\xE8', '\xA6', '\x81', ' ', '\xE8', '\xAA', '\xAA', /* 我 æ—¶ 時 有 æ¥ ç‚º è¦ èªª */
- ' ', '\xE8', '\xAF', '\xB4', ' ', '|', /* 说 | */
- ' ', '\xE4', '\xB8', '\xBB', ' ', '\xE4', '\xBA', '\x9B', ' ', '\xE5', '\x9B', '\xA0', ' ', '\xE5', '\xAE', '\x83', ' ', '\xE6', '\x83', '\xB3', ' ', '\xE6', '\x84', '\x8F', ' ', '\xE7', '\x90', '\x86', ' ', '\xE7', '\x94', '\x9F', /* 主 些 å›  它 想 æ„ ç† ç”Ÿ */
- ' ', '\xE7', '\x95', '\xB6', ' ', '\xE7', '\x9C', '\x8B', ' ', '\xE7', '\x9D', '\x80', ' ', '\xE7', '\xBD', '\xAE', ' ', '\xE8', '\x80', '\x85', ' ', '\xE8', '\x87', '\xAA', ' ', '\xE8', '\x91', '\x97', ' ', '\xE8', '\xA3', '\xA1', /* 當 看 ç€ ç½® 者 自 è‘— 裡 */
- ' ', '\xE8', '\xBF', '\x87', ' ', '\xE8', '\xBF', '\x98', ' ', '\xE8', '\xBF', '\x9B', ' ', '\xE9', '\x80', '\xB2', ' ', '\xE9', '\x81', '\x8E', ' ', '\xE9', '\x81', '\x93', ' ', '\xE9', '\x82', '\x84', ' ', '\xE9', '\x87', '\x8C', /* 过 还 è¿› 進 éŽ é“ é‚„ 里 */
- ' ', '\xE9', '\x9D', '\xA2', /* é¢ */
-#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
- '\0',
- ' ', '\xE4', '\xBA', '\x9B', ' ', '\xE4', '\xBB', '\xAC', ' ', '\xE4', '\xBD', '\xA0', ' ', '\xE4', '\xBE', '\x86', ' ', '\xE5', '\x80', '\x91', ' ', '\xE5', '\x88', '\xB0', ' ', '\xE5', '\x92', '\x8C', ' ', '\xE5', '\x9C', '\xB0', /* 些 们 你 來 們 到 和 地 */
- ' ', '\xE5', '\xA5', '\xB9', ' ', '\xE5', '\xB0', '\x86', ' ', '\xE5', '\xB0', '\x87', ' ', '\xE5', '\xB0', '\xB1', ' ', '\xE5', '\xB9', '\xB4', ' ', '\xE5', '\xBE', '\x97', ' ', '\xE6', '\x83', '\x85', ' ', '\xE6', '\x9C', '\x80', /* 她 将 將 就 年 得 情 最 */
- ' ', '\xE6', '\xA0', '\xB7', ' ', '\xE6', '\xA8', '\xA3', ' ', '\xE7', '\x90', '\x86', ' ', '\xE8', '\x83', '\xBD', ' ', '\xE8', '\xAA', '\xAA', ' ', '\xE8', '\xAF', '\xB4', ' ', '\xE8', '\xBF', '\x99', ' ', '\xE9', '\x80', '\x99', /* æ · 樣 ç† èƒ½ 說 说 è¿™ 這 */
- ' ', '\xE9', '\x80', '\x9A', ' ', '|', /* 通 | */
- ' ', '\xE5', '\x8D', '\xB3', ' ', '\xE5', '\x90', '\x97', ' ', '\xE5', '\x90', '\xA7', ' ', '\xE5', '\x90', '\xAC', ' ', '\xE5', '\x91', '\xA2', ' ', '\xE5', '\x93', '\x81', ' ', '\xE5', '\x93', '\x8D', ' ', '\xE5', '\x97', '\x8E', /* å³ å— å§ å¬ å‘¢ å“ å“ å—Ž */
- ' ', '\xE5', '\xB8', '\x88', ' ', '\xE5', '\xB8', '\xAB', ' ', '\xE6', '\x94', '\xB6', ' ', '\xE6', '\x96', '\xAD', ' ', '\xE6', '\x96', '\xB7', ' ', '\xE6', '\x98', '\x8E', ' ', '\xE7', '\x9C', '\xBC', ' ', '\xE9', '\x96', '\x93', /* 师 師 收 断 斷 明 眼 間 */
- ' ', '\xE9', '\x97', '\xB4', ' ', '\xE9', '\x99', '\x85', ' ', '\xE9', '\x99', '\x88', ' ', '\xE9', '\x99', '\x90', ' ', '\xE9', '\x99', '\xA4', ' ', '\xE9', '\x99', '\xB3', ' ', '\xE9', '\x9A', '\x8F', ' ', '\xE9', '\x9A', '\x9B', /* é—´ é™… 陈 é™ é™¤ 陳 éš éš› */
- ' ', '\xE9', '\x9A', '\xA8', /* 隨 */
- '\0',
- '\xE4', '\xBA', '\x8B', ' ', '\xE5', '\x89', '\x8D', ' ', '\xE5', '\xAD', '\xB8', ' ', '\xE5', '\xB0', '\x86', ' ', '\xE5', '\xB0', '\x87', ' ', '\xE6', '\x83', '\x85', ' ', '\xE6', '\x83', '\xB3', ' ', '\xE6', '\x88', '\x96', /* 事 å‰ å­¸ å°† å°‡ 情 想 或 */
- ' ', '\xE6', '\x94', '\xBF', ' ', '\xE6', '\x96', '\xAF', ' ', '\xE6', '\x96', '\xB0', ' ', '\xE6', '\xA0', '\xB7', ' ', '\xE6', '\xA8', '\xA3', ' ', '\xE6', '\xB0', '\x91', ' ', '\xE6', '\xB2', '\x92', ' ', '\xE6', '\xB2', '\xA1', /* 政 斯 新 样 樣 民 沒 没 */
- ' ', '\xE7', '\x84', '\xB6', ' ', '\xE7', '\x89', '\xB9', ' ', '\xE7', '\x8E', '\xB0', ' ', '\xE7', '\x8F', '\xBE', ' ', '\xE7', '\x90', '\x83', ' ', '\xE7', '\xAC', '\xAC', ' ', '\xE7', '\xB6', '\x93', ' ', '\xE8', '\xB0', '\x81', /* 然 特 现 ç¾ çƒ ç¬¬ 經 è° */
- ' ', '\xE8', '\xB5', '\xB7', ' ', '|', /* èµ· | */
- ' ', '\xE4', '\xBE', '\x8B', ' ', '\xE5', '\x88', '\xA5', ' ', '\xE5', '\x88', '\xAB', ' ', '\xE5', '\x88', '\xB6', ' ', '\xE5', '\x8A', '\xA8', ' ', '\xE5', '\x8B', '\x95', ' ', '\xE5', '\x90', '\x97', ' ', '\xE5', '\x97', '\x8E', /* 例 別 别 制 动 å‹• å— å—Ž */
- ' ', '\xE5', '\xA2', '\x9E', ' ', '\xE6', '\x8C', '\x87', ' ', '\xE6', '\x98', '\x8E', ' ', '\xE6', '\x9C', '\x9D', ' ', '\xE6', '\x9C', '\x9F', ' ', '\xE6', '\x9E', '\x84', ' ', '\xE7', '\x89', '\xA9', ' ', '\xE7', '\xA1', '\xAE', /* 增 指 明 æœ æœŸ æž„ 物 ç¡® */
- ' ', '\xE7', '\xA7', '\x8D', ' ', '\xE8', '\xAA', '\xBF', ' ', '\xE8', '\xB0', '\x83', ' ', '\xE8', '\xB2', '\xBB', ' ', '\xE8', '\xB4', '\xB9', ' ', '\xE9', '\x82', '\xA3', ' ', '\xE9', '\x83', '\xBD', ' ', '\xE9', '\x96', '\x93', /* ç§ èª¿ è°ƒ è²» è´¹ é‚£ 都 é–“ */
- ' ', '\xE9', '\x97', '\xB4', /* é—´ */
-#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
-#endif /* AF_CONFIG_OPTION_CJK */
- '\0',
-
- };
-
-
- /* stringsets are specific to styles */
- FT_LOCAL_ARRAY_DEF( AF_Blue_StringRec )
- af_blue_stringsets[] =
- {
- /* */
- { AF_BLUE_STRING_ADLAM_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM, 0 },
- { AF_BLUE_STRING_ADLAM_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_ADLAM_SMALL_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_ARABIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_ARABIC_BOTTOM, 0 },
- { AF_BLUE_STRING_ARABIC_JOIN, AF_BLUE_PROPERTY_LATIN_NEUTRAL },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM, 0 },
- { AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_ARMENIAN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM, 0 },
- { AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_AVESTAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_AVESTAN_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_BAMUM_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_BAMUM_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_BENGALI_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_BENGALI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_BENGALI_BASE, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_NEUTRAL |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_BENGALI_BASE, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_BUHID_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_BUHID_LARGE, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_BUHID_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_BUHID_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_CHAKMA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_CHAKMA_BOTTOM, 0 },
- { AF_BLUE_STRING_CHAKMA_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 },
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 },
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_CARIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_CARIAN_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_CHEROKEE_CAPITAL, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_CHEROKEE_CAPITAL, 0 },
- { AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_CHEROKEE_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_CHEROKEE_SMALL, 0 },
- { AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_COPTIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM, 0 },
- { AF_BLUE_STRING_COPTIC_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_COPTIC_SMALL_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_CYPRIOT_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_CYPRIOT_BOTTOM, 0 },
- { AF_BLUE_STRING_CYPRIOT_SMALL, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_CYPRIOT_SMALL, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM, 0 },
- { AF_BLUE_STRING_CYRILLIC_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_CYRILLIC_SMALL, 0 },
- { AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_DEVANAGARI_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_DEVANAGARI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_DEVANAGARI_BASE, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_NEUTRAL |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_DEVANAGARI_BASE, 0 },
- { AF_BLUE_STRING_DEVANAGARI_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_DESERET_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM, 0 },
- { AF_BLUE_STRING_DESERET_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_DESERET_SMALL_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_ETHIOPIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_ETHIOPIC_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM, 0 },
- { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM, 0 },
- { AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM, 0 },
- { AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM, 0 },
- { AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_GOTHIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_GOTHIC_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_GREEK_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM, 0 },
- { AF_BLUE_STRING_GREEK_SMALL_BETA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_GREEK_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_GREEK_SMALL, 0 },
- { AF_BLUE_STRING_GREEK_SMALL_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_GUJARATI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_GUJARATI_BOTTOM, 0 },
- { AF_BLUE_STRING_GUJARATI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_GUJARATI_DESCENDER, 0 },
- { AF_BLUE_STRING_GUJARATI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_GURMUKHI_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_GURMUKHI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_GURMUKHI_BASE, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_NEUTRAL |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_GURMUKHI_BOTTOM, 0 },
- { AF_BLUE_STRING_GURMUKHI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_HEBREW_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_LONG },
- { AF_BLUE_STRING_HEBREW_BOTTOM, 0 },
- { AF_BLUE_STRING_HEBREW_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_KAYAH_LI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_KAYAH_LI_BOTTOM, 0 },
- { AF_BLUE_STRING_KAYAH_LI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_KAYAH_LI_DESCENDER, 0 },
- { AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_KHMER_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP, AF_BLUE_PROPERTY_LATIN_SUB_TOP },
- { AF_BLUE_STRING_KHMER_BOTTOM, 0 },
- { AF_BLUE_STRING_KHMER_DESCENDER, 0 },
- { AF_BLUE_STRING_KHMER_LARGE_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_KANNADA_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_LAO_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_LAO_BOTTOM, 0 },
- { AF_BLUE_STRING_LAO_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_LAO_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_LAO_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_LATIN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM, 0 },
- { AF_BLUE_STRING_LATIN_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_LATIN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_LATIN_SMALL_BOTTOM, 0 },
- { AF_BLUE_STRING_LATIN_SMALL_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM, 0 },
- { AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_LATIN_SUBS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_LATIN_SUBS_SMALL, 0 },
- { AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM, 0 },
- { AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_LATIN_SUPS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_LATIN_SUPS_SMALL, 0 },
- { AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_LISU_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_LISU_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_MALAYALAM_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_MALAYALAM_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_MYANMAR_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_MYANMAR_BOTTOM, 0 },
- { AF_BLUE_STRING_MYANMAR_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_MYANMAR_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_NKO_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_NKO_BOTTOM, 0 },
- { AF_BLUE_STRING_NKO_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_NKO_SMALL_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_OL_CHIKI, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_OL_CHIKI, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_OLD_TURKIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_OLD_TURKIC_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_OSAGE_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM, 0 },
- { AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER, 0 },
- { AF_BLUE_STRING_OSAGE_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_OSAGE_SMALL_BOTTOM, 0 },
- { AF_BLUE_STRING_OSAGE_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_OSAGE_SMALL_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_OSMANYA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_OSMANYA_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_SAURASHTRA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_SAURASHTRA_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_SHAVIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_SHAVIAN_BOTTOM, 0 },
- { AF_BLUE_STRING_SHAVIAN_DESCENDER, 0 },
- { AF_BLUE_STRING_SHAVIAN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_SINHALA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_SINHALA_BOTTOM, 0 },
- { AF_BLUE_STRING_SINHALA_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_SUNDANESE_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_SUNDANESE_BOTTOM, 0 },
- { AF_BLUE_STRING_SUNDANESE_DESCENDER, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_TAMIL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_TAMIL_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_TAI_VIET_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_TAI_VIET_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_TELUGU_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_TELUGU_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_TIFINAGH, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_THAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_THAI_BOTTOM, 0 },
- { AF_BLUE_STRING_THAI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_THAI_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_THAI_DESCENDER, 0 },
- { AF_BLUE_STRING_THAI_LARGE_DESCENDER, 0 },
- { AF_BLUE_STRING_THAI_DIGIT_TOP, 0 },
- { AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_VAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_VAI_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
-#ifdef AF_CONFIG_OPTION_CJK
- { AF_BLUE_STRING_CJK_TOP, AF_BLUE_PROPERTY_CJK_TOP },
- { AF_BLUE_STRING_CJK_BOTTOM, 0 },
-#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
- { AF_BLUE_STRING_CJK_LEFT, AF_BLUE_PROPERTY_CJK_HORIZ },
- { AF_BLUE_STRING_CJK_RIGHT, AF_BLUE_PROPERTY_CJK_HORIZ |
- AF_BLUE_PROPERTY_CJK_RIGHT },
-#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
- { AF_BLUE_STRING_MAX, 0 },
-#endif /* AF_CONFIG_OPTION_CJK */
-
- };
-
-
-/* END */
diff --git a/src/autofit/afblue.cin b/src/autofit/afblue.cin
deleted file mode 100644
index f9080c54d..000000000
--- a/src/autofit/afblue.cin
+++ /dev/null
@@ -1,39 +0,0 @@
-/***************************************************************************/
-/* */
-/* afblue.c */
-/* */
-/* Auto-fitter data for blue strings (body). */
-/* */
-/* Copyright 2013-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "aftypes.h"
-
-
- FT_LOCAL_ARRAY_DEF( char )
- af_blue_strings[] =
- {
- /* */
-@AF_BLUE_STRINGS_ARRAY@
- };
-
-
- /* stringsets are specific to styles */
- FT_LOCAL_ARRAY_DEF( AF_Blue_StringRec )
- af_blue_stringsets[] =
- {
- /* */
-@AF_BLUE_STRINGSETS_ARRAY@
- };
-
-
-/* END */
diff --git a/src/autofit/afblue.dat b/src/autofit/afblue.dat
deleted file mode 100644
index f62eb82a1..000000000
--- a/src/autofit/afblue.dat
+++ /dev/null
@@ -1,1066 +0,0 @@
-// afblue.dat
-//
-// Auto-fitter data for blue strings.
-//
-// Copyright 2013-2017 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used,
-// modified, and distributed under the terms of the FreeType project
-// license, LICENSE.TXT. By continuing to use, modify, or distribute
-// this file you indicate that you have read the license and
-// understand and accept it fully.
-
-
-// This file contains data specific to blue zones. It gets processed by
-// a script to simulate `jagged arrays', with enumeration values holding
-// offsets into the arrays.
-//
-// The format of the file is rather simple: A section starts with three
-// labels separated by whitespace and followed by a colon (everything in a
-// single line); the first label gives the name of the enumeration template,
-// the second the name of the array template, and the third the name of the
-// `maximum' template. The script then fills the corresponding templates
-// (indicated by `@' characters around the name).
-//
-// A section contains one or more data records. Each data record consists
-// of two or more lines. The first line holds the enumeration name, and the
-// remaining lines the corresponding array data.
-//
-// There are two possible representations for array data.
-//
-// - A string of characters or character clusters (for example, representing
-// Aksharas, Devanagari syllables) in UTF-8 encoding enclosed in double
-// quotes, using C syntax, where the elements are separated by spaces.
-// There can be only one string per line, thus the starting and ending
-// double quote must be the first and last character in the line,
-// respectively, ignoring whitespace before and after the string. If
-// there are multiple strings (in multiple lines), they are concatenated
-// to a single string. In the output, a string gets represented as a
-// series of singles bytes, followed by a zero byte. The enumeration
-// values simply hold byte offsets to the start of the corresponding
-// strings.
-//
-// For strings, the `maximum' template holds the maximum number of
-// non-space characters in all strings.
-//
-// - Data blocks enclosed in balanced braces, which get copied verbatim and
-// which can span multiple lines. The opening brace of a block must be
-// the first character of a line (ignoring whitespace), and the closing
-// brace the last (ignoring whitespace also). The script appends a comma
-// character after each block and counts the number of blocks to set the
-// enumeration values.
-//
-// For data blocks, the `maximum' template holds the maximum number of
-// array elements.
-//
-// A section can contain either strings only or data blocks only.
-//
-// A comment line starts with `//'; it gets removed. A preprocessor
-// directive line (using the standard syntax of `cpp') starts with `#' and
-// gets copied verbatim to both the enumeration and the array. Whitespace
-// outside of a string is insignificant.
-//
-// Preprocessor directives are ignored while the script computes maximum
-// values; this essentially means that the maximum values can easily be too
-// large. Given that the purpose of those values is to create local
-// fixed-size arrays at compile time for further processing of the blue zone
-// data, this isn't a problem. Note the final zero byte of a string is not
-// counted. Note also that the count holds the number of UTF-8 encoded
-// characters, not bytes.
-
-
-// The blue zone string data, to be used in the blue stringsets below.
-
-AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN:
-
- AF_BLUE_STRING_ADLAM_CAPITAL_TOP
- "𞤌 𞤅 𞤈 𞤠𞤔 𞤚"
- AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM
- "𞤂 𞤖"
- AF_BLUE_STRING_ADLAM_SMALL_TOP
- "𞤬 𞤮 𞤻 𞤼 𞤾"
- AF_BLUE_STRING_ADLAM_SMALL_BOTTOM
- "𞤤 𞤨 𞤩 𞤭 𞤴 𞤸 𞤺 𞥀"
-
- AF_BLUE_STRING_ARABIC_TOP
- "ا إ ل ك ط ظ"
- AF_BLUE_STRING_ARABIC_BOTTOM
- "ت ث ط ظ ك"
- // We don't necessarily have access to medial forms via Unicode in case
- // Arabic presentational forms are missing. The only character that is
- // guaranteed to have the same vertical position with joining (this is,
- // non-isolated) forms is U+0640, ARABIC TATWEEL, which must join both
- // round and flat curves.
- AF_BLUE_STRING_ARABIC_JOIN
- "Ù€"
-
- AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP
- "Ô± Õ„ Õ’ Õ Ô² Ô³ Ô´ Õ•"
- AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM
- "Õ’ Õˆ Ô´ Õƒ Õ‡ Õ Õ Õ•"
- AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER
- "Õ¥ Õ§ Õ« Õ´ Õ¾ Ö† Õ³"
- AF_BLUE_STRING_ARMENIAN_SMALL_TOP
- "Õ¡ Õµ Ö‚ Õ½ Õ£ Õ· Ö€ Ö…"
- AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM
- "Õ° Õ¸ Õ³ Õ¡ Õ¥ Õ® Õ½ Ö…"
- AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER
- "Õ¢ Õ¨ Õ« Õ¬ Õ² Õº Öƒ Ö"
-
- AF_BLUE_STRING_AVESTAN_TOP
- "𬀠ð¬ ð¬ ð¬›"
- AF_BLUE_STRING_AVESTAN_BOTTOM
- "𬀠ð¬"
-
- AF_BLUE_STRING_BAMUM_TOP
- "ꚧ ꚨ ê›› ꛉ ê› ê›ˆ ꛫ ꛯ"
- AF_BLUE_STRING_BAMUM_BOTTOM
- "ꚭ ꚳ ꚶ ꛬ ꚢ ꚽ ꛯ ꛲"
-
- AF_BLUE_STRING_BENGALI_BASE
- "অ ড ত ন ব ভ ল ক"
- AF_BLUE_STRING_BENGALI_TOP
- "ই ট ঠ ি ী ৈ ৗ"
- AF_BLUE_STRING_BENGALI_HEAD
- "ও ঠড ত ন ব ল ক"
-
- AF_BLUE_STRING_BUHID_TOP
- "á áˆ"
- AF_BLUE_STRING_BUHID_LARGE
- "á… áŠ áŽ"
- AF_BLUE_STRING_BUHID_SMALL
- "ႠრበáŒ"
- AF_BLUE_STRING_BUHID_BOTTOM
- "ဠრᆠበዠá á‘"
-
- AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP
- "á—œ á–´ á á’£ á‘« á‘Ž ᔑ á—°"
- AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM
- "ᗶ ᖵ ᒧ რᑌ ᒠᔑ ᗢ"
- AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP
- "ᓓ ᓕ ᓀ ᓂ ᓄ ᕄ ᕆ ᘣ"
- AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM
- "ᕃ ᓂ ᓀ ᕂ ᓗ ᓚ ᕆ ᘣ"
- AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP
- "᪠ᙆ ᣘ ᢠᒾ ᣗ ᔆ"
- AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM
- "ᙆ ᗮ ᒻ ហᔆ ᒡ ᒢ ᓑ"
-
- AF_BLUE_STRING_CARIAN_TOP
- "ðŠ§ ðŠ« ðŠ¬ ðŠ­ ðŠ± ðŠº ðŠ¼ ðŠ¿"
- AF_BLUE_STRING_CARIAN_BOTTOM
- "ðŠ£ ðŠ§ ðŠ· ð‹€ ðŠ« ðŠ¸ ð‹‰"
-
- AF_BLUE_STRING_CHAKMA_TOP
- "𑄃 𑄅 𑄉 𑄙 𑄗"
- AF_BLUE_STRING_CHAKMA_BOTTOM
- "ð‘„… ð‘„› ð‘„ ð‘„— ð‘„“"
- AF_BLUE_STRING_CHAKMA_DESCENDER
- "𑄖𑄳𑄢 𑄘𑄳𑄢 𑄙𑄳𑄢 𑄤𑄳𑄢 𑄥𑄳𑄢"
-
- AF_BLUE_STRING_CHEROKEE_CAPITAL
- "ᆠᎻ Ꭼ რᎤ ᣠᎦ á•"
- AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER
- "ê®’ ꮤ ꮶ ê­´ ê­¾ ê®— ê® ê®¿"
- AF_BLUE_STRING_CHEROKEE_SMALL
- "ꮖ ꭼ ꮓ ꮠ ꮳ ꭶ ꮥ ꮻ"
- AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER
- "á¸ ê® ê­¹ ê­»"
-
- AF_BLUE_STRING_COPTIC_CAPITAL_TOP
- "Ⲍ Ⲏ Ⲡ Ⳟ Ⲟ ⲠⲤ Ⳋ"
- AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM
- "ⳠⳘ Ⳟ Ⲏ Ⲟ ⲠⳜ Ⲱ"
- AF_BLUE_STRING_COPTIC_SMALL_TOP
- "ⲠⲠⲡ ⳟ ⲟ ⲑ ⲥ ⳋ"
- AF_BLUE_STRING_COPTIC_SMALL_BOTTOM
- "ⳑ ⳙ ⳟ Ⲡⲟ ⲑ ⳠⳒ"
-
- AF_BLUE_STRING_CYPRIOT_TOP
- "ð  ð ™ ð ³ ð ± ð … ð “ ð £ ð ¦"
- AF_BLUE_STRING_CYPRIOT_BOTTOM
- "ð ƒ ð Š ð › ð £ ð ³ ð µ ð "
- AF_BLUE_STRING_CYPRIOT_SMALL
- "ð ˆ ð  ð –"
-
- AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP
- "Б В Е П З О С Э"
- AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM
- "Б В Е Ш З О С Э"
- AF_BLUE_STRING_CYRILLIC_SMALL
- "Ñ… п н ш е з о Ñ"
- AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER
- "р у ф"
-
- AF_BLUE_STRING_DESERET_CAPITAL_TOP
- "ð‚ ð„ ð‹ ð— ð‘"
- AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM
- "ð€ ð‚ ð„ ð— ð›"
- AF_BLUE_STRING_DESERET_SMALL_TOP
- "ðª ð¬ ð³ ð¿ ð¹"
- AF_BLUE_STRING_DESERET_SMALL_BOTTOM
- "ð¨ ðª ð¬ ð¿ ð‘ƒ"
-
- AF_BLUE_STRING_DEVANAGARI_BASE
- "क म अ आ थ ध भ श"
- AF_BLUE_STRING_DEVANAGARI_TOP
- "ई ठओ औ ि ी ो ौ"
- // note that some fonts have extreme variation in the height of the
- // round head elements; for this reason we also define the `base'
- // blue zone, which must be always present
- AF_BLUE_STRING_DEVANAGARI_HEAD
- "क म अ आ थ ध भ श"
- AF_BLUE_STRING_DEVANAGARI_BOTTOM
- "ॠृ"
-
- AF_BLUE_STRING_ETHIOPIC_TOP
- "ሀ ሃ ዘ á ማ በ á‹‹ á‹"
- AF_BLUE_STRING_ETHIOPIC_BOTTOM
- "ለ ሠበ ዘ ሀ ሪ ዠጨ"
-
- AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP
- "გ დ ე ვ თ ი რღ"
- AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM
- "რზ მ ს შ ძ ხ პ"
- AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER
- "ს ხ ქ ზ მ შ ჩ წ"
- AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER
- "ე ვ ჟ ტ უ ფ ქ ყ"
-
- AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP
- "Ⴑ Ⴇ Ⴙ Ⴜ Ⴄ Ⴅ Ⴓ Ⴚ"
- AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM
- "Ⴄ Ⴅ Ⴇ Ⴈ Ⴆ Ⴑ Ⴊ Ⴋ"
-
- AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP
- "â´ â´— â´‚ â´„ â´… â´‡ â´” â´–"
- AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM
- "ⴈ ⴌ ⴖ ⴎ ⴃ ⴆ ⴋ ⴢ"
- AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER
- "â´ â´‘ â´“ â´• â´™ â´› â´¡ â´£"
- AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER
- "â´„ â´… â´” â´• â´ â´‚ â´˜ â´"
-
- AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP
- "â°… â°” â°ª â°„ â°‚ â°Š â°« â°‹"
- AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM
- "â°… â°„ â°‚ â°ª â°ž â°¡ â°Š â°”"
- AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP
- "ⰵ ⱄ ⱚ ⰴ ⰲ ⰺ ⱛ ⰻ"
- AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM
- "ⰵ ⰴ ⰲ ⱚ ⱎ ⱑ ⰺ ⱄ"
-
- AF_BLUE_STRING_GOTHIC_TOP
- "ðŒ² ðŒ¶ ð€ ð„ ðŒ´ ðƒ ðˆ ðŒ¾"
- AF_BLUE_STRING_GOTHIC_BOTTOM
- "ðŒ¶ ðŒ´ ðƒ ðˆ"
-
- AF_BLUE_STRING_GREEK_CAPITAL_TOP
- "Γ Β Ε Ζ Θ Ο Ω"
- AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM
- "Β Δ Ζ Ξ Θ Ο"
- AF_BLUE_STRING_GREEK_SMALL_BETA_TOP
- "β θ δ ζ λ ξ"
- AF_BLUE_STRING_GREEK_SMALL
- "α ε ι ο π σ τ ω"
- AF_BLUE_STRING_GREEK_SMALL_DESCENDER
- "β γ η μ Ï Ï† χ ψ"
-
- AF_BLUE_STRING_GUJARATI_TOP
- "ત ન ઋ ઌ છ ટ ર ૦"
- AF_BLUE_STRING_GUJARATI_BOTTOM
- "ખ ગ ઘ ઞ ઇ ઈ ઠ જ"
- AF_BLUE_STRING_GUJARATI_ASCENDER
- "ઈ ઊ િ à«€ લી શà«àªšàª¿ જિ સી"
- AF_BLUE_STRING_GUJARATI_DESCENDER
- "ૠૃ ૄ ખૠછૃ છૄ"
- AF_BLUE_STRING_GUJARATI_DIGIT_TOP
- "૦ ૧ ૨ ૩ ૭"
-
- AF_BLUE_STRING_GURMUKHI_BASE
- "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ"
- AF_BLUE_STRING_GURMUKHI_HEAD
- "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ"
- AF_BLUE_STRING_GURMUKHI_TOP
- "ਇ ਈ ਉ ਠਓ ੳ ਿ ੀ"
- AF_BLUE_STRING_GURMUKHI_BOTTOM
- "ਅ ਠਓ ਗ ਜ ਠ ਰ ਸ"
- AF_BLUE_STRING_GURMUKHI_DIGIT_TOP
- "੦ ੧ ੨ ੩ ੭"
-
- AF_BLUE_STRING_HEBREW_TOP
- "ב ד ×” ×— ך ×› × ×¡"
- AF_BLUE_STRING_HEBREW_BOTTOM
- "ב ט ×› × ×¡ צ"
- AF_BLUE_STRING_HEBREW_DESCENDER
- "ק ך ן ף ץ"
-
- AF_BLUE_STRING_KANNADA_TOP
- "ಇ ಊ ಠಣ ಸಾ ನಾ ದಾ ರಾ"
- AF_BLUE_STRING_KANNADA_BOTTOM
- "ಅ ಉ ಎ ಲ ೦ ೨ ೬ ೭"
-
- AF_BLUE_STRING_KAYAH_LI_TOP
- "꤅ ê¤ ê¤ ê¤‹ ꤀ ê¤"
- AF_BLUE_STRING_KAYAH_LI_BOTTOM
- "꤈ ꤘ ꤀ ê¤ ê¤¢"
- AF_BLUE_STRING_KAYAH_LI_ASCENDER
- "ꤖ ꤡ"
- AF_BLUE_STRING_KAYAH_LI_DESCENDER
- "ꤑ ꤜ ꤞ"
- AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER
- "ꤑ꤬ ꤜ꤭ ꤔ꤬"
-
- AF_BLUE_STRING_KHMER_TOP
- "ហទ ន ឧ ឩ ា"
- AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP
- "ក្ក ក្ហក្គ ក្áž"
- AF_BLUE_STRING_KHMER_BOTTOM
- "ហឃ ច ឋ ប ម យ ឲ"
- AF_BLUE_STRING_KHMER_DESCENDER
- "ážáŸ’ážš រៀ ឲ្យ អឿ"
- AF_BLUE_STRING_KHMER_LARGE_DESCENDER
- "ន្ážáŸ’រៃ ង្ážáŸ’áž™ ក្បៀ ច្រៀ ន្ážáž¿ ល្បឿ"
-
- AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP
- "᧠ ᧡"
- AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM
- "᧶ ᧹"
-
- AF_BLUE_STRING_LAO_TOP
- "າ ດ ອ ມ ລ ວ ຣ ງ"
- AF_BLUE_STRING_LAO_BOTTOM
- "າ ອ ບ ຠຣ ຮ ວ ຢ"
- AF_BLUE_STRING_LAO_ASCENDER
- "ປ ຢ ຟ àº"
- AF_BLUE_STRING_LAO_LARGE_ASCENDER
- "ໂ ໄ ໃ"
- AF_BLUE_STRING_LAO_DESCENDER
- "ງ ຊ ຖ ຽ ໆ ຯ"
-
- AF_BLUE_STRING_LATIN_CAPITAL_TOP
- "T H E Z O C Q S"
- AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM
- "H E Z L O C U S"
- AF_BLUE_STRING_LATIN_SMALL_F_TOP
- "f i j k d b h"
- AF_BLUE_STRING_LATIN_SMALL_TOP
- "u v x z o e s c"
- AF_BLUE_STRING_LATIN_SMALL_BOTTOM
- "n r x z o e s c"
- AF_BLUE_STRING_LATIN_SMALL_DESCENDER
- "p q g j y"
-
- // we assume that both the subscript and superscript ranges
- // don't contain oldstyle digits (actually, most fonts probably
- // have digits only in those ranges)
- AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP
- "₀ ₃ ₅ ₇ ₈"
- AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM
- "₀ ₠₂ ₃ ₈"
- AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP
- "áµ¢ â±¼ â‚• â‚– â‚—"
- AF_BLUE_STRING_LATIN_SUBS_SMALL
- "₠ₑ ₒ ₓ ₙ ₛ ᵥ ᵤ ᵣ"
- AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER
- "ᵦ ᵧ ᵨ ᵩ ₚ"
-
- AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP
- "Ⱐ³ ⵠⷠᵀ ᴴ ᴱ ᴼ"
- AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM
- "Ⱐ¹ ² ³ á´± á´¸ á´¼ áµ"
- AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP
- "ᵇ ᵈ áµ Ê° ʲ ᶠ â±"
- AF_BLUE_STRING_LATIN_SUPS_SMALL
- "ᵉ ᵒ ʳ ˢ ˣ ᶜ ᶻ"
- AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER
- "áµ– ʸ áµ"
-
- AF_BLUE_STRING_LISU_TOP
- "ꓡ ꓧ ꓱ ꓶ ꓩ ꓚ ꓵ ꓳ"
- AF_BLUE_STRING_LISU_BOTTOM
- "ꓕ ꓜ ꓞ ꓡ ꓛ ꓢ ꓳ ꓴ"
-
- AF_BLUE_STRING_MALAYALAM_TOP
- "à´’ à´Ÿ à´  à´± à´š à´ª à´šàµà´š à´ªàµà´ª"
- AF_BLUE_STRING_MALAYALAM_BOTTOM
- "à´Ÿ à´  à´§ à´¶ à´˜ à´š à´¥ à´²"
-
- AF_BLUE_STRING_MYANMAR_TOP
- "ဠဂ င ဒ ဠᥠአá‹"
- AF_BLUE_STRING_MYANMAR_BOTTOM
- "င ဎ ဒ ပ ဗ ဠአá‹"
- AF_BLUE_STRING_MYANMAR_ASCENDER
- "ဩ ြ á á ᆠါ ိ"
- AF_BLUE_STRING_MYANMAR_DESCENDER
- "ဉ ည ဥ ဩ ဨ á‚ á… á‰"
-
- AF_BLUE_STRING_NKO_TOP
- "ß ß‰ ß’ ߟ ß– ßœ ß  ߥ"
- AF_BLUE_STRING_NKO_BOTTOM
- "߀ ߘ ߡ ߠ ߥ"
- AF_BLUE_STRING_NKO_SMALL_TOP
- "ß ß› ß‹"
- AF_BLUE_STRING_NKO_SMALL_BOTTOM
- "ߎ ß ß› ß‹"
-
- AF_BLUE_STRING_OL_CHIKI
- "ᱛ ᱜ ᱠᱡ ᱢ ᱥ"
-
- AF_BLUE_STRING_OLD_TURKIC_TOP
- "ð°— ð°˜ ð°§"
- AF_BLUE_STRING_OLD_TURKIC_BOTTOM
- "ð°‰ ð°— ð°¦ ð°§"
-
- AF_BLUE_STRING_OSAGE_CAPITAL_TOP
- "ð’¾ ð“ ð“’ ð““ ð’» ð“‚ ð’µ ð“†"
- AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM
- "ð’° ð“ ð“‚ ð’¿ ð“Ž ð’¹"
- AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER
- "ð’¼ ð’½ ð’¾"
- AF_BLUE_STRING_OSAGE_SMALL_TOP
- "𓵠𓶠𓺠𓻠ð“ 𓣠𓪠ð“®"
- AF_BLUE_STRING_OSAGE_SMALL_BOTTOM
- "𓘠𓚠𓣠𓵠𓡠𓧠𓪠ð“¶"
- AF_BLUE_STRING_OSAGE_SMALL_ASCENDER
- "𓤠𓦠𓸠𓹠ð“›"
- AF_BLUE_STRING_OSAGE_SMALL_DESCENDER
- "𓤠𓥠ð“¦"
-
- AF_BLUE_STRING_OSMANYA_TOP
- "ð’† ð’‰ ð’ ð’’ ð’˜ ð’› ð’  ð’£"
- AF_BLUE_STRING_OSMANYA_BOTTOM
- "ð’€ ð’‚ ð’† ð’ˆ ð’Š ð’’ ð’  ð’©"
-
- AF_BLUE_STRING_SAURASHTRA_TOP
- "ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ê¢ ê¢›"
- AF_BLUE_STRING_SAURASHTRA_BOTTOM
- "ꢂ ꢨ ꢺ ꢤ ꢎ"
-
- AF_BLUE_STRING_SHAVIAN_TOP
- "ð‘• ð‘™"
- AF_BLUE_STRING_SHAVIAN_BOTTOM
- "𑔠𑖠𑗠𑹠ð‘»"
- AF_BLUE_STRING_SHAVIAN_DESCENDER
- "ð‘Ÿ ð‘£"
- AF_BLUE_STRING_SHAVIAN_SMALL_TOP
- "𑱠𑲠𑳠𑴠𑸠𑺠ð‘¼"
- AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM
- "ð‘´ ð‘» ð‘¹"
-
- AF_BLUE_STRING_SINHALA_TOP
- "ඉ ක චඳ ප ය ල ෆ"
- AF_BLUE_STRING_SINHALA_BOTTOM
- "එ ඔ චජ ට ථ ධ ර"
- AF_BLUE_STRING_SINHALA_DESCENDER
- "ද ඳ උ ල තූ තු බු දු"
-
- AF_BLUE_STRING_SUNDANESE_TOP
- "ᮋ ᮞ ᮮ ᮽ ᮰ ᮈ"
- AF_BLUE_STRING_SUNDANESE_BOTTOM
- "ᮄ ᮔ ᮕ ᮗ ᮰ ᮆ ᮈ ᮉ"
- AF_BLUE_STRING_SUNDANESE_DESCENDER
- "ᮼ ᳄"
-
- AF_BLUE_STRING_TAI_VIET_TOP
- "ꪆ ꪔ ꪒ ꪖ ꪫ"
- AF_BLUE_STRING_TAI_VIET_BOTTOM
- "ꪉ ꪫ ꪮ"
-
- AF_BLUE_STRING_TAMIL_TOP
- "உ ஒ ஓ ற ஈ க ங ச"
- AF_BLUE_STRING_TAMIL_BOTTOM
- "க ச ல ஶ உ ங ட ப"
-
- AF_BLUE_STRING_TELUGU_TOP
- "ఇ ఌ ఙ ఞ ణ ఱ ౯"
- AF_BLUE_STRING_TELUGU_BOTTOM
- "అ క చ ర ఽ ౨ ౬"
-
- AF_BLUE_STRING_THAI_TOP
- "บ เ ๠อ ภา"
- AF_BLUE_STRING_THAI_BOTTOM
- "บ ป ษ ฯ อ ย ฮ"
- AF_BLUE_STRING_THAI_ASCENDER
- "ป ภฟ"
- AF_BLUE_STRING_THAI_LARGE_ASCENDER
- "โ ใ ไ"
- AF_BLUE_STRING_THAI_DESCENDER
- "ฎ ภฤ ฦ"
- AF_BLUE_STRING_THAI_LARGE_DESCENDER
- "ภà¸"
- AF_BLUE_STRING_THAI_DIGIT_TOP
- "๠๑ ๓"
-
- AF_BLUE_STRING_TIFINAGH
- "ⵔ ⵙ ⵛ ⵞ ⴵ ⴼ ⴹ ⵎ"
-
- AF_BLUE_STRING_VAI_TOP
- "ê— ê˜– ꘙ ꘜ ê–œ ê– ê”… ê•¢"
- AF_BLUE_STRING_VAI_BOTTOM
- "ê— ê˜– ꘙ ê—ž ê”… ê•¢ ê–œ ꔆ"
-
-
-#ifdef AF_CONFIG_OPTION_CJK
-
- AF_BLUE_STRING_CJK_TOP
- "他 们 你 來 們 到 和 地"
- " 对 å° å°± 席 我 æ—¶ 時 會"
- " æ¥ ç‚º 能 舰 說 说 è¿™ 這"
- " 齊 |"
- " 军 åŒ å·² æ„¿ æ—¢ 星 是 景"
- " æ°‘ ç…§ 现 ç¾ ç† ç”¨ ç½® è¦"
- " è» é‚£ é… é‡Œ é–‹ é›· 露 é¢"
- " 顾"
- AF_BLUE_STRING_CJK_BOTTOM
- "个 为 人 他 以 们 你 來"
- " 個 們 到 å’Œ 大 对 å° å°±"
- " 我 æ—¶ 時 有 æ¥ ç‚º è¦ èªª"
- " 说 |"
- " 主 些 å›  它 想 æ„ ç† ç”Ÿ"
- " 當 看 ç€ ç½® 者 自 è‘— 裡"
- " 过 还 è¿› 進 éŽ é“ é‚„ 里"
- " é¢"
-
-#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
-
- AF_BLUE_STRING_CJK_LEFT
- " 些 们 你 來 們 到 和 地"
- " 她 将 將 就 年 得 情 最"
- " æ · 樣 ç† èƒ½ 說 说 è¿™ 這"
- " 通 |"
- " å³ å— å§ å¬ å‘¢ å“ å“ å—Ž"
- " 师 師 收 断 斷 明 眼 間"
- " é—´ é™… 陈 é™ é™¤ 陳 éš éš›"
- " 隨"
- AF_BLUE_STRING_CJK_RIGHT
- "事 å‰ å­¸ å°† å°‡ 情 想 或"
- " 政 斯 新 样 樣 民 沒 没"
- " 然 特 现 ç¾ çƒ ç¬¬ 經 è°"
- " èµ· |"
- " 例 別 别 制 动 å‹• å— å—Ž"
- " 增 指 明 æœ æœŸ æž„ 物 ç¡®"
- " ç§ èª¿ è°ƒ è²» è´¹ é‚£ 都 é–“"
- " é—´"
-
-#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
-
-#endif /* AF_CONFIG_OPTION_CJK */
-
-
-// The blue zone stringsets, as used in the script styles, cf. `afstyles.h'.
-//
-// The AF_BLUE_PROPERTY_XXX flags are defined in `afblue.h'; here some
-// explanations.
-//
-// A blue zone in general is defined by a reference and an overshoot line.
-// During the hinting process, all coordinate values between those two lines
-// are set equal to the reference value, provided that the blue zone is not
-// wider than 0.75 pixels (otherwise the blue zone gets ignored). All
-// entries must have `AF_BLUE_STRING_MAX' as the final line.
-//
-// During the glyph analysis, edges are sorted from bottom to top, and then
-// sequentially checked, edge by edge, against the blue zones in the order
-// given below.
-//
-//
-// latin auto-hinter
-// -----------------
-//
-// Characters in a blue string are automatically classified as having a flat
-// (reference) or a round (overshoot) extremum. The blue zone is then set
-// up by the mean values of all flat extrema and all round extrema,
-// respectively. Only horizontal blue zones (i.e., adjusting vertical
-// coordinate values) are supported.
-//
-// Some scripts like Khmer need character composition to get all necessary
-// blue zones, since Unicode only provides an abstract data model that
-// doesn't represent all possible glyph shapes. For such character
-// clusters, the HarfBuzz library is used to convert them into the
-// corresponding glyphs. The largest glyph element (where `largest' can be
-// either `largest ascender' or `largest descender') then defines the
-// corresponding flat or round extremum.
-//
-// For the latin auto-hinter, the overshoot should be larger than the
-// reference for top zones, and vice versa for bottom zones.
-//
-// LATIN_TOP
-// Take the maximum flat and round coordinate values of the blue string
-// characters for computing the blue zone's reference and overshoot
-// values.
-//
-// If not set, take the minimum values.
-//
-// Mutually exclusive with `LATIN_SUB_TOP'.
-//
-// LATIN_SUB_TOP
-// For all glyphs of a character cluster, compute the maximum flat
-// and round coordinate values of each component, then take the
-// smallest of the maximum values. The idea is to get the top of
-// subscript glyphs, as used in Khmer, for example. Note that
-// this mechanism doesn't work for ordinary ligatures.
-//
-// This flags indicates a secondary blue zone: It gets removed if
-// there is a non-LATIN_SUB_TOP blue zone at the same coordinate
-// value (after scaling).
-//
-// Mutually exclusive with `LATIN_TOP'.
-//
-// LATIN_NEUTRAL
-// Ignore round extrema and define the blue zone with flat values only.
-// Both top and bottom of contours can match. This is useful for
-// scripts like Devanagari where vowel signs attach to the base
-// character and are implemented as components of composite glyphs.
-//
-// If not set, both round and flat extrema are taken into account.
-// Additionally, only the top or the bottom of a contour can match,
-// depending on the LATIN_TOP flag.
-//
-// Neutral blue zones should always follow non-neutral blue zones.
-//
-// LATIN_X_HEIGHT
-// Scale all glyphs vertically from the corresponding script to make the
-// reference line of this blue zone align on the grid. The scaling
-// takes place before all other blue zones get aligned to the grid.
-// Only one blue character string of a script style can have this flag.
-//
-// LATIN_LONG
-// Apply an additional constraint for blue zone values: Don't
-// necessarily use the extremum as-is but a segment of the topmost (or
-// bottommost) contour that is longer than a heuristic threshold, and
-// which is not too far away vertically from the real extremum. This
-// ensures that small bumps in the outline are ignored (for example, the
-// `vertical serifs' found in many Hebrew glyph designs).
-//
-// The segment must be at least EM/25 font units long, and the distance
-// to the extremum must be smaller than EM/4.
-//
-//
-// cjk auto-hinter
-// ---------------
-//
-// Characters in a blue string are *not* automatically classified. Instead,
-// first come the characters used for the overshoot value, then the
-// character `|', then the characters used for the reference value
-// (everything separated by space characters). The blue zone is then set up
-// by the mean values of all reference values and all overshoot values,
-// respectively. Both horizontal and vertical blue zones (i.e., adjusting
-// vertical and horizontal coordinate values, respectively) are supported.
-//
-// For the cjk auto-hinter, the overshoot should be smaller than the
-// reference for top zones, and vice versa for bottom zones.
-//
-// CJK_TOP
-// Take the maximum flat and round coordinate values of the blue string
-// characters. If not set, take the minimum values.
-//
-// CJK_RIGHT
-// A synonym for CJK_TOP. If CJK_HORIZ is set, this flag indicates the
-// right blue zone, taking horizontal maximum values.
-//
-// CJK_HORIZ
-// Define a blue zone for horizontal hinting (i.e., vertical blue
-// zones). If not set, this is a blue zone for vertical hinting.
-
-
-AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
-
- AF_BLUE_STRINGSET_ADLM
- { AF_BLUE_STRING_ADLAM_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM, 0 }
- { AF_BLUE_STRING_ADLAM_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_ADLAM_SMALL_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_ARAB
- { AF_BLUE_STRING_ARABIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_ARABIC_BOTTOM, 0 }
- { AF_BLUE_STRING_ARABIC_JOIN, AF_BLUE_PROPERTY_LATIN_NEUTRAL }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_ARMN
- { AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM, 0 }
- { AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_ARMENIAN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM, 0 }
- { AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_AVST
- { AF_BLUE_STRING_AVESTAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_AVESTAN_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_BAMU
- { AF_BLUE_STRING_BAMUM_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_BAMUM_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_BENG
- { AF_BLUE_STRING_BENGALI_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_BENGALI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_BENGALI_BASE, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_NEUTRAL |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_BENGALI_BASE, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_BUHD
- { AF_BLUE_STRING_BUHID_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_BUHID_LARGE, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_BUHID_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_BUHID_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_CAKM
- { AF_BLUE_STRING_CHAKMA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_CHAKMA_BOTTOM, 0 }
- { AF_BLUE_STRING_CHAKMA_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_CANS
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 }
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 }
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_CARI
- { AF_BLUE_STRING_CARIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_CARIAN_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_CHER
- { AF_BLUE_STRING_CHEROKEE_CAPITAL, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_CHEROKEE_CAPITAL, 0 }
- { AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_CHEROKEE_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_CHEROKEE_SMALL, 0 }
- { AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_COPT
- { AF_BLUE_STRING_COPTIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM, 0 }
- { AF_BLUE_STRING_COPTIC_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_COPTIC_SMALL_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_CPRT
- { AF_BLUE_STRING_CYPRIOT_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_CYPRIOT_BOTTOM, 0 }
- { AF_BLUE_STRING_CYPRIOT_SMALL, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_CYPRIOT_SMALL, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_CYRL
- { AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM, 0 }
- { AF_BLUE_STRING_CYRILLIC_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_CYRILLIC_SMALL, 0 }
- { AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_DEVA
- { AF_BLUE_STRING_DEVANAGARI_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_DEVANAGARI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_DEVANAGARI_BASE, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_NEUTRAL |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_DEVANAGARI_BASE, 0 }
- { AF_BLUE_STRING_DEVANAGARI_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_DSRT
- { AF_BLUE_STRING_DESERET_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM, 0 }
- { AF_BLUE_STRING_DESERET_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_DESERET_SMALL_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_ETHI
- { AF_BLUE_STRING_ETHIOPIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_ETHIOPIC_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- // blue zones for Mtavruli are missing (not yet defined in Unicode)
- AF_BLUE_STRINGSET_GEOR
- { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM, 0 }
- { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_GEOK
- { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM, 0 }
- { AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM, 0 }
- { AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_GLAG
- { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM, 0 }
- { AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_GOTH
- { AF_BLUE_STRING_GOTHIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_GOTHIC_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_GREK
- { AF_BLUE_STRING_GREEK_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM, 0 }
- { AF_BLUE_STRING_GREEK_SMALL_BETA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_GREEK_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_GREEK_SMALL, 0 }
- { AF_BLUE_STRING_GREEK_SMALL_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_GUJR
- { AF_BLUE_STRING_GUJARATI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_GUJARATI_BOTTOM, 0 }
- { AF_BLUE_STRING_GUJARATI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_GUJARATI_DESCENDER, 0 }
- { AF_BLUE_STRING_GUJARATI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_GURU
- { AF_BLUE_STRING_GURMUKHI_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_GURMUKHI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_GURMUKHI_BASE, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_NEUTRAL |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_GURMUKHI_BOTTOM, 0 }
- { AF_BLUE_STRING_GURMUKHI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_HEBR
- { AF_BLUE_STRING_HEBREW_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_LONG }
- { AF_BLUE_STRING_HEBREW_BOTTOM, 0 }
- { AF_BLUE_STRING_HEBREW_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_KALI
- { AF_BLUE_STRING_KAYAH_LI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_KAYAH_LI_BOTTOM, 0 }
- { AF_BLUE_STRING_KAYAH_LI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_KAYAH_LI_DESCENDER, 0 }
- { AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_KHMR
- { AF_BLUE_STRING_KHMER_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP, AF_BLUE_PROPERTY_LATIN_SUB_TOP }
- { AF_BLUE_STRING_KHMER_BOTTOM, 0 }
- { AF_BLUE_STRING_KHMER_DESCENDER, 0 }
- { AF_BLUE_STRING_KHMER_LARGE_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_KHMS
- { AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_KNDA
- { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_KANNADA_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_LAO
- { AF_BLUE_STRING_LAO_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_LAO_BOTTOM, 0 }
- { AF_BLUE_STRING_LAO_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_LAO_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_LAO_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_LATN
- { AF_BLUE_STRING_LATIN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM, 0 }
- { AF_BLUE_STRING_LATIN_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_LATIN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_LATIN_SMALL_BOTTOM, 0 }
- { AF_BLUE_STRING_LATIN_SMALL_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_LATB
- { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM, 0 }
- { AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_LATIN_SUBS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_LATIN_SUBS_SMALL, 0 }
- { AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_LATP
- { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM, 0 }
- { AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_LATIN_SUPS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_LATIN_SUPS_SMALL, 0 }
- { AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_LISU
- { AF_BLUE_STRING_LISU_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_LISU_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_MLYM
- { AF_BLUE_STRING_MALAYALAM_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_MALAYALAM_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_MYMR
- { AF_BLUE_STRING_MYANMAR_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_MYANMAR_BOTTOM, 0 }
- { AF_BLUE_STRING_MYANMAR_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_MYANMAR_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_NKOO
- { AF_BLUE_STRING_NKO_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_NKO_BOTTOM, 0 }
- { AF_BLUE_STRING_NKO_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_NKO_SMALL_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_NONE
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_OLCK
- { AF_BLUE_STRING_OL_CHIKI, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_OL_CHIKI, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_ORKH
- { AF_BLUE_STRING_OLD_TURKIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_OLD_TURKIC_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_OSGE
- { AF_BLUE_STRING_OSAGE_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM, 0 }
- { AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER, 0 }
- { AF_BLUE_STRING_OSAGE_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_OSAGE_SMALL_BOTTOM, 0 }
- { AF_BLUE_STRING_OSAGE_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_OSAGE_SMALL_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_OSMA
- { AF_BLUE_STRING_OSMANYA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_OSMANYA_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_SAUR
- { AF_BLUE_STRING_SAURASHTRA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_SAURASHTRA_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_SHAW
- { AF_BLUE_STRING_SHAVIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_SHAVIAN_BOTTOM, 0 }
- { AF_BLUE_STRING_SHAVIAN_DESCENDER, 0 }
- { AF_BLUE_STRING_SHAVIAN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_SINH
- { AF_BLUE_STRING_SINHALA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_SINHALA_BOTTOM, 0 }
- { AF_BLUE_STRING_SINHALA_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_SUND
- { AF_BLUE_STRING_SUNDANESE_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_SUNDANESE_BOTTOM, 0 }
- { AF_BLUE_STRING_SUNDANESE_DESCENDER, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_TAML
- { AF_BLUE_STRING_TAMIL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_TAMIL_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_TAVT
- { AF_BLUE_STRING_TAI_VIET_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_TAI_VIET_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_TELU
- { AF_BLUE_STRING_TELUGU_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_TELUGU_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_TFNG
- { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_TIFINAGH, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_THAI
- { AF_BLUE_STRING_THAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_THAI_BOTTOM, 0 }
- { AF_BLUE_STRING_THAI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_THAI_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_THAI_DESCENDER, 0 }
- { AF_BLUE_STRING_THAI_LARGE_DESCENDER, 0 }
- { AF_BLUE_STRING_THAI_DIGIT_TOP, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
- AF_BLUE_STRINGSET_VAII
- { AF_BLUE_STRING_VAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_VAI_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
-#ifdef AF_CONFIG_OPTION_CJK
-
- AF_BLUE_STRINGSET_HANI
- { AF_BLUE_STRING_CJK_TOP, AF_BLUE_PROPERTY_CJK_TOP }
- { AF_BLUE_STRING_CJK_BOTTOM, 0 }
-#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
- { AF_BLUE_STRING_CJK_LEFT, AF_BLUE_PROPERTY_CJK_HORIZ }
- { AF_BLUE_STRING_CJK_RIGHT, AF_BLUE_PROPERTY_CJK_HORIZ |
- AF_BLUE_PROPERTY_CJK_RIGHT }
-#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
- { AF_BLUE_STRING_MAX, 0 }
-
-#endif /* AF_CONFIG_OPTION_CJK */
-
-
-// END
diff --git a/src/autofit/afblue.h b/src/autofit/afblue.h
deleted file mode 100644
index 99ef51cd4..000000000
--- a/src/autofit/afblue.h
+++ /dev/null
@@ -1,412 +0,0 @@
-/* This file has been generated by the Perl script `afblue.pl', */
-/* using data from file `afblue.dat'. */
-
-/***************************************************************************/
-/* */
-/* afblue.h */
-/* */
-/* Auto-fitter data for blue strings (specification). */
-/* */
-/* Copyright 2013-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFBLUE_H_
-#define AFBLUE_H_
-
-
-FT_BEGIN_HEADER
-
-
- /* an auxiliary macro to decode a UTF-8 character -- since we only use */
- /* hard-coded, self-converted data, no error checking is performed */
-#define GET_UTF8_CHAR( ch, p ) \
- do \
- { \
- ch = (unsigned char)*p++; \
- if ( ch >= 0x80 ) \
- { \
- FT_UInt len_; \
- \
- \
- if ( ch < 0xE0 ) \
- { \
- len_ = 1; \
- ch &= 0x1F; \
- } \
- else if ( ch < 0xF0 ) \
- { \
- len_ = 2; \
- ch &= 0x0F; \
- } \
- else \
- { \
- len_ = 3; \
- ch &= 0x07; \
- } \
- \
- for ( ; len_ > 0; len_-- ) \
- ch = ( ch << 6 ) | ( *p++ & 0x3F ); \
- } \
- } while ( 0 )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** B L U E S T R I N G S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* At the bottommost level, we define strings for finding blue zones. */
-
-
-#define AF_BLUE_STRING_MAX_LEN 51
-
- /* The AF_Blue_String enumeration values are offsets into the */
- /* `af_blue_strings' array. */
-
- typedef enum AF_Blue_String_
- {
- AF_BLUE_STRING_ADLAM_CAPITAL_TOP = 0,
- AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM = 30,
- AF_BLUE_STRING_ADLAM_SMALL_TOP = 40,
- AF_BLUE_STRING_ADLAM_SMALL_BOTTOM = 65,
- AF_BLUE_STRING_ARABIC_TOP = 105,
- AF_BLUE_STRING_ARABIC_BOTTOM = 123,
- AF_BLUE_STRING_ARABIC_JOIN = 138,
- AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP = 141,
- AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM = 165,
- AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER = 189,
- AF_BLUE_STRING_ARMENIAN_SMALL_TOP = 210,
- AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM = 234,
- AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER = 258,
- AF_BLUE_STRING_AVESTAN_TOP = 282,
- AF_BLUE_STRING_AVESTAN_BOTTOM = 302,
- AF_BLUE_STRING_BAMUM_TOP = 312,
- AF_BLUE_STRING_BAMUM_BOTTOM = 344,
- AF_BLUE_STRING_BENGALI_BASE = 376,
- AF_BLUE_STRING_BENGALI_TOP = 408,
- AF_BLUE_STRING_BENGALI_HEAD = 436,
- AF_BLUE_STRING_BUHID_TOP = 468,
- AF_BLUE_STRING_BUHID_LARGE = 476,
- AF_BLUE_STRING_BUHID_SMALL = 488,
- AF_BLUE_STRING_BUHID_BOTTOM = 504,
- AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP = 532,
- AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM = 564,
- AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP = 596,
- AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM = 628,
- AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP = 660,
- AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM = 688,
- AF_BLUE_STRING_CARIAN_TOP = 720,
- AF_BLUE_STRING_CARIAN_BOTTOM = 760,
- AF_BLUE_STRING_CHAKMA_TOP = 795,
- AF_BLUE_STRING_CHAKMA_BOTTOM = 820,
- AF_BLUE_STRING_CHAKMA_DESCENDER = 845,
- AF_BLUE_STRING_CHEROKEE_CAPITAL = 910,
- AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER = 942,
- AF_BLUE_STRING_CHEROKEE_SMALL = 974,
- AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER = 1006,
- AF_BLUE_STRING_COPTIC_CAPITAL_TOP = 1022,
- AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM = 1054,
- AF_BLUE_STRING_COPTIC_SMALL_TOP = 1086,
- AF_BLUE_STRING_COPTIC_SMALL_BOTTOM = 1118,
- AF_BLUE_STRING_CYPRIOT_TOP = 1150,
- AF_BLUE_STRING_CYPRIOT_BOTTOM = 1190,
- AF_BLUE_STRING_CYPRIOT_SMALL = 1225,
- AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP = 1240,
- AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM = 1264,
- AF_BLUE_STRING_CYRILLIC_SMALL = 1288,
- AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER = 1312,
- AF_BLUE_STRING_DESERET_CAPITAL_TOP = 1321,
- AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM = 1346,
- AF_BLUE_STRING_DESERET_SMALL_TOP = 1371,
- AF_BLUE_STRING_DESERET_SMALL_BOTTOM = 1396,
- AF_BLUE_STRING_DEVANAGARI_BASE = 1421,
- AF_BLUE_STRING_DEVANAGARI_TOP = 1453,
- AF_BLUE_STRING_DEVANAGARI_HEAD = 1485,
- AF_BLUE_STRING_DEVANAGARI_BOTTOM = 1517,
- AF_BLUE_STRING_ETHIOPIC_TOP = 1525,
- AF_BLUE_STRING_ETHIOPIC_BOTTOM = 1557,
- AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP = 1589,
- AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM = 1621,
- AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER = 1653,
- AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER = 1685,
- AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP = 1717,
- AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM = 1749,
- AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP = 1781,
- AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM = 1813,
- AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER = 1845,
- AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER = 1877,
- AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP = 1909,
- AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM = 1941,
- AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP = 1973,
- AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM = 2005,
- AF_BLUE_STRING_GOTHIC_TOP = 2037,
- AF_BLUE_STRING_GOTHIC_BOTTOM = 2077,
- AF_BLUE_STRING_GREEK_CAPITAL_TOP = 2097,
- AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM = 2118,
- AF_BLUE_STRING_GREEK_SMALL_BETA_TOP = 2136,
- AF_BLUE_STRING_GREEK_SMALL = 2154,
- AF_BLUE_STRING_GREEK_SMALL_DESCENDER = 2178,
- AF_BLUE_STRING_GUJARATI_TOP = 2202,
- AF_BLUE_STRING_GUJARATI_BOTTOM = 2234,
- AF_BLUE_STRING_GUJARATI_ASCENDER = 2266,
- AF_BLUE_STRING_GUJARATI_DESCENDER = 2316,
- AF_BLUE_STRING_GUJARATI_DIGIT_TOP = 2349,
- AF_BLUE_STRING_GURMUKHI_BASE = 2369,
- AF_BLUE_STRING_GURMUKHI_HEAD = 2401,
- AF_BLUE_STRING_GURMUKHI_TOP = 2433,
- AF_BLUE_STRING_GURMUKHI_BOTTOM = 2465,
- AF_BLUE_STRING_GURMUKHI_DIGIT_TOP = 2497,
- AF_BLUE_STRING_HEBREW_TOP = 2517,
- AF_BLUE_STRING_HEBREW_BOTTOM = 2541,
- AF_BLUE_STRING_HEBREW_DESCENDER = 2559,
- AF_BLUE_STRING_KANNADA_TOP = 2574,
- AF_BLUE_STRING_KANNADA_BOTTOM = 2618,
- AF_BLUE_STRING_KAYAH_LI_TOP = 2650,
- AF_BLUE_STRING_KAYAH_LI_BOTTOM = 2674,
- AF_BLUE_STRING_KAYAH_LI_ASCENDER = 2694,
- AF_BLUE_STRING_KAYAH_LI_DESCENDER = 2702,
- AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER = 2714,
- AF_BLUE_STRING_KHMER_TOP = 2735,
- AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP = 2759,
- AF_BLUE_STRING_KHMER_BOTTOM = 2799,
- AF_BLUE_STRING_KHMER_DESCENDER = 2831,
- AF_BLUE_STRING_KHMER_LARGE_DESCENDER = 2865,
- AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP = 2952,
- AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM = 2960,
- AF_BLUE_STRING_LAO_TOP = 2968,
- AF_BLUE_STRING_LAO_BOTTOM = 3000,
- AF_BLUE_STRING_LAO_ASCENDER = 3032,
- AF_BLUE_STRING_LAO_LARGE_ASCENDER = 3048,
- AF_BLUE_STRING_LAO_DESCENDER = 3060,
- AF_BLUE_STRING_LATIN_CAPITAL_TOP = 3084,
- AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM = 3100,
- AF_BLUE_STRING_LATIN_SMALL_F_TOP = 3116,
- AF_BLUE_STRING_LATIN_SMALL_TOP = 3130,
- AF_BLUE_STRING_LATIN_SMALL_BOTTOM = 3146,
- AF_BLUE_STRING_LATIN_SMALL_DESCENDER = 3162,
- AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP = 3172,
- AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM = 3192,
- AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP = 3212,
- AF_BLUE_STRING_LATIN_SUBS_SMALL = 3232,
- AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER = 3268,
- AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP = 3288,
- AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM = 3319,
- AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP = 3348,
- AF_BLUE_STRING_LATIN_SUPS_SMALL = 3374,
- AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER = 3399,
- AF_BLUE_STRING_LISU_TOP = 3410,
- AF_BLUE_STRING_LISU_BOTTOM = 3442,
- AF_BLUE_STRING_MALAYALAM_TOP = 3474,
- AF_BLUE_STRING_MALAYALAM_BOTTOM = 3518,
- AF_BLUE_STRING_MYANMAR_TOP = 3550,
- AF_BLUE_STRING_MYANMAR_BOTTOM = 3582,
- AF_BLUE_STRING_MYANMAR_ASCENDER = 3614,
- AF_BLUE_STRING_MYANMAR_DESCENDER = 3642,
- AF_BLUE_STRING_NKO_TOP = 3674,
- AF_BLUE_STRING_NKO_BOTTOM = 3698,
- AF_BLUE_STRING_NKO_SMALL_TOP = 3713,
- AF_BLUE_STRING_NKO_SMALL_BOTTOM = 3722,
- AF_BLUE_STRING_OL_CHIKI = 3734,
- AF_BLUE_STRING_OLD_TURKIC_TOP = 3758,
- AF_BLUE_STRING_OLD_TURKIC_BOTTOM = 3773,
- AF_BLUE_STRING_OSAGE_CAPITAL_TOP = 3793,
- AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM = 3833,
- AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER = 3863,
- AF_BLUE_STRING_OSAGE_SMALL_TOP = 3878,
- AF_BLUE_STRING_OSAGE_SMALL_BOTTOM = 3918,
- AF_BLUE_STRING_OSAGE_SMALL_ASCENDER = 3958,
- AF_BLUE_STRING_OSAGE_SMALL_DESCENDER = 3983,
- AF_BLUE_STRING_OSMANYA_TOP = 3998,
- AF_BLUE_STRING_OSMANYA_BOTTOM = 4038,
- AF_BLUE_STRING_SAURASHTRA_TOP = 4078,
- AF_BLUE_STRING_SAURASHTRA_BOTTOM = 4110,
- AF_BLUE_STRING_SHAVIAN_TOP = 4130,
- AF_BLUE_STRING_SHAVIAN_BOTTOM = 4140,
- AF_BLUE_STRING_SHAVIAN_DESCENDER = 4165,
- AF_BLUE_STRING_SHAVIAN_SMALL_TOP = 4175,
- AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM = 4210,
- AF_BLUE_STRING_SINHALA_TOP = 4225,
- AF_BLUE_STRING_SINHALA_BOTTOM = 4257,
- AF_BLUE_STRING_SINHALA_DESCENDER = 4289,
- AF_BLUE_STRING_SUNDANESE_TOP = 4333,
- AF_BLUE_STRING_SUNDANESE_BOTTOM = 4357,
- AF_BLUE_STRING_SUNDANESE_DESCENDER = 4389,
- AF_BLUE_STRING_TAI_VIET_TOP = 4397,
- AF_BLUE_STRING_TAI_VIET_BOTTOM = 4417,
- AF_BLUE_STRING_TAMIL_TOP = 4429,
- AF_BLUE_STRING_TAMIL_BOTTOM = 4461,
- AF_BLUE_STRING_TELUGU_TOP = 4493,
- AF_BLUE_STRING_TELUGU_BOTTOM = 4521,
- AF_BLUE_STRING_THAI_TOP = 4549,
- AF_BLUE_STRING_THAI_BOTTOM = 4573,
- AF_BLUE_STRING_THAI_ASCENDER = 4601,
- AF_BLUE_STRING_THAI_LARGE_ASCENDER = 4613,
- AF_BLUE_STRING_THAI_DESCENDER = 4625,
- AF_BLUE_STRING_THAI_LARGE_DESCENDER = 4641,
- AF_BLUE_STRING_THAI_DIGIT_TOP = 4649,
- AF_BLUE_STRING_TIFINAGH = 4661,
- AF_BLUE_STRING_VAI_TOP = 4693,
- AF_BLUE_STRING_VAI_BOTTOM = 4725,
- af_blue_1_1 = 4756,
-#ifdef AF_CONFIG_OPTION_CJK
- AF_BLUE_STRING_CJK_TOP = af_blue_1_1 + 1,
- AF_BLUE_STRING_CJK_BOTTOM = af_blue_1_1 + 203,
- af_blue_1_1_1 = af_blue_1_1 + 404,
-#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
- AF_BLUE_STRING_CJK_LEFT = af_blue_1_1_1 + 1,
- AF_BLUE_STRING_CJK_RIGHT = af_blue_1_1_1 + 204,
- af_blue_1_1_2 = af_blue_1_1_1 + 405,
-#else
- af_blue_1_1_2 = af_blue_1_1_1 + 0,
-#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
- af_blue_1_2 = af_blue_1_1_2 + 0,
-#else
- af_blue_1_2 = af_blue_1_1 + 0,
-#endif /* AF_CONFIG_OPTION_CJK */
-
-
- AF_BLUE_STRING_MAX /* do not remove */
-
- } AF_Blue_String;
-
-
- FT_LOCAL_ARRAY( char )
- af_blue_strings[];
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** B L U E S T R I N G S E T S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* The next level is to group blue strings into style-specific sets. */
-
-
- /* Properties are specific to a writing system. We assume that a given */
- /* blue string can't be used in more than a single writing system, which */
- /* is a safe bet. */
-#define AF_BLUE_PROPERTY_LATIN_TOP ( 1U << 0 ) /* must have value 1 */
-#define AF_BLUE_PROPERTY_LATIN_SUB_TOP ( 1U << 1 )
-#define AF_BLUE_PROPERTY_LATIN_NEUTRAL ( 1U << 2 )
-#define AF_BLUE_PROPERTY_LATIN_X_HEIGHT ( 1U << 3 )
-#define AF_BLUE_PROPERTY_LATIN_LONG ( 1U << 4 )
-
-#define AF_BLUE_PROPERTY_CJK_TOP ( 1U << 0 ) /* must have value 1 */
-#define AF_BLUE_PROPERTY_CJK_HORIZ ( 1U << 1 ) /* must have value 2 */
-#define AF_BLUE_PROPERTY_CJK_RIGHT AF_BLUE_PROPERTY_CJK_TOP
-
-
-#define AF_BLUE_STRINGSET_MAX_LEN 8
-
- /* The AF_Blue_Stringset enumeration values are offsets into the */
- /* `af_blue_stringsets' array. */
-
- typedef enum AF_Blue_Stringset_
- {
- AF_BLUE_STRINGSET_ADLM = 0,
- AF_BLUE_STRINGSET_ARAB = 5,
- AF_BLUE_STRINGSET_ARMN = 9,
- AF_BLUE_STRINGSET_AVST = 16,
- AF_BLUE_STRINGSET_BAMU = 19,
- AF_BLUE_STRINGSET_BENG = 22,
- AF_BLUE_STRINGSET_BUHD = 27,
- AF_BLUE_STRINGSET_CAKM = 32,
- AF_BLUE_STRINGSET_CANS = 36,
- AF_BLUE_STRINGSET_CARI = 43,
- AF_BLUE_STRINGSET_CHER = 46,
- AF_BLUE_STRINGSET_COPT = 53,
- AF_BLUE_STRINGSET_CPRT = 58,
- AF_BLUE_STRINGSET_CYRL = 63,
- AF_BLUE_STRINGSET_DEVA = 69,
- AF_BLUE_STRINGSET_DSRT = 75,
- AF_BLUE_STRINGSET_ETHI = 80,
- AF_BLUE_STRINGSET_GEOR = 83,
- AF_BLUE_STRINGSET_GEOK = 88,
- AF_BLUE_STRINGSET_GLAG = 95,
- AF_BLUE_STRINGSET_GOTH = 100,
- AF_BLUE_STRINGSET_GREK = 103,
- AF_BLUE_STRINGSET_GUJR = 110,
- AF_BLUE_STRINGSET_GURU = 116,
- AF_BLUE_STRINGSET_HEBR = 122,
- AF_BLUE_STRINGSET_KALI = 126,
- AF_BLUE_STRINGSET_KHMR = 132,
- AF_BLUE_STRINGSET_KHMS = 138,
- AF_BLUE_STRINGSET_KNDA = 141,
- AF_BLUE_STRINGSET_LAO = 144,
- AF_BLUE_STRINGSET_LATN = 150,
- AF_BLUE_STRINGSET_LATB = 157,
- AF_BLUE_STRINGSET_LATP = 164,
- AF_BLUE_STRINGSET_LISU = 171,
- AF_BLUE_STRINGSET_MLYM = 174,
- AF_BLUE_STRINGSET_MYMR = 177,
- AF_BLUE_STRINGSET_NKOO = 182,
- AF_BLUE_STRINGSET_NONE = 187,
- AF_BLUE_STRINGSET_OLCK = 188,
- AF_BLUE_STRINGSET_ORKH = 191,
- AF_BLUE_STRINGSET_OSGE = 194,
- AF_BLUE_STRINGSET_OSMA = 202,
- AF_BLUE_STRINGSET_SAUR = 205,
- AF_BLUE_STRINGSET_SHAW = 208,
- AF_BLUE_STRINGSET_SINH = 214,
- AF_BLUE_STRINGSET_SUND = 218,
- AF_BLUE_STRINGSET_TAML = 222,
- AF_BLUE_STRINGSET_TAVT = 225,
- AF_BLUE_STRINGSET_TELU = 228,
- AF_BLUE_STRINGSET_TFNG = 231,
- AF_BLUE_STRINGSET_THAI = 234,
- AF_BLUE_STRINGSET_VAII = 242,
- af_blue_2_1 = 245,
-#ifdef AF_CONFIG_OPTION_CJK
- AF_BLUE_STRINGSET_HANI = af_blue_2_1 + 0,
- af_blue_2_1_1 = af_blue_2_1 + 2,
-#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
- af_blue_2_1_2 = af_blue_2_1_1 + 2,
-#else
- af_blue_2_1_2 = af_blue_2_1_1 + 0,
-#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
- af_blue_2_2 = af_blue_2_1_2 + 1,
-#else
- af_blue_2_2 = af_blue_2_1 + 0,
-#endif /* AF_CONFIG_OPTION_CJK */
-
-
- AF_BLUE_STRINGSET_MAX /* do not remove */
-
- } AF_Blue_Stringset;
-
-
- typedef struct AF_Blue_StringRec_
- {
- AF_Blue_String string;
- FT_UShort properties;
-
- } AF_Blue_StringRec;
-
-
- FT_LOCAL_ARRAY( AF_Blue_StringRec )
- af_blue_stringsets[];
-
-/* */
-
-FT_END_HEADER
-
-
-#endif /* AFBLUE_H_ */
-
-
-/* END */
diff --git a/src/autofit/afblue.hin b/src/autofit/afblue.hin
deleted file mode 100644
index 268bcbc53..000000000
--- a/src/autofit/afblue.hin
+++ /dev/null
@@ -1,146 +0,0 @@
-/***************************************************************************/
-/* */
-/* afblue.h */
-/* */
-/* Auto-fitter data for blue strings (specification). */
-/* */
-/* Copyright 2013-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFBLUE_H_
-#define AFBLUE_H_
-
-
-FT_BEGIN_HEADER
-
-
- /* an auxiliary macro to decode a UTF-8 character -- since we only use */
- /* hard-coded, self-converted data, no error checking is performed */
-#define GET_UTF8_CHAR( ch, p ) \
- do \
- { \
- ch = (unsigned char)*p++; \
- if ( ch >= 0x80 ) \
- { \
- FT_UInt len_; \
- \
- \
- if ( ch < 0xE0 ) \
- { \
- len_ = 1; \
- ch &= 0x1F; \
- } \
- else if ( ch < 0xF0 ) \
- { \
- len_ = 2; \
- ch &= 0x0F; \
- } \
- else \
- { \
- len_ = 3; \
- ch &= 0x07; \
- } \
- \
- for ( ; len_ > 0; len_-- ) \
- ch = ( ch << 6 ) | ( *p++ & 0x3F ); \
- } \
- } while ( 0 )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** B L U E S T R I N G S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* At the bottommost level, we define strings for finding blue zones. */
-
-
-#define AF_BLUE_STRING_MAX_LEN @AF_BLUE_STRING_MAX_LEN@
-
- /* The AF_Blue_String enumeration values are offsets into the */
- /* `af_blue_strings' array. */
-
- typedef enum AF_Blue_String_
- {
-@AF_BLUE_STRING_ENUM@
-
- AF_BLUE_STRING_MAX /* do not remove */
-
- } AF_Blue_String;
-
-
- FT_LOCAL_ARRAY( char )
- af_blue_strings[];
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** B L U E S T R I N G S E T S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* The next level is to group blue strings into style-specific sets. */
-
-
- /* Properties are specific to a writing system. We assume that a given */
- /* blue string can't be used in more than a single writing system, which */
- /* is a safe bet. */
-#define AF_BLUE_PROPERTY_LATIN_TOP ( 1U << 0 ) /* must have value 1 */
-#define AF_BLUE_PROPERTY_LATIN_SUB_TOP ( 1U << 1 )
-#define AF_BLUE_PROPERTY_LATIN_NEUTRAL ( 1U << 2 )
-#define AF_BLUE_PROPERTY_LATIN_X_HEIGHT ( 1U << 3 )
-#define AF_BLUE_PROPERTY_LATIN_LONG ( 1U << 4 )
-
-#define AF_BLUE_PROPERTY_CJK_TOP ( 1U << 0 ) /* must have value 1 */
-#define AF_BLUE_PROPERTY_CJK_HORIZ ( 1U << 1 ) /* must have value 2 */
-#define AF_BLUE_PROPERTY_CJK_RIGHT AF_BLUE_PROPERTY_CJK_TOP
-
-
-#define AF_BLUE_STRINGSET_MAX_LEN @AF_BLUE_STRINGSET_MAX_LEN@
-
- /* The AF_Blue_Stringset enumeration values are offsets into the */
- /* `af_blue_stringsets' array. */
-
- typedef enum AF_Blue_Stringset_
- {
-@AF_BLUE_STRINGSET_ENUM@
-
- AF_BLUE_STRINGSET_MAX /* do not remove */
-
- } AF_Blue_Stringset;
-
-
- typedef struct AF_Blue_StringRec_
- {
- AF_Blue_String string;
- FT_UShort properties;
-
- } AF_Blue_StringRec;
-
-
- FT_LOCAL_ARRAY( AF_Blue_StringRec )
- af_blue_stringsets[];
-
-/* */
-
-FT_END_HEADER
-
-
-#endif /* AFBLUE_H_ */
-
-
-/* END */
diff --git a/src/autofit/afcjk.c b/src/autofit/afcjk.c
deleted file mode 100644
index 897533d14..000000000
--- a/src/autofit/afcjk.c
+++ /dev/null
@@ -1,2381 +0,0 @@
-/***************************************************************************/
-/* */
-/* afcjk.c */
-/* */
-/* Auto-fitter hinting routines for CJK writing system (body). */
-/* */
-/* Copyright 2006-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*
- * The algorithm is based on akito's autohint patch, available here:
- *
- * http://www.kde.gr.jp/~akito/patch/freetype2/
- *
- */
-
-#include <ft2build.h>
-#include FT_ADVANCES_H
-#include FT_INTERNAL_DEBUG_H
-
-#include "afglobal.h"
-#include "afpic.h"
-#include "aflatin.h"
-#include "afcjk.h"
-
-
-#ifdef AF_CONFIG_OPTION_CJK
-
-#undef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
-
-#include "aferrors.h"
-
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-#include "afwarp.h"
-#endif
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_afcjk
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** C J K G L O B A L M E T R I C S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* Basically the Latin version with AF_CJKMetrics */
- /* to replace AF_LatinMetrics. */
-
- FT_LOCAL_DEF( void )
- af_cjk_metrics_init_widths( AF_CJKMetrics metrics,
- FT_Face face )
- {
- /* scan the array of segments in each direction */
- AF_GlyphHintsRec hints[1];
-
-
- FT_TRACE5(( "\n"
- "cjk standard widths computation (style `%s')\n"
- "===================================================\n"
- "\n",
- af_style_names[metrics->root.style_class->style] ));
-
- af_glyph_hints_init( hints, face->memory );
-
- metrics->axis[AF_DIMENSION_HORZ].width_count = 0;
- metrics->axis[AF_DIMENSION_VERT].width_count = 0;
-
- {
- FT_Error error;
- FT_ULong glyph_index;
- int dim;
- AF_CJKMetricsRec dummy[1];
- AF_Scaler scaler = &dummy->root.scaler;
-
-#ifdef FT_CONFIG_OPTION_PIC
- AF_FaceGlobals globals = metrics->root.globals;
-#endif
-
- AF_StyleClass style_class = metrics->root.style_class;
- AF_ScriptClass script_class = AF_SCRIPT_CLASSES_GET
- [style_class->script];
-
- void* shaper_buf;
- const char* p;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_ULong ch = 0;
-#endif
-
- p = script_class->standard_charstring;
- shaper_buf = af_shaper_buf_create( face );
-
- /* We check a list of standard characters. The first match wins. */
-
- glyph_index = 0;
- while ( *p )
- {
- unsigned int num_idx;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- const char* p_old;
-#endif
-
-
- while ( *p == ' ' )
- p++;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- p_old = p;
- GET_UTF8_CHAR( ch, p_old );
-#endif
-
- /* reject input that maps to more than a single glyph */
- p = af_shaper_get_cluster( p, &metrics->root, shaper_buf, &num_idx );
- if ( num_idx > 1 )
- continue;
-
- /* otherwise exit loop if we have a result */
- glyph_index = af_shaper_get_elem( &metrics->root,
- shaper_buf,
- 0,
- NULL,
- NULL );
- if ( glyph_index )
- break;
- }
-
- af_shaper_buf_destroy( face, shaper_buf );
-
- if ( !glyph_index )
- goto Exit;
-
- if ( !glyph_index )
- goto Exit;
-
- FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n",
- ch, glyph_index ));
-
- error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
- if ( error || face->glyph->outline.n_points <= 0 )
- goto Exit;
-
- FT_ZERO( dummy );
-
- dummy->units_per_em = metrics->units_per_em;
-
- scaler->x_scale = 0x10000L;
- scaler->y_scale = 0x10000L;
- scaler->x_delta = 0;
- scaler->y_delta = 0;
-
- scaler->face = face;
- scaler->render_mode = FT_RENDER_MODE_NORMAL;
- scaler->flags = 0;
-
- af_glyph_hints_rescale( hints, (AF_StyleMetrics)dummy );
-
- error = af_glyph_hints_reload( hints, &face->glyph->outline );
- if ( error )
- goto Exit;
-
- for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
- {
- AF_CJKAxis axis = &metrics->axis[dim];
- AF_AxisHints axhints = &hints->axis[dim];
- AF_Segment seg, limit, link;
- FT_UInt num_widths = 0;
-
-
- error = af_latin_hints_compute_segments( hints,
- (AF_Dimension)dim );
- if ( error )
- goto Exit;
-
- /*
- * We assume that the glyphs selected for the stem width
- * computation are `featureless' enough so that the linking
- * algorithm works fine without adjustments of its scoring
- * function.
- */
- af_latin_hints_link_segments( hints,
- 0,
- NULL,
- (AF_Dimension)dim );
-
- seg = axhints->segments;
- limit = seg + axhints->num_segments;
-
- for ( ; seg < limit; seg++ )
- {
- link = seg->link;
-
- /* we only consider stem segments there! */
- if ( link && link->link == seg && link > seg )
- {
- FT_Pos dist;
-
-
- dist = seg->pos - link->pos;
- if ( dist < 0 )
- dist = -dist;
-
- if ( num_widths < AF_CJK_MAX_WIDTHS )
- axis->widths[num_widths++].org = dist;
- }
- }
-
- /* this also replaces multiple almost identical stem widths */
- /* with a single one (the value 100 is heuristic) */
- af_sort_and_quantize_widths( &num_widths, axis->widths,
- dummy->units_per_em / 100 );
- axis->width_count = num_widths;
- }
-
- Exit:
- for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
- {
- AF_CJKAxis axis = &metrics->axis[dim];
- FT_Pos stdw;
-
-
- stdw = ( axis->width_count > 0 ) ? axis->widths[0].org
- : AF_LATIN_CONSTANT( metrics, 50 );
-
- /* let's try 20% of the smallest width */
- axis->edge_distance_threshold = stdw / 5;
- axis->standard_width = stdw;
- axis->extra_light = 0;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- {
- FT_UInt i;
-
-
- FT_TRACE5(( "%s widths:\n",
- dim == AF_DIMENSION_VERT ? "horizontal"
- : "vertical" ));
-
- FT_TRACE5(( " %d (standard)", axis->standard_width ));
- for ( i = 1; i < axis->width_count; i++ )
- FT_TRACE5(( " %d", axis->widths[i].org ));
-
- FT_TRACE5(( "\n" ));
- }
-#endif
- }
- }
-
- FT_TRACE5(( "\n" ));
-
- af_glyph_hints_done( hints );
- }
-
-
- /* Find all blue zones. */
-
- static void
- af_cjk_metrics_init_blues( AF_CJKMetrics metrics,
- FT_Face face )
- {
- FT_Pos fills[AF_BLUE_STRING_MAX_LEN];
- FT_Pos flats[AF_BLUE_STRING_MAX_LEN];
-
- FT_UInt num_fills;
- FT_UInt num_flats;
-
- FT_Bool fill;
-
- AF_CJKBlue blue;
- FT_Error error;
- AF_CJKAxis axis;
- FT_Outline outline;
-
- AF_StyleClass sc = metrics->root.style_class;
-
- AF_Blue_Stringset bss = sc->blue_stringset;
- const AF_Blue_StringRec* bs = &af_blue_stringsets[bss];
-
- void* shaper_buf;
-
-
- /* we walk over the blue character strings as specified in the */
- /* style's entry in the `af_blue_stringset' array, computing its */
- /* extremum points (depending on the string properties) */
-
- FT_TRACE5(( "cjk blue zones computation\n"
- "==========================\n"
- "\n" ));
-
- shaper_buf = af_shaper_buf_create( face );
-
- for ( ; bs->string != AF_BLUE_STRING_MAX; bs++ )
- {
- const char* p = &af_blue_strings[bs->string];
- FT_Pos* blue_ref;
- FT_Pos* blue_shoot;
-
-
- if ( AF_CJK_IS_HORIZ_BLUE( bs ) )
- axis = &metrics->axis[AF_DIMENSION_HORZ];
- else
- axis = &metrics->axis[AF_DIMENSION_VERT];
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- {
- FT_String* cjk_blue_name[4] =
- {
- (FT_String*)"bottom", /* -- , -- */
- (FT_String*)"top", /* -- , TOP */
- (FT_String*)"left", /* HORIZ, -- */
- (FT_String*)"right" /* HORIZ, TOP */
- };
-
-
- FT_TRACE5(( "blue zone %d (%s):\n",
- axis->blue_count,
- cjk_blue_name[AF_CJK_IS_HORIZ_BLUE( bs ) |
- AF_CJK_IS_TOP_BLUE( bs ) ] ));
- }
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
- num_fills = 0;
- num_flats = 0;
-
- fill = 1; /* start with characters that define fill values */
- FT_TRACE5(( " [overshoot values]\n" ));
-
- while ( *p )
- {
- FT_ULong glyph_index;
- FT_Pos best_pos; /* same as points.y or points.x, resp. */
- FT_Int best_point;
- FT_Vector* points;
-
- unsigned int num_idx;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- const char* p_old;
- FT_ULong ch;
-#endif
-
-
- while ( *p == ' ' )
- p++;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- p_old = p;
- GET_UTF8_CHAR( ch, p_old );
-#endif
-
- /* switch to characters that define flat values */
- if ( *p == '|' )
- {
- fill = 0;
- FT_TRACE5(( " [reference values]\n" ));
- p++;
- continue;
- }
-
- /* reject input that maps to more than a single glyph */
- p = af_shaper_get_cluster( p, &metrics->root, shaper_buf, &num_idx );
- if ( num_idx > 1 )
- continue;
-
- /* load the character in the face -- skip unknown or empty ones */
- glyph_index = af_shaper_get_elem( &metrics->root,
- shaper_buf,
- 0,
- NULL,
- NULL );
- if ( glyph_index == 0 )
- {
- FT_TRACE5(( " U+%04lX unavailable\n", ch ));
- continue;
- }
-
- error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
- outline = face->glyph->outline;
- if ( error || outline.n_points <= 2 )
- {
- FT_TRACE5(( " U+%04lX contains no (usable) outlines\n", ch ));
- continue;
- }
-
- /* now compute min or max point indices and coordinates */
- points = outline.points;
- best_point = -1;
- best_pos = 0; /* make compiler happy */
-
- {
- FT_Int nn;
- FT_Int first = 0;
- FT_Int last = -1;
-
-
- for ( nn = 0; nn < outline.n_contours; first = last + 1, nn++ )
- {
- FT_Int pp;
-
-
- last = outline.contours[nn];
-
- /* Avoid single-point contours since they are never rasterized. */
- /* In some fonts, they correspond to mark attachment points */
- /* which are way outside of the glyph's real outline. */
- if ( last <= first )
- continue;
-
- if ( AF_CJK_IS_HORIZ_BLUE( bs ) )
- {
- if ( AF_CJK_IS_RIGHT_BLUE( bs ) )
- {
- for ( pp = first; pp <= last; pp++ )
- if ( best_point < 0 || points[pp].x > best_pos )
- {
- best_point = pp;
- best_pos = points[pp].x;
- }
- }
- else
- {
- for ( pp = first; pp <= last; pp++ )
- if ( best_point < 0 || points[pp].x < best_pos )
- {
- best_point = pp;
- best_pos = points[pp].x;
- }
- }
- }
- else
- {
- if ( AF_CJK_IS_TOP_BLUE( bs ) )
- {
- for ( pp = first; pp <= last; pp++ )
- if ( best_point < 0 || points[pp].y > best_pos )
- {
- best_point = pp;
- best_pos = points[pp].y;
- }
- }
- else
- {
- for ( pp = first; pp <= last; pp++ )
- if ( best_point < 0 || points[pp].y < best_pos )
- {
- best_point = pp;
- best_pos = points[pp].y;
- }
- }
- }
- }
-
- FT_TRACE5(( " U+%04lX: best_pos = %5ld\n", ch, best_pos ));
- }
-
- if ( fill )
- fills[num_fills++] = best_pos;
- else
- flats[num_flats++] = best_pos;
-
- } /* end while loop */
-
- if ( num_flats == 0 && num_fills == 0 )
- {
- /*
- * we couldn't find a single glyph to compute this blue zone,
- * we will simply ignore it then
- */
- FT_TRACE5(( " empty\n" ));
- continue;
- }
-
- /* we have computed the contents of the `fill' and `flats' tables, */
- /* now determine the reference and overshoot position of the blue -- */
- /* we simply take the median value after a simple sort */
- af_sort_pos( num_fills, fills );
- af_sort_pos( num_flats, flats );
-
- blue = &axis->blues[axis->blue_count];
- blue_ref = &blue->ref.org;
- blue_shoot = &blue->shoot.org;
-
- axis->blue_count++;
-
- if ( num_flats == 0 )
- {
- *blue_ref =
- *blue_shoot = fills[num_fills / 2];
- }
- else if ( num_fills == 0 )
- {
- *blue_ref =
- *blue_shoot = flats[num_flats / 2];
- }
- else
- {
- *blue_ref = fills[num_fills / 2];
- *blue_shoot = flats[num_flats / 2];
- }
-
- /* make sure blue_ref >= blue_shoot for top/right or */
- /* vice versa for bottom/left */
- if ( *blue_shoot != *blue_ref )
- {
- FT_Pos ref = *blue_ref;
- FT_Pos shoot = *blue_shoot;
- FT_Bool under_ref = FT_BOOL( shoot < ref );
-
-
- /* AF_CJK_IS_TOP_BLUE covers `right' and `top' */
- if ( AF_CJK_IS_TOP_BLUE( bs ) ^ under_ref )
- {
- *blue_ref =
- *blue_shoot = ( shoot + ref ) / 2;
-
- FT_TRACE5(( " [reference smaller than overshoot,"
- " taking mean value]\n" ));
- }
- }
-
- blue->flags = 0;
- if ( AF_CJK_IS_TOP_BLUE( bs ) )
- blue->flags |= AF_CJK_BLUE_TOP;
-
- FT_TRACE5(( " -> reference = %ld\n"
- " overshoot = %ld\n",
- *blue_ref, *blue_shoot ));
-
- } /* end for loop */
-
- af_shaper_buf_destroy( face, shaper_buf );
-
- FT_TRACE5(( "\n" ));
-
- return;
- }
-
-
- /* Basically the Latin version with type AF_CJKMetrics for metrics. */
-
- FT_LOCAL_DEF( void )
- af_cjk_metrics_check_digits( AF_CJKMetrics metrics,
- FT_Face face )
- {
- FT_Bool started = 0, same_width = 1;
- FT_Fixed advance = 0, old_advance = 0;
-
- void* shaper_buf;
-
- /* in all supported charmaps, digits have character codes 0x30-0x39 */
- const char digits[] = "0 1 2 3 4 5 6 7 8 9";
- const char* p;
-
-
- p = digits;
- shaper_buf = af_shaper_buf_create( face );
-
- while ( *p )
- {
- FT_ULong glyph_index;
- unsigned int num_idx;
-
-
- /* reject input that maps to more than a single glyph */
- p = af_shaper_get_cluster( p, &metrics->root, shaper_buf, &num_idx );
- if ( num_idx > 1 )
- continue;
-
- glyph_index = af_shaper_get_elem( &metrics->root,
- shaper_buf,
- 0,
- &advance,
- NULL );
- if ( !glyph_index )
- continue;
-
- if ( started )
- {
- if ( advance != old_advance )
- {
- same_width = 0;
- break;
- }
- }
- else
- {
- old_advance = advance;
- started = 1;
- }
- }
-
- af_shaper_buf_destroy( face, shaper_buf );
-
- metrics->root.digits_have_same_width = same_width;
- }
-
-
- /* Initialize global metrics. */
-
- FT_LOCAL_DEF( FT_Error )
- af_cjk_metrics_init( AF_CJKMetrics metrics,
- FT_Face face )
- {
- FT_CharMap oldmap = face->charmap;
-
-
- metrics->units_per_em = face->units_per_EM;
-
- if ( !FT_Select_Charmap( face, FT_ENCODING_UNICODE ) )
- {
- af_cjk_metrics_init_widths( metrics, face );
- af_cjk_metrics_init_blues( metrics, face );
- af_cjk_metrics_check_digits( metrics, face );
- }
-
- FT_Set_Charmap( face, oldmap );
- return FT_Err_Ok;
- }
-
-
- /* Adjust scaling value, then scale and shift widths */
- /* and blue zones (if applicable) for given dimension. */
-
- static void
- af_cjk_metrics_scale_dim( AF_CJKMetrics metrics,
- AF_Scaler scaler,
- AF_Dimension dim )
- {
- FT_Fixed scale;
- FT_Pos delta;
- AF_CJKAxis axis;
- FT_UInt nn;
-
-
- if ( dim == AF_DIMENSION_HORZ )
- {
- scale = scaler->x_scale;
- delta = scaler->x_delta;
- }
- else
- {
- scale = scaler->y_scale;
- delta = scaler->y_delta;
- }
-
- axis = &metrics->axis[dim];
-
- if ( axis->org_scale == scale && axis->org_delta == delta )
- return;
-
- axis->org_scale = scale;
- axis->org_delta = delta;
-
- axis->scale = scale;
- axis->delta = delta;
-
- /* scale the blue zones */
- for ( nn = 0; nn < axis->blue_count; nn++ )
- {
- AF_CJKBlue blue = &axis->blues[nn];
- FT_Pos dist;
-
-
- blue->ref.cur = FT_MulFix( blue->ref.org, scale ) + delta;
- blue->ref.fit = blue->ref.cur;
- blue->shoot.cur = FT_MulFix( blue->shoot.org, scale ) + delta;
- blue->shoot.fit = blue->shoot.cur;
- blue->flags &= ~AF_CJK_BLUE_ACTIVE;
-
- /* a blue zone is only active if it is less than 3/4 pixels tall */
- dist = FT_MulFix( blue->ref.org - blue->shoot.org, scale );
- if ( dist <= 48 && dist >= -48 )
- {
- FT_Pos delta1, delta2;
-
-
- blue->ref.fit = FT_PIX_ROUND( blue->ref.cur );
-
- /* shoot is under shoot for cjk */
- delta1 = FT_DivFix( blue->ref.fit, scale ) - blue->shoot.org;
- delta2 = delta1;
- if ( delta1 < 0 )
- delta2 = -delta2;
-
- delta2 = FT_MulFix( delta2, scale );
-
- FT_TRACE5(( "delta: %d", delta1 ));
- if ( delta2 < 32 )
- delta2 = 0;
-#if 0
- else if ( delta2 < 64 )
- delta2 = 32 + ( ( ( delta2 - 32 ) + 16 ) & ~31 );
-#endif
- else
- delta2 = FT_PIX_ROUND( delta2 );
- FT_TRACE5(( "/%d\n", delta2 ));
-
- if ( delta1 < 0 )
- delta2 = -delta2;
-
- blue->shoot.fit = blue->ref.fit - delta2;
-
- FT_TRACE5(( ">> active cjk blue zone %c%d[%ld/%ld]:\n"
- " ref: cur=%.2f fit=%.2f\n"
- " shoot: cur=%.2f fit=%.2f\n",
- ( dim == AF_DIMENSION_HORZ ) ? 'H' : 'V',
- nn, blue->ref.org, blue->shoot.org,
- blue->ref.cur / 64.0, blue->ref.fit / 64.0,
- blue->shoot.cur / 64.0, blue->shoot.fit / 64.0 ));
-
- blue->flags |= AF_CJK_BLUE_ACTIVE;
- }
- }
- }
-
-
- /* Scale global values in both directions. */
-
- FT_LOCAL_DEF( void )
- af_cjk_metrics_scale( AF_CJKMetrics metrics,
- AF_Scaler scaler )
- {
- /* we copy the whole structure since the x and y scaling values */
- /* are not modified, contrary to e.g. the `latin' auto-hinter */
- metrics->root.scaler = *scaler;
-
- af_cjk_metrics_scale_dim( metrics, scaler, AF_DIMENSION_HORZ );
- af_cjk_metrics_scale_dim( metrics, scaler, AF_DIMENSION_VERT );
- }
-
-
- /* Extract standard_width from writing system/script specific */
- /* metrics class. */
-
- FT_LOCAL_DEF( void )
- af_cjk_get_standard_widths( AF_CJKMetrics metrics,
- FT_Pos* stdHW,
- FT_Pos* stdVW )
- {
- if ( stdHW )
- *stdHW = metrics->axis[AF_DIMENSION_VERT].standard_width;
-
- if ( stdVW )
- *stdVW = metrics->axis[AF_DIMENSION_HORZ].standard_width;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** C J K G L Y P H A N A L Y S I S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* Walk over all contours and compute its segments. */
-
- static FT_Error
- af_cjk_hints_compute_segments( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- AF_Segment segments = axis->segments;
- AF_Segment segment_limit = segments + axis->num_segments;
- FT_Error error;
- AF_Segment seg;
-
-
- error = af_latin_hints_compute_segments( hints, dim );
- if ( error )
- return error;
-
- /* a segment is round if it doesn't have successive */
- /* on-curve points. */
- for ( seg = segments; seg < segment_limit; seg++ )
- {
- AF_Point pt = seg->first;
- AF_Point last = seg->last;
- FT_UInt f0 = pt->flags & AF_FLAG_CONTROL;
- FT_UInt f1;
-
-
- seg->flags &= ~AF_EDGE_ROUND;
-
- for ( ; pt != last; f0 = f1 )
- {
- pt = pt->next;
- f1 = pt->flags & AF_FLAG_CONTROL;
-
- if ( !f0 && !f1 )
- break;
-
- if ( pt == last )
- seg->flags |= AF_EDGE_ROUND;
- }
- }
-
- return FT_Err_Ok;
- }
-
-
- static void
- af_cjk_hints_link_segments( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- AF_Segment segments = axis->segments;
- AF_Segment segment_limit = segments + axis->num_segments;
- AF_Direction major_dir = axis->major_dir;
- AF_Segment seg1, seg2;
- FT_Pos len_threshold;
- FT_Pos dist_threshold;
-
-
- len_threshold = AF_LATIN_CONSTANT( hints->metrics, 8 );
-
- dist_threshold = ( dim == AF_DIMENSION_HORZ ) ? hints->x_scale
- : hints->y_scale;
- dist_threshold = FT_DivFix( 64 * 3, dist_threshold );
-
- /* now compare each segment to the others */
- for ( seg1 = segments; seg1 < segment_limit; seg1++ )
- {
- if ( seg1->dir != major_dir )
- continue;
-
- for ( seg2 = segments; seg2 < segment_limit; seg2++ )
- if ( seg2 != seg1 && seg1->dir + seg2->dir == 0 )
- {
- FT_Pos dist = seg2->pos - seg1->pos;
-
-
- if ( dist < 0 )
- continue;
-
- {
- FT_Pos min = seg1->min_coord;
- FT_Pos max = seg1->max_coord;
- FT_Pos len;
-
-
- if ( min < seg2->min_coord )
- min = seg2->min_coord;
-
- if ( max > seg2->max_coord )
- max = seg2->max_coord;
-
- len = max - min;
- if ( len >= len_threshold )
- {
- if ( dist * 8 < seg1->score * 9 &&
- ( dist * 8 < seg1->score * 7 || seg1->len < len ) )
- {
- seg1->score = dist;
- seg1->len = len;
- seg1->link = seg2;
- }
-
- if ( dist * 8 < seg2->score * 9 &&
- ( dist * 8 < seg2->score * 7 || seg2->len < len ) )
- {
- seg2->score = dist;
- seg2->len = len;
- seg2->link = seg1;
- }
- }
- }
- }
- }
-
- /*
- * now compute the `serif' segments
- *
- * In Hanzi, some strokes are wider on one or both of the ends.
- * We either identify the stems on the ends as serifs or remove
- * the linkage, depending on the length of the stems.
- *
- */
-
- {
- AF_Segment link1, link2;
-
-
- for ( seg1 = segments; seg1 < segment_limit; seg1++ )
- {
- link1 = seg1->link;
- if ( !link1 || link1->link != seg1 || link1->pos <= seg1->pos )
- continue;
-
- if ( seg1->score >= dist_threshold )
- continue;
-
- for ( seg2 = segments; seg2 < segment_limit; seg2++ )
- {
- if ( seg2->pos > seg1->pos || seg1 == seg2 )
- continue;
-
- link2 = seg2->link;
- if ( !link2 || link2->link != seg2 || link2->pos < link1->pos )
- continue;
-
- if ( seg1->pos == seg2->pos && link1->pos == link2->pos )
- continue;
-
- if ( seg2->score <= seg1->score || seg1->score * 4 <= seg2->score )
- continue;
-
- /* seg2 < seg1 < link1 < link2 */
-
- if ( seg1->len >= seg2->len * 3 )
- {
- AF_Segment seg;
-
-
- for ( seg = segments; seg < segment_limit; seg++ )
- {
- AF_Segment link = seg->link;
-
-
- if ( link == seg2 )
- {
- seg->link = NULL;
- seg->serif = link1;
- }
- else if ( link == link2 )
- {
- seg->link = NULL;
- seg->serif = seg1;
- }
- }
- }
- else
- {
- seg1->link = link1->link = NULL;
-
- break;
- }
- }
- }
- }
-
- for ( seg1 = segments; seg1 < segment_limit; seg1++ )
- {
- seg2 = seg1->link;
-
- if ( seg2 )
- {
- if ( seg2->link != seg1 )
- {
- seg1->link = NULL;
-
- if ( seg2->score < dist_threshold || seg1->score < seg2->score * 4 )
- seg1->serif = seg2->link;
- }
- }
- }
- }
-
-
- static FT_Error
- af_cjk_hints_compute_edges( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- FT_Error error = FT_Err_Ok;
- FT_Memory memory = hints->memory;
- AF_CJKAxis laxis = &((AF_CJKMetrics)hints->metrics)->axis[dim];
-
- AF_Segment segments = axis->segments;
- AF_Segment segment_limit = segments + axis->num_segments;
- AF_Segment seg;
-
- FT_Fixed scale;
- FT_Pos edge_distance_threshold;
-
-
- axis->num_edges = 0;
-
- scale = ( dim == AF_DIMENSION_HORZ ) ? hints->x_scale
- : hints->y_scale;
-
- /*********************************************************************/
- /* */
- /* We begin by generating a sorted table of edges for the current */
- /* direction. To do so, we simply scan each segment and try to find */
- /* an edge in our table that corresponds to its position. */
- /* */
- /* If no edge is found, we create and insert a new edge in the */
- /* sorted table. Otherwise, we simply add the segment to the edge's */
- /* list which is then processed in the second step to compute the */
- /* edge's properties. */
- /* */
- /* Note that the edges table is sorted along the segment/edge */
- /* position. */
- /* */
- /*********************************************************************/
-
- edge_distance_threshold = FT_MulFix( laxis->edge_distance_threshold,
- scale );
- if ( edge_distance_threshold > 64 / 4 )
- edge_distance_threshold = FT_DivFix( 64 / 4, scale );
- else
- edge_distance_threshold = laxis->edge_distance_threshold;
-
- for ( seg = segments; seg < segment_limit; seg++ )
- {
- AF_Edge found = NULL;
- FT_Pos best = 0xFFFFU;
- FT_Int ee;
-
-
- /* look for an edge corresponding to the segment */
- for ( ee = 0; ee < axis->num_edges; ee++ )
- {
- AF_Edge edge = axis->edges + ee;
- FT_Pos dist;
-
-
- if ( edge->dir != seg->dir )
- continue;
-
- dist = seg->pos - edge->fpos;
- if ( dist < 0 )
- dist = -dist;
-
- if ( dist < edge_distance_threshold && dist < best )
- {
- AF_Segment link = seg->link;
-
-
- /* check whether all linked segments of the candidate edge */
- /* can make a single edge. */
- if ( link )
- {
- AF_Segment seg1 = edge->first;
- FT_Pos dist2 = 0;
-
-
- do
- {
- AF_Segment link1 = seg1->link;
-
-
- if ( link1 )
- {
- dist2 = AF_SEGMENT_DIST( link, link1 );
- if ( dist2 >= edge_distance_threshold )
- break;
- }
-
- } while ( ( seg1 = seg1->edge_next ) != edge->first );
-
- if ( dist2 >= edge_distance_threshold )
- continue;
- }
-
- best = dist;
- found = edge;
- }
- }
-
- if ( !found )
- {
- AF_Edge edge;
-
-
- /* insert a new edge in the list and */
- /* sort according to the position */
- error = af_axis_hints_new_edge( axis, seg->pos,
- (AF_Direction)seg->dir, 0,
- memory, &edge );
- if ( error )
- goto Exit;
-
- /* add the segment to the new edge's list */
- FT_ZERO( edge );
-
- edge->first = seg;
- edge->last = seg;
- edge->dir = seg->dir;
- edge->fpos = seg->pos;
- edge->opos = FT_MulFix( seg->pos, scale );
- edge->pos = edge->opos;
- seg->edge_next = seg;
- }
- else
- {
- /* if an edge was found, simply add the segment to the edge's */
- /* list */
- seg->edge_next = found->first;
- found->last->edge_next = seg;
- found->last = seg;
- }
- }
-
- /******************************************************************/
- /* */
- /* Good, we now compute each edge's properties according to the */
- /* segments found on its position. Basically, these are */
- /* */
- /* - the edge's main direction */
- /* - stem edge, serif edge or both (which defaults to stem then) */
- /* - rounded edge, straight or both (which defaults to straight) */
- /* - link for edge */
- /* */
- /******************************************************************/
-
- /* first of all, set the `edge' field in each segment -- this is */
- /* required in order to compute edge links */
-
- /*
- * Note that removing this loop and setting the `edge' field of each
- * segment directly in the code above slows down execution speed for
- * some reasons on platforms like the Sun.
- */
- {
- AF_Edge edges = axis->edges;
- AF_Edge edge_limit = edges + axis->num_edges;
- AF_Edge edge;
-
-
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- seg = edge->first;
- if ( seg )
- do
- {
- seg->edge = edge;
- seg = seg->edge_next;
-
- } while ( seg != edge->first );
- }
-
- /* now compute each edge properties */
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- FT_Int is_round = 0; /* does it contain round segments? */
- FT_Int is_straight = 0; /* does it contain straight segments? */
-
-
- seg = edge->first;
-
- do
- {
- FT_Bool is_serif;
-
-
- /* check for roundness of segment */
- if ( seg->flags & AF_EDGE_ROUND )
- is_round++;
- else
- is_straight++;
-
- /* check for links -- if seg->serif is set, then seg->link must */
- /* be ignored */
- is_serif = (FT_Bool)( seg->serif && seg->serif->edge != edge );
-
- if ( seg->link || is_serif )
- {
- AF_Edge edge2;
- AF_Segment seg2;
-
-
- edge2 = edge->link;
- seg2 = seg->link;
-
- if ( is_serif )
- {
- seg2 = seg->serif;
- edge2 = edge->serif;
- }
-
- if ( edge2 )
- {
- FT_Pos edge_delta;
- FT_Pos seg_delta;
-
-
- edge_delta = edge->fpos - edge2->fpos;
- if ( edge_delta < 0 )
- edge_delta = -edge_delta;
-
- seg_delta = AF_SEGMENT_DIST( seg, seg2 );
-
- if ( seg_delta < edge_delta )
- edge2 = seg2->edge;
- }
- else
- edge2 = seg2->edge;
-
- if ( is_serif )
- {
- edge->serif = edge2;
- edge2->flags |= AF_EDGE_SERIF;
- }
- else
- edge->link = edge2;
- }
-
- seg = seg->edge_next;
-
- } while ( seg != edge->first );
-
- /* set the round/straight flags */
- edge->flags = AF_EDGE_NORMAL;
-
- if ( is_round > 0 && is_round >= is_straight )
- edge->flags |= AF_EDGE_ROUND;
-
- /* get rid of serifs if link is set */
- /* XXX: This gets rid of many unpleasant artefacts! */
- /* Example: the `c' in cour.pfa at size 13 */
-
- if ( edge->serif && edge->link )
- edge->serif = NULL;
- }
- }
-
- Exit:
- return error;
- }
-
-
- /* Detect segments and edges for given dimension. */
-
- static FT_Error
- af_cjk_hints_detect_features( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- FT_Error error;
-
-
- error = af_cjk_hints_compute_segments( hints, dim );
- if ( !error )
- {
- af_cjk_hints_link_segments( hints, dim );
-
- error = af_cjk_hints_compute_edges( hints, dim );
- }
- return error;
- }
-
-
- /* Compute all edges which lie within blue zones. */
-
- static void
- af_cjk_hints_compute_blue_edges( AF_GlyphHints hints,
- AF_CJKMetrics metrics,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- AF_Edge edge = axis->edges;
- AF_Edge edge_limit = edge + axis->num_edges;
- AF_CJKAxis cjk = &metrics->axis[dim];
- FT_Fixed scale = cjk->scale;
- FT_Pos best_dist0; /* initial threshold */
-
-
- /* compute the initial threshold as a fraction of the EM size */
- best_dist0 = FT_MulFix( metrics->units_per_em / 40, scale );
-
- if ( best_dist0 > 64 / 2 ) /* maximum 1/2 pixel */
- best_dist0 = 64 / 2;
-
- /* compute which blue zones are active, i.e. have their scaled */
- /* size < 3/4 pixels */
-
- /* If the distant between an edge and a blue zone is shorter than */
- /* best_dist0, set the blue zone for the edge. Then search for */
- /* the blue zone with the smallest best_dist to the edge. */
-
- for ( ; edge < edge_limit; edge++ )
- {
- FT_UInt bb;
- AF_Width best_blue = NULL;
- FT_Pos best_dist = best_dist0;
-
-
- for ( bb = 0; bb < cjk->blue_count; bb++ )
- {
- AF_CJKBlue blue = cjk->blues + bb;
- FT_Bool is_top_right_blue, is_major_dir;
-
-
- /* skip inactive blue zones (i.e., those that are too small) */
- if ( !( blue->flags & AF_CJK_BLUE_ACTIVE ) )
- continue;
-
- /* if it is a top zone, check for right edges -- if it is a bottom */
- /* zone, check for left edges */
- /* */
- /* of course, that's for TrueType */
- is_top_right_blue =
- (FT_Byte)( ( blue->flags & AF_CJK_BLUE_TOP ) != 0 );
- is_major_dir =
- FT_BOOL( edge->dir == axis->major_dir );
-
- /* if it is a top zone, the edge must be against the major */
- /* direction; if it is a bottom zone, it must be in the major */
- /* direction */
- if ( is_top_right_blue ^ is_major_dir )
- {
- FT_Pos dist;
- AF_Width compare;
-
-
- /* Compare the edge to the closest blue zone type */
- if ( FT_ABS( edge->fpos - blue->ref.org ) >
- FT_ABS( edge->fpos - blue->shoot.org ) )
- compare = &blue->shoot;
- else
- compare = &blue->ref;
-
- dist = edge->fpos - compare->org;
- if ( dist < 0 )
- dist = -dist;
-
- dist = FT_MulFix( dist, scale );
- if ( dist < best_dist )
- {
- best_dist = dist;
- best_blue = compare;
- }
- }
- }
-
- if ( best_blue )
- edge->blue_edge = best_blue;
- }
- }
-
-
- /* Initalize hinting engine. */
-
- FT_LOCAL_DEF( FT_Error )
- af_cjk_hints_init( AF_GlyphHints hints,
- AF_CJKMetrics metrics )
- {
- FT_Render_Mode mode;
- FT_UInt32 scaler_flags, other_flags;
-
-
- af_glyph_hints_rescale( hints, (AF_StyleMetrics)metrics );
-
- /*
- * correct x_scale and y_scale when needed, since they may have
- * been modified af_cjk_scale_dim above
- */
- hints->x_scale = metrics->axis[AF_DIMENSION_HORZ].scale;
- hints->x_delta = metrics->axis[AF_DIMENSION_HORZ].delta;
- hints->y_scale = metrics->axis[AF_DIMENSION_VERT].scale;
- hints->y_delta = metrics->axis[AF_DIMENSION_VERT].delta;
-
- /* compute flags depending on render mode, etc. */
- mode = metrics->root.scaler.render_mode;
-
-#if 0 /* AF_CONFIG_OPTION_USE_WARPER */
- if ( mode == FT_RENDER_MODE_LCD || mode == FT_RENDER_MODE_LCD_V )
- metrics->root.scaler.render_mode = mode = FT_RENDER_MODE_NORMAL;
-#endif
-
- scaler_flags = hints->scaler_flags;
- other_flags = 0;
-
- /*
- * We snap the width of vertical stems for the monochrome and
- * horizontal LCD rendering targets only.
- */
- if ( mode == FT_RENDER_MODE_MONO || mode == FT_RENDER_MODE_LCD )
- other_flags |= AF_LATIN_HINTS_HORZ_SNAP;
-
- /*
- * We snap the width of horizontal stems for the monochrome and
- * vertical LCD rendering targets only.
- */
- if ( mode == FT_RENDER_MODE_MONO || mode == FT_RENDER_MODE_LCD_V )
- other_flags |= AF_LATIN_HINTS_VERT_SNAP;
-
- /*
- * We adjust stems to full pixels unless in `light' or `lcd' mode.
- */
- if ( mode != FT_RENDER_MODE_LIGHT && mode != FT_RENDER_MODE_LCD )
- other_flags |= AF_LATIN_HINTS_STEM_ADJUST;
-
- if ( mode == FT_RENDER_MODE_MONO )
- other_flags |= AF_LATIN_HINTS_MONO;
-
- scaler_flags |= AF_SCALER_FLAG_NO_ADVANCE;
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- /* get (global) warper flag */
- if ( !metrics->root.globals->module->warping )
- scaler_flags |= AF_SCALER_FLAG_NO_WARPER;
-#endif
-
- hints->scaler_flags = scaler_flags;
- hints->other_flags = other_flags;
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** C J K G L Y P H G R I D - F I T T I N G *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* Snap a given width in scaled coordinates to one of the */
- /* current standard widths. */
-
- static FT_Pos
- af_cjk_snap_width( AF_Width widths,
- FT_UInt count,
- FT_Pos width )
- {
- FT_UInt n;
- FT_Pos best = 64 + 32 + 2;
- FT_Pos reference = width;
- FT_Pos scaled;
-
-
- for ( n = 0; n < count; n++ )
- {
- FT_Pos w;
- FT_Pos dist;
-
-
- w = widths[n].cur;
- dist = width - w;
- if ( dist < 0 )
- dist = -dist;
- if ( dist < best )
- {
- best = dist;
- reference = w;
- }
- }
-
- scaled = FT_PIX_ROUND( reference );
-
- if ( width >= reference )
- {
- if ( width < scaled + 48 )
- width = reference;
- }
- else
- {
- if ( width > scaled - 48 )
- width = reference;
- }
-
- return width;
- }
-
-
- /* Compute the snapped width of a given stem. */
- /* There is a lot of voodoo in this function; changing the hard-coded */
- /* parameters influence the whole hinting process. */
-
- static FT_Pos
- af_cjk_compute_stem_width( AF_GlyphHints hints,
- AF_Dimension dim,
- FT_Pos width,
- FT_UInt base_flags,
- FT_UInt stem_flags )
- {
- AF_CJKMetrics metrics = (AF_CJKMetrics)hints->metrics;
- AF_CJKAxis axis = &metrics->axis[dim];
- FT_Pos dist = width;
- FT_Int sign = 0;
- FT_Bool vertical = FT_BOOL( dim == AF_DIMENSION_VERT );
-
- FT_UNUSED( base_flags );
- FT_UNUSED( stem_flags );
-
-
- if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) )
- return width;
-
- if ( dist < 0 )
- {
- dist = -width;
- sign = 1;
- }
-
- if ( ( vertical && !AF_LATIN_HINTS_DO_VERT_SNAP( hints ) ) ||
- ( !vertical && !AF_LATIN_HINTS_DO_HORZ_SNAP( hints ) ) )
- {
- /* smooth hinting process: very lightly quantize the stem width */
-
- if ( axis->width_count > 0 )
- {
- if ( FT_ABS( dist - axis->widths[0].cur ) < 40 )
- {
- dist = axis->widths[0].cur;
- if ( dist < 48 )
- dist = 48;
-
- goto Done_Width;
- }
- }
-
- if ( dist < 54 )
- dist += ( 54 - dist ) / 2;
- else if ( dist < 3 * 64 )
- {
- FT_Pos delta;
-
-
- delta = dist & 63;
- dist &= -64;
-
- if ( delta < 10 )
- dist += delta;
- else if ( delta < 22 )
- dist += 10;
- else if ( delta < 42 )
- dist += delta;
- else if ( delta < 54 )
- dist += 54;
- else
- dist += delta;
- }
- }
- else
- {
- /* strong hinting process: snap the stem width to integer pixels */
-
- dist = af_cjk_snap_width( axis->widths, axis->width_count, dist );
-
- if ( vertical )
- {
- /* in the case of vertical hinting, always round */
- /* the stem heights to integer pixels */
-
- if ( dist >= 64 )
- dist = ( dist + 16 ) & ~63;
- else
- dist = 64;
- }
- else
- {
- if ( AF_LATIN_HINTS_DO_MONO( hints ) )
- {
- /* monochrome horizontal hinting: snap widths to integer pixels */
- /* with a different threshold */
-
- if ( dist < 64 )
- dist = 64;
- else
- dist = ( dist + 32 ) & ~63;
- }
- else
- {
- /* for horizontal anti-aliased hinting, we adopt a more subtle */
- /* approach: we strengthen small stems, round stems whose size */
- /* is between 1 and 2 pixels to an integer, otherwise nothing */
-
- if ( dist < 48 )
- dist = ( dist + 64 ) >> 1;
-
- else if ( dist < 128 )
- dist = ( dist + 22 ) & ~63;
- else
- /* round otherwise to prevent color fringes in LCD mode */
- dist = ( dist + 32 ) & ~63;
- }
- }
- }
-
- Done_Width:
- if ( sign )
- dist = -dist;
-
- return dist;
- }
-
-
- /* Align one stem edge relative to the previous stem edge. */
-
- static void
- af_cjk_align_linked_edge( AF_GlyphHints hints,
- AF_Dimension dim,
- AF_Edge base_edge,
- AF_Edge stem_edge )
- {
- FT_Pos dist = stem_edge->opos - base_edge->opos;
-
- FT_Pos fitted_width = af_cjk_compute_stem_width( hints, dim, dist,
- base_edge->flags,
- stem_edge->flags );
-
-
- stem_edge->pos = base_edge->pos + fitted_width;
-
- FT_TRACE5(( " CJKLINK: edge %d @%d (opos=%.2f) linked to %.2f,"
- " dist was %.2f, now %.2f\n",
- stem_edge - hints->axis[dim].edges, stem_edge->fpos,
- stem_edge->opos / 64.0, stem_edge->pos / 64.0,
- dist / 64.0, fitted_width / 64.0 ));
- }
-
-
- /* Shift the coordinates of the `serif' edge by the same amount */
- /* as the corresponding `base' edge has been moved already. */
-
- static void
- af_cjk_align_serif_edge( AF_GlyphHints hints,
- AF_Edge base,
- AF_Edge serif )
- {
- FT_UNUSED( hints );
-
- serif->pos = base->pos + ( serif->opos - base->opos );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** E D G E H I N T I N G ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
-#define AF_LIGHT_MODE_MAX_HORZ_GAP 9
-#define AF_LIGHT_MODE_MAX_VERT_GAP 15
-#define AF_LIGHT_MODE_MAX_DELTA_ABS 14
-
-
- static FT_Pos
- af_hint_normal_stem( AF_GlyphHints hints,
- AF_Edge edge,
- AF_Edge edge2,
- FT_Pos anchor,
- AF_Dimension dim )
- {
- FT_Pos org_len, cur_len, org_center;
- FT_Pos cur_pos1, cur_pos2;
- FT_Pos d_off1, u_off1, d_off2, u_off2, delta;
- FT_Pos offset;
- FT_Pos threshold = 64;
-
-
- if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) )
- {
- if ( ( edge->flags & AF_EDGE_ROUND ) &&
- ( edge2->flags & AF_EDGE_ROUND ) )
- {
- if ( dim == AF_DIMENSION_VERT )
- threshold = 64 - AF_LIGHT_MODE_MAX_HORZ_GAP;
- else
- threshold = 64 - AF_LIGHT_MODE_MAX_VERT_GAP;
- }
- else
- {
- if ( dim == AF_DIMENSION_VERT )
- threshold = 64 - AF_LIGHT_MODE_MAX_HORZ_GAP / 3;
- else
- threshold = 64 - AF_LIGHT_MODE_MAX_VERT_GAP / 3;
- }
- }
-
- org_len = edge2->opos - edge->opos;
- cur_len = af_cjk_compute_stem_width( hints, dim, org_len,
- edge->flags,
- edge2->flags );
-
- org_center = ( edge->opos + edge2->opos ) / 2 + anchor;
- cur_pos1 = org_center - cur_len / 2;
- cur_pos2 = cur_pos1 + cur_len;
- d_off1 = cur_pos1 - FT_PIX_FLOOR( cur_pos1 );
- d_off2 = cur_pos2 - FT_PIX_FLOOR( cur_pos2 );
- u_off1 = 64 - d_off1;
- u_off2 = 64 - d_off2;
- delta = 0;
-
-
- if ( d_off1 == 0 || d_off2 == 0 )
- goto Exit;
-
- if ( cur_len <= threshold )
- {
- if ( d_off2 < cur_len )
- {
- if ( u_off1 <= d_off2 )
- delta = u_off1;
- else
- delta = -d_off2;
- }
-
- goto Exit;
- }
-
- if ( threshold < 64 )
- {
- if ( d_off1 >= threshold || u_off1 >= threshold ||
- d_off2 >= threshold || u_off2 >= threshold )
- goto Exit;
- }
-
- offset = cur_len & 63;
-
- if ( offset < 32 )
- {
- if ( u_off1 <= offset || d_off2 <= offset )
- goto Exit;
- }
- else
- offset = 64 - threshold;
-
- d_off1 = threshold - u_off1;
- u_off1 = u_off1 - offset;
- u_off2 = threshold - d_off2;
- d_off2 = d_off2 - offset;
-
- if ( d_off1 <= u_off1 )
- u_off1 = -d_off1;
-
- if ( d_off2 <= u_off2 )
- u_off2 = -d_off2;
-
- if ( FT_ABS( u_off1 ) <= FT_ABS( u_off2 ) )
- delta = u_off1;
- else
- delta = u_off2;
-
- Exit:
-
-#if 1
- if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) )
- {
- if ( delta > AF_LIGHT_MODE_MAX_DELTA_ABS )
- delta = AF_LIGHT_MODE_MAX_DELTA_ABS;
- else if ( delta < -AF_LIGHT_MODE_MAX_DELTA_ABS )
- delta = -AF_LIGHT_MODE_MAX_DELTA_ABS;
- }
-#endif
-
- cur_pos1 += delta;
-
- if ( edge->opos < edge2->opos )
- {
- edge->pos = cur_pos1;
- edge2->pos = cur_pos1 + cur_len;
- }
- else
- {
- edge->pos = cur_pos1 + cur_len;
- edge2->pos = cur_pos1;
- }
-
- return delta;
- }
-
-
- /* The main grid-fitting routine. */
-
- static void
- af_cjk_hint_edges( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- AF_Edge edges = axis->edges;
- AF_Edge edge_limit = edges + axis->num_edges;
- FT_PtrDist n_edges;
- AF_Edge edge;
- AF_Edge anchor = NULL;
- FT_Pos delta = 0;
- FT_Int skipped = 0;
- FT_Bool has_last_stem = FALSE;
- FT_Pos last_stem_pos = 0;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_UInt num_actions = 0;
-#endif
-
-
- FT_TRACE5(( "cjk %s edge hinting (style `%s')\n",
- dim == AF_DIMENSION_VERT ? "horizontal" : "vertical",
- af_style_names[hints->metrics->style_class->style] ));
-
- /* we begin by aligning all stems relative to the blue zone */
-
- if ( AF_HINTS_DO_BLUES( hints ) )
- {
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- AF_Width blue;
- AF_Edge edge1, edge2;
-
-
- if ( edge->flags & AF_EDGE_DONE )
- continue;
-
- blue = edge->blue_edge;
- edge1 = NULL;
- edge2 = edge->link;
-
- if ( blue )
- {
- edge1 = edge;
- }
- else if ( edge2 && edge2->blue_edge )
- {
- blue = edge2->blue_edge;
- edge1 = edge2;
- edge2 = edge;
- }
-
- if ( !edge1 )
- continue;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE5(( " CJKBLUE: edge %d @%d (opos=%.2f) snapped to %.2f,"
- " was %.2f\n",
- edge1 - edges, edge1->fpos, edge1->opos / 64.0,
- blue->fit / 64.0, edge1->pos / 64.0 ));
-
- num_actions++;
-#endif
-
- edge1->pos = blue->fit;
- edge1->flags |= AF_EDGE_DONE;
-
- if ( edge2 && !edge2->blue_edge )
- {
- af_cjk_align_linked_edge( hints, dim, edge1, edge2 );
- edge2->flags |= AF_EDGE_DONE;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- num_actions++;
-#endif
- }
-
- if ( !anchor )
- anchor = edge;
- }
- }
-
- /* now we align all stem edges. */
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- AF_Edge edge2;
-
-
- if ( edge->flags & AF_EDGE_DONE )
- continue;
-
- /* skip all non-stem edges */
- edge2 = edge->link;
- if ( !edge2 )
- {
- skipped++;
- continue;
- }
-
- /* Some CJK characters have so many stems that
- * the hinter is likely to merge two adjacent ones.
- * To solve this problem, if either edge of a stem
- * is too close to the previous one, we avoid
- * aligning the two edges, but rather interpolate
- * their locations at the end of this function in
- * order to preserve the space between the stems.
- */
- if ( has_last_stem &&
- ( edge->pos < last_stem_pos + 64 ||
- edge2->pos < last_stem_pos + 64 ) )
- {
- skipped++;
- continue;
- }
-
- /* now align the stem */
-
- /* this should not happen, but it's better to be safe */
- if ( edge2->blue_edge )
- {
- FT_TRACE5(( "ASSERTION FAILED for edge %d\n", edge2-edges ));
-
- af_cjk_align_linked_edge( hints, dim, edge2, edge );
- edge->flags |= AF_EDGE_DONE;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- num_actions++;
-#endif
-
- continue;
- }
-
- if ( edge2 < edge )
- {
- af_cjk_align_linked_edge( hints, dim, edge2, edge );
- edge->flags |= AF_EDGE_DONE;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- num_actions++;
-#endif
-
- /* We rarely reaches here it seems;
- * usually the two edges belonging
- * to one stem are marked as DONE together
- */
- has_last_stem = TRUE;
- last_stem_pos = edge->pos;
- continue;
- }
-
- if ( dim != AF_DIMENSION_VERT && !anchor )
- {
-
-#if 0
- if ( fixedpitch )
- {
- AF_Edge left = edge;
- AF_Edge right = edge_limit - 1;
- AF_EdgeRec left1, left2, right1, right2;
- FT_Pos target, center1, center2;
- FT_Pos delta1, delta2, d1, d2;
-
-
- while ( right > left && !right->link )
- right--;
-
- left1 = *left;
- left2 = *left->link;
- right1 = *right->link;
- right2 = *right;
-
- delta = ( ( ( hinter->pp2.x + 32 ) & -64 ) - hinter->pp2.x ) / 2;
- target = left->opos + ( right->opos - left->opos ) / 2 + delta - 16;
-
- delta1 = delta;
- delta1 += af_hint_normal_stem( hints, left, left->link,
- delta1, 0 );
-
- if ( left->link != right )
- af_hint_normal_stem( hints, right->link, right, delta1, 0 );
-
- center1 = left->pos + ( right->pos - left->pos ) / 2;
-
- if ( center1 >= target )
- delta2 = delta - 32;
- else
- delta2 = delta + 32;
-
- delta2 += af_hint_normal_stem( hints, &left1, &left2, delta2, 0 );
-
- if ( delta1 != delta2 )
- {
- if ( left->link != right )
- af_hint_normal_stem( hints, &right1, &right2, delta2, 0 );
-
- center2 = left1.pos + ( right2.pos - left1.pos ) / 2;
-
- d1 = center1 - target;
- d2 = center2 - target;
-
- if ( FT_ABS( d2 ) < FT_ABS( d1 ) )
- {
- left->pos = left1.pos;
- left->link->pos = left2.pos;
-
- if ( left->link != right )
- {
- right->link->pos = right1.pos;
- right->pos = right2.pos;
- }
-
- delta1 = delta2;
- }
- }
-
- delta = delta1;
- right->link->flags |= AF_EDGE_DONE;
- right->flags |= AF_EDGE_DONE;
- }
- else
-
-#endif /* 0 */
-
- delta = af_hint_normal_stem( hints, edge, edge2, 0,
- AF_DIMENSION_HORZ );
- }
- else
- af_hint_normal_stem( hints, edge, edge2, delta, dim );
-
-#if 0
- printf( "stem (%d,%d) adjusted (%.1f,%.1f)\n",
- edge - edges, edge2 - edges,
- ( edge->pos - edge->opos ) / 64.0,
- ( edge2->pos - edge2->opos ) / 64.0 );
-#endif
-
- anchor = edge;
- edge->flags |= AF_EDGE_DONE;
- edge2->flags |= AF_EDGE_DONE;
- has_last_stem = TRUE;
- last_stem_pos = edge2->pos;
- }
-
- /* make sure that lowercase m's maintain their symmetry */
-
- /* In general, lowercase m's have six vertical edges if they are sans */
- /* serif, or twelve if they are with serifs. This implementation is */
- /* based on that assumption, and seems to work very well with most */
- /* faces. However, if for a certain face this assumption is not */
- /* true, the m is just rendered like before. In addition, any stem */
- /* correction will only be applied to symmetrical glyphs (even if the */
- /* glyph is not an m), so the potential for unwanted distortion is */
- /* relatively low. */
-
- /* We don't handle horizontal edges since we can't easily assure that */
- /* the third (lowest) stem aligns with the base line; it might end up */
- /* one pixel higher or lower. */
-
- n_edges = edge_limit - edges;
- if ( dim == AF_DIMENSION_HORZ && ( n_edges == 6 || n_edges == 12 ) )
- {
- AF_Edge edge1, edge2, edge3;
- FT_Pos dist1, dist2, span;
-
-
- if ( n_edges == 6 )
- {
- edge1 = edges;
- edge2 = edges + 2;
- edge3 = edges + 4;
- }
- else
- {
- edge1 = edges + 1;
- edge2 = edges + 5;
- edge3 = edges + 9;
- }
-
- dist1 = edge2->opos - edge1->opos;
- dist2 = edge3->opos - edge2->opos;
-
- span = dist1 - dist2;
- if ( span < 0 )
- span = -span;
-
- if ( edge1->link == edge1 + 1 &&
- edge2->link == edge2 + 1 &&
- edge3->link == edge3 + 1 && span < 8 )
- {
- delta = edge3->pos - ( 2 * edge2->pos - edge1->pos );
- edge3->pos -= delta;
- if ( edge3->link )
- edge3->link->pos -= delta;
-
- /* move the serifs along with the stem */
- if ( n_edges == 12 )
- {
- ( edges + 8 )->pos -= delta;
- ( edges + 11 )->pos -= delta;
- }
-
- edge3->flags |= AF_EDGE_DONE;
- if ( edge3->link )
- edge3->link->flags |= AF_EDGE_DONE;
- }
- }
-
- if ( !skipped )
- goto Exit;
-
- /*
- * now hint the remaining edges (serifs and single) in order
- * to complete our processing
- */
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- if ( edge->flags & AF_EDGE_DONE )
- continue;
-
- if ( edge->serif )
- {
- af_cjk_align_serif_edge( hints, edge->serif, edge );
- edge->flags |= AF_EDGE_DONE;
- skipped--;
- }
- }
-
- if ( !skipped )
- goto Exit;
-
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- AF_Edge before, after;
-
-
- if ( edge->flags & AF_EDGE_DONE )
- continue;
-
- before = after = edge;
-
- while ( --before >= edges )
- if ( before->flags & AF_EDGE_DONE )
- break;
-
- while ( ++after < edge_limit )
- if ( after->flags & AF_EDGE_DONE )
- break;
-
- if ( before >= edges || after < edge_limit )
- {
- if ( before < edges )
- af_cjk_align_serif_edge( hints, after, edge );
- else if ( after >= edge_limit )
- af_cjk_align_serif_edge( hints, before, edge );
- else
- {
- if ( after->fpos == before->fpos )
- edge->pos = before->pos;
- else
- edge->pos = before->pos +
- FT_MulDiv( edge->fpos - before->fpos,
- after->pos - before->pos,
- after->fpos - before->fpos );
- }
- }
- }
-
- Exit:
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !num_actions )
- FT_TRACE5(( " (none)\n" ));
- FT_TRACE5(( "\n" ));
-#endif
-
- return;
- }
-
-
- static void
- af_cjk_align_edge_points( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = & hints->axis[dim];
- AF_Edge edges = axis->edges;
- AF_Edge edge_limit = edges + axis->num_edges;
- AF_Edge edge;
- FT_Bool snapping;
-
-
- snapping = FT_BOOL( ( dim == AF_DIMENSION_HORZ &&
- AF_LATIN_HINTS_DO_HORZ_SNAP( hints ) ) ||
- ( dim == AF_DIMENSION_VERT &&
- AF_LATIN_HINTS_DO_VERT_SNAP( hints ) ) );
-
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- /* move the points of each segment */
- /* in each edge to the edge's position */
- AF_Segment seg = edge->first;
-
-
- if ( snapping )
- {
- do
- {
- AF_Point point = seg->first;
-
-
- for (;;)
- {
- if ( dim == AF_DIMENSION_HORZ )
- {
- point->x = edge->pos;
- point->flags |= AF_FLAG_TOUCH_X;
- }
- else
- {
- point->y = edge->pos;
- point->flags |= AF_FLAG_TOUCH_Y;
- }
-
- if ( point == seg->last )
- break;
-
- point = point->next;
- }
-
- seg = seg->edge_next;
-
- } while ( seg != edge->first );
- }
- else
- {
- FT_Pos delta = edge->pos - edge->opos;
-
-
- do
- {
- AF_Point point = seg->first;
-
-
- for (;;)
- {
- if ( dim == AF_DIMENSION_HORZ )
- {
- point->x += delta;
- point->flags |= AF_FLAG_TOUCH_X;
- }
- else
- {
- point->y += delta;
- point->flags |= AF_FLAG_TOUCH_Y;
- }
-
- if ( point == seg->last )
- break;
-
- point = point->next;
- }
-
- seg = seg->edge_next;
-
- } while ( seg != edge->first );
- }
- }
- }
-
-
- /* Apply the complete hinting algorithm to a CJK glyph. */
-
- FT_LOCAL_DEF( FT_Error )
- af_cjk_hints_apply( FT_UInt glyph_index,
- AF_GlyphHints hints,
- FT_Outline* outline,
- AF_CJKMetrics metrics )
- {
- FT_Error error;
- int dim;
-
- FT_UNUSED( metrics );
- FT_UNUSED( glyph_index );
-
-
- error = af_glyph_hints_reload( hints, outline );
- if ( error )
- goto Exit;
-
- /* analyze glyph outline */
- if ( AF_HINTS_DO_HORIZONTAL( hints ) )
- {
- error = af_cjk_hints_detect_features( hints, AF_DIMENSION_HORZ );
- if ( error )
- goto Exit;
-
- af_cjk_hints_compute_blue_edges( hints, metrics, AF_DIMENSION_HORZ );
- }
-
- if ( AF_HINTS_DO_VERTICAL( hints ) )
- {
- error = af_cjk_hints_detect_features( hints, AF_DIMENSION_VERT );
- if ( error )
- goto Exit;
-
- af_cjk_hints_compute_blue_edges( hints, metrics, AF_DIMENSION_VERT );
- }
-
- /* grid-fit the outline */
- for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
- {
- if ( ( dim == AF_DIMENSION_HORZ && AF_HINTS_DO_HORIZONTAL( hints ) ) ||
- ( dim == AF_DIMENSION_VERT && AF_HINTS_DO_VERTICAL( hints ) ) )
- {
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- if ( dim == AF_DIMENSION_HORZ &&
- metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL &&
- AF_HINTS_DO_WARP( hints ) )
- {
- AF_WarperRec warper;
- FT_Fixed scale;
- FT_Pos delta;
-
-
- af_warper_compute( &warper, hints, (AF_Dimension)dim,
- &scale, &delta );
- af_glyph_hints_scale_dim( hints, (AF_Dimension)dim,
- scale, delta );
- continue;
- }
-#endif /* AF_CONFIG_OPTION_USE_WARPER */
-
- af_cjk_hint_edges( hints, (AF_Dimension)dim );
- af_cjk_align_edge_points( hints, (AF_Dimension)dim );
- af_glyph_hints_align_strong_points( hints, (AF_Dimension)dim );
- af_glyph_hints_align_weak_points( hints, (AF_Dimension)dim );
- }
- }
-
- af_glyph_hints_save( hints, outline );
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** C J K S C R I P T C L A S S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- AF_DEFINE_WRITING_SYSTEM_CLASS(
- af_cjk_writing_system_class,
-
- AF_WRITING_SYSTEM_CJK,
-
- sizeof ( AF_CJKMetricsRec ),
-
- (AF_WritingSystem_InitMetricsFunc) af_cjk_metrics_init, /* style_metrics_init */
- (AF_WritingSystem_ScaleMetricsFunc)af_cjk_metrics_scale, /* style_metrics_scale */
- (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done */
- (AF_WritingSystem_GetStdWidthsFunc)af_cjk_get_standard_widths, /* style_metrics_getstdw */
-
- (AF_WritingSystem_InitHintsFunc) af_cjk_hints_init, /* style_hints_init */
- (AF_WritingSystem_ApplyHintsFunc) af_cjk_hints_apply /* style_hints_apply */
- )
-
-
-#else /* !AF_CONFIG_OPTION_CJK */
-
-
- AF_DEFINE_WRITING_SYSTEM_CLASS(
- af_cjk_writing_system_class,
-
- AF_WRITING_SYSTEM_CJK,
-
- sizeof ( AF_CJKMetricsRec ),
-
- (AF_WritingSystem_InitMetricsFunc) NULL, /* style_metrics_init */
- (AF_WritingSystem_ScaleMetricsFunc)NULL, /* style_metrics_scale */
- (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done */
- (AF_WritingSystem_GetStdWidthsFunc)NULL, /* style_metrics_getstdw */
-
- (AF_WritingSystem_InitHintsFunc) NULL, /* style_hints_init */
- (AF_WritingSystem_ApplyHintsFunc) NULL /* style_hints_apply */
- )
-
-
-#endif /* !AF_CONFIG_OPTION_CJK */
-
-
-/* END */
diff --git a/src/autofit/afcjk.h b/src/autofit/afcjk.h
deleted file mode 100644
index 84f892f90..000000000
--- a/src/autofit/afcjk.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/***************************************************************************/
-/* */
-/* afcjk.h */
-/* */
-/* Auto-fitter hinting routines for CJK writing system (specification). */
-/* */
-/* Copyright 2006-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFCJK_H_
-#define AFCJK_H_
-
-#include "afhints.h"
-#include "aflatin.h"
-
-
-FT_BEGIN_HEADER
-
-
- /* the CJK-specific writing system */
-
- AF_DECLARE_WRITING_SYSTEM_CLASS( af_cjk_writing_system_class )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** C J K G L O B A L M E T R I C S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*
- * CJK glyphs tend to fill the square. So we have both vertical and
- * horizontal blue zones. But some glyphs have flat bounding strokes that
- * leave some space between neighbour glyphs.
- */
-
-#define AF_CJK_IS_TOP_BLUE( b ) \
- ( (b)->properties & AF_BLUE_PROPERTY_CJK_TOP )
-#define AF_CJK_IS_HORIZ_BLUE( b ) \
- ( (b)->properties & AF_BLUE_PROPERTY_CJK_HORIZ )
-#define AF_CJK_IS_RIGHT_BLUE AF_CJK_IS_TOP_BLUE
-
-#define AF_CJK_MAX_WIDTHS 16
-
-
-#define AF_CJK_BLUE_ACTIVE ( 1U << 0 ) /* zone height is <= 3/4px */
-#define AF_CJK_BLUE_TOP ( 1U << 1 ) /* result of AF_CJK_IS_TOP_BLUE */
-#define AF_CJK_BLUE_ADJUSTMENT ( 1U << 2 ) /* used for scale adjustment */
- /* optimization */
-
-
- typedef struct AF_CJKBlueRec_
- {
- AF_WidthRec ref;
- AF_WidthRec shoot; /* undershoot */
- FT_UInt flags;
-
- } AF_CJKBlueRec, *AF_CJKBlue;
-
-
- typedef struct AF_CJKAxisRec_
- {
- FT_Fixed scale;
- FT_Pos delta;
-
- FT_UInt width_count; /* number of used widths */
- AF_WidthRec widths[AF_CJK_MAX_WIDTHS]; /* widths array */
- FT_Pos edge_distance_threshold; /* used for creating edges */
- FT_Pos standard_width; /* the default stem thickness */
- FT_Bool extra_light; /* is standard width very light? */
-
- /* used for horizontal metrics too for CJK */
- FT_Bool control_overshoot;
- FT_UInt blue_count;
- AF_CJKBlueRec blues[AF_BLUE_STRINGSET_MAX];
-
- FT_Fixed org_scale;
- FT_Pos org_delta;
-
- } AF_CJKAxisRec, *AF_CJKAxis;
-
-
- typedef struct AF_CJKMetricsRec_
- {
- AF_StyleMetricsRec root;
- FT_UInt units_per_em;
- AF_CJKAxisRec axis[AF_DIMENSION_MAX];
-
- } AF_CJKMetricsRec, *AF_CJKMetrics;
-
-
-#ifdef AF_CONFIG_OPTION_CJK
- FT_LOCAL( FT_Error )
- af_cjk_metrics_init( AF_CJKMetrics metrics,
- FT_Face face );
-
- FT_LOCAL( void )
- af_cjk_metrics_scale( AF_CJKMetrics metrics,
- AF_Scaler scaler );
-
- FT_LOCAL( FT_Error )
- af_cjk_hints_init( AF_GlyphHints hints,
- AF_CJKMetrics metrics );
-
- FT_LOCAL( FT_Error )
- af_cjk_hints_apply( FT_UInt glyph_index,
- AF_GlyphHints hints,
- FT_Outline* outline,
- AF_CJKMetrics metrics );
-
- /* shared; called from afindic.c */
- FT_LOCAL( void )
- af_cjk_metrics_check_digits( AF_CJKMetrics metrics,
- FT_Face face );
-
- FT_LOCAL( void )
- af_cjk_metrics_init_widths( AF_CJKMetrics metrics,
- FT_Face face );
-#endif /* AF_CONFIG_OPTION_CJK */
-
-
-/* */
-
-FT_END_HEADER
-
-#endif /* AFCJK_H_ */
-
-
-/* END */
diff --git a/src/autofit/afcover.h b/src/autofit/afcover.h
deleted file mode 100644
index 1b18c666a..000000000
--- a/src/autofit/afcover.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/***************************************************************************/
-/* */
-/* afcover.h */
-/* */
-/* Auto-fitter coverages (specification only). */
-/* */
-/* Copyright 2013-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /* This header file can be included multiple times. */
- /* Define `COVERAGE' as needed. */
-
-
- /* Add new coverages here. The first and second arguments are the */
- /* coverage name in lowercase and uppercase, respectively, followed */
- /* by a description string. The last four arguments are the four */
- /* characters defining the corresponding OpenType feature. */
-
-#if 0
- /* XXX: It's not possible to define blue zone characters in advance. */
- COVERAGE( alternative_fractions, ALTERNATIVE_FRACTIONS,
- "alternative fractions",
- 'a', 'f', 'r', 'c' )
-#endif
-
- COVERAGE( petite_capitals_from_capitals, PETITE_CAPITALS_FROM_CAPITALS,
- "petite capitals from capitals",
- 'c', '2', 'c', 'p' )
-
- COVERAGE( small_capitals_from_capitals, SMALL_CAPITALS_FROM_CAPITALS,
- "small capitals from capitals",
- 'c', '2', 's', 'c' )
-
-#if 0
- /* XXX: Only digits are in this coverage, however, both normal style */
- /* and oldstyle representation forms are possible. */
- COVERAGE( denominators, DENOMINATORS,
- "denominators",
- 'd', 'n', 'o', 'm' )
-#endif
-
-#if 0
- /* XXX: It's not possible to define blue zone characters in advance. */
- COVERAGE( fractions, FRACTIONS,
- "fractions",
- 'f', 'r', 'a', 'c' )
-#endif
-
-#if 0
- /* XXX: Only digits are in this coverage, however, both normal style */
- /* and oldstyle representation forms are possible. */
- COVERAGE( numerators, NUMERATORS,
- "numerators",
- 'n', 'u', 'm', 'r' )
-#endif
-
- COVERAGE( ordinals, ORDINALS,
- "ordinals",
- 'o', 'r', 'd', 'n' )
-
- COVERAGE( petite_capitals, PETITE_CAPITALS,
- "petite capitals",
- 'p', 'c', 'a', 'p' )
-
- COVERAGE( ruby, RUBY,
- "ruby",
- 'r', 'u', 'b', 'y' )
-
- COVERAGE( scientific_inferiors, SCIENTIFIC_INFERIORS,
- "scientific inferiors",
- 's', 'i', 'n', 'f' )
-
- COVERAGE( small_capitals, SMALL_CAPITALS,
- "small capitals",
- 's', 'm', 'c', 'p' )
-
- COVERAGE( subscript, SUBSCRIPT,
- "subscript",
- 's', 'u', 'b', 's' )
-
- COVERAGE( superscript, SUPERSCRIPT,
- "superscript",
- 's', 'u', 'p', 's' )
-
- COVERAGE( titling, TITLING,
- "titling",
- 't', 'i', 't', 'l' )
-
-#if 0
- /* to be always excluded */
- COVERAGE(nalt, 'n', 'a', 'l', 't'); /* Alternate Annotation Forms (?) */
- COVERAGE(ornm, 'o', 'r', 'n', 'm'); /* Ornaments (?) */
-#endif
-
-
-/* END */
diff --git a/src/autofit/afdummy.c b/src/autofit/afdummy.c
deleted file mode 100644
index 61c32db5b..000000000
--- a/src/autofit/afdummy.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/***************************************************************************/
-/* */
-/* afdummy.c */
-/* */
-/* Auto-fitter dummy routines to be used if no hinting should be */
-/* performed (body). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "afdummy.h"
-#include "afhints.h"
-#include "aferrors.h"
-
-
- static FT_Error
- af_dummy_hints_init( AF_GlyphHints hints,
- AF_StyleMetrics metrics )
- {
- af_glyph_hints_rescale( hints, metrics );
-
- hints->x_scale = metrics->scaler.x_scale;
- hints->y_scale = metrics->scaler.y_scale;
- hints->x_delta = metrics->scaler.x_delta;
- hints->y_delta = metrics->scaler.y_delta;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Error
- af_dummy_hints_apply( FT_UInt glyph_index,
- AF_GlyphHints hints,
- FT_Outline* outline )
- {
- FT_Error error;
-
- FT_UNUSED( glyph_index );
-
-
- error = af_glyph_hints_reload( hints, outline );
- if ( !error )
- af_glyph_hints_save( hints, outline );
-
- return error;
- }
-
-
- AF_DEFINE_WRITING_SYSTEM_CLASS(
- af_dummy_writing_system_class,
-
- AF_WRITING_SYSTEM_DUMMY,
-
- sizeof ( AF_StyleMetricsRec ),
-
- (AF_WritingSystem_InitMetricsFunc) NULL, /* style_metrics_init */
- (AF_WritingSystem_ScaleMetricsFunc)NULL, /* style_metrics_scale */
- (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done */
- (AF_WritingSystem_GetStdWidthsFunc)NULL, /* style_metrics_getstdw */
-
- (AF_WritingSystem_InitHintsFunc) af_dummy_hints_init, /* style_hints_init */
- (AF_WritingSystem_ApplyHintsFunc) af_dummy_hints_apply /* style_hints_apply */
- )
-
-
-/* END */
diff --git a/src/autofit/afdummy.h b/src/autofit/afdummy.h
deleted file mode 100644
index ebaa7d76e..000000000
--- a/src/autofit/afdummy.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/***************************************************************************/
-/* */
-/* afdummy.h */
-/* */
-/* Auto-fitter dummy routines to be used if no hinting should be */
-/* performed (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFDUMMY_H_
-#define AFDUMMY_H_
-
-#include "aftypes.h"
-
-
-FT_BEGIN_HEADER
-
- /* A dummy writing system used when no hinting should be performed. */
-
- AF_DECLARE_WRITING_SYSTEM_CLASS( af_dummy_writing_system_class )
-
-/* */
-
-FT_END_HEADER
-
-
-#endif /* AFDUMMY_H_ */
-
-
-/* END */
diff --git a/src/autofit/aferrors.h b/src/autofit/aferrors.h
deleted file mode 100644
index dde182f3c..000000000
--- a/src/autofit/aferrors.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/***************************************************************************/
-/* */
-/* aferrors.h */
-/* */
-/* Autofitter error codes (specification only). */
-/* */
-/* Copyright 2005-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the Autofitter error enumeration */
- /* constants. */
- /* */
- /*************************************************************************/
-
-#ifndef AFERRORS_H_
-#define AFERRORS_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX AF_Err_
-#define FT_ERR_BASE FT_Mod_Err_Autofit
-
-#include FT_ERRORS_H
-
-#endif /* AFERRORS_H_ */
-
-
-/* END */
diff --git a/src/autofit/afglobal.c b/src/autofit/afglobal.c
deleted file mode 100644
index 85bef001f..000000000
--- a/src/autofit/afglobal.c
+++ /dev/null
@@ -1,503 +0,0 @@
-/***************************************************************************/
-/* */
-/* afglobal.c */
-/* */
-/* Auto-fitter routines to compute global hinting values (body). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "afglobal.h"
-#include "afranges.h"
-#include "afshaper.h"
-#include FT_INTERNAL_DEBUG_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_afglobal
-
-
- /* get writing system specific header files */
-#undef WRITING_SYSTEM
-#define WRITING_SYSTEM( ws, WS ) /* empty */
-#include "afwrtsys.h"
-
-#include "aferrors.h"
-#include "afpic.h"
-
-
-#undef SCRIPT
-#define SCRIPT( s, S, d, h, H, ss ) \
- AF_DEFINE_SCRIPT_CLASS( \
- af_ ## s ## _script_class, \
- AF_SCRIPT_ ## S, \
- af_ ## s ## _uniranges, \
- af_ ## s ## _nonbase_uniranges, \
- AF_ ## H, \
- ss )
-
-#include "afscript.h"
-
-
-#undef STYLE
-#define STYLE( s, S, d, ws, sc, ss, c ) \
- AF_DEFINE_STYLE_CLASS( \
- af_ ## s ## _style_class, \
- AF_STYLE_ ## S, \
- ws, \
- sc, \
- ss, \
- c )
-
-#include "afstyles.h"
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#undef WRITING_SYSTEM
-#define WRITING_SYSTEM( ws, WS ) \
- &af_ ## ws ## _writing_system_class,
-
- FT_LOCAL_ARRAY_DEF( AF_WritingSystemClass )
- af_writing_system_classes[] =
- {
-
-#include "afwrtsys.h"
-
- NULL /* do not remove */
- };
-
-
-#undef SCRIPT
-#define SCRIPT( s, S, d, h, H, ss ) \
- &af_ ## s ## _script_class,
-
- FT_LOCAL_ARRAY_DEF( AF_ScriptClass )
- af_script_classes[] =
- {
-
-#include "afscript.h"
-
- NULL /* do not remove */
- };
-
-
-#undef STYLE
-#define STYLE( s, S, d, ws, sc, ss, c ) \
- &af_ ## s ## _style_class,
-
- FT_LOCAL_ARRAY_DEF( AF_StyleClass )
- af_style_classes[] =
- {
-
-#include "afstyles.h"
-
- NULL /* do not remove */
- };
-
-#endif /* !FT_CONFIG_OPTION_PIC */
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
-#undef STYLE
-#define STYLE( s, S, d, ws, sc, ss, c ) #s,
-
- FT_LOCAL_ARRAY_DEF( char* )
- af_style_names[] =
- {
-
-#include "afstyles.h"
-
- };
-
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
-
- /* Compute the style index of each glyph within a given face. */
-
- static FT_Error
- af_face_globals_compute_style_coverage( AF_FaceGlobals globals )
- {
- FT_Error error;
- FT_Face face = globals->face;
- FT_CharMap old_charmap = face->charmap;
- FT_UShort* gstyles = globals->glyph_styles;
- FT_UInt ss;
- FT_UInt i;
- FT_UInt dflt = ~0U; /* a non-valid value */
-
-
- /* the value AF_STYLE_UNASSIGNED means `uncovered glyph' */
- for ( i = 0; i < (FT_UInt)globals->glyph_count; i++ )
- gstyles[i] = AF_STYLE_UNASSIGNED;
-
- error = FT_Select_Charmap( face, FT_ENCODING_UNICODE );
- if ( error )
- {
- /*
- * Ignore this error; we simply use the fallback style.
- * XXX: Shouldn't we rather disable hinting?
- */
- error = FT_Err_Ok;
- goto Exit;
- }
-
- /* scan each style in a Unicode charmap */
- for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ )
- {
- AF_StyleClass style_class =
- AF_STYLE_CLASSES_GET[ss];
- AF_ScriptClass script_class =
- AF_SCRIPT_CLASSES_GET[style_class->script];
- AF_Script_UniRange range;
-
-
- if ( !script_class->script_uni_ranges )
- continue;
-
- /*
- * Scan all Unicode points in the range and set the corresponding
- * glyph style index.
- */
- if ( style_class->coverage == AF_COVERAGE_DEFAULT )
- {
- if ( (FT_UInt)style_class->script ==
- globals->module->default_script )
- dflt = ss;
-
- for ( range = script_class->script_uni_ranges;
- range->first != 0;
- range++ )
- {
- FT_ULong charcode = range->first;
- FT_UInt gindex;
-
-
- gindex = FT_Get_Char_Index( face, charcode );
-
- if ( gindex != 0 &&
- gindex < (FT_ULong)globals->glyph_count &&
- ( gstyles[gindex] & AF_STYLE_MASK ) == AF_STYLE_UNASSIGNED )
- gstyles[gindex] = (FT_UShort)ss;
-
- for (;;)
- {
- charcode = FT_Get_Next_Char( face, charcode, &gindex );
-
- if ( gindex == 0 || charcode > range->last )
- break;
-
- if ( gindex < (FT_ULong)globals->glyph_count &&
- ( gstyles[gindex] & AF_STYLE_MASK ) == AF_STYLE_UNASSIGNED )
- gstyles[gindex] = (FT_UShort)ss;
- }
- }
-
- /* do the same for the script's non-base characters */
- for ( range = script_class->script_uni_nonbase_ranges;
- range->first != 0;
- range++ )
- {
- FT_ULong charcode = range->first;
- FT_UInt gindex;
-
-
- gindex = FT_Get_Char_Index( face, charcode );
-
- if ( gindex != 0 &&
- gindex < (FT_ULong)globals->glyph_count &&
- ( gstyles[gindex] & AF_STYLE_MASK ) == (FT_UShort)ss )
- gstyles[gindex] |= AF_NONBASE;
-
- for (;;)
- {
- charcode = FT_Get_Next_Char( face, charcode, &gindex );
-
- if ( gindex == 0 || charcode > range->last )
- break;
-
- if ( gindex < (FT_ULong)globals->glyph_count &&
- ( gstyles[gindex] & AF_STYLE_MASK ) == (FT_UShort)ss )
- gstyles[gindex] |= AF_NONBASE;
- }
- }
- }
- else
- {
- /* get glyphs not directly addressable by cmap */
- af_shaper_get_coverage( globals, style_class, gstyles, 0 );
- }
- }
-
- /* handle the remaining default OpenType features ... */
- for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ )
- {
- AF_StyleClass style_class = AF_STYLE_CLASSES_GET[ss];
-
-
- if ( style_class->coverage == AF_COVERAGE_DEFAULT )
- af_shaper_get_coverage( globals, style_class, gstyles, 0 );
- }
-
- /* ... and finally the default OpenType features of the default script */
- af_shaper_get_coverage( globals, AF_STYLE_CLASSES_GET[dflt], gstyles, 1 );
-
- /* mark ASCII digits */
- for ( i = 0x30; i <= 0x39; i++ )
- {
- FT_UInt gindex = FT_Get_Char_Index( face, i );
-
-
- if ( gindex != 0 && gindex < (FT_ULong)globals->glyph_count )
- gstyles[gindex] |= AF_DIGIT;
- }
-
- Exit:
- /*
- * By default, all uncovered glyphs are set to the fallback style.
- * XXX: Shouldn't we disable hinting or do something similar?
- */
- if ( globals->module->fallback_style != AF_STYLE_UNASSIGNED )
- {
- FT_Long nn;
-
-
- for ( nn = 0; nn < globals->glyph_count; nn++ )
- {
- if ( ( gstyles[nn] & AF_STYLE_MASK ) == AF_STYLE_UNASSIGNED )
- {
- gstyles[nn] &= ~AF_STYLE_MASK;
- gstyles[nn] |= globals->module->fallback_style;
- }
- }
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
- FT_TRACE4(( "\n"
- "style coverage\n"
- "==============\n"
- "\n" ));
-
- for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ )
- {
- AF_StyleClass style_class = AF_STYLE_CLASSES_GET[ss];
- FT_UInt count = 0;
- FT_Long idx;
-
-
- FT_TRACE4(( "%s:\n", af_style_names[style_class->style] ));
-
- for ( idx = 0; idx < globals->glyph_count; idx++ )
- {
- if ( ( gstyles[idx] & AF_STYLE_MASK ) == style_class->style )
- {
- if ( !( count % 10 ) )
- FT_TRACE4(( " " ));
-
- FT_TRACE4(( " %d", idx ));
- count++;
-
- if ( !( count % 10 ) )
- FT_TRACE4(( "\n" ));
- }
- }
-
- if ( !count )
- FT_TRACE4(( " (none)\n" ));
- if ( count % 10 )
- FT_TRACE4(( "\n" ));
- }
-
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
- FT_Set_Charmap( face, old_charmap );
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_face_globals_new( FT_Face face,
- AF_FaceGlobals *aglobals,
- AF_Module module )
- {
- FT_Error error;
- FT_Memory memory;
- AF_FaceGlobals globals = NULL;
-
-
- memory = face->memory;
-
- /* we allocate an AF_FaceGlobals structure together */
- /* with the glyph_styles array */
- if ( FT_ALLOC( globals,
- sizeof ( *globals ) +
- (FT_ULong)face->num_glyphs * sizeof ( FT_UShort ) ) )
- goto Exit;
-
- globals->face = face;
- globals->glyph_count = face->num_glyphs;
- /* right after the globals structure come the glyph styles */
- globals->glyph_styles = (FT_UShort*)( globals + 1 );
- globals->module = module;
- globals->stem_darkening_for_ppem = 0;
- globals->darken_x = 0;
- globals->darken_y = 0;
- globals->standard_vertical_width = 0;
- globals->standard_horizontal_width = 0;
- globals->scale_down_factor = 0;
-
-#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
- globals->hb_font = hb_ft_font_create( face, NULL );
- globals->hb_buf = hb_buffer_create();
-#endif
-
- error = af_face_globals_compute_style_coverage( globals );
- if ( error )
- {
- af_face_globals_free( globals );
- globals = NULL;
- }
- else
- globals->increase_x_height = AF_PROP_INCREASE_X_HEIGHT_MAX;
-
- Exit:
- *aglobals = globals;
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- af_face_globals_free( AF_FaceGlobals globals )
- {
- if ( globals )
- {
- FT_Memory memory = globals->face->memory;
- FT_UInt nn;
-
-
- for ( nn = 0; nn < AF_STYLE_MAX; nn++ )
- {
- if ( globals->metrics[nn] )
- {
- AF_StyleClass style_class =
- AF_STYLE_CLASSES_GET[nn];
- AF_WritingSystemClass writing_system_class =
- AF_WRITING_SYSTEM_CLASSES_GET[style_class->writing_system];
-
-
- if ( writing_system_class->style_metrics_done )
- writing_system_class->style_metrics_done( globals->metrics[nn] );
-
- FT_FREE( globals->metrics[nn] );
- }
- }
-
-#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
- hb_font_destroy( globals->hb_font );
- hb_buffer_destroy( globals->hb_buf );
-#endif
-
- /* no need to free `globals->glyph_styles'; */
- /* it is part of the `globals' array */
- FT_FREE( globals );
- }
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_face_globals_get_metrics( AF_FaceGlobals globals,
- FT_UInt gindex,
- FT_UInt options,
- AF_StyleMetrics *ametrics )
- {
- AF_StyleMetrics metrics = NULL;
-
- AF_Style style = (AF_Style)options;
- AF_WritingSystemClass writing_system_class;
- AF_StyleClass style_class;
-
- FT_Error error = FT_Err_Ok;
-
-
- if ( gindex >= (FT_ULong)globals->glyph_count )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- /* if we have a forced style (via `options'), use it, */
- /* otherwise look into `glyph_styles' array */
- if ( style == AF_STYLE_NONE_DFLT || style + 1 >= AF_STYLE_MAX )
- style = (AF_Style)( globals->glyph_styles[gindex] &
- AF_STYLE_UNASSIGNED );
-
- style_class = AF_STYLE_CLASSES_GET[style];
- writing_system_class = AF_WRITING_SYSTEM_CLASSES_GET
- [style_class->writing_system];
-
- metrics = globals->metrics[style];
- if ( !metrics )
- {
- /* create the global metrics object if necessary */
- FT_Memory memory = globals->face->memory;
-
-
- if ( FT_ALLOC( metrics, writing_system_class->style_metrics_size ) )
- goto Exit;
-
- metrics->style_class = style_class;
- metrics->globals = globals;
-
- if ( writing_system_class->style_metrics_init )
- {
- error = writing_system_class->style_metrics_init( metrics,
- globals->face );
- if ( error )
- {
- if ( writing_system_class->style_metrics_done )
- writing_system_class->style_metrics_done( metrics );
-
- FT_FREE( metrics );
- goto Exit;
- }
- }
-
- globals->metrics[style] = metrics;
- }
-
- Exit:
- *ametrics = metrics;
-
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- af_face_globals_is_digit( AF_FaceGlobals globals,
- FT_UInt gindex )
- {
- if ( gindex < (FT_ULong)globals->glyph_count )
- return (FT_Bool)( globals->glyph_styles[gindex] & AF_DIGIT );
-
- return (FT_Bool)0;
- }
-
-
-/* END */
diff --git a/src/autofit/afglobal.h b/src/autofit/afglobal.h
deleted file mode 100644
index de6142ea2..000000000
--- a/src/autofit/afglobal.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/***************************************************************************/
-/* */
-/* afglobal.h */
-/* */
-/* Auto-fitter routines to compute global hinting values */
-/* (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFGLOBAL_H_
-#define AFGLOBAL_H_
-
-
-#include "aftypes.h"
-#include "afmodule.h"
-#include "afshaper.h"
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL_ARRAY( AF_WritingSystemClass )
- af_writing_system_classes[];
-
-
-#undef SCRIPT
-#define SCRIPT( s, S, d, h, H, ss ) \
- AF_DECLARE_SCRIPT_CLASS( af_ ## s ## _script_class )
-
-#include "afscript.h"
-
- FT_LOCAL_ARRAY( AF_ScriptClass )
- af_script_classes[];
-
-
-#undef STYLE
-#define STYLE( s, S, d, ws, sc, ss, c ) \
- AF_DECLARE_STYLE_CLASS( af_ ## s ## _style_class )
-
-#include "afstyles.h"
-
- FT_LOCAL_ARRAY( AF_StyleClass )
- af_style_classes[];
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_LOCAL_ARRAY( char* )
- af_style_names[];
-#endif
-
-
- /*
- * Default values and flags for both autofitter globals (found in
- * AF_ModuleRec) and face globals (in AF_FaceGlobalsRec).
- */
-
- /* index of fallback style in `af_style_classes' */
-#ifdef AF_CONFIG_OPTION_CJK
-#define AF_STYLE_FALLBACK AF_STYLE_HANI_DFLT
-#else
-#define AF_STYLE_FALLBACK AF_STYLE_NONE_DFLT
-#endif
- /* default script for OpenType; ignored if HarfBuzz isn't used */
-#define AF_SCRIPT_DEFAULT AF_SCRIPT_LATN
-
- /* a bit mask for AF_DIGIT and AF_NONBASE */
-#define AF_STYLE_MASK 0x3FFF
- /* an uncovered glyph */
-#define AF_STYLE_UNASSIGNED AF_STYLE_MASK
-
- /* if this flag is set, we have an ASCII digit */
-#define AF_DIGIT 0x8000U
- /* if this flag is set, we have a non-base character */
-#define AF_NONBASE 0x4000U
-
- /* `increase-x-height' property */
-#define AF_PROP_INCREASE_X_HEIGHT_MIN 6
-#define AF_PROP_INCREASE_X_HEIGHT_MAX 0
-
-
- /************************************************************************/
- /************************************************************************/
- /***** *****/
- /***** F A C E G L O B A L S *****/
- /***** *****/
- /************************************************************************/
- /************************************************************************/
-
-
- /*
- * Note that glyph_styles[] maps each glyph to an index into the
- * `af_style_classes' array.
- *
- */
- typedef struct AF_FaceGlobalsRec_
- {
- FT_Face face;
- FT_Long glyph_count; /* same as face->num_glyphs */
- FT_UShort* glyph_styles;
-
-#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
- hb_font_t* hb_font;
- hb_buffer_t* hb_buf; /* for feature comparison */
-#endif
-
- /* per-face auto-hinter properties */
- FT_UInt increase_x_height;
-
- AF_StyleMetrics metrics[AF_STYLE_MAX];
-
- /* Compute darkening amount once per size. Use this to check whether */
- /* darken_{x,y} needs to be recomputed. */
- FT_UShort stem_darkening_for_ppem;
- /* Copy from e.g. AF_LatinMetrics.axis[AF_DIMENSION_HORZ] */
- /* to compute the darkening amount. */
- FT_Pos standard_vertical_width;
- /* Copy from e.g. AF_LatinMetrics.axis[AF_DIMENSION_VERT] */
- /* to compute the darkening amount. */
- FT_Pos standard_horizontal_width;
- /* The actual amount to darken a glyph along the X axis. */
- FT_Pos darken_x;
- /* The actual amount to darken a glyph along the Y axis. */
- FT_Pos darken_y;
- /* Amount to scale down by to keep emboldened points */
- /* on the Y-axis in pre-computed blue zones. */
- FT_Fixed scale_down_factor;
- AF_Module module; /* to access global properties */
-
- } AF_FaceGlobalsRec;
-
-
- /*
- * model the global hints data for a given face, decomposed into
- * style-specific items
- */
-
- FT_LOCAL( FT_Error )
- af_face_globals_new( FT_Face face,
- AF_FaceGlobals *aglobals,
- AF_Module module );
-
- FT_LOCAL( FT_Error )
- af_face_globals_get_metrics( AF_FaceGlobals globals,
- FT_UInt gindex,
- FT_UInt options,
- AF_StyleMetrics *ametrics );
-
- FT_LOCAL( void )
- af_face_globals_free( AF_FaceGlobals globals );
-
- FT_LOCAL_DEF( FT_Bool )
- af_face_globals_is_digit( AF_FaceGlobals globals,
- FT_UInt gindex );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* AFGLOBAL_H_ */
-
-
-/* END */
diff --git a/src/autofit/afhints.c b/src/autofit/afhints.c
deleted file mode 100644
index f1ff0baef..000000000
--- a/src/autofit/afhints.c
+++ /dev/null
@@ -1,1646 +0,0 @@
-/***************************************************************************/
-/* */
-/* afhints.c */
-/* */
-/* Auto-fitter hinting routines (body). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "afhints.h"
-#include "aferrors.h"
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_DEBUG_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_afhints
-
-
- /* Get new segment for given axis. */
-
- FT_LOCAL_DEF( FT_Error )
- af_axis_hints_new_segment( AF_AxisHints axis,
- FT_Memory memory,
- AF_Segment *asegment )
- {
- FT_Error error = FT_Err_Ok;
- AF_Segment segment = NULL;
-
-
- if ( axis->num_segments < AF_SEGMENTS_EMBEDDED )
- {
- if ( !axis->segments )
- {
- axis->segments = axis->embedded.segments;
- axis->max_segments = AF_SEGMENTS_EMBEDDED;
- }
- }
- else if ( axis->num_segments >= axis->max_segments )
- {
- FT_Int old_max = axis->max_segments;
- FT_Int new_max = old_max;
- FT_Int big_max = (FT_Int)( FT_INT_MAX / sizeof ( *segment ) );
-
-
- if ( old_max >= big_max )
- {
- error = FT_THROW( Out_Of_Memory );
- goto Exit;
- }
-
- new_max += ( new_max >> 2 ) + 4;
- if ( new_max < old_max || new_max > big_max )
- new_max = big_max;
-
- if ( axis->segments == axis->embedded.segments )
- {
- if ( FT_NEW_ARRAY( axis->segments, new_max ) )
- goto Exit;
- ft_memcpy( axis->segments, axis->embedded.segments,
- sizeof ( axis->embedded.segments ) );
- }
- else
- {
- if ( FT_RENEW_ARRAY( axis->segments, old_max, new_max ) )
- goto Exit;
- }
-
- axis->max_segments = new_max;
- }
-
- segment = axis->segments + axis->num_segments++;
-
- Exit:
- *asegment = segment;
- return error;
- }
-
-
- /* Get new edge for given axis, direction, and position, */
- /* without initializing the edge itself. */
-
- FT_LOCAL( FT_Error )
- af_axis_hints_new_edge( AF_AxisHints axis,
- FT_Int fpos,
- AF_Direction dir,
- FT_Bool top_to_bottom_hinting,
- FT_Memory memory,
- AF_Edge *anedge )
- {
- FT_Error error = FT_Err_Ok;
- AF_Edge edge = NULL;
- AF_Edge edges;
-
-
- if ( axis->num_edges < AF_EDGES_EMBEDDED )
- {
- if ( !axis->edges )
- {
- axis->edges = axis->embedded.edges;
- axis->max_edges = AF_EDGES_EMBEDDED;
- }
- }
- else if ( axis->num_edges >= axis->max_edges )
- {
- FT_Int old_max = axis->max_edges;
- FT_Int new_max = old_max;
- FT_Int big_max = (FT_Int)( FT_INT_MAX / sizeof ( *edge ) );
-
-
- if ( old_max >= big_max )
- {
- error = FT_THROW( Out_Of_Memory );
- goto Exit;
- }
-
- new_max += ( new_max >> 2 ) + 4;
- if ( new_max < old_max || new_max > big_max )
- new_max = big_max;
-
- if ( axis->edges == axis->embedded.edges )
- {
- if ( FT_NEW_ARRAY( axis->edges, new_max ) )
- goto Exit;
- ft_memcpy( axis->edges, axis->embedded.edges,
- sizeof ( axis->embedded.edges ) );
- }
- else
- {
- if ( FT_RENEW_ARRAY( axis->edges, old_max, new_max ) )
- goto Exit;
- }
-
- axis->max_edges = new_max;
- }
-
- edges = axis->edges;
- edge = edges + axis->num_edges;
-
- while ( edge > edges )
- {
- if ( top_to_bottom_hinting ? ( edge[-1].fpos > fpos )
- : ( edge[-1].fpos < fpos ) )
- break;
-
- /* we want the edge with same position and minor direction */
- /* to appear before those in the major one in the list */
- if ( edge[-1].fpos == fpos && dir == axis->major_dir )
- break;
-
- edge[0] = edge[-1];
- edge--;
- }
-
- axis->num_edges++;
-
- Exit:
- *anedge = edge;
- return error;
- }
-
-
-#ifdef FT_DEBUG_AUTOFIT
-
-#include FT_CONFIG_STANDARD_LIBRARY_H
-
- /* The dump functions are used in the `ftgrid' demo program, too. */
-#define AF_DUMP( varformat ) \
- do \
- { \
- if ( to_stdout ) \
- printf varformat; \
- else \
- FT_TRACE7( varformat ); \
- } while ( 0 )
-
-
- static const char*
- af_dir_str( AF_Direction dir )
- {
- const char* result;
-
-
- switch ( dir )
- {
- case AF_DIR_UP:
- result = "up";
- break;
- case AF_DIR_DOWN:
- result = "down";
- break;
- case AF_DIR_LEFT:
- result = "left";
- break;
- case AF_DIR_RIGHT:
- result = "right";
- break;
- default:
- result = "none";
- }
-
- return result;
- }
-
-
-#define AF_INDEX_NUM( ptr, base ) (int)( (ptr) ? ( (ptr) - (base) ) : -1 )
-
-
- static char*
- af_print_idx( char* p,
- int idx )
- {
- if ( idx == -1 )
- {
- p[0] = '-';
- p[1] = '-';
- p[2] = '\0';
- }
- else
- ft_sprintf( p, "%d", idx );
-
- return p;
- }
-
-
- static int
- af_get_segment_index( AF_GlyphHints hints,
- int point_idx,
- int dimension )
- {
- AF_AxisHints axis = &hints->axis[dimension];
- AF_Point point = hints->points + point_idx;
- AF_Segment segments = axis->segments;
- AF_Segment limit = segments + axis->num_segments;
- AF_Segment segment;
-
-
- for ( segment = segments; segment < limit; segment++ )
- {
- if ( segment->first <= segment->last )
- {
- if ( point >= segment->first && point <= segment->last )
- break;
- }
- else
- {
- AF_Point p = segment->first;
-
-
- for (;;)
- {
- if ( point == p )
- goto Exit;
-
- if ( p == segment->last )
- break;
-
- p = p->next;
- }
- }
- }
-
- Exit:
- if ( segment == limit )
- return -1;
-
- return (int)( segment - segments );
- }
-
-
- static int
- af_get_edge_index( AF_GlyphHints hints,
- int segment_idx,
- int dimension )
- {
- AF_AxisHints axis = &hints->axis[dimension];
- AF_Edge edges = axis->edges;
- AF_Segment segment = axis->segments + segment_idx;
-
-
- return segment_idx == -1 ? -1 : AF_INDEX_NUM( segment->edge, edges );
- }
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
- void
- af_glyph_hints_dump_points( AF_GlyphHints hints,
- FT_Bool to_stdout )
- {
- AF_Point points = hints->points;
- AF_Point limit = points + hints->num_points;
- AF_Point* contour = hints->contours;
- AF_Point* climit = contour + hints->num_contours;
- AF_Point point;
-
-
- AF_DUMP(( "Table of points:\n" ));
-
- if ( hints->num_points )
- AF_DUMP(( " index hedge hseg vedge vseg flags "
- " xorg yorg xscale yscale xfit yfit" ));
- else
- AF_DUMP(( " (none)\n" ));
-
- for ( point = points; point < limit; point++ )
- {
- int point_idx = AF_INDEX_NUM( point, points );
- int segment_idx_0 = af_get_segment_index( hints, point_idx, 0 );
- int segment_idx_1 = af_get_segment_index( hints, point_idx, 1 );
-
- char buf1[16], buf2[16], buf3[16], buf4[16];
-
-
- /* insert extra newline at the beginning of a contour */
- if ( contour < climit && *contour == point )
- {
- AF_DUMP(( "\n" ));
- contour++;
- }
-
- AF_DUMP(( " %5d %5s %5s %5s %5s %s"
- " %5d %5d %7.2f %7.2f %7.2f %7.2f\n",
- point_idx,
- af_print_idx( buf1,
- af_get_edge_index( hints, segment_idx_1, 1 ) ),
- af_print_idx( buf2, segment_idx_1 ),
- af_print_idx( buf3,
- af_get_edge_index( hints, segment_idx_0, 0 ) ),
- af_print_idx( buf4, segment_idx_0 ),
- ( point->flags & AF_FLAG_NEAR )
- ? " near "
- : ( point->flags & AF_FLAG_WEAK_INTERPOLATION )
- ? " weak "
- : "strong",
-
- point->fx,
- point->fy,
- point->ox / 64.0,
- point->oy / 64.0,
- point->x / 64.0,
- point->y / 64.0 ));
- }
- AF_DUMP(( "\n" ));
- }
-#ifdef __cplusplus
- }
-#endif
-
-
- static const char*
- af_edge_flags_to_string( FT_UInt flags )
- {
- static char temp[32];
- int pos = 0;
-
-
- if ( flags & AF_EDGE_ROUND )
- {
- ft_memcpy( temp + pos, "round", 5 );
- pos += 5;
- }
- if ( flags & AF_EDGE_SERIF )
- {
- if ( pos > 0 )
- temp[pos++] = ' ';
- ft_memcpy( temp + pos, "serif", 5 );
- pos += 5;
- }
- if ( pos == 0 )
- return "normal";
-
- temp[pos] = '\0';
-
- return temp;
- }
-
-
- /* Dump the array of linked segments. */
-
-#ifdef __cplusplus
- extern "C" {
-#endif
- void
- af_glyph_hints_dump_segments( AF_GlyphHints hints,
- FT_Bool to_stdout )
- {
- FT_Int dimension;
-
-
- for ( dimension = 1; dimension >= 0; dimension-- )
- {
- AF_AxisHints axis = &hints->axis[dimension];
- AF_Point points = hints->points;
- AF_Edge edges = axis->edges;
- AF_Segment segments = axis->segments;
- AF_Segment limit = segments + axis->num_segments;
- AF_Segment seg;
-
- char buf1[16], buf2[16], buf3[16];
-
-
- AF_DUMP(( "Table of %s segments:\n",
- dimension == AF_DIMENSION_HORZ ? "vertical"
- : "horizontal" ));
- if ( axis->num_segments )
- AF_DUMP(( " index pos delta dir from to "
- " link serif edge"
- " height extra flags\n" ));
- else
- AF_DUMP(( " (none)\n" ));
-
- for ( seg = segments; seg < limit; seg++ )
- AF_DUMP(( " %5d %5d %5d %5s %4d %4d"
- " %4s %5s %4s"
- " %6d %5d %11s\n",
- AF_INDEX_NUM( seg, segments ),
- seg->pos,
- seg->delta,
- af_dir_str( (AF_Direction)seg->dir ),
- AF_INDEX_NUM( seg->first, points ),
- AF_INDEX_NUM( seg->last, points ),
-
- af_print_idx( buf1, AF_INDEX_NUM( seg->link, segments ) ),
- af_print_idx( buf2, AF_INDEX_NUM( seg->serif, segments ) ),
- af_print_idx( buf3, AF_INDEX_NUM( seg->edge, edges ) ),
-
- seg->height,
- seg->height - ( seg->max_coord - seg->min_coord ),
- af_edge_flags_to_string( seg->flags ) ));
- AF_DUMP(( "\n" ));
- }
- }
-#ifdef __cplusplus
- }
-#endif
-
-
- /* Fetch number of segments. */
-
-#ifdef __cplusplus
- extern "C" {
-#endif
- FT_Error
- af_glyph_hints_get_num_segments( AF_GlyphHints hints,
- FT_Int dimension,
- FT_Int* num_segments )
- {
- AF_Dimension dim;
- AF_AxisHints axis;
-
-
- dim = ( dimension == 0 ) ? AF_DIMENSION_HORZ : AF_DIMENSION_VERT;
-
- axis = &hints->axis[dim];
- *num_segments = axis->num_segments;
-
- return FT_Err_Ok;
- }
-#ifdef __cplusplus
- }
-#endif
-
-
- /* Fetch offset of segments into user supplied offset array. */
-
-#ifdef __cplusplus
- extern "C" {
-#endif
- FT_Error
- af_glyph_hints_get_segment_offset( AF_GlyphHints hints,
- FT_Int dimension,
- FT_Int idx,
- FT_Pos *offset,
- FT_Bool *is_blue,
- FT_Pos *blue_offset )
- {
- AF_Dimension dim;
- AF_AxisHints axis;
- AF_Segment seg;
-
-
- if ( !offset )
- return FT_THROW( Invalid_Argument );
-
- dim = ( dimension == 0 ) ? AF_DIMENSION_HORZ : AF_DIMENSION_VERT;
-
- axis = &hints->axis[dim];
-
- if ( idx < 0 || idx >= axis->num_segments )
- return FT_THROW( Invalid_Argument );
-
- seg = &axis->segments[idx];
- *offset = ( dim == AF_DIMENSION_HORZ ) ? seg->first->ox
- : seg->first->oy;
- if ( seg->edge )
- *is_blue = (FT_Bool)( seg->edge->blue_edge != 0 );
- else
- *is_blue = FALSE;
-
- if ( *is_blue )
- *blue_offset = seg->edge->blue_edge->cur;
- else
- *blue_offset = 0;
-
- return FT_Err_Ok;
- }
-#ifdef __cplusplus
- }
-#endif
-
-
- /* Dump the array of linked edges. */
-
-#ifdef __cplusplus
- extern "C" {
-#endif
- void
- af_glyph_hints_dump_edges( AF_GlyphHints hints,
- FT_Bool to_stdout )
- {
- FT_Int dimension;
-
-
- for ( dimension = 1; dimension >= 0; dimension-- )
- {
- AF_AxisHints axis = &hints->axis[dimension];
- AF_Edge edges = axis->edges;
- AF_Edge limit = edges + axis->num_edges;
- AF_Edge edge;
-
- char buf1[16], buf2[16];
-
-
- /*
- * note: AF_DIMENSION_HORZ corresponds to _vertical_ edges
- * since they have a constant X coordinate.
- */
- if ( dimension == AF_DIMENSION_HORZ )
- AF_DUMP(( "Table of %s edges (1px=%.2fu, 10u=%.2fpx):\n",
- "vertical",
- 65536.0 * 64.0 / hints->x_scale,
- 10.0 * hints->x_scale / 65536.0 / 64.0 ));
- else
- AF_DUMP(( "Table of %s edges (1px=%.2fu, 10u=%.2fpx):\n",
- "horizontal",
- 65536.0 * 64.0 / hints->y_scale,
- 10.0 * hints->y_scale / 65536.0 / 64.0 ));
-
- if ( axis->num_edges )
- AF_DUMP(( " index pos dir link serif"
- " blue opos pos flags\n" ));
- else
- AF_DUMP(( " (none)\n" ));
-
- for ( edge = edges; edge < limit; edge++ )
- AF_DUMP(( " %5d %7.2f %5s %4s %5s"
- " %c %7.2f %7.2f %11s\n",
- AF_INDEX_NUM( edge, edges ),
- (int)edge->opos / 64.0,
- af_dir_str( (AF_Direction)edge->dir ),
- af_print_idx( buf1, AF_INDEX_NUM( edge->link, edges ) ),
- af_print_idx( buf2, AF_INDEX_NUM( edge->serif, edges ) ),
-
- edge->blue_edge ? 'y' : 'n',
- edge->opos / 64.0,
- edge->pos / 64.0,
- af_edge_flags_to_string( edge->flags ) ));
- AF_DUMP(( "\n" ));
- }
- }
-#ifdef __cplusplus
- }
-#endif
-
-#undef AF_DUMP
-
-#endif /* !FT_DEBUG_AUTOFIT */
-
-
- /* Compute the direction value of a given vector. */
-
- FT_LOCAL_DEF( AF_Direction )
- af_direction_compute( FT_Pos dx,
- FT_Pos dy )
- {
- FT_Pos ll, ss; /* long and short arm lengths */
- AF_Direction dir; /* candidate direction */
-
-
- if ( dy >= dx )
- {
- if ( dy >= -dx )
- {
- dir = AF_DIR_UP;
- ll = dy;
- ss = dx;
- }
- else
- {
- dir = AF_DIR_LEFT;
- ll = -dx;
- ss = dy;
- }
- }
- else /* dy < dx */
- {
- if ( dy >= -dx )
- {
- dir = AF_DIR_RIGHT;
- ll = dx;
- ss = dy;
- }
- else
- {
- dir = AF_DIR_DOWN;
- ll = -dy;
- ss = dx;
- }
- }
-
- /* return no direction if arm lengths do not differ enough */
- /* (value 14 is heuristic, corresponding to approx. 4.1 degrees) */
- /* the long arm is never negative */
- if ( ll <= 14 * FT_ABS( ss ) )
- dir = AF_DIR_NONE;
-
- return dir;
- }
-
-
- FT_LOCAL_DEF( void )
- af_glyph_hints_init( AF_GlyphHints hints,
- FT_Memory memory )
- {
- /* no need to initialize the embedded items */
- FT_MEM_ZERO( hints, sizeof ( *hints ) - sizeof ( hints->embedded ) );
- hints->memory = memory;
- }
-
-
- FT_LOCAL_DEF( void )
- af_glyph_hints_done( AF_GlyphHints hints )
- {
- FT_Memory memory;
- int dim;
-
-
- if ( !( hints && hints->memory ) )
- return;
-
- memory = hints->memory;
-
- /*
- * note that we don't need to free the segment and edge
- * buffers since they are really within the hints->points array
- */
- for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
- {
- AF_AxisHints axis = &hints->axis[dim];
-
-
- axis->num_segments = 0;
- axis->max_segments = 0;
- if ( axis->segments != axis->embedded.segments )
- FT_FREE( axis->segments );
-
- axis->num_edges = 0;
- axis->max_edges = 0;
- if ( axis->edges != axis->embedded.edges )
- FT_FREE( axis->edges );
- }
-
- if ( hints->contours != hints->embedded.contours )
- FT_FREE( hints->contours );
- hints->max_contours = 0;
- hints->num_contours = 0;
-
- if ( hints->points != hints->embedded.points )
- FT_FREE( hints->points );
- hints->max_points = 0;
- hints->num_points = 0;
-
- hints->memory = NULL;
- }
-
-
- /* Reset metrics. */
-
- FT_LOCAL_DEF( void )
- af_glyph_hints_rescale( AF_GlyphHints hints,
- AF_StyleMetrics metrics )
- {
- hints->metrics = metrics;
- hints->scaler_flags = metrics->scaler.flags;
- }
-
-
- /* Recompute all AF_Point in AF_GlyphHints from the definitions */
- /* in a source outline. */
-
- FT_LOCAL_DEF( FT_Error )
- af_glyph_hints_reload( AF_GlyphHints hints,
- FT_Outline* outline )
- {
- FT_Error error = FT_Err_Ok;
- AF_Point points;
- FT_UInt old_max, new_max;
- FT_Fixed x_scale = hints->x_scale;
- FT_Fixed y_scale = hints->y_scale;
- FT_Pos x_delta = hints->x_delta;
- FT_Pos y_delta = hints->y_delta;
- FT_Memory memory = hints->memory;
-
-
- hints->num_points = 0;
- hints->num_contours = 0;
-
- hints->axis[0].num_segments = 0;
- hints->axis[0].num_edges = 0;
- hints->axis[1].num_segments = 0;
- hints->axis[1].num_edges = 0;
-
- /* first of all, reallocate the contours array if necessary */
- new_max = (FT_UInt)outline->n_contours;
- old_max = (FT_UInt)hints->max_contours;
-
- if ( new_max <= AF_CONTOURS_EMBEDDED )
- {
- if ( !hints->contours )
- {
- hints->contours = hints->embedded.contours;
- hints->max_contours = AF_CONTOURS_EMBEDDED;
- }
- }
- else if ( new_max > old_max )
- {
- if ( hints->contours == hints->embedded.contours )
- hints->contours = NULL;
-
- new_max = ( new_max + 3 ) & ~3U; /* round up to a multiple of 4 */
-
- if ( FT_RENEW_ARRAY( hints->contours, old_max, new_max ) )
- goto Exit;
-
- hints->max_contours = (FT_Int)new_max;
- }
-
- /*
- * then reallocate the points arrays if necessary --
- * note that we reserve two additional point positions, used to
- * hint metrics appropriately
- */
- new_max = (FT_UInt)( outline->n_points + 2 );
- old_max = (FT_UInt)hints->max_points;
-
- if ( new_max <= AF_POINTS_EMBEDDED )
- {
- if ( !hints->points )
- {
- hints->points = hints->embedded.points;
- hints->max_points = AF_POINTS_EMBEDDED;
- }
- }
- else if ( new_max > old_max )
- {
- if ( hints->points == hints->embedded.points )
- hints->points = NULL;
-
- new_max = ( new_max + 2 + 7 ) & ~7U; /* round up to a multiple of 8 */
-
- if ( FT_RENEW_ARRAY( hints->points, old_max, new_max ) )
- goto Exit;
-
- hints->max_points = (FT_Int)new_max;
- }
-
- hints->num_points = outline->n_points;
- hints->num_contours = outline->n_contours;
-
- /* We can't rely on the value of `FT_Outline.flags' to know the fill */
- /* direction used for a glyph, given that some fonts are broken (e.g., */
- /* the Arphic ones). We thus recompute it each time we need to. */
- /* */
- hints->axis[AF_DIMENSION_HORZ].major_dir = AF_DIR_UP;
- hints->axis[AF_DIMENSION_VERT].major_dir = AF_DIR_LEFT;
-
- if ( FT_Outline_Get_Orientation( outline ) == FT_ORIENTATION_POSTSCRIPT )
- {
- hints->axis[AF_DIMENSION_HORZ].major_dir = AF_DIR_DOWN;
- hints->axis[AF_DIMENSION_VERT].major_dir = AF_DIR_RIGHT;
- }
-
- hints->x_scale = x_scale;
- hints->y_scale = y_scale;
- hints->x_delta = x_delta;
- hints->y_delta = y_delta;
-
- hints->xmin_delta = 0;
- hints->xmax_delta = 0;
-
- points = hints->points;
- if ( hints->num_points == 0 )
- goto Exit;
-
- {
- AF_Point point;
- AF_Point point_limit = points + hints->num_points;
-
- /* value 20 in `near_limit' is heuristic */
- FT_UInt units_per_em = hints->metrics->scaler.face->units_per_EM;
- FT_Int near_limit = 20 * units_per_em / 2048;
-
-
- /* compute coordinates & Bezier flags, next and prev */
- {
- FT_Vector* vec = outline->points;
- char* tag = outline->tags;
- FT_Short endpoint = outline->contours[0];
- AF_Point end = points + endpoint;
- AF_Point prev = end;
- FT_Int contour_index = 0;
-
-
- for ( point = points; point < point_limit; point++, vec++, tag++ )
- {
- FT_Pos out_x, out_y;
-
-
- point->in_dir = (FT_Char)AF_DIR_NONE;
- point->out_dir = (FT_Char)AF_DIR_NONE;
-
- point->fx = (FT_Short)vec->x;
- point->fy = (FT_Short)vec->y;
- point->ox = point->x = FT_MulFix( vec->x, x_scale ) + x_delta;
- point->oy = point->y = FT_MulFix( vec->y, y_scale ) + y_delta;
-
- end->fx = (FT_Short)outline->points[endpoint].x;
- end->fy = (FT_Short)outline->points[endpoint].y;
-
- switch ( FT_CURVE_TAG( *tag ) )
- {
- case FT_CURVE_TAG_CONIC:
- point->flags = AF_FLAG_CONIC;
- break;
- case FT_CURVE_TAG_CUBIC:
- point->flags = AF_FLAG_CUBIC;
- break;
- default:
- point->flags = AF_FLAG_NONE;
- }
-
- out_x = point->fx - prev->fx;
- out_y = point->fy - prev->fy;
-
- if ( FT_ABS( out_x ) + FT_ABS( out_y ) < near_limit )
- prev->flags |= AF_FLAG_NEAR;
-
- point->prev = prev;
- prev->next = point;
- prev = point;
-
- if ( point == end )
- {
- if ( ++contour_index < outline->n_contours )
- {
- endpoint = outline->contours[contour_index];
- end = points + endpoint;
- prev = end;
- }
- }
- }
- }
-
- /* set up the contours array */
- {
- AF_Point* contour = hints->contours;
- AF_Point* contour_limit = contour + hints->num_contours;
- short* end = outline->contours;
- short idx = 0;
-
-
- for ( ; contour < contour_limit; contour++, end++ )
- {
- contour[0] = points + idx;
- idx = (short)( end[0] + 1 );
- }
- }
-
- {
- /*
- * Compute directions of `in' and `out' vectors.
- *
- * Note that distances between points that are very near to each
- * other are accumulated. In other words, the auto-hinter either
- * prepends the small vectors between near points to the first
- * non-near vector, or the sum of small vector lengths exceeds a
- * threshold, thus `grouping' the small vectors. All intermediate
- * points are tagged as weak; the directions are adjusted also to
- * be equal to the accumulated one.
- */
-
- FT_Int near_limit2 = 2 * near_limit - 1;
-
- AF_Point* contour;
- AF_Point* contour_limit = hints->contours + hints->num_contours;
-
-
- for ( contour = hints->contours; contour < contour_limit; contour++ )
- {
- AF_Point first = *contour;
- AF_Point next, prev, curr;
-
- FT_Pos out_x, out_y;
-
-
- /* since the first point of a contour could be part of a */
- /* series of near points, go backwards to find the first */
- /* non-near point and adjust `first' */
-
- point = first;
- prev = first->prev;
-
- while ( prev != first )
- {
- out_x = point->fx - prev->fx;
- out_y = point->fy - prev->fy;
-
- /*
- * We use Taxicab metrics to measure the vector length.
- *
- * Note that the accumulated distances so far could have the
- * opposite direction of the distance measured here. For this
- * reason we use `near_limit2' for the comparison to get a
- * non-near point even in the worst case.
- */
- if ( FT_ABS( out_x ) + FT_ABS( out_y ) >= near_limit2 )
- break;
-
- point = prev;
- prev = prev->prev;
- }
-
- /* adjust first point */
- first = point;
-
- /* now loop over all points of the contour to get */
- /* `in' and `out' vector directions */
-
- curr = first;
-
- /*
- * We abuse the `u' and `v' fields to store index deltas to the
- * next and previous non-near point, respectively.
- *
- * To avoid problems with not having non-near points, we point to
- * `first' by default as the next non-near point.
- *
- */
- curr->u = (FT_Pos)( first - curr );
- first->v = -curr->u;
-
- out_x = 0;
- out_y = 0;
-
- next = first;
- do
- {
- AF_Direction out_dir;
-
-
- point = next;
- next = point->next;
-
- out_x += next->fx - point->fx;
- out_y += next->fy - point->fy;
-
- if ( FT_ABS( out_x ) + FT_ABS( out_y ) < near_limit )
- {
- next->flags |= AF_FLAG_WEAK_INTERPOLATION;
- continue;
- }
-
- curr->u = (FT_Pos)( next - curr );
- next->v = -curr->u;
-
- out_dir = af_direction_compute( out_x, out_y );
-
- /* adjust directions for all points inbetween; */
- /* the loop also updates position of `curr' */
- curr->out_dir = (FT_Char)out_dir;
- for ( curr = curr->next; curr != next; curr = curr->next )
- {
- curr->in_dir = (FT_Char)out_dir;
- curr->out_dir = (FT_Char)out_dir;
- }
- next->in_dir = (FT_Char)out_dir;
-
- curr->u = (FT_Pos)( first - curr );
- first->v = -curr->u;
-
- out_x = 0;
- out_y = 0;
-
- } while ( next != first );
- }
-
- /*
- * The next step is to `simplify' an outline's topology so that we
- * can identify local extrema more reliably: A series of
- * non-horizontal or non-vertical vectors pointing into the same
- * quadrant are handled as a single, long vector. From a
- * topological point of the view, the intermediate points are of no
- * interest and thus tagged as weak.
- */
-
- for ( point = points; point < point_limit; point++ )
- {
- if ( point->flags & AF_FLAG_WEAK_INTERPOLATION )
- continue;
-
- if ( point->in_dir == AF_DIR_NONE &&
- point->out_dir == AF_DIR_NONE )
- {
- /* check whether both vectors point into the same quadrant */
-
- FT_Pos in_x, in_y;
- FT_Pos out_x, out_y;
-
- AF_Point next_u = point + point->u;
- AF_Point prev_v = point + point->v;
-
-
- in_x = point->fx - prev_v->fx;
- in_y = point->fy - prev_v->fy;
-
- out_x = next_u->fx - point->fx;
- out_y = next_u->fy - point->fy;
-
- if ( ( in_x ^ out_x ) >= 0 && ( in_y ^ out_y ) >= 0 )
- {
- /* yes, so tag current point as weak */
- /* and update index deltas */
-
- point->flags |= AF_FLAG_WEAK_INTERPOLATION;
-
- prev_v->u = (FT_Pos)( next_u - prev_v );
- next_u->v = -prev_v->u;
- }
- }
- }
-
- /*
- * Finally, check for remaining weak points. Everything else not
- * collected in edges so far is then implicitly classified as strong
- * points.
- */
-
- for ( point = points; point < point_limit; point++ )
- {
- if ( point->flags & AF_FLAG_WEAK_INTERPOLATION )
- continue;
-
- if ( point->flags & AF_FLAG_CONTROL )
- {
- /* control points are always weak */
- Is_Weak_Point:
- point->flags |= AF_FLAG_WEAK_INTERPOLATION;
- }
- else if ( point->out_dir == point->in_dir )
- {
- if ( point->out_dir != AF_DIR_NONE )
- {
- /* current point lies on a horizontal or */
- /* vertical segment (but doesn't start or end it) */
- goto Is_Weak_Point;
- }
-
- {
- AF_Point next_u = point + point->u;
- AF_Point prev_v = point + point->v;
-
-
- if ( ft_corner_is_flat( point->fx - prev_v->fx,
- point->fy - prev_v->fy,
- next_u->fx - point->fx,
- next_u->fy - point->fy ) )
- {
- /* either the `in' or the `out' vector is much more */
- /* dominant than the other one, so tag current point */
- /* as weak and update index deltas */
-
- prev_v->u = (FT_Pos)( next_u - prev_v );
- next_u->v = -prev_v->u;
-
- goto Is_Weak_Point;
- }
- }
- }
- else if ( point->in_dir == -point->out_dir )
- {
- /* current point forms a spike */
- goto Is_Weak_Point;
- }
- }
- }
- }
-
- Exit:
- return error;
- }
-
-
- /* Store the hinted outline in an FT_Outline structure. */
-
- FT_LOCAL_DEF( void )
- af_glyph_hints_save( AF_GlyphHints hints,
- FT_Outline* outline )
- {
- AF_Point point = hints->points;
- AF_Point limit = point + hints->num_points;
- FT_Vector* vec = outline->points;
- char* tag = outline->tags;
-
-
- for ( ; point < limit; point++, vec++, tag++ )
- {
- vec->x = point->x;
- vec->y = point->y;
-
- if ( point->flags & AF_FLAG_CONIC )
- tag[0] = FT_CURVE_TAG_CONIC;
- else if ( point->flags & AF_FLAG_CUBIC )
- tag[0] = FT_CURVE_TAG_CUBIC;
- else
- tag[0] = FT_CURVE_TAG_ON;
- }
- }
-
-
- /****************************************************************
- *
- * EDGE POINT GRID-FITTING
- *
- ****************************************************************/
-
-
- /* Align all points of an edge to the same coordinate value, */
- /* either horizontally or vertically. */
-
- FT_LOCAL_DEF( void )
- af_glyph_hints_align_edge_points( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = & hints->axis[dim];
- AF_Segment segments = axis->segments;
- AF_Segment segment_limit = segments + axis->num_segments;
- AF_Segment seg;
-
-
- if ( dim == AF_DIMENSION_HORZ )
- {
- for ( seg = segments; seg < segment_limit; seg++ )
- {
- AF_Edge edge = seg->edge;
- AF_Point point, first, last;
-
-
- if ( !edge )
- continue;
-
- first = seg->first;
- last = seg->last;
- point = first;
- for (;;)
- {
- point->x = edge->pos;
- point->flags |= AF_FLAG_TOUCH_X;
-
- if ( point == last )
- break;
-
- point = point->next;
- }
- }
- }
- else
- {
- for ( seg = segments; seg < segment_limit; seg++ )
- {
- AF_Edge edge = seg->edge;
- AF_Point point, first, last;
-
-
- if ( !edge )
- continue;
-
- first = seg->first;
- last = seg->last;
- point = first;
- for (;;)
- {
- point->y = edge->pos;
- point->flags |= AF_FLAG_TOUCH_Y;
-
- if ( point == last )
- break;
-
- point = point->next;
- }
- }
- }
- }
-
-
- /****************************************************************
- *
- * STRONG POINT INTERPOLATION
- *
- ****************************************************************/
-
-
- /* Hint the strong points -- this is equivalent to the TrueType `IP' */
- /* hinting instruction. */
-
- FT_LOCAL_DEF( void )
- af_glyph_hints_align_strong_points( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_Point points = hints->points;
- AF_Point point_limit = points + hints->num_points;
- AF_AxisHints axis = &hints->axis[dim];
- AF_Edge edges = axis->edges;
- AF_Edge edge_limit = edges + axis->num_edges;
- FT_UInt touch_flag;
-
-
- if ( dim == AF_DIMENSION_HORZ )
- touch_flag = AF_FLAG_TOUCH_X;
- else
- touch_flag = AF_FLAG_TOUCH_Y;
-
- if ( edges < edge_limit )
- {
- AF_Point point;
- AF_Edge edge;
-
-
- for ( point = points; point < point_limit; point++ )
- {
- FT_Pos u, ou, fu; /* point position */
- FT_Pos delta;
-
-
- if ( point->flags & touch_flag )
- continue;
-
- /* if this point is candidate to weak interpolation, we */
- /* interpolate it after all strong points have been processed */
-
- if ( ( point->flags & AF_FLAG_WEAK_INTERPOLATION ) )
- continue;
-
- if ( dim == AF_DIMENSION_VERT )
- {
- u = point->fy;
- ou = point->oy;
- }
- else
- {
- u = point->fx;
- ou = point->ox;
- }
-
- fu = u;
-
- /* is the point before the first edge? */
- edge = edges;
- delta = edge->fpos - u;
- if ( delta >= 0 )
- {
- u = edge->pos - ( edge->opos - ou );
- goto Store_Point;
- }
-
- /* is the point after the last edge? */
- edge = edge_limit - 1;
- delta = u - edge->fpos;
- if ( delta >= 0 )
- {
- u = edge->pos + ( ou - edge->opos );
- goto Store_Point;
- }
-
- {
- FT_PtrDist min, max, mid;
- FT_Pos fpos;
-
-
- /* find enclosing edges */
- min = 0;
- max = edge_limit - edges;
-
-#if 1
- /* for a small number of edges, a linear search is better */
- if ( max <= 8 )
- {
- FT_PtrDist nn;
-
-
- for ( nn = 0; nn < max; nn++ )
- if ( edges[nn].fpos >= u )
- break;
-
- if ( edges[nn].fpos == u )
- {
- u = edges[nn].pos;
- goto Store_Point;
- }
- min = nn;
- }
- else
-#endif
- while ( min < max )
- {
- mid = ( max + min ) >> 1;
- edge = edges + mid;
- fpos = edge->fpos;
-
- if ( u < fpos )
- max = mid;
- else if ( u > fpos )
- min = mid + 1;
- else
- {
- /* we are on the edge */
- u = edge->pos;
- goto Store_Point;
- }
- }
-
- /* point is not on an edge */
- {
- AF_Edge before = edges + min - 1;
- AF_Edge after = edges + min + 0;
-
-
- /* assert( before && after && before != after ) */
- if ( before->scale == 0 )
- before->scale = FT_DivFix( after->pos - before->pos,
- after->fpos - before->fpos );
-
- u = before->pos + FT_MulFix( fu - before->fpos,
- before->scale );
- }
- }
-
- Store_Point:
- /* save the point position */
- if ( dim == AF_DIMENSION_HORZ )
- point->x = u;
- else
- point->y = u;
-
- point->flags |= touch_flag;
- }
- }
- }
-
-
- /****************************************************************
- *
- * WEAK POINT INTERPOLATION
- *
- ****************************************************************/
-
-
- /* Shift the original coordinates of all points between `p1' and */
- /* `p2' to get hinted coordinates, using the same difference as */
- /* given by `ref'. */
-
- static void
- af_iup_shift( AF_Point p1,
- AF_Point p2,
- AF_Point ref )
- {
- AF_Point p;
- FT_Pos delta = ref->u - ref->v;
-
-
- if ( delta == 0 )
- return;
-
- for ( p = p1; p < ref; p++ )
- p->u = p->v + delta;
-
- for ( p = ref + 1; p <= p2; p++ )
- p->u = p->v + delta;
- }
-
-
- /* Interpolate the original coordinates of all points between `p1' and */
- /* `p2' to get hinted coordinates, using `ref1' and `ref2' as the */
- /* reference points. The `u' and `v' members are the current and */
- /* original coordinate values, respectively. */
- /* */
- /* Details can be found in the TrueType bytecode specification. */
-
- static void
- af_iup_interp( AF_Point p1,
- AF_Point p2,
- AF_Point ref1,
- AF_Point ref2 )
- {
- AF_Point p;
- FT_Pos u, v1, v2, u1, u2, d1, d2;
-
-
- if ( p1 > p2 )
- return;
-
- if ( ref1->v > ref2->v )
- {
- p = ref1;
- ref1 = ref2;
- ref2 = p;
- }
-
- v1 = ref1->v;
- v2 = ref2->v;
- u1 = ref1->u;
- u2 = ref2->u;
- d1 = u1 - v1;
- d2 = u2 - v2;
-
- if ( u1 == u2 || v1 == v2 )
- {
- for ( p = p1; p <= p2; p++ )
- {
- u = p->v;
-
- if ( u <= v1 )
- u += d1;
- else if ( u >= v2 )
- u += d2;
- else
- u = u1;
-
- p->u = u;
- }
- }
- else
- {
- FT_Fixed scale = FT_DivFix( u2 - u1, v2 - v1 );
-
-
- for ( p = p1; p <= p2; p++ )
- {
- u = p->v;
-
- if ( u <= v1 )
- u += d1;
- else if ( u >= v2 )
- u += d2;
- else
- u = u1 + FT_MulFix( u - v1, scale );
-
- p->u = u;
- }
- }
- }
-
-
- /* Hint the weak points -- this is equivalent to the TrueType `IUP' */
- /* hinting instruction. */
-
- FT_LOCAL_DEF( void )
- af_glyph_hints_align_weak_points( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_Point points = hints->points;
- AF_Point point_limit = points + hints->num_points;
- AF_Point* contour = hints->contours;
- AF_Point* contour_limit = contour + hints->num_contours;
- FT_UInt touch_flag;
- AF_Point point;
- AF_Point end_point;
- AF_Point first_point;
-
-
- /* PASS 1: Move segment points to edge positions */
-
- if ( dim == AF_DIMENSION_HORZ )
- {
- touch_flag = AF_FLAG_TOUCH_X;
-
- for ( point = points; point < point_limit; point++ )
- {
- point->u = point->x;
- point->v = point->ox;
- }
- }
- else
- {
- touch_flag = AF_FLAG_TOUCH_Y;
-
- for ( point = points; point < point_limit; point++ )
- {
- point->u = point->y;
- point->v = point->oy;
- }
- }
-
- for ( ; contour < contour_limit; contour++ )
- {
- AF_Point first_touched, last_touched;
-
-
- point = *contour;
- end_point = point->prev;
- first_point = point;
-
- /* find first touched point */
- for (;;)
- {
- if ( point > end_point ) /* no touched point in contour */
- goto NextContour;
-
- if ( point->flags & touch_flag )
- break;
-
- point++;
- }
-
- first_touched = point;
-
- for (;;)
- {
- FT_ASSERT( point <= end_point &&
- ( point->flags & touch_flag ) != 0 );
-
- /* skip any touched neighbours */
- while ( point < end_point &&
- ( point[1].flags & touch_flag ) != 0 )
- point++;
-
- last_touched = point;
-
- /* find the next touched point, if any */
- point++;
- for (;;)
- {
- if ( point > end_point )
- goto EndContour;
-
- if ( ( point->flags & touch_flag ) != 0 )
- break;
-
- point++;
- }
-
- /* interpolate between last_touched and point */
- af_iup_interp( last_touched + 1, point - 1,
- last_touched, point );
- }
-
- EndContour:
- /* special case: only one point was touched */
- if ( last_touched == first_touched )
- af_iup_shift( first_point, end_point, first_touched );
-
- else /* interpolate the last part */
- {
- if ( last_touched < end_point )
- af_iup_interp( last_touched + 1, end_point,
- last_touched, first_touched );
-
- if ( first_touched > points )
- af_iup_interp( first_point, first_touched - 1,
- last_touched, first_touched );
- }
-
- NextContour:
- ;
- }
-
- /* now save the interpolated values back to x/y */
- if ( dim == AF_DIMENSION_HORZ )
- {
- for ( point = points; point < point_limit; point++ )
- point->x = point->u;
- }
- else
- {
- for ( point = points; point < point_limit; point++ )
- point->y = point->u;
- }
- }
-
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-
- /* Apply (small) warp scale and warp delta for given dimension. */
-
- FT_LOCAL_DEF( void )
- af_glyph_hints_scale_dim( AF_GlyphHints hints,
- AF_Dimension dim,
- FT_Fixed scale,
- FT_Pos delta )
- {
- AF_Point points = hints->points;
- AF_Point points_limit = points + hints->num_points;
- AF_Point point;
-
-
- if ( dim == AF_DIMENSION_HORZ )
- {
- for ( point = points; point < points_limit; point++ )
- point->x = FT_MulFix( point->fx, scale ) + delta;
- }
- else
- {
- for ( point = points; point < points_limit; point++ )
- point->y = FT_MulFix( point->fy, scale ) + delta;
- }
- }
-
-#endif /* AF_CONFIG_OPTION_USE_WARPER */
-
-/* END */
diff --git a/src/autofit/afhints.h b/src/autofit/afhints.h
deleted file mode 100644
index 16638b103..000000000
--- a/src/autofit/afhints.h
+++ /dev/null
@@ -1,481 +0,0 @@
-/***************************************************************************/
-/* */
-/* afhints.h */
-/* */
-/* Auto-fitter hinting routines (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFHINTS_H_
-#define AFHINTS_H_
-
-#include "aftypes.h"
-
-#define xxAF_SORT_SEGMENTS
-
-FT_BEGIN_HEADER
-
- /*
- * The definition of outline glyph hints. These are shared by all
- * writing system analysis routines (until now).
- */
-
- typedef enum AF_Dimension_
- {
- AF_DIMENSION_HORZ = 0, /* x coordinates, */
- /* i.e., vertical segments & edges */
- AF_DIMENSION_VERT = 1, /* y coordinates, */
- /* i.e., horizontal segments & edges */
-
- AF_DIMENSION_MAX /* do not remove */
-
- } AF_Dimension;
-
-
- /* hint directions -- the values are computed so that two vectors are */
- /* in opposite directions iff `dir1 + dir2 == 0' */
- typedef enum AF_Direction_
- {
- AF_DIR_NONE = 4,
- AF_DIR_RIGHT = 1,
- AF_DIR_LEFT = -1,
- AF_DIR_UP = 2,
- AF_DIR_DOWN = -2
-
- } AF_Direction;
-
-
- /*
- * The following explanations are mostly taken from the article
- *
- * Real-Time Grid Fitting of Typographic Outlines
- *
- * by David Turner and Werner Lemberg
- *
- * http://www.tug.org/TUGboat/Articles/tb24-3/lemberg.pdf
- *
- * with appropriate updates.
- *
- *
- * Segments
- *
- * `af_{cjk,latin,...}_hints_compute_segments' are the functions to
- * find segments in an outline.
- *
- * A segment is a series of at least two consecutive points that are
- * approximately aligned along a coordinate axis. The analysis to do
- * so is specific to a writing system.
- *
- *
- * Edges
- *
- * `af_{cjk,latin,...}_hints_compute_edges' are the functions to find
- * edges.
- *
- * As soon as segments are defined, the auto-hinter groups them into
- * edges. An edge corresponds to a single position on the main
- * dimension that collects one or more segments (allowing for a small
- * threshold).
- *
- * As an example, the `latin' writing system first tries to grid-fit
- * edges, then to align segments on the edges unless it detects that
- * they form a serif.
- *
- *
- * A H
- * | |
- * | |
- * | |
- * | |
- * C | | F
- * +------<-----+ +-----<------+
- * | B G |
- * | |
- * | |
- * +--------------->------------------+
- * D E
- *
- *
- * Stems
- *
- * Stems are detected by `af_{cjk,latin,...}_hint_edges'.
- *
- * Segments need to be `linked' to other ones in order to detect stems.
- * A stem is made of two segments that face each other in opposite
- * directions and that are sufficiently close to each other. Using
- * vocabulary from the TrueType specification, stem segments form a
- * `black distance'.
- *
- * In the above ASCII drawing, the horizontal segments are BC, DE, and
- * FG; the vertical segments are AB, CD, EF, and GH.
- *
- * Each segment has at most one `best' candidate to form a black
- * distance, or no candidate at all. Notice that two distinct segments
- * can have the same candidate, which frequently means a serif.
- *
- * A stem is recognized by the following condition:
- *
- * best segment_1 = segment_2 && best segment_2 = segment_1
- *
- * The best candidate is stored in field `link' in structure
- * `AF_Segment'.
- *
- * In the above ASCII drawing, the best candidate for both AB and CD is
- * GH, while the best candidate for GH is AB. Similarly, the best
- * candidate for EF and GH is AB, while the best candidate for AB is
- * GH.
- *
- * The detection and handling of stems is dependent on the writing
- * system.
- *
- *
- * Serifs
- *
- * Serifs are detected by `af_{cjk,latin,...}_hint_edges'.
- *
- * In comparison to a stem, a serif (as handled by the auto-hinter
- * module that takes care of the `latin' writing system) has
- *
- * best segment_1 = segment_2 && best segment_2 != segment_1
- *
- * where segment_1 corresponds to the serif segment (CD and EF in the
- * above ASCII drawing).
- *
- * The best candidate is stored in field `serif' in structure
- * `AF_Segment' (and `link' is set to NULL).
- *
- *
- * Touched points
- *
- * A point is called `touched' if it has been processed somehow by the
- * auto-hinter. It basically means that it shouldn't be moved again
- * (or moved only under certain constraints to preserve the already
- * applied processing).
- *
- *
- * Flat and round segments
- *
- * Segments are `round' or `flat', depending on the series of points
- * that define them. A segment is round if the next and previous point
- * of an extremum (which can be either a single point or sequence of
- * points) are both conic or cubic control points. Otherwise, a
- * segment with an extremum is flat.
- *
- *
- * Strong Points
- *
- * Experience has shown that points not part of an edge need to be
- * interpolated linearly between their two closest edges, even if these
- * are not part of the contour of those particular points. Typical
- * candidates for this are
- *
- * - angle points (i.e., points where the `in' and `out' direction
- * differ greatly)
- *
- * - inflection points (i.e., where the `in' and `out' angles are the
- * same, but the curvature changes sign) [currently, such points
- * aren't handled specially in the auto-hinter]
- *
- * `af_glyph_hints_align_strong_points' is the function that takes
- * care of such situations; it is equivalent to the TrueType `IP'
- * hinting instruction.
- *
- *
- * Weak Points
- *
- * Other points in the outline must be interpolated using the
- * coordinates of their previous and next unfitted contour neighbours.
- * These are called `weak points' and are touched by the function
- * `af_glyph_hints_align_weak_points', equivalent to the TrueType `IUP'
- * hinting instruction. Typical candidates are control points and
- * points on the contour without a major direction.
- *
- * The major effect is to reduce possible distortion caused by
- * alignment of edges and strong points, thus weak points are processed
- * after strong points.
- */
-
-
- /* point hint flags */
-#define AF_FLAG_NONE 0
-
- /* point type flags */
-#define AF_FLAG_CONIC ( 1U << 0 )
-#define AF_FLAG_CUBIC ( 1U << 1 )
-#define AF_FLAG_CONTROL ( AF_FLAG_CONIC | AF_FLAG_CUBIC )
-
- /* point touch flags */
-#define AF_FLAG_TOUCH_X ( 1U << 2 )
-#define AF_FLAG_TOUCH_Y ( 1U << 3 )
-
- /* candidates for weak interpolation have this flag set */
-#define AF_FLAG_WEAK_INTERPOLATION ( 1U << 4 )
-
- /* the distance to the next point is very small */
-#define AF_FLAG_NEAR ( 1U << 5 )
-
-
- /* edge hint flags */
-#define AF_EDGE_NORMAL 0
-#define AF_EDGE_ROUND ( 1U << 0 )
-#define AF_EDGE_SERIF ( 1U << 1 )
-#define AF_EDGE_DONE ( 1U << 2 )
-#define AF_EDGE_NEUTRAL ( 1U << 3 ) /* edge aligns to a neutral blue zone */
-
-
- typedef struct AF_PointRec_* AF_Point;
- typedef struct AF_SegmentRec_* AF_Segment;
- typedef struct AF_EdgeRec_* AF_Edge;
-
-
- typedef struct AF_PointRec_
- {
- FT_UShort flags; /* point flags used by hinter */
- FT_Char in_dir; /* direction of inwards vector */
- FT_Char out_dir; /* direction of outwards vector */
-
- FT_Pos ox, oy; /* original, scaled position */
- FT_Short fx, fy; /* original, unscaled position (in font units) */
- FT_Pos x, y; /* current position */
- FT_Pos u, v; /* current (x,y) or (y,x) depending on context */
-
- AF_Point next; /* next point in contour */
- AF_Point prev; /* previous point in contour */
-
- } AF_PointRec;
-
-
- typedef struct AF_SegmentRec_
- {
- FT_Byte flags; /* edge/segment flags for this segment */
- FT_Char dir; /* segment direction */
- FT_Short pos; /* position of segment */
- FT_Short delta; /* deviation from segment position */
- FT_Short min_coord; /* minimum coordinate of segment */
- FT_Short max_coord; /* maximum coordinate of segment */
- FT_Short height; /* the hinted segment height */
-
- AF_Edge edge; /* the segment's parent edge */
- AF_Segment edge_next; /* link to next segment in parent edge */
-
- AF_Segment link; /* (stem) link segment */
- AF_Segment serif; /* primary segment for serifs */
- FT_Pos score; /* used during stem matching */
- FT_Pos len; /* used during stem matching */
-
- AF_Point first; /* first point in edge segment */
- AF_Point last; /* last point in edge segment */
-
- } AF_SegmentRec;
-
-
- typedef struct AF_EdgeRec_
- {
- FT_Short fpos; /* original, unscaled position (in font units) */
- FT_Pos opos; /* original, scaled position */
- FT_Pos pos; /* current position */
-
- FT_Byte flags; /* edge flags */
- FT_Char dir; /* edge direction */
- FT_Fixed scale; /* used to speed up interpolation between edges */
-
- AF_Width blue_edge; /* non-NULL if this is a blue edge */
- AF_Edge link; /* link edge */
- AF_Edge serif; /* primary edge for serifs */
- FT_Int score; /* used during stem matching */
-
- AF_Segment first; /* first segment in edge */
- AF_Segment last; /* last segment in edge */
-
- } AF_EdgeRec;
-
-#define AF_SEGMENTS_EMBEDDED 18 /* number of embedded segments */
-#define AF_EDGES_EMBEDDED 12 /* number of embedded edges */
-
- typedef struct AF_AxisHintsRec_
- {
- FT_Int num_segments; /* number of used segments */
- FT_Int max_segments; /* number of allocated segments */
- AF_Segment segments; /* segments array */
-#ifdef AF_SORT_SEGMENTS
- FT_Int mid_segments;
-#endif
-
- FT_Int num_edges; /* number of used edges */
- FT_Int max_edges; /* number of allocated edges */
- AF_Edge edges; /* edges array */
-
- AF_Direction major_dir; /* either vertical or horizontal */
-
- /* two arrays to avoid allocation penalty */
- struct
- {
- AF_SegmentRec segments[AF_SEGMENTS_EMBEDDED];
- AF_EdgeRec edges[AF_EDGES_EMBEDDED];
- } embedded;
-
-
- } AF_AxisHintsRec, *AF_AxisHints;
-
-
-#define AF_POINTS_EMBEDDED 96 /* number of embedded points */
-#define AF_CONTOURS_EMBEDDED 8 /* number of embedded contours */
-
- typedef struct AF_GlyphHintsRec_
- {
- FT_Memory memory;
-
- FT_Fixed x_scale;
- FT_Pos x_delta;
-
- FT_Fixed y_scale;
- FT_Pos y_delta;
-
- FT_Int max_points; /* number of allocated points */
- FT_Int num_points; /* number of used points */
- AF_Point points; /* points array */
-
- FT_Int max_contours; /* number of allocated contours */
- FT_Int num_contours; /* number of used contours */
- AF_Point* contours; /* contours array */
-
- AF_AxisHintsRec axis[AF_DIMENSION_MAX];
-
- FT_UInt32 scaler_flags; /* copy of scaler flags */
- FT_UInt32 other_flags; /* free for style-specific */
- /* implementations */
- AF_StyleMetrics metrics;
-
- FT_Pos xmin_delta; /* used for warping */
- FT_Pos xmax_delta;
-
- /* Two arrays to avoid allocation penalty. */
- /* The `embedded' structure must be the last element! */
- struct
- {
- AF_Point contours[AF_CONTOURS_EMBEDDED];
- AF_PointRec points[AF_POINTS_EMBEDDED];
- } embedded;
-
- } AF_GlyphHintsRec;
-
-
-#define AF_HINTS_TEST_SCALER( h, f ) ( (h)->scaler_flags & (f) )
-#define AF_HINTS_TEST_OTHER( h, f ) ( (h)->other_flags & (f) )
-
-
-#ifdef FT_DEBUG_AUTOFIT
-
-#define AF_HINTS_DO_HORIZONTAL( h ) \
- ( !_af_debug_disable_horz_hints && \
- !AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_HORIZONTAL ) )
-
-#define AF_HINTS_DO_VERTICAL( h ) \
- ( !_af_debug_disable_vert_hints && \
- !AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_VERTICAL ) )
-
-#define AF_HINTS_DO_BLUES( h ) ( !_af_debug_disable_blue_hints )
-
-#else /* !FT_DEBUG_AUTOFIT */
-
-#define AF_HINTS_DO_HORIZONTAL( h ) \
- !AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_HORIZONTAL )
-
-#define AF_HINTS_DO_VERTICAL( h ) \
- !AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_VERTICAL )
-
-#define AF_HINTS_DO_BLUES( h ) 1
-
-#endif /* !FT_DEBUG_AUTOFIT */
-
-
-#define AF_HINTS_DO_ADVANCE( h ) \
- !AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_ADVANCE )
-
-#define AF_HINTS_DO_WARP( h ) \
- !AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_WARPER )
-
-
-
- FT_LOCAL( AF_Direction )
- af_direction_compute( FT_Pos dx,
- FT_Pos dy );
-
-
- FT_LOCAL( FT_Error )
- af_axis_hints_new_segment( AF_AxisHints axis,
- FT_Memory memory,
- AF_Segment *asegment );
-
- FT_LOCAL( FT_Error)
- af_axis_hints_new_edge( AF_AxisHints axis,
- FT_Int fpos,
- AF_Direction dir,
- FT_Bool top_to_bottom_hinting,
- FT_Memory memory,
- AF_Edge *edge );
-
- FT_LOCAL( void )
- af_glyph_hints_init( AF_GlyphHints hints,
- FT_Memory memory );
-
- FT_LOCAL( void )
- af_glyph_hints_rescale( AF_GlyphHints hints,
- AF_StyleMetrics metrics );
-
- FT_LOCAL( FT_Error )
- af_glyph_hints_reload( AF_GlyphHints hints,
- FT_Outline* outline );
-
- FT_LOCAL( void )
- af_glyph_hints_save( AF_GlyphHints hints,
- FT_Outline* outline );
-
- FT_LOCAL( void )
- af_glyph_hints_align_edge_points( AF_GlyphHints hints,
- AF_Dimension dim );
-
- FT_LOCAL( void )
- af_glyph_hints_align_strong_points( AF_GlyphHints hints,
- AF_Dimension dim );
-
- FT_LOCAL( void )
- af_glyph_hints_align_weak_points( AF_GlyphHints hints,
- AF_Dimension dim );
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- FT_LOCAL( void )
- af_glyph_hints_scale_dim( AF_GlyphHints hints,
- AF_Dimension dim,
- FT_Fixed scale,
- FT_Pos delta );
-#endif
-
- FT_LOCAL( void )
- af_glyph_hints_done( AF_GlyphHints hints );
-
-/* */
-
-#define AF_SEGMENT_LEN( seg ) ( (seg)->max_coord - (seg)->min_coord )
-
-#define AF_SEGMENT_DIST( seg1, seg2 ) ( ( (seg1)->pos > (seg2)->pos ) \
- ? (seg1)->pos - (seg2)->pos \
- : (seg2)->pos - (seg1)->pos )
-
-
-FT_END_HEADER
-
-#endif /* AFHINTS_H_ */
-
-
-/* END */
diff --git a/src/autofit/afindic.c b/src/autofit/afindic.c
deleted file mode 100644
index 23be46ed5..000000000
--- a/src/autofit/afindic.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/***************************************************************************/
-/* */
-/* afindic.c */
-/* */
-/* Auto-fitter hinting routines for Indic writing system (body). */
-/* */
-/* Copyright 2007-2017 by */
-/* Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "aftypes.h"
-#include "aflatin.h"
-#include "afcjk.h"
-
-
-#ifdef AF_CONFIG_OPTION_INDIC
-
-#include "afindic.h"
-#include "aferrors.h"
-
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-#include "afwarp.h"
-#endif
-
-
- static FT_Error
- af_indic_metrics_init( AF_CJKMetrics metrics,
- FT_Face face )
- {
- /* skip blue zone init in CJK routines */
- FT_CharMap oldmap = face->charmap;
-
-
- metrics->units_per_em = face->units_per_EM;
-
- if ( FT_Select_Charmap( face, FT_ENCODING_UNICODE ) )
- face->charmap = NULL;
- else
- {
- af_cjk_metrics_init_widths( metrics, face );
-#if 0
- /* either need indic specific blue_chars[] or just skip blue zones */
- af_cjk_metrics_init_blues( metrics, face, af_cjk_blue_chars );
-#endif
- af_cjk_metrics_check_digits( metrics, face );
- }
-
- FT_Set_Charmap( face, oldmap );
-
- return FT_Err_Ok;
- }
-
-
- static void
- af_indic_metrics_scale( AF_CJKMetrics metrics,
- AF_Scaler scaler )
- {
- /* use CJK routines */
- af_cjk_metrics_scale( metrics, scaler );
- }
-
-
- static FT_Error
- af_indic_hints_init( AF_GlyphHints hints,
- AF_CJKMetrics metrics )
- {
- /* use CJK routines */
- return af_cjk_hints_init( hints, metrics );
- }
-
-
- static FT_Error
- af_indic_hints_apply( FT_UInt glyph_index,
- AF_GlyphHints hints,
- FT_Outline* outline,
- AF_CJKMetrics metrics )
- {
- /* use CJK routines */
- return af_cjk_hints_apply( glyph_index, hints, outline, metrics );
- }
-
-
- /* Extract standard_width from writing system/script specific */
- /* metrics class. */
-
- static void
- af_indic_get_standard_widths( AF_CJKMetrics metrics,
- FT_Pos* stdHW,
- FT_Pos* stdVW )
- {
- if ( stdHW )
- *stdHW = metrics->axis[AF_DIMENSION_VERT].standard_width;
-
- if ( stdVW )
- *stdVW = metrics->axis[AF_DIMENSION_HORZ].standard_width;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** I N D I C S C R I P T C L A S S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- AF_DEFINE_WRITING_SYSTEM_CLASS(
- af_indic_writing_system_class,
-
- AF_WRITING_SYSTEM_INDIC,
-
- sizeof ( AF_CJKMetricsRec ),
-
- (AF_WritingSystem_InitMetricsFunc) af_indic_metrics_init, /* style_metrics_init */
- (AF_WritingSystem_ScaleMetricsFunc)af_indic_metrics_scale, /* style_metrics_scale */
- (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done */
- (AF_WritingSystem_GetStdWidthsFunc)af_indic_get_standard_widths, /* style_metrics_getstdw */
-
- (AF_WritingSystem_InitHintsFunc) af_indic_hints_init, /* style_hints_init */
- (AF_WritingSystem_ApplyHintsFunc) af_indic_hints_apply /* style_hints_apply */
- )
-
-
-#else /* !AF_CONFIG_OPTION_INDIC */
-
-
- AF_DEFINE_WRITING_SYSTEM_CLASS(
- af_indic_writing_system_class,
-
- AF_WRITING_SYSTEM_INDIC,
-
- sizeof ( AF_CJKMetricsRec ),
-
- (AF_WritingSystem_InitMetricsFunc) NULL, /* style_metrics_init */
- (AF_WritingSystem_ScaleMetricsFunc)NULL, /* style_metrics_scale */
- (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done */
- (AF_WritingSystem_GetStdWidthsFunc)NULL, /* style_metrics_getstdw */
-
- (AF_WritingSystem_InitHintsFunc) NULL, /* style_hints_init */
- (AF_WritingSystem_ApplyHintsFunc) NULL /* style_hints_apply */
- )
-
-
-#endif /* !AF_CONFIG_OPTION_INDIC */
-
-
-/* END */
diff --git a/src/autofit/afindic.h b/src/autofit/afindic.h
deleted file mode 100644
index ec9e26316..000000000
--- a/src/autofit/afindic.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* afindic.h */
-/* */
-/* Auto-fitter hinting routines for Indic writing system */
-/* (specification). */
-/* */
-/* Copyright 2007-2017 by */
-/* Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFINDIC_H_
-#define AFINDIC_H_
-
-#include "afhints.h"
-
-
-FT_BEGIN_HEADER
-
-
- /* the `indic' writing system */
-
- AF_DECLARE_WRITING_SYSTEM_CLASS( af_indic_writing_system_class )
-
-
-/* */
-
-FT_END_HEADER
-
-#endif /* AFINDIC_H_ */
-
-
-/* END */
diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c
deleted file mode 100644
index cdbc1b7ab..000000000
--- a/src/autofit/aflatin.c
+++ /dev/null
@@ -1,3585 +0,0 @@
-/***************************************************************************/
-/* */
-/* aflatin.c */
-/* */
-/* Auto-fitter hinting routines for latin writing system (body). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_ADVANCES_H
-#include FT_INTERNAL_DEBUG_H
-
-#include "afglobal.h"
-#include "afpic.h"
-#include "aflatin.h"
-#include "aferrors.h"
-
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-#include "afwarp.h"
-#endif
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_aflatin
-
-
- /* needed for computation of round vs. flat segments */
-#define FLAT_THRESHOLD( x ) ( x / 14 )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N G L O B A L M E T R I C S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* Find segments and links, compute all stem widths, and initialize */
- /* standard width and height for the glyph with given charcode. */
-
- FT_LOCAL_DEF( void )
- af_latin_metrics_init_widths( AF_LatinMetrics metrics,
- FT_Face face )
- {
- /* scan the array of segments in each direction */
- AF_GlyphHintsRec hints[1];
-
-
- FT_TRACE5(( "\n"
- "latin standard widths computation (style `%s')\n"
- "=====================================================\n"
- "\n",
- af_style_names[metrics->root.style_class->style] ));
-
- af_glyph_hints_init( hints, face->memory );
-
- metrics->axis[AF_DIMENSION_HORZ].width_count = 0;
- metrics->axis[AF_DIMENSION_VERT].width_count = 0;
-
- {
- FT_Error error;
- FT_ULong glyph_index;
- int dim;
- AF_LatinMetricsRec dummy[1];
- AF_Scaler scaler = &dummy->root.scaler;
-
-#ifdef FT_CONFIG_OPTION_PIC
- AF_FaceGlobals globals = metrics->root.globals;
-#endif
-
- AF_StyleClass style_class = metrics->root.style_class;
- AF_ScriptClass script_class = AF_SCRIPT_CLASSES_GET
- [style_class->script];
-
- void* shaper_buf;
- const char* p;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_ULong ch = 0;
-#endif
-
- p = script_class->standard_charstring;
- shaper_buf = af_shaper_buf_create( face );
-
- /*
- * We check a list of standard characters to catch features like
- * `c2sc' (small caps from caps) that don't contain lowercase letters
- * by definition, or other features that mainly operate on numerals.
- * The first match wins.
- */
-
- glyph_index = 0;
- while ( *p )
- {
- unsigned int num_idx;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- const char* p_old;
-#endif
-
-
- while ( *p == ' ' )
- p++;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- p_old = p;
- GET_UTF8_CHAR( ch, p_old );
-#endif
-
- /* reject input that maps to more than a single glyph */
- p = af_shaper_get_cluster( p, &metrics->root, shaper_buf, &num_idx );
- if ( num_idx > 1 )
- continue;
-
- /* otherwise exit loop if we have a result */
- glyph_index = af_shaper_get_elem( &metrics->root,
- shaper_buf,
- 0,
- NULL,
- NULL );
- if ( glyph_index )
- break;
- }
-
- af_shaper_buf_destroy( face, shaper_buf );
-
- if ( !glyph_index )
- goto Exit;
-
- FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n",
- ch, glyph_index ));
-
- error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
- if ( error || face->glyph->outline.n_points <= 0 )
- goto Exit;
-
- FT_ZERO( dummy );
-
- dummy->units_per_em = metrics->units_per_em;
-
- scaler->x_scale = 0x10000L;
- scaler->y_scale = 0x10000L;
- scaler->x_delta = 0;
- scaler->y_delta = 0;
-
- scaler->face = face;
- scaler->render_mode = FT_RENDER_MODE_NORMAL;
- scaler->flags = 0;
-
- af_glyph_hints_rescale( hints, (AF_StyleMetrics)dummy );
-
- error = af_glyph_hints_reload( hints, &face->glyph->outline );
- if ( error )
- goto Exit;
-
- for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
- {
- AF_LatinAxis axis = &metrics->axis[dim];
- AF_AxisHints axhints = &hints->axis[dim];
- AF_Segment seg, limit, link;
- FT_UInt num_widths = 0;
-
-
- error = af_latin_hints_compute_segments( hints,
- (AF_Dimension)dim );
- if ( error )
- goto Exit;
-
- /*
- * We assume that the glyphs selected for the stem width
- * computation are `featureless' enough so that the linking
- * algorithm works fine without adjustments of its scoring
- * function.
- */
- af_latin_hints_link_segments( hints,
- 0,
- NULL,
- (AF_Dimension)dim );
-
- seg = axhints->segments;
- limit = seg + axhints->num_segments;
-
- for ( ; seg < limit; seg++ )
- {
- link = seg->link;
-
- /* we only consider stem segments there! */
- if ( link && link->link == seg && link > seg )
- {
- FT_Pos dist;
-
-
- dist = seg->pos - link->pos;
- if ( dist < 0 )
- dist = -dist;
-
- if ( num_widths < AF_LATIN_MAX_WIDTHS )
- axis->widths[num_widths++].org = dist;
- }
- }
-
- /* this also replaces multiple almost identical stem widths */
- /* with a single one (the value 100 is heuristic) */
- af_sort_and_quantize_widths( &num_widths, axis->widths,
- dummy->units_per_em / 100 );
- axis->width_count = num_widths;
- }
-
- Exit:
- for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
- {
- AF_LatinAxis axis = &metrics->axis[dim];
- FT_Pos stdw;
-
-
- stdw = ( axis->width_count > 0 ) ? axis->widths[0].org
- : AF_LATIN_CONSTANT( metrics, 50 );
-
- /* let's try 20% of the smallest width */
- axis->edge_distance_threshold = stdw / 5;
- axis->standard_width = stdw;
- axis->extra_light = 0;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- {
- FT_UInt i;
-
-
- FT_TRACE5(( "%s widths:\n",
- dim == AF_DIMENSION_VERT ? "horizontal"
- : "vertical" ));
-
- FT_TRACE5(( " %d (standard)", axis->standard_width ));
- for ( i = 1; i < axis->width_count; i++ )
- FT_TRACE5(( " %d", axis->widths[i].org ));
-
- FT_TRACE5(( "\n" ));
- }
-#endif
- }
- }
-
- FT_TRACE5(( "\n" ));
-
- af_glyph_hints_done( hints );
- }
-
-
- static void
- af_latin_sort_blue( FT_UInt count,
- AF_LatinBlue* table )
- {
- FT_UInt i, j;
- AF_LatinBlue swap;
-
-
- /* we sort from bottom to top */
- for ( i = 1; i < count; i++ )
- {
- for ( j = i; j > 0; j-- )
- {
- FT_Pos a, b;
-
-
- if ( table[j - 1]->flags & ( AF_LATIN_BLUE_TOP |
- AF_LATIN_BLUE_SUB_TOP ) )
- a = table[j - 1]->ref.org;
- else
- a = table[j - 1]->shoot.org;
-
- if ( table[j]->flags & ( AF_LATIN_BLUE_TOP |
- AF_LATIN_BLUE_SUB_TOP ) )
- b = table[j]->ref.org;
- else
- b = table[j]->shoot.org;
-
- if ( b >= a )
- break;
-
- swap = table[j];
- table[j] = table[j - 1];
- table[j - 1] = swap;
- }
- }
- }
-
-
- /* Find all blue zones. Flat segments give the reference points, */
- /* round segments the overshoot positions. */
-
- static void
- af_latin_metrics_init_blues( AF_LatinMetrics metrics,
- FT_Face face )
- {
- FT_Pos flats [AF_BLUE_STRING_MAX_LEN];
- FT_Pos rounds[AF_BLUE_STRING_MAX_LEN];
-
- FT_UInt num_flats;
- FT_UInt num_rounds;
-
- AF_LatinBlue blue;
- FT_Error error;
- AF_LatinAxis axis = &metrics->axis[AF_DIMENSION_VERT];
- FT_Outline outline;
-
- AF_StyleClass sc = metrics->root.style_class;
-
- AF_Blue_Stringset bss = sc->blue_stringset;
- const AF_Blue_StringRec* bs = &af_blue_stringsets[bss];
-
- FT_Pos flat_threshold = FLAT_THRESHOLD( metrics->units_per_em );
-
- void* shaper_buf;
-
-
- /* we walk over the blue character strings as specified in the */
- /* style's entry in the `af_blue_stringset' array */
-
- FT_TRACE5(( "latin blue zones computation\n"
- "============================\n"
- "\n" ));
-
- shaper_buf = af_shaper_buf_create( face );
-
- for ( ; bs->string != AF_BLUE_STRING_MAX; bs++ )
- {
- const char* p = &af_blue_strings[bs->string];
- FT_Pos* blue_ref;
- FT_Pos* blue_shoot;
- FT_Pos ascender;
- FT_Pos descender;
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- {
- FT_Bool have_flag = 0;
-
-
- FT_TRACE5(( "blue zone %d", axis->blue_count ));
-
- if ( bs->properties )
- {
- FT_TRACE5(( " (" ));
-
- if ( AF_LATIN_IS_TOP_BLUE( bs ) )
- {
- FT_TRACE5(( "top" ));
- have_flag = 1;
- }
- else if ( AF_LATIN_IS_SUB_TOP_BLUE( bs ) )
- {
- FT_TRACE5(( "sub top" ));
- have_flag = 1;
- }
-
- if ( AF_LATIN_IS_NEUTRAL_BLUE( bs ) )
- {
- if ( have_flag )
- FT_TRACE5(( ", " ));
- FT_TRACE5(( "neutral" ));
- have_flag = 1;
- }
-
- if ( AF_LATIN_IS_X_HEIGHT_BLUE( bs ) )
- {
- if ( have_flag )
- FT_TRACE5(( ", " ));
- FT_TRACE5(( "small top" ));
- have_flag = 1;
- }
-
- if ( AF_LATIN_IS_LONG_BLUE( bs ) )
- {
- if ( have_flag )
- FT_TRACE5(( ", " ));
- FT_TRACE5(( "long" ));
- }
-
- FT_TRACE5(( ")" ));
- }
-
- FT_TRACE5(( ":\n" ));
- }
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
- num_flats = 0;
- num_rounds = 0;
- ascender = 0;
- descender = 0;
-
- while ( *p )
- {
- FT_ULong glyph_index;
- FT_Long y_offset;
- FT_Int best_point, best_contour_first, best_contour_last;
- FT_Vector* points;
-
- FT_Pos best_y_extremum; /* same as points.y */
- FT_Bool best_round = 0;
-
- unsigned int i, num_idx;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- const char* p_old;
- FT_ULong ch;
-#endif
-
-
- while ( *p == ' ' )
- p++;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- p_old = p;
- GET_UTF8_CHAR( ch, p_old );
-#endif
-
- p = af_shaper_get_cluster( p, &metrics->root, shaper_buf, &num_idx );
-
- if ( !num_idx )
- {
- FT_TRACE5(( " U+%04lX unavailable\n", ch ));
- continue;
- }
-
- if ( AF_LATIN_IS_TOP_BLUE( bs ) )
- best_y_extremum = FT_INT_MIN;
- else
- best_y_extremum = FT_INT_MAX;
-
- /* iterate over all glyph elements of the character cluster */
- /* and get the data of the `biggest' one */
- for ( i = 0; i < num_idx; i++ )
- {
- FT_Pos best_y;
- FT_Bool round = 0;
-
-
- /* load the character in the face -- skip unknown or empty ones */
- glyph_index = af_shaper_get_elem( &metrics->root,
- shaper_buf,
- i,
- NULL,
- &y_offset );
- if ( glyph_index == 0 )
- {
- FT_TRACE5(( " U+%04lX unavailable\n", ch ));
- continue;
- }
-
- error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
- outline = face->glyph->outline;
- /* reject glyphs that don't produce any rendering */
- if ( error || outline.n_points <= 2 )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( num_idx == 1 )
- FT_TRACE5(( " U+%04lX contains no (usable) outlines\n", ch ));
- else
- FT_TRACE5(( " component %d of cluster starting with U+%04lX"
- " contains no (usable) outlines\n", i, ch ));
-#endif
- continue;
- }
-
- /* now compute min or max point indices and coordinates */
- points = outline.points;
- best_point = -1;
- best_y = 0; /* make compiler happy */
- best_contour_first = 0; /* ditto */
- best_contour_last = 0; /* ditto */
-
- {
- FT_Int nn;
- FT_Int first = 0;
- FT_Int last = -1;
-
-
- for ( nn = 0; nn < outline.n_contours; first = last + 1, nn++ )
- {
- FT_Int old_best_point = best_point;
- FT_Int pp;
-
-
- last = outline.contours[nn];
-
- /* Avoid single-point contours since they are never */
- /* rasterized. In some fonts, they correspond to mark */
- /* attachment points that are way outside of the glyph's */
- /* real outline. */
- if ( last <= first )
- continue;
-
- if ( AF_LATIN_IS_TOP_BLUE( bs ) ||
- AF_LATIN_IS_SUB_TOP_BLUE( bs ) )
- {
- for ( pp = first; pp <= last; pp++ )
- {
- if ( best_point < 0 || points[pp].y > best_y )
- {
- best_point = pp;
- best_y = points[pp].y;
- ascender = FT_MAX( ascender, best_y + y_offset );
- }
- else
- descender = FT_MIN( descender, points[pp].y + y_offset );
- }
- }
- else
- {
- for ( pp = first; pp <= last; pp++ )
- {
- if ( best_point < 0 || points[pp].y < best_y )
- {
- best_point = pp;
- best_y = points[pp].y;
- descender = FT_MIN( descender, best_y + y_offset );
- }
- else
- ascender = FT_MAX( ascender, points[pp].y + y_offset );
- }
- }
-
- if ( best_point != old_best_point )
- {
- best_contour_first = first;
- best_contour_last = last;
- }
- }
- }
-
- /* now check whether the point belongs to a straight or round */
- /* segment; we first need to find in which contour the extremum */
- /* lies, then inspect its previous and next points */
- if ( best_point >= 0 )
- {
- FT_Pos best_x = points[best_point].x;
- FT_Int prev, next;
- FT_Int best_segment_first, best_segment_last;
- FT_Int best_on_point_first, best_on_point_last;
- FT_Pos dist;
-
-
- best_segment_first = best_point;
- best_segment_last = best_point;
-
- if ( FT_CURVE_TAG( outline.tags[best_point] ) == FT_CURVE_TAG_ON )
- {
- best_on_point_first = best_point;
- best_on_point_last = best_point;
- }
- else
- {
- best_on_point_first = -1;
- best_on_point_last = -1;
- }
-
- /* look for the previous and next points on the contour */
- /* that are not on the same Y coordinate, then threshold */
- /* the `closeness'... */
- prev = best_point;
- next = prev;
-
- do
- {
- if ( prev > best_contour_first )
- prev--;
- else
- prev = best_contour_last;
-
- dist = FT_ABS( points[prev].y - best_y );
- /* accept a small distance or a small angle (both values are */
- /* heuristic; value 20 corresponds to approx. 2.9 degrees) */
- if ( dist > 5 )
- if ( FT_ABS( points[prev].x - best_x ) <= 20 * dist )
- break;
-
- best_segment_first = prev;
-
- if ( FT_CURVE_TAG( outline.tags[prev] ) == FT_CURVE_TAG_ON )
- {
- best_on_point_first = prev;
- if ( best_on_point_last < 0 )
- best_on_point_last = prev;
- }
-
- } while ( prev != best_point );
-
- do
- {
- if ( next < best_contour_last )
- next++;
- else
- next = best_contour_first;
-
- dist = FT_ABS( points[next].y - best_y );
- if ( dist > 5 )
- if ( FT_ABS( points[next].x - best_x ) <= 20 * dist )
- break;
-
- best_segment_last = next;
-
- if ( FT_CURVE_TAG( outline.tags[next] ) == FT_CURVE_TAG_ON )
- {
- best_on_point_last = next;
- if ( best_on_point_first < 0 )
- best_on_point_first = next;
- }
-
- } while ( next != best_point );
-
- if ( AF_LATIN_IS_LONG_BLUE( bs ) )
- {
- /* If this flag is set, we have an additional constraint to */
- /* get the blue zone distance: Find a segment of the topmost */
- /* (or bottommost) contour that is longer than a heuristic */
- /* threshold. This ensures that small bumps in the outline */
- /* are ignored (for example, the `vertical serifs' found in */
- /* many Hebrew glyph designs). */
-
- /* If this segment is long enough, we are done. Otherwise, */
- /* search the segment next to the extremum that is long */
- /* enough, has the same direction, and a not too large */
- /* vertical distance from the extremum. Note that the */
- /* algorithm doesn't check whether the found segment is */
- /* actually the one (vertically) nearest to the extremum. */
-
- /* heuristic threshold value */
- FT_Pos length_threshold = metrics->units_per_em / 25;
-
-
- dist = FT_ABS( points[best_segment_last].x -
- points[best_segment_first].x );
-
- if ( dist < length_threshold &&
- best_segment_last - best_segment_first + 2 <=
- best_contour_last - best_contour_first )
- {
- /* heuristic threshold value */
- FT_Pos height_threshold = metrics->units_per_em / 4;
-
- FT_Int first;
- FT_Int last;
- FT_Bool hit;
-
- /* we intentionally declare these two variables */
- /* outside of the loop since various compilers emit */
- /* incorrect warning messages otherwise, talking about */
- /* `possibly uninitialized variables' */
- FT_Int p_first = 0; /* make compiler happy */
- FT_Int p_last = 0;
-
- FT_Bool left2right;
-
-
- /* compute direction */
- prev = best_point;
-
- do
- {
- if ( prev > best_contour_first )
- prev--;
- else
- prev = best_contour_last;
-
- if ( points[prev].x != best_x )
- break;
-
- } while ( prev != best_point );
-
- /* skip glyph for the degenerate case */
- if ( prev == best_point )
- continue;
-
- left2right = FT_BOOL( points[prev].x < points[best_point].x );
-
- first = best_segment_last;
- last = first;
- hit = 0;
-
- do
- {
- FT_Bool l2r;
- FT_Pos d;
-
-
- if ( !hit )
- {
- /* no hit; adjust first point */
- first = last;
-
- /* also adjust first and last on point */
- if ( FT_CURVE_TAG( outline.tags[first] ) ==
- FT_CURVE_TAG_ON )
- {
- p_first = first;
- p_last = first;
- }
- else
- {
- p_first = -1;
- p_last = -1;
- }
-
- hit = 1;
- }
-
- if ( last < best_contour_last )
- last++;
- else
- last = best_contour_first;
-
- if ( FT_ABS( best_y - points[first].y ) > height_threshold )
- {
- /* vertical distance too large */
- hit = 0;
- continue;
- }
-
- /* same test as above */
- dist = FT_ABS( points[last].y - points[first].y );
- if ( dist > 5 )
- if ( FT_ABS( points[last].x - points[first].x ) <=
- 20 * dist )
- {
- hit = 0;
- continue;
- }
-
- if ( FT_CURVE_TAG( outline.tags[last] ) == FT_CURVE_TAG_ON )
- {
- p_last = last;
- if ( p_first < 0 )
- p_first = last;
- }
-
- l2r = FT_BOOL( points[first].x < points[last].x );
- d = FT_ABS( points[last].x - points[first].x );
-
- if ( l2r == left2right &&
- d >= length_threshold )
- {
- /* all constraints are met; update segment after */
- /* finding its end */
- do
- {
- if ( last < best_contour_last )
- last++;
- else
- last = best_contour_first;
-
- d = FT_ABS( points[last].y - points[first].y );
- if ( d > 5 )
- if ( FT_ABS( points[next].x - points[first].x ) <=
- 20 * dist )
- {
- if ( last > best_contour_first )
- last--;
- else
- last = best_contour_last;
- break;
- }
-
- p_last = last;
-
- if ( FT_CURVE_TAG( outline.tags[last] ) ==
- FT_CURVE_TAG_ON )
- {
- p_last = last;
- if ( p_first < 0 )
- p_first = last;
- }
-
- } while ( last != best_segment_first );
-
- best_y = points[first].y;
-
- best_segment_first = first;
- best_segment_last = last;
-
- best_on_point_first = p_first;
- best_on_point_last = p_last;
-
- break;
- }
-
- } while ( last != best_segment_first );
- }
- }
-
- /* for computing blue zones, we add the y offset as returned */
- /* by the currently used OpenType feature -- for example, */
- /* superscript glyphs might be identical to subscript glyphs */
- /* with a vertical shift */
- best_y += y_offset;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( num_idx == 1 )
- FT_TRACE5(( " U+%04lX: best_y = %5ld", ch, best_y ));
- else
- FT_TRACE5(( " component %d of cluster starting with U+%04lX:"
- " best_y = %5ld", i, ch, best_y ));
-#endif
-
- /* now set the `round' flag depending on the segment's kind: */
- /* */
- /* - if the horizontal distance between the first and last */
- /* `on' point is larger than a heuristic threshold */
- /* we have a flat segment */
- /* - if either the first or the last point of the segment is */
- /* an `off' point, the segment is round, otherwise it is */
- /* flat */
- if ( best_on_point_first >= 0 &&
- best_on_point_last >= 0 &&
- ( FT_ABS( points[best_on_point_last].x -
- points[best_on_point_first].x ) ) >
- flat_threshold )
- round = 0;
- else
- round = FT_BOOL(
- FT_CURVE_TAG( outline.tags[best_segment_first] ) !=
- FT_CURVE_TAG_ON ||
- FT_CURVE_TAG( outline.tags[best_segment_last] ) !=
- FT_CURVE_TAG_ON );
-
- if ( round && AF_LATIN_IS_NEUTRAL_BLUE( bs ) )
- {
- /* only use flat segments for a neutral blue zone */
- FT_TRACE5(( " (round, skipped)\n" ));
- continue;
- }
-
- FT_TRACE5(( " (%s)\n", round ? "round" : "flat" ));
- }
-
- if ( AF_LATIN_IS_TOP_BLUE( bs ) )
- {
- if ( best_y > best_y_extremum )
- {
- best_y_extremum = best_y;
- best_round = round;
- }
- }
- else
- {
- if ( best_y < best_y_extremum )
- {
- best_y_extremum = best_y;
- best_round = round;
- }
- }
-
- } /* end for loop */
-
- if ( !( best_y_extremum == FT_INT_MIN ||
- best_y_extremum == FT_INT_MAX ) )
- {
- if ( best_round )
- rounds[num_rounds++] = best_y_extremum;
- else
- flats[num_flats++] = best_y_extremum;
- }
-
- } /* end while loop */
-
- if ( num_flats == 0 && num_rounds == 0 )
- {
- /*
- * we couldn't find a single glyph to compute this blue zone,
- * we will simply ignore it then
- */
- FT_TRACE5(( " empty\n" ));
- continue;
- }
-
- /* we have computed the contents of the `rounds' and `flats' tables, */
- /* now determine the reference and overshoot position of the blue -- */
- /* we simply take the median value after a simple sort */
- af_sort_pos( num_rounds, rounds );
- af_sort_pos( num_flats, flats );
-
- blue = &axis->blues[axis->blue_count];
- blue_ref = &blue->ref.org;
- blue_shoot = &blue->shoot.org;
-
- axis->blue_count++;
-
- if ( num_flats == 0 )
- {
- *blue_ref =
- *blue_shoot = rounds[num_rounds / 2];
- }
- else if ( num_rounds == 0 )
- {
- *blue_ref =
- *blue_shoot = flats[num_flats / 2];
- }
- else
- {
- *blue_ref = flats [num_flats / 2];
- *blue_shoot = rounds[num_rounds / 2];
- }
-
- /* there are sometimes problems: if the overshoot position of top */
- /* zones is under its reference position, or the opposite for bottom */
- /* zones. We must thus check everything there and correct the errors */
- if ( *blue_shoot != *blue_ref )
- {
- FT_Pos ref = *blue_ref;
- FT_Pos shoot = *blue_shoot;
- FT_Bool over_ref = FT_BOOL( shoot > ref );
-
-
- if ( ( AF_LATIN_IS_TOP_BLUE( bs ) ||
- AF_LATIN_IS_SUB_TOP_BLUE( bs) ) ^ over_ref )
- {
- *blue_ref =
- *blue_shoot = ( shoot + ref ) / 2;
-
- FT_TRACE5(( " [overshoot smaller than reference,"
- " taking mean value]\n" ));
- }
- }
-
- blue->ascender = ascender;
- blue->descender = descender;
-
- blue->flags = 0;
- if ( AF_LATIN_IS_TOP_BLUE( bs ) )
- blue->flags |= AF_LATIN_BLUE_TOP;
- if ( AF_LATIN_IS_SUB_TOP_BLUE( bs ) )
- blue->flags |= AF_LATIN_BLUE_SUB_TOP;
- if ( AF_LATIN_IS_NEUTRAL_BLUE( bs ) )
- blue->flags |= AF_LATIN_BLUE_NEUTRAL;
-
- /*
- * The following flag is used later to adjust the y and x scales
- * in order to optimize the pixel grid alignment of the top of small
- * letters.
- */
- if ( AF_LATIN_IS_X_HEIGHT_BLUE( bs ) )
- blue->flags |= AF_LATIN_BLUE_ADJUSTMENT;
-
- FT_TRACE5(( " -> reference = %ld\n"
- " overshoot = %ld\n",
- *blue_ref, *blue_shoot ));
-
- } /* end for loop */
-
- af_shaper_buf_destroy( face, shaper_buf );
-
- /* we finally check whether blue zones are ordered; */
- /* `ref' and `shoot' values of two blue zones must not overlap */
- if ( axis->blue_count )
- {
- FT_UInt i;
- AF_LatinBlue blue_sorted[AF_BLUE_STRINGSET_MAX_LEN + 2];
-
-
- for ( i = 0; i < axis->blue_count; i++ )
- blue_sorted[i] = &axis->blues[i];
-
- /* sort bottoms of blue zones... */
- af_latin_sort_blue( axis->blue_count, blue_sorted );
-
- /* ...and adjust top values if necessary */
- for ( i = 0; i < axis->blue_count - 1; i++ )
- {
- FT_Pos* a;
- FT_Pos* b;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_Bool a_is_top = 0;
-#endif
-
-
- if ( blue_sorted[i]->flags & ( AF_LATIN_BLUE_TOP |
- AF_LATIN_BLUE_SUB_TOP ) )
- {
- a = &blue_sorted[i]->shoot.org;
-#ifdef FT_DEBUG_LEVEL_TRACE
- a_is_top = 1;
-#endif
- }
- else
- a = &blue_sorted[i]->ref.org;
-
- if ( blue_sorted[i + 1]->flags & ( AF_LATIN_BLUE_TOP |
- AF_LATIN_BLUE_SUB_TOP ) )
- b = &blue_sorted[i + 1]->shoot.org;
- else
- b = &blue_sorted[i + 1]->ref.org;
-
- if ( *a > *b )
- {
- *a = *b;
- FT_TRACE5(( "blue zone overlap:"
- " adjusting %s %d to %ld\n",
- a_is_top ? "overshoot" : "reference",
- blue_sorted[i] - axis->blues,
- *a ));
- }
- }
- }
-
- FT_TRACE5(( "\n" ));
-
- return;
- }
-
-
- /* Check whether all ASCII digits have the same advance width. */
-
- FT_LOCAL_DEF( void )
- af_latin_metrics_check_digits( AF_LatinMetrics metrics,
- FT_Face face )
- {
- FT_Bool started = 0, same_width = 1;
- FT_Fixed advance = 0, old_advance = 0;
-
- void* shaper_buf;
-
- /* in all supported charmaps, digits have character codes 0x30-0x39 */
- const char digits[] = "0 1 2 3 4 5 6 7 8 9";
- const char* p;
-
-
- p = digits;
- shaper_buf = af_shaper_buf_create( face );
-
- while ( *p )
- {
- FT_ULong glyph_index;
- unsigned int num_idx;
-
-
- /* reject input that maps to more than a single glyph */
- p = af_shaper_get_cluster( p, &metrics->root, shaper_buf, &num_idx );
- if ( num_idx > 1 )
- continue;
-
- glyph_index = af_shaper_get_elem( &metrics->root,
- shaper_buf,
- 0,
- &advance,
- NULL );
- if ( !glyph_index )
- continue;
-
- if ( started )
- {
- if ( advance != old_advance )
- {
- same_width = 0;
- break;
- }
- }
- else
- {
- old_advance = advance;
- started = 1;
- }
- }
-
- af_shaper_buf_destroy( face, shaper_buf );
-
- metrics->root.digits_have_same_width = same_width;
- }
-
-
- /* Initialize global metrics. */
-
- FT_LOCAL_DEF( FT_Error )
- af_latin_metrics_init( AF_LatinMetrics metrics,
- FT_Face face )
- {
- FT_CharMap oldmap = face->charmap;
-
-
- metrics->units_per_em = face->units_per_EM;
-
- if ( !FT_Select_Charmap( face, FT_ENCODING_UNICODE ) )
- {
- af_latin_metrics_init_widths( metrics, face );
- af_latin_metrics_init_blues( metrics, face );
- af_latin_metrics_check_digits( metrics, face );
- }
-
- FT_Set_Charmap( face, oldmap );
- return FT_Err_Ok;
- }
-
-
- /* Adjust scaling value, then scale and shift widths */
- /* and blue zones (if applicable) for given dimension. */
-
- static void
- af_latin_metrics_scale_dim( AF_LatinMetrics metrics,
- AF_Scaler scaler,
- AF_Dimension dim )
- {
- FT_Fixed scale;
- FT_Pos delta;
- AF_LatinAxis axis;
- FT_UInt nn;
-
-
- if ( dim == AF_DIMENSION_HORZ )
- {
- scale = scaler->x_scale;
- delta = scaler->x_delta;
- }
- else
- {
- scale = scaler->y_scale;
- delta = scaler->y_delta;
- }
-
- axis = &metrics->axis[dim];
-
- if ( axis->org_scale == scale && axis->org_delta == delta )
- return;
-
- axis->org_scale = scale;
- axis->org_delta = delta;
-
- /*
- * correct X and Y scale to optimize the alignment of the top of small
- * letters to the pixel grid
- */
- {
- AF_LatinAxis Axis = &metrics->axis[AF_DIMENSION_VERT];
- AF_LatinBlue blue = NULL;
-
-
- for ( nn = 0; nn < Axis->blue_count; nn++ )
- {
- if ( Axis->blues[nn].flags & AF_LATIN_BLUE_ADJUSTMENT )
- {
- blue = &Axis->blues[nn];
- break;
- }
- }
-
- if ( blue )
- {
- FT_Pos scaled;
- FT_Pos threshold;
- FT_Pos fitted;
- FT_UInt limit;
- FT_UInt ppem;
-
-
- scaled = FT_MulFix( blue->shoot.org, scale );
- ppem = metrics->root.scaler.face->size->metrics.x_ppem;
- limit = metrics->root.globals->increase_x_height;
- threshold = 40;
-
- /* if the `increase-x-height' property is active, */
- /* we round up much more often */
- if ( limit &&
- ppem <= limit &&
- ppem >= AF_PROP_INCREASE_X_HEIGHT_MIN )
- threshold = 52;
-
- fitted = ( scaled + threshold ) & ~63;
-
- if ( scaled != fitted )
- {
-#if 0
- if ( dim == AF_DIMENSION_HORZ )
- {
- if ( fitted < scaled )
- scale -= scale / 50; /* scale *= 0.98 */
- }
- else
-#endif
- if ( dim == AF_DIMENSION_VERT )
- {
- FT_Pos max_height;
- FT_Pos dist;
- FT_Fixed new_scale;
-
-
- new_scale = FT_MulDiv( scale, fitted, scaled );
-
- /* the scaling should not change the result by more than two pixels */
- max_height = metrics->units_per_em;
-
- for ( nn = 0; nn < Axis->blue_count; nn++ )
- {
- max_height = FT_MAX( max_height, Axis->blues[nn].ascender );
- max_height = FT_MAX( max_height, -Axis->blues[nn].descender );
- }
-
- dist = FT_ABS( FT_MulFix( max_height, new_scale - scale ) );
- dist &= ~127;
-
- if ( dist == 0 )
- {
- FT_TRACE5((
- "af_latin_metrics_scale_dim:"
- " x height alignment (style `%s'):\n"
- " "
- " vertical scaling changed from %.5f to %.5f (by %d%%)\n"
- "\n",
- af_style_names[metrics->root.style_class->style],
- scale / 65536.0,
- new_scale / 65536.0,
- ( fitted - scaled ) * 100 / scaled ));
-
- scale = new_scale;
- }
-#ifdef FT_DEBUG_LEVEL_TRACE
- else
- {
- FT_TRACE5((
- "af_latin_metrics_scale_dim:"
- " x height alignment (style `%s'):\n"
- " "
- " excessive vertical scaling abandoned\n"
- "\n",
- af_style_names[metrics->root.style_class->style] ));
- }
-#endif
- }
- }
- }
- }
-
- axis->scale = scale;
- axis->delta = delta;
-
- if ( dim == AF_DIMENSION_HORZ )
- {
- metrics->root.scaler.x_scale = scale;
- metrics->root.scaler.x_delta = delta;
- }
- else
- {
- metrics->root.scaler.y_scale = scale;
- metrics->root.scaler.y_delta = delta;
- }
-
- FT_TRACE5(( "%s widths (style `%s')\n",
- dim == AF_DIMENSION_HORZ ? "horizontal" : "vertical",
- af_style_names[metrics->root.style_class->style] ));
-
- /* scale the widths */
- for ( nn = 0; nn < axis->width_count; nn++ )
- {
- AF_Width width = axis->widths + nn;
-
-
- width->cur = FT_MulFix( width->org, scale );
- width->fit = width->cur;
-
- FT_TRACE5(( " %d scaled to %.2f\n",
- width->org,
- width->cur / 64.0 ));
- }
-
- FT_TRACE5(( "\n" ));
-
- /* an extra-light axis corresponds to a standard width that is */
- /* smaller than 5/8 pixels */
- axis->extra_light =
- (FT_Bool)( FT_MulFix( axis->standard_width, scale ) < 32 + 8 );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( axis->extra_light )
- FT_TRACE5(( "`%s' style is extra light (at current resolution)\n"
- "\n",
- af_style_names[metrics->root.style_class->style] ));
-#endif
-
- if ( dim == AF_DIMENSION_VERT )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( axis->blue_count )
- FT_TRACE5(( "blue zones (style `%s')\n",
- af_style_names[metrics->root.style_class->style] ));
-#endif
-
- /* scale the blue zones */
- for ( nn = 0; nn < axis->blue_count; nn++ )
- {
- AF_LatinBlue blue = &axis->blues[nn];
- FT_Pos dist;
-
-
- blue->ref.cur = FT_MulFix( blue->ref.org, scale ) + delta;
- blue->ref.fit = blue->ref.cur;
- blue->shoot.cur = FT_MulFix( blue->shoot.org, scale ) + delta;
- blue->shoot.fit = blue->shoot.cur;
- blue->flags &= ~AF_LATIN_BLUE_ACTIVE;
-
- /* a blue zone is only active if it is less than 3/4 pixels tall */
- dist = FT_MulFix( blue->ref.org - blue->shoot.org, scale );
- if ( dist <= 48 && dist >= -48 )
- {
-#if 0
- FT_Pos delta1;
-#endif
- FT_Pos delta2;
-
-
- /* use discrete values for blue zone widths */
-
-#if 0
-
- /* generic, original code */
- delta1 = blue->shoot.org - blue->ref.org;
- delta2 = delta1;
- if ( delta1 < 0 )
- delta2 = -delta2;
-
- delta2 = FT_MulFix( delta2, scale );
-
- if ( delta2 < 32 )
- delta2 = 0;
- else if ( delta2 < 64 )
- delta2 = 32 + ( ( ( delta2 - 32 ) + 16 ) & ~31 );
- else
- delta2 = FT_PIX_ROUND( delta2 );
-
- if ( delta1 < 0 )
- delta2 = -delta2;
-
- blue->ref.fit = FT_PIX_ROUND( blue->ref.cur );
- blue->shoot.fit = blue->ref.fit + delta2;
-
-#else
-
- /* simplified version due to abs(dist) <= 48 */
- delta2 = dist;
- if ( dist < 0 )
- delta2 = -delta2;
-
- if ( delta2 < 32 )
- delta2 = 0;
- else if ( delta2 < 48 )
- delta2 = 32;
- else
- delta2 = 64;
-
- if ( dist < 0 )
- delta2 = -delta2;
-
- blue->ref.fit = FT_PIX_ROUND( blue->ref.cur );
- blue->shoot.fit = blue->ref.fit - delta2;
-
-#endif
-
- blue->flags |= AF_LATIN_BLUE_ACTIVE;
- }
- }
-
- /* use sub-top blue zone only if it doesn't overlap with */
- /* another (non-sup-top) blue zone; otherwise, the */
- /* effect would be similar to a neutral blue zone, which */
- /* is not desired here */
- for ( nn = 0; nn < axis->blue_count; nn++ )
- {
- AF_LatinBlue blue = &axis->blues[nn];
- FT_UInt i;
-
-
- if ( !( blue->flags & AF_LATIN_BLUE_SUB_TOP ) )
- continue;
- if ( !( blue->flags & AF_LATIN_BLUE_ACTIVE ) )
- continue;
-
- for ( i = 0; i < axis->blue_count; i++ )
- {
- AF_LatinBlue b = &axis->blues[i];
-
-
- if ( b->flags & AF_LATIN_BLUE_SUB_TOP )
- continue;
- if ( !( b->flags & AF_LATIN_BLUE_ACTIVE ) )
- continue;
-
- if ( b->ref.fit <= blue->shoot.fit &&
- b->shoot.fit >= blue->ref.fit )
- {
- blue->flags &= ~AF_LATIN_BLUE_ACTIVE;
- break;
- }
- }
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- for ( nn = 0; nn < axis->blue_count; nn++ )
- {
- AF_LatinBlue blue = &axis->blues[nn];
-
-
- FT_TRACE5(( " reference %d: %d scaled to %.2f%s\n"
- " overshoot %d: %d scaled to %.2f%s\n",
- nn,
- blue->ref.org,
- blue->ref.fit / 64.0,
- blue->flags & AF_LATIN_BLUE_ACTIVE ? ""
- : " (inactive)",
- nn,
- blue->shoot.org,
- blue->shoot.fit / 64.0,
- blue->flags & AF_LATIN_BLUE_ACTIVE ? ""
- : " (inactive)" ));
- }
-#endif
- }
- }
-
-
- /* Scale global values in both directions. */
-
- FT_LOCAL_DEF( void )
- af_latin_metrics_scale( AF_LatinMetrics metrics,
- AF_Scaler scaler )
- {
- metrics->root.scaler.render_mode = scaler->render_mode;
- metrics->root.scaler.face = scaler->face;
- metrics->root.scaler.flags = scaler->flags;
-
- af_latin_metrics_scale_dim( metrics, scaler, AF_DIMENSION_HORZ );
- af_latin_metrics_scale_dim( metrics, scaler, AF_DIMENSION_VERT );
- }
-
-
- /* Extract standard_width from writing system/script specific */
- /* metrics class. */
-
- FT_LOCAL_DEF( void )
- af_latin_get_standard_widths( AF_LatinMetrics metrics,
- FT_Pos* stdHW,
- FT_Pos* stdVW )
- {
- if ( stdHW )
- *stdHW = metrics->axis[AF_DIMENSION_VERT].standard_width;
-
- if ( stdVW )
- *stdVW = metrics->axis[AF_DIMENSION_HORZ].standard_width;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N G L Y P H A N A L Y S I S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* Walk over all contours and compute its segments. */
-
- FT_LOCAL_DEF( FT_Error )
- af_latin_hints_compute_segments( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_LatinMetrics metrics = (AF_LatinMetrics)hints->metrics;
- AF_AxisHints axis = &hints->axis[dim];
- FT_Memory memory = hints->memory;
- FT_Error error = FT_Err_Ok;
- AF_Segment segment = NULL;
- AF_SegmentRec seg0;
- AF_Point* contour = hints->contours;
- AF_Point* contour_limit = contour + hints->num_contours;
- AF_Direction major_dir, segment_dir;
-
- FT_Pos flat_threshold = FLAT_THRESHOLD( metrics->units_per_em );
-
-
- FT_ZERO( &seg0 );
- seg0.score = 32000;
- seg0.flags = AF_EDGE_NORMAL;
-
- major_dir = (AF_Direction)FT_ABS( axis->major_dir );
- segment_dir = major_dir;
-
- axis->num_segments = 0;
-
- /* set up (u,v) in each point */
- if ( dim == AF_DIMENSION_HORZ )
- {
- AF_Point point = hints->points;
- AF_Point limit = point + hints->num_points;
-
-
- for ( ; point < limit; point++ )
- {
- point->u = point->fx;
- point->v = point->fy;
- }
- }
- else
- {
- AF_Point point = hints->points;
- AF_Point limit = point + hints->num_points;
-
-
- for ( ; point < limit; point++ )
- {
- point->u = point->fy;
- point->v = point->fx;
- }
- }
-
- /* do each contour separately */
- for ( ; contour < contour_limit; contour++ )
- {
- AF_Point point = contour[0];
- AF_Point last = point->prev;
- int on_edge = 0;
-
- /* we call values measured along a segment (point->v) */
- /* `coordinates', and values orthogonal to it (point->u) */
- /* `positions' */
- FT_Pos min_pos = 32000;
- FT_Pos max_pos = -32000;
- FT_Pos min_coord = 32000;
- FT_Pos max_coord = -32000;
- FT_UShort min_flags = AF_FLAG_NONE;
- FT_UShort max_flags = AF_FLAG_NONE;
- FT_Pos min_on_coord = 32000;
- FT_Pos max_on_coord = -32000;
-
- FT_Bool passed;
-
- AF_Segment prev_segment = NULL;
-
- FT_Pos prev_min_pos = min_pos;
- FT_Pos prev_max_pos = max_pos;
- FT_Pos prev_min_coord = min_coord;
- FT_Pos prev_max_coord = max_coord;
- FT_UShort prev_min_flags = min_flags;
- FT_UShort prev_max_flags = max_flags;
- FT_Pos prev_min_on_coord = min_on_coord;
- FT_Pos prev_max_on_coord = max_on_coord;
-
-
- if ( FT_ABS( last->out_dir ) == major_dir &&
- FT_ABS( point->out_dir ) == major_dir )
- {
- /* we are already on an edge, try to locate its start */
- last = point;
-
- for (;;)
- {
- point = point->prev;
- if ( FT_ABS( point->out_dir ) != major_dir )
- {
- point = point->next;
- break;
- }
- if ( point == last )
- break;
- }
- }
-
- last = point;
- passed = 0;
-
- for (;;)
- {
- FT_Pos u, v;
-
-
- if ( on_edge )
- {
- /* get minimum and maximum position */
- u = point->u;
- if ( u < min_pos )
- min_pos = u;
- if ( u > max_pos )
- max_pos = u;
-
- /* get minimum and maximum coordinate together with flags */
- v = point->v;
- if ( v < min_coord )
- {
- min_coord = v;
- min_flags = point->flags;
- }
- if ( v > max_coord )
- {
- max_coord = v;
- max_flags = point->flags;
- }
-
- /* get minimum and maximum coordinate of `on' points */
- if ( !( point->flags & AF_FLAG_CONTROL ) )
- {
- v = point->v;
- if ( v < min_on_coord )
- min_on_coord = v;
- if ( v > max_on_coord )
- max_on_coord = v;
- }
-
- if ( point->out_dir != segment_dir || point == last )
- {
- /* check whether the new segment's start point is identical to */
- /* the previous segment's end point; for example, this might */
- /* happen for spikes */
-
- if ( !prev_segment || segment->first != prev_segment->last )
- {
- /* points are different: we are just leaving an edge, thus */
- /* record a new segment */
-
- segment->last = point;
- segment->pos = (FT_Short)( ( min_pos + max_pos ) >> 1 );
- segment->delta = (FT_Short)( ( max_pos - min_pos ) >> 1 );
-
- /* a segment is round if either its first or last point */
- /* is a control point, and the length of the on points */
- /* inbetween doesn't exceed a heuristic limit */
- if ( ( min_flags | max_flags ) & AF_FLAG_CONTROL &&
- ( max_on_coord - min_on_coord ) < flat_threshold )
- segment->flags |= AF_EDGE_ROUND;
-
- segment->min_coord = (FT_Short)min_coord;
- segment->max_coord = (FT_Short)max_coord;
- segment->height = segment->max_coord - segment->min_coord;
-
- prev_segment = segment;
- prev_min_pos = min_pos;
- prev_max_pos = max_pos;
- prev_min_coord = min_coord;
- prev_max_coord = max_coord;
- prev_min_flags = min_flags;
- prev_max_flags = max_flags;
- prev_min_on_coord = min_on_coord;
- prev_max_on_coord = max_on_coord;
- }
- else
- {
- /* points are the same: we don't create a new segment but */
- /* merge the current segment with the previous one */
-
- if ( prev_segment->last->in_dir == point->in_dir )
- {
- /* we have identical directions (this can happen for */
- /* degenerate outlines that move zig-zag along the main */
- /* axis without changing the coordinate value of the other */
- /* axis, and where the segments have just been merged): */
- /* unify segments */
-
- /* update constraints */
-
- if ( prev_min_pos < min_pos )
- min_pos = prev_min_pos;
- if ( prev_max_pos > max_pos )
- max_pos = prev_max_pos;
-
- if ( prev_min_coord < min_coord )
- {
- min_coord = prev_min_coord;
- min_flags = prev_min_flags;
- }
- if ( prev_max_coord > max_coord )
- {
- max_coord = prev_max_coord;
- max_flags = prev_max_flags;
- }
-
- if ( prev_min_on_coord < min_on_coord )
- min_on_coord = prev_min_on_coord;
- if ( prev_max_on_coord > max_on_coord )
- max_on_coord = prev_max_on_coord;
-
- prev_segment->last = point;
- prev_segment->pos = (FT_Short)( ( min_pos +
- max_pos ) >> 1 );
-
- if ( ( min_flags | max_flags ) & AF_FLAG_CONTROL &&
- ( max_on_coord - min_on_coord ) < flat_threshold )
- prev_segment->flags |= AF_EDGE_ROUND;
- else
- prev_segment->flags &= ~AF_EDGE_ROUND;
-
- prev_segment->min_coord = (FT_Short)min_coord;
- prev_segment->max_coord = (FT_Short)max_coord;
- prev_segment->height = prev_segment->max_coord -
- prev_segment->min_coord;
- }
- else
- {
- /* we have different directions; use the properties of the */
- /* longer segment and discard the other one */
-
- if ( FT_ABS( prev_max_coord - prev_min_coord ) >
- FT_ABS( max_coord - min_coord ) )
- {
- /* discard current segment */
-
- if ( min_pos < prev_min_pos )
- prev_min_pos = min_pos;
- if ( max_pos > prev_max_pos )
- prev_max_pos = max_pos;
-
- prev_segment->last = point;
- prev_segment->pos = (FT_Short)( ( prev_min_pos +
- prev_max_pos ) >> 1 );
- }
- else
- {
- /* discard previous segment */
-
- if ( prev_min_pos < min_pos )
- min_pos = prev_min_pos;
- if ( prev_max_pos > max_pos )
- max_pos = prev_max_pos;
-
- segment->last = point;
- segment->pos = (FT_Short)( ( min_pos + max_pos ) >> 1 );
-
- if ( ( min_flags | max_flags ) & AF_FLAG_CONTROL &&
- ( max_on_coord - min_on_coord ) < flat_threshold )
- segment->flags |= AF_EDGE_ROUND;
-
- segment->min_coord = (FT_Short)min_coord;
- segment->max_coord = (FT_Short)max_coord;
- segment->height = segment->max_coord -
- segment->min_coord;
-
- *prev_segment = *segment;
-
- prev_min_pos = min_pos;
- prev_max_pos = max_pos;
- prev_min_coord = min_coord;
- prev_max_coord = max_coord;
- prev_min_flags = min_flags;
- prev_max_flags = max_flags;
- prev_min_on_coord = min_on_coord;
- prev_max_on_coord = max_on_coord;
- }
- }
-
- axis->num_segments--;
- }
-
- on_edge = 0;
- segment = NULL;
-
- /* fall through */
- }
- }
-
- /* now exit if we are at the start/end point */
- if ( point == last )
- {
- if ( passed )
- break;
- passed = 1;
- }
-
- /* if we are not on an edge, check whether the major direction */
- /* coincides with the current point's `out' direction, or */
- /* whether we have a single-point contour */
- if ( !on_edge &&
- ( FT_ABS( point->out_dir ) == major_dir ||
- point == point->prev ) )
- {
- /* this is the start of a new segment! */
- segment_dir = (AF_Direction)point->out_dir;
-
- error = af_axis_hints_new_segment( axis, memory, &segment );
- if ( error )
- goto Exit;
-
- /* clear all segment fields */
- segment[0] = seg0;
-
- segment->dir = (FT_Char)segment_dir;
- segment->first = point;
- segment->last = point;
-
- /* `af_axis_hints_new_segment' reallocates memory, */
- /* thus we have to refresh the `prev_segment' pointer */
- if ( prev_segment )
- prev_segment = segment - 1;
-
- min_pos = max_pos = point->u;
- min_coord = max_coord = point->v;
- min_flags = max_flags = point->flags;
-
- if ( point->flags & AF_FLAG_CONTROL )
- {
- min_on_coord = 32000;
- max_on_coord = -32000;
- }
- else
- min_on_coord = max_on_coord = point->v;
-
- on_edge = 1;
-
- if ( point == point->prev )
- {
- /* we have a one-point segment: this is a one-point */
- /* contour with `in' and `out' direction set to */
- /* AF_DIR_NONE */
- segment->pos = (FT_Short)min_pos;
-
- if (point->flags & AF_FLAG_CONTROL)
- segment->flags |= AF_EDGE_ROUND;
-
- segment->min_coord = (FT_Short)point->v;
- segment->max_coord = (FT_Short)point->v;
- segment->height = 0;
-
- on_edge = 0;
- segment = NULL;
- }
- }
-
- point = point->next;
- }
-
- } /* contours */
-
-
- /* now slightly increase the height of segments if this makes */
- /* sense -- this is used to better detect and ignore serifs */
- {
- AF_Segment segments = axis->segments;
- AF_Segment segments_end = segments + axis->num_segments;
-
-
- for ( segment = segments; segment < segments_end; segment++ )
- {
- AF_Point first = segment->first;
- AF_Point last = segment->last;
- FT_Pos first_v = first->v;
- FT_Pos last_v = last->v;
-
-
- if ( first_v < last_v )
- {
- AF_Point p;
-
-
- p = first->prev;
- if ( p->v < first_v )
- segment->height = (FT_Short)( segment->height +
- ( ( first_v - p->v ) >> 1 ) );
-
- p = last->next;
- if ( p->v > last_v )
- segment->height = (FT_Short)( segment->height +
- ( ( p->v - last_v ) >> 1 ) );
- }
- else
- {
- AF_Point p;
-
-
- p = first->prev;
- if ( p->v > first_v )
- segment->height = (FT_Short)( segment->height +
- ( ( p->v - first_v ) >> 1 ) );
-
- p = last->next;
- if ( p->v < last_v )
- segment->height = (FT_Short)( segment->height +
- ( ( last_v - p->v ) >> 1 ) );
- }
- }
- }
-
- Exit:
- return error;
- }
-
-
- /* Link segments to form stems and serifs. If `width_count' and */
- /* `widths' are non-zero, use them to fine-tune the scoring function. */
-
- FT_LOCAL_DEF( void )
- af_latin_hints_link_segments( AF_GlyphHints hints,
- FT_UInt width_count,
- AF_WidthRec* widths,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- AF_Segment segments = axis->segments;
- AF_Segment segment_limit = segments + axis->num_segments;
- FT_Pos len_threshold, len_score, dist_score, max_width;
- AF_Segment seg1, seg2;
-
-
- if ( width_count )
- max_width = widths[width_count - 1].org;
- else
- max_width = 0;
-
- /* a heuristic value to set up a minimum value for overlapping */
- len_threshold = AF_LATIN_CONSTANT( hints->metrics, 8 );
- if ( len_threshold == 0 )
- len_threshold = 1;
-
- /* a heuristic value to weight lengths */
- len_score = AF_LATIN_CONSTANT( hints->metrics, 6000 );
-
- /* a heuristic value to weight distances (no call to */
- /* AF_LATIN_CONSTANT needed, since we work on multiples */
- /* of the stem width) */
- dist_score = 3000;
-
- /* now compare each segment to the others */
- for ( seg1 = segments; seg1 < segment_limit; seg1++ )
- {
- if ( seg1->dir != axis->major_dir )
- continue;
-
- /* search for stems having opposite directions, */
- /* with seg1 to the `left' of seg2 */
- for ( seg2 = segments; seg2 < segment_limit; seg2++ )
- {
- FT_Pos pos1 = seg1->pos;
- FT_Pos pos2 = seg2->pos;
-
-
- if ( seg1->dir + seg2->dir == 0 && pos2 > pos1 )
- {
- /* compute distance between the two segments */
- FT_Pos min = seg1->min_coord;
- FT_Pos max = seg1->max_coord;
- FT_Pos len;
-
-
- if ( min < seg2->min_coord )
- min = seg2->min_coord;
-
- if ( max > seg2->max_coord )
- max = seg2->max_coord;
-
- /* compute maximum coordinate difference of the two segments */
- /* (this is, how much they overlap) */
- len = max - min;
- if ( len >= len_threshold )
- {
- /*
- * The score is the sum of two demerits indicating the
- * `badness' of a fit, measured along the segments' main axis
- * and orthogonal to it, respectively.
- *
- * o The less overlapping along the main axis, the worse it
- * is, causing a larger demerit.
- *
- * o The nearer the orthogonal distance to a stem width, the
- * better it is, causing a smaller demerit. For simplicity,
- * however, we only increase the demerit for values that
- * exceed the largest stem width.
- */
-
- FT_Pos dist = pos2 - pos1;
-
- FT_Pos dist_demerit, score;
-
-
- if ( max_width )
- {
- /* distance demerits are based on multiples of `max_width'; */
- /* we scale by 1024 for getting more precision */
- FT_Pos delta = ( dist << 10 ) / max_width - ( 1 << 10 );
-
-
- if ( delta > 10000 )
- dist_demerit = 32000;
- else if ( delta > 0 )
- dist_demerit = delta * delta / dist_score;
- else
- dist_demerit = 0;
- }
- else
- dist_demerit = dist; /* default if no widths available */
-
- score = dist_demerit + len_score / len;
-
- /* and we search for the smallest score */
- if ( score < seg1->score )
- {
- seg1->score = score;
- seg1->link = seg2;
- }
-
- if ( score < seg2->score )
- {
- seg2->score = score;
- seg2->link = seg1;
- }
- }
- }
- }
- }
-
- /* now compute the `serif' segments, cf. explanations in `afhints.h' */
- for ( seg1 = segments; seg1 < segment_limit; seg1++ )
- {
- seg2 = seg1->link;
-
- if ( seg2 )
- {
- if ( seg2->link != seg1 )
- {
- seg1->link = 0;
- seg1->serif = seg2->link;
- }
- }
- }
- }
-
-
- /* Link segments to edges, using feature analysis for selection. */
-
- FT_LOCAL_DEF( FT_Error )
- af_latin_hints_compute_edges( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- FT_Error error = FT_Err_Ok;
- FT_Memory memory = hints->memory;
- AF_LatinAxis laxis = &((AF_LatinMetrics)hints->metrics)->axis[dim];
-
-#ifdef FT_CONFIG_OPTION_PIC
- AF_FaceGlobals globals = hints->metrics->globals;
-#endif
-
- AF_StyleClass style_class = hints->metrics->style_class;
- AF_ScriptClass script_class = AF_SCRIPT_CLASSES_GET
- [style_class->script];
-
- FT_Bool top_to_bottom_hinting = 0;
-
- AF_Segment segments = axis->segments;
- AF_Segment segment_limit = segments + axis->num_segments;
- AF_Segment seg;
-
-#if 0
- AF_Direction up_dir;
-#endif
- FT_Fixed scale;
- FT_Pos edge_distance_threshold;
- FT_Pos segment_length_threshold;
- FT_Pos segment_width_threshold;
-
-
- axis->num_edges = 0;
-
- scale = ( dim == AF_DIMENSION_HORZ ) ? hints->x_scale
- : hints->y_scale;
-
-#if 0
- up_dir = ( dim == AF_DIMENSION_HORZ ) ? AF_DIR_UP
- : AF_DIR_RIGHT;
-#endif
-
- if ( dim == AF_DIMENSION_VERT )
- top_to_bottom_hinting = script_class->top_to_bottom_hinting;
-
- /*
- * We ignore all segments that are less than 1 pixel in length
- * to avoid many problems with serif fonts. We compute the
- * corresponding threshold in font units.
- */
- if ( dim == AF_DIMENSION_HORZ )
- segment_length_threshold = FT_DivFix( 64, hints->y_scale );
- else
- segment_length_threshold = 0;
-
- /*
- * Similarly, we ignore segments that have a width delta
- * larger than 0.5px (i.e., a width larger than 1px).
- */
- segment_width_threshold = FT_DivFix( 32, scale );
-
- /*********************************************************************/
- /* */
- /* We begin by generating a sorted table of edges for the current */
- /* direction. To do so, we simply scan each segment and try to find */
- /* an edge in our table that corresponds to its position. */
- /* */
- /* If no edge is found, we create and insert a new edge in the */
- /* sorted table. Otherwise, we simply add the segment to the edge's */
- /* list which gets processed in the second step to compute the */
- /* edge's properties. */
- /* */
- /* Note that the table of edges is sorted along the segment/edge */
- /* position. */
- /* */
- /*********************************************************************/
-
- /* assure that edge distance threshold is at most 0.25px */
- edge_distance_threshold = FT_MulFix( laxis->edge_distance_threshold,
- scale );
- if ( edge_distance_threshold > 64 / 4 )
- edge_distance_threshold = 64 / 4;
-
- edge_distance_threshold = FT_DivFix( edge_distance_threshold,
- scale );
-
- for ( seg = segments; seg < segment_limit; seg++ )
- {
- AF_Edge found = NULL;
- FT_Int ee;
-
-
- /* ignore too short segments, too wide ones, and, in this loop, */
- /* one-point segments without a direction */
- if ( seg->height < segment_length_threshold ||
- seg->delta > segment_width_threshold ||
- seg->dir == AF_DIR_NONE )
- continue;
-
- /* A special case for serif edges: If they are smaller than */
- /* 1.5 pixels we ignore them. */
- if ( seg->serif &&
- 2 * seg->height < 3 * segment_length_threshold )
- continue;
-
- /* look for an edge corresponding to the segment */
- for ( ee = 0; ee < axis->num_edges; ee++ )
- {
- AF_Edge edge = axis->edges + ee;
- FT_Pos dist;
-
-
- dist = seg->pos - edge->fpos;
- if ( dist < 0 )
- dist = -dist;
-
- if ( dist < edge_distance_threshold && edge->dir == seg->dir )
- {
- found = edge;
- break;
- }
- }
-
- if ( !found )
- {
- AF_Edge edge;
-
-
- /* insert a new edge in the list and */
- /* sort according to the position */
- error = af_axis_hints_new_edge( axis, seg->pos,
- (AF_Direction)seg->dir,
- top_to_bottom_hinting,
- memory, &edge );
- if ( error )
- goto Exit;
-
- /* add the segment to the new edge's list */
- FT_ZERO( edge );
-
- edge->first = seg;
- edge->last = seg;
- edge->dir = seg->dir;
- edge->fpos = seg->pos;
- edge->opos = FT_MulFix( seg->pos, scale );
- edge->pos = edge->opos;
- seg->edge_next = seg;
- }
- else
- {
- /* if an edge was found, simply add the segment to the edge's */
- /* list */
- seg->edge_next = found->first;
- found->last->edge_next = seg;
- found->last = seg;
- }
- }
-
- /* we loop again over all segments to catch one-point segments */
- /* without a direction: if possible, link them to existing edges */
- for ( seg = segments; seg < segment_limit; seg++ )
- {
- AF_Edge found = NULL;
- FT_Int ee;
-
-
- if ( seg->dir != AF_DIR_NONE )
- continue;
-
- /* look for an edge corresponding to the segment */
- for ( ee = 0; ee < axis->num_edges; ee++ )
- {
- AF_Edge edge = axis->edges + ee;
- FT_Pos dist;
-
-
- dist = seg->pos - edge->fpos;
- if ( dist < 0 )
- dist = -dist;
-
- if ( dist < edge_distance_threshold )
- {
- found = edge;
- break;
- }
- }
-
- /* one-point segments without a match are ignored */
- if ( found )
- {
- seg->edge_next = found->first;
- found->last->edge_next = seg;
- found->last = seg;
- }
- }
-
-
- /******************************************************************/
- /* */
- /* Good, we now compute each edge's properties according to the */
- /* segments found on its position. Basically, these are */
- /* */
- /* - the edge's main direction */
- /* - stem edge, serif edge or both (which defaults to stem then) */
- /* - rounded edge, straight or both (which defaults to straight) */
- /* - link for edge */
- /* */
- /******************************************************************/
-
- /* first of all, set the `edge' field in each segment -- this is */
- /* required in order to compute edge links */
-
- /*
- * Note that removing this loop and setting the `edge' field of each
- * segment directly in the code above slows down execution speed for
- * some reasons on platforms like the Sun.
- */
- {
- AF_Edge edges = axis->edges;
- AF_Edge edge_limit = edges + axis->num_edges;
- AF_Edge edge;
-
-
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- seg = edge->first;
- if ( seg )
- do
- {
- seg->edge = edge;
- seg = seg->edge_next;
-
- } while ( seg != edge->first );
- }
-
- /* now compute each edge properties */
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- FT_Int is_round = 0; /* does it contain round segments? */
- FT_Int is_straight = 0; /* does it contain straight segments? */
-#if 0
- FT_Pos ups = 0; /* number of upwards segments */
- FT_Pos downs = 0; /* number of downwards segments */
-#endif
-
-
- seg = edge->first;
-
- do
- {
- FT_Bool is_serif;
-
-
- /* check for roundness of segment */
- if ( seg->flags & AF_EDGE_ROUND )
- is_round++;
- else
- is_straight++;
-
-#if 0
- /* check for segment direction */
- if ( seg->dir == up_dir )
- ups += seg->max_coord - seg->min_coord;
- else
- downs += seg->max_coord - seg->min_coord;
-#endif
-
- /* check for links -- if seg->serif is set, then seg->link must */
- /* be ignored */
- is_serif = (FT_Bool)( seg->serif &&
- seg->serif->edge &&
- seg->serif->edge != edge );
-
- if ( ( seg->link && seg->link->edge ) || is_serif )
- {
- AF_Edge edge2;
- AF_Segment seg2;
-
-
- edge2 = edge->link;
- seg2 = seg->link;
-
- if ( is_serif )
- {
- seg2 = seg->serif;
- edge2 = edge->serif;
- }
-
- if ( edge2 )
- {
- FT_Pos edge_delta;
- FT_Pos seg_delta;
-
-
- edge_delta = edge->fpos - edge2->fpos;
- if ( edge_delta < 0 )
- edge_delta = -edge_delta;
-
- seg_delta = seg->pos - seg2->pos;
- if ( seg_delta < 0 )
- seg_delta = -seg_delta;
-
- if ( seg_delta < edge_delta )
- edge2 = seg2->edge;
- }
- else
- edge2 = seg2->edge;
-
- if ( is_serif )
- {
- edge->serif = edge2;
- edge2->flags |= AF_EDGE_SERIF;
- }
- else
- edge->link = edge2;
- }
-
- seg = seg->edge_next;
-
- } while ( seg != edge->first );
-
- /* set the round/straight flags */
- edge->flags = AF_EDGE_NORMAL;
-
- if ( is_round > 0 && is_round >= is_straight )
- edge->flags |= AF_EDGE_ROUND;
-
-#if 0
- /* set the edge's main direction */
- edge->dir = AF_DIR_NONE;
-
- if ( ups > downs )
- edge->dir = (FT_Char)up_dir;
-
- else if ( ups < downs )
- edge->dir = (FT_Char)-up_dir;
-
- else if ( ups == downs )
- edge->dir = 0; /* both up and down! */
-#endif
-
- /* get rid of serifs if link is set */
- /* XXX: This gets rid of many unpleasant artefacts! */
- /* Example: the `c' in cour.pfa at size 13 */
-
- if ( edge->serif && edge->link )
- edge->serif = NULL;
- }
- }
-
- Exit:
- return error;
- }
-
-
- /* Detect segments and edges for given dimension. */
-
- FT_LOCAL_DEF( FT_Error )
- af_latin_hints_detect_features( AF_GlyphHints hints,
- FT_UInt width_count,
- AF_WidthRec* widths,
- AF_Dimension dim )
- {
- FT_Error error;
-
-
- error = af_latin_hints_compute_segments( hints, dim );
- if ( !error )
- {
- af_latin_hints_link_segments( hints, width_count, widths, dim );
-
- error = af_latin_hints_compute_edges( hints, dim );
- }
-
- return error;
- }
-
-
- /* Compute all edges which lie within blue zones. */
-
- static void
- af_latin_hints_compute_blue_edges( AF_GlyphHints hints,
- AF_LatinMetrics metrics )
- {
- AF_AxisHints axis = &hints->axis[AF_DIMENSION_VERT];
- AF_Edge edge = axis->edges;
- AF_Edge edge_limit = edge + axis->num_edges;
- AF_LatinAxis latin = &metrics->axis[AF_DIMENSION_VERT];
- FT_Fixed scale = latin->scale;
-
-
- /* compute which blue zones are active, i.e. have their scaled */
- /* size < 3/4 pixels */
-
- /* for each horizontal edge search the blue zone which is closest */
- for ( ; edge < edge_limit; edge++ )
- {
- FT_UInt bb;
- AF_Width best_blue = NULL;
- FT_Bool best_blue_is_neutral = 0;
- FT_Pos best_dist; /* initial threshold */
-
-
- /* compute the initial threshold as a fraction of the EM size */
- /* (the value 40 is heuristic) */
- best_dist = FT_MulFix( metrics->units_per_em / 40, scale );
-
- /* assure a minimum distance of 0.5px */
- if ( best_dist > 64 / 2 )
- best_dist = 64 / 2;
-
- for ( bb = 0; bb < latin->blue_count; bb++ )
- {
- AF_LatinBlue blue = latin->blues + bb;
- FT_Bool is_top_blue, is_neutral_blue, is_major_dir;
-
-
- /* skip inactive blue zones (i.e., those that are too large) */
- if ( !( blue->flags & AF_LATIN_BLUE_ACTIVE ) )
- continue;
-
- /* if it is a top zone, check for right edges (against the major */
- /* direction); if it is a bottom zone, check for left edges (in */
- /* the major direction) -- this assumes the TrueType convention */
- /* for the orientation of contours */
- is_top_blue =
- (FT_Byte)( ( blue->flags & ( AF_LATIN_BLUE_TOP |
- AF_LATIN_BLUE_SUB_TOP ) ) != 0 );
- is_neutral_blue =
- (FT_Byte)( ( blue->flags & AF_LATIN_BLUE_NEUTRAL ) != 0);
- is_major_dir =
- FT_BOOL( edge->dir == axis->major_dir );
-
- /* neutral blue zones are handled for both directions */
- if ( is_top_blue ^ is_major_dir || is_neutral_blue )
- {
- FT_Pos dist;
-
-
- /* first of all, compare it to the reference position */
- dist = edge->fpos - blue->ref.org;
- if ( dist < 0 )
- dist = -dist;
-
- dist = FT_MulFix( dist, scale );
- if ( dist < best_dist )
- {
- best_dist = dist;
- best_blue = &blue->ref;
- best_blue_is_neutral = is_neutral_blue;
- }
-
- /* now compare it to the overshoot position and check whether */
- /* the edge is rounded, and whether the edge is over the */
- /* reference position of a top zone, or under the reference */
- /* position of a bottom zone (provided we don't have a */
- /* neutral blue zone) */
- if ( edge->flags & AF_EDGE_ROUND &&
- dist != 0 &&
- !is_neutral_blue )
- {
- FT_Bool is_under_ref = FT_BOOL( edge->fpos < blue->ref.org );
-
-
- if ( is_top_blue ^ is_under_ref )
- {
- dist = edge->fpos - blue->shoot.org;
- if ( dist < 0 )
- dist = -dist;
-
- dist = FT_MulFix( dist, scale );
- if ( dist < best_dist )
- {
- best_dist = dist;
- best_blue = &blue->shoot;
- best_blue_is_neutral = is_neutral_blue;
- }
- }
- }
- }
- }
-
- if ( best_blue )
- {
- edge->blue_edge = best_blue;
- if ( best_blue_is_neutral )
- edge->flags |= AF_EDGE_NEUTRAL;
- }
- }
- }
-
-
- /* Initalize hinting engine. */
-
- static FT_Error
- af_latin_hints_init( AF_GlyphHints hints,
- AF_LatinMetrics metrics )
- {
- FT_Render_Mode mode;
- FT_UInt32 scaler_flags, other_flags;
- FT_Face face = metrics->root.scaler.face;
-
-
- af_glyph_hints_rescale( hints, (AF_StyleMetrics)metrics );
-
- /*
- * correct x_scale and y_scale if needed, since they may have
- * been modified by `af_latin_metrics_scale_dim' above
- */
- hints->x_scale = metrics->axis[AF_DIMENSION_HORZ].scale;
- hints->x_delta = metrics->axis[AF_DIMENSION_HORZ].delta;
- hints->y_scale = metrics->axis[AF_DIMENSION_VERT].scale;
- hints->y_delta = metrics->axis[AF_DIMENSION_VERT].delta;
-
- /* compute flags depending on render mode, etc. */
- mode = metrics->root.scaler.render_mode;
-
-#if 0 /* #ifdef AF_CONFIG_OPTION_USE_WARPER */
- if ( mode == FT_RENDER_MODE_LCD || mode == FT_RENDER_MODE_LCD_V )
- metrics->root.scaler.render_mode = mode = FT_RENDER_MODE_NORMAL;
-#endif
-
- scaler_flags = hints->scaler_flags;
- other_flags = 0;
-
- /*
- * We snap the width of vertical stems for the monochrome and
- * horizontal LCD rendering targets only.
- */
- if ( mode == FT_RENDER_MODE_MONO || mode == FT_RENDER_MODE_LCD )
- other_flags |= AF_LATIN_HINTS_HORZ_SNAP;
-
- /*
- * We snap the width of horizontal stems for the monochrome and
- * vertical LCD rendering targets only.
- */
- if ( mode == FT_RENDER_MODE_MONO || mode == FT_RENDER_MODE_LCD_V )
- other_flags |= AF_LATIN_HINTS_VERT_SNAP;
-
- /*
- * We adjust stems to full pixels unless in `light' or `lcd' mode.
- */
- if ( mode != FT_RENDER_MODE_LIGHT && mode != FT_RENDER_MODE_LCD )
- other_flags |= AF_LATIN_HINTS_STEM_ADJUST;
-
- if ( mode == FT_RENDER_MODE_MONO )
- other_flags |= AF_LATIN_HINTS_MONO;
-
- /*
- * In `light' or `lcd' mode we disable horizontal hinting completely.
- * We also do it if the face is italic.
- *
- * However, if warping is enabled (which only works in `light' hinting
- * mode), advance widths get adjusted, too.
- */
- if ( mode == FT_RENDER_MODE_LIGHT || mode == FT_RENDER_MODE_LCD ||
- ( face->style_flags & FT_STYLE_FLAG_ITALIC ) != 0 )
- scaler_flags |= AF_SCALER_FLAG_NO_HORIZONTAL;
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- /* get (global) warper flag */
- if ( !metrics->root.globals->module->warping )
- scaler_flags |= AF_SCALER_FLAG_NO_WARPER;
-#endif
-
- hints->scaler_flags = scaler_flags;
- hints->other_flags = other_flags;
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N G L Y P H G R I D - F I T T I N G *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* Snap a given width in scaled coordinates to one of the */
- /* current standard widths. */
-
- static FT_Pos
- af_latin_snap_width( AF_Width widths,
- FT_UInt count,
- FT_Pos width )
- {
- FT_UInt n;
- FT_Pos best = 64 + 32 + 2;
- FT_Pos reference = width;
- FT_Pos scaled;
-
-
- for ( n = 0; n < count; n++ )
- {
- FT_Pos w;
- FT_Pos dist;
-
-
- w = widths[n].cur;
- dist = width - w;
- if ( dist < 0 )
- dist = -dist;
- if ( dist < best )
- {
- best = dist;
- reference = w;
- }
- }
-
- scaled = FT_PIX_ROUND( reference );
-
- if ( width >= reference )
- {
- if ( width < scaled + 48 )
- width = reference;
- }
- else
- {
- if ( width > scaled - 48 )
- width = reference;
- }
-
- return width;
- }
-
-
- /* Compute the snapped width of a given stem, ignoring very thin ones. */
- /* There is a lot of voodoo in this function; changing the hard-coded */
- /* parameters influence the whole hinting process. */
-
- static FT_Pos
- af_latin_compute_stem_width( AF_GlyphHints hints,
- AF_Dimension dim,
- FT_Pos width,
- FT_Pos base_delta,
- FT_UInt base_flags,
- FT_UInt stem_flags )
- {
- AF_LatinMetrics metrics = (AF_LatinMetrics)hints->metrics;
- AF_LatinAxis axis = &metrics->axis[dim];
- FT_Pos dist = width;
- FT_Int sign = 0;
- FT_Int vertical = ( dim == AF_DIMENSION_VERT );
-
-
- if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) ||
- axis->extra_light )
- return width;
-
- if ( dist < 0 )
- {
- dist = -width;
- sign = 1;
- }
-
- if ( ( vertical && !AF_LATIN_HINTS_DO_VERT_SNAP( hints ) ) ||
- ( !vertical && !AF_LATIN_HINTS_DO_HORZ_SNAP( hints ) ) )
- {
- /* smooth hinting process: very lightly quantize the stem width */
-
- /* leave the widths of serifs alone */
- if ( ( stem_flags & AF_EDGE_SERIF ) &&
- vertical &&
- ( dist < 3 * 64 ) )
- goto Done_Width;
-
- else if ( base_flags & AF_EDGE_ROUND )
- {
- if ( dist < 80 )
- dist = 64;
- }
- else if ( dist < 56 )
- dist = 56;
-
- if ( axis->width_count > 0 )
- {
- FT_Pos delta;
-
-
- /* compare to standard width */
- delta = dist - axis->widths[0].cur;
-
- if ( delta < 0 )
- delta = -delta;
-
- if ( delta < 40 )
- {
- dist = axis->widths[0].cur;
- if ( dist < 48 )
- dist = 48;
-
- goto Done_Width;
- }
-
- if ( dist < 3 * 64 )
- {
- delta = dist & 63;
- dist &= -64;
-
- if ( delta < 10 )
- dist += delta;
-
- else if ( delta < 32 )
- dist += 10;
-
- else if ( delta < 54 )
- dist += 54;
-
- else
- dist += delta;
- }
- else
- {
- /* A stem's end position depends on two values: the start */
- /* position and the stem length. The former gets usually */
- /* rounded to the grid, while the latter gets rounded also if it */
- /* exceeds a certain length (see below in this function). This */
- /* `double rounding' can lead to a great difference to the */
- /* original, unhinted position; this normally doesn't matter for */
- /* large PPEM values, but for small sizes it can easily make */
- /* outlines collide. For this reason, we adjust the stem length */
- /* by a small amount depending on the PPEM value in case the */
- /* former and latter rounding both point into the same */
- /* direction. */
-
- FT_Pos bdelta = 0;
-
-
- if ( ( ( width > 0 ) && ( base_delta > 0 ) ) ||
- ( ( width < 0 ) && ( base_delta < 0 ) ) )
- {
- FT_UInt ppem = metrics->root.scaler.face->size->metrics.x_ppem;
-
-
- if ( ppem < 10 )
- bdelta = base_delta;
- else if ( ppem < 30 )
- bdelta = ( base_delta * (FT_Pos)( 30 - ppem ) ) / 20;
-
- if ( bdelta < 0 )
- bdelta = -bdelta;
- }
-
- dist = ( dist - bdelta + 32 ) & ~63;
- }
- }
- }
- else
- {
- /* strong hinting process: snap the stem width to integer pixels */
-
- FT_Pos org_dist = dist;
-
-
- dist = af_latin_snap_width( axis->widths, axis->width_count, dist );
-
- if ( vertical )
- {
- /* in the case of vertical hinting, always round */
- /* the stem heights to integer pixels */
-
- if ( dist >= 64 )
- dist = ( dist + 16 ) & ~63;
- else
- dist = 64;
- }
- else
- {
- if ( AF_LATIN_HINTS_DO_MONO( hints ) )
- {
- /* monochrome horizontal hinting: snap widths to integer pixels */
- /* with a different threshold */
-
- if ( dist < 64 )
- dist = 64;
- else
- dist = ( dist + 32 ) & ~63;
- }
- else
- {
- /* for horizontal anti-aliased hinting, we adopt a more subtle */
- /* approach: we strengthen small stems, round stems whose size */
- /* is between 1 and 2 pixels to an integer, otherwise nothing */
-
- if ( dist < 48 )
- dist = ( dist + 64 ) >> 1;
-
- else if ( dist < 128 )
- {
- /* We only round to an integer width if the corresponding */
- /* distortion is less than 1/4 pixel. Otherwise this */
- /* makes everything worse since the diagonals, which are */
- /* not hinted, appear a lot bolder or thinner than the */
- /* vertical stems. */
-
- FT_Pos delta;
-
-
- dist = ( dist + 22 ) & ~63;
- delta = dist - org_dist;
- if ( delta < 0 )
- delta = -delta;
-
- if ( delta >= 16 )
- {
- dist = org_dist;
- if ( dist < 48 )
- dist = ( dist + 64 ) >> 1;
- }
- }
- else
- /* round otherwise to prevent color fringes in LCD mode */
- dist = ( dist + 32 ) & ~63;
- }
- }
- }
-
- Done_Width:
- if ( sign )
- dist = -dist;
-
- return dist;
- }
-
-
- /* Align one stem edge relative to the previous stem edge. */
-
- static void
- af_latin_align_linked_edge( AF_GlyphHints hints,
- AF_Dimension dim,
- AF_Edge base_edge,
- AF_Edge stem_edge )
- {
- FT_Pos dist, base_delta;
- FT_Pos fitted_width;
-
-
- dist = stem_edge->opos - base_edge->opos;
- base_delta = base_edge->pos - base_edge->opos;
-
- fitted_width = af_latin_compute_stem_width( hints, dim,
- dist, base_delta,
- base_edge->flags,
- stem_edge->flags );
-
-
- stem_edge->pos = base_edge->pos + fitted_width;
-
- FT_TRACE5(( " LINK: edge %d (opos=%.2f) linked to %.2f,"
- " dist was %.2f, now %.2f\n",
- stem_edge - hints->axis[dim].edges, stem_edge->opos / 64.0,
- stem_edge->pos / 64.0, dist / 64.0, fitted_width / 64.0 ));
- }
-
-
- /* Shift the coordinates of the `serif' edge by the same amount */
- /* as the corresponding `base' edge has been moved already. */
-
- static void
- af_latin_align_serif_edge( AF_GlyphHints hints,
- AF_Edge base,
- AF_Edge serif )
- {
- FT_UNUSED( hints );
-
- serif->pos = base->pos + ( serif->opos - base->opos );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** E D G E H I N T I N G ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* The main grid-fitting routine. */
-
- static void
- af_latin_hint_edges( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- AF_Edge edges = axis->edges;
- AF_Edge edge_limit = edges + axis->num_edges;
- FT_PtrDist n_edges;
- AF_Edge edge;
- AF_Edge anchor = NULL;
- FT_Int has_serifs = 0;
-
-#ifdef FT_CONFIG_OPTION_PIC
- AF_FaceGlobals globals = hints->metrics->globals;
-#endif
-
- AF_StyleClass style_class = hints->metrics->style_class;
- AF_ScriptClass script_class = AF_SCRIPT_CLASSES_GET
- [style_class->script];
-
- FT_Bool top_to_bottom_hinting = 0;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_UInt num_actions = 0;
-#endif
-
-
- FT_TRACE5(( "latin %s edge hinting (style `%s')\n",
- dim == AF_DIMENSION_VERT ? "horizontal" : "vertical",
- af_style_names[hints->metrics->style_class->style] ));
-
- if ( dim == AF_DIMENSION_VERT )
- top_to_bottom_hinting = script_class->top_to_bottom_hinting;
-
- /* we begin by aligning all stems relative to the blue zone */
- /* if needed -- that's only for horizontal edges */
-
- if ( dim == AF_DIMENSION_VERT && AF_HINTS_DO_BLUES( hints ) )
- {
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- AF_Width blue;
- AF_Edge edge1, edge2; /* these edges form the stem to check */
-
-
- if ( edge->flags & AF_EDGE_DONE )
- continue;
-
- edge1 = NULL;
- edge2 = edge->link;
-
- /*
- * If a stem contains both a neutral and a non-neutral blue zone,
- * skip the neutral one. Otherwise, outlines with different
- * directions might be incorrectly aligned at the same vertical
- * position.
- *
- * If we have two neutral blue zones, skip one of them.
- *
- */
- if ( edge->blue_edge && edge2 && edge2->blue_edge )
- {
- FT_Byte neutral = edge->flags & AF_EDGE_NEUTRAL;
- FT_Byte neutral2 = edge2->flags & AF_EDGE_NEUTRAL;
-
-
- if ( neutral2 )
- {
- edge2->blue_edge = NULL;
- edge2->flags &= ~AF_EDGE_NEUTRAL;
- }
- else if ( neutral )
- {
- edge->blue_edge = NULL;
- edge->flags &= ~AF_EDGE_NEUTRAL;
- }
- }
-
- blue = edge->blue_edge;
- if ( blue )
- edge1 = edge;
-
- /* flip edges if the other edge is aligned to a blue zone */
- else if ( edge2 && edge2->blue_edge )
- {
- blue = edge2->blue_edge;
- edge1 = edge2;
- edge2 = edge;
- }
-
- if ( !edge1 )
- continue;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !anchor )
- FT_TRACE5(( " BLUE_ANCHOR: edge %d (opos=%.2f) snapped to %.2f,"
- " was %.2f (anchor=edge %d)\n",
- edge1 - edges, edge1->opos / 64.0, blue->fit / 64.0,
- edge1->pos / 64.0, edge - edges ));
- else
- FT_TRACE5(( " BLUE: edge %d (opos=%.2f) snapped to %.2f,"
- " was %.2f\n",
- edge1 - edges, edge1->opos / 64.0, blue->fit / 64.0,
- edge1->pos / 64.0 ));
-
- num_actions++;
-#endif
-
- edge1->pos = blue->fit;
- edge1->flags |= AF_EDGE_DONE;
-
- if ( edge2 && !edge2->blue_edge )
- {
- af_latin_align_linked_edge( hints, dim, edge1, edge2 );
- edge2->flags |= AF_EDGE_DONE;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- num_actions++;
-#endif
- }
-
- if ( !anchor )
- anchor = edge;
- }
- }
-
- /* now we align all other stem edges, trying to maintain the */
- /* relative order of stems in the glyph */
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- AF_Edge edge2;
-
-
- if ( edge->flags & AF_EDGE_DONE )
- continue;
-
- /* skip all non-stem edges */
- edge2 = edge->link;
- if ( !edge2 )
- {
- has_serifs++;
- continue;
- }
-
- /* now align the stem */
-
- /* this should not happen, but it's better to be safe */
- if ( edge2->blue_edge )
- {
- FT_TRACE5(( " ASSERTION FAILED for edge %d\n", edge2 - edges ));
-
- af_latin_align_linked_edge( hints, dim, edge2, edge );
- edge->flags |= AF_EDGE_DONE;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- num_actions++;
-#endif
- continue;
- }
-
- if ( !anchor )
- {
- /* if we reach this if clause, no stem has been aligned yet */
-
- FT_Pos org_len, org_center, cur_len;
- FT_Pos cur_pos1, error1, error2, u_off, d_off;
-
-
- org_len = edge2->opos - edge->opos;
- cur_len = af_latin_compute_stem_width( hints, dim,
- org_len, 0,
- edge->flags,
- edge2->flags );
-
- /* some voodoo to specially round edges for small stem widths; */
- /* the idea is to align the center of a stem, then shifting */
- /* the stem edges to suitable positions */
- if ( cur_len <= 64 )
- {
- /* width <= 1px */
- u_off = 32;
- d_off = 32;
- }
- else
- {
- /* 1px < width < 1.5px */
- u_off = 38;
- d_off = 26;
- }
-
- if ( cur_len < 96 )
- {
- org_center = edge->opos + ( org_len >> 1 );
- cur_pos1 = FT_PIX_ROUND( org_center );
-
- error1 = org_center - ( cur_pos1 - u_off );
- if ( error1 < 0 )
- error1 = -error1;
-
- error2 = org_center - ( cur_pos1 + d_off );
- if ( error2 < 0 )
- error2 = -error2;
-
- if ( error1 < error2 )
- cur_pos1 -= u_off;
- else
- cur_pos1 += d_off;
-
- edge->pos = cur_pos1 - cur_len / 2;
- edge2->pos = edge->pos + cur_len;
- }
- else
- edge->pos = FT_PIX_ROUND( edge->opos );
-
- anchor = edge;
- edge->flags |= AF_EDGE_DONE;
-
- FT_TRACE5(( " ANCHOR: edge %d (opos=%.2f) and %d (opos=%.2f)"
- " snapped to %.2f and %.2f\n",
- edge - edges, edge->opos / 64.0,
- edge2 - edges, edge2->opos / 64.0,
- edge->pos / 64.0, edge2->pos / 64.0 ));
-
- af_latin_align_linked_edge( hints, dim, edge, edge2 );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- num_actions += 2;
-#endif
- }
- else
- {
- FT_Pos org_pos, org_len, org_center, cur_len;
- FT_Pos cur_pos1, cur_pos2, delta1, delta2;
-
-
- org_pos = anchor->pos + ( edge->opos - anchor->opos );
- org_len = edge2->opos - edge->opos;
- org_center = org_pos + ( org_len >> 1 );
-
- cur_len = af_latin_compute_stem_width( hints, dim,
- org_len, 0,
- edge->flags,
- edge2->flags );
-
- if ( edge2->flags & AF_EDGE_DONE )
- {
- FT_TRACE5(( " ADJUST: edge %d (pos=%.2f) moved to %.2f\n",
- edge - edges, edge->pos / 64.0,
- ( edge2->pos - cur_len ) / 64.0 ));
-
- edge->pos = edge2->pos - cur_len;
- }
-
- else if ( cur_len < 96 )
- {
- FT_Pos u_off, d_off;
-
-
- cur_pos1 = FT_PIX_ROUND( org_center );
-
- if ( cur_len <= 64 )
- {
- u_off = 32;
- d_off = 32;
- }
- else
- {
- u_off = 38;
- d_off = 26;
- }
-
- delta1 = org_center - ( cur_pos1 - u_off );
- if ( delta1 < 0 )
- delta1 = -delta1;
-
- delta2 = org_center - ( cur_pos1 + d_off );
- if ( delta2 < 0 )
- delta2 = -delta2;
-
- if ( delta1 < delta2 )
- cur_pos1 -= u_off;
- else
- cur_pos1 += d_off;
-
- edge->pos = cur_pos1 - cur_len / 2;
- edge2->pos = cur_pos1 + cur_len / 2;
-
- FT_TRACE5(( " STEM: edge %d (opos=%.2f) linked to %d (opos=%.2f)"
- " snapped to %.2f and %.2f\n",
- edge - edges, edge->opos / 64.0,
- edge2 - edges, edge2->opos / 64.0,
- edge->pos / 64.0, edge2->pos / 64.0 ));
- }
-
- else
- {
- org_pos = anchor->pos + ( edge->opos - anchor->opos );
- org_len = edge2->opos - edge->opos;
- org_center = org_pos + ( org_len >> 1 );
-
- cur_len = af_latin_compute_stem_width( hints, dim,
- org_len, 0,
- edge->flags,
- edge2->flags );
-
- cur_pos1 = FT_PIX_ROUND( org_pos );
- delta1 = cur_pos1 + ( cur_len >> 1 ) - org_center;
- if ( delta1 < 0 )
- delta1 = -delta1;
-
- cur_pos2 = FT_PIX_ROUND( org_pos + org_len ) - cur_len;
- delta2 = cur_pos2 + ( cur_len >> 1 ) - org_center;
- if ( delta2 < 0 )
- delta2 = -delta2;
-
- edge->pos = ( delta1 < delta2 ) ? cur_pos1 : cur_pos2;
- edge2->pos = edge->pos + cur_len;
-
- FT_TRACE5(( " STEM: edge %d (opos=%.2f) linked to %d (opos=%.2f)"
- " snapped to %.2f and %.2f\n",
- edge - edges, edge->opos / 64.0,
- edge2 - edges, edge2->opos / 64.0,
- edge->pos / 64.0, edge2->pos / 64.0 ));
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- num_actions++;
-#endif
-
- edge->flags |= AF_EDGE_DONE;
- edge2->flags |= AF_EDGE_DONE;
-
- if ( edge > edges &&
- ( top_to_bottom_hinting ? ( edge->pos > edge[-1].pos )
- : ( edge->pos < edge[-1].pos ) ) )
- {
- /* don't move if stem would (almost) disappear otherwise; */
- /* the ad-hoc value 16 corresponds to 1/4px */
- if ( edge->link && FT_ABS( edge->link->pos - edge[-1].pos ) > 16 )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
- edge - edges,
- edge->pos / 64.0,
- edge[-1].pos / 64.0 ));
-
- num_actions++;
-#endif
-
- edge->pos = edge[-1].pos;
- }
- }
- }
- }
-
- /* make sure that lowercase m's maintain their symmetry */
-
- /* In general, lowercase m's have six vertical edges if they are sans */
- /* serif, or twelve if they are with serifs. This implementation is */
- /* based on that assumption, and seems to work very well with most */
- /* faces. However, if for a certain face this assumption is not */
- /* true, the m is just rendered like before. In addition, any stem */
- /* correction will only be applied to symmetrical glyphs (even if the */
- /* glyph is not an m), so the potential for unwanted distortion is */
- /* relatively low. */
-
- /* We don't handle horizontal edges since we can't easily assure that */
- /* the third (lowest) stem aligns with the base line; it might end up */
- /* one pixel higher or lower. */
-
- n_edges = edge_limit - edges;
- if ( dim == AF_DIMENSION_HORZ && ( n_edges == 6 || n_edges == 12 ) )
- {
- AF_Edge edge1, edge2, edge3;
- FT_Pos dist1, dist2, span, delta;
-
-
- if ( n_edges == 6 )
- {
- edge1 = edges;
- edge2 = edges + 2;
- edge3 = edges + 4;
- }
- else
- {
- edge1 = edges + 1;
- edge2 = edges + 5;
- edge3 = edges + 9;
- }
-
- dist1 = edge2->opos - edge1->opos;
- dist2 = edge3->opos - edge2->opos;
-
- span = dist1 - dist2;
- if ( span < 0 )
- span = -span;
-
- if ( span < 8 )
- {
- delta = edge3->pos - ( 2 * edge2->pos - edge1->pos );
- edge3->pos -= delta;
- if ( edge3->link )
- edge3->link->pos -= delta;
-
- /* move the serifs along with the stem */
- if ( n_edges == 12 )
- {
- ( edges + 8 )->pos -= delta;
- ( edges + 11 )->pos -= delta;
- }
-
- edge3->flags |= AF_EDGE_DONE;
- if ( edge3->link )
- edge3->link->flags |= AF_EDGE_DONE;
- }
- }
-
- if ( has_serifs || !anchor )
- {
- /*
- * now hint the remaining edges (serifs and single) in order
- * to complete our processing
- */
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- FT_Pos delta;
-
-
- if ( edge->flags & AF_EDGE_DONE )
- continue;
-
- delta = 1000;
-
- if ( edge->serif )
- {
- delta = edge->serif->opos - edge->opos;
- if ( delta < 0 )
- delta = -delta;
- }
-
- if ( delta < 64 + 16 )
- {
- af_latin_align_serif_edge( hints, edge->serif, edge );
- FT_TRACE5(( " SERIF: edge %d (opos=%.2f) serif to %d (opos=%.2f)"
- " aligned to %.2f\n",
- edge - edges, edge->opos / 64.0,
- edge->serif - edges, edge->serif->opos / 64.0,
- edge->pos / 64.0 ));
- }
- else if ( !anchor )
- {
- edge->pos = FT_PIX_ROUND( edge->opos );
- anchor = edge;
- FT_TRACE5(( " SERIF_ANCHOR: edge %d (opos=%.2f)"
- " snapped to %.2f\n",
- edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
- }
- else
- {
- AF_Edge before, after;
-
-
- for ( before = edge - 1; before >= edges; before-- )
- if ( before->flags & AF_EDGE_DONE )
- break;
-
- for ( after = edge + 1; after < edge_limit; after++ )
- if ( after->flags & AF_EDGE_DONE )
- break;
-
- if ( before >= edges && before < edge &&
- after < edge_limit && after > edge )
- {
- if ( after->opos == before->opos )
- edge->pos = before->pos;
- else
- edge->pos = before->pos +
- FT_MulDiv( edge->opos - before->opos,
- after->pos - before->pos,
- after->opos - before->opos );
-
- FT_TRACE5(( " SERIF_LINK1: edge %d (opos=%.2f) snapped to %.2f"
- " from %d (opos=%.2f)\n",
- edge - edges, edge->opos / 64.0,
- edge->pos / 64.0,
- before - edges, before->opos / 64.0 ));
- }
- else
- {
- edge->pos = anchor->pos +
- ( ( edge->opos - anchor->opos + 16 ) & ~31 );
- FT_TRACE5(( " SERIF_LINK2: edge %d (opos=%.2f)"
- " snapped to %.2f\n",
- edge - edges, edge->opos / 64.0, edge->pos / 64.0 ));
- }
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- num_actions++;
-#endif
- edge->flags |= AF_EDGE_DONE;
-
- if ( edge > edges &&
- ( top_to_bottom_hinting ? ( edge->pos > edge[-1].pos )
- : ( edge->pos < edge[-1].pos ) ) )
- {
- /* don't move if stem would (almost) disappear otherwise; */
- /* the ad-hoc value 16 corresponds to 1/4px */
- if ( edge->link && FT_ABS( edge->link->pos - edge[-1].pos ) > 16 )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
- edge - edges,
- edge->pos / 64.0,
- edge[-1].pos / 64.0 ));
-
- num_actions++;
-#endif
- edge->pos = edge[-1].pos;
- }
- }
-
- if ( edge + 1 < edge_limit &&
- edge[1].flags & AF_EDGE_DONE &&
- ( top_to_bottom_hinting ? ( edge->pos < edge[1].pos )
- : ( edge->pos > edge[1].pos ) ) )
- {
- /* don't move if stem would (almost) disappear otherwise; */
- /* the ad-hoc value 16 corresponds to 1/4px */
- if ( edge->link && FT_ABS( edge->link->pos - edge[-1].pos ) > 16 )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
- edge - edges,
- edge->pos / 64.0,
- edge[1].pos / 64.0 ));
-
- num_actions++;
-#endif
-
- edge->pos = edge[1].pos;
- }
- }
- }
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !num_actions )
- FT_TRACE5(( " (none)\n" ));
- FT_TRACE5(( "\n" ));
-#endif
- }
-
-
- /* Apply the complete hinting algorithm to a latin glyph. */
-
- static FT_Error
- af_latin_hints_apply( FT_UInt glyph_index,
- AF_GlyphHints hints,
- FT_Outline* outline,
- AF_LatinMetrics metrics )
- {
- FT_Error error;
- int dim;
-
- AF_LatinAxis axis;
-
-
- error = af_glyph_hints_reload( hints, outline );
- if ( error )
- goto Exit;
-
- /* analyze glyph outline */
- if ( AF_HINTS_DO_HORIZONTAL( hints ) )
- {
- axis = &metrics->axis[AF_DIMENSION_HORZ];
- error = af_latin_hints_detect_features( hints,
- axis->width_count,
- axis->widths,
- AF_DIMENSION_HORZ );
- if ( error )
- goto Exit;
- }
-
- if ( AF_HINTS_DO_VERTICAL( hints ) )
- {
- axis = &metrics->axis[AF_DIMENSION_VERT];
- error = af_latin_hints_detect_features( hints,
- axis->width_count,
- axis->widths,
- AF_DIMENSION_VERT );
- if ( error )
- goto Exit;
-
- /* apply blue zones to base characters only */
- if ( !( metrics->root.globals->glyph_styles[glyph_index] & AF_NONBASE ) )
- af_latin_hints_compute_blue_edges( hints, metrics );
- }
-
- /* grid-fit the outline */
- for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
- {
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- if ( dim == AF_DIMENSION_HORZ &&
- metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL &&
- AF_HINTS_DO_WARP( hints ) )
- {
- AF_WarperRec warper;
- FT_Fixed scale;
- FT_Pos delta;
-
-
- af_warper_compute( &warper, hints, (AF_Dimension)dim,
- &scale, &delta );
- af_glyph_hints_scale_dim( hints, (AF_Dimension)dim,
- scale, delta );
- continue;
- }
-#endif /* AF_CONFIG_OPTION_USE_WARPER */
-
- if ( ( dim == AF_DIMENSION_HORZ && AF_HINTS_DO_HORIZONTAL( hints ) ) ||
- ( dim == AF_DIMENSION_VERT && AF_HINTS_DO_VERTICAL( hints ) ) )
- {
- af_latin_hint_edges( hints, (AF_Dimension)dim );
- af_glyph_hints_align_edge_points( hints, (AF_Dimension)dim );
- af_glyph_hints_align_strong_points( hints, (AF_Dimension)dim );
- af_glyph_hints_align_weak_points( hints, (AF_Dimension)dim );
- }
- }
-
- af_glyph_hints_save( hints, outline );
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N S C R I P T C L A S S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- AF_DEFINE_WRITING_SYSTEM_CLASS(
- af_latin_writing_system_class,
-
- AF_WRITING_SYSTEM_LATIN,
-
- sizeof ( AF_LatinMetricsRec ),
-
- (AF_WritingSystem_InitMetricsFunc) af_latin_metrics_init, /* style_metrics_init */
- (AF_WritingSystem_ScaleMetricsFunc)af_latin_metrics_scale, /* style_metrics_scale */
- (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done */
- (AF_WritingSystem_GetStdWidthsFunc)af_latin_get_standard_widths, /* style_metrics_getstdw */
-
- (AF_WritingSystem_InitHintsFunc) af_latin_hints_init, /* style_hints_init */
- (AF_WritingSystem_ApplyHintsFunc) af_latin_hints_apply /* style_hints_apply */
- )
-
-
-/* END */
diff --git a/src/autofit/aflatin.h b/src/autofit/aflatin.h
deleted file mode 100644
index d80e125dd..000000000
--- a/src/autofit/aflatin.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/***************************************************************************/
-/* */
-/* aflatin.h */
-/* */
-/* Auto-fitter hinting routines for latin writing system */
-/* (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFLATIN_H_
-#define AFLATIN_H_
-
-#include "afhints.h"
-
-
-FT_BEGIN_HEADER
-
- /* the `latin' writing system */
-
- AF_DECLARE_WRITING_SYSTEM_CLASS( af_latin_writing_system_class )
-
-
- /* constants are given with units_per_em == 2048 in mind */
-#define AF_LATIN_CONSTANT( metrics, c ) \
- ( ( (c) * (FT_Long)( (AF_LatinMetrics)(metrics) )->units_per_em ) / 2048 )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N G L O B A L M E T R I C S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*
- * The following declarations could be embedded in the file `aflatin.c';
- * they have been made semi-public to allow alternate writing system
- * hinters to re-use some of them.
- */
-
-
-#define AF_LATIN_IS_TOP_BLUE( b ) \
- ( (b)->properties & AF_BLUE_PROPERTY_LATIN_TOP )
-#define AF_LATIN_IS_SUB_TOP_BLUE( b ) \
- ( (b)->properties & AF_BLUE_PROPERTY_LATIN_SUB_TOP )
-#define AF_LATIN_IS_NEUTRAL_BLUE( b ) \
- ( (b)->properties & AF_BLUE_PROPERTY_LATIN_NEUTRAL )
-#define AF_LATIN_IS_X_HEIGHT_BLUE( b ) \
- ( (b)->properties & AF_BLUE_PROPERTY_LATIN_X_HEIGHT )
-#define AF_LATIN_IS_LONG_BLUE( b ) \
- ( (b)->properties & AF_BLUE_PROPERTY_LATIN_LONG )
-
-#define AF_LATIN_MAX_WIDTHS 16
-
-
-#define AF_LATIN_BLUE_ACTIVE ( 1U << 0 ) /* zone height is <= 3/4px */
-#define AF_LATIN_BLUE_TOP ( 1U << 1 ) /* we have a top blue zone */
-#define AF_LATIN_BLUE_SUB_TOP ( 1U << 2 ) /* we have a subscript top */
- /* blue zone */
-#define AF_LATIN_BLUE_NEUTRAL ( 1U << 3 ) /* we have neutral blue zone */
-#define AF_LATIN_BLUE_ADJUSTMENT ( 1U << 4 ) /* used for scale adjustment */
- /* optimization */
-
-
- typedef struct AF_LatinBlueRec_
- {
- AF_WidthRec ref;
- AF_WidthRec shoot;
- FT_Pos ascender;
- FT_Pos descender;
- FT_UInt flags;
-
- } AF_LatinBlueRec, *AF_LatinBlue;
-
-
- typedef struct AF_LatinAxisRec_
- {
- FT_Fixed scale;
- FT_Pos delta;
-
- FT_UInt width_count; /* number of used widths */
- AF_WidthRec widths[AF_LATIN_MAX_WIDTHS]; /* widths array */
- FT_Pos edge_distance_threshold; /* used for creating edges */
- FT_Pos standard_width; /* the default stem thickness */
- FT_Bool extra_light; /* is standard width very light? */
-
- /* ignored for horizontal metrics */
- FT_UInt blue_count;
- AF_LatinBlueRec blues[AF_BLUE_STRINGSET_MAX];
-
- FT_Fixed org_scale;
- FT_Pos org_delta;
-
- } AF_LatinAxisRec, *AF_LatinAxis;
-
-
- typedef struct AF_LatinMetricsRec_
- {
- AF_StyleMetricsRec root;
- FT_UInt units_per_em;
- AF_LatinAxisRec axis[AF_DIMENSION_MAX];
-
- } AF_LatinMetricsRec, *AF_LatinMetrics;
-
-
- FT_LOCAL( FT_Error )
- af_latin_metrics_init( AF_LatinMetrics metrics,
- FT_Face face );
-
- FT_LOCAL( void )
- af_latin_metrics_scale( AF_LatinMetrics metrics,
- AF_Scaler scaler );
-
- FT_LOCAL( void )
- af_latin_metrics_init_widths( AF_LatinMetrics metrics,
- FT_Face face );
-
- FT_LOCAL( void )
- af_latin_metrics_check_digits( AF_LatinMetrics metrics,
- FT_Face face );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N G L Y P H A N A L Y S I S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define AF_LATIN_HINTS_HORZ_SNAP ( 1U << 0 ) /* stem width snapping */
-#define AF_LATIN_HINTS_VERT_SNAP ( 1U << 1 ) /* stem height snapping */
-#define AF_LATIN_HINTS_STEM_ADJUST ( 1U << 2 ) /* stem width/height */
- /* adjustment */
-#define AF_LATIN_HINTS_MONO ( 1U << 3 ) /* monochrome rendering */
-
-
-#define AF_LATIN_HINTS_DO_HORZ_SNAP( h ) \
- AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_HORZ_SNAP )
-
-#define AF_LATIN_HINTS_DO_VERT_SNAP( h ) \
- AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_VERT_SNAP )
-
-#define AF_LATIN_HINTS_DO_STEM_ADJUST( h ) \
- AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_STEM_ADJUST )
-
-#define AF_LATIN_HINTS_DO_MONO( h ) \
- AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_MONO )
-
-
- /*
- * The next functions shouldn't normally be exported. However, other
- * writing systems might like to use these functions as-is.
- */
- FT_LOCAL( FT_Error )
- af_latin_hints_compute_segments( AF_GlyphHints hints,
- AF_Dimension dim );
-
- FT_LOCAL( void )
- af_latin_hints_link_segments( AF_GlyphHints hints,
- FT_UInt width_count,
- AF_WidthRec* widths,
- AF_Dimension dim );
-
- FT_LOCAL( FT_Error )
- af_latin_hints_compute_edges( AF_GlyphHints hints,
- AF_Dimension dim );
-
- FT_LOCAL( FT_Error )
- af_latin_hints_detect_features( AF_GlyphHints hints,
- FT_UInt width_count,
- AF_WidthRec* widths,
- AF_Dimension dim );
-
-/* */
-
-FT_END_HEADER
-
-#endif /* AFLATIN_H_ */
-
-
-/* END */
diff --git a/src/autofit/aflatin2.c b/src/autofit/aflatin2.c
deleted file mode 100644
index fb4244511..000000000
--- a/src/autofit/aflatin2.c
+++ /dev/null
@@ -1,2427 +0,0 @@
-/* ATTENTION: This file doesn't compile. It is only here as a reference */
-/* of an alternative latin hinting algorithm that was always */
-/* marked as experimental. */
-
-
-/***************************************************************************/
-/* */
-/* aflatin2.c */
-/* */
-/* Auto-fitter hinting routines for latin writing system (body). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include FT_ADVANCES_H
-
-
-#ifdef FT_OPTION_AUTOFIT2
-
-#include "afglobal.h"
-#include "aflatin.h"
-#include "aflatin2.h"
-#include "aferrors.h"
-
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-#include "afwarp.h"
-#endif
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_aflatin2
-
-
- FT_LOCAL_DEF( FT_Error )
- af_latin2_hints_compute_segments( AF_GlyphHints hints,
- AF_Dimension dim );
-
- FT_LOCAL_DEF( void )
- af_latin2_hints_link_segments( AF_GlyphHints hints,
- AF_Dimension dim );
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N G L O B A L M E T R I C S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- af_latin2_metrics_init_widths( AF_LatinMetrics metrics,
- FT_Face face )
- {
- /* scan the array of segments in each direction */
- AF_GlyphHintsRec hints[1];
-
-
- af_glyph_hints_init( hints, face->memory );
-
- metrics->axis[AF_DIMENSION_HORZ].width_count = 0;
- metrics->axis[AF_DIMENSION_VERT].width_count = 0;
-
- {
- FT_Error error;
- FT_UInt glyph_index;
- int dim;
- AF_LatinMetricsRec dummy[1];
- AF_Scaler scaler = &dummy->root.scaler;
-
-
- glyph_index = FT_Get_Char_Index(
- face,
- metrics->root.style_class->standard_char );
- if ( glyph_index == 0 )
- goto Exit;
-
- error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
- if ( error || face->glyph->outline.n_points <= 0 )
- goto Exit;
-
- FT_ZERO( dummy );
-
- dummy->units_per_em = metrics->units_per_em;
- scaler->x_scale = scaler->y_scale = 0x10000L;
- scaler->x_delta = scaler->y_delta = 0;
- scaler->face = face;
- scaler->render_mode = FT_RENDER_MODE_NORMAL;
- scaler->flags = 0;
-
- af_glyph_hints_rescale( hints, (AF_StyleMetrics)dummy );
-
- error = af_glyph_hints_reload( hints, &face->glyph->outline );
- if ( error )
- goto Exit;
-
- for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
- {
- AF_LatinAxis axis = &metrics->axis[dim];
- AF_AxisHints axhints = &hints->axis[dim];
- AF_Segment seg, limit, link;
- FT_UInt num_widths = 0;
-
-
- error = af_latin2_hints_compute_segments( hints,
- (AF_Dimension)dim );
- if ( error )
- goto Exit;
-
- af_latin2_hints_link_segments( hints,
- (AF_Dimension)dim );
-
- seg = axhints->segments;
- limit = seg + axhints->num_segments;
-
- for ( ; seg < limit; seg++ )
- {
- link = seg->link;
-
- /* we only consider stem segments there! */
- if ( link && link->link == seg && link > seg )
- {
- FT_Pos dist;
-
-
- dist = seg->pos - link->pos;
- if ( dist < 0 )
- dist = -dist;
-
- if ( num_widths < AF_LATIN_MAX_WIDTHS )
- axis->widths[num_widths++].org = dist;
- }
- }
-
- af_sort_widths( num_widths, axis->widths );
- axis->width_count = num_widths;
- }
-
- Exit:
- for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
- {
- AF_LatinAxis axis = &metrics->axis[dim];
- FT_Pos stdw;
-
-
- stdw = ( axis->width_count > 0 )
- ? axis->widths[0].org
- : AF_LATIN_CONSTANT( metrics, 50 );
-
- /* let's try 20% of the smallest width */
- axis->edge_distance_threshold = stdw / 5;
- axis->standard_width = stdw;
- axis->extra_light = 0;
- }
- }
-
- af_glyph_hints_done( hints );
- }
-
-
-
-#define AF_LATIN_MAX_TEST_CHARACTERS 12
-
-
- static const char af_latin2_blue_chars[AF_LATIN_MAX_BLUES]
- [AF_LATIN_MAX_TEST_CHARACTERS+1] =
- {
- "THEZOCQS",
- "HEZLOCUS",
- "fijkdbh",
- "xzroesc",
- "xzroesc",
- "pqgjy"
- };
-
-
- static void
- af_latin2_metrics_init_blues( AF_LatinMetrics metrics,
- FT_Face face )
- {
- FT_Pos flats [AF_LATIN_MAX_TEST_CHARACTERS];
- FT_Pos rounds[AF_LATIN_MAX_TEST_CHARACTERS];
- FT_Int num_flats;
- FT_Int num_rounds;
- FT_Int bb;
- AF_LatinBlue blue;
- FT_Error error;
- AF_LatinAxis axis = &metrics->axis[AF_DIMENSION_VERT];
- FT_GlyphSlot glyph = face->glyph;
-
-
- /* we compute the blues simply by loading each character from the */
- /* 'af_latin2_blue_chars[blues]' string, then compute its top-most or */
- /* bottom-most points (depending on `AF_IS_TOP_BLUE') */
-
- FT_TRACE5(( "blue zones computation\n"
- "======================\n\n" ));
-
- for ( bb = 0; bb < AF_LATIN_BLUE_MAX; bb++ )
- {
- const char* p = af_latin2_blue_chars[bb];
- const char* limit = p + AF_LATIN_MAX_TEST_CHARACTERS;
- FT_Pos* blue_ref;
- FT_Pos* blue_shoot;
-
-
- FT_TRACE5(( "blue zone %d:\n", bb ));
-
- num_flats = 0;
- num_rounds = 0;
-
- for ( ; p < limit && *p; p++ )
- {
- FT_UInt glyph_index;
- FT_Int best_point, best_y, best_first, best_last;
- FT_Vector* points;
- FT_Bool round;
-
-
- /* load the character in the face -- skip unknown or empty ones */
- glyph_index = FT_Get_Char_Index( face, (FT_UInt)*p );
- if ( glyph_index == 0 )
- continue;
-
- error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
- if ( error || glyph->outline.n_points <= 0 )
- continue;
-
- /* now compute min or max point indices and coordinates */
- points = glyph->outline.points;
- best_point = -1;
- best_y = 0; /* make compiler happy */
- best_first = 0; /* ditto */
- best_last = 0; /* ditto */
-
- {
- FT_Int nn;
- FT_Int first = 0;
- FT_Int last = -1;
-
-
- for ( nn = 0; nn < glyph->outline.n_contours; first = last+1, nn++ )
- {
- FT_Int old_best_point = best_point;
- FT_Int pp;
-
-
- last = glyph->outline.contours[nn];
-
- /* Avoid single-point contours since they are never rasterized. */
- /* In some fonts, they correspond to mark attachment points */
- /* which are way outside of the glyph's real outline. */
- if ( last == first )
- continue;
-
- if ( AF_LATIN_IS_TOP_BLUE( bb ) )
- {
- for ( pp = first; pp <= last; pp++ )
- if ( best_point < 0 || points[pp].y > best_y )
- {
- best_point = pp;
- best_y = points[pp].y;
- }
- }
- else
- {
- for ( pp = first; pp <= last; pp++ )
- if ( best_point < 0 || points[pp].y < best_y )
- {
- best_point = pp;
- best_y = points[pp].y;
- }
- }
-
- if ( best_point != old_best_point )
- {
- best_first = first;
- best_last = last;
- }
- }
- FT_TRACE5(( " %c %d", *p, best_y ));
- }
-
- /* now check whether the point belongs to a straight or round */
- /* segment; we first need to find in which contour the extremum */
- /* lies, then inspect its previous and next points */
- {
- FT_Pos best_x = points[best_point].x;
- FT_Int start, end, prev, next;
- FT_Pos dist;
-
-
- /* now look for the previous and next points that are not on the */
- /* same Y coordinate. Threshold the `closeness'... */
- start = end = best_point;
-
- do
- {
- prev = start - 1;
- if ( prev < best_first )
- prev = best_last;
-
- dist = FT_ABS( points[prev].y - best_y );
- /* accept a small distance or a small angle (both values are */
- /* heuristic; value 20 corresponds to approx. 2.9 degrees) */
- if ( dist > 5 )
- if ( FT_ABS( points[prev].x - best_x ) <= 20 * dist )
- break;
-
- start = prev;
-
- } while ( start != best_point );
-
- do
- {
- next = end + 1;
- if ( next > best_last )
- next = best_first;
-
- dist = FT_ABS( points[next].y - best_y );
- if ( dist > 5 )
- if ( FT_ABS( points[next].x - best_x ) <= 20 * dist )
- break;
-
- end = next;
-
- } while ( end != best_point );
-
- /* now, set the `round' flag depending on the segment's kind */
- round = FT_BOOL(
- FT_CURVE_TAG( glyph->outline.tags[start] ) != FT_CURVE_TAG_ON ||
- FT_CURVE_TAG( glyph->outline.tags[ end ] ) != FT_CURVE_TAG_ON );
-
- FT_TRACE5(( " (%s)\n", round ? "round" : "flat" ));
- }
-
- if ( round )
- rounds[num_rounds++] = best_y;
- else
- flats[num_flats++] = best_y;
- }
-
- if ( num_flats == 0 && num_rounds == 0 )
- {
- /*
- * we couldn't find a single glyph to compute this blue zone,
- * we will simply ignore it then
- */
- FT_TRACE5(( " empty\n" ));
- continue;
- }
-
- /* we have computed the contents of the `rounds' and `flats' tables, */
- /* now determine the reference and overshoot position of the blue -- */
- /* we simply take the median value after a simple sort */
- af_sort_pos( num_rounds, rounds );
- af_sort_pos( num_flats, flats );
-
- blue = & axis->blues[axis->blue_count];
- blue_ref = & blue->ref.org;
- blue_shoot = & blue->shoot.org;
-
- axis->blue_count++;
-
- if ( num_flats == 0 )
- {
- *blue_ref =
- *blue_shoot = rounds[num_rounds / 2];
- }
- else if ( num_rounds == 0 )
- {
- *blue_ref =
- *blue_shoot = flats[num_flats / 2];
- }
- else
- {
- *blue_ref = flats[num_flats / 2];
- *blue_shoot = rounds[num_rounds / 2];
- }
-
- /* there are sometimes problems: if the overshoot position of top */
- /* zones is under its reference position, or the opposite for bottom */
- /* zones. We must thus check everything there and correct the errors */
- if ( *blue_shoot != *blue_ref )
- {
- FT_Pos ref = *blue_ref;
- FT_Pos shoot = *blue_shoot;
- FT_Bool over_ref = FT_BOOL( shoot > ref );
-
-
- if ( AF_LATIN_IS_TOP_BLUE( bb ) ^ over_ref )
- {
- *blue_ref =
- *blue_shoot = ( shoot + ref ) / 2;
-
- FT_TRACE5(( " [overshoot smaller than reference,"
- " taking mean value]\n" ));
- }
- }
-
- blue->flags = 0;
- if ( AF_LATIN_IS_TOP_BLUE( bb ) )
- blue->flags |= AF_LATIN_BLUE_TOP;
-
- /*
- * The following flag is used later to adjust the y and x scales
- * in order to optimize the pixel grid alignment of the top of small
- * letters.
- */
- if ( AF_LATIN_IS_X_HEIGHT_BLUE( bb ) )
- blue->flags |= AF_LATIN_BLUE_ADJUSTMENT;
-
- FT_TRACE5(( " -> reference = %ld\n"
- " overshoot = %ld\n",
- *blue_ref, *blue_shoot ));
- }
-
- return;
- }
-
-
- FT_LOCAL_DEF( void )
- af_latin2_metrics_check_digits( AF_LatinMetrics metrics,
- FT_Face face )
- {
- FT_UInt i;
- FT_Bool started = 0, same_width = 1;
- FT_Fixed advance, old_advance = 0;
-
-
- /* check whether all ASCII digits have the same advance width; */
- /* digit `0' is 0x30 in all supported charmaps */
- for ( i = 0x30; i <= 0x39; i++ )
- {
- FT_UInt glyph_index;
-
-
- glyph_index = FT_Get_Char_Index( face, i );
- if ( glyph_index == 0 )
- continue;
-
- if ( FT_Get_Advance( face, glyph_index,
- FT_LOAD_NO_SCALE |
- FT_LOAD_NO_HINTING |
- FT_LOAD_IGNORE_TRANSFORM,
- &advance ) )
- continue;
-
- if ( started )
- {
- if ( advance != old_advance )
- {
- same_width = 0;
- break;
- }
- }
- else
- {
- old_advance = advance;
- started = 1;
- }
- }
-
- metrics->root.digits_have_same_width = same_width;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_latin2_metrics_init( AF_LatinMetrics metrics,
- FT_Face face )
- {
- FT_Error error = FT_Err_Ok;
- FT_CharMap oldmap = face->charmap;
- FT_UInt ee;
-
- static const FT_Encoding latin_encodings[] =
- {
- FT_ENCODING_UNICODE,
- FT_ENCODING_APPLE_ROMAN,
- FT_ENCODING_ADOBE_STANDARD,
- FT_ENCODING_ADOBE_LATIN_1,
- FT_ENCODING_NONE /* end of list */
- };
-
-
- metrics->units_per_em = face->units_per_EM;
-
- /* do we have a latin charmap in there? */
- for ( ee = 0; latin_encodings[ee] != FT_ENCODING_NONE; ee++ )
- {
- error = FT_Select_Charmap( face, latin_encodings[ee] );
- if ( !error )
- break;
- }
-
- if ( !error )
- {
- af_latin2_metrics_init_widths( metrics, face );
- af_latin2_metrics_init_blues( metrics, face );
- af_latin2_metrics_check_digits( metrics, face );
- }
-
- FT_Set_Charmap( face, oldmap );
- return FT_Err_Ok;
- }
-
-
- static void
- af_latin2_metrics_scale_dim( AF_LatinMetrics metrics,
- AF_Scaler scaler,
- AF_Dimension dim )
- {
- FT_Fixed scale;
- FT_Pos delta;
- AF_LatinAxis axis;
- FT_UInt nn;
-
-
- if ( dim == AF_DIMENSION_HORZ )
- {
- scale = scaler->x_scale;
- delta = scaler->x_delta;
- }
- else
- {
- scale = scaler->y_scale;
- delta = scaler->y_delta;
- }
-
- axis = &metrics->axis[dim];
-
- if ( axis->org_scale == scale && axis->org_delta == delta )
- return;
-
- axis->org_scale = scale;
- axis->org_delta = delta;
-
- /*
- * correct Y scale to optimize the alignment of the top of small
- * letters to the pixel grid
- */
- if ( dim == AF_DIMENSION_VERT )
- {
- AF_LatinAxis vaxis = &metrics->axis[AF_DIMENSION_VERT];
- AF_LatinBlue blue = NULL;
-
-
- for ( nn = 0; nn < vaxis->blue_count; nn++ )
- {
- if ( vaxis->blues[nn].flags & AF_LATIN_BLUE_ADJUSTMENT )
- {
- blue = &vaxis->blues[nn];
- break;
- }
- }
-
- if ( blue )
- {
- FT_Pos scaled;
- FT_Pos threshold;
- FT_Pos fitted;
- FT_UInt limit;
- FT_UInt ppem;
-
-
- scaled = FT_MulFix( blue->shoot.org, scaler->y_scale );
- ppem = metrics->root.scaler.face->size->metrics.x_ppem;
- limit = metrics->root.globals->increase_x_height;
- threshold = 40;
-
- /* if the `increase-x-height' property is active, */
- /* we round up much more often */
- if ( limit &&
- ppem <= limit &&
- ppem >= AF_PROP_INCREASE_X_HEIGHT_MIN )
- threshold = 52;
-
- fitted = ( scaled + threshold ) & ~63;
-
-#if 1
- if ( scaled != fitted )
- {
- scale = FT_MulDiv( scale, fitted, scaled );
- FT_TRACE5(( "== scaled x-top = %.2g"
- " fitted = %.2g, scaling = %.4g\n",
- scaled / 64.0, fitted / 64.0,
- ( fitted * 1.0 ) / scaled ));
- }
-#endif
- }
- }
-
- axis->scale = scale;
- axis->delta = delta;
-
- if ( dim == AF_DIMENSION_HORZ )
- {
- metrics->root.scaler.x_scale = scale;
- metrics->root.scaler.x_delta = delta;
- }
- else
- {
- metrics->root.scaler.y_scale = scale;
- metrics->root.scaler.y_delta = delta;
- }
-
- /* scale the standard widths */
- for ( nn = 0; nn < axis->width_count; nn++ )
- {
- AF_Width width = axis->widths + nn;
-
-
- width->cur = FT_MulFix( width->org, scale );
- width->fit = width->cur;
- }
-
- /* an extra-light axis corresponds to a standard width that is */
- /* smaller than 5/8 pixels */
- axis->extra_light =
- (FT_Bool)( FT_MulFix( axis->standard_width, scale ) < 32 + 8 );
-
- if ( dim == AF_DIMENSION_VERT )
- {
- /* scale the blue zones */
- for ( nn = 0; nn < axis->blue_count; nn++ )
- {
- AF_LatinBlue blue = &axis->blues[nn];
- FT_Pos dist;
-
-
- blue->ref.cur = FT_MulFix( blue->ref.org, scale ) + delta;
- blue->ref.fit = blue->ref.cur;
- blue->shoot.cur = FT_MulFix( blue->shoot.org, scale ) + delta;
- blue->shoot.fit = blue->shoot.cur;
- blue->flags &= ~AF_LATIN_BLUE_ACTIVE;
-
- /* a blue zone is only active if it is less than 3/4 pixels tall */
- dist = FT_MulFix( blue->ref.org - blue->shoot.org, scale );
- if ( dist <= 48 && dist >= -48 )
- {
- FT_Pos delta1, delta2;
-
- delta1 = blue->shoot.org - blue->ref.org;
- delta2 = delta1;
- if ( delta1 < 0 )
- delta2 = -delta2;
-
- delta2 = FT_MulFix( delta2, scale );
-
- if ( delta2 < 32 )
- delta2 = 0;
- else if ( delta2 < 64 )
- delta2 = 32 + ( ( ( delta2 - 32 ) + 16 ) & ~31 );
- else
- delta2 = FT_PIX_ROUND( delta2 );
-
- if ( delta1 < 0 )
- delta2 = -delta2;
-
- blue->ref.fit = FT_PIX_ROUND( blue->ref.cur );
- blue->shoot.fit = blue->ref.fit + delta2;
-
- FT_TRACE5(( ">> activating blue zone %d:"
- " ref.cur=%.2g ref.fit=%.2g"
- " shoot.cur=%.2g shoot.fit=%.2g\n",
- nn, blue->ref.cur / 64.0, blue->ref.fit / 64.0,
- blue->shoot.cur / 64.0, blue->shoot.fit / 64.0 ));
-
- blue->flags |= AF_LATIN_BLUE_ACTIVE;
- }
- }
- }
- }
-
-
- FT_LOCAL_DEF( void )
- af_latin2_metrics_scale( AF_LatinMetrics metrics,
- AF_Scaler scaler )
- {
- metrics->root.scaler.render_mode = scaler->render_mode;
- metrics->root.scaler.face = scaler->face;
- metrics->root.scaler.flags = scaler->flags;
-
- af_latin2_metrics_scale_dim( metrics, scaler, AF_DIMENSION_HORZ );
- af_latin2_metrics_scale_dim( metrics, scaler, AF_DIMENSION_VERT );
- }
-
-
- /* Extract standard_width from writing system/script specific */
- /* metrics class. */
-
- FT_LOCAL_DEF( void )
- af_latin2_get_standard_widths( AF_LatinMetrics metrics,
- FT_Pos* stdHW,
- FT_Pos* stdVW )
- {
- if ( stdHW )
- *stdHW = metrics->axis[AF_DIMENSION_VERT].standard_width;
-
- if ( stdVW )
- *stdVW = metrics->axis[AF_DIMENSION_HORZ].standard_width;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N G L Y P H A N A L Y S I S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define SORT_SEGMENTS
-
- FT_LOCAL_DEF( FT_Error )
- af_latin2_hints_compute_segments( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- FT_Memory memory = hints->memory;
- FT_Error error = FT_Err_Ok;
- AF_Segment segment = NULL;
- AF_SegmentRec seg0;
- AF_Point* contour = hints->contours;
- AF_Point* contour_limit = contour + hints->num_contours;
- AF_Direction major_dir, segment_dir;
-
-
- FT_ZERO( &seg0 );
- seg0.score = 32000;
- seg0.flags = AF_EDGE_NORMAL;
-
- major_dir = (AF_Direction)FT_ABS( axis->major_dir );
- segment_dir = major_dir;
-
- axis->num_segments = 0;
-
- /* set up (u,v) in each point */
- if ( dim == AF_DIMENSION_HORZ )
- {
- AF_Point point = hints->points;
- AF_Point limit = point + hints->num_points;
-
-
- for ( ; point < limit; point++ )
- {
- point->u = point->fx;
- point->v = point->fy;
- }
- }
- else
- {
- AF_Point point = hints->points;
- AF_Point limit = point + hints->num_points;
-
-
- for ( ; point < limit; point++ )
- {
- point->u = point->fy;
- point->v = point->fx;
- }
- }
-
- /* do each contour separately */
- for ( ; contour < contour_limit; contour++ )
- {
- AF_Point point = contour[0];
- AF_Point start = point;
- AF_Point last = point->prev;
-
-
- if ( point == last ) /* skip singletons -- just in case */
- continue;
-
- /* already on an edge ?, backtrack to find its start */
- if ( FT_ABS( point->in_dir ) == major_dir )
- {
- point = point->prev;
-
- while ( point->in_dir == start->in_dir )
- point = point->prev;
- }
- else /* otherwise, find first segment start, if any */
- {
- while ( FT_ABS( point->out_dir ) != major_dir )
- {
- point = point->next;
-
- if ( point == start )
- goto NextContour;
- }
- }
-
- start = point;
-
- for (;;)
- {
- AF_Point first;
- FT_Pos min_u, min_v, max_u, max_v;
-
- /* we're at the start of a new segment */
- FT_ASSERT( FT_ABS( point->out_dir ) == major_dir &&
- point->in_dir != point->out_dir );
- first = point;
-
- min_u = max_u = point->u;
- min_v = max_v = point->v;
-
- point = point->next;
-
- while ( point->out_dir == first->out_dir )
- {
- point = point->next;
-
- if ( point->u < min_u )
- min_u = point->u;
-
- if ( point->u > max_u )
- max_u = point->u;
- }
-
- if ( point->v < min_v )
- min_v = point->v;
-
- if ( point->v > max_v )
- max_v = point->v;
-
- /* record new segment */
- error = af_axis_hints_new_segment( axis, memory, &segment );
- if ( error )
- goto Exit;
-
- segment[0] = seg0;
- segment->dir = first->out_dir;
- segment->first = first;
- segment->last = point;
- segment->pos = (FT_Short)( ( min_u + max_u ) >> 1 );
- segment->min_coord = (FT_Short) min_v;
- segment->max_coord = (FT_Short) max_v;
- segment->height = (FT_Short)( max_v - min_v );
-
- /* a segment is round if it doesn't have successive */
- /* on-curve points. */
- {
- AF_Point pt = first;
- AF_Point last = point;
- FT_UInt f0 = pt->flags & AF_FLAG_CONTROL;
- FT_UInt f1;
-
-
- segment->flags &= ~AF_EDGE_ROUND;
-
- for ( ; pt != last; f0 = f1 )
- {
- pt = pt->next;
- f1 = pt->flags & AF_FLAG_CONTROL;
-
- if ( !f0 && !f1 )
- break;
-
- if ( pt == last )
- segment->flags |= AF_EDGE_ROUND;
- }
- }
-
- /* this can happen in the case of a degenerate contour
- * e.g. a 2-point vertical contour
- */
- if ( point == start )
- break;
-
- /* jump to the start of the next segment, if any */
- while ( FT_ABS( point->out_dir ) != major_dir )
- {
- point = point->next;
-
- if ( point == start )
- goto NextContour;
- }
- }
-
- NextContour:
- ;
- } /* contours */
-
- /* now slightly increase the height of segments when this makes */
- /* sense -- this is used to better detect and ignore serifs */
- {
- AF_Segment segments = axis->segments;
- AF_Segment segments_end = segments + axis->num_segments;
-
-
- for ( segment = segments; segment < segments_end; segment++ )
- {
- AF_Point first = segment->first;
- AF_Point last = segment->last;
- AF_Point p;
- FT_Pos first_v = first->v;
- FT_Pos last_v = last->v;
-
-
- if ( first_v < last_v )
- {
- p = first->prev;
- if ( p->v < first_v )
- segment->height = (FT_Short)( segment->height +
- ( ( first_v - p->v ) >> 1 ) );
-
- p = last->next;
- if ( p->v > last_v )
- segment->height = (FT_Short)( segment->height +
- ( ( p->v - last_v ) >> 1 ) );
- }
- else
- {
- p = first->prev;
- if ( p->v > first_v )
- segment->height = (FT_Short)( segment->height +
- ( ( p->v - first_v ) >> 1 ) );
-
- p = last->next;
- if ( p->v < last_v )
- segment->height = (FT_Short)( segment->height +
- ( ( last_v - p->v ) >> 1 ) );
- }
- }
- }
-
-#ifdef AF_SORT_SEGMENTS
- /* place all segments with a negative direction to the start
- * of the array, used to speed up segment linking later...
- */
- {
- AF_Segment segments = axis->segments;
- FT_UInt count = axis->num_segments;
- FT_UInt ii, jj;
-
- for ( ii = 0; ii < count; ii++ )
- {
- if ( segments[ii].dir > 0 )
- {
- for ( jj = ii + 1; jj < count; jj++ )
- {
- if ( segments[jj].dir < 0 )
- {
- AF_SegmentRec tmp;
-
-
- tmp = segments[ii];
- segments[ii] = segments[jj];
- segments[jj] = tmp;
-
- break;
- }
- }
-
- if ( jj == count )
- break;
- }
- }
- axis->mid_segments = ii;
- }
-#endif
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- af_latin2_hints_link_segments( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- AF_Segment segments = axis->segments;
- AF_Segment segment_limit = segments + axis->num_segments;
-#ifdef AF_SORT_SEGMENTS
- AF_Segment segment_mid = segments + axis->mid_segments;
-#endif
- FT_Pos len_threshold, len_score;
- AF_Segment seg1, seg2;
-
-
- len_threshold = AF_LATIN_CONSTANT( hints->metrics, 8 );
- if ( len_threshold == 0 )
- len_threshold = 1;
-
- len_score = AF_LATIN_CONSTANT( hints->metrics, 6000 );
-
-#ifdef AF_SORT_SEGMENTS
- for ( seg1 = segments; seg1 < segment_mid; seg1++ )
- {
- if ( seg1->dir != axis->major_dir )
- continue;
-
- for ( seg2 = segment_mid; seg2 < segment_limit; seg2++ )
-#else
- /* now compare each segment to the others */
- for ( seg1 = segments; seg1 < segment_limit; seg1++ )
- {
- if ( seg1->dir != axis->major_dir )
- continue;
-
- for ( seg2 = segments; seg2 < segment_limit; seg2++ )
- if ( seg1->dir + seg2->dir == 0 && seg2->pos > seg1->pos )
-#endif
- {
- FT_Pos pos1 = seg1->pos;
- FT_Pos pos2 = seg2->pos;
- FT_Pos dist = pos2 - pos1;
-
-
- if ( dist < 0 )
- continue;
-
- {
- FT_Pos min = seg1->min_coord;
- FT_Pos max = seg1->max_coord;
- FT_Pos len, score;
-
-
- if ( min < seg2->min_coord )
- min = seg2->min_coord;
-
- if ( max > seg2->max_coord )
- max = seg2->max_coord;
-
- len = max - min;
- if ( len >= len_threshold )
- {
- score = dist + len_score / len;
- if ( score < seg1->score )
- {
- seg1->score = score;
- seg1->link = seg2;
- }
-
- if ( score < seg2->score )
- {
- seg2->score = score;
- seg2->link = seg1;
- }
- }
- }
- }
- }
-#if 0
- }
-#endif
-
- /* now, compute the `serif' segments */
- for ( seg1 = segments; seg1 < segment_limit; seg1++ )
- {
- seg2 = seg1->link;
-
- if ( seg2 )
- {
- if ( seg2->link != seg1 )
- {
- seg1->link = NULL;
- seg1->serif = seg2->link;
- }
- }
- }
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_latin2_hints_compute_edges( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- FT_Error error = FT_Err_Ok;
- FT_Memory memory = hints->memory;
- AF_LatinAxis laxis = &((AF_LatinMetrics)hints->metrics)->axis[dim];
-
- AF_Segment segments = axis->segments;
- AF_Segment segment_limit = segments + axis->num_segments;
- AF_Segment seg;
-
- AF_Direction up_dir;
- FT_Fixed scale;
- FT_Pos edge_distance_threshold;
- FT_Pos segment_length_threshold;
-
-
- axis->num_edges = 0;
-
- scale = ( dim == AF_DIMENSION_HORZ ) ? hints->x_scale
- : hints->y_scale;
-
- up_dir = ( dim == AF_DIMENSION_HORZ ) ? AF_DIR_UP
- : AF_DIR_RIGHT;
-
- /*
- * We want to ignore very small (mostly serif) segments, we do that
- * by ignoring those that whose length is less than a given fraction
- * of the standard width. If there is no standard width, we ignore
- * those that are less than a given size in pixels
- *
- * also, unlink serif segments that are linked to segments farther
- * than 50% of the standard width
- */
- if ( dim == AF_DIMENSION_HORZ )
- {
- if ( laxis->width_count > 0 )
- segment_length_threshold = ( laxis->standard_width * 10 ) >> 4;
- else
- segment_length_threshold = FT_DivFix( 64, hints->y_scale );
- }
- else
- segment_length_threshold = 0;
-
- /*********************************************************************/
- /* */
- /* We will begin by generating a sorted table of edges for the */
- /* current direction. To do so, we simply scan each segment and try */
- /* to find an edge in our table that corresponds to its position. */
- /* */
- /* If no edge is found, we create and insert a new edge in the */
- /* sorted table. Otherwise, we simply add the segment to the edge's */
- /* list which will be processed in the second step to compute the */
- /* edge's properties. */
- /* */
- /* Note that the edges table is sorted along the segment/edge */
- /* position. */
- /* */
- /*********************************************************************/
-
- edge_distance_threshold = FT_MulFix( laxis->edge_distance_threshold,
- scale );
- if ( edge_distance_threshold > 64 / 4 )
- edge_distance_threshold = 64 / 4;
-
- edge_distance_threshold = FT_DivFix( edge_distance_threshold,
- scale );
-
- for ( seg = segments; seg < segment_limit; seg++ )
- {
- AF_Edge found = NULL;
- FT_Int ee;
-
-
- if ( seg->height < segment_length_threshold )
- continue;
-
- /* A special case for serif edges: If they are smaller than */
- /* 1.5 pixels we ignore them. */
- if ( seg->serif )
- {
- FT_Pos dist = seg->serif->pos - seg->pos;
-
-
- if ( dist < 0 )
- dist = -dist;
-
- if ( dist >= laxis->standard_width >> 1 )
- {
- /* unlink this serif, it is too distant from its reference stem */
- seg->serif = NULL;
- }
- else if ( 2*seg->height < 3 * segment_length_threshold )
- continue;
- }
-
- /* look for an edge corresponding to the segment */
- for ( ee = 0; ee < axis->num_edges; ee++ )
- {
- AF_Edge edge = axis->edges + ee;
- FT_Pos dist;
-
-
- dist = seg->pos - edge->fpos;
- if ( dist < 0 )
- dist = -dist;
-
- if ( dist < edge_distance_threshold && edge->dir == seg->dir )
- {
- found = edge;
- break;
- }
- }
-
- if ( !found )
- {
- AF_Edge edge;
-
-
- /* insert a new edge in the list and */
- /* sort according to the position */
- error = af_axis_hints_new_edge( axis, seg->pos, seg->dir, 0,
- memory, &edge );
- if ( error )
- goto Exit;
-
- /* add the segment to the new edge's list */
- FT_ZERO( edge );
-
- edge->first = seg;
- edge->last = seg;
- edge->dir = seg->dir;
- edge->fpos = seg->pos;
- edge->opos = FT_MulFix( seg->pos, scale );
- edge->pos = edge->opos;
- seg->edge_next = seg;
- }
- else
- {
- /* if an edge was found, simply add the segment to the edge's */
- /* list */
- seg->edge_next = found->first;
- found->last->edge_next = seg;
- found->last = seg;
- }
- }
-
-
- /*********************************************************************/
- /* */
- /* Good, we will now compute each edge's properties according to */
- /* segments found on its position. Basically, these are: */
- /* */
- /* - edge's main direction */
- /* - stem edge, serif edge or both (which defaults to stem then) */
- /* - rounded edge, straight or both (which defaults to straight) */
- /* - link for edge */
- /* */
- /*********************************************************************/
-
- /* first of all, set the `edge' field in each segment -- this is */
- /* required in order to compute edge links */
-
- /*
- * Note that removing this loop and setting the `edge' field of each
- * segment directly in the code above slows down execution speed for
- * some reasons on platforms like the Sun.
- */
- {
- AF_Edge edges = axis->edges;
- AF_Edge edge_limit = edges + axis->num_edges;
- AF_Edge edge;
-
-
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- seg = edge->first;
- if ( seg )
- do
- {
- seg->edge = edge;
- seg = seg->edge_next;
-
- } while ( seg != edge->first );
- }
-
- /* now, compute each edge properties */
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- FT_Int is_round = 0; /* does it contain round segments? */
- FT_Int is_straight = 0; /* does it contain straight segments? */
-#if 0
- FT_Pos ups = 0; /* number of upwards segments */
- FT_Pos downs = 0; /* number of downwards segments */
-#endif
-
-
- seg = edge->first;
-
- do
- {
- FT_Bool is_serif;
-
-
- /* check for roundness of segment */
- if ( seg->flags & AF_EDGE_ROUND )
- is_round++;
- else
- is_straight++;
-
-#if 0
- /* check for segment direction */
- if ( seg->dir == up_dir )
- ups += seg->max_coord-seg->min_coord;
- else
- downs += seg->max_coord-seg->min_coord;
-#endif
-
- /* check for links -- if seg->serif is set, then seg->link must */
- /* be ignored */
- is_serif = (FT_Bool)( seg->serif &&
- seg->serif->edge &&
- seg->serif->edge != edge );
-
- if ( ( seg->link && seg->link->edge ) || is_serif )
- {
- AF_Edge edge2;
- AF_Segment seg2;
-
-
- edge2 = edge->link;
- seg2 = seg->link;
-
- if ( is_serif )
- {
- seg2 = seg->serif;
- edge2 = edge->serif;
- }
-
- if ( edge2 )
- {
- FT_Pos edge_delta;
- FT_Pos seg_delta;
-
-
- edge_delta = edge->fpos - edge2->fpos;
- if ( edge_delta < 0 )
- edge_delta = -edge_delta;
-
- seg_delta = seg->pos - seg2->pos;
- if ( seg_delta < 0 )
- seg_delta = -seg_delta;
-
- if ( seg_delta < edge_delta )
- edge2 = seg2->edge;
- }
- else
- edge2 = seg2->edge;
-
- if ( is_serif )
- {
- edge->serif = edge2;
- edge2->flags |= AF_EDGE_SERIF;
- }
- else
- edge->link = edge2;
- }
-
- seg = seg->edge_next;
-
- } while ( seg != edge->first );
-
- /* set the round/straight flags */
- edge->flags = AF_EDGE_NORMAL;
-
- if ( is_round > 0 && is_round >= is_straight )
- edge->flags |= AF_EDGE_ROUND;
-
-#if 0
- /* set the edge's main direction */
- edge->dir = AF_DIR_NONE;
-
- if ( ups > downs )
- edge->dir = (FT_Char)up_dir;
-
- else if ( ups < downs )
- edge->dir = (FT_Char)-up_dir;
-
- else if ( ups == downs )
- edge->dir = 0; /* both up and down! */
-#endif
-
- /* gets rid of serifs if link is set */
- /* XXX: This gets rid of many unpleasant artefacts! */
- /* Example: the `c' in cour.pfa at size 13 */
-
- if ( edge->serif && edge->link )
- edge->serif = NULL;
- }
- }
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_latin2_hints_detect_features( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- FT_Error error;
-
-
- error = af_latin2_hints_compute_segments( hints, dim );
- if ( !error )
- {
- af_latin2_hints_link_segments( hints, dim );
-
- error = af_latin2_hints_compute_edges( hints, dim );
- }
- return error;
- }
-
-
- static void
- af_latin2_hints_compute_blue_edges( AF_GlyphHints hints,
- AF_LatinMetrics metrics )
- {
- AF_AxisHints axis = &hints->axis[AF_DIMENSION_VERT];
- AF_Edge edge = axis->edges;
- AF_Edge edge_limit = edge + axis->num_edges;
- AF_LatinAxis latin = &metrics->axis[AF_DIMENSION_VERT];
- FT_Fixed scale = latin->scale;
- FT_Pos best_dist0; /* initial threshold */
-
-
- /* compute the initial threshold as a fraction of the EM size */
- best_dist0 = FT_MulFix( metrics->units_per_em / 40, scale );
-
- if ( best_dist0 > 64 / 2 )
- best_dist0 = 64 / 2;
-
- /* compute which blue zones are active, i.e. have their scaled */
- /* size < 3/4 pixels */
-
- /* for each horizontal edge search the blue zone which is closest */
- for ( ; edge < edge_limit; edge++ )
- {
- FT_Int bb;
- AF_Width best_blue = NULL;
- FT_Pos best_dist = best_dist0;
-
- for ( bb = 0; bb < AF_LATIN_BLUE_MAX; bb++ )
- {
- AF_LatinBlue blue = latin->blues + bb;
- FT_Bool is_top_blue, is_major_dir;
-
-
- /* skip inactive blue zones (i.e., those that are too small) */
- if ( !( blue->flags & AF_LATIN_BLUE_ACTIVE ) )
- continue;
-
- /* if it is a top zone, check for right edges -- if it is a bottom */
- /* zone, check for left edges */
- /* */
- /* of course, that's for TrueType */
- is_top_blue = (FT_Byte)( ( blue->flags & AF_LATIN_BLUE_TOP ) != 0 );
- is_major_dir = FT_BOOL( edge->dir == axis->major_dir );
-
- /* if it is a top zone, the edge must be against the major */
- /* direction; if it is a bottom zone, it must be in the major */
- /* direction */
- if ( is_top_blue ^ is_major_dir )
- {
- FT_Pos dist;
- AF_Width compare;
-
-
- /* if it's a rounded edge, compare it to the overshoot position */
- /* if it's a flat edge, compare it to the reference position */
- if ( edge->flags & AF_EDGE_ROUND )
- compare = &blue->shoot;
- else
- compare = &blue->ref;
-
- dist = edge->fpos - compare->org;
- if ( dist < 0 )
- dist = -dist;
-
- dist = FT_MulFix( dist, scale );
- if ( dist < best_dist )
- {
- best_dist = dist;
- best_blue = compare;
- }
-
-#if 0
- /* now, compare it to the overshoot position if the edge is */
- /* rounded, and if the edge is over the reference position of a */
- /* top zone, or under the reference position of a bottom zone */
- if ( edge->flags & AF_EDGE_ROUND && dist != 0 )
- {
- FT_Bool is_under_ref = FT_BOOL( edge->fpos < blue->ref.org );
-
-
- if ( is_top_blue ^ is_under_ref )
- {
- blue = latin->blues + bb;
- dist = edge->fpos - blue->shoot.org;
- if ( dist < 0 )
- dist = -dist;
-
- dist = FT_MulFix( dist, scale );
- if ( dist < best_dist )
- {
- best_dist = dist;
- best_blue = & blue->shoot;
- }
- }
- }
-#endif
- }
- }
-
- if ( best_blue )
- edge->blue_edge = best_blue;
- }
- }
-
-
- static FT_Error
- af_latin2_hints_init( AF_GlyphHints hints,
- AF_LatinMetrics metrics )
- {
- FT_Render_Mode mode;
- FT_UInt32 scaler_flags, other_flags;
- FT_Face face = metrics->root.scaler.face;
-
-
- af_glyph_hints_rescale( hints, (AF_StyleMetrics)metrics );
-
- /*
- * correct x_scale and y_scale if needed, since they may have
- * been modified `af_latin2_metrics_scale_dim' above
- */
- hints->x_scale = metrics->axis[AF_DIMENSION_HORZ].scale;
- hints->x_delta = metrics->axis[AF_DIMENSION_HORZ].delta;
- hints->y_scale = metrics->axis[AF_DIMENSION_VERT].scale;
- hints->y_delta = metrics->axis[AF_DIMENSION_VERT].delta;
-
- /* compute flags depending on render mode, etc. */
- mode = metrics->root.scaler.render_mode;
-
-#if 0 /* #ifdef AF_CONFIG_OPTION_USE_WARPER */
- if ( mode == FT_RENDER_MODE_LCD || mode == FT_RENDER_MODE_LCD_V )
- metrics->root.scaler.render_mode = mode = FT_RENDER_MODE_NORMAL;
-#endif
-
- scaler_flags = hints->scaler_flags;
- other_flags = 0;
-
- /*
- * We snap the width of vertical stems for the monochrome and
- * horizontal LCD rendering targets only.
- */
- if ( mode == FT_RENDER_MODE_MONO || mode == FT_RENDER_MODE_LCD )
- other_flags |= AF_LATIN_HINTS_HORZ_SNAP;
-
- /*
- * We snap the width of horizontal stems for the monochrome and
- * vertical LCD rendering targets only.
- */
- if ( mode == FT_RENDER_MODE_MONO || mode == FT_RENDER_MODE_LCD_V )
- other_flags |= AF_LATIN_HINTS_VERT_SNAP;
-
- /*
- * We adjust stems to full pixels unless in `light' or `lcd' mode.
- */
- if ( mode != FT_RENDER_MODE_LIGHT && mode != FT_RENDER_MODE_LCD )
- other_flags |= AF_LATIN_HINTS_STEM_ADJUST;
-
- if ( mode == FT_RENDER_MODE_MONO )
- other_flags |= AF_LATIN_HINTS_MONO;
-
- /*
- * In `light' or `lcd' mode we disable horizontal hinting completely.
- * We also do it if the face is italic.
- */
- if ( mode == FT_RENDER_MODE_LIGHT || mode == FT_RENDER_MODE_LCD ||
- ( face->style_flags & FT_STYLE_FLAG_ITALIC ) != 0 )
- scaler_flags |= AF_SCALER_FLAG_NO_HORIZONTAL;
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- /* get (global) warper flag */
- if ( !metrics->root.globals->module->warping )
- scaler_flags |= AF_SCALER_FLAG_NO_WARPER;
-#endif
-
- hints->scaler_flags = scaler_flags;
- hints->other_flags = other_flags;
-
- return 0;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N G L Y P H G R I D - F I T T I N G *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* snap a given width in scaled coordinates to one of the */
- /* current standard widths */
-
- static FT_Pos
- af_latin2_snap_width( AF_Width widths,
- FT_UInt count,
- FT_Pos width )
- {
- FT_UInt n;
- FT_Pos best = 64 + 32 + 2;
- FT_Pos reference = width;
- FT_Pos scaled;
-
-
- for ( n = 0; n < count; n++ )
- {
- FT_Pos w;
- FT_Pos dist;
-
-
- w = widths[n].cur;
- dist = width - w;
- if ( dist < 0 )
- dist = -dist;
- if ( dist < best )
- {
- best = dist;
- reference = w;
- }
- }
-
- scaled = FT_PIX_ROUND( reference );
-
- if ( width >= reference )
- {
- if ( width < scaled + 48 )
- width = reference;
- }
- else
- {
- if ( width > scaled - 48 )
- width = reference;
- }
-
- return width;
- }
-
-
- /* compute the snapped width of a given stem */
-
- static FT_Pos
- af_latin2_compute_stem_width( AF_GlyphHints hints,
- AF_Dimension dim,
- FT_Pos width,
- FT_UInt base_flags,
- FT_UInt stem_flags )
- {
- AF_LatinMetrics metrics = (AF_LatinMetrics) hints->metrics;
- AF_LatinAxis axis = & metrics->axis[dim];
- FT_Pos dist = width;
- FT_Int sign = 0;
- FT_Int vertical = ( dim == AF_DIMENSION_VERT );
-
- FT_UNUSED( base_flags );
-
-
- if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) ||
- axis->extra_light )
- return width;
-
- if ( dist < 0 )
- {
- dist = -width;
- sign = 1;
- }
-
- if ( ( vertical && !AF_LATIN_HINTS_DO_VERT_SNAP( hints ) ) ||
- ( !vertical && !AF_LATIN_HINTS_DO_HORZ_SNAP( hints ) ) )
- {
- /* smooth hinting process: very lightly quantize the stem width */
-
- /* leave the widths of serifs alone */
-
- if ( ( stem_flags & AF_EDGE_SERIF ) && vertical && ( dist < 3 * 64 ) )
- goto Done_Width;
-
-#if 0
- else if ( ( base_flags & AF_EDGE_ROUND ) )
- {
- if ( dist < 80 )
- dist = 64;
- }
- else if ( dist < 56 )
- dist = 56;
-#endif
- if ( axis->width_count > 0 )
- {
- FT_Pos delta;
-
-
- /* compare to standard width */
- if ( axis->width_count > 0 )
- {
- delta = dist - axis->widths[0].cur;
-
- if ( delta < 0 )
- delta = -delta;
-
- if ( delta < 40 )
- {
- dist = axis->widths[0].cur;
- if ( dist < 48 )
- dist = 48;
-
- goto Done_Width;
- }
- }
-
- if ( dist < 3 * 64 )
- {
- delta = dist & 63;
- dist &= -64;
-
- if ( delta < 10 )
- dist += delta;
-
- else if ( delta < 32 )
- dist += 10;
-
- else if ( delta < 54 )
- dist += 54;
-
- else
- dist += delta;
- }
- else
- dist = ( dist + 32 ) & ~63;
- }
- }
- else
- {
- /* strong hinting process: snap the stem width to integer pixels */
- FT_Pos org_dist = dist;
-
-
- dist = af_latin2_snap_width( axis->widths, axis->width_count, dist );
-
- if ( vertical )
- {
- /* in the case of vertical hinting, always round */
- /* the stem heights to integer pixels */
-
- if ( dist >= 64 )
- dist = ( dist + 16 ) & ~63;
- else
- dist = 64;
- }
- else
- {
- if ( AF_LATIN_HINTS_DO_MONO( hints ) )
- {
- /* monochrome horizontal hinting: snap widths to integer pixels */
- /* with a different threshold */
-
- if ( dist < 64 )
- dist = 64;
- else
- dist = ( dist + 32 ) & ~63;
- }
- else
- {
- /* for horizontal anti-aliased hinting, we adopt a more subtle */
- /* approach: we strengthen small stems, round stems whose size */
- /* is between 1 and 2 pixels to an integer, otherwise nothing */
-
- if ( dist < 48 )
- dist = ( dist + 64 ) >> 1;
-
- else if ( dist < 128 )
- {
- /* We only round to an integer width if the corresponding */
- /* distortion is less than 1/4 pixel. Otherwise this */
- /* makes everything worse since the diagonals, which are */
- /* not hinted, appear a lot bolder or thinner than the */
- /* vertical stems. */
-
- FT_Int delta;
-
-
- dist = ( dist + 22 ) & ~63;
- delta = dist - org_dist;
- if ( delta < 0 )
- delta = -delta;
-
- if ( delta >= 16 )
- {
- dist = org_dist;
- if ( dist < 48 )
- dist = ( dist + 64 ) >> 1;
- }
- }
- else
- /* round otherwise to prevent color fringes in LCD mode */
- dist = ( dist + 32 ) & ~63;
- }
- }
- }
-
- Done_Width:
- if ( sign )
- dist = -dist;
-
- return dist;
- }
-
-
- /* align one stem edge relative to the previous stem edge */
-
- static void
- af_latin2_align_linked_edge( AF_GlyphHints hints,
- AF_Dimension dim,
- AF_Edge base_edge,
- AF_Edge stem_edge )
- {
- FT_Pos dist = stem_edge->opos - base_edge->opos;
-
- FT_Pos fitted_width = af_latin2_compute_stem_width( hints, dim, dist,
- base_edge->flags,
- stem_edge->flags );
-
-
- stem_edge->pos = base_edge->pos + fitted_width;
-
- FT_TRACE5(( "LINK: edge %d (opos=%.2f) linked to (%.2f), "
- "dist was %.2f, now %.2f\n",
- stem_edge-hints->axis[dim].edges, stem_edge->opos / 64.0,
- stem_edge->pos / 64.0, dist / 64.0, fitted_width / 64.0 ));
- }
-
-
- static void
- af_latin2_align_serif_edge( AF_GlyphHints hints,
- AF_Edge base,
- AF_Edge serif )
- {
- FT_UNUSED( hints );
-
- serif->pos = base->pos + ( serif->opos - base->opos );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** E D G E H I N T I N G ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- static void
- af_latin2_hint_edges( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- AF_Edge edges = axis->edges;
- AF_Edge edge_limit = edges + axis->num_edges;
- AF_Edge edge;
- AF_Edge anchor = NULL;
- FT_Int has_serifs = 0;
- FT_Pos anchor_drift = 0;
-
-
-
- FT_TRACE5(( "==== hinting %s edges =====\n",
- dim == AF_DIMENSION_HORZ ? "vertical" : "horizontal" ));
-
- /* we begin by aligning all stems relative to the blue zone */
- /* if needed -- that's only for horizontal edges */
-
- if ( dim == AF_DIMENSION_VERT && AF_HINTS_DO_BLUES( hints ) )
- {
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- AF_Width blue;
- AF_Edge edge1, edge2;
-
-
- if ( edge->flags & AF_EDGE_DONE )
- continue;
-
- blue = edge->blue_edge;
- edge1 = NULL;
- edge2 = edge->link;
-
- if ( blue )
- {
- edge1 = edge;
- }
- else if ( edge2 && edge2->blue_edge )
- {
- blue = edge2->blue_edge;
- edge1 = edge2;
- edge2 = edge;
- }
-
- if ( !edge1 )
- continue;
-
- FT_TRACE5(( "BLUE: edge %d (opos=%.2f) snapped to (%.2f), "
- "was (%.2f)\n",
- edge1-edges, edge1->opos / 64.0, blue->fit / 64.0,
- edge1->pos / 64.0 ));
-
- edge1->pos = blue->fit;
- edge1->flags |= AF_EDGE_DONE;
-
- if ( edge2 && !edge2->blue_edge )
- {
- af_latin2_align_linked_edge( hints, dim, edge1, edge2 );
- edge2->flags |= AF_EDGE_DONE;
- }
-
- if ( !anchor )
- {
- anchor = edge;
-
- anchor_drift = ( anchor->pos - anchor->opos );
- if ( edge2 )
- anchor_drift = ( anchor_drift +
- ( edge2->pos - edge2->opos ) ) >> 1;
- }
- }
- }
-
- /* now we will align all stem edges, trying to maintain the */
- /* relative order of stems in the glyph */
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- AF_Edge edge2;
-
-
- if ( edge->flags & AF_EDGE_DONE )
- continue;
-
- /* skip all non-stem edges */
- edge2 = edge->link;
- if ( !edge2 )
- {
- has_serifs++;
- continue;
- }
-
- /* now align the stem */
-
- /* this should not happen, but it's better to be safe */
- if ( edge2->blue_edge )
- {
- FT_TRACE5(( "ASSERTION FAILED for edge %d\n", edge2-edges ));
-
- af_latin2_align_linked_edge( hints, dim, edge2, edge );
- edge->flags |= AF_EDGE_DONE;
- continue;
- }
-
- if ( !anchor )
- {
- FT_Pos org_len, org_center, cur_len;
- FT_Pos cur_pos1, error1, error2, u_off, d_off;
-
-
- org_len = edge2->opos - edge->opos;
- cur_len = af_latin2_compute_stem_width( hints, dim, org_len,
- edge->flags,
- edge2->flags );
- if ( cur_len <= 64 )
- u_off = d_off = 32;
- else
- {
- u_off = 38;
- d_off = 26;
- }
-
- if ( cur_len < 96 )
- {
- org_center = edge->opos + ( org_len >> 1 );
-
- cur_pos1 = FT_PIX_ROUND( org_center );
-
- error1 = org_center - ( cur_pos1 - u_off );
- if ( error1 < 0 )
- error1 = -error1;
-
- error2 = org_center - ( cur_pos1 + d_off );
- if ( error2 < 0 )
- error2 = -error2;
-
- if ( error1 < error2 )
- cur_pos1 -= u_off;
- else
- cur_pos1 += d_off;
-
- edge->pos = cur_pos1 - cur_len / 2;
- edge2->pos = edge->pos + cur_len;
- }
- else
- edge->pos = FT_PIX_ROUND( edge->opos );
-
- FT_TRACE5(( "ANCHOR: edge %d (opos=%.2f) and %d (opos=%.2f)"
- " snapped to (%.2f) (%.2f)\n",
- edge-edges, edge->opos / 64.0,
- edge2-edges, edge2->opos / 64.0,
- edge->pos / 64.0, edge2->pos / 64.0 ));
- anchor = edge;
-
- edge->flags |= AF_EDGE_DONE;
-
- af_latin2_align_linked_edge( hints, dim, edge, edge2 );
-
- edge2->flags |= AF_EDGE_DONE;
-
- anchor_drift = ( ( anchor->pos - anchor->opos ) +
- ( edge2->pos - edge2->opos ) ) >> 1;
-
- FT_TRACE5(( "DRIFT: %.2f\n", anchor_drift/64.0 ));
- }
- else
- {
- FT_Pos org_pos, org_len, org_center, cur_center, cur_len;
- FT_Pos org_left, org_right;
-
-
- org_pos = edge->opos + anchor_drift;
- org_len = edge2->opos - edge->opos;
- org_center = org_pos + ( org_len >> 1 );
-
- cur_len = af_latin2_compute_stem_width( hints, dim, org_len,
- edge->flags,
- edge2->flags );
-
- org_left = org_pos + ( ( org_len - cur_len ) >> 1 );
- org_right = org_pos + ( ( org_len + cur_len ) >> 1 );
-
- FT_TRACE5(( "ALIGN: left=%.2f right=%.2f ",
- org_left / 64.0, org_right / 64.0 ));
- cur_center = org_center;
-
- if ( edge2->flags & AF_EDGE_DONE )
- {
- FT_TRACE5(( "\n" ));
- edge->pos = edge2->pos - cur_len;
- }
- else
- {
- /* we want to compare several displacement, and choose
- * the one that increases fitness while minimizing
- * distortion as well
- */
- FT_Pos displacements[6], scores[6], org, fit, delta;
- FT_UInt count = 0;
-
- /* note: don't even try to fit tiny stems */
- if ( cur_len < 32 )
- {
- FT_TRACE5(( "tiny stem\n" ));
- goto AlignStem;
- }
-
- /* if the span is within a single pixel, don't touch it */
- if ( FT_PIX_FLOOR( org_left ) == FT_PIX_CEIL( org_right ) )
- {
- FT_TRACE5(( "single pixel stem\n" ));
- goto AlignStem;
- }
-
- if ( cur_len <= 96 )
- {
- /* we want to avoid the absolute worst case which is
- * when the left and right edges of the span each represent
- * about 50% of the gray. we'd better want to change this
- * to 25/75%, since this is much more pleasant to the eye with
- * very acceptable distortion
- */
- FT_Pos frac_left = org_left & 63;
- FT_Pos frac_right = org_right & 63;
-
- if ( frac_left >= 22 && frac_left <= 42 &&
- frac_right >= 22 && frac_right <= 42 )
- {
- org = frac_left;
- fit = ( org <= 32 ) ? 16 : 48;
- delta = FT_ABS( fit - org );
- displacements[count] = fit - org;
- scores[count++] = delta;
- FT_TRACE5(( "dispA=%.2f (%d) ", ( fit - org ) / 64.0, delta ));
-
- org = frac_right;
- fit = ( org <= 32 ) ? 16 : 48;
- delta = FT_ABS( fit - org );
- displacements[count] = fit - org;
- scores[count++] = delta;
- FT_TRACE5(( "dispB=%.2f (%d) ", ( fit - org ) / 64.0, delta ));
- }
- }
-
- /* snapping the left edge to the grid */
- org = org_left;
- fit = FT_PIX_ROUND( org );
- delta = FT_ABS( fit - org );
- displacements[count] = fit - org;
- scores[count++] = delta;
- FT_TRACE5(( "dispC=%.2f (%d) ", ( fit - org ) / 64.0, delta ));
-
- /* snapping the right edge to the grid */
- org = org_right;
- fit = FT_PIX_ROUND( org );
- delta = FT_ABS( fit - org );
- displacements[count] = fit - org;
- scores[count++] = delta;
- FT_TRACE5(( "dispD=%.2f (%d) ", ( fit - org ) / 64.0, delta ));
-
- /* now find the best displacement */
- {
- FT_Pos best_score = scores[0];
- FT_Pos best_disp = displacements[0];
- FT_UInt nn;
-
- for ( nn = 1; nn < count; nn++ )
- {
- if ( scores[nn] < best_score )
- {
- best_score = scores[nn];
- best_disp = displacements[nn];
- }
- }
-
- cur_center = org_center + best_disp;
- }
- FT_TRACE5(( "\n" ));
- }
-
- AlignStem:
- edge->pos = cur_center - ( cur_len >> 1 );
- edge2->pos = edge->pos + cur_len;
-
- FT_TRACE5(( "STEM1: %d (opos=%.2f) to %d (opos=%.2f)"
- " snapped to (%.2f) and (%.2f),"
- " org_len=%.2f cur_len=%.2f\n",
- edge-edges, edge->opos / 64.0,
- edge2-edges, edge2->opos / 64.0,
- edge->pos / 64.0, edge2->pos / 64.0,
- org_len / 64.0, cur_len / 64.0 ));
-
- edge->flags |= AF_EDGE_DONE;
- edge2->flags |= AF_EDGE_DONE;
-
- if ( edge > edges && edge->pos < edge[-1].pos )
- {
- FT_TRACE5(( "BOUND: %d (pos=%.2f) to (%.2f)\n",
- edge-edges, edge->pos / 64.0, edge[-1].pos / 64.0 ));
- edge->pos = edge[-1].pos;
- }
- }
- }
-
- /* make sure that lowercase m's maintain their symmetry */
-
- /* In general, lowercase m's have six vertical edges if they are sans */
- /* serif, or twelve if they are with serifs. This implementation is */
- /* based on that assumption, and seems to work very well with most */
- /* faces. However, if for a certain face this assumption is not */
- /* true, the m is just rendered like before. In addition, any stem */
- /* correction will only be applied to symmetrical glyphs (even if the */
- /* glyph is not an m), so the potential for unwanted distortion is */
- /* relatively low. */
-
- /* We don't handle horizontal edges since we can't easily assure that */
- /* the third (lowest) stem aligns with the base line; it might end up */
- /* one pixel higher or lower. */
-
-#if 0
- {
- FT_Int n_edges = edge_limit - edges;
-
-
- if ( dim == AF_DIMENSION_HORZ && ( n_edges == 6 || n_edges == 12 ) )
- {
- AF_Edge edge1, edge2, edge3;
- FT_Pos dist1, dist2, span, delta;
-
-
- if ( n_edges == 6 )
- {
- edge1 = edges;
- edge2 = edges + 2;
- edge3 = edges + 4;
- }
- else
- {
- edge1 = edges + 1;
- edge2 = edges + 5;
- edge3 = edges + 9;
- }
-
- dist1 = edge2->opos - edge1->opos;
- dist2 = edge3->opos - edge2->opos;
-
- span = dist1 - dist2;
- if ( span < 0 )
- span = -span;
-
- if ( span < 8 )
- {
- delta = edge3->pos - ( 2 * edge2->pos - edge1->pos );
- edge3->pos -= delta;
- if ( edge3->link )
- edge3->link->pos -= delta;
-
- /* move the serifs along with the stem */
- if ( n_edges == 12 )
- {
- ( edges + 8 )->pos -= delta;
- ( edges + 11 )->pos -= delta;
- }
-
- edge3->flags |= AF_EDGE_DONE;
- if ( edge3->link )
- edge3->link->flags |= AF_EDGE_DONE;
- }
- }
- }
-#endif
-
- if ( has_serifs || !anchor )
- {
- /*
- * now hint the remaining edges (serifs and single) in order
- * to complete our processing
- */
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- FT_Pos delta;
-
-
- if ( edge->flags & AF_EDGE_DONE )
- continue;
-
- delta = 1000;
-
- if ( edge->serif )
- {
- delta = edge->serif->opos - edge->opos;
- if ( delta < 0 )
- delta = -delta;
- }
-
- if ( delta < 64 + 16 )
- {
- af_latin2_align_serif_edge( hints, edge->serif, edge );
- FT_TRACE5(( "SERIF: edge %d (opos=%.2f) serif to %d (opos=%.2f)"
- " aligned to (%.2f)\n",
- edge-edges, edge->opos / 64.0,
- edge->serif - edges, edge->serif->opos / 64.0,
- edge->pos / 64.0 ));
- }
- else if ( !anchor )
- {
- FT_TRACE5(( "SERIF_ANCHOR: edge %d (opos=%.2f)"
- " snapped to (%.2f)\n",
- edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
- edge->pos = FT_PIX_ROUND( edge->opos );
- anchor = edge;
- }
- else
- {
- AF_Edge before, after;
-
-
- for ( before = edge - 1; before >= edges; before-- )
- if ( before->flags & AF_EDGE_DONE )
- break;
-
- for ( after = edge + 1; after < edge_limit; after++ )
- if ( after->flags & AF_EDGE_DONE )
- break;
-
- if ( before >= edges && before < edge &&
- after < edge_limit && after > edge )
- {
- if ( after->opos == before->opos )
- edge->pos = before->pos;
- else
- edge->pos = before->pos +
- FT_MulDiv( edge->opos - before->opos,
- after->pos - before->pos,
- after->opos - before->opos );
- FT_TRACE5(( "SERIF_LINK1: edge %d (opos=%.2f) snapped to (%.2f)"
- " from %d (opos=%.2f)\n",
- edge-edges, edge->opos / 64.0, edge->pos / 64.0,
- before - edges, before->opos / 64.0 ));
- }
- else
- {
- edge->pos = anchor->pos +
- ( ( edge->opos - anchor->opos + 16 ) & ~31 );
-
- FT_TRACE5(( "SERIF_LINK2: edge %d (opos=%.2f)"
- " snapped to (%.2f)\n",
- edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
- }
- }
-
- edge->flags |= AF_EDGE_DONE;
-
- if ( edge > edges && edge->pos < edge[-1].pos )
- edge->pos = edge[-1].pos;
-
- if ( edge + 1 < edge_limit &&
- edge[1].flags & AF_EDGE_DONE &&
- edge->pos > edge[1].pos )
- edge->pos = edge[1].pos;
- }
- }
- }
-
-
- static FT_Error
- af_latin2_hints_apply( FT_UInt glyph_index,
- AF_GlyphHints hints,
- FT_Outline* outline,
- AF_LatinMetrics metrics )
- {
- FT_Error error;
- int dim;
-
- FT_UNUSED( glyph_index );
-
-
- error = af_glyph_hints_reload( hints, outline );
- if ( error )
- goto Exit;
-
- /* analyze glyph outline */
- if ( AF_HINTS_DO_HORIZONTAL( hints ) )
- {
- error = af_latin2_hints_detect_features( hints, AF_DIMENSION_HORZ );
- if ( error )
- goto Exit;
- }
-
- if ( AF_HINTS_DO_VERTICAL( hints ) )
- {
- error = af_latin2_hints_detect_features( hints, AF_DIMENSION_VERT );
- if ( error )
- goto Exit;
-
- af_latin2_hints_compute_blue_edges( hints, metrics );
- }
-
- /* grid-fit the outline */
- for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
- {
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- if ( dim == AF_DIMENSION_HORZ &&
- metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL &&
- AF_HINTS_DO_WARP( hints ) )
- {
- AF_WarperRec warper;
- FT_Fixed scale;
- FT_Pos delta;
-
-
- af_warper_compute( &warper, hints, dim, &scale, &delta );
- af_glyph_hints_scale_dim( hints, dim, scale, delta );
- continue;
- }
-#endif /* AF_CONFIG_OPTION_USE_WARPER */
-
- if ( ( dim == AF_DIMENSION_HORZ && AF_HINTS_DO_HORIZONTAL( hints ) ) ||
- ( dim == AF_DIMENSION_VERT && AF_HINTS_DO_VERTICAL( hints ) ) )
- {
- af_latin2_hint_edges( hints, (AF_Dimension)dim );
- af_glyph_hints_align_edge_points( hints, (AF_Dimension)dim );
- af_glyph_hints_align_strong_points( hints, (AF_Dimension)dim );
- af_glyph_hints_align_weak_points( hints, (AF_Dimension)dim );
- }
- }
- af_glyph_hints_save( hints, outline );
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N S C R I P T C L A S S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- AF_DEFINE_WRITING_SYSTEM_CLASS(
- af_latin2_writing_system_class,
-
- AF_WRITING_SYSTEM_LATIN2,
-
- sizeof ( AF_LatinMetricsRec ),
-
- (AF_WritingSystem_InitMetricsFunc) af_latin2_metrics_init, /* style_metrics_init */
- (AF_WritingSystem_ScaleMetricsFunc)af_latin2_metrics_scale, /* style_metrics_scale */
- (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done */
- (AF_WritingSystem_GetStdWidthsFunc)af_latin2_get_standard_widths, /* style_metrics_getstdw */
-
- (AF_WritingSystem_InitHintsFunc) af_latin2_hints_init, /* style_hints_init */
- (AF_WritingSystem_ApplyHintsFunc) af_latin2_hints_apply /* style_hints_apply */
- )
-
-#else /* !FT_OPTION_AUTOFIT2 */
-
- /* ANSI C doesn't like empty source files */
- typedef int _af_latin2_dummy;
-
-#endif /* !FT_OPTION_AUTOFIT2 */
-
-
-/* END */
diff --git a/src/autofit/aflatin2.h b/src/autofit/aflatin2.h
deleted file mode 100644
index 2d0b154f5..000000000
--- a/src/autofit/aflatin2.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* ATTENTION: This file doesn't compile. It is only here as a reference */
-/* of an alternative latin hinting algorithm that was always */
-/* marked as experimental. */
-
-
-/***************************************************************************/
-/* */
-/* aflatin2.h */
-/* */
-/* Auto-fitter hinting routines for latin writing system */
-/* (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFLATIN2_H_
-#define AFLATIN2_H_
-
-#include "afhints.h"
-
-
-FT_BEGIN_HEADER
-
-
- /* the `latin' writing system */
-
- AF_DECLARE_WRITING_SYSTEM_CLASS( af_latin2_writing_system_class )
-
-
-/* */
-
-FT_END_HEADER
-
-#endif /* AFLATIN_H_ */
-
-
-/* END */
diff --git a/src/autofit/afloader.c b/src/autofit/afloader.c
deleted file mode 100644
index 067ebd17f..000000000
--- a/src/autofit/afloader.c
+++ /dev/null
@@ -1,721 +0,0 @@
-/***************************************************************************/
-/* */
-/* afloader.c */
-/* */
-/* Auto-fitter glyph loading routines (body). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "afglobal.h"
-#include "afloader.h"
-#include "afhints.h"
-#include "aferrors.h"
-#include "afmodule.h"
-#include "afpic.h"
-
-#include FT_INTERNAL_CALC_H
-
-
- /* Initialize glyph loader. */
-
- FT_LOCAL_DEF( void )
- af_loader_init( AF_Loader loader,
- AF_GlyphHints hints )
- {
- FT_ZERO( loader );
-
- loader->hints = hints;
- }
-
-
- /* Reset glyph loader and compute globals if necessary. */
-
- FT_LOCAL_DEF( FT_Error )
- af_loader_reset( AF_Loader loader,
- AF_Module module,
- FT_Face face )
- {
- FT_Error error = FT_Err_Ok;
-
-
- loader->face = face;
- loader->globals = (AF_FaceGlobals)face->autohint.data;
-
- if ( !loader->globals )
- {
- error = af_face_globals_new( face, &loader->globals, module );
- if ( !error )
- {
- face->autohint.data =
- (FT_Pointer)loader->globals;
- face->autohint.finalizer =
- (FT_Generic_Finalizer)af_face_globals_free;
- }
- }
-
- return error;
- }
-
-
- /* Finalize glyph loader. */
-
- FT_LOCAL_DEF( void )
- af_loader_done( AF_Loader loader )
- {
- loader->face = NULL;
- loader->globals = NULL;
- loader->hints = NULL;
- }
-
-
-#define af_intToFixed( i ) \
- ( (FT_Fixed)( (FT_UInt32)(i) << 16 ) )
-#define af_fixedToInt( x ) \
- ( (FT_Short)( ( (FT_UInt32)(x) + 0x8000U ) >> 16 ) )
-#define af_floatToFixed( f ) \
- ( (FT_Fixed)( (f) * 65536.0 + 0.5 ) )
-
-
- static FT_Error
- af_loader_embolden_glyph_in_slot( AF_Loader loader,
- FT_Face face,
- AF_StyleMetrics style_metrics )
- {
- FT_Error error = FT_Err_Ok;
-
- FT_GlyphSlot slot = face->glyph;
- AF_FaceGlobals globals = loader->globals;
- AF_WritingSystemClass writing_system_class;
-
- FT_Size_Metrics* size_metrics = &face->size->internal->autohint_metrics;
-
- FT_Pos stdVW = 0;
- FT_Pos stdHW = 0;
-
- FT_Bool size_changed = size_metrics->x_ppem !=
- globals->stem_darkening_for_ppem;
-
- FT_Fixed em_size = af_intToFixed( face->units_per_EM );
- FT_Fixed em_ratio = FT_DivFix( af_intToFixed( 1000 ), em_size );
-
- FT_Matrix scale_down_matrix = { 0x10000L, 0, 0, 0x10000L };
-
-
- /* Skip stem darkening for broken fonts. */
- if ( !face->units_per_EM )
- {
- error = FT_ERR( Corrupted_Font_Header );
- goto Exit;
- }
-
- /*
- * We depend on the writing system (script analyzers) to supply
- * standard widths for the script of the glyph we are looking at. If
- * it can't deliver, stem darkening is disabled.
- */
- writing_system_class =
- AF_WRITING_SYSTEM_CLASSES_GET[style_metrics->style_class->writing_system];
-
- if ( writing_system_class->style_metrics_getstdw )
- writing_system_class->style_metrics_getstdw( style_metrics,
- &stdHW,
- &stdVW );
- else
- {
- error = FT_ERR( Unimplemented_Feature );
- goto Exit;
- }
-
- if ( size_changed ||
- ( stdVW > 0 && stdVW != globals->standard_vertical_width ) )
- {
- FT_Fixed darken_by_font_units_x, darken_x;
-
-
- darken_by_font_units_x =
- af_intToFixed( af_loader_compute_darkening( loader,
- face,
- stdVW ) );
- darken_x = FT_DivFix( FT_MulFix( darken_by_font_units_x,
- size_metrics->x_scale ),
- em_ratio );
-
- globals->standard_vertical_width = stdVW;
- globals->stem_darkening_for_ppem = size_metrics->x_ppem;
- globals->darken_x = af_fixedToInt( darken_x );
- }
-
- if ( size_changed ||
- ( stdHW > 0 && stdHW != globals->standard_horizontal_width ) )
- {
- FT_Fixed darken_by_font_units_y, darken_y;
-
-
- darken_by_font_units_y =
- af_intToFixed( af_loader_compute_darkening( loader,
- face,
- stdHW ) );
- darken_y = FT_DivFix( FT_MulFix( darken_by_font_units_y,
- size_metrics->y_scale ),
- em_ratio );
-
- globals->standard_horizontal_width = stdHW;
- globals->stem_darkening_for_ppem = size_metrics->x_ppem;
- globals->darken_y = af_fixedToInt( darken_y );
-
- /*
- * Scale outlines down on the Y-axis to keep them inside their blue
- * zones. The stronger the emboldening, the stronger the downscaling
- * (plus heuristical padding to prevent outlines still falling out
- * their zones due to rounding).
- *
- * Reason: `FT_Outline_Embolden' works by shifting the rightmost
- * points of stems farther to the right, and topmost points farther
- * up. This positions points on the Y-axis outside their
- * pre-computed blue zones and leads to distortion when applying the
- * hints in the code further below. Code outside this emboldening
- * block doesn't know we are presenting it with modified outlines the
- * analyzer didn't see!
- *
- * An unfortunate side effect of downscaling is that the emboldening
- * effect is slightly decreased. The loss becomes more pronounced
- * versus the CFF driver at smaller sizes, e.g., at 9ppem and below.
- */
- globals->scale_down_factor =
- FT_DivFix( em_size - ( darken_by_font_units_y + af_intToFixed( 8 ) ),
- em_size );
- }
-
- FT_Outline_EmboldenXY( &slot->outline,
- globals->darken_x,
- globals->darken_y );
-
- scale_down_matrix.yy = globals->scale_down_factor;
- FT_Outline_Transform( &slot->outline, &scale_down_matrix );
-
- Exit:
- return error;
- }
-
-
- /* Load the glyph at index into the current slot of a face and hint it. */
-
- FT_LOCAL_DEF( FT_Error )
- af_loader_load_glyph( AF_Loader loader,
- AF_Module module,
- FT_Face face,
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- FT_Error error;
-
- FT_Size size = face->size;
- FT_Size_Internal size_internal = size->internal;
- FT_GlyphSlot slot = face->glyph;
- FT_Slot_Internal slot_internal = slot->internal;
- FT_GlyphLoader gloader = slot_internal->loader;
-
- AF_GlyphHints hints = loader->hints;
- AF_ScalerRec scaler;
- AF_StyleMetrics style_metrics;
- FT_UInt style_options = AF_STYLE_NONE_DFLT;
- AF_StyleClass style_class;
- AF_WritingSystemClass writing_system_class;
-
-#ifdef FT_CONFIG_OPTION_PIC
- AF_FaceGlobals globals = loader->globals;
-#endif
-
-
- if ( !size )
- return FT_THROW( Invalid_Size_Handle );
-
- FT_ZERO( &scaler );
-
- if ( !size_internal->autohint_metrics.x_scale ||
- size_internal->autohint_mode != FT_LOAD_TARGET_MODE( load_flags ) )
- {
- /* switching between hinting modes usually means different scaling */
- /* values; this later on enforces recomputation of everything */
- /* related to the current size */
-
- size_internal->autohint_mode = FT_LOAD_TARGET_MODE( load_flags );
- size_internal->autohint_metrics = size->metrics;
-
-#ifdef AF_CONFIG_OPTION_TT_SIZE_METRICS
- {
- FT_Size_Metrics* size_metrics = &size_internal->autohint_metrics;
-
-
- /* set metrics to integer values and adjust scaling accordingly; */
- /* this is the same setup as with TrueType fonts, cf. function */
- /* `tt_size_reset' in file `ttobjs.c' */
- size_metrics->ascender = FT_PIX_ROUND(
- FT_MulFix( face->ascender,
- size_metrics->y_scale ) );
- size_metrics->descender = FT_PIX_ROUND(
- FT_MulFix( face->descender,
- size_metrics->y_scale ) );
- size_metrics->height = FT_PIX_ROUND(
- FT_MulFix( face->height,
- size_metrics->y_scale ) );
-
- size_metrics->x_scale = FT_DivFix( size_metrics->x_ppem << 6,
- face->units_per_EM );
- size_metrics->y_scale = FT_DivFix( size_metrics->y_ppem << 6,
- face->units_per_EM );
- size_metrics->max_advance = FT_PIX_ROUND(
- FT_MulFix( face->max_advance_width,
- size_metrics->x_scale ) );
- }
-#endif /* AF_CONFIG_OPTION_TT_SIZE_METRICS */
- }
-
- /*
- * TODO: This code currently doesn't support fractional advance widths,
- * i.e., placing hinted glyphs at anything other than integer
- * x-positions. This is only relevant for the warper code, which
- * scales and shifts glyphs to optimize blackness of stems (hinting on
- * the x-axis by nature places things on pixel integers, hinting on the
- * y-axis only, i.e., LIGHT mode, doesn't touch the x-axis). The delta
- * values of the scaler would need to be adjusted.
- */
- scaler.face = face;
- scaler.x_scale = size_internal->autohint_metrics.x_scale;
- scaler.x_delta = 0;
- scaler.y_scale = size_internal->autohint_metrics.y_scale;
- scaler.y_delta = 0;
-
- scaler.render_mode = FT_LOAD_TARGET_MODE( load_flags );
- scaler.flags = 0;
-
- /* note that the fallback style can't be changed anymore */
- /* after the first call of `af_loader_load_glyph' */
- error = af_loader_reset( loader, module, face );
- if ( error )
- goto Exit;
-
-#ifdef FT_OPTION_AUTOFIT2
- /* XXX: undocumented hook to activate the latin2 writing system. */
- if ( load_flags & ( 1UL << 20 ) )
- style_options = AF_STYLE_LTN2_DFLT;
-#endif
-
- /*
- * Glyphs (really code points) are assigned to scripts. Script
- * analysis is done lazily: For each glyph that passes through here,
- * the corresponding script analyzer is called, but returns immediately
- * if it has been run already.
- */
- error = af_face_globals_get_metrics( loader->globals, glyph_index,
- style_options, &style_metrics );
- if ( error )
- goto Exit;
-
- style_class = style_metrics->style_class;
- writing_system_class =
- AF_WRITING_SYSTEM_CLASSES_GET[style_class->writing_system];
-
- loader->metrics = style_metrics;
-
- if ( writing_system_class->style_metrics_scale )
- writing_system_class->style_metrics_scale( style_metrics, &scaler );
- else
- style_metrics->scaler = scaler;
-
- if ( writing_system_class->style_hints_init )
- {
- error = writing_system_class->style_hints_init( hints,
- style_metrics );
- if ( error )
- goto Exit;
- }
-
- /*
- * Do the main work of `af_loader_load_glyph'. Note that we never have
- * to deal with composite glyphs as those get loaded into
- * FT_GLYPH_FORMAT_OUTLINE by the recursed `FT_Load_Glyph' function.
- * In the rare cases where FT_LOAD_NO_RECURSE is set, it implies
- * FT_LOAD_NO_SCALE and as such the auto-hinter is never called.
- */
- load_flags |= FT_LOAD_NO_SCALE |
- FT_LOAD_IGNORE_TRANSFORM |
- FT_LOAD_LINEAR_DESIGN;
- load_flags &= ~FT_LOAD_RENDER;
-
- error = FT_Load_Glyph( face, glyph_index, load_flags );
- if ( error )
- goto Exit;
-
- /*
- * Apply stem darkening (emboldening) here before hints are applied to
- * the outline. Glyphs are scaled down proportionally to the
- * emboldening so that curve points don't fall outside their
- * precomputed blue zones.
- *
- * Any emboldening done by the font driver (e.g., the CFF driver)
- * doesn't reach here because the autohinter loads the unprocessed
- * glyphs in font units for analysis (functions `af_*_metrics_init_*')
- * and then above to prepare it for the rasterizers by itself,
- * independently of the font driver. So emboldening must be done here,
- * within the autohinter.
- *
- * All glyphs to be autohinted pass through here one by one. The
- * standard widths can therefore change from one glyph to the next,
- * depending on what script a glyph is assigned to (each script has its
- * own set of standard widths and other metrics). The darkening amount
- * must therefore be recomputed for each size and
- * `standard_{vertical,horizontal}_width' change.
- *
- * Ignore errors and carry on without emboldening.
- *
- */
-
- /* stem darkening only works well in `light' mode */
- if ( scaler.render_mode == FT_RENDER_MODE_LIGHT &&
- ( !face->internal->no_stem_darkening ||
- ( face->internal->no_stem_darkening < 0 &&
- !module->no_stem_darkening ) ) )
- af_loader_embolden_glyph_in_slot( loader, face, style_metrics );
-
- loader->transformed = slot_internal->glyph_transformed;
- if ( loader->transformed )
- {
- FT_Matrix inverse;
-
-
- loader->trans_matrix = slot_internal->glyph_matrix;
- loader->trans_delta = slot_internal->glyph_delta;
-
- inverse = loader->trans_matrix;
- if ( !FT_Matrix_Invert( &inverse ) )
- FT_Vector_Transform( &loader->trans_delta, &inverse );
- }
-
- switch ( slot->format )
- {
- case FT_GLYPH_FORMAT_OUTLINE:
- /* translate the loaded glyph when an internal transform is needed */
- if ( loader->transformed )
- FT_Outline_Translate( &slot->outline,
- loader->trans_delta.x,
- loader->trans_delta.y );
-
- /* compute original horizontal phantom points */
- /* (and ignore vertical ones) */
- loader->pp1.x = hints->x_delta;
- loader->pp1.y = hints->y_delta;
- loader->pp2.x = FT_MulFix( slot->metrics.horiAdvance,
- hints->x_scale ) + hints->x_delta;
- loader->pp2.y = hints->y_delta;
-
- /* be sure to check for spacing glyphs */
- if ( slot->outline.n_points == 0 )
- goto Hint_Metrics;
-
- /* now load the slot image into the auto-outline */
- /* and run the automatic hinting process */
- if ( writing_system_class->style_hints_apply )
- writing_system_class->style_hints_apply( glyph_index,
- hints,
- &gloader->base.outline,
- style_metrics );
-
- /* we now need to adjust the metrics according to the change in */
- /* width/positioning that occurred during the hinting process */
- if ( scaler.render_mode != FT_RENDER_MODE_LIGHT )
- {
- FT_Pos old_rsb, old_lsb, new_lsb;
- FT_Pos pp1x_uh, pp2x_uh;
-
- AF_AxisHints axis = &hints->axis[AF_DIMENSION_HORZ];
- AF_Edge edge1 = axis->edges; /* leftmost edge */
- AF_Edge edge2 = edge1 +
- axis->num_edges - 1; /* rightmost edge */
-
-
- if ( axis->num_edges > 1 && AF_HINTS_DO_ADVANCE( hints ) )
- {
- old_rsb = loader->pp2.x - edge2->opos;
- /* loader->pp1.x is always zero at this point of time */
- old_lsb = edge1->opos /* - loader->pp1.x */;
- new_lsb = edge1->pos;
-
- /* remember unhinted values to later account */
- /* for rounding errors */
- pp1x_uh = new_lsb - old_lsb;
- pp2x_uh = edge2->pos + old_rsb;
-
- /* prefer too much space over too little space */
- /* for very small sizes */
-
- if ( old_lsb < 24 )
- pp1x_uh -= 8;
-
- if ( old_rsb < 24 )
- pp2x_uh += 8;
-
- loader->pp1.x = FT_PIX_ROUND( pp1x_uh );
- loader->pp2.x = FT_PIX_ROUND( pp2x_uh );
-
- if ( loader->pp1.x >= new_lsb && old_lsb > 0 )
- loader->pp1.x -= 64;
-
- if ( loader->pp2.x <= edge2->pos && old_rsb > 0 )
- loader->pp2.x += 64;
-
- slot->lsb_delta = loader->pp1.x - pp1x_uh;
- slot->rsb_delta = loader->pp2.x - pp2x_uh;
- }
- else
- {
- FT_Pos pp1x = loader->pp1.x;
- FT_Pos pp2x = loader->pp2.x;
-
-
- loader->pp1.x = FT_PIX_ROUND( pp1x + hints->xmin_delta );
- loader->pp2.x = FT_PIX_ROUND( pp2x + hints->xmax_delta );
-
- slot->lsb_delta = loader->pp1.x - pp1x;
- slot->rsb_delta = loader->pp2.x - pp2x;
- }
- }
- /* `light' mode uses integer advance widths */
- /* but sets `lsb_delta' and `rsb_delta' */
- else
- {
- FT_Pos pp1x = loader->pp1.x;
- FT_Pos pp2x = loader->pp2.x;
-
-
- loader->pp1.x = FT_PIX_ROUND( pp1x );
- loader->pp2.x = FT_PIX_ROUND( pp2x );
-
- slot->lsb_delta = loader->pp1.x - pp1x;
- slot->rsb_delta = loader->pp2.x - pp2x;
- }
-
- break;
-
- default:
- /* we don't support other formats (yet?) */
- error = FT_THROW( Unimplemented_Feature );
- }
-
- Hint_Metrics:
- {
- FT_BBox bbox;
- FT_Vector vvector;
-
-
- vvector.x = slot->metrics.vertBearingX - slot->metrics.horiBearingX;
- vvector.y = slot->metrics.vertBearingY - slot->metrics.horiBearingY;
- vvector.x = FT_MulFix( vvector.x, style_metrics->scaler.x_scale );
- vvector.y = FT_MulFix( vvector.y, style_metrics->scaler.y_scale );
-
- /* transform the hinted outline if needed */
- if ( loader->transformed )
- {
- FT_Outline_Transform( &gloader->base.outline, &loader->trans_matrix );
- FT_Vector_Transform( &vvector, &loader->trans_matrix );
- }
-
- /* we must translate our final outline by -pp1.x and compute */
- /* the new metrics */
- if ( loader->pp1.x )
- FT_Outline_Translate( &gloader->base.outline, -loader->pp1.x, 0 );
-
- FT_Outline_Get_CBox( &gloader->base.outline, &bbox );
-
- bbox.xMin = FT_PIX_FLOOR( bbox.xMin );
- bbox.yMin = FT_PIX_FLOOR( bbox.yMin );
- bbox.xMax = FT_PIX_CEIL( bbox.xMax );
- bbox.yMax = FT_PIX_CEIL( bbox.yMax );
-
- slot->metrics.width = bbox.xMax - bbox.xMin;
- slot->metrics.height = bbox.yMax - bbox.yMin;
- slot->metrics.horiBearingX = bbox.xMin;
- slot->metrics.horiBearingY = bbox.yMax;
-
- slot->metrics.vertBearingX = FT_PIX_FLOOR( bbox.xMin + vvector.x );
- slot->metrics.vertBearingY = FT_PIX_FLOOR( bbox.yMax + vvector.y );
-
- /* for mono-width fonts (like Andale, Courier, etc.) we need */
- /* to keep the original rounded advance width; ditto for */
- /* digits if all have the same advance width */
- if ( scaler.render_mode != FT_RENDER_MODE_LIGHT &&
- ( FT_IS_FIXED_WIDTH( slot->face ) ||
- ( af_face_globals_is_digit( loader->globals, glyph_index ) &&
- style_metrics->digits_have_same_width ) ) )
- {
- slot->metrics.horiAdvance =
- FT_MulFix( slot->metrics.horiAdvance,
- style_metrics->scaler.x_scale );
-
- /* Set delta values to 0. Otherwise code that uses them is */
- /* going to ruin the fixed advance width. */
- slot->lsb_delta = 0;
- slot->rsb_delta = 0;
- }
- else
- {
- /* non-spacing glyphs must stay as-is */
- if ( slot->metrics.horiAdvance )
- slot->metrics.horiAdvance = loader->pp2.x - loader->pp1.x;
- }
-
- slot->metrics.vertAdvance = FT_MulFix( slot->metrics.vertAdvance,
- style_metrics->scaler.y_scale );
-
- slot->metrics.horiAdvance = FT_PIX_ROUND( slot->metrics.horiAdvance );
- slot->metrics.vertAdvance = FT_PIX_ROUND( slot->metrics.vertAdvance );
-
- slot->format = FT_GLYPH_FORMAT_OUTLINE;
- }
-
- Exit:
- return error;
- }
-
-
- /*
- * Compute amount of font units the face should be emboldened by, in
- * analogy to the CFF driver's `cf2_computeDarkening' function. See there
- * for details of the algorithm.
- *
- * XXX: Currently a crude adaption of the original algorithm. Do better?
- */
- FT_LOCAL_DEF( FT_Int32 )
- af_loader_compute_darkening( AF_Loader loader,
- FT_Face face,
- FT_Pos standard_width )
- {
- AF_Module module = loader->globals->module;
-
- FT_UShort units_per_EM;
- FT_Fixed ppem, em_ratio;
- FT_Fixed stem_width, stem_width_per_1000, scaled_stem, darken_amount;
- FT_Int log_base_2;
- FT_Int x1, y1, x2, y2, x3, y3, x4, y4;
-
-
- ppem = FT_MAX( af_intToFixed( 4 ),
- af_intToFixed( face->size->metrics.x_ppem ) );
- units_per_EM = face->units_per_EM;
-
- em_ratio = FT_DivFix( af_intToFixed( 1000 ),
- af_intToFixed ( units_per_EM ) );
- if ( em_ratio < af_floatToFixed( .01 ) )
- {
- /* If something goes wrong, don't embolden. */
- return 0;
- }
-
- x1 = module->darken_params[0];
- y1 = module->darken_params[1];
- x2 = module->darken_params[2];
- y2 = module->darken_params[3];
- x3 = module->darken_params[4];
- y3 = module->darken_params[5];
- x4 = module->darken_params[6];
- y4 = module->darken_params[7];
-
- if ( standard_width <= 0 )
- {
- stem_width = af_intToFixed( 75 ); /* taken from cf2font.c */
- stem_width_per_1000 = stem_width;
- }
- else
- {
- stem_width = af_intToFixed( standard_width );
- stem_width_per_1000 = FT_MulFix( stem_width, em_ratio );
- }
-
- log_base_2 = FT_MSB( (FT_UInt32)stem_width_per_1000 ) +
- FT_MSB( (FT_UInt32)ppem );
-
- if ( log_base_2 >= 46 )
- {
- /* possible overflow */
- scaled_stem = af_intToFixed( x4 );
- }
- else
- scaled_stem = FT_MulFix( stem_width_per_1000, ppem );
-
- /* now apply the darkening parameters */
- if ( scaled_stem < af_intToFixed( x1 ) )
- darken_amount = FT_DivFix( af_intToFixed( y1 ), ppem );
-
- else if ( scaled_stem < af_intToFixed( x2 ) )
- {
- FT_Int xdelta = x2 - x1;
- FT_Int ydelta = y2 - y1;
- FT_Int x = stem_width_per_1000 -
- FT_DivFix( af_intToFixed( x1 ), ppem );
-
-
- if ( !xdelta )
- goto Try_x3;
-
- darken_amount = FT_MulDiv( x, ydelta, xdelta ) +
- FT_DivFix( af_intToFixed( y1 ), ppem );
- }
-
- else if ( scaled_stem < af_intToFixed( x3 ) )
- {
- Try_x3:
- {
- FT_Int xdelta = x3 - x2;
- FT_Int ydelta = y3 - y2;
- FT_Int x = stem_width_per_1000 -
- FT_DivFix( af_intToFixed( x2 ), ppem );
-
-
- if ( !xdelta )
- goto Try_x4;
-
- darken_amount = FT_MulDiv( x, ydelta, xdelta ) +
- FT_DivFix( af_intToFixed( y2 ), ppem );
- }
- }
-
- else if ( scaled_stem < af_intToFixed( x4 ) )
- {
- Try_x4:
- {
- FT_Int xdelta = x4 - x3;
- FT_Int ydelta = y4 - y3;
- FT_Int x = stem_width_per_1000 -
- FT_DivFix( af_intToFixed( x3 ), ppem );
-
-
- if ( !xdelta )
- goto Use_y4;
-
- darken_amount = FT_MulDiv( x, ydelta, xdelta ) +
- FT_DivFix( af_intToFixed( y3 ), ppem );
- }
- }
-
- else
- {
- Use_y4:
- darken_amount = FT_DivFix( af_intToFixed( y4 ), ppem );
- }
-
- /* Convert darken_amount from per 1000 em to true character space. */
- return af_fixedToInt( FT_DivFix( darken_amount, em_ratio ) );
- }
-
-
-/* END */
diff --git a/src/autofit/afloader.h b/src/autofit/afloader.h
deleted file mode 100644
index 2578abed1..000000000
--- a/src/autofit/afloader.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/***************************************************************************/
-/* */
-/* afloader.h */
-/* */
-/* Auto-fitter glyph loading routines (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFLOADER_H_
-#define AFLOADER_H_
-
-#include "afhints.h"
-#include "afmodule.h"
-#include "afglobal.h"
-
-
-FT_BEGIN_HEADER
-
- /*
- * The autofitter module's (global) data structure to communicate with
- * actual fonts. If necessary, `local' data like the current face, the
- * current face's auto-hint data, or the current glyph's parameters
- * relevant to auto-hinting are `swapped in'. Cf. functions like
- * `af_loader_reset' and `af_loader_load_g'.
- */
-
- typedef struct AF_LoaderRec_
- {
- /* current face data */
- FT_Face face;
- AF_FaceGlobals globals;
-
- /* current glyph data */
- AF_GlyphHints hints;
- AF_StyleMetrics metrics;
- FT_Bool transformed;
- FT_Matrix trans_matrix;
- FT_Vector trans_delta;
- FT_Vector pp1;
- FT_Vector pp2;
- /* we don't handle vertical phantom points */
-
- } AF_LoaderRec, *AF_Loader;
-
-
- FT_LOCAL( void )
- af_loader_init( AF_Loader loader,
- AF_GlyphHints hints );
-
-
- FT_LOCAL( FT_Error )
- af_loader_reset( AF_Loader loader,
- AF_Module module,
- FT_Face face );
-
-
- FT_LOCAL( void )
- af_loader_done( AF_Loader loader );
-
-
- FT_LOCAL( FT_Error )
- af_loader_load_glyph( AF_Loader loader,
- AF_Module module,
- FT_Face face,
- FT_UInt gindex,
- FT_Int32 load_flags );
-
- FT_LOCAL_DEF( FT_Int32 )
- af_loader_compute_darkening( AF_Loader loader,
- FT_Face face,
- FT_Pos standard_width );
-
-/* */
-
-
-FT_END_HEADER
-
-#endif /* AFLOADER_H_ */
-
-
-/* END */
diff --git a/src/autofit/afmodule.c b/src/autofit/afmodule.c
deleted file mode 100644
index 9d7ba224d..000000000
--- a/src/autofit/afmodule.c
+++ /dev/null
@@ -1,600 +0,0 @@
-/***************************************************************************/
-/* */
-/* afmodule.c */
-/* */
-/* Auto-fitter module implementation (body). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "afglobal.h"
-#include "afmodule.h"
-#include "afloader.h"
-#include "aferrors.h"
-#include "afpic.h"
-
-#ifdef FT_DEBUG_AUTOFIT
-
-#ifndef FT_MAKE_OPTION_SINGLE_OBJECT
-
-#ifdef __cplusplus
- extern "C" {
-#endif
- extern void
- af_glyph_hints_dump_segments( AF_GlyphHints hints,
- FT_Bool to_stdout );
- extern void
- af_glyph_hints_dump_points( AF_GlyphHints hints,
- FT_Bool to_stdout );
- extern void
- af_glyph_hints_dump_edges( AF_GlyphHints hints,
- FT_Bool to_stdout );
-#ifdef __cplusplus
- }
-#endif
-
-#endif
-
- int _af_debug_disable_horz_hints;
- int _af_debug_disable_vert_hints;
- int _af_debug_disable_blue_hints;
-
- /* we use a global object instead of a local one for debugging */
- AF_GlyphHintsRec _af_debug_hints_rec[1];
-
- void* _af_debug_hints = _af_debug_hints_rec;
-#endif
-
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_AUTOHINTER_H
-#include FT_SERVICE_PROPERTIES_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_afmodule
-
-
- static FT_Error
- af_property_get_face_globals( FT_Face face,
- AF_FaceGlobals* aglobals,
- AF_Module module )
- {
- FT_Error error = FT_Err_Ok;
- AF_FaceGlobals globals;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- globals = (AF_FaceGlobals)face->autohint.data;
- if ( !globals )
- {
- /* trigger computation of the global style data */
- /* in case it hasn't been done yet */
- error = af_face_globals_new( face, &globals, module );
- if ( !error )
- {
- face->autohint.data =
- (FT_Pointer)globals;
- face->autohint.finalizer =
- (FT_Generic_Finalizer)af_face_globals_free;
- }
- }
-
- if ( !error )
- *aglobals = globals;
-
- return error;
- }
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
-#undef AF_SCRIPT_CLASSES_GET
-#define AF_SCRIPT_CLASSES_GET \
- ( GET_PIC( ft_module->library )->af_script_classes )
-
-#undef AF_STYLE_CLASSES_GET
-#define AF_STYLE_CLASSES_GET \
- ( GET_PIC( ft_module->library )->af_style_classes )
-
-#endif
-
-
- static FT_Error
- af_property_set( FT_Module ft_module,
- const char* property_name,
- const void* value,
- FT_Bool value_is_string )
- {
- FT_Error error = FT_Err_Ok;
- AF_Module module = (AF_Module)ft_module;
-
-#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- FT_UNUSED( value_is_string );
-#endif
-
-
- if ( !ft_strcmp( property_name, "fallback-script" ) )
- {
- FT_UInt* fallback_script;
- FT_UInt ss;
-
-
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- if ( value_is_string )
- return FT_THROW( Invalid_Argument );
-#endif
-
- fallback_script = (FT_UInt*)value;
-
- /* We translate the fallback script to a fallback style that uses */
- /* `fallback-script' as its script and `AF_COVERAGE_NONE' as its */
- /* coverage value. */
- for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ )
- {
- AF_StyleClass style_class = AF_STYLE_CLASSES_GET[ss];
-
-
- if ( (FT_UInt)style_class->script == *fallback_script &&
- style_class->coverage == AF_COVERAGE_DEFAULT )
- {
- module->fallback_style = ss;
- break;
- }
- }
-
- if ( !AF_STYLE_CLASSES_GET[ss] )
- {
- FT_TRACE0(( "af_property_set: Invalid value %d for property `%s'\n",
- fallback_script, property_name ));
- return FT_THROW( Invalid_Argument );
- }
-
- return error;
- }
- else if ( !ft_strcmp( property_name, "default-script" ) )
- {
- FT_UInt* default_script;
-
-
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- if ( value_is_string )
- return FT_THROW( Invalid_Argument );
-#endif
-
- default_script = (FT_UInt*)value;
-
- module->default_script = *default_script;
-
- return error;
- }
- else if ( !ft_strcmp( property_name, "increase-x-height" ) )
- {
- FT_Prop_IncreaseXHeight* prop;
- AF_FaceGlobals globals;
-
-
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- if ( value_is_string )
- return FT_THROW( Invalid_Argument );
-#endif
-
- prop = (FT_Prop_IncreaseXHeight*)value;
-
- error = af_property_get_face_globals( prop->face, &globals, module );
- if ( !error )
- globals->increase_x_height = prop->limit;
-
- return error;
- }
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- else if ( !ft_strcmp( property_name, "warping" ) )
- {
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- if ( value_is_string )
- {
- const char* s = (const char*)value;
- long w = ft_strtol( s, NULL, 10 );
-
-
- if ( w == 0 )
- module->warping = 0;
- else if ( w == 1 )
- module->warping = 1;
- else
- return FT_THROW( Invalid_Argument );
- }
- else
-#endif
- {
- FT_Bool* warping = (FT_Bool*)value;
-
-
- module->warping = *warping;
- }
-
- return error;
- }
-#endif /* AF_CONFIG_OPTION_USE_WARPER */
- else if ( !ft_strcmp( property_name, "darkening-parameters" ) )
- {
- FT_Int* darken_params;
- FT_Int x1, y1, x2, y2, x3, y3, x4, y4;
-
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- FT_Int dp[8];
-
-
- if ( value_is_string )
- {
- const char* s = (const char*)value;
- char* ep;
- int i;
-
-
- /* eight comma-separated numbers */
- for ( i = 0; i < 7; i++ )
- {
- dp[i] = (FT_Int)ft_strtol( s, &ep, 10 );
- if ( *ep != ',' || s == ep )
- return FT_THROW( Invalid_Argument );
-
- s = ep + 1;
- }
-
- dp[7] = (FT_Int)ft_strtol( s, &ep, 10 );
- if ( !( *ep == '\0' || *ep == ' ' ) || s == ep )
- return FT_THROW( Invalid_Argument );
-
- darken_params = dp;
- }
- else
-#endif
- darken_params = (FT_Int*)value;
-
- x1 = darken_params[0];
- y1 = darken_params[1];
- x2 = darken_params[2];
- y2 = darken_params[3];
- x3 = darken_params[4];
- y3 = darken_params[5];
- x4 = darken_params[6];
- y4 = darken_params[7];
-
- if ( x1 < 0 || x2 < 0 || x3 < 0 || x4 < 0 ||
- y1 < 0 || y2 < 0 || y3 < 0 || y4 < 0 ||
- x1 > x2 || x2 > x3 || x3 > x4 ||
- y1 > 500 || y2 > 500 || y3 > 500 || y4 > 500 )
- return FT_THROW( Invalid_Argument );
-
- module->darken_params[0] = x1;
- module->darken_params[1] = y1;
- module->darken_params[2] = x2;
- module->darken_params[3] = y2;
- module->darken_params[4] = x3;
- module->darken_params[5] = y3;
- module->darken_params[6] = x4;
- module->darken_params[7] = y4;
-
- return error;
- }
- else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
- {
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- if ( value_is_string )
- {
- const char* s = (const char*)value;
- long nsd = ft_strtol( s, NULL, 10 );
-
-
- if ( !nsd )
- module->no_stem_darkening = FALSE;
- else
- module->no_stem_darkening = TRUE;
- }
- else
-#endif
- {
- FT_Bool* no_stem_darkening = (FT_Bool*)value;
-
-
- module->no_stem_darkening = *no_stem_darkening;
- }
-
- return error;
- }
-
- FT_TRACE0(( "af_property_set: missing property `%s'\n",
- property_name ));
- return FT_THROW( Missing_Property );
- }
-
-
- static FT_Error
- af_property_get( FT_Module ft_module,
- const char* property_name,
- void* value )
- {
- FT_Error error = FT_Err_Ok;
- AF_Module module = (AF_Module)ft_module;
- FT_UInt fallback_style = module->fallback_style;
- FT_UInt default_script = module->default_script;
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- FT_Bool warping = module->warping;
-#endif
-
-
- if ( !ft_strcmp( property_name, "glyph-to-script-map" ) )
- {
- FT_Prop_GlyphToScriptMap* prop = (FT_Prop_GlyphToScriptMap*)value;
- AF_FaceGlobals globals;
-
-
- error = af_property_get_face_globals( prop->face, &globals, module );
- if ( !error )
- prop->map = globals->glyph_styles;
-
- return error;
- }
- else if ( !ft_strcmp( property_name, "fallback-script" ) )
- {
- FT_UInt* val = (FT_UInt*)value;
-
- AF_StyleClass style_class = AF_STYLE_CLASSES_GET[fallback_style];
-
-
- *val = style_class->script;
-
- return error;
- }
- else if ( !ft_strcmp( property_name, "default-script" ) )
- {
- FT_UInt* val = (FT_UInt*)value;
-
-
- *val = default_script;
-
- return error;
- }
- else if ( !ft_strcmp( property_name, "increase-x-height" ) )
- {
- FT_Prop_IncreaseXHeight* prop = (FT_Prop_IncreaseXHeight*)value;
- AF_FaceGlobals globals;
-
-
- error = af_property_get_face_globals( prop->face, &globals, module );
- if ( !error )
- prop->limit = globals->increase_x_height;
-
- return error;
- }
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- else if ( !ft_strcmp( property_name, "warping" ) )
- {
- FT_Bool* val = (FT_Bool*)value;
-
-
- *val = warping;
-
- return error;
- }
-#endif /* AF_CONFIG_OPTION_USE_WARPER */
- else if ( !ft_strcmp( property_name, "darkening-parameters" ) )
- {
- FT_Int* darken_params = module->darken_params;
- FT_Int* val = (FT_Int*)value;
-
-
- val[0] = darken_params[0];
- val[1] = darken_params[1];
- val[2] = darken_params[2];
- val[3] = darken_params[3];
- val[4] = darken_params[4];
- val[5] = darken_params[5];
- val[6] = darken_params[6];
- val[7] = darken_params[7];
-
- return error;
- }
- else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
- {
- FT_Bool no_stem_darkening = module->no_stem_darkening;
- FT_Bool* val = (FT_Bool*)value;
-
-
- *val = no_stem_darkening;
-
- return error;
- }
-
- FT_TRACE0(( "af_property_get: missing property `%s'\n",
- property_name ));
- return FT_THROW( Missing_Property );
- }
-
-
- FT_DEFINE_SERVICE_PROPERTIESREC(
- af_service_properties,
-
- (FT_Properties_SetFunc)af_property_set, /* set_property */
- (FT_Properties_GetFunc)af_property_get ) /* get_property */
-
-
- FT_DEFINE_SERVICEDESCREC1(
- af_services,
-
- FT_SERVICE_ID_PROPERTIES, &AF_SERVICE_PROPERTIES_GET )
-
-
- FT_CALLBACK_DEF( FT_Module_Interface )
- af_get_interface( FT_Module module,
- const char* module_interface )
- {
- /* AF_SERVICES_GET dereferences `library' in PIC mode */
-#ifdef FT_CONFIG_OPTION_PIC
- FT_Library library;
-
-
- if ( !module )
- return NULL;
- library = module->library;
- if ( !library )
- return NULL;
-#else
- FT_UNUSED( module );
-#endif
-
- return ft_service_list_lookup( AF_SERVICES_GET, module_interface );
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- af_autofitter_init( FT_Module ft_module ) /* AF_Module */
- {
- AF_Module module = (AF_Module)ft_module;
-
-
- module->fallback_style = AF_STYLE_FALLBACK;
- module->default_script = AF_SCRIPT_DEFAULT;
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- module->warping = 0;
-#endif
- module->no_stem_darkening = TRUE;
-
- module->darken_params[0] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1;
- module->darken_params[1] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1;
- module->darken_params[2] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2;
- module->darken_params[3] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2;
- module->darken_params[4] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3;
- module->darken_params[5] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3;
- module->darken_params[6] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4;
- module->darken_params[7] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4;
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( void )
- af_autofitter_done( FT_Module ft_module ) /* AF_Module */
- {
- FT_UNUSED( ft_module );
-
-#ifdef FT_DEBUG_AUTOFIT
- if ( _af_debug_hints_rec->memory )
- af_glyph_hints_done( _af_debug_hints_rec );
-#endif
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- af_autofitter_load_glyph( AF_Module module,
- FT_GlyphSlot slot,
- FT_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- FT_Error error = FT_Err_Ok;
- FT_Memory memory = module->root.library->memory;
-
-#ifdef FT_DEBUG_AUTOFIT
-
- /* in debug mode, we use a global object that survives this routine */
-
- AF_GlyphHints hints = _af_debug_hints_rec;
- AF_LoaderRec loader[1];
-
- FT_UNUSED( size );
-
-
- if ( hints->memory )
- af_glyph_hints_done( hints );
-
- af_glyph_hints_init( hints, memory );
- af_loader_init( loader, hints );
-
- error = af_loader_load_glyph( loader, module, slot->face,
- glyph_index, load_flags );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( ft_trace_levels[FT_COMPONENT] )
- {
-#endif
- af_glyph_hints_dump_points( hints, 0 );
- af_glyph_hints_dump_segments( hints, 0 );
- af_glyph_hints_dump_edges( hints, 0 );
-#ifdef FT_DEBUG_LEVEL_TRACE
- }
-#endif
-
- af_loader_done( loader );
-
- return error;
-
-#else /* !FT_DEBUG_AUTOFIT */
-
- AF_GlyphHintsRec hints[1];
- AF_LoaderRec loader[1];
-
- FT_UNUSED( size );
-
-
- af_glyph_hints_init( hints, memory );
- af_loader_init( loader, hints );
-
- error = af_loader_load_glyph( loader, module, slot->face,
- glyph_index, load_flags );
-
- af_loader_done( loader );
- af_glyph_hints_done( hints );
-
- return error;
-
-#endif /* !FT_DEBUG_AUTOFIT */
- }
-
-
- FT_DEFINE_AUTOHINTER_INTERFACE(
- af_autofitter_interface,
-
- NULL, /* reset_face */
- NULL, /* get_global_hints */
- NULL, /* done_global_hints */
- (FT_AutoHinter_GlyphLoadFunc)af_autofitter_load_glyph ) /* load_glyph */
-
-
- FT_DEFINE_MODULE(
- autofit_module_class,
-
- FT_MODULE_HINTER,
- sizeof ( AF_ModuleRec ),
-
- "autofitter",
- 0x10000L, /* version 1.0 of the autofitter */
- 0x20000L, /* requires FreeType 2.0 or above */
-
- (const void*)&AF_INTERFACE_GET,
-
- (FT_Module_Constructor)af_autofitter_init, /* module_init */
- (FT_Module_Destructor) af_autofitter_done, /* module_done */
- (FT_Module_Requester) af_get_interface /* get_interface */
- )
-
-
-/* END */
diff --git a/src/autofit/afmodule.h b/src/autofit/afmodule.h
deleted file mode 100644
index 0571d14d5..000000000
--- a/src/autofit/afmodule.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/***************************************************************************/
-/* */
-/* afmodule.h */
-/* */
-/* Auto-fitter module implementation (specification). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFMODULE_H_
-#define AFMODULE_H_
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_MODULE_H
-
-
-FT_BEGIN_HEADER
-
-
- /*
- * This is the `extended' FT_Module structure that holds the
- * autofitter's global data.
- */
-
- typedef struct AF_ModuleRec_
- {
- FT_ModuleRec root;
-
- FT_UInt fallback_style;
- FT_UInt default_script;
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- FT_Bool warping;
-#endif
- FT_Bool no_stem_darkening;
- FT_Int darken_params[8];
-
- } AF_ModuleRec, *AF_Module;
-
-
-FT_DECLARE_MODULE( autofit_module_class )
-
-
-FT_END_HEADER
-
-#endif /* AFMODULE_H_ */
-
-
-/* END */
diff --git a/src/autofit/afpic.c b/src/autofit/afpic.c
deleted file mode 100644
index 3125e03e2..000000000
--- a/src/autofit/afpic.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/***************************************************************************/
-/* */
-/* afpic.c */
-/* */
-/* The FreeType position independent code services for autofit module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "afpic.h"
-#include "afglobal.h"
-#include "aferrors.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from afmodule.c */
- FT_Error
- FT_Create_Class_af_services( FT_Library library,
- FT_ServiceDescRec** output_class );
-
- void
- FT_Destroy_Class_af_services( FT_Library library,
- FT_ServiceDescRec* clazz );
-
- void
- FT_Init_Class_af_service_properties( FT_Service_PropertiesRec* clazz );
-
- void FT_Init_Class_af_autofitter_interface(
- FT_Library library,
- FT_AutoHinter_InterfaceRec* clazz );
-
-
- /* forward declaration of PIC init functions from writing system classes */
-#undef WRITING_SYSTEM
-#define WRITING_SYSTEM( ws, WS ) /* empty */
-
-#include "afwrtsys.h"
-
-
- void
- autofit_module_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->autofit )
- {
- AFModulePIC* container = (AFModulePIC*)pic_container->autofit;
-
-
- if ( container->af_services )
- FT_Destroy_Class_af_services( library,
- container->af_services );
- container->af_services = NULL;
-
- FT_FREE( container );
- pic_container->autofit = NULL;
- }
- }
-
-
- FT_Error
- autofit_module_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_UInt ss;
- FT_Error error = FT_Err_Ok;
- AFModulePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC ( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->autofit = container;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- error = FT_Create_Class_af_services( library,
- &container->af_services );
- if ( error )
- goto Exit;
-
- FT_Init_Class_af_service_properties( &container->af_service_properties );
-
- for ( ss = 0; ss < AF_WRITING_SYSTEM_MAX; ss++ )
- container->af_writing_system_classes[ss] =
- &container->af_writing_system_classes_rec[ss];
- container->af_writing_system_classes[AF_WRITING_SYSTEM_MAX] = NULL;
-
- for ( ss = 0; ss < AF_SCRIPT_MAX; ss++ )
- container->af_script_classes[ss] =
- &container->af_script_classes_rec[ss];
- container->af_script_classes[AF_SCRIPT_MAX] = NULL;
-
- for ( ss = 0; ss < AF_STYLE_MAX; ss++ )
- container->af_style_classes[ss] =
- &container->af_style_classes_rec[ss];
- container->af_style_classes[AF_STYLE_MAX] = NULL;
-
-#undef WRITING_SYSTEM
-#define WRITING_SYSTEM( ws, WS ) \
- FT_Init_Class_af_ ## ws ## _writing_system_class( \
- &container->af_writing_system_classes_rec[ss++] );
-
- ss = 0;
-#include "afwrtsys.h"
-
-#undef SCRIPT
-#define SCRIPT( s, S, d, h, H, sss ) \
- FT_Init_Class_af_ ## s ## _script_class( \
- &container->af_script_classes_rec[ss++] );
-
- ss = 0;
-#include "afscript.h"
-
-#undef STYLE
-#define STYLE( s, S, d, ws, sc, bss, c ) \
- FT_Init_Class_af_ ## s ## _style_class( \
- &container->af_style_classes_rec[ss++] );
-
- ss = 0;
-#include "afstyles.h"
-
- FT_Init_Class_af_autofitter_interface(
- library, &container->af_autofitter_interface );
-
- Exit:
- if ( error )
- autofit_module_class_pic_free( library );
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/autofit/afpic.h b/src/autofit/afpic.h
deleted file mode 100644
index 8cd339212..000000000
--- a/src/autofit/afpic.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/***************************************************************************/
-/* */
-/* afpic.h */
-/* */
-/* The FreeType position independent code services for autofit module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFPIC_H_
-#define AFPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define AF_SERVICES_GET af_services
-#define AF_SERVICE_PROPERTIES_GET af_service_properties
-
-#define AF_WRITING_SYSTEM_CLASSES_GET af_writing_system_classes
-#define AF_SCRIPT_CLASSES_GET af_script_classes
-#define AF_STYLE_CLASSES_GET af_style_classes
-#define AF_INTERFACE_GET af_autofitter_interface
-
-#else /* FT_CONFIG_OPTION_PIC */
-
- /* some include files required for members of AFModulePIC */
-#include FT_SERVICE_PROPERTIES_H
-
-#include "aftypes.h"
-
-
-FT_BEGIN_HEADER
-
- typedef struct AFModulePIC_
- {
- FT_ServiceDescRec* af_services;
- FT_Service_PropertiesRec af_service_properties;
-
- AF_WritingSystemClass af_writing_system_classes
- [AF_WRITING_SYSTEM_MAX + 1];
- AF_WritingSystemClassRec af_writing_system_classes_rec
- [AF_WRITING_SYSTEM_MAX];
-
- AF_ScriptClass af_script_classes
- [AF_SCRIPT_MAX + 1];
- AF_ScriptClassRec af_script_classes_rec
- [AF_SCRIPT_MAX];
-
- AF_StyleClass af_style_classes
- [AF_STYLE_MAX + 1];
- AF_StyleClassRec af_style_classes_rec
- [AF_STYLE_MAX];
-
- FT_AutoHinter_InterfaceRec af_autofitter_interface;
-
- } AFModulePIC;
-
-
-#define GET_PIC( lib ) \
- ( (AFModulePIC*)( (lib)->pic_container.autofit ) )
-
-#define AF_SERVICES_GET \
- ( GET_PIC( library )->af_services )
-#define AF_SERVICE_PROPERTIES_GET \
- ( GET_PIC( library )->af_service_properties )
-
-#define AF_WRITING_SYSTEM_CLASSES_GET \
- ( GET_PIC( FT_FACE_LIBRARY( globals->face ) )->af_writing_system_classes )
-#define AF_SCRIPT_CLASSES_GET \
- ( GET_PIC( FT_FACE_LIBRARY( globals->face ) )->af_script_classes )
-#define AF_STYLE_CLASSES_GET \
- ( GET_PIC( FT_FACE_LIBRARY( globals->face ) )->af_style_classes )
-#define AF_INTERFACE_GET \
- ( GET_PIC( library )->af_autofitter_interface )
-
-
- /* see afpic.c for the implementation */
- void
- autofit_module_class_pic_free( FT_Library library );
-
- FT_Error
- autofit_module_class_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* AFPIC_H_ */
-
-
-/* END */
diff --git a/src/autofit/afranges.c b/src/autofit/afranges.c
deleted file mode 100644
index 7f37eea1e..000000000
--- a/src/autofit/afranges.c
+++ /dev/null
@@ -1,1026 +0,0 @@
-/***************************************************************************/
-/* */
-/* afranges.c */
-/* */
-/* Auto-fitter Unicode script ranges (body). */
-/* */
-/* Copyright 2013-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "afranges.h"
-
- /*
- * The algorithm for assigning properties and styles to the `glyph_styles'
- * array is as follows (cf. the implementation in
- * `af_face_globals_compute_style_coverage').
- *
- * Walk over all scripts (as listed in `afscript.h').
- *
- * For a given script, walk over all styles (as listed in `afstyles.h').
- * The order of styles is important and should be as follows.
- *
- * - First come styles based on OpenType features (small caps, for
- * example). Since features rely on glyph indices, thus completely
- * bypassing character codes, no properties are assigned.
- *
- * - Next comes the default style, using the character ranges as defined
- * below. This also assigns properties.
- *
- * Note that there also exist fallback scripts, mainly covering
- * superscript and subscript glyphs of a script that are not present as
- * OpenType features. Fallback scripts are defined below, also
- * assigning properties; they are applied after the corresponding
- * script.
- *
- */
-
-
- /* XXX Check base character ranges again: */
- /* Right now, they are quickly derived by visual inspection. */
- /* I can imagine that fine-tuning is necessary. */
-
- /* for the auto-hinter, a `non-base character' is something that should */
- /* not be affected by blue zones, regardless of whether this is a */
- /* spacing or no-spacing glyph */
-
- /* the `af_xxxx_nonbase_uniranges' ranges must be strict subsets */
- /* of the corresponding `af_xxxx_uniranges' ranges */
-
-
- const AF_Script_UniRangeRec af_adlm_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1E900, 0x1E95F ), /* Adlam */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_adlm_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1D944, 0x1E94A ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_arab_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0600, 0x06FF ), /* Arabic */
- AF_UNIRANGE_REC( 0x0750, 0x07FF ), /* Arabic Supplement */
- AF_UNIRANGE_REC( 0x08A0, 0x08FF ), /* Arabic Extended-A */
- AF_UNIRANGE_REC( 0xFB50, 0xFDFF ), /* Arabic Presentation Forms-A */
- AF_UNIRANGE_REC( 0xFE70, 0xFEFF ), /* Arabic Presentation Forms-B */
- AF_UNIRANGE_REC( 0x1EE00, 0x1EEFF ), /* Arabic Mathematical Alphabetic Symbols */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_arab_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0600, 0x0605 ),
- AF_UNIRANGE_REC( 0x0610, 0x061A ),
- AF_UNIRANGE_REC( 0x064B, 0x065F ),
- AF_UNIRANGE_REC( 0x0670, 0x0670 ),
- AF_UNIRANGE_REC( 0x06D6, 0x06DC ),
- AF_UNIRANGE_REC( 0x06DF, 0x06E4 ),
- AF_UNIRANGE_REC( 0x06E7, 0x06E8 ),
- AF_UNIRANGE_REC( 0x06EA, 0x06ED ),
- AF_UNIRANGE_REC( 0x08D4, 0x08E1 ),
- AF_UNIRANGE_REC( 0x08E3, 0x08FF ),
- AF_UNIRANGE_REC( 0xFBB2, 0xFBC1 ),
- AF_UNIRANGE_REC( 0xFE70, 0xFE70 ),
- AF_UNIRANGE_REC( 0xFE72, 0xFE72 ),
- AF_UNIRANGE_REC( 0xFE74, 0xFE74 ),
- AF_UNIRANGE_REC( 0xFE76, 0xFE76 ),
- AF_UNIRANGE_REC( 0xFE78, 0xFE78 ),
- AF_UNIRANGE_REC( 0xFE7A, 0xFE7A ),
- AF_UNIRANGE_REC( 0xFE7C, 0xFE7C ),
- AF_UNIRANGE_REC( 0xFE7E, 0xFE7E ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_armn_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0530, 0x058F ), /* Armenian */
- AF_UNIRANGE_REC( 0xFB13, 0xFB17 ), /* Alphab. Present. Forms (Armenian) */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_armn_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0559, 0x055F ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_avst_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x10B00, 0x10B3F ), /* Avestan */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_avst_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x10B39, 0x10B3F ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_bamu_uniranges[] =
- {
- AF_UNIRANGE_REC( 0xA6A0, 0xA6FF ), /* Bamum */
-#if 0
- /* The characters in the Bamum supplement are pictograms, */
- /* not (directly) related to the syllabic Bamum script */
- AF_UNIRANGE_REC( 0x16800, 0x16A3F ), /* Bamum Supplement */
-#endif
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_bamu_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0xA6F0, 0xA6F1 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_beng_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0980, 0x09FF ), /* Bengali */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_beng_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0981, 0x0981 ),
- AF_UNIRANGE_REC( 0x09BC, 0x09BC ),
- AF_UNIRANGE_REC( 0x09C1, 0x09C4 ),
- AF_UNIRANGE_REC( 0x09CD, 0x09CD ),
- AF_UNIRANGE_REC( 0x09E2, 0x09E3 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_buhd_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1740, 0x175F ), /* Buhid */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_buhd_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1752, 0x1753 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_cakm_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x11100, 0x1114F ), /* Chakma */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_cakm_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x11100, 0x11102 ),
- AF_UNIRANGE_REC( 0x11127, 0x11134 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_cans_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1400, 0x167F ), /* Unified Canadian Aboriginal Syllabics */
- AF_UNIRANGE_REC( 0x18B0, 0x18FF ), /* Unified Canadian Aboriginal Syllabics Extended */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_cans_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_cari_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x102A0, 0x102DF ), /* Carian */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_cari_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_cher_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x13A0, 0x13FF ), /* Cherokee */
- AF_UNIRANGE_REC( 0xAB70, 0xABBF ), /* Cherokee Supplement */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_cher_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_copt_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x2C80, 0x2CFF ), /* Coptic */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_copt_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x2CEF, 0x2CF1 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_cprt_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x10800, 0x1083F ), /* Cypriot */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_cprt_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_cyrl_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0400, 0x04FF ), /* Cyrillic */
- AF_UNIRANGE_REC( 0x0500, 0x052F ), /* Cyrillic Supplement */
- AF_UNIRANGE_REC( 0x2DE0, 0x2DFF ), /* Cyrillic Extended-A */
- AF_UNIRANGE_REC( 0xA640, 0xA69F ), /* Cyrillic Extended-B */
- AF_UNIRANGE_REC( 0x1C80, 0x1C8F ), /* Cyrillic Extended-C */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_cyrl_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0483, 0x0489 ),
- AF_UNIRANGE_REC( 0x2DE0, 0x2DFF ),
- AF_UNIRANGE_REC( 0xA66F, 0xA67F ),
- AF_UNIRANGE_REC( 0xA69E, 0xA69F ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- /* There are some characters in the Devanagari Unicode block that are */
- /* generic to Indic scripts; we omit them so that their presence doesn't */
- /* trigger Devanagari. */
-
- const AF_Script_UniRangeRec af_deva_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0900, 0x093B ), /* Devanagari */
- /* omitting U+093C nukta */
- AF_UNIRANGE_REC( 0x093D, 0x0950 ), /* ... continued */
- /* omitting U+0951 udatta, U+0952 anudatta */
- AF_UNIRANGE_REC( 0x0953, 0x0963 ), /* ... continued */
- /* omitting U+0964 danda, U+0965 double danda */
- AF_UNIRANGE_REC( 0x0966, 0x097F ), /* ... continued */
- AF_UNIRANGE_REC( 0x20B9, 0x20B9 ), /* (new) Rupee sign */
- AF_UNIRANGE_REC( 0xA8E0, 0xA8FF ), /* Devanagari Extended */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_deva_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0900, 0x0902 ),
- AF_UNIRANGE_REC( 0x093A, 0x093A ),
- AF_UNIRANGE_REC( 0x0941, 0x0948 ),
- AF_UNIRANGE_REC( 0x094D, 0x094D ),
- AF_UNIRANGE_REC( 0x0953, 0x0957 ),
- AF_UNIRANGE_REC( 0x0962, 0x0963 ),
- AF_UNIRANGE_REC( 0xA8E0, 0xA8F1 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_dsrt_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x10400, 0x1044F ), /* Deseret */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_dsrt_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_ethi_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1200, 0x137F ), /* Ethiopic */
- AF_UNIRANGE_REC( 0x1380, 0x139F ), /* Ethiopic Supplement */
- AF_UNIRANGE_REC( 0x2D80, 0x2DDF ), /* Ethiopic Extended */
- AF_UNIRANGE_REC( 0xAB00, 0xAB2F ), /* Ethiopic Extended-A */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_ethi_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x135D, 0x135F ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_geor_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x10D0, 0x10FF ), /* Georgian (Mkhedruli) */
-#if 0
- /* the following range is proposed for inclusion in Unicode */
- AF_UNIRANGE_REC( 0x1C90, 0x1CBF ), /* Georgian (Mtavruli) */
-#endif
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_geor_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_geok_uniranges[] =
- {
- /* Khutsuri */
- AF_UNIRANGE_REC( 0x10A0, 0x10CD ), /* Georgian (Asomtavruli) */
- AF_UNIRANGE_REC( 0x2D00, 0x2D2D ), /* Georgian (Nuskhuri) */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_geok_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_glag_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x2C00, 0x2C5F ), /* Glagolitic */
- AF_UNIRANGE_REC( 0x1E000, 0x1E02F ), /* Glagolitic Supplement */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_glag_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1E000, 0x1E02F ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_goth_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x10330, 0x1034F ), /* Gothic */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_goth_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_grek_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0370, 0x03FF ), /* Greek and Coptic */
- AF_UNIRANGE_REC( 0x1F00, 0x1FFF ), /* Greek Extended */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_grek_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x037A, 0x037A ),
- AF_UNIRANGE_REC( 0x0384, 0x0385 ),
- AF_UNIRANGE_REC( 0x1FBD, 0x1FC1 ),
- AF_UNIRANGE_REC( 0x1FCD, 0x1FCF ),
- AF_UNIRANGE_REC( 0x1FDD, 0x1FDF ),
- AF_UNIRANGE_REC( 0x1FED, 0x1FEF ),
- AF_UNIRANGE_REC( 0x1FFD, 0x1FFE ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_gujr_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0A80, 0x0AFF ), /* Gujarati */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_gujr_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0A81, 0x0A82 ),
- AF_UNIRANGE_REC( 0x0ABC, 0x0ABC ),
- AF_UNIRANGE_REC( 0x0AC1, 0x0AC8 ),
- AF_UNIRANGE_REC( 0x0ACD, 0x0ACD ),
- AF_UNIRANGE_REC( 0x0AE2, 0x0AE3 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_guru_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0A00, 0x0A7F ), /* Gurmukhi */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_guru_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0A01, 0x0A02 ),
- AF_UNIRANGE_REC( 0x0A3C, 0x0A3C ),
- AF_UNIRANGE_REC( 0x0A41, 0x0A51 ),
- AF_UNIRANGE_REC( 0x0A70, 0x0A71 ),
- AF_UNIRANGE_REC( 0x0A75, 0x0A75 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_hebr_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0590, 0x05FF ), /* Hebrew */
- AF_UNIRANGE_REC( 0xFB1D, 0xFB4F ), /* Alphab. Present. Forms (Hebrew) */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_hebr_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0591, 0x05BF ),
- AF_UNIRANGE_REC( 0x05C1, 0x05C2 ),
- AF_UNIRANGE_REC( 0x05C4, 0x05C5 ),
- AF_UNIRANGE_REC( 0x05C7, 0x05C7 ),
- AF_UNIRANGE_REC( 0xFB1E, 0xFB1E ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_kali_uniranges[] =
- {
- AF_UNIRANGE_REC( 0xA900, 0xA92F ), /* Kayah Li */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_kali_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0xA926, 0xA92D ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_knda_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0C80, 0x0CFF ), /* Kannada */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_knda_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0C81, 0x0C81 ),
- AF_UNIRANGE_REC( 0x0CBC, 0x0CBC ),
- AF_UNIRANGE_REC( 0x0CBF, 0x0CBF ),
- AF_UNIRANGE_REC( 0x0CC6, 0x0CC6 ),
- AF_UNIRANGE_REC( 0x0CCC, 0x0CCD ),
- AF_UNIRANGE_REC( 0x0CE2, 0x0CE3 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_khmr_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1780, 0x17FF ), /* Khmer */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_khmr_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x17B7, 0x17BD ),
- AF_UNIRANGE_REC( 0x17C6, 0x17C6 ),
- AF_UNIRANGE_REC( 0x17C9, 0x17D3 ),
- AF_UNIRANGE_REC( 0x17DD, 0x17DD ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_khms_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x19E0, 0x19FF ), /* Khmer Symbols */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_khms_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_lao_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0E80, 0x0EFF ), /* Lao */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_lao_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0EB1, 0x0EB1 ),
- AF_UNIRANGE_REC( 0x0EB4, 0x0EBC ),
- AF_UNIRANGE_REC( 0x0EC8, 0x0ECD ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_latn_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0020, 0x007F ), /* Basic Latin (no control chars) */
- AF_UNIRANGE_REC( 0x00A0, 0x00A9 ), /* Latin-1 Supplement (no control chars) */
- AF_UNIRANGE_REC( 0x00AB, 0x00B1 ), /* ... continued */
- AF_UNIRANGE_REC( 0x00B4, 0x00B8 ), /* ... continued */
- AF_UNIRANGE_REC( 0x00BB, 0x00FF ), /* ... continued */
- AF_UNIRANGE_REC( 0x0100, 0x017F ), /* Latin Extended-A */
- AF_UNIRANGE_REC( 0x0180, 0x024F ), /* Latin Extended-B */
- AF_UNIRANGE_REC( 0x0250, 0x02AF ), /* IPA Extensions */
- AF_UNIRANGE_REC( 0x02B9, 0x02DF ), /* Spacing Modifier Letters */
- AF_UNIRANGE_REC( 0x02E5, 0x02FF ), /* ... continued */
- AF_UNIRANGE_REC( 0x0300, 0x036F ), /* Combining Diacritical Marks */
- AF_UNIRANGE_REC( 0x1AB0, 0x1ABE ), /* Combining Diacritical Marks Extended */
- AF_UNIRANGE_REC( 0x1D00, 0x1D2B ), /* Phonetic Extensions */
- AF_UNIRANGE_REC( 0x1D6B, 0x1D77 ), /* ... continued */
- AF_UNIRANGE_REC( 0x1D79, 0x1D7F ), /* ... continued */
- AF_UNIRANGE_REC( 0x1D80, 0x1D9A ), /* Phonetic Extensions Supplement */
- AF_UNIRANGE_REC( 0x1DC0, 0x1DFF ), /* Combining Diacritical Marks Supplement */
- AF_UNIRANGE_REC( 0x1E00, 0x1EFF ), /* Latin Extended Additional */
- AF_UNIRANGE_REC( 0x2000, 0x206F ), /* General Punctuation */
- AF_UNIRANGE_REC( 0x20A0, 0x20B8 ), /* Currency Symbols ... */
- AF_UNIRANGE_REC( 0x20BA, 0x20CF ), /* ... except new Rupee sign */
- AF_UNIRANGE_REC( 0x2150, 0x218F ), /* Number Forms */
- AF_UNIRANGE_REC( 0x2C60, 0x2C7B ), /* Latin Extended-C */
- AF_UNIRANGE_REC( 0x2C7E, 0x2C7F ), /* ... continued */
- AF_UNIRANGE_REC( 0x2E00, 0x2E7F ), /* Supplemental Punctuation */
- AF_UNIRANGE_REC( 0xA720, 0xA76F ), /* Latin Extended-D */
- AF_UNIRANGE_REC( 0xA771, 0xA7F7 ), /* ... continued */
- AF_UNIRANGE_REC( 0xA7FA, 0xA7FF ), /* ... continued */
- AF_UNIRANGE_REC( 0xAB30, 0xAB5B ), /* Latin Extended-E */
- AF_UNIRANGE_REC( 0xAB60, 0xAB6F ), /* ... continued */
- AF_UNIRANGE_REC( 0xFB00, 0xFB06 ), /* Alphab. Present. Forms (Latin Ligs) */
- AF_UNIRANGE_REC( 0x1D400, 0x1D7FF ), /* Mathematical Alphanumeric Symbols */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_latn_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x005E, 0x0060 ),
- AF_UNIRANGE_REC( 0x007E, 0x007E ),
- AF_UNIRANGE_REC( 0x00A8, 0x00A9 ),
- AF_UNIRANGE_REC( 0x00AE, 0x00B0 ),
- AF_UNIRANGE_REC( 0x00B4, 0x00B4 ),
- AF_UNIRANGE_REC( 0x00B8, 0x00B8 ),
- AF_UNIRANGE_REC( 0x00BC, 0x00BE ),
- AF_UNIRANGE_REC( 0x02B9, 0x02DF ),
- AF_UNIRANGE_REC( 0x02E5, 0x02FF ),
- AF_UNIRANGE_REC( 0x0300, 0x036F ),
- AF_UNIRANGE_REC( 0x1AB0, 0x1ABE ),
- AF_UNIRANGE_REC( 0x1DC0, 0x1DFF ),
- AF_UNIRANGE_REC( 0x2017, 0x2017 ),
- AF_UNIRANGE_REC( 0x203E, 0x203E ),
- AF_UNIRANGE_REC( 0xA788, 0xA788 ),
- AF_UNIRANGE_REC( 0xA7F8, 0xA7FA ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_latb_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1D62, 0x1D6A ), /* some small subscript letters */
- AF_UNIRANGE_REC( 0x2080, 0x209C ), /* subscript digits and letters */
- AF_UNIRANGE_REC( 0x2C7C, 0x2C7C ), /* latin subscript small letter j */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_latb_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_latp_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x00AA, 0x00AA ), /* feminine ordinal indicator */
- AF_UNIRANGE_REC( 0x00B2, 0x00B3 ), /* superscript two and three */
- AF_UNIRANGE_REC( 0x00B9, 0x00BA ), /* superscript one, masc. ord. indic. */
- AF_UNIRANGE_REC( 0x02B0, 0x02B8 ), /* some latin superscript mod. letters */
- AF_UNIRANGE_REC( 0x02E0, 0x02E4 ), /* some IPA modifier letters */
- AF_UNIRANGE_REC( 0x1D2C, 0x1D61 ), /* latin superscript modifier letters */
- AF_UNIRANGE_REC( 0x1D78, 0x1D78 ), /* modifier letter cyrillic en */
- AF_UNIRANGE_REC( 0x1D9B, 0x1DBF ), /* more modifier letters */
- AF_UNIRANGE_REC( 0x2070, 0x207F ), /* superscript digits and letters */
- AF_UNIRANGE_REC( 0x2C7D, 0x2C7D ), /* modifier letter capital v */
- AF_UNIRANGE_REC( 0xA770, 0xA770 ), /* modifier letter us */
- AF_UNIRANGE_REC( 0xA7F8, 0xA7F9 ), /* more modifier letters */
- AF_UNIRANGE_REC( 0xAB5C, 0xAB5F ), /* more modifier letters */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_latp_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_lisu_uniranges[] =
- {
- AF_UNIRANGE_REC( 0xA4D0, 0xA4FF ), /* Lisu */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_lisu_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_mlym_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0D00, 0x0D7F ), /* Malayalam */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_mlym_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0D01, 0x0D01 ),
- AF_UNIRANGE_REC( 0x0D4D, 0x0D4E ),
- AF_UNIRANGE_REC( 0x0D62, 0x0D63 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_mymr_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1000, 0x109F ), /* Myanmar */
- AF_UNIRANGE_REC( 0xA9E0, 0xA9FF ), /* Myanmar Extended-B */
- AF_UNIRANGE_REC( 0xAA60, 0xAA7F ), /* Myanmar Extended-A */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_mymr_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x102D, 0x1030 ),
- AF_UNIRANGE_REC( 0x1032, 0x1037 ),
- AF_UNIRANGE_REC( 0x103A, 0x103A ),
- AF_UNIRANGE_REC( 0x103D, 0x103E ),
- AF_UNIRANGE_REC( 0x1058, 0x1059 ),
- AF_UNIRANGE_REC( 0x105E, 0x1060 ),
- AF_UNIRANGE_REC( 0x1071, 0x1074 ),
- AF_UNIRANGE_REC( 0x1082, 0x1082 ),
- AF_UNIRANGE_REC( 0x1085, 0x1086 ),
- AF_UNIRANGE_REC( 0x108D, 0x108D ),
- AF_UNIRANGE_REC( 0xA9E5, 0xA9E5 ),
- AF_UNIRANGE_REC( 0xAA7C, 0xAA7C ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_nkoo_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x07C0, 0x07FF ), /* N'Ko */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_nkoo_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x07EB, 0x07F5 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_none_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_none_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_olck_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1C50, 0x1C7F ), /* Ol Chiki */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_olck_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_orkh_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x10C00, 0x10C4F ), /* Old Turkic */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_orkh_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_osge_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x104B0, 0x104FF ), /* Osage */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_osge_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_osma_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x10480, 0x104AF ), /* Osmanya */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_osma_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_saur_uniranges[] =
- {
- AF_UNIRANGE_REC( 0xA880, 0xA8DF ), /* Saurashtra */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_saur_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0xA880, 0xA881 ),
- AF_UNIRANGE_REC( 0xA8B4, 0xA8C5 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_shaw_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x10450, 0x1047F ), /* Shavian */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_shaw_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_sinh_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0D80, 0x0DFF ), /* Sinhala */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_sinh_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0DCA, 0x0DCA ),
- AF_UNIRANGE_REC( 0x0DD2, 0x0DD6 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_sund_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1B80, 0x1BBF ), /* Sundanese */
- AF_UNIRANGE_REC( 0x1CC0, 0x1CCF ), /* Sundanese Supplement */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_sund_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1B80, 0x1B82 ),
- AF_UNIRANGE_REC( 0x1BA1, 0x1BAD ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_taml_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0B80, 0x0BFF ), /* Tamil */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_taml_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0B82, 0x0B82 ),
- AF_UNIRANGE_REC( 0x0BC0, 0x0BC2 ),
- AF_UNIRANGE_REC( 0x0BCD, 0x0BCD ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_tavt_uniranges[] =
- {
- AF_UNIRANGE_REC( 0xAA80, 0xAADF ), /* Tai Viet */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_tavt_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0xAAB0, 0xAAB0 ),
- AF_UNIRANGE_REC( 0xAAB2, 0xAAB4 ),
- AF_UNIRANGE_REC( 0xAAB7, 0xAAB8 ),
- AF_UNIRANGE_REC( 0xAABE, 0xAABF ),
- AF_UNIRANGE_REC( 0xAAC1, 0xAAC1 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_telu_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0C00, 0x0C7F ), /* Telugu */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_telu_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0C00, 0x0C00 ),
- AF_UNIRANGE_REC( 0x0C3E, 0x0C40 ),
- AF_UNIRANGE_REC( 0x0C46, 0x0C56 ),
- AF_UNIRANGE_REC( 0x0C62, 0x0C63 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_thai_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0E00, 0x0E7F ), /* Thai */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_thai_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0E31, 0x0E31 ),
- AF_UNIRANGE_REC( 0x0E34, 0x0E3A ),
- AF_UNIRANGE_REC( 0x0E47, 0x0E4E ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_tfng_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x2D30, 0x2D7F ), /* Tifinagh */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_tfng_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_vaii_uniranges[] =
- {
- AF_UNIRANGE_REC( 0xA500, 0xA63F ), /* Vai */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_vaii_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
-#ifdef AF_CONFIG_OPTION_INDIC
-
- const AF_Script_UniRangeRec af_limb_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1900, 0x194F ), /* Limbu */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_limb_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1920, 0x1922 ),
- AF_UNIRANGE_REC( 0x1927, 0x1934 ),
- AF_UNIRANGE_REC( 0x1937, 0x193B ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_orya_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0B00, 0x0B7F ), /* Oriya */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_orya_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0B01, 0x0B02 ),
- AF_UNIRANGE_REC( 0x0B3C, 0x0B3C ),
- AF_UNIRANGE_REC( 0x0B3F, 0x0B3F ),
- AF_UNIRANGE_REC( 0x0B41, 0x0B44 ),
- AF_UNIRANGE_REC( 0x0B4D, 0x0B56 ),
- AF_UNIRANGE_REC( 0x0B62, 0x0B63 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_sylo_uniranges[] =
- {
- AF_UNIRANGE_REC( 0xA800, 0xA82F ), /* Syloti Nagri */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_sylo_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0xA802, 0xA802 ),
- AF_UNIRANGE_REC( 0xA806, 0xA806 ),
- AF_UNIRANGE_REC( 0xA80B, 0xA80B ),
- AF_UNIRANGE_REC( 0xA825, 0xA826 ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-
- const AF_Script_UniRangeRec af_tibt_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0F00, 0x0FFF ), /* Tibetan */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_tibt_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0F18, 0x0F19 ),
- AF_UNIRANGE_REC( 0x0F35, 0x0F35 ),
- AF_UNIRANGE_REC( 0x0F37, 0x0F37 ),
- AF_UNIRANGE_REC( 0x0F39, 0x0F39 ),
- AF_UNIRANGE_REC( 0x0F3E, 0x0F3F ),
- AF_UNIRANGE_REC( 0x0F71, 0x0F7E ),
- AF_UNIRANGE_REC( 0x0F80, 0x0F84 ),
- AF_UNIRANGE_REC( 0x0F86, 0x0F87 ),
- AF_UNIRANGE_REC( 0x0F8D, 0x0FBC ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-#endif /* !AF_CONFIG_OPTION_INDIC */
-
-#ifdef AF_CONFIG_OPTION_CJK
-
- /* this corresponds to Unicode 6.0 */
-
- const AF_Script_UniRangeRec af_hani_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x1100, 0x11FF ), /* Hangul Jamo */
- AF_UNIRANGE_REC( 0x2E80, 0x2EFF ), /* CJK Radicals Supplement */
- AF_UNIRANGE_REC( 0x2F00, 0x2FDF ), /* Kangxi Radicals */
- AF_UNIRANGE_REC( 0x2FF0, 0x2FFF ), /* Ideographic Description Characters */
- AF_UNIRANGE_REC( 0x3000, 0x303F ), /* CJK Symbols and Punctuation */
- AF_UNIRANGE_REC( 0x3040, 0x309F ), /* Hiragana */
- AF_UNIRANGE_REC( 0x30A0, 0x30FF ), /* Katakana */
- AF_UNIRANGE_REC( 0x3100, 0x312F ), /* Bopomofo */
- AF_UNIRANGE_REC( 0x3130, 0x318F ), /* Hangul Compatibility Jamo */
- AF_UNIRANGE_REC( 0x3190, 0x319F ), /* Kanbun */
- AF_UNIRANGE_REC( 0x31A0, 0x31BF ), /* Bopomofo Extended */
- AF_UNIRANGE_REC( 0x31C0, 0x31EF ), /* CJK Strokes */
- AF_UNIRANGE_REC( 0x31F0, 0x31FF ), /* Katakana Phonetic Extensions */
- AF_UNIRANGE_REC( 0x3300, 0x33FF ), /* CJK Compatibility */
- AF_UNIRANGE_REC( 0x3400, 0x4DBF ), /* CJK Unified Ideographs Extension A */
- AF_UNIRANGE_REC( 0x4DC0, 0x4DFF ), /* Yijing Hexagram Symbols */
- AF_UNIRANGE_REC( 0x4E00, 0x9FFF ), /* CJK Unified Ideographs */
- AF_UNIRANGE_REC( 0xA960, 0xA97F ), /* Hangul Jamo Extended-A */
- AF_UNIRANGE_REC( 0xAC00, 0xD7AF ), /* Hangul Syllables */
- AF_UNIRANGE_REC( 0xD7B0, 0xD7FF ), /* Hangul Jamo Extended-B */
- AF_UNIRANGE_REC( 0xF900, 0xFAFF ), /* CJK Compatibility Ideographs */
- AF_UNIRANGE_REC( 0xFE10, 0xFE1F ), /* Vertical forms */
- AF_UNIRANGE_REC( 0xFE30, 0xFE4F ), /* CJK Compatibility Forms */
- AF_UNIRANGE_REC( 0xFF00, 0xFFEF ), /* Halfwidth and Fullwidth Forms */
- AF_UNIRANGE_REC( 0x1B000, 0x1B0FF ), /* Kana Supplement */
- AF_UNIRANGE_REC( 0x1D300, 0x1D35F ), /* Tai Xuan Hing Symbols */
- AF_UNIRANGE_REC( 0x20000, 0x2A6DF ), /* CJK Unified Ideographs Extension B */
- AF_UNIRANGE_REC( 0x2A700, 0x2B73F ), /* CJK Unified Ideographs Extension C */
- AF_UNIRANGE_REC( 0x2B740, 0x2B81F ), /* CJK Unified Ideographs Extension D */
- AF_UNIRANGE_REC( 0x2F800, 0x2FA1F ), /* CJK Compatibility Ideographs Supplement */
- AF_UNIRANGE_REC( 0, 0 )
- };
-
- const AF_Script_UniRangeRec af_hani_nonbase_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x302A, 0x302F ),
- AF_UNIRANGE_REC( 0x3190, 0x319F ),
- AF_UNIRANGE_REC( 0, 0 )
- };
-
-#endif /* !AF_CONFIG_OPTION_CJK */
-
-/* END */
diff --git a/src/autofit/afranges.h b/src/autofit/afranges.h
deleted file mode 100644
index 72d9eaad2..000000000
--- a/src/autofit/afranges.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/***************************************************************************/
-/* */
-/* afranges.h */
-/* */
-/* Auto-fitter Unicode script ranges (specification). */
-/* */
-/* Copyright 2013-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFRANGES_H_
-#define AFRANGES_H_
-
-
-#include "aftypes.h"
-
-
-FT_BEGIN_HEADER
-
-#undef SCRIPT
-#define SCRIPT( s, S, d, h, H, ss ) \
- extern const AF_Script_UniRangeRec af_ ## s ## _uniranges[];
-
-#include "afscript.h"
-
-#undef SCRIPT
-#define SCRIPT( s, S, d, h, H, ss ) \
- extern const AF_Script_UniRangeRec af_ ## s ## _nonbase_uniranges[];
-
-#include "afscript.h"
-
- /* */
-
-FT_END_HEADER
-
-#endif /* AFRANGES_H_ */
-
-
-/* END */
diff --git a/src/autofit/afscript.h b/src/autofit/afscript.h
deleted file mode 100644
index cb815dbb4..000000000
--- a/src/autofit/afscript.h
+++ /dev/null
@@ -1,390 +0,0 @@
-/***************************************************************************/
-/* */
-/* afscript.h */
-/* */
-/* Auto-fitter scripts (specification only). */
-/* */
-/* Copyright 2013-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /* The following part can be included multiple times. */
- /* Define `SCRIPT' as needed. */
-
-
- /* Add new scripts here. The first and second arguments are the */
- /* script name in lowercase and uppercase, respectively, followed */
- /* by a description string. Then comes the corresponding HarfBuzz */
- /* script name tag, followed by a string of standard characters (to */
- /* derive the standard width and height of stems). */
- /* */
- /* Note that fallback scripts only have a default style, thus we */
- /* use `HB_SCRIPT_INVALID' as the HarfBuzz script name tag for */
- /* them. */
-
- SCRIPT( adlm, ADLM,
- "Adlam",
- HB_SCRIPT_ADLAM,
- HINTING_BOTTOM_TO_TOP,
- "\xF0\x9E\xA4\x8C \xF0\x9E\xA4\xAE" ) /* 𞤌 𞤮 */
-
- SCRIPT( arab, ARAB,
- "Arabic",
- HB_SCRIPT_ARABIC,
- HINTING_BOTTOM_TO_TOP,
- "\xD9\x84 \xD8\xAD \xD9\x80" ) /* Ù„ Ø­ Ù€ */
-
- SCRIPT( armn, ARMN,
- "Armenian",
- HB_SCRIPT_ARMENIAN,
- HINTING_BOTTOM_TO_TOP,
- "\xD5\xBD \xD5\x8D" ) /* Õ½ Õ */
-
- SCRIPT( avst, AVST,
- "Avestan",
- HB_SCRIPT_AVESTAN,
- HINTING_BOTTOM_TO_TOP,
- "\xF0\x90\xAC\x9A" ) /* 𬚠*/
-
- SCRIPT( bamu, BAMU,
- "Bamum",
- HB_SCRIPT_BAMUM,
- HINTING_BOTTOM_TO_TOP,
- "\xEA\x9B\x81 \xEA\x9B\xAF" ) /* ê› ê›¯ */
-
- /* there are no simple forms for letters; we thus use two digit shapes */
- SCRIPT( beng, BENG,
- "Bengali",
- HB_SCRIPT_BENGALI,
- HINTING_TOP_TO_BOTTOM,
- "\xE0\xA7\xA6 \xE0\xA7\xAA" ) /* ০ ৪ */
-
- SCRIPT( buhd, BUHD,
- "Buhid",
- HB_SCRIPT_BUHID,
- HINTING_BOTTOM_TO_TOP,
- "\xE1\x9D\x8B \xE1\x9D\x8F" ) /* á‹ á */
-
- SCRIPT( cakm, CAKM,
- "Chakma",
- HB_SCRIPT_CHAKMA,
- HINTING_BOTTOM_TO_TOP,
- "\xF0\x91\x84\xA4 \xF0\x91\x84\x89 \xF0\x91\x84\x9B" ) /* 𑄤 𑄉 𑄛 */
-
- SCRIPT( cans, CANS,
- "Canadian Syllabics",
- HB_SCRIPT_CANADIAN_SYLLABICS,
- HINTING_BOTTOM_TO_TOP,
- "\xE1\x91\x8C \xE1\x93\x9A" ) /* ᑌ ᓚ */
-
- SCRIPT( cari, CARI,
- "Carian",
- HB_SCRIPT_CARIAN,
- HINTING_BOTTOM_TO_TOP,
- "\xF0\x90\x8A\xAB \xF0\x90\x8B\x89" ) /* ðŠ« ð‹‰ */
-
- SCRIPT( cher, CHER,
- "Cherokee",
- HB_SCRIPT_CHEROKEE,
- HINTING_BOTTOM_TO_TOP,
- "\xE1\x8E\xA4 \xE1\x8F\x85 \xEA\xAE\x95" ) /* Ꭴ á… ê®• */
-
- SCRIPT( copt, COPT,
- "Coptic",
- HB_SCRIPT_COPTIC,
- HINTING_BOTTOM_TO_TOP,
- "\xE2\xB2\x9E \xE2\xB2\x9F" ) /* Ⲟ ⲟ */
-
- SCRIPT( cprt, CPRT,
- "Cypriot",
- HB_SCRIPT_CYPRIOT,
- HINTING_BOTTOM_TO_TOP,
- "\xF0\x90\xA0\x85 \xF0\x90\xA0\xA3" ) /* ð … ð £ */
-
- SCRIPT( cyrl, CYRL,
- "Cyrillic",
- HB_SCRIPT_CYRILLIC,
- HINTING_BOTTOM_TO_TOP,
- "\xD0\xBE \xD0\x9E" ) /* о О */
-
- SCRIPT( deva, DEVA,
- "Devanagari",
- HB_SCRIPT_DEVANAGARI,
- HINTING_TOP_TO_BOTTOM,
- "\xE0\xA4\xA0 \xE0\xA4\xB5 \xE0\xA4\x9F" ) /* ठ व ट */
-
- SCRIPT( dsrt, DSRT,
- "Deseret",
- HB_SCRIPT_DESERET,
- HINTING_BOTTOM_TO_TOP,
- "\xF0\x90\x90\x84 \xF0\x90\x90\xAC" ) /* ð„ ð¬ */
-
- SCRIPT( ethi, ETHI,
- "Ethiopic",
- HB_SCRIPT_ETHIOPIC,
- HINTING_BOTTOM_TO_TOP,
- "\xE1\x8B\x90" ) /* á‹ */
-
- SCRIPT( geor, GEOR,
- "Georgian (Mkhedruli)",
- HB_SCRIPT_GEORGIAN,
- HINTING_BOTTOM_TO_TOP,
- "\xE1\x83\x98 \xE1\x83\x94 \xE1\x83\x90" ) /* ი ე რ*/
-
- SCRIPT( geok, GEOK,
- "Georgian (Khutsuri)",
- HB_SCRIPT_INVALID,
- HINTING_BOTTOM_TO_TOP,
- "\xE1\x82\xB6 \xE1\x82\xB1 \xE2\xB4\x99" ) /* Ⴖ Ⴑ ⴙ */
-
- SCRIPT( glag, GLAG,
- "Glagolitic",
- HB_SCRIPT_GLAGOLITIC,
- HINTING_BOTTOM_TO_TOP,
- "\xE2\xB0\x95 \xE2\xB1\x85" ) /* â°• â±… */
-
- SCRIPT( goth, GOTH,
- "Gothic",
- HB_SCRIPT_GOTHIC,
- HINTING_TOP_TO_BOTTOM,
- "\xF0\x90\x8C\xB4 \xF0\x90\x8C\xBE \xF0\x90\x8D\x83" ) /* ðŒ´ ðŒ¾ ðƒ */
-
- SCRIPT( grek, GREK,
- "Greek",
- HB_SCRIPT_GREEK,
- HINTING_BOTTOM_TO_TOP,
- "\xCE\xBF \xCE\x9F" ) /* ο Ο */
-
- SCRIPT( gujr, GUJR,
- "Gujarati",
- HB_SCRIPT_GUJARATI,
- HINTING_BOTTOM_TO_TOP,
- "\xE0\xAA\x9F \xE0\xAB\xA6" ) /* ટ ૦ */
-
- SCRIPT( guru, GURU,
- "Gurmukhi",
- HB_SCRIPT_GURMUKHI,
- HINTING_TOP_TO_BOTTOM,
- "\xE0\xA8\xA0 \xE0\xA8\xB0 \xE0\xA9\xA6" ) /* ਠ ਰ ੦ */
-
- SCRIPT( hebr, HEBR,
- "Hebrew",
- HB_SCRIPT_HEBREW,
- HINTING_BOTTOM_TO_TOP,
- "\xD7\x9D" ) /* × */
-
- SCRIPT( kali, KALI,
- "Kayah Li",
- HB_SCRIPT_KAYAH_LI,
- HINTING_BOTTOM_TO_TOP,
- "\xEA\xA4\x8D \xEA\xA4\x80" ) /* ê¤ ê¤€ */
-
- /* only digit zero has a simple shape in the Khmer script */
- SCRIPT( khmr, KHMR,
- "Khmer",
- HB_SCRIPT_KHMER,
- HINTING_BOTTOM_TO_TOP,
- "\xE1\x9F\xA0" ) /* ០ */
-
- SCRIPT( khms, KHMS,
- "Khmer Symbols",
- HB_SCRIPT_INVALID,
- HINTING_BOTTOM_TO_TOP,
- "\xE1\xA7\xA1 \xE1\xA7\xAA" ) /* ᧡ ᧪ */
-
- SCRIPT( knda, KNDA,
- "Kannada",
- HB_SCRIPT_KANNADA,
- HINTING_BOTTOM_TO_TOP,
- "\xE0\xB3\xA6 \xE0\xB2\xAC" ) /* ೦ ಬ */
-
- /* only digit zero has a simple shape in the Lao script */
- SCRIPT( lao, LAO,
- "Lao",
- HB_SCRIPT_LAO,
- HINTING_BOTTOM_TO_TOP,
- "\xE0\xBB\x90" ) /* à» */
-
- SCRIPT( latn, LATN,
- "Latin",
- HB_SCRIPT_LATIN,
- HINTING_BOTTOM_TO_TOP,
- "o O 0" )
-
- SCRIPT( latb, LATB,
- "Latin Subscript Fallback",
- HB_SCRIPT_INVALID,
- HINTING_BOTTOM_TO_TOP,
- "\xE2\x82\x92 \xE2\x82\x80" ) /* â‚’ â‚€ */
-
- SCRIPT( latp, LATP,
- "Latin Superscript Fallback",
- HB_SCRIPT_INVALID,
- HINTING_BOTTOM_TO_TOP,
- "\xE1\xB5\x92 \xE1\xB4\xBC \xE2\x81\xB0" ) /* áµ’ á´¼ â° */
-
- SCRIPT( lisu, LISU,
- "Lisu",
- HB_SCRIPT_LISU,
- HINTING_BOTTOM_TO_TOP,
- "\xEA\x93\xB3" ) /* ꓳ */
-
- SCRIPT( mlym, MLYM,
- "Malayalam",
- HB_SCRIPT_MALAYALAM,
- HINTING_BOTTOM_TO_TOP,
- "\xE0\xB4\xA0 \xE0\xB4\xB1" ) /* à´  à´± */
-
- SCRIPT( mymr, MYMR,
- "Myanmar",
- HB_SCRIPT_MYANMAR,
- HINTING_BOTTOM_TO_TOP,
- "\xE1\x80\x9D \xE1\x80\x84 \xE1\x80\x82" ) /* ဠင ဂ */
-
- SCRIPT( nkoo, NKOO,
- "N'Ko",
- HB_SCRIPT_NKO,
- HINTING_BOTTOM_TO_TOP,
- "\xDF\x8B \xDF\x80" ) /* ߋ ߀ */
-
- SCRIPT( none, NONE,
- "no script",
- HB_SCRIPT_INVALID,
- HINTING_BOTTOM_TO_TOP,
- "" )
-
- SCRIPT( olck, OLCK,
- "Ol Chiki",
- HB_SCRIPT_OL_CHIKI,
- HINTING_BOTTOM_TO_TOP,
- "\xE1\xB1\x9B" ) /* á±› */
-
- SCRIPT( orkh, ORKH,
- "Old Turkic",
- HB_SCRIPT_OLD_TURKIC,
- HINTING_BOTTOM_TO_TOP,
- "\xF0\x90\xB0\x97" ) /* ð°— */
-
- SCRIPT( osge, OSGE,
- "Osage",
- HB_SCRIPT_OSAGE,
- HINTING_BOTTOM_TO_TOP,
- "\xF0\x90\x93\x82 \xF0\x90\x93\xAA" ) /* 𓂠𓪠*/
-
- SCRIPT( osma, OSMA,
- "Osmanya",
- HB_SCRIPT_OSMANYA,
- HINTING_BOTTOM_TO_TOP,
- "\xF0\x90\x92\x86 \xF0\x90\x92\xA0" ) /* ð’† ð’  */
-
- SCRIPT( saur, SAUR,
- "Saurashtra",
- HB_SCRIPT_SAURASHTRA,
- HINTING_BOTTOM_TO_TOP,
- "\xEA\xA2\x9D \xEA\xA3\x90" ) /* ê¢ ê£ */
-
- SCRIPT( shaw, SHAW,
- "Shavian",
- HB_SCRIPT_SHAVIAN,
- HINTING_BOTTOM_TO_TOP,
- "\xF0\x90\x91\xB4" ) /* ð‘´ */
-
- SCRIPT( sinh, SINH,
- "Sinhala",
- HB_SCRIPT_SINHALA,
- HINTING_BOTTOM_TO_TOP,
- "\xE0\xB6\xA7" ) /* ට */
-
- /* only digit zero has a simple (round) shape in the Sundanese script */
- SCRIPT( sund, SUND,
- "Sundanese",
- HB_SCRIPT_SUNDANESE,
- HINTING_BOTTOM_TO_TOP,
- "\xE1\xAE\xB0" ) /* á®° */
-
- /* only digit zero has a simple (round) shape in the Tamil script */
- SCRIPT( taml, TAML,
- "Tamil",
- HB_SCRIPT_TAMIL,
- HINTING_BOTTOM_TO_TOP,
- "\xE0\xAF\xA6" ) /* ௦ */
-
- SCRIPT( tavt, TAVT,
- "Tai Viet",
- HB_SCRIPT_TAI_VIET,
- HINTING_BOTTOM_TO_TOP,
- "\xEA\xAA\x92 \xEA\xAA\xAB" ) /* ꪒ ꪫ */
-
- /* there are no simple forms for letters; we thus use two digit shapes */
- SCRIPT( telu, TELU,
- "Telugu",
- HB_SCRIPT_TELUGU,
- HINTING_BOTTOM_TO_TOP,
- "\xE0\xB1\xA6 \xE0\xB1\xA7" ) /* ౦ ౧ */
-
- SCRIPT( tfng, TFNG,
- "Tifinagh",
- HB_SCRIPT_TIFINAGH,
- HINTING_BOTTOM_TO_TOP,
- "\xE2\xB5\x94" ) /* âµ” */
-
- SCRIPT( thai, THAI,
- "Thai",
- HB_SCRIPT_THAI,
- HINTING_BOTTOM_TO_TOP,
- "\xE0\xB8\xB2 \xE0\xB9\x85 \xE0\xB9\x90" ) /* า ๅ ๠*/
-
- SCRIPT( vaii, VAII,
- "Vai",
- HB_SCRIPT_VAI,
- HINTING_BOTTOM_TO_TOP,
- "\xEA\x98\x93 \xEA\x96\x9C \xEA\x96\xB4" ) /* ꘓ ꖜ ꖴ */
-
-#ifdef AF_CONFIG_OPTION_INDIC
-
- SCRIPT( limb, LIMB,
- "Limbu",
- HB_SCRIPT_LIMBU,
- HINTING_BOTTOM_TO_TOP,
- "o" ) /* XXX */
-
- SCRIPT( orya, ORYA,
- "Oriya",
- HB_SCRIPT_ORIYA,
- HINTING_BOTTOM_TO_TOP,
- "o" ) /* XXX */
-
- SCRIPT( sylo, SYLO,
- "Syloti Nagri",
- HB_SCRIPT_SYLOTI_NAGRI,
- HINTING_BOTTOM_TO_TOP,
- "o" ) /* XXX */
-
- SCRIPT( tibt, TIBT,
- "Tibetan",
- HB_SCRIPT_TIBETAN,
- HINTING_BOTTOM_TO_TOP,
- "o" ) /* XXX */
-
-#endif /* AF_CONFIG_OPTION_INDIC */
-
-#ifdef AF_CONFIG_OPTION_CJK
-
- SCRIPT( hani, HANI,
- "CJKV ideographs",
- HB_SCRIPT_HAN,
- HINTING_BOTTOM_TO_TOP,
- "\xE7\x94\xB0 \xE5\x9B\x97" ) /* ç”° å›— */
-
-#endif /* AF_CONFIG_OPTION_CJK */
-
-
-/* END */
diff --git a/src/autofit/afshaper.c b/src/autofit/afshaper.c
deleted file mode 100644
index da92fad3e..000000000
--- a/src/autofit/afshaper.c
+++ /dev/null
@@ -1,683 +0,0 @@
-/***************************************************************************/
-/* */
-/* afshaper.c */
-/* */
-/* HarfBuzz interface for accessing OpenType features (body). */
-/* */
-/* Copyright 2013-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include "afglobal.h"
-#include "aftypes.h"
-#include "afshaper.h"
-
-#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_afshaper
-
-
- /*
- * We use `sets' (in the HarfBuzz sense, which comes quite near to the
- * usual mathematical meaning) to manage both lookups and glyph indices.
- *
- * 1. For each coverage, collect lookup IDs in a set. Note that an
- * auto-hinter `coverage' is represented by one `feature', and a
- * feature consists of an arbitrary number of (font specific) `lookup's
- * that actually do the mapping job. Please check the OpenType
- * specification for more details on features and lookups.
- *
- * 2. Create glyph ID sets from the corresponding lookup sets.
- *
- * 3. The glyph set corresponding to AF_COVERAGE_DEFAULT is computed
- * with all lookups specific to the OpenType script activated. It
- * relies on the order of AF_DEFINE_STYLE_CLASS entries so that
- * special coverages (like `oldstyle figures') don't get overwritten.
- *
- */
-
-
- /* load coverage tags */
-#undef COVERAGE
-#define COVERAGE( name, NAME, description, \
- tag1, tag2, tag3, tag4 ) \
- static const hb_tag_t name ## _coverage[] = \
- { \
- HB_TAG( tag1, tag2, tag3, tag4 ), \
- HB_TAG_NONE \
- };
-
-
-#include "afcover.h"
-
-
- /* define mapping between coverage tags and AF_Coverage */
-#undef COVERAGE
-#define COVERAGE( name, NAME, description, \
- tag1, tag2, tag3, tag4 ) \
- name ## _coverage,
-
-
- static const hb_tag_t* coverages[] =
- {
-#include "afcover.h"
-
- NULL /* AF_COVERAGE_DEFAULT */
- };
-
-
- /* load HarfBuzz script tags */
-#undef SCRIPT
-#define SCRIPT( s, S, d, h, H, ss ) h,
-
-
- static const hb_script_t scripts[] =
- {
-#include "afscript.h"
- };
-
-
- FT_Error
- af_shaper_get_coverage( AF_FaceGlobals globals,
- AF_StyleClass style_class,
- FT_UShort* gstyles,
- FT_Bool default_script )
- {
- hb_face_t* face;
-
- hb_set_t* gsub_lookups; /* GSUB lookups for a given script */
- hb_set_t* gsub_glyphs; /* glyphs covered by GSUB lookups */
- hb_set_t* gpos_lookups; /* GPOS lookups for a given script */
- hb_set_t* gpos_glyphs; /* glyphs covered by GPOS lookups */
-
- hb_script_t script;
- const hb_tag_t* coverage_tags;
- hb_tag_t script_tags[] = { HB_TAG_NONE,
- HB_TAG_NONE,
- HB_TAG_NONE,
- HB_TAG_NONE };
-
- hb_codepoint_t idx;
-#ifdef FT_DEBUG_LEVEL_TRACE
- int count;
-#endif
-
-
- if ( !globals || !style_class || !gstyles )
- return FT_THROW( Invalid_Argument );
-
- face = hb_font_get_face( globals->hb_font );
-
- gsub_lookups = hb_set_create();
- gsub_glyphs = hb_set_create();
- gpos_lookups = hb_set_create();
- gpos_glyphs = hb_set_create();
-
- coverage_tags = coverages[style_class->coverage];
- script = scripts[style_class->script];
-
- /* Convert a HarfBuzz script tag into the corresponding OpenType */
- /* tag or tags -- some Indic scripts like Devanagari have an old */
- /* and a new set of features. */
- hb_ot_tags_from_script( script,
- &script_tags[0],
- &script_tags[1] );
-
- /* `hb_ot_tags_from_script' usually returns HB_OT_TAG_DEFAULT_SCRIPT */
- /* as the second tag. We change that to HB_TAG_NONE except for the */
- /* default script. */
- if ( default_script )
- {
- if ( script_tags[0] == HB_TAG_NONE )
- script_tags[0] = HB_OT_TAG_DEFAULT_SCRIPT;
- else
- {
- if ( script_tags[1] == HB_TAG_NONE )
- script_tags[1] = HB_OT_TAG_DEFAULT_SCRIPT;
- else if ( script_tags[1] != HB_OT_TAG_DEFAULT_SCRIPT )
- script_tags[2] = HB_OT_TAG_DEFAULT_SCRIPT;
- }
- }
- else
- {
- /* we use non-standard tags like `khms' for special purposes; */
- /* HarfBuzz maps them to `DFLT', which we don't want to handle here */
- if ( script_tags[0] == HB_OT_TAG_DEFAULT_SCRIPT )
- goto Exit;
-
- if ( script_tags[1] == HB_OT_TAG_DEFAULT_SCRIPT )
- script_tags[1] = HB_TAG_NONE;
- }
-
- hb_ot_layout_collect_lookups( face,
- HB_OT_TAG_GSUB,
- script_tags,
- NULL,
- coverage_tags,
- gsub_lookups );
-
- if ( hb_set_is_empty( gsub_lookups ) )
- goto Exit; /* nothing to do */
-
- hb_ot_layout_collect_lookups( face,
- HB_OT_TAG_GPOS,
- script_tags,
- NULL,
- coverage_tags,
- gpos_lookups );
-
- FT_TRACE4(( "GSUB lookups (style `%s'):\n"
- " ",
- af_style_names[style_class->style] ));
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- count = 0;
-#endif
-
- for ( idx = HB_SET_VALUE_INVALID; hb_set_next( gsub_lookups, &idx ); )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE4(( " %d", idx ));
- count++;
-#endif
-
- /* get output coverage of GSUB feature */
- hb_ot_layout_lookup_collect_glyphs( face,
- HB_OT_TAG_GSUB,
- idx,
- NULL,
- NULL,
- NULL,
- gsub_glyphs );
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !count )
- FT_TRACE4(( " (none)" ));
- FT_TRACE4(( "\n\n" ));
-#endif
-
- FT_TRACE4(( "GPOS lookups (style `%s'):\n"
- " ",
- af_style_names[style_class->style] ));
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- count = 0;
-#endif
-
- for ( idx = HB_SET_VALUE_INVALID; hb_set_next( gpos_lookups, &idx ); )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE4(( " %d", idx ));
- count++;
-#endif
-
- /* get input coverage of GPOS feature */
- hb_ot_layout_lookup_collect_glyphs( face,
- HB_OT_TAG_GPOS,
- idx,
- NULL,
- gpos_glyphs,
- NULL,
- NULL );
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !count )
- FT_TRACE4(( " (none)" ));
- FT_TRACE4(( "\n\n" ));
-#endif
-
- /*
- * We now check whether we can construct blue zones, using glyphs
- * covered by the feature only. In case there is not a single zone
- * (this is, not a single character is covered), we skip this coverage.
- *
- */
- if ( style_class->coverage != AF_COVERAGE_DEFAULT )
- {
- AF_Blue_Stringset bss = style_class->blue_stringset;
- const AF_Blue_StringRec* bs = &af_blue_stringsets[bss];
-
- FT_Bool found = 0;
-
-
- for ( ; bs->string != AF_BLUE_STRING_MAX; bs++ )
- {
- const char* p = &af_blue_strings[bs->string];
-
-
- while ( *p )
- {
- hb_codepoint_t ch;
-
-
- GET_UTF8_CHAR( ch, p );
-
- for ( idx = HB_SET_VALUE_INVALID; hb_set_next( gsub_lookups,
- &idx ); )
- {
- hb_codepoint_t gidx = FT_Get_Char_Index( globals->face, ch );
-
-
- if ( hb_ot_layout_lookup_would_substitute( face, idx,
- &gidx, 1, 1 ) )
- {
- found = 1;
- break;
- }
- }
- }
- }
-
- if ( !found )
- {
- FT_TRACE4(( " no blue characters found; style skipped\n" ));
- goto Exit;
- }
- }
-
- /*
- * Various OpenType features might use the same glyphs at different
- * vertical positions; for example, superscript and subscript glyphs
- * could be the same. However, the auto-hinter is completely
- * agnostic of OpenType features after the feature analysis has been
- * completed: The engine then simply receives a glyph index and returns a
- * hinted and usually rendered glyph.
- *
- * Consider the superscript feature of font `pala.ttf': Some of the
- * glyphs are `real', this is, they have a zero vertical offset, but
- * most of them are small caps glyphs shifted up to the superscript
- * position (this is, the `sups' feature is present in both the GSUB and
- * GPOS tables). The code for blue zones computation actually uses a
- * feature's y offset so that the `real' glyphs get correct hints. But
- * later on it is impossible to decide whether a glyph index belongs to,
- * say, the small caps or superscript feature.
- *
- * For this reason, we don't assign a style to a glyph if the current
- * feature covers the glyph in both the GSUB and the GPOS tables. This
- * is quite a broad condition, assuming that
- *
- * (a) glyphs that get used in multiple features are present in a
- * feature without vertical shift,
- *
- * and
- *
- * (b) a feature's GPOS data really moves the glyph vertically.
- *
- * Not fulfilling condition (a) makes a font larger; it would also
- * reduce the number of glyphs that could be addressed directly without
- * using OpenType features, so this assumption is rather strong.
- *
- * Condition (b) is much weaker, and there might be glyphs which get
- * missed. However, the OpenType features we are going to handle are
- * primarily located in GSUB, and HarfBuzz doesn't provide an API to
- * directly get the necessary information from the GPOS table. A
- * possible solution might be to directly parse the GPOS table to find
- * out whether a glyph gets shifted vertically, but this is something I
- * would like to avoid if not really necessary.
- *
- * Note that we don't follow this logic for the default coverage.
- * Complex scripts like Devanagari have mandatory GPOS features to
- * position many glyph elements, using mark-to-base or mark-to-ligature
- * tables; the number of glyphs missed due to condition (b) would be far
- * too large.
- *
- */
- if ( style_class->coverage != AF_COVERAGE_DEFAULT )
- hb_set_subtract( gsub_glyphs, gpos_glyphs );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE4(( " glyphs without GPOS data (`*' means already assigned)" ));
- count = 0;
-#endif
-
- for ( idx = HB_SET_VALUE_INVALID; hb_set_next( gsub_glyphs, &idx ); )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !( count % 10 ) )
- FT_TRACE4(( "\n"
- " " ));
-
- FT_TRACE4(( " %d", idx ));
- count++;
-#endif
-
- /* glyph indices returned by `hb_ot_layout_lookup_collect_glyphs' */
- /* can be arbitrary: some fonts use fake indices for processing */
- /* internal to GSUB or GPOS, which is fully valid */
- if ( idx >= (hb_codepoint_t)globals->glyph_count )
- continue;
-
- if ( gstyles[idx] == AF_STYLE_UNASSIGNED )
- gstyles[idx] = (FT_UShort)style_class->style;
-#ifdef FT_DEBUG_LEVEL_TRACE
- else
- FT_TRACE4(( "*" ));
-#endif
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !count )
- FT_TRACE4(( "\n"
- " (none)" ));
- FT_TRACE4(( "\n\n" ));
-#endif
-
- Exit:
- hb_set_destroy( gsub_lookups );
- hb_set_destroy( gsub_glyphs );
- hb_set_destroy( gpos_lookups );
- hb_set_destroy( gpos_glyphs );
-
- return FT_Err_Ok;
- }
-
-
- /* construct HarfBuzz features */
-#undef COVERAGE
-#define COVERAGE( name, NAME, description, \
- tag1, tag2, tag3, tag4 ) \
- static const hb_feature_t name ## _feature[] = \
- { \
- { \
- HB_TAG( tag1, tag2, tag3, tag4 ), \
- 1, 0, (unsigned int)-1 \
- } \
- };
-
-
-#include "afcover.h"
-
-
- /* define mapping between HarfBuzz features and AF_Coverage */
-#undef COVERAGE
-#define COVERAGE( name, NAME, description, \
- tag1, tag2, tag3, tag4 ) \
- name ## _feature,
-
-
- static const hb_feature_t* features[] =
- {
-#include "afcover.h"
-
- NULL /* AF_COVERAGE_DEFAULT */
- };
-
-
- void*
- af_shaper_buf_create( FT_Face face )
- {
- FT_UNUSED( face );
-
- return (void*)hb_buffer_create();
- }
-
-
- void
- af_shaper_buf_destroy( FT_Face face,
- void* buf )
- {
- FT_UNUSED( face );
-
- hb_buffer_destroy( (hb_buffer_t*)buf );
- }
-
-
- const char*
- af_shaper_get_cluster( const char* p,
- AF_StyleMetrics metrics,
- void* buf_,
- unsigned int* count )
- {
- AF_StyleClass style_class;
- const hb_feature_t* feature;
- FT_Int upem;
- const char* q;
- int len;
-
- hb_buffer_t* buf = (hb_buffer_t*)buf_;
- hb_font_t* font;
- hb_codepoint_t dummy;
-
-
- upem = (FT_Int)metrics->globals->face->units_per_EM;
- style_class = metrics->style_class;
- feature = features[style_class->coverage];
-
- font = metrics->globals->hb_font;
-
- /* we shape at a size of units per EM; this means font units */
- hb_font_set_scale( font, upem, upem );
-
- while ( *p == ' ' )
- p++;
-
- /* count bytes up to next space (or end of buffer) */
- q = p;
- while ( !( *q == ' ' || *q == '\0' ) )
- GET_UTF8_CHAR( dummy, q );
- len = (int)( q - p );
-
- /* feed character(s) to the HarfBuzz buffer */
- hb_buffer_clear_contents( buf );
- hb_buffer_add_utf8( buf, p, len, 0, len );
-
- /* we let HarfBuzz guess the script and writing direction */
- hb_buffer_guess_segment_properties( buf );
-
- /* shape buffer, which means conversion from character codes to */
- /* glyph indices, possibly applying a feature */
- hb_shape( font, buf, feature, feature ? 1 : 0 );
-
- if ( feature )
- {
- hb_buffer_t* hb_buf = metrics->globals->hb_buf;
-
- unsigned int gcount;
- hb_glyph_info_t* ginfo;
-
- unsigned int hb_gcount;
- hb_glyph_info_t* hb_ginfo;
-
-
- /* we have to check whether applying a feature does actually change */
- /* glyph indices; otherwise the affected glyph or glyphs aren't */
- /* available at all in the feature */
-
- hb_buffer_clear_contents( hb_buf );
- hb_buffer_add_utf8( hb_buf, p, len, 0, len );
- hb_buffer_guess_segment_properties( hb_buf );
- hb_shape( font, hb_buf, NULL, 0 );
-
- ginfo = hb_buffer_get_glyph_infos( buf, &gcount );
- hb_ginfo = hb_buffer_get_glyph_infos( hb_buf, &hb_gcount );
-
- if ( gcount == hb_gcount )
- {
- unsigned int i;
-
-
- for (i = 0; i < gcount; i++ )
- if ( ginfo[i].codepoint != hb_ginfo[i].codepoint )
- break;
-
- if ( i == gcount )
- {
- /* both buffers have identical glyph indices */
- hb_buffer_clear_contents( buf );
- }
- }
- }
-
- *count = hb_buffer_get_length( buf );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( feature && *count > 1 )
- FT_TRACE1(( "af_shaper_get_cluster:"
- " input character mapped to multiple glyphs\n" ));
-#endif
-
- return q;
- }
-
-
- FT_ULong
- af_shaper_get_elem( AF_StyleMetrics metrics,
- void* buf_,
- unsigned int idx,
- FT_Long* advance,
- FT_Long* y_offset )
- {
- hb_buffer_t* buf = (hb_buffer_t*)buf_;
- hb_glyph_info_t* ginfo;
- hb_glyph_position_t* gpos;
- unsigned int gcount;
-
- FT_UNUSED( metrics );
-
-
- ginfo = hb_buffer_get_glyph_infos( buf, &gcount );
- gpos = hb_buffer_get_glyph_positions( buf, &gcount );
-
- if ( idx >= gcount )
- return 0;
-
- if ( advance )
- *advance = gpos[idx].x_advance;
- if ( y_offset )
- *y_offset = gpos[idx].y_offset;
-
- return ginfo[idx].codepoint;
- }
-
-
-#else /* !FT_CONFIG_OPTION_USE_HARFBUZZ */
-
-
- FT_Error
- af_shaper_get_coverage( AF_FaceGlobals globals,
- AF_StyleClass style_class,
- FT_UShort* gstyles,
- FT_Bool default_script )
- {
- FT_UNUSED( globals );
- FT_UNUSED( style_class );
- FT_UNUSED( gstyles );
- FT_UNUSED( default_script );
-
- return FT_Err_Ok;
- }
-
-
- void*
- af_shaper_buf_create( FT_Face face )
- {
- FT_Error error;
- FT_Memory memory = face->memory;
- FT_ULong* buf;
-
-
- FT_MEM_ALLOC( buf, sizeof ( FT_ULong ) );
-
- return (void*)buf;
- }
-
-
- void
- af_shaper_buf_destroy( FT_Face face,
- void* buf )
- {
- FT_Memory memory = face->memory;
-
-
- FT_FREE( buf );
- }
-
-
- const char*
- af_shaper_get_cluster( const char* p,
- AF_StyleMetrics metrics,
- void* buf_,
- unsigned int* count )
- {
- FT_Face face = metrics->globals->face;
- FT_ULong ch, dummy = 0;
- FT_ULong* buf = (FT_ULong*)buf_;
-
-
- while ( *p == ' ' )
- p++;
-
- GET_UTF8_CHAR( ch, p );
-
- /* since we don't have an engine to handle clusters, */
- /* we scan the characters but return zero */
- while ( !( *p == ' ' || *p == '\0' ) )
- GET_UTF8_CHAR( dummy, p );
-
- if ( dummy )
- {
- *buf = 0;
- *count = 0;
- }
- else
- {
- *buf = FT_Get_Char_Index( face, ch );
- *count = 1;
- }
-
- return p;
- }
-
-
- FT_ULong
- af_shaper_get_elem( AF_StyleMetrics metrics,
- void* buf_,
- unsigned int idx,
- FT_Long* advance,
- FT_Long* y_offset )
- {
- FT_Face face = metrics->globals->face;
- FT_ULong glyph_index = *(FT_ULong*)buf_;
-
- FT_UNUSED( idx );
-
-
- if ( advance )
- FT_Get_Advance( face,
- glyph_index,
- FT_LOAD_NO_SCALE |
- FT_LOAD_NO_HINTING |
- FT_LOAD_IGNORE_TRANSFORM,
- advance );
-
- if ( y_offset )
- *y_offset = 0;
-
- return glyph_index;
- }
-
-
-#endif /* !FT_CONFIG_OPTION_USE_HARFBUZZ */
-
-
-/* END */
diff --git a/src/autofit/afshaper.h b/src/autofit/afshaper.h
deleted file mode 100644
index 9185d1900..000000000
--- a/src/autofit/afshaper.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/***************************************************************************/
-/* */
-/* afshaper.h */
-/* */
-/* HarfBuzz interface for accessing OpenType features (specification). */
-/* */
-/* Copyright 2013-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFSHAPER_H_
-#define AFSHAPER_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-
-#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
-
-#include <hb.h>
-#include <hb-ot.h>
-#include <hb-ft.h>
-
-#endif
-
-
-FT_BEGIN_HEADER
-
- FT_Error
- af_shaper_get_coverage( AF_FaceGlobals globals,
- AF_StyleClass style_class,
- FT_UShort* gstyles,
- FT_Bool default_script );
-
-
- void*
- af_shaper_buf_create( FT_Face face );
-
- void
- af_shaper_buf_destroy( FT_Face face,
- void* buf );
-
- const char*
- af_shaper_get_cluster( const char* p,
- AF_StyleMetrics metrics,
- void* buf_,
- unsigned int* count );
-
- FT_ULong
- af_shaper_get_elem( AF_StyleMetrics metrics,
- void* buf_,
- unsigned int idx,
- FT_Long* x_advance,
- FT_Long* y_offset );
-
- /* */
-
-FT_END_HEADER
-
-#endif /* AFSHAPER_H_ */
-
-
-/* END */
diff --git a/src/autofit/afstyles.h b/src/autofit/afstyles.h
deleted file mode 100644
index 281559eea..000000000
--- a/src/autofit/afstyles.h
+++ /dev/null
@@ -1,475 +0,0 @@
-/***************************************************************************/
-/* */
-/* afstyles.h */
-/* */
-/* Auto-fitter styles (specification only). */
-/* */
-/* Copyright 2013-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /* The following part can be included multiple times. */
- /* Define `STYLE' as needed. */
-
-
- /* Add new styles here. The first and second arguments are the */
- /* style name in lowercase and uppercase, respectively, followed */
- /* by a description string. The next arguments are the */
- /* corresponding writing system, script, blue stringset, and */
- /* coverage. */
- /* */
- /* Note that styles using `AF_COVERAGE_DEFAULT' should always */
- /* come after styles with other coverages. Also note that */
- /* fallback scripts only use `AF_COVERAGE_DEFAULT' for its */
- /* style. */
- /* */
- /* Example: */
- /* */
- /* STYLE( cyrl_dflt, CYRL_DFLT, */
- /* "Cyrillic default style", */
- /* AF_WRITING_SYSTEM_LATIN, */
- /* AF_SCRIPT_CYRL, */
- /* AF_BLUE_STRINGSET_CYRL, */
- /* AF_COVERAGE_DEFAULT ) */
-
-#undef STYLE_LATIN
-#define STYLE_LATIN( s, S, f, F, ds, df, C ) \
- STYLE( s ## _ ## f, S ## _ ## F, \
- ds " " df " style", \
- AF_WRITING_SYSTEM_LATIN, \
- AF_SCRIPT_ ## S, \
- AF_BLUE_STRINGSET_ ## S, \
- AF_COVERAGE_ ## C )
-
-#undef META_STYLE_LATIN
-#define META_STYLE_LATIN( s, S, ds ) \
- STYLE_LATIN( s, S, c2cp, C2CP, ds, \
- "petite capitals from capitals", \
- PETITE_CAPITALS_FROM_CAPITALS ) \
- STYLE_LATIN( s, S, c2sc, C2SC, ds, \
- "small capitals from capitals", \
- SMALL_CAPITALS_FROM_CAPITALS ) \
- STYLE_LATIN( s, S, ordn, ORDN, ds, \
- "ordinals", \
- ORDINALS ) \
- STYLE_LATIN( s, S, pcap, PCAP, ds, \
- "petite capitals", \
- PETITE_CAPITALS ) \
- STYLE_LATIN( s, S, sinf, SINF, ds, \
- "scientific inferiors", \
- SCIENTIFIC_INFERIORS ) \
- STYLE_LATIN( s, S, smcp, SMCP, ds, \
- "small capitals", \
- SMALL_CAPITALS ) \
- STYLE_LATIN( s, S, subs, SUBS, ds, \
- "subscript", \
- SUBSCRIPT ) \
- STYLE_LATIN( s, S, sups, SUPS, ds, \
- "superscript", \
- SUPERSCRIPT ) \
- STYLE_LATIN( s, S, titl, TITL, ds, \
- "titling", \
- TITLING ) \
- STYLE_LATIN( s, S, dflt, DFLT, ds, \
- "default", \
- DEFAULT )
-
-
- STYLE( adlm_dflt, ADLM_DFLT,
- "Adlam default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_ADLM,
- AF_BLUE_STRINGSET_ADLM,
- AF_COVERAGE_DEFAULT )
-
- STYLE( arab_dflt, ARAB_DFLT,
- "Arabic default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_ARAB,
- AF_BLUE_STRINGSET_ARAB,
- AF_COVERAGE_DEFAULT )
-
- STYLE( armn_dflt, ARMN_DFLT,
- "Armenian default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_ARMN,
- AF_BLUE_STRINGSET_ARMN,
- AF_COVERAGE_DEFAULT )
-
- STYLE( avst_dflt, AVST_DFLT,
- "Avestan default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_AVST,
- AF_BLUE_STRINGSET_AVST,
- AF_COVERAGE_DEFAULT )
-
- STYLE( bamu_dflt, BAMU_DFLT,
- "Bamum default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_BAMU,
- AF_BLUE_STRINGSET_BAMU,
- AF_COVERAGE_DEFAULT )
-
- STYLE( beng_dflt, BENG_DFLT,
- "Bengali default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_BENG,
- AF_BLUE_STRINGSET_BENG,
- AF_COVERAGE_DEFAULT )
-
- STYLE( buhd_dflt, BUHD_DFLT,
- "Buhid default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_BUHD,
- AF_BLUE_STRINGSET_BUHD,
- AF_COVERAGE_DEFAULT )
-
- STYLE( cakm_dflt, CAKM_DFLT,
- "Chakma default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_CAKM,
- AF_BLUE_STRINGSET_CAKM,
- AF_COVERAGE_DEFAULT )
-
- STYLE( cans_dflt, CANS_DFLT,
- "Canadian Syllabics default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_CANS,
- AF_BLUE_STRINGSET_CANS,
- AF_COVERAGE_DEFAULT )
-
- STYLE( cari_dflt, CARI_DFLT,
- "Carian default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_CARI,
- AF_BLUE_STRINGSET_CARI,
- AF_COVERAGE_DEFAULT )
-
- STYLE( cher_dflt, CHER_DFLT,
- "Cherokee default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_CHER,
- AF_BLUE_STRINGSET_CHER,
- AF_COVERAGE_DEFAULT )
-
- STYLE( copt_dflt, COPT_DFLT,
- "Coptic default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_COPT,
- AF_BLUE_STRINGSET_COPT,
- AF_COVERAGE_DEFAULT )
-
- STYLE( cprt_dflt, CPRT_DFLT,
- "Cypriot default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_CPRT,
- AF_BLUE_STRINGSET_CPRT,
- AF_COVERAGE_DEFAULT )
-
- META_STYLE_LATIN( cyrl, CYRL, "Cyrillic" )
-
- STYLE( deva_dflt, DEVA_DFLT,
- "Devanagari default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_DEVA,
- AF_BLUE_STRINGSET_DEVA,
- AF_COVERAGE_DEFAULT )
-
- STYLE( dsrt_dflt, DSRT_DFLT,
- "Deseret default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_DSRT,
- AF_BLUE_STRINGSET_DSRT,
- AF_COVERAGE_DEFAULT )
-
- STYLE( ethi_dflt, ETHI_DFLT,
- "Ethiopic default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_ETHI,
- AF_BLUE_STRINGSET_ETHI,
- AF_COVERAGE_DEFAULT )
-
- STYLE( geor_dflt, GEOR_DFLT,
- "Georgian (Mkhedruli) default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_GEOR,
- AF_BLUE_STRINGSET_GEOR,
- AF_COVERAGE_DEFAULT )
-
- STYLE( geok_dflt, GEOK_DFLT,
- "Georgian (Khutsuri) default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_GEOK,
- AF_BLUE_STRINGSET_GEOK,
- AF_COVERAGE_DEFAULT )
-
- STYLE( glag_dflt, GLAG_DFLT,
- "Glagolitic default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_GLAG,
- AF_BLUE_STRINGSET_GLAG,
- AF_COVERAGE_DEFAULT )
-
- STYLE( goth_dflt, GOTH_DFLT,
- "Gothic default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_GOTH,
- AF_BLUE_STRINGSET_GOTH,
- AF_COVERAGE_DEFAULT )
-
- META_STYLE_LATIN( grek, GREK, "Greek" )
-
- STYLE( gujr_dflt, GUJR_DFLT,
- "Gujarati default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_GUJR,
- AF_BLUE_STRINGSET_GUJR,
- AF_COVERAGE_DEFAULT )
-
- STYLE( guru_dflt, GURU_DFLT,
- "Gurmukhi default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_GURU,
- AF_BLUE_STRINGSET_GURU,
- AF_COVERAGE_DEFAULT )
-
- STYLE( hebr_dflt, HEBR_DFLT,
- "Hebrew default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_HEBR,
- AF_BLUE_STRINGSET_HEBR,
- AF_COVERAGE_DEFAULT )
-
- STYLE( kali_dflt, KALI_DFLT,
- "Kayah Li default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_KALI,
- AF_BLUE_STRINGSET_KALI,
- AF_COVERAGE_DEFAULT )
-
- STYLE( khmr_dflt, KHMR_DFLT,
- "Khmer default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_KHMR,
- AF_BLUE_STRINGSET_KHMR,
- AF_COVERAGE_DEFAULT )
-
- STYLE( khms_dflt, KHMS_DFLT,
- "Khmer Symbols default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_KHMS,
- AF_BLUE_STRINGSET_KHMS,
- AF_COVERAGE_DEFAULT )
-
- STYLE( knda_dflt, KNDA_DFLT,
- "Kannada default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_KNDA,
- AF_BLUE_STRINGSET_KNDA,
- AF_COVERAGE_DEFAULT )
-
- STYLE( lao_dflt, LAO_DFLT,
- "Lao default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_LAO,
- AF_BLUE_STRINGSET_LAO,
- AF_COVERAGE_DEFAULT )
-
- META_STYLE_LATIN( latn, LATN, "Latin" )
-
- STYLE( latb_dflt, LATB_DFLT,
- "Latin subscript fallback default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_LATB,
- AF_BLUE_STRINGSET_LATB,
- AF_COVERAGE_DEFAULT )
-
- STYLE( latp_dflt, LATP_DFLT,
- "Latin superscript fallback default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_LATP,
- AF_BLUE_STRINGSET_LATP,
- AF_COVERAGE_DEFAULT )
-
-#ifdef FT_OPTION_AUTOFIT2
- STYLE( ltn2_dflt, LTN2_DFLT,
- "Latin 2 default style",
- AF_WRITING_SYSTEM_LATIN2,
- AF_SCRIPT_LATN,
- AF_BLUE_STRINGSET_LATN,
- AF_COVERAGE_DEFAULT )
-#endif
-
- STYLE( lisu_dflt, LISU_DFLT,
- "Lisu default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_LISU,
- AF_BLUE_STRINGSET_LISU,
- AF_COVERAGE_DEFAULT )
-
- STYLE( mlym_dflt, MLYM_DFLT,
- "Malayalam default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_MLYM,
- AF_BLUE_STRINGSET_MLYM,
- AF_COVERAGE_DEFAULT )
-
- STYLE( mymr_dflt, MYMR_DFLT,
- "Myanmar default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_MYMR,
- AF_BLUE_STRINGSET_MYMR,
- AF_COVERAGE_DEFAULT )
-
- STYLE( nkoo_dflt, NKOO_DFLT,
- "N'Ko default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_NKOO,
- AF_BLUE_STRINGSET_NKOO,
- AF_COVERAGE_DEFAULT )
-
- STYLE( none_dflt, NONE_DFLT,
- "no style",
- AF_WRITING_SYSTEM_DUMMY,
- AF_SCRIPT_NONE,
- AF_BLUE_STRINGSET_NONE,
- AF_COVERAGE_DEFAULT )
-
- STYLE( olck_dflt, OLCK_DFLT,
- "Ol Chiki default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_OLCK,
- AF_BLUE_STRINGSET_OLCK,
- AF_COVERAGE_DEFAULT )
-
- STYLE( orkh_dflt, ORKH_DFLT,
- "Old Turkic default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_ORKH,
- AF_BLUE_STRINGSET_ORKH,
- AF_COVERAGE_DEFAULT )
-
- STYLE( osge_dflt, OSGE_DFLT,
- "Osage default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_OSGE,
- AF_BLUE_STRINGSET_OSGE,
- AF_COVERAGE_DEFAULT )
-
- STYLE( osma_dflt, OSMA_DFLT,
- "Osmanya default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_OSMA,
- AF_BLUE_STRINGSET_OSMA,
- AF_COVERAGE_DEFAULT )
-
- STYLE( saur_dflt, SAUR_DFLT,
- "Saurashtra default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_SAUR,
- AF_BLUE_STRINGSET_SAUR,
- AF_COVERAGE_DEFAULT )
-
- STYLE( shaw_dflt, SHAW_DFLT,
- "Shavian default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_SHAW,
- AF_BLUE_STRINGSET_SHAW,
- AF_COVERAGE_DEFAULT )
-
- STYLE( sinh_dflt, SINH_DFLT,
- "Sinhala default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_SINH,
- AF_BLUE_STRINGSET_SINH,
- AF_COVERAGE_DEFAULT )
-
- STYLE( sund_dflt, SUND_DFLT,
- "Sundanese default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_SUND,
- AF_BLUE_STRINGSET_SUND,
- AF_COVERAGE_DEFAULT )
-
- STYLE( taml_dflt, TAML_DFLT,
- "Tamil default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_TAML,
- AF_BLUE_STRINGSET_TAML,
- AF_COVERAGE_DEFAULT )
-
- STYLE( tavt_dflt, TAVT_DFLT,
- "Tai Viet default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_TAVT,
- AF_BLUE_STRINGSET_TAVT,
- AF_COVERAGE_DEFAULT )
-
- STYLE( telu_dflt, TELU_DFLT,
- "Telugu default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_TELU,
- AF_BLUE_STRINGSET_TELU,
- AF_COVERAGE_DEFAULT )
-
- STYLE( tfng_dflt, TFNG_DFLT,
- "Tifinagh default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_TFNG,
- AF_BLUE_STRINGSET_TFNG,
- AF_COVERAGE_DEFAULT )
-
- STYLE( thai_dflt, THAI_DFLT,
- "Thai default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_THAI,
- AF_BLUE_STRINGSET_THAI,
- AF_COVERAGE_DEFAULT )
-
- STYLE( vaii_dflt, VAII_DFLT,
- "Vai default style",
- AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_VAII,
- AF_BLUE_STRINGSET_VAII,
- AF_COVERAGE_DEFAULT )
-
-#ifdef AF_CONFIG_OPTION_INDIC
-
- /* no blue stringset support for the Indic writing system yet */
-#undef STYLE_DEFAULT_INDIC
-#define STYLE_DEFAULT_INDIC( s, S, d ) \
- STYLE( s ## _dflt, S ## _DFLT, \
- d " default style", \
- AF_WRITING_SYSTEM_INDIC, \
- AF_SCRIPT_ ## S, \
- (AF_Blue_Stringset)0, \
- AF_COVERAGE_DEFAULT )
-
- STYLE_DEFAULT_INDIC( limb, LIMB, "Limbu" )
- STYLE_DEFAULT_INDIC( orya, ORYA, "Oriya" )
- STYLE_DEFAULT_INDIC( sylo, SYLO, "Syloti Nagri" )
- STYLE_DEFAULT_INDIC( tibt, TIBT, "Tibetan" )
-
-#endif /* AF_CONFIG_OPTION_INDIC */
-
-#ifdef AF_CONFIG_OPTION_CJK
-
- STYLE( hani_dflt, HANI_DFLT,
- "CJKV ideographs default style",
- AF_WRITING_SYSTEM_CJK,
- AF_SCRIPT_HANI,
- AF_BLUE_STRINGSET_HANI,
- AF_COVERAGE_DEFAULT )
-
-#endif /* AF_CONFIG_OPTION_CJK */
-
-
-/* END */
diff --git a/src/autofit/aftypes.h b/src/autofit/aftypes.h
deleted file mode 100644
index 718dab70b..000000000
--- a/src/autofit/aftypes.h
+++ /dev/null
@@ -1,651 +0,0 @@
-/***************************************************************************/
-/* */
-/* aftypes.h */
-/* */
-/* Auto-fitter types (specification only). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************
- *
- * The auto-fitter is a complete rewrite of the old auto-hinter.
- * Its main feature is the ability to differentiate between different
- * writing systems and scripts in order to apply specific rules.
- *
- * The code has also been compartmentalized into several entities that
- * should make algorithmic experimentation easier than with the old
- * code.
- *
- *************************************************************************/
-
-
-#ifndef AFTYPES_H_
-#define AFTYPES_H_
-
-#include <ft2build.h>
-
-#include FT_FREETYPE_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-
-#include "afblue.h"
-
-#ifdef FT_DEBUG_AUTOFIT
-#include FT_CONFIG_STANDARD_LIBRARY_H
-#endif
-
-
-FT_BEGIN_HEADER
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** D E B U G G I N G *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#ifdef FT_DEBUG_AUTOFIT
-
-extern int _af_debug_disable_horz_hints;
-extern int _af_debug_disable_vert_hints;
-extern int _af_debug_disable_blue_hints;
-extern void* _af_debug_hints;
-
-#endif /* FT_DEBUG_AUTOFIT */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** U T I L I T Y S T U F F *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct AF_WidthRec_
- {
- FT_Pos org; /* original position/width in font units */
- FT_Pos cur; /* current/scaled position/width in device sub-pixels */
- FT_Pos fit; /* current/fitted position/width in device sub-pixels */
-
- } AF_WidthRec, *AF_Width;
-
-
- FT_LOCAL( void )
- af_sort_pos( FT_UInt count,
- FT_Pos* table );
-
- FT_LOCAL( void )
- af_sort_and_quantize_widths( FT_UInt* count,
- AF_Width widths,
- FT_Pos threshold );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** A N G L E T Y P E S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*
- * The auto-fitter doesn't need a very high angular accuracy;
- * this allows us to speed up some computations considerably with a
- * light Cordic algorithm (see afangles.c).
- */
-
- typedef FT_Int AF_Angle;
-
-
-#define AF_ANGLE_PI 256
-#define AF_ANGLE_2PI ( AF_ANGLE_PI * 2 )
-#define AF_ANGLE_PI2 ( AF_ANGLE_PI / 2 )
-#define AF_ANGLE_PI4 ( AF_ANGLE_PI / 4 )
-
-
-#if 0
- /*
- * compute the angle of a given 2-D vector
- */
- FT_LOCAL( AF_Angle )
- af_angle_atan( FT_Pos dx,
- FT_Pos dy );
-
-
- /*
- * compute `angle2 - angle1'; the result is always within
- * the range [-AF_ANGLE_PI .. AF_ANGLE_PI - 1]
- */
- FT_LOCAL( AF_Angle )
- af_angle_diff( AF_Angle angle1,
- AF_Angle angle2 );
-#endif /* 0 */
-
-
-#define AF_ANGLE_DIFF( result, angle1, angle2 ) \
- FT_BEGIN_STMNT \
- AF_Angle _delta = (angle2) - (angle1); \
- \
- \
- while ( _delta <= -AF_ANGLE_PI ) \
- _delta += AF_ANGLE_2PI; \
- \
- while ( _delta > AF_ANGLE_PI ) \
- _delta -= AF_ANGLE_2PI; \
- \
- result = _delta; \
- FT_END_STMNT
-
-
- /* opaque handle to glyph-specific hints -- see `afhints.h' for more
- * details
- */
- typedef struct AF_GlyphHintsRec_* AF_GlyphHints;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** S C A L E R S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*
- * A scaler models the target pixel device that will receive the
- * auto-hinted glyph image.
- */
-
-#define AF_SCALER_FLAG_NO_HORIZONTAL 1U /* disable horizontal hinting */
-#define AF_SCALER_FLAG_NO_VERTICAL 2U /* disable vertical hinting */
-#define AF_SCALER_FLAG_NO_ADVANCE 4U /* disable advance hinting */
-#define AF_SCALER_FLAG_NO_WARPER 8U /* disable warper */
-
-
- typedef struct AF_ScalerRec_
- {
- FT_Face face; /* source font face */
- FT_Fixed x_scale; /* from font units to 1/64th device pixels */
- FT_Fixed y_scale; /* from font units to 1/64th device pixels */
- FT_Pos x_delta; /* in 1/64th device pixels */
- FT_Pos y_delta; /* in 1/64th device pixels */
- FT_Render_Mode render_mode; /* monochrome, anti-aliased, LCD, etc. */
- FT_UInt32 flags; /* additional control flags, see above */
-
- } AF_ScalerRec, *AF_Scaler;
-
-
-#define AF_SCALER_EQUAL_SCALES( a, b ) \
- ( (a)->x_scale == (b)->x_scale && \
- (a)->y_scale == (b)->y_scale && \
- (a)->x_delta == (b)->x_delta && \
- (a)->y_delta == (b)->y_delta )
-
-
- typedef struct AF_StyleMetricsRec_* AF_StyleMetrics;
-
- /* This function parses an FT_Face to compute global metrics for
- * a specific style.
- */
- typedef FT_Error
- (*AF_WritingSystem_InitMetricsFunc)( AF_StyleMetrics metrics,
- FT_Face face );
-
- typedef void
- (*AF_WritingSystem_ScaleMetricsFunc)( AF_StyleMetrics metrics,
- AF_Scaler scaler );
-
- typedef void
- (*AF_WritingSystem_DoneMetricsFunc)( AF_StyleMetrics metrics );
-
- typedef void
- (*AF_WritingSystem_GetStdWidthsFunc)( AF_StyleMetrics metrics,
- FT_Pos* stdHW,
- FT_Pos* stdVW );
-
-
- typedef FT_Error
- (*AF_WritingSystem_InitHintsFunc)( AF_GlyphHints hints,
- AF_StyleMetrics metrics );
-
- typedef FT_Error
- (*AF_WritingSystem_ApplyHintsFunc)( FT_UInt glyph_index,
- AF_GlyphHints hints,
- FT_Outline* outline,
- AF_StyleMetrics metrics );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** W R I T I N G S Y S T E M S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*
- * For the auto-hinter, a writing system consists of multiple scripts that
- * can be handled similarly *in a typographical way*; the relationship is
- * not based on history. For example, both the Greek and the unrelated
- * Armenian scripts share the same features like ascender, descender,
- * x-height, etc. Essentially, a writing system is covered by a
- * submodule of the auto-fitter; it contains
- *
- * - a specific global analyzer that computes global metrics specific to
- * the script (based on script-specific characters to identify ascender
- * height, x-height, etc.),
- *
- * - a specific glyph analyzer that computes segments and edges for each
- * glyph covered by the script,
- *
- * - a specific grid-fitting algorithm that distorts the scaled glyph
- * outline according to the results of the glyph analyzer.
- */
-
-#define AFWRTSYS_H_ /* don't load header files */
-#undef WRITING_SYSTEM
-#define WRITING_SYSTEM( ws, WS ) \
- AF_WRITING_SYSTEM_ ## WS,
-
- /* The list of known writing systems. */
- typedef enum AF_WritingSystem_
- {
-
-#include "afwrtsys.h"
-
- AF_WRITING_SYSTEM_MAX /* do not remove */
-
- } AF_WritingSystem;
-
-#undef AFWRTSYS_H_
-
-
- typedef struct AF_WritingSystemClassRec_
- {
- AF_WritingSystem writing_system;
-
- FT_Offset style_metrics_size;
- AF_WritingSystem_InitMetricsFunc style_metrics_init;
- AF_WritingSystem_ScaleMetricsFunc style_metrics_scale;
- AF_WritingSystem_DoneMetricsFunc style_metrics_done;
- AF_WritingSystem_GetStdWidthsFunc style_metrics_getstdw;
-
- AF_WritingSystem_InitHintsFunc style_hints_init;
- AF_WritingSystem_ApplyHintsFunc style_hints_apply;
-
- } AF_WritingSystemClassRec;
-
- typedef const AF_WritingSystemClassRec* AF_WritingSystemClass;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** S C R I P T S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*
- * Each script is associated with two sets of Unicode ranges to test
- * whether the font face supports the script, and which non-base
- * characters the script contains.
- *
- * We use four-letter script tags from the OpenType specification,
- * extended by `NONE', which indicates `no script'.
- */
-
-#undef SCRIPT
-#define SCRIPT( s, S, d, h, H, ss ) \
- AF_SCRIPT_ ## S,
-
- /* The list of known scripts. */
- typedef enum AF_Script_
- {
-
-#include "afscript.h"
-
- AF_SCRIPT_MAX /* do not remove */
-
- } AF_Script;
-
-
- typedef struct AF_Script_UniRangeRec_
- {
- FT_UInt32 first;
- FT_UInt32 last;
-
- } AF_Script_UniRangeRec;
-
-#define AF_UNIRANGE_REC( a, b ) { (FT_UInt32)(a), (FT_UInt32)(b) }
-
- typedef const AF_Script_UniRangeRec* AF_Script_UniRange;
-
-
- typedef struct AF_ScriptClassRec_
- {
- AF_Script script;
-
- /* last element in the ranges must be { 0, 0 } */
- AF_Script_UniRange script_uni_ranges;
- AF_Script_UniRange script_uni_nonbase_ranges;
-
- FT_Bool top_to_bottom_hinting;
-
- const char* standard_charstring; /* for default width and height */
-
- } AF_ScriptClassRec;
-
- typedef const AF_ScriptClassRec* AF_ScriptClass;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** C O V E R A G E S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*
- * Usually, a font contains more glyphs than can be addressed by its
- * character map.
- *
- * In the PostScript font world, encoding vectors specific to a given
- * task are used to select such glyphs, and these glyphs can be often
- * recognized by having a suffix in its glyph names. For example, a
- * superscript glyph `A' might be called `A.sup'. Unfortunately, this
- * naming scheme is not standardized and thus unusable for us.
- *
- * In the OpenType world, a better solution was invented, namely
- * `features', which cleanly separate a character's input encoding from
- * the corresponding glyph's appearance, and which don't use glyph names
- * at all. For our purposes, and slightly generalized, an OpenType
- * feature is a name of a mapping that maps character codes to
- * non-standard glyph indices (features get used for other things also).
- * For example, the `sups' feature provides superscript glyphs, thus
- * mapping character codes like `A' or `B' to superscript glyph
- * representation forms. How this mapping happens is completely
- * uninteresting to us.
- *
- * For the auto-hinter, a `coverage' represents all glyphs of an OpenType
- * feature collected in a set (as listed below) that can be hinted
- * together. To continue the above example, superscript glyphs must not
- * be hinted together with normal glyphs because the blue zones
- * completely differ.
- *
- * Note that FreeType itself doesn't compute coverages; it only provides
- * the glyphs addressable by the default Unicode character map. Instead,
- * we use the HarfBuzz library (if available), which has many functions
- * exactly for this purpose.
- *
- * AF_COVERAGE_DEFAULT is special: It should cover everything that isn't
- * listed separately (including the glyphs addressable by the character
- * map). In case HarfBuzz isn't available, it exactly covers the glyphs
- * addressable by the character map.
- *
- */
-
-#undef COVERAGE
-#define COVERAGE( name, NAME, description, \
- tag1, tag2, tag3, tag4 ) \
- AF_COVERAGE_ ## NAME,
-
-
- typedef enum AF_Coverage_
- {
-#include "afcover.h"
-
- AF_COVERAGE_DEFAULT
-
- } AF_Coverage;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** S T Y L E S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*
- * The topmost structure for modelling the auto-hinter glyph input data
- * is a `style class', grouping everything together.
- */
-
-#undef STYLE
-#define STYLE( s, S, d, ws, sc, ss, c ) \
- AF_STYLE_ ## S,
-
- /* The list of known styles. */
- typedef enum AF_Style_
- {
-
-#include "afstyles.h"
-
- AF_STYLE_MAX /* do not remove */
-
- } AF_Style;
-
-
- typedef struct AF_StyleClassRec_
- {
- AF_Style style;
-
- AF_WritingSystem writing_system;
- AF_Script script;
- AF_Blue_Stringset blue_stringset;
- AF_Coverage coverage;
-
- } AF_StyleClassRec;
-
- typedef const AF_StyleClassRec* AF_StyleClass;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** S T Y L E M E T R I C S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct AF_FaceGlobalsRec_* AF_FaceGlobals;
-
- /* This is the main structure that combines everything. Autofit modules */
- /* specific to writing systems derive their structures from it, for */
- /* example `AF_LatinMetrics'. */
-
- typedef struct AF_StyleMetricsRec_
- {
- AF_StyleClass style_class;
- AF_ScalerRec scaler;
- FT_Bool digits_have_same_width;
-
- AF_FaceGlobals globals; /* to access properties */
-
- } AF_StyleMetricsRec;
-
-
-#define AF_HINTING_BOTTOM_TO_TOP 0
-#define AF_HINTING_TOP_TO_BOTTOM 1
-
-
- /* Declare and define vtables for classes */
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define AF_DECLARE_WRITING_SYSTEM_CLASS( writing_system_class ) \
- FT_CALLBACK_TABLE const AF_WritingSystemClassRec \
- writing_system_class;
-
-#define AF_DEFINE_WRITING_SYSTEM_CLASS( \
- writing_system_class, \
- system, \
- m_size, \
- m_init, \
- m_scale, \
- m_done, \
- m_stdw, \
- h_init, \
- h_apply ) \
- FT_CALLBACK_TABLE_DEF \
- const AF_WritingSystemClassRec writing_system_class = \
- { \
- system, \
- \
- m_size, \
- \
- m_init, \
- m_scale, \
- m_done, \
- m_stdw, \
- \
- h_init, \
- h_apply \
- };
-
-
-#define AF_DECLARE_SCRIPT_CLASS( script_class ) \
- FT_CALLBACK_TABLE const AF_ScriptClassRec \
- script_class;
-
-#define AF_DEFINE_SCRIPT_CLASS( \
- script_class, \
- script, \
- ranges, \
- nonbase_ranges, \
- top_to_bottom, \
- std_charstring ) \
- FT_CALLBACK_TABLE_DEF \
- const AF_ScriptClassRec script_class = \
- { \
- script, \
- ranges, \
- nonbase_ranges, \
- top_to_bottom, \
- std_charstring, \
- };
-
-
-#define AF_DECLARE_STYLE_CLASS( style_class ) \
- FT_CALLBACK_TABLE const AF_StyleClassRec \
- style_class;
-
-#define AF_DEFINE_STYLE_CLASS( \
- style_class, \
- style, \
- writing_system, \
- script, \
- blue_stringset, \
- coverage ) \
- FT_CALLBACK_TABLE_DEF \
- const AF_StyleClassRec style_class = \
- { \
- style, \
- writing_system, \
- script, \
- blue_stringset, \
- coverage \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define AF_DECLARE_WRITING_SYSTEM_CLASS( writing_system_class ) \
- FT_LOCAL( void ) \
- FT_Init_Class_ ## writing_system_class( AF_WritingSystemClassRec* ac );
-
-#define AF_DEFINE_WRITING_SYSTEM_CLASS( \
- writing_system_class, \
- system, \
- m_size, \
- m_init, \
- m_scale, \
- m_done, \
- m_stdw, \
- h_init, \
- h_apply ) \
- FT_LOCAL_DEF( void ) \
- FT_Init_Class_ ## writing_system_class( AF_WritingSystemClassRec* ac ) \
- { \
- ac->writing_system = system; \
- \
- ac->style_metrics_size = m_size; \
- \
- ac->style_metrics_init = m_init; \
- ac->style_metrics_scale = m_scale; \
- ac->style_metrics_done = m_done; \
- ac->style_metrics_getstdw = m_stdw; \
- \
- ac->style_hints_init = h_init; \
- ac->style_hints_apply = h_apply; \
- }
-
-
-#define AF_DECLARE_SCRIPT_CLASS( script_class ) \
- FT_LOCAL( void ) \
- FT_Init_Class_ ## script_class( AF_ScriptClassRec* ac );
-
-#define AF_DEFINE_SCRIPT_CLASS( \
- script_class, \
- script_, \
- ranges, \
- nonbase_ranges, \
- top_to_bottom, \
- std_charstring ) \
- FT_LOCAL_DEF( void ) \
- FT_Init_Class_ ## script_class( AF_ScriptClassRec* ac ) \
- { \
- ac->script = script_; \
- ac->script_uni_ranges = ranges; \
- ac->script_uni_nonbase_ranges = nonbase_ranges; \
- ac->top_to_bottom_hinting = top_to_bottom; \
- ac->standard_charstring = std_charstring; \
- }
-
-
-#define AF_DECLARE_STYLE_CLASS( style_class ) \
- FT_LOCAL( void ) \
- FT_Init_Class_ ## style_class( AF_StyleClassRec* ac );
-
-#define AF_DEFINE_STYLE_CLASS( \
- style_class, \
- style_, \
- writing_system_, \
- script_, \
- blue_stringset_, \
- coverage_ ) \
- FT_LOCAL_DEF( void ) \
- FT_Init_Class_ ## style_class( AF_StyleClassRec* ac ) \
- { \
- ac->style = style_; \
- ac->writing_system = writing_system_; \
- ac->script = script_; \
- ac->blue_stringset = blue_stringset_; \
- ac->coverage = coverage_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* */
-
-FT_END_HEADER
-
-#endif /* AFTYPES_H_ */
-
-
-/* END */
diff --git a/src/autofit/afwarp.c b/src/autofit/afwarp.c
deleted file mode 100644
index f99aa6d98..000000000
--- a/src/autofit/afwarp.c
+++ /dev/null
@@ -1,373 +0,0 @@
-/***************************************************************************/
-/* */
-/* afwarp.c */
-/* */
-/* Auto-fitter warping algorithm (body). */
-/* */
-/* Copyright 2006-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*
- * The idea of the warping code is to slightly scale and shift a glyph
- * within a single dimension so that as much of its segments are aligned
- * (more or less) on the grid. To find out the optimal scaling and
- * shifting value, various parameter combinations are tried and scored.
- */
-
-#include "afwarp.h"
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_afwarp
-
-
- /* The weights cover the range 0/64 - 63/64 of a pixel. Obviously, */
- /* values around a half pixel (which means exactly between two grid */
- /* lines) gets the worst weight. */
-#if 1
- static const AF_WarpScore
- af_warper_weights[64] =
- {
- 35, 32, 30, 25, 20, 15, 12, 10, 5, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -1, -2, -5, -8,-10,-10,-20,-20,-30,-30,
-
- -30,-30,-20,-20,-10,-10, -8, -5, -2, -1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 5, 10, 12, 15, 20, 25, 30, 32,
- };
-#else
- static const AF_WarpScore
- af_warper_weights[64] =
- {
- 30, 20, 10, 5, 4, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -1, -2, -2, -5, -5,-10,-10,-15,-20,
-
- -20,-15,-15,-10,-10, -5, -5, -2, -2, -1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 4, 5, 10, 20,
- };
-#endif
-
-
- /* Score segments for a given `scale' and `delta' in the range */
- /* `xx1' to `xx2', and store the best result in `warper'. If */
- /* the new best score is equal to the old one, prefer the */
- /* value with a smaller distortion (around `base_distort'). */
-
- static void
- af_warper_compute_line_best( AF_Warper warper,
- FT_Fixed scale,
- FT_Pos delta,
- FT_Pos xx1,
- FT_Pos xx2,
- AF_WarpScore base_distort,
- AF_Segment segments,
- FT_Int num_segments )
- {
- FT_Int idx_min, idx_max, idx0;
- FT_Int nn;
- AF_WarpScore scores[65];
-
-
- for ( nn = 0; nn < 65; nn++ )
- scores[nn] = 0;
-
- idx0 = xx1 - warper->t1;
-
- /* compute minimum and maximum indices */
- {
- FT_Pos xx1min = warper->x1min;
- FT_Pos xx1max = warper->x1max;
- FT_Pos w = xx2 - xx1;
-
-
- if ( xx1min + w < warper->x2min )
- xx1min = warper->x2min - w;
-
- if ( xx1max + w > warper->x2max )
- xx1max = warper->x2max - w;
-
- idx_min = xx1min - warper->t1;
- idx_max = xx1max - warper->t1;
-
- if ( idx_min < 0 || idx_min > idx_max || idx_max > 64 )
- {
- FT_TRACE5(( "invalid indices:\n"
- " min=%d max=%d, xx1=%ld xx2=%ld,\n"
- " x1min=%ld x1max=%ld, x2min=%ld x2max=%ld\n",
- idx_min, idx_max, xx1, xx2,
- warper->x1min, warper->x1max,
- warper->x2min, warper->x2max ));
- return;
- }
- }
-
- for ( nn = 0; nn < num_segments; nn++ )
- {
- FT_Pos len = segments[nn].max_coord - segments[nn].min_coord;
- FT_Pos y0 = FT_MulFix( segments[nn].pos, scale ) + delta;
- FT_Pos y = y0 + ( idx_min - idx0 );
- FT_Int idx;
-
-
- /* score the length of the segments for the given range */
- for ( idx = idx_min; idx <= idx_max; idx++, y++ )
- scores[idx] += af_warper_weights[y & 63] * len;
- }
-
- /* find best score */
- {
- FT_Int idx;
-
-
- for ( idx = idx_min; idx <= idx_max; idx++ )
- {
- AF_WarpScore score = scores[idx];
- AF_WarpScore distort = base_distort + ( idx - idx0 );
-
-
- if ( score > warper->best_score ||
- ( score == warper->best_score &&
- distort < warper->best_distort ) )
- {
- warper->best_score = score;
- warper->best_distort = distort;
- warper->best_scale = scale;
- warper->best_delta = delta + ( idx - idx0 );
- }
- }
- }
- }
-
-
- /* Compute optimal scaling and delta values for a given glyph and */
- /* dimension. */
-
- FT_LOCAL_DEF( void )
- af_warper_compute( AF_Warper warper,
- AF_GlyphHints hints,
- AF_Dimension dim,
- FT_Fixed *a_scale,
- FT_Pos *a_delta )
- {
- AF_AxisHints axis;
- AF_Point points;
-
- FT_Fixed org_scale;
- FT_Pos org_delta;
-
- FT_Int nn, num_points, num_segments;
- FT_Int X1, X2;
- FT_Int w;
-
- AF_WarpScore base_distort;
- AF_Segment segments;
-
-
- /* get original scaling transformation */
- if ( dim == AF_DIMENSION_VERT )
- {
- org_scale = hints->y_scale;
- org_delta = hints->y_delta;
- }
- else
- {
- org_scale = hints->x_scale;
- org_delta = hints->x_delta;
- }
-
- warper->best_scale = org_scale;
- warper->best_delta = org_delta;
- warper->best_score = FT_INT_MIN;
- warper->best_distort = 0;
-
- axis = &hints->axis[dim];
- segments = axis->segments;
- num_segments = axis->num_segments;
- points = hints->points;
- num_points = hints->num_points;
-
- *a_scale = org_scale;
- *a_delta = org_delta;
-
- /* get X1 and X2, minimum and maximum in original coordinates */
- if ( num_segments < 1 )
- return;
-
-#if 1
- X1 = X2 = points[0].fx;
- for ( nn = 1; nn < num_points; nn++ )
- {
- FT_Int X = points[nn].fx;
-
-
- if ( X < X1 )
- X1 = X;
- if ( X > X2 )
- X2 = X;
- }
-#else
- X1 = X2 = segments[0].pos;
- for ( nn = 1; nn < num_segments; nn++ )
- {
- FT_Int X = segments[nn].pos;
-
-
- if ( X < X1 )
- X1 = X;
- if ( X > X2 )
- X2 = X;
- }
-#endif
-
- if ( X1 >= X2 )
- return;
-
- warper->x1 = FT_MulFix( X1, org_scale ) + org_delta;
- warper->x2 = FT_MulFix( X2, org_scale ) + org_delta;
-
- warper->t1 = AF_WARPER_FLOOR( warper->x1 );
- warper->t2 = AF_WARPER_CEIL( warper->x2 );
-
- /* examine a half pixel wide range around the maximum coordinates */
- warper->x1min = warper->x1 & ~31;
- warper->x1max = warper->x1min + 32;
- warper->x2min = warper->x2 & ~31;
- warper->x2max = warper->x2min + 32;
-
- if ( warper->x1max > warper->x2 )
- warper->x1max = warper->x2;
-
- if ( warper->x2min < warper->x1 )
- warper->x2min = warper->x1;
-
- warper->w0 = warper->x2 - warper->x1;
-
- if ( warper->w0 <= 64 )
- {
- warper->x1max = warper->x1;
- warper->x2min = warper->x2;
- }
-
- /* examine (at most) a pixel wide range around the natural width */
- warper->wmin = warper->x2min - warper->x1max;
- warper->wmax = warper->x2max - warper->x1min;
-
-#if 1
- /* some heuristics to reduce the number of widths to be examined */
- {
- int margin = 16;
-
-
- if ( warper->w0 <= 128 )
- {
- margin = 8;
- if ( warper->w0 <= 96 )
- margin = 4;
- }
-
- if ( warper->wmin < warper->w0 - margin )
- warper->wmin = warper->w0 - margin;
-
- if ( warper->wmax > warper->w0 + margin )
- warper->wmax = warper->w0 + margin;
- }
-
- if ( warper->wmin < warper->w0 * 3 / 4 )
- warper->wmin = warper->w0 * 3 / 4;
-
- if ( warper->wmax > warper->w0 * 5 / 4 )
- warper->wmax = warper->w0 * 5 / 4;
-#else
- /* no scaling, just translation */
- warper->wmin = warper->wmax = warper->w0;
-#endif
-
- for ( w = warper->wmin; w <= warper->wmax; w++ )
- {
- FT_Fixed new_scale;
- FT_Pos new_delta;
- FT_Pos xx1, xx2;
-
-
- /* compute min and max positions for given width, */
- /* assuring that they stay within the coordinate ranges */
- xx1 = warper->x1;
- xx2 = warper->x2;
- if ( w >= warper->w0 )
- {
- xx1 -= w - warper->w0;
- if ( xx1 < warper->x1min )
- {
- xx2 += warper->x1min - xx1;
- xx1 = warper->x1min;
- }
- }
- else
- {
- xx1 -= w - warper->w0;
- if ( xx1 > warper->x1max )
- {
- xx2 -= xx1 - warper->x1max;
- xx1 = warper->x1max;
- }
- }
-
- if ( xx1 < warper->x1 )
- base_distort = warper->x1 - xx1;
- else
- base_distort = xx1 - warper->x1;
-
- if ( xx2 < warper->x2 )
- base_distort += warper->x2 - xx2;
- else
- base_distort += xx2 - warper->x2;
-
- /* give base distortion a greater weight while scoring */
- base_distort *= 10;
-
- new_scale = org_scale + FT_DivFix( w - warper->w0, X2 - X1 );
- new_delta = xx1 - FT_MulFix( X1, new_scale );
-
- af_warper_compute_line_best( warper, new_scale, new_delta, xx1, xx2,
- base_distort,
- segments, num_segments );
- }
-
- {
- FT_Fixed best_scale = warper->best_scale;
- FT_Pos best_delta = warper->best_delta;
-
-
- hints->xmin_delta = FT_MulFix( X1, best_scale - org_scale )
- + best_delta;
- hints->xmax_delta = FT_MulFix( X2, best_scale - org_scale )
- + best_delta;
-
- *a_scale = best_scale;
- *a_delta = best_delta;
- }
- }
-
-#else /* !AF_CONFIG_OPTION_USE_WARPER */
-
- /* ANSI C doesn't like empty source files */
- typedef int _af_warp_dummy;
-
-#endif /* !AF_CONFIG_OPTION_USE_WARPER */
-
-/* END */
diff --git a/src/autofit/afwarp.h b/src/autofit/afwarp.h
deleted file mode 100644
index 2e85cbd85..000000000
--- a/src/autofit/afwarp.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/***************************************************************************/
-/* */
-/* afwarp.h */
-/* */
-/* Auto-fitter warping algorithm (specification). */
-/* */
-/* Copyright 2006-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFWARP_H_
-#define AFWARP_H_
-
-#include "afhints.h"
-
-FT_BEGIN_HEADER
-
-#define AF_WARPER_SCALE
-
-#define AF_WARPER_FLOOR( x ) ( (x) & ~FT_TYPEOF( x )63 )
-#define AF_WARPER_CEIL( x ) AF_WARPER_FLOOR( (x) + 63 )
-
-
- typedef FT_Int32 AF_WarpScore;
-
- typedef struct AF_WarperRec_
- {
- FT_Pos x1, x2;
- FT_Pos t1, t2;
- FT_Pos x1min, x1max;
- FT_Pos x2min, x2max;
- FT_Pos w0, wmin, wmax;
-
- FT_Fixed best_scale;
- FT_Pos best_delta;
- AF_WarpScore best_score;
- AF_WarpScore best_distort;
-
- } AF_WarperRec, *AF_Warper;
-
-
- FT_LOCAL( void )
- af_warper_compute( AF_Warper warper,
- AF_GlyphHints hints,
- AF_Dimension dim,
- FT_Fixed *a_scale,
- FT_Fixed *a_delta );
-
-
-FT_END_HEADER
-
-
-#endif /* AFWARP_H_ */
-
-
-/* END */
diff --git a/src/autofit/afwrtsys.h b/src/autofit/afwrtsys.h
deleted file mode 100644
index 86749a2a8..000000000
--- a/src/autofit/afwrtsys.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/***************************************************************************/
-/* */
-/* afwrtsys.h */
-/* */
-/* Auto-fitter writing systems (specification only). */
-/* */
-/* Copyright 2013-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFWRTSYS_H_
-#define AFWRTSYS_H_
-
- /* Since preprocessor directives can't create other preprocessor */
- /* directives, we have to include the header files manually. */
-
-#include "afdummy.h"
-#include "aflatin.h"
-#include "afcjk.h"
-#include "afindic.h"
-#ifdef FT_OPTION_AUTOFIT2
-#include "aflatin2.h"
-#endif
-
-#endif /* AFWRTSYS_H_ */
-
-
- /* The following part can be included multiple times. */
- /* Define `WRITING_SYSTEM' as needed. */
-
-
- /* Add new writing systems here. The arguments are the writing system */
- /* name in lowercase and uppercase, respectively. */
-
- WRITING_SYSTEM( dummy, DUMMY )
- WRITING_SYSTEM( latin, LATIN )
- WRITING_SYSTEM( cjk, CJK )
- WRITING_SYSTEM( indic, INDIC )
-#ifdef FT_OPTION_AUTOFIT2
- WRITING_SYSTEM( latin2, LATIN2 )
-#endif
-
-
-/* END */
diff --git a/src/autofit/autofit.c b/src/autofit/autofit.c
deleted file mode 100644
index bbedad7b5..000000000
--- a/src/autofit/autofit.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/***************************************************************************/
-/* */
-/* autofit.c */
-/* */
-/* Auto-fitter module (body). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "afangles.c"
-#include "afblue.c"
-#include "afcjk.c"
-#include "afdummy.c"
-#include "afglobal.c"
-#include "afhints.c"
-#include "afindic.c"
-#include "aflatin.c"
-#include "aflatin2.c"
-#include "afloader.c"
-#include "afmodule.c"
-#include "afpic.c"
-#include "afranges.c"
-#include "afshaper.c"
-#include "afwarp.c"
-
-
-/* END */
diff --git a/src/autofit/module.mk b/src/autofit/module.mk
deleted file mode 100644
index c4e249b6f..000000000
--- a/src/autofit/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 auto-fitter module definition
-#
-
-
-# Copyright 2003-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += AUTOFIT_MODULE
-
-define AUTOFIT_MODULE
-$(OPEN_DRIVER) FT_Module_Class, autofit_module_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)autofit $(ECHO_DRIVER_DESC)automatic hinting module$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/autofit/rules.mk b/src/autofit/rules.mk
deleted file mode 100644
index ec4e1302d..000000000
--- a/src/autofit/rules.mk
+++ /dev/null
@@ -1,89 +0,0 @@
-#
-# FreeType 2 auto-fitter module configuration rules
-#
-
-
-# Copyright 2003-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# AUTOF driver directory
-#
-AUTOF_DIR := $(SRC_DIR)/autofit
-
-
-# compilation flags for the driver
-#
-AUTOF_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(AUTOF_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# AUTOF driver sources (i.e., C files)
-#
-AUTOF_DRV_SRC := $(AUTOF_DIR)/afangles.c \
- $(AUTOF_DIR)/afblue.c \
- $(AUTOF_DIR)/afcjk.c \
- $(AUTOF_DIR)/afdummy.c \
- $(AUTOF_DIR)/afglobal.c \
- $(AUTOF_DIR)/afhints.c \
- $(AUTOF_DIR)/afindic.c \
- $(AUTOF_DIR)/aflatin.c \
- $(AUTOF_DIR)/afloader.c \
- $(AUTOF_DIR)/afmodule.c \
- $(AUTOF_DIR)/afpic.c \
- $(AUTOF_DIR)/afranges.c \
- $(AUTOF_DIR)/afshaper.c \
- $(AUTOF_DIR)/afwarp.c
-
-# AUTOF driver headers
-#
-AUTOF_DRV_H := $(AUTOF_DRV_SRC:%c=%h) \
- $(AUTOF_DIR)/afcover.h \
- $(AUTOF_DIR)/aferrors.h \
- $(AUTOF_DIR)/afscript.h \
- $(AUTOF_DIR)/afstyles.h \
- $(AUTOF_DIR)/aftypes.h \
- $(AUTOF_DIR)/afwrtsys.h
-
-
-# AUTOF driver object(s)
-#
-# AUTOF_DRV_OBJ_M is used during `multi' builds.
-# AUTOF_DRV_OBJ_S is used during `single' builds.
-#
-AUTOF_DRV_OBJ_M := $(AUTOF_DRV_SRC:$(AUTOF_DIR)/%.c=$(OBJ_DIR)/%.$O)
-AUTOF_DRV_OBJ_S := $(OBJ_DIR)/autofit.$O
-
-# AUTOF driver source file for single build
-#
-AUTOF_DRV_SRC_S := $(AUTOF_DIR)/autofit.c
-
-
-# AUTOF driver - single object
-#
-$(AUTOF_DRV_OBJ_S): $(AUTOF_DRV_SRC_S) $(AUTOF_DRV_SRC) \
- $(FREETYPE_H) $(AUTOF_DRV_H)
- $(AUTOF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(AUTOF_DRV_SRC_S))
-
-
-# AUTOF driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(AUTOF_DIR)/%.c $(FREETYPE_H) $(AUTOF_DRV_H)
- $(AUTOF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(AUTOF_DRV_OBJ_S)
-DRV_OBJS_M += $(AUTOF_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/base/Jamfile b/src/base/Jamfile
deleted file mode 100644
index 9e9a91b20..000000000
--- a/src/base/Jamfile
+++ /dev/null
@@ -1,88 +0,0 @@
-# FreeType 2 src/base Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) base ;
-
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = basepic
- ftadvanc
- ftcalc
- ftdbgmem
- ftgloadr
- fthash
- ftobjs
- ftoutln
- ftpic
- ftrfork
- ftsnames
- ftstream
- fttrigon
- ftutil
- ;
- }
- else
- {
- _sources = ftbase ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# Add the optional/replaceable files.
-#
-{
- local _sources = ftapi
- ftbbox
- ftbdf
- ftbitmap
- ftcid
- ftdebug
- ftfntfmt
- ftfstype
- ftgasp
- ftglyph
- ftgxval
- ftinit
- ftlcdfil
- ftmm
- ftotval
- ftpatent
- ftpfr
- ftstroke
- ftsynth
- ftsystem
- fttype1
- ftwinfnt
- ;
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# Add Macintosh-specific file to the library when necessary.
-#
-if $(MAC)
-{
- Library $(FT2_LIB) : ftmac.c ;
-}
-else if $(OS) = MACOSX
-{
- if $(FT2_MULTI)
- {
- Library $(FT2_LIB) : ftmac.c ;
- }
-}
-
-# end of src/base Jamfile
diff --git a/src/base/basepic.c b/src/base/basepic.c
deleted file mode 100644
index 57fb8169a..000000000
--- a/src/base/basepic.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/***************************************************************************/
-/* */
-/* basepic.c */
-/* */
-/* The FreeType position independent code services for base. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "basepic.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from ftglyph.c */
- void
- FT_Init_Class_ft_outline_glyph_class( FT_Glyph_Class* clazz );
-
- void
- FT_Init_Class_ft_bitmap_glyph_class( FT_Glyph_Class* clazz );
-
-#ifdef FT_CONFIG_OPTION_MAC_FONTS
- /* forward declaration of PIC init function from ftrfork.c */
- /* (not modularized) */
- void
- FT_Init_Table_ft_raccess_guess_table( ft_raccess_guess_rec* record );
-#endif
-
- /* forward declaration of PIC init functions from ftinit.c */
- FT_Error
- ft_create_default_module_classes( FT_Library library );
-
- void
- ft_destroy_default_module_classes( FT_Library library );
-
-
- void
- ft_base_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->base )
- {
- /* destroy default module classes */
- /* (in case FT_Add_Default_Modules was used) */
- ft_destroy_default_module_classes( library );
-
- FT_FREE( pic_container->base );
- pic_container->base = NULL;
- }
- }
-
-
- FT_Error
- ft_base_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- BasePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->base = container;
-
- /* initialize default modules list and pointers */
- error = ft_create_default_module_classes( library );
- if ( error )
- goto Exit;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- FT_Init_Class_ft_outline_glyph_class(
- &container->ft_outline_glyph_class );
- FT_Init_Class_ft_bitmap_glyph_class(
- &container->ft_bitmap_glyph_class );
-#ifdef FT_CONFIG_OPTION_MAC_FONTS
- FT_Init_Table_ft_raccess_guess_table(
- (ft_raccess_guess_rec*)&container->ft_raccess_guess_table );
-#endif
-
- Exit:
- if ( error )
- ft_base_pic_free( library );
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/base/basepic.h b/src/base/basepic.h
deleted file mode 100644
index 258d4ce2b..000000000
--- a/src/base/basepic.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/***************************************************************************/
-/* */
-/* basepic.h */
-/* */
-/* The FreeType position independent code services for base. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef BASEPIC_H_
-#define BASEPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_OUTLINE_GLYPH_CLASS_GET &ft_outline_glyph_class
-#define FT_BITMAP_GLYPH_CLASS_GET &ft_bitmap_glyph_class
-#define FT_DEFAULT_MODULES_GET ft_default_modules
-
-#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
-#define FT_RACCESS_GUESS_TABLE_GET ft_raccess_guess_table
-#endif
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#include FT_GLYPH_H
-
-#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
-#include FT_INTERNAL_RFORK_H
-#endif
-
-
-FT_BEGIN_HEADER
-
- typedef struct BasePIC_
- {
- FT_Module_Class** default_module_classes;
- FT_Glyph_Class ft_outline_glyph_class;
- FT_Glyph_Class ft_bitmap_glyph_class;
-
-#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
- ft_raccess_guess_rec ft_raccess_guess_table[FT_RACCESS_N_RULES];
-#endif
-
- } BasePIC;
-
-
-#define GET_PIC( lib ) ( (BasePIC*)( (lib)->pic_container.base ) )
-
-#define FT_OUTLINE_GLYPH_CLASS_GET \
- ( &GET_PIC( library )->ft_outline_glyph_class )
-#define FT_BITMAP_GLYPH_CLASS_GET \
- ( &GET_PIC( library )->ft_bitmap_glyph_class )
-#define FT_DEFAULT_MODULES_GET \
- ( GET_PIC( library )->default_module_classes )
-
-#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
-#define FT_RACCESS_GUESS_TABLE_GET \
- ( GET_PIC( library )->ft_raccess_guess_table )
-#endif
-
-
- /* see basepic.c for the implementation */
- void
- ft_base_pic_free( FT_Library library );
-
- FT_Error
- ft_base_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* BASEPIC_H_ */
-
-
-/* END */
diff --git a/src/base/ftadvanc.c b/src/base/ftadvanc.c
deleted file mode 100644
index 1557607fc..000000000
--- a/src/base/ftadvanc.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftadvanc.c */
-/* */
-/* Quick computation of advance widths (body). */
-/* */
-/* Copyright 2008-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-
-#include FT_ADVANCES_H
-#include FT_INTERNAL_OBJECTS_H
-
-
- static FT_Error
- _ft_face_scale_advances( FT_Face face,
- FT_Fixed* advances,
- FT_UInt count,
- FT_Int32 flags )
- {
- FT_Fixed scale;
- FT_UInt nn;
-
-
- if ( flags & FT_LOAD_NO_SCALE )
- return FT_Err_Ok;
-
- if ( !face->size )
- return FT_THROW( Invalid_Size_Handle );
-
- if ( flags & FT_LOAD_VERTICAL_LAYOUT )
- scale = face->size->metrics.y_scale;
- else
- scale = face->size->metrics.x_scale;
-
- /* this must be the same scaling as to get linear{Hori,Vert}Advance */
- /* (see `FT_Load_Glyph' implementation in src/base/ftobjs.c) */
-
- for ( nn = 0; nn < count; nn++ )
- advances[nn] = FT_MulDiv( advances[nn], scale, 64 );
-
- return FT_Err_Ok;
- }
-
-
- /* at the moment, we can perform fast advance retrieval only in */
- /* the following cases: */
- /* */
- /* - unscaled load */
- /* - unhinted load */
- /* - light-hinted load */
- /* - if a variations font, it must have an `HVAR' or `VVAR' */
- /* table (thus the old MM or GX fonts don't qualify; this */
- /* gets checked by the driver-specific functions) */
-
-#define LOAD_ADVANCE_FAST_CHECK( face, flags ) \
- ( flags & ( FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING ) || \
- FT_LOAD_TARGET_MODE( flags ) == FT_RENDER_MODE_LIGHT )
-
-
- /* documentation is in ftadvanc.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_Advance( FT_Face face,
- FT_UInt gindex,
- FT_Int32 flags,
- FT_Fixed *padvance )
- {
- FT_Face_GetAdvancesFunc func;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( !padvance )
- return FT_THROW( Invalid_Argument );
-
- if ( gindex >= (FT_UInt)face->num_glyphs )
- return FT_THROW( Invalid_Glyph_Index );
-
- func = face->driver->clazz->get_advances;
- if ( func && LOAD_ADVANCE_FAST_CHECK( face, flags ) )
- {
- FT_Error error;
-
-
- error = func( face, gindex, 1, flags, padvance );
- if ( !error )
- return _ft_face_scale_advances( face, padvance, 1, flags );
-
- if ( FT_ERR_NEQ( error, Unimplemented_Feature ) )
- return error;
- }
-
- return FT_Get_Advances( face, gindex, 1, flags, padvance );
- }
-
-
- /* documentation is in ftadvanc.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_Advances( FT_Face face,
- FT_UInt start,
- FT_UInt count,
- FT_Int32 flags,
- FT_Fixed *padvances )
- {
- FT_Face_GetAdvancesFunc func;
- FT_UInt num, end, nn;
- FT_Error error = FT_Err_Ok;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( !padvances )
- return FT_THROW( Invalid_Argument );
-
- num = (FT_UInt)face->num_glyphs;
- end = start + count;
- if ( start >= num || end < start || end > num )
- return FT_THROW( Invalid_Glyph_Index );
-
- if ( count == 0 )
- return FT_Err_Ok;
-
- func = face->driver->clazz->get_advances;
- if ( func && LOAD_ADVANCE_FAST_CHECK( face, flags ) )
- {
- error = func( face, start, count, flags, padvances );
- if ( !error )
- return _ft_face_scale_advances( face, padvances, count, flags );
-
- if ( FT_ERR_NEQ( error, Unimplemented_Feature ) )
- return error;
- }
-
- error = FT_Err_Ok;
-
- if ( flags & FT_ADVANCE_FLAG_FAST_ONLY )
- return FT_THROW( Unimplemented_Feature );
-
- flags |= (FT_UInt32)FT_LOAD_ADVANCE_ONLY;
- for ( nn = 0; nn < count; nn++ )
- {
- error = FT_Load_Glyph( face, start + nn, flags );
- if ( error )
- break;
-
- /* scale from 26.6 to 16.16 */
- padvances[nn] = ( flags & FT_LOAD_VERTICAL_LAYOUT )
- ? face->glyph->advance.y * 1024
- : face->glyph->advance.x * 1024;
- }
-
- return error;
- }
-
-
-/* END */
diff --git a/src/base/ftapi.c b/src/base/ftapi.c
deleted file mode 100644
index 4262d37e3..000000000
--- a/src/base/ftapi.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftapi.c */
-/* */
-/* The FreeType compatibility functions (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_LIST_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TABLES_H
-#include FT_OUTLINE_H
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** C O M P A T I B I L I T Y ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- /* backward compatibility API */
-
- FT_BASE_DEF( void )
- FT_New_Memory_Stream( FT_Library library,
- FT_Byte* base,
- FT_ULong size,
- FT_Stream stream )
- {
- FT_UNUSED( library );
-
- FT_Stream_OpenMemory( stream, base, size );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Seek_Stream( FT_Stream stream,
- FT_ULong pos )
- {
- return FT_Stream_Seek( stream, pos );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Skip_Stream( FT_Stream stream,
- FT_Long distance )
- {
- return FT_Stream_Skip( stream, distance );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Read_Stream( FT_Stream stream,
- FT_Byte* buffer,
- FT_ULong count )
- {
- return FT_Stream_Read( stream, buffer, count );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Read_Stream_At( FT_Stream stream,
- FT_ULong pos,
- FT_Byte* buffer,
- FT_ULong count )
- {
- return FT_Stream_ReadAt( stream, pos, buffer, count );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Extract_Frame( FT_Stream stream,
- FT_ULong count,
- FT_Byte** pbytes )
- {
- return FT_Stream_ExtractFrame( stream, count, pbytes );
- }
-
-
- FT_BASE_DEF( void )
- FT_Release_Frame( FT_Stream stream,
- FT_Byte** pbytes )
- {
- FT_Stream_ReleaseFrame( stream, pbytes );
- }
-
- FT_BASE_DEF( FT_Error )
- FT_Access_Frame( FT_Stream stream,
- FT_ULong count )
- {
- return FT_Stream_EnterFrame( stream, count );
- }
-
-
- FT_BASE_DEF( void )
- FT_Forget_Frame( FT_Stream stream )
- {
- FT_Stream_ExitFrame( stream );
- }
-
-
-/* END */
diff --git a/src/base/ftbase.c b/src/base/ftbase.c
deleted file mode 100644
index 55f735994..000000000
--- a/src/base/ftbase.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbase.c */
-/* */
-/* Single object library component (body only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-
-#include "basepic.c"
-#include "ftadvanc.c"
-#include "ftcalc.c"
-#include "ftdbgmem.c"
-#include "ftgloadr.c"
-#include "fthash.c"
-#include "ftmac.c"
-#include "ftobjs.c"
-#include "ftoutln.c"
-#include "ftpic.c"
-#include "ftrfork.c"
-#include "ftsnames.c"
-#include "ftstream.c"
-#include "fttrigon.c"
-#include "ftutil.c"
-
-
-/* END */
diff --git a/src/base/ftbase.h b/src/base/ftbase.h
deleted file mode 100644
index 2072284f0..000000000
--- a/src/base/ftbase.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbase.h */
-/* */
-/* The FreeType private functions used in base module (specification). */
-/* */
-/* Copyright 2008-2017 by */
-/* David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTBASE_H_
-#define FTBASE_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-
-
-FT_BEGIN_HEADER
-
-
- /* MacOS resource fork cannot exceed 16MB at least for Carbon code; */
- /* see https://support.microsoft.com/en-us/kb/130437 */
-#define FT_MAC_RFORK_MAX_LEN 0x00FFFFFFUL
-
-
- /* Assume the stream is sfnt-wrapped PS Type1 or sfnt-wrapped CID-keyed */
- /* font, and try to load a face specified by the face_index. */
- FT_LOCAL( FT_Error )
- open_face_PS_from_sfnt_stream( FT_Library library,
- FT_Stream stream,
- FT_Long face_index,
- FT_Int num_params,
- FT_Parameter *params,
- FT_Face *aface );
-
-
- /* Create a new FT_Face given a buffer and a driver name. */
- /* From ftmac.c. */
- FT_LOCAL( FT_Error )
- open_face_from_buffer( FT_Library library,
- FT_Byte* base,
- FT_ULong size,
- FT_Long face_index,
- const char* driver_name,
- FT_Face *aface );
-
-
-#if defined( FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK ) && \
- !defined( FT_MACINTOSH )
- /* Mac OS X/Darwin kernel often changes recommended method to access */
- /* the resource fork and older methods makes the kernel issue the */
- /* warning of deprecated method. To calm it down, the methods based */
- /* on Darwin VFS should be grouped and skip the rest methods after */
- /* the case the resource is opened but found to lack a font in it. */
- FT_LOCAL( FT_Bool )
- ft_raccess_rule_by_darwin_vfs( FT_Library library, FT_UInt rule_index );
-#endif
-
-
-FT_END_HEADER
-
-#endif /* FTBASE_H_ */
-
-
-/* END */
diff --git a/src/base/ftbbox.c b/src/base/ftbbox.c
deleted file mode 100644
index 6e19da63c..000000000
--- a/src/base/ftbbox.c
+++ /dev/null
@@ -1,515 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbbox.c */
-/* */
-/* FreeType bbox computation (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used */
-/* modified and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This component has a _single_ role: to compute exact outline bounding */
- /* boxes. */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-
-#include FT_BBOX_H
-#include FT_IMAGE_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_OBJECTS_H
-
-
- typedef struct TBBox_Rec_
- {
- FT_Vector last;
- FT_BBox bbox;
-
- } TBBox_Rec;
-
-
-#define FT_UPDATE_BBOX( p, bbox ) \
- FT_BEGIN_STMNT \
- if ( p->x < bbox.xMin ) \
- bbox.xMin = p->x; \
- if ( p->x > bbox.xMax ) \
- bbox.xMax = p->x; \
- if ( p->y < bbox.yMin ) \
- bbox.yMin = p->y; \
- if ( p->y > bbox.yMax ) \
- bbox.yMax = p->y; \
- FT_END_STMNT
-
-#define CHECK_X( p, bbox ) \
- ( p->x < bbox.xMin || p->x > bbox.xMax )
-
-#define CHECK_Y( p, bbox ) \
- ( p->y < bbox.yMin || p->y > bbox.yMax )
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* BBox_Move_To */
- /* */
- /* <Description> */
- /* This function is used as a `move_to' emitter during */
- /* FT_Outline_Decompose(). It simply records the destination point */
- /* in `user->last'. We also update bbox in case contour starts with */
- /* an implicit `on' point. */
- /* */
- /* <Input> */
- /* to :: A pointer to the destination vector. */
- /* */
- /* <InOut> */
- /* user :: A pointer to the current walk context. */
- /* */
- /* <Return> */
- /* Always 0. Needed for the interface only. */
- /* */
- static int
- BBox_Move_To( FT_Vector* to,
- TBBox_Rec* user )
- {
- FT_UPDATE_BBOX( to, user->bbox );
-
- user->last = *to;
-
- return 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* BBox_Line_To */
- /* */
- /* <Description> */
- /* This function is used as a `line_to' emitter during */
- /* FT_Outline_Decompose(). It simply records the destination point */
- /* in `user->last'; no further computations are necessary because */
- /* bbox already contains both explicit ends of the line segment. */
- /* */
- /* <Input> */
- /* to :: A pointer to the destination vector. */
- /* */
- /* <InOut> */
- /* user :: A pointer to the current walk context. */
- /* */
- /* <Return> */
- /* Always 0. Needed for the interface only. */
- /* */
- static int
- BBox_Line_To( FT_Vector* to,
- TBBox_Rec* user )
- {
- user->last = *to;
-
- return 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* BBox_Conic_Check */
- /* */
- /* <Description> */
- /* Find the extrema of a 1-dimensional conic Bezier curve and update */
- /* a bounding range. This version uses direct computation, as it */
- /* doesn't need square roots. */
- /* */
- /* <Input> */
- /* y1 :: The start coordinate. */
- /* */
- /* y2 :: The coordinate of the control point. */
- /* */
- /* y3 :: The end coordinate. */
- /* */
- /* <InOut> */
- /* min :: The address of the current minimum. */
- /* */
- /* max :: The address of the current maximum. */
- /* */
- static void
- BBox_Conic_Check( FT_Pos y1,
- FT_Pos y2,
- FT_Pos y3,
- FT_Pos* min,
- FT_Pos* max )
- {
- /* This function is only called when a control off-point is outside */
- /* the bbox that contains all on-points. It finds a local extremum */
- /* within the segment, equal to (y1*y3 - y2*y2)/(y1 - 2*y2 + y3). */
- /* Or, offsetting from y2, we get */
-
- y1 -= y2;
- y3 -= y2;
- y2 += FT_MulDiv( y1, y3, y1 + y3 );
-
- if ( y2 < *min )
- *min = y2;
- if ( y2 > *max )
- *max = y2;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* BBox_Conic_To */
- /* */
- /* <Description> */
- /* This function is used as a `conic_to' emitter during */
- /* FT_Outline_Decompose(). It checks a conic Bezier curve with the */
- /* current bounding box, and computes its extrema if necessary to */
- /* update it. */
- /* */
- /* <Input> */
- /* control :: A pointer to a control point. */
- /* */
- /* to :: A pointer to the destination vector. */
- /* */
- /* <InOut> */
- /* user :: The address of the current walk context. */
- /* */
- /* <Return> */
- /* Always 0. Needed for the interface only. */
- /* */
- /* <Note> */
- /* In the case of a non-monotonous arc, we compute directly the */
- /* extremum coordinates, as it is sufficiently fast. */
- /* */
- static int
- BBox_Conic_To( FT_Vector* control,
- FT_Vector* to,
- TBBox_Rec* user )
- {
- /* in case `to' is implicit and not included in bbox yet */
- FT_UPDATE_BBOX( to, user->bbox );
-
- if ( CHECK_X( control, user->bbox ) )
- BBox_Conic_Check( user->last.x,
- control->x,
- to->x,
- &user->bbox.xMin,
- &user->bbox.xMax );
-
- if ( CHECK_Y( control, user->bbox ) )
- BBox_Conic_Check( user->last.y,
- control->y,
- to->y,
- &user->bbox.yMin,
- &user->bbox.yMax );
-
- user->last = *to;
-
- return 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* BBox_Cubic_Check */
- /* */
- /* <Description> */
- /* Find the extrema of a 1-dimensional cubic Bezier curve and */
- /* update a bounding range. This version uses iterative splitting */
- /* because it is faster than the exact solution with square roots. */
- /* */
- /* <Input> */
- /* p1 :: The start coordinate. */
- /* */
- /* p2 :: The coordinate of the first control point. */
- /* */
- /* p3 :: The coordinate of the second control point. */
- /* */
- /* p4 :: The end coordinate. */
- /* */
- /* <InOut> */
- /* min :: The address of the current minimum. */
- /* */
- /* max :: The address of the current maximum. */
- /* */
- static FT_Pos
- cubic_peak( FT_Pos q1,
- FT_Pos q2,
- FT_Pos q3,
- FT_Pos q4 )
- {
- FT_Pos peak = 0;
- FT_Int shift;
-
-
- /* This function finds a peak of a cubic segment if it is above 0 */
- /* using iterative bisection of the segment, or returns 0. */
- /* The fixed-point arithmetic of bisection is inherently stable */
- /* but may loose accuracy in the two lowest bits. To compensate, */
- /* we upscale the segment if there is room. Large values may need */
- /* to be downscaled to avoid overflows during bisection. */
- /* It is called with either q2 or q3 positive, which is necessary */
- /* for the peak to exist and avoids undefined FT_MSB. */
-
- shift = 27 - FT_MSB( (FT_UInt32)( FT_ABS( q1 ) |
- FT_ABS( q2 ) |
- FT_ABS( q3 ) |
- FT_ABS( q4 ) ) );
-
- if ( shift > 0 )
- {
- /* upscaling too much just wastes time */
- if ( shift > 2 )
- shift = 2;
-
- q1 <<= shift;
- q2 <<= shift;
- q3 <<= shift;
- q4 <<= shift;
- }
- else
- {
- q1 >>= -shift;
- q2 >>= -shift;
- q3 >>= -shift;
- q4 >>= -shift;
- }
-
- /* for a peak to exist above 0, the cubic segment must have */
- /* at least one of its control off-points above 0. */
- while ( q2 > 0 || q3 > 0 )
- {
- /* determine which half contains the maximum and split */
- if ( q1 + q2 > q3 + q4 ) /* first half */
- {
- q4 = q4 + q3;
- q3 = q3 + q2;
- q2 = q2 + q1;
- q4 = q4 + q3;
- q3 = q3 + q2;
- q4 = ( q4 + q3 ) / 8;
- q3 = q3 / 4;
- q2 = q2 / 2;
- }
- else /* second half */
- {
- q1 = q1 + q2;
- q2 = q2 + q3;
- q3 = q3 + q4;
- q1 = q1 + q2;
- q2 = q2 + q3;
- q1 = ( q1 + q2 ) / 8;
- q2 = q2 / 4;
- q3 = q3 / 2;
- }
-
- /* check whether either end reached the maximum */
- if ( q1 == q2 && q1 >= q3 )
- {
- peak = q1;
- break;
- }
- if ( q3 == q4 && q2 <= q4 )
- {
- peak = q4;
- break;
- }
- }
-
- if ( shift > 0 )
- peak >>= shift;
- else
- peak <<= -shift;
-
- return peak;
- }
-
-
- static void
- BBox_Cubic_Check( FT_Pos p1,
- FT_Pos p2,
- FT_Pos p3,
- FT_Pos p4,
- FT_Pos* min,
- FT_Pos* max )
- {
- /* This function is only called when a control off-point is outside */
- /* the bbox that contains all on-points. So at least one of the */
- /* conditions below holds and cubic_peak is called with at least one */
- /* non-zero argument. */
-
- if ( p2 > *max || p3 > *max )
- *max += cubic_peak( p1 - *max, p2 - *max, p3 - *max, p4 - *max );
-
- /* now flip the signs to update the minimum */
- if ( p2 < *min || p3 < *min )
- *min -= cubic_peak( *min - p1, *min - p2, *min - p3, *min - p4 );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* BBox_Cubic_To */
- /* */
- /* <Description> */
- /* This function is used as a `cubic_to' emitter during */
- /* FT_Outline_Decompose(). It checks a cubic Bezier curve with the */
- /* current bounding box, and computes its extrema if necessary to */
- /* update it. */
- /* */
- /* <Input> */
- /* control1 :: A pointer to the first control point. */
- /* */
- /* control2 :: A pointer to the second control point. */
- /* */
- /* to :: A pointer to the destination vector. */
- /* */
- /* <InOut> */
- /* user :: The address of the current walk context. */
- /* */
- /* <Return> */
- /* Always 0. Needed for the interface only. */
- /* */
- /* <Note> */
- /* In the case of a non-monotonous arc, we don't compute directly */
- /* extremum coordinates, we subdivide instead. */
- /* */
- static int
- BBox_Cubic_To( FT_Vector* control1,
- FT_Vector* control2,
- FT_Vector* to,
- TBBox_Rec* user )
- {
- /* We don't need to check `to' since it is always an on-point, */
- /* thus within the bbox. Only segments with an off-point outside */
- /* the bbox can possibly reach new extreme values. */
-
- if ( CHECK_X( control1, user->bbox ) ||
- CHECK_X( control2, user->bbox ) )
- BBox_Cubic_Check( user->last.x,
- control1->x,
- control2->x,
- to->x,
- &user->bbox.xMin,
- &user->bbox.xMax );
-
- if ( CHECK_Y( control1, user->bbox ) ||
- CHECK_Y( control2, user->bbox ) )
- BBox_Cubic_Check( user->last.y,
- control1->y,
- control2->y,
- to->y,
- &user->bbox.yMin,
- &user->bbox.yMax );
-
- user->last = *to;
-
- return 0;
- }
-
-
- FT_DEFINE_OUTLINE_FUNCS(
- bbox_interface,
-
- (FT_Outline_MoveTo_Func) BBox_Move_To, /* move_to */
- (FT_Outline_LineTo_Func) BBox_Line_To, /* line_to */
- (FT_Outline_ConicTo_Func)BBox_Conic_To, /* conic_to */
- (FT_Outline_CubicTo_Func)BBox_Cubic_To, /* cubic_to */
- 0, /* shift */
- 0 /* delta */
- )
-
-
- /* documentation is in ftbbox.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Outline_Get_BBox( FT_Outline* outline,
- FT_BBox *abbox )
- {
- FT_BBox cbox = { 0x7FFFFFFFL, 0x7FFFFFFFL,
- -0x7FFFFFFFL, -0x7FFFFFFFL };
- FT_BBox bbox = { 0x7FFFFFFFL, 0x7FFFFFFFL,
- -0x7FFFFFFFL, -0x7FFFFFFFL };
- FT_Vector* vec;
- FT_UShort n;
-
-
- if ( !abbox )
- return FT_THROW( Invalid_Argument );
-
- if ( !outline )
- return FT_THROW( Invalid_Outline );
-
- /* if outline is empty, return (0,0,0,0) */
- if ( outline->n_points == 0 || outline->n_contours <= 0 )
- {
- abbox->xMin = abbox->xMax = 0;
- abbox->yMin = abbox->yMax = 0;
-
- return 0;
- }
-
- /* We compute the control box as well as the bounding box of */
- /* all `on' points in the outline. Then, if the two boxes */
- /* coincide, we exit immediately. */
-
- vec = outline->points;
-
- for ( n = 0; n < outline->n_points; n++ )
- {
- FT_UPDATE_BBOX( vec, cbox );
-
- if ( FT_CURVE_TAG( outline->tags[n] ) == FT_CURVE_TAG_ON )
- FT_UPDATE_BBOX( vec, bbox );
-
- vec++;
- }
-
- /* test two boxes for equality */
- if ( cbox.xMin < bbox.xMin || cbox.xMax > bbox.xMax ||
- cbox.yMin < bbox.yMin || cbox.yMax > bbox.yMax )
- {
- /* the two boxes are different, now walk over the outline to */
- /* get the Bezier arc extrema. */
-
- FT_Error error;
- TBBox_Rec user;
-
-#ifdef FT_CONFIG_OPTION_PIC
- FT_Outline_Funcs bbox_interface;
-
-
- Init_Class_bbox_interface( &bbox_interface );
-#endif
-
- user.bbox = bbox;
-
- error = FT_Outline_Decompose( outline, &bbox_interface, &user );
- if ( error )
- return error;
-
- *abbox = user.bbox;
- }
- else
- *abbox = bbox;
-
- return FT_Err_Ok;
- }
-
-
-/* END */
diff --git a/src/base/ftbdf.c b/src/base/ftbdf.c
deleted file mode 100644
index 40f0ca2bb..000000000
--- a/src/base/ftbdf.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbdf.c */
-/* */
-/* FreeType API for accessing BDF-specific strings (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_BDF_H
-
-
- /* documentation is in ftbdf.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_BDF_Charset_ID( FT_Face face,
- const char* *acharset_encoding,
- const char* *acharset_registry )
- {
- FT_Error error;
- const char* encoding = NULL;
- const char* registry = NULL;
-
- FT_Service_BDF service;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- FT_FACE_FIND_SERVICE( face, service, BDF );
-
- if ( service && service->get_charset_id )
- error = service->get_charset_id( face, &encoding, &registry );
- else
- error = FT_THROW( Invalid_Argument );
-
- if ( acharset_encoding )
- *acharset_encoding = encoding;
-
- if ( acharset_registry )
- *acharset_registry = registry;
-
- return error;
- }
-
-
- /* documentation is in ftbdf.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_BDF_Property( FT_Face face,
- const char* prop_name,
- BDF_PropertyRec *aproperty )
- {
- FT_Error error;
-
- FT_Service_BDF service;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( !aproperty )
- return FT_THROW( Invalid_Argument );
-
- aproperty->type = BDF_PROPERTY_TYPE_NONE;
-
- FT_FACE_FIND_SERVICE( face, service, BDF );
-
- if ( service && service->get_property )
- error = service->get_property( face, prop_name, aproperty );
- else
- error = FT_THROW( Invalid_Argument );
-
- return error;
- }
-
-
-/* END */
diff --git a/src/base/ftbitmap.c b/src/base/ftbitmap.c
deleted file mode 100644
index 88c88c4c1..000000000
--- a/src/base/ftbitmap.c
+++ /dev/null
@@ -1,809 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbitmap.c */
-/* */
-/* FreeType utility functions for bitmaps (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-
-#include FT_BITMAP_H
-#include FT_IMAGE_H
-#include FT_INTERNAL_OBJECTS_H
-
-
- static
- const FT_Bitmap null_bitmap = { 0, 0, 0, 0, 0, 0, 0, 0 };
-
-
- /* documentation is in ftbitmap.h */
-
- FT_EXPORT_DEF( void )
- FT_Bitmap_Init( FT_Bitmap *abitmap )
- {
- if ( abitmap )
- *abitmap = null_bitmap;
- }
-
-
- /* deprecated function name; retained for ABI compatibility */
-
- FT_EXPORT_DEF( void )
- FT_Bitmap_New( FT_Bitmap *abitmap )
- {
- if ( abitmap )
- *abitmap = null_bitmap;
- }
-
-
- /* documentation is in ftbitmap.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Bitmap_Copy( FT_Library library,
- const FT_Bitmap *source,
- FT_Bitmap *target)
- {
- FT_Memory memory;
- FT_Error error = FT_Err_Ok;
-
- FT_Int pitch;
- FT_ULong size;
-
- FT_Int source_pitch_sign, target_pitch_sign;
-
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- if ( !source || !target )
- return FT_THROW( Invalid_Argument );
-
- if ( source == target )
- return FT_Err_Ok;
-
- source_pitch_sign = source->pitch < 0 ? -1 : 1;
- target_pitch_sign = target->pitch < 0 ? -1 : 1;
-
- if ( !source->buffer )
- {
- *target = *source;
- if ( source_pitch_sign != target_pitch_sign )
- target->pitch = -target->pitch;
-
- return FT_Err_Ok;
- }
-
- memory = library->memory;
- pitch = source->pitch;
-
- if ( pitch < 0 )
- pitch = -pitch;
- size = (FT_ULong)pitch * source->rows;
-
- if ( target->buffer )
- {
- FT_Int target_pitch = target->pitch;
- FT_ULong target_size;
-
-
- if ( target_pitch < 0 )
- target_pitch = -target_pitch;
- target_size = (FT_ULong)target_pitch * target->rows;
-
- if ( target_size != size )
- (void)FT_QREALLOC( target->buffer, target_size, size );
- }
- else
- (void)FT_QALLOC( target->buffer, size );
-
- if ( !error )
- {
- unsigned char *p;
-
-
- p = target->buffer;
- *target = *source;
- target->buffer = p;
-
- if ( source_pitch_sign == target_pitch_sign )
- FT_MEM_COPY( target->buffer, source->buffer, size );
- else
- {
- /* take care of bitmap flow */
- FT_UInt i;
- FT_Byte* s = source->buffer;
- FT_Byte* t = target->buffer;
-
-
- t += (FT_ULong)pitch * ( target->rows - 1 );
-
- for ( i = target->rows; i > 0; i-- )
- {
- FT_ARRAY_COPY( t, s, pitch );
-
- s += pitch;
- t -= pitch;
- }
- }
- }
-
- return error;
- }
-
-
- /* Enlarge `bitmap' horizontally and vertically by `xpixels' */
- /* and `ypixels', respectively. */
-
- static FT_Error
- ft_bitmap_assure_buffer( FT_Memory memory,
- FT_Bitmap* bitmap,
- FT_UInt xpixels,
- FT_UInt ypixels )
- {
- FT_Error error;
- int pitch;
- int new_pitch;
- FT_UInt bpp;
- FT_UInt i, width, height;
- unsigned char* buffer = NULL;
-
-
- width = bitmap->width;
- height = bitmap->rows;
- pitch = bitmap->pitch;
- if ( pitch < 0 )
- pitch = -pitch;
-
- switch ( bitmap->pixel_mode )
- {
- case FT_PIXEL_MODE_MONO:
- bpp = 1;
- new_pitch = (int)( ( width + xpixels + 7 ) >> 3 );
- break;
- case FT_PIXEL_MODE_GRAY2:
- bpp = 2;
- new_pitch = (int)( ( width + xpixels + 3 ) >> 2 );
- break;
- case FT_PIXEL_MODE_GRAY4:
- bpp = 4;
- new_pitch = (int)( ( width + xpixels + 1 ) >> 1 );
- break;
- case FT_PIXEL_MODE_GRAY:
- case FT_PIXEL_MODE_LCD:
- case FT_PIXEL_MODE_LCD_V:
- bpp = 8;
- new_pitch = (int)( width + xpixels );
- break;
- default:
- return FT_THROW( Invalid_Glyph_Format );
- }
-
- /* if no need to allocate memory */
- if ( ypixels == 0 && new_pitch <= pitch )
- {
- /* zero the padding */
- FT_UInt bit_width = (FT_UInt)pitch * 8;
- FT_UInt bit_last = ( width + xpixels ) * bpp;
-
-
- if ( bit_last < bit_width )
- {
- FT_Byte* line = bitmap->buffer + ( bit_last >> 3 );
- FT_Byte* end = bitmap->buffer + pitch;
- FT_UInt shift = bit_last & 7;
- FT_UInt mask = 0xFF00U >> shift;
- FT_UInt count = height;
-
-
- for ( ; count > 0; count--, line += pitch, end += pitch )
- {
- FT_Byte* write = line;
-
-
- if ( shift > 0 )
- {
- write[0] = (FT_Byte)( write[0] & mask );
- write++;
- }
- if ( write < end )
- FT_MEM_ZERO( write, end - write );
- }
- }
-
- return FT_Err_Ok;
- }
-
- /* otherwise allocate new buffer */
- if ( FT_QALLOC_MULT( buffer, new_pitch, bitmap->rows + ypixels ) )
- return error;
-
- /* new rows get added at the top of the bitmap, */
- /* thus take care of the flow direction */
- if ( bitmap->pitch > 0 )
- {
- FT_UInt len = ( width * bpp + 7 ) >> 3;
-
-
- for ( i = 0; i < bitmap->rows; i++ )
- FT_MEM_COPY( buffer + (FT_UInt)new_pitch * ( ypixels + i ),
- bitmap->buffer + (FT_UInt)pitch * i,
- len );
- }
- else
- {
- FT_UInt len = ( width * bpp + 7 ) >> 3;
-
-
- for ( i = 0; i < bitmap->rows; i++ )
- FT_MEM_COPY( buffer + (FT_UInt)new_pitch * i,
- bitmap->buffer + (FT_UInt)pitch * i,
- len );
- }
-
- FT_FREE( bitmap->buffer );
- bitmap->buffer = buffer;
-
- if ( bitmap->pitch < 0 )
- new_pitch = -new_pitch;
-
- /* set pitch only, width and height are left untouched */
- bitmap->pitch = new_pitch;
-
- return FT_Err_Ok;
- }
-
-
- /* documentation is in ftbitmap.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Bitmap_Embolden( FT_Library library,
- FT_Bitmap* bitmap,
- FT_Pos xStrength,
- FT_Pos yStrength )
- {
- FT_Error error;
- unsigned char* p;
- FT_Int i, x, pitch;
- FT_UInt y;
- FT_Int xstr, ystr;
-
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- if ( !bitmap || !bitmap->buffer )
- return FT_THROW( Invalid_Argument );
-
- if ( ( ( FT_PIX_ROUND( xStrength ) >> 6 ) > FT_INT_MAX ) ||
- ( ( FT_PIX_ROUND( yStrength ) >> 6 ) > FT_INT_MAX ) )
- return FT_THROW( Invalid_Argument );
-
- xstr = (FT_Int)FT_PIX_ROUND( xStrength ) >> 6;
- ystr = (FT_Int)FT_PIX_ROUND( yStrength ) >> 6;
-
- if ( xstr == 0 && ystr == 0 )
- return FT_Err_Ok;
- else if ( xstr < 0 || ystr < 0 )
- return FT_THROW( Invalid_Argument );
-
- switch ( bitmap->pixel_mode )
- {
- case FT_PIXEL_MODE_GRAY2:
- case FT_PIXEL_MODE_GRAY4:
- {
- FT_Bitmap tmp;
-
-
- /* convert to 8bpp */
- FT_Bitmap_Init( &tmp );
- error = FT_Bitmap_Convert( library, bitmap, &tmp, 1 );
- if ( error )
- return error;
-
- FT_Bitmap_Done( library, bitmap );
- *bitmap = tmp;
- }
- break;
-
- case FT_PIXEL_MODE_MONO:
- if ( xstr > 8 )
- xstr = 8;
- break;
-
- case FT_PIXEL_MODE_LCD:
- xstr *= 3;
- break;
-
- case FT_PIXEL_MODE_LCD_V:
- ystr *= 3;
- break;
-
- case FT_PIXEL_MODE_BGRA:
- /* We don't embolden color glyphs. */
- return FT_Err_Ok;
- }
-
- error = ft_bitmap_assure_buffer( library->memory, bitmap,
- (FT_UInt)xstr, (FT_UInt)ystr );
- if ( error )
- return error;
-
- /* take care of bitmap flow */
- pitch = bitmap->pitch;
- if ( pitch > 0 )
- p = bitmap->buffer + pitch * ystr;
- else
- {
- pitch = -pitch;
- p = bitmap->buffer + (FT_UInt)pitch * ( bitmap->rows - 1 );
- }
-
- /* for each row */
- for ( y = 0; y < bitmap->rows; y++ )
- {
- /*
- * Horizontally:
- *
- * From the last pixel on, make each pixel or'ed with the
- * `xstr' pixels before it.
- */
- for ( x = pitch - 1; x >= 0; x-- )
- {
- unsigned char tmp;
-
-
- tmp = p[x];
- for ( i = 1; i <= xstr; i++ )
- {
- if ( bitmap->pixel_mode == FT_PIXEL_MODE_MONO )
- {
- p[x] |= tmp >> i;
-
- /* the maximum value of 8 for `xstr' comes from here */
- if ( x > 0 )
- p[x] |= p[x - 1] << ( 8 - i );
-
-#if 0
- if ( p[x] == 0xFF )
- break;
-#endif
- }
- else
- {
- if ( x - i >= 0 )
- {
- if ( p[x] + p[x - i] > bitmap->num_grays - 1 )
- {
- p[x] = (unsigned char)( bitmap->num_grays - 1 );
- break;
- }
- else
- {
- p[x] = (unsigned char)( p[x] + p[x - i] );
- if ( p[x] == bitmap->num_grays - 1 )
- break;
- }
- }
- else
- break;
- }
- }
- }
-
- /*
- * Vertically:
- *
- * Make the above `ystr' rows or'ed with it.
- */
- for ( x = 1; x <= ystr; x++ )
- {
- unsigned char* q;
-
-
- q = p - bitmap->pitch * x;
- for ( i = 0; i < pitch; i++ )
- q[i] |= p[i];
- }
-
- p += bitmap->pitch;
- }
-
- bitmap->width += (FT_UInt)xstr;
- bitmap->rows += (FT_UInt)ystr;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Byte
- ft_gray_for_premultiplied_srgb_bgra( const FT_Byte* bgra )
- {
- FT_UInt a = bgra[3];
- FT_UInt l;
-
-
- /* Short-circuit transparent color to avoid division by zero. */
- if ( !a )
- return 0;
-
- /*
- * Luminosity for sRGB is defined using ~0.2126,0.7152,0.0722
- * coefficients for RGB channels *on the linear colors*.
- * A gamma of 2.2 is fair to assume. And then, we need to
- * undo the premultiplication too.
- *
- * http://accessibility.kde.org/hsl-adjusted.php
- *
- * We do the computation with integers only, applying a gamma of 2.0.
- * We guarantee 32-bit arithmetic to avoid overflow but the resulting
- * luminosity fits into 16 bits.
- *
- */
-
- l = ( 4732UL /* 0.0722 * 65536 */ * bgra[0] * bgra[0] +
- 46871UL /* 0.7152 * 65536 */ * bgra[1] * bgra[1] +
- 13933UL /* 0.2126 * 65536 */ * bgra[2] * bgra[2] ) >> 16;
-
- /*
- * Final transparency can be determined as follows.
- *
- * - If alpha is zero, we want 0.
- * - If alpha is zero and luminosity is zero, we want 255.
- * - If alpha is zero and luminosity is one, we want 0.
- *
- * So the formula is a * (1 - l) = a - l * a.
- *
- * We still need to undo premultiplication by dividing l by a*a.
- *
- */
-
- return (FT_Byte)( a - l / a );
- }
-
-
- /* documentation is in ftbitmap.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Bitmap_Convert( FT_Library library,
- const FT_Bitmap *source,
- FT_Bitmap *target,
- FT_Int alignment )
- {
- FT_Error error = FT_Err_Ok;
- FT_Memory memory;
-
- FT_Byte* s;
- FT_Byte* t;
-
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- if ( !source || !target )
- return FT_THROW( Invalid_Argument );
-
- memory = library->memory;
-
- switch ( source->pixel_mode )
- {
- case FT_PIXEL_MODE_MONO:
- case FT_PIXEL_MODE_GRAY:
- case FT_PIXEL_MODE_GRAY2:
- case FT_PIXEL_MODE_GRAY4:
- case FT_PIXEL_MODE_LCD:
- case FT_PIXEL_MODE_LCD_V:
- case FT_PIXEL_MODE_BGRA:
- {
- FT_Int pad, old_target_pitch, target_pitch;
- FT_ULong old_size;
-
-
- old_target_pitch = target->pitch;
- if ( old_target_pitch < 0 )
- old_target_pitch = -old_target_pitch;
-
- old_size = target->rows * (FT_UInt)old_target_pitch;
-
- target->pixel_mode = FT_PIXEL_MODE_GRAY;
- target->rows = source->rows;
- target->width = source->width;
-
- pad = 0;
- if ( alignment > 0 )
- {
- pad = (FT_Int)source->width % alignment;
- if ( pad != 0 )
- pad = alignment - pad;
- }
-
- target_pitch = (FT_Int)source->width + pad;
-
- if ( target_pitch > 0 &&
- (FT_ULong)target->rows > FT_ULONG_MAX / (FT_ULong)target_pitch )
- return FT_THROW( Invalid_Argument );
-
- if ( target->rows * (FT_ULong)target_pitch > old_size &&
- FT_QREALLOC( target->buffer,
- old_size, target->rows * (FT_UInt)target_pitch ) )
- return error;
-
- target->pitch = target->pitch < 0 ? -target_pitch : target_pitch;
- }
- break;
-
- default:
- error = FT_THROW( Invalid_Argument );
- }
-
- s = source->buffer;
- t = target->buffer;
-
- /* take care of bitmap flow */
- if ( source->pitch < 0 )
- s -= source->pitch * (FT_Int)( source->rows - 1 );
- if ( target->pitch < 0 )
- t -= target->pitch * (FT_Int)( target->rows - 1 );
-
- switch ( source->pixel_mode )
- {
- case FT_PIXEL_MODE_MONO:
- {
- FT_UInt i;
-
-
- target->num_grays = 2;
-
- for ( i = source->rows; i > 0; i-- )
- {
- FT_Byte* ss = s;
- FT_Byte* tt = t;
- FT_UInt j;
-
-
- /* get the full bytes */
- for ( j = source->width >> 3; j > 0; j-- )
- {
- FT_Int val = ss[0]; /* avoid a byte->int cast on each line */
-
-
- tt[0] = (FT_Byte)( ( val & 0x80 ) >> 7 );
- tt[1] = (FT_Byte)( ( val & 0x40 ) >> 6 );
- tt[2] = (FT_Byte)( ( val & 0x20 ) >> 5 );
- tt[3] = (FT_Byte)( ( val & 0x10 ) >> 4 );
- tt[4] = (FT_Byte)( ( val & 0x08 ) >> 3 );
- tt[5] = (FT_Byte)( ( val & 0x04 ) >> 2 );
- tt[6] = (FT_Byte)( ( val & 0x02 ) >> 1 );
- tt[7] = (FT_Byte)( val & 0x01 );
-
- tt += 8;
- ss += 1;
- }
-
- /* get remaining pixels (if any) */
- j = source->width & 7;
- if ( j > 0 )
- {
- FT_Int val = *ss;
-
-
- for ( ; j > 0; j-- )
- {
- tt[0] = (FT_Byte)( ( val & 0x80 ) >> 7);
- val <<= 1;
- tt += 1;
- }
- }
-
- s += source->pitch;
- t += target->pitch;
- }
- }
- break;
-
-
- case FT_PIXEL_MODE_GRAY:
- case FT_PIXEL_MODE_LCD:
- case FT_PIXEL_MODE_LCD_V:
- {
- FT_UInt width = source->width;
- FT_UInt i;
-
-
- target->num_grays = 256;
-
- for ( i = source->rows; i > 0; i-- )
- {
- FT_ARRAY_COPY( t, s, width );
-
- s += source->pitch;
- t += target->pitch;
- }
- }
- break;
-
-
- case FT_PIXEL_MODE_GRAY2:
- {
- FT_UInt i;
-
-
- target->num_grays = 4;
-
- for ( i = source->rows; i > 0; i-- )
- {
- FT_Byte* ss = s;
- FT_Byte* tt = t;
- FT_UInt j;
-
-
- /* get the full bytes */
- for ( j = source->width >> 2; j > 0; j-- )
- {
- FT_Int val = ss[0];
-
-
- tt[0] = (FT_Byte)( ( val & 0xC0 ) >> 6 );
- tt[1] = (FT_Byte)( ( val & 0x30 ) >> 4 );
- tt[2] = (FT_Byte)( ( val & 0x0C ) >> 2 );
- tt[3] = (FT_Byte)( ( val & 0x03 ) );
-
- ss += 1;
- tt += 4;
- }
-
- j = source->width & 3;
- if ( j > 0 )
- {
- FT_Int val = ss[0];
-
-
- for ( ; j > 0; j-- )
- {
- tt[0] = (FT_Byte)( ( val & 0xC0 ) >> 6 );
- val <<= 2;
- tt += 1;
- }
- }
-
- s += source->pitch;
- t += target->pitch;
- }
- }
- break;
-
-
- case FT_PIXEL_MODE_GRAY4:
- {
- FT_UInt i;
-
-
- target->num_grays = 16;
-
- for ( i = source->rows; i > 0; i-- )
- {
- FT_Byte* ss = s;
- FT_Byte* tt = t;
- FT_UInt j;
-
-
- /* get the full bytes */
- for ( j = source->width >> 1; j > 0; j-- )
- {
- FT_Int val = ss[0];
-
-
- tt[0] = (FT_Byte)( ( val & 0xF0 ) >> 4 );
- tt[1] = (FT_Byte)( ( val & 0x0F ) );
-
- ss += 1;
- tt += 2;
- }
-
- if ( source->width & 1 )
- tt[0] = (FT_Byte)( ( ss[0] & 0xF0 ) >> 4 );
-
- s += source->pitch;
- t += target->pitch;
- }
- }
- break;
-
-
- case FT_PIXEL_MODE_BGRA:
- {
- FT_UInt i;
-
-
- target->num_grays = 256;
-
- for ( i = source->rows; i > 0; i-- )
- {
- FT_Byte* ss = s;
- FT_Byte* tt = t;
- FT_UInt j;
-
-
- for ( j = source->width; j > 0; j-- )
- {
- tt[0] = ft_gray_for_premultiplied_srgb_bgra( ss );
-
- ss += 4;
- tt += 1;
- }
-
- s += source->pitch;
- t += target->pitch;
- }
- }
- break;
-
- default:
- ;
- }
-
- return error;
- }
-
-
- /* documentation is in ftbitmap.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot slot )
- {
- if ( slot && slot->format == FT_GLYPH_FORMAT_BITMAP &&
- !( slot->internal->flags & FT_GLYPH_OWN_BITMAP ) )
- {
- FT_Bitmap bitmap;
- FT_Error error;
-
-
- FT_Bitmap_Init( &bitmap );
- error = FT_Bitmap_Copy( slot->library, &slot->bitmap, &bitmap );
- if ( error )
- return error;
-
- slot->bitmap = bitmap;
- slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
- }
-
- return FT_Err_Ok;
- }
-
-
- /* documentation is in ftbitmap.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Bitmap_Done( FT_Library library,
- FT_Bitmap *bitmap )
- {
- FT_Memory memory;
-
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- if ( !bitmap )
- return FT_THROW( Invalid_Argument );
-
- memory = library->memory;
-
- FT_FREE( bitmap->buffer );
- *bitmap = null_bitmap;
-
- return FT_Err_Ok;
- }
-
-
-/* END */
diff --git a/src/base/ftcalc.c b/src/base/ftcalc.c
deleted file mode 100644
index cb10612d4..000000000
--- a/src/base/ftcalc.c
+++ /dev/null
@@ -1,1017 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcalc.c */
-/* */
-/* Arithmetic computations (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* Support for 1-complement arithmetic has been totally dropped in this */
- /* release. You can still write your own code if you need it. */
- /* */
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* Implementing basic computation routines. */
- /* */
- /* FT_MulDiv(), FT_MulFix(), FT_DivFix(), FT_RoundFix(), FT_CeilFix(), */
- /* and FT_FloorFix() are declared in freetype.h. */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_GLYPH_H
-#include FT_TRIGONOMETRY_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-
-
-#ifdef FT_MULFIX_ASSEMBLER
-#undef FT_MulFix
-#endif
-
-/* we need to emulate a 64-bit data type if a real one isn't available */
-
-#ifndef FT_LONG64
-
- typedef struct FT_Int64_
- {
- FT_UInt32 lo;
- FT_UInt32 hi;
-
- } FT_Int64;
-
-#endif /* !FT_LONG64 */
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_calc
-
-
- /* transfer sign, leaving a positive number; */
- /* we need an unsigned value to safely negate INT_MIN (or LONG_MIN) */
-#define FT_MOVE_SIGN( x, x_unsigned, s ) \
- FT_BEGIN_STMNT \
- if ( x < 0 ) \
- { \
- x_unsigned = -x_unsigned; \
- s = -s; \
- } \
- FT_END_STMNT
-
- /* The following three functions are available regardless of whether */
- /* FT_LONG64 is defined. */
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Fixed )
- FT_RoundFix( FT_Fixed a )
- {
- return ( ADD_LONG( a, 0x8000L - ( a < 0 ) ) ) & ~0xFFFFL;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Fixed )
- FT_CeilFix( FT_Fixed a )
- {
- return ( ADD_LONG( a, 0xFFFFL ) ) & ~0xFFFFL;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Fixed )
- FT_FloorFix( FT_Fixed a )
- {
- return a & ~0xFFFFL;
- }
-
-#ifndef FT_MSB
-
- FT_BASE_DEF ( FT_Int )
- FT_MSB( FT_UInt32 z )
- {
- FT_Int shift = 0;
-
-
- /* determine msb bit index in `shift' */
- if ( z & 0xFFFF0000UL )
- {
- z >>= 16;
- shift += 16;
- }
- if ( z & 0x0000FF00UL )
- {
- z >>= 8;
- shift += 8;
- }
- if ( z & 0x000000F0UL )
- {
- z >>= 4;
- shift += 4;
- }
- if ( z & 0x0000000CUL )
- {
- z >>= 2;
- shift += 2;
- }
- if ( z & 0x00000002UL )
- {
- /* z >>= 1; */
- shift += 1;
- }
-
- return shift;
- }
-
-#endif /* !FT_MSB */
-
-
- /* documentation is in ftcalc.h */
-
- FT_BASE_DEF( FT_Fixed )
- FT_Hypot( FT_Fixed x,
- FT_Fixed y )
- {
- FT_Vector v;
-
-
- v.x = x;
- v.y = y;
-
- return FT_Vector_Length( &v );
- }
-
-
-#ifdef FT_LONG64
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Long )
- FT_MulDiv( FT_Long a_,
- FT_Long b_,
- FT_Long c_ )
- {
- FT_Int s = 1;
- FT_UInt64 a, b, c, d;
- FT_Long d_;
-
-
- a = (FT_UInt64)a_;
- b = (FT_UInt64)b_;
- c = (FT_UInt64)c_;
-
- FT_MOVE_SIGN( a_, a, s );
- FT_MOVE_SIGN( b_, b, s );
- FT_MOVE_SIGN( c_, c, s );
-
- d = c > 0 ? ( a * b + ( c >> 1 ) ) / c
- : 0x7FFFFFFFUL;
-
- d_ = (FT_Long)d;
-
- return s < 0 ? -d_ : d_;
- }
-
-
- /* documentation is in ftcalc.h */
-
- FT_BASE_DEF( FT_Long )
- FT_MulDiv_No_Round( FT_Long a_,
- FT_Long b_,
- FT_Long c_ )
- {
- FT_Int s = 1;
- FT_UInt64 a, b, c, d;
- FT_Long d_;
-
-
- a = (FT_UInt64)a_;
- b = (FT_UInt64)b_;
- c = (FT_UInt64)c_;
-
- FT_MOVE_SIGN( a_, a, s );
- FT_MOVE_SIGN( b_, b, s );
- FT_MOVE_SIGN( c_, c, s );
-
- d = c > 0 ? a * b / c
- : 0x7FFFFFFFUL;
-
- d_ = (FT_Long)d;
-
- return s < 0 ? -d_ : d_;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Long )
- FT_MulFix( FT_Long a_,
- FT_Long b_ )
- {
-#ifdef FT_MULFIX_ASSEMBLER
-
- return FT_MULFIX_ASSEMBLER( (FT_Int32)a_, (FT_Int32)b_ );
-
-#else
-
- FT_Int64 ab = (FT_Int64)a_ * (FT_Int64)b_;
-
- /* this requires arithmetic right shift of signed numbers */
- return (FT_Long)( ( ab + 0x8000L - ( ab < 0 ) ) >> 16 );
-
-#endif /* FT_MULFIX_ASSEMBLER */
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Long )
- FT_DivFix( FT_Long a_,
- FT_Long b_ )
- {
- FT_Int s = 1;
- FT_UInt64 a, b, q;
- FT_Long q_;
-
-
- a = (FT_UInt64)a_;
- b = (FT_UInt64)b_;
-
- FT_MOVE_SIGN( a_, a, s );
- FT_MOVE_SIGN( b_, b, s );
-
- q = b > 0 ? ( ( a << 16 ) + ( b >> 1 ) ) / b
- : 0x7FFFFFFFUL;
-
- q_ = (FT_Long)q;
-
- return s < 0 ? -q_ : q_;
- }
-
-
-#else /* !FT_LONG64 */
-
-
- static void
- ft_multo64( FT_UInt32 x,
- FT_UInt32 y,
- FT_Int64 *z )
- {
- FT_UInt32 lo1, hi1, lo2, hi2, lo, hi, i1, i2;
-
-
- lo1 = x & 0x0000FFFFU; hi1 = x >> 16;
- lo2 = y & 0x0000FFFFU; hi2 = y >> 16;
-
- lo = lo1 * lo2;
- i1 = lo1 * hi2;
- i2 = lo2 * hi1;
- hi = hi1 * hi2;
-
- /* Check carry overflow of i1 + i2 */
- i1 += i2;
- hi += (FT_UInt32)( i1 < i2 ) << 16;
-
- hi += i1 >> 16;
- i1 = i1 << 16;
-
- /* Check carry overflow of i1 + lo */
- lo += i1;
- hi += ( lo < i1 );
-
- z->lo = lo;
- z->hi = hi;
- }
-
-
- static FT_UInt32
- ft_div64by32( FT_UInt32 hi,
- FT_UInt32 lo,
- FT_UInt32 y )
- {
- FT_UInt32 r, q;
- FT_Int i;
-
-
- if ( hi >= y )
- return (FT_UInt32)0x7FFFFFFFL;
-
- /* We shift as many bits as we can into the high register, perform */
- /* 32-bit division with modulo there, then work through the remaining */
- /* bits with long division. This optimization is especially noticeable */
- /* for smaller dividends that barely use the high register. */
-
- i = 31 - FT_MSB( hi );
- r = ( hi << i ) | ( lo >> ( 32 - i ) ); lo <<= i; /* left 64-bit shift */
- q = r / y;
- r -= q * y; /* remainder */
-
- i = 32 - i; /* bits remaining in low register */
- do
- {
- q <<= 1;
- r = ( r << 1 ) | ( lo >> 31 ); lo <<= 1;
-
- if ( r >= y )
- {
- r -= y;
- q |= 1;
- }
- } while ( --i );
-
- return q;
- }
-
-
- static void
- FT_Add64( FT_Int64* x,
- FT_Int64* y,
- FT_Int64 *z )
- {
- FT_UInt32 lo, hi;
-
-
- lo = x->lo + y->lo;
- hi = x->hi + y->hi + ( lo < x->lo );
-
- z->lo = lo;
- z->hi = hi;
- }
-
-
- /* The FT_MulDiv function has been optimized thanks to ideas from */
- /* Graham Asher and Alexei Podtelezhnikov. The trick is to optimize */
- /* a rather common case when everything fits within 32-bits. */
- /* */
- /* We compute 'a*b+c/2', then divide it by 'c' (all positive values). */
- /* */
- /* The product of two positive numbers never exceeds the square of */
- /* its mean values. Therefore, we always avoid the overflow by */
- /* imposing */
- /* */
- /* (a + b) / 2 <= sqrt(X - c/2) , */
- /* */
- /* where X = 2^32 - 1, the maximum unsigned 32-bit value, and using */
- /* unsigned arithmetic. Now we replace `sqrt' with a linear function */
- /* that is smaller or equal for all values of c in the interval */
- /* [0;X/2]; it should be equal to sqrt(X) and sqrt(3X/4) at the */
- /* endpoints. Substituting the linear solution and explicit numbers */
- /* we get */
- /* */
- /* a + b <= 131071.99 - c / 122291.84 . */
- /* */
- /* In practice, we should use a faster and even stronger inequality */
- /* */
- /* a + b <= 131071 - (c >> 16) */
- /* */
- /* or, alternatively, */
- /* */
- /* a + b <= 129894 - (c >> 17) . */
- /* */
- /* FT_MulFix, on the other hand, is optimized for a small value of */
- /* the first argument, when the second argument can be much larger. */
- /* This can be achieved by scaling the second argument and the limit */
- /* in the above inequalities. For example, */
- /* */
- /* a + (b >> 8) <= (131071 >> 4) */
- /* */
- /* covers the practical range of use. The actual test below is a bit */
- /* tighter to avoid the border case overflows. */
- /* */
- /* In the case of FT_DivFix, the exact overflow check */
- /* */
- /* a << 16 <= X - c/2 */
- /* */
- /* is scaled down by 2^16 and we use */
- /* */
- /* a <= 65535 - (c >> 17) . */
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Long )
- FT_MulDiv( FT_Long a_,
- FT_Long b_,
- FT_Long c_ )
- {
- FT_Int s = 1;
- FT_UInt32 a, b, c;
-
-
- /* XXX: this function does not allow 64-bit arguments */
-
- a = (FT_UInt32)a_;
- b = (FT_UInt32)b_;
- c = (FT_UInt32)c_;
-
- FT_MOVE_SIGN( a_, a, s );
- FT_MOVE_SIGN( b_, b, s );
- FT_MOVE_SIGN( c_, c, s );
-
- if ( c == 0 )
- a = 0x7FFFFFFFUL;
-
- else if ( a + b <= 129894UL - ( c >> 17 ) )
- a = ( a * b + ( c >> 1 ) ) / c;
-
- else
- {
- FT_Int64 temp, temp2;
-
-
- ft_multo64( a, b, &temp );
-
- temp2.hi = 0;
- temp2.lo = c >> 1;
-
- FT_Add64( &temp, &temp2, &temp );
-
- /* last attempt to ditch long division */
- a = ( temp.hi == 0 ) ? temp.lo / c
- : ft_div64by32( temp.hi, temp.lo, c );
- }
-
- a_ = (FT_Long)a;
-
- return s < 0 ? -a_ : a_;
- }
-
-
- FT_BASE_DEF( FT_Long )
- FT_MulDiv_No_Round( FT_Long a_,
- FT_Long b_,
- FT_Long c_ )
- {
- FT_Int s = 1;
- FT_UInt32 a, b, c;
-
-
- /* XXX: this function does not allow 64-bit arguments */
-
- a = (FT_UInt32)a_;
- b = (FT_UInt32)b_;
- c = (FT_UInt32)c_;
-
- FT_MOVE_SIGN( a_, a, s );
- FT_MOVE_SIGN( b_, b, s );
- FT_MOVE_SIGN( c_, c, s );
-
- if ( c == 0 )
- a = 0x7FFFFFFFUL;
-
- else if ( a + b <= 131071UL )
- a = a * b / c;
-
- else
- {
- FT_Int64 temp;
-
-
- ft_multo64( a, b, &temp );
-
- /* last attempt to ditch long division */
- a = ( temp.hi == 0 ) ? temp.lo / c
- : ft_div64by32( temp.hi, temp.lo, c );
- }
-
- a_ = (FT_Long)a;
-
- return s < 0 ? -a_ : a_;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Long )
- FT_MulFix( FT_Long a_,
- FT_Long b_ )
- {
-#ifdef FT_MULFIX_ASSEMBLER
-
- return FT_MULFIX_ASSEMBLER( a_, b_ );
-
-#elif 0
-
- /*
- * This code is nonportable. See comment below.
- *
- * However, on a platform where right-shift of a signed quantity fills
- * the leftmost bits by copying the sign bit, it might be faster.
- */
-
- FT_Long sa, sb;
- FT_UInt32 a, b;
-
-
- /*
- * This is a clever way of converting a signed number `a' into its
- * absolute value (stored back into `a') and its sign. The sign is
- * stored in `sa'; 0 means `a' was positive or zero, and -1 means `a'
- * was negative. (Similarly for `b' and `sb').
- *
- * Unfortunately, it doesn't work (at least not portably).
- *
- * It makes the assumption that right-shift on a negative signed value
- * fills the leftmost bits by copying the sign bit. This is wrong.
- * According to K&R 2nd ed, section `A7.8 Shift Operators' on page 206,
- * the result of right-shift of a negative signed value is
- * implementation-defined. At least one implementation fills the
- * leftmost bits with 0s (i.e., it is exactly the same as an unsigned
- * right shift). This means that when `a' is negative, `sa' ends up
- * with the value 1 rather than -1. After that, everything else goes
- * wrong.
- */
- sa = ( a_ >> ( sizeof ( a_ ) * 8 - 1 ) );
- a = ( a_ ^ sa ) - sa;
- sb = ( b_ >> ( sizeof ( b_ ) * 8 - 1 ) );
- b = ( b_ ^ sb ) - sb;
-
- a = (FT_UInt32)a_;
- b = (FT_UInt32)b_;
-
- if ( a + ( b >> 8 ) <= 8190UL )
- a = ( a * b + 0x8000U ) >> 16;
- else
- {
- FT_UInt32 al = a & 0xFFFFUL;
-
-
- a = ( a >> 16 ) * b + al * ( b >> 16 ) +
- ( ( al * ( b & 0xFFFFUL ) + 0x8000UL ) >> 16 );
- }
-
- sa ^= sb;
- a = ( a ^ sa ) - sa;
-
- return (FT_Long)a;
-
-#else /* 0 */
-
- FT_Int s = 1;
- FT_UInt32 a, b;
-
-
- /* XXX: this function does not allow 64-bit arguments */
-
- a = (FT_UInt32)a_;
- b = (FT_UInt32)b_;
-
- FT_MOVE_SIGN( a_, a, s );
- FT_MOVE_SIGN( b_, b, s );
-
- if ( a + ( b >> 8 ) <= 8190UL )
- a = ( a * b + 0x8000UL ) >> 16;
- else
- {
- FT_UInt32 al = a & 0xFFFFUL;
-
-
- a = ( a >> 16 ) * b + al * ( b >> 16 ) +
- ( ( al * ( b & 0xFFFFUL ) + 0x8000UL ) >> 16 );
- }
-
- a_ = (FT_Long)a;
-
- return s < 0 ? -a_ : a_;
-
-#endif /* 0 */
-
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Long )
- FT_DivFix( FT_Long a_,
- FT_Long b_ )
- {
- FT_Int s = 1;
- FT_UInt32 a, b, q;
- FT_Long q_;
-
-
- /* XXX: this function does not allow 64-bit arguments */
-
- a = (FT_UInt32)a_;
- b = (FT_UInt32)b_;
-
- FT_MOVE_SIGN( a_, a, s );
- FT_MOVE_SIGN( b_, b, s );
-
- if ( b == 0 )
- {
- /* check for division by 0 */
- q = 0x7FFFFFFFUL;
- }
- else if ( a <= 65535UL - ( b >> 17 ) )
- {
- /* compute result directly */
- q = ( ( a << 16 ) + ( b >> 1 ) ) / b;
- }
- else
- {
- /* we need more bits; we have to do it by hand */
- FT_Int64 temp, temp2;
-
-
- temp.hi = a >> 16;
- temp.lo = a << 16;
- temp2.hi = 0;
- temp2.lo = b >> 1;
-
- FT_Add64( &temp, &temp2, &temp );
- q = ft_div64by32( temp.hi, temp.lo, b );
- }
-
- q_ = (FT_Long)q;
-
- return s < 0 ? -q_ : q_;
- }
-
-
-#endif /* !FT_LONG64 */
-
-
- /* documentation is in ftglyph.h */
-
- FT_EXPORT_DEF( void )
- FT_Matrix_Multiply( const FT_Matrix* a,
- FT_Matrix *b )
- {
- FT_Fixed xx, xy, yx, yy;
-
-
- if ( !a || !b )
- return;
-
- xx = ADD_LONG( FT_MulFix( a->xx, b->xx ),
- FT_MulFix( a->xy, b->yx ) );
- xy = ADD_LONG( FT_MulFix( a->xx, b->xy ),
- FT_MulFix( a->xy, b->yy ) );
- yx = ADD_LONG( FT_MulFix( a->yx, b->xx ),
- FT_MulFix( a->yy, b->yx ) );
- yy = ADD_LONG( FT_MulFix( a->yx, b->xy ),
- FT_MulFix( a->yy, b->yy ) );
-
- b->xx = xx;
- b->xy = xy;
- b->yx = yx;
- b->yy = yy;
- }
-
-
- /* documentation is in ftglyph.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Matrix_Invert( FT_Matrix* matrix )
- {
- FT_Pos delta, xx, yy;
-
-
- if ( !matrix )
- return FT_THROW( Invalid_Argument );
-
- /* compute discriminant */
- delta = FT_MulFix( matrix->xx, matrix->yy ) -
- FT_MulFix( matrix->xy, matrix->yx );
-
- if ( !delta )
- return FT_THROW( Invalid_Argument ); /* matrix can't be inverted */
-
- matrix->xy = - FT_DivFix( matrix->xy, delta );
- matrix->yx = - FT_DivFix( matrix->yx, delta );
-
- xx = matrix->xx;
- yy = matrix->yy;
-
- matrix->xx = FT_DivFix( yy, delta );
- matrix->yy = FT_DivFix( xx, delta );
-
- return FT_Err_Ok;
- }
-
-
- /* documentation is in ftcalc.h */
-
- FT_BASE_DEF( void )
- FT_Matrix_Multiply_Scaled( const FT_Matrix* a,
- FT_Matrix *b,
- FT_Long scaling )
- {
- FT_Fixed xx, xy, yx, yy;
-
- FT_Long val = 0x10000L * scaling;
-
-
- if ( !a || !b )
- return;
-
- xx = ADD_LONG( FT_MulDiv( a->xx, b->xx, val ),
- FT_MulDiv( a->xy, b->yx, val ) );
- xy = ADD_LONG( FT_MulDiv( a->xx, b->xy, val ),
- FT_MulDiv( a->xy, b->yy, val ) );
- yx = ADD_LONG( FT_MulDiv( a->yx, b->xx, val ),
- FT_MulDiv( a->yy, b->yx, val ) );
- yy = ADD_LONG( FT_MulDiv( a->yx, b->xy, val ),
- FT_MulDiv( a->yy, b->yy, val ) );
-
- b->xx = xx;
- b->xy = xy;
- b->yx = yx;
- b->yy = yy;
- }
-
-
- /* documentation is in ftcalc.h */
-
- FT_BASE_DEF( void )
- FT_Vector_Transform_Scaled( FT_Vector* vector,
- const FT_Matrix* matrix,
- FT_Long scaling )
- {
- FT_Pos xz, yz;
-
- FT_Long val = 0x10000L * scaling;
-
-
- if ( !vector || !matrix )
- return;
-
- xz = ADD_LONG( FT_MulDiv( vector->x, matrix->xx, val ),
- FT_MulDiv( vector->y, matrix->xy, val ) );
- yz = ADD_LONG( FT_MulDiv( vector->x, matrix->yx, val ),
- FT_MulDiv( vector->y, matrix->yy, val ) );
-
- vector->x = xz;
- vector->y = yz;
- }
-
-
- /* documentation is in ftcalc.h */
-
- FT_BASE_DEF( FT_UInt32 )
- FT_Vector_NormLen( FT_Vector* vector )
- {
- FT_Int32 x_ = vector->x;
- FT_Int32 y_ = vector->y;
- FT_Int32 b, z;
- FT_UInt32 x, y, u, v, l;
- FT_Int sx = 1, sy = 1, shift;
-
-
- x = (FT_UInt32)x_;
- y = (FT_UInt32)y_;
-
- FT_MOVE_SIGN( x_, x, sx );
- FT_MOVE_SIGN( y_, y, sy );
-
- /* trivial cases */
- if ( x == 0 )
- {
- if ( y > 0 )
- vector->y = sy * 0x10000;
- return y;
- }
- else if ( y == 0 )
- {
- if ( x > 0 )
- vector->x = sx * 0x10000;
- return x;
- }
-
- /* Estimate length and prenormalize by shifting so that */
- /* the new approximate length is between 2/3 and 4/3. */
- /* The magic constant 0xAAAAAAAAUL (2/3 of 2^32) helps */
- /* achieve this in 16.16 fixed-point representation. */
- l = x > y ? x + ( y >> 1 )
- : y + ( x >> 1 );
-
- shift = 31 - FT_MSB( l );
- shift -= 15 + ( l >= ( 0xAAAAAAAAUL >> shift ) );
-
- if ( shift > 0 )
- {
- x <<= shift;
- y <<= shift;
-
- /* re-estimate length for tiny vectors */
- l = x > y ? x + ( y >> 1 )
- : y + ( x >> 1 );
- }
- else
- {
- x >>= -shift;
- y >>= -shift;
- l >>= -shift;
- }
-
- /* lower linear approximation for reciprocal length minus one */
- b = 0x10000 - (FT_Int32)l;
-
- x_ = (FT_Int32)x;
- y_ = (FT_Int32)y;
-
- /* Newton's iterations */
- do
- {
- u = (FT_UInt32)( x_ + ( x_ * b >> 16 ) );
- v = (FT_UInt32)( y_ + ( y_ * b >> 16 ) );
-
- /* Normalized squared length in the parentheses approaches 2^32. */
- /* On two's complement systems, converting to signed gives the */
- /* difference with 2^32 even if the expression wraps around. */
- z = -(FT_Int32)( u * u + v * v ) / 0x200;
- z = z * ( ( 0x10000 + b ) >> 8 ) / 0x10000;
-
- b += z;
-
- } while ( z > 0 );
-
- vector->x = sx < 0 ? -(FT_Pos)u : (FT_Pos)u;
- vector->y = sy < 0 ? -(FT_Pos)v : (FT_Pos)v;
-
- /* Conversion to signed helps to recover from likely wrap around */
- /* in calculating the prenormalized length, because it gives the */
- /* correct difference with 2^32 on two's complement systems. */
- l = (FT_UInt32)( 0x10000 + (FT_Int32)( u * x + v * y ) / 0x10000 );
- if ( shift > 0 )
- l = ( l + ( 1 << ( shift - 1 ) ) ) >> shift;
- else
- l <<= -shift;
-
- return l;
- }
-
-
-#if 0
-
- /* documentation is in ftcalc.h */
-
- FT_BASE_DEF( FT_Int32 )
- FT_SqrtFixed( FT_Int32 x )
- {
- FT_UInt32 root, rem_hi, rem_lo, test_div;
- FT_Int count;
-
-
- root = 0;
-
- if ( x > 0 )
- {
- rem_hi = 0;
- rem_lo = (FT_UInt32)x;
- count = 24;
- do
- {
- rem_hi = ( rem_hi << 2 ) | ( rem_lo >> 30 );
- rem_lo <<= 2;
- root <<= 1;
- test_div = ( root << 1 ) + 1;
-
- if ( rem_hi >= test_div )
- {
- rem_hi -= test_div;
- root += 1;
- }
- } while ( --count );
- }
-
- return (FT_Int32)root;
- }
-
-#endif /* 0 */
-
-
- /* documentation is in ftcalc.h */
-
- FT_BASE_DEF( FT_Int )
- ft_corner_orientation( FT_Pos in_x,
- FT_Pos in_y,
- FT_Pos out_x,
- FT_Pos out_y )
- {
-#ifdef FT_LONG64
-
- FT_Int64 delta = (FT_Int64)in_x * out_y - (FT_Int64)in_y * out_x;
-
-
- return ( delta > 0 ) - ( delta < 0 );
-
-#else
-
- FT_Int result;
-
-
- /* we silently ignore overflow errors, since such large values */
- /* lead to even more (harmless) rendering errors later on */
- if ( ADD_LONG( FT_ABS( in_x ), FT_ABS( out_y ) ) <= 131071L &&
- ADD_LONG( FT_ABS( in_y ), FT_ABS( out_x ) ) <= 131071L )
- {
- FT_Long z1 = MUL_LONG( in_x, out_y );
- FT_Long z2 = MUL_LONG( in_y, out_x );
-
-
- if ( z1 > z2 )
- result = +1;
- else if ( z1 < z2 )
- result = -1;
- else
- result = 0;
- }
- else /* products might overflow 32 bits */
- {
- FT_Int64 z1, z2;
-
-
- /* XXX: this function does not allow 64-bit arguments */
- ft_multo64( (FT_UInt32)in_x, (FT_UInt32)out_y, &z1 );
- ft_multo64( (FT_UInt32)in_y, (FT_UInt32)out_x, &z2 );
-
- if ( z1.hi > z2.hi )
- result = +1;
- else if ( z1.hi < z2.hi )
- result = -1;
- else if ( z1.lo > z2.lo )
- result = +1;
- else if ( z1.lo < z2.lo )
- result = -1;
- else
- result = 0;
- }
-
- /* XXX: only the sign of return value, +1/0/-1 must be used */
- return result;
-
-#endif
- }
-
-
- /* documentation is in ftcalc.h */
-
- FT_BASE_DEF( FT_Int )
- ft_corner_is_flat( FT_Pos in_x,
- FT_Pos in_y,
- FT_Pos out_x,
- FT_Pos out_y )
- {
- FT_Pos ax = in_x + out_x;
- FT_Pos ay = in_y + out_y;
-
- FT_Pos d_in, d_out, d_hypot;
-
-
- /* The idea of this function is to compare the length of the */
- /* hypotenuse with the `in' and `out' length. The `corner' */
- /* represented by `in' and `out' is flat if the hypotenuse's */
- /* length isn't too large. */
- /* */
- /* This approach has the advantage that the angle between */
- /* `in' and `out' is not checked. In case one of the two */
- /* vectors is `dominant', this is, much larger than the */
- /* other vector, we thus always have a flat corner. */
- /* */
- /* hypotenuse */
- /* x---------------------------x */
- /* \ / */
- /* \ / */
- /* in \ / out */
- /* \ / */
- /* o */
- /* Point */
-
- d_in = FT_HYPOT( in_x, in_y );
- d_out = FT_HYPOT( out_x, out_y );
- d_hypot = FT_HYPOT( ax, ay );
-
- /* now do a simple length comparison: */
- /* */
- /* d_in + d_out < 17/16 d_hypot */
-
- return ( d_in + d_out - d_hypot ) < ( d_hypot >> 4 );
- }
-
-
-/* END */
diff --git a/src/base/ftcid.c b/src/base/ftcid.c
deleted file mode 100644
index 398396b84..000000000
--- a/src/base/ftcid.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcid.c */
-/* */
-/* FreeType API for accessing CID font information. */
-/* */
-/* Copyright 2007-2017 by */
-/* Derek Clegg and Michael Toftdal. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_CID_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_CID_H
-
-
- /* documentation is in ftcid.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_CID_Registry_Ordering_Supplement( FT_Face face,
- const char* *registry,
- const char* *ordering,
- FT_Int *supplement)
- {
- FT_Error error;
- const char* r = NULL;
- const char* o = NULL;
- FT_Int s = 0;
-
-
- error = FT_ERR( Invalid_Argument );
-
- if ( face )
- {
- FT_Service_CID service;
-
-
- FT_FACE_FIND_SERVICE( face, service, CID );
-
- if ( service && service->get_ros )
- error = service->get_ros( face, &r, &o, &s );
- }
-
- if ( registry )
- *registry = r;
-
- if ( ordering )
- *ordering = o;
-
- if ( supplement )
- *supplement = s;
-
- return error;
- }
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_CID_Is_Internally_CID_Keyed( FT_Face face,
- FT_Bool *is_cid )
- {
- FT_Error error = FT_ERR( Invalid_Argument );
- FT_Bool ic = 0;
-
-
- if ( face )
- {
- FT_Service_CID service;
-
-
- FT_FACE_FIND_SERVICE( face, service, CID );
-
- if ( service && service->get_is_cid )
- error = service->get_is_cid( face, &ic);
- }
-
- if ( is_cid )
- *is_cid = ic;
-
- return error;
- }
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_CID_From_Glyph_Index( FT_Face face,
- FT_UInt glyph_index,
- FT_UInt *cid )
- {
- FT_Error error = FT_ERR( Invalid_Argument );
- FT_UInt c = 0;
-
-
- if ( face )
- {
- FT_Service_CID service;
-
-
- FT_FACE_FIND_SERVICE( face, service, CID );
-
- if ( service && service->get_cid_from_glyph_index )
- error = service->get_cid_from_glyph_index( face, glyph_index, &c);
- }
-
- if ( cid )
- *cid = c;
-
- return error;
- }
-
-
-/* END */
diff --git a/src/base/ftdbgmem.c b/src/base/ftdbgmem.c
deleted file mode 100644
index 242246bfd..000000000
--- a/src/base/ftdbgmem.c
+++ /dev/null
@@ -1,999 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftdbgmem.c */
-/* */
-/* Memory debugger (body). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_MEMORY_H
-#include FT_SYSTEM_H
-#include FT_ERRORS_H
-#include FT_TYPES_H
-
-
-#ifdef FT_DEBUG_MEMORY
-
-#define KEEPALIVE /* `Keep alive' means that freed blocks aren't released
- * to the heap. This is useful to detect double-frees
- * or weird heap corruption, but it uses large amounts of
- * memory, however.
- */
-
-#include FT_CONFIG_STANDARD_LIBRARY_H
-
- FT_BASE_DEF( const char* ) _ft_debug_file = NULL;
- FT_BASE_DEF( long ) _ft_debug_lineno = 0;
-
- extern void
- FT_DumpMemory( FT_Memory memory );
-
-
- typedef struct FT_MemSourceRec_* FT_MemSource;
- typedef struct FT_MemNodeRec_* FT_MemNode;
- typedef struct FT_MemTableRec_* FT_MemTable;
-
-
-#define FT_MEM_VAL( addr ) ( (FT_PtrDist)(FT_Pointer)( addr ) )
-
- /*
- * This structure holds statistics for a single allocation/release
- * site. This is useful to know where memory operations happen the
- * most.
- */
- typedef struct FT_MemSourceRec_
- {
- const char* file_name;
- long line_no;
-
- FT_Long cur_blocks; /* current number of allocated blocks */
- FT_Long max_blocks; /* max. number of allocated blocks */
- FT_Long all_blocks; /* total number of blocks allocated */
-
- FT_Long cur_size; /* current cumulative allocated size */
- FT_Long max_size; /* maximum cumulative allocated size */
- FT_Long all_size; /* total cumulative allocated size */
-
- FT_Long cur_max; /* current maximum allocated size */
-
- FT_UInt32 hash;
- FT_MemSource link;
-
- } FT_MemSourceRec;
-
-
- /*
- * We don't need a resizable array for the memory sources because
- * their number is pretty limited within FreeType.
- */
-#define FT_MEM_SOURCE_BUCKETS 128
-
- /*
- * This structure holds information related to a single allocated
- * memory block. If KEEPALIVE is defined, blocks that are freed by
- * FreeType are never released to the system. Instead, their `size'
- * field is set to `-size'. This is mainly useful to detect double
- * frees, at the price of a large memory footprint during execution.
- */
- typedef struct FT_MemNodeRec_
- {
- FT_Byte* address;
- FT_Long size; /* < 0 if the block was freed */
-
- FT_MemSource source;
-
-#ifdef KEEPALIVE
- const char* free_file_name;
- FT_Long free_line_no;
-#endif
-
- FT_MemNode link;
-
- } FT_MemNodeRec;
-
-
- /*
- * The global structure, containing compound statistics and all hash
- * tables.
- */
- typedef struct FT_MemTableRec_
- {
- FT_Long size;
- FT_Long nodes;
- FT_MemNode* buckets;
-
- FT_Long alloc_total;
- FT_Long alloc_current;
- FT_Long alloc_max;
- FT_Long alloc_count;
-
- FT_Bool bound_total;
- FT_Long alloc_total_max;
-
- FT_Bool bound_count;
- FT_Long alloc_count_max;
-
- FT_MemSource sources[FT_MEM_SOURCE_BUCKETS];
-
- FT_Bool keep_alive;
-
- FT_Memory memory;
- FT_Pointer memory_user;
- FT_Alloc_Func alloc;
- FT_Free_Func free;
- FT_Realloc_Func realloc;
-
- } FT_MemTableRec;
-
-
-#define FT_MEM_SIZE_MIN 7
-#define FT_MEM_SIZE_MAX 13845163
-
-#define FT_FILENAME( x ) ( (x) ? (x) : "unknown file" )
-
-
- /*
- * Prime numbers are ugly to handle. It would be better to implement
- * L-Hashing, which is 10% faster and doesn't require divisions.
- */
- static const FT_Int ft_mem_primes[] =
- {
- 7,
- 11,
- 19,
- 37,
- 73,
- 109,
- 163,
- 251,
- 367,
- 557,
- 823,
- 1237,
- 1861,
- 2777,
- 4177,
- 6247,
- 9371,
- 14057,
- 21089,
- 31627,
- 47431,
- 71143,
- 106721,
- 160073,
- 240101,
- 360163,
- 540217,
- 810343,
- 1215497,
- 1823231,
- 2734867,
- 4102283,
- 6153409,
- 9230113,
- 13845163,
- };
-
-
- static FT_Long
- ft_mem_closest_prime( FT_Long num )
- {
- size_t i;
-
-
- for ( i = 0;
- i < sizeof ( ft_mem_primes ) / sizeof ( ft_mem_primes[0] ); i++ )
- if ( ft_mem_primes[i] > num )
- return ft_mem_primes[i];
-
- return FT_MEM_SIZE_MAX;
- }
-
-
- static void
- ft_mem_debug_panic( const char* fmt,
- ... )
- {
- va_list ap;
-
-
- printf( "FreeType.Debug: " );
-
- va_start( ap, fmt );
- vprintf( fmt, ap );
- va_end( ap );
-
- printf( "\n" );
- exit( EXIT_FAILURE );
- }
-
-
- static FT_Pointer
- ft_mem_table_alloc( FT_MemTable table,
- FT_Long size )
- {
- FT_Memory memory = table->memory;
- FT_Pointer block;
-
-
- memory->user = table->memory_user;
- block = table->alloc( memory, size );
- memory->user = table;
-
- return block;
- }
-
-
- static void
- ft_mem_table_free( FT_MemTable table,
- FT_Pointer block )
- {
- FT_Memory memory = table->memory;
-
-
- memory->user = table->memory_user;
- table->free( memory, block );
- memory->user = table;
- }
-
-
- static void
- ft_mem_table_resize( FT_MemTable table )
- {
- FT_Long new_size;
-
-
- new_size = ft_mem_closest_prime( table->nodes );
- if ( new_size != table->size )
- {
- FT_MemNode* new_buckets;
- FT_Long i;
-
-
- new_buckets = (FT_MemNode *)
- ft_mem_table_alloc(
- table,
- new_size * (FT_Long)sizeof ( FT_MemNode ) );
- if ( !new_buckets )
- return;
-
- FT_ARRAY_ZERO( new_buckets, new_size );
-
- for ( i = 0; i < table->size; i++ )
- {
- FT_MemNode node, next, *pnode;
- FT_PtrDist hash;
-
-
- node = table->buckets[i];
- while ( node )
- {
- next = node->link;
- hash = FT_MEM_VAL( node->address ) % (FT_PtrDist)new_size;
- pnode = new_buckets + hash;
-
- node->link = pnode[0];
- pnode[0] = node;
-
- node = next;
- }
- }
-
- if ( table->buckets )
- ft_mem_table_free( table, table->buckets );
-
- table->buckets = new_buckets;
- table->size = new_size;
- }
- }
-
-
- static FT_MemTable
- ft_mem_table_new( FT_Memory memory )
- {
- FT_MemTable table;
-
-
- table = (FT_MemTable)memory->alloc( memory, sizeof ( *table ) );
- if ( !table )
- goto Exit;
-
- FT_ZERO( table );
-
- table->size = FT_MEM_SIZE_MIN;
- table->nodes = 0;
-
- table->memory = memory;
-
- table->memory_user = memory->user;
-
- table->alloc = memory->alloc;
- table->realloc = memory->realloc;
- table->free = memory->free;
-
- table->buckets = (FT_MemNode *)
- memory->alloc(
- memory,
- table->size * (FT_Long)sizeof ( FT_MemNode ) );
- if ( table->buckets )
- FT_ARRAY_ZERO( table->buckets, table->size );
- else
- {
- memory->free( memory, table );
- table = NULL;
- }
-
- Exit:
- return table;
- }
-
-
- static void
- ft_mem_table_destroy( FT_MemTable table )
- {
- FT_Long i;
- FT_Long leak_count = 0;
- FT_Long leaks = 0;
-
-
- FT_DumpMemory( table->memory );
-
- /* remove all blocks from the table, revealing leaked ones */
- for ( i = 0; i < table->size; i++ )
- {
- FT_MemNode *pnode = table->buckets + i, next, node = *pnode;
-
-
- while ( node )
- {
- next = node->link;
- node->link = NULL;
-
- if ( node->size > 0 )
- {
- printf(
- "leaked memory block at address %p, size %8ld in (%s:%ld)\n",
- (void*)node->address,
- node->size,
- FT_FILENAME( node->source->file_name ),
- node->source->line_no );
-
- leak_count++;
- leaks += node->size;
-
- ft_mem_table_free( table, node->address );
- }
-
- node->address = NULL;
- node->size = 0;
-
- ft_mem_table_free( table, node );
- node = next;
- }
- table->buckets[i] = NULL;
- }
-
- ft_mem_table_free( table, table->buckets );
- table->buckets = NULL;
-
- table->size = 0;
- table->nodes = 0;
-
- /* remove all sources */
- for ( i = 0; i < FT_MEM_SOURCE_BUCKETS; i++ )
- {
- FT_MemSource source, next;
-
-
- for ( source = table->sources[i]; source != NULL; source = next )
- {
- next = source->link;
- ft_mem_table_free( table, source );
- }
-
- table->sources[i] = NULL;
- }
-
- printf( "FreeType: total memory allocations = %ld\n",
- table->alloc_total );
- printf( "FreeType: maximum memory footprint = %ld\n",
- table->alloc_max );
-
- ft_mem_table_free( table, table );
-
- if ( leak_count > 0 )
- ft_mem_debug_panic(
- "FreeType: %ld bytes of memory leaked in %ld blocks\n",
- leaks, leak_count );
-
- printf( "FreeType: no memory leaks detected\n" );
- }
-
-
- static FT_MemNode*
- ft_mem_table_get_nodep( FT_MemTable table,
- FT_Byte* address )
- {
- FT_PtrDist hash;
- FT_MemNode *pnode, node;
-
-
- hash = FT_MEM_VAL( address );
- pnode = table->buckets + ( hash % (FT_PtrDist)table->size );
-
- for (;;)
- {
- node = pnode[0];
- if ( !node )
- break;
-
- if ( node->address == address )
- break;
-
- pnode = &node->link;
- }
- return pnode;
- }
-
-
- static FT_MemSource
- ft_mem_table_get_source( FT_MemTable table )
- {
- FT_UInt32 hash;
- FT_MemSource node, *pnode;
-
-
- /* cast to FT_PtrDist first since void* can be larger */
- /* than FT_UInt32 and GCC 4.1.1 emits a warning */
- hash = (FT_UInt32)(FT_PtrDist)(void*)_ft_debug_file +
- (FT_UInt32)( 5 * _ft_debug_lineno );
- pnode = &table->sources[hash % FT_MEM_SOURCE_BUCKETS];
-
- for (;;)
- {
- node = *pnode;
- if ( !node )
- break;
-
- if ( node->file_name == _ft_debug_file &&
- node->line_no == _ft_debug_lineno )
- goto Exit;
-
- pnode = &node->link;
- }
-
- node = (FT_MemSource)ft_mem_table_alloc( table, sizeof ( *node ) );
- if ( !node )
- ft_mem_debug_panic(
- "not enough memory to perform memory debugging\n" );
-
- node->file_name = _ft_debug_file;
- node->line_no = _ft_debug_lineno;
-
- node->cur_blocks = 0;
- node->max_blocks = 0;
- node->all_blocks = 0;
-
- node->cur_size = 0;
- node->max_size = 0;
- node->all_size = 0;
-
- node->cur_max = 0;
-
- node->link = NULL;
- node->hash = hash;
- *pnode = node;
-
- Exit:
- return node;
- }
-
-
- static void
- ft_mem_table_set( FT_MemTable table,
- FT_Byte* address,
- FT_Long size,
- FT_Long delta )
- {
- FT_MemNode *pnode, node;
-
-
- if ( table )
- {
- FT_MemSource source;
-
-
- pnode = ft_mem_table_get_nodep( table, address );
- node = *pnode;
- if ( node )
- {
- if ( node->size < 0 )
- {
- /* This block was already freed. Our memory is now completely */
- /* corrupted! */
- /* This can only happen in keep-alive mode. */
- ft_mem_debug_panic(
- "memory heap corrupted (allocating freed block)" );
- }
- else
- {
- /* This block was already allocated. This means that our memory */
- /* is also corrupted! */
- ft_mem_debug_panic(
- "memory heap corrupted (re-allocating allocated block at"
- " %p, of size %ld)\n"
- "org=%s:%d new=%s:%d\n",
- node->address, node->size,
- FT_FILENAME( node->source->file_name ), node->source->line_no,
- FT_FILENAME( _ft_debug_file ), _ft_debug_lineno );
- }
- }
-
- /* we need to create a new node in this table */
- node = (FT_MemNode)ft_mem_table_alloc( table, sizeof ( *node ) );
- if ( !node )
- ft_mem_debug_panic( "not enough memory to run memory tests" );
-
- node->address = address;
- node->size = size;
- node->source = source = ft_mem_table_get_source( table );
-
- if ( delta == 0 )
- {
- /* this is an allocation */
- source->all_blocks++;
- source->cur_blocks++;
- if ( source->cur_blocks > source->max_blocks )
- source->max_blocks = source->cur_blocks;
- }
-
- if ( size > source->cur_max )
- source->cur_max = size;
-
- if ( delta != 0 )
- {
- /* we are growing or shrinking a reallocated block */
- source->cur_size += delta;
- table->alloc_current += delta;
- }
- else
- {
- /* we are allocating a new block */
- source->cur_size += size;
- table->alloc_current += size;
- }
-
- source->all_size += size;
-
- if ( source->cur_size > source->max_size )
- source->max_size = source->cur_size;
-
- node->free_file_name = NULL;
- node->free_line_no = 0;
-
- node->link = pnode[0];
-
- pnode[0] = node;
- table->nodes++;
-
- table->alloc_total += size;
-
- if ( table->alloc_current > table->alloc_max )
- table->alloc_max = table->alloc_current;
-
- if ( table->nodes * 3 < table->size ||
- table->size * 3 < table->nodes )
- ft_mem_table_resize( table );
- }
- }
-
-
- static void
- ft_mem_table_remove( FT_MemTable table,
- FT_Byte* address,
- FT_Long delta )
- {
- if ( table )
- {
- FT_MemNode *pnode, node;
-
-
- pnode = ft_mem_table_get_nodep( table, address );
- node = *pnode;
- if ( node )
- {
- FT_MemSource source;
-
-
- if ( node->size < 0 )
- ft_mem_debug_panic(
- "freeing memory block at %p more than once at (%s:%ld)\n"
- "block allocated at (%s:%ld) and released at (%s:%ld)",
- address,
- FT_FILENAME( _ft_debug_file ), _ft_debug_lineno,
- FT_FILENAME( node->source->file_name ), node->source->line_no,
- FT_FILENAME( node->free_file_name ), node->free_line_no );
-
- /* scramble the node's content for additional safety */
- FT_MEM_SET( address, 0xF3, node->size );
-
- if ( delta == 0 )
- {
- source = node->source;
-
- source->cur_blocks--;
- source->cur_size -= node->size;
-
- table->alloc_current -= node->size;
- }
-
- if ( table->keep_alive )
- {
- /* we simply invert the node's size to indicate that the node */
- /* was freed. */
- node->size = -node->size;
- node->free_file_name = _ft_debug_file;
- node->free_line_no = _ft_debug_lineno;
- }
- else
- {
- table->nodes--;
-
- *pnode = node->link;
-
- node->size = 0;
- node->source = NULL;
-
- ft_mem_table_free( table, node );
-
- if ( table->nodes * 3 < table->size ||
- table->size * 3 < table->nodes )
- ft_mem_table_resize( table );
- }
- }
- else
- ft_mem_debug_panic(
- "trying to free unknown block at %p in (%s:%ld)\n",
- address,
- FT_FILENAME( _ft_debug_file ), _ft_debug_lineno );
- }
- }
-
-
- static FT_Pointer
- ft_mem_debug_alloc( FT_Memory memory,
- FT_Long size )
- {
- FT_MemTable table = (FT_MemTable)memory->user;
- FT_Byte* block;
-
-
- if ( size <= 0 )
- ft_mem_debug_panic( "negative block size allocation (%ld)", size );
-
- /* return NULL if the maximum number of allocations was reached */
- if ( table->bound_count &&
- table->alloc_count >= table->alloc_count_max )
- return NULL;
-
- /* return NULL if this allocation would overflow the maximum heap size */
- if ( table->bound_total &&
- table->alloc_total_max - table->alloc_current > size )
- return NULL;
-
- block = (FT_Byte *)ft_mem_table_alloc( table, size );
- if ( block )
- {
- ft_mem_table_set( table, block, size, 0 );
-
- table->alloc_count++;
- }
-
- _ft_debug_file = "<unknown>";
- _ft_debug_lineno = 0;
-
- return (FT_Pointer)block;
- }
-
-
- static void
- ft_mem_debug_free( FT_Memory memory,
- FT_Pointer block )
- {
- FT_MemTable table = (FT_MemTable)memory->user;
-
-
- if ( !block )
- ft_mem_debug_panic( "trying to free NULL in (%s:%ld)",
- FT_FILENAME( _ft_debug_file ),
- _ft_debug_lineno );
-
- ft_mem_table_remove( table, (FT_Byte*)block, 0 );
-
- if ( !table->keep_alive )
- ft_mem_table_free( table, block );
-
- table->alloc_count--;
-
- _ft_debug_file = "<unknown>";
- _ft_debug_lineno = 0;
- }
-
-
- static FT_Pointer
- ft_mem_debug_realloc( FT_Memory memory,
- FT_Long cur_size,
- FT_Long new_size,
- FT_Pointer block )
- {
- FT_MemTable table = (FT_MemTable)memory->user;
- FT_MemNode node, *pnode;
- FT_Pointer new_block;
- FT_Long delta;
-
- const char* file_name = FT_FILENAME( _ft_debug_file );
- FT_Long line_no = _ft_debug_lineno;
-
-
- /* unlikely, but possible */
- if ( new_size == cur_size )
- return block;
-
- /* the following is valid according to ANSI C */
-#if 0
- if ( !block || !cur_size )
- ft_mem_debug_panic( "trying to reallocate NULL in (%s:%ld)",
- file_name, line_no );
-#endif
-
- /* while the following is allowed in ANSI C also, we abort since */
- /* such case should be handled by FreeType. */
- if ( new_size <= 0 )
- ft_mem_debug_panic(
- "trying to reallocate %p to size 0 (current is %ld) in (%s:%ld)",
- block, cur_size, file_name, line_no );
-
- /* check `cur_size' value */
- pnode = ft_mem_table_get_nodep( table, (FT_Byte*)block );
- node = *pnode;
- if ( !node )
- ft_mem_debug_panic(
- "trying to reallocate unknown block at %p in (%s:%ld)",
- block, file_name, line_no );
-
- if ( node->size <= 0 )
- ft_mem_debug_panic(
- "trying to reallocate freed block at %p in (%s:%ld)",
- block, file_name, line_no );
-
- if ( node->size != cur_size )
- ft_mem_debug_panic( "invalid ft_realloc request for %p. cur_size is "
- "%ld instead of %ld in (%s:%ld)",
- block, cur_size, node->size, file_name, line_no );
-
- /* return NULL if the maximum number of allocations was reached */
- if ( table->bound_count &&
- table->alloc_count >= table->alloc_count_max )
- return NULL;
-
- delta = new_size - cur_size;
-
- /* return NULL if this allocation would overflow the maximum heap size */
- if ( delta > 0 &&
- table->bound_total &&
- table->alloc_current + delta > table->alloc_total_max )
- return NULL;
-
- new_block = (FT_Pointer)ft_mem_table_alloc( table, new_size );
- if ( !new_block )
- return NULL;
-
- ft_mem_table_set( table, (FT_Byte*)new_block, new_size, delta );
-
- ft_memcpy( new_block, block, cur_size < new_size ? (size_t)cur_size
- : (size_t)new_size );
-
- ft_mem_table_remove( table, (FT_Byte*)block, delta );
-
- _ft_debug_file = "<unknown>";
- _ft_debug_lineno = 0;
-
- if ( !table->keep_alive )
- ft_mem_table_free( table, block );
-
- return new_block;
- }
-
-
- extern FT_Int
- ft_mem_debug_init( FT_Memory memory )
- {
- FT_MemTable table;
- FT_Int result = 0;
-
-
- if ( getenv( "FT2_DEBUG_MEMORY" ) )
- {
- table = ft_mem_table_new( memory );
- if ( table )
- {
- const char* p;
-
-
- memory->user = table;
- memory->alloc = ft_mem_debug_alloc;
- memory->realloc = ft_mem_debug_realloc;
- memory->free = ft_mem_debug_free;
-
- p = getenv( "FT2_ALLOC_TOTAL_MAX" );
- if ( p )
- {
- FT_Long total_max = ft_strtol( p, NULL, 10 );
-
-
- if ( total_max > 0 )
- {
- table->bound_total = 1;
- table->alloc_total_max = total_max;
- }
- }
-
- p = getenv( "FT2_ALLOC_COUNT_MAX" );
- if ( p )
- {
- FT_Long total_count = ft_strtol( p, NULL, 10 );
-
-
- if ( total_count > 0 )
- {
- table->bound_count = 1;
- table->alloc_count_max = total_count;
- }
- }
-
- p = getenv( "FT2_KEEP_ALIVE" );
- if ( p )
- {
- FT_Long keep_alive = ft_strtol( p, NULL, 10 );
-
-
- if ( keep_alive > 0 )
- table->keep_alive = 1;
- }
-
- result = 1;
- }
- }
- return result;
- }
-
-
- extern void
- ft_mem_debug_done( FT_Memory memory )
- {
- FT_MemTable table = (FT_MemTable)memory->user;
-
-
- if ( table )
- {
- memory->free = table->free;
- memory->realloc = table->realloc;
- memory->alloc = table->alloc;
-
- ft_mem_table_destroy( table );
- memory->user = NULL;
- }
- }
-
-
- static int
- ft_mem_source_compare( const void* p1,
- const void* p2 )
- {
- FT_MemSource s1 = *(FT_MemSource*)p1;
- FT_MemSource s2 = *(FT_MemSource*)p2;
-
-
- if ( s2->max_size > s1->max_size )
- return 1;
- else if ( s2->max_size < s1->max_size )
- return -1;
- else
- return 0;
- }
-
-
- extern void
- FT_DumpMemory( FT_Memory memory )
- {
- FT_MemTable table = (FT_MemTable)memory->user;
-
-
- if ( table )
- {
- FT_MemSource* bucket = table->sources;
- FT_MemSource* limit = bucket + FT_MEM_SOURCE_BUCKETS;
- FT_MemSource* sources;
- FT_Int nn, count;
- const char* fmt;
-
-
- count = 0;
- for ( ; bucket < limit; bucket++ )
- {
- FT_MemSource source = *bucket;
-
-
- for ( ; source; source = source->link )
- count++;
- }
-
- sources = (FT_MemSource*)
- ft_mem_table_alloc(
- table, count * (FT_Long)sizeof ( *sources ) );
-
- count = 0;
- for ( bucket = table->sources; bucket < limit; bucket++ )
- {
- FT_MemSource source = *bucket;
-
-
- for ( ; source; source = source->link )
- sources[count++] = source;
- }
-
- ft_qsort( sources,
- (size_t)count,
- sizeof ( *sources ),
- ft_mem_source_compare );
-
- printf( "FreeType Memory Dump: "
- "current=%ld max=%ld total=%ld count=%ld\n",
- table->alloc_current, table->alloc_max,
- table->alloc_total, table->alloc_count );
- printf( " block block sizes sizes sizes source\n" );
- printf( " count high sum highsum max location\n" );
- printf( "-------------------------------------------------\n" );
-
- fmt = "%6ld %6ld %8ld %8ld %8ld %s:%d\n";
-
- for ( nn = 0; nn < count; nn++ )
- {
- FT_MemSource source = sources[nn];
-
-
- printf( fmt,
- source->cur_blocks, source->max_blocks,
- source->cur_size, source->max_size, source->cur_max,
- FT_FILENAME( source->file_name ),
- source->line_no );
- }
- printf( "------------------------------------------------\n" );
-
- ft_mem_table_free( table, sources );
- }
- }
-
-#else /* !FT_DEBUG_MEMORY */
-
- /* ANSI C doesn't like empty source files */
- typedef int _debug_mem_dummy;
-
-#endif /* !FT_DEBUG_MEMORY */
-
-
-/* END */
diff --git a/src/base/ftdebug.c b/src/base/ftdebug.c
deleted file mode 100644
index 20c617089..000000000
--- a/src/base/ftdebug.c
+++ /dev/null
@@ -1,266 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftdebug.c */
-/* */
-/* Debugging and logging component (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This component contains various macros and functions used to ease the */
- /* debugging of the FreeType engine. Its main purpose is in assertion */
- /* checking, tracing, and error detection. */
- /* */
- /* There are now three debugging modes: */
- /* */
- /* - trace mode */
- /* */
- /* Error and trace messages are sent to the log file (which can be the */
- /* standard error output). */
- /* */
- /* - error mode */
- /* */
- /* Only error messages are generated. */
- /* */
- /* - release mode: */
- /* */
- /* No error message is sent or generated. The code is free from any */
- /* debugging parts. */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_DEBUG_H
-
-
-#ifdef FT_DEBUG_LEVEL_ERROR
-
- /* documentation is in ftdebug.h */
-
- FT_BASE_DEF( void )
- FT_Message( const char* fmt,
- ... )
- {
- va_list ap;
-
-
- va_start( ap, fmt );
- vfprintf( stderr, fmt, ap );
- va_end( ap );
- }
-
-
- /* documentation is in ftdebug.h */
-
- FT_BASE_DEF( void )
- FT_Panic( const char* fmt,
- ... )
- {
- va_list ap;
-
-
- va_start( ap, fmt );
- vfprintf( stderr, fmt, ap );
- va_end( ap );
-
- exit( EXIT_FAILURE );
- }
-
-
- /* documentation is in ftdebug.h */
-
- FT_BASE_DEF( int )
- FT_Throw( FT_Error error,
- int line,
- const char* file )
- {
- FT_UNUSED( error );
- FT_UNUSED( line );
- FT_UNUSED( file );
-
- return 0;
- }
-
-#endif /* FT_DEBUG_LEVEL_ERROR */
-
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
- /* array of trace levels, initialized to 0 */
- int ft_trace_levels[trace_count];
-
-
- /* define array of trace toggle names */
-#define FT_TRACE_DEF( x ) #x ,
-
- static const char* ft_trace_toggles[trace_count + 1] =
- {
-#include FT_INTERNAL_TRACE_H
- NULL
- };
-
-#undef FT_TRACE_DEF
-
-
- /* documentation is in ftdebug.h */
-
- FT_BASE_DEF( FT_Int )
- FT_Trace_Get_Count( void )
- {
- return trace_count;
- }
-
-
- /* documentation is in ftdebug.h */
-
- FT_BASE_DEF( const char * )
- FT_Trace_Get_Name( FT_Int idx )
- {
- int max = FT_Trace_Get_Count();
-
-
- if ( idx < max )
- return ft_trace_toggles[idx];
- else
- return NULL;
- }
-
-
- /*************************************************************************/
- /* */
- /* Initialize the tracing sub-system. This is done by retrieving the */
- /* value of the `FT2_DEBUG' environment variable. It must be a list of */
- /* toggles, separated by spaces, `;', or `,'. Example: */
- /* */
- /* export FT2_DEBUG="any:3 memory:7 stream:5" */
- /* */
- /* This requests that all levels be set to 3, except the trace level for */
- /* the memory and stream components which are set to 7 and 5, */
- /* respectively. */
- /* */
- /* See the file `include/freetype/internal/fttrace.h' for details of */
- /* the available toggle names. */
- /* */
- /* The level must be between 0 and 7; 0 means quiet (except for serious */
- /* runtime errors), and 7 means _very_ verbose. */
- /* */
- FT_BASE_DEF( void )
- ft_debug_init( void )
- {
- const char* ft2_debug = getenv( "FT2_DEBUG" );
-
-
- if ( ft2_debug )
- {
- const char* p = ft2_debug;
- const char* q;
-
-
- for ( ; *p; p++ )
- {
- /* skip leading whitespace and separators */
- if ( *p == ' ' || *p == '\t' || *p == ',' || *p == ';' || *p == '=' )
- continue;
-
- /* read toggle name, followed by ':' */
- q = p;
- while ( *p && *p != ':' )
- p++;
-
- if ( !*p )
- break;
-
- if ( *p == ':' && p > q )
- {
- FT_Int n, i, len = (FT_Int)( p - q );
- FT_Int level = -1, found = -1;
-
-
- for ( n = 0; n < trace_count; n++ )
- {
- const char* toggle = ft_trace_toggles[n];
-
-
- for ( i = 0; i < len; i++ )
- {
- if ( toggle[i] != q[i] )
- break;
- }
-
- if ( i == len && toggle[i] == 0 )
- {
- found = n;
- break;
- }
- }
-
- /* read level */
- p++;
- if ( *p )
- {
- level = *p - '0';
- if ( level < 0 || level > 7 )
- level = -1;
- }
-
- if ( found >= 0 && level >= 0 )
- {
- if ( found == trace_any )
- {
- /* special case for `any' */
- for ( n = 0; n < trace_count; n++ )
- ft_trace_levels[n] = level;
- }
- else
- ft_trace_levels[found] = level;
- }
- }
- }
- }
- }
-
-
-#else /* !FT_DEBUG_LEVEL_TRACE */
-
-
- FT_BASE_DEF( void )
- ft_debug_init( void )
- {
- /* nothing */
- }
-
-
- FT_BASE_DEF( FT_Int )
- FT_Trace_Get_Count( void )
- {
- return 0;
- }
-
-
- FT_BASE_DEF( const char * )
- FT_Trace_Get_Name( FT_Int idx )
- {
- FT_UNUSED( idx );
-
- return NULL;
- }
-
-
-#endif /* !FT_DEBUG_LEVEL_TRACE */
-
-
-/* END */
diff --git a/src/base/ftfntfmt.c b/src/base/ftfntfmt.c
deleted file mode 100644
index dcbeba005..000000000
--- a/src/base/ftfntfmt.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftfntfmt.c */
-/* */
-/* FreeType utility file for font formats (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FONT_FORMATS_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_FONT_FORMAT_H
-
-
- /* documentation is in ftfntfmt.h */
-
- FT_EXPORT_DEF( const char* )
- FT_Get_Font_Format( FT_Face face )
- {
- const char* result = NULL;
-
-
- if ( face )
- FT_FACE_FIND_SERVICE( face, result, FONT_FORMAT );
-
- return result;
- }
-
-
- /* deprecated function name; retained for ABI compatibility */
-
- FT_EXPORT_DEF( const char* )
- FT_Get_X11_Font_Format( FT_Face face )
- {
- const char* result = NULL;
-
-
- if ( face )
- FT_FACE_FIND_SERVICE( face, result, FONT_FORMAT );
-
- return result;
- }
-
-
-/* END */
diff --git a/src/base/ftfstype.c b/src/base/ftfstype.c
deleted file mode 100644
index cec4fb302..000000000
--- a/src/base/ftfstype.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftfstype.c */
-/* */
-/* FreeType utility file to access FSType data (body). */
-/* */
-/* Copyright 2008-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-#include <ft2build.h>
-#include FT_TYPE1_TABLES_H
-#include FT_TRUETYPE_TABLES_H
-#include FT_INTERNAL_SERVICE_H
-#include FT_SERVICE_POSTSCRIPT_INFO_H
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_UShort )
- FT_Get_FSType_Flags( FT_Face face )
- {
- TT_OS2* os2;
-
-
- /* first, try to get the fs_type directly from the font */
- if ( face )
- {
- FT_Service_PsInfo service = NULL;
-
-
- FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO );
-
- if ( service && service->ps_get_font_extra )
- {
- PS_FontExtraRec extra;
-
-
- if ( !service->ps_get_font_extra( face, &extra ) &&
- extra.fs_type != 0 )
- return extra.fs_type;
- }
- }
-
- /* look at FSType before fsType for Type42 */
-
- if ( ( os2 = (TT_OS2*)FT_Get_Sfnt_Table( face, FT_SFNT_OS2 ) ) != NULL &&
- os2->version != 0xFFFFU )
- return os2->fsType;
-
- return 0;
- }
-
-
-/* END */
diff --git a/src/base/ftgasp.c b/src/base/ftgasp.c
deleted file mode 100644
index 477b72558..000000000
--- a/src/base/ftgasp.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgasp.c */
-/* */
-/* Access of TrueType's `gasp' table (body). */
-/* */
-/* Copyright 2007-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_GASP_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-
-
- FT_EXPORT_DEF( FT_Int )
- FT_Get_Gasp( FT_Face face,
- FT_UInt ppem )
- {
- FT_Int result = FT_GASP_NO_TABLE;
-
-
- if ( face && FT_IS_SFNT( face ) )
- {
- TT_Face ttface = (TT_Face)face;
-
-
- if ( ttface->gasp.numRanges > 0 )
- {
- TT_GaspRange range = ttface->gasp.gaspRanges;
- TT_GaspRange range_end = range + ttface->gasp.numRanges;
-
-
- while ( ppem > range->maxPPEM )
- {
- range++;
- if ( range >= range_end )
- goto Exit;
- }
-
- result = range->gaspFlag;
-
- /* ensure that we don't have spurious bits */
- if ( ttface->gasp.version == 0 )
- result &= 3;
- }
- }
- Exit:
- return result;
- }
-
-
-/* END */
diff --git a/src/base/ftgloadr.c b/src/base/ftgloadr.c
deleted file mode 100644
index 8134003b4..000000000
--- a/src/base/ftgloadr.c
+++ /dev/null
@@ -1,406 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgloadr.c */
-/* */
-/* The FreeType glyph loader (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_GLYPH_LOADER_H
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_OBJECTS_H
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gloader
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** *****/
- /***** G L Y P H L O A D E R *****/
- /***** *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* The glyph loader is a simple object which is used to load a set of */
- /* glyphs easily. It is critical for the correct loading of composites. */
- /* */
- /* Ideally, one can see it as a stack of abstract `glyph' objects. */
- /* */
- /* loader.base Is really the bottom of the stack. It describes a */
- /* single glyph image made of the juxtaposition of */
- /* several glyphs (those `in the stack'). */
- /* */
- /* loader.current Describes the top of the stack, on which a new */
- /* glyph can be loaded. */
- /* */
- /* Rewind Clears the stack. */
- /* Prepare Set up `loader.current' for addition of a new glyph */
- /* image. */
- /* Add Add the `current' glyph image to the `base' one, */
- /* and prepare for another one. */
- /* */
- /* The glyph loader is now a base object. Each driver used to */
- /* re-implement it in one way or the other, which wasted code and */
- /* energy. */
- /* */
- /*************************************************************************/
-
-
- /* create a new glyph loader */
- FT_BASE_DEF( FT_Error )
- FT_GlyphLoader_New( FT_Memory memory,
- FT_GlyphLoader *aloader )
- {
- FT_GlyphLoader loader = NULL;
- FT_Error error;
-
-
- if ( !FT_NEW( loader ) )
- {
- loader->memory = memory;
- *aloader = loader;
- }
- return error;
- }
-
-
- /* rewind the glyph loader - reset counters to 0 */
- FT_BASE_DEF( void )
- FT_GlyphLoader_Rewind( FT_GlyphLoader loader )
- {
- FT_GlyphLoad base = &loader->base;
- FT_GlyphLoad current = &loader->current;
-
-
- base->outline.n_points = 0;
- base->outline.n_contours = 0;
- base->num_subglyphs = 0;
-
- *current = *base;
- }
-
-
- /* reset the glyph loader, frees all allocated tables */
- /* and starts from zero */
- FT_BASE_DEF( void )
- FT_GlyphLoader_Reset( FT_GlyphLoader loader )
- {
- FT_Memory memory = loader->memory;
-
-
- FT_FREE( loader->base.outline.points );
- FT_FREE( loader->base.outline.tags );
- FT_FREE( loader->base.outline.contours );
- FT_FREE( loader->base.extra_points );
- FT_FREE( loader->base.subglyphs );
-
- loader->base.extra_points2 = NULL;
-
- loader->max_points = 0;
- loader->max_contours = 0;
- loader->max_subglyphs = 0;
-
- FT_GlyphLoader_Rewind( loader );
- }
-
-
- /* delete a glyph loader */
- FT_BASE_DEF( void )
- FT_GlyphLoader_Done( FT_GlyphLoader loader )
- {
- if ( loader )
- {
- FT_Memory memory = loader->memory;
-
-
- FT_GlyphLoader_Reset( loader );
- FT_FREE( loader );
- }
- }
-
-
- /* re-adjust the `current' outline fields */
- static void
- FT_GlyphLoader_Adjust_Points( FT_GlyphLoader loader )
- {
- FT_Outline* base = &loader->base.outline;
- FT_Outline* current = &loader->current.outline;
-
-
- current->points = base->points + base->n_points;
- current->tags = base->tags + base->n_points;
- current->contours = base->contours + base->n_contours;
-
- /* handle extra points table - if any */
- if ( loader->use_extra )
- {
- loader->current.extra_points = loader->base.extra_points +
- base->n_points;
-
- loader->current.extra_points2 = loader->base.extra_points2 +
- base->n_points;
- }
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_GlyphLoader_CreateExtra( FT_GlyphLoader loader )
- {
- FT_Error error;
- FT_Memory memory = loader->memory;
-
-
- if ( !FT_NEW_ARRAY( loader->base.extra_points, 2 * loader->max_points ) )
- {
- loader->use_extra = 1;
- loader->base.extra_points2 = loader->base.extra_points +
- loader->max_points;
-
- FT_GlyphLoader_Adjust_Points( loader );
- }
- return error;
- }
-
-
- /* re-adjust the `current' subglyphs field */
- static void
- FT_GlyphLoader_Adjust_Subglyphs( FT_GlyphLoader loader )
- {
- FT_GlyphLoad base = &loader->base;
- FT_GlyphLoad current = &loader->current;
-
-
- current->subglyphs = base->subglyphs + base->num_subglyphs;
- }
-
-
- /* Ensure that we can add `n_points' and `n_contours' to our glyph. */
- /* This function reallocates its outline tables if necessary. Note that */
- /* it DOESN'T change the number of points within the loader! */
- /* */
- FT_BASE_DEF( FT_Error )
- FT_GlyphLoader_CheckPoints( FT_GlyphLoader loader,
- FT_UInt n_points,
- FT_UInt n_contours )
- {
- FT_Memory memory = loader->memory;
- FT_Error error = FT_Err_Ok;
- FT_Outline* base = &loader->base.outline;
- FT_Outline* current = &loader->current.outline;
- FT_Bool adjust = 0;
-
- FT_UInt new_max, old_max;
-
-
- /* check points & tags */
- new_max = (FT_UInt)base->n_points + (FT_UInt)current->n_points +
- n_points;
- old_max = loader->max_points;
-
- if ( new_max > old_max )
- {
- new_max = FT_PAD_CEIL( new_max, 8 );
-
- if ( new_max > FT_OUTLINE_POINTS_MAX )
- return FT_THROW( Array_Too_Large );
-
- if ( FT_RENEW_ARRAY( base->points, old_max, new_max ) ||
- FT_RENEW_ARRAY( base->tags, old_max, new_max ) )
- goto Exit;
-
- if ( loader->use_extra )
- {
- if ( FT_RENEW_ARRAY( loader->base.extra_points,
- old_max * 2, new_max * 2 ) )
- goto Exit;
-
- FT_ARRAY_MOVE( loader->base.extra_points + new_max,
- loader->base.extra_points + old_max,
- old_max );
-
- loader->base.extra_points2 = loader->base.extra_points + new_max;
- }
-
- adjust = 1;
- loader->max_points = new_max;
- }
-
- /* check contours */
- old_max = loader->max_contours;
- new_max = (FT_UInt)base->n_contours + (FT_UInt)current->n_contours +
- n_contours;
- if ( new_max > old_max )
- {
- new_max = FT_PAD_CEIL( new_max, 4 );
-
- if ( new_max > FT_OUTLINE_CONTOURS_MAX )
- return FT_THROW( Array_Too_Large );
-
- if ( FT_RENEW_ARRAY( base->contours, old_max, new_max ) )
- goto Exit;
-
- adjust = 1;
- loader->max_contours = new_max;
- }
-
- if ( adjust )
- FT_GlyphLoader_Adjust_Points( loader );
-
- Exit:
- if ( error )
- FT_GlyphLoader_Reset( loader );
-
- return error;
- }
-
-
- /* Ensure that we can add `n_subglyphs' to our glyph. this function */
- /* reallocates its subglyphs table if necessary. Note that it DOES */
- /* NOT change the number of subglyphs within the loader! */
- /* */
- FT_BASE_DEF( FT_Error )
- FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader loader,
- FT_UInt n_subs )
- {
- FT_Memory memory = loader->memory;
- FT_Error error = FT_Err_Ok;
- FT_UInt new_max, old_max;
-
- FT_GlyphLoad base = &loader->base;
- FT_GlyphLoad current = &loader->current;
-
-
- new_max = base->num_subglyphs + current->num_subglyphs + n_subs;
- old_max = loader->max_subglyphs;
- if ( new_max > old_max )
- {
- new_max = FT_PAD_CEIL( new_max, 2 );
- if ( FT_RENEW_ARRAY( base->subglyphs, old_max, new_max ) )
- goto Exit;
-
- loader->max_subglyphs = new_max;
-
- FT_GlyphLoader_Adjust_Subglyphs( loader );
- }
-
- Exit:
- return error;
- }
-
-
- /* prepare loader for the addition of a new glyph on top of the base one */
- FT_BASE_DEF( void )
- FT_GlyphLoader_Prepare( FT_GlyphLoader loader )
- {
- FT_GlyphLoad current = &loader->current;
-
-
- current->outline.n_points = 0;
- current->outline.n_contours = 0;
- current->num_subglyphs = 0;
-
- FT_GlyphLoader_Adjust_Points ( loader );
- FT_GlyphLoader_Adjust_Subglyphs( loader );
- }
-
-
- /* add current glyph to the base image -- and prepare for another */
- FT_BASE_DEF( void )
- FT_GlyphLoader_Add( FT_GlyphLoader loader )
- {
- FT_GlyphLoad base;
- FT_GlyphLoad current;
-
- FT_Int n_curr_contours;
- FT_Int n_base_points;
- FT_Int n;
-
-
- if ( !loader )
- return;
-
- base = &loader->base;
- current = &loader->current;
-
- n_curr_contours = current->outline.n_contours;
- n_base_points = base->outline.n_points;
-
- base->outline.n_points =
- (short)( base->outline.n_points + current->outline.n_points );
- base->outline.n_contours =
- (short)( base->outline.n_contours + current->outline.n_contours );
-
- base->num_subglyphs += current->num_subglyphs;
-
- /* adjust contours count in newest outline */
- for ( n = 0; n < n_curr_contours; n++ )
- current->outline.contours[n] =
- (short)( current->outline.contours[n] + n_base_points );
-
- /* prepare for another new glyph image */
- FT_GlyphLoader_Prepare( loader );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_GlyphLoader_CopyPoints( FT_GlyphLoader target,
- FT_GlyphLoader source )
- {
- FT_Error error;
- FT_UInt num_points = (FT_UInt)source->base.outline.n_points;
- FT_UInt num_contours = (FT_UInt)source->base.outline.n_contours;
-
-
- error = FT_GlyphLoader_CheckPoints( target, num_points, num_contours );
- if ( !error )
- {
- FT_Outline* out = &target->base.outline;
- FT_Outline* in = &source->base.outline;
-
-
- FT_ARRAY_COPY( out->points, in->points,
- num_points );
- FT_ARRAY_COPY( out->tags, in->tags,
- num_points );
- FT_ARRAY_COPY( out->contours, in->contours,
- num_contours );
-
- /* do we need to copy the extra points? */
- if ( target->use_extra && source->use_extra )
- {
- FT_ARRAY_COPY( target->base.extra_points, source->base.extra_points,
- num_points );
- FT_ARRAY_COPY( target->base.extra_points2, source->base.extra_points2,
- num_points );
- }
-
- out->n_points = (short)num_points;
- out->n_contours = (short)num_contours;
-
- FT_GlyphLoader_Adjust_Points( target );
- }
-
- return error;
- }
-
-
-/* END */
diff --git a/src/base/ftglyph.c b/src/base/ftglyph.c
deleted file mode 100644
index 62d94cbd3..000000000
--- a/src/base/ftglyph.c
+++ /dev/null
@@ -1,646 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftglyph.c */
-/* */
-/* FreeType convenience functions to handle glyphs (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* This file contains the definition of several convenience functions */
- /* that can be used by client applications to easily retrieve glyph */
- /* bitmaps and outlines from a given face. */
- /* */
- /* These functions should be optional if you are writing a font server */
- /* or text layout engine on top of FreeType. However, they are pretty */
- /* handy for many other simple uses of the library. */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-
-#include FT_GLYPH_H
-#include FT_OUTLINE_H
-#include FT_BITMAP_H
-#include FT_INTERNAL_OBJECTS_H
-
-#include "basepic.h"
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_glyph
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** FT_BitmapGlyph support ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_CALLBACK_DEF( FT_Error )
- ft_bitmap_glyph_init( FT_Glyph bitmap_glyph,
- FT_GlyphSlot slot )
- {
- FT_BitmapGlyph glyph = (FT_BitmapGlyph)bitmap_glyph;
- FT_Error error = FT_Err_Ok;
- FT_Library library = FT_GLYPH( glyph )->library;
-
-
- if ( slot->format != FT_GLYPH_FORMAT_BITMAP )
- {
- error = FT_THROW( Invalid_Glyph_Format );
- goto Exit;
- }
-
- glyph->left = slot->bitmap_left;
- glyph->top = slot->bitmap_top;
-
- /* do lazy copying whenever possible */
- if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
- {
- glyph->bitmap = slot->bitmap;
- slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
- }
- else
- {
- FT_Bitmap_Init( &glyph->bitmap );
- error = FT_Bitmap_Copy( library, &slot->bitmap, &glyph->bitmap );
- }
-
- Exit:
- return error;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- ft_bitmap_glyph_copy( FT_Glyph bitmap_source,
- FT_Glyph bitmap_target )
- {
- FT_Library library = bitmap_source->library;
- FT_BitmapGlyph source = (FT_BitmapGlyph)bitmap_source;
- FT_BitmapGlyph target = (FT_BitmapGlyph)bitmap_target;
-
-
- target->left = source->left;
- target->top = source->top;
-
- return FT_Bitmap_Copy( library, &source->bitmap, &target->bitmap );
- }
-
-
- FT_CALLBACK_DEF( void )
- ft_bitmap_glyph_done( FT_Glyph bitmap_glyph )
- {
- FT_BitmapGlyph glyph = (FT_BitmapGlyph)bitmap_glyph;
- FT_Library library = FT_GLYPH( glyph )->library;
-
-
- FT_Bitmap_Done( library, &glyph->bitmap );
- }
-
-
- FT_CALLBACK_DEF( void )
- ft_bitmap_glyph_bbox( FT_Glyph bitmap_glyph,
- FT_BBox* cbox )
- {
- FT_BitmapGlyph glyph = (FT_BitmapGlyph)bitmap_glyph;
-
-
- cbox->xMin = glyph->left * 64;
- cbox->xMax = cbox->xMin + (FT_Pos)( glyph->bitmap.width * 64 );
- cbox->yMax = glyph->top * 64;
- cbox->yMin = cbox->yMax - (FT_Pos)( glyph->bitmap.rows * 64 );
- }
-
-
- FT_DEFINE_GLYPH(
- ft_bitmap_glyph_class,
-
- sizeof ( FT_BitmapGlyphRec ),
- FT_GLYPH_FORMAT_BITMAP,
-
- ft_bitmap_glyph_init, /* FT_Glyph_InitFunc glyph_init */
- ft_bitmap_glyph_done, /* FT_Glyph_DoneFunc glyph_done */
- ft_bitmap_glyph_copy, /* FT_Glyph_CopyFunc glyph_copy */
- NULL, /* FT_Glyph_TransformFunc glyph_transform */
- ft_bitmap_glyph_bbox, /* FT_Glyph_GetBBoxFunc glyph_bbox */
- NULL /* FT_Glyph_PrepareFunc glyph_prepare */
- )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** FT_OutlineGlyph support ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_CALLBACK_DEF( FT_Error )
- ft_outline_glyph_init( FT_Glyph outline_glyph,
- FT_GlyphSlot slot )
- {
- FT_OutlineGlyph glyph = (FT_OutlineGlyph)outline_glyph;
- FT_Error error = FT_Err_Ok;
- FT_Library library = FT_GLYPH( glyph )->library;
- FT_Outline* source = &slot->outline;
- FT_Outline* target = &glyph->outline;
-
-
- /* check format in glyph slot */
- if ( slot->format != FT_GLYPH_FORMAT_OUTLINE )
- {
- error = FT_THROW( Invalid_Glyph_Format );
- goto Exit;
- }
-
- /* allocate new outline */
- error = FT_Outline_New( library,
- (FT_UInt)source->n_points,
- source->n_contours,
- &glyph->outline );
- if ( error )
- goto Exit;
-
- FT_Outline_Copy( source, target );
-
- Exit:
- return error;
- }
-
-
- FT_CALLBACK_DEF( void )
- ft_outline_glyph_done( FT_Glyph outline_glyph )
- {
- FT_OutlineGlyph glyph = (FT_OutlineGlyph)outline_glyph;
-
-
- FT_Outline_Done( FT_GLYPH( glyph )->library, &glyph->outline );
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- ft_outline_glyph_copy( FT_Glyph outline_source,
- FT_Glyph outline_target )
- {
- FT_OutlineGlyph source = (FT_OutlineGlyph)outline_source;
- FT_OutlineGlyph target = (FT_OutlineGlyph)outline_target;
- FT_Error error;
- FT_Library library = FT_GLYPH( source )->library;
-
-
- error = FT_Outline_New( library,
- (FT_UInt)source->outline.n_points,
- source->outline.n_contours,
- &target->outline );
- if ( !error )
- FT_Outline_Copy( &source->outline, &target->outline );
-
- return error;
- }
-
-
- FT_CALLBACK_DEF( void )
- ft_outline_glyph_transform( FT_Glyph outline_glyph,
- const FT_Matrix* matrix,
- const FT_Vector* delta )
- {
- FT_OutlineGlyph glyph = (FT_OutlineGlyph)outline_glyph;
-
-
- if ( matrix )
- FT_Outline_Transform( &glyph->outline, matrix );
-
- if ( delta )
- FT_Outline_Translate( &glyph->outline, delta->x, delta->y );
- }
-
-
- FT_CALLBACK_DEF( void )
- ft_outline_glyph_bbox( FT_Glyph outline_glyph,
- FT_BBox* bbox )
- {
- FT_OutlineGlyph glyph = (FT_OutlineGlyph)outline_glyph;
-
-
- FT_Outline_Get_CBox( &glyph->outline, bbox );
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- ft_outline_glyph_prepare( FT_Glyph outline_glyph,
- FT_GlyphSlot slot )
- {
- FT_OutlineGlyph glyph = (FT_OutlineGlyph)outline_glyph;
-
-
- slot->format = FT_GLYPH_FORMAT_OUTLINE;
- slot->outline = glyph->outline;
- slot->outline.flags &= ~FT_OUTLINE_OWNER;
-
- return FT_Err_Ok;
- }
-
-
- FT_DEFINE_GLYPH(
- ft_outline_glyph_class,
-
- sizeof ( FT_OutlineGlyphRec ),
- FT_GLYPH_FORMAT_OUTLINE,
-
- ft_outline_glyph_init, /* FT_Glyph_InitFunc glyph_init */
- ft_outline_glyph_done, /* FT_Glyph_DoneFunc glyph_done */
- ft_outline_glyph_copy, /* FT_Glyph_CopyFunc glyph_copy */
- ft_outline_glyph_transform, /* FT_Glyph_TransformFunc glyph_transform */
- ft_outline_glyph_bbox, /* FT_Glyph_GetBBoxFunc glyph_bbox */
- ft_outline_glyph_prepare /* FT_Glyph_PrepareFunc glyph_prepare */
- )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** FT_Glyph class and API ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
- static FT_Error
- ft_new_glyph( FT_Library library,
- const FT_Glyph_Class* clazz,
- FT_Glyph* aglyph )
- {
- FT_Memory memory = library->memory;
- FT_Error error;
- FT_Glyph glyph = NULL;
-
-
- *aglyph = NULL;
-
- if ( !FT_ALLOC( glyph, clazz->glyph_size ) )
- {
- glyph->library = library;
- glyph->clazz = clazz;
- glyph->format = clazz->glyph_format;
-
- *aglyph = glyph;
- }
-
- return error;
- }
-
-
- /* documentation is in ftglyph.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Glyph_Copy( FT_Glyph source,
- FT_Glyph *target )
- {
- FT_Glyph copy;
- FT_Error error;
- const FT_Glyph_Class* clazz;
-
-
- /* check arguments */
- if ( !target || !source || !source->clazz )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- *target = NULL;
-
- if ( !source || !source->clazz )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- clazz = source->clazz;
- error = ft_new_glyph( source->library, clazz, &copy );
- if ( error )
- goto Exit;
-
- copy->advance = source->advance;
- copy->format = source->format;
-
- if ( clazz->glyph_copy )
- error = clazz->glyph_copy( source, copy );
-
- if ( error )
- FT_Done_Glyph( copy );
- else
- *target = copy;
-
- Exit:
- return error;
- }
-
-
- /* documentation is in ftglyph.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_Glyph( FT_GlyphSlot slot,
- FT_Glyph *aglyph )
- {
- FT_Library library;
- FT_Error error;
- FT_Glyph glyph;
-
- const FT_Glyph_Class* clazz = NULL;
-
-
- if ( !slot )
- return FT_THROW( Invalid_Slot_Handle );
-
- library = slot->library;
-
- if ( !aglyph )
- return FT_THROW( Invalid_Argument );
-
- /* if it is a bitmap, that's easy :-) */
- if ( slot->format == FT_GLYPH_FORMAT_BITMAP )
- clazz = FT_BITMAP_GLYPH_CLASS_GET;
-
- /* if it is an outline */
- else if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
- clazz = FT_OUTLINE_GLYPH_CLASS_GET;
-
- else
- {
- /* try to find a renderer that supports the glyph image format */
- FT_Renderer render = FT_Lookup_Renderer( library, slot->format, 0 );
-
-
- if ( render )
- clazz = &render->glyph_class;
- }
-
- if ( !clazz )
- {
- error = FT_THROW( Invalid_Glyph_Format );
- goto Exit;
- }
-
- /* create FT_Glyph object */
- error = ft_new_glyph( library, clazz, &glyph );
- if ( error )
- goto Exit;
-
- /* copy advance while converting 26.6 to 16.16 format */
- if ( slot->advance.x >= 0x8000L * 64 ||
- slot->advance.x <= -0x8000L * 64 )
- {
- FT_ERROR(( "FT_Get_Glyph: advance width too large\n" ));
- return FT_THROW( Invalid_Argument );
- }
- if ( slot->advance.y >= 0x8000L * 64 ||
- slot->advance.y <= -0x8000L * 64 )
- {
- FT_ERROR(( "FT_Get_Glyph: advance height too large\n" ));
- return FT_THROW( Invalid_Argument );
- }
-
- glyph->advance.x = slot->advance.x * 1024;
- glyph->advance.y = slot->advance.y * 1024;
-
- /* now import the image from the glyph slot */
- error = clazz->glyph_init( glyph, slot );
-
- /* if an error occurred, destroy the glyph */
- if ( error )
- FT_Done_Glyph( glyph );
- else
- *aglyph = glyph;
-
- Exit:
- return error;
- }
-
-
- /* documentation is in ftglyph.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Glyph_Transform( FT_Glyph glyph,
- FT_Matrix* matrix,
- FT_Vector* delta )
- {
- FT_Error error = FT_Err_Ok;
-
-
- if ( !glyph || !glyph->clazz )
- error = FT_THROW( Invalid_Argument );
- else
- {
- const FT_Glyph_Class* clazz = glyph->clazz;
-
-
- if ( clazz->glyph_transform )
- {
- /* transform glyph image */
- clazz->glyph_transform( glyph, matrix, delta );
-
- /* transform advance vector */
- if ( matrix )
- FT_Vector_Transform( &glyph->advance, matrix );
- }
- else
- error = FT_THROW( Invalid_Glyph_Format );
- }
- return error;
- }
-
-
- /* documentation is in ftglyph.h */
-
- FT_EXPORT_DEF( void )
- FT_Glyph_Get_CBox( FT_Glyph glyph,
- FT_UInt bbox_mode,
- FT_BBox *acbox )
- {
- const FT_Glyph_Class* clazz;
-
-
- if ( !acbox )
- return;
-
- acbox->xMin = acbox->yMin = acbox->xMax = acbox->yMax = 0;
-
- if ( !glyph || !glyph->clazz )
- return;
-
- clazz = glyph->clazz;
- if ( !clazz->glyph_bbox )
- return;
-
- /* retrieve bbox in 26.6 coordinates */
- clazz->glyph_bbox( glyph, acbox );
-
- /* perform grid fitting if needed */
- if ( bbox_mode == FT_GLYPH_BBOX_GRIDFIT ||
- bbox_mode == FT_GLYPH_BBOX_PIXELS )
- {
- acbox->xMin = FT_PIX_FLOOR( acbox->xMin );
- acbox->yMin = FT_PIX_FLOOR( acbox->yMin );
- acbox->xMax = FT_PIX_CEIL( acbox->xMax );
- acbox->yMax = FT_PIX_CEIL( acbox->yMax );
- }
-
- /* convert to integer pixels if needed */
- if ( bbox_mode == FT_GLYPH_BBOX_TRUNCATE ||
- bbox_mode == FT_GLYPH_BBOX_PIXELS )
- {
- acbox->xMin >>= 6;
- acbox->yMin >>= 6;
- acbox->xMax >>= 6;
- acbox->yMax >>= 6;
- }
- }
-
-
- /* documentation is in ftglyph.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Glyph_To_Bitmap( FT_Glyph* the_glyph,
- FT_Render_Mode render_mode,
- FT_Vector* origin,
- FT_Bool destroy )
- {
- FT_GlyphSlotRec dummy;
- FT_GlyphSlot_InternalRec dummy_internal;
- FT_Error error = FT_Err_Ok;
- FT_Glyph b, glyph;
- FT_BitmapGlyph bitmap = NULL;
- const FT_Glyph_Class* clazz;
-
- /* FT_BITMAP_GLYPH_CLASS_GET dereferences `library' in PIC mode */
- FT_Library library;
-
-
- /* check argument */
- if ( !the_glyph )
- goto Bad;
- glyph = *the_glyph;
- if ( !glyph )
- goto Bad;
-
- clazz = glyph->clazz;
- library = glyph->library;
- if ( !library || !clazz )
- goto Bad;
-
- /* when called with a bitmap glyph, do nothing and return successfully */
- if ( clazz == FT_BITMAP_GLYPH_CLASS_GET )
- goto Exit;
-
- if ( !clazz->glyph_prepare )
- goto Bad;
-
- /* we render the glyph into a glyph bitmap using a `dummy' glyph slot */
- /* then calling FT_Render_Glyph_Internal() */
-
- FT_ZERO( &dummy );
- FT_ZERO( &dummy_internal );
- dummy.internal = &dummy_internal;
- dummy.library = library;
- dummy.format = clazz->glyph_format;
-
- /* create result bitmap glyph */
- error = ft_new_glyph( library, FT_BITMAP_GLYPH_CLASS_GET, &b );
- if ( error )
- goto Exit;
- bitmap = (FT_BitmapGlyph)b;
-
-#if 1
- /* if `origin' is set, translate the glyph image */
- if ( origin )
- FT_Glyph_Transform( glyph, 0, origin );
-#else
- FT_UNUSED( origin );
-#endif
-
- /* prepare dummy slot for rendering */
- error = clazz->glyph_prepare( glyph, &dummy );
- if ( !error )
- error = FT_Render_Glyph_Internal( glyph->library, &dummy, render_mode );
-
-#if 1
- if ( !destroy && origin )
- {
- FT_Vector v;
-
-
- v.x = -origin->x;
- v.y = -origin->y;
- FT_Glyph_Transform( glyph, 0, &v );
- }
-#endif
-
- if ( error )
- goto Exit;
-
- /* in case of success, copy the bitmap to the glyph bitmap */
- error = ft_bitmap_glyph_init( (FT_Glyph)bitmap, &dummy );
- if ( error )
- goto Exit;
-
- /* copy advance */
- bitmap->root.advance = glyph->advance;
-
- if ( destroy )
- FT_Done_Glyph( glyph );
-
- *the_glyph = FT_GLYPH( bitmap );
-
- Exit:
- if ( error && bitmap )
- FT_Done_Glyph( FT_GLYPH( bitmap ) );
-
- return error;
-
- Bad:
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
-
- /* documentation is in ftglyph.h */
-
- FT_EXPORT_DEF( void )
- FT_Done_Glyph( FT_Glyph glyph )
- {
- if ( glyph )
- {
- FT_Memory memory = glyph->library->memory;
- const FT_Glyph_Class* clazz = glyph->clazz;
-
-
- if ( clazz->glyph_done )
- clazz->glyph_done( glyph );
-
- FT_FREE( glyph );
- }
- }
-
-
-/* END */
diff --git a/src/base/ftgxval.c b/src/base/ftgxval.c
deleted file mode 100644
index ff24d336d..000000000
--- a/src/base/ftgxval.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgxval.c */
-/* */
-/* FreeType API for validating TrueTypeGX/AAT tables (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* Masatake YAMATO, Redhat K.K, */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_GX_VALIDATE_H
-
-
- /* documentation is in ftgxval.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_TrueTypeGX_Validate( FT_Face face,
- FT_UInt validation_flags,
- FT_Bytes tables[FT_VALIDATE_GX_LENGTH],
- FT_UInt table_length )
- {
- FT_Service_GXvalidate service;
- FT_Error error;
-
-
- if ( !face )
- {
- error = FT_THROW( Invalid_Face_Handle );
- goto Exit;
- }
-
- if ( !tables )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- FT_FACE_FIND_GLOBAL_SERVICE( face, service, GX_VALIDATE );
-
- if ( service )
- error = service->validate( face,
- validation_flags,
- tables,
- table_length );
- else
- error = FT_THROW( Unimplemented_Feature );
-
- Exit:
- return error;
- }
-
-
- FT_EXPORT_DEF( void )
- FT_TrueTypeGX_Free( FT_Face face,
- FT_Bytes table )
- {
- FT_Memory memory;
-
-
- if ( !face )
- return;
-
- memory = FT_FACE_MEMORY( face );
-
- FT_FREE( table );
- }
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_ClassicKern_Validate( FT_Face face,
- FT_UInt validation_flags,
- FT_Bytes *ckern_table )
- {
- FT_Service_CKERNvalidate service;
- FT_Error error;
-
-
- if ( !face )
- {
- error = FT_THROW( Invalid_Face_Handle );
- goto Exit;
- }
-
- if ( !ckern_table )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- FT_FACE_FIND_GLOBAL_SERVICE( face, service, CLASSICKERN_VALIDATE );
-
- if ( service )
- error = service->validate( face,
- validation_flags,
- ckern_table );
- else
- error = FT_THROW( Unimplemented_Feature );
-
- Exit:
- return error;
- }
-
-
- FT_EXPORT_DEF( void )
- FT_ClassicKern_Free( FT_Face face,
- FT_Bytes table )
- {
- FT_Memory memory;
-
-
- if ( !face )
- return;
-
- memory = FT_FACE_MEMORY( face );
-
-
- FT_FREE( table );
- }
-
-
-/* END */
diff --git a/src/base/fthash.c b/src/base/fthash.c
deleted file mode 100644
index 21bc8dd5b..000000000
--- a/src/base/fthash.c
+++ /dev/null
@@ -1,339 +0,0 @@
-/***************************************************************************/
-/* */
-/* fthash.c */
-/* */
-/* Hashing functions (body). */
-/* */
-/***************************************************************************/
-
-/*
- * Copyright 2000 Computing Research Labs, New Mexico State University
- * Copyright 2001-2015
- * Francesco Zappa Nardelli
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
- * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
- /*************************************************************************/
- /* */
- /* This file is based on code from bdf.c,v 1.22 2000/03/16 20:08:50 */
- /* */
- /* taken from Mark Leisher's xmbdfed package */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_HASH_H
-#include FT_INTERNAL_MEMORY_H
-
-
-#define INITIAL_HT_SIZE 241
-
-
- static FT_ULong
- hash_str_lookup( FT_Hashkey* key )
- {
- const char* kp = key->str;
- FT_ULong res = 0;
-
-
- /* Mocklisp hash function. */
- while ( *kp )
- res = ( res << 5 ) - res + (FT_ULong)*kp++;
-
- return res;
- }
-
-
- static FT_ULong
- hash_num_lookup( FT_Hashkey* key )
- {
- FT_ULong num = (FT_ULong)key->num;
- FT_ULong res;
-
-
- /* Mocklisp hash function. */
- res = num & 0xFF;
- res = ( res << 5 ) - res + ( ( num >> 8 ) & 0xFF );
- res = ( res << 5 ) - res + ( ( num >> 16 ) & 0xFF );
- res = ( res << 5 ) - res + ( ( num >> 24 ) & 0xFF );
-
- return res;
- }
-
-
- static FT_Bool
- hash_str_compare( FT_Hashkey* a,
- FT_Hashkey* b )
- {
- if ( a->str[0] == b->str[0] &&
- ft_strcmp( a->str, b->str ) == 0 )
- return 1;
-
- return 0;
- }
-
-
- static FT_Bool
- hash_num_compare( FT_Hashkey* a,
- FT_Hashkey* b )
- {
- if ( a->num == b->num )
- return 1;
-
- return 0;
- }
-
-
- static FT_Hashnode*
- hash_bucket( FT_Hashkey key,
- FT_Hash hash )
- {
- FT_ULong res = 0;
- FT_Hashnode* bp = hash->table;
- FT_Hashnode* ndp;
-
-
- res = (hash->lookup)( &key );
-
- ndp = bp + ( res % hash->size );
- while ( *ndp )
- {
- if ( (hash->compare)( &(*ndp)->key, &key ) )
- break;
-
- ndp--;
- if ( ndp < bp )
- ndp = bp + ( hash->size - 1 );
- }
-
- return ndp;
- }
-
-
- static FT_Error
- hash_rehash( FT_Hash hash,
- FT_Memory memory )
- {
- FT_Hashnode* obp = hash->table;
- FT_Hashnode* bp;
- FT_Hashnode* nbp;
-
- FT_UInt i, sz = hash->size;
- FT_Error error = FT_Err_Ok;
-
-
- hash->size <<= 1;
- hash->limit = hash->size / 3;
-
- if ( FT_NEW_ARRAY( hash->table, hash->size ) )
- goto Exit;
-
- for ( i = 0, bp = obp; i < sz; i++, bp++ )
- {
- if ( *bp )
- {
- nbp = hash_bucket( (*bp)->key, hash );
- *nbp = *bp;
- }
- }
-
- FT_FREE( obp );
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- hash_init( FT_Hash hash,
- FT_Bool is_num,
- FT_Memory memory )
- {
- FT_UInt sz = INITIAL_HT_SIZE;
- FT_Error error;
-
-
- hash->size = sz;
- hash->limit = sz / 3;
- hash->used = 0;
-
- if ( is_num )
- {
- hash->lookup = hash_num_lookup;
- hash->compare = hash_num_compare;
- }
- else
- {
- hash->lookup = hash_str_lookup;
- hash->compare = hash_str_compare;
- }
-
- FT_MEM_NEW_ARRAY( hash->table, sz );
-
- return error;
- }
-
-
- FT_Error
- ft_hash_str_init( FT_Hash hash,
- FT_Memory memory )
- {
- return hash_init( hash, 0, memory );
- }
-
-
- FT_Error
- ft_hash_num_init( FT_Hash hash,
- FT_Memory memory )
- {
- return hash_init( hash, 1, memory );
- }
-
-
- void
- ft_hash_str_free( FT_Hash hash,
- FT_Memory memory )
- {
- if ( hash )
- {
- FT_UInt sz = hash->size;
- FT_Hashnode* bp = hash->table;
- FT_UInt i;
-
-
- for ( i = 0; i < sz; i++, bp++ )
- FT_FREE( *bp );
-
- FT_FREE( hash->table );
- }
- }
-
-
- /* `ft_hash_num_free' is the same as `ft_hash_str_free' */
-
-
- static FT_Error
- hash_insert( FT_Hashkey key,
- size_t data,
- FT_Hash hash,
- FT_Memory memory )
- {
- FT_Hashnode nn;
- FT_Hashnode* bp = hash_bucket( key, hash );
- FT_Error error = FT_Err_Ok;
-
-
- nn = *bp;
- if ( !nn )
- {
- if ( FT_NEW( nn ) )
- goto Exit;
- *bp = nn;
-
- nn->key = key;
- nn->data = data;
-
- if ( hash->used >= hash->limit )
- {
- error = hash_rehash( hash, memory );
- if ( error )
- goto Exit;
- }
-
- hash->used++;
- }
- else
- nn->data = data;
-
- Exit:
- return error;
- }
-
-
- FT_Error
- ft_hash_str_insert( const char* key,
- size_t data,
- FT_Hash hash,
- FT_Memory memory )
- {
- FT_Hashkey hk;
-
-
- hk.str = key;
-
- return hash_insert( hk, data, hash, memory );
- }
-
-
- FT_Error
- ft_hash_num_insert( FT_Int num,
- size_t data,
- FT_Hash hash,
- FT_Memory memory )
- {
- FT_Hashkey hk;
-
-
- hk.num = num;
-
- return hash_insert( hk, data, hash, memory );
- }
-
-
- static size_t*
- hash_lookup( FT_Hashkey key,
- FT_Hash hash )
- {
- FT_Hashnode* np = hash_bucket( key, hash );
-
-
- return (*np) ? &(*np)->data
- : NULL;
- }
-
-
- size_t*
- ft_hash_str_lookup( const char* key,
- FT_Hash hash )
- {
- FT_Hashkey hk;
-
-
- hk.str = key;
-
- return hash_lookup( hk, hash );
- }
-
-
- size_t*
- ft_hash_num_lookup( FT_Int num,
- FT_Hash hash )
- {
- FT_Hashkey hk;
-
-
- hk.num = num;
-
- return hash_lookup( hk, hash );
- }
-
-
-/* END */
diff --git a/src/base/ftinit.c b/src/base/ftinit.c
deleted file mode 100644
index b3b08fa54..000000000
--- a/src/base/ftinit.c
+++ /dev/null
@@ -1,376 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftinit.c */
-/* */
-/* FreeType initialization layer (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* The purpose of this file is to implement the following two */
- /* functions: */
- /* */
- /* FT_Add_Default_Modules(): */
- /* This function is used to add the set of default modules to a */
- /* fresh new library object. The set is taken from the header file */
- /* `freetype/config/ftmodule.h'. See the document `FreeType 2.0 */
- /* Build System' for more information. */
- /* */
- /* FT_Init_FreeType(): */
- /* This function creates a system object for the current platform, */
- /* builds a library out of it, then calls FT_Default_Drivers(). */
- /* */
- /* Note that even if FT_Init_FreeType() uses the implementation of the */
- /* system object defined at build time, client applications are still */
- /* able to provide their own `ftsystem.c'. */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_MODULE_H
-#include "basepic.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_init
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-
-#undef FT_USE_MODULE
-#ifdef __cplusplus
-#define FT_USE_MODULE( type, x ) extern "C" const type x;
-#else
-#define FT_USE_MODULE( type, x ) extern const type x;
-#endif
-
-#include FT_CONFIG_MODULES_H
-
-#undef FT_USE_MODULE
-#define FT_USE_MODULE( type, x ) (const FT_Module_Class*)&(x),
-
- static
- const FT_Module_Class* const ft_default_modules[] =
- {
-#include FT_CONFIG_MODULES_H
- 0
- };
-
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-
-#ifdef __cplusplus
-#define FT_EXTERNC extern "C"
-#else
-#define FT_EXTERNC extern
-#endif
-
- /* declare the module's class creation/destruction functions */
-#undef FT_USE_MODULE
-#define FT_USE_MODULE( type, x ) \
- FT_EXTERNC FT_Error \
- FT_Create_Class_ ## x( FT_Library library, \
- FT_Module_Class* *output_class ); \
- FT_EXTERNC void \
- FT_Destroy_Class_ ## x( FT_Library library, \
- FT_Module_Class* clazz );
-
-#include FT_CONFIG_MODULES_H
-
- /* count all module classes */
-#undef FT_USE_MODULE
-#define FT_USE_MODULE( type, x ) MODULE_CLASS_ ## x,
-
- enum
- {
-#include FT_CONFIG_MODULES_H
- FT_NUM_MODULE_CLASSES
- };
-
- /* destroy all module classes */
-#undef FT_USE_MODULE
-#define FT_USE_MODULE( type, x ) \
- if ( classes[i] ) \
- { \
- FT_Destroy_Class_ ## x( library, classes[i] ); \
- } \
- i++;
-
-
- FT_BASE_DEF( void )
- ft_destroy_default_module_classes( FT_Library library )
- {
- FT_Module_Class* *classes;
- FT_Memory memory;
- FT_UInt i;
- BasePIC* pic_container = (BasePIC*)library->pic_container.base;
-
-
- if ( !pic_container->default_module_classes )
- return;
-
- memory = library->memory;
- classes = pic_container->default_module_classes;
- i = 0;
-
-#include FT_CONFIG_MODULES_H
-
- FT_FREE( classes );
- pic_container->default_module_classes = NULL;
- }
-
-
- /* initialize all module classes and the pointer table */
-#undef FT_USE_MODULE
-#define FT_USE_MODULE( type, x ) \
- error = FT_Create_Class_ ## x( library, &clazz ); \
- if ( error ) \
- goto Exit; \
- classes[i++] = clazz;
-
-
- FT_BASE_DEF( FT_Error )
- ft_create_default_module_classes( FT_Library library )
- {
- FT_Error error;
- FT_Memory memory;
- FT_Module_Class* *classes = NULL;
- FT_Module_Class* clazz;
- FT_UInt i;
- BasePIC* pic_container = (BasePIC*)library->pic_container.base;
-
-
- memory = library->memory;
-
- pic_container->default_module_classes = NULL;
-
- if ( FT_ALLOC( classes, sizeof ( FT_Module_Class* ) *
- ( FT_NUM_MODULE_CLASSES + 1 ) ) )
- return error;
-
- /* initialize all pointers to 0, especially the last one */
- for ( i = 0; i < FT_NUM_MODULE_CLASSES; i++ )
- classes[i] = NULL;
- classes[FT_NUM_MODULE_CLASSES] = NULL;
-
- i = 0;
-
-#include FT_CONFIG_MODULES_H
-
- Exit:
- if ( error )
- ft_destroy_default_module_classes( library );
- else
- pic_container->default_module_classes = classes;
-
- return error;
- }
-
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
- /* documentation is in ftmodapi.h */
-
- FT_EXPORT_DEF( void )
- FT_Add_Default_Modules( FT_Library library )
- {
- FT_Error error;
- const FT_Module_Class* const* cur;
-
-
- /* FT_DEFAULT_MODULES_GET dereferences `library' in PIC mode */
-#ifdef FT_CONFIG_OPTION_PIC
- if ( !library )
- return;
-#endif
-
- /* GCC 4.6 warns the type difference:
- * FT_Module_Class** != const FT_Module_Class* const*
- */
- cur = (const FT_Module_Class* const*)FT_DEFAULT_MODULES_GET;
-
- /* test for valid `library' delayed to FT_Add_Module() */
- while ( *cur )
- {
- error = FT_Add_Module( library, *cur );
- /* notify errors, but don't stop */
- if ( error )
- FT_TRACE0(( "FT_Add_Default_Module:"
- " Cannot install `%s', error = 0x%x\n",
- (*cur)->module_name, error ));
- cur++;
- }
- }
-
-
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
-
-#define MAX_LENGTH 128
-
- /* documentation is in ftmodapi.h */
-
- FT_EXPORT_DEF( void )
- FT_Set_Default_Properties( FT_Library library )
- {
- const char* env;
- const char* p;
- const char* q;
-
- char module_name[MAX_LENGTH + 1];
- char property_name[MAX_LENGTH + 1];
- char property_value[MAX_LENGTH + 1];
-
- int i;
-
-
- env = ft_getenv( "FREETYPE_PROPERTIES" );
- if ( !env )
- return;
-
- for ( p = env; *p; p++ )
- {
- /* skip leading whitespace and separators */
- if ( *p == ' ' || *p == '\t' )
- continue;
-
- /* read module name, followed by `:' */
- q = p;
- for ( i = 0; i < MAX_LENGTH; i++ )
- {
- if ( !*p || *p == ':' )
- break;
- module_name[i] = *p++;
- }
- module_name[i] = '\0';
-
- if ( !*p || *p != ':' || p == q )
- break;
-
- /* read property name, followed by `=' */
- q = ++p;
- for ( i = 0; i < MAX_LENGTH; i++ )
- {
- if ( !*p || *p == '=' )
- break;
- property_name[i] = *p++;
- }
- property_name[i] = '\0';
-
- if ( !*p || *p != '=' || p == q )
- break;
-
- /* read property value, followed by whitespace (if any) */
- q = ++p;
- for ( i = 0; i < MAX_LENGTH; i++ )
- {
- if ( !*p || *p == ' ' || *p == '\t' )
- break;
- property_value[i] = *p++;
- }
- property_value[i] = '\0';
-
- if ( !( *p == '\0' || *p == ' ' || *p == '\t' ) || p == q )
- break;
-
- /* we completely ignore errors */
- ft_property_string_set( library,
- module_name,
- property_name,
- property_value );
- }
- }
-
-#else
-
- FT_EXPORT_DEF( void )
- FT_Set_Default_Properties( FT_Library library )
- {
- FT_UNUSED( library );
- }
-
-#endif
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Init_FreeType( FT_Library *alibrary )
- {
- FT_Error error;
- FT_Memory memory;
-
-
- /* check of `alibrary' delayed to `FT_New_Library' */
-
- /* First of all, allocate a new system object -- this function is part */
- /* of the system-specific component, i.e. `ftsystem.c'. */
-
- memory = FT_New_Memory();
- if ( !memory )
- {
- FT_ERROR(( "FT_Init_FreeType: cannot find memory manager\n" ));
- return FT_THROW( Unimplemented_Feature );
- }
-
- /* build a library out of it, then fill it with the set of */
- /* default drivers. */
-
- error = FT_New_Library( memory, alibrary );
- if ( error )
- FT_Done_Memory( memory );
- else
- FT_Add_Default_Modules( *alibrary );
-
- FT_Set_Default_Properties( *alibrary );
-
- return error;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Done_FreeType( FT_Library library )
- {
- FT_Memory memory;
-
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- memory = library->memory;
-
- /* Discard the library object */
- FT_Done_Library( library );
-
- /* discard memory manager */
- FT_Done_Memory( memory );
-
- return FT_Err_Ok;
- }
-
-
-/* END */
diff --git a/src/base/ftlcdfil.c b/src/base/ftlcdfil.c
deleted file mode 100644
index 6d35e35cb..000000000
--- a/src/base/ftlcdfil.c
+++ /dev/null
@@ -1,362 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftlcdfil.c */
-/* */
-/* FreeType API for color filtering of subpixel bitmap glyphs (body). */
-/* */
-/* Copyright 2006-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-
-#include FT_LCD_FILTER_H
-#include FT_IMAGE_H
-#include FT_INTERNAL_OBJECTS_H
-
-
-#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
-
-/* define USE_LEGACY to implement the legacy filter */
-#define USE_LEGACY
-
- /* FIR filter used by the default and light filters */
- FT_BASE( void )
- ft_lcd_filter_fir( FT_Bitmap* bitmap,
- FT_Render_Mode mode,
- FT_LcdFiveTapFilter weights )
- {
- FT_UInt width = (FT_UInt)bitmap->width;
- FT_UInt height = (FT_UInt)bitmap->rows;
- FT_Int pitch = bitmap->pitch;
- FT_Byte* origin = bitmap->buffer;
-
-
- /* take care of bitmap flow */
- if ( pitch > 0 )
- origin += pitch * (FT_Int)( height - 1 );
-
- /* horizontal in-place FIR filter */
- if ( mode == FT_RENDER_MODE_LCD && width >= 2 )
- {
- FT_Byte* line = origin;
-
-
- /* `fir' must be at least 32 bit wide, since the sum of */
- /* the values in `weights' can exceed 0xFF */
-
- for ( ; height > 0; height--, line -= pitch )
- {
- FT_UInt fir[5];
- FT_UInt val, xx;
-
-
- val = line[0];
- fir[2] = weights[2] * val;
- fir[3] = weights[3] * val;
- fir[4] = weights[4] * val;
-
- val = line[1];
- fir[1] = fir[2] + weights[1] * val;
- fir[2] = fir[3] + weights[2] * val;
- fir[3] = fir[4] + weights[3] * val;
- fir[4] = weights[4] * val;
-
- for ( xx = 2; xx < width; xx++ )
- {
- val = line[xx];
- fir[0] = fir[1] + weights[0] * val;
- fir[1] = fir[2] + weights[1] * val;
- fir[2] = fir[3] + weights[2] * val;
- fir[3] = fir[4] + weights[3] * val;
- fir[4] = weights[4] * val;
-
- fir[0] >>= 8;
- fir[0] |= (FT_UInt)-(FT_Int)( fir[0] >> 8 );
- line[xx - 2] = (FT_Byte)fir[0];
- }
-
- fir[1] >>= 8;
- fir[1] |= (FT_UInt)-(FT_Int)( fir[1] >> 8 );
- line[xx - 2] = (FT_Byte)fir[1];
-
- fir[2] >>= 8;
- fir[2] |= (FT_UInt)-(FT_Int)( fir[2] >> 8 );
- line[xx - 1] = (FT_Byte)fir[2];
- }
- }
-
- /* vertical in-place FIR filter */
- else if ( mode == FT_RENDER_MODE_LCD_V && height >= 2 )
- {
- FT_Byte* column = origin;
-
-
- for ( ; width > 0; width--, column++ )
- {
- FT_Byte* col = column;
- FT_UInt fir[5];
- FT_UInt val, yy;
-
-
- val = col[0];
- fir[2] = weights[2] * val;
- fir[3] = weights[3] * val;
- fir[4] = weights[4] * val;
- col -= pitch;
-
- val = col[0];
- fir[1] = fir[2] + weights[1] * val;
- fir[2] = fir[3] + weights[2] * val;
- fir[3] = fir[4] + weights[3] * val;
- fir[4] = weights[4] * val;
- col -= pitch;
-
- for ( yy = 2; yy < height; yy++, col -= pitch )
- {
- val = col[0];
- fir[0] = fir[1] + weights[0] * val;
- fir[1] = fir[2] + weights[1] * val;
- fir[2] = fir[3] + weights[2] * val;
- fir[3] = fir[4] + weights[3] * val;
- fir[4] = weights[4] * val;
-
- fir[0] >>= 8;
- fir[0] |= (FT_UInt)-(FT_Int)( fir[0] >> 8 );
- col[pitch * 2] = (FT_Byte)fir[0];
- }
-
- fir[1] >>= 8;
- fir[1] |= (FT_UInt)-(FT_Int)( fir[1] >> 8 );
- col[pitch * 2] = (FT_Byte)fir[1];
-
- fir[2] >>= 8;
- fir[2] |= (FT_UInt)-(FT_Int)( fir[2] >> 8 );
- col[pitch] = (FT_Byte)fir[2];
- }
- }
- }
-
-
-#ifdef USE_LEGACY
-
- /* intra-pixel filter used by the legacy filter */
- static void
- _ft_lcd_filter_legacy( FT_Bitmap* bitmap,
- FT_Render_Mode mode,
- FT_Byte* weights )
- {
- FT_UInt width = (FT_UInt)bitmap->width;
- FT_UInt height = (FT_UInt)bitmap->rows;
- FT_Int pitch = bitmap->pitch;
- FT_Byte* origin = bitmap->buffer;
-
- static const unsigned int filters[3][3] =
- {
- { 65538 * 9/13, 65538 * 1/6, 65538 * 1/13 },
- { 65538 * 3/13, 65538 * 4/6, 65538 * 3/13 },
- { 65538 * 1/13, 65538 * 1/6, 65538 * 9/13 }
- };
-
- FT_UNUSED( weights );
-
-
- /* take care of bitmap flow */
- if ( pitch > 0 )
- origin += pitch * (FT_Int)( height - 1 );
-
- /* horizontal in-place intra-pixel filter */
- if ( mode == FT_RENDER_MODE_LCD && width >= 3 )
- {
- FT_Byte* line = origin;
-
-
- for ( ; height > 0; height--, line -= pitch )
- {
- FT_UInt xx;
-
-
- for ( xx = 0; xx < width; xx += 3 )
- {
- FT_UInt r, g, b;
- FT_UInt p;
-
-
- p = line[xx];
- r = filters[0][0] * p;
- g = filters[0][1] * p;
- b = filters[0][2] * p;
-
- p = line[xx + 1];
- r += filters[1][0] * p;
- g += filters[1][1] * p;
- b += filters[1][2] * p;
-
- p = line[xx + 2];
- r += filters[2][0] * p;
- g += filters[2][1] * p;
- b += filters[2][2] * p;
-
- line[xx] = (FT_Byte)( r / 65536 );
- line[xx + 1] = (FT_Byte)( g / 65536 );
- line[xx + 2] = (FT_Byte)( b / 65536 );
- }
- }
- }
- else if ( mode == FT_RENDER_MODE_LCD_V && height >= 3 )
- {
- FT_Byte* column = origin;
-
-
- for ( ; width > 0; width--, column++ )
- {
- FT_Byte* col = column - 2 * pitch;
-
-
- for ( ; height > 0; height -= 3, col -= 3 * pitch )
- {
- FT_UInt r, g, b;
- FT_UInt p;
-
-
- p = col[0];
- r = filters[0][0] * p;
- g = filters[0][1] * p;
- b = filters[0][2] * p;
-
- p = col[pitch];
- r += filters[1][0] * p;
- g += filters[1][1] * p;
- b += filters[1][2] * p;
-
- p = col[pitch * 2];
- r += filters[2][0] * p;
- g += filters[2][1] * p;
- b += filters[2][2] * p;
-
- col[0] = (FT_Byte)( r / 65536 );
- col[pitch] = (FT_Byte)( g / 65536 );
- col[pitch * 2] = (FT_Byte)( b / 65536 );
- }
- }
- }
- }
-
-#endif /* USE_LEGACY */
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_Library_SetLcdFilterWeights( FT_Library library,
- unsigned char *weights )
- {
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- if ( !weights )
- return FT_THROW( Invalid_Argument );
-
- ft_memcpy( library->lcd_weights, weights, FT_LCD_FILTER_FIVE_TAPS );
- library->lcd_filter_func = ft_lcd_filter_fir;
-
- return FT_Err_Ok;
- }
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_Library_SetLcdFilter( FT_Library library,
- FT_LcdFilter filter )
- {
- static const FT_LcdFiveTapFilter default_weights =
- { 0x08, 0x4d, 0x56, 0x4d, 0x08 };
- static const FT_LcdFiveTapFilter light_weights =
- { 0x00, 0x55, 0x56, 0x55, 0x00 };
-
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- switch ( filter )
- {
- case FT_LCD_FILTER_NONE:
- library->lcd_filter_func = NULL;
- break;
-
- case FT_LCD_FILTER_DEFAULT:
- ft_memcpy( library->lcd_weights,
- default_weights,
- FT_LCD_FILTER_FIVE_TAPS );
- library->lcd_filter_func = ft_lcd_filter_fir;
- break;
-
- case FT_LCD_FILTER_LIGHT:
- ft_memcpy( library->lcd_weights,
- light_weights,
- FT_LCD_FILTER_FIVE_TAPS );
- library->lcd_filter_func = ft_lcd_filter_fir;
- break;
-
-#ifdef USE_LEGACY
-
- case FT_LCD_FILTER_LEGACY:
- case FT_LCD_FILTER_LEGACY1:
- library->lcd_filter_func = _ft_lcd_filter_legacy;
- break;
-
-#endif
-
- default:
- return FT_THROW( Invalid_Argument );
- }
-
- library->lcd_filter = filter;
-
- return FT_Err_Ok;
- }
-
-#else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
-
- FT_BASE( void )
- ft_lcd_filter_fir( FT_Bitmap* bitmap,
- FT_Render_Mode mode,
- FT_LcdFiveTapFilter weights )
- {
- FT_UNUSED( bitmap );
- FT_UNUSED( mode );
- FT_UNUSED( weights );
- }
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_Library_SetLcdFilterWeights( FT_Library library,
- unsigned char *weights )
- {
- FT_UNUSED( library );
- FT_UNUSED( weights );
-
- return FT_THROW( Unimplemented_Feature );
- }
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_Library_SetLcdFilter( FT_Library library,
- FT_LcdFilter filter )
- {
- FT_UNUSED( library );
- FT_UNUSED( filter );
-
- return FT_THROW( Unimplemented_Feature );
- }
-
-#endif /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
-
-
-/* END */
diff --git a/src/base/ftmac.c b/src/base/ftmac.c
deleted file mode 100644
index 4b92066da..000000000
--- a/src/base/ftmac.c
+++ /dev/null
@@ -1,1088 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmac.c */
-/* */
-/* Mac FOND support. Written by just@letterror.com. */
-/* Heavily modified by mpsuzuki, George Williams, and Sean McBride. */
-/* */
-/* This file is for Mac OS X only; see builds/mac/ftoldmac.c for */
-/* classic platforms built by MPW. */
-/* */
-/* Copyright 1996-2017 by */
-/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*
- Notes
-
- Mac suitcase files can (and often do!) contain multiple fonts. To
- support this I use the face_index argument of FT_(Open|New)_Face()
- functions, and pretend the suitcase file is a collection.
-
- Warning: fbit and NFNT bitmap resources are not supported yet. In old
- sfnt fonts, bitmap glyph data for each size is stored in each `NFNT'
- resources instead of the `bdat' table in the sfnt resource. Therefore,
- face->num_fixed_sizes is set to 0, because bitmap data in `NFNT'
- resource is unavailable at present.
-
- The Mac FOND support works roughly like this:
-
- - Check whether the offered stream points to a Mac suitcase file. This
- is done by checking the file type: it has to be 'FFIL' or 'tfil'. The
- stream that gets passed to our init_face() routine is a stdio stream,
- which isn't usable for us, since the FOND resources live in the
- resource fork. So we just grab the stream->pathname field.
-
- - Read the FOND resource into memory, then check whether there is a
- TrueType font and/or(!) a Type 1 font available.
-
- - If there is a Type 1 font available (as a separate `LWFN' file), read
- its data into memory, massage it slightly so it becomes PFB data, wrap
- it into a memory stream, load the Type 1 driver and delegate the rest
- of the work to it by calling FT_Open_Face(). (XXX TODO: after this
- has been done, the kerning data from the FOND resource should be
- appended to the face: On the Mac there are usually no AFM files
- available. However, this is tricky since we need to map Mac char
- codes to ps glyph names to glyph ID's...)
-
- - If there is a TrueType font (an `sfnt' resource), read it into memory,
- wrap it into a memory stream, load the TrueType driver and delegate
- the rest of the work to it, by calling FT_Open_Face().
-
- - Some suitcase fonts (notably Onyx) might point the `LWFN' file to
- itself, even though it doesn't contains `POST' resources. To handle
- this special case without opening the file an extra time, we just
- ignore errors from the `LWFN' and fallback to the `sfnt' if both are
- available.
- */
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_INTERNAL_STREAM_H
-#include "ftbase.h"
-
-
-#ifdef FT_MACINTOSH
-
- /* This is for Mac OS X. Without redefinition, OS_INLINE */
- /* expands to `static inline' which doesn't survive the */
- /* -ansi compilation flag of GCC. */
-#if !HAVE_ANSI_OS_INLINE
-#undef OS_INLINE
-#define OS_INLINE static __inline__
-#endif
-
- /* `configure' checks the availability of `ResourceIndex' strictly */
- /* and sets HAVE_TYPE_RESOURCE_INDEX 1 or 0 always. If it is */
- /* not set (e.g., a build without `configure'), the availability */
- /* is guessed from the SDK version. */
-#ifndef HAVE_TYPE_RESOURCE_INDEX
-#if !defined( MAC_OS_X_VERSION_10_5 ) || \
- ( MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 )
-#define HAVE_TYPE_RESOURCE_INDEX 0
-#else
-#define HAVE_TYPE_RESOURCE_INDEX 1
-#endif
-#endif /* !HAVE_TYPE_RESOURCE_INDEX */
-
-#if ( HAVE_TYPE_RESOURCE_INDEX == 0 )
- typedef short ResourceIndex;
-#endif
-
-#include <CoreServices/CoreServices.h>
-#include <ApplicationServices/ApplicationServices.h>
-#include <sys/syslimits.h> /* PATH_MAX */
-
- /* Don't want warnings about our own use of deprecated functions. */
-#define FT_DEPRECATED_ATTRIBUTE
-
-#include FT_MAC_H
-
-#ifndef kATSOptionFlagsUnRestrictedScope /* since Mac OS X 10.1 */
-#define kATSOptionFlagsUnRestrictedScope kATSOptionFlagsDefault
-#endif
-
-
- /* Set PREFER_LWFN to 1 if LWFN (Type 1) is preferred over
- TrueType in case *both* are available (this is not common,
- but it *is* possible). */
-#ifndef PREFER_LWFN
-#define PREFER_LWFN 1
-#endif
-
-
- /* This function is deprecated because FSSpec is deprecated in Mac OS X */
- FT_EXPORT_DEF( FT_Error )
- FT_GetFile_From_Mac_Name( const char* fontName,
- FSSpec* pathSpec,
- FT_Long* face_index )
- {
- FT_UNUSED( fontName );
- FT_UNUSED( pathSpec );
- FT_UNUSED( face_index );
-
- return FT_THROW( Unimplemented_Feature );
- }
-
-
- /* Private function. */
- /* The FSSpec type has been discouraged for a long time, */
- /* unfortunately an FSRef replacement API for */
- /* ATSFontGetFileSpecification() is only available in */
- /* Mac OS X 10.5 and later. */
- static OSStatus
- FT_ATSFontGetFileReference( ATSFontRef ats_font_id,
- FSRef* ats_font_ref )
- {
-#if defined( MAC_OS_X_VERSION_10_5 ) && \
- ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 )
-
- OSStatus err;
-
- err = ATSFontGetFileReference( ats_font_id, ats_font_ref );
-
- return err;
-#elif __LP64__ /* No 64bit Carbon API on legacy platforms */
- FT_UNUSED( ats_font_id );
- FT_UNUSED( ats_font_ref );
-
-
- return fnfErr;
-#else /* 32bit Carbon API on legacy platforms */
- OSStatus err;
- FSSpec spec;
-
-
- err = ATSFontGetFileSpecification( ats_font_id, &spec );
- if ( noErr == err )
- err = FSpMakeFSRef( &spec, ats_font_ref );
-
- return err;
-#endif
- }
-
-
- static FT_Error
- FT_GetFileRef_From_Mac_ATS_Name( const char* fontName,
- FSRef* ats_font_ref,
- FT_Long* face_index )
- {
- CFStringRef cf_fontName;
- ATSFontRef ats_font_id;
-
-
- *face_index = 0;
-
- cf_fontName = CFStringCreateWithCString( NULL, fontName,
- kCFStringEncodingMacRoman );
- ats_font_id = ATSFontFindFromName( cf_fontName,
- kATSOptionFlagsUnRestrictedScope );
- CFRelease( cf_fontName );
-
- if ( ats_font_id == 0 || ats_font_id == 0xFFFFFFFFUL )
- return FT_THROW( Unknown_File_Format );
-
- if ( noErr != FT_ATSFontGetFileReference( ats_font_id, ats_font_ref ) )
- return FT_THROW( Unknown_File_Format );
-
- /* face_index calculation by searching preceding fontIDs */
- /* with same FSRef */
- {
- ATSFontRef id2 = ats_font_id - 1;
- FSRef ref2;
-
-
- while ( id2 > 0 )
- {
- if ( noErr != FT_ATSFontGetFileReference( id2, &ref2 ) )
- break;
- if ( noErr != FSCompareFSRefs( ats_font_ref, &ref2 ) )
- break;
-
- id2 --;
- }
- *face_index = ats_font_id - ( id2 + 1 );
- }
-
- return FT_Err_Ok;
- }
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_GetFilePath_From_Mac_ATS_Name( const char* fontName,
- UInt8* path,
- UInt32 maxPathSize,
- FT_Long* face_index )
- {
- FSRef ref;
- FT_Error err;
-
-
- if ( !fontName || !face_index )
- return FT_THROW( Invalid_Argument);
-
- err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index );
- if ( err )
- return err;
-
- if ( noErr != FSRefMakePath( &ref, path, maxPathSize ) )
- return FT_THROW( Unknown_File_Format );
-
- return FT_Err_Ok;
- }
-
-
- /* This function is deprecated because FSSpec is deprecated in Mac OS X */
- FT_EXPORT_DEF( FT_Error )
- FT_GetFile_From_Mac_ATS_Name( const char* fontName,
- FSSpec* pathSpec,
- FT_Long* face_index )
- {
-#if ( __LP64__ ) || ( defined( MAC_OS_X_VERSION_10_5 ) && \
- ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 ) )
- FT_UNUSED( fontName );
- FT_UNUSED( pathSpec );
- FT_UNUSED( face_index );
-
- return FT_THROW( Unimplemented_Feature );
-#else
- FSRef ref;
- FT_Error err;
-
-
- if ( !fontName || !face_index )
- return FT_THROW( Invalid_Argument );
-
- err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index );
- if ( err )
- return err;
-
- if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone, NULL, NULL,
- pathSpec, NULL ) )
- return FT_THROW( Unknown_File_Format );
-
- return FT_Err_Ok;
-#endif
- }
-
-
- static OSErr
- FT_FSPathMakeRes( const UInt8* pathname,
- ResFileRefNum* res )
- {
- OSErr err;
- FSRef ref;
-
-
- if ( noErr != FSPathMakeRef( pathname, &ref, FALSE ) )
- return FT_THROW( Cannot_Open_Resource );
-
- /* at present, no support for dfont format */
- err = FSOpenResourceFile( &ref, 0, NULL, fsRdPerm, res );
- if ( noErr == err )
- return err;
-
- /* fallback to original resource-fork font */
- *res = FSOpenResFile( &ref, fsRdPerm );
- err = ResError();
-
- return err;
- }
-
-
- /* Return the file type for given pathname */
- static OSType
- get_file_type_from_path( const UInt8* pathname )
- {
- FSRef ref;
- FSCatalogInfo info;
-
-
- if ( noErr != FSPathMakeRef( pathname, &ref, FALSE ) )
- return ( OSType ) 0;
-
- if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoFinderInfo, &info,
- NULL, NULL, NULL ) )
- return ( OSType ) 0;
-
- return ((FInfo *)(info.finderInfo))->fdType;
- }
-
-
- /* Given a PostScript font name, create the Macintosh LWFN file name. */
- static void
- create_lwfn_name( char* ps_name,
- Str255 lwfn_file_name )
- {
- int max = 5, count = 0;
- FT_Byte* p = lwfn_file_name;
- FT_Byte* q = (FT_Byte*)ps_name;
-
-
- lwfn_file_name[0] = 0;
-
- while ( *q )
- {
- if ( ft_isupper( *q ) )
- {
- if ( count )
- max = 3;
- count = 0;
- }
- if ( count < max && ( ft_isalnum( *q ) || *q == '_' ) )
- {
- *++p = *q;
- lwfn_file_name[0]++;
- count++;
- }
- q++;
- }
- }
-
-
- static short
- count_faces_sfnt( char* fond_data )
- {
- /* The count is 1 greater than the value in the FOND. */
- /* Isn't that cute? :-) */
-
- return EndianS16_BtoN( *( (short*)( fond_data +
- sizeof ( FamRec ) ) ) ) + 1;
- }
-
-
- static short
- count_faces_scalable( char* fond_data )
- {
- AsscEntry* assoc;
- short i, face, face_all;
-
-
- face_all = EndianS16_BtoN( *( (short *)( fond_data +
- sizeof ( FamRec ) ) ) ) + 1;
- assoc = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 );
- face = 0;
-
- for ( i = 0; i < face_all; i++ )
- {
- if ( 0 == EndianS16_BtoN( assoc[i].fontSize ) )
- face++;
- }
- return face;
- }
-
-
- /* Look inside the FOND data, answer whether there should be an SFNT
- resource, and answer the name of a possible LWFN Type 1 file.
-
- Thanks to Paul Miller (paulm@profoundeffects.com) for the fix
- to load a face OTHER than the first one in the FOND!
- */
-
-
- static void
- parse_fond( char* fond_data,
- short* have_sfnt,
- ResID* sfnt_id,
- Str255 lwfn_file_name,
- short face_index )
- {
- AsscEntry* assoc;
- AsscEntry* base_assoc;
- FamRec* fond;
-
-
- *sfnt_id = 0;
- *have_sfnt = 0;
- lwfn_file_name[0] = 0;
-
- fond = (FamRec*)fond_data;
- assoc = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 );
- base_assoc = assoc;
-
- /* the maximum faces in a FOND is 48, size of StyleTable.indexes[] */
- if ( 47 < face_index )
- return;
-
- /* Let's do a little range checking before we get too excited here */
- if ( face_index < count_faces_sfnt( fond_data ) )
- {
- assoc += face_index; /* add on the face_index! */
-
- /* if the face at this index is not scalable,
- fall back to the first one (old behavior) */
- if ( EndianS16_BtoN( assoc->fontSize ) == 0 )
- {
- *have_sfnt = 1;
- *sfnt_id = EndianS16_BtoN( assoc->fontID );
- }
- else if ( base_assoc->fontSize == 0 )
- {
- *have_sfnt = 1;
- *sfnt_id = EndianS16_BtoN( base_assoc->fontID );
- }
- }
-
- if ( EndianS32_BtoN( fond->ffStylOff ) )
- {
- unsigned char* p = (unsigned char*)fond_data;
- StyleTable* style;
- unsigned short string_count;
- char ps_name[256];
- unsigned char* names[64];
- int i;
-
-
- p += EndianS32_BtoN( fond->ffStylOff );
- style = (StyleTable*)p;
- p += sizeof ( StyleTable );
- string_count = EndianS16_BtoN( *(short*)(p) );
- string_count = FT_MIN( 64, string_count );
- p += sizeof ( short );
-
- for ( i = 0; i < string_count; i++ )
- {
- names[i] = p;
- p += names[i][0];
- p++;
- }
-
- {
- size_t ps_name_len = (size_t)names[0][0];
-
-
- if ( ps_name_len != 0 )
- {
- ft_memcpy(ps_name, names[0] + 1, ps_name_len);
- ps_name[ps_name_len] = 0;
- }
- if ( style->indexes[face_index] > 1 &&
- style->indexes[face_index] <= string_count )
- {
- unsigned char* suffixes = names[style->indexes[face_index] - 1];
-
-
- for ( i = 1; i <= suffixes[0]; i++ )
- {
- unsigned char* s;
- size_t j = suffixes[i] - 1;
-
-
- if ( j < string_count && ( s = names[j] ) != NULL )
- {
- size_t s_len = (size_t)s[0];
-
-
- if ( s_len != 0 && ps_name_len + s_len < sizeof ( ps_name ) )
- {
- ft_memcpy( ps_name + ps_name_len, s + 1, s_len );
- ps_name_len += s_len;
- ps_name[ps_name_len] = 0;
- }
- }
- }
- }
- }
-
- create_lwfn_name( ps_name, lwfn_file_name );
- }
- }
-
-
- static FT_Error
- lookup_lwfn_by_fond( const UInt8* path_fond,
- ConstStr255Param base_lwfn,
- UInt8* path_lwfn,
- size_t path_size )
- {
- FSRef ref, par_ref;
- size_t dirname_len;
-
-
- /* Pathname for FSRef can be in various formats: HFS, HFS+, and POSIX. */
- /* We should not extract parent directory by string manipulation. */
-
- if ( noErr != FSPathMakeRef( path_fond, &ref, FALSE ) )
- return FT_THROW( Invalid_Argument );
-
- if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone,
- NULL, NULL, NULL, &par_ref ) )
- return FT_THROW( Invalid_Argument );
-
- if ( noErr != FSRefMakePath( &par_ref, path_lwfn, path_size ) )
- return FT_THROW( Invalid_Argument );
-
- if ( ft_strlen( (char *)path_lwfn ) + 1 + base_lwfn[0] > path_size )
- return FT_THROW( Invalid_Argument );
-
- /* now we have absolute dirname in path_lwfn */
- ft_strcat( (char *)path_lwfn, "/" );
- dirname_len = ft_strlen( (char *)path_lwfn );
- ft_strcat( (char *)path_lwfn, (char *)base_lwfn + 1 );
- path_lwfn[dirname_len + base_lwfn[0]] = '\0';
-
- if ( noErr != FSPathMakeRef( path_lwfn, &ref, FALSE ) )
- return FT_THROW( Cannot_Open_Resource );
-
- if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone,
- NULL, NULL, NULL, NULL ) )
- return FT_THROW( Cannot_Open_Resource );
-
- return FT_Err_Ok;
- }
-
-
- static short
- count_faces( Handle fond,
- const UInt8* pathname )
- {
- ResID sfnt_id;
- short have_sfnt, have_lwfn;
- Str255 lwfn_file_name;
- UInt8 buff[PATH_MAX];
- FT_Error err;
- short num_faces;
-
-
- have_sfnt = have_lwfn = 0;
-
- parse_fond( *fond, &have_sfnt, &sfnt_id, lwfn_file_name, 0 );
-
- if ( lwfn_file_name[0] )
- {
- err = lookup_lwfn_by_fond( pathname, lwfn_file_name,
- buff, sizeof ( buff ) );
- if ( !err )
- have_lwfn = 1;
- }
-
- if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) )
- num_faces = 1;
- else
- num_faces = count_faces_scalable( *fond );
-
- return num_faces;
- }
-
-
- /* Read Type 1 data from the POST resources inside the LWFN file,
- return a PFB buffer. This is somewhat convoluted because the FT2
- PFB parser wants the ASCII header as one chunk, and the LWFN
- chunks are often not organized that way, so we glue chunks
- of the same type together. */
- static FT_Error
- read_lwfn( FT_Memory memory,
- ResFileRefNum res,
- FT_Byte** pfb_data,
- FT_ULong* size )
- {
- FT_Error error = FT_Err_Ok;
- ResID res_id;
- unsigned char *buffer, *p, *size_p = NULL;
- FT_ULong total_size = 0;
- FT_ULong old_total_size = 0;
- FT_ULong post_size, pfb_chunk_size;
- Handle post_data;
- char code, last_code;
-
-
- UseResFile( res );
-
- /* First pass: load all POST resources, and determine the size of */
- /* the output buffer. */
- res_id = 501;
- last_code = -1;
-
- for (;;)
- {
- post_data = Get1Resource( TTAG_POST, res_id++ );
- if ( !post_data )
- break; /* we are done */
-
- code = (*post_data)[0];
-
- if ( code != last_code )
- {
- if ( code == 5 )
- total_size += 2; /* just the end code */
- else
- total_size += 6; /* code + 4 bytes chunk length */
- }
-
- total_size += (FT_ULong)GetHandleSize( post_data ) - 2;
- last_code = code;
-
- /* detect resource fork overflow */
- if ( FT_MAC_RFORK_MAX_LEN < total_size )
- {
- error = FT_THROW( Array_Too_Large );
- goto Error;
- }
-
- old_total_size = total_size;
- }
-
- if ( FT_ALLOC( buffer, (FT_Long)total_size ) )
- goto Error;
-
- /* Second pass: append all POST data to the buffer, add PFB fields. */
- /* Glue all consecutive chunks of the same type together. */
- p = buffer;
- res_id = 501;
- last_code = -1;
- pfb_chunk_size = 0;
-
- for (;;)
- {
- post_data = Get1Resource( TTAG_POST, res_id++ );
- if ( !post_data )
- break; /* we are done */
-
- post_size = (FT_ULong)GetHandleSize( post_data ) - 2;
- code = (*post_data)[0];
-
- if ( code != last_code )
- {
- if ( last_code != -1 )
- {
- /* we are done adding a chunk, fill in the size field */
- if ( size_p )
- {
- *size_p++ = (FT_Byte)( pfb_chunk_size & 0xFF );
- *size_p++ = (FT_Byte)( ( pfb_chunk_size >> 8 ) & 0xFF );
- *size_p++ = (FT_Byte)( ( pfb_chunk_size >> 16 ) & 0xFF );
- *size_p++ = (FT_Byte)( ( pfb_chunk_size >> 24 ) & 0xFF );
- }
- pfb_chunk_size = 0;
- }
-
- *p++ = 0x80;
- if ( code == 5 )
- *p++ = 0x03; /* the end */
- else if ( code == 2 )
- *p++ = 0x02; /* binary segment */
- else
- *p++ = 0x01; /* ASCII segment */
-
- if ( code != 5 )
- {
- size_p = p; /* save for later */
- p += 4; /* make space for size field */
- }
- }
-
- ft_memcpy( p, *post_data + 2, post_size );
- pfb_chunk_size += post_size;
- p += post_size;
- last_code = code;
- }
-
- *pfb_data = buffer;
- *size = total_size;
-
- Error:
- CloseResFile( res );
- return error;
- }
-
-
- /* Create a new FT_Face from a file path to an LWFN file. */
- static FT_Error
- FT_New_Face_From_LWFN( FT_Library library,
- const UInt8* pathname,
- FT_Long face_index,
- FT_Face* aface )
- {
- FT_Byte* pfb_data;
- FT_ULong pfb_size;
- FT_Error error;
- ResFileRefNum res;
-
-
- if ( noErr != FT_FSPathMakeRes( pathname, &res ) )
- return FT_THROW( Cannot_Open_Resource );
-
- pfb_data = NULL;
- pfb_size = 0;
- error = read_lwfn( library->memory, res, &pfb_data, &pfb_size );
- CloseResFile( res ); /* PFB is already loaded, useless anymore */
- if ( error )
- return error;
-
- return open_face_from_buffer( library,
- pfb_data,
- pfb_size,
- face_index,
- "type1",
- aface );
- }
-
-
- /* Create a new FT_Face from an SFNT resource, specified by res ID. */
- static FT_Error
- FT_New_Face_From_SFNT( FT_Library library,
- ResID sfnt_id,
- FT_Long face_index,
- FT_Face* aface )
- {
- Handle sfnt = NULL;
- FT_Byte* sfnt_data;
- size_t sfnt_size;
- FT_Error error = FT_Err_Ok;
- FT_Memory memory = library->memory;
- int is_cff, is_sfnt_ps;
-
-
- sfnt = GetResource( TTAG_sfnt, sfnt_id );
- if ( !sfnt )
- return FT_THROW( Invalid_Handle );
-
- sfnt_size = (FT_ULong)GetHandleSize( sfnt );
-
- /* detect resource fork overflow */
- if ( FT_MAC_RFORK_MAX_LEN < sfnt_size )
- return FT_THROW( Array_Too_Large );
-
- if ( FT_ALLOC( sfnt_data, (FT_Long)sfnt_size ) )
- {
- ReleaseResource( sfnt );
- return error;
- }
-
- ft_memcpy( sfnt_data, *sfnt, sfnt_size );
- ReleaseResource( sfnt );
-
- is_cff = sfnt_size > 4 && !ft_memcmp( sfnt_data, "OTTO", 4 );
- is_sfnt_ps = sfnt_size > 4 && !ft_memcmp( sfnt_data, "typ1", 4 );
-
- if ( is_sfnt_ps )
- {
- FT_Stream stream;
-
-
- if ( FT_NEW( stream ) )
- goto Try_OpenType;
-
- FT_Stream_OpenMemory( stream, sfnt_data, sfnt_size );
- if ( !open_face_PS_from_sfnt_stream( library,
- stream,
- face_index,
- 0, NULL,
- aface ) )
- {
- FT_Stream_Close( stream );
- FT_FREE( stream );
- FT_FREE( sfnt_data );
- goto Exit;
- }
-
- FT_FREE( stream );
- }
- Try_OpenType:
- error = open_face_from_buffer( library,
- sfnt_data,
- sfnt_size,
- face_index,
- is_cff ? "cff" : "truetype",
- aface );
- Exit:
- return error;
- }
-
-
- /* Create a new FT_Face from a file path to a suitcase file. */
- static FT_Error
- FT_New_Face_From_Suitcase( FT_Library library,
- const UInt8* pathname,
- FT_Long face_index,
- FT_Face* aface )
- {
- FT_Error error = FT_ERR( Cannot_Open_Resource );
- ResFileRefNum res_ref;
- ResourceIndex res_index;
- Handle fond;
- short num_faces_in_res;
-
-
- if ( noErr != FT_FSPathMakeRes( pathname, &res_ref ) )
- return FT_THROW( Cannot_Open_Resource );
-
- UseResFile( res_ref );
- if ( ResError() )
- return FT_THROW( Cannot_Open_Resource );
-
- num_faces_in_res = 0;
- for ( res_index = 1; ; res_index++ )
- {
- short num_faces_in_fond;
-
-
- fond = Get1IndResource( TTAG_FOND, res_index );
- if ( ResError() )
- break;
-
- num_faces_in_fond = count_faces( fond, pathname );
- num_faces_in_res += num_faces_in_fond;
-
- if ( 0 <= face_index && face_index < num_faces_in_fond && error )
- error = FT_New_Face_From_FOND( library, fond, face_index, aface );
-
- face_index -= num_faces_in_fond;
- }
-
- CloseResFile( res_ref );
- if ( !error && aface && *aface )
- (*aface)->num_faces = num_faces_in_res;
- return error;
- }
-
-
- /* documentation is in ftmac.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_New_Face_From_FOND( FT_Library library,
- Handle fond,
- FT_Long face_index,
- FT_Face* aface )
- {
- short have_sfnt, have_lwfn = 0;
- ResID sfnt_id, fond_id;
- OSType fond_type;
- Str255 fond_name;
- Str255 lwfn_file_name;
- UInt8 path_lwfn[PATH_MAX];
- OSErr err;
- FT_Error error = FT_Err_Ok;
-
-
- /* check of `library' and `aface' delayed to `FT_New_Face_From_XXX' */
-
- GetResInfo( fond, &fond_id, &fond_type, fond_name );
- if ( ResError() != noErr || fond_type != TTAG_FOND )
- return FT_THROW( Invalid_File_Format );
-
- parse_fond( *fond, &have_sfnt, &sfnt_id, lwfn_file_name, face_index );
-
- if ( lwfn_file_name[0] )
- {
- ResFileRefNum res;
-
-
- res = HomeResFile( fond );
- if ( noErr != ResError() )
- goto found_no_lwfn_file;
-
- {
- UInt8 path_fond[PATH_MAX];
- FSRef ref;
-
-
- err = FSGetForkCBInfo( res, kFSInvalidVolumeRefNum,
- NULL, NULL, NULL, &ref, NULL );
- if ( noErr != err )
- goto found_no_lwfn_file;
-
- err = FSRefMakePath( &ref, path_fond, sizeof ( path_fond ) );
- if ( noErr != err )
- goto found_no_lwfn_file;
-
- error = lookup_lwfn_by_fond( path_fond, lwfn_file_name,
- path_lwfn, sizeof ( path_lwfn ) );
- if ( !error )
- have_lwfn = 1;
- }
- }
-
- if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) )
- error = FT_New_Face_From_LWFN( library,
- path_lwfn,
- face_index,
- aface );
- else
- error = FT_THROW( Unknown_File_Format );
-
- found_no_lwfn_file:
- if ( have_sfnt && error )
- error = FT_New_Face_From_SFNT( library,
- sfnt_id,
- face_index,
- aface );
-
- return error;
- }
-
-
- /* Common function to load a new FT_Face from a resource file. */
- static FT_Error
- FT_New_Face_From_Resource( FT_Library library,
- const UInt8* pathname,
- FT_Long face_index,
- FT_Face* aface )
- {
- OSType file_type;
- FT_Error error;
-
-
- /* LWFN is a (very) specific file format, check for it explicitly */
- file_type = get_file_type_from_path( pathname );
- if ( file_type == TTAG_LWFN )
- return FT_New_Face_From_LWFN( library, pathname, face_index, aface );
-
- /* Otherwise the file type doesn't matter (there are more than */
- /* `FFIL' and `tfil'). Just try opening it as a font suitcase; */
- /* if it works, fine. */
-
- error = FT_New_Face_From_Suitcase( library, pathname, face_index, aface );
- if ( error )
- {
- /* let it fall through to normal loader (.ttf, .otf, etc.); */
- /* we signal this by returning no error and no FT_Face */
- *aface = NULL;
- }
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Face */
- /* */
- /* <Description> */
- /* This is the Mac-specific implementation of FT_New_Face. In */
- /* addition to the standard FT_New_Face() functionality, it also */
- /* accepts pathnames to Mac suitcase files. For further */
- /* documentation see the original FT_New_Face() in freetype.h. */
- /* */
- FT_EXPORT_DEF( FT_Error )
- FT_New_Face( FT_Library library,
- const char* pathname,
- FT_Long face_index,
- FT_Face* aface )
- {
- FT_Open_Args args;
- FT_Error error;
-
-
- /* test for valid `library' and `aface' delayed to FT_Open_Face() */
- if ( !pathname )
- return FT_THROW( Invalid_Argument );
-
- *aface = NULL;
-
- /* try resourcefork based font: LWFN, FFIL */
- error = FT_New_Face_From_Resource( library, (UInt8 *)pathname,
- face_index, aface );
- if ( error || *aface )
- return error;
-
- /* let it fall through to normal loader (.ttf, .otf, etc.) */
- args.flags = FT_OPEN_PATHNAME;
- args.pathname = (char*)pathname;
-
- return FT_Open_Face( library, &args, face_index, aface );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Face_From_FSRef */
- /* */
- /* <Description> */
- /* FT_New_Face_From_FSRef is identical to FT_New_Face except it */
- /* accepts an FSRef instead of a path. */
- /* */
- /* This function is deprecated because Carbon data types (FSRef) */
- /* are not cross-platform, and thus not suitable for the freetype API. */
- FT_EXPORT_DEF( FT_Error )
- FT_New_Face_From_FSRef( FT_Library library,
- const FSRef* ref,
- FT_Long face_index,
- FT_Face* aface )
- {
- FT_Error error;
- FT_Open_Args args;
-
- OSErr err;
- UInt8 pathname[PATH_MAX];
-
-
- /* check of `library' and `aface' delayed to */
- /* `FT_New_Face_From_Resource' */
-
- if ( !ref )
- return FT_THROW( Invalid_Argument );
-
- err = FSRefMakePath( ref, pathname, sizeof ( pathname ) );
- if ( err )
- error = FT_THROW( Cannot_Open_Resource );
-
- error = FT_New_Face_From_Resource( library, pathname, face_index, aface );
- if ( error || *aface )
- return error;
-
- /* fallback to datafork font */
- args.flags = FT_OPEN_PATHNAME;
- args.pathname = (char*)pathname;
- return FT_Open_Face( library, &args, face_index, aface );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_New_Face_From_FSSpec */
- /* */
- /* <Description> */
- /* FT_New_Face_From_FSSpec is identical to FT_New_Face except it */
- /* accepts an FSSpec instead of a path. */
- /* */
- /* This function is deprecated because FSSpec is deprecated in Mac OS X */
- FT_EXPORT_DEF( FT_Error )
- FT_New_Face_From_FSSpec( FT_Library library,
- const FSSpec* spec,
- FT_Long face_index,
- FT_Face* aface )
- {
-#if ( __LP64__ ) || ( defined( MAC_OS_X_VERSION_10_5 ) && \
- ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 ) )
- FT_UNUSED( library );
- FT_UNUSED( spec );
- FT_UNUSED( face_index );
- FT_UNUSED( aface );
-
- return FT_THROW( Unimplemented_Feature );
-#else
- FSRef ref;
-
-
- /* check of `library' and `aface' delayed to `FT_New_Face_From_FSRef' */
-
- if ( !spec || FSpMakeFSRef( spec, &ref ) != noErr )
- return FT_THROW( Invalid_Argument );
- else
- return FT_New_Face_From_FSRef( library, &ref, face_index, aface );
-#endif
- }
-
-#else /* !FT_MACINTOSH */
-
- /* ANSI C doesn't like empty source files */
- typedef int _ft_mac_dummy;
-
-#endif /* !FT_MACINTOSH */
-
-
-/* END */
diff --git a/src/base/ftmm.c b/src/base/ftmm.c
deleted file mode 100644
index 2cb56a39b..000000000
--- a/src/base/ftmm.c
+++ /dev/null
@@ -1,405 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmm.c */
-/* */
-/* Multiple Master font support (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-
-#include FT_MULTIPLE_MASTERS_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_METRICS_VARIATIONS_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_mm
-
-
- static FT_Error
- ft_face_get_mm_service( FT_Face face,
- FT_Service_MultiMasters *aservice )
- {
- FT_Error error;
-
-
- *aservice = NULL;
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- error = FT_ERR( Invalid_Argument );
-
- if ( FT_HAS_MULTIPLE_MASTERS( face ) )
- {
- FT_FACE_LOOKUP_SERVICE( face,
- *aservice,
- MULTI_MASTERS );
-
- if ( *aservice )
- error = FT_Err_Ok;
- }
-
- return error;
- }
-
-
- static FT_Error
- ft_face_get_mvar_service( FT_Face face,
- FT_Service_MetricsVariations *aservice )
- {
- FT_Error error;
-
-
- *aservice = NULL;
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- error = FT_ERR( Invalid_Argument );
-
- if ( FT_HAS_MULTIPLE_MASTERS( face ) )
- {
- FT_FACE_LOOKUP_SERVICE( face,
- *aservice,
- METRICS_VARIATIONS );
-
- if ( *aservice )
- error = FT_Err_Ok;
- }
-
- return error;
- }
-
-
- /* documentation is in ftmm.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_Multi_Master( FT_Face face,
- FT_Multi_Master *amaster )
- {
- FT_Error error;
- FT_Service_MultiMasters service;
-
-
- /* check of `face' delayed to `ft_face_get_mm_service' */
-
- if ( !amaster )
- return FT_THROW( Invalid_Argument );
-
- error = ft_face_get_mm_service( face, &service );
- if ( !error )
- {
- error = FT_ERR( Invalid_Argument );
- if ( service->get_mm )
- error = service->get_mm( face, amaster );
- }
-
- return error;
- }
-
-
- /* documentation is in ftmm.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_MM_Var( FT_Face face,
- FT_MM_Var* *amaster )
- {
- FT_Error error;
- FT_Service_MultiMasters service;
-
-
- /* check of `face' delayed to `ft_face_get_mm_service' */
-
- if ( !amaster )
- return FT_THROW( Invalid_Argument );
-
- error = ft_face_get_mm_service( face, &service );
- if ( !error )
- {
- error = FT_ERR( Invalid_Argument );
- if ( service->get_mm_var )
- error = service->get_mm_var( face, amaster );
- }
-
- return error;
- }
-
-
- /* documentation is in ftmm.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Set_MM_Design_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Long* coords )
- {
- FT_Error error;
- FT_Service_MultiMasters service;
-
-
- /* check of `face' delayed to `ft_face_get_mm_service' */
-
- if ( !coords )
- return FT_THROW( Invalid_Argument );
-
- error = ft_face_get_mm_service( face, &service );
- if ( !error )
- {
- error = FT_ERR( Invalid_Argument );
- if ( service->set_mm_design )
- error = service->set_mm_design( face, num_coords, coords );
- }
-
- /* enforce recomputation of auto-hinting data */
- if ( !error && face->autohint.finalizer )
- {
- face->autohint.finalizer( face->autohint.data );
- face->autohint.data = NULL;
- }
-
- return error;
- }
-
-
- /* documentation is in ftmm.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Set_Var_Design_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- FT_Error error;
- FT_Service_MultiMasters service_mm = NULL;
- FT_Service_MetricsVariations service_mvar = NULL;
-
-
- /* check of `face' delayed to `ft_face_get_mm_service' */
-
- if ( !coords )
- return FT_THROW( Invalid_Argument );
-
- error = ft_face_get_mm_service( face, &service_mm );
- if ( !error )
- {
- error = FT_ERR( Invalid_Argument );
- if ( service_mm->set_var_design )
- error = service_mm->set_var_design( face, num_coords, coords );
- }
-
- if ( !error )
- {
- (void)ft_face_get_mvar_service( face, &service_mvar );
-
- if ( service_mvar && service_mvar->metrics_adjust )
- service_mvar->metrics_adjust( face );
- }
-
- /* enforce recomputation of auto-hinting data */
- if ( !error && face->autohint.finalizer )
- {
- face->autohint.finalizer( face->autohint.data );
- face->autohint.data = NULL;
- }
-
- return error;
- }
-
-
- /* documentation is in ftmm.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_Var_Design_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- FT_Error error;
- FT_Service_MultiMasters service;
-
-
- /* check of `face' delayed to `ft_face_get_mm_service' */
-
- if ( !coords )
- return FT_THROW( Invalid_Argument );
-
- error = ft_face_get_mm_service( face, &service );
- if ( !error )
- {
- error = FT_ERR( Invalid_Argument );
- if ( service->get_var_design )
- error = service->get_var_design( face, num_coords, coords );
- }
-
- return error;
- }
-
-
- /* documentation is in ftmm.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Set_MM_Blend_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- FT_Error error;
- FT_Service_MultiMasters service_mm = NULL;
- FT_Service_MetricsVariations service_mvar = NULL;
-
-
- /* check of `face' delayed to `ft_face_get_mm_service' */
-
- if ( !coords )
- return FT_THROW( Invalid_Argument );
-
- error = ft_face_get_mm_service( face, &service_mm );
- if ( !error )
- {
- error = FT_ERR( Invalid_Argument );
- if ( service_mm->set_mm_blend )
- error = service_mm->set_mm_blend( face, num_coords, coords );
- }
-
- if ( !error )
- {
- (void)ft_face_get_mvar_service( face, &service_mvar );
-
- if ( service_mvar && service_mvar->metrics_adjust )
- service_mvar->metrics_adjust( face );
- }
-
- /* enforce recomputation of auto-hinting data */
- if ( !error && face->autohint.finalizer )
- {
- face->autohint.finalizer( face->autohint.data );
- face->autohint.data = NULL;
- }
-
- return error;
- }
-
-
- /* documentation is in ftmm.h */
-
- /* This is exactly the same as the previous function. It exists for */
- /* orthogonality. */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Set_Var_Blend_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- FT_Error error;
- FT_Service_MultiMasters service_mm = NULL;
- FT_Service_MetricsVariations service_mvar = NULL;
-
-
- /* check of `face' delayed to `ft_face_get_mm_service' */
-
- if ( !coords )
- return FT_THROW( Invalid_Argument );
-
- error = ft_face_get_mm_service( face, &service_mm );
- if ( !error )
- {
- error = FT_ERR( Invalid_Argument );
- if ( service_mm->set_mm_blend )
- error = service_mm->set_mm_blend( face, num_coords, coords );
- }
-
- if ( !error )
- {
- (void)ft_face_get_mvar_service( face, &service_mvar );
-
- if ( service_mvar && service_mvar->metrics_adjust )
- service_mvar->metrics_adjust( face );
- }
-
- /* enforce recomputation of auto-hinting data */
- if ( !error && face->autohint.finalizer )
- {
- face->autohint.finalizer( face->autohint.data );
- face->autohint.data = NULL;
- }
-
- return error;
- }
-
-
- /* documentation is in ftmm.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_MM_Blend_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- FT_Error error;
- FT_Service_MultiMasters service;
-
-
- /* check of `face' delayed to `ft_face_get_mm_service' */
-
- if ( !coords )
- return FT_THROW( Invalid_Argument );
-
- error = ft_face_get_mm_service( face, &service );
- if ( !error )
- {
- error = FT_ERR( Invalid_Argument );
- if ( service->get_mm_blend )
- error = service->get_mm_blend( face, num_coords, coords );
- }
-
- return error;
- }
-
-
- /* documentation is in ftmm.h */
-
- /* This is exactly the same as the previous function. It exists for */
- /* orthogonality. */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_Var_Blend_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- FT_Error error;
- FT_Service_MultiMasters service;
-
-
- /* check of `face' delayed to `ft_face_get_mm_service' */
-
- if ( !coords )
- return FT_THROW( Invalid_Argument );
-
- error = ft_face_get_mm_service( face, &service );
- if ( !error )
- {
- error = FT_ERR( Invalid_Argument );
- if ( service->get_mm_blend )
- error = service->get_mm_blend( face, num_coords, coords );
- }
-
- return error;
- }
-
-
-/* END */
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
deleted file mode 100644
index e190de3a3..000000000
--- a/src/base/ftobjs.c
+++ /dev/null
@@ -1,5223 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftobjs.c */
-/* */
-/* The FreeType private base classes (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_LIST_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_VALIDATE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_RFORK_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H /* for SFNT_Load_Table_Func */
-#include FT_TRUETYPE_TABLES_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_TRUETYPE_IDS_H
-
-#include FT_SERVICE_PROPERTIES_H
-#include FT_SERVICE_SFNT_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_GLYPH_DICT_H
-#include FT_SERVICE_TT_CMAP_H
-#include FT_SERVICE_KERNING_H
-#include FT_SERVICE_TRUETYPE_ENGINE_H
-
-#include FT_AUTOHINTER_H
-#include FT_CFF_DRIVER_H
-
-#ifdef FT_CONFIG_OPTION_MAC_FONTS
-#include "ftbase.h"
-#endif
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
-#include FT_BITMAP_H
-
-#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */
- /* We disable the warning `conversion from XXX to YYY, */
- /* possible loss of data' in order to compile cleanly with */
- /* the maximum level of warnings: `md5.c' is non-FreeType */
- /* code, and it gets used during development builds only. */
-#pragma warning( push )
-#pragma warning( disable : 4244 )
-#endif /* _MSC_VER */
-
- /* It's easiest to include `md5.c' directly. However, since OpenSSL */
- /* also provides the same functions, there might be conflicts if */
- /* both FreeType and OpenSSL are built as static libraries. For */
- /* this reason, we put the MD5 stuff into the `FT_' namespace. */
-#define MD5_u32plus FT_MD5_u32plus
-#define MD5_CTX FT_MD5_CTX
-#define MD5_Init FT_MD5_Init
-#define MD5_Update FT_MD5_Update
-#define MD5_Final FT_MD5_Final
-
-#undef HAVE_OPENSSL
-
-#include "md5.c"
-
-#if defined( _MSC_VER )
-#pragma warning( pop )
-#endif
-
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
-
-#define GRID_FIT_METRICS
-
-
- /* forward declaration */
- static FT_Error
- ft_open_face_internal( FT_Library library,
- const FT_Open_Args* args,
- FT_Long face_index,
- FT_Face *aface,
- FT_Bool test_mac_fonts );
-
-
- FT_BASE_DEF( FT_Pointer )
- ft_service_list_lookup( FT_ServiceDesc service_descriptors,
- const char* service_id )
- {
- FT_Pointer result = NULL;
- FT_ServiceDesc desc = service_descriptors;
-
-
- if ( desc && service_id )
- {
- for ( ; desc->serv_id != NULL; desc++ )
- {
- if ( ft_strcmp( desc->serv_id, service_id ) == 0 )
- {
- result = (FT_Pointer)desc->serv_data;
- break;
- }
- }
- }
-
- return result;
- }
-
-
- FT_BASE_DEF( void )
- ft_validator_init( FT_Validator valid,
- const FT_Byte* base,
- const FT_Byte* limit,
- FT_ValidationLevel level )
- {
- valid->base = base;
- valid->limit = limit;
- valid->level = level;
- valid->error = FT_Err_Ok;
- }
-
-
- FT_BASE_DEF( FT_Int )
- ft_validator_run( FT_Validator valid )
- {
- /* This function doesn't work! None should call it. */
- FT_UNUSED( valid );
-
- return -1;
- }
-
-
- FT_BASE_DEF( void )
- ft_validator_error( FT_Validator valid,
- FT_Error error )
- {
- /* since the cast below also disables the compiler's */
- /* type check, we introduce a dummy variable, which */
- /* will be optimized away */
- volatile ft_jmp_buf* jump_buffer = &valid->jump_buffer;
-
-
- valid->error = error;
-
- /* throw away volatileness; use `jump_buffer' or the */
- /* compiler may warn about an unused local variable */
- ft_longjmp( *(ft_jmp_buf*) jump_buffer, 1 );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** S T R E A M ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* create a new input stream from an FT_Open_Args structure */
- /* */
- FT_BASE_DEF( FT_Error )
- FT_Stream_New( FT_Library library,
- const FT_Open_Args* args,
- FT_Stream *astream )
- {
- FT_Error error;
- FT_Memory memory;
- FT_Stream stream = NULL;
-
-
- *astream = NULL;
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- if ( !args )
- return FT_THROW( Invalid_Argument );
-
- memory = library->memory;
-
- if ( FT_NEW( stream ) )
- goto Exit;
-
- stream->memory = memory;
-
- if ( args->flags & FT_OPEN_MEMORY )
- {
- /* create a memory-based stream */
- FT_Stream_OpenMemory( stream,
- (const FT_Byte*)args->memory_base,
- (FT_ULong)args->memory_size );
- }
-
-#ifndef FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT
-
- else if ( args->flags & FT_OPEN_PATHNAME )
- {
- /* create a normal system stream */
- error = FT_Stream_Open( stream, args->pathname );
- stream->pathname.pointer = args->pathname;
- }
- else if ( ( args->flags & FT_OPEN_STREAM ) && args->stream )
- {
- /* use an existing, user-provided stream */
-
- /* in this case, we do not need to allocate a new stream object */
- /* since the caller is responsible for closing it himself */
- FT_FREE( stream );
- stream = args->stream;
- }
-
-#endif
-
- else
- error = FT_THROW( Invalid_Argument );
-
- if ( error )
- FT_FREE( stream );
- else
- stream->memory = memory; /* just to be certain */
-
- *astream = stream;
-
- Exit:
- return error;
- }
-
-
- FT_BASE_DEF( void )
- FT_Stream_Free( FT_Stream stream,
- FT_Int external )
- {
- if ( stream )
- {
- FT_Memory memory = stream->memory;
-
-
- FT_Stream_Close( stream );
-
- if ( !external )
- FT_FREE( stream );
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_objs
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** FACE, SIZE & GLYPH SLOT OBJECTS ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- static FT_Error
- ft_glyphslot_init( FT_GlyphSlot slot )
- {
- FT_Driver driver = slot->face->driver;
- FT_Driver_Class clazz = driver->clazz;
- FT_Memory memory = driver->root.memory;
- FT_Error error = FT_Err_Ok;
- FT_Slot_Internal internal = NULL;
-
-
- slot->library = driver->root.library;
-
- if ( FT_NEW( internal ) )
- goto Exit;
-
- slot->internal = internal;
-
- if ( FT_DRIVER_USES_OUTLINES( driver ) )
- error = FT_GlyphLoader_New( memory, &internal->loader );
-
- if ( !error && clazz->init_slot )
- error = clazz->init_slot( slot );
-
- Exit:
- return error;
- }
-
-
- FT_BASE_DEF( void )
- ft_glyphslot_free_bitmap( FT_GlyphSlot slot )
- {
- if ( slot->internal && ( slot->internal->flags & FT_GLYPH_OWN_BITMAP ) )
- {
- FT_Memory memory = FT_FACE_MEMORY( slot->face );
-
-
- FT_FREE( slot->bitmap.buffer );
- slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
- }
- else
- {
- /* assume that the bitmap buffer was stolen or not */
- /* allocated from the heap */
- slot->bitmap.buffer = NULL;
- }
- }
-
-
- FT_BASE_DEF( void )
- ft_glyphslot_set_bitmap( FT_GlyphSlot slot,
- FT_Byte* buffer )
- {
- ft_glyphslot_free_bitmap( slot );
-
- slot->bitmap.buffer = buffer;
-
- FT_ASSERT( (slot->internal->flags & FT_GLYPH_OWN_BITMAP) == 0 );
- }
-
-
- FT_BASE_DEF( FT_Error )
- ft_glyphslot_alloc_bitmap( FT_GlyphSlot slot,
- FT_ULong size )
- {
- FT_Memory memory = FT_FACE_MEMORY( slot->face );
- FT_Error error;
-
-
- if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
- FT_FREE( slot->bitmap.buffer );
- else
- slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
-
- (void)FT_ALLOC( slot->bitmap.buffer, size );
- return error;
- }
-
-
- static void
- ft_glyphslot_clear( FT_GlyphSlot slot )
- {
- /* free bitmap if needed */
- ft_glyphslot_free_bitmap( slot );
-
- /* clear all public fields in the glyph slot */
- FT_ZERO( &slot->metrics );
- FT_ZERO( &slot->outline );
-
- slot->bitmap.width = 0;
- slot->bitmap.rows = 0;
- slot->bitmap.pitch = 0;
- slot->bitmap.pixel_mode = 0;
- /* `slot->bitmap.buffer' has been handled by ft_glyphslot_free_bitmap */
-
- slot->bitmap_left = 0;
- slot->bitmap_top = 0;
- slot->num_subglyphs = 0;
- slot->subglyphs = NULL;
- slot->control_data = NULL;
- slot->control_len = 0;
- slot->other = NULL;
- slot->format = FT_GLYPH_FORMAT_NONE;
-
- slot->linearHoriAdvance = 0;
- slot->linearVertAdvance = 0;
- slot->lsb_delta = 0;
- slot->rsb_delta = 0;
- }
-
-
- static void
- ft_glyphslot_done( FT_GlyphSlot slot )
- {
- FT_Driver driver = slot->face->driver;
- FT_Driver_Class clazz = driver->clazz;
- FT_Memory memory = driver->root.memory;
-
-
- if ( clazz->done_slot )
- clazz->done_slot( slot );
-
- /* free bitmap buffer if needed */
- ft_glyphslot_free_bitmap( slot );
-
- /* slot->internal might be NULL in out-of-memory situations */
- if ( slot->internal )
- {
- /* free glyph loader */
- if ( FT_DRIVER_USES_OUTLINES( driver ) )
- {
- FT_GlyphLoader_Done( slot->internal->loader );
- slot->internal->loader = NULL;
- }
-
- FT_FREE( slot->internal );
- }
- }
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( FT_Error )
- FT_New_GlyphSlot( FT_Face face,
- FT_GlyphSlot *aslot )
- {
- FT_Error error;
- FT_Driver driver;
- FT_Driver_Class clazz;
- FT_Memory memory;
- FT_GlyphSlot slot = NULL;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( !face->driver )
- return FT_THROW( Invalid_Argument );
-
- driver = face->driver;
- clazz = driver->clazz;
- memory = driver->root.memory;
-
- FT_TRACE4(( "FT_New_GlyphSlot: Creating new slot object\n" ));
- if ( !FT_ALLOC( slot, clazz->slot_object_size ) )
- {
- slot->face = face;
-
- error = ft_glyphslot_init( slot );
- if ( error )
- {
- ft_glyphslot_done( slot );
- FT_FREE( slot );
- goto Exit;
- }
-
- slot->next = face->glyph;
- face->glyph = slot;
-
- if ( aslot )
- *aslot = slot;
- }
- else if ( aslot )
- *aslot = NULL;
-
-
- Exit:
- FT_TRACE4(( "FT_New_GlyphSlot: Return 0x%x\n", error ));
-
- return error;
- }
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( void )
- FT_Done_GlyphSlot( FT_GlyphSlot slot )
- {
- if ( slot )
- {
- FT_Driver driver = slot->face->driver;
- FT_Memory memory = driver->root.memory;
- FT_GlyphSlot prev;
- FT_GlyphSlot cur;
-
-
- /* Remove slot from its parent face's list */
- prev = NULL;
- cur = slot->face->glyph;
-
- while ( cur )
- {
- if ( cur == slot )
- {
- if ( !prev )
- slot->face->glyph = cur->next;
- else
- prev->next = cur->next;
-
- /* finalize client-specific data */
- if ( slot->generic.finalizer )
- slot->generic.finalizer( slot );
-
- ft_glyphslot_done( slot );
- FT_FREE( slot );
- break;
- }
- prev = cur;
- cur = cur->next;
- }
- }
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( void )
- FT_Set_Transform( FT_Face face,
- FT_Matrix* matrix,
- FT_Vector* delta )
- {
- FT_Face_Internal internal;
-
-
- if ( !face )
- return;
-
- internal = face->internal;
-
- internal->transform_flags = 0;
-
- if ( !matrix )
- {
- internal->transform_matrix.xx = 0x10000L;
- internal->transform_matrix.xy = 0;
- internal->transform_matrix.yx = 0;
- internal->transform_matrix.yy = 0x10000L;
-
- matrix = &internal->transform_matrix;
- }
- else
- internal->transform_matrix = *matrix;
-
- /* set transform_flags bit flag 0 if `matrix' isn't the identity */
- if ( ( matrix->xy | matrix->yx ) ||
- matrix->xx != 0x10000L ||
- matrix->yy != 0x10000L )
- internal->transform_flags |= 1;
-
- if ( !delta )
- {
- internal->transform_delta.x = 0;
- internal->transform_delta.y = 0;
-
- delta = &internal->transform_delta;
- }
- else
- internal->transform_delta = *delta;
-
- /* set transform_flags bit flag 1 if `delta' isn't the null vector */
- if ( delta->x | delta->y )
- internal->transform_flags |= 2;
- }
-
-
- static FT_Renderer
- ft_lookup_glyph_renderer( FT_GlyphSlot slot );
-
-
-#ifdef GRID_FIT_METRICS
- static void
- ft_glyphslot_grid_fit_metrics( FT_GlyphSlot slot,
- FT_Bool vertical )
- {
- FT_Glyph_Metrics* metrics = &slot->metrics;
- FT_Pos right, bottom;
-
-
- if ( vertical )
- {
- metrics->horiBearingX = FT_PIX_FLOOR( metrics->horiBearingX );
- metrics->horiBearingY = FT_PIX_CEIL ( metrics->horiBearingY );
-
- right = FT_PIX_CEIL( ADD_LONG( metrics->vertBearingX,
- metrics->width ) );
- bottom = FT_PIX_CEIL( ADD_LONG( metrics->vertBearingY,
- metrics->height ) );
-
- metrics->vertBearingX = FT_PIX_FLOOR( metrics->vertBearingX );
- metrics->vertBearingY = FT_PIX_FLOOR( metrics->vertBearingY );
-
- metrics->width = SUB_LONG( right,
- metrics->vertBearingX );
- metrics->height = SUB_LONG( bottom,
- metrics->vertBearingY );
- }
- else
- {
- metrics->vertBearingX = FT_PIX_FLOOR( metrics->vertBearingX );
- metrics->vertBearingY = FT_PIX_FLOOR( metrics->vertBearingY );
-
- right = FT_PIX_CEIL ( ADD_LONG( metrics->horiBearingX,
- metrics->width ) );
- bottom = FT_PIX_FLOOR( SUB_LONG( metrics->horiBearingY,
- metrics->height ) );
-
- metrics->horiBearingX = FT_PIX_FLOOR( metrics->horiBearingX );
- metrics->horiBearingY = FT_PIX_CEIL ( metrics->horiBearingY );
-
- metrics->width = SUB_LONG( right,
- metrics->horiBearingX );
- metrics->height = SUB_LONG( metrics->horiBearingY,
- bottom );
- }
-
- metrics->horiAdvance = FT_PIX_ROUND( metrics->horiAdvance );
- metrics->vertAdvance = FT_PIX_ROUND( metrics->vertAdvance );
- }
-#endif /* GRID_FIT_METRICS */
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Load_Glyph( FT_Face face,
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- FT_Error error;
- FT_Driver driver;
- FT_GlyphSlot slot;
- FT_Library library;
- FT_Bool autohint = FALSE;
- FT_Module hinter;
- TT_Face ttface = (TT_Face)face;
-
-
- if ( !face || !face->size || !face->glyph )
- return FT_THROW( Invalid_Face_Handle );
-
- /* The validity test for `glyph_index' is performed by the */
- /* font drivers. */
-
- slot = face->glyph;
- ft_glyphslot_clear( slot );
-
- driver = face->driver;
- library = driver->root.library;
- hinter = library->auto_hinter;
-
- /* resolve load flags dependencies */
-
- if ( load_flags & FT_LOAD_NO_RECURSE )
- load_flags |= FT_LOAD_NO_SCALE |
- FT_LOAD_IGNORE_TRANSFORM;
-
- if ( load_flags & FT_LOAD_NO_SCALE )
- {
- load_flags |= FT_LOAD_NO_HINTING |
- FT_LOAD_NO_BITMAP;
-
- load_flags &= ~FT_LOAD_RENDER;
- }
-
- if ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY )
- load_flags &= ~FT_LOAD_RENDER;
-
- /*
- * Determine whether we need to auto-hint or not.
- * The general rules are:
- *
- * - Do only auto-hinting if we have a hinter module, a scalable font
- * format dealing with outlines, and no transforms except simple
- * slants and/or rotations by integer multiples of 90 degrees.
- *
- * - Then, auto-hint if FT_LOAD_FORCE_AUTOHINT is set or if we don't
- * have a native font hinter.
- *
- * - Otherwise, auto-hint for LIGHT hinting mode or if there isn't
- * any hinting bytecode in the TrueType/OpenType font.
- *
- * - Exception: The font is `tricky' and requires the native hinter to
- * load properly.
- */
-
- if ( hinter &&
- !( load_flags & FT_LOAD_NO_HINTING ) &&
- !( load_flags & FT_LOAD_NO_AUTOHINT ) &&
- FT_DRIVER_IS_SCALABLE( driver ) &&
- FT_DRIVER_USES_OUTLINES( driver ) &&
- !FT_IS_TRICKY( face ) &&
- ( ( load_flags & FT_LOAD_IGNORE_TRANSFORM ) ||
- ( face->internal->transform_matrix.yx == 0 &&
- face->internal->transform_matrix.xx != 0 ) ||
- ( face->internal->transform_matrix.xx == 0 &&
- face->internal->transform_matrix.yx != 0 ) ) )
- {
- if ( ( load_flags & FT_LOAD_FORCE_AUTOHINT ) ||
- !FT_DRIVER_HAS_HINTER( driver ) )
- autohint = TRUE;
- else
- {
- FT_Render_Mode mode = FT_LOAD_TARGET_MODE( load_flags );
-
-
- /* the check for `num_locations' assures that we actually */
- /* test for instructions in a TTF and not in a CFF-based OTF */
- /* */
- /* since `maxSizeOfInstructions' might be unreliable, we */
- /* check the size of the `fpgm' and `prep' tables, too -- */
- /* the assumption is that there don't exist real TTFs where */
- /* both `fpgm' and `prep' tables are missing */
- if ( ( mode == FT_RENDER_MODE_LIGHT &&
- !FT_DRIVER_HINTS_LIGHTLY( driver ) ) ||
- ( FT_IS_SFNT( face ) &&
- ttface->num_locations &&
- ttface->max_profile.maxSizeOfInstructions == 0 &&
- ttface->font_program_size == 0 &&
- ttface->cvt_program_size == 0 ) )
- autohint = TRUE;
- }
- }
-
- if ( autohint )
- {
- FT_AutoHinter_Interface hinting;
-
-
- /* try to load embedded bitmaps first if available */
- /* */
- /* XXX: This is really a temporary hack that should disappear */
- /* promptly with FreeType 2.1! */
- /* */
- if ( FT_HAS_FIXED_SIZES( face ) &&
- ( load_flags & FT_LOAD_NO_BITMAP ) == 0 )
- {
- error = driver->clazz->load_glyph( slot, face->size,
- glyph_index,
- load_flags | FT_LOAD_SBITS_ONLY );
-
- if ( !error && slot->format == FT_GLYPH_FORMAT_BITMAP )
- goto Load_Ok;
- }
-
- {
- FT_Face_Internal internal = face->internal;
- FT_Int transform_flags = internal->transform_flags;
-
-
- /* since the auto-hinter calls FT_Load_Glyph by itself, */
- /* make sure that glyphs aren't transformed */
- internal->transform_flags = 0;
-
- /* load auto-hinted outline */
- hinting = (FT_AutoHinter_Interface)hinter->clazz->module_interface;
-
- error = hinting->load_glyph( (FT_AutoHinter)hinter,
- slot, face->size,
- glyph_index, load_flags );
-
- internal->transform_flags = transform_flags;
- }
- }
- else
- {
- error = driver->clazz->load_glyph( slot,
- face->size,
- glyph_index,
- load_flags );
- if ( error )
- goto Exit;
-
- if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
- {
- /* check that the loaded outline is correct */
- error = FT_Outline_Check( &slot->outline );
- if ( error )
- goto Exit;
-
-#ifdef GRID_FIT_METRICS
- if ( !( load_flags & FT_LOAD_NO_HINTING ) )
- ft_glyphslot_grid_fit_metrics( slot,
- FT_BOOL( load_flags & FT_LOAD_VERTICAL_LAYOUT ) );
-#endif
- }
- }
-
- Load_Ok:
- /* compute the advance */
- if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
- {
- slot->advance.x = 0;
- slot->advance.y = slot->metrics.vertAdvance;
- }
- else
- {
- slot->advance.x = slot->metrics.horiAdvance;
- slot->advance.y = 0;
- }
-
- /* compute the linear advance in 16.16 pixels */
- if ( ( load_flags & FT_LOAD_LINEAR_DESIGN ) == 0 &&
- ( FT_IS_SCALABLE( face ) ) )
- {
- FT_Size_Metrics* metrics = &face->size->metrics;
-
-
- /* it's tricky! */
- slot->linearHoriAdvance = FT_MulDiv( slot->linearHoriAdvance,
- metrics->x_scale, 64 );
-
- slot->linearVertAdvance = FT_MulDiv( slot->linearVertAdvance,
- metrics->y_scale, 64 );
- }
-
- if ( ( load_flags & FT_LOAD_IGNORE_TRANSFORM ) == 0 )
- {
- FT_Face_Internal internal = face->internal;
-
-
- /* now, transform the glyph image if needed */
- if ( internal->transform_flags )
- {
- /* get renderer */
- FT_Renderer renderer = ft_lookup_glyph_renderer( slot );
-
-
- if ( renderer )
- error = renderer->clazz->transform_glyph(
- renderer, slot,
- &internal->transform_matrix,
- &internal->transform_delta );
- else if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
- {
- /* apply `standard' transformation if no renderer is available */
- if ( internal->transform_flags & 1 )
- FT_Outline_Transform( &slot->outline,
- &internal->transform_matrix );
-
- if ( internal->transform_flags & 2 )
- FT_Outline_Translate( &slot->outline,
- internal->transform_delta.x,
- internal->transform_delta.y );
- }
-
- /* transform advance */
- FT_Vector_Transform( &slot->advance, &internal->transform_matrix );
- }
- }
-
- FT_TRACE5(( " x advance: %d\n" , slot->advance.x ));
- FT_TRACE5(( " y advance: %d\n" , slot->advance.y ));
-
- FT_TRACE5(( " linear x advance: %d\n" , slot->linearHoriAdvance ));
- FT_TRACE5(( " linear y advance: %d\n" , slot->linearVertAdvance ));
-
- /* do we need to render the image now? */
- if ( !error &&
- slot->format != FT_GLYPH_FORMAT_BITMAP &&
- slot->format != FT_GLYPH_FORMAT_COMPOSITE &&
- load_flags & FT_LOAD_RENDER )
- {
- FT_Render_Mode mode = FT_LOAD_TARGET_MODE( load_flags );
-
-
- if ( mode == FT_RENDER_MODE_NORMAL &&
- (load_flags & FT_LOAD_MONOCHROME ) )
- mode = FT_RENDER_MODE_MONO;
-
- error = FT_Render_Glyph( slot, mode );
- }
-
- Exit:
- return error;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Load_Char( FT_Face face,
- FT_ULong char_code,
- FT_Int32 load_flags )
- {
- FT_UInt glyph_index;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- glyph_index = (FT_UInt)char_code;
- if ( face->charmap )
- glyph_index = FT_Get_Char_Index( face, char_code );
-
- return FT_Load_Glyph( face, glyph_index, load_flags );
- }
-
-
- /* destructor for sizes list */
- static void
- destroy_size( FT_Memory memory,
- FT_Size size,
- FT_Driver driver )
- {
- /* finalize client-specific data */
- if ( size->generic.finalizer )
- size->generic.finalizer( size );
-
- /* finalize format-specific stuff */
- if ( driver->clazz->done_size )
- driver->clazz->done_size( size );
-
- FT_FREE( size->internal );
- FT_FREE( size );
- }
-
-
- static void
- ft_cmap_done_internal( FT_CMap cmap );
-
-
- static void
- destroy_charmaps( FT_Face face,
- FT_Memory memory )
- {
- FT_Int n;
-
-
- if ( !face )
- return;
-
- for ( n = 0; n < face->num_charmaps; n++ )
- {
- FT_CMap cmap = FT_CMAP( face->charmaps[n] );
-
-
- ft_cmap_done_internal( cmap );
-
- face->charmaps[n] = NULL;
- }
-
- FT_FREE( face->charmaps );
- face->num_charmaps = 0;
- }
-
-
- /* destructor for faces list */
- static void
- destroy_face( FT_Memory memory,
- FT_Face face,
- FT_Driver driver )
- {
- FT_Driver_Class clazz = driver->clazz;
-
-
- /* discard auto-hinting data */
- if ( face->autohint.finalizer )
- face->autohint.finalizer( face->autohint.data );
-
- /* Discard glyph slots for this face. */
- /* Beware! FT_Done_GlyphSlot() changes the field `face->glyph' */
- while ( face->glyph )
- FT_Done_GlyphSlot( face->glyph );
-
- /* discard all sizes for this face */
- FT_List_Finalize( &face->sizes_list,
- (FT_List_Destructor)destroy_size,
- memory,
- driver );
- face->size = NULL;
-
- /* now discard client data */
- if ( face->generic.finalizer )
- face->generic.finalizer( face );
-
- /* discard charmaps */
- destroy_charmaps( face, memory );
-
- /* finalize format-specific stuff */
- if ( clazz->done_face )
- clazz->done_face( face );
-
- /* close the stream for this face if needed */
- FT_Stream_Free(
- face->stream,
- ( face->face_flags & FT_FACE_FLAG_EXTERNAL_STREAM ) != 0 );
-
- face->stream = NULL;
-
- /* get rid of it */
- if ( face->internal )
- {
- FT_FREE( face->internal );
- }
- FT_FREE( face );
- }
-
-
- static void
- Destroy_Driver( FT_Driver driver )
- {
- FT_List_Finalize( &driver->faces_list,
- (FT_List_Destructor)destroy_face,
- driver->root.memory,
- driver );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* find_unicode_charmap */
- /* */
- /* <Description> */
- /* This function finds a Unicode charmap, if there is one. */
- /* And if there is more than one, it tries to favour the more */
- /* extensive one, i.e., one that supports UCS-4 against those which */
- /* are limited to the BMP (said UCS-2 encoding.) */
- /* */
- /* This function is called from open_face() (just below), and also */
- /* from FT_Select_Charmap( ..., FT_ENCODING_UNICODE ). */
- /* */
- static FT_Error
- find_unicode_charmap( FT_Face face )
- {
- FT_CharMap* first;
- FT_CharMap* cur;
-
-
- /* caller should have already checked that `face' is valid */
- FT_ASSERT( face );
-
- first = face->charmaps;
-
- if ( !first )
- return FT_THROW( Invalid_CharMap_Handle );
-
- /*
- * The original TrueType specification(s) only specified charmap
- * formats that are capable of mapping 8 or 16 bit character codes to
- * glyph indices.
- *
- * However, recent updates to the Apple and OpenType specifications
- * introduced new formats that are capable of mapping 32-bit character
- * codes as well. And these are already used on some fonts, mainly to
- * map non-BMP Asian ideographs as defined in Unicode.
- *
- * For compatibility purposes, these fonts generally come with
- * *several* Unicode charmaps:
- *
- * - One of them in the "old" 16-bit format, that cannot access
- * all glyphs in the font.
- *
- * - Another one in the "new" 32-bit format, that can access all
- * the glyphs.
- *
- * This function has been written to always favor a 32-bit charmap
- * when found. Otherwise, a 16-bit one is returned when found.
- */
-
- /* Since the `interesting' table, with IDs (3,10), is normally the */
- /* last one, we loop backwards. This loses with type1 fonts with */
- /* non-BMP characters (<.0001%), this wins with .ttf with non-BMP */
- /* chars (.01% ?), and this is the same about 99.99% of the time! */
-
- cur = first + face->num_charmaps; /* points after the last one */
-
- for ( ; --cur >= first; )
- {
- if ( cur[0]->encoding == FT_ENCODING_UNICODE )
- {
- /* XXX If some new encodings to represent UCS-4 are added, */
- /* they should be added here. */
- if ( ( cur[0]->platform_id == TT_PLATFORM_MICROSOFT &&
- cur[0]->encoding_id == TT_MS_ID_UCS_4 ) ||
- ( cur[0]->platform_id == TT_PLATFORM_APPLE_UNICODE &&
- cur[0]->encoding_id == TT_APPLE_ID_UNICODE_32 ) )
- {
- face->charmap = cur[0];
- return FT_Err_Ok;
- }
- }
- }
-
- /* We do not have any UCS-4 charmap. */
- /* Do the loop again and search for UCS-2 charmaps. */
- cur = first + face->num_charmaps;
-
- for ( ; --cur >= first; )
- {
- if ( cur[0]->encoding == FT_ENCODING_UNICODE )
- {
- face->charmap = cur[0];
- return FT_Err_Ok;
- }
- }
-
- return FT_THROW( Invalid_CharMap_Handle );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* find_variant_selector_charmap */
- /* */
- /* <Description> */
- /* This function finds the variant selector charmap, if there is one. */
- /* There can only be one (platform=0, specific=5, format=14). */
- /* */
- static FT_CharMap
- find_variant_selector_charmap( FT_Face face )
- {
- FT_CharMap* first;
- FT_CharMap* end;
- FT_CharMap* cur;
-
-
- /* caller should have already checked that `face' is valid */
- FT_ASSERT( face );
-
- first = face->charmaps;
-
- if ( !first )
- return NULL;
-
- end = first + face->num_charmaps; /* points after the last one */
-
- for ( cur = first; cur < end; cur++ )
- {
- if ( cur[0]->platform_id == TT_PLATFORM_APPLE_UNICODE &&
- cur[0]->encoding_id == TT_APPLE_ID_VARIANT_SELECTOR &&
- FT_Get_CMap_Format( cur[0] ) == 14 )
- return cur[0];
- }
-
- return NULL;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* open_face */
- /* */
- /* <Description> */
- /* This function does some work for FT_Open_Face(). */
- /* */
- static FT_Error
- open_face( FT_Driver driver,
- FT_Stream *astream,
- FT_Bool external_stream,
- FT_Long face_index,
- FT_Int num_params,
- FT_Parameter* params,
- FT_Face *aface )
- {
- FT_Memory memory;
- FT_Driver_Class clazz;
- FT_Face face = NULL;
- FT_Face_Internal internal = NULL;
-
- FT_Error error, error2;
-
-
- clazz = driver->clazz;
- memory = driver->root.memory;
-
- /* allocate the face object and perform basic initialization */
- if ( FT_ALLOC( face, clazz->face_object_size ) )
- goto Fail;
-
- face->driver = driver;
- face->memory = memory;
- face->stream = *astream;
-
- /* set the FT_FACE_FLAG_EXTERNAL_STREAM bit for FT_Done_Face */
- if ( external_stream )
- face->face_flags |= FT_FACE_FLAG_EXTERNAL_STREAM;
-
- if ( FT_NEW( internal ) )
- goto Fail;
-
- face->internal = internal;
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- {
- int i;
-
-
- face->internal->incremental_interface = NULL;
- for ( i = 0; i < num_params && !face->internal->incremental_interface;
- i++ )
- if ( params[i].tag == FT_PARAM_TAG_INCREMENTAL )
- face->internal->incremental_interface =
- (FT_Incremental_Interface)params[i].data;
- }
-#endif
-
- face->internal->random_seed = -1;
-
- if ( clazz->init_face )
- error = clazz->init_face( *astream,
- face,
- (FT_Int)face_index,
- num_params,
- params );
- *astream = face->stream; /* Stream may have been changed. */
- if ( error )
- goto Fail;
-
- /* select Unicode charmap by default */
- error2 = find_unicode_charmap( face );
-
- /* if no Unicode charmap can be found, FT_Err_Invalid_CharMap_Handle */
- /* is returned. */
-
- /* no error should happen, but we want to play safe */
- if ( error2 && FT_ERR_NEQ( error2, Invalid_CharMap_Handle ) )
- {
- error = error2;
- goto Fail;
- }
-
- *aface = face;
-
- Fail:
- if ( error )
- {
- destroy_charmaps( face, memory );
- if ( clazz->done_face )
- clazz->done_face( face );
- FT_FREE( internal );
- FT_FREE( face );
- *aface = NULL;
- }
-
- return error;
- }
-
-
- /* there's a Mac-specific extended implementation of FT_New_Face() */
- /* in src/base/ftmac.c */
-
-#ifndef FT_MACINTOSH
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_New_Face( FT_Library library,
- const char* pathname,
- FT_Long face_index,
- FT_Face *aface )
- {
- FT_Open_Args args;
-
-
- /* test for valid `library' and `aface' delayed to `FT_Open_Face' */
- if ( !pathname )
- return FT_THROW( Invalid_Argument );
-
- args.flags = FT_OPEN_PATHNAME;
- args.pathname = (char*)pathname;
- args.stream = NULL;
-
- return ft_open_face_internal( library, &args, face_index, aface, 1 );
- }
-
-#endif
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_New_Memory_Face( FT_Library library,
- const FT_Byte* file_base,
- FT_Long file_size,
- FT_Long face_index,
- FT_Face *aface )
- {
- FT_Open_Args args;
-
-
- /* test for valid `library' and `face' delayed to `FT_Open_Face' */
- if ( !file_base )
- return FT_THROW( Invalid_Argument );
-
- args.flags = FT_OPEN_MEMORY;
- args.memory_base = file_base;
- args.memory_size = file_size;
- args.stream = NULL;
-
- return ft_open_face_internal( library, &args, face_index, aface, 1 );
- }
-
-
-#ifdef FT_CONFIG_OPTION_MAC_FONTS
-
- /* The behavior here is very similar to that in base/ftmac.c, but it */
- /* is designed to work on non-mac systems, so no mac specific calls. */
- /* */
- /* We look at the file and determine if it is a mac dfont file or a mac */
- /* resource file, or a macbinary file containing a mac resource file. */
- /* */
- /* Unlike ftmac I'm not going to look at a `FOND'. I don't really see */
- /* the point, especially since there may be multiple `FOND' resources. */
- /* Instead I'll just look for `sfnt' and `POST' resources, ordered as */
- /* they occur in the file. */
- /* */
- /* Note that multiple `POST' resources do not mean multiple postscript */
- /* fonts; they all get jammed together to make what is essentially a */
- /* pfb file. */
- /* */
- /* We aren't interested in `NFNT' or `FONT' bitmap resources. */
- /* */
- /* As soon as we get an `sfnt' load it into memory and pass it off to */
- /* FT_Open_Face. */
- /* */
- /* If we have a (set of) `POST' resources, massage them into a (memory) */
- /* pfb file and pass that to FT_Open_Face. (As with ftmac.c I'm not */
- /* going to try to save the kerning info. After all that lives in the */
- /* `FOND' which isn't in the file containing the `POST' resources so */
- /* we don't really have access to it. */
-
-
- /* Finalizer for a memory stream; gets called by FT_Done_Face(). */
- /* It frees the memory it uses. */
- /* From `ftmac.c'. */
- static void
- memory_stream_close( FT_Stream stream )
- {
- FT_Memory memory = stream->memory;
-
-
- FT_FREE( stream->base );
-
- stream->size = 0;
- stream->base = NULL;
- stream->close = NULL;
- }
-
-
- /* Create a new memory stream from a buffer and a size. */
- /* From `ftmac.c'. */
- static FT_Error
- new_memory_stream( FT_Library library,
- FT_Byte* base,
- FT_ULong size,
- FT_Stream_CloseFunc close,
- FT_Stream *astream )
- {
- FT_Error error;
- FT_Memory memory;
- FT_Stream stream = NULL;
-
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- if ( !base )
- return FT_THROW( Invalid_Argument );
-
- *astream = NULL;
- memory = library->memory;
- if ( FT_NEW( stream ) )
- goto Exit;
-
- FT_Stream_OpenMemory( stream, base, size );
-
- stream->close = close;
-
- *astream = stream;
-
- Exit:
- return error;
- }
-
-
- /* Create a new FT_Face given a buffer and a driver name. */
- /* From `ftmac.c'. */
- FT_LOCAL_DEF( FT_Error )
- open_face_from_buffer( FT_Library library,
- FT_Byte* base,
- FT_ULong size,
- FT_Long face_index,
- const char* driver_name,
- FT_Face *aface )
- {
- FT_Open_Args args;
- FT_Error error;
- FT_Stream stream = NULL;
- FT_Memory memory = library->memory;
-
-
- error = new_memory_stream( library,
- base,
- size,
- memory_stream_close,
- &stream );
- if ( error )
- {
- FT_FREE( base );
- return error;
- }
-
- args.flags = FT_OPEN_STREAM;
- args.stream = stream;
- if ( driver_name )
- {
- args.flags = args.flags | FT_OPEN_DRIVER;
- args.driver = FT_Get_Module( library, driver_name );
- }
-
-#ifdef FT_MACINTOSH
- /* At this point, the face index has served its purpose; */
- /* whoever calls this function has already used it to */
- /* locate the correct font data. We should not propagate */
- /* this index to FT_Open_Face() (unless it is negative). */
-
- if ( face_index > 0 )
- face_index &= 0x7FFF0000L; /* retain GX data */
-#endif
-
- error = ft_open_face_internal( library, &args, face_index, aface, 0 );
-
- if ( !error )
- (*aface)->face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM;
- else
-#ifdef FT_MACINTOSH
- FT_Stream_Free( stream, 0 );
-#else
- {
- FT_Stream_Close( stream );
- FT_FREE( stream );
- }
-#endif
-
- return error;
- }
-
-
- /* Look up `TYP1' or `CID ' table from sfnt table directory. */
- /* `offset' and `length' must exclude the binary header in tables. */
-
- /* Type 1 and CID-keyed font drivers should recognize sfnt-wrapped */
- /* format too. Here, since we can't expect that the TrueType font */
- /* driver is loaded unconditionally, we must parse the font by */
- /* ourselves. We are only interested in the name of the table and */
- /* the offset. */
-
- static FT_Error
- ft_lookup_PS_in_sfnt_stream( FT_Stream stream,
- FT_Long face_index,
- FT_ULong* offset,
- FT_ULong* length,
- FT_Bool* is_sfnt_cid )
- {
- FT_Error error;
- FT_UShort numTables;
- FT_Long pstable_index;
- FT_ULong tag;
- int i;
-
-
- *offset = 0;
- *length = 0;
- *is_sfnt_cid = FALSE;
-
- /* TODO: support for sfnt-wrapped PS/CID in TTC format */
-
- /* version check for 'typ1' (should be ignored?) */
- if ( FT_READ_ULONG( tag ) )
- return error;
- if ( tag != TTAG_typ1 )
- return FT_THROW( Unknown_File_Format );
-
- if ( FT_READ_USHORT( numTables ) )
- return error;
- if ( FT_STREAM_SKIP( 2 * 3 ) ) /* skip binary search header */
- return error;
-
- pstable_index = -1;
- *is_sfnt_cid = FALSE;
-
- for ( i = 0; i < numTables; i++ )
- {
- if ( FT_READ_ULONG( tag ) || FT_STREAM_SKIP( 4 ) ||
- FT_READ_ULONG( *offset ) || FT_READ_ULONG( *length ) )
- return error;
-
- if ( tag == TTAG_CID )
- {
- pstable_index++;
- *offset += 22;
- *length -= 22;
- *is_sfnt_cid = TRUE;
- if ( face_index < 0 )
- return FT_Err_Ok;
- }
- else if ( tag == TTAG_TYP1 )
- {
- pstable_index++;
- *offset += 24;
- *length -= 24;
- *is_sfnt_cid = FALSE;
- if ( face_index < 0 )
- return FT_Err_Ok;
- }
- if ( face_index >= 0 && pstable_index == face_index )
- return FT_Err_Ok;
- }
-
- return FT_THROW( Table_Missing );
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- open_face_PS_from_sfnt_stream( FT_Library library,
- FT_Stream stream,
- FT_Long face_index,
- FT_Int num_params,
- FT_Parameter *params,
- FT_Face *aface )
- {
- FT_Error error;
- FT_Memory memory = library->memory;
- FT_ULong offset, length;
- FT_ULong pos;
- FT_Bool is_sfnt_cid;
- FT_Byte* sfnt_ps = NULL;
-
- FT_UNUSED( num_params );
- FT_UNUSED( params );
-
-
- /* ignore GX stuff */
- if ( face_index > 0 )
- face_index &= 0xFFFFL;
-
- pos = FT_STREAM_POS();
-
- error = ft_lookup_PS_in_sfnt_stream( stream,
- face_index,
- &offset,
- &length,
- &is_sfnt_cid );
- if ( error )
- goto Exit;
-
- if ( offset > stream->size )
- {
- FT_TRACE2(( "open_face_PS_from_sfnt_stream: invalid table offset\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
- else if ( length > stream->size - offset )
- {
- FT_TRACE2(( "open_face_PS_from_sfnt_stream: invalid table length\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- error = FT_Stream_Seek( stream, pos + offset );
- if ( error )
- goto Exit;
-
- if ( FT_ALLOC( sfnt_ps, (FT_Long)length ) )
- goto Exit;
-
- error = FT_Stream_Read( stream, (FT_Byte *)sfnt_ps, length );
- if ( error )
- {
- FT_FREE( sfnt_ps );
- goto Exit;
- }
-
- error = open_face_from_buffer( library,
- sfnt_ps,
- length,
- FT_MIN( face_index, 0 ),
- is_sfnt_cid ? "cid" : "type1",
- aface );
- Exit:
- {
- FT_Error error1;
-
-
- if ( FT_ERR_EQ( error, Unknown_File_Format ) )
- {
- error1 = FT_Stream_Seek( stream, pos );
- if ( error1 )
- return error1;
- }
-
- return error;
- }
- }
-
-
-#ifndef FT_MACINTOSH
-
- /* The resource header says we've got resource_cnt `POST' (type1) */
- /* resources in this file. They all need to be coalesced into */
- /* one lump which gets passed on to the type1 driver. */
- /* Here can be only one PostScript font in a file so face_index */
- /* must be 0 (or -1). */
- /* */
- static FT_Error
- Mac_Read_POST_Resource( FT_Library library,
- FT_Stream stream,
- FT_Long *offsets,
- FT_Long resource_cnt,
- FT_Long face_index,
- FT_Face *aface )
- {
- FT_Error error = FT_ERR( Cannot_Open_Resource );
- FT_Memory memory = library->memory;
-
- FT_Byte* pfb_data = NULL;
- int i, type, flags;
- FT_ULong len;
- FT_ULong pfb_len, pfb_pos, pfb_lenpos;
- FT_ULong rlen, temp;
-
-
- if ( face_index == -1 )
- face_index = 0;
- if ( face_index != 0 )
- return error;
-
- /* Find the length of all the POST resources, concatenated. Assume */
- /* worst case (each resource in its own section). */
- pfb_len = 0;
- for ( i = 0; i < resource_cnt; i++ )
- {
- error = FT_Stream_Seek( stream, (FT_ULong)offsets[i] );
- if ( error )
- goto Exit;
- if ( FT_READ_ULONG( temp ) ) /* actually LONG */
- goto Exit;
-
- /* FT2 allocator takes signed long buffer length,
- * too large value causing overflow should be checked
- */
- FT_TRACE4(( " POST fragment #%d: length=0x%08x"
- " total pfb_len=0x%08x\n",
- i, temp, pfb_len + temp + 6 ));
-
- if ( FT_MAC_RFORK_MAX_LEN < temp ||
- FT_MAC_RFORK_MAX_LEN - temp < pfb_len + 6 )
- {
- FT_TRACE2(( " MacOS resource length cannot exceed"
- " 0x%08x\n",
- FT_MAC_RFORK_MAX_LEN ));
-
- error = FT_THROW( Invalid_Offset );
- goto Exit;
- }
-
- pfb_len += temp + 6;
- }
-
- FT_TRACE2(( " total buffer size to concatenate"
- " %d POST fragments: 0x%08x\n",
- resource_cnt, pfb_len + 2 ));
-
- if ( pfb_len + 2 < 6 )
- {
- FT_TRACE2(( " too long fragment length makes"
- " pfb_len confused: pfb_len=0x%08x\n",
- pfb_len ));
-
- error = FT_THROW( Array_Too_Large );
- goto Exit;
- }
-
- if ( FT_ALLOC( pfb_data, (FT_Long)pfb_len + 2 ) )
- goto Exit;
-
- pfb_data[0] = 0x80;
- pfb_data[1] = 1; /* Ascii section */
- pfb_data[2] = 0; /* 4-byte length, fill in later */
- pfb_data[3] = 0;
- pfb_data[4] = 0;
- pfb_data[5] = 0;
- pfb_pos = 6;
- pfb_lenpos = 2;
-
- len = 0;
- type = 1;
-
- for ( i = 0; i < resource_cnt; i++ )
- {
- error = FT_Stream_Seek( stream, (FT_ULong)offsets[i] );
- if ( error )
- goto Exit2;
- if ( FT_READ_ULONG( rlen ) )
- goto Exit2;
-
- /* FT2 allocator takes signed long buffer length,
- * too large fragment length causing overflow should be checked
- */
- if ( 0x7FFFFFFFUL < rlen )
- {
- error = FT_THROW( Invalid_Offset );
- goto Exit2;
- }
-
- if ( FT_READ_USHORT( flags ) )
- goto Exit2;
-
- FT_TRACE3(( "POST fragment[%d]:"
- " offsets=0x%08x, rlen=0x%08x, flags=0x%04x\n",
- i, offsets[i], rlen, flags ));
-
- error = FT_ERR( Array_Too_Large );
-
- /* postpone the check of `rlen longer than buffer' */
- /* until `FT_Stream_Read' */
-
- if ( ( flags >> 8 ) == 0 ) /* Comment, should not be loaded */
- {
- FT_TRACE3(( " Skip POST fragment #%d because it is a comment\n",
- i ));
- continue;
- }
-
- /* the flags are part of the resource, so rlen >= 2, */
- /* but some fonts declare rlen = 0 for empty fragment */
- if ( rlen > 2 )
- rlen -= 2;
- else
- rlen = 0;
-
- if ( ( flags >> 8 ) == type )
- len += rlen;
- else
- {
- FT_TRACE3(( " Write POST fragment #%d header (4-byte) to buffer"
- " %p + 0x%08x\n",
- i, pfb_data, pfb_lenpos ));
-
- if ( pfb_lenpos + 3 > pfb_len + 2 )
- goto Exit2;
-
- pfb_data[pfb_lenpos ] = (FT_Byte)( len );
- pfb_data[pfb_lenpos + 1] = (FT_Byte)( len >> 8 );
- pfb_data[pfb_lenpos + 2] = (FT_Byte)( len >> 16 );
- pfb_data[pfb_lenpos + 3] = (FT_Byte)( len >> 24 );
-
- if ( ( flags >> 8 ) == 5 ) /* End of font mark */
- break;
-
- FT_TRACE3(( " Write POST fragment #%d header (6-byte) to buffer"
- " %p + 0x%08x\n",
- i, pfb_data, pfb_pos ));
-
- if ( pfb_pos + 6 > pfb_len + 2 )
- goto Exit2;
-
- pfb_data[pfb_pos++] = 0x80;
-
- type = flags >> 8;
- len = rlen;
-
- pfb_data[pfb_pos++] = (FT_Byte)type;
- pfb_lenpos = pfb_pos;
- pfb_data[pfb_pos++] = 0; /* 4-byte length, fill in later */
- pfb_data[pfb_pos++] = 0;
- pfb_data[pfb_pos++] = 0;
- pfb_data[pfb_pos++] = 0;
- }
-
- if ( pfb_pos > pfb_len || pfb_pos + rlen > pfb_len )
- goto Exit2;
-
- FT_TRACE3(( " Load POST fragment #%d (%d byte) to buffer"
- " %p + 0x%08x\n",
- i, rlen, pfb_data, pfb_pos ));
-
- error = FT_Stream_Read( stream, (FT_Byte *)pfb_data + pfb_pos, rlen );
- if ( error )
- goto Exit2;
-
- pfb_pos += rlen;
- }
-
- error = FT_ERR( Array_Too_Large );
-
- if ( pfb_pos + 2 > pfb_len + 2 )
- goto Exit2;
- pfb_data[pfb_pos++] = 0x80;
- pfb_data[pfb_pos++] = 3;
-
- if ( pfb_lenpos + 3 > pfb_len + 2 )
- goto Exit2;
- pfb_data[pfb_lenpos ] = (FT_Byte)( len );
- pfb_data[pfb_lenpos + 1] = (FT_Byte)( len >> 8 );
- pfb_data[pfb_lenpos + 2] = (FT_Byte)( len >> 16 );
- pfb_data[pfb_lenpos + 3] = (FT_Byte)( len >> 24 );
-
- return open_face_from_buffer( library,
- pfb_data,
- pfb_pos,
- face_index,
- "type1",
- aface );
-
- Exit2:
- if ( FT_ERR_EQ( error, Array_Too_Large ) )
- FT_TRACE2(( " Abort due to too-short buffer to store"
- " all POST fragments\n" ));
- else if ( FT_ERR_EQ( error, Invalid_Offset ) )
- FT_TRACE2(( " Abort due to invalid offset in a POST fragment\n" ));
-
- if ( error )
- error = FT_ERR( Cannot_Open_Resource );
- FT_FREE( pfb_data );
-
- Exit:
- return error;
- }
-
-
- /* The resource header says we've got resource_cnt `sfnt' */
- /* (TrueType/OpenType) resources in this file. Look through */
- /* them for the one indicated by face_index, load it into mem, */
- /* pass it on to the truetype driver, and return it. */
- /* */
- static FT_Error
- Mac_Read_sfnt_Resource( FT_Library library,
- FT_Stream stream,
- FT_Long *offsets,
- FT_Long resource_cnt,
- FT_Long face_index,
- FT_Face *aface )
- {
- FT_Memory memory = library->memory;
- FT_Byte* sfnt_data = NULL;
- FT_Error error;
- FT_ULong flag_offset;
- FT_Long rlen;
- int is_cff;
- FT_Long face_index_in_resource = 0;
-
-
- if ( face_index < 0 )
- face_index = -face_index - 1;
- if ( face_index >= resource_cnt )
- return FT_THROW( Cannot_Open_Resource );
-
- flag_offset = (FT_ULong)offsets[face_index];
- error = FT_Stream_Seek( stream, flag_offset );
- if ( error )
- goto Exit;
-
- if ( FT_READ_LONG( rlen ) )
- goto Exit;
- if ( rlen < 1 )
- return FT_THROW( Cannot_Open_Resource );
- if ( (FT_ULong)rlen > FT_MAC_RFORK_MAX_LEN )
- return FT_THROW( Invalid_Offset );
-
- error = open_face_PS_from_sfnt_stream( library,
- stream,
- face_index,
- 0, NULL,
- aface );
- if ( !error )
- goto Exit;
-
- /* rewind sfnt stream before open_face_PS_from_sfnt_stream() */
- error = FT_Stream_Seek( stream, flag_offset + 4 );
- if ( error )
- goto Exit;
-
- if ( FT_ALLOC( sfnt_data, rlen ) )
- return error;
- error = FT_Stream_Read( stream, (FT_Byte *)sfnt_data, (FT_ULong)rlen );
- if ( error ) {
- FT_FREE( sfnt_data );
- goto Exit;
- }
-
- is_cff = rlen > 4 && !ft_memcmp( sfnt_data, "OTTO", 4 );
- error = open_face_from_buffer( library,
- sfnt_data,
- (FT_ULong)rlen,
- face_index_in_resource,
- is_cff ? "cff" : "truetype",
- aface );
-
- Exit:
- return error;
- }
-
-
- /* Check for a valid resource fork header, or a valid dfont */
- /* header. In a resource fork the first 16 bytes are repeated */
- /* at the location specified by bytes 4-7. In a dfont bytes */
- /* 4-7 point to 16 bytes of zeroes instead. */
- /* */
- static FT_Error
- IsMacResource( FT_Library library,
- FT_Stream stream,
- FT_Long resource_offset,
- FT_Long face_index,
- FT_Face *aface )
- {
- FT_Memory memory = library->memory;
- FT_Error error;
- FT_Long map_offset, rdata_pos;
- FT_Long *data_offsets;
- FT_Long count;
-
-
- error = FT_Raccess_Get_HeaderInfo( library, stream, resource_offset,
- &map_offset, &rdata_pos );
- if ( error )
- return error;
-
- /* POST resources must be sorted to concatenate properly */
- error = FT_Raccess_Get_DataOffsets( library, stream,
- map_offset, rdata_pos,
- TTAG_POST, TRUE,
- &data_offsets, &count );
- if ( !error )
- {
- error = Mac_Read_POST_Resource( library, stream, data_offsets, count,
- face_index, aface );
- FT_FREE( data_offsets );
- /* POST exists in an LWFN providing a single face */
- if ( !error )
- (*aface)->num_faces = 1;
- return error;
- }
-
- /* sfnt resources should not be sorted to preserve the face order by
- QuickDraw API */
- error = FT_Raccess_Get_DataOffsets( library, stream,
- map_offset, rdata_pos,
- TTAG_sfnt, FALSE,
- &data_offsets, &count );
- if ( !error )
- {
- FT_Long face_index_internal = face_index % count;
-
-
- error = Mac_Read_sfnt_Resource( library, stream, data_offsets, count,
- face_index_internal, aface );
- FT_FREE( data_offsets );
- if ( !error )
- (*aface)->num_faces = count;
- }
-
- return error;
- }
-
-
- /* Check for a valid macbinary header, and if we find one */
- /* check that the (flattened) resource fork in it is valid. */
- /* */
- static FT_Error
- IsMacBinary( FT_Library library,
- FT_Stream stream,
- FT_Long face_index,
- FT_Face *aface )
- {
- unsigned char header[128];
- FT_Error error;
- FT_Long dlen, offset;
-
-
- if ( !stream )
- return FT_THROW( Invalid_Stream_Operation );
-
- error = FT_Stream_Seek( stream, 0 );
- if ( error )
- goto Exit;
-
- error = FT_Stream_Read( stream, (FT_Byte*)header, 128 );
- if ( error )
- goto Exit;
-
- if ( header[ 0] != 0 ||
- header[74] != 0 ||
- header[82] != 0 ||
- header[ 1] == 0 ||
- header[ 1] > 33 ||
- header[63] != 0 ||
- header[2 + header[1]] != 0 ||
- header[0x53] > 0x7F )
- return FT_THROW( Unknown_File_Format );
-
- dlen = ( header[0x53] << 24 ) |
- ( header[0x54] << 16 ) |
- ( header[0x55] << 8 ) |
- header[0x56];
-#if 0
- rlen = ( header[0x57] << 24 ) |
- ( header[0x58] << 16 ) |
- ( header[0x59] << 8 ) |
- header[0x5A];
-#endif /* 0 */
- offset = 128 + ( ( dlen + 127 ) & ~127 );
-
- return IsMacResource( library, stream, offset, face_index, aface );
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- load_face_in_embedded_rfork( FT_Library library,
- FT_Stream stream,
- FT_Long face_index,
- FT_Face *aface,
- const FT_Open_Args *args )
- {
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_raccess
-
- FT_Memory memory = library->memory;
- FT_Error error = FT_ERR( Unknown_File_Format );
- FT_UInt i;
-
- char * file_names[FT_RACCESS_N_RULES];
- FT_Long offsets[FT_RACCESS_N_RULES];
- FT_Error errors[FT_RACCESS_N_RULES];
- FT_Bool is_darwin_vfs, vfs_rfork_has_no_font = FALSE; /* not tested */
-
- FT_Open_Args args2;
- FT_Stream stream2 = NULL;
-
-
- FT_Raccess_Guess( library, stream,
- args->pathname, file_names, offsets, errors );
-
- for ( i = 0; i < FT_RACCESS_N_RULES; i++ )
- {
- is_darwin_vfs = ft_raccess_rule_by_darwin_vfs( library, i );
- if ( is_darwin_vfs && vfs_rfork_has_no_font )
- {
- FT_TRACE3(( "Skip rule %d: darwin vfs resource fork"
- " is already checked and"
- " no font is found\n",
- i ));
- continue;
- }
-
- if ( errors[i] )
- {
- FT_TRACE3(( "Error 0x%x has occurred in rule %d\n",
- errors[i], i ));
- continue;
- }
-
- args2.flags = FT_OPEN_PATHNAME;
- args2.pathname = file_names[i] ? file_names[i] : args->pathname;
-
- FT_TRACE3(( "Try rule %d: %s (offset=%d) ...",
- i, args2.pathname, offsets[i] ));
-
- error = FT_Stream_New( library, &args2, &stream2 );
- if ( is_darwin_vfs && FT_ERR_EQ( error, Cannot_Open_Stream ) )
- vfs_rfork_has_no_font = TRUE;
-
- if ( error )
- {
- FT_TRACE3(( "failed\n" ));
- continue;
- }
-
- error = IsMacResource( library, stream2, offsets[i],
- face_index, aface );
- FT_Stream_Free( stream2, 0 );
-
- FT_TRACE3(( "%s\n", error ? "failed": "successful" ));
-
- if ( !error )
- break;
- else if ( is_darwin_vfs )
- vfs_rfork_has_no_font = TRUE;
- }
-
- for (i = 0; i < FT_RACCESS_N_RULES; i++)
- {
- if ( file_names[i] )
- FT_FREE( file_names[i] );
- }
-
- /* Caller (load_mac_face) requires FT_Err_Unknown_File_Format. */
- if ( error )
- error = FT_ERR( Unknown_File_Format );
-
- return error;
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_objs
-
- }
-
-
- /* Check for some macintosh formats without Carbon framework. */
- /* Is this a macbinary file? If so look at the resource fork. */
- /* Is this a mac dfont file? */
- /* Is this an old style resource fork? (in data) */
- /* Else call load_face_in_embedded_rfork to try extra rules */
- /* (defined in `ftrfork.c'). */
- /* */
- static FT_Error
- load_mac_face( FT_Library library,
- FT_Stream stream,
- FT_Long face_index,
- FT_Face *aface,
- const FT_Open_Args *args )
- {
- FT_Error error;
- FT_UNUSED( args );
-
-
- error = IsMacBinary( library, stream, face_index, aface );
- if ( FT_ERR_EQ( error, Unknown_File_Format ) )
- {
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_raccess
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE3(( "Try as dfont: " ));
- if ( !( args->flags & FT_OPEN_MEMORY ) )
- FT_TRACE3(( "%s ...", args->pathname ));
-#endif
-
- error = IsMacResource( library, stream, 0, face_index, aface );
-
- FT_TRACE3(( "%s\n", error ? "failed" : "successful" ));
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_objs
-
- }
-
- if ( ( FT_ERR_EQ( error, Unknown_File_Format ) ||
- FT_ERR_EQ( error, Invalid_Stream_Operation ) ) &&
- ( args->flags & FT_OPEN_PATHNAME ) )
- error = load_face_in_embedded_rfork( library, stream,
- face_index, aface, args );
- return error;
- }
-#endif
-
-#endif /* !FT_MACINTOSH && FT_CONFIG_OPTION_MAC_FONTS */
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Open_Face( FT_Library library,
- const FT_Open_Args* args,
- FT_Long face_index,
- FT_Face *aface )
- {
- return ft_open_face_internal( library, args, face_index, aface, 1 );
- }
-
-
- static FT_Error
- ft_open_face_internal( FT_Library library,
- const FT_Open_Args* args,
- FT_Long face_index,
- FT_Face *aface,
- FT_Bool test_mac_fonts )
- {
- FT_Error error;
- FT_Driver driver = NULL;
- FT_Memory memory = NULL;
- FT_Stream stream = NULL;
- FT_Face face = NULL;
- FT_ListNode node = NULL;
- FT_Bool external_stream;
- FT_Module* cur;
- FT_Module* limit;
-
-#ifndef FT_CONFIG_OPTION_MAC_FONTS
- FT_UNUSED( test_mac_fonts );
-#endif
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE3(( "FT_Open_Face: " ));
- if ( face_index < 0 )
- FT_TRACE3(( "Requesting number of faces and named instances\n"));
- else
- {
- FT_TRACE3(( "Requesting face %ld", face_index & 0xFFFFL ));
- if ( face_index & 0x7FFF0000L )
- FT_TRACE3(( ", named instance %ld", face_index >> 16 ));
- FT_TRACE3(( "\n" ));
- }
-#endif
-
- /* test for valid `library' delayed to `FT_Stream_New' */
-
- if ( ( !aface && face_index >= 0 ) || !args )
- return FT_THROW( Invalid_Argument );
-
- external_stream = FT_BOOL( ( args->flags & FT_OPEN_STREAM ) &&
- args->stream );
-
- /* create input stream */
- error = FT_Stream_New( library, args, &stream );
- if ( error )
- goto Fail3;
-
- memory = library->memory;
-
- /* If the font driver is specified in the `args' structure, use */
- /* it. Otherwise, we scan the list of registered drivers. */
- if ( ( args->flags & FT_OPEN_DRIVER ) && args->driver )
- {
- driver = FT_DRIVER( args->driver );
-
- /* not all modules are drivers, so check... */
- if ( FT_MODULE_IS_DRIVER( driver ) )
- {
- FT_Int num_params = 0;
- FT_Parameter* params = NULL;
-
-
- if ( args->flags & FT_OPEN_PARAMS )
- {
- num_params = args->num_params;
- params = args->params;
- }
-
- error = open_face( driver, &stream, external_stream, face_index,
- num_params, params, &face );
- if ( !error )
- goto Success;
- }
- else
- error = FT_THROW( Invalid_Handle );
-
- FT_Stream_Free( stream, external_stream );
- goto Fail;
- }
- else
- {
- error = FT_ERR( Missing_Module );
-
- /* check each font driver for an appropriate format */
- cur = library->modules;
- limit = cur + library->num_modules;
-
- for ( ; cur < limit; cur++ )
- {
- /* not all modules are font drivers, so check... */
- if ( FT_MODULE_IS_DRIVER( cur[0] ) )
- {
- FT_Int num_params = 0;
- FT_Parameter* params = NULL;
-
-
- driver = FT_DRIVER( cur[0] );
-
- if ( args->flags & FT_OPEN_PARAMS )
- {
- num_params = args->num_params;
- params = args->params;
- }
-
- error = open_face( driver, &stream, external_stream, face_index,
- num_params, params, &face );
- if ( !error )
- goto Success;
-
-#ifdef FT_CONFIG_OPTION_MAC_FONTS
- if ( test_mac_fonts &&
- ft_strcmp( cur[0]->clazz->module_name, "truetype" ) == 0 &&
- FT_ERR_EQ( error, Table_Missing ) )
- {
- /* TrueType but essential tables are missing */
- error = FT_Stream_Seek( stream, 0 );
- if ( error )
- break;
-
- error = open_face_PS_from_sfnt_stream( library,
- stream,
- face_index,
- num_params,
- params,
- aface );
- if ( !error )
- {
- FT_Stream_Free( stream, external_stream );
- return error;
- }
- }
-#endif
-
- if ( FT_ERR_NEQ( error, Unknown_File_Format ) )
- goto Fail3;
- }
- }
-
- Fail3:
- /* If we are on the mac, and we get an */
- /* FT_Err_Invalid_Stream_Operation it may be because we have an */
- /* empty data fork, so we need to check the resource fork. */
- if ( FT_ERR_NEQ( error, Cannot_Open_Stream ) &&
- FT_ERR_NEQ( error, Unknown_File_Format ) &&
- FT_ERR_NEQ( error, Invalid_Stream_Operation ) )
- goto Fail2;
-
-#if !defined( FT_MACINTOSH ) && defined( FT_CONFIG_OPTION_MAC_FONTS )
- if ( test_mac_fonts )
- {
- error = load_mac_face( library, stream, face_index, aface, args );
- if ( !error )
- {
- /* We don't want to go to Success here. We've already done */
- /* that. On the other hand, if we succeeded we still need to */
- /* close this stream (we opened a different stream which */
- /* extracted the interesting information out of this stream */
- /* here. That stream will still be open and the face will */
- /* point to it). */
- FT_Stream_Free( stream, external_stream );
- return error;
- }
- }
-
- if ( FT_ERR_NEQ( error, Unknown_File_Format ) )
- goto Fail2;
-#endif /* !FT_MACINTOSH && FT_CONFIG_OPTION_MAC_FONTS */
-
- /* no driver is able to handle this format */
- error = FT_THROW( Unknown_File_Format );
-
- Fail2:
- FT_Stream_Free( stream, external_stream );
- goto Fail;
- }
-
- Success:
- FT_TRACE4(( "FT_Open_Face: New face object, adding to list\n" ));
-
- /* add the face object to its driver's list */
- if ( FT_NEW( node ) )
- goto Fail;
-
- node->data = face;
- /* don't assume driver is the same as face->driver, so use */
- /* face->driver instead. */
- FT_List_Add( &face->driver->faces_list, node );
-
- /* now allocate a glyph slot object for the face */
- FT_TRACE4(( "FT_Open_Face: Creating glyph slot\n" ));
-
- if ( face_index >= 0 )
- {
- error = FT_New_GlyphSlot( face, NULL );
- if ( error )
- goto Fail;
-
- /* finally, allocate a size object for the face */
- {
- FT_Size size;
-
-
- FT_TRACE4(( "FT_Open_Face: Creating size object\n" ));
-
- error = FT_New_Size( face, &size );
- if ( error )
- goto Fail;
-
- face->size = size;
- }
- }
-
- /* some checks */
-
- if ( FT_IS_SCALABLE( face ) )
- {
- if ( face->height < 0 )
- face->height = (FT_Short)-face->height;
-
- if ( !FT_HAS_VERTICAL( face ) )
- face->max_advance_height = (FT_Short)face->height;
- }
-
- if ( FT_HAS_FIXED_SIZES( face ) )
- {
- FT_Int i;
-
-
- for ( i = 0; i < face->num_fixed_sizes; i++ )
- {
- FT_Bitmap_Size* bsize = face->available_sizes + i;
-
-
- if ( bsize->height < 0 )
- bsize->height = -bsize->height;
- if ( bsize->x_ppem < 0 )
- bsize->x_ppem = -bsize->x_ppem;
- if ( bsize->y_ppem < 0 )
- bsize->y_ppem = -bsize->y_ppem;
-
- /* check whether negation actually has worked */
- if ( bsize->height < 0 || bsize->x_ppem < 0 || bsize->y_ppem < 0 )
- {
- FT_TRACE0(( "FT_Open_Face:"
- " Invalid bitmap dimensions for strike %d,"
- " now disabled\n", i ));
- bsize->width = 0;
- bsize->height = 0;
- bsize->size = 0;
- bsize->x_ppem = 0;
- bsize->y_ppem = 0;
- }
- }
- }
-
- /* initialize internal face data */
- {
- FT_Face_Internal internal = face->internal;
-
-
- internal->transform_matrix.xx = 0x10000L;
- internal->transform_matrix.xy = 0;
- internal->transform_matrix.yx = 0;
- internal->transform_matrix.yy = 0x10000L;
-
- internal->transform_delta.x = 0;
- internal->transform_delta.y = 0;
-
- internal->refcount = 1;
-
- internal->no_stem_darkening = -1;
-
-#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
- ft_memset( internal->lcd_weights, 0, FT_LCD_FILTER_FIVE_TAPS );
-#endif
- }
-
- if ( aface )
- *aface = face;
- else
- FT_Done_Face( face );
-
- goto Exit;
-
- Fail:
- if ( node )
- FT_Done_Face( face ); /* face must be in the driver's list */
- else if ( face )
- destroy_face( memory, face, driver );
-
- Exit:
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !error && face_index < 0 )
- {
- FT_TRACE3(( "FT_Open_Face: The font has %ld face%s\n"
- " and %ld named instance%s for face %ld\n",
- face->num_faces,
- face->num_faces == 1 ? "" : "s",
- face->style_flags >> 16,
- ( face->style_flags >> 16 ) == 1 ? "" : "s",
- -face_index - 1 ));
- }
-#endif
-
- FT_TRACE4(( "FT_Open_Face: Return 0x%x\n", error ));
-
- return error;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Attach_File( FT_Face face,
- const char* filepathname )
- {
- FT_Open_Args open;
-
-
- /* test for valid `face' delayed to `FT_Attach_Stream' */
-
- if ( !filepathname )
- return FT_THROW( Invalid_Argument );
-
- open.stream = NULL;
- open.flags = FT_OPEN_PATHNAME;
- open.pathname = (char*)filepathname;
-
- return FT_Attach_Stream( face, &open );
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Attach_Stream( FT_Face face,
- FT_Open_Args* parameters )
- {
- FT_Stream stream;
- FT_Error error;
- FT_Driver driver;
-
- FT_Driver_Class clazz;
-
-
- /* test for valid `parameters' delayed to `FT_Stream_New' */
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- driver = face->driver;
- if ( !driver )
- return FT_THROW( Invalid_Driver_Handle );
-
- error = FT_Stream_New( driver->root.library, parameters, &stream );
- if ( error )
- goto Exit;
-
- /* we implement FT_Attach_Stream in each driver through the */
- /* `attach_file' interface */
-
- error = FT_ERR( Unimplemented_Feature );
- clazz = driver->clazz;
- if ( clazz->attach_file )
- error = clazz->attach_file( face, stream );
-
- /* close the attached stream */
- FT_Stream_Free( stream,
- (FT_Bool)( parameters->stream &&
- ( parameters->flags & FT_OPEN_STREAM ) ) );
-
- Exit:
- return error;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Reference_Face( FT_Face face )
- {
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- face->internal->refcount++;
-
- return FT_Err_Ok;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Done_Face( FT_Face face )
- {
- FT_Error error;
- FT_Driver driver;
- FT_Memory memory;
- FT_ListNode node;
-
-
- error = FT_ERR( Invalid_Face_Handle );
- if ( face && face->driver )
- {
- face->internal->refcount--;
- if ( face->internal->refcount > 0 )
- error = FT_Err_Ok;
- else
- {
- driver = face->driver;
- memory = driver->root.memory;
-
- /* find face in driver's list */
- node = FT_List_Find( &driver->faces_list, face );
- if ( node )
- {
- /* remove face object from the driver's list */
- FT_List_Remove( &driver->faces_list, node );
- FT_FREE( node );
-
- /* now destroy the object proper */
- destroy_face( memory, face, driver );
- error = FT_Err_Ok;
- }
- }
- }
-
- return error;
- }
-
-
- /* documentation is in ftobjs.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_New_Size( FT_Face face,
- FT_Size *asize )
- {
- FT_Error error;
- FT_Memory memory;
- FT_Driver driver;
- FT_Driver_Class clazz;
-
- FT_Size size = NULL;
- FT_ListNode node = NULL;
-
- FT_Size_Internal internal = NULL;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( !asize )
- return FT_THROW( Invalid_Argument );
-
- if ( !face->driver )
- return FT_THROW( Invalid_Driver_Handle );
-
- *asize = NULL;
-
- driver = face->driver;
- clazz = driver->clazz;
- memory = face->memory;
-
- /* Allocate new size object and perform basic initialisation */
- if ( FT_ALLOC( size, clazz->size_object_size ) || FT_NEW( node ) )
- goto Exit;
-
- size->face = face;
-
- if ( FT_NEW( internal ) )
- goto Exit;
-
- size->internal = internal;
-
- if ( clazz->init_size )
- error = clazz->init_size( size );
-
- /* in case of success, add to the face's list */
- if ( !error )
- {
- *asize = size;
- node->data = size;
- FT_List_Add( &face->sizes_list, node );
- }
-
- Exit:
- if ( error )
- {
- FT_FREE( node );
- FT_FREE( size );
- }
-
- return error;
- }
-
-
- /* documentation is in ftobjs.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Done_Size( FT_Size size )
- {
- FT_Error error;
- FT_Driver driver;
- FT_Memory memory;
- FT_Face face;
- FT_ListNode node;
-
-
- if ( !size )
- return FT_THROW( Invalid_Size_Handle );
-
- face = size->face;
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- driver = face->driver;
- if ( !driver )
- return FT_THROW( Invalid_Driver_Handle );
-
- memory = driver->root.memory;
-
- error = FT_Err_Ok;
- node = FT_List_Find( &face->sizes_list, size );
- if ( node )
- {
- FT_List_Remove( &face->sizes_list, node );
- FT_FREE( node );
-
- if ( face->size == size )
- {
- face->size = NULL;
- if ( face->sizes_list.head )
- face->size = (FT_Size)(face->sizes_list.head->data);
- }
-
- destroy_size( memory, size, driver );
- }
- else
- error = FT_THROW( Invalid_Size_Handle );
-
- return error;
- }
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( FT_Error )
- FT_Match_Size( FT_Face face,
- FT_Size_Request req,
- FT_Bool ignore_width,
- FT_ULong* size_index )
- {
- FT_Int i;
- FT_Long w, h;
-
-
- if ( !FT_HAS_FIXED_SIZES( face ) )
- return FT_THROW( Invalid_Face_Handle );
-
- /* FT_Bitmap_Size doesn't provide enough info... */
- if ( req->type != FT_SIZE_REQUEST_TYPE_NOMINAL )
- return FT_THROW( Unimplemented_Feature );
-
- w = FT_REQUEST_WIDTH ( req );
- h = FT_REQUEST_HEIGHT( req );
-
- if ( req->width && !req->height )
- h = w;
- else if ( !req->width && req->height )
- w = h;
-
- w = FT_PIX_ROUND( w );
- h = FT_PIX_ROUND( h );
-
- if ( !w || !h )
- return FT_THROW( Invalid_Pixel_Size );
-
- for ( i = 0; i < face->num_fixed_sizes; i++ )
- {
- FT_Bitmap_Size* bsize = face->available_sizes + i;
-
-
- if ( h != FT_PIX_ROUND( bsize->y_ppem ) )
- continue;
-
- if ( w == FT_PIX_ROUND( bsize->x_ppem ) || ignore_width )
- {
- FT_TRACE3(( "FT_Match_Size: bitmap strike %d matches\n", i ));
-
- if ( size_index )
- *size_index = (FT_ULong)i;
-
- return FT_Err_Ok;
- }
- }
-
- FT_TRACE3(( "FT_Match_Size: no matching bitmap strike\n" ));
-
- return FT_THROW( Invalid_Pixel_Size );
- }
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( void )
- ft_synthesize_vertical_metrics( FT_Glyph_Metrics* metrics,
- FT_Pos advance )
- {
- FT_Pos height = metrics->height;
-
-
- /* compensate for glyph with bbox above/below the baseline */
- if ( metrics->horiBearingY < 0 )
- {
- if ( height < metrics->horiBearingY )
- height = metrics->horiBearingY;
- }
- else if ( metrics->horiBearingY > 0 )
- height -= metrics->horiBearingY;
-
- /* the factor 1.2 is a heuristical value */
- if ( !advance )
- advance = height * 12 / 10;
-
- metrics->vertBearingX = metrics->horiBearingX - metrics->horiAdvance / 2;
- metrics->vertBearingY = ( advance - height ) / 2;
- metrics->vertAdvance = advance;
- }
-
-
- static void
- ft_recompute_scaled_metrics( FT_Face face,
- FT_Size_Metrics* metrics )
- {
- /* Compute root ascender, descender, test height, and max_advance */
-
-#ifdef GRID_FIT_METRICS
- metrics->ascender = FT_PIX_CEIL( FT_MulFix( face->ascender,
- metrics->y_scale ) );
-
- metrics->descender = FT_PIX_FLOOR( FT_MulFix( face->descender,
- metrics->y_scale ) );
-
- metrics->height = FT_PIX_ROUND( FT_MulFix( face->height,
- metrics->y_scale ) );
-
- metrics->max_advance = FT_PIX_ROUND( FT_MulFix( face->max_advance_width,
- metrics->x_scale ) );
-#else /* !GRID_FIT_METRICS */
- metrics->ascender = FT_MulFix( face->ascender,
- metrics->y_scale );
-
- metrics->descender = FT_MulFix( face->descender,
- metrics->y_scale );
-
- metrics->height = FT_MulFix( face->height,
- metrics->y_scale );
-
- metrics->max_advance = FT_MulFix( face->max_advance_width,
- metrics->x_scale );
-#endif /* !GRID_FIT_METRICS */
- }
-
-
- FT_BASE_DEF( void )
- FT_Select_Metrics( FT_Face face,
- FT_ULong strike_index )
- {
- FT_Size_Metrics* metrics;
- FT_Bitmap_Size* bsize;
-
-
- metrics = &face->size->metrics;
- bsize = face->available_sizes + strike_index;
-
- metrics->x_ppem = (FT_UShort)( ( bsize->x_ppem + 32 ) >> 6 );
- metrics->y_ppem = (FT_UShort)( ( bsize->y_ppem + 32 ) >> 6 );
-
- if ( FT_IS_SCALABLE( face ) )
- {
- metrics->x_scale = FT_DivFix( bsize->x_ppem,
- face->units_per_EM );
- metrics->y_scale = FT_DivFix( bsize->y_ppem,
- face->units_per_EM );
-
- ft_recompute_scaled_metrics( face, metrics );
- }
- else
- {
- metrics->x_scale = 1L << 16;
- metrics->y_scale = 1L << 16;
- metrics->ascender = bsize->y_ppem;
- metrics->descender = 0;
- metrics->height = bsize->height << 6;
- metrics->max_advance = bsize->x_ppem;
- }
-
- FT_TRACE5(( "FT_Select_Metrics:\n" ));
- FT_TRACE5(( " x scale: %d (%f)\n",
- metrics->x_scale, metrics->x_scale / 65536.0 ));
- FT_TRACE5(( " y scale: %d (%f)\n",
- metrics->y_scale, metrics->y_scale / 65536.0 ));
- FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
- FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
- FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
- FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
- FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
- FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
- }
-
-
- FT_BASE_DEF( void )
- FT_Request_Metrics( FT_Face face,
- FT_Size_Request req )
- {
- FT_Size_Metrics* metrics;
-
-
- metrics = &face->size->metrics;
-
- if ( FT_IS_SCALABLE( face ) )
- {
- FT_Long w = 0, h = 0, scaled_w = 0, scaled_h = 0;
-
-
- switch ( req->type )
- {
- case FT_SIZE_REQUEST_TYPE_NOMINAL:
- w = h = face->units_per_EM;
- break;
-
- case FT_SIZE_REQUEST_TYPE_REAL_DIM:
- w = h = face->ascender - face->descender;
- break;
-
- case FT_SIZE_REQUEST_TYPE_BBOX:
- w = face->bbox.xMax - face->bbox.xMin;
- h = face->bbox.yMax - face->bbox.yMin;
- break;
-
- case FT_SIZE_REQUEST_TYPE_CELL:
- w = face->max_advance_width;
- h = face->ascender - face->descender;
- break;
-
- case FT_SIZE_REQUEST_TYPE_SCALES:
- metrics->x_scale = (FT_Fixed)req->width;
- metrics->y_scale = (FT_Fixed)req->height;
- if ( !metrics->x_scale )
- metrics->x_scale = metrics->y_scale;
- else if ( !metrics->y_scale )
- metrics->y_scale = metrics->x_scale;
- goto Calculate_Ppem;
-
- case FT_SIZE_REQUEST_TYPE_MAX:
- break;
- }
-
- /* to be on the safe side */
- if ( w < 0 )
- w = -w;
-
- if ( h < 0 )
- h = -h;
-
- scaled_w = FT_REQUEST_WIDTH ( req );
- scaled_h = FT_REQUEST_HEIGHT( req );
-
- /* determine scales */
- if ( req->width )
- {
- metrics->x_scale = FT_DivFix( scaled_w, w );
-
- if ( req->height )
- {
- metrics->y_scale = FT_DivFix( scaled_h, h );
-
- if ( req->type == FT_SIZE_REQUEST_TYPE_CELL )
- {
- if ( metrics->y_scale > metrics->x_scale )
- metrics->y_scale = metrics->x_scale;
- else
- metrics->x_scale = metrics->y_scale;
- }
- }
- else
- {
- metrics->y_scale = metrics->x_scale;
- scaled_h = FT_MulDiv( scaled_w, h, w );
- }
- }
- else
- {
- metrics->x_scale = metrics->y_scale = FT_DivFix( scaled_h, h );
- scaled_w = FT_MulDiv( scaled_h, w, h );
- }
-
- Calculate_Ppem:
- /* calculate the ppems */
- if ( req->type != FT_SIZE_REQUEST_TYPE_NOMINAL )
- {
- scaled_w = FT_MulFix( face->units_per_EM, metrics->x_scale );
- scaled_h = FT_MulFix( face->units_per_EM, metrics->y_scale );
- }
-
- metrics->x_ppem = (FT_UShort)( ( scaled_w + 32 ) >> 6 );
- metrics->y_ppem = (FT_UShort)( ( scaled_h + 32 ) >> 6 );
-
- ft_recompute_scaled_metrics( face, metrics );
- }
- else
- {
- FT_ZERO( metrics );
- metrics->x_scale = 1L << 16;
- metrics->y_scale = 1L << 16;
- }
-
- FT_TRACE5(( "FT_Request_Metrics:\n" ));
- FT_TRACE5(( " x scale: %d (%f)\n",
- metrics->x_scale, metrics->x_scale / 65536.0 ));
- FT_TRACE5(( " y scale: %d (%f)\n",
- metrics->y_scale, metrics->y_scale / 65536.0 ));
- FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
- FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
- FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
- FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
- FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
- FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Select_Size( FT_Face face,
- FT_Int strike_index )
- {
- FT_Driver_Class clazz;
-
-
- if ( !face || !FT_HAS_FIXED_SIZES( face ) )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( strike_index < 0 || strike_index >= face->num_fixed_sizes )
- return FT_THROW( Invalid_Argument );
-
- clazz = face->driver->clazz;
-
- if ( clazz->select_size )
- {
- FT_Error error;
-
-
- error = clazz->select_size( face->size, (FT_ULong)strike_index );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- {
- FT_Size_Metrics* metrics = &face->size->metrics;
-
-
- FT_TRACE5(( "FT_Select_Size (font driver's `select_size'):\n" ));
- FT_TRACE5(( " x scale: %d (%f)\n",
- metrics->x_scale, metrics->x_scale / 65536.0 ));
- FT_TRACE5(( " y scale: %d (%f)\n",
- metrics->y_scale, metrics->y_scale / 65536.0 ));
- FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
- FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
- FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
- FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
- FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
- FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
- }
-#endif
-
- return error;
- }
-
- FT_Select_Metrics( face, (FT_ULong)strike_index );
-
- return FT_Err_Ok;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Request_Size( FT_Face face,
- FT_Size_Request req )
- {
- FT_Driver_Class clazz;
- FT_ULong strike_index;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( !req || req->width < 0 || req->height < 0 ||
- req->type >= FT_SIZE_REQUEST_TYPE_MAX )
- return FT_THROW( Invalid_Argument );
-
- /* signal the auto-hinter to recompute its size metrics */
- /* (if requested) */
- face->size->internal->autohint_metrics.x_scale = 0;
-
- clazz = face->driver->clazz;
-
- if ( clazz->request_size )
- {
- FT_Error error;
-
-
- error = clazz->request_size( face->size, req );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- {
- FT_Size_Metrics* metrics = &face->size->metrics;
-
-
- FT_TRACE5(( "FT_Request_Size (font driver's `request_size'):\n" ));
- FT_TRACE5(( " x scale: %d (%f)\n",
- metrics->x_scale, metrics->x_scale / 65536.0 ));
- FT_TRACE5(( " y scale: %d (%f)\n",
- metrics->y_scale, metrics->y_scale / 65536.0 ));
- FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
- FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
- FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
- FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
- FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
- FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
- }
-#endif
-
- return error;
- }
-
- /*
- * The reason that a driver doesn't have `request_size' defined is
- * either that the scaling here suffices or that the supported formats
- * are bitmap-only and size matching is not implemented.
- *
- * In the latter case, a simple size matching is done.
- */
- if ( !FT_IS_SCALABLE( face ) && FT_HAS_FIXED_SIZES( face ) )
- {
- FT_Error error;
-
-
- error = FT_Match_Size( face, req, 0, &strike_index );
- if ( error )
- return error;
-
- return FT_Select_Size( face, (FT_Int)strike_index );
- }
-
- FT_Request_Metrics( face, req );
-
- return FT_Err_Ok;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Set_Char_Size( FT_Face face,
- FT_F26Dot6 char_width,
- FT_F26Dot6 char_height,
- FT_UInt horz_resolution,
- FT_UInt vert_resolution )
- {
- FT_Size_RequestRec req;
-
-
- /* check of `face' delayed to `FT_Request_Size' */
-
- if ( !char_width )
- char_width = char_height;
- else if ( !char_height )
- char_height = char_width;
-
- if ( !horz_resolution )
- horz_resolution = vert_resolution;
- else if ( !vert_resolution )
- vert_resolution = horz_resolution;
-
- if ( char_width < 1 * 64 )
- char_width = 1 * 64;
- if ( char_height < 1 * 64 )
- char_height = 1 * 64;
-
- if ( !horz_resolution )
- horz_resolution = vert_resolution = 72;
-
- req.type = FT_SIZE_REQUEST_TYPE_NOMINAL;
- req.width = char_width;
- req.height = char_height;
- req.horiResolution = horz_resolution;
- req.vertResolution = vert_resolution;
-
- return FT_Request_Size( face, &req );
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Set_Pixel_Sizes( FT_Face face,
- FT_UInt pixel_width,
- FT_UInt pixel_height )
- {
- FT_Size_RequestRec req;
-
-
- /* check of `face' delayed to `FT_Request_Size' */
-
- if ( pixel_width == 0 )
- pixel_width = pixel_height;
- else if ( pixel_height == 0 )
- pixel_height = pixel_width;
-
- if ( pixel_width < 1 )
- pixel_width = 1;
- if ( pixel_height < 1 )
- pixel_height = 1;
-
- /* use `>=' to avoid potential compiler warning on 16bit platforms */
- if ( pixel_width >= 0xFFFFU )
- pixel_width = 0xFFFFU;
- if ( pixel_height >= 0xFFFFU )
- pixel_height = 0xFFFFU;
-
- req.type = FT_SIZE_REQUEST_TYPE_NOMINAL;
- req.width = (FT_Long)( pixel_width << 6 );
- req.height = (FT_Long)( pixel_height << 6 );
- req.horiResolution = 0;
- req.vertResolution = 0;
-
- return FT_Request_Size( face, &req );
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_Kerning( FT_Face face,
- FT_UInt left_glyph,
- FT_UInt right_glyph,
- FT_UInt kern_mode,
- FT_Vector *akerning )
- {
- FT_Error error = FT_Err_Ok;
- FT_Driver driver;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( !akerning )
- return FT_THROW( Invalid_Argument );
-
- driver = face->driver;
-
- akerning->x = 0;
- akerning->y = 0;
-
- if ( driver->clazz->get_kerning )
- {
- error = driver->clazz->get_kerning( face,
- left_glyph,
- right_glyph,
- akerning );
- if ( !error )
- {
- if ( kern_mode != FT_KERNING_UNSCALED )
- {
- akerning->x = FT_MulFix( akerning->x, face->size->metrics.x_scale );
- akerning->y = FT_MulFix( akerning->y, face->size->metrics.y_scale );
-
- if ( kern_mode != FT_KERNING_UNFITTED )
- {
- FT_Pos orig_x = akerning->x;
- FT_Pos orig_y = akerning->y;
-
-
- /* we scale down kerning values for small ppem values */
- /* to avoid that rounding makes them too big. */
- /* `25' has been determined heuristically. */
- if ( face->size->metrics.x_ppem < 25 )
- akerning->x = FT_MulDiv( orig_x,
- face->size->metrics.x_ppem, 25 );
- if ( face->size->metrics.y_ppem < 25 )
- akerning->y = FT_MulDiv( orig_y,
- face->size->metrics.y_ppem, 25 );
-
- akerning->x = FT_PIX_ROUND( akerning->x );
- akerning->y = FT_PIX_ROUND( akerning->y );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- {
- FT_Pos orig_x_rounded = FT_PIX_ROUND( orig_x );
- FT_Pos orig_y_rounded = FT_PIX_ROUND( orig_y );
-
-
- if ( akerning->x != orig_x_rounded ||
- akerning->y != orig_y_rounded )
- FT_TRACE5(( "FT_Get_Kerning: horizontal kerning"
- " (%d, %d) scaled down to (%d, %d) pixels\n",
- orig_x_rounded / 64, orig_y_rounded / 64,
- akerning->x / 64, akerning->y / 64 ));
- }
-#endif
- }
- }
- }
- }
-
- return error;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_Track_Kerning( FT_Face face,
- FT_Fixed point_size,
- FT_Int degree,
- FT_Fixed* akerning )
- {
- FT_Service_Kerning service;
- FT_Error error = FT_Err_Ok;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( !akerning )
- return FT_THROW( Invalid_Argument );
-
- FT_FACE_FIND_SERVICE( face, service, KERNING );
- if ( !service )
- return FT_THROW( Unimplemented_Feature );
-
- error = service->get_track( face,
- point_size,
- degree,
- akerning );
-
- return error;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Select_Charmap( FT_Face face,
- FT_Encoding encoding )
- {
- FT_CharMap* cur;
- FT_CharMap* limit;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( encoding == FT_ENCODING_NONE )
- return FT_THROW( Invalid_Argument );
-
- /* FT_ENCODING_UNICODE is special. We try to find the `best' Unicode */
- /* charmap available, i.e., one with UCS-4 characters, if possible. */
- /* */
- /* This is done by find_unicode_charmap() above, to share code. */
- if ( encoding == FT_ENCODING_UNICODE )
- return find_unicode_charmap( face );
-
- cur = face->charmaps;
- if ( !cur )
- return FT_THROW( Invalid_CharMap_Handle );
-
- limit = cur + face->num_charmaps;
-
- for ( ; cur < limit; cur++ )
- {
- if ( cur[0]->encoding == encoding )
- {
- face->charmap = cur[0];
- return 0;
- }
- }
-
- return FT_THROW( Invalid_Argument );
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Set_Charmap( FT_Face face,
- FT_CharMap charmap )
- {
- FT_CharMap* cur;
- FT_CharMap* limit;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- cur = face->charmaps;
- if ( !cur || !charmap )
- return FT_THROW( Invalid_CharMap_Handle );
-
- if ( FT_Get_CMap_Format( charmap ) == 14 )
- return FT_THROW( Invalid_Argument );
-
- limit = cur + face->num_charmaps;
-
- for ( ; cur < limit; cur++ )
- {
- if ( cur[0] == charmap )
- {
- face->charmap = cur[0];
- return FT_Err_Ok;
- }
- }
-
- return FT_THROW( Invalid_Argument );
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Int )
- FT_Get_Charmap_Index( FT_CharMap charmap )
- {
- FT_Int i;
-
-
- if ( !charmap || !charmap->face )
- return -1;
-
- for ( i = 0; i < charmap->face->num_charmaps; i++ )
- if ( charmap->face->charmaps[i] == charmap )
- break;
-
- FT_ASSERT( i < charmap->face->num_charmaps );
-
- return i;
- }
-
-
- static void
- ft_cmap_done_internal( FT_CMap cmap )
- {
- FT_CMap_Class clazz = cmap->clazz;
- FT_Face face = cmap->charmap.face;
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- if ( clazz->done )
- clazz->done( cmap );
-
- FT_FREE( cmap );
- }
-
-
- FT_BASE_DEF( void )
- FT_CMap_Done( FT_CMap cmap )
- {
- if ( cmap )
- {
- FT_Face face = cmap->charmap.face;
- FT_Memory memory = FT_FACE_MEMORY( face );
- FT_Error error;
- FT_Int i, j;
-
-
- for ( i = 0; i < face->num_charmaps; i++ )
- {
- if ( (FT_CMap)face->charmaps[i] == cmap )
- {
- FT_CharMap last_charmap = face->charmaps[face->num_charmaps - 1];
-
-
- if ( FT_RENEW_ARRAY( face->charmaps,
- face->num_charmaps,
- face->num_charmaps - 1 ) )
- return;
-
- /* remove it from our list of charmaps */
- for ( j = i + 1; j < face->num_charmaps; j++ )
- {
- if ( j == face->num_charmaps - 1 )
- face->charmaps[j - 1] = last_charmap;
- else
- face->charmaps[j - 1] = face->charmaps[j];
- }
-
- face->num_charmaps--;
-
- if ( (FT_CMap)face->charmap == cmap )
- face->charmap = NULL;
-
- ft_cmap_done_internal( cmap );
-
- break;
- }
- }
- }
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_CMap_New( FT_CMap_Class clazz,
- FT_Pointer init_data,
- FT_CharMap charmap,
- FT_CMap *acmap )
- {
- FT_Error error = FT_Err_Ok;
- FT_Face face;
- FT_Memory memory;
- FT_CMap cmap = NULL;
-
-
- if ( !clazz || !charmap || !charmap->face )
- return FT_THROW( Invalid_Argument );
-
- face = charmap->face;
- memory = FT_FACE_MEMORY( face );
-
- if ( !FT_ALLOC( cmap, clazz->size ) )
- {
- cmap->charmap = *charmap;
- cmap->clazz = clazz;
-
- if ( clazz->init )
- {
- error = clazz->init( cmap, init_data );
- if ( error )
- goto Fail;
- }
-
- /* add it to our list of charmaps */
- if ( FT_RENEW_ARRAY( face->charmaps,
- face->num_charmaps,
- face->num_charmaps + 1 ) )
- goto Fail;
-
- face->charmaps[face->num_charmaps++] = (FT_CharMap)cmap;
- }
-
- Exit:
- if ( acmap )
- *acmap = cmap;
-
- return error;
-
- Fail:
- ft_cmap_done_internal( cmap );
- cmap = NULL;
- goto Exit;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_UInt )
- FT_Get_Char_Index( FT_Face face,
- FT_ULong charcode )
- {
- FT_UInt result = 0;
-
-
- if ( face && face->charmap )
- {
- FT_CMap cmap = FT_CMAP( face->charmap );
-
-
- if ( charcode > 0xFFFFFFFFUL )
- {
- FT_TRACE1(( "FT_Get_Char_Index: too large charcode" ));
- FT_TRACE1(( " 0x%x is truncated\n", charcode ));
- }
-
- result = cmap->clazz->char_index( cmap, (FT_UInt32)charcode );
- if ( result >= (FT_UInt)face->num_glyphs )
- result = 0;
- }
-
- return result;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_ULong )
- FT_Get_First_Char( FT_Face face,
- FT_UInt *agindex )
- {
- FT_ULong result = 0;
- FT_UInt gindex = 0;
-
-
- /* only do something if we have a charmap, and we have glyphs at all */
- if ( face && face->charmap && face->num_glyphs )
- {
- gindex = FT_Get_Char_Index( face, 0 );
- if ( gindex == 0 )
- result = FT_Get_Next_Char( face, 0, &gindex );
- }
-
- if ( agindex )
- *agindex = gindex;
-
- return result;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_ULong )
- FT_Get_Next_Char( FT_Face face,
- FT_ULong charcode,
- FT_UInt *agindex )
- {
- FT_ULong result = 0;
- FT_UInt gindex = 0;
-
-
- if ( face && face->charmap && face->num_glyphs )
- {
- FT_UInt32 code = (FT_UInt32)charcode;
- FT_CMap cmap = FT_CMAP( face->charmap );
-
-
- do
- {
- gindex = cmap->clazz->char_next( cmap, &code );
-
- } while ( gindex >= (FT_UInt)face->num_glyphs );
-
- result = ( gindex == 0 ) ? 0 : code;
- }
-
- if ( agindex )
- *agindex = gindex;
-
- return result;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Face_Properties( FT_Face face,
- FT_UInt num_properties,
- FT_Parameter* properties )
- {
- FT_Error error = FT_Err_Ok;
-
-
- if ( num_properties > 0 && !properties )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- for ( ; num_properties > 0; num_properties-- )
- {
- if ( properties->tag == FT_PARAM_TAG_STEM_DARKENING )
- {
- if ( properties->data )
- {
- if ( *( (FT_Bool*)properties->data ) == TRUE )
- face->internal->no_stem_darkening = FALSE;
- else
- face->internal->no_stem_darkening = TRUE;
- }
- else
- {
- /* use module default */
- face->internal->no_stem_darkening = -1;
- }
- }
- else if ( properties->tag == FT_PARAM_TAG_LCD_FILTER_WEIGHTS )
- {
-#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
- if ( properties->data )
- ft_memcpy( face->internal->lcd_weights,
- properties->data,
- FT_LCD_FILTER_FIVE_TAPS );
- else
- {
- /* Value NULL indicates `no custom weights, use library */
- /* defaults', signaled by filling the weight field with zeros. */
- ft_memset( face->internal->lcd_weights,
- 0,
- FT_LCD_FILTER_FIVE_TAPS );
- }
-#else
- error = FT_THROW( Unimplemented_Feature );
- goto Exit;
-#endif
- }
- else if ( properties->tag == FT_PARAM_TAG_RANDOM_SEED )
- {
- if ( properties->data )
- {
- face->internal->random_seed = *( (FT_Int32*)properties->data );
- if ( face->internal->random_seed < 0 )
- face->internal->random_seed = 0;
- }
- else
- {
- /* use module default */
- face->internal->random_seed = -1;
- }
- }
- else
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- if ( error )
- break;
-
- properties++;
- }
-
- Exit:
- return error;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_UInt )
- FT_Face_GetCharVariantIndex( FT_Face face,
- FT_ULong charcode,
- FT_ULong variantSelector )
- {
- FT_UInt result = 0;
-
-
- if ( face &&
- face->charmap &&
- face->charmap->encoding == FT_ENCODING_UNICODE )
- {
- FT_CharMap charmap = find_variant_selector_charmap( face );
- FT_CMap ucmap = FT_CMAP( face->charmap );
-
-
- if ( charmap )
- {
- FT_CMap vcmap = FT_CMAP( charmap );
-
-
- if ( charcode > 0xFFFFFFFFUL )
- {
- FT_TRACE1(( "FT_Face_GetCharVariantIndex:"
- " too large charcode" ));
- FT_TRACE1(( " 0x%x is truncated\n", charcode ));
- }
- if ( variantSelector > 0xFFFFFFFFUL )
- {
- FT_TRACE1(( "FT_Face_GetCharVariantIndex:"
- " too large variantSelector" ));
- FT_TRACE1(( " 0x%x is truncated\n", variantSelector ));
- }
-
- result = vcmap->clazz->char_var_index( vcmap, ucmap,
- (FT_UInt32)charcode,
- (FT_UInt32)variantSelector );
- }
- }
-
- return result;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Int )
- FT_Face_GetCharVariantIsDefault( FT_Face face,
- FT_ULong charcode,
- FT_ULong variantSelector )
- {
- FT_Int result = -1;
-
-
- if ( face )
- {
- FT_CharMap charmap = find_variant_selector_charmap( face );
-
-
- if ( charmap )
- {
- FT_CMap vcmap = FT_CMAP( charmap );
-
-
- if ( charcode > 0xFFFFFFFFUL )
- {
- FT_TRACE1(( "FT_Face_GetCharVariantIsDefault:"
- " too large charcode" ));
- FT_TRACE1(( " 0x%x is truncated\n", charcode ));
- }
- if ( variantSelector > 0xFFFFFFFFUL )
- {
- FT_TRACE1(( "FT_Face_GetCharVariantIsDefault:"
- " too large variantSelector" ));
- FT_TRACE1(( " 0x%x is truncated\n", variantSelector ));
- }
-
- result = vcmap->clazz->char_var_default( vcmap,
- (FT_UInt32)charcode,
- (FT_UInt32)variantSelector );
- }
- }
-
- return result;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_UInt32* )
- FT_Face_GetVariantSelectors( FT_Face face )
- {
- FT_UInt32 *result = NULL;
-
-
- if ( face )
- {
- FT_CharMap charmap = find_variant_selector_charmap( face );
-
-
- if ( charmap )
- {
- FT_CMap vcmap = FT_CMAP( charmap );
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- result = vcmap->clazz->variant_list( vcmap, memory );
- }
- }
-
- return result;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_UInt32* )
- FT_Face_GetVariantsOfChar( FT_Face face,
- FT_ULong charcode )
- {
- FT_UInt32 *result = NULL;
-
-
- if ( face )
- {
- FT_CharMap charmap = find_variant_selector_charmap( face );
-
-
- if ( charmap )
- {
- FT_CMap vcmap = FT_CMAP( charmap );
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- if ( charcode > 0xFFFFFFFFUL )
- {
- FT_TRACE1(( "FT_Face_GetVariantsOfChar: too large charcode" ));
- FT_TRACE1(( " 0x%x is truncated\n", charcode ));
- }
-
- result = vcmap->clazz->charvariant_list( vcmap, memory,
- (FT_UInt32)charcode );
- }
- }
- return result;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_UInt32* )
- FT_Face_GetCharsOfVariant( FT_Face face,
- FT_ULong variantSelector )
- {
- FT_UInt32 *result = NULL;
-
-
- if ( face )
- {
- FT_CharMap charmap = find_variant_selector_charmap( face );
-
-
- if ( charmap )
- {
- FT_CMap vcmap = FT_CMAP( charmap );
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- if ( variantSelector > 0xFFFFFFFFUL )
- {
- FT_TRACE1(( "FT_Get_Char_Index: too large variantSelector" ));
- FT_TRACE1(( " 0x%x is truncated\n", variantSelector ));
- }
-
- result = vcmap->clazz->variantchar_list( vcmap, memory,
- (FT_UInt32)variantSelector );
- }
- }
-
- return result;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_UInt )
- FT_Get_Name_Index( FT_Face face,
- FT_String* glyph_name )
- {
- FT_UInt result = 0;
-
-
- if ( face &&
- FT_HAS_GLYPH_NAMES( face ) &&
- glyph_name )
- {
- FT_Service_GlyphDict service;
-
-
- FT_FACE_LOOKUP_SERVICE( face,
- service,
- GLYPH_DICT );
-
- if ( service && service->name_index )
- result = service->name_index( face, glyph_name );
- }
-
- return result;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_Glyph_Name( FT_Face face,
- FT_UInt glyph_index,
- FT_Pointer buffer,
- FT_UInt buffer_max )
- {
- FT_Error error;
- FT_Service_GlyphDict service;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( !buffer || buffer_max == 0 )
- return FT_THROW( Invalid_Argument );
-
- /* clean up buffer */
- ((FT_Byte*)buffer)[0] = '\0';
-
- if ( (FT_Long)glyph_index >= face->num_glyphs )
- return FT_THROW( Invalid_Glyph_Index );
-
- if ( !FT_HAS_GLYPH_NAMES( face ) )
- return FT_THROW( Invalid_Argument );
-
- FT_FACE_LOOKUP_SERVICE( face, service, GLYPH_DICT );
- if ( service && service->get_name )
- error = service->get_name( face, glyph_index, buffer, buffer_max );
- else
- error = FT_THROW( Invalid_Argument );
-
- return error;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( const char* )
- FT_Get_Postscript_Name( FT_Face face )
- {
- const char* result = NULL;
-
-
- if ( !face )
- goto Exit;
-
- if ( !result )
- {
- FT_Service_PsFontName service;
-
-
- FT_FACE_LOOKUP_SERVICE( face,
- service,
- POSTSCRIPT_FONT_NAME );
-
- if ( service && service->get_ps_font_name )
- result = service->get_ps_font_name( face );
- }
-
- Exit:
- return result;
- }
-
-
- /* documentation is in tttables.h */
-
- FT_EXPORT_DEF( void* )
- FT_Get_Sfnt_Table( FT_Face face,
- FT_Sfnt_Tag tag )
- {
- void* table = NULL;
- FT_Service_SFNT_Table service;
-
-
- if ( face && FT_IS_SFNT( face ) )
- {
- FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE );
- if ( service )
- table = service->get_table( face, tag );
- }
-
- return table;
- }
-
-
- /* documentation is in tttables.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Load_Sfnt_Table( FT_Face face,
- FT_ULong tag,
- FT_Long offset,
- FT_Byte* buffer,
- FT_ULong* length )
- {
- FT_Service_SFNT_Table service;
-
-
- if ( !face || !FT_IS_SFNT( face ) )
- return FT_THROW( Invalid_Face_Handle );
-
- FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE );
- if ( !service )
- return FT_THROW( Unimplemented_Feature );
-
- return service->load_table( face, tag, offset, buffer, length );
- }
-
-
- /* documentation is in tttables.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Sfnt_Table_Info( FT_Face face,
- FT_UInt table_index,
- FT_ULong *tag,
- FT_ULong *length )
- {
- FT_Service_SFNT_Table service;
- FT_ULong offset;
-
-
- /* test for valid `length' delayed to `service->table_info' */
-
- if ( !face || !FT_IS_SFNT( face ) )
- return FT_THROW( Invalid_Face_Handle );
-
- FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE );
- if ( !service )
- return FT_THROW( Unimplemented_Feature );
-
- return service->table_info( face, table_index, tag, &offset, length );
- }
-
-
- /* documentation is in tttables.h */
-
- FT_EXPORT_DEF( FT_ULong )
- FT_Get_CMap_Language_ID( FT_CharMap charmap )
- {
- FT_Service_TTCMaps service;
- FT_Face face;
- TT_CMapInfo cmap_info;
-
-
- if ( !charmap || !charmap->face )
- return 0;
-
- face = charmap->face;
- FT_FACE_FIND_SERVICE( face, service, TT_CMAP );
- if ( !service )
- return 0;
- if ( service->get_cmap_info( charmap, &cmap_info ))
- return 0;
-
- return cmap_info.language;
- }
-
-
- /* documentation is in tttables.h */
-
- FT_EXPORT_DEF( FT_Long )
- FT_Get_CMap_Format( FT_CharMap charmap )
- {
- FT_Service_TTCMaps service;
- FT_Face face;
- TT_CMapInfo cmap_info;
-
-
- if ( !charmap || !charmap->face )
- return -1;
-
- face = charmap->face;
- FT_FACE_FIND_SERVICE( face, service, TT_CMAP );
- if ( !service )
- return -1;
- if ( service->get_cmap_info( charmap, &cmap_info ))
- return -1;
-
- return cmap_info.format;
- }
-
-
- /* documentation is in ftsizes.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Activate_Size( FT_Size size )
- {
- FT_Face face;
-
-
- if ( !size )
- return FT_THROW( Invalid_Size_Handle );
-
- face = size->face;
- if ( !face || !face->driver )
- return FT_THROW( Invalid_Face_Handle );
-
- /* we don't need anything more complex than that; all size objects */
- /* are already listed by the face */
- face->size = size;
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** R E N D E R E R S ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- /* lookup a renderer by glyph format in the library's list */
- FT_BASE_DEF( FT_Renderer )
- FT_Lookup_Renderer( FT_Library library,
- FT_Glyph_Format format,
- FT_ListNode* node )
- {
- FT_ListNode cur;
- FT_Renderer result = NULL;
-
-
- if ( !library )
- goto Exit;
-
- cur = library->renderers.head;
-
- if ( node )
- {
- if ( *node )
- cur = (*node)->next;
- *node = NULL;
- }
-
- while ( cur )
- {
- FT_Renderer renderer = FT_RENDERER( cur->data );
-
-
- if ( renderer->glyph_format == format )
- {
- if ( node )
- *node = cur;
-
- result = renderer;
- break;
- }
- cur = cur->next;
- }
-
- Exit:
- return result;
- }
-
-
- static FT_Renderer
- ft_lookup_glyph_renderer( FT_GlyphSlot slot )
- {
- FT_Face face = slot->face;
- FT_Library library = FT_FACE_LIBRARY( face );
- FT_Renderer result = library->cur_renderer;
-
-
- if ( !result || result->glyph_format != slot->format )
- result = FT_Lookup_Renderer( library, slot->format, 0 );
-
- return result;
- }
-
-
- static void
- ft_set_current_renderer( FT_Library library )
- {
- FT_Renderer renderer;
-
-
- renderer = FT_Lookup_Renderer( library, FT_GLYPH_FORMAT_OUTLINE, 0 );
- library->cur_renderer = renderer;
- }
-
-
- static FT_Error
- ft_add_renderer( FT_Module module )
- {
- FT_Library library = module->library;
- FT_Memory memory = library->memory;
- FT_Error error;
- FT_ListNode node = NULL;
-
-
- if ( FT_NEW( node ) )
- goto Exit;
-
- {
- FT_Renderer render = FT_RENDERER( module );
- FT_Renderer_Class* clazz = (FT_Renderer_Class*)module->clazz;
-
-
- render->clazz = clazz;
- render->glyph_format = clazz->glyph_format;
-
- /* allocate raster object if needed */
- if ( clazz->glyph_format == FT_GLYPH_FORMAT_OUTLINE &&
- clazz->raster_class->raster_new )
- {
- error = clazz->raster_class->raster_new( memory, &render->raster );
- if ( error )
- goto Fail;
-
- render->raster_render = clazz->raster_class->raster_render;
- render->render = clazz->render_glyph;
- }
-
- /* add to list */
- node->data = module;
- FT_List_Add( &library->renderers, node );
-
- ft_set_current_renderer( library );
- }
-
- Fail:
- if ( error )
- FT_FREE( node );
-
- Exit:
- return error;
- }
-
-
- static void
- ft_remove_renderer( FT_Module module )
- {
- FT_Library library;
- FT_Memory memory;
- FT_ListNode node;
-
-
- library = module->library;
- if ( !library )
- return;
-
- memory = library->memory;
-
- node = FT_List_Find( &library->renderers, module );
- if ( node )
- {
- FT_Renderer render = FT_RENDERER( module );
-
-
- /* release raster object, if any */
- if ( render->clazz->glyph_format == FT_GLYPH_FORMAT_OUTLINE &&
- render->raster )
- render->clazz->raster_class->raster_done( render->raster );
-
- /* remove from list */
- FT_List_Remove( &library->renderers, node );
- FT_FREE( node );
-
- ft_set_current_renderer( library );
- }
- }
-
-
- /* documentation is in ftrender.h */
-
- FT_EXPORT_DEF( FT_Renderer )
- FT_Get_Renderer( FT_Library library,
- FT_Glyph_Format format )
- {
- /* test for valid `library' delayed to `FT_Lookup_Renderer' */
-
- return FT_Lookup_Renderer( library, format, 0 );
- }
-
-
- /* documentation is in ftrender.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Set_Renderer( FT_Library library,
- FT_Renderer renderer,
- FT_UInt num_params,
- FT_Parameter* parameters )
- {
- FT_ListNode node;
- FT_Error error = FT_Err_Ok;
-
- FT_Renderer_SetModeFunc set_mode;
-
-
- if ( !library )
- {
- error = FT_THROW( Invalid_Library_Handle );
- goto Exit;
- }
-
- if ( !renderer )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- if ( num_params > 0 && !parameters )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- node = FT_List_Find( &library->renderers, renderer );
- if ( !node )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- FT_List_Up( &library->renderers, node );
-
- if ( renderer->glyph_format == FT_GLYPH_FORMAT_OUTLINE )
- library->cur_renderer = renderer;
-
- set_mode = renderer->clazz->set_mode;
-
- for ( ; num_params > 0; num_params-- )
- {
- error = set_mode( renderer, parameters->tag, parameters->data );
- if ( error )
- break;
- parameters++;
- }
-
- Exit:
- return error;
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Render_Glyph_Internal( FT_Library library,
- FT_GlyphSlot slot,
- FT_Render_Mode render_mode )
- {
- FT_Error error = FT_Err_Ok;
- FT_Renderer renderer;
-
-
- /* if it is already a bitmap, no need to do anything */
- switch ( slot->format )
- {
- case FT_GLYPH_FORMAT_BITMAP: /* already a bitmap, don't do anything */
- break;
-
- default:
- {
- FT_ListNode node = NULL;
-
-
- /* small shortcut for the very common case */
- if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
- {
- renderer = library->cur_renderer;
- node = library->renderers.head;
- }
- else
- renderer = FT_Lookup_Renderer( library, slot->format, &node );
-
- error = FT_ERR( Unimplemented_Feature );
- while ( renderer )
- {
- error = renderer->render( renderer, slot, render_mode, NULL );
- if ( !error ||
- FT_ERR_NEQ( error, Cannot_Render_Glyph ) )
- break;
-
- /* FT_Err_Cannot_Render_Glyph is returned if the render mode */
- /* is unsupported by the current renderer for this glyph image */
- /* format. */
-
- /* now, look for another renderer that supports the same */
- /* format. */
- renderer = FT_Lookup_Renderer( library, slot->format, &node );
- }
- }
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_bitmap
-
- /*
- * Computing the MD5 checksum is expensive, unnecessarily distorting a
- * possible profiling of FreeType if compiled with tracing support. For
- * this reason, we execute the following code only if explicitly
- * requested.
- */
-
- /* we use FT_TRACE3 in this block */
- if ( ft_trace_levels[trace_bitmap] >= 3 )
- {
- /* we convert to a single bitmap format for computing the checksum */
- if ( !error && slot->bitmap.buffer )
- {
- FT_Bitmap bitmap;
- FT_Error err;
-
-
- FT_Bitmap_Init( &bitmap );
-
- /* this also converts the bitmap flow to `down' (i.e., pitch > 0) */
- err = FT_Bitmap_Convert( library, &slot->bitmap, &bitmap, 1 );
- if ( !err )
- {
- MD5_CTX ctx;
- unsigned char md5[16];
- int i;
- unsigned int rows = bitmap.rows;
- unsigned int pitch = (unsigned int)bitmap.pitch;
-
-
- MD5_Init( &ctx );
- if ( bitmap.buffer )
- MD5_Update( &ctx, bitmap.buffer, rows * pitch );
- MD5_Final( md5, &ctx );
-
- FT_TRACE3(( "MD5 checksum for %dx%d bitmap:\n"
- " ",
- rows, pitch ));
- for ( i = 0; i < 16; i++ )
- FT_TRACE3(( "%02X", md5[i] ));
- FT_TRACE3(( "\n" ));
- }
-
- FT_Bitmap_Done( library, &bitmap );
- }
- }
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_objs
-
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
- return error;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Render_Glyph( FT_GlyphSlot slot,
- FT_Render_Mode render_mode )
- {
- FT_Library library;
-
-
- if ( !slot || !slot->face )
- return FT_THROW( Invalid_Argument );
-
- library = FT_FACE_LIBRARY( slot->face );
-
- return FT_Render_Glyph_Internal( library, slot, render_mode );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** M O D U L E S ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Destroy_Module */
- /* */
- /* <Description> */
- /* Destroys a given module object. For drivers, this also destroys */
- /* all child faces. */
- /* */
- /* <InOut> */
- /* module :: A handle to the target driver object. */
- /* */
- /* <Note> */
- /* The driver _must_ be LOCKED! */
- /* */
- static void
- Destroy_Module( FT_Module module )
- {
- FT_Memory memory = module->memory;
- FT_Module_Class* clazz = module->clazz;
- FT_Library library = module->library;
-
-
- if ( library && library->auto_hinter == module )
- library->auto_hinter = NULL;
-
- /* if the module is a renderer */
- if ( FT_MODULE_IS_RENDERER( module ) )
- ft_remove_renderer( module );
-
- /* if the module is a font driver, add some steps */
- if ( FT_MODULE_IS_DRIVER( module ) )
- Destroy_Driver( FT_DRIVER( module ) );
-
- /* finalize the module object */
- if ( clazz->module_done )
- clazz->module_done( module );
-
- /* discard it */
- FT_FREE( module );
- }
-
-
- /* documentation is in ftmodapi.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Add_Module( FT_Library library,
- const FT_Module_Class* clazz )
- {
- FT_Error error;
- FT_Memory memory;
- FT_Module module = NULL;
- FT_UInt nn;
-
-
-#define FREETYPE_VER_FIXED ( ( (FT_Long)FREETYPE_MAJOR << 16 ) | \
- FREETYPE_MINOR )
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- if ( !clazz )
- return FT_THROW( Invalid_Argument );
-
- /* check freetype version */
- if ( clazz->module_requires > FREETYPE_VER_FIXED )
- return FT_THROW( Invalid_Version );
-
- /* look for a module with the same name in the library's table */
- for ( nn = 0; nn < library->num_modules; nn++ )
- {
- module = library->modules[nn];
- if ( ft_strcmp( module->clazz->module_name, clazz->module_name ) == 0 )
- {
- /* this installed module has the same name, compare their versions */
- if ( clazz->module_version <= module->clazz->module_version )
- return FT_THROW( Lower_Module_Version );
-
- /* remove the module from our list, then exit the loop to replace */
- /* it by our new version.. */
- FT_Remove_Module( library, module );
- break;
- }
- }
-
- memory = library->memory;
- error = FT_Err_Ok;
-
- if ( library->num_modules >= FT_MAX_MODULES )
- {
- error = FT_THROW( Too_Many_Drivers );
- goto Exit;
- }
-
- /* allocate module object */
- if ( FT_ALLOC( module, clazz->module_size ) )
- goto Exit;
-
- /* base initialization */
- module->library = library;
- module->memory = memory;
- module->clazz = (FT_Module_Class*)clazz;
-
- /* check whether the module is a renderer - this must be performed */
- /* before the normal module initialization */
- if ( FT_MODULE_IS_RENDERER( module ) )
- {
- /* add to the renderers list */
- error = ft_add_renderer( module );
- if ( error )
- goto Fail;
- }
-
- /* is the module a auto-hinter? */
- if ( FT_MODULE_IS_HINTER( module ) )
- library->auto_hinter = module;
-
- /* if the module is a font driver */
- if ( FT_MODULE_IS_DRIVER( module ) )
- {
- FT_Driver driver = FT_DRIVER( module );
-
-
- driver->clazz = (FT_Driver_Class)module->clazz;
- }
-
- if ( clazz->module_init )
- {
- error = clazz->module_init( module );
- if ( error )
- goto Fail;
- }
-
- /* add module to the library's table */
- library->modules[library->num_modules++] = module;
-
- Exit:
- return error;
-
- Fail:
- if ( FT_MODULE_IS_RENDERER( module ) )
- {
- FT_Renderer renderer = FT_RENDERER( module );
-
-
- if ( renderer->clazz &&
- renderer->clazz->glyph_format == FT_GLYPH_FORMAT_OUTLINE &&
- renderer->raster )
- renderer->clazz->raster_class->raster_done( renderer->raster );
- }
-
- FT_FREE( module );
- goto Exit;
- }
-
-
- /* documentation is in ftmodapi.h */
-
- FT_EXPORT_DEF( FT_Module )
- FT_Get_Module( FT_Library library,
- const char* module_name )
- {
- FT_Module result = NULL;
- FT_Module* cur;
- FT_Module* limit;
-
-
- if ( !library || !module_name )
- return result;
-
- cur = library->modules;
- limit = cur + library->num_modules;
-
- for ( ; cur < limit; cur++ )
- if ( ft_strcmp( cur[0]->clazz->module_name, module_name ) == 0 )
- {
- result = cur[0];
- break;
- }
-
- return result;
- }
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( const void* )
- FT_Get_Module_Interface( FT_Library library,
- const char* mod_name )
- {
- FT_Module module;
-
-
- /* test for valid `library' delayed to FT_Get_Module() */
-
- module = FT_Get_Module( library, mod_name );
-
- return module ? module->clazz->module_interface : 0;
- }
-
-
- FT_BASE_DEF( FT_Pointer )
- ft_module_get_service( FT_Module module,
- const char* service_id,
- FT_Bool global )
- {
- FT_Pointer result = NULL;
-
-
- if ( module )
- {
- FT_ASSERT( module->clazz && module->clazz->get_interface );
-
- /* first, look for the service in the module */
- if ( module->clazz->get_interface )
- result = module->clazz->get_interface( module, service_id );
-
- if ( global && !result )
- {
- /* we didn't find it, look in all other modules then */
- FT_Library library = module->library;
- FT_Module* cur = library->modules;
- FT_Module* limit = cur + library->num_modules;
-
-
- for ( ; cur < limit; cur++ )
- {
- if ( cur[0] != module )
- {
- FT_ASSERT( cur[0]->clazz );
-
- if ( cur[0]->clazz->get_interface )
- {
- result = cur[0]->clazz->get_interface( cur[0], service_id );
- if ( result )
- break;
- }
- }
- }
- }
- }
-
- return result;
- }
-
-
- /* documentation is in ftmodapi.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Remove_Module( FT_Library library,
- FT_Module module )
- {
- /* try to find the module from the table, then remove it from there */
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- if ( module )
- {
- FT_Module* cur = library->modules;
- FT_Module* limit = cur + library->num_modules;
-
-
- for ( ; cur < limit; cur++ )
- {
- if ( cur[0] == module )
- {
- /* remove it from the table */
- library->num_modules--;
- limit--;
- while ( cur < limit )
- {
- cur[0] = cur[1];
- cur++;
- }
- limit[0] = NULL;
-
- /* destroy the module */
- Destroy_Module( module );
-
- return FT_Err_Ok;
- }
- }
- }
- return FT_THROW( Invalid_Driver_Handle );
- }
-
-
- static FT_Error
- ft_property_do( FT_Library library,
- const FT_String* module_name,
- const FT_String* property_name,
- void* value,
- FT_Bool set,
- FT_Bool value_is_string )
- {
- FT_Module* cur;
- FT_Module* limit;
- FT_Module_Interface interface;
-
- FT_Service_Properties service;
-
-#ifdef FT_DEBUG_LEVEL_ERROR
- const FT_String* set_name = "FT_Property_Set";
- const FT_String* get_name = "FT_Property_Get";
- const FT_String* func_name = set ? set_name : get_name;
-#endif
-
- FT_Bool missing_func;
-
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- if ( !module_name || !property_name || !value )
- return FT_THROW( Invalid_Argument );
-
- cur = library->modules;
- limit = cur + library->num_modules;
-
- /* search module */
- for ( ; cur < limit; cur++ )
- if ( !ft_strcmp( cur[0]->clazz->module_name, module_name ) )
- break;
-
- if ( cur == limit )
- {
- FT_ERROR(( "%s: can't find module `%s'\n",
- func_name, module_name ));
- return FT_THROW( Missing_Module );
- }
-
- /* check whether we have a service interface */
- if ( !cur[0]->clazz->get_interface )
- {
- FT_ERROR(( "%s: module `%s' doesn't support properties\n",
- func_name, module_name ));
- return FT_THROW( Unimplemented_Feature );
- }
-
- /* search property service */
- interface = cur[0]->clazz->get_interface( cur[0],
- FT_SERVICE_ID_PROPERTIES );
- if ( !interface )
- {
- FT_ERROR(( "%s: module `%s' doesn't support properties\n",
- func_name, module_name ));
- return FT_THROW( Unimplemented_Feature );
- }
-
- service = (FT_Service_Properties)interface;
-
- if ( set )
- missing_func = (FT_Bool)( !service->set_property );
- else
- missing_func = (FT_Bool)( !service->get_property );
-
- if ( missing_func )
- {
- FT_ERROR(( "%s: property service of module `%s' is broken\n",
- func_name, module_name ));
- return FT_THROW( Unimplemented_Feature );
- }
-
- return set ? service->set_property( cur[0],
- property_name,
- value,
- value_is_string )
- : service->get_property( cur[0],
- property_name,
- value );
- }
-
-
- /* documentation is in ftmodapi.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Property_Set( FT_Library library,
- const FT_String* module_name,
- const FT_String* property_name,
- const void* value )
- {
- return ft_property_do( library,
- module_name,
- property_name,
- (void*)value,
- TRUE,
- FALSE );
- }
-
-
- /* documentation is in ftmodapi.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Property_Get( FT_Library library,
- const FT_String* module_name,
- const FT_String* property_name,
- void* value )
- {
- return ft_property_do( library,
- module_name,
- property_name,
- value,
- FALSE,
- FALSE );
- }
-
-
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
-
- /* this variant is used for handling the FREETYPE_PROPERTIES */
- /* environment variable */
-
- FT_BASE_DEF( FT_Error )
- ft_property_string_set( FT_Library library,
- const FT_String* module_name,
- const FT_String* property_name,
- FT_String* value )
- {
- return ft_property_do( library,
- module_name,
- property_name,
- (void*)value,
- TRUE,
- TRUE );
- }
-
-#endif
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** L I B R A R Y ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* documentation is in ftmodapi.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Reference_Library( FT_Library library )
- {
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- library->refcount++;
-
- return FT_Err_Ok;
- }
-
-
- /* documentation is in ftmodapi.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_New_Library( FT_Memory memory,
- FT_Library *alibrary )
- {
- FT_Library library = NULL;
- FT_Error error;
-
-
- if ( !memory || !alibrary )
- return FT_THROW( Invalid_Argument );
-
-#ifdef FT_DEBUG_LEVEL_ERROR
- /* init debugging support */
- ft_debug_init();
-#endif
-
- /* first of all, allocate the library object */
- if ( FT_NEW( library ) )
- return error;
-
- library->memory = memory;
-
-#ifdef FT_CONFIG_OPTION_PIC
- /* initialize position independent code containers */
- error = ft_pic_container_init( library );
- if ( error )
- goto Fail;
-#endif
-
- library->version_major = FREETYPE_MAJOR;
- library->version_minor = FREETYPE_MINOR;
- library->version_patch = FREETYPE_PATCH;
-
- library->refcount = 1;
-
- /* That's ok now */
- *alibrary = library;
-
- return FT_Err_Ok;
-
-#ifdef FT_CONFIG_OPTION_PIC
- Fail:
- ft_pic_container_destroy( library );
-#endif
- FT_FREE( library );
- return error;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( void )
- FT_Library_Version( FT_Library library,
- FT_Int *amajor,
- FT_Int *aminor,
- FT_Int *apatch )
- {
- FT_Int major = 0;
- FT_Int minor = 0;
- FT_Int patch = 0;
-
-
- if ( library )
- {
- major = library->version_major;
- minor = library->version_minor;
- patch = library->version_patch;
- }
-
- if ( amajor )
- *amajor = major;
-
- if ( aminor )
- *aminor = minor;
-
- if ( apatch )
- *apatch = patch;
- }
-
-
- /* documentation is in ftmodapi.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Done_Library( FT_Library library )
- {
- FT_Memory memory;
-
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- library->refcount--;
- if ( library->refcount > 0 )
- goto Exit;
-
- memory = library->memory;
-
- /*
- * Close all faces in the library. If we don't do this, we can have
- * some subtle memory leaks.
- *
- * Example:
- *
- * - the cff font driver uses the pshinter module in cff_size_done
- * - if the pshinter module is destroyed before the cff font driver,
- * opened FT_Face objects managed by the driver are not properly
- * destroyed, resulting in a memory leak
- *
- * Some faces are dependent on other faces, like Type42 faces that
- * depend on TrueType faces synthesized internally.
- *
- * The order of drivers should be specified in driver_name[].
- */
- {
- FT_UInt m, n;
- const char* driver_name[] = { "type42", NULL };
-
-
- for ( m = 0;
- m < sizeof ( driver_name ) / sizeof ( driver_name[0] );
- m++ )
- {
- for ( n = 0; n < library->num_modules; n++ )
- {
- FT_Module module = library->modules[n];
- const char* module_name = module->clazz->module_name;
- FT_List faces;
-
-
- if ( driver_name[m] &&
- ft_strcmp( module_name, driver_name[m] ) != 0 )
- continue;
-
- if ( ( module->clazz->module_flags & FT_MODULE_FONT_DRIVER ) == 0 )
- continue;
-
- FT_TRACE7(( "FT_Done_Library: close faces for %s\n", module_name ));
-
- faces = &FT_DRIVER( module )->faces_list;
- while ( faces->head )
- {
- FT_Done_Face( FT_FACE( faces->head->data ) );
- if ( faces->head )
- FT_TRACE0(( "FT_Done_Library: failed to free some faces\n" ));
- }
- }
- }
- }
-
- /* Close all other modules in the library */
-#if 1
- /* XXX Modules are removed in the reversed order so that */
- /* type42 module is removed before truetype module. This */
- /* avoids double free in some occasions. It is a hack. */
- while ( library->num_modules > 0 )
- FT_Remove_Module( library,
- library->modules[library->num_modules - 1] );
-#else
- {
- FT_UInt n;
-
-
- for ( n = 0; n < library->num_modules; n++ )
- {
- FT_Module module = library->modules[n];
-
-
- if ( module )
- {
- Destroy_Module( module );
- library->modules[n] = NULL;
- }
- }
- }
-#endif
-
-#ifdef FT_CONFIG_OPTION_PIC
- /* Destroy pic container contents */
- ft_pic_container_destroy( library );
-#endif
-
- FT_FREE( library );
-
- Exit:
- return FT_Err_Ok;
- }
-
-
- /* documentation is in ftmodapi.h */
-
- FT_EXPORT_DEF( void )
- FT_Set_Debug_Hook( FT_Library library,
- FT_UInt hook_index,
- FT_DebugHook_Func debug_hook )
- {
- if ( library && debug_hook &&
- hook_index <
- ( sizeof ( library->debug_hooks ) / sizeof ( void* ) ) )
- library->debug_hooks[hook_index] = debug_hook;
- }
-
-
- /* documentation is in ftmodapi.h */
-
- FT_EXPORT_DEF( FT_TrueTypeEngineType )
- FT_Get_TrueType_Engine_Type( FT_Library library )
- {
- FT_TrueTypeEngineType result = FT_TRUETYPE_ENGINE_TYPE_NONE;
-
-
- if ( library )
- {
- FT_Module module = FT_Get_Module( library, "truetype" );
-
-
- if ( module )
- {
- FT_Service_TrueTypeEngine service;
-
-
- service = (FT_Service_TrueTypeEngine)
- ft_module_get_service( module,
- FT_SERVICE_ID_TRUETYPE_ENGINE,
- 0 );
- if ( service )
- result = service->engine_type;
- }
- }
-
- return result;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_SubGlyph_Info( FT_GlyphSlot glyph,
- FT_UInt sub_index,
- FT_Int *p_index,
- FT_UInt *p_flags,
- FT_Int *p_arg1,
- FT_Int *p_arg2,
- FT_Matrix *p_transform )
- {
- FT_Error error = FT_ERR( Invalid_Argument );
-
-
- if ( glyph &&
- glyph->subglyphs &&
- glyph->format == FT_GLYPH_FORMAT_COMPOSITE &&
- sub_index < glyph->num_subglyphs )
- {
- FT_SubGlyph subg = glyph->subglyphs + sub_index;
-
-
- *p_index = subg->index;
- *p_flags = subg->flags;
- *p_arg1 = subg->arg1;
- *p_arg2 = subg->arg2;
- *p_transform = subg->transform;
-
- error = FT_Err_Ok;
- }
-
- return error;
- }
-
-
-/* END */
diff --git a/src/base/ftotval.c b/src/base/ftotval.c
deleted file mode 100644
index 5fa098691..000000000
--- a/src/base/ftotval.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftotval.c */
-/* */
-/* FreeType API for validating OpenType tables (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_OPENTYPE_VALIDATE_H
-#include FT_OPENTYPE_VALIDATE_H
-
-
- /* documentation is in ftotval.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_OpenType_Validate( FT_Face face,
- FT_UInt validation_flags,
- FT_Bytes *BASE_table,
- FT_Bytes *GDEF_table,
- FT_Bytes *GPOS_table,
- FT_Bytes *GSUB_table,
- FT_Bytes *JSTF_table )
- {
- FT_Service_OTvalidate service;
- FT_Error error;
-
-
- if ( !face )
- {
- error = FT_THROW( Invalid_Face_Handle );
- goto Exit;
- }
-
- if ( !( BASE_table &&
- GDEF_table &&
- GPOS_table &&
- GSUB_table &&
- JSTF_table ) )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- FT_FACE_FIND_GLOBAL_SERVICE( face, service, OPENTYPE_VALIDATE );
-
- if ( service )
- error = service->validate( face,
- validation_flags,
- BASE_table,
- GDEF_table,
- GPOS_table,
- GSUB_table,
- JSTF_table );
- else
- error = FT_THROW( Unimplemented_Feature );
-
- Exit:
- return error;
- }
-
-
- FT_EXPORT_DEF( void )
- FT_OpenType_Free( FT_Face face,
- FT_Bytes table )
- {
- FT_Memory memory;
-
-
- if ( !face )
- return;
-
- memory = FT_FACE_MEMORY( face );
-
- FT_FREE( table );
- }
-
-
-/* END */
diff --git a/src/base/ftoutln.c b/src/base/ftoutln.c
deleted file mode 100644
index 9ceb9cf1b..000000000
--- a/src/base/ftoutln.c
+++ /dev/null
@@ -1,1109 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftoutln.c */
-/* */
-/* FreeType outline management (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* All functions are declared in freetype.h. */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_OUTLINE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_TRIGONOMETRY_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_outline
-
-
- static
- const FT_Outline null_outline = { 0, 0, NULL, NULL, NULL, 0 };
-
-
- /* documentation is in ftoutln.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Outline_Decompose( FT_Outline* outline,
- const FT_Outline_Funcs* func_interface,
- void* user )
- {
-#undef SCALED
-#define SCALED( x ) ( ( (x) < 0 ? -( -(x) << shift ) \
- : ( (x) << shift ) ) - delta )
-
- FT_Vector v_last;
- FT_Vector v_control;
- FT_Vector v_start;
-
- FT_Vector* point;
- FT_Vector* limit;
- char* tags;
-
- FT_Error error;
-
- FT_Int n; /* index of contour in outline */
- FT_UInt first; /* index of first point in contour */
- FT_Int tag; /* current point's state */
-
- FT_Int shift;
- FT_Pos delta;
-
-
- if ( !outline )
- return FT_THROW( Invalid_Outline );
-
- if ( !func_interface )
- return FT_THROW( Invalid_Argument );
-
- shift = func_interface->shift;
- delta = func_interface->delta;
- first = 0;
-
- for ( n = 0; n < outline->n_contours; n++ )
- {
- FT_Int last; /* index of last point in contour */
-
-
- FT_TRACE5(( "FT_Outline_Decompose: Outline %d\n", n ));
-
- last = outline->contours[n];
- if ( last < 0 )
- goto Invalid_Outline;
- limit = outline->points + last;
-
- v_start = outline->points[first];
- v_start.x = SCALED( v_start.x );
- v_start.y = SCALED( v_start.y );
-
- v_last = outline->points[last];
- v_last.x = SCALED( v_last.x );
- v_last.y = SCALED( v_last.y );
-
- v_control = v_start;
-
- point = outline->points + first;
- tags = outline->tags + first;
- tag = FT_CURVE_TAG( tags[0] );
-
- /* A contour cannot start with a cubic control point! */
- if ( tag == FT_CURVE_TAG_CUBIC )
- goto Invalid_Outline;
-
- /* check first point to determine origin */
- if ( tag == FT_CURVE_TAG_CONIC )
- {
- /* first point is conic control. Yes, this happens. */
- if ( FT_CURVE_TAG( outline->tags[last] ) == FT_CURVE_TAG_ON )
- {
- /* start at last point if it is on the curve */
- v_start = v_last;
- limit--;
- }
- else
- {
- /* if both first and last points are conic, */
- /* start at their middle and record its position */
- /* for closure */
- v_start.x = ( v_start.x + v_last.x ) / 2;
- v_start.y = ( v_start.y + v_last.y ) / 2;
-
- /* v_last = v_start; */
- }
- point--;
- tags--;
- }
-
- FT_TRACE5(( " move to (%.2f, %.2f)\n",
- v_start.x / 64.0, v_start.y / 64.0 ));
- error = func_interface->move_to( &v_start, user );
- if ( error )
- goto Exit;
-
- while ( point < limit )
- {
- point++;
- tags++;
-
- tag = FT_CURVE_TAG( tags[0] );
- switch ( tag )
- {
- case FT_CURVE_TAG_ON: /* emit a single line_to */
- {
- FT_Vector vec;
-
-
- vec.x = SCALED( point->x );
- vec.y = SCALED( point->y );
-
- FT_TRACE5(( " line to (%.2f, %.2f)\n",
- vec.x / 64.0, vec.y / 64.0 ));
- error = func_interface->line_to( &vec, user );
- if ( error )
- goto Exit;
- continue;
- }
-
- case FT_CURVE_TAG_CONIC: /* consume conic arcs */
- v_control.x = SCALED( point->x );
- v_control.y = SCALED( point->y );
-
- Do_Conic:
- if ( point < limit )
- {
- FT_Vector vec;
- FT_Vector v_middle;
-
-
- point++;
- tags++;
- tag = FT_CURVE_TAG( tags[0] );
-
- vec.x = SCALED( point->x );
- vec.y = SCALED( point->y );
-
- if ( tag == FT_CURVE_TAG_ON )
- {
- FT_TRACE5(( " conic to (%.2f, %.2f)"
- " with control (%.2f, %.2f)\n",
- vec.x / 64.0, vec.y / 64.0,
- v_control.x / 64.0, v_control.y / 64.0 ));
- error = func_interface->conic_to( &v_control, &vec, user );
- if ( error )
- goto Exit;
- continue;
- }
-
- if ( tag != FT_CURVE_TAG_CONIC )
- goto Invalid_Outline;
-
- v_middle.x = ( v_control.x + vec.x ) / 2;
- v_middle.y = ( v_control.y + vec.y ) / 2;
-
- FT_TRACE5(( " conic to (%.2f, %.2f)"
- " with control (%.2f, %.2f)\n",
- v_middle.x / 64.0, v_middle.y / 64.0,
- v_control.x / 64.0, v_control.y / 64.0 ));
- error = func_interface->conic_to( &v_control, &v_middle, user );
- if ( error )
- goto Exit;
-
- v_control = vec;
- goto Do_Conic;
- }
-
- FT_TRACE5(( " conic to (%.2f, %.2f)"
- " with control (%.2f, %.2f)\n",
- v_start.x / 64.0, v_start.y / 64.0,
- v_control.x / 64.0, v_control.y / 64.0 ));
- error = func_interface->conic_to( &v_control, &v_start, user );
- goto Close;
-
- default: /* FT_CURVE_TAG_CUBIC */
- {
- FT_Vector vec1, vec2;
-
-
- if ( point + 1 > limit ||
- FT_CURVE_TAG( tags[1] ) != FT_CURVE_TAG_CUBIC )
- goto Invalid_Outline;
-
- point += 2;
- tags += 2;
-
- vec1.x = SCALED( point[-2].x );
- vec1.y = SCALED( point[-2].y );
-
- vec2.x = SCALED( point[-1].x );
- vec2.y = SCALED( point[-1].y );
-
- if ( point <= limit )
- {
- FT_Vector vec;
-
-
- vec.x = SCALED( point->x );
- vec.y = SCALED( point->y );
-
- FT_TRACE5(( " cubic to (%.2f, %.2f)"
- " with controls (%.2f, %.2f) and (%.2f, %.2f)\n",
- vec.x / 64.0, vec.y / 64.0,
- vec1.x / 64.0, vec1.y / 64.0,
- vec2.x / 64.0, vec2.y / 64.0 ));
- error = func_interface->cubic_to( &vec1, &vec2, &vec, user );
- if ( error )
- goto Exit;
- continue;
- }
-
- FT_TRACE5(( " cubic to (%.2f, %.2f)"
- " with controls (%.2f, %.2f) and (%.2f, %.2f)\n",
- v_start.x / 64.0, v_start.y / 64.0,
- vec1.x / 64.0, vec1.y / 64.0,
- vec2.x / 64.0, vec2.y / 64.0 ));
- error = func_interface->cubic_to( &vec1, &vec2, &v_start, user );
- goto Close;
- }
- }
- }
-
- /* close the contour with a line segment */
- FT_TRACE5(( " line to (%.2f, %.2f)\n",
- v_start.x / 64.0, v_start.y / 64.0 ));
- error = func_interface->line_to( &v_start, user );
-
- Close:
- if ( error )
- goto Exit;
-
- first = (FT_UInt)last + 1;
- }
-
- FT_TRACE5(( "FT_Outline_Decompose: Done\n", n ));
- return FT_Err_Ok;
-
- Exit:
- FT_TRACE5(( "FT_Outline_Decompose: Error 0x%x\n", error ));
- return error;
-
- Invalid_Outline:
- return FT_THROW( Invalid_Outline );
- }
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_Outline_New_Internal( FT_Memory memory,
- FT_UInt numPoints,
- FT_Int numContours,
- FT_Outline *anoutline )
- {
- FT_Error error;
-
-
- if ( !anoutline || !memory )
- return FT_THROW( Invalid_Argument );
-
- *anoutline = null_outline;
-
- if ( numContours < 0 ||
- (FT_UInt)numContours > numPoints )
- return FT_THROW( Invalid_Argument );
-
- if ( numPoints > FT_OUTLINE_POINTS_MAX )
- return FT_THROW( Array_Too_Large );
-
- if ( FT_NEW_ARRAY( anoutline->points, numPoints ) ||
- FT_NEW_ARRAY( anoutline->tags, numPoints ) ||
- FT_NEW_ARRAY( anoutline->contours, numContours ) )
- goto Fail;
-
- anoutline->n_points = (FT_Short)numPoints;
- anoutline->n_contours = (FT_Short)numContours;
- anoutline->flags |= FT_OUTLINE_OWNER;
-
- return FT_Err_Ok;
-
- Fail:
- anoutline->flags |= FT_OUTLINE_OWNER;
- FT_Outline_Done_Internal( memory, anoutline );
-
- return error;
- }
-
-
- /* documentation is in ftoutln.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Outline_New( FT_Library library,
- FT_UInt numPoints,
- FT_Int numContours,
- FT_Outline *anoutline )
- {
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- return FT_Outline_New_Internal( library->memory, numPoints,
- numContours, anoutline );
- }
-
-
- /* documentation is in ftoutln.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Outline_Check( FT_Outline* outline )
- {
- if ( outline )
- {
- FT_Int n_points = outline->n_points;
- FT_Int n_contours = outline->n_contours;
- FT_Int end0, end;
- FT_Int n;
-
-
- /* empty glyph? */
- if ( n_points == 0 && n_contours == 0 )
- return FT_Err_Ok;
-
- /* check point and contour counts */
- if ( n_points <= 0 || n_contours <= 0 )
- goto Bad;
-
- end0 = end = -1;
- for ( n = 0; n < n_contours; n++ )
- {
- end = outline->contours[n];
-
- /* note that we don't accept empty contours */
- if ( end <= end0 || end >= n_points )
- goto Bad;
-
- end0 = end;
- }
-
- if ( end != n_points - 1 )
- goto Bad;
-
- /* XXX: check the tags array */
- return FT_Err_Ok;
- }
-
- Bad:
- return FT_THROW( Invalid_Argument );
- }
-
-
- /* documentation is in ftoutln.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Outline_Copy( const FT_Outline* source,
- FT_Outline *target )
- {
- FT_Int is_owner;
-
-
- if ( !source || !target )
- return FT_THROW( Invalid_Outline );
-
- if ( source->n_points != target->n_points ||
- source->n_contours != target->n_contours )
- return FT_THROW( Invalid_Argument );
-
- if ( source == target )
- return FT_Err_Ok;
-
- if ( source->n_points )
- {
- FT_ARRAY_COPY( target->points, source->points, source->n_points );
- FT_ARRAY_COPY( target->tags, source->tags, source->n_points );
- }
-
- if ( source->n_contours )
- FT_ARRAY_COPY( target->contours, source->contours, source->n_contours );
-
- /* copy all flags, except the `FT_OUTLINE_OWNER' one */
- is_owner = target->flags & FT_OUTLINE_OWNER;
- target->flags = source->flags;
-
- target->flags &= ~FT_OUTLINE_OWNER;
- target->flags |= is_owner;
-
- return FT_Err_Ok;
- }
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_Outline_Done_Internal( FT_Memory memory,
- FT_Outline* outline )
- {
- if ( !outline )
- return FT_THROW( Invalid_Outline );
-
- if ( !memory )
- return FT_THROW( Invalid_Argument );
-
- if ( outline->flags & FT_OUTLINE_OWNER )
- {
- FT_FREE( outline->points );
- FT_FREE( outline->tags );
- FT_FREE( outline->contours );
- }
- *outline = null_outline;
-
- return FT_Err_Ok;
- }
-
-
- /* documentation is in ftoutln.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Outline_Done( FT_Library library,
- FT_Outline* outline )
- {
- /* check for valid `outline' in FT_Outline_Done_Internal() */
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- return FT_Outline_Done_Internal( library->memory, outline );
- }
-
-
- /* documentation is in ftoutln.h */
-
- FT_EXPORT_DEF( void )
- FT_Outline_Get_CBox( const FT_Outline* outline,
- FT_BBox *acbox )
- {
- FT_Pos xMin, yMin, xMax, yMax;
-
-
- if ( outline && acbox )
- {
- if ( outline->n_points == 0 )
- {
- xMin = 0;
- yMin = 0;
- xMax = 0;
- yMax = 0;
- }
- else
- {
- FT_Vector* vec = outline->points;
- FT_Vector* limit = vec + outline->n_points;
-
-
- xMin = xMax = vec->x;
- yMin = yMax = vec->y;
- vec++;
-
- for ( ; vec < limit; vec++ )
- {
- FT_Pos x, y;
-
-
- x = vec->x;
- if ( x < xMin ) xMin = x;
- if ( x > xMax ) xMax = x;
-
- y = vec->y;
- if ( y < yMin ) yMin = y;
- if ( y > yMax ) yMax = y;
- }
- }
- acbox->xMin = xMin;
- acbox->xMax = xMax;
- acbox->yMin = yMin;
- acbox->yMax = yMax;
- }
- }
-
-
- /* documentation is in ftoutln.h */
-
- FT_EXPORT_DEF( void )
- FT_Outline_Translate( const FT_Outline* outline,
- FT_Pos xOffset,
- FT_Pos yOffset )
- {
- FT_UShort n;
- FT_Vector* vec;
-
-
- if ( !outline )
- return;
-
- vec = outline->points;
-
- for ( n = 0; n < outline->n_points; n++ )
- {
- vec->x += xOffset;
- vec->y += yOffset;
- vec++;
- }
- }
-
-
- /* documentation is in ftoutln.h */
-
- FT_EXPORT_DEF( void )
- FT_Outline_Reverse( FT_Outline* outline )
- {
- FT_UShort n;
- FT_Int first, last;
-
-
- if ( !outline )
- return;
-
- first = 0;
-
- for ( n = 0; n < outline->n_contours; n++ )
- {
- last = outline->contours[n];
-
- /* reverse point table */
- {
- FT_Vector* p = outline->points + first;
- FT_Vector* q = outline->points + last;
- FT_Vector swap;
-
-
- while ( p < q )
- {
- swap = *p;
- *p = *q;
- *q = swap;
- p++;
- q--;
- }
- }
-
- /* reverse tags table */
- {
- char* p = outline->tags + first;
- char* q = outline->tags + last;
-
-
- while ( p < q )
- {
- char swap;
-
-
- swap = *p;
- *p = *q;
- *q = swap;
- p++;
- q--;
- }
- }
-
- first = last + 1;
- }
-
- outline->flags ^= FT_OUTLINE_REVERSE_FILL;
- }
-
-
- /* documentation is in ftoutln.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Outline_Render( FT_Library library,
- FT_Outline* outline,
- FT_Raster_Params* params )
- {
- FT_Error error;
- FT_Renderer renderer;
- FT_ListNode node;
-
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- if ( !outline )
- return FT_THROW( Invalid_Outline );
-
- if ( !params )
- return FT_THROW( Invalid_Argument );
-
- renderer = library->cur_renderer;
- node = library->renderers.head;
-
- params->source = (void*)outline;
-
- error = FT_ERR( Cannot_Render_Glyph );
- while ( renderer )
- {
- error = renderer->raster_render( renderer->raster, params );
- if ( !error || FT_ERR_NEQ( error, Cannot_Render_Glyph ) )
- break;
-
- /* FT_Err_Cannot_Render_Glyph is returned if the render mode */
- /* is unsupported by the current renderer for this glyph image */
- /* format */
-
- /* now, look for another renderer that supports the same */
- /* format */
- renderer = FT_Lookup_Renderer( library, FT_GLYPH_FORMAT_OUTLINE,
- &node );
- }
-
- return error;
- }
-
-
- /* documentation is in ftoutln.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Outline_Get_Bitmap( FT_Library library,
- FT_Outline* outline,
- const FT_Bitmap *abitmap )
- {
- FT_Raster_Params params;
-
-
- if ( !abitmap )
- return FT_THROW( Invalid_Argument );
-
- /* other checks are delayed to `FT_Outline_Render' */
-
- params.target = abitmap;
- params.flags = 0;
-
- if ( abitmap->pixel_mode == FT_PIXEL_MODE_GRAY ||
- abitmap->pixel_mode == FT_PIXEL_MODE_LCD ||
- abitmap->pixel_mode == FT_PIXEL_MODE_LCD_V )
- params.flags |= FT_RASTER_FLAG_AA;
-
- return FT_Outline_Render( library, outline, &params );
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( void )
- FT_Vector_Transform( FT_Vector* vector,
- const FT_Matrix* matrix )
- {
- FT_Pos xz, yz;
-
-
- if ( !vector || !matrix )
- return;
-
- xz = FT_MulFix( vector->x, matrix->xx ) +
- FT_MulFix( vector->y, matrix->xy );
-
- yz = FT_MulFix( vector->x, matrix->yx ) +
- FT_MulFix( vector->y, matrix->yy );
-
- vector->x = xz;
- vector->y = yz;
- }
-
-
- /* documentation is in ftoutln.h */
-
- FT_EXPORT_DEF( void )
- FT_Outline_Transform( const FT_Outline* outline,
- const FT_Matrix* matrix )
- {
- FT_Vector* vec;
- FT_Vector* limit;
-
-
- if ( !outline || !matrix )
- return;
-
- vec = outline->points;
- limit = vec + outline->n_points;
-
- for ( ; vec < limit; vec++ )
- FT_Vector_Transform( vec, matrix );
- }
-
-
-#if 0
-
-#define FT_OUTLINE_GET_CONTOUR( outline, c, first, last ) \
- do \
- { \
- (first) = ( c > 0 ) ? (outline)->points + \
- (outline)->contours[c - 1] + 1 \
- : (outline)->points; \
- (last) = (outline)->points + (outline)->contours[c]; \
- } while ( 0 )
-
-
- /* Is a point in some contour? */
- /* */
- /* We treat every point of the contour as if it */
- /* it were ON. That is, we allow false positives, */
- /* but disallow false negatives. (XXX really?) */
- static FT_Bool
- ft_contour_has( FT_Outline* outline,
- FT_Short c,
- FT_Vector* point )
- {
- FT_Vector* first;
- FT_Vector* last;
- FT_Vector* a;
- FT_Vector* b;
- FT_UInt n = 0;
-
-
- FT_OUTLINE_GET_CONTOUR( outline, c, first, last );
-
- for ( a = first; a <= last; a++ )
- {
- FT_Pos x;
- FT_Int intersect;
-
-
- b = ( a == last ) ? first : a + 1;
-
- intersect = ( a->y - point->y ) ^ ( b->y - point->y );
-
- /* a and b are on the same side */
- if ( intersect >= 0 )
- {
- if ( intersect == 0 && a->y == point->y )
- {
- if ( ( a->x <= point->x && b->x >= point->x ) ||
- ( a->x >= point->x && b->x <= point->x ) )
- return 1;
- }
-
- continue;
- }
-
- x = a->x + ( b->x - a->x ) * (point->y - a->y ) / ( b->y - a->y );
-
- if ( x < point->x )
- n++;
- else if ( x == point->x )
- return 1;
- }
-
- return n & 1;
- }
-
-
- static FT_Bool
- ft_contour_enclosed( FT_Outline* outline,
- FT_UShort c )
- {
- FT_Vector* first;
- FT_Vector* last;
- FT_Short i;
-
-
- FT_OUTLINE_GET_CONTOUR( outline, c, first, last );
-
- for ( i = 0; i < outline->n_contours; i++ )
- {
- if ( i != c && ft_contour_has( outline, i, first ) )
- {
- FT_Vector* pt;
-
-
- for ( pt = first + 1; pt <= last; pt++ )
- if ( !ft_contour_has( outline, i, pt ) )
- return 0;
-
- return 1;
- }
- }
-
- return 0;
- }
-
-
- /* This version differs from the public one in that each */
- /* part (contour not enclosed in another contour) of the */
- /* outline is checked for orientation. This is */
- /* necessary for some buggy CJK fonts. */
- static FT_Orientation
- ft_outline_get_orientation( FT_Outline* outline )
- {
- FT_Short i;
- FT_Vector* first;
- FT_Vector* last;
- FT_Orientation orient = FT_ORIENTATION_NONE;
-
-
- first = outline->points;
- for ( i = 0; i < outline->n_contours; i++, first = last + 1 )
- {
- FT_Vector* point;
- FT_Vector* xmin_point;
- FT_Pos xmin;
-
-
- last = outline->points + outline->contours[i];
-
- /* skip degenerate contours */
- if ( last < first + 2 )
- continue;
-
- if ( ft_contour_enclosed( outline, i ) )
- continue;
-
- xmin = first->x;
- xmin_point = first;
-
- for ( point = first + 1; point <= last; point++ )
- {
- if ( point->x < xmin )
- {
- xmin = point->x;
- xmin_point = point;
- }
- }
-
- /* check the orientation of the contour */
- {
- FT_Vector* prev;
- FT_Vector* next;
- FT_Orientation o;
-
-
- prev = ( xmin_point == first ) ? last : xmin_point - 1;
- next = ( xmin_point == last ) ? first : xmin_point + 1;
-
- if ( FT_Atan2( prev->x - xmin_point->x, prev->y - xmin_point->y ) >
- FT_Atan2( next->x - xmin_point->x, next->y - xmin_point->y ) )
- o = FT_ORIENTATION_POSTSCRIPT;
- else
- o = FT_ORIENTATION_TRUETYPE;
-
- if ( orient == FT_ORIENTATION_NONE )
- orient = o;
- else if ( orient != o )
- return FT_ORIENTATION_NONE;
- }
- }
-
- return orient;
- }
-
-#endif /* 0 */
-
-
- /* documentation is in ftoutln.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Outline_Embolden( FT_Outline* outline,
- FT_Pos strength )
- {
- return FT_Outline_EmboldenXY( outline, strength, strength );
- }
-
-
- /* documentation is in ftoutln.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Outline_EmboldenXY( FT_Outline* outline,
- FT_Pos xstrength,
- FT_Pos ystrength )
- {
- FT_Vector* points;
- FT_Int c, first, last;
- FT_Int orientation;
-
-
- if ( !outline )
- return FT_THROW( Invalid_Outline );
-
- xstrength /= 2;
- ystrength /= 2;
- if ( xstrength == 0 && ystrength == 0 )
- return FT_Err_Ok;
-
- orientation = FT_Outline_Get_Orientation( outline );
- if ( orientation == FT_ORIENTATION_NONE )
- {
- if ( outline->n_contours )
- return FT_THROW( Invalid_Argument );
- else
- return FT_Err_Ok;
- }
-
- points = outline->points;
-
- first = 0;
- for ( c = 0; c < outline->n_contours; c++ )
- {
- FT_Vector in, out, anchor, shift;
- FT_Fixed l_in, l_out, l_anchor = 0, l, q, d;
- FT_Int i, j, k;
-
-
- l_in = 0;
- last = outline->contours[c];
-
- /* pacify compiler */
- in.x = in.y = anchor.x = anchor.y = 0;
-
- /* Counter j cycles though the points; counter i advances only */
- /* when points are moved; anchor k marks the first moved point. */
- for ( i = last, j = first, k = -1;
- j != i && i != k;
- j = j < last ? j + 1 : first )
- {
- if ( j != k )
- {
- out.x = points[j].x - points[i].x;
- out.y = points[j].y - points[i].y;
- l_out = (FT_Fixed)FT_Vector_NormLen( &out );
-
- if ( l_out == 0 )
- continue;
- }
- else
- {
- out = anchor;
- l_out = l_anchor;
- }
-
- if ( l_in != 0 )
- {
- if ( k < 0 )
- {
- k = i;
- anchor = in;
- l_anchor = l_in;
- }
-
- d = FT_MulFix( in.x, out.x ) + FT_MulFix( in.y, out.y );
-
- /* shift only if turn is less than ~160 degrees */
- if ( d > -0xF000L )
- {
- d = d + 0x10000L;
-
- /* shift components along lateral bisector in proper orientation */
- shift.x = in.y + out.y;
- shift.y = in.x + out.x;
-
- if ( orientation == FT_ORIENTATION_TRUETYPE )
- shift.x = -shift.x;
- else
- shift.y = -shift.y;
-
- /* restrict shift magnitude to better handle collapsing segments */
- q = FT_MulFix( out.x, in.y ) - FT_MulFix( out.y, in.x );
- if ( orientation == FT_ORIENTATION_TRUETYPE )
- q = -q;
-
- l = FT_MIN( l_in, l_out );
-
- /* non-strict inequalities avoid divide-by-zero when q == l == 0 */
- if ( FT_MulFix( xstrength, q ) <= FT_MulFix( l, d ) )
- shift.x = FT_MulDiv( shift.x, xstrength, d );
- else
- shift.x = FT_MulDiv( shift.x, l, q );
-
-
- if ( FT_MulFix( ystrength, q ) <= FT_MulFix( l, d ) )
- shift.y = FT_MulDiv( shift.y, ystrength, d );
- else
- shift.y = FT_MulDiv( shift.y, l, q );
- }
- else
- shift.x = shift.y = 0;
-
- for ( ;
- i != j;
- i = i < last ? i + 1 : first )
- {
- points[i].x += xstrength + shift.x;
- points[i].y += ystrength + shift.y;
- }
- }
- else
- i = j;
-
- in = out;
- l_in = l_out;
- }
-
- first = last + 1;
- }
-
- return FT_Err_Ok;
- }
-
-
- /* documentation is in ftoutln.h */
-
- FT_EXPORT_DEF( FT_Orientation )
- FT_Outline_Get_Orientation( FT_Outline* outline )
- {
- FT_BBox cbox;
- FT_Int xshift, yshift;
- FT_Vector* points;
- FT_Vector v_prev, v_cur;
- FT_Int c, n, first;
- FT_Pos area = 0;
-
-
- if ( !outline || outline->n_points <= 0 )
- return FT_ORIENTATION_TRUETYPE;
-
- /* We use the nonzero winding rule to find the orientation. */
- /* Since glyph outlines behave much more `regular' than arbitrary */
- /* cubic or quadratic curves, this test deals with the polygon */
- /* only that is spanned up by the control points. */
-
- FT_Outline_Get_CBox( outline, &cbox );
-
- /* Handle collapsed outlines to avoid undefined FT_MSB. */
- if ( cbox.xMin == cbox.xMax || cbox.yMin == cbox.yMax )
- return FT_ORIENTATION_NONE;
-
- xshift = FT_MSB( (FT_UInt32)( FT_ABS( cbox.xMax ) |
- FT_ABS( cbox.xMin ) ) ) - 14;
- xshift = FT_MAX( xshift, 0 );
-
- yshift = FT_MSB( (FT_UInt32)( cbox.yMax - cbox.yMin ) ) - 14;
- yshift = FT_MAX( yshift, 0 );
-
- points = outline->points;
-
- first = 0;
- for ( c = 0; c < outline->n_contours; c++ )
- {
- FT_Int last = outline->contours[c];
-
-
- v_prev.x = points[last].x >> xshift;
- v_prev.y = points[last].y >> yshift;
-
- for ( n = first; n <= last; n++ )
- {
- v_cur.x = points[n].x >> xshift;
- v_cur.y = points[n].y >> yshift;
-
- area = ADD_LONG( area,
- ( v_cur.y - v_prev.y ) * ( v_cur.x + v_prev.x ) );
-
- v_prev = v_cur;
- }
-
- first = last + 1;
- }
-
- if ( area > 0 )
- return FT_ORIENTATION_POSTSCRIPT;
- else if ( area < 0 )
- return FT_ORIENTATION_TRUETYPE;
- else
- return FT_ORIENTATION_NONE;
- }
-
-
-/* END */
diff --git a/src/base/ftpatent.c b/src/base/ftpatent.c
deleted file mode 100644
index 9900f99bf..000000000
--- a/src/base/ftpatent.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftpatent.c */
-/* */
-/* FreeType API for checking patented TrueType bytecode instructions */
-/* (body). Obsolete, retained for backward compatibility. */
-/* */
-/* Copyright 2007-2017 by */
-/* David Turner. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_STREAM_H
-#include FT_SERVICE_SFNT_H
-#include FT_SERVICE_TRUETYPE_GLYF_H
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Bool )
- FT_Face_CheckTrueTypePatents( FT_Face face )
- {
- FT_UNUSED( face );
-
- return FALSE;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Bool )
- FT_Face_SetUnpatentedHinting( FT_Face face,
- FT_Bool value )
- {
- FT_UNUSED( face );
- FT_UNUSED( value );
-
- return FALSE;
- }
-
-/* END */
diff --git a/src/base/ftpfr.c b/src/base/ftpfr.c
deleted file mode 100644
index 5cc0b7072..000000000
--- a/src/base/ftpfr.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftpfr.c */
-/* */
-/* FreeType API for accessing PFR-specific data (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_PFR_H
-
-
- /* check the format */
- static FT_Service_PfrMetrics
- ft_pfr_check( FT_Face face )
- {
- FT_Service_PfrMetrics service = NULL;
-
-
- if ( face )
- FT_FACE_LOOKUP_SERVICE( face, service, PFR_METRICS );
-
- return service;
- }
-
-
- /* documentation is in ftpfr.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_PFR_Metrics( FT_Face face,
- FT_UInt *aoutline_resolution,
- FT_UInt *ametrics_resolution,
- FT_Fixed *ametrics_x_scale,
- FT_Fixed *ametrics_y_scale )
- {
- FT_Error error = FT_Err_Ok;
- FT_Service_PfrMetrics service;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- service = ft_pfr_check( face );
- if ( service )
- {
- error = service->get_metrics( face,
- aoutline_resolution,
- ametrics_resolution,
- ametrics_x_scale,
- ametrics_y_scale );
- }
- else
- {
- FT_Fixed x_scale, y_scale;
-
-
- /* this is not a PFR font */
- if ( aoutline_resolution )
- *aoutline_resolution = face->units_per_EM;
-
- if ( ametrics_resolution )
- *ametrics_resolution = face->units_per_EM;
-
- x_scale = y_scale = 0x10000L;
- if ( face->size )
- {
- x_scale = face->size->metrics.x_scale;
- y_scale = face->size->metrics.y_scale;
- }
-
- if ( ametrics_x_scale )
- *ametrics_x_scale = x_scale;
-
- if ( ametrics_y_scale )
- *ametrics_y_scale = y_scale;
-
- error = FT_THROW( Unknown_File_Format );
- }
-
- return error;
- }
-
-
- /* documentation is in ftpfr.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_PFR_Kerning( FT_Face face,
- FT_UInt left,
- FT_UInt right,
- FT_Vector *avector )
- {
- FT_Error error;
- FT_Service_PfrMetrics service;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( !avector )
- return FT_THROW( Invalid_Argument );
-
- service = ft_pfr_check( face );
- if ( service )
- error = service->get_kerning( face, left, right, avector );
- else
- error = FT_Get_Kerning( face, left, right,
- FT_KERNING_UNSCALED, avector );
-
- return error;
- }
-
-
- /* documentation is in ftpfr.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_PFR_Advance( FT_Face face,
- FT_UInt gindex,
- FT_Pos *aadvance )
- {
- FT_Error error;
- FT_Service_PfrMetrics service;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( !aadvance )
- return FT_THROW( Invalid_Argument );
-
- service = ft_pfr_check( face );
- if ( service )
- error = service->get_advance( face, gindex, aadvance );
- else
- /* XXX: TODO: PROVIDE ADVANCE-LOADING METHOD TO ALL FONT DRIVERS */
- error = FT_THROW( Invalid_Argument );
-
- return error;
- }
-
-
-/* END */
diff --git a/src/base/ftpic.c b/src/base/ftpic.c
deleted file mode 100644
index 0f84fddc9..000000000
--- a/src/base/ftpic.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftpic.c */
-/* */
-/* The FreeType position independent code services (body). */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "basepic.h"
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* documentation is in ftpic.h */
-
- FT_BASE_DEF( FT_Error )
- ft_pic_container_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error;
-
-
- FT_MEM_SET( pic_container, 0, sizeof ( *pic_container ) );
-
- error = ft_base_pic_init( library );
- if ( error )
- return error;
-
- return FT_Err_Ok;
- }
-
-
- /* Destroy the contents of the container. */
- FT_BASE_DEF( void )
- ft_pic_container_destroy( FT_Library library )
- {
- ft_base_pic_free( library );
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/base/ftrfork.c b/src/base/ftrfork.c
deleted file mode 100644
index f7b81375d..000000000
--- a/src/base/ftrfork.c
+++ /dev/null
@@ -1,937 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftrfork.c */
-/* */
-/* Embedded resource forks accessor (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* Masatake YAMATO and Redhat K.K. */
-/* */
-/* FT_Raccess_Get_HeaderInfo() and raccess_guess_darwin_hfsplus() are */
-/* derived from ftobjs.c. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* Development of the code in this file is support of */
-/* Information-technology Promotion Agency, Japan. */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_RFORK_H
-#include "basepic.h"
-#include "ftbase.h"
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_raccess
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** Resource fork directory access ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_BASE_DEF( FT_Error )
- FT_Raccess_Get_HeaderInfo( FT_Library library,
- FT_Stream stream,
- FT_Long rfork_offset,
- FT_Long *map_offset,
- FT_Long *rdata_pos )
- {
- FT_Error error;
- unsigned char head[16], head2[16];
- FT_Long map_pos, map_len, rdata_len;
- int allzeros, allmatch, i;
- FT_Long type_list;
-
- FT_UNUSED( library );
-
-
- error = FT_Stream_Seek( stream, (FT_ULong)rfork_offset );
- if ( error )
- return error;
-
- error = FT_Stream_Read( stream, (FT_Byte*)head, 16 );
- if ( error )
- return error;
-
- /* ensure positive values */
- if ( head[0] >= 0x80 ||
- head[4] >= 0x80 ||
- head[8] >= 0x80 ||
- head[12] >= 0x80 )
- return FT_THROW( Unknown_File_Format );
-
- *rdata_pos = ( head[ 0] << 24 ) |
- ( head[ 1] << 16 ) |
- ( head[ 2] << 8 ) |
- head[ 3];
- map_pos = ( head[ 4] << 24 ) |
- ( head[ 5] << 16 ) |
- ( head[ 6] << 8 ) |
- head[ 7];
- rdata_len = ( head[ 8] << 24 ) |
- ( head[ 9] << 16 ) |
- ( head[10] << 8 ) |
- head[11];
- map_len = ( head[12] << 24 ) |
- ( head[13] << 16 ) |
- ( head[14] << 8 ) |
- head[15];
-
- /* the map must not be empty */
- if ( !map_pos )
- return FT_THROW( Unknown_File_Format );
-
- /* check whether rdata and map overlap */
- if ( *rdata_pos < map_pos )
- {
- if ( *rdata_pos > map_pos - rdata_len )
- return FT_THROW( Unknown_File_Format );
- }
- else
- {
- if ( map_pos > *rdata_pos - map_len )
- return FT_THROW( Unknown_File_Format );
- }
-
- /* check whether end of rdata or map exceeds stream size */
- if ( FT_LONG_MAX - rdata_len < *rdata_pos ||
- FT_LONG_MAX - map_len < map_pos ||
-
- FT_LONG_MAX - ( *rdata_pos + rdata_len ) < rfork_offset ||
- FT_LONG_MAX - ( map_pos + map_len ) < rfork_offset ||
-
- (FT_ULong)( rfork_offset + *rdata_pos + rdata_len ) > stream->size ||
- (FT_ULong)( rfork_offset + map_pos + map_len ) > stream->size )
- return FT_THROW( Unknown_File_Format );
-
- *rdata_pos += rfork_offset;
- map_pos += rfork_offset;
-
- error = FT_Stream_Seek( stream, (FT_ULong)map_pos );
- if ( error )
- return error;
-
- head2[15] = (FT_Byte)( head[15] + 1 ); /* make it be different */
-
- error = FT_Stream_Read( stream, (FT_Byte*)head2, 16 );
- if ( error )
- return error;
-
- allzeros = 1;
- allmatch = 1;
- for ( i = 0; i < 16; i++ )
- {
- if ( head2[i] != 0 )
- allzeros = 0;
- if ( head2[i] != head[i] )
- allmatch = 0;
- }
- if ( !allzeros && !allmatch )
- return FT_THROW( Unknown_File_Format );
-
- /* If we have reached this point then it is probably a mac resource */
- /* file. Now, does it contain any interesting resources? */
-
- (void)FT_STREAM_SKIP( 4 /* skip handle to next resource map */
- + 2 /* skip file resource number */
- + 2 ); /* skip attributes */
-
- if ( FT_READ_SHORT( type_list ) )
- return error;
- if ( type_list < 0 )
- return FT_THROW( Unknown_File_Format );
-
- error = FT_Stream_Seek( stream, (FT_ULong)( map_pos + type_list ) );
- if ( error )
- return error;
-
- *map_offset = map_pos + type_list;
- return FT_Err_Ok;
- }
-
-
- static int
- ft_raccess_sort_ref_by_id( FT_RFork_Ref* a,
- FT_RFork_Ref* b )
- {
- if ( a->res_id < b->res_id )
- return -1;
- else if ( a->res_id > b->res_id )
- return 1;
- else
- return 0;
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Raccess_Get_DataOffsets( FT_Library library,
- FT_Stream stream,
- FT_Long map_offset,
- FT_Long rdata_pos,
- FT_Long tag,
- FT_Bool sort_by_res_id,
- FT_Long **offsets,
- FT_Long *count )
- {
- FT_Error error;
- int i, j, cnt, subcnt;
- FT_Long tag_internal, rpos;
- FT_Memory memory = library->memory;
- FT_Long temp;
- FT_Long *offsets_internal = NULL;
- FT_RFork_Ref *ref = NULL;
-
-
- FT_TRACE3(( "\n" ));
- error = FT_Stream_Seek( stream, (FT_ULong)map_offset );
- if ( error )
- return error;
-
- if ( FT_READ_SHORT( cnt ) )
- return error;
- cnt++;
-
- /* `rpos' is a signed 16bit integer offset to resource records; the */
- /* size of a resource record is 12 bytes. The map header is 28 bytes, */
- /* and a type list needs 10 bytes or more. If we assume that the name */
- /* list is empty and we have only a single entry in the type list, */
- /* there can be at most */
- /* */
- /* (32768 - 28 - 10) / 12 = 2727 */
- /* */
- /* resources. */
- /* */
- /* A type list starts with a two-byte counter, followed by 10-byte */
- /* type records. Assuming that there are no resources, the number of */
- /* type records can be at most */
- /* */
- /* (32768 - 28 - 2) / 8 = 4079 */
- /* */
- if ( cnt > 4079 )
- return FT_THROW( Invalid_Table );
-
- for ( i = 0; i < cnt; i++ )
- {
- if ( FT_READ_LONG( tag_internal ) ||
- FT_READ_SHORT( subcnt ) ||
- FT_READ_SHORT( rpos ) )
- return error;
-
- FT_TRACE2(( "Resource tags: %c%c%c%c\n",
- (char)( 0xFF & ( tag_internal >> 24 ) ),
- (char)( 0xFF & ( tag_internal >> 16 ) ),
- (char)( 0xFF & ( tag_internal >> 8 ) ),
- (char)( 0xFF & ( tag_internal >> 0 ) ) ));
- FT_TRACE3(( " : subcount=%d, suboffset=0x%04x\n",
- subcnt, rpos ));
-
- if ( tag_internal == tag )
- {
- *count = subcnt + 1;
- rpos += map_offset;
-
- /* a zero count might be valid in the resource specification, */
- /* however, it is completely useless to us */
- if ( *count < 1 || *count > 2727 )
- return FT_THROW( Invalid_Table );
-
- error = FT_Stream_Seek( stream, (FT_ULong)rpos );
- if ( error )
- return error;
-
- if ( FT_NEW_ARRAY( ref, *count ) )
- return error;
-
- for ( j = 0; j < *count; j++ )
- {
- if ( FT_READ_SHORT( ref[j].res_id ) )
- goto Exit;
- if ( FT_STREAM_SKIP( 2 ) ) /* resource name offset */
- goto Exit;
- if ( FT_READ_LONG( temp ) ) /* attributes (8bit), offset (24bit) */
- goto Exit;
- if ( FT_STREAM_SKIP( 4 ) ) /* mbz */
- goto Exit;
-
- if ( ref[j].res_id < 0 || temp < 0 )
- {
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- ref[j].offset = temp & 0xFFFFFFL;
-
- FT_TRACE3(( " [%d]:"
- " resource_id=0x%04x, offset=0x%08x\n",
- j, ref[j].res_id, ref[j].offset ));
- }
-
- if ( sort_by_res_id )
- {
- ft_qsort( ref,
- (size_t)*count,
- sizeof ( FT_RFork_Ref ),
- ( int(*)(const void*,
- const void*) )ft_raccess_sort_ref_by_id );
-
- FT_TRACE3(( " -- sort resources by their ids --\n" ));
-
- for ( j = 0; j < *count; j++ )
- FT_TRACE3(( " [%d]:"
- " resource_id=0x%04x, offset=0x%08x\n",
- j, ref[j].res_id, ref[j].offset ));
- }
-
- if ( FT_NEW_ARRAY( offsets_internal, *count ) )
- goto Exit;
-
- /* XXX: duplicated reference ID,
- * gap between reference IDs are acceptable?
- * further investigation on Apple implementation is needed.
- */
- for ( j = 0; j < *count; j++ )
- offsets_internal[j] = rdata_pos + ref[j].offset;
-
- *offsets = offsets_internal;
- error = FT_Err_Ok;
-
- Exit:
- FT_FREE( ref );
- return error;
- }
- }
-
- return FT_THROW( Cannot_Open_Resource );
- }
-
-
-#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** Guessing functions ****/
- /**** ****/
- /**** When you add a new guessing function, ****/
- /**** update FT_RACCESS_N_RULES in ftrfork.h. ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- static FT_Error
- raccess_guess_apple_double( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset );
-
- static FT_Error
- raccess_guess_apple_single( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset );
-
- static FT_Error
- raccess_guess_darwin_ufs_export( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset );
-
- static FT_Error
- raccess_guess_darwin_newvfs( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset );
-
- static FT_Error
- raccess_guess_darwin_hfsplus( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset );
-
- static FT_Error
- raccess_guess_vfat( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset );
-
- static FT_Error
- raccess_guess_linux_cap( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset );
-
- static FT_Error
- raccess_guess_linux_double( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset );
-
- static FT_Error
- raccess_guess_linux_netatalk( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset );
-
-
- CONST_FT_RFORK_RULE_ARRAY_BEGIN(ft_raccess_guess_table,
- ft_raccess_guess_rec)
- CONST_FT_RFORK_RULE_ARRAY_ENTRY(apple_double, apple_double)
- CONST_FT_RFORK_RULE_ARRAY_ENTRY(apple_single, apple_single)
- CONST_FT_RFORK_RULE_ARRAY_ENTRY(darwin_ufs_export, darwin_ufs_export)
- CONST_FT_RFORK_RULE_ARRAY_ENTRY(darwin_newvfs, darwin_newvfs)
- CONST_FT_RFORK_RULE_ARRAY_ENTRY(darwin_hfsplus, darwin_hfsplus)
- CONST_FT_RFORK_RULE_ARRAY_ENTRY(vfat, vfat)
- CONST_FT_RFORK_RULE_ARRAY_ENTRY(linux_cap, linux_cap)
- CONST_FT_RFORK_RULE_ARRAY_ENTRY(linux_double, linux_double)
- CONST_FT_RFORK_RULE_ARRAY_ENTRY(linux_netatalk, linux_netatalk)
- CONST_FT_RFORK_RULE_ARRAY_END
-
-
- /*************************************************************************/
- /**** ****/
- /**** Helper functions ****/
- /**** ****/
- /*************************************************************************/
-
- static FT_Error
- raccess_guess_apple_generic( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- FT_Int32 magic,
- FT_Long *result_offset );
-
- static FT_Error
- raccess_guess_linux_double_from_file_name( FT_Library library,
- char * file_name,
- FT_Long *result_offset );
-
- static char *
- raccess_make_file_name( FT_Memory memory,
- const char *original_name,
- const char *insertion );
-
- FT_BASE_DEF( void )
- FT_Raccess_Guess( FT_Library library,
- FT_Stream stream,
- char* base_name,
- char **new_names,
- FT_Long *offsets,
- FT_Error *errors )
- {
- FT_Int i;
-
-
- for ( i = 0; i < FT_RACCESS_N_RULES; i++ )
- {
- new_names[i] = NULL;
- if ( NULL != stream )
- errors[i] = FT_Stream_Seek( stream, 0 );
- else
- errors[i] = FT_Err_Ok;
-
- if ( errors[i] )
- continue;
-
- errors[i] = (FT_RACCESS_GUESS_TABLE_GET[i].func)( library,
- stream, base_name,
- &(new_names[i]),
- &(offsets[i]) );
- }
-
- return;
- }
-
-
-#ifndef FT_MACINTOSH
- static FT_RFork_Rule
- raccess_get_rule_type_from_rule_index( FT_Library library,
- FT_UInt rule_index )
- {
- FT_UNUSED( library );
-
- if ( rule_index >= FT_RACCESS_N_RULES )
- return FT_RFork_Rule_invalid;
-
- return FT_RACCESS_GUESS_TABLE_GET[rule_index].type;
- }
-
-
- /*
- * For this function, refer ftbase.h.
- */
- FT_LOCAL_DEF( FT_Bool )
- ft_raccess_rule_by_darwin_vfs( FT_Library library,
- FT_UInt rule_index )
- {
- switch( raccess_get_rule_type_from_rule_index( library, rule_index ) )
- {
- case FT_RFork_Rule_darwin_newvfs:
- case FT_RFork_Rule_darwin_hfsplus:
- return TRUE;
-
- default:
- return FALSE;
- }
- }
-#endif
-
-
- static FT_Error
- raccess_guess_apple_double( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset )
- {
- FT_Int32 magic = ( 0x00 << 24 ) |
- ( 0x05 << 16 ) |
- ( 0x16 << 8 ) |
- 0x07;
-
-
- *result_file_name = NULL;
- if ( NULL == stream )
- return FT_THROW( Cannot_Open_Stream );
-
- return raccess_guess_apple_generic( library, stream, base_file_name,
- magic, result_offset );
- }
-
-
- static FT_Error
- raccess_guess_apple_single( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset )
- {
- FT_Int32 magic = ( 0x00 << 24 ) |
- ( 0x05 << 16 ) |
- ( 0x16 << 8 ) |
- 0x00;
-
-
- *result_file_name = NULL;
- if ( NULL == stream )
- return FT_THROW( Cannot_Open_Stream );
-
- return raccess_guess_apple_generic( library, stream, base_file_name,
- magic, result_offset );
- }
-
-
- static FT_Error
- raccess_guess_darwin_ufs_export( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset )
- {
- char* newpath;
- FT_Error error;
- FT_Memory memory;
-
- FT_UNUSED( stream );
-
-
- memory = library->memory;
- newpath = raccess_make_file_name( memory, base_file_name, "._" );
- if ( !newpath )
- return FT_THROW( Out_Of_Memory );
-
- error = raccess_guess_linux_double_from_file_name( library, newpath,
- result_offset );
- if ( !error )
- *result_file_name = newpath;
- else
- FT_FREE( newpath );
-
- return error;
- }
-
-
- static FT_Error
- raccess_guess_darwin_hfsplus( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset )
- {
- /*
- Only meaningful on systems with hfs+ drivers (or Macs).
- */
- FT_Error error;
- char* newpath = NULL;
- FT_Memory memory;
- FT_Long base_file_len = (FT_Long)ft_strlen( base_file_name );
-
- FT_UNUSED( stream );
-
-
- memory = library->memory;
-
- if ( base_file_len + 6 > FT_INT_MAX )
- return FT_THROW( Array_Too_Large );
-
- if ( FT_ALLOC( newpath, base_file_len + 6 ) )
- return error;
-
- FT_MEM_COPY( newpath, base_file_name, base_file_len );
- FT_MEM_COPY( newpath + base_file_len, "/rsrc", 6 );
-
- *result_file_name = newpath;
- *result_offset = 0;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Error
- raccess_guess_darwin_newvfs( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset )
- {
- /*
- Only meaningful on systems with Mac OS X (> 10.1).
- */
- FT_Error error;
- char* newpath = NULL;
- FT_Memory memory;
- FT_Long base_file_len = (FT_Long)ft_strlen( base_file_name );
-
- FT_UNUSED( stream );
-
-
- memory = library->memory;
-
- if ( base_file_len + 18 > FT_INT_MAX )
- return FT_THROW( Array_Too_Large );
-
- if ( FT_ALLOC( newpath, base_file_len + 18 ) )
- return error;
-
- FT_MEM_COPY( newpath, base_file_name, base_file_len );
- FT_MEM_COPY( newpath + base_file_len, "/..namedfork/rsrc", 18 );
-
- *result_file_name = newpath;
- *result_offset = 0;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Error
- raccess_guess_vfat( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset )
- {
- char* newpath;
- FT_Memory memory;
-
- FT_UNUSED( stream );
-
-
- memory = library->memory;
-
- newpath = raccess_make_file_name( memory, base_file_name,
- "resource.frk/" );
- if ( !newpath )
- return FT_THROW( Out_Of_Memory );
-
- *result_file_name = newpath;
- *result_offset = 0;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Error
- raccess_guess_linux_cap( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset )
- {
- char* newpath;
- FT_Memory memory;
-
- FT_UNUSED( stream );
-
-
- memory = library->memory;
-
- newpath = raccess_make_file_name( memory, base_file_name, ".resource/" );
- if ( !newpath )
- return FT_THROW( Out_Of_Memory );
-
- *result_file_name = newpath;
- *result_offset = 0;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Error
- raccess_guess_linux_double( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset )
- {
- char* newpath;
- FT_Error error;
- FT_Memory memory;
-
- FT_UNUSED( stream );
-
-
- memory = library->memory;
-
- newpath = raccess_make_file_name( memory, base_file_name, "%" );
- if ( !newpath )
- return FT_THROW( Out_Of_Memory );
-
- error = raccess_guess_linux_double_from_file_name( library, newpath,
- result_offset );
- if ( !error )
- *result_file_name = newpath;
- else
- FT_FREE( newpath );
-
- return error;
- }
-
-
- static FT_Error
- raccess_guess_linux_netatalk( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset )
- {
- char* newpath;
- FT_Error error;
- FT_Memory memory;
-
- FT_UNUSED( stream );
-
-
- memory = library->memory;
-
- newpath = raccess_make_file_name( memory, base_file_name,
- ".AppleDouble/" );
- if ( !newpath )
- return FT_THROW( Out_Of_Memory );
-
- error = raccess_guess_linux_double_from_file_name( library, newpath,
- result_offset );
- if ( !error )
- *result_file_name = newpath;
- else
- FT_FREE( newpath );
-
- return error;
- }
-
-
- static FT_Error
- raccess_guess_apple_generic( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- FT_Int32 magic,
- FT_Long *result_offset )
- {
- FT_Int32 magic_from_stream;
- FT_Error error;
- FT_Int32 version_number = 0;
- FT_UShort n_of_entries;
-
- int i;
- FT_Int32 entry_id, entry_offset, entry_length = 0;
-
- const FT_Int32 resource_fork_entry_id = 0x2;
-
- FT_UNUSED( library );
- FT_UNUSED( base_file_name );
- FT_UNUSED( version_number );
- FT_UNUSED( entry_length );
-
-
- if ( FT_READ_LONG( magic_from_stream ) )
- return error;
- if ( magic_from_stream != magic )
- return FT_THROW( Unknown_File_Format );
-
- if ( FT_READ_LONG( version_number ) )
- return error;
-
- /* filler */
- error = FT_Stream_Skip( stream, 16 );
- if ( error )
- return error;
-
- if ( FT_READ_USHORT( n_of_entries ) )
- return error;
- if ( n_of_entries == 0 )
- return FT_THROW( Unknown_File_Format );
-
- for ( i = 0; i < n_of_entries; i++ )
- {
- if ( FT_READ_LONG( entry_id ) )
- return error;
- if ( entry_id == resource_fork_entry_id )
- {
- if ( FT_READ_LONG( entry_offset ) ||
- FT_READ_LONG( entry_length ) )
- continue;
- *result_offset = entry_offset;
-
- return FT_Err_Ok;
- }
- else
- {
- error = FT_Stream_Skip( stream, 4 + 4 ); /* offset + length */
- if ( error )
- return error;
- }
- }
-
- return FT_THROW( Unknown_File_Format );
- }
-
-
- static FT_Error
- raccess_guess_linux_double_from_file_name( FT_Library library,
- char *file_name,
- FT_Long *result_offset )
- {
- FT_Open_Args args2;
- FT_Stream stream2;
- char * nouse = NULL;
- FT_Error error;
-
-
- args2.flags = FT_OPEN_PATHNAME;
- args2.pathname = file_name;
- error = FT_Stream_New( library, &args2, &stream2 );
- if ( error )
- return error;
-
- error = raccess_guess_apple_double( library, stream2, file_name,
- &nouse, result_offset );
-
- FT_Stream_Free( stream2, 0 );
-
- return error;
- }
-
-
- static char*
- raccess_make_file_name( FT_Memory memory,
- const char *original_name,
- const char *insertion )
- {
- char* new_name = NULL;
- const char* tmp;
- const char* slash;
- size_t new_length;
- FT_Error error = FT_Err_Ok;
-
- FT_UNUSED( error );
-
-
- new_length = ft_strlen( original_name ) + ft_strlen( insertion );
- if ( FT_ALLOC( new_name, new_length + 1 ) )
- return NULL;
-
- tmp = ft_strrchr( original_name, '/' );
- if ( tmp )
- {
- ft_strncpy( new_name,
- original_name,
- (size_t)( tmp - original_name + 1 ) );
- new_name[tmp - original_name + 1] = '\0';
- slash = tmp + 1;
- }
- else
- {
- slash = original_name;
- new_name[0] = '\0';
- }
-
- ft_strcat( new_name, insertion );
- ft_strcat( new_name, slash );
-
- return new_name;
- }
-
-
-#else /* !FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */
-
-
- /*************************************************************************/
- /* Dummy function; just sets errors */
- /*************************************************************************/
-
- FT_BASE_DEF( void )
- FT_Raccess_Guess( FT_Library library,
- FT_Stream stream,
- char *base_name,
- char **new_names,
- FT_Long *offsets,
- FT_Error *errors )
- {
- FT_Int i;
-
- FT_UNUSED( library );
- FT_UNUSED( stream );
- FT_UNUSED( base_name );
-
-
- for ( i = 0; i < FT_RACCESS_N_RULES; i++ )
- {
- new_names[i] = NULL;
- offsets[i] = 0;
- errors[i] = FT_ERR( Unimplemented_Feature );
- }
- }
-
-
-#endif /* !FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */
-
-
-/* END */
diff --git a/src/base/ftsnames.c b/src/base/ftsnames.c
deleted file mode 100644
index 360945008..000000000
--- a/src/base/ftsnames.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsnames.c */
-/* */
-/* Simple interface to access SFNT name tables (which are used */
-/* to hold font names, copyright info, notices, etc.) (body). */
-/* */
-/* This is _not_ used to retrieve glyph names! */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-
-#include FT_SFNT_NAMES_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-#include FT_INTERNAL_STREAM_H
-
-
-#ifdef TT_CONFIG_OPTION_SFNT_NAMES
-
-
- /* documentation is in ftsnames.h */
-
- FT_EXPORT_DEF( FT_UInt )
- FT_Get_Sfnt_Name_Count( FT_Face face )
- {
- return ( face && FT_IS_SFNT( face ) ) ? ((TT_Face)face)->num_names : 0;
- }
-
-
- /* documentation is in ftsnames.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_Sfnt_Name( FT_Face face,
- FT_UInt idx,
- FT_SfntName *aname )
- {
- FT_Error error = FT_ERR( Invalid_Argument );
-
-
- if ( aname && face && FT_IS_SFNT( face ) )
- {
- TT_Face ttface = (TT_Face)face;
-
-
- if ( idx < (FT_UInt)ttface->num_names )
- {
- TT_Name entry = ttface->name_table.names + idx;
-
-
- /* load name on demand */
- if ( entry->stringLength > 0 && !entry->string )
- {
- FT_Memory memory = face->memory;
- FT_Stream stream = face->stream;
-
-
- if ( FT_NEW_ARRAY ( entry->string, entry->stringLength ) ||
- FT_STREAM_SEEK( entry->stringOffset ) ||
- FT_STREAM_READ( entry->string, entry->stringLength ) )
- {
- FT_FREE( entry->string );
- entry->stringLength = 0;
- }
- }
-
- aname->platform_id = entry->platformID;
- aname->encoding_id = entry->encodingID;
- aname->language_id = entry->languageID;
- aname->name_id = entry->nameID;
- aname->string = (FT_Byte*)entry->string;
- aname->string_len = entry->stringLength;
-
- error = FT_Err_Ok;
- }
- }
-
- return error;
- }
-
-
- /* documentation is in ftsnames.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_Sfnt_LangTag( FT_Face face,
- FT_UInt langID,
- FT_SfntLangTag *alangTag )
- {
- FT_Error error = FT_ERR( Invalid_Argument );
-
-
- if ( alangTag && face && FT_IS_SFNT( face ) )
- {
- TT_Face ttface = (TT_Face)face;
-
-
- if ( ttface->name_table.format != 1 )
- return FT_THROW( Invalid_Table );
-
- if ( langID > 0x8000U &&
- langID - 0x8000U < ttface->name_table.numLangTagRecords )
- {
- TT_LangTag entry = ttface->name_table.langTags +
- ( langID - 0x8000U );
-
-
- /* load name on demand */
- if ( entry->stringLength > 0 && !entry->string )
- {
- FT_Memory memory = face->memory;
- FT_Stream stream = face->stream;
-
-
- if ( FT_NEW_ARRAY ( entry->string, entry->stringLength ) ||
- FT_STREAM_SEEK( entry->stringOffset ) ||
- FT_STREAM_READ( entry->string, entry->stringLength ) )
- {
- FT_FREE( entry->string );
- entry->stringLength = 0;
- }
- }
-
- alangTag->string = (FT_Byte*)entry->string;
- alangTag->string_len = entry->stringLength;
-
- error = FT_Err_Ok;
- }
- }
-
- return error;
- }
-
-
-#endif /* TT_CONFIG_OPTION_SFNT_NAMES */
-
-
-/* END */
diff --git a/src/base/ftstream.c b/src/base/ftstream.c
deleted file mode 100644
index a3f8c8b3c..000000000
--- a/src/base/ftstream.c
+++ /dev/null
@@ -1,860 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftstream.c */
-/* */
-/* I/O stream support (body). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_DEBUG_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_stream
-
-
- FT_BASE_DEF( void )
- FT_Stream_OpenMemory( FT_Stream stream,
- const FT_Byte* base,
- FT_ULong size )
- {
- stream->base = (FT_Byte*) base;
- stream->size = size;
- stream->pos = 0;
- stream->cursor = NULL;
- stream->read = NULL;
- stream->close = NULL;
- }
-
-
- FT_BASE_DEF( void )
- FT_Stream_Close( FT_Stream stream )
- {
- if ( stream && stream->close )
- stream->close( stream );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Stream_Seek( FT_Stream stream,
- FT_ULong pos )
- {
- FT_Error error = FT_Err_Ok;
-
-
- if ( stream->read )
- {
- if ( stream->read( stream, pos, 0, 0 ) )
- {
- FT_ERROR(( "FT_Stream_Seek:"
- " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
- pos, stream->size ));
-
- error = FT_THROW( Invalid_Stream_Operation );
- }
- }
- /* note that seeking to the first position after the file is valid */
- else if ( pos > stream->size )
- {
- FT_ERROR(( "FT_Stream_Seek:"
- " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
- pos, stream->size ));
-
- error = FT_THROW( Invalid_Stream_Operation );
- }
-
- if ( !error )
- stream->pos = pos;
-
- return error;
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Stream_Skip( FT_Stream stream,
- FT_Long distance )
- {
- if ( distance < 0 )
- return FT_THROW( Invalid_Stream_Operation );
-
- return FT_Stream_Seek( stream, stream->pos + (FT_ULong)distance );
- }
-
-
- FT_BASE_DEF( FT_ULong )
- FT_Stream_Pos( FT_Stream stream )
- {
- return stream->pos;
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Stream_Read( FT_Stream stream,
- FT_Byte* buffer,
- FT_ULong count )
- {
- return FT_Stream_ReadAt( stream, stream->pos, buffer, count );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Stream_ReadAt( FT_Stream stream,
- FT_ULong pos,
- FT_Byte* buffer,
- FT_ULong count )
- {
- FT_Error error = FT_Err_Ok;
- FT_ULong read_bytes;
-
-
- if ( pos >= stream->size )
- {
- FT_ERROR(( "FT_Stream_ReadAt:"
- " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
- pos, stream->size ));
-
- return FT_THROW( Invalid_Stream_Operation );
- }
-
- if ( stream->read )
- read_bytes = stream->read( stream, pos, buffer, count );
- else
- {
- read_bytes = stream->size - pos;
- if ( read_bytes > count )
- read_bytes = count;
-
- FT_MEM_COPY( buffer, stream->base + pos, read_bytes );
- }
-
- stream->pos = pos + read_bytes;
-
- if ( read_bytes < count )
- {
- FT_ERROR(( "FT_Stream_ReadAt:"
- " invalid read; expected %lu bytes, got %lu\n",
- count, read_bytes ));
-
- error = FT_THROW( Invalid_Stream_Operation );
- }
-
- return error;
- }
-
-
- FT_BASE_DEF( FT_ULong )
- FT_Stream_TryRead( FT_Stream stream,
- FT_Byte* buffer,
- FT_ULong count )
- {
- FT_ULong read_bytes = 0;
-
-
- if ( stream->pos >= stream->size )
- goto Exit;
-
- if ( stream->read )
- read_bytes = stream->read( stream, stream->pos, buffer, count );
- else
- {
- read_bytes = stream->size - stream->pos;
- if ( read_bytes > count )
- read_bytes = count;
-
- FT_MEM_COPY( buffer, stream->base + stream->pos, read_bytes );
- }
-
- stream->pos += read_bytes;
-
- Exit:
- return read_bytes;
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Stream_ExtractFrame( FT_Stream stream,
- FT_ULong count,
- FT_Byte** pbytes )
- {
- FT_Error error;
-
-
- error = FT_Stream_EnterFrame( stream, count );
- if ( !error )
- {
- *pbytes = (FT_Byte*)stream->cursor;
-
- /* equivalent to FT_Stream_ExitFrame(), with no memory block release */
- stream->cursor = NULL;
- stream->limit = NULL;
- }
-
- return error;
- }
-
-
- FT_BASE_DEF( void )
- FT_Stream_ReleaseFrame( FT_Stream stream,
- FT_Byte** pbytes )
- {
- if ( stream && stream->read )
- {
- FT_Memory memory = stream->memory;
-
-#ifdef FT_DEBUG_MEMORY
- ft_mem_free( memory, *pbytes );
- *pbytes = NULL;
-#else
- FT_FREE( *pbytes );
-#endif
- }
- *pbytes = NULL;
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Stream_EnterFrame( FT_Stream stream,
- FT_ULong count )
- {
- FT_Error error = FT_Err_Ok;
- FT_ULong read_bytes;
-
-
- /* check for nested frame access */
- FT_ASSERT( stream && stream->cursor == 0 );
-
- if ( stream->read )
- {
- /* allocate the frame in memory */
- FT_Memory memory = stream->memory;
-
-
- /* simple sanity check */
- if ( count > stream->size )
- {
- FT_ERROR(( "FT_Stream_EnterFrame:"
- " frame size (%lu) larger than stream size (%lu)\n",
- count, stream->size ));
-
- error = FT_THROW( Invalid_Stream_Operation );
- goto Exit;
- }
-
-#ifdef FT_DEBUG_MEMORY
- /* assume _ft_debug_file and _ft_debug_lineno are already set */
- stream->base = (unsigned char*)ft_mem_qalloc( memory,
- (FT_Long)count,
- &error );
- if ( error )
- goto Exit;
-#else
- if ( FT_QALLOC( stream->base, count ) )
- goto Exit;
-#endif
- /* read it */
- read_bytes = stream->read( stream, stream->pos,
- stream->base, count );
- if ( read_bytes < count )
- {
- FT_ERROR(( "FT_Stream_EnterFrame:"
- " invalid read; expected %lu bytes, got %lu\n",
- count, read_bytes ));
-
- FT_FREE( stream->base );
- error = FT_THROW( Invalid_Stream_Operation );
- }
- stream->cursor = stream->base;
- stream->limit = stream->cursor + count;
- stream->pos += read_bytes;
- }
- else
- {
- /* check current and new position */
- if ( stream->pos >= stream->size ||
- stream->size - stream->pos < count )
- {
- FT_ERROR(( "FT_Stream_EnterFrame:"
- " invalid i/o; pos = 0x%lx, count = %lu, size = 0x%lx\n",
- stream->pos, count, stream->size ));
-
- error = FT_THROW( Invalid_Stream_Operation );
- goto Exit;
- }
-
- /* set cursor */
- stream->cursor = stream->base + stream->pos;
- stream->limit = stream->cursor + count;
- stream->pos += count;
- }
-
- Exit:
- return error;
- }
-
-
- FT_BASE_DEF( void )
- FT_Stream_ExitFrame( FT_Stream stream )
- {
- /* IMPORTANT: The assertion stream->cursor != 0 was removed, given */
- /* that it is possible to access a frame of length 0 in */
- /* some weird fonts (usually, when accessing an array of */
- /* 0 records, like in some strange kern tables). */
- /* */
- /* In this case, the loader code handles the 0-length table */
- /* gracefully; however, stream.cursor is really set to 0 by the */
- /* FT_Stream_EnterFrame() call, and this is not an error. */
- /* */
- FT_ASSERT( stream );
-
- if ( stream->read )
- {
- FT_Memory memory = stream->memory;
-
-#ifdef FT_DEBUG_MEMORY
- ft_mem_free( memory, stream->base );
- stream->base = NULL;
-#else
- FT_FREE( stream->base );
-#endif
- }
- stream->cursor = NULL;
- stream->limit = NULL;
- }
-
-
- FT_BASE_DEF( FT_Char )
- FT_Stream_GetChar( FT_Stream stream )
- {
- FT_Char result;
-
-
- FT_ASSERT( stream && stream->cursor );
-
- result = 0;
- if ( stream->cursor < stream->limit )
- result = (FT_Char)*stream->cursor++;
-
- return result;
- }
-
-
- FT_BASE_DEF( FT_UShort )
- FT_Stream_GetUShort( FT_Stream stream )
- {
- FT_Byte* p;
- FT_UShort result;
-
-
- FT_ASSERT( stream && stream->cursor );
-
- result = 0;
- p = stream->cursor;
- if ( p + 1 < stream->limit )
- result = FT_NEXT_USHORT( p );
- stream->cursor = p;
-
- return result;
- }
-
-
- FT_BASE_DEF( FT_UShort )
- FT_Stream_GetUShortLE( FT_Stream stream )
- {
- FT_Byte* p;
- FT_UShort result;
-
-
- FT_ASSERT( stream && stream->cursor );
-
- result = 0;
- p = stream->cursor;
- if ( p + 1 < stream->limit )
- result = FT_NEXT_USHORT_LE( p );
- stream->cursor = p;
-
- return result;
- }
-
-
- FT_BASE_DEF( FT_ULong )
- FT_Stream_GetUOffset( FT_Stream stream )
- {
- FT_Byte* p;
- FT_ULong result;
-
-
- FT_ASSERT( stream && stream->cursor );
-
- result = 0;
- p = stream->cursor;
- if ( p + 2 < stream->limit )
- result = FT_NEXT_UOFF3( p );
- stream->cursor = p;
- return result;
- }
-
-
- FT_BASE_DEF( FT_ULong )
- FT_Stream_GetULong( FT_Stream stream )
- {
- FT_Byte* p;
- FT_ULong result;
-
-
- FT_ASSERT( stream && stream->cursor );
-
- result = 0;
- p = stream->cursor;
- if ( p + 3 < stream->limit )
- result = FT_NEXT_ULONG( p );
- stream->cursor = p;
- return result;
- }
-
-
- FT_BASE_DEF( FT_ULong )
- FT_Stream_GetULongLE( FT_Stream stream )
- {
- FT_Byte* p;
- FT_ULong result;
-
-
- FT_ASSERT( stream && stream->cursor );
-
- result = 0;
- p = stream->cursor;
- if ( p + 3 < stream->limit )
- result = FT_NEXT_ULONG_LE( p );
- stream->cursor = p;
- return result;
- }
-
-
- FT_BASE_DEF( FT_Char )
- FT_Stream_ReadChar( FT_Stream stream,
- FT_Error* error )
- {
- FT_Byte result = 0;
-
-
- FT_ASSERT( stream );
-
- *error = FT_Err_Ok;
-
- if ( stream->read )
- {
- if ( stream->read( stream, stream->pos, &result, 1L ) != 1L )
- goto Fail;
- }
- else
- {
- if ( stream->pos < stream->size )
- result = stream->base[stream->pos];
- else
- goto Fail;
- }
- stream->pos++;
-
- return (FT_Char)result;
-
- Fail:
- *error = FT_THROW( Invalid_Stream_Operation );
- FT_ERROR(( "FT_Stream_ReadChar:"
- " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
- stream->pos, stream->size ));
-
- return 0;
- }
-
-
- FT_BASE_DEF( FT_UShort )
- FT_Stream_ReadUShort( FT_Stream stream,
- FT_Error* error )
- {
- FT_Byte reads[2];
- FT_Byte* p = 0;
- FT_UShort result = 0;
-
-
- FT_ASSERT( stream );
-
- *error = FT_Err_Ok;
-
- if ( stream->pos + 1 < stream->size )
- {
- if ( stream->read )
- {
- if ( stream->read( stream, stream->pos, reads, 2L ) != 2L )
- goto Fail;
-
- p = reads;
- }
- else
- p = stream->base + stream->pos;
-
- if ( p )
- result = FT_NEXT_USHORT( p );
- }
- else
- goto Fail;
-
- stream->pos += 2;
-
- return result;
-
- Fail:
- *error = FT_THROW( Invalid_Stream_Operation );
- FT_ERROR(( "FT_Stream_ReadUShort:"
- " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
- stream->pos, stream->size ));
-
- return 0;
- }
-
-
- FT_BASE_DEF( FT_UShort )
- FT_Stream_ReadUShortLE( FT_Stream stream,
- FT_Error* error )
- {
- FT_Byte reads[2];
- FT_Byte* p = 0;
- FT_UShort result = 0;
-
-
- FT_ASSERT( stream );
-
- *error = FT_Err_Ok;
-
- if ( stream->pos + 1 < stream->size )
- {
- if ( stream->read )
- {
- if ( stream->read( stream, stream->pos, reads, 2L ) != 2L )
- goto Fail;
-
- p = reads;
- }
- else
- p = stream->base + stream->pos;
-
- if ( p )
- result = FT_NEXT_USHORT_LE( p );
- }
- else
- goto Fail;
-
- stream->pos += 2;
-
- return result;
-
- Fail:
- *error = FT_THROW( Invalid_Stream_Operation );
- FT_ERROR(( "FT_Stream_ReadUShortLE:"
- " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
- stream->pos, stream->size ));
-
- return 0;
- }
-
-
- FT_BASE_DEF( FT_ULong )
- FT_Stream_ReadUOffset( FT_Stream stream,
- FT_Error* error )
- {
- FT_Byte reads[3];
- FT_Byte* p = 0;
- FT_ULong result = 0;
-
-
- FT_ASSERT( stream );
-
- *error = FT_Err_Ok;
-
- if ( stream->pos + 2 < stream->size )
- {
- if ( stream->read )
- {
- if (stream->read( stream, stream->pos, reads, 3L ) != 3L )
- goto Fail;
-
- p = reads;
- }
- else
- p = stream->base + stream->pos;
-
- if ( p )
- result = FT_NEXT_UOFF3( p );
- }
- else
- goto Fail;
-
- stream->pos += 3;
-
- return result;
-
- Fail:
- *error = FT_THROW( Invalid_Stream_Operation );
- FT_ERROR(( "FT_Stream_ReadUOffset:"
- " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
- stream->pos, stream->size ));
-
- return 0;
- }
-
-
- FT_BASE_DEF( FT_ULong )
- FT_Stream_ReadULong( FT_Stream stream,
- FT_Error* error )
- {
- FT_Byte reads[4];
- FT_Byte* p = 0;
- FT_ULong result = 0;
-
-
- FT_ASSERT( stream );
-
- *error = FT_Err_Ok;
-
- if ( stream->pos + 3 < stream->size )
- {
- if ( stream->read )
- {
- if ( stream->read( stream, stream->pos, reads, 4L ) != 4L )
- goto Fail;
-
- p = reads;
- }
- else
- p = stream->base + stream->pos;
-
- if ( p )
- result = FT_NEXT_ULONG( p );
- }
- else
- goto Fail;
-
- stream->pos += 4;
-
- return result;
-
- Fail:
- *error = FT_THROW( Invalid_Stream_Operation );
- FT_ERROR(( "FT_Stream_ReadULong:"
- " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
- stream->pos, stream->size ));
-
- return 0;
- }
-
-
- FT_BASE_DEF( FT_ULong )
- FT_Stream_ReadULongLE( FT_Stream stream,
- FT_Error* error )
- {
- FT_Byte reads[4];
- FT_Byte* p = 0;
- FT_ULong result = 0;
-
-
- FT_ASSERT( stream );
-
- *error = FT_Err_Ok;
-
- if ( stream->pos + 3 < stream->size )
- {
- if ( stream->read )
- {
- if ( stream->read( stream, stream->pos, reads, 4L ) != 4L )
- goto Fail;
-
- p = reads;
- }
- else
- p = stream->base + stream->pos;
-
- if ( p )
- result = FT_NEXT_ULONG_LE( p );
- }
- else
- goto Fail;
-
- stream->pos += 4;
-
- return result;
-
- Fail:
- *error = FT_THROW( Invalid_Stream_Operation );
- FT_ERROR(( "FT_Stream_ReadULongLE:"
- " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
- stream->pos, stream->size ));
-
- return 0;
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Stream_ReadFields( FT_Stream stream,
- const FT_Frame_Field* fields,
- void* structure )
- {
- FT_Error error;
- FT_Bool frame_accessed = 0;
- FT_Byte* cursor;
-
-
- if ( !fields )
- return FT_THROW( Invalid_Argument );
-
- if ( !stream )
- return FT_THROW( Invalid_Stream_Handle );
-
- cursor = stream->cursor;
-
- error = FT_Err_Ok;
- do
- {
- FT_ULong value;
- FT_Int sign_shift;
- FT_Byte* p;
-
-
- switch ( fields->value )
- {
- case ft_frame_start: /* access a new frame */
- error = FT_Stream_EnterFrame( stream, fields->offset );
- if ( error )
- goto Exit;
-
- frame_accessed = 1;
- cursor = stream->cursor;
- fields++;
- continue; /* loop! */
-
- case ft_frame_bytes: /* read a byte sequence */
- case ft_frame_skip: /* skip some bytes */
- {
- FT_UInt len = fields->size;
-
-
- if ( cursor + len > stream->limit )
- {
- error = FT_THROW( Invalid_Stream_Operation );
- goto Exit;
- }
-
- if ( fields->value == ft_frame_bytes )
- {
- p = (FT_Byte*)structure + fields->offset;
- FT_MEM_COPY( p, cursor, len );
- }
- cursor += len;
- fields++;
- continue;
- }
-
- case ft_frame_byte:
- case ft_frame_schar: /* read a single byte */
- value = FT_NEXT_BYTE( cursor );
- sign_shift = 24;
- break;
-
- case ft_frame_short_be:
- case ft_frame_ushort_be: /* read a 2-byte big-endian short */
- value = FT_NEXT_USHORT( cursor );
- sign_shift = 16;
- break;
-
- case ft_frame_short_le:
- case ft_frame_ushort_le: /* read a 2-byte little-endian short */
- value = FT_NEXT_USHORT_LE( cursor );
- sign_shift = 16;
- break;
-
- case ft_frame_long_be:
- case ft_frame_ulong_be: /* read a 4-byte big-endian long */
- value = FT_NEXT_ULONG( cursor );
- sign_shift = 0;
- break;
-
- case ft_frame_long_le:
- case ft_frame_ulong_le: /* read a 4-byte little-endian long */
- value = FT_NEXT_ULONG_LE( cursor );
- sign_shift = 0;
- break;
-
- case ft_frame_off3_be:
- case ft_frame_uoff3_be: /* read a 3-byte big-endian long */
- value = FT_NEXT_UOFF3( cursor );
- sign_shift = 8;
- break;
-
- case ft_frame_off3_le:
- case ft_frame_uoff3_le: /* read a 3-byte little-endian long */
- value = FT_NEXT_UOFF3_LE( cursor );
- sign_shift = 8;
- break;
-
- default:
- /* otherwise, exit the loop */
- stream->cursor = cursor;
- goto Exit;
- }
-
- /* now, compute the signed value is necessary */
- if ( fields->value & FT_FRAME_OP_SIGNED )
- value = (FT_ULong)( (FT_Int32)( value << sign_shift ) >> sign_shift );
-
- /* finally, store the value in the object */
-
- p = (FT_Byte*)structure + fields->offset;
- switch ( fields->size )
- {
- case ( 8 / FT_CHAR_BIT ):
- *(FT_Byte*)p = (FT_Byte)value;
- break;
-
- case ( 16 / FT_CHAR_BIT ):
- *(FT_UShort*)p = (FT_UShort)value;
- break;
-
- case ( 32 / FT_CHAR_BIT ):
- *(FT_UInt32*)p = (FT_UInt32)value;
- break;
-
- default: /* for 64-bit systems */
- *(FT_ULong*)p = (FT_ULong)value;
- }
-
- /* go to next field */
- fields++;
- }
- while ( 1 );
-
- Exit:
- /* close the frame if it was opened by this read */
- if ( frame_accessed )
- FT_Stream_ExitFrame( stream );
-
- return error;
- }
-
-
-/* END */
diff --git a/src/base/ftstroke.c b/src/base/ftstroke.c
deleted file mode 100644
index d32de0d62..000000000
--- a/src/base/ftstroke.c
+++ /dev/null
@@ -1,2469 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftstroke.c */
-/* */
-/* FreeType path stroker (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_STROKER_H
-#include FT_TRIGONOMETRY_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-
-#include "basepic.h"
-
-
- /* declare an extern to access `ft_outline_glyph_class' globally */
- /* allocated in `ftglyph.c', and use the FT_OUTLINE_GLYPH_CLASS_GET */
- /* macro to access it when FT_CONFIG_OPTION_PIC is defined */
-#ifndef FT_CONFIG_OPTION_PIC
- FT_CALLBACK_TABLE const FT_Glyph_Class ft_outline_glyph_class;
-#endif
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( FT_StrokerBorder )
- FT_Outline_GetInsideBorder( FT_Outline* outline )
- {
- FT_Orientation o = FT_Outline_Get_Orientation( outline );
-
-
- return o == FT_ORIENTATION_TRUETYPE ? FT_STROKER_BORDER_RIGHT
- : FT_STROKER_BORDER_LEFT;
- }
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( FT_StrokerBorder )
- FT_Outline_GetOutsideBorder( FT_Outline* outline )
- {
- FT_Orientation o = FT_Outline_Get_Orientation( outline );
-
-
- return o == FT_ORIENTATION_TRUETYPE ? FT_STROKER_BORDER_LEFT
- : FT_STROKER_BORDER_RIGHT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** BEZIER COMPUTATIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define FT_SMALL_CONIC_THRESHOLD ( FT_ANGLE_PI / 6 )
-#define FT_SMALL_CUBIC_THRESHOLD ( FT_ANGLE_PI / 8 )
-
-#define FT_EPSILON 2
-
-#define FT_IS_SMALL( x ) ( (x) > -FT_EPSILON && (x) < FT_EPSILON )
-
-
- static FT_Pos
- ft_pos_abs( FT_Pos x )
- {
- return x >= 0 ? x : -x;
- }
-
-
- static void
- ft_conic_split( FT_Vector* base )
- {
- FT_Pos a, b;
-
-
- base[4].x = base[2].x;
- b = base[1].x;
- a = base[3].x = ( base[2].x + b ) / 2;
- b = base[1].x = ( base[0].x + b ) / 2;
- base[2].x = ( a + b ) / 2;
-
- base[4].y = base[2].y;
- b = base[1].y;
- a = base[3].y = ( base[2].y + b ) / 2;
- b = base[1].y = ( base[0].y + b ) / 2;
- base[2].y = ( a + b ) / 2;
- }
-
-
- static FT_Bool
- ft_conic_is_small_enough( FT_Vector* base,
- FT_Angle *angle_in,
- FT_Angle *angle_out )
- {
- FT_Vector d1, d2;
- FT_Angle theta;
- FT_Int close1, close2;
-
-
- d1.x = base[1].x - base[2].x;
- d1.y = base[1].y - base[2].y;
- d2.x = base[0].x - base[1].x;
- d2.y = base[0].y - base[1].y;
-
- close1 = FT_IS_SMALL( d1.x ) && FT_IS_SMALL( d1.y );
- close2 = FT_IS_SMALL( d2.x ) && FT_IS_SMALL( d2.y );
-
- if ( close1 )
- {
- if ( close2 )
- {
- /* basically a point; */
- /* do nothing to retain original direction */
- }
- else
- {
- *angle_in =
- *angle_out = FT_Atan2( d2.x, d2.y );
- }
- }
- else /* !close1 */
- {
- if ( close2 )
- {
- *angle_in =
- *angle_out = FT_Atan2( d1.x, d1.y );
- }
- else
- {
- *angle_in = FT_Atan2( d1.x, d1.y );
- *angle_out = FT_Atan2( d2.x, d2.y );
- }
- }
-
- theta = ft_pos_abs( FT_Angle_Diff( *angle_in, *angle_out ) );
-
- return FT_BOOL( theta < FT_SMALL_CONIC_THRESHOLD );
- }
-
-
- static void
- ft_cubic_split( FT_Vector* base )
- {
- FT_Pos a, b, c, d;
-
-
- base[6].x = base[3].x;
- c = base[1].x;
- d = base[2].x;
- base[1].x = a = ( base[0].x + c ) / 2;
- base[5].x = b = ( base[3].x + d ) / 2;
- c = ( c + d ) / 2;
- base[2].x = a = ( a + c ) / 2;
- base[4].x = b = ( b + c ) / 2;
- base[3].x = ( a + b ) / 2;
-
- base[6].y = base[3].y;
- c = base[1].y;
- d = base[2].y;
- base[1].y = a = ( base[0].y + c ) / 2;
- base[5].y = b = ( base[3].y + d ) / 2;
- c = ( c + d ) / 2;
- base[2].y = a = ( a + c ) / 2;
- base[4].y = b = ( b + c ) / 2;
- base[3].y = ( a + b ) / 2;
- }
-
-
- /* Return the average of `angle1' and `angle2'. */
- /* This gives correct result even if `angle1' and `angle2' */
- /* have opposite signs. */
- static FT_Angle
- ft_angle_mean( FT_Angle angle1,
- FT_Angle angle2 )
- {
- return angle1 + FT_Angle_Diff( angle1, angle2 ) / 2;
- }
-
-
- static FT_Bool
- ft_cubic_is_small_enough( FT_Vector* base,
- FT_Angle *angle_in,
- FT_Angle *angle_mid,
- FT_Angle *angle_out )
- {
- FT_Vector d1, d2, d3;
- FT_Angle theta1, theta2;
- FT_Int close1, close2, close3;
-
-
- d1.x = base[2].x - base[3].x;
- d1.y = base[2].y - base[3].y;
- d2.x = base[1].x - base[2].x;
- d2.y = base[1].y - base[2].y;
- d3.x = base[0].x - base[1].x;
- d3.y = base[0].y - base[1].y;
-
- close1 = FT_IS_SMALL( d1.x ) && FT_IS_SMALL( d1.y );
- close2 = FT_IS_SMALL( d2.x ) && FT_IS_SMALL( d2.y );
- close3 = FT_IS_SMALL( d3.x ) && FT_IS_SMALL( d3.y );
-
- if ( close1 )
- {
- if ( close2 )
- {
- if ( close3 )
- {
- /* basically a point; */
- /* do nothing to retain original direction */
- }
- else /* !close3 */
- {
- *angle_in =
- *angle_mid =
- *angle_out = FT_Atan2( d3.x, d3.y );
- }
- }
- else /* !close2 */
- {
- if ( close3 )
- {
- *angle_in =
- *angle_mid =
- *angle_out = FT_Atan2( d2.x, d2.y );
- }
- else /* !close3 */
- {
- *angle_in =
- *angle_mid = FT_Atan2( d2.x, d2.y );
- *angle_out = FT_Atan2( d3.x, d3.y );
- }
- }
- }
- else /* !close1 */
- {
- if ( close2 )
- {
- if ( close3 )
- {
- *angle_in =
- *angle_mid =
- *angle_out = FT_Atan2( d1.x, d1.y );
- }
- else /* !close3 */
- {
- *angle_in = FT_Atan2( d1.x, d1.y );
- *angle_out = FT_Atan2( d3.x, d3.y );
- *angle_mid = ft_angle_mean( *angle_in, *angle_out );
- }
- }
- else /* !close2 */
- {
- if ( close3 )
- {
- *angle_in = FT_Atan2( d1.x, d1.y );
- *angle_mid =
- *angle_out = FT_Atan2( d2.x, d2.y );
- }
- else /* !close3 */
- {
- *angle_in = FT_Atan2( d1.x, d1.y );
- *angle_mid = FT_Atan2( d2.x, d2.y );
- *angle_out = FT_Atan2( d3.x, d3.y );
- }
- }
- }
-
- theta1 = ft_pos_abs( FT_Angle_Diff( *angle_in, *angle_mid ) );
- theta2 = ft_pos_abs( FT_Angle_Diff( *angle_mid, *angle_out ) );
-
- return FT_BOOL( theta1 < FT_SMALL_CUBIC_THRESHOLD &&
- theta2 < FT_SMALL_CUBIC_THRESHOLD );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** STROKE BORDERS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef enum FT_StrokeTags_
- {
- FT_STROKE_TAG_ON = 1, /* on-curve point */
- FT_STROKE_TAG_CUBIC = 2, /* cubic off-point */
- FT_STROKE_TAG_BEGIN = 4, /* sub-path start */
- FT_STROKE_TAG_END = 8 /* sub-path end */
-
- } FT_StrokeTags;
-
-#define FT_STROKE_TAG_BEGIN_END ( FT_STROKE_TAG_BEGIN | FT_STROKE_TAG_END )
-
- typedef struct FT_StrokeBorderRec_
- {
- FT_UInt num_points;
- FT_UInt max_points;
- FT_Vector* points;
- FT_Byte* tags;
- FT_Bool movable; /* TRUE for ends of lineto borders */
- FT_Int start; /* index of current sub-path start point */
- FT_Memory memory;
- FT_Bool valid;
-
- } FT_StrokeBorderRec, *FT_StrokeBorder;
-
-
- static FT_Error
- ft_stroke_border_grow( FT_StrokeBorder border,
- FT_UInt new_points )
- {
- FT_UInt old_max = border->max_points;
- FT_UInt new_max = border->num_points + new_points;
- FT_Error error = FT_Err_Ok;
-
-
- if ( new_max > old_max )
- {
- FT_UInt cur_max = old_max;
- FT_Memory memory = border->memory;
-
-
- while ( cur_max < new_max )
- cur_max += ( cur_max >> 1 ) + 16;
-
- if ( FT_RENEW_ARRAY( border->points, old_max, cur_max ) ||
- FT_RENEW_ARRAY( border->tags, old_max, cur_max ) )
- goto Exit;
-
- border->max_points = cur_max;
- }
-
- Exit:
- return error;
- }
-
-
- static void
- ft_stroke_border_close( FT_StrokeBorder border,
- FT_Bool reverse )
- {
- FT_UInt start = (FT_UInt)border->start;
- FT_UInt count = border->num_points;
-
-
- FT_ASSERT( border->start >= 0 );
-
- /* don't record empty paths! */
- if ( count <= start + 1U )
- border->num_points = start;
- else
- {
- /* copy the last point to the start of this sub-path, since */
- /* it contains the `adjusted' starting coordinates */
- border->num_points = --count;
- border->points[start] = border->points[count];
-
- if ( reverse )
- {
- /* reverse the points */
- {
- FT_Vector* vec1 = border->points + start + 1;
- FT_Vector* vec2 = border->points + count - 1;
-
-
- for ( ; vec1 < vec2; vec1++, vec2-- )
- {
- FT_Vector tmp;
-
-
- tmp = *vec1;
- *vec1 = *vec2;
- *vec2 = tmp;
- }
- }
-
- /* then the tags */
- {
- FT_Byte* tag1 = border->tags + start + 1;
- FT_Byte* tag2 = border->tags + count - 1;
-
-
- for ( ; tag1 < tag2; tag1++, tag2-- )
- {
- FT_Byte tmp;
-
-
- tmp = *tag1;
- *tag1 = *tag2;
- *tag2 = tmp;
- }
- }
- }
-
- border->tags[start ] |= FT_STROKE_TAG_BEGIN;
- border->tags[count - 1] |= FT_STROKE_TAG_END;
- }
-
- border->start = -1;
- border->movable = FALSE;
- }
-
-
- static FT_Error
- ft_stroke_border_lineto( FT_StrokeBorder border,
- FT_Vector* to,
- FT_Bool movable )
- {
- FT_Error error = FT_Err_Ok;
-
-
- FT_ASSERT( border->start >= 0 );
-
- if ( border->movable )
- {
- /* move last point */
- border->points[border->num_points - 1] = *to;
- }
- else
- {
- /* don't add zero-length lineto */
- if ( border->num_points > 0 &&
- FT_IS_SMALL( border->points[border->num_points - 1].x - to->x ) &&
- FT_IS_SMALL( border->points[border->num_points - 1].y - to->y ) )
- return error;
-
- /* add one point */
- error = ft_stroke_border_grow( border, 1 );
- if ( !error )
- {
- FT_Vector* vec = border->points + border->num_points;
- FT_Byte* tag = border->tags + border->num_points;
-
-
- vec[0] = *to;
- tag[0] = FT_STROKE_TAG_ON;
-
- border->num_points += 1;
- }
- }
- border->movable = movable;
- return error;
- }
-
-
- static FT_Error
- ft_stroke_border_conicto( FT_StrokeBorder border,
- FT_Vector* control,
- FT_Vector* to )
- {
- FT_Error error;
-
-
- FT_ASSERT( border->start >= 0 );
-
- error = ft_stroke_border_grow( border, 2 );
- if ( !error )
- {
- FT_Vector* vec = border->points + border->num_points;
- FT_Byte* tag = border->tags + border->num_points;
-
-
- vec[0] = *control;
- vec[1] = *to;
-
- tag[0] = 0;
- tag[1] = FT_STROKE_TAG_ON;
-
- border->num_points += 2;
- }
-
- border->movable = FALSE;
-
- return error;
- }
-
-
- static FT_Error
- ft_stroke_border_cubicto( FT_StrokeBorder border,
- FT_Vector* control1,
- FT_Vector* control2,
- FT_Vector* to )
- {
- FT_Error error;
-
-
- FT_ASSERT( border->start >= 0 );
-
- error = ft_stroke_border_grow( border, 3 );
- if ( !error )
- {
- FT_Vector* vec = border->points + border->num_points;
- FT_Byte* tag = border->tags + border->num_points;
-
-
- vec[0] = *control1;
- vec[1] = *control2;
- vec[2] = *to;
-
- tag[0] = FT_STROKE_TAG_CUBIC;
- tag[1] = FT_STROKE_TAG_CUBIC;
- tag[2] = FT_STROKE_TAG_ON;
-
- border->num_points += 3;
- }
-
- border->movable = FALSE;
-
- return error;
- }
-
-
-#define FT_ARC_CUBIC_ANGLE ( FT_ANGLE_PI / 2 )
-
-
- static FT_Error
- ft_stroke_border_arcto( FT_StrokeBorder border,
- FT_Vector* center,
- FT_Fixed radius,
- FT_Angle angle_start,
- FT_Angle angle_diff )
- {
- FT_Angle total, angle, step, rotate, next, theta;
- FT_Vector a, b, a2, b2;
- FT_Fixed length;
- FT_Error error = FT_Err_Ok;
-
-
- /* compute start point */
- FT_Vector_From_Polar( &a, radius, angle_start );
- a.x += center->x;
- a.y += center->y;
-
- total = angle_diff;
- angle = angle_start;
- rotate = ( angle_diff >= 0 ) ? FT_ANGLE_PI2 : -FT_ANGLE_PI2;
-
- while ( total != 0 )
- {
- step = total;
- if ( step > FT_ARC_CUBIC_ANGLE )
- step = FT_ARC_CUBIC_ANGLE;
-
- else if ( step < -FT_ARC_CUBIC_ANGLE )
- step = -FT_ARC_CUBIC_ANGLE;
-
- next = angle + step;
- theta = step;
- if ( theta < 0 )
- theta = -theta;
-
- theta >>= 1;
-
- /* compute end point */
- FT_Vector_From_Polar( &b, radius, next );
- b.x += center->x;
- b.y += center->y;
-
- /* compute first and second control points */
- length = FT_MulDiv( radius, FT_Sin( theta ) * 4,
- ( 0x10000L + FT_Cos( theta ) ) * 3 );
-
- FT_Vector_From_Polar( &a2, length, angle + rotate );
- a2.x += a.x;
- a2.y += a.y;
-
- FT_Vector_From_Polar( &b2, length, next - rotate );
- b2.x += b.x;
- b2.y += b.y;
-
- /* add cubic arc */
- error = ft_stroke_border_cubicto( border, &a2, &b2, &b );
- if ( error )
- break;
-
- /* process the rest of the arc ?? */
- a = b;
- total -= step;
- angle = next;
- }
-
- return error;
- }
-
-
- static FT_Error
- ft_stroke_border_moveto( FT_StrokeBorder border,
- FT_Vector* to )
- {
- /* close current open path if any ? */
- if ( border->start >= 0 )
- ft_stroke_border_close( border, FALSE );
-
- border->start = (FT_Int)border->num_points;
- border->movable = FALSE;
-
- return ft_stroke_border_lineto( border, to, FALSE );
- }
-
-
- static void
- ft_stroke_border_init( FT_StrokeBorder border,
- FT_Memory memory )
- {
- border->memory = memory;
- border->points = NULL;
- border->tags = NULL;
-
- border->num_points = 0;
- border->max_points = 0;
- border->start = -1;
- border->valid = FALSE;
- }
-
-
- static void
- ft_stroke_border_reset( FT_StrokeBorder border )
- {
- border->num_points = 0;
- border->start = -1;
- border->valid = FALSE;
- }
-
-
- static void
- ft_stroke_border_done( FT_StrokeBorder border )
- {
- FT_Memory memory = border->memory;
-
-
- FT_FREE( border->points );
- FT_FREE( border->tags );
-
- border->num_points = 0;
- border->max_points = 0;
- border->start = -1;
- border->valid = FALSE;
- }
-
-
- static FT_Error
- ft_stroke_border_get_counts( FT_StrokeBorder border,
- FT_UInt *anum_points,
- FT_UInt *anum_contours )
- {
- FT_Error error = FT_Err_Ok;
- FT_UInt num_points = 0;
- FT_UInt num_contours = 0;
-
- FT_UInt count = border->num_points;
- FT_Vector* point = border->points;
- FT_Byte* tags = border->tags;
- FT_Int in_contour = 0;
-
-
- for ( ; count > 0; count--, num_points++, point++, tags++ )
- {
- if ( tags[0] & FT_STROKE_TAG_BEGIN )
- {
- if ( in_contour != 0 )
- goto Fail;
-
- in_contour = 1;
- }
- else if ( in_contour == 0 )
- goto Fail;
-
- if ( tags[0] & FT_STROKE_TAG_END )
- {
- in_contour = 0;
- num_contours++;
- }
- }
-
- if ( in_contour != 0 )
- goto Fail;
-
- border->valid = TRUE;
-
- Exit:
- *anum_points = num_points;
- *anum_contours = num_contours;
- return error;
-
- Fail:
- num_points = 0;
- num_contours = 0;
- goto Exit;
- }
-
-
- static void
- ft_stroke_border_export( FT_StrokeBorder border,
- FT_Outline* outline )
- {
- /* copy point locations */
- if ( border->num_points )
- FT_ARRAY_COPY( outline->points + outline->n_points,
- border->points,
- border->num_points );
-
- /* copy tags */
- {
- FT_UInt count = border->num_points;
- FT_Byte* read = border->tags;
- FT_Byte* write = (FT_Byte*)outline->tags + outline->n_points;
-
-
- for ( ; count > 0; count--, read++, write++ )
- {
- if ( *read & FT_STROKE_TAG_ON )
- *write = FT_CURVE_TAG_ON;
- else if ( *read & FT_STROKE_TAG_CUBIC )
- *write = FT_CURVE_TAG_CUBIC;
- else
- *write = FT_CURVE_TAG_CONIC;
- }
- }
-
- /* copy contours */
- {
- FT_UInt count = border->num_points;
- FT_Byte* tags = border->tags;
- FT_Short* write = outline->contours + outline->n_contours;
- FT_Short idx = (FT_Short)outline->n_points;
-
-
- for ( ; count > 0; count--, tags++, idx++ )
- {
- if ( *tags & FT_STROKE_TAG_END )
- {
- *write++ = idx;
- outline->n_contours++;
- }
- }
- }
-
- outline->n_points += (short)border->num_points;
-
- FT_ASSERT( FT_Outline_Check( outline ) == 0 );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** STROKER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define FT_SIDE_TO_ROTATE( s ) ( FT_ANGLE_PI2 - (s) * FT_ANGLE_PI )
-
- typedef struct FT_StrokerRec_
- {
- FT_Angle angle_in; /* direction into curr join */
- FT_Angle angle_out; /* direction out of join */
- FT_Vector center; /* current position */
- FT_Fixed line_length; /* length of last lineto */
- FT_Bool first_point; /* is this the start? */
- FT_Bool subpath_open; /* is the subpath open? */
- FT_Angle subpath_angle; /* subpath start direction */
- FT_Vector subpath_start; /* subpath start position */
- FT_Fixed subpath_line_length; /* subpath start lineto len */
- FT_Bool handle_wide_strokes; /* use wide strokes logic? */
-
- FT_Stroker_LineCap line_cap;
- FT_Stroker_LineJoin line_join;
- FT_Stroker_LineJoin line_join_saved;
- FT_Fixed miter_limit;
- FT_Fixed radius;
-
- FT_StrokeBorderRec borders[2];
- FT_Library library;
-
- } FT_StrokerRec;
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stroker_New( FT_Library library,
- FT_Stroker *astroker )
- {
- FT_Error error; /* assigned in FT_NEW */
- FT_Memory memory;
- FT_Stroker stroker = NULL;
-
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- if ( !astroker )
- return FT_THROW( Invalid_Argument );
-
- memory = library->memory;
-
- if ( !FT_NEW( stroker ) )
- {
- stroker->library = library;
-
- ft_stroke_border_init( &stroker->borders[0], memory );
- ft_stroke_border_init( &stroker->borders[1], memory );
- }
-
- *astroker = stroker;
-
- return error;
- }
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( void )
- FT_Stroker_Set( FT_Stroker stroker,
- FT_Fixed radius,
- FT_Stroker_LineCap line_cap,
- FT_Stroker_LineJoin line_join,
- FT_Fixed miter_limit )
- {
- if ( !stroker )
- return;
-
- stroker->radius = radius;
- stroker->line_cap = line_cap;
- stroker->line_join = line_join;
- stroker->miter_limit = miter_limit;
-
- /* ensure miter limit has sensible value */
- if ( stroker->miter_limit < 0x10000L )
- stroker->miter_limit = 0x10000L;
-
- /* save line join style: */
- /* line join style can be temporarily changed when stroking curves */
- stroker->line_join_saved = line_join;
-
- FT_Stroker_Rewind( stroker );
- }
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( void )
- FT_Stroker_Rewind( FT_Stroker stroker )
- {
- if ( stroker )
- {
- ft_stroke_border_reset( &stroker->borders[0] );
- ft_stroke_border_reset( &stroker->borders[1] );
- }
- }
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( void )
- FT_Stroker_Done( FT_Stroker stroker )
- {
- if ( stroker )
- {
- FT_Memory memory = stroker->library->memory;
-
-
- ft_stroke_border_done( &stroker->borders[0] );
- ft_stroke_border_done( &stroker->borders[1] );
-
- stroker->library = NULL;
- FT_FREE( stroker );
- }
- }
-
-
- /* create a circular arc at a corner or cap */
- static FT_Error
- ft_stroker_arcto( FT_Stroker stroker,
- FT_Int side )
- {
- FT_Angle total, rotate;
- FT_Fixed radius = stroker->radius;
- FT_Error error = FT_Err_Ok;
- FT_StrokeBorder border = stroker->borders + side;
-
-
- rotate = FT_SIDE_TO_ROTATE( side );
-
- total = FT_Angle_Diff( stroker->angle_in, stroker->angle_out );
- if ( total == FT_ANGLE_PI )
- total = -rotate * 2;
-
- error = ft_stroke_border_arcto( border,
- &stroker->center,
- radius,
- stroker->angle_in + rotate,
- total );
- border->movable = FALSE;
- return error;
- }
-
-
- /* add a cap at the end of an opened path */
- static FT_Error
- ft_stroker_cap( FT_Stroker stroker,
- FT_Angle angle,
- FT_Int side )
- {
- FT_Error error = FT_Err_Ok;
-
-
- if ( stroker->line_cap == FT_STROKER_LINECAP_ROUND )
- {
- /* add a round cap */
- stroker->angle_in = angle;
- stroker->angle_out = angle + FT_ANGLE_PI;
-
- error = ft_stroker_arcto( stroker, side );
- }
- else if ( stroker->line_cap == FT_STROKER_LINECAP_SQUARE )
- {
- /* add a square cap */
- FT_Vector delta, delta2;
- FT_Angle rotate = FT_SIDE_TO_ROTATE( side );
- FT_Fixed radius = stroker->radius;
- FT_StrokeBorder border = stroker->borders + side;
-
-
- FT_Vector_From_Polar( &delta2, radius, angle + rotate );
- FT_Vector_From_Polar( &delta, radius, angle );
-
- delta.x += stroker->center.x + delta2.x;
- delta.y += stroker->center.y + delta2.y;
-
- error = ft_stroke_border_lineto( border, &delta, FALSE );
- if ( error )
- goto Exit;
-
- FT_Vector_From_Polar( &delta2, radius, angle - rotate );
- FT_Vector_From_Polar( &delta, radius, angle );
-
- delta.x += delta2.x + stroker->center.x;
- delta.y += delta2.y + stroker->center.y;
-
- error = ft_stroke_border_lineto( border, &delta, FALSE );
- }
- else if ( stroker->line_cap == FT_STROKER_LINECAP_BUTT )
- {
- /* add a butt ending */
- FT_Vector delta;
- FT_Angle rotate = FT_SIDE_TO_ROTATE( side );
- FT_Fixed radius = stroker->radius;
- FT_StrokeBorder border = stroker->borders + side;
-
-
- FT_Vector_From_Polar( &delta, radius, angle + rotate );
-
- delta.x += stroker->center.x;
- delta.y += stroker->center.y;
-
- error = ft_stroke_border_lineto( border, &delta, FALSE );
- if ( error )
- goto Exit;
-
- FT_Vector_From_Polar( &delta, radius, angle - rotate );
-
- delta.x += stroker->center.x;
- delta.y += stroker->center.y;
-
- error = ft_stroke_border_lineto( border, &delta, FALSE );
- }
-
- Exit:
- return error;
- }
-
-
- /* process an inside corner, i.e. compute intersection */
- static FT_Error
- ft_stroker_inside( FT_Stroker stroker,
- FT_Int side,
- FT_Fixed line_length )
- {
- FT_StrokeBorder border = stroker->borders + side;
- FT_Angle phi, theta, rotate;
- FT_Fixed length, thcos;
- FT_Vector delta;
- FT_Error error = FT_Err_Ok;
- FT_Bool intersect; /* use intersection of lines? */
-
-
- rotate = FT_SIDE_TO_ROTATE( side );
-
- theta = FT_Angle_Diff( stroker->angle_in, stroker->angle_out ) / 2;
-
- /* Only intersect borders if between two lineto's and both */
- /* lines are long enough (line_length is zero for curves). */
- /* Also avoid U-turns of nearly 180 degree. */
- if ( !border->movable || line_length == 0 ||
- theta > 0x59C000 || theta < -0x59C000 )
- intersect = FALSE;
- else
- {
- /* compute minimum required length of lines */
- FT_Fixed min_length = ft_pos_abs( FT_MulFix( stroker->radius,
- FT_Tan( theta ) ) );
-
-
- intersect = FT_BOOL( min_length &&
- stroker->line_length >= min_length &&
- line_length >= min_length );
- }
-
- if ( !intersect )
- {
- FT_Vector_From_Polar( &delta, stroker->radius,
- stroker->angle_out + rotate );
- delta.x += stroker->center.x;
- delta.y += stroker->center.y;
-
- border->movable = FALSE;
- }
- else
- {
- /* compute median angle */
- phi = stroker->angle_in + theta;
-
- thcos = FT_Cos( theta );
-
- length = FT_DivFix( stroker->radius, thcos );
-
- FT_Vector_From_Polar( &delta, length, phi + rotate );
- delta.x += stroker->center.x;
- delta.y += stroker->center.y;
- }
-
- error = ft_stroke_border_lineto( border, &delta, FALSE );
-
- return error;
- }
-
-
- /* process an outside corner, i.e. compute bevel/miter/round */
- static FT_Error
- ft_stroker_outside( FT_Stroker stroker,
- FT_Int side,
- FT_Fixed line_length )
- {
- FT_StrokeBorder border = stroker->borders + side;
- FT_Error error;
- FT_Angle rotate;
-
-
- if ( stroker->line_join == FT_STROKER_LINEJOIN_ROUND )
- error = ft_stroker_arcto( stroker, side );
- else
- {
- /* this is a mitered (pointed) or beveled (truncated) corner */
- FT_Fixed sigma = 0, radius = stroker->radius;
- FT_Angle theta = 0, phi = 0;
- FT_Fixed thcos = 0;
- FT_Bool bevel, fixed_bevel;
-
-
- rotate = FT_SIDE_TO_ROTATE( side );
-
- bevel =
- FT_BOOL( stroker->line_join == FT_STROKER_LINEJOIN_BEVEL );
-
- fixed_bevel =
- FT_BOOL( stroker->line_join != FT_STROKER_LINEJOIN_MITER_VARIABLE );
-
- if ( !bevel )
- {
- theta = FT_Angle_Diff( stroker->angle_in, stroker->angle_out );
-
- if ( theta == FT_ANGLE_PI )
- {
- theta = rotate;
- phi = stroker->angle_in;
- }
- else
- {
- theta /= 2;
- phi = stroker->angle_in + theta + rotate;
- }
-
- thcos = FT_Cos( theta );
- sigma = FT_MulFix( stroker->miter_limit, thcos );
-
- /* is miter limit exceeded? */
- if ( sigma < 0x10000L )
- {
- /* don't create variable bevels for very small deviations; */
- /* FT_Sin(x) = 0 for x <= 57 */
- if ( fixed_bevel || ft_pos_abs( theta ) > 57 )
- bevel = TRUE;
- }
- }
-
- if ( bevel ) /* this is a bevel (broken angle) */
- {
- if ( fixed_bevel )
- {
- /* the outer corners are simply joined together */
- FT_Vector delta;
-
-
- /* add bevel */
- FT_Vector_From_Polar( &delta,
- radius,
- stroker->angle_out + rotate );
- delta.x += stroker->center.x;
- delta.y += stroker->center.y;
-
- border->movable = FALSE;
- error = ft_stroke_border_lineto( border, &delta, FALSE );
- }
- else /* variable bevel */
- {
- /* the miter is truncated */
- FT_Vector middle, delta;
- FT_Fixed length;
-
-
- /* compute middle point */
- FT_Vector_From_Polar( &middle,
- FT_MulFix( radius, stroker->miter_limit ),
- phi );
- middle.x += stroker->center.x;
- middle.y += stroker->center.y;
-
- /* compute first angle point */
- length = FT_MulDiv( radius, 0x10000L - sigma,
- ft_pos_abs( FT_Sin( theta ) ) );
-
- FT_Vector_From_Polar( &delta, length, phi + rotate );
- delta.x += middle.x;
- delta.y += middle.y;
-
- error = ft_stroke_border_lineto( border, &delta, FALSE );
- if ( error )
- goto Exit;
-
- /* compute second angle point */
- FT_Vector_From_Polar( &delta, length, phi - rotate );
- delta.x += middle.x;
- delta.y += middle.y;
-
- error = ft_stroke_border_lineto( border, &delta, FALSE );
- if ( error )
- goto Exit;
-
- /* finally, add an end point; only needed if not lineto */
- /* (line_length is zero for curves) */
- if ( line_length == 0 )
- {
- FT_Vector_From_Polar( &delta,
- radius,
- stroker->angle_out + rotate );
-
- delta.x += stroker->center.x;
- delta.y += stroker->center.y;
-
- error = ft_stroke_border_lineto( border, &delta, FALSE );
- }
- }
- }
- else /* this is a miter (intersection) */
- {
- FT_Fixed length;
- FT_Vector delta;
-
-
- length = FT_DivFix( stroker->radius, thcos );
-
- FT_Vector_From_Polar( &delta, length, phi );
- delta.x += stroker->center.x;
- delta.y += stroker->center.y;
-
- error = ft_stroke_border_lineto( border, &delta, FALSE );
- if ( error )
- goto Exit;
-
- /* now add an end point; only needed if not lineto */
- /* (line_length is zero for curves) */
- if ( line_length == 0 )
- {
- FT_Vector_From_Polar( &delta,
- stroker->radius,
- stroker->angle_out + rotate );
- delta.x += stroker->center.x;
- delta.y += stroker->center.y;
-
- error = ft_stroke_border_lineto( border, &delta, FALSE );
- }
- }
- }
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- ft_stroker_process_corner( FT_Stroker stroker,
- FT_Fixed line_length )
- {
- FT_Error error = FT_Err_Ok;
- FT_Angle turn;
- FT_Int inside_side;
-
-
- turn = FT_Angle_Diff( stroker->angle_in, stroker->angle_out );
-
- /* no specific corner processing is required if the turn is 0 */
- if ( turn == 0 )
- goto Exit;
-
- /* when we turn to the right, the inside side is 0 */
- /* otherwise, the inside side is 1 */
- inside_side = ( turn < 0 );
-
- /* process the inside side */
- error = ft_stroker_inside( stroker, inside_side, line_length );
- if ( error )
- goto Exit;
-
- /* process the outside side */
- error = ft_stroker_outside( stroker, !inside_side, line_length );
-
- Exit:
- return error;
- }
-
-
- /* add two points to the left and right borders corresponding to the */
- /* start of the subpath */
- static FT_Error
- ft_stroker_subpath_start( FT_Stroker stroker,
- FT_Angle start_angle,
- FT_Fixed line_length )
- {
- FT_Vector delta;
- FT_Vector point;
- FT_Error error;
- FT_StrokeBorder border;
-
-
- FT_Vector_From_Polar( &delta, stroker->radius,
- start_angle + FT_ANGLE_PI2 );
-
- point.x = stroker->center.x + delta.x;
- point.y = stroker->center.y + delta.y;
-
- border = stroker->borders;
- error = ft_stroke_border_moveto( border, &point );
- if ( error )
- goto Exit;
-
- point.x = stroker->center.x - delta.x;
- point.y = stroker->center.y - delta.y;
-
- border++;
- error = ft_stroke_border_moveto( border, &point );
-
- /* save angle, position, and line length for last join */
- /* (line_length is zero for curves) */
- stroker->subpath_angle = start_angle;
- stroker->first_point = FALSE;
- stroker->subpath_line_length = line_length;
-
- Exit:
- return error;
- }
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stroker_LineTo( FT_Stroker stroker,
- FT_Vector* to )
- {
- FT_Error error = FT_Err_Ok;
- FT_StrokeBorder border;
- FT_Vector delta;
- FT_Angle angle;
- FT_Int side;
- FT_Fixed line_length;
-
-
- if ( !stroker || !to )
- return FT_THROW( Invalid_Argument );
-
- delta.x = to->x - stroker->center.x;
- delta.y = to->y - stroker->center.y;
-
- /* a zero-length lineto is a no-op; avoid creating a spurious corner */
- if ( delta.x == 0 && delta.y == 0 )
- goto Exit;
-
- /* compute length of line */
- line_length = FT_Vector_Length( &delta );
-
- angle = FT_Atan2( delta.x, delta.y );
- FT_Vector_From_Polar( &delta, stroker->radius, angle + FT_ANGLE_PI2 );
-
- /* process corner if necessary */
- if ( stroker->first_point )
- {
- /* This is the first segment of a subpath. We need to */
- /* add a point to each border at their respective starting */
- /* point locations. */
- error = ft_stroker_subpath_start( stroker, angle, line_length );
- if ( error )
- goto Exit;
- }
- else
- {
- /* process the current corner */
- stroker->angle_out = angle;
- error = ft_stroker_process_corner( stroker, line_length );
- if ( error )
- goto Exit;
- }
-
- /* now add a line segment to both the `inside' and `outside' paths */
- for ( border = stroker->borders, side = 1; side >= 0; side--, border++ )
- {
- FT_Vector point;
-
-
- point.x = to->x + delta.x;
- point.y = to->y + delta.y;
-
- /* the ends of lineto borders are movable */
- error = ft_stroke_border_lineto( border, &point, TRUE );
- if ( error )
- goto Exit;
-
- delta.x = -delta.x;
- delta.y = -delta.y;
- }
-
- stroker->angle_in = angle;
- stroker->center = *to;
- stroker->line_length = line_length;
-
- Exit:
- return error;
- }
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stroker_ConicTo( FT_Stroker stroker,
- FT_Vector* control,
- FT_Vector* to )
- {
- FT_Error error = FT_Err_Ok;
- FT_Vector bez_stack[34];
- FT_Vector* arc;
- FT_Vector* limit = bez_stack + 30;
- FT_Bool first_arc = TRUE;
-
-
- if ( !stroker || !control || !to )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- /* if all control points are coincident, this is a no-op; */
- /* avoid creating a spurious corner */
- if ( FT_IS_SMALL( stroker->center.x - control->x ) &&
- FT_IS_SMALL( stroker->center.y - control->y ) &&
- FT_IS_SMALL( control->x - to->x ) &&
- FT_IS_SMALL( control->y - to->y ) )
- {
- stroker->center = *to;
- goto Exit;
- }
-
- arc = bez_stack;
- arc[0] = *to;
- arc[1] = *control;
- arc[2] = stroker->center;
-
- while ( arc >= bez_stack )
- {
- FT_Angle angle_in, angle_out;
-
-
- /* initialize with current direction */
- angle_in = angle_out = stroker->angle_in;
-
- if ( arc < limit &&
- !ft_conic_is_small_enough( arc, &angle_in, &angle_out ) )
- {
- if ( stroker->first_point )
- stroker->angle_in = angle_in;
-
- ft_conic_split( arc );
- arc += 2;
- continue;
- }
-
- if ( first_arc )
- {
- first_arc = FALSE;
-
- /* process corner if necessary */
- if ( stroker->first_point )
- error = ft_stroker_subpath_start( stroker, angle_in, 0 );
- else
- {
- stroker->angle_out = angle_in;
- error = ft_stroker_process_corner( stroker, 0 );
- }
- }
- else if ( ft_pos_abs( FT_Angle_Diff( stroker->angle_in, angle_in ) ) >
- FT_SMALL_CONIC_THRESHOLD / 4 )
- {
- /* if the deviation from one arc to the next is too great, */
- /* add a round corner */
- stroker->center = arc[2];
- stroker->angle_out = angle_in;
- stroker->line_join = FT_STROKER_LINEJOIN_ROUND;
-
- error = ft_stroker_process_corner( stroker, 0 );
-
- /* reinstate line join style */
- stroker->line_join = stroker->line_join_saved;
- }
-
- if ( error )
- goto Exit;
-
- /* the arc's angle is small enough; we can add it directly to each */
- /* border */
- {
- FT_Vector ctrl, end;
- FT_Angle theta, phi, rotate, alpha0 = 0;
- FT_Fixed length;
- FT_StrokeBorder border;
- FT_Int side;
-
-
- theta = FT_Angle_Diff( angle_in, angle_out ) / 2;
- phi = angle_in + theta;
- length = FT_DivFix( stroker->radius, FT_Cos( theta ) );
-
- /* compute direction of original arc */
- if ( stroker->handle_wide_strokes )
- alpha0 = FT_Atan2( arc[0].x - arc[2].x, arc[0].y - arc[2].y );
-
- for ( border = stroker->borders, side = 0;
- side <= 1;
- side++, border++ )
- {
- rotate = FT_SIDE_TO_ROTATE( side );
-
- /* compute control point */
- FT_Vector_From_Polar( &ctrl, length, phi + rotate );
- ctrl.x += arc[1].x;
- ctrl.y += arc[1].y;
-
- /* compute end point */
- FT_Vector_From_Polar( &end, stroker->radius, angle_out + rotate );
- end.x += arc[0].x;
- end.y += arc[0].y;
-
- if ( stroker->handle_wide_strokes )
- {
- FT_Vector start;
- FT_Angle alpha1;
-
-
- /* determine whether the border radius is greater than the */
- /* radius of curvature of the original arc */
- start = border->points[border->num_points - 1];
-
- alpha1 = FT_Atan2( end.x - start.x, end.y - start.y );
-
- /* is the direction of the border arc opposite to */
- /* that of the original arc? */
- if ( ft_pos_abs( FT_Angle_Diff( alpha0, alpha1 ) ) >
- FT_ANGLE_PI / 2 )
- {
- FT_Angle beta, gamma;
- FT_Vector bvec, delta;
- FT_Fixed blen, sinA, sinB, alen;
-
-
- /* use the sine rule to find the intersection point */
- beta = FT_Atan2( arc[2].x - start.x, arc[2].y - start.y );
- gamma = FT_Atan2( arc[0].x - end.x, arc[0].y - end.y );
-
- bvec.x = end.x - start.x;
- bvec.y = end.y - start.y;
-
- blen = FT_Vector_Length( &bvec );
-
- sinA = ft_pos_abs( FT_Sin( alpha1 - gamma ) );
- sinB = ft_pos_abs( FT_Sin( beta - gamma ) );
-
- alen = FT_MulDiv( blen, sinA, sinB );
-
- FT_Vector_From_Polar( &delta, alen, beta );
- delta.x += start.x;
- delta.y += start.y;
-
- /* circumnavigate the negative sector backwards */
- border->movable = FALSE;
- error = ft_stroke_border_lineto( border, &delta, FALSE );
- if ( error )
- goto Exit;
- error = ft_stroke_border_lineto( border, &end, FALSE );
- if ( error )
- goto Exit;
- error = ft_stroke_border_conicto( border, &ctrl, &start );
- if ( error )
- goto Exit;
- /* and then move to the endpoint */
- error = ft_stroke_border_lineto( border, &end, FALSE );
- if ( error )
- goto Exit;
-
- continue;
- }
-
- /* else fall through */
- }
-
- /* simply add an arc */
- error = ft_stroke_border_conicto( border, &ctrl, &end );
- if ( error )
- goto Exit;
- }
- }
-
- arc -= 2;
-
- stroker->angle_in = angle_out;
- }
-
- stroker->center = *to;
-
- Exit:
- return error;
- }
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stroker_CubicTo( FT_Stroker stroker,
- FT_Vector* control1,
- FT_Vector* control2,
- FT_Vector* to )
- {
- FT_Error error = FT_Err_Ok;
- FT_Vector bez_stack[37];
- FT_Vector* arc;
- FT_Vector* limit = bez_stack + 32;
- FT_Bool first_arc = TRUE;
-
-
- if ( !stroker || !control1 || !control2 || !to )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- /* if all control points are coincident, this is a no-op; */
- /* avoid creating a spurious corner */
- if ( FT_IS_SMALL( stroker->center.x - control1->x ) &&
- FT_IS_SMALL( stroker->center.y - control1->y ) &&
- FT_IS_SMALL( control1->x - control2->x ) &&
- FT_IS_SMALL( control1->y - control2->y ) &&
- FT_IS_SMALL( control2->x - to->x ) &&
- FT_IS_SMALL( control2->y - to->y ) )
- {
- stroker->center = *to;
- goto Exit;
- }
-
- arc = bez_stack;
- arc[0] = *to;
- arc[1] = *control2;
- arc[2] = *control1;
- arc[3] = stroker->center;
-
- while ( arc >= bez_stack )
- {
- FT_Angle angle_in, angle_mid, angle_out;
-
-
- /* initialize with current direction */
- angle_in = angle_out = angle_mid = stroker->angle_in;
-
- if ( arc < limit &&
- !ft_cubic_is_small_enough( arc, &angle_in,
- &angle_mid, &angle_out ) )
- {
- if ( stroker->first_point )
- stroker->angle_in = angle_in;
-
- ft_cubic_split( arc );
- arc += 3;
- continue;
- }
-
- if ( first_arc )
- {
- first_arc = FALSE;
-
- /* process corner if necessary */
- if ( stroker->first_point )
- error = ft_stroker_subpath_start( stroker, angle_in, 0 );
- else
- {
- stroker->angle_out = angle_in;
- error = ft_stroker_process_corner( stroker, 0 );
- }
- }
- else if ( ft_pos_abs( FT_Angle_Diff( stroker->angle_in, angle_in ) ) >
- FT_SMALL_CUBIC_THRESHOLD / 4 )
- {
- /* if the deviation from one arc to the next is too great, */
- /* add a round corner */
- stroker->center = arc[3];
- stroker->angle_out = angle_in;
- stroker->line_join = FT_STROKER_LINEJOIN_ROUND;
-
- error = ft_stroker_process_corner( stroker, 0 );
-
- /* reinstate line join style */
- stroker->line_join = stroker->line_join_saved;
- }
-
- if ( error )
- goto Exit;
-
- /* the arc's angle is small enough; we can add it directly to each */
- /* border */
- {
- FT_Vector ctrl1, ctrl2, end;
- FT_Angle theta1, phi1, theta2, phi2, rotate, alpha0 = 0;
- FT_Fixed length1, length2;
- FT_StrokeBorder border;
- FT_Int side;
-
-
- theta1 = FT_Angle_Diff( angle_in, angle_mid ) / 2;
- theta2 = FT_Angle_Diff( angle_mid, angle_out ) / 2;
- phi1 = ft_angle_mean( angle_in, angle_mid );
- phi2 = ft_angle_mean( angle_mid, angle_out );
- length1 = FT_DivFix( stroker->radius, FT_Cos( theta1 ) );
- length2 = FT_DivFix( stroker->radius, FT_Cos( theta2 ) );
-
- /* compute direction of original arc */
- if ( stroker->handle_wide_strokes )
- alpha0 = FT_Atan2( arc[0].x - arc[3].x, arc[0].y - arc[3].y );
-
- for ( border = stroker->borders, side = 0;
- side <= 1;
- side++, border++ )
- {
- rotate = FT_SIDE_TO_ROTATE( side );
-
- /* compute control points */
- FT_Vector_From_Polar( &ctrl1, length1, phi1 + rotate );
- ctrl1.x += arc[2].x;
- ctrl1.y += arc[2].y;
-
- FT_Vector_From_Polar( &ctrl2, length2, phi2 + rotate );
- ctrl2.x += arc[1].x;
- ctrl2.y += arc[1].y;
-
- /* compute end point */
- FT_Vector_From_Polar( &end, stroker->radius, angle_out + rotate );
- end.x += arc[0].x;
- end.y += arc[0].y;
-
- if ( stroker->handle_wide_strokes )
- {
- FT_Vector start;
- FT_Angle alpha1;
-
-
- /* determine whether the border radius is greater than the */
- /* radius of curvature of the original arc */
- start = border->points[border->num_points - 1];
-
- alpha1 = FT_Atan2( end.x - start.x, end.y - start.y );
-
- /* is the direction of the border arc opposite to */
- /* that of the original arc? */
- if ( ft_pos_abs( FT_Angle_Diff( alpha0, alpha1 ) ) >
- FT_ANGLE_PI / 2 )
- {
- FT_Angle beta, gamma;
- FT_Vector bvec, delta;
- FT_Fixed blen, sinA, sinB, alen;
-
-
- /* use the sine rule to find the intersection point */
- beta = FT_Atan2( arc[3].x - start.x, arc[3].y - start.y );
- gamma = FT_Atan2( arc[0].x - end.x, arc[0].y - end.y );
-
- bvec.x = end.x - start.x;
- bvec.y = end.y - start.y;
-
- blen = FT_Vector_Length( &bvec );
-
- sinA = ft_pos_abs( FT_Sin( alpha1 - gamma ) );
- sinB = ft_pos_abs( FT_Sin( beta - gamma ) );
-
- alen = FT_MulDiv( blen, sinA, sinB );
-
- FT_Vector_From_Polar( &delta, alen, beta );
- delta.x += start.x;
- delta.y += start.y;
-
- /* circumnavigate the negative sector backwards */
- border->movable = FALSE;
- error = ft_stroke_border_lineto( border, &delta, FALSE );
- if ( error )
- goto Exit;
- error = ft_stroke_border_lineto( border, &end, FALSE );
- if ( error )
- goto Exit;
- error = ft_stroke_border_cubicto( border,
- &ctrl2,
- &ctrl1,
- &start );
- if ( error )
- goto Exit;
- /* and then move to the endpoint */
- error = ft_stroke_border_lineto( border, &end, FALSE );
- if ( error )
- goto Exit;
-
- continue;
- }
-
- /* else fall through */
- }
-
- /* simply add an arc */
- error = ft_stroke_border_cubicto( border, &ctrl1, &ctrl2, &end );
- if ( error )
- goto Exit;
- }
- }
-
- arc -= 3;
-
- stroker->angle_in = angle_out;
- }
-
- stroker->center = *to;
-
- Exit:
- return error;
- }
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stroker_BeginSubPath( FT_Stroker stroker,
- FT_Vector* to,
- FT_Bool open )
- {
- if ( !stroker || !to )
- return FT_THROW( Invalid_Argument );
-
- /* We cannot process the first point, because there is not enough */
- /* information regarding its corner/cap. The latter will be processed */
- /* in the `FT_Stroker_EndSubPath' routine. */
- /* */
- stroker->first_point = TRUE;
- stroker->center = *to;
- stroker->subpath_open = open;
-
- /* Determine if we need to check whether the border radius is greater */
- /* than the radius of curvature of a curve, to handle this case */
- /* specially. This is only required if bevel joins or butt caps may */
- /* be created, because round & miter joins and round & square caps */
- /* cover the negative sector created with wide strokes. */
- stroker->handle_wide_strokes =
- FT_BOOL( stroker->line_join != FT_STROKER_LINEJOIN_ROUND ||
- ( stroker->subpath_open &&
- stroker->line_cap == FT_STROKER_LINECAP_BUTT ) );
-
- /* record the subpath start point for each border */
- stroker->subpath_start = *to;
-
- stroker->angle_in = 0;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Error
- ft_stroker_add_reverse_left( FT_Stroker stroker,
- FT_Bool open )
- {
- FT_StrokeBorder right = stroker->borders + 0;
- FT_StrokeBorder left = stroker->borders + 1;
- FT_Int new_points;
- FT_Error error = FT_Err_Ok;
-
-
- FT_ASSERT( left->start >= 0 );
-
- new_points = (FT_Int)left->num_points - left->start;
- if ( new_points > 0 )
- {
- error = ft_stroke_border_grow( right, (FT_UInt)new_points );
- if ( error )
- goto Exit;
-
- {
- FT_Vector* dst_point = right->points + right->num_points;
- FT_Byte* dst_tag = right->tags + right->num_points;
- FT_Vector* src_point = left->points + left->num_points - 1;
- FT_Byte* src_tag = left->tags + left->num_points - 1;
-
-
- while ( src_point >= left->points + left->start )
- {
- *dst_point = *src_point;
- *dst_tag = *src_tag;
-
- if ( open )
- dst_tag[0] &= ~FT_STROKE_TAG_BEGIN_END;
- else
- {
- FT_Byte ttag =
- (FT_Byte)( dst_tag[0] & FT_STROKE_TAG_BEGIN_END );
-
-
- /* switch begin/end tags if necessary */
- if ( ttag == FT_STROKE_TAG_BEGIN ||
- ttag == FT_STROKE_TAG_END )
- dst_tag[0] ^= FT_STROKE_TAG_BEGIN_END;
- }
-
- src_point--;
- src_tag--;
- dst_point++;
- dst_tag++;
- }
- }
-
- left->num_points = (FT_UInt)left->start;
- right->num_points += (FT_UInt)new_points;
-
- right->movable = FALSE;
- left->movable = FALSE;
- }
-
- Exit:
- return error;
- }
-
-
- /* documentation is in ftstroke.h */
-
- /* there's a lot of magic in this function! */
- FT_EXPORT_DEF( FT_Error )
- FT_Stroker_EndSubPath( FT_Stroker stroker )
- {
- FT_Error error = FT_Err_Ok;
-
-
- if ( !stroker )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- if ( stroker->subpath_open )
- {
- FT_StrokeBorder right = stroker->borders;
-
-
- /* All right, this is an opened path, we need to add a cap between */
- /* right & left, add the reverse of left, then add a final cap */
- /* between left & right. */
- error = ft_stroker_cap( stroker, stroker->angle_in, 0 );
- if ( error )
- goto Exit;
-
- /* add reversed points from `left' to `right' */
- error = ft_stroker_add_reverse_left( stroker, TRUE );
- if ( error )
- goto Exit;
-
- /* now add the final cap */
- stroker->center = stroker->subpath_start;
- error = ft_stroker_cap( stroker,
- stroker->subpath_angle + FT_ANGLE_PI, 0 );
- if ( error )
- goto Exit;
-
- /* Now end the right subpath accordingly. The left one is */
- /* rewind and doesn't need further processing. */
- ft_stroke_border_close( right, FALSE );
- }
- else
- {
- FT_Angle turn;
- FT_Int inside_side;
-
-
- /* close the path if needed */
- if ( stroker->center.x != stroker->subpath_start.x ||
- stroker->center.y != stroker->subpath_start.y )
- {
- error = FT_Stroker_LineTo( stroker, &stroker->subpath_start );
- if ( error )
- goto Exit;
- }
-
- /* process the corner */
- stroker->angle_out = stroker->subpath_angle;
- turn = FT_Angle_Diff( stroker->angle_in,
- stroker->angle_out );
-
- /* no specific corner processing is required if the turn is 0 */
- if ( turn != 0 )
- {
- /* when we turn to the right, the inside side is 0 */
- /* otherwise, the inside side is 1 */
- inside_side = ( turn < 0 );
-
- error = ft_stroker_inside( stroker,
- inside_side,
- stroker->subpath_line_length );
- if ( error )
- goto Exit;
-
- /* process the outside side */
- error = ft_stroker_outside( stroker,
- !inside_side,
- stroker->subpath_line_length );
- if ( error )
- goto Exit;
- }
-
- /* then end our two subpaths */
- ft_stroke_border_close( stroker->borders + 0, FALSE );
- ft_stroke_border_close( stroker->borders + 1, TRUE );
- }
-
- Exit:
- return error;
- }
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stroker_GetBorderCounts( FT_Stroker stroker,
- FT_StrokerBorder border,
- FT_UInt *anum_points,
- FT_UInt *anum_contours )
- {
- FT_UInt num_points = 0, num_contours = 0;
- FT_Error error;
-
-
- if ( !stroker || border > 1 )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- error = ft_stroke_border_get_counts( stroker->borders + border,
- &num_points, &num_contours );
- Exit:
- if ( anum_points )
- *anum_points = num_points;
-
- if ( anum_contours )
- *anum_contours = num_contours;
-
- return error;
- }
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stroker_GetCounts( FT_Stroker stroker,
- FT_UInt *anum_points,
- FT_UInt *anum_contours )
- {
- FT_UInt count1, count2, num_points = 0;
- FT_UInt count3, count4, num_contours = 0;
- FT_Error error;
-
-
- if ( !stroker )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- error = ft_stroke_border_get_counts( stroker->borders + 0,
- &count1, &count2 );
- if ( error )
- goto Exit;
-
- error = ft_stroke_border_get_counts( stroker->borders + 1,
- &count3, &count4 );
- if ( error )
- goto Exit;
-
- num_points = count1 + count3;
- num_contours = count2 + count4;
-
- Exit:
- if ( anum_points )
- *anum_points = num_points;
-
- if ( anum_contours )
- *anum_contours = num_contours;
-
- return error;
- }
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( void )
- FT_Stroker_ExportBorder( FT_Stroker stroker,
- FT_StrokerBorder border,
- FT_Outline* outline )
- {
- if ( !stroker || !outline )
- return;
-
- if ( border == FT_STROKER_BORDER_LEFT ||
- border == FT_STROKER_BORDER_RIGHT )
- {
- FT_StrokeBorder sborder = & stroker->borders[border];
-
-
- if ( sborder->valid )
- ft_stroke_border_export( sborder, outline );
- }
- }
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( void )
- FT_Stroker_Export( FT_Stroker stroker,
- FT_Outline* outline )
- {
- FT_Stroker_ExportBorder( stroker, FT_STROKER_BORDER_LEFT, outline );
- FT_Stroker_ExportBorder( stroker, FT_STROKER_BORDER_RIGHT, outline );
- }
-
-
- /* documentation is in ftstroke.h */
-
- /*
- * The following is very similar to FT_Outline_Decompose, except
- * that we do support opened paths, and do not scale the outline.
- */
- FT_EXPORT_DEF( FT_Error )
- FT_Stroker_ParseOutline( FT_Stroker stroker,
- FT_Outline* outline,
- FT_Bool opened )
- {
- FT_Vector v_last;
- FT_Vector v_control;
- FT_Vector v_start;
-
- FT_Vector* point;
- FT_Vector* limit;
- char* tags;
-
- FT_Error error;
-
- FT_Int n; /* index of contour in outline */
- FT_UInt first; /* index of first point in contour */
- FT_Int tag; /* current point's state */
-
-
- if ( !outline )
- return FT_THROW( Invalid_Outline );
-
- if ( !stroker )
- return FT_THROW( Invalid_Argument );
-
- FT_Stroker_Rewind( stroker );
-
- first = 0;
-
- for ( n = 0; n < outline->n_contours; n++ )
- {
- FT_UInt last; /* index of last point in contour */
-
-
- last = (FT_UInt)outline->contours[n];
- limit = outline->points + last;
-
- /* skip empty points; we don't stroke these */
- if ( last <= first )
- {
- first = last + 1;
- continue;
- }
-
- v_start = outline->points[first];
- v_last = outline->points[last];
-
- v_control = v_start;
-
- point = outline->points + first;
- tags = outline->tags + first;
- tag = FT_CURVE_TAG( tags[0] );
-
- /* A contour cannot start with a cubic control point! */
- if ( tag == FT_CURVE_TAG_CUBIC )
- goto Invalid_Outline;
-
- /* check first point to determine origin */
- if ( tag == FT_CURVE_TAG_CONIC )
- {
- /* First point is conic control. Yes, this happens. */
- if ( FT_CURVE_TAG( outline->tags[last] ) == FT_CURVE_TAG_ON )
- {
- /* start at last point if it is on the curve */
- v_start = v_last;
- limit--;
- }
- else
- {
- /* if both first and last points are conic, */
- /* start at their middle */
- v_start.x = ( v_start.x + v_last.x ) / 2;
- v_start.y = ( v_start.y + v_last.y ) / 2;
- }
- point--;
- tags--;
- }
-
- error = FT_Stroker_BeginSubPath( stroker, &v_start, opened );
- if ( error )
- goto Exit;
-
- while ( point < limit )
- {
- point++;
- tags++;
-
- tag = FT_CURVE_TAG( tags[0] );
- switch ( tag )
- {
- case FT_CURVE_TAG_ON: /* emit a single line_to */
- {
- FT_Vector vec;
-
-
- vec.x = point->x;
- vec.y = point->y;
-
- error = FT_Stroker_LineTo( stroker, &vec );
- if ( error )
- goto Exit;
- continue;
- }
-
- case FT_CURVE_TAG_CONIC: /* consume conic arcs */
- v_control.x = point->x;
- v_control.y = point->y;
-
- Do_Conic:
- if ( point < limit )
- {
- FT_Vector vec;
- FT_Vector v_middle;
-
-
- point++;
- tags++;
- tag = FT_CURVE_TAG( tags[0] );
-
- vec = point[0];
-
- if ( tag == FT_CURVE_TAG_ON )
- {
- error = FT_Stroker_ConicTo( stroker, &v_control, &vec );
- if ( error )
- goto Exit;
- continue;
- }
-
- if ( tag != FT_CURVE_TAG_CONIC )
- goto Invalid_Outline;
-
- v_middle.x = ( v_control.x + vec.x ) / 2;
- v_middle.y = ( v_control.y + vec.y ) / 2;
-
- error = FT_Stroker_ConicTo( stroker, &v_control, &v_middle );
- if ( error )
- goto Exit;
-
- v_control = vec;
- goto Do_Conic;
- }
-
- error = FT_Stroker_ConicTo( stroker, &v_control, &v_start );
- goto Close;
-
- default: /* FT_CURVE_TAG_CUBIC */
- {
- FT_Vector vec1, vec2;
-
-
- if ( point + 1 > limit ||
- FT_CURVE_TAG( tags[1] ) != FT_CURVE_TAG_CUBIC )
- goto Invalid_Outline;
-
- point += 2;
- tags += 2;
-
- vec1 = point[-2];
- vec2 = point[-1];
-
- if ( point <= limit )
- {
- FT_Vector vec;
-
-
- vec = point[0];
-
- error = FT_Stroker_CubicTo( stroker, &vec1, &vec2, &vec );
- if ( error )
- goto Exit;
- continue;
- }
-
- error = FT_Stroker_CubicTo( stroker, &vec1, &vec2, &v_start );
- goto Close;
- }
- }
- }
-
- Close:
- if ( error )
- goto Exit;
-
- /* don't try to end the path if no segments have been generated */
- if ( !stroker->first_point )
- {
- error = FT_Stroker_EndSubPath( stroker );
- if ( error )
- goto Exit;
- }
-
- first = last + 1;
- }
-
- return FT_Err_Ok;
-
- Exit:
- return error;
-
- Invalid_Outline:
- return FT_THROW( Invalid_Outline );
- }
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Glyph_Stroke( FT_Glyph *pglyph,
- FT_Stroker stroker,
- FT_Bool destroy )
- {
- FT_Error error = FT_ERR( Invalid_Argument );
- FT_Glyph glyph = NULL;
-
- /* for FT_OUTLINE_GLYPH_CLASS_GET (in PIC mode) */
- FT_Library library = stroker->library;
-
- FT_UNUSED( library );
-
-
- if ( !pglyph )
- goto Exit;
-
- glyph = *pglyph;
- if ( !glyph || glyph->clazz != FT_OUTLINE_GLYPH_CLASS_GET )
- goto Exit;
-
- {
- FT_Glyph copy;
-
-
- error = FT_Glyph_Copy( glyph, &copy );
- if ( error )
- goto Exit;
-
- glyph = copy;
- }
-
- {
- FT_OutlineGlyph oglyph = (FT_OutlineGlyph)glyph;
- FT_Outline* outline = &oglyph->outline;
- FT_UInt num_points, num_contours;
-
-
- error = FT_Stroker_ParseOutline( stroker, outline, FALSE );
- if ( error )
- goto Fail;
-
- FT_Stroker_GetCounts( stroker, &num_points, &num_contours );
-
- FT_Outline_Done( glyph->library, outline );
-
- error = FT_Outline_New( glyph->library,
- num_points,
- (FT_Int)num_contours,
- outline );
- if ( error )
- goto Fail;
-
- outline->n_points = 0;
- outline->n_contours = 0;
-
- FT_Stroker_Export( stroker, outline );
- }
-
- if ( destroy )
- FT_Done_Glyph( *pglyph );
-
- *pglyph = glyph;
- goto Exit;
-
- Fail:
- FT_Done_Glyph( glyph );
- glyph = NULL;
-
- if ( !destroy )
- *pglyph = NULL;
-
- Exit:
- return error;
- }
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Glyph_StrokeBorder( FT_Glyph *pglyph,
- FT_Stroker stroker,
- FT_Bool inside,
- FT_Bool destroy )
- {
- FT_Error error = FT_ERR( Invalid_Argument );
- FT_Glyph glyph = NULL;
-
- /* for FT_OUTLINE_GLYPH_CLASS_GET (in PIC mode) */
- FT_Library library = stroker->library;
-
- FT_UNUSED( library );
-
-
- if ( !pglyph )
- goto Exit;
-
- glyph = *pglyph;
- if ( !glyph || glyph->clazz != FT_OUTLINE_GLYPH_CLASS_GET )
- goto Exit;
-
- {
- FT_Glyph copy;
-
-
- error = FT_Glyph_Copy( glyph, &copy );
- if ( error )
- goto Exit;
-
- glyph = copy;
- }
-
- {
- FT_OutlineGlyph oglyph = (FT_OutlineGlyph)glyph;
- FT_StrokerBorder border;
- FT_Outline* outline = &oglyph->outline;
- FT_UInt num_points, num_contours;
-
-
- border = FT_Outline_GetOutsideBorder( outline );
- if ( inside )
- {
- if ( border == FT_STROKER_BORDER_LEFT )
- border = FT_STROKER_BORDER_RIGHT;
- else
- border = FT_STROKER_BORDER_LEFT;
- }
-
- error = FT_Stroker_ParseOutline( stroker, outline, FALSE );
- if ( error )
- goto Fail;
-
- FT_Stroker_GetBorderCounts( stroker, border,
- &num_points, &num_contours );
-
- FT_Outline_Done( glyph->library, outline );
-
- error = FT_Outline_New( glyph->library,
- num_points,
- (FT_Int)num_contours,
- outline );
- if ( error )
- goto Fail;
-
- outline->n_points = 0;
- outline->n_contours = 0;
-
- FT_Stroker_ExportBorder( stroker, border, outline );
- }
-
- if ( destroy )
- FT_Done_Glyph( *pglyph );
-
- *pglyph = glyph;
- goto Exit;
-
- Fail:
- FT_Done_Glyph( glyph );
- glyph = NULL;
-
- if ( !destroy )
- *pglyph = NULL;
-
- Exit:
- return error;
- }
-
-
-/* END */
diff --git a/src/base/ftsynth.c b/src/base/ftsynth.c
deleted file mode 100644
index 66dae6037..000000000
--- a/src/base/ftsynth.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsynth.c */
-/* */
-/* FreeType synthesizing code for emboldening and slanting (body). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_SYNTHESIS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_OUTLINE_H
-#include FT_BITMAP_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_synth
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** EXPERIMENTAL OBLIQUING SUPPORT ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* documentation is in ftsynth.h */
-
- FT_EXPORT_DEF( void )
- FT_GlyphSlot_Oblique( FT_GlyphSlot slot )
- {
- FT_Matrix transform;
- FT_Outline* outline;
-
-
- if ( !slot )
- return;
-
- outline = &slot->outline;
-
- /* only oblique outline glyphs */
- if ( slot->format != FT_GLYPH_FORMAT_OUTLINE )
- return;
-
- /* we don't touch the advance width */
-
- /* For italic, simply apply a shear transform, with an angle */
- /* of about 12 degrees. */
-
- transform.xx = 0x10000L;
- transform.yx = 0x00000L;
-
- transform.xy = 0x0366AL;
- transform.yy = 0x10000L;
-
- FT_Outline_Transform( outline, &transform );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** EXPERIMENTAL EMBOLDENING SUPPORT ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* documentation is in ftsynth.h */
-
- FT_EXPORT_DEF( void )
- FT_GlyphSlot_Embolden( FT_GlyphSlot slot )
- {
- FT_Library library;
- FT_Face face;
- FT_Error error;
- FT_Pos xstr, ystr;
-
-
- if ( !slot )
- return;
-
- library = slot->library;
- face = slot->face;
-
- if ( slot->format != FT_GLYPH_FORMAT_OUTLINE &&
- slot->format != FT_GLYPH_FORMAT_BITMAP )
- return;
-
- /* some reasonable strength */
- xstr = FT_MulFix( face->units_per_EM,
- face->size->metrics.y_scale ) / 24;
- ystr = xstr;
-
- if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
- FT_Outline_EmboldenXY( &slot->outline, xstr, ystr );
-
- else /* slot->format == FT_GLYPH_FORMAT_BITMAP */
- {
- /* round to full pixels */
- xstr &= ~63;
- if ( xstr == 0 )
- xstr = 1 << 6;
- ystr &= ~63;
-
- /*
- * XXX: overflow check for 16-bit system, for compatibility
- * with FT_GlyphSlot_Embolden() since freetype-2.1.10.
- * unfortunately, this function return no informations
- * about the cause of error.
- */
- if ( ( ystr >> 6 ) > FT_INT_MAX || ( ystr >> 6 ) < FT_INT_MIN )
- {
- FT_TRACE1(( "FT_GlyphSlot_Embolden:" ));
- FT_TRACE1(( "too strong emboldening parameter ystr=%d\n", ystr ));
- return;
- }
- error = FT_GlyphSlot_Own_Bitmap( slot );
- if ( error )
- return;
-
- error = FT_Bitmap_Embolden( library, &slot->bitmap, xstr, ystr );
- if ( error )
- return;
- }
-
- if ( slot->advance.x )
- slot->advance.x += xstr;
-
- if ( slot->advance.y )
- slot->advance.y += ystr;
-
- slot->metrics.width += xstr;
- slot->metrics.height += ystr;
- slot->metrics.horiAdvance += xstr;
- slot->metrics.vertAdvance += ystr;
- slot->metrics.horiBearingY += ystr;
-
- /* XXX: 16-bit overflow case must be excluded before here */
- if ( slot->format == FT_GLYPH_FORMAT_BITMAP )
- slot->bitmap_top += (FT_Int)( ystr >> 6 );
- }
-
-
-/* END */
diff --git a/src/base/ftsystem.c b/src/base/ftsystem.c
deleted file mode 100644
index 324f949a4..000000000
--- a/src/base/ftsystem.c
+++ /dev/null
@@ -1,320 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsystem.c */
-/* */
-/* ANSI-specific FreeType low-level system interface (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* This file contains the default interface used by FreeType to access */
- /* low-level, i.e. memory management, i/o access as well as thread */
- /* synchronisation. It can be replaced by user-specific routines if */
- /* necessary. */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_SYSTEM_H
-#include FT_ERRORS_H
-#include FT_TYPES_H
-
-
- /*************************************************************************/
- /* */
- /* MEMORY MANAGEMENT INTERFACE */
- /* */
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* It is not necessary to do any error checking for the */
- /* allocation-related functions. This will be done by the higher level */
- /* routines like ft_mem_alloc() or ft_mem_realloc(). */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_alloc */
- /* */
- /* <Description> */
- /* The memory allocation function. */
- /* */
- /* <Input> */
- /* memory :: A pointer to the memory object. */
- /* */
- /* size :: The requested size in bytes. */
- /* */
- /* <Return> */
- /* The address of newly allocated block. */
- /* */
- FT_CALLBACK_DEF( void* )
- ft_alloc( FT_Memory memory,
- long size )
- {
- FT_UNUSED( memory );
-
- return ft_smalloc( (size_t)size );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_realloc */
- /* */
- /* <Description> */
- /* The memory reallocation function. */
- /* */
- /* <Input> */
- /* memory :: A pointer to the memory object. */
- /* */
- /* cur_size :: The current size of the allocated memory block. */
- /* */
- /* new_size :: The newly requested size in bytes. */
- /* */
- /* block :: The current address of the block in memory. */
- /* */
- /* <Return> */
- /* The address of the reallocated memory block. */
- /* */
- FT_CALLBACK_DEF( void* )
- ft_realloc( FT_Memory memory,
- long cur_size,
- long new_size,
- void* block )
- {
- FT_UNUSED( memory );
- FT_UNUSED( cur_size );
-
- return ft_srealloc( block, (size_t)new_size );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_free */
- /* */
- /* <Description> */
- /* The memory release function. */
- /* */
- /* <Input> */
- /* memory :: A pointer to the memory object. */
- /* */
- /* block :: The address of block in memory to be freed. */
- /* */
- FT_CALLBACK_DEF( void )
- ft_free( FT_Memory memory,
- void* block )
- {
- FT_UNUSED( memory );
-
- ft_sfree( block );
- }
-
-
- /*************************************************************************/
- /* */
- /* RESOURCE MANAGEMENT INTERFACE */
- /* */
- /*************************************************************************/
-
-#ifndef FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_io
-
- /* We use the macro STREAM_FILE for convenience to extract the */
- /* system-specific stream handle from a given FreeType stream object */
-#define STREAM_FILE( stream ) ( (FT_FILE*)stream->descriptor.pointer )
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_ansi_stream_close */
- /* */
- /* <Description> */
- /* The function to close a stream. */
- /* */
- /* <Input> */
- /* stream :: A pointer to the stream object. */
- /* */
- FT_CALLBACK_DEF( void )
- ft_ansi_stream_close( FT_Stream stream )
- {
- ft_fclose( STREAM_FILE( stream ) );
-
- stream->descriptor.pointer = NULL;
- stream->size = 0;
- stream->base = NULL;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_ansi_stream_io */
- /* */
- /* <Description> */
- /* The function to open a stream. */
- /* */
- /* <Input> */
- /* stream :: A pointer to the stream object. */
- /* */
- /* offset :: The position in the data stream to start reading. */
- /* */
- /* buffer :: The address of buffer to store the read data. */
- /* */
- /* count :: The number of bytes to read from the stream. */
- /* */
- /* <Return> */
- /* The number of bytes actually read. If `count' is zero (this is, */
- /* the function is used for seeking), a non-zero return value */
- /* indicates an error. */
- /* */
- FT_CALLBACK_DEF( unsigned long )
- ft_ansi_stream_io( FT_Stream stream,
- unsigned long offset,
- unsigned char* buffer,
- unsigned long count )
- {
- FT_FILE* file;
-
-
- if ( !count && offset > stream->size )
- return 1;
-
- file = STREAM_FILE( stream );
-
- if ( stream->pos != offset )
- ft_fseek( file, (long)offset, SEEK_SET );
-
- return (unsigned long)ft_fread( buffer, 1, count, file );
- }
-
-
- /* documentation is in ftstream.h */
-
- FT_BASE_DEF( FT_Error )
- FT_Stream_Open( FT_Stream stream,
- const char* filepathname )
- {
- FT_FILE* file;
-
-
- if ( !stream )
- return FT_THROW( Invalid_Stream_Handle );
-
- stream->descriptor.pointer = NULL;
- stream->pathname.pointer = (char*)filepathname;
- stream->base = NULL;
- stream->pos = 0;
- stream->read = NULL;
- stream->close = NULL;
-
- file = ft_fopen( filepathname, "rb" );
- if ( !file )
- {
- FT_ERROR(( "FT_Stream_Open:"
- " could not open `%s'\n", filepathname ));
-
- return FT_THROW( Cannot_Open_Resource );
- }
-
- ft_fseek( file, 0, SEEK_END );
- stream->size = (unsigned long)ft_ftell( file );
- if ( !stream->size )
- {
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " opened `%s' but zero-sized\n", filepathname ));
- ft_fclose( file );
- return FT_THROW( Cannot_Open_Stream );
- }
- ft_fseek( file, 0, SEEK_SET );
-
- stream->descriptor.pointer = file;
- stream->read = ft_ansi_stream_io;
- stream->close = ft_ansi_stream_close;
-
- FT_TRACE1(( "FT_Stream_Open:" ));
- FT_TRACE1(( " opened `%s' (%d bytes) successfully\n",
- filepathname, stream->size ));
-
- return FT_Err_Ok;
- }
-
-#endif /* !FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */
-
-#ifdef FT_DEBUG_MEMORY
-
- extern FT_Int
- ft_mem_debug_init( FT_Memory memory );
-
- extern void
- ft_mem_debug_done( FT_Memory memory );
-
-#endif
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( FT_Memory )
- FT_New_Memory( void )
- {
- FT_Memory memory;
-
-
- memory = (FT_Memory)ft_smalloc( sizeof ( *memory ) );
- if ( memory )
- {
- memory->user = NULL;
- memory->alloc = ft_alloc;
- memory->realloc = ft_realloc;
- memory->free = ft_free;
-#ifdef FT_DEBUG_MEMORY
- ft_mem_debug_init( memory );
-#endif
- }
-
- return memory;
- }
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( void )
- FT_Done_Memory( FT_Memory memory )
- {
-#ifdef FT_DEBUG_MEMORY
- ft_mem_debug_done( memory );
-#endif
- ft_sfree( memory );
- }
-
-
-/* END */
diff --git a/src/base/fttrigon.c b/src/base/fttrigon.c
deleted file mode 100644
index 7a4d17c82..000000000
--- a/src/base/fttrigon.c
+++ /dev/null
@@ -1,526 +0,0 @@
-/***************************************************************************/
-/* */
-/* fttrigon.c */
-/* */
-/* FreeType trigonometric functions (body). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* This is a fixed-point CORDIC implementation of trigonometric */
- /* functions as well as transformations between Cartesian and polar */
- /* coordinates. The angles are represented as 16.16 fixed-point values */
- /* in degrees, i.e., the angular resolution is 2^-16 degrees. Note that */
- /* only vectors longer than 2^16*180/pi (or at least 22 bits) on a */
- /* discrete Cartesian grid can have the same or better angular */
- /* resolution. Therefore, to maintain this precision, some functions */
- /* require an interim upscaling of the vectors, whereas others operate */
- /* with 24-bit long vectors directly. */
- /* */
- /*************************************************************************/
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_CALC_H
-#include FT_TRIGONOMETRY_H
-
-
- /* the Cordic shrink factor 0.858785336480436 * 2^32 */
-#define FT_TRIG_SCALE 0xDBD95B16UL
-
- /* the highest bit in overflow-safe vector components, */
- /* MSB of 0.858785336480436 * sqrt(0.5) * 2^30 */
-#define FT_TRIG_SAFE_MSB 29
-
- /* this table was generated for FT_PI = 180L << 16, i.e. degrees */
-#define FT_TRIG_MAX_ITERS 23
-
- static const FT_Angle
- ft_trig_arctan_table[] =
- {
- 1740967L, 919879L, 466945L, 234379L, 117304L, 58666L, 29335L,
- 14668L, 7334L, 3667L, 1833L, 917L, 458L, 229L, 115L,
- 57L, 29L, 14L, 7L, 4L, 2L, 1L
- };
-
-
-#ifdef FT_LONG64
-
- /* multiply a given value by the CORDIC shrink factor */
- static FT_Fixed
- ft_trig_downscale( FT_Fixed val )
- {
- FT_Int s = 1;
-
-
- if ( val < 0 )
- {
- val = -val;
- s = -1;
- }
-
- /* 0x40000000 comes from regression analysis between true */
- /* and CORDIC hypotenuse, so it minimizes the error */
- val = (FT_Fixed)(
- ( (FT_UInt64)val * FT_TRIG_SCALE + 0x40000000UL ) >> 32 );
-
- return s < 0 ? -val : val;
- }
-
-#else /* !FT_LONG64 */
-
- /* multiply a given value by the CORDIC shrink factor */
- static FT_Fixed
- ft_trig_downscale( FT_Fixed val )
- {
- FT_Int s = 1;
- FT_UInt32 lo1, hi1, lo2, hi2, lo, hi, i1, i2;
-
-
- if ( val < 0 )
- {
- val = -val;
- s = -1;
- }
-
- lo1 = (FT_UInt32)val & 0x0000FFFFU;
- hi1 = (FT_UInt32)val >> 16;
- lo2 = FT_TRIG_SCALE & 0x0000FFFFU;
- hi2 = FT_TRIG_SCALE >> 16;
-
- lo = lo1 * lo2;
- i1 = lo1 * hi2;
- i2 = lo2 * hi1;
- hi = hi1 * hi2;
-
- /* Check carry overflow of i1 + i2 */
- i1 += i2;
- hi += (FT_UInt32)( i1 < i2 ) << 16;
-
- hi += i1 >> 16;
- i1 = i1 << 16;
-
- /* Check carry overflow of i1 + lo */
- lo += i1;
- hi += ( lo < i1 );
-
- /* 0x40000000 comes from regression analysis between true */
- /* and CORDIC hypotenuse, so it minimizes the error */
-
- /* Check carry overflow of lo + 0x40000000 */
- lo += 0x40000000UL;
- hi += ( lo < 0x40000000UL );
-
- val = (FT_Fixed)hi;
-
- return s < 0 ? -val : val;
- }
-
-#endif /* !FT_LONG64 */
-
-
- /* undefined and never called for zero vector */
- static FT_Int
- ft_trig_prenorm( FT_Vector* vec )
- {
- FT_Pos x, y;
- FT_Int shift;
-
-
- x = vec->x;
- y = vec->y;
-
- shift = FT_MSB( (FT_UInt32)( FT_ABS( x ) | FT_ABS( y ) ) );
-
- if ( shift <= FT_TRIG_SAFE_MSB )
- {
- shift = FT_TRIG_SAFE_MSB - shift;
- vec->x = (FT_Pos)( (FT_ULong)x << shift );
- vec->y = (FT_Pos)( (FT_ULong)y << shift );
- }
- else
- {
- shift -= FT_TRIG_SAFE_MSB;
- vec->x = x >> shift;
- vec->y = y >> shift;
- shift = -shift;
- }
-
- return shift;
- }
-
-
- static void
- ft_trig_pseudo_rotate( FT_Vector* vec,
- FT_Angle theta )
- {
- FT_Int i;
- FT_Fixed x, y, xtemp, b;
- const FT_Angle *arctanptr;
-
-
- x = vec->x;
- y = vec->y;
-
- /* Rotate inside [-PI/4,PI/4] sector */
- while ( theta < -FT_ANGLE_PI4 )
- {
- xtemp = y;
- y = -x;
- x = xtemp;
- theta += FT_ANGLE_PI2;
- }
-
- while ( theta > FT_ANGLE_PI4 )
- {
- xtemp = -y;
- y = x;
- x = xtemp;
- theta -= FT_ANGLE_PI2;
- }
-
- arctanptr = ft_trig_arctan_table;
-
- /* Pseudorotations, with right shifts */
- for ( i = 1, b = 1; i < FT_TRIG_MAX_ITERS; b <<= 1, i++ )
- {
- if ( theta < 0 )
- {
- xtemp = x + ( ( y + b ) >> i );
- y = y - ( ( x + b ) >> i );
- x = xtemp;
- theta += *arctanptr++;
- }
- else
- {
- xtemp = x - ( ( y + b ) >> i );
- y = y + ( ( x + b ) >> i );
- x = xtemp;
- theta -= *arctanptr++;
- }
- }
-
- vec->x = x;
- vec->y = y;
- }
-
-
- static void
- ft_trig_pseudo_polarize( FT_Vector* vec )
- {
- FT_Angle theta;
- FT_Int i;
- FT_Fixed x, y, xtemp, b;
- const FT_Angle *arctanptr;
-
-
- x = vec->x;
- y = vec->y;
-
- /* Get the vector into [-PI/4,PI/4] sector */
- if ( y > x )
- {
- if ( y > -x )
- {
- theta = FT_ANGLE_PI2;
- xtemp = y;
- y = -x;
- x = xtemp;
- }
- else
- {
- theta = y > 0 ? FT_ANGLE_PI : -FT_ANGLE_PI;
- x = -x;
- y = -y;
- }
- }
- else
- {
- if ( y < -x )
- {
- theta = -FT_ANGLE_PI2;
- xtemp = -y;
- y = x;
- x = xtemp;
- }
- else
- {
- theta = 0;
- }
- }
-
- arctanptr = ft_trig_arctan_table;
-
- /* Pseudorotations, with right shifts */
- for ( i = 1, b = 1; i < FT_TRIG_MAX_ITERS; b <<= 1, i++ )
- {
- if ( y > 0 )
- {
- xtemp = x + ( ( y + b ) >> i );
- y = y - ( ( x + b ) >> i );
- x = xtemp;
- theta += *arctanptr++;
- }
- else
- {
- xtemp = x - ( ( y + b ) >> i );
- y = y + ( ( x + b ) >> i );
- x = xtemp;
- theta -= *arctanptr++;
- }
- }
-
- /* round theta to acknowledge its error that mostly comes */
- /* from accumulated rounding errors in the arctan table */
- if ( theta >= 0 )
- theta = FT_PAD_ROUND( theta, 16 );
- else
- theta = -FT_PAD_ROUND( -theta, 16 );
-
- vec->x = x;
- vec->y = theta;
- }
-
-
- /* documentation is in fttrigon.h */
-
- FT_EXPORT_DEF( FT_Fixed )
- FT_Cos( FT_Angle angle )
- {
- FT_Vector v;
-
-
- FT_Vector_Unit( &v, angle );
-
- return v.x;
- }
-
-
- /* documentation is in fttrigon.h */
-
- FT_EXPORT_DEF( FT_Fixed )
- FT_Sin( FT_Angle angle )
- {
- FT_Vector v;
-
-
- FT_Vector_Unit( &v, angle );
-
- return v.y;
- }
-
-
- /* documentation is in fttrigon.h */
-
- FT_EXPORT_DEF( FT_Fixed )
- FT_Tan( FT_Angle angle )
- {
- FT_Vector v;
-
-
- FT_Vector_Unit( &v, angle );
-
- return FT_DivFix( v.y, v.x );
- }
-
-
- /* documentation is in fttrigon.h */
-
- FT_EXPORT_DEF( FT_Angle )
- FT_Atan2( FT_Fixed dx,
- FT_Fixed dy )
- {
- FT_Vector v;
-
-
- if ( dx == 0 && dy == 0 )
- return 0;
-
- v.x = dx;
- v.y = dy;
- ft_trig_prenorm( &v );
- ft_trig_pseudo_polarize( &v );
-
- return v.y;
- }
-
-
- /* documentation is in fttrigon.h */
-
- FT_EXPORT_DEF( void )
- FT_Vector_Unit( FT_Vector* vec,
- FT_Angle angle )
- {
- if ( !vec )
- return;
-
- vec->x = FT_TRIG_SCALE >> 8;
- vec->y = 0;
- ft_trig_pseudo_rotate( vec, angle );
- vec->x = ( vec->x + 0x80L ) >> 8;
- vec->y = ( vec->y + 0x80L ) >> 8;
- }
-
-
- /* these macros return 0 for positive numbers,
- and -1 for negative ones */
-#define FT_SIGN_LONG( x ) ( (x) >> ( FT_SIZEOF_LONG * 8 - 1 ) )
-#define FT_SIGN_INT( x ) ( (x) >> ( FT_SIZEOF_INT * 8 - 1 ) )
-#define FT_SIGN_INT32( x ) ( (x) >> 31 )
-#define FT_SIGN_INT16( x ) ( (x) >> 15 )
-
-
- /* documentation is in fttrigon.h */
-
- FT_EXPORT_DEF( void )
- FT_Vector_Rotate( FT_Vector* vec,
- FT_Angle angle )
- {
- FT_Int shift;
- FT_Vector v;
-
-
- if ( !vec || !angle )
- return;
-
- v = *vec;
-
- if ( v.x == 0 && v.y == 0 )
- return;
-
- shift = ft_trig_prenorm( &v );
- ft_trig_pseudo_rotate( &v, angle );
- v.x = ft_trig_downscale( v.x );
- v.y = ft_trig_downscale( v.y );
-
- if ( shift > 0 )
- {
- FT_Int32 half = (FT_Int32)1L << ( shift - 1 );
-
-
- vec->x = ( v.x + half + FT_SIGN_LONG( v.x ) ) >> shift;
- vec->y = ( v.y + half + FT_SIGN_LONG( v.y ) ) >> shift;
- }
- else
- {
- shift = -shift;
- vec->x = (FT_Pos)( (FT_ULong)v.x << shift );
- vec->y = (FT_Pos)( (FT_ULong)v.y << shift );
- }
- }
-
-
- /* documentation is in fttrigon.h */
-
- FT_EXPORT_DEF( FT_Fixed )
- FT_Vector_Length( FT_Vector* vec )
- {
- FT_Int shift;
- FT_Vector v;
-
-
- if ( !vec )
- return 0;
-
- v = *vec;
-
- /* handle trivial cases */
- if ( v.x == 0 )
- {
- return FT_ABS( v.y );
- }
- else if ( v.y == 0 )
- {
- return FT_ABS( v.x );
- }
-
- /* general case */
- shift = ft_trig_prenorm( &v );
- ft_trig_pseudo_polarize( &v );
-
- v.x = ft_trig_downscale( v.x );
-
- if ( shift > 0 )
- return ( v.x + ( 1L << ( shift - 1 ) ) ) >> shift;
-
- return (FT_Fixed)( (FT_UInt32)v.x << -shift );
- }
-
-
- /* documentation is in fttrigon.h */
-
- FT_EXPORT_DEF( void )
- FT_Vector_Polarize( FT_Vector* vec,
- FT_Fixed *length,
- FT_Angle *angle )
- {
- FT_Int shift;
- FT_Vector v;
-
-
- if ( !vec || !length || !angle )
- return;
-
- v = *vec;
-
- if ( v.x == 0 && v.y == 0 )
- return;
-
- shift = ft_trig_prenorm( &v );
- ft_trig_pseudo_polarize( &v );
-
- v.x = ft_trig_downscale( v.x );
-
- *length = shift >= 0 ? ( v.x >> shift )
- : (FT_Fixed)( (FT_UInt32)v.x << -shift );
- *angle = v.y;
- }
-
-
- /* documentation is in fttrigon.h */
-
- FT_EXPORT_DEF( void )
- FT_Vector_From_Polar( FT_Vector* vec,
- FT_Fixed length,
- FT_Angle angle )
- {
- if ( !vec )
- return;
-
- vec->x = length;
- vec->y = 0;
-
- FT_Vector_Rotate( vec, angle );
- }
-
-
- /* documentation is in fttrigon.h */
-
- FT_EXPORT_DEF( FT_Angle )
- FT_Angle_Diff( FT_Angle angle1,
- FT_Angle angle2 )
- {
- FT_Angle delta = angle2 - angle1;
-
-
- while ( delta <= -FT_ANGLE_PI )
- delta += FT_ANGLE_2PI;
-
- while ( delta > FT_ANGLE_PI )
- delta -= FT_ANGLE_2PI;
-
- return delta;
- }
-
-
-/* END */
diff --git a/src/base/fttype1.c b/src/base/fttype1.c
deleted file mode 100644
index 4d16a6371..000000000
--- a/src/base/fttype1.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/***************************************************************************/
-/* */
-/* fttype1.c */
-/* */
-/* FreeType utility file for PS names support (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_SERVICE_H
-#include FT_SERVICE_POSTSCRIPT_INFO_H
-
-
- /* documentation is in t1tables.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_PS_Font_Info( FT_Face face,
- PS_FontInfoRec* afont_info )
- {
- FT_Error error;
- FT_Service_PsInfo service;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( !afont_info )
- return FT_THROW( Invalid_Argument );
-
- FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO );
-
- if ( service && service->ps_get_font_info )
- error = service->ps_get_font_info( face, afont_info );
- else
- error = FT_THROW( Invalid_Argument );
-
- return error;
- }
-
-
- /* documentation is in t1tables.h */
-
- FT_EXPORT_DEF( FT_Int )
- FT_Has_PS_Glyph_Names( FT_Face face )
- {
- FT_Int result = 0;
- FT_Service_PsInfo service;
-
-
- if ( face )
- {
- FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO );
-
- if ( service && service->ps_has_glyph_names )
- result = service->ps_has_glyph_names( face );
- }
-
- return result;
- }
-
-
- /* documentation is in t1tables.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_PS_Font_Private( FT_Face face,
- PS_PrivateRec* afont_private )
- {
- FT_Error error;
- FT_Service_PsInfo service;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( !afont_private )
- return FT_THROW( Invalid_Argument );
-
- FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO );
-
- if ( service && service->ps_get_font_private )
- error = service->ps_get_font_private( face, afont_private );
- else
- error = FT_THROW( Invalid_Argument );
-
- return error;
- }
-
-
- /* documentation is in t1tables.h */
-
- FT_EXPORT_DEF( FT_Long )
- FT_Get_PS_Font_Value( FT_Face face,
- PS_Dict_Keys key,
- FT_UInt idx,
- void *value,
- FT_Long value_len )
- {
- FT_Int result = 0;
- FT_Service_PsInfo service = NULL;
-
-
- if ( face )
- {
- FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO );
-
- if ( service && service->ps_get_font_value )
- result = service->ps_get_font_value( face, key, idx,
- value, value_len );
- }
-
- return result;
- }
-
-
-/* END */
diff --git a/src/base/ftutil.c b/src/base/ftutil.c
deleted file mode 100644
index dccc209f4..000000000
--- a/src/base/ftutil.c
+++ /dev/null
@@ -1,441 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftutil.c */
-/* */
-/* FreeType utility file for memory and list management (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_LIST_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_memory
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** *****/
- /***** M E M O R Y M A N A G E M E N T *****/
- /***** *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_BASE_DEF( FT_Pointer )
- ft_mem_alloc( FT_Memory memory,
- FT_Long size,
- FT_Error *p_error )
- {
- FT_Error error;
- FT_Pointer block = ft_mem_qalloc( memory, size, &error );
-
- if ( !error && size > 0 )
- FT_MEM_ZERO( block, size );
-
- *p_error = error;
- return block;
- }
-
-
- FT_BASE_DEF( FT_Pointer )
- ft_mem_qalloc( FT_Memory memory,
- FT_Long size,
- FT_Error *p_error )
- {
- FT_Error error = FT_Err_Ok;
- FT_Pointer block = NULL;
-
-
- if ( size > 0 )
- {
- block = memory->alloc( memory, size );
- if ( !block )
- error = FT_THROW( Out_Of_Memory );
- }
- else if ( size < 0 )
- {
- /* may help catch/prevent security issues */
- error = FT_THROW( Invalid_Argument );
- }
-
- *p_error = error;
- return block;
- }
-
-
- FT_BASE_DEF( FT_Pointer )
- ft_mem_realloc( FT_Memory memory,
- FT_Long item_size,
- FT_Long cur_count,
- FT_Long new_count,
- void* block,
- FT_Error *p_error )
- {
- FT_Error error = FT_Err_Ok;
-
-
- block = ft_mem_qrealloc( memory, item_size,
- cur_count, new_count, block, &error );
- if ( !error && new_count > cur_count )
- FT_MEM_ZERO( (char*)block + cur_count * item_size,
- ( new_count - cur_count ) * item_size );
-
- *p_error = error;
- return block;
- }
-
-
- FT_BASE_DEF( FT_Pointer )
- ft_mem_qrealloc( FT_Memory memory,
- FT_Long item_size,
- FT_Long cur_count,
- FT_Long new_count,
- void* block,
- FT_Error *p_error )
- {
- FT_Error error = FT_Err_Ok;
-
-
- /* Note that we now accept `item_size == 0' as a valid parameter, in
- * order to cover very weird cases where an ALLOC_MULT macro would be
- * called.
- */
- if ( cur_count < 0 || new_count < 0 || item_size < 0 )
- {
- /* may help catch/prevent nasty security issues */
- error = FT_THROW( Invalid_Argument );
- }
- else if ( new_count == 0 || item_size == 0 )
- {
- ft_mem_free( memory, block );
- block = NULL;
- }
- else if ( new_count > FT_INT_MAX/item_size )
- {
- error = FT_THROW( Array_Too_Large );
- }
- else if ( cur_count == 0 )
- {
- FT_ASSERT( !block );
-
- block = ft_mem_alloc( memory, new_count*item_size, &error );
- }
- else
- {
- FT_Pointer block2;
- FT_Long cur_size = cur_count*item_size;
- FT_Long new_size = new_count*item_size;
-
-
- block2 = memory->realloc( memory, cur_size, new_size, block );
- if ( !block2 )
- error = FT_THROW( Out_Of_Memory );
- else
- block = block2;
- }
-
- *p_error = error;
- return block;
- }
-
-
- FT_BASE_DEF( void )
- ft_mem_free( FT_Memory memory,
- const void *P )
- {
- if ( P )
- memory->free( memory, (void*)P );
- }
-
-
- FT_BASE_DEF( FT_Pointer )
- ft_mem_dup( FT_Memory memory,
- const void* address,
- FT_ULong size,
- FT_Error *p_error )
- {
- FT_Error error;
- FT_Pointer p = ft_mem_qalloc( memory, (FT_Long)size, &error );
-
-
- if ( !error && address )
- ft_memcpy( p, address, size );
-
- *p_error = error;
- return p;
- }
-
-
- FT_BASE_DEF( FT_Pointer )
- ft_mem_strdup( FT_Memory memory,
- const char* str,
- FT_Error *p_error )
- {
- FT_ULong len = str ? (FT_ULong)ft_strlen( str ) + 1
- : 0;
-
-
- return ft_mem_dup( memory, str, len, p_error );
- }
-
-
- FT_BASE_DEF( FT_Int )
- ft_mem_strcpyn( char* dst,
- const char* src,
- FT_ULong size )
- {
- while ( size > 1 && *src != 0 )
- {
- *dst++ = *src++;
- size--;
- }
-
- *dst = 0; /* always zero-terminate */
-
- return *src != 0;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** *****/
- /***** D O U B L Y L I N K E D L I S T S *****/
- /***** *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_list
-
- /* documentation is in ftlist.h */
-
- FT_EXPORT_DEF( FT_ListNode )
- FT_List_Find( FT_List list,
- void* data )
- {
- FT_ListNode cur;
-
-
- if ( !list )
- return NULL;
-
- cur = list->head;
- while ( cur )
- {
- if ( cur->data == data )
- return cur;
-
- cur = cur->next;
- }
-
- return NULL;
- }
-
-
- /* documentation is in ftlist.h */
-
- FT_EXPORT_DEF( void )
- FT_List_Add( FT_List list,
- FT_ListNode node )
- {
- FT_ListNode before;
-
-
- if ( !list || !node )
- return;
-
- before = list->tail;
-
- node->next = NULL;
- node->prev = before;
-
- if ( before )
- before->next = node;
- else
- list->head = node;
-
- list->tail = node;
- }
-
-
- /* documentation is in ftlist.h */
-
- FT_EXPORT_DEF( void )
- FT_List_Insert( FT_List list,
- FT_ListNode node )
- {
- FT_ListNode after;
-
-
- if ( !list || !node )
- return;
-
- after = list->head;
-
- node->next = after;
- node->prev = NULL;
-
- if ( !after )
- list->tail = node;
- else
- after->prev = node;
-
- list->head = node;
- }
-
-
- /* documentation is in ftlist.h */
-
- FT_EXPORT_DEF( void )
- FT_List_Remove( FT_List list,
- FT_ListNode node )
- {
- FT_ListNode before, after;
-
-
- if ( !list || !node )
- return;
-
- before = node->prev;
- after = node->next;
-
- if ( before )
- before->next = after;
- else
- list->head = after;
-
- if ( after )
- after->prev = before;
- else
- list->tail = before;
- }
-
-
- /* documentation is in ftlist.h */
-
- FT_EXPORT_DEF( void )
- FT_List_Up( FT_List list,
- FT_ListNode node )
- {
- FT_ListNode before, after;
-
-
- if ( !list || !node )
- return;
-
- before = node->prev;
- after = node->next;
-
- /* check whether we are already on top of the list */
- if ( !before )
- return;
-
- before->next = after;
-
- if ( after )
- after->prev = before;
- else
- list->tail = before;
-
- node->prev = NULL;
- node->next = list->head;
- list->head->prev = node;
- list->head = node;
- }
-
-
- /* documentation is in ftlist.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_List_Iterate( FT_List list,
- FT_List_Iterator iterator,
- void* user )
- {
- FT_ListNode cur;
- FT_Error error = FT_Err_Ok;
-
-
- if ( !list || !iterator )
- return FT_THROW( Invalid_Argument );
-
- cur = list->head;
-
- while ( cur )
- {
- FT_ListNode next = cur->next;
-
-
- error = iterator( cur, user );
- if ( error )
- break;
-
- cur = next;
- }
-
- return error;
- }
-
-
- /* documentation is in ftlist.h */
-
- FT_EXPORT_DEF( void )
- FT_List_Finalize( FT_List list,
- FT_List_Destructor destroy,
- FT_Memory memory,
- void* user )
- {
- FT_ListNode cur;
-
-
- if ( !list || !memory )
- return;
-
- cur = list->head;
- while ( cur )
- {
- FT_ListNode next = cur->next;
- void* data = cur->data;
-
-
- if ( destroy )
- destroy( memory, data, user );
-
- FT_FREE( cur );
- cur = next;
- }
-
- list->head = NULL;
- list->tail = NULL;
- }
-
-
-/* END */
diff --git a/src/base/ftwinfnt.c b/src/base/ftwinfnt.c
deleted file mode 100644
index 05baa02da..000000000
--- a/src/base/ftwinfnt.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftwinfnt.c */
-/* */
-/* FreeType API for accessing Windows FNT specific info (body). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_WINFONTS_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_WINFNT_H
-
-
- /* documentation is in ftwinfnt.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Get_WinFNT_Header( FT_Face face,
- FT_WinFNT_HeaderRec *header )
- {
- FT_Service_WinFnt service;
- FT_Error error;
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( !header )
- return FT_THROW( Invalid_Argument );
-
- FT_FACE_LOOKUP_SERVICE( face, service, WINFNT );
-
- if ( service )
- error = service->get_header( face, header );
- else
- error = FT_THROW( Invalid_Argument );
-
- return error;
- }
-
-
-/* END */
diff --git a/src/base/md5.c b/src/base/md5.c
deleted file mode 100644
index b235e17a5..000000000
--- a/src/base/md5.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc.
- * MD5 Message-Digest Algorithm (RFC 1321).
- *
- * Homepage:
- * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
- *
- * Author:
- * Alexander Peslyak, better known as Solar Designer <solar at openwall.com>
- *
- * This software was written by Alexander Peslyak in 2001. No copyright is
- * claimed, and the software is hereby placed in the public domain.
- * In case this attempt to disclaim copyright and place the software in the
- * public domain is deemed null and void, then the software is
- * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the
- * general public under the following terms:
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted.
- *
- * There's ABSOLUTELY NO WARRANTY, express or implied.
- *
- * (This is a heavily cut-down "BSD license".)
- *
- * This differs from Colin Plumb's older public domain implementation in that
- * no exactly 32-bit integer data type is required (any 32-bit or wider
- * unsigned integer data type will do), there's no compile-time endianness
- * configuration, and the function prototypes match OpenSSL's. No code from
- * Colin Plumb's implementation has been reused; this comment merely compares
- * the properties of the two independent implementations.
- *
- * The primary goals of this implementation are portability and ease of use.
- * It is meant to be fast, but not as fast as possible. Some known
- * optimizations are not included to reduce source code size and avoid
- * compile-time configuration.
- */
-
-#ifndef HAVE_OPENSSL
-
-#include <string.h>
-
-#include "md5.h"
-
-/*
- * The basic MD5 functions.
- *
- * F and G are optimized compared to their RFC 1321 definitions for
- * architectures that lack an AND-NOT instruction, just like in Colin Plumb's
- * implementation.
- */
-#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
-#define G(x, y, z) ((y) ^ ((z) & ((x) ^ (y))))
-#define H(x, y, z) (((x) ^ (y)) ^ (z))
-#define H2(x, y, z) ((x) ^ ((y) ^ (z)))
-#define I(x, y, z) ((y) ^ ((x) | ~(z)))
-
-/*
- * The MD5 transformation for all four rounds.
- */
-#define STEP(f, a, b, c, d, x, t, s) \
- (a) += f((b), (c), (d)) + (x) + (t); \
- (a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); \
- (a) += (b);
-
-/*
- * SET reads 4 input bytes in little-endian byte order and stores them in a
- * properly aligned word in host byte order.
- *
- * The check for little-endian architectures that tolerate unaligned memory
- * accesses is just an optimization. Nothing will break if it fails to detect
- * a suitable architecture.
- *
- * Unfortunately, this optimization may be a C strict aliasing rules violation
- * if the caller's data buffer has effective type that cannot be aliased by
- * MD5_u32plus. In practice, this problem may occur if these MD5 routines are
- * inlined into a calling function, or with future and dangerously advanced
- * link-time optimizations. For the time being, keeping these MD5 routines in
- * their own translation unit avoids the problem.
- */
-#if defined(__i386__) || defined(__x86_64__) || defined(__vax__)
-#define SET(n) \
- (*(MD5_u32plus *)&ptr[(n) * 4])
-#define GET(n) \
- SET(n)
-#else
-#define SET(n) \
- (ctx->block[(n)] = \
- (MD5_u32plus)ptr[(n) * 4] | \
- ((MD5_u32plus)ptr[(n) * 4 + 1] << 8) | \
- ((MD5_u32plus)ptr[(n) * 4 + 2] << 16) | \
- ((MD5_u32plus)ptr[(n) * 4 + 3] << 24))
-#define GET(n) \
- (ctx->block[(n)])
-#endif
-
-/*
- * This processes one or more 64-byte data blocks, but does NOT update the bit
- * counters. There are no alignment requirements.
- */
-static const void *body(MD5_CTX *ctx, const void *data, unsigned long size)
-{
- const unsigned char *ptr;
- MD5_u32plus a, b, c, d;
- MD5_u32plus saved_a, saved_b, saved_c, saved_d;
-
- ptr = (const unsigned char *)data;
-
- a = ctx->a;
- b = ctx->b;
- c = ctx->c;
- d = ctx->d;
-
- do {
- saved_a = a;
- saved_b = b;
- saved_c = c;
- saved_d = d;
-
-/* Round 1 */
- STEP(F, a, b, c, d, SET(0), 0xd76aa478, 7)
- STEP(F, d, a, b, c, SET(1), 0xe8c7b756, 12)
- STEP(F, c, d, a, b, SET(2), 0x242070db, 17)
- STEP(F, b, c, d, a, SET(3), 0xc1bdceee, 22)
- STEP(F, a, b, c, d, SET(4), 0xf57c0faf, 7)
- STEP(F, d, a, b, c, SET(5), 0x4787c62a, 12)
- STEP(F, c, d, a, b, SET(6), 0xa8304613, 17)
- STEP(F, b, c, d, a, SET(7), 0xfd469501, 22)
- STEP(F, a, b, c, d, SET(8), 0x698098d8, 7)
- STEP(F, d, a, b, c, SET(9), 0x8b44f7af, 12)
- STEP(F, c, d, a, b, SET(10), 0xffff5bb1, 17)
- STEP(F, b, c, d, a, SET(11), 0x895cd7be, 22)
- STEP(F, a, b, c, d, SET(12), 0x6b901122, 7)
- STEP(F, d, a, b, c, SET(13), 0xfd987193, 12)
- STEP(F, c, d, a, b, SET(14), 0xa679438e, 17)
- STEP(F, b, c, d, a, SET(15), 0x49b40821, 22)
-
-/* Round 2 */
- STEP(G, a, b, c, d, GET(1), 0xf61e2562, 5)
- STEP(G, d, a, b, c, GET(6), 0xc040b340, 9)
- STEP(G, c, d, a, b, GET(11), 0x265e5a51, 14)
- STEP(G, b, c, d, a, GET(0), 0xe9b6c7aa, 20)
- STEP(G, a, b, c, d, GET(5), 0xd62f105d, 5)
- STEP(G, d, a, b, c, GET(10), 0x02441453, 9)
- STEP(G, c, d, a, b, GET(15), 0xd8a1e681, 14)
- STEP(G, b, c, d, a, GET(4), 0xe7d3fbc8, 20)
- STEP(G, a, b, c, d, GET(9), 0x21e1cde6, 5)
- STEP(G, d, a, b, c, GET(14), 0xc33707d6, 9)
- STEP(G, c, d, a, b, GET(3), 0xf4d50d87, 14)
- STEP(G, b, c, d, a, GET(8), 0x455a14ed, 20)
- STEP(G, a, b, c, d, GET(13), 0xa9e3e905, 5)
- STEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9)
- STEP(G, c, d, a, b, GET(7), 0x676f02d9, 14)
- STEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20)
-
-/* Round 3 */
- STEP(H, a, b, c, d, GET(5), 0xfffa3942, 4)
- STEP(H2, d, a, b, c, GET(8), 0x8771f681, 11)
- STEP(H, c, d, a, b, GET(11), 0x6d9d6122, 16)
- STEP(H2, b, c, d, a, GET(14), 0xfde5380c, 23)
- STEP(H, a, b, c, d, GET(1), 0xa4beea44, 4)
- STEP(H2, d, a, b, c, GET(4), 0x4bdecfa9, 11)
- STEP(H, c, d, a, b, GET(7), 0xf6bb4b60, 16)
- STEP(H2, b, c, d, a, GET(10), 0xbebfbc70, 23)
- STEP(H, a, b, c, d, GET(13), 0x289b7ec6, 4)
- STEP(H2, d, a, b, c, GET(0), 0xeaa127fa, 11)
- STEP(H, c, d, a, b, GET(3), 0xd4ef3085, 16)
- STEP(H2, b, c, d, a, GET(6), 0x04881d05, 23)
- STEP(H, a, b, c, d, GET(9), 0xd9d4d039, 4)
- STEP(H2, d, a, b, c, GET(12), 0xe6db99e5, 11)
- STEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16)
- STEP(H2, b, c, d, a, GET(2), 0xc4ac5665, 23)
-
-/* Round 4 */
- STEP(I, a, b, c, d, GET(0), 0xf4292244, 6)
- STEP(I, d, a, b, c, GET(7), 0x432aff97, 10)
- STEP(I, c, d, a, b, GET(14), 0xab9423a7, 15)
- STEP(I, b, c, d, a, GET(5), 0xfc93a039, 21)
- STEP(I, a, b, c, d, GET(12), 0x655b59c3, 6)
- STEP(I, d, a, b, c, GET(3), 0x8f0ccc92, 10)
- STEP(I, c, d, a, b, GET(10), 0xffeff47d, 15)
- STEP(I, b, c, d, a, GET(1), 0x85845dd1, 21)
- STEP(I, a, b, c, d, GET(8), 0x6fa87e4f, 6)
- STEP(I, d, a, b, c, GET(15), 0xfe2ce6e0, 10)
- STEP(I, c, d, a, b, GET(6), 0xa3014314, 15)
- STEP(I, b, c, d, a, GET(13), 0x4e0811a1, 21)
- STEP(I, a, b, c, d, GET(4), 0xf7537e82, 6)
- STEP(I, d, a, b, c, GET(11), 0xbd3af235, 10)
- STEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15)
- STEP(I, b, c, d, a, GET(9), 0xeb86d391, 21)
-
- a += saved_a;
- b += saved_b;
- c += saved_c;
- d += saved_d;
-
- ptr += 64;
- } while (size -= 64);
-
- ctx->a = a;
- ctx->b = b;
- ctx->c = c;
- ctx->d = d;
-
- return ptr;
-}
-
-void MD5_Init(MD5_CTX *ctx)
-{
- ctx->a = 0x67452301;
- ctx->b = 0xefcdab89;
- ctx->c = 0x98badcfe;
- ctx->d = 0x10325476;
-
- ctx->lo = 0;
- ctx->hi = 0;
-}
-
-void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size)
-{
- MD5_u32plus saved_lo;
- unsigned long used, available;
-
- saved_lo = ctx->lo;
- if ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo)
- ctx->hi++;
- ctx->hi += size >> 29;
-
- used = saved_lo & 0x3f;
-
- if (used) {
- available = 64 - used;
-
- if (size < available) {
- memcpy(&ctx->buffer[used], data, size);
- return;
- }
-
- memcpy(&ctx->buffer[used], data, available);
- data = (const unsigned char *)data + available;
- size -= available;
- body(ctx, ctx->buffer, 64);
- }
-
- if (size >= 64) {
- data = body(ctx, data, size & ~(unsigned long)0x3f);
- size &= 0x3f;
- }
-
- memcpy(ctx->buffer, data, size);
-}
-
-#define OUT(dst, src) \
- (dst)[0] = (unsigned char)(src); \
- (dst)[1] = (unsigned char)((src) >> 8); \
- (dst)[2] = (unsigned char)((src) >> 16); \
- (dst)[3] = (unsigned char)((src) >> 24);
-
-void MD5_Final(unsigned char *result, MD5_CTX *ctx)
-{
- unsigned long used, available;
-
- used = ctx->lo & 0x3f;
-
- ctx->buffer[used++] = 0x80;
-
- available = 64 - used;
-
- if (available < 8) {
- memset(&ctx->buffer[used], 0, available);
- body(ctx, ctx->buffer, 64);
- used = 0;
- available = 64;
- }
-
- memset(&ctx->buffer[used], 0, available - 8);
-
- ctx->lo <<= 3;
- OUT(&ctx->buffer[56], ctx->lo)
- OUT(&ctx->buffer[60], ctx->hi)
-
- body(ctx, ctx->buffer, 64);
-
- OUT(&result[0], ctx->a)
- OUT(&result[4], ctx->b)
- OUT(&result[8], ctx->c)
- OUT(&result[12], ctx->d)
-
- memset(ctx, 0, sizeof(*ctx));
-}
-
-#endif
diff --git a/src/base/md5.h b/src/base/md5.h
deleted file mode 100644
index 2da44bf35..000000000
--- a/src/base/md5.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc.
- * MD5 Message-Digest Algorithm (RFC 1321).
- *
- * Homepage:
- * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
- *
- * Author:
- * Alexander Peslyak, better known as Solar Designer <solar at openwall.com>
- *
- * This software was written by Alexander Peslyak in 2001. No copyright is
- * claimed, and the software is hereby placed in the public domain.
- * In case this attempt to disclaim copyright and place the software in the
- * public domain is deemed null and void, then the software is
- * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the
- * general public under the following terms:
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted.
- *
- * There's ABSOLUTELY NO WARRANTY, express or implied.
- *
- * See md5.c for more information.
- */
-
-#ifdef HAVE_OPENSSL
-#include <openssl/md5.h>
-#elif !defined(_MD5_H)
-#define _MD5_H
-
-/* Any 32-bit or wider unsigned integer data type will do */
-typedef unsigned int MD5_u32plus;
-
-typedef struct {
- MD5_u32plus lo, hi;
- MD5_u32plus a, b, c, d;
- unsigned char buffer[64];
- MD5_u32plus block[16];
-} MD5_CTX;
-
-extern void MD5_Init(MD5_CTX *ctx);
-extern void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size);
-extern void MD5_Final(unsigned char *result, MD5_CTX *ctx);
-
-#endif
diff --git a/src/base/rules.mk b/src/base/rules.mk
deleted file mode 100644
index 2a1e93cb0..000000000
--- a/src/base/rules.mk
+++ /dev/null
@@ -1,106 +0,0 @@
-#
-# FreeType 2 base layer configuration rules
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# It sets the following variables which are used by the master Makefile
-# after the call:
-#
-# BASE_OBJ_S: The single-object base layer.
-# BASE_OBJ_M: A list of all objects for a multiple-objects build.
-# BASE_EXT_OBJ: A list of base layer extensions, i.e., components found
-# in `src/base' which are not compiled within the base
-# layer proper.
-
-
-BASE_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(BASE_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# Base layer sources
-#
-# ftsystem, ftinit, and ftdebug are handled by freetype.mk
-#
-# All files listed here should be included in `ftbase.c' (for a `single'
-# build).
-#
-BASE_SRC := $(BASE_DIR)/basepic.c \
- $(BASE_DIR)/ftadvanc.c \
- $(BASE_DIR)/ftcalc.c \
- $(BASE_DIR)/ftdbgmem.c \
- $(BASE_DIR)/ftgloadr.c \
- $(BASE_DIR)/fthash.c \
- $(BASE_DIR)/ftobjs.c \
- $(BASE_DIR)/ftoutln.c \
- $(BASE_DIR)/ftpic.c \
- $(BASE_DIR)/ftrfork.c \
- $(BASE_DIR)/ftsnames.c \
- $(BASE_DIR)/ftstream.c \
- $(BASE_DIR)/fttrigon.c \
- $(BASE_DIR)/ftutil.c
-
-
-ifneq ($(ftmac_c),)
- BASE_SRC += $(BASE_DIR)/$(ftmac_c)
-endif
-
-# for simplicity, we also handle `md5.c' (which gets included by `ftobjs.h')
-BASE_H := $(BASE_DIR)/basepic.h \
- $(BASE_DIR)/ftbase.h \
- $(BASE_DIR)/md5.c \
- $(BASE_DIR)/md5.h
-
-# Base layer `extensions' sources
-#
-# An extension is added to the library file as a separate object. It is
-# then linked to the final executable only if one of its symbols is used by
-# the application.
-#
-BASE_EXT_SRC := $(patsubst %,$(BASE_DIR)/%,$(BASE_EXTENSIONS))
-
-# Default extensions objects
-#
-BASE_EXT_OBJ := $(BASE_EXT_SRC:$(BASE_DIR)/%.c=$(OBJ_DIR)/%.$O)
-
-
-# Base layer object(s)
-#
-# BASE_OBJ_M is used during `multi' builds (each base source file compiles
-# to a single object file).
-#
-# BASE_OBJ_S is used during `single' builds (the whole base layer is
-# compiled as a single object file using ftbase.c).
-#
-BASE_OBJ_M := $(BASE_SRC:$(BASE_DIR)/%.c=$(OBJ_DIR)/%.$O)
-BASE_OBJ_S := $(OBJ_DIR)/ftbase.$O
-
-# Base layer root source file for single build
-#
-BASE_SRC_S := $(BASE_DIR)/ftbase.c
-
-
-# Base layer - single object build
-#
-$(BASE_OBJ_S): $(BASE_SRC_S) $(BASE_SRC) $(FREETYPE_H) $(BASE_H)
- $(BASE_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(BASE_SRC_S))
-
-
-# Multiple objects build + extensions
-#
-$(OBJ_DIR)/%.$O: $(BASE_DIR)/%.c $(FREETYPE_H) $(BASE_H)
- $(BASE_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# EOF
diff --git a/src/bdf/Jamfile b/src/bdf/Jamfile
deleted file mode 100644
index f382b51db..000000000
--- a/src/bdf/Jamfile
+++ /dev/null
@@ -1,31 +0,0 @@
-# FreeType 2 src/bdf Jamfile
-#
-# Copyright 2002-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) bdf ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = bdfdrivr
- bdflib
- ;
- }
- else
- {
- _sources = bdf ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/bdf Jamfile
diff --git a/src/bdf/README b/src/bdf/README
deleted file mode 100644
index b761aba2b..000000000
--- a/src/bdf/README
+++ /dev/null
@@ -1,148 +0,0 @@
- FreeType font driver for BDF fonts
-
- Francesco Zappa Nardelli
- <francesco.zappa.nardelli@ens.fr>
-
-
-Introduction
-************
-
-BDF (Bitmap Distribution Format) is a bitmap font format defined by Adobe,
-which is intended to be easily understood by both humans and computers.
-This code implements a BDF driver for the FreeType library, following the
-Adobe Specification V 2.2. The specification of the BDF font format is
-available from Adobe's web site:
-
- http://partners.adobe.com/public/developer/en/font/5005.BDF_Spec.pdf
-
-Many good bitmap fonts in bdf format come with XFree86 (www.XFree86.org).
-They do not define vertical metrics, because the X Consortium BDF
-specification has removed them.
-
-
-Encodings
-*********
-
-The variety of encodings that accompanies bdf fonts appears to encompass the
-small set defined in freetype.h. On the other hand, two properties that
-specify encoding and registry are usually defined in bdf fonts.
-
-I decided to make these two properties directly accessible, leaving to the
-client application the work of interpreting them. For instance:
-
-
- #include FT_INTERNAL_BDF_TYPES_H
-
- FT_Face face;
- BDF_Public_Face bdfface;
-
-
- FT_New_Face( library, ..., &face );
-
- bdfface = (BDF_Public_Face)face;
-
- if ( ( bdfface->charset_registry == "ISO10646" ) &&
- ( bdfface->charset_encoding == "1" ) )
- [..]
-
-
-Thus the driver always exports `ft_encoding_none' as face->charmap.encoding.
-FT_Get_Char_Index's behavior is unmodified, that is, it converts the ULong
-value given as argument into the corresponding glyph number.
-
-If the two properties are not available, Adobe Standard Encoding should be
-assumed.
-
-
-Anti-Aliased Bitmaps
-********************
-
-The driver supports an extension to the BDF format as used in Mark Leisher's
-xmbdfed bitmap font editor. Microsoft's SBIT tool expects bitmap fonts in
-that format for adding anti-aliased them to TrueType fonts. It introduces a
-fourth field to the `SIZE' keyword which gives the bpp value (bits per
-pixel) of the glyph data in the font. Possible values are 1 (the default),
-2 (four gray levels), 4 (16 gray levels), and 8 (256 gray levels). The
-driver returns either a bitmap with 1 bit per pixel or a pixmap with 8bits
-per pixel (using 4, 16, and 256 gray levels, respectively).
-
-
-Known problems
-**************
-
-- A font is entirely loaded into memory. Obviously, this is not the Right
- Thing(TM). If you have big fonts I suggest you convert them into PCF
- format (using the bdftopcf utility): the PCF font drive of FreeType can
- perform incremental glyph loading.
-
-When I have some time, I will implement on-demand glyph parsing.
-
-- Except for encodings properties, client applications have no visibility of
- the PCF_Face object. This means that applications cannot directly access
- font tables and must trust FreeType.
-
-- Currently, glyph names are ignored.
-
- I plan to give full visibility of the BDF_Face object in an upcoming
- revision of the driver, thus implementing also glyph names.
-
-- As I have never seen a BDF font that defines vertical metrics, vertical
- metrics are (parsed and) discarded. If you own a BDF font that defines
- vertical metrics, please let me know (I will implement them in 5-10
- minutes).
-
-
-License
-*******
-
-Copyright (C) 2001-2002 by Francesco Zappa Nardelli
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-*** Portions of the driver (that is, bdflib.c and bdf.h):
-
-Copyright 2000 Computing Research Labs, New Mexico State University
-Copyright 2001-2002, 2011 Francesco Zappa Nardelli
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
-OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
-Credits
-*******
-
-This driver is based on excellent Mark Leisher's bdf library. If you
-find something good in this driver you should probably thank him, not
-me.
diff --git a/src/bdf/bdf.c b/src/bdf/bdf.c
deleted file mode 100644
index e54df6649..000000000
--- a/src/bdf/bdf.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* bdf.c
-
- FreeType font driver for bdf files
-
- Copyright (C) 2001, 2002 by
- Francesco Zappa Nardelli
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "bdflib.c"
-#include "bdfdrivr.c"
-
-
-/* END */
diff --git a/src/bdf/bdf.h b/src/bdf/bdf.h
deleted file mode 100644
index 9012727c7..000000000
--- a/src/bdf/bdf.h
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright 2000 Computing Research Labs, New Mexico State University
- * Copyright 2001-2004, 2011 Francesco Zappa Nardelli
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
- * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#ifndef BDF_H_
-#define BDF_H_
-
-
-/*
- * Based on bdf.h,v 1.16 2000/03/16 20:08:51 mleisher
- */
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_HASH_H
-
-
-FT_BEGIN_HEADER
-
-
-/* Imported from bdfP.h */
-
-#define _bdf_glyph_modified( map, e ) \
- ( (map)[(e) >> 5] & ( 1UL << ( (e) & 31 ) ) )
-#define _bdf_set_glyph_modified( map, e ) \
- ( (map)[(e) >> 5] |= ( 1UL << ( (e) & 31 ) ) )
-#define _bdf_clear_glyph_modified( map, e ) \
- ( (map)[(e) >> 5] &= ~( 1UL << ( (e) & 31 ) ) )
-
-/* end of bdfP.h */
-
-
- /*************************************************************************/
- /* */
- /* BDF font options macros and types. */
- /* */
- /*************************************************************************/
-
-
-#define BDF_CORRECT_METRICS 0x01 /* Correct invalid metrics when loading. */
-#define BDF_KEEP_COMMENTS 0x02 /* Preserve the font comments. */
-#define BDF_KEEP_UNENCODED 0x04 /* Keep the unencoded glyphs. */
-#define BDF_PROPORTIONAL 0x08 /* Font has proportional spacing. */
-#define BDF_MONOWIDTH 0x10 /* Font has mono width. */
-#define BDF_CHARCELL 0x20 /* Font has charcell spacing. */
-
-#define BDF_ALL_SPACING ( BDF_PROPORTIONAL | \
- BDF_MONOWIDTH | \
- BDF_CHARCELL )
-
-#define BDF_DEFAULT_LOAD_OPTIONS ( BDF_CORRECT_METRICS | \
- BDF_KEEP_COMMENTS | \
- BDF_KEEP_UNENCODED | \
- BDF_PROPORTIONAL )
-
-
- typedef struct bdf_options_t_
- {
- int correct_metrics;
- int keep_unencoded;
- int keep_comments;
- int font_spacing;
-
- } bdf_options_t;
-
-
- /* Callback function type for unknown configuration options. */
- typedef int
- (*bdf_options_callback_t)( bdf_options_t* opts,
- char** params,
- unsigned long nparams,
- void* client_data );
-
-
- /*************************************************************************/
- /* */
- /* BDF font property macros and types. */
- /* */
- /*************************************************************************/
-
-
-#define BDF_ATOM 1
-#define BDF_INTEGER 2
-#define BDF_CARDINAL 3
-
-
- /* This structure represents a particular property of a font. */
- /* There are a set of defaults and each font has their own. */
- typedef struct bdf_property_t_
- {
- char* name; /* Name of the property. */
- int format; /* Format of the property. */
- int builtin; /* A builtin property. */
- union
- {
- char* atom;
- long l;
- unsigned long ul;
-
- } value; /* Value of the property. */
-
- } bdf_property_t;
-
-
- /*************************************************************************/
- /* */
- /* BDF font metric and glyph types. */
- /* */
- /*************************************************************************/
-
-
- typedef struct bdf_bbx_t_
- {
- unsigned short width;
- unsigned short height;
-
- short x_offset;
- short y_offset;
-
- short ascent;
- short descent;
-
- } bdf_bbx_t;
-
-
- typedef struct bdf_glyph_t_
- {
- char* name; /* Glyph name. */
- long encoding; /* Glyph encoding. */
- unsigned short swidth; /* Scalable width. */
- unsigned short dwidth; /* Device width. */
- bdf_bbx_t bbx; /* Glyph bounding box. */
- unsigned char* bitmap; /* Glyph bitmap. */
- unsigned long bpr; /* Number of bytes used per row. */
- unsigned short bytes; /* Number of bytes used for the bitmap. */
-
- } bdf_glyph_t;
-
-
- typedef struct bdf_glyphlist_t_
- {
- unsigned short pad; /* Pad to 4-byte boundary. */
- unsigned short bpp; /* Bits per pixel. */
- long start; /* Beginning encoding value of glyphs. */
- long end; /* Ending encoding value of glyphs. */
- bdf_glyph_t* glyphs; /* Glyphs themselves. */
- unsigned long glyphs_size; /* Glyph structures allocated. */
- unsigned long glyphs_used; /* Glyph structures used. */
- bdf_bbx_t bbx; /* Overall bounding box of glyphs. */
-
- } bdf_glyphlist_t;
-
-
- typedef struct bdf_font_t_
- {
- char* name; /* Name of the font. */
- bdf_bbx_t bbx; /* Font bounding box. */
-
- unsigned long point_size; /* Point size of the font. */
- unsigned long resolution_x; /* Font horizontal resolution. */
- unsigned long resolution_y; /* Font vertical resolution. */
-
- int spacing; /* Font spacing value. */
-
- unsigned short monowidth; /* Logical width for monowidth font. */
-
- long default_char; /* Encoding of the default glyph. */
-
- long font_ascent; /* Font ascent. */
- long font_descent; /* Font descent. */
-
- unsigned long glyphs_size; /* Glyph structures allocated. */
- unsigned long glyphs_used; /* Glyph structures used. */
- bdf_glyph_t* glyphs; /* Glyphs themselves. */
-
- unsigned long unencoded_size; /* Unencoded glyph struct. allocated. */
- unsigned long unencoded_used; /* Unencoded glyph struct. used. */
- bdf_glyph_t* unencoded; /* Unencoded glyphs themselves. */
-
- unsigned long props_size; /* Font properties allocated. */
- unsigned long props_used; /* Font properties used. */
- bdf_property_t* props; /* Font properties themselves. */
-
- char* comments; /* Font comments. */
- unsigned long comments_len; /* Length of comment string. */
-
- bdf_glyphlist_t overflow; /* Storage used for glyph insertion. */
-
- void* internal; /* Internal data for the font. */
-
- /* The size of the next two arrays must be in sync with the */
- /* size of the `have' array in the `bdf_parse_t' structure. */
- unsigned long nmod[34816]; /* Bitmap indicating modified glyphs. */
- unsigned long umod[34816]; /* Bitmap indicating modified */
- /* unencoded glyphs. */
- unsigned short modified; /* Boolean indicating font modified. */
- unsigned short bpp; /* Bits per pixel. */
-
- FT_Memory memory;
-
- bdf_property_t* user_props;
- unsigned long nuser_props;
- FT_HashRec proptbl;
-
- } bdf_font_t;
-
-
- /*************************************************************************/
- /* */
- /* Types for load/save callbacks. */
- /* */
- /*************************************************************************/
-
-
- /* Error codes. */
-#define BDF_MISSING_START -1
-#define BDF_MISSING_FONTNAME -2
-#define BDF_MISSING_SIZE -3
-#define BDF_MISSING_CHARS -4
-#define BDF_MISSING_STARTCHAR -5
-#define BDF_MISSING_ENCODING -6
-#define BDF_MISSING_BBX -7
-
-#define BDF_OUT_OF_MEMORY -20
-
-#define BDF_INVALID_LINE -100
-
-
- /*************************************************************************/
- /* */
- /* BDF font API. */
- /* */
- /*************************************************************************/
-
- FT_LOCAL( FT_Error )
- bdf_load_font( FT_Stream stream,
- FT_Memory memory,
- bdf_options_t* opts,
- bdf_font_t* *font );
-
- FT_LOCAL( void )
- bdf_free_font( bdf_font_t* font );
-
- FT_LOCAL( bdf_property_t * )
- bdf_get_property( char* name,
- bdf_font_t* font );
-
- FT_LOCAL( bdf_property_t * )
- bdf_get_font_property( bdf_font_t* font,
- const char* name );
-
-
-FT_END_HEADER
-
-
-#endif /* BDF_H_ */
-
-
-/* END */
diff --git a/src/bdf/bdfdrivr.c b/src/bdf/bdfdrivr.c
deleted file mode 100644
index 37e6eea1c..000000000
--- a/src/bdf/bdfdrivr.c
+++ /dev/null
@@ -1,986 +0,0 @@
-/* bdfdrivr.c
-
- FreeType font driver for bdf files
-
- Copyright (C) 2001-2008, 2011, 2013, 2014 by
- Francesco Zappa Nardelli
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <ft2build.h>
-
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_BDF_H
-#include FT_TRUETYPE_IDS_H
-
-#include FT_SERVICE_BDF_H
-#include FT_SERVICE_FONT_FORMAT_H
-
-#include "bdf.h"
-#include "bdfdrivr.h"
-
-#include "bdferror.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_bdfdriver
-
-
- typedef struct BDF_CMapRec_
- {
- FT_CMapRec cmap;
- FT_ULong num_encodings; /* ftobjs.h: FT_CMap->clazz->size */
- BDF_encoding_el* encodings;
-
- } BDF_CMapRec, *BDF_CMap;
-
-
- FT_CALLBACK_DEF( FT_Error )
- bdf_cmap_init( FT_CMap bdfcmap,
- FT_Pointer init_data )
- {
- BDF_CMap cmap = (BDF_CMap)bdfcmap;
- BDF_Face face = (BDF_Face)FT_CMAP_FACE( cmap );
- FT_UNUSED( init_data );
-
-
- cmap->num_encodings = face->bdffont->glyphs_used;
- cmap->encodings = face->en_table;
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( void )
- bdf_cmap_done( FT_CMap bdfcmap )
- {
- BDF_CMap cmap = (BDF_CMap)bdfcmap;
-
-
- cmap->encodings = NULL;
- cmap->num_encodings = 0;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- bdf_cmap_char_index( FT_CMap bdfcmap,
- FT_UInt32 charcode )
- {
- BDF_CMap cmap = (BDF_CMap)bdfcmap;
- BDF_encoding_el* encodings = cmap->encodings;
- FT_ULong min, max, mid; /* num_encodings */
- FT_UShort result = 0; /* encodings->glyph */
-
-
- min = 0;
- max = cmap->num_encodings;
-
- while ( min < max )
- {
- FT_ULong code;
-
-
- mid = ( min + max ) >> 1;
- code = (FT_ULong)encodings[mid].enc;
-
- if ( charcode == code )
- {
- /* increase glyph index by 1 -- */
- /* we reserve slot 0 for the undefined glyph */
- result = encodings[mid].glyph + 1;
- break;
- }
-
- if ( charcode < code )
- max = mid;
- else
- min = mid + 1;
- }
-
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- bdf_cmap_char_next( FT_CMap bdfcmap,
- FT_UInt32 *acharcode )
- {
- BDF_CMap cmap = (BDF_CMap)bdfcmap;
- BDF_encoding_el* encodings = cmap->encodings;
- FT_ULong min, max, mid; /* num_encodings */
- FT_UShort result = 0; /* encodings->glyph */
- FT_ULong charcode = *acharcode + 1;
-
-
- min = 0;
- max = cmap->num_encodings;
-
- while ( min < max )
- {
- FT_ULong code; /* same as BDF_encoding_el.enc */
-
-
- mid = ( min + max ) >> 1;
- code = (FT_ULong)encodings[mid].enc;
-
- if ( charcode == code )
- {
- /* increase glyph index by 1 -- */
- /* we reserve slot 0 for the undefined glyph */
- result = encodings[mid].glyph + 1;
- goto Exit;
- }
-
- if ( charcode < code )
- max = mid;
- else
- min = mid + 1;
- }
-
- charcode = 0;
- if ( min < cmap->num_encodings )
- {
- charcode = (FT_ULong)encodings[min].enc;
- result = encodings[min].glyph + 1;
- }
-
- Exit:
- if ( charcode > 0xFFFFFFFFUL )
- {
- FT_TRACE1(( "bdf_cmap_char_next: charcode 0x%x > 32bit API" ));
- *acharcode = 0;
- /* XXX: result should be changed to indicate an overflow error */
- }
- else
- *acharcode = (FT_UInt32)charcode;
- return result;
- }
-
-
- static
- const FT_CMap_ClassRec bdf_cmap_class =
- {
- sizeof ( BDF_CMapRec ),
- bdf_cmap_init,
- bdf_cmap_done,
- bdf_cmap_char_index,
- bdf_cmap_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- };
-
-
- static FT_Error
- bdf_interpret_style( BDF_Face bdf )
- {
- FT_Error error = FT_Err_Ok;
- FT_Face face = FT_FACE( bdf );
- FT_Memory memory = face->memory;
- bdf_font_t* font = bdf->bdffont;
- bdf_property_t* prop;
-
- char* strings[4] = { NULL, NULL, NULL, NULL };
- size_t nn, len, lengths[4];
-
-
- face->style_flags = 0;
-
- prop = bdf_get_font_property( font, (char *)"SLANT" );
- if ( prop && prop->format == BDF_ATOM &&
- prop->value.atom &&
- ( *(prop->value.atom) == 'O' || *(prop->value.atom) == 'o' ||
- *(prop->value.atom) == 'I' || *(prop->value.atom) == 'i' ) )
- {
- face->style_flags |= FT_STYLE_FLAG_ITALIC;
- strings[2] = ( *(prop->value.atom) == 'O' || *(prop->value.atom) == 'o' )
- ? (char *)"Oblique"
- : (char *)"Italic";
- }
-
- prop = bdf_get_font_property( font, (char *)"WEIGHT_NAME" );
- if ( prop && prop->format == BDF_ATOM &&
- prop->value.atom &&
- ( *(prop->value.atom) == 'B' || *(prop->value.atom) == 'b' ) )
- {
- face->style_flags |= FT_STYLE_FLAG_BOLD;
- strings[1] = (char *)"Bold";
- }
-
- prop = bdf_get_font_property( font, (char *)"SETWIDTH_NAME" );
- if ( prop && prop->format == BDF_ATOM &&
- prop->value.atom && *(prop->value.atom) &&
- !( *(prop->value.atom) == 'N' || *(prop->value.atom) == 'n' ) )
- strings[3] = (char *)(prop->value.atom);
-
- prop = bdf_get_font_property( font, (char *)"ADD_STYLE_NAME" );
- if ( prop && prop->format == BDF_ATOM &&
- prop->value.atom && *(prop->value.atom) &&
- !( *(prop->value.atom) == 'N' || *(prop->value.atom) == 'n' ) )
- strings[0] = (char *)(prop->value.atom);
-
- for ( len = 0, nn = 0; nn < 4; nn++ )
- {
- lengths[nn] = 0;
- if ( strings[nn] )
- {
- lengths[nn] = ft_strlen( strings[nn] );
- len += lengths[nn] + 1;
- }
- }
-
- if ( len == 0 )
- {
- strings[0] = (char *)"Regular";
- lengths[0] = ft_strlen( strings[0] );
- len = lengths[0] + 1;
- }
-
- {
- char* s;
-
-
- if ( FT_ALLOC( face->style_name, len ) )
- return error;
-
- s = face->style_name;
-
- for ( nn = 0; nn < 4; nn++ )
- {
- char* src = strings[nn];
-
-
- len = lengths[nn];
-
- if ( !src )
- continue;
-
- /* separate elements with a space */
- if ( s != face->style_name )
- *s++ = ' ';
-
- ft_memcpy( s, src, len );
-
- /* need to convert spaces to dashes for */
- /* add_style_name and setwidth_name */
- if ( nn == 0 || nn == 3 )
- {
- size_t mm;
-
-
- for ( mm = 0; mm < len; mm++ )
- if ( s[mm] == ' ' )
- s[mm] = '-';
- }
-
- s += len;
- }
- *s = 0;
- }
-
- return error;
- }
-
-
- FT_CALLBACK_DEF( void )
- BDF_Face_Done( FT_Face bdfface ) /* BDF_Face */
- {
- BDF_Face face = (BDF_Face)bdfface;
- FT_Memory memory;
-
-
- if ( !face )
- return;
-
- memory = FT_FACE_MEMORY( face );
-
- bdf_free_font( face->bdffont );
-
- FT_FREE( face->en_table );
-
- FT_FREE( face->charset_encoding );
- FT_FREE( face->charset_registry );
- FT_FREE( bdfface->family_name );
- FT_FREE( bdfface->style_name );
-
- FT_FREE( bdfface->available_sizes );
-
- FT_FREE( face->bdffont );
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- BDF_Face_Init( FT_Stream stream,
- FT_Face bdfface, /* BDF_Face */
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- FT_Error error = FT_Err_Ok;
- BDF_Face face = (BDF_Face)bdfface;
- FT_Memory memory = FT_FACE_MEMORY( face );
-
- bdf_font_t* font = NULL;
- bdf_options_t options;
-
- FT_UNUSED( num_params );
- FT_UNUSED( params );
-
-
- FT_TRACE2(( "BDF driver\n" ));
-
- if ( FT_STREAM_SEEK( 0 ) )
- goto Exit;
-
- options.correct_metrics = 1; /* FZ XXX: options semantics */
- options.keep_unencoded = 1;
- options.keep_comments = 0;
- options.font_spacing = BDF_PROPORTIONAL;
-
- error = bdf_load_font( stream, memory, &options, &font );
- if ( FT_ERR_EQ( error, Missing_Startfont_Field ) )
- {
- FT_TRACE2(( " not a BDF file\n" ));
- goto Fail;
- }
- else if ( error )
- goto Exit;
-
- /* we have a bdf font: let's construct the face object */
- face->bdffont = font;
-
- /* BDF cannot have multiple faces in a single font file.
- * XXX: non-zero face_index is already invalid argument, but
- * Type1, Type42 driver has a convention to return
- * an invalid argument error when the font could be
- * opened by the specified driver.
- */
- if ( face_index > 0 && ( face_index & 0xFFFF ) > 0 )
- {
- FT_ERROR(( "BDF_Face_Init: invalid face index\n" ));
- BDF_Face_Done( bdfface );
- return FT_THROW( Invalid_Argument );
- }
-
- {
- bdf_property_t* prop = NULL;
-
-
- FT_TRACE4(( " number of glyphs: allocated %d (used %d)\n",
- font->glyphs_size,
- font->glyphs_used ));
- FT_TRACE4(( " number of unencoded glyphs: allocated %d (used %d)\n",
- font->unencoded_size,
- font->unencoded_used ));
-
- bdfface->num_faces = 1;
- bdfface->face_index = 0;
-
- bdfface->face_flags |= FT_FACE_FLAG_FIXED_SIZES |
- FT_FACE_FLAG_HORIZONTAL |
- FT_FACE_FLAG_FAST_GLYPHS;
-
- prop = bdf_get_font_property( font, "SPACING" );
- if ( prop && prop->format == BDF_ATOM &&
- prop->value.atom &&
- ( *(prop->value.atom) == 'M' || *(prop->value.atom) == 'm' ||
- *(prop->value.atom) == 'C' || *(prop->value.atom) == 'c' ) )
- bdfface->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;
-
- /* FZ XXX: TO DO: FT_FACE_FLAGS_VERTICAL */
- /* FZ XXX: I need a font to implement this */
-
- prop = bdf_get_font_property( font, "FAMILY_NAME" );
- if ( prop && prop->value.atom )
- {
- if ( FT_STRDUP( bdfface->family_name, prop->value.atom ) )
- goto Exit;
- }
- else
- bdfface->family_name = NULL;
-
- if ( FT_SET_ERROR( bdf_interpret_style( face ) ) )
- goto Exit;
-
- /* the number of glyphs (with one slot for the undefined glyph */
- /* at position 0 and all unencoded glyphs) */
- bdfface->num_glyphs = (FT_Long)( font->glyphs_size + 1 );
-
- bdfface->num_fixed_sizes = 1;
- if ( FT_NEW_ARRAY( bdfface->available_sizes, 1 ) )
- goto Exit;
-
- {
- FT_Bitmap_Size* bsize = bdfface->available_sizes;
- FT_Short resolution_x = 0, resolution_y = 0;
-
-
- FT_ZERO( bsize );
-
- /* sanity checks */
- if ( font->font_ascent > 0x7FFF || font->font_ascent < -0x7FFF )
- {
- font->font_ascent = font->font_ascent < 0 ? -0x7FFF : 0x7FFF;
- FT_TRACE0(( "BDF_Face_Init: clamping font ascent to value %d\n",
- font->font_ascent ));
- }
- if ( font->font_descent > 0x7FFF || font->font_descent < -0x7FFF )
- {
- font->font_descent = font->font_descent < 0 ? -0x7FFF : 0x7FFF;
- FT_TRACE0(( "BDF_Face_Init: clamping font descent to value %d\n",
- font->font_descent ));
- }
-
- bsize->height = (FT_Short)( font->font_ascent + font->font_descent );
-
- prop = bdf_get_font_property( font, "AVERAGE_WIDTH" );
- if ( prop )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( prop->value.l < 0 )
- FT_TRACE0(( "BDF_Face_Init: negative average width\n" ));
-#endif
- if ( prop->value.l > 0x7FFFL * 10 - 5 ||
- prop->value.l < -( 0x7FFFL * 10 - 5 ) )
- {
- bsize->width = 0x7FFF;
- FT_TRACE0(( "BDF_Face_Init: clamping average width to value %d\n",
- bsize->width ));
- }
- else
- bsize->width = FT_ABS( (FT_Short)( ( prop->value.l + 5 ) / 10 ) );
- }
- else
- {
- /* this is a heuristical value */
- bsize->width = (FT_Short)FT_MulDiv( bsize->height, 2, 3 );
- }
-
- prop = bdf_get_font_property( font, "POINT_SIZE" );
- if ( prop )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( prop->value.l < 0 )
- FT_TRACE0(( "BDF_Face_Init: negative point size\n" ));
-#endif
- /* convert from 722.7 decipoints to 72 points per inch */
- if ( prop->value.l > 0x504C2L || /* 0x7FFF * 72270/7200 */
- prop->value.l < -0x504C2L )
- {
- bsize->size = 0x7FFF;
- FT_TRACE0(( "BDF_Face_Init: clamping point size to value %d\n",
- bsize->size ));
- }
- else
- bsize->size = FT_MulDiv( FT_ABS( prop->value.l ),
- 64 * 7200,
- 72270L );
- }
- else
- {
- /* this is a heuristical value */
- bsize->size = bsize->width * 64;
- }
-
- prop = bdf_get_font_property( font, "PIXEL_SIZE" );
- if ( prop )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( prop->value.l < 0 )
- FT_TRACE0(( "BDF_Face_Init: negative pixel size\n" ));
-#endif
- if ( prop->value.l > 0x7FFF || prop->value.l < -0x7FFF )
- {
- bsize->y_ppem = 0x7FFF << 6;
- FT_TRACE0(( "BDF_Face_Init: clamping pixel size to value %d\n",
- bsize->y_ppem ));
- }
- else
- bsize->y_ppem = FT_ABS( (FT_Short)prop->value.l ) << 6;
- }
-
- prop = bdf_get_font_property( font, "RESOLUTION_X" );
- if ( prop )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( prop->value.l < 0 )
- FT_TRACE0(( "BDF_Face_Init: negative X resolution\n" ));
-#endif
- if ( prop->value.l > 0x7FFF || prop->value.l < -0x7FFF )
- {
- resolution_x = 0x7FFF;
- FT_TRACE0(( "BDF_Face_Init: clamping X resolution to value %d\n",
- resolution_x ));
- }
- else
- resolution_x = FT_ABS( (FT_Short)prop->value.l );
- }
-
- prop = bdf_get_font_property( font, "RESOLUTION_Y" );
- if ( prop )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( prop->value.l < 0 )
- FT_TRACE0(( "BDF_Face_Init: negative Y resolution\n" ));
-#endif
- if ( prop->value.l > 0x7FFF || prop->value.l < -0x7FFF )
- {
- resolution_y = 0x7FFF;
- FT_TRACE0(( "BDF_Face_Init: clamping Y resolution to value %d\n",
- resolution_y ));
- }
- else
- resolution_y = FT_ABS( (FT_Short)prop->value.l );
- }
-
- if ( bsize->y_ppem == 0 )
- {
- bsize->y_ppem = bsize->size;
- if ( resolution_y )
- bsize->y_ppem = FT_MulDiv( bsize->y_ppem, resolution_y, 72 );
- }
- if ( resolution_x && resolution_y )
- bsize->x_ppem = FT_MulDiv( bsize->y_ppem,
- resolution_x,
- resolution_y );
- else
- bsize->x_ppem = bsize->y_ppem;
- }
-
- /* encoding table */
- {
- bdf_glyph_t* cur = font->glyphs;
- unsigned long n;
-
-
- if ( FT_NEW_ARRAY( face->en_table, font->glyphs_size ) )
- goto Exit;
-
- face->default_glyph = 0;
- for ( n = 0; n < font->glyphs_size; n++ )
- {
- (face->en_table[n]).enc = cur[n].encoding;
- FT_TRACE4(( " idx %d, val 0x%lX\n", n, cur[n].encoding ));
- (face->en_table[n]).glyph = (FT_UShort)n;
-
- if ( cur[n].encoding == font->default_char )
- {
- if ( n < FT_UINT_MAX )
- face->default_glyph = (FT_UInt)n;
- else
- FT_TRACE1(( "BDF_Face_Init:"
- " idx %d is too large for this system\n", n ));
- }
- }
- }
-
- /* charmaps */
- {
- bdf_property_t *charset_registry, *charset_encoding;
- FT_Bool unicode_charmap = 0;
-
-
- charset_registry =
- bdf_get_font_property( font, "CHARSET_REGISTRY" );
- charset_encoding =
- bdf_get_font_property( font, "CHARSET_ENCODING" );
- if ( charset_registry && charset_encoding )
- {
- if ( charset_registry->format == BDF_ATOM &&
- charset_encoding->format == BDF_ATOM &&
- charset_registry->value.atom &&
- charset_encoding->value.atom )
- {
- const char* s;
-
-
- if ( FT_STRDUP( face->charset_encoding,
- charset_encoding->value.atom ) ||
- FT_STRDUP( face->charset_registry,
- charset_registry->value.atom ) )
- goto Exit;
-
- /* Uh, oh, compare first letters manually to avoid dependency */
- /* on locales. */
- s = face->charset_registry;
- if ( ( s[0] == 'i' || s[0] == 'I' ) &&
- ( s[1] == 's' || s[1] == 'S' ) &&
- ( s[2] == 'o' || s[2] == 'O' ) )
- {
- s += 3;
- if ( !ft_strcmp( s, "10646" ) ||
- ( !ft_strcmp( s, "8859" ) &&
- !ft_strcmp( face->charset_encoding, "1" ) ) )
- unicode_charmap = 1;
- /* another name for ASCII */
- else if ( !ft_strcmp( s, "646.1991" ) &&
- !ft_strcmp( face->charset_encoding, "IRV" ) )
- unicode_charmap = 1;
- }
-
- {
- FT_CharMapRec charmap;
-
-
- charmap.face = FT_FACE( face );
- charmap.encoding = FT_ENCODING_NONE;
- /* initial platform/encoding should indicate unset status? */
- charmap.platform_id = TT_PLATFORM_APPLE_UNICODE;
- charmap.encoding_id = TT_APPLE_ID_DEFAULT;
-
- if ( unicode_charmap )
- {
- charmap.encoding = FT_ENCODING_UNICODE;
- charmap.platform_id = TT_PLATFORM_MICROSOFT;
- charmap.encoding_id = TT_MS_ID_UNICODE_CS;
- }
-
- error = FT_CMap_New( &bdf_cmap_class, NULL, &charmap, NULL );
- }
-
- goto Exit;
- }
- }
-
- /* otherwise assume Adobe standard encoding */
-
- {
- FT_CharMapRec charmap;
-
-
- charmap.face = FT_FACE( face );
- charmap.encoding = FT_ENCODING_ADOBE_STANDARD;
- charmap.platform_id = TT_PLATFORM_ADOBE;
- charmap.encoding_id = TT_ADOBE_ID_STANDARD;
-
- error = FT_CMap_New( &bdf_cmap_class, NULL, &charmap, NULL );
-
- /* Select default charmap */
- if ( bdfface->num_charmaps )
- bdfface->charmap = bdfface->charmaps[0];
- }
- }
- }
-
- Exit:
- return error;
-
- Fail:
- BDF_Face_Done( bdfface );
- return FT_THROW( Unknown_File_Format );
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- BDF_Size_Select( FT_Size size,
- FT_ULong strike_index )
- {
- bdf_font_t* bdffont = ( (BDF_Face)size->face )->bdffont;
-
-
- FT_Select_Metrics( size->face, strike_index );
-
- size->metrics.ascender = bdffont->font_ascent * 64;
- size->metrics.descender = -bdffont->font_descent * 64;
- size->metrics.max_advance = bdffont->bbx.width * 64;
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- BDF_Size_Request( FT_Size size,
- FT_Size_Request req )
- {
- FT_Face face = size->face;
- FT_Bitmap_Size* bsize = face->available_sizes;
- bdf_font_t* bdffont = ( (BDF_Face)face )->bdffont;
- FT_Error error = FT_ERR( Invalid_Pixel_Size );
- FT_Long height;
-
-
- height = FT_REQUEST_HEIGHT( req );
- height = ( height + 32 ) >> 6;
-
- switch ( req->type )
- {
- case FT_SIZE_REQUEST_TYPE_NOMINAL:
- if ( height == ( ( bsize->y_ppem + 32 ) >> 6 ) )
- error = FT_Err_Ok;
- break;
-
- case FT_SIZE_REQUEST_TYPE_REAL_DIM:
- if ( height == ( bdffont->font_ascent +
- bdffont->font_descent ) )
- error = FT_Err_Ok;
- break;
-
- default:
- error = FT_THROW( Unimplemented_Feature );
- break;
- }
-
- if ( error )
- return error;
- else
- return BDF_Size_Select( size, 0 );
- }
-
-
-
- FT_CALLBACK_DEF( FT_Error )
- BDF_Glyph_Load( FT_GlyphSlot slot,
- FT_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- BDF_Face bdf = (BDF_Face)FT_SIZE_FACE( size );
- FT_Face face = FT_FACE( bdf );
- FT_Error error = FT_Err_Ok;
- FT_Bitmap* bitmap = &slot->bitmap;
- bdf_glyph_t glyph;
- int bpp = bdf->bdffont->bpp;
-
- FT_UNUSED( load_flags );
-
-
- if ( !face )
- {
- error = FT_THROW( Invalid_Face_Handle );
- goto Exit;
- }
-
- if ( glyph_index >= (FT_UInt)face->num_glyphs )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- FT_TRACE1(( "BDF_Glyph_Load: glyph index %d\n", glyph_index ));
-
- /* index 0 is the undefined glyph */
- if ( glyph_index == 0 )
- glyph_index = bdf->default_glyph;
- else
- glyph_index--;
-
- /* slot, bitmap => freetype, glyph => bdflib */
- glyph = bdf->bdffont->glyphs[glyph_index];
-
- bitmap->rows = glyph.bbx.height;
- bitmap->width = glyph.bbx.width;
- if ( glyph.bpr > INT_MAX )
- FT_TRACE1(( "BDF_Glyph_Load: too large pitch %d is truncated\n",
- glyph.bpr ));
- bitmap->pitch = (int)glyph.bpr; /* same as FT_Bitmap.pitch */
-
- /* note: we don't allocate a new array to hold the bitmap; */
- /* we can simply point to it */
- ft_glyphslot_set_bitmap( slot, glyph.bitmap );
-
- switch ( bpp )
- {
- case 1:
- bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
- break;
- case 2:
- bitmap->pixel_mode = FT_PIXEL_MODE_GRAY2;
- break;
- case 4:
- bitmap->pixel_mode = FT_PIXEL_MODE_GRAY4;
- break;
- case 8:
- bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
- bitmap->num_grays = 256;
- break;
- }
-
- slot->format = FT_GLYPH_FORMAT_BITMAP;
- slot->bitmap_left = glyph.bbx.x_offset;
- slot->bitmap_top = glyph.bbx.ascent;
-
- slot->metrics.horiAdvance = (FT_Pos)( glyph.dwidth * 64 );
- slot->metrics.horiBearingX = (FT_Pos)( glyph.bbx.x_offset * 64 );
- slot->metrics.horiBearingY = (FT_Pos)( glyph.bbx.ascent * 64 );
- slot->metrics.width = (FT_Pos)( bitmap->width * 64 );
- slot->metrics.height = (FT_Pos)( bitmap->rows * 64 );
-
- /*
- * XXX DWIDTH1 and VVECTOR should be parsed and
- * used here, provided such fonts do exist.
- */
- ft_synthesize_vertical_metrics( &slot->metrics,
- bdf->bdffont->bbx.height * 64 );
-
- Exit:
- return error;
- }
-
-
- /*
- *
- * BDF SERVICE
- *
- */
-
- static FT_Error
- bdf_get_bdf_property( BDF_Face face,
- const char* prop_name,
- BDF_PropertyRec *aproperty )
- {
- bdf_property_t* prop;
-
-
- FT_ASSERT( face && face->bdffont );
-
- prop = bdf_get_font_property( face->bdffont, prop_name );
- if ( prop )
- {
- switch ( prop->format )
- {
- case BDF_ATOM:
- aproperty->type = BDF_PROPERTY_TYPE_ATOM;
- aproperty->u.atom = prop->value.atom;
- break;
-
- case BDF_INTEGER:
- if ( prop->value.l > 0x7FFFFFFFL || prop->value.l < ( -1 - 0x7FFFFFFFL ) )
- {
- FT_TRACE1(( "bdf_get_bdf_property:"
- " too large integer 0x%x is truncated\n" ));
- }
- aproperty->type = BDF_PROPERTY_TYPE_INTEGER;
- aproperty->u.integer = (FT_Int32)prop->value.l;
- break;
-
- case BDF_CARDINAL:
- if ( prop->value.ul > 0xFFFFFFFFUL )
- {
- FT_TRACE1(( "bdf_get_bdf_property:"
- " too large cardinal 0x%x is truncated\n" ));
- }
- aproperty->type = BDF_PROPERTY_TYPE_CARDINAL;
- aproperty->u.cardinal = (FT_UInt32)prop->value.ul;
- break;
-
- default:
- goto Fail;
- }
- return 0;
- }
-
- Fail:
- return FT_THROW( Invalid_Argument );
- }
-
-
- static FT_Error
- bdf_get_charset_id( BDF_Face face,
- const char* *acharset_encoding,
- const char* *acharset_registry )
- {
- *acharset_encoding = face->charset_encoding;
- *acharset_registry = face->charset_registry;
-
- return 0;
- }
-
-
- static const FT_Service_BDFRec bdf_service_bdf =
- {
- (FT_BDF_GetCharsetIdFunc)bdf_get_charset_id, /* get_charset_id */
- (FT_BDF_GetPropertyFunc) bdf_get_bdf_property /* get_property */
- };
-
-
- /*
- *
- * SERVICES LIST
- *
- */
-
- static const FT_ServiceDescRec bdf_services[] =
- {
- { FT_SERVICE_ID_BDF, &bdf_service_bdf },
- { FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_BDF },
- { NULL, NULL }
- };
-
-
- FT_CALLBACK_DEF( FT_Module_Interface )
- bdf_driver_requester( FT_Module module,
- const char* name )
- {
- FT_UNUSED( module );
-
- return ft_service_list_lookup( bdf_services, name );
- }
-
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Driver_ClassRec bdf_driver_class =
- {
- {
- FT_MODULE_FONT_DRIVER |
- FT_MODULE_DRIVER_NO_OUTLINES,
- sizeof ( FT_DriverRec ),
-
- "bdf",
- 0x10000L,
- 0x20000L,
-
- NULL, /* module-specific interface */
-
- NULL, /* FT_Module_Constructor module_init */
- NULL, /* FT_Module_Destructor module_done */
- bdf_driver_requester /* FT_Module_Requester get_interface */
- },
-
- sizeof ( BDF_FaceRec ),
- sizeof ( FT_SizeRec ),
- sizeof ( FT_GlyphSlotRec ),
-
- BDF_Face_Init, /* FT_Face_InitFunc init_face */
- BDF_Face_Done, /* FT_Face_DoneFunc done_face */
- NULL, /* FT_Size_InitFunc init_size */
- NULL, /* FT_Size_DoneFunc done_size */
- NULL, /* FT_Slot_InitFunc init_slot */
- NULL, /* FT_Slot_DoneFunc done_slot */
-
- BDF_Glyph_Load, /* FT_Slot_LoadFunc load_glyph */
-
- NULL, /* FT_Face_GetKerningFunc get_kerning */
- NULL, /* FT_Face_AttachFunc attach_file */
- NULL, /* FT_Face_GetAdvancesFunc get_advances */
-
- BDF_Size_Request, /* FT_Size_RequestFunc request_size */
- BDF_Size_Select /* FT_Size_SelectFunc select_size */
- };
-
-
-/* END */
diff --git a/src/bdf/bdfdrivr.h b/src/bdf/bdfdrivr.h
deleted file mode 100644
index 94550818c..000000000
--- a/src/bdf/bdfdrivr.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* bdfdrivr.h
-
- FreeType font driver for bdf fonts
-
- Copyright (C) 2001, 2002, 2003, 2004 by
- Francesco Zappa Nardelli
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-
-#ifndef BDFDRIVR_H_
-#define BDFDRIVR_H_
-
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-
-#include "bdf.h"
-
-
-FT_BEGIN_HEADER
-
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
-
- typedef struct BDF_encoding_el_
- {
- FT_Long enc;
- FT_UShort glyph;
-
- } BDF_encoding_el;
-
-
- typedef struct BDF_FaceRec_
- {
- FT_FaceRec root;
-
- char* charset_encoding;
- char* charset_registry;
-
- bdf_font_t* bdffont;
-
- BDF_encoding_el* en_table;
-
- FT_CharMap charmap_handle;
- FT_CharMapRec charmap; /* a single charmap per face */
-
- FT_UInt default_glyph;
-
- } BDF_FaceRec, *BDF_Face;
-
-
- FT_EXPORT_VAR( const FT_Driver_ClassRec ) bdf_driver_class;
-
-
-FT_END_HEADER
-
-
-#endif /* BDFDRIVR_H_ */
-
-
-/* END */
diff --git a/src/bdf/bdferror.h b/src/bdf/bdferror.h
deleted file mode 100644
index b462c7d3b..000000000
--- a/src/bdf/bdferror.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2001, 2002, 2012 Francesco Zappa Nardelli
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
- * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
- /*************************************************************************/
- /* */
- /* This file is used to define the BDF error enumeration constants. */
- /* */
- /*************************************************************************/
-
-#ifndef BDFERROR_H_
-#define BDFERROR_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX BDF_Err_
-#define FT_ERR_BASE FT_Mod_Err_BDF
-
-#include FT_ERRORS_H
-
-#endif /* BDFERROR_H_ */
-
-
-/* END */
diff --git a/src/bdf/bdflib.c b/src/bdf/bdflib.c
deleted file mode 100644
index bf10887fd..000000000
--- a/src/bdf/bdflib.c
+++ /dev/null
@@ -1,2462 +0,0 @@
-/*
- * Copyright 2000 Computing Research Labs, New Mexico State University
- * Copyright 2001-2014
- * Francesco Zappa Nardelli
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
- * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
- /*************************************************************************/
- /* */
- /* This file is based on bdf.c,v 1.22 2000/03/16 20:08:50 */
- /* */
- /* taken from Mark Leisher's xmbdfed package */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-
-#include FT_FREETYPE_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_OBJECTS_H
-
-#include "bdf.h"
-#include "bdferror.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_bdflib
-
-
- /*************************************************************************/
- /* */
- /* Default BDF font options. */
- /* */
- /*************************************************************************/
-
-
- static const bdf_options_t _bdf_opts =
- {
- 1, /* Correct metrics. */
- 1, /* Preserve unencoded glyphs. */
- 0, /* Preserve comments. */
- BDF_PROPORTIONAL /* Default spacing. */
- };
-
-
- /*************************************************************************/
- /* */
- /* Builtin BDF font properties. */
- /* */
- /*************************************************************************/
-
- /* List of most properties that might appear in a font. Doesn't include */
- /* the RAW_* and AXIS_* properties in X11R6 polymorphic fonts. */
-
- static const bdf_property_t _bdf_properties[] =
- {
- { (char *)"ADD_STYLE_NAME", BDF_ATOM, 1, { 0 } },
- { (char *)"AVERAGE_WIDTH", BDF_INTEGER, 1, { 0 } },
- { (char *)"AVG_CAPITAL_WIDTH", BDF_INTEGER, 1, { 0 } },
- { (char *)"AVG_LOWERCASE_WIDTH", BDF_INTEGER, 1, { 0 } },
- { (char *)"CAP_HEIGHT", BDF_INTEGER, 1, { 0 } },
- { (char *)"CHARSET_COLLECTIONS", BDF_ATOM, 1, { 0 } },
- { (char *)"CHARSET_ENCODING", BDF_ATOM, 1, { 0 } },
- { (char *)"CHARSET_REGISTRY", BDF_ATOM, 1, { 0 } },
- { (char *)"COMMENT", BDF_ATOM, 1, { 0 } },
- { (char *)"COPYRIGHT", BDF_ATOM, 1, { 0 } },
- { (char *)"DEFAULT_CHAR", BDF_CARDINAL, 1, { 0 } },
- { (char *)"DESTINATION", BDF_CARDINAL, 1, { 0 } },
- { (char *)"DEVICE_FONT_NAME", BDF_ATOM, 1, { 0 } },
- { (char *)"END_SPACE", BDF_INTEGER, 1, { 0 } },
- { (char *)"FACE_NAME", BDF_ATOM, 1, { 0 } },
- { (char *)"FAMILY_NAME", BDF_ATOM, 1, { 0 } },
- { (char *)"FIGURE_WIDTH", BDF_INTEGER, 1, { 0 } },
- { (char *)"FONT", BDF_ATOM, 1, { 0 } },
- { (char *)"FONTNAME_REGISTRY", BDF_ATOM, 1, { 0 } },
- { (char *)"FONT_ASCENT", BDF_INTEGER, 1, { 0 } },
- { (char *)"FONT_DESCENT", BDF_INTEGER, 1, { 0 } },
- { (char *)"FOUNDRY", BDF_ATOM, 1, { 0 } },
- { (char *)"FULL_NAME", BDF_ATOM, 1, { 0 } },
- { (char *)"ITALIC_ANGLE", BDF_INTEGER, 1, { 0 } },
- { (char *)"MAX_SPACE", BDF_INTEGER, 1, { 0 } },
- { (char *)"MIN_SPACE", BDF_INTEGER, 1, { 0 } },
- { (char *)"NORM_SPACE", BDF_INTEGER, 1, { 0 } },
- { (char *)"NOTICE", BDF_ATOM, 1, { 0 } },
- { (char *)"PIXEL_SIZE", BDF_INTEGER, 1, { 0 } },
- { (char *)"POINT_SIZE", BDF_INTEGER, 1, { 0 } },
- { (char *)"QUAD_WIDTH", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_ASCENT", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_AVERAGE_WIDTH", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_AVG_CAPITAL_WIDTH", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_AVG_LOWERCASE_WIDTH", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_CAP_HEIGHT", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_DESCENT", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_END_SPACE", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_FIGURE_WIDTH", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_MAX_SPACE", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_MIN_SPACE", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_NORM_SPACE", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_PIXEL_SIZE", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_POINT_SIZE", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_PIXELSIZE", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_POINTSIZE", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_QUAD_WIDTH", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_SMALL_CAP_SIZE", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_STRIKEOUT_ASCENT", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_STRIKEOUT_DESCENT", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_SUBSCRIPT_SIZE", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_SUBSCRIPT_X", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_SUBSCRIPT_Y", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_SUPERSCRIPT_SIZE", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_SUPERSCRIPT_X", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_SUPERSCRIPT_Y", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_UNDERLINE_POSITION", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_UNDERLINE_THICKNESS", BDF_INTEGER, 1, { 0 } },
- { (char *)"RAW_X_HEIGHT", BDF_INTEGER, 1, { 0 } },
- { (char *)"RELATIVE_SETWIDTH", BDF_CARDINAL, 1, { 0 } },
- { (char *)"RELATIVE_WEIGHT", BDF_CARDINAL, 1, { 0 } },
- { (char *)"RESOLUTION", BDF_INTEGER, 1, { 0 } },
- { (char *)"RESOLUTION_X", BDF_CARDINAL, 1, { 0 } },
- { (char *)"RESOLUTION_Y", BDF_CARDINAL, 1, { 0 } },
- { (char *)"SETWIDTH_NAME", BDF_ATOM, 1, { 0 } },
- { (char *)"SLANT", BDF_ATOM, 1, { 0 } },
- { (char *)"SMALL_CAP_SIZE", BDF_INTEGER, 1, { 0 } },
- { (char *)"SPACING", BDF_ATOM, 1, { 0 } },
- { (char *)"STRIKEOUT_ASCENT", BDF_INTEGER, 1, { 0 } },
- { (char *)"STRIKEOUT_DESCENT", BDF_INTEGER, 1, { 0 } },
- { (char *)"SUBSCRIPT_SIZE", BDF_INTEGER, 1, { 0 } },
- { (char *)"SUBSCRIPT_X", BDF_INTEGER, 1, { 0 } },
- { (char *)"SUBSCRIPT_Y", BDF_INTEGER, 1, { 0 } },
- { (char *)"SUPERSCRIPT_SIZE", BDF_INTEGER, 1, { 0 } },
- { (char *)"SUPERSCRIPT_X", BDF_INTEGER, 1, { 0 } },
- { (char *)"SUPERSCRIPT_Y", BDF_INTEGER, 1, { 0 } },
- { (char *)"UNDERLINE_POSITION", BDF_INTEGER, 1, { 0 } },
- { (char *)"UNDERLINE_THICKNESS", BDF_INTEGER, 1, { 0 } },
- { (char *)"WEIGHT", BDF_CARDINAL, 1, { 0 } },
- { (char *)"WEIGHT_NAME", BDF_ATOM, 1, { 0 } },
- { (char *)"X_HEIGHT", BDF_INTEGER, 1, { 0 } },
- { (char *)"_MULE_BASELINE_OFFSET", BDF_INTEGER, 1, { 0 } },
- { (char *)"_MULE_RELATIVE_COMPOSE", BDF_INTEGER, 1, { 0 } },
- };
-
- static const unsigned long
- _num_bdf_properties = sizeof ( _bdf_properties ) /
- sizeof ( _bdf_properties[0] );
-
-
- /* An auxiliary macro to parse properties, to be used in conditionals. */
- /* It behaves like `strncmp' but also tests the following character */
- /* whether it is a whitespace or NULL. */
- /* `property' is a constant string of length `n' to compare with. */
-#define _bdf_strncmp( name, property, n ) \
- ( ft_strncmp( name, property, n ) || \
- !( name[n] == ' ' || \
- name[n] == '\0' || \
- name[n] == '\n' || \
- name[n] == '\r' || \
- name[n] == '\t' ) )
-
- /* Auto correction messages. */
-#define ACMSG1 "FONT_ASCENT property missing. " \
- "Added `FONT_ASCENT %hd'.\n"
-#define ACMSG2 "FONT_DESCENT property missing. " \
- "Added `FONT_DESCENT %hd'.\n"
-#define ACMSG3 "Font width != actual width. Old: %hd New: %hd.\n"
-#define ACMSG4 "Font left bearing != actual left bearing. " \
- "Old: %hd New: %hd.\n"
-#define ACMSG5 "Font ascent != actual ascent. Old: %hd New: %hd.\n"
-#define ACMSG6 "Font descent != actual descent. Old: %hd New: %hd.\n"
-#define ACMSG7 "Font height != actual height. Old: %hd New: %hd.\n"
-#define ACMSG8 "Glyph scalable width (SWIDTH) adjustments made.\n"
-#define ACMSG9 "SWIDTH field missing at line %ld. Set automatically.\n"
-#define ACMSG10 "DWIDTH field missing at line %ld. Set to glyph width.\n"
-#define ACMSG11 "SIZE bits per pixel field adjusted to %hd.\n"
-#define ACMSG12 "Duplicate encoding %ld (%s) changed to unencoded.\n"
-#define ACMSG13 "Glyph %ld extra rows removed.\n"
-#define ACMSG14 "Glyph %ld extra columns removed.\n"
-#define ACMSG15 "Incorrect glyph count: %ld indicated but %ld found.\n"
-#define ACMSG16 "Glyph %ld missing columns padded with zero bits.\n"
-#define ACMSG17 "Adjusting number of glyphs to %ld.\n"
-
- /* Error messages. */
-#define ERRMSG1 "[line %ld] Missing `%s' line.\n"
-#define ERRMSG2 "[line %ld] Font header corrupted or missing fields.\n"
-#define ERRMSG3 "[line %ld] Font glyphs corrupted or missing fields.\n"
-#define ERRMSG4 "[line %ld] BBX too big.\n"
-#define ERRMSG5 "[line %ld] `%s' value too big.\n"
-#define ERRMSG6 "[line %ld] Input line too long.\n"
-#define ERRMSG7 "[line %ld] Font name too long.\n"
-#define ERRMSG8 "[line %ld] Invalid `%s' value.\n"
-#define ERRMSG9 "[line %ld] Invalid keyword.\n"
-
- /* Debug messages. */
-#define DBGMSG1 " [%6ld] %s" /* no \n */
-#define DBGMSG2 " (0x%lX)\n"
-
-
- /*************************************************************************/
- /* */
- /* Utility types and functions. */
- /* */
- /*************************************************************************/
-
-
- /* Function type for parsing lines of a BDF font. */
-
- typedef FT_Error
- (*_bdf_line_func_t)( char* line,
- unsigned long linelen,
- unsigned long lineno,
- void* call_data,
- void* client_data );
-
-
- /* List structure for splitting lines into fields. */
-
- typedef struct _bdf_list_t_
- {
- char** field;
- unsigned long size;
- unsigned long used;
- FT_Memory memory;
-
- } _bdf_list_t;
-
-
- /* Structure used while loading BDF fonts. */
-
- typedef struct _bdf_parse_t_
- {
- unsigned long flags;
- unsigned long cnt;
- unsigned long row;
-
- short minlb;
- short maxlb;
- short maxrb;
- short maxas;
- short maxds;
-
- short rbearing;
-
- char* glyph_name;
- long glyph_enc;
-
- bdf_font_t* font;
- bdf_options_t* opts;
-
- unsigned long have[34816]; /* must be in sync with `nmod' and `umod' */
- /* arrays from `bdf_font_t' structure */
- _bdf_list_t list;
-
- FT_Memory memory;
- unsigned long size; /* the stream size */
-
- } _bdf_parse_t;
-
-
-#define setsbit( m, cc ) \
- ( m[(FT_Byte)(cc) >> 3] |= (FT_Byte)( 1 << ( (cc) & 7 ) ) )
-#define sbitset( m, cc ) \
- ( m[(FT_Byte)(cc) >> 3] & ( 1 << ( (cc) & 7 ) ) )
-
-
- static void
- _bdf_list_init( _bdf_list_t* list,
- FT_Memory memory )
- {
- FT_ZERO( list );
- list->memory = memory;
- }
-
-
- static void
- _bdf_list_done( _bdf_list_t* list )
- {
- FT_Memory memory = list->memory;
-
-
- if ( memory )
- {
- FT_FREE( list->field );
- FT_ZERO( list );
- }
- }
-
-
- static FT_Error
- _bdf_list_ensure( _bdf_list_t* list,
- unsigned long num_items ) /* same as _bdf_list_t.used */
- {
- FT_Error error = FT_Err_Ok;
-
-
- if ( num_items > list->size )
- {
- unsigned long oldsize = list->size; /* same as _bdf_list_t.size */
- unsigned long newsize = oldsize + ( oldsize >> 1 ) + 5;
- unsigned long bigsize = (unsigned long)( FT_INT_MAX / sizeof ( char* ) );
- FT_Memory memory = list->memory;
-
-
- if ( oldsize == bigsize )
- {
- error = FT_THROW( Out_Of_Memory );
- goto Exit;
- }
- else if ( newsize < oldsize || newsize > bigsize )
- newsize = bigsize;
-
- if ( FT_RENEW_ARRAY( list->field, oldsize, newsize ) )
- goto Exit;
-
- list->size = newsize;
- }
-
- Exit:
- return error;
- }
-
-
- static void
- _bdf_list_shift( _bdf_list_t* list,
- unsigned long n )
- {
- unsigned long i, u;
-
-
- if ( list == 0 || list->used == 0 || n == 0 )
- return;
-
- if ( n >= list->used )
- {
- list->used = 0;
- return;
- }
-
- for ( u = n, i = 0; u < list->used; i++, u++ )
- list->field[i] = list->field[u];
- list->used -= n;
- }
-
-
- /* An empty string for empty fields. */
-
- static const char empty[1] = { 0 }; /* XXX eliminate this */
-
-
- static char *
- _bdf_list_join( _bdf_list_t* list,
- int c,
- unsigned long *alen )
- {
- unsigned long i, j;
- char* dp;
-
-
- *alen = 0;
-
- if ( list == 0 || list->used == 0 )
- return 0;
-
- dp = list->field[0];
- for ( i = j = 0; i < list->used; i++ )
- {
- char* fp = list->field[i];
-
-
- while ( *fp )
- dp[j++] = *fp++;
-
- if ( i + 1 < list->used )
- dp[j++] = (char)c;
- }
- if ( dp != empty )
- dp[j] = 0;
-
- *alen = j;
- return dp;
- }
-
-
- /* The code below ensures that we have at least 4 + 1 `field' */
- /* elements in `list' (which are possibly NULL) so that we */
- /* don't have to check the number of fields in most cases. */
-
- static FT_Error
- _bdf_list_split( _bdf_list_t* list,
- char* separators,
- char* line,
- unsigned long linelen )
- {
- unsigned long final_empty;
- int mult;
- char *sp, *ep, *end;
- char seps[32];
- FT_Error error = FT_Err_Ok;
-
-
- /* Initialize the list. */
- list->used = 0;
- if ( list->size )
- {
- list->field[0] = (char*)empty;
- list->field[1] = (char*)empty;
- list->field[2] = (char*)empty;
- list->field[3] = (char*)empty;
- list->field[4] = (char*)empty;
- }
-
- /* If the line is empty, then simply return. */
- if ( linelen == 0 || line[0] == 0 )
- goto Exit;
-
- /* In the original code, if the `separators' parameter is NULL or */
- /* empty, the list is split into individual bytes. We don't need */
- /* this, so an error is signaled. */
- if ( separators == 0 || *separators == 0 )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- /* Prepare the separator bitmap. */
- FT_MEM_ZERO( seps, 32 );
-
- /* If the very last character of the separator string is a plus, then */
- /* set the `mult' flag to indicate that multiple separators should be */
- /* collapsed into one. */
- for ( mult = 0, sp = separators; sp && *sp; sp++ )
- {
- if ( *sp == '+' && *( sp + 1 ) == 0 )
- mult = 1;
- else
- setsbit( seps, *sp );
- }
-
- /* Break the line up into fields. */
- for ( final_empty = 0, sp = ep = line, end = sp + linelen;
- sp < end && *sp; )
- {
- /* Collect everything that is not a separator. */
- for ( ; *ep && !sbitset( seps, *ep ); ep++ )
- ;
-
- /* Resize the list if necessary. */
- if ( list->used == list->size )
- {
- error = _bdf_list_ensure( list, list->used + 1 );
- if ( error )
- goto Exit;
- }
-
- /* Assign the field appropriately. */
- list->field[list->used++] = ( ep > sp ) ? sp : (char*)empty;
-
- sp = ep;
-
- if ( mult )
- {
- /* If multiple separators should be collapsed, do it now by */
- /* setting all the separator characters to 0. */
- for ( ; *ep && sbitset( seps, *ep ); ep++ )
- *ep = 0;
- }
- else if ( *ep != 0 )
- /* Don't collapse multiple separators by making them 0, so just */
- /* make the one encountered 0. */
- *ep++ = 0;
-
- final_empty = ( ep > sp && *ep == 0 );
- sp = ep;
- }
-
- /* Finally, NULL-terminate the list. */
- if ( list->used + final_empty >= list->size )
- {
- error = _bdf_list_ensure( list, list->used + final_empty + 1 );
- if ( error )
- goto Exit;
- }
-
- if ( final_empty )
- list->field[list->used++] = (char*)empty;
-
- list->field[list->used] = 0;
-
- Exit:
- return error;
- }
-
-
-#define NO_SKIP 256 /* this value cannot be stored in a 'char' */
-
-
- static FT_Error
- _bdf_readstream( FT_Stream stream,
- _bdf_line_func_t callback,
- void* client_data,
- unsigned long *lno )
- {
- _bdf_line_func_t cb;
- unsigned long lineno, buf_size;
- int refill, hold, to_skip;
- ptrdiff_t bytes, start, end, cursor, avail;
- char* buf = NULL;
- FT_Memory memory = stream->memory;
- FT_Error error = FT_Err_Ok;
-
-
- if ( callback == 0 )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- /* initial size and allocation of the input buffer */
- buf_size = 1024;
-
- if ( FT_NEW_ARRAY( buf, buf_size ) )
- goto Exit;
-
- cb = callback;
- lineno = 1;
- buf[0] = 0;
- start = 0;
- avail = 0;
- cursor = 0;
- refill = 1;
- to_skip = NO_SKIP;
- bytes = 0; /* make compiler happy */
-
- for (;;)
- {
- if ( refill )
- {
- bytes = (ptrdiff_t)FT_Stream_TryRead(
- stream, (FT_Byte*)buf + cursor,
- buf_size - (unsigned long)cursor );
- avail = cursor + bytes;
- cursor = 0;
- refill = 0;
- }
-
- end = start;
-
- /* should we skip an optional character like \n or \r? */
- if ( start < avail && buf[start] == to_skip )
- {
- start += 1;
- to_skip = NO_SKIP;
- continue;
- }
-
- /* try to find the end of the line */
- while ( end < avail && buf[end] != '\n' && buf[end] != '\r' )
- end++;
-
- /* if we hit the end of the buffer, try shifting its content */
- /* or even resizing it */
- if ( end >= avail )
- {
- if ( bytes == 0 ) /* last line in file doesn't end in \r or \n */
- break; /* ignore it then exit */
-
- if ( start == 0 )
- {
- /* this line is definitely too long; try resizing the input */
- /* buffer a bit to handle it. */
- FT_ULong new_size;
-
-
- if ( buf_size >= 65536UL ) /* limit ourselves to 64KByte */
- {
- FT_ERROR(( "_bdf_readstream: " ERRMSG6, lineno ));
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- new_size = buf_size * 2;
- if ( FT_RENEW_ARRAY( buf, buf_size, new_size ) )
- goto Exit;
-
- cursor = (ptrdiff_t)buf_size;
- buf_size = new_size;
- }
- else
- {
- bytes = avail - start;
-
- FT_MEM_MOVE( buf, buf + start, bytes );
-
- cursor = bytes;
- avail -= bytes;
- start = 0;
- }
- refill = 1;
- continue;
- }
-
- /* Temporarily NUL-terminate the line. */
- hold = buf[end];
- buf[end] = 0;
-
- /* XXX: Use encoding independent value for 0x1A */
- if ( buf[start] != '#' && buf[start] != 0x1A && end > start )
- {
- error = (*cb)( buf + start, (unsigned long)( end - start ), lineno,
- (void*)&cb, client_data );
- /* Redo if we have encountered CHARS without properties. */
- if ( error == -1 )
- error = (*cb)( buf + start, (unsigned long)( end - start ), lineno,
- (void*)&cb, client_data );
- if ( error )
- break;
- }
-
- lineno += 1;
- buf[end] = (char)hold;
- start = end + 1;
-
- if ( hold == '\n' )
- to_skip = '\r';
- else if ( hold == '\r' )
- to_skip = '\n';
- else
- to_skip = NO_SKIP;
- }
-
- *lno = lineno;
-
- Exit:
- FT_FREE( buf );
- return error;
- }
-
-
- /* XXX: make this work with EBCDIC also */
-
- static const unsigned char a2i[128] =
- {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
-
- static const unsigned char ddigits[32] =
- {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
-
- static const unsigned char hdigits[32] =
- {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03,
- 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
-
-
- /* Routine to convert a decimal ASCII string to an unsigned long integer. */
- static unsigned long
- _bdf_atoul( char* s )
- {
- unsigned long v;
-
-
- if ( s == 0 || *s == 0 )
- return 0;
-
- for ( v = 0; sbitset( ddigits, *s ); s++ )
- {
- if ( v < ( ULONG_MAX - 9 ) / 10 )
- v = v * 10 + a2i[(int)*s];
- else
- {
- v = ULONG_MAX;
- break;
- }
- }
-
- return v;
- }
-
-
- /* Routine to convert a decimal ASCII string to a signed long integer. */
- static long
- _bdf_atol( char* s )
- {
- long v, neg;
-
-
- if ( s == 0 || *s == 0 )
- return 0;
-
- /* Check for a minus sign. */
- neg = 0;
- if ( *s == '-' )
- {
- s++;
- neg = 1;
- }
-
- for ( v = 0; sbitset( ddigits, *s ); s++ )
- {
- if ( v < ( LONG_MAX - 9 ) / 10 )
- v = v * 10 + a2i[(int)*s];
- else
- {
- v = LONG_MAX;
- break;
- }
- }
-
- return ( !neg ) ? v : -v;
- }
-
-
- /* Routine to convert a decimal ASCII string to an unsigned short integer. */
- static unsigned short
- _bdf_atous( char* s )
- {
- unsigned short v;
-
-
- if ( s == 0 || *s == 0 )
- return 0;
-
- for ( v = 0; sbitset( ddigits, *s ); s++ )
- {
- if ( v < ( USHRT_MAX - 9 ) / 10 )
- v = (unsigned short)( v * 10 + a2i[(int)*s] );
- else
- {
- v = USHRT_MAX;
- break;
- }
- }
-
- return v;
- }
-
-
- /* Routine to convert a decimal ASCII string to a signed short integer. */
- static short
- _bdf_atos( char* s )
- {
- short v, neg;
-
-
- if ( s == 0 || *s == 0 )
- return 0;
-
- /* Check for a minus. */
- neg = 0;
- if ( *s == '-' )
- {
- s++;
- neg = 1;
- }
-
- for ( v = 0; sbitset( ddigits, *s ); s++ )
- {
- if ( v < ( SHRT_MAX - 9 ) / 10 )
- v = (short)( v * 10 + a2i[(int)*s] );
- else
- {
- v = SHRT_MAX;
- break;
- }
- }
-
- return (short)( ( !neg ) ? v : -v );
- }
-
-
- /* Routine to compare two glyphs by encoding so they can be sorted. */
- static int
- by_encoding( const void* a,
- const void* b )
- {
- bdf_glyph_t *c1, *c2;
-
-
- c1 = (bdf_glyph_t *)a;
- c2 = (bdf_glyph_t *)b;
-
- if ( c1->encoding < c2->encoding )
- return -1;
-
- if ( c1->encoding > c2->encoding )
- return 1;
-
- return 0;
- }
-
-
- static FT_Error
- bdf_create_property( char* name,
- int format,
- bdf_font_t* font )
- {
- size_t n;
- bdf_property_t* p;
- FT_Memory memory = font->memory;
- FT_Error error = FT_Err_Ok;
-
-
- /* First check whether the property has */
- /* already been added or not. If it has, then */
- /* simply ignore it. */
- if ( ft_hash_str_lookup( name, &(font->proptbl) ) )
- goto Exit;
-
- if ( FT_RENEW_ARRAY( font->user_props,
- font->nuser_props,
- font->nuser_props + 1 ) )
- goto Exit;
-
- p = font->user_props + font->nuser_props;
- FT_ZERO( p );
-
- n = ft_strlen( name ) + 1;
- if ( n > FT_ULONG_MAX )
- return FT_THROW( Invalid_Argument );
-
- if ( FT_NEW_ARRAY( p->name, n ) )
- goto Exit;
-
- FT_MEM_COPY( (char *)p->name, name, n );
-
- p->format = format;
- p->builtin = 0;
-
- n = _num_bdf_properties + font->nuser_props;
-
- error = ft_hash_str_insert( p->name, n, &(font->proptbl), memory );
- if ( error )
- goto Exit;
-
- font->nuser_props++;
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( bdf_property_t* )
- bdf_get_property( char* name,
- bdf_font_t* font )
- {
- size_t* propid;
-
-
- if ( name == 0 || *name == 0 )
- return 0;
-
- if ( ( propid = ft_hash_str_lookup( name, &(font->proptbl) ) ) == NULL )
- return 0;
-
- if ( *propid >= _num_bdf_properties )
- return font->user_props + ( *propid - _num_bdf_properties );
-
- return (bdf_property_t*)_bdf_properties + *propid;
- }
-
-
- /*************************************************************************/
- /* */
- /* BDF font file parsing flags and functions. */
- /* */
- /*************************************************************************/
-
-
- /* Parse flags. */
-
-#define BDF_START_ 0x0001U
-#define BDF_FONT_NAME_ 0x0002U
-#define BDF_SIZE_ 0x0004U
-#define BDF_FONT_BBX_ 0x0008U
-#define BDF_PROPS_ 0x0010U
-#define BDF_GLYPHS_ 0x0020U
-#define BDF_GLYPH_ 0x0040U
-#define BDF_ENCODING_ 0x0080U
-#define BDF_SWIDTH_ 0x0100U
-#define BDF_DWIDTH_ 0x0200U
-#define BDF_BBX_ 0x0400U
-#define BDF_BITMAP_ 0x0800U
-
-#define BDF_SWIDTH_ADJ_ 0x1000U
-
-#define BDF_GLYPH_BITS_ ( BDF_GLYPH_ | \
- BDF_ENCODING_ | \
- BDF_SWIDTH_ | \
- BDF_DWIDTH_ | \
- BDF_BBX_ | \
- BDF_BITMAP_ )
-
-#define BDF_GLYPH_WIDTH_CHECK_ 0x40000000UL
-#define BDF_GLYPH_HEIGHT_CHECK_ 0x80000000UL
-
-
- static FT_Error
- _bdf_add_comment( bdf_font_t* font,
- char* comment,
- unsigned long len )
- {
- char* cp;
- FT_Memory memory = font->memory;
- FT_Error error = FT_Err_Ok;
-
-
- if ( FT_RENEW_ARRAY( font->comments,
- font->comments_len,
- font->comments_len + len + 1 ) )
- goto Exit;
-
- cp = font->comments + font->comments_len;
-
- FT_MEM_COPY( cp, comment, len );
- cp[len] = '\n';
-
- font->comments_len += len + 1;
-
- Exit:
- return error;
- }
-
-
- /* Set the spacing from the font name if it exists, or set it to the */
- /* default specified in the options. */
- static FT_Error
- _bdf_set_default_spacing( bdf_font_t* font,
- bdf_options_t* opts,
- unsigned long lineno )
- {
- size_t len;
- char name[256];
- _bdf_list_t list;
- FT_Memory memory;
- FT_Error error = FT_Err_Ok;
-
- FT_UNUSED( lineno ); /* only used in debug mode */
-
-
- if ( font == 0 || font->name == 0 || font->name[0] == 0 )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- memory = font->memory;
-
- _bdf_list_init( &list, memory );
-
- font->spacing = opts->font_spacing;
-
- len = ft_strlen( font->name ) + 1;
- /* Limit ourselves to 256 characters in the font name. */
- if ( len >= 256 )
- {
- FT_ERROR(( "_bdf_set_default_spacing: " ERRMSG7, lineno ));
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- FT_MEM_COPY( name, font->name, len );
-
- error = _bdf_list_split( &list, (char *)"-", name, (unsigned long)len );
- if ( error )
- goto Fail;
-
- if ( list.used == 15 )
- {
- switch ( list.field[11][0] )
- {
- case 'C':
- case 'c':
- font->spacing = BDF_CHARCELL;
- break;
- case 'M':
- case 'm':
- font->spacing = BDF_MONOWIDTH;
- break;
- case 'P':
- case 'p':
- font->spacing = BDF_PROPORTIONAL;
- break;
- }
- }
-
- Fail:
- _bdf_list_done( &list );
-
- Exit:
- return error;
- }
-
-
- /* Determine whether the property is an atom or not. If it is, then */
- /* clean it up so the double quotes are removed if they exist. */
- static int
- _bdf_is_atom( char* line,
- unsigned long linelen,
- char** name,
- char** value,
- bdf_font_t* font )
- {
- int hold;
- char *sp, *ep;
- bdf_property_t* p;
-
-
- *name = sp = ep = line;
-
- while ( *ep && *ep != ' ' && *ep != '\t' )
- ep++;
-
- hold = -1;
- if ( *ep )
- {
- hold = *ep;
- *ep = 0;
- }
-
- p = bdf_get_property( sp, font );
-
- /* Restore the character that was saved before any return can happen. */
- if ( hold != -1 )
- *ep = (char)hold;
-
- /* If the property exists and is not an atom, just return here. */
- if ( p && p->format != BDF_ATOM )
- return 0;
-
- /* The property is an atom. Trim all leading and trailing whitespace */
- /* and double quotes for the atom value. */
- sp = ep;
- ep = line + linelen;
-
- /* Trim the leading whitespace if it exists. */
- if ( *sp )
- *sp++ = 0;
- while ( *sp &&
- ( *sp == ' ' || *sp == '\t' ) )
- sp++;
-
- /* Trim the leading double quote if it exists. */
- if ( *sp == '"' )
- sp++;
- *value = sp;
-
- /* Trim the trailing whitespace if it exists. */
- while ( ep > sp &&
- ( *( ep - 1 ) == ' ' || *( ep - 1 ) == '\t' ) )
- *--ep = 0;
-
- /* Trim the trailing double quote if it exists. */
- if ( ep > sp && *( ep - 1 ) == '"' )
- *--ep = 0;
-
- return 1;
- }
-
-
- static FT_Error
- _bdf_add_property( bdf_font_t* font,
- char* name,
- char* value,
- unsigned long lineno )
- {
- size_t* propid;
- bdf_property_t *prop, *fp;
- FT_Memory memory = font->memory;
- FT_Error error = FT_Err_Ok;
-
- FT_UNUSED( lineno ); /* only used in debug mode */
-
-
- /* First, check whether the property already exists in the font. */
- if ( ( propid = ft_hash_str_lookup( name,
- (FT_Hash)font->internal ) ) != NULL )
- {
- /* The property already exists in the font, so simply replace */
- /* the value of the property with the current value. */
- fp = font->props + *propid;
-
- switch ( fp->format )
- {
- case BDF_ATOM:
- /* Delete the current atom if it exists. */
- FT_FREE( fp->value.atom );
-
- if ( value && value[0] != 0 )
- {
- if ( FT_STRDUP( fp->value.atom, value ) )
- goto Exit;
- }
- break;
-
- case BDF_INTEGER:
- fp->value.l = _bdf_atol( value );
- break;
-
- case BDF_CARDINAL:
- fp->value.ul = _bdf_atoul( value );
- break;
-
- default:
- ;
- }
-
- goto Exit;
- }
-
- /* See whether this property type exists yet or not. */
- /* If not, create it. */
- propid = ft_hash_str_lookup( name, &(font->proptbl) );
- if ( !propid )
- {
- error = bdf_create_property( name, BDF_ATOM, font );
- if ( error )
- goto Exit;
- propid = ft_hash_str_lookup( name, &(font->proptbl) );
- }
-
- /* Allocate another property if this is overflowing. */
- if ( font->props_used == font->props_size )
- {
- if ( font->props_size == 0 )
- {
- if ( FT_NEW_ARRAY( font->props, 1 ) )
- goto Exit;
- }
- else
- {
- if ( FT_RENEW_ARRAY( font->props,
- font->props_size,
- font->props_size + 1 ) )
- goto Exit;
- }
-
- fp = font->props + font->props_size;
- FT_ZERO( fp );
- font->props_size++;
- }
-
- if ( *propid >= _num_bdf_properties )
- prop = font->user_props + ( *propid - _num_bdf_properties );
- else
- prop = (bdf_property_t*)_bdf_properties + *propid;
-
- fp = font->props + font->props_used;
-
- fp->name = prop->name;
- fp->format = prop->format;
- fp->builtin = prop->builtin;
-
- switch ( prop->format )
- {
- case BDF_ATOM:
- fp->value.atom = 0;
- if ( value != 0 && value[0] )
- {
- if ( FT_STRDUP( fp->value.atom, value ) )
- goto Exit;
- }
- break;
-
- case BDF_INTEGER:
- fp->value.l = _bdf_atol( value );
- break;
-
- case BDF_CARDINAL:
- fp->value.ul = _bdf_atoul( value );
- break;
- }
-
- /* If the property happens to be a comment, then it doesn't need */
- /* to be added to the internal hash table. */
- if ( _bdf_strncmp( name, "COMMENT", 7 ) != 0 )
- {
- /* Add the property to the font property table. */
- error = ft_hash_str_insert( fp->name,
- font->props_used,
- (FT_Hash)font->internal,
- memory );
- if ( error )
- goto Exit;
- }
-
- font->props_used++;
-
- /* Some special cases need to be handled here. The DEFAULT_CHAR */
- /* property needs to be located if it exists in the property list, the */
- /* FONT_ASCENT and FONT_DESCENT need to be assigned if they are */
- /* present, and the SPACING property should override the default */
- /* spacing. */
- if ( _bdf_strncmp( name, "DEFAULT_CHAR", 12 ) == 0 )
- font->default_char = fp->value.l;
- else if ( _bdf_strncmp( name, "FONT_ASCENT", 11 ) == 0 )
- font->font_ascent = fp->value.l;
- else if ( _bdf_strncmp( name, "FONT_DESCENT", 12 ) == 0 )
- font->font_descent = fp->value.l;
- else if ( _bdf_strncmp( name, "SPACING", 7 ) == 0 )
- {
- if ( !fp->value.atom )
- {
- FT_ERROR(( "_bdf_add_property: " ERRMSG8, lineno, "SPACING" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- if ( fp->value.atom[0] == 'p' || fp->value.atom[0] == 'P' )
- font->spacing = BDF_PROPORTIONAL;
- else if ( fp->value.atom[0] == 'm' || fp->value.atom[0] == 'M' )
- font->spacing = BDF_MONOWIDTH;
- else if ( fp->value.atom[0] == 'c' || fp->value.atom[0] == 'C' )
- font->spacing = BDF_CHARCELL;
- }
-
- Exit:
- return error;
- }
-
-
- static const unsigned char nibble_mask[8] =
- {
- 0xFF, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE
- };
-
-
- /* Actually parse the glyph info and bitmaps. */
- static FT_Error
- _bdf_parse_glyphs( char* line,
- unsigned long linelen,
- unsigned long lineno,
- void* call_data,
- void* client_data )
- {
- int c, mask_index;
- char* s;
- unsigned char* bp;
- unsigned long i, slen, nibbles;
-
- _bdf_parse_t* p;
- bdf_glyph_t* glyph;
- bdf_font_t* font;
-
- FT_Memory memory;
- FT_Error error = FT_Err_Ok;
-
- FT_UNUSED( call_data );
- FT_UNUSED( lineno ); /* only used in debug mode */
-
-
- p = (_bdf_parse_t *)client_data;
-
- font = p->font;
- memory = font->memory;
-
- /* Check for a comment. */
- if ( _bdf_strncmp( line, "COMMENT", 7 ) == 0 )
- {
- linelen -= 7;
-
- s = line + 7;
- if ( *s != 0 )
- {
- s++;
- linelen--;
- }
- error = _bdf_add_comment( p->font, s, linelen );
- goto Exit;
- }
-
- /* The very first thing expected is the number of glyphs. */
- if ( !( p->flags & BDF_GLYPHS_ ) )
- {
- if ( _bdf_strncmp( line, "CHARS", 5 ) != 0 )
- {
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "CHARS" ));
- error = FT_THROW( Missing_Chars_Field );
- goto Exit;
- }
-
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
- p->cnt = font->glyphs_size = _bdf_atoul( p->list.field[1] );
-
- /* We need at least 20 bytes per glyph. */
- if ( p->cnt > p->size / 20 )
- {
- p->cnt = font->glyphs_size = p->size / 20;
- FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG17, p->cnt ));
- }
-
- /* Make sure the number of glyphs is non-zero. */
- if ( p->cnt == 0 )
- font->glyphs_size = 64;
-
- /* Limit ourselves to 1,114,112 glyphs in the font (this is the */
- /* number of code points available in Unicode). */
- if ( p->cnt >= 0x110000UL )
- {
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG5, lineno, "CHARS" ));
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- if ( FT_NEW_ARRAY( font->glyphs, font->glyphs_size ) )
- goto Exit;
-
- p->flags |= BDF_GLYPHS_;
-
- goto Exit;
- }
-
- /* Check for the ENDFONT field. */
- if ( _bdf_strncmp( line, "ENDFONT", 7 ) == 0 )
- {
- if ( p->flags & BDF_GLYPH_BITS_ )
- {
- /* Missing ENDCHAR field. */
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "ENDCHAR" ));
- error = FT_THROW( Corrupted_Font_Glyphs );
- goto Exit;
- }
-
- /* Sort the glyphs by encoding. */
- ft_qsort( (char *)font->glyphs,
- font->glyphs_used,
- sizeof ( bdf_glyph_t ),
- by_encoding );
-
- p->flags &= ~BDF_START_;
-
- goto Exit;
- }
-
- /* Check for the ENDCHAR field. */
- if ( _bdf_strncmp( line, "ENDCHAR", 7 ) == 0 )
- {
- p->glyph_enc = 0;
- p->flags &= ~BDF_GLYPH_BITS_;
-
- goto Exit;
- }
-
- /* Check whether a glyph is being scanned but should be */
- /* ignored because it is an unencoded glyph. */
- if ( ( p->flags & BDF_GLYPH_ ) &&
- p->glyph_enc == -1 &&
- p->opts->keep_unencoded == 0 )
- goto Exit;
-
- /* Check for the STARTCHAR field. */
- if ( _bdf_strncmp( line, "STARTCHAR", 9 ) == 0 )
- {
- if ( p->flags & BDF_GLYPH_BITS_ )
- {
- /* Missing ENDCHAR field. */
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "ENDCHAR" ));
- error = FT_THROW( Missing_Startchar_Field );
- goto Exit;
- }
-
- /* Set the character name in the parse info first until the */
- /* encoding can be checked for an unencoded character. */
- FT_FREE( p->glyph_name );
-
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
-
- _bdf_list_shift( &p->list, 1 );
-
- s = _bdf_list_join( &p->list, ' ', &slen );
-
- if ( !s )
- {
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG8, lineno, "STARTCHAR" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- if ( FT_NEW_ARRAY( p->glyph_name, slen + 1 ) )
- goto Exit;
-
- FT_MEM_COPY( p->glyph_name, s, slen + 1 );
-
- p->flags |= BDF_GLYPH_;
-
- FT_TRACE4(( DBGMSG1, lineno, s ));
-
- goto Exit;
- }
-
- /* Check for the ENCODING field. */
- if ( _bdf_strncmp( line, "ENCODING", 8 ) == 0 )
- {
- if ( !( p->flags & BDF_GLYPH_ ) )
- {
- /* Missing STARTCHAR field. */
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "STARTCHAR" ));
- error = FT_THROW( Missing_Startchar_Field );
- goto Exit;
- }
-
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
-
- p->glyph_enc = _bdf_atol( p->list.field[1] );
-
- /* Normalize negative encoding values. The specification only */
- /* allows -1, but we can be more generous here. */
- if ( p->glyph_enc < -1 )
- p->glyph_enc = -1;
-
- /* Check for alternative encoding format. */
- if ( p->glyph_enc == -1 && p->list.used > 2 )
- p->glyph_enc = _bdf_atol( p->list.field[2] );
-
- if ( p->glyph_enc < -1 )
- p->glyph_enc = -1;
-
- FT_TRACE4(( DBGMSG2, p->glyph_enc ));
-
- /* Check that the encoding is in the Unicode range because */
- /* otherwise p->have (a bitmap with static size) overflows. */
- if ( p->glyph_enc > 0 &&
- (size_t)p->glyph_enc >= sizeof ( p->have ) /
- sizeof ( unsigned long ) * 32 )
- {
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG5, lineno, "ENCODING" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* Check whether this encoding has already been encountered. */
- /* If it has then change it to unencoded so it gets added if */
- /* indicated. */
- if ( p->glyph_enc >= 0 )
- {
- if ( _bdf_glyph_modified( p->have, p->glyph_enc ) )
- {
- /* Emit a message saying a glyph has been moved to the */
- /* unencoded area. */
- FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG12,
- p->glyph_enc, p->glyph_name ));
- p->glyph_enc = -1;
- font->modified = 1;
- }
- else
- _bdf_set_glyph_modified( p->have, p->glyph_enc );
- }
-
- if ( p->glyph_enc >= 0 )
- {
- /* Make sure there are enough glyphs allocated in case the */
- /* number of characters happen to be wrong. */
- if ( font->glyphs_used == font->glyphs_size )
- {
- if ( FT_RENEW_ARRAY( font->glyphs,
- font->glyphs_size,
- font->glyphs_size + 64 ) )
- goto Exit;
-
- font->glyphs_size += 64;
- }
-
- glyph = font->glyphs + font->glyphs_used++;
- glyph->name = p->glyph_name;
- glyph->encoding = p->glyph_enc;
-
- /* Reset the initial glyph info. */
- p->glyph_name = NULL;
- }
- else
- {
- /* Unencoded glyph. Check whether it should */
- /* be added or not. */
- if ( p->opts->keep_unencoded != 0 )
- {
- /* Allocate the next unencoded glyph. */
- if ( font->unencoded_used == font->unencoded_size )
- {
- if ( FT_RENEW_ARRAY( font->unencoded ,
- font->unencoded_size,
- font->unencoded_size + 4 ) )
- goto Exit;
-
- font->unencoded_size += 4;
- }
-
- glyph = font->unencoded + font->unencoded_used;
- glyph->name = p->glyph_name;
- glyph->encoding = (long)font->unencoded_used++;
-
- /* Reset the initial glyph info. */
- p->glyph_name = NULL;
- }
- else
- {
- /* Free up the glyph name if the unencoded shouldn't be */
- /* kept. */
- FT_FREE( p->glyph_name );
- }
-
- p->glyph_name = NULL;
- }
-
- /* Clear the flags that might be added when width and height are */
- /* checked for consistency. */
- p->flags &= ~( BDF_GLYPH_WIDTH_CHECK_ | BDF_GLYPH_HEIGHT_CHECK_ );
-
- p->flags |= BDF_ENCODING_;
-
- goto Exit;
- }
-
- /* Point at the glyph being constructed. */
- if ( p->glyph_enc == -1 )
- glyph = font->unencoded + ( font->unencoded_used - 1 );
- else
- glyph = font->glyphs + ( font->glyphs_used - 1 );
-
- /* Check whether a bitmap is being constructed. */
- if ( p->flags & BDF_BITMAP_ )
- {
- /* If there are more rows than are specified in the glyph metrics, */
- /* ignore the remaining lines. */
- if ( p->row >= (unsigned long)glyph->bbx.height )
- {
- if ( !( p->flags & BDF_GLYPH_HEIGHT_CHECK_ ) )
- {
- FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG13, glyph->encoding ));
- p->flags |= BDF_GLYPH_HEIGHT_CHECK_;
- font->modified = 1;
- }
-
- goto Exit;
- }
-
- /* Only collect the number of nibbles indicated by the glyph */
- /* metrics. If there are more columns, they are simply ignored. */
- nibbles = glyph->bpr << 1;
- bp = glyph->bitmap + p->row * glyph->bpr;
-
- for ( i = 0; i < nibbles; i++ )
- {
- c = line[i];
- if ( !sbitset( hdigits, c ) )
- break;
- *bp = (FT_Byte)( ( *bp << 4 ) + a2i[c] );
- if ( i + 1 < nibbles && ( i & 1 ) )
- *++bp = 0;
- }
-
- /* If any line has not enough columns, */
- /* indicate they have been padded with zero bits. */
- if ( i < nibbles &&
- !( p->flags & BDF_GLYPH_WIDTH_CHECK_ ) )
- {
- FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG16, glyph->encoding ));
- p->flags |= BDF_GLYPH_WIDTH_CHECK_;
- font->modified = 1;
- }
-
- /* Remove possible garbage at the right. */
- mask_index = ( glyph->bbx.width * p->font->bpp ) & 7;
- if ( glyph->bbx.width )
- *bp &= nibble_mask[mask_index];
-
- /* If any line has extra columns, indicate they have been removed. */
- if ( i == nibbles &&
- sbitset( hdigits, line[nibbles] ) &&
- !( p->flags & BDF_GLYPH_WIDTH_CHECK_ ) )
- {
- FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG14, glyph->encoding ));
- p->flags |= BDF_GLYPH_WIDTH_CHECK_;
- font->modified = 1;
- }
-
- p->row++;
- goto Exit;
- }
-
- /* Expect the SWIDTH (scalable width) field next. */
- if ( _bdf_strncmp( line, "SWIDTH", 6 ) == 0 )
- {
- if ( !( p->flags & BDF_ENCODING_ ) )
- goto Missing_Encoding;
-
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
-
- glyph->swidth = (unsigned short)_bdf_atoul( p->list.field[1] );
- p->flags |= BDF_SWIDTH_;
-
- goto Exit;
- }
-
- /* Expect the DWIDTH (scalable width) field next. */
- if ( _bdf_strncmp( line, "DWIDTH", 6 ) == 0 )
- {
- if ( !( p->flags & BDF_ENCODING_ ) )
- goto Missing_Encoding;
-
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
-
- glyph->dwidth = (unsigned short)_bdf_atoul( p->list.field[1] );
-
- if ( !( p->flags & BDF_SWIDTH_ ) )
- {
- /* Missing SWIDTH field. Emit an auto correction message and set */
- /* the scalable width from the device width. */
- FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG9, lineno ));
-
- glyph->swidth = (unsigned short)FT_MulDiv(
- glyph->dwidth, 72000L,
- (FT_Long)( font->point_size *
- font->resolution_x ) );
- }
-
- p->flags |= BDF_DWIDTH_;
- goto Exit;
- }
-
- /* Expect the BBX field next. */
- if ( _bdf_strncmp( line, "BBX", 3 ) == 0 )
- {
- if ( !( p->flags & BDF_ENCODING_ ) )
- goto Missing_Encoding;
-
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
-
- glyph->bbx.width = _bdf_atous( p->list.field[1] );
- glyph->bbx.height = _bdf_atous( p->list.field[2] );
- glyph->bbx.x_offset = _bdf_atos( p->list.field[3] );
- glyph->bbx.y_offset = _bdf_atos( p->list.field[4] );
-
- /* Generate the ascent and descent of the character. */
- glyph->bbx.ascent = (short)( glyph->bbx.height + glyph->bbx.y_offset );
- glyph->bbx.descent = (short)( -glyph->bbx.y_offset );
-
- /* Determine the overall font bounding box as the characters are */
- /* loaded so corrections can be done later if indicated. */
- p->maxas = (short)FT_MAX( glyph->bbx.ascent, p->maxas );
- p->maxds = (short)FT_MAX( glyph->bbx.descent, p->maxds );
-
- p->rbearing = (short)( glyph->bbx.width + glyph->bbx.x_offset );
-
- p->maxrb = (short)FT_MAX( p->rbearing, p->maxrb );
- p->minlb = (short)FT_MIN( glyph->bbx.x_offset, p->minlb );
- p->maxlb = (short)FT_MAX( glyph->bbx.x_offset, p->maxlb );
-
- if ( !( p->flags & BDF_DWIDTH_ ) )
- {
- /* Missing DWIDTH field. Emit an auto correction message and set */
- /* the device width to the glyph width. */
- FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG10, lineno ));
- glyph->dwidth = glyph->bbx.width;
- }
-
- /* If the BDF_CORRECT_METRICS flag is set, then adjust the SWIDTH */
- /* value if necessary. */
- if ( p->opts->correct_metrics != 0 )
- {
- /* Determine the point size of the glyph. */
- unsigned short sw = (unsigned short)FT_MulDiv(
- glyph->dwidth, 72000L,
- (FT_Long)( font->point_size *
- font->resolution_x ) );
-
-
- if ( sw != glyph->swidth )
- {
- glyph->swidth = sw;
-
- if ( p->glyph_enc == -1 )
- _bdf_set_glyph_modified( font->umod,
- font->unencoded_used - 1 );
- else
- _bdf_set_glyph_modified( font->nmod, glyph->encoding );
-
- p->flags |= BDF_SWIDTH_ADJ_;
- font->modified = 1;
- }
- }
-
- p->flags |= BDF_BBX_;
- goto Exit;
- }
-
- /* And finally, gather up the bitmap. */
- if ( _bdf_strncmp( line, "BITMAP", 6 ) == 0 )
- {
- unsigned long bitmap_size;
-
-
- if ( !( p->flags & BDF_BBX_ ) )
- {
- /* Missing BBX field. */
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "BBX" ));
- error = FT_THROW( Missing_Bbx_Field );
- goto Exit;
- }
-
- /* Allocate enough space for the bitmap. */
- glyph->bpr = ( glyph->bbx.width * p->font->bpp + 7 ) >> 3;
-
- bitmap_size = glyph->bpr * glyph->bbx.height;
- if ( glyph->bpr > 0xFFFFU || bitmap_size > 0xFFFFU )
- {
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG4, lineno ));
- error = FT_THROW( Bbx_Too_Big );
- goto Exit;
- }
- else
- glyph->bytes = (unsigned short)bitmap_size;
-
- if ( FT_NEW_ARRAY( glyph->bitmap, glyph->bytes ) )
- goto Exit;
-
- p->row = 0;
- p->flags |= BDF_BITMAP_;
-
- goto Exit;
- }
-
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG9, lineno ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
-
- Missing_Encoding:
- /* Missing ENCODING field. */
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "ENCODING" ));
- error = FT_THROW( Missing_Encoding_Field );
-
- Exit:
- if ( error && ( p->flags & BDF_GLYPH_ ) )
- FT_FREE( p->glyph_name );
-
- return error;
- }
-
-
- /* Load the font properties. */
- static FT_Error
- _bdf_parse_properties( char* line,
- unsigned long linelen,
- unsigned long lineno,
- void* call_data,
- void* client_data )
- {
- unsigned long vlen;
- _bdf_line_func_t* next;
- _bdf_parse_t* p;
- char* name;
- char* value;
- char nbuf[128];
- FT_Error error = FT_Err_Ok;
-
- FT_UNUSED( lineno );
-
-
- next = (_bdf_line_func_t *)call_data;
- p = (_bdf_parse_t *) client_data;
-
- /* Check for the end of the properties. */
- if ( _bdf_strncmp( line, "ENDPROPERTIES", 13 ) == 0 )
- {
- /* If the FONT_ASCENT or FONT_DESCENT properties have not been */
- /* encountered yet, then make sure they are added as properties and */
- /* make sure they are set from the font bounding box info. */
- /* */
- /* This is *always* done regardless of the options, because X11 */
- /* requires these two fields to compile fonts. */
- if ( bdf_get_font_property( p->font, "FONT_ASCENT" ) == 0 )
- {
- p->font->font_ascent = p->font->bbx.ascent;
- ft_sprintf( nbuf, "%hd", p->font->bbx.ascent );
- error = _bdf_add_property( p->font, (char *)"FONT_ASCENT",
- nbuf, lineno );
- if ( error )
- goto Exit;
-
- FT_TRACE2(( "_bdf_parse_properties: " ACMSG1, p->font->bbx.ascent ));
- p->font->modified = 1;
- }
-
- if ( bdf_get_font_property( p->font, "FONT_DESCENT" ) == 0 )
- {
- p->font->font_descent = p->font->bbx.descent;
- ft_sprintf( nbuf, "%hd", p->font->bbx.descent );
- error = _bdf_add_property( p->font, (char *)"FONT_DESCENT",
- nbuf, lineno );
- if ( error )
- goto Exit;
-
- FT_TRACE2(( "_bdf_parse_properties: " ACMSG2, p->font->bbx.descent ));
- p->font->modified = 1;
- }
-
- p->flags &= ~BDF_PROPS_;
- *next = _bdf_parse_glyphs;
-
- goto Exit;
- }
-
- /* Ignore the _XFREE86_GLYPH_RANGES properties. */
- if ( _bdf_strncmp( line, "_XFREE86_GLYPH_RANGES", 21 ) == 0 )
- goto Exit;
-
- /* Handle COMMENT fields and properties in a special way to preserve */
- /* the spacing. */
- if ( _bdf_strncmp( line, "COMMENT", 7 ) == 0 )
- {
- name = value = line;
- value += 7;
- if ( *value )
- *value++ = 0;
- error = _bdf_add_property( p->font, name, value, lineno );
- if ( error )
- goto Exit;
- }
- else if ( _bdf_is_atom( line, linelen, &name, &value, p->font ) )
- {
- error = _bdf_add_property( p->font, name, value, lineno );
- if ( error )
- goto Exit;
- }
- else
- {
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
- name = p->list.field[0];
-
- _bdf_list_shift( &p->list, 1 );
- value = _bdf_list_join( &p->list, ' ', &vlen );
-
- error = _bdf_add_property( p->font, name, value, lineno );
- if ( error )
- goto Exit;
- }
-
- Exit:
- return error;
- }
-
-
- /* Load the font header. */
- static FT_Error
- _bdf_parse_start( char* line,
- unsigned long linelen,
- unsigned long lineno,
- void* call_data,
- void* client_data )
- {
- unsigned long slen;
- _bdf_line_func_t* next;
- _bdf_parse_t* p;
- bdf_font_t* font;
- char *s;
-
- FT_Memory memory = NULL;
- FT_Error error = FT_Err_Ok;
-
- FT_UNUSED( lineno ); /* only used in debug mode */
-
-
- next = (_bdf_line_func_t *)call_data;
- p = (_bdf_parse_t *) client_data;
-
- if ( p->font )
- memory = p->font->memory;
-
- /* Check for a comment. This is done to handle those fonts that have */
- /* comments before the STARTFONT line for some reason. */
- if ( _bdf_strncmp( line, "COMMENT", 7 ) == 0 )
- {
- if ( p->opts->keep_comments != 0 && p->font != 0 )
- {
- linelen -= 7;
-
- s = line + 7;
- if ( *s != 0 )
- {
- s++;
- linelen--;
- }
-
- error = _bdf_add_comment( p->font, s, linelen );
- if ( error )
- goto Exit;
- /* here font is not defined! */
- }
-
- goto Exit;
- }
-
- if ( !( p->flags & BDF_START_ ) )
- {
- memory = p->memory;
-
- if ( _bdf_strncmp( line, "STARTFONT", 9 ) != 0 )
- {
- /* we don't emit an error message since this code gets */
- /* explicitly caught one level higher */
- error = FT_THROW( Missing_Startfont_Field );
- goto Exit;
- }
-
- p->flags = BDF_START_;
- font = p->font = 0;
-
- if ( FT_NEW( font ) )
- goto Exit;
- p->font = font;
-
- font->memory = p->memory;
- p->memory = 0;
-
- { /* setup */
- size_t i;
- bdf_property_t* prop;
-
-
- error = ft_hash_str_init( &(font->proptbl), memory );
- if ( error )
- goto Exit;
- for ( i = 0, prop = (bdf_property_t*)_bdf_properties;
- i < _num_bdf_properties; i++, prop++ )
- {
- error = ft_hash_str_insert( prop->name, i,
- &(font->proptbl), memory );
- if ( error )
- goto Exit;
- }
- }
-
- if ( FT_ALLOC( p->font->internal, sizeof ( FT_HashRec ) ) )
- goto Exit;
- error = ft_hash_str_init( (FT_Hash)p->font->internal, memory );
- if ( error )
- goto Exit;
- p->font->spacing = p->opts->font_spacing;
- p->font->default_char = -1;
-
- goto Exit;
- }
-
- /* Check for the start of the properties. */
- if ( _bdf_strncmp( line, "STARTPROPERTIES", 15 ) == 0 )
- {
- if ( !( p->flags & BDF_FONT_BBX_ ) )
- {
- /* Missing the FONTBOUNDINGBOX field. */
- FT_ERROR(( "_bdf_parse_start: " ERRMSG1, lineno, "FONTBOUNDINGBOX" ));
- error = FT_THROW( Missing_Fontboundingbox_Field );
- goto Exit;
- }
-
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
-
- /* at this point, `p->font' can't be NULL */
- p->cnt = p->font->props_size = _bdf_atoul( p->list.field[1] );
- /* We need at least 4 bytes per property. */
- if ( p->cnt > p->size / 4 )
- {
- p->font->props_size = 0;
-
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG5, lineno, "STARTPROPERTIES" ));
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- if ( FT_NEW_ARRAY( p->font->props, p->cnt ) )
- {
- p->font->props_size = 0;
- goto Exit;
- }
-
- p->flags |= BDF_PROPS_;
- *next = _bdf_parse_properties;
-
- goto Exit;
- }
-
- /* Check for the FONTBOUNDINGBOX field. */
- if ( _bdf_strncmp( line, "FONTBOUNDINGBOX", 15 ) == 0 )
- {
- if ( !( p->flags & BDF_SIZE_ ) )
- {
- /* Missing the SIZE field. */
- FT_ERROR(( "_bdf_parse_start: " ERRMSG1, lineno, "SIZE" ));
- error = FT_THROW( Missing_Size_Field );
- goto Exit;
- }
-
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
-
- p->font->bbx.width = _bdf_atous( p->list.field[1] );
- p->font->bbx.height = _bdf_atous( p->list.field[2] );
-
- p->font->bbx.x_offset = _bdf_atos( p->list.field[3] );
- p->font->bbx.y_offset = _bdf_atos( p->list.field[4] );
-
- p->font->bbx.ascent = (short)( p->font->bbx.height +
- p->font->bbx.y_offset );
-
- p->font->bbx.descent = (short)( -p->font->bbx.y_offset );
-
- p->flags |= BDF_FONT_BBX_;
-
- goto Exit;
- }
-
- /* The next thing to check for is the FONT field. */
- if ( _bdf_strncmp( line, "FONT", 4 ) == 0 )
- {
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
- _bdf_list_shift( &p->list, 1 );
-
- s = _bdf_list_join( &p->list, ' ', &slen );
-
- if ( !s )
- {
- FT_ERROR(( "_bdf_parse_start: " ERRMSG8, lineno, "FONT" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* Allowing multiple `FONT' lines (which is invalid) doesn't hurt... */
- FT_FREE( p->font->name );
-
- if ( FT_NEW_ARRAY( p->font->name, slen + 1 ) )
- goto Exit;
- FT_MEM_COPY( p->font->name, s, slen + 1 );
-
- /* If the font name is an XLFD name, set the spacing to the one in */
- /* the font name. If there is no spacing fall back on the default. */
- error = _bdf_set_default_spacing( p->font, p->opts, lineno );
- if ( error )
- goto Exit;
-
- p->flags |= BDF_FONT_NAME_;
-
- goto Exit;
- }
-
- /* Check for the SIZE field. */
- if ( _bdf_strncmp( line, "SIZE", 4 ) == 0 )
- {
- if ( !( p->flags & BDF_FONT_NAME_ ) )
- {
- /* Missing the FONT field. */
- FT_ERROR(( "_bdf_parse_start: " ERRMSG1, lineno, "FONT" ));
- error = FT_THROW( Missing_Font_Field );
- goto Exit;
- }
-
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
-
- p->font->point_size = _bdf_atoul( p->list.field[1] );
- p->font->resolution_x = _bdf_atoul( p->list.field[2] );
- p->font->resolution_y = _bdf_atoul( p->list.field[3] );
-
- /* Check for the bits per pixel field. */
- if ( p->list.used == 5 )
- {
- unsigned short bpp;
-
-
- bpp = (unsigned short)_bdf_atos( p->list.field[4] );
-
- /* Only values 1, 2, 4, 8 are allowed for greymap fonts. */
- if ( bpp > 4 )
- p->font->bpp = 8;
- else if ( bpp > 2 )
- p->font->bpp = 4;
- else if ( bpp > 1 )
- p->font->bpp = 2;
- else
- p->font->bpp = 1;
-
- if ( p->font->bpp != bpp )
- FT_TRACE2(( "_bdf_parse_start: " ACMSG11, p->font->bpp ));
- }
- else
- p->font->bpp = 1;
-
- p->flags |= BDF_SIZE_;
-
- goto Exit;
- }
-
- /* Check for the CHARS field -- font properties are optional */
- if ( _bdf_strncmp( line, "CHARS", 5 ) == 0 )
- {
- char nbuf[128];
-
-
- if ( !( p->flags & BDF_FONT_BBX_ ) )
- {
- /* Missing the FONTBOUNDINGBOX field. */
- FT_ERROR(( "_bdf_parse_start: " ERRMSG1, lineno, "FONTBOUNDINGBOX" ));
- error = FT_THROW( Missing_Fontboundingbox_Field );
- goto Exit;
- }
-
- /* Add the two standard X11 properties which are required */
- /* for compiling fonts. */
- p->font->font_ascent = p->font->bbx.ascent;
- ft_sprintf( nbuf, "%hd", p->font->bbx.ascent );
- error = _bdf_add_property( p->font, (char *)"FONT_ASCENT",
- nbuf, lineno );
- if ( error )
- goto Exit;
- FT_TRACE2(( "_bdf_parse_properties: " ACMSG1, p->font->bbx.ascent ));
-
- p->font->font_descent = p->font->bbx.descent;
- ft_sprintf( nbuf, "%hd", p->font->bbx.descent );
- error = _bdf_add_property( p->font, (char *)"FONT_DESCENT",
- nbuf, lineno );
- if ( error )
- goto Exit;
- FT_TRACE2(( "_bdf_parse_properties: " ACMSG2, p->font->bbx.descent ));
-
- p->font->modified = 1;
-
- *next = _bdf_parse_glyphs;
-
- /* A special return value. */
- error = -1;
- goto Exit;
- }
-
- FT_ERROR(( "_bdf_parse_start: " ERRMSG9, lineno ));
- error = FT_THROW( Invalid_File_Format );
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* API. */
- /* */
- /*************************************************************************/
-
-
- FT_LOCAL_DEF( FT_Error )
- bdf_load_font( FT_Stream stream,
- FT_Memory extmemory,
- bdf_options_t* opts,
- bdf_font_t* *font )
- {
- unsigned long lineno = 0; /* make compiler happy */
- _bdf_parse_t *p = NULL;
-
- FT_Memory memory = extmemory; /* needed for FT_NEW */
- FT_Error error = FT_Err_Ok;
-
-
- if ( FT_NEW( p ) )
- goto Exit;
-
- memory = NULL;
- p->opts = (bdf_options_t*)( ( opts != 0 ) ? opts : &_bdf_opts );
- p->minlb = 32767;
- p->size = stream->size;
- p->memory = extmemory; /* only during font creation */
-
- _bdf_list_init( &p->list, extmemory );
-
- error = _bdf_readstream( stream, _bdf_parse_start,
- (void *)p, &lineno );
- if ( error )
- goto Fail;
-
- if ( p->font != 0 )
- {
- /* If the font is not proportional, set the font's monowidth */
- /* field to the width of the font bounding box. */
-
- if ( p->font->spacing != BDF_PROPORTIONAL )
- p->font->monowidth = p->font->bbx.width;
-
- /* If the number of glyphs loaded is not that of the original count, */
- /* indicate the difference. */
- if ( p->cnt != p->font->glyphs_used + p->font->unencoded_used )
- {
- FT_TRACE2(( "bdf_load_font: " ACMSG15, p->cnt,
- p->font->glyphs_used + p->font->unencoded_used ));
- p->font->modified = 1;
- }
-
- /* Once the font has been loaded, adjust the overall font metrics if */
- /* necessary. */
- if ( p->opts->correct_metrics != 0 &&
- ( p->font->glyphs_used > 0 || p->font->unencoded_used > 0 ) )
- {
- if ( p->maxrb - p->minlb != p->font->bbx.width )
- {
- FT_TRACE2(( "bdf_load_font: " ACMSG3,
- p->font->bbx.width, p->maxrb - p->minlb ));
- p->font->bbx.width = (unsigned short)( p->maxrb - p->minlb );
- p->font->modified = 1;
- }
-
- if ( p->font->bbx.x_offset != p->minlb )
- {
- FT_TRACE2(( "bdf_load_font: " ACMSG4,
- p->font->bbx.x_offset, p->minlb ));
- p->font->bbx.x_offset = p->minlb;
- p->font->modified = 1;
- }
-
- if ( p->font->bbx.ascent != p->maxas )
- {
- FT_TRACE2(( "bdf_load_font: " ACMSG5,
- p->font->bbx.ascent, p->maxas ));
- p->font->bbx.ascent = p->maxas;
- p->font->modified = 1;
- }
-
- if ( p->font->bbx.descent != p->maxds )
- {
- FT_TRACE2(( "bdf_load_font: " ACMSG6,
- p->font->bbx.descent, p->maxds ));
- p->font->bbx.descent = p->maxds;
- p->font->bbx.y_offset = (short)( -p->maxds );
- p->font->modified = 1;
- }
-
- if ( p->maxas + p->maxds != p->font->bbx.height )
- {
- FT_TRACE2(( "bdf_load_font: " ACMSG7,
- p->font->bbx.height, p->maxas + p->maxds ));
- p->font->bbx.height = (unsigned short)( p->maxas + p->maxds );
- }
-
- if ( p->flags & BDF_SWIDTH_ADJ_ )
- FT_TRACE2(( "bdf_load_font: " ACMSG8 ));
- }
- }
-
- if ( p->flags & BDF_START_ )
- {
- /* The ENDFONT field was never reached or did not exist. */
- if ( !( p->flags & BDF_GLYPHS_ ) )
- {
- /* Error happened while parsing header. */
- FT_ERROR(( "bdf_load_font: " ERRMSG2, lineno ));
- error = FT_THROW( Corrupted_Font_Header );
- goto Fail;
- }
- else
- {
- /* Error happened when parsing glyphs. */
- FT_ERROR(( "bdf_load_font: " ERRMSG3, lineno ));
- error = FT_THROW( Corrupted_Font_Glyphs );
- goto Fail;
- }
- }
-
- if ( p->font != 0 )
- {
- /* Make sure the comments are NULL terminated if they exist. */
- memory = p->font->memory;
-
- if ( p->font->comments_len > 0 )
- {
- if ( FT_RENEW_ARRAY( p->font->comments,
- p->font->comments_len,
- p->font->comments_len + 1 ) )
- goto Fail;
-
- p->font->comments[p->font->comments_len] = 0;
- }
- }
- else if ( !error )
- error = FT_THROW( Invalid_File_Format );
-
- *font = p->font;
-
- Exit:
- if ( p )
- {
- _bdf_list_done( &p->list );
-
- memory = extmemory;
-
- FT_FREE( p->glyph_name );
- FT_FREE( p );
- }
-
- return error;
-
- Fail:
- bdf_free_font( p->font );
-
- memory = extmemory;
-
- FT_FREE( p->font );
-
- goto Exit;
- }
-
-
- FT_LOCAL_DEF( void )
- bdf_free_font( bdf_font_t* font )
- {
- bdf_property_t* prop;
- unsigned long i;
- bdf_glyph_t* glyphs;
- FT_Memory memory;
-
-
- if ( font == 0 )
- return;
-
- memory = font->memory;
-
- FT_FREE( font->name );
-
- /* Free up the internal hash table of property names. */
- if ( font->internal )
- {
- ft_hash_str_free( (FT_Hash)font->internal, memory );
- FT_FREE( font->internal );
- }
-
- /* Free up the comment info. */
- FT_FREE( font->comments );
-
- /* Free up the properties. */
- for ( i = 0; i < font->props_size; i++ )
- {
- if ( font->props[i].format == BDF_ATOM )
- FT_FREE( font->props[i].value.atom );
- }
-
- FT_FREE( font->props );
-
- /* Free up the character info. */
- for ( i = 0, glyphs = font->glyphs;
- i < font->glyphs_used; i++, glyphs++ )
- {
- FT_FREE( glyphs->name );
- FT_FREE( glyphs->bitmap );
- }
-
- for ( i = 0, glyphs = font->unencoded; i < font->unencoded_used;
- i++, glyphs++ )
- {
- FT_FREE( glyphs->name );
- FT_FREE( glyphs->bitmap );
- }
-
- FT_FREE( font->glyphs );
- FT_FREE( font->unencoded );
-
- /* Free up the overflow storage if it was used. */
- for ( i = 0, glyphs = font->overflow.glyphs;
- i < font->overflow.glyphs_used; i++, glyphs++ )
- {
- FT_FREE( glyphs->name );
- FT_FREE( glyphs->bitmap );
- }
-
- FT_FREE( font->overflow.glyphs );
-
- /* bdf_cleanup */
- ft_hash_str_free( &(font->proptbl), memory );
-
- /* Free up the user defined properties. */
- for ( prop = font->user_props, i = 0;
- i < font->nuser_props; i++, prop++ )
- {
- FT_FREE( prop->name );
- if ( prop->format == BDF_ATOM )
- FT_FREE( prop->value.atom );
- }
-
- FT_FREE( font->user_props );
-
- /* FREE( font ); */ /* XXX Fixme */
- }
-
-
- FT_LOCAL_DEF( bdf_property_t * )
- bdf_get_font_property( bdf_font_t* font,
- const char* name )
- {
- size_t* propid;
-
-
- if ( font == 0 || font->props_size == 0 || name == 0 || *name == 0 )
- return 0;
-
- propid = ft_hash_str_lookup( name, (FT_Hash)font->internal );
-
- return propid ? ( font->props + *propid ) : 0;
- }
-
-
-/* END */
diff --git a/src/bdf/module.mk b/src/bdf/module.mk
deleted file mode 100644
index fe06ae8e0..000000000
--- a/src/bdf/module.mk
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# FreeType 2 BDF module definition
-#
-
-# Copyright 2001, 2002, 2006 by
-# Francesco Zappa Nardelli
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-
-FTMODULE_H_COMMANDS += BDF_DRIVER
-
-define BDF_DRIVER
-$(OPEN_DRIVER) FT_Driver_ClassRec, bdf_driver_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)bdf $(ECHO_DRIVER_DESC)bdf bitmap fonts$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/bdf/rules.mk b/src/bdf/rules.mk
deleted file mode 100644
index d1dd76b1c..000000000
--- a/src/bdf/rules.mk
+++ /dev/null
@@ -1,84 +0,0 @@
-#
-# FreeType 2 bdf driver configuration rules
-#
-
-
-# Copyright (C) 2001, 2002, 2003, 2008 by
-# Francesco Zappa Nardelli
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-
-
-
-# bdf driver directory
-#
-BDF_DIR := $(SRC_DIR)/bdf
-
-
-BDF_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(BDF_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# bdf driver sources (i.e., C files)
-#
-BDF_DRV_SRC := $(BDF_DIR)/bdflib.c \
- $(BDF_DIR)/bdfdrivr.c
-
-
-# bdf driver headers
-#
-BDF_DRV_H := $(BDF_DIR)/bdf.h \
- $(BDF_DIR)/bdfdrivr.h \
- $(BDF_DIR)/bdferror.h
-
-# bdf driver object(s)
-#
-# BDF_DRV_OBJ_M is used during `multi' builds
-# BDF_DRV_OBJ_S is used during `single' builds
-#
-BDF_DRV_OBJ_M := $(BDF_DRV_SRC:$(BDF_DIR)/%.c=$(OBJ_DIR)/%.$O)
-BDF_DRV_OBJ_S := $(OBJ_DIR)/bdf.$O
-
-# bdf driver source file for single build
-#
-BDF_DRV_SRC_S := $(BDF_DIR)/bdf.c
-
-
-# bdf driver - single object
-#
-$(BDF_DRV_OBJ_S): $(BDF_DRV_SRC_S) $(BDF_DRV_SRC) $(FREETYPE_H) $(BDF_DRV_H)
- $(BDF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(BDF_DRV_SRC_S))
-
-
-# bdf driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(BDF_DIR)/%.c $(FREETYPE_H) $(BDF_DRV_H)
- $(BDF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(BDF_DRV_OBJ_S)
-DRV_OBJS_M += $(BDF_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/bzip2/Jamfile b/src/bzip2/Jamfile
deleted file mode 100644
index f369d4ace..000000000
--- a/src/bzip2/Jamfile
+++ /dev/null
@@ -1,18 +0,0 @@
-# FreeType 2 src/bzip2 Jamfile
-#
-# Copyright 2010-2017 by
-# Joel Klinghed
-#
-# based on `src/lzw/Jamfile'
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) bzip2 ;
-
-Library $(FT2_LIB) : ftbzip2.c ;
-
-# end of src/bzip2 Jamfile
diff --git a/src/bzip2/ftbzip2.c b/src/bzip2/ftbzip2.c
deleted file mode 100644
index 7fc71e707..000000000
--- a/src/bzip2/ftbzip2.c
+++ /dev/null
@@ -1,525 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbzip2.c */
-/* */
-/* FreeType support for .bz2 compressed files. */
-/* */
-/* This optional component relies on libbz2. It should mainly be used to */
-/* parse compressed PCF fonts, as found with many X11 server */
-/* distributions. */
-/* */
-/* Copyright 2010-2017 by */
-/* Joel Klinghed. */
-/* */
-/* based on `src/gzip/ftgzip.c' */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_BZIP2_H
-#include FT_CONFIG_STANDARD_LIBRARY_H
-
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX Bzip2_Err_
-#define FT_ERR_BASE FT_Mod_Err_Bzip2
-
-#include FT_ERRORS_H
-
-
-#ifdef FT_CONFIG_OPTION_USE_BZIP2
-
-#ifdef FT_CONFIG_OPTION_PIC
-#error "bzip2 code does not support PIC yet"
-#endif
-
-#define BZ_NO_STDIO /* Do not need FILE */
-#include <bzlib.h>
-
-
-/***************************************************************************/
-/***************************************************************************/
-/***** *****/
-/***** B Z I P 2 M E M O R Y M A N A G E M E N T *****/
-/***** *****/
-/***************************************************************************/
-/***************************************************************************/
-
- /* it is better to use FreeType memory routines instead of raw
- 'malloc/free' */
-
- typedef void *(* alloc_func)(void*, int, int);
- typedef void (* free_func)(void*, void*);
-
- static void*
- ft_bzip2_alloc( FT_Memory memory,
- int items,
- int size )
- {
- FT_ULong sz = (FT_ULong)size * (FT_ULong)items;
- FT_Error error;
- FT_Pointer p = NULL;
-
-
- (void)FT_ALLOC( p, sz );
- return p;
- }
-
-
- static void
- ft_bzip2_free( FT_Memory memory,
- void* address )
- {
- FT_MEM_FREE( address );
- }
-
-
-/***************************************************************************/
-/***************************************************************************/
-/***** *****/
-/***** B Z I P 2 F I L E D E S C R I P T O R *****/
-/***** *****/
-/***************************************************************************/
-/***************************************************************************/
-
-#define FT_BZIP2_BUFFER_SIZE 4096
-
- typedef struct FT_BZip2FileRec_
- {
- FT_Stream source; /* parent/source stream */
- FT_Stream stream; /* embedding stream */
- FT_Memory memory; /* memory allocator */
- bz_stream bzstream; /* bzlib input stream */
-
- FT_Byte input[FT_BZIP2_BUFFER_SIZE]; /* input read buffer */
-
- FT_Byte buffer[FT_BZIP2_BUFFER_SIZE]; /* output buffer */
- FT_ULong pos; /* position in output */
- FT_Byte* cursor;
- FT_Byte* limit;
-
- } FT_BZip2FileRec, *FT_BZip2File;
-
-
- /* check and skip .bz2 header - we don't support `transparent' compression */
- static FT_Error
- ft_bzip2_check_header( FT_Stream stream )
- {
- FT_Error error = FT_Err_Ok;
- FT_Byte head[4];
-
-
- if ( FT_STREAM_SEEK( 0 ) ||
- FT_STREAM_READ( head, 4 ) )
- goto Exit;
-
- /* head[0] && head[1] are the magic numbers; */
- /* head[2] is the version, and head[3] the blocksize */
- if ( head[0] != 0x42 ||
- head[1] != 0x5A ||
- head[2] != 0x68 ) /* only support bzip2 (huffman) */
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- ft_bzip2_file_init( FT_BZip2File zip,
- FT_Stream stream,
- FT_Stream source )
- {
- bz_stream* bzstream = &zip->bzstream;
- FT_Error error = FT_Err_Ok;
-
-
- zip->stream = stream;
- zip->source = source;
- zip->memory = stream->memory;
-
- zip->limit = zip->buffer + FT_BZIP2_BUFFER_SIZE;
- zip->cursor = zip->limit;
- zip->pos = 0;
-
- /* check .bz2 header */
- {
- stream = source;
-
- error = ft_bzip2_check_header( stream );
- if ( error )
- goto Exit;
-
- if ( FT_STREAM_SEEK( 0 ) )
- goto Exit;
- }
-
- /* initialize bzlib */
- bzstream->bzalloc = (alloc_func)ft_bzip2_alloc;
- bzstream->bzfree = (free_func) ft_bzip2_free;
- bzstream->opaque = zip->memory;
-
- bzstream->avail_in = 0;
- bzstream->next_in = (char*)zip->buffer;
-
- if ( BZ2_bzDecompressInit( bzstream, 0, 0 ) != BZ_OK ||
- !bzstream->next_in )
- error = FT_THROW( Invalid_File_Format );
-
- Exit:
- return error;
- }
-
-
- static void
- ft_bzip2_file_done( FT_BZip2File zip )
- {
- bz_stream* bzstream = &zip->bzstream;
-
-
- BZ2_bzDecompressEnd( bzstream );
-
- /* clear the rest */
- bzstream->bzalloc = NULL;
- bzstream->bzfree = NULL;
- bzstream->opaque = NULL;
- bzstream->next_in = NULL;
- bzstream->next_out = NULL;
- bzstream->avail_in = 0;
- bzstream->avail_out = 0;
-
- zip->memory = NULL;
- zip->source = NULL;
- zip->stream = NULL;
- }
-
-
- static FT_Error
- ft_bzip2_file_reset( FT_BZip2File zip )
- {
- FT_Stream stream = zip->source;
- FT_Error error;
-
-
- if ( !FT_STREAM_SEEK( 0 ) )
- {
- bz_stream* bzstream = &zip->bzstream;
-
-
- BZ2_bzDecompressEnd( bzstream );
-
- bzstream->avail_in = 0;
- bzstream->next_in = (char*)zip->input;
- bzstream->avail_out = 0;
- bzstream->next_out = (char*)zip->buffer;
-
- zip->limit = zip->buffer + FT_BZIP2_BUFFER_SIZE;
- zip->cursor = zip->limit;
- zip->pos = 0;
-
- BZ2_bzDecompressInit( bzstream, 0, 0 );
- }
-
- return error;
- }
-
-
- static FT_Error
- ft_bzip2_file_fill_input( FT_BZip2File zip )
- {
- bz_stream* bzstream = &zip->bzstream;
- FT_Stream stream = zip->source;
- FT_ULong size;
-
-
- if ( stream->read )
- {
- size = stream->read( stream, stream->pos, zip->input,
- FT_BZIP2_BUFFER_SIZE );
- if ( size == 0 )
- {
- zip->limit = zip->cursor;
- return FT_THROW( Invalid_Stream_Operation );
- }
- }
- else
- {
- size = stream->size - stream->pos;
- if ( size > FT_BZIP2_BUFFER_SIZE )
- size = FT_BZIP2_BUFFER_SIZE;
-
- if ( size == 0 )
- {
- zip->limit = zip->cursor;
- return FT_THROW( Invalid_Stream_Operation );
- }
-
- FT_MEM_COPY( zip->input, stream->base + stream->pos, size );
- }
- stream->pos += size;
-
- bzstream->next_in = (char*)zip->input;
- bzstream->avail_in = size;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Error
- ft_bzip2_file_fill_output( FT_BZip2File zip )
- {
- bz_stream* bzstream = &zip->bzstream;
- FT_Error error = FT_Err_Ok;
-
-
- zip->cursor = zip->buffer;
- bzstream->next_out = (char*)zip->cursor;
- bzstream->avail_out = FT_BZIP2_BUFFER_SIZE;
-
- while ( bzstream->avail_out > 0 )
- {
- int err;
-
-
- if ( bzstream->avail_in == 0 )
- {
- error = ft_bzip2_file_fill_input( zip );
- if ( error )
- break;
- }
-
- err = BZ2_bzDecompress( bzstream );
-
- if ( err == BZ_STREAM_END )
- {
- zip->limit = (FT_Byte*)bzstream->next_out;
- if ( zip->limit == zip->cursor )
- error = FT_THROW( Invalid_Stream_Operation );
- break;
- }
- else if ( err != BZ_OK )
- {
- zip->limit = zip->cursor;
- error = FT_THROW( Invalid_Stream_Operation );
- break;
- }
- }
-
- return error;
- }
-
-
- /* fill output buffer; `count' must be <= FT_BZIP2_BUFFER_SIZE */
- static FT_Error
- ft_bzip2_file_skip_output( FT_BZip2File zip,
- FT_ULong count )
- {
- FT_Error error = FT_Err_Ok;
- FT_ULong delta;
-
-
- for (;;)
- {
- delta = (FT_ULong)( zip->limit - zip->cursor );
- if ( delta >= count )
- delta = count;
-
- zip->cursor += delta;
- zip->pos += delta;
-
- count -= delta;
- if ( count == 0 )
- break;
-
- error = ft_bzip2_file_fill_output( zip );
- if ( error )
- break;
- }
-
- return error;
- }
-
-
- static FT_ULong
- ft_bzip2_file_io( FT_BZip2File zip,
- FT_ULong pos,
- FT_Byte* buffer,
- FT_ULong count )
- {
- FT_ULong result = 0;
- FT_Error error;
-
-
- /* Reset inflate stream if we're seeking backwards. */
- /* Yes, that is not too efficient, but it saves memory :-) */
- if ( pos < zip->pos )
- {
- error = ft_bzip2_file_reset( zip );
- if ( error )
- goto Exit;
- }
-
- /* skip unwanted bytes */
- if ( pos > zip->pos )
- {
- error = ft_bzip2_file_skip_output( zip, (FT_ULong)( pos - zip->pos ) );
- if ( error )
- goto Exit;
- }
-
- if ( count == 0 )
- goto Exit;
-
- /* now read the data */
- for (;;)
- {
- FT_ULong delta;
-
-
- delta = (FT_ULong)( zip->limit - zip->cursor );
- if ( delta >= count )
- delta = count;
-
- FT_MEM_COPY( buffer, zip->cursor, delta );
- buffer += delta;
- result += delta;
- zip->cursor += delta;
- zip->pos += delta;
-
- count -= delta;
- if ( count == 0 )
- break;
-
- error = ft_bzip2_file_fill_output( zip );
- if ( error )
- break;
- }
-
- Exit:
- return result;
- }
-
-
-/***************************************************************************/
-/***************************************************************************/
-/***** *****/
-/***** B Z E M B E D D I N G S T R E A M *****/
-/***** *****/
-/***************************************************************************/
-/***************************************************************************/
-
- static void
- ft_bzip2_stream_close( FT_Stream stream )
- {
- FT_BZip2File zip = (FT_BZip2File)stream->descriptor.pointer;
- FT_Memory memory = stream->memory;
-
-
- if ( zip )
- {
- /* finalize bzip file descriptor */
- ft_bzip2_file_done( zip );
-
- FT_FREE( zip );
-
- stream->descriptor.pointer = NULL;
- }
- }
-
-
- static unsigned long
- ft_bzip2_stream_io( FT_Stream stream,
- unsigned long offset,
- unsigned char* buffer,
- unsigned long count )
- {
- FT_BZip2File zip = (FT_BZip2File)stream->descriptor.pointer;
-
-
- return ft_bzip2_file_io( zip, offset, buffer, count );
- }
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stream_OpenBzip2( FT_Stream stream,
- FT_Stream source )
- {
- FT_Error error;
- FT_Memory memory;
- FT_BZip2File zip = NULL;
-
-
- if ( !stream || !source )
- {
- error = FT_THROW( Invalid_Stream_Handle );
- goto Exit;
- }
-
- memory = source->memory;
-
- /*
- * check the header right now; this prevents allocating unnecessary
- * objects when we don't need them
- */
- error = ft_bzip2_check_header( source );
- if ( error )
- goto Exit;
-
- FT_ZERO( stream );
- stream->memory = memory;
-
- if ( !FT_QNEW( zip ) )
- {
- error = ft_bzip2_file_init( zip, stream, source );
- if ( error )
- {
- FT_FREE( zip );
- goto Exit;
- }
-
- stream->descriptor.pointer = zip;
- }
-
- stream->size = 0x7FFFFFFFL; /* don't know the real size! */
- stream->pos = 0;
- stream->base = 0;
- stream->read = ft_bzip2_stream_io;
- stream->close = ft_bzip2_stream_close;
-
- Exit:
- return error;
- }
-
-#else /* !FT_CONFIG_OPTION_USE_BZIP2 */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stream_OpenBzip2( FT_Stream stream,
- FT_Stream source )
- {
- FT_UNUSED( stream );
- FT_UNUSED( source );
-
- return FT_THROW( Unimplemented_Feature );
- }
-
-#endif /* !FT_CONFIG_OPTION_USE_BZIP2 */
-
-
-/* END */
diff --git a/src/bzip2/rules.mk b/src/bzip2/rules.mk
deleted file mode 100644
index f63ddc4d3..000000000
--- a/src/bzip2/rules.mk
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# FreeType 2 BZIP2 support configuration rules
-#
-
-# Copyright 2010-2017 by
-# Joel Klinghed.
-#
-# based on `src/lzw/rules.mk'
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# BZIP2 driver directory
-#
-BZIP2_DIR := $(SRC_DIR)/bzip2
-
-
-# compilation flags for the driver
-#
-BZIP2_COMPILE := $(CC) $(ANSIFLAGS) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# BZIP2 support sources (i.e., C files)
-#
-BZIP2_DRV_SRC := $(BZIP2_DIR)/ftbzip2.c
-
-# BZIP2 driver object(s)
-#
-# BZIP2_DRV_OBJ_M is used during `multi' builds
-# BZIP2_DRV_OBJ_S is used during `single' builds
-#
-BZIP2_DRV_OBJ_M := $(OBJ_DIR)/ftbzip2.$O
-BZIP2_DRV_OBJ_S := $(OBJ_DIR)/ftbzip2.$O
-
-# BZIP2 support source file for single build
-#
-BZIP2_DRV_SRC_S := $(BZIP2_DIR)/ftbzip2.c
-
-
-# BZIP2 support - single object
-#
-$(BZIP2_DRV_OBJ_S): $(BZIP2_DRV_SRC_S) $(BZIP2_DRV_SRC) $(FREETYPE_H) $(BZIP2_DRV_H)
- $(BZIP2_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(BZIP2_DRV_SRC_S))
-
-
-# BZIP2 support - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(BZIP2_DIR)/%.c $(FREETYPE_H) $(BZIP2_DRV_H)
- $(BZIP2_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(BZIP2_DRV_OBJ_S)
-DRV_OBJS_M += $(BZIP2_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/cache/Jamfile b/src/cache/Jamfile
deleted file mode 100644
index 0880af838..000000000
--- a/src/cache/Jamfile
+++ /dev/null
@@ -1,37 +0,0 @@
-# FreeType 2 src/cache Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) cache ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = ftcbasic
- ftccache
- ftcglyph
- ftcimage
- ftcmanag
- ftccmap
- ftcmru
- ftcsbits
- ;
- }
- else
- {
- _sources = ftcache ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/cache Jamfile
diff --git a/src/cache/ftcache.c b/src/cache/ftcache.c
deleted file mode 100644
index 822618831..000000000
--- a/src/cache/ftcache.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcache.c */
-/* */
-/* The FreeType Caching sub-system (body only). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "ftcbasic.c"
-#include "ftccache.c"
-#include "ftccmap.c"
-#include "ftcglyph.c"
-#include "ftcimage.c"
-#include "ftcmanag.c"
-#include "ftcmru.c"
-#include "ftcsbits.c"
-
-
-/* END */
diff --git a/src/cache/ftcbasic.c b/src/cache/ftcbasic.c
deleted file mode 100644
index 289bd5c43..000000000
--- a/src/cache/ftcbasic.c
+++ /dev/null
@@ -1,602 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcbasic.c */
-/* */
-/* The FreeType basic cache interface (body). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_CACHE_H
-#include "ftcglyph.h"
-#include "ftcimage.h"
-#include "ftcsbits.h"
-
-#include "ftccback.h"
-#include "ftcerror.h"
-
-#define FT_COMPONENT trace_cache
-
-
- /*
- * Basic Families
- *
- */
- typedef struct FTC_BasicAttrRec_
- {
- FTC_ScalerRec scaler;
- FT_UInt load_flags;
-
- } FTC_BasicAttrRec, *FTC_BasicAttrs;
-
-#define FTC_BASIC_ATTR_COMPARE( a, b ) \
- FT_BOOL( FTC_SCALER_COMPARE( &(a)->scaler, &(b)->scaler ) && \
- (a)->load_flags == (b)->load_flags )
-
-#define FTC_BASIC_ATTR_HASH( a ) \
- ( FTC_SCALER_HASH( &(a)->scaler ) + 31 * (a)->load_flags )
-
-
- typedef struct FTC_BasicQueryRec_
- {
- FTC_GQueryRec gquery;
- FTC_BasicAttrRec attrs;
-
- } FTC_BasicQueryRec, *FTC_BasicQuery;
-
-
- typedef struct FTC_BasicFamilyRec_
- {
- FTC_FamilyRec family;
- FTC_BasicAttrRec attrs;
-
- } FTC_BasicFamilyRec, *FTC_BasicFamily;
-
-
- FT_CALLBACK_DEF( FT_Bool )
- ftc_basic_family_compare( FTC_MruNode ftcfamily,
- FT_Pointer ftcquery )
- {
- FTC_BasicFamily family = (FTC_BasicFamily)ftcfamily;
- FTC_BasicQuery query = (FTC_BasicQuery)ftcquery;
-
-
- return FTC_BASIC_ATTR_COMPARE( &family->attrs, &query->attrs );
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- ftc_basic_family_init( FTC_MruNode ftcfamily,
- FT_Pointer ftcquery,
- FT_Pointer ftccache )
- {
- FTC_BasicFamily family = (FTC_BasicFamily)ftcfamily;
- FTC_BasicQuery query = (FTC_BasicQuery)ftcquery;
- FTC_Cache cache = (FTC_Cache)ftccache;
-
-
- FTC_Family_Init( FTC_FAMILY( family ), cache );
- family->attrs = query->attrs;
- return 0;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- ftc_basic_family_get_count( FTC_Family ftcfamily,
- FTC_Manager manager )
- {
- FTC_BasicFamily family = (FTC_BasicFamily)ftcfamily;
- FT_Error error;
- FT_Face face;
- FT_UInt result = 0;
-
-
- error = FTC_Manager_LookupFace( manager, family->attrs.scaler.face_id,
- &face );
-
- if ( error || !face )
- return result;
-
- if ( (FT_ULong)face->num_glyphs > FT_UINT_MAX || 0 > face->num_glyphs )
- FT_TRACE1(( "ftc_basic_family_get_count:"
- " too large number of glyphs in this face, truncated\n",
- face->num_glyphs ));
-
- if ( !error )
- result = (FT_UInt)face->num_glyphs;
-
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- ftc_basic_family_load_bitmap( FTC_Family ftcfamily,
- FT_UInt gindex,
- FTC_Manager manager,
- FT_Face *aface )
- {
- FTC_BasicFamily family = (FTC_BasicFamily)ftcfamily;
- FT_Error error;
- FT_Size size;
-
-
- error = FTC_Manager_LookupSize( manager, &family->attrs.scaler, &size );
- if ( !error )
- {
- FT_Face face = size->face;
-
-
- error = FT_Load_Glyph(
- face,
- gindex,
- (FT_Int)family->attrs.load_flags | FT_LOAD_RENDER );
- if ( !error )
- *aface = face;
- }
-
- return error;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- ftc_basic_family_load_glyph( FTC_Family ftcfamily,
- FT_UInt gindex,
- FTC_Cache cache,
- FT_Glyph *aglyph )
- {
- FTC_BasicFamily family = (FTC_BasicFamily)ftcfamily;
- FT_Error error;
- FTC_Scaler scaler = &family->attrs.scaler;
- FT_Face face;
- FT_Size size;
-
-
- /* we will now load the glyph image */
- error = FTC_Manager_LookupSize( cache->manager,
- scaler,
- &size );
- if ( !error )
- {
- face = size->face;
-
- error = FT_Load_Glyph( face,
- gindex,
- (FT_Int)family->attrs.load_flags );
- if ( !error )
- {
- if ( face->glyph->format == FT_GLYPH_FORMAT_BITMAP ||
- face->glyph->format == FT_GLYPH_FORMAT_OUTLINE )
- {
- /* ok, copy it */
- FT_Glyph glyph;
-
-
- error = FT_Get_Glyph( face->glyph, &glyph );
- if ( !error )
- {
- *aglyph = glyph;
- goto Exit;
- }
- }
- else
- error = FT_THROW( Invalid_Argument );
- }
- }
-
- Exit:
- return error;
- }
-
-
- FT_CALLBACK_DEF( FT_Bool )
- ftc_basic_gnode_compare_faceid( FTC_Node ftcgnode,
- FT_Pointer ftcface_id,
- FTC_Cache cache,
- FT_Bool* list_changed )
- {
- FTC_GNode gnode = (FTC_GNode)ftcgnode;
- FTC_FaceID face_id = (FTC_FaceID)ftcface_id;
- FTC_BasicFamily family = (FTC_BasicFamily)gnode->family;
- FT_Bool result;
-
-
- if ( list_changed )
- *list_changed = FALSE;
- result = FT_BOOL( family->attrs.scaler.face_id == face_id );
- if ( result )
- {
- /* we must call this function to avoid this node from appearing
- * in later lookups with the same face_id!
- */
- FTC_GNode_UnselectFamily( gnode, cache );
- }
- return result;
- }
-
-
- /*
- *
- * basic image cache
- *
- */
-
- static
- const FTC_IFamilyClassRec ftc_basic_image_family_class =
- {
- {
- sizeof ( FTC_BasicFamilyRec ),
-
- ftc_basic_family_compare, /* FTC_MruNode_CompareFunc node_compare */
- ftc_basic_family_init, /* FTC_MruNode_InitFunc node_init */
- NULL, /* FTC_MruNode_ResetFunc node_reset */
- NULL /* FTC_MruNode_DoneFunc node_done */
- },
-
- ftc_basic_family_load_glyph /* FTC_IFamily_LoadGlyphFunc family_load_glyph */
- };
-
-
- static
- const FTC_GCacheClassRec ftc_basic_image_cache_class =
- {
- {
- ftc_inode_new, /* FTC_Node_NewFunc node_new */
- ftc_inode_weight, /* FTC_Node_WeightFunc node_weight */
- ftc_gnode_compare, /* FTC_Node_CompareFunc node_compare */
- ftc_basic_gnode_compare_faceid, /* FTC_Node_CompareFunc node_remove_faceid */
- ftc_inode_free, /* FTC_Node_FreeFunc node_free */
-
- sizeof ( FTC_GCacheRec ),
- ftc_gcache_init, /* FTC_Cache_InitFunc cache_init */
- ftc_gcache_done /* FTC_Cache_DoneFunc cache_done */
- },
-
- (FTC_MruListClass)&ftc_basic_image_family_class
- };
-
-
- /* documentation is in ftcache.h */
-
- FT_EXPORT_DEF( FT_Error )
- FTC_ImageCache_New( FTC_Manager manager,
- FTC_ImageCache *acache )
- {
- return FTC_GCache_New( manager, &ftc_basic_image_cache_class,
- (FTC_GCache*)acache );
- }
-
-
- /* documentation is in ftcache.h */
-
- FT_EXPORT_DEF( FT_Error )
- FTC_ImageCache_Lookup( FTC_ImageCache cache,
- FTC_ImageType type,
- FT_UInt gindex,
- FT_Glyph *aglyph,
- FTC_Node *anode )
- {
- FTC_BasicQueryRec query;
- FTC_Node node = 0; /* make compiler happy */
- FT_Error error;
- FT_Offset hash;
-
-
- /* some argument checks are delayed to `FTC_Cache_Lookup' */
- if ( !aglyph )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- *aglyph = NULL;
- if ( anode )
- *anode = NULL;
-
- if ( (FT_ULong)( type->flags - FT_INT_MIN ) > FT_UINT_MAX )
- FT_TRACE1(( "FTC_ImageCache_Lookup:"
- " higher bits in load_flags 0x%x are dropped\n",
- (FT_ULong)type->flags & ~((FT_ULong)FT_UINT_MAX) ));
-
- query.attrs.scaler.face_id = type->face_id;
- query.attrs.scaler.width = type->width;
- query.attrs.scaler.height = type->height;
- query.attrs.load_flags = (FT_UInt)type->flags;
-
- query.attrs.scaler.pixel = 1;
- query.attrs.scaler.x_res = 0; /* make compilers happy */
- query.attrs.scaler.y_res = 0;
-
- hash = FTC_BASIC_ATTR_HASH( &query.attrs ) + gindex;
-
-#if 1 /* inlining is about 50% faster! */
- FTC_GCACHE_LOOKUP_CMP( cache,
- ftc_basic_family_compare,
- FTC_GNode_Compare,
- hash, gindex,
- &query,
- node,
- error );
-#else
- error = FTC_GCache_Lookup( FTC_GCACHE( cache ),
- hash, gindex,
- FTC_GQUERY( &query ),
- &node );
-#endif
- if ( !error )
- {
- *aglyph = FTC_INODE( node )->glyph;
-
- if ( anode )
- {
- *anode = node;
- node->ref_count++;
- }
- }
-
- Exit:
- return error;
- }
-
-
- /* documentation is in ftcache.h */
-
- FT_EXPORT_DEF( FT_Error )
- FTC_ImageCache_LookupScaler( FTC_ImageCache cache,
- FTC_Scaler scaler,
- FT_ULong load_flags,
- FT_UInt gindex,
- FT_Glyph *aglyph,
- FTC_Node *anode )
- {
- FTC_BasicQueryRec query;
- FTC_Node node = 0; /* make compiler happy */
- FT_Error error;
- FT_Offset hash;
-
-
- /* some argument checks are delayed to `FTC_Cache_Lookup' */
- if ( !aglyph || !scaler )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- *aglyph = NULL;
- if ( anode )
- *anode = NULL;
-
- /* `FT_Load_Glyph' and `FT_Load_Char' take FT_UInt flags */
- if ( load_flags > FT_UINT_MAX )
- FT_TRACE1(( "FTC_ImageCache_LookupScaler:"
- " higher bits in load_flags 0x%x are dropped\n",
- load_flags & ~((FT_ULong)FT_UINT_MAX) ));
-
- query.attrs.scaler = scaler[0];
- query.attrs.load_flags = (FT_UInt)load_flags;
-
- hash = FTC_BASIC_ATTR_HASH( &query.attrs ) + gindex;
-
- FTC_GCACHE_LOOKUP_CMP( cache,
- ftc_basic_family_compare,
- FTC_GNode_Compare,
- hash, gindex,
- &query,
- node,
- error );
- if ( !error )
- {
- *aglyph = FTC_INODE( node )->glyph;
-
- if ( anode )
- {
- *anode = node;
- node->ref_count++;
- }
- }
-
- Exit:
- return error;
- }
-
-
- /*
- *
- * basic small bitmap cache
- *
- */
-
- static
- const FTC_SFamilyClassRec ftc_basic_sbit_family_class =
- {
- {
- sizeof ( FTC_BasicFamilyRec ),
- ftc_basic_family_compare, /* FTC_MruNode_CompareFunc node_compare */
- ftc_basic_family_init, /* FTC_MruNode_InitFunc node_init */
- NULL, /* FTC_MruNode_ResetFunc node_reset */
- NULL /* FTC_MruNode_DoneFunc node_done */
- },
-
- ftc_basic_family_get_count,
- ftc_basic_family_load_bitmap
- };
-
-
- static
- const FTC_GCacheClassRec ftc_basic_sbit_cache_class =
- {
- {
- ftc_snode_new, /* FTC_Node_NewFunc node_new */
- ftc_snode_weight, /* FTC_Node_WeightFunc node_weight */
- ftc_snode_compare, /* FTC_Node_CompareFunc node_compare */
- ftc_basic_gnode_compare_faceid, /* FTC_Node_CompareFunc node_remove_faceid */
- ftc_snode_free, /* FTC_Node_FreeFunc node_free */
-
- sizeof ( FTC_GCacheRec ),
- ftc_gcache_init, /* FTC_Cache_InitFunc cache_init */
- ftc_gcache_done /* FTC_Cache_DoneFunc cache_done */
- },
-
- (FTC_MruListClass)&ftc_basic_sbit_family_class
- };
-
-
- /* documentation is in ftcache.h */
-
- FT_EXPORT_DEF( FT_Error )
- FTC_SBitCache_New( FTC_Manager manager,
- FTC_SBitCache *acache )
- {
- return FTC_GCache_New( manager, &ftc_basic_sbit_cache_class,
- (FTC_GCache*)acache );
- }
-
-
- /* documentation is in ftcache.h */
-
- FT_EXPORT_DEF( FT_Error )
- FTC_SBitCache_Lookup( FTC_SBitCache cache,
- FTC_ImageType type,
- FT_UInt gindex,
- FTC_SBit *ansbit,
- FTC_Node *anode )
- {
- FT_Error error;
- FTC_BasicQueryRec query;
- FTC_Node node = 0; /* make compiler happy */
- FT_Offset hash;
-
-
- if ( anode )
- *anode = NULL;
-
- /* other argument checks delayed to `FTC_Cache_Lookup' */
- if ( !ansbit )
- return FT_THROW( Invalid_Argument );
-
- *ansbit = NULL;
-
- if ( (FT_ULong)( type->flags - FT_INT_MIN ) > FT_UINT_MAX )
- FT_TRACE1(( "FTC_ImageCache_Lookup:"
- " higher bits in load_flags 0x%x are dropped\n",
- (FT_ULong)type->flags & ~((FT_ULong)FT_UINT_MAX) ));
-
- query.attrs.scaler.face_id = type->face_id;
- query.attrs.scaler.width = type->width;
- query.attrs.scaler.height = type->height;
- query.attrs.load_flags = (FT_UInt)type->flags;
-
- query.attrs.scaler.pixel = 1;
- query.attrs.scaler.x_res = 0; /* make compilers happy */
- query.attrs.scaler.y_res = 0;
-
- /* beware, the hash must be the same for all glyph ranges! */
- hash = FTC_BASIC_ATTR_HASH( &query.attrs ) +
- gindex / FTC_SBIT_ITEMS_PER_NODE;
-
-#if 1 /* inlining is about 50% faster! */
- FTC_GCACHE_LOOKUP_CMP( cache,
- ftc_basic_family_compare,
- FTC_SNode_Compare,
- hash, gindex,
- &query,
- node,
- error );
-#else
- error = FTC_GCache_Lookup( FTC_GCACHE( cache ),
- hash,
- gindex,
- FTC_GQUERY( &query ),
- &node );
-#endif
- if ( error )
- goto Exit;
-
- *ansbit = FTC_SNODE( node )->sbits +
- ( gindex - FTC_GNODE( node )->gindex );
-
- if ( anode )
- {
- *anode = node;
- node->ref_count++;
- }
-
- Exit:
- return error;
- }
-
-
- /* documentation is in ftcache.h */
-
- FT_EXPORT_DEF( FT_Error )
- FTC_SBitCache_LookupScaler( FTC_SBitCache cache,
- FTC_Scaler scaler,
- FT_ULong load_flags,
- FT_UInt gindex,
- FTC_SBit *ansbit,
- FTC_Node *anode )
- {
- FT_Error error;
- FTC_BasicQueryRec query;
- FTC_Node node = 0; /* make compiler happy */
- FT_Offset hash;
-
-
- if ( anode )
- *anode = NULL;
-
- /* other argument checks delayed to `FTC_Cache_Lookup' */
- if ( !ansbit || !scaler )
- return FT_THROW( Invalid_Argument );
-
- *ansbit = NULL;
-
- /* `FT_Load_Glyph' and `FT_Load_Char' take FT_UInt flags */
- if ( load_flags > FT_UINT_MAX )
- FT_TRACE1(( "FTC_ImageCache_LookupScaler:"
- " higher bits in load_flags 0x%x are dropped\n",
- load_flags & ~((FT_ULong)FT_UINT_MAX) ));
-
- query.attrs.scaler = scaler[0];
- query.attrs.load_flags = (FT_UInt)load_flags;
-
- /* beware, the hash must be the same for all glyph ranges! */
- hash = FTC_BASIC_ATTR_HASH( &query.attrs ) +
- gindex / FTC_SBIT_ITEMS_PER_NODE;
-
- FTC_GCACHE_LOOKUP_CMP( cache,
- ftc_basic_family_compare,
- FTC_SNode_Compare,
- hash, gindex,
- &query,
- node,
- error );
- if ( error )
- goto Exit;
-
- *ansbit = FTC_SNODE( node )->sbits +
- ( gindex - FTC_GNODE( node )->gindex );
-
- if ( anode )
- {
- *anode = node;
- node->ref_count++;
- }
-
- Exit:
- return error;
- }
-
-
-/* END */
diff --git a/src/cache/ftccache.c b/src/cache/ftccache.c
deleted file mode 100644
index 37dc3abb1..000000000
--- a/src/cache/ftccache.c
+++ /dev/null
@@ -1,621 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftccache.c */
-/* */
-/* The FreeType internal cache interface (body). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include "ftcmanag.h"
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-
-#include "ftccback.h"
-#include "ftcerror.h"
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cache
-
-
-#define FTC_HASH_MAX_LOAD 2
-#define FTC_HASH_MIN_LOAD 1
-#define FTC_HASH_SUB_LOAD ( FTC_HASH_MAX_LOAD - FTC_HASH_MIN_LOAD )
-
- /* this one _must_ be a power of 2! */
-#define FTC_HASH_INITIAL_SIZE 8
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CACHE NODE DEFINITIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* add a new node to the head of the manager's circular MRU list */
- static void
- ftc_node_mru_link( FTC_Node node,
- FTC_Manager manager )
- {
- void *nl = &manager->nodes_list;
-
-
- FTC_MruNode_Prepend( (FTC_MruNode*)nl,
- (FTC_MruNode)node );
- manager->num_nodes++;
- }
-
-
- /* remove a node from the manager's MRU list */
- static void
- ftc_node_mru_unlink( FTC_Node node,
- FTC_Manager manager )
- {
- void *nl = &manager->nodes_list;
-
-
- FTC_MruNode_Remove( (FTC_MruNode*)nl,
- (FTC_MruNode)node );
- manager->num_nodes--;
- }
-
-
-#ifndef FTC_INLINE
-
- /* move a node to the head of the manager's MRU list */
- static void
- ftc_node_mru_up( FTC_Node node,
- FTC_Manager manager )
- {
- FTC_MruNode_Up( (FTC_MruNode*)&manager->nodes_list,
- (FTC_MruNode)node );
- }
-
-
- /* get a top bucket for specified hash from cache,
- * body for FTC_NODE_TOP_FOR_HASH( cache, hash )
- */
- FT_LOCAL_DEF( FTC_Node* )
- ftc_get_top_node_for_hash( FTC_Cache cache,
- FT_Offset hash )
- {
- FTC_Node* pnode;
- FT_Offset idx;
-
-
- idx = hash & cache->mask;
- if ( idx < cache->p )
- idx = hash & ( 2 * cache->mask + 1 );
- pnode = cache->buckets + idx;
- return pnode;
- }
-
-#endif /* !FTC_INLINE */
-
-
- /* Note that this function cannot fail. If we cannot re-size the
- * buckets array appropriately, we simply degrade the hash table's
- * performance!
- */
- static void
- ftc_cache_resize( FTC_Cache cache )
- {
- for (;;)
- {
- FTC_Node node, *pnode;
- FT_UFast p = cache->p;
- FT_UFast mask = cache->mask;
- FT_UFast count = mask + p + 1; /* number of buckets */
-
-
- /* do we need to shrink the buckets array? */
- if ( cache->slack < 0 )
- {
- FTC_Node new_list = NULL;
-
-
- /* try to expand the buckets array _before_ splitting
- * the bucket lists
- */
- if ( p >= mask )
- {
- FT_Memory memory = cache->memory;
- FT_Error error;
-
-
- /* if we can't expand the array, leave immediately */
- if ( FT_RENEW_ARRAY( cache->buckets,
- ( mask + 1 ) * 2, ( mask + 1 ) * 4 ) )
- break;
- }
-
- /* split a single bucket */
- pnode = cache->buckets + p;
-
- for (;;)
- {
- node = *pnode;
- if ( !node )
- break;
-
- if ( node->hash & ( mask + 1 ) )
- {
- *pnode = node->link;
- node->link = new_list;
- new_list = node;
- }
- else
- pnode = &node->link;
- }
-
- cache->buckets[p + mask + 1] = new_list;
-
- cache->slack += FTC_HASH_MAX_LOAD;
-
- if ( p >= mask )
- {
- cache->mask = 2 * mask + 1;
- cache->p = 0;
- }
- else
- cache->p = p + 1;
- }
-
- /* do we need to expand the buckets array? */
- else if ( cache->slack > (FT_Long)count * FTC_HASH_SUB_LOAD )
- {
- FT_UFast old_index = p + mask;
- FTC_Node* pold;
-
-
- if ( old_index + 1 <= FTC_HASH_INITIAL_SIZE )
- break;
-
- if ( p == 0 )
- {
- FT_Memory memory = cache->memory;
- FT_Error error;
-
-
- /* if we can't shrink the array, leave immediately */
- if ( FT_RENEW_ARRAY( cache->buckets,
- ( mask + 1 ) * 2, mask + 1 ) )
- break;
-
- cache->mask >>= 1;
- p = cache->mask;
- }
- else
- p--;
-
- pnode = cache->buckets + p;
- while ( *pnode )
- pnode = &(*pnode)->link;
-
- pold = cache->buckets + old_index;
- *pnode = *pold;
- *pold = NULL;
-
- cache->slack -= FTC_HASH_MAX_LOAD;
- cache->p = p;
- }
-
- /* otherwise, the hash table is balanced */
- else
- break;
- }
- }
-
-
- /* remove a node from its cache's hash table */
- static void
- ftc_node_hash_unlink( FTC_Node node0,
- FTC_Cache cache )
- {
- FTC_Node *pnode = FTC_NODE_TOP_FOR_HASH( cache, node0->hash );
-
-
- for (;;)
- {
- FTC_Node node = *pnode;
-
-
- if ( !node )
- {
- FT_TRACE0(( "ftc_node_hash_unlink: unknown node\n" ));
- return;
- }
-
- if ( node == node0 )
- break;
-
- pnode = &(*pnode)->link;
- }
-
- *pnode = node0->link;
- node0->link = NULL;
-
- cache->slack++;
- ftc_cache_resize( cache );
- }
-
-
- /* add a node to the `top' of its cache's hash table */
- static void
- ftc_node_hash_link( FTC_Node node,
- FTC_Cache cache )
- {
- FTC_Node *pnode = FTC_NODE_TOP_FOR_HASH( cache, node->hash );
-
-
- node->link = *pnode;
- *pnode = node;
-
- cache->slack--;
- ftc_cache_resize( cache );
- }
-
-
- /* remove a node from the cache manager */
- FT_LOCAL_DEF( void )
- ftc_node_destroy( FTC_Node node,
- FTC_Manager manager )
- {
- FTC_Cache cache;
-
-
-#ifdef FT_DEBUG_ERROR
- /* find node's cache */
- if ( node->cache_index >= manager->num_caches )
- {
- FT_TRACE0(( "ftc_node_destroy: invalid node handle\n" ));
- return;
- }
-#endif
-
- cache = manager->caches[node->cache_index];
-
-#ifdef FT_DEBUG_ERROR
- if ( !cache )
- {
- FT_TRACE0(( "ftc_node_destroy: invalid node handle\n" ));
- return;
- }
-#endif
-
- manager->cur_weight -= cache->clazz.node_weight( node, cache );
-
- /* remove node from mru list */
- ftc_node_mru_unlink( node, manager );
-
- /* remove node from cache's hash table */
- ftc_node_hash_unlink( node, cache );
-
- /* now finalize it */
- cache->clazz.node_free( node, cache );
-
-#if 0
- /* check, just in case of general corruption :-) */
- if ( manager->num_nodes == 0 )
- FT_TRACE0(( "ftc_node_destroy: invalid cache node count (%d)\n",
- manager->num_nodes ));
-#endif
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** ABSTRACT CACHE CLASS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_LOCAL_DEF( FT_Error )
- FTC_Cache_Init( FTC_Cache cache )
- {
- return ftc_cache_init( cache );
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- ftc_cache_init( FTC_Cache cache )
- {
- FT_Memory memory = cache->memory;
- FT_Error error;
-
-
- cache->p = 0;
- cache->mask = FTC_HASH_INITIAL_SIZE - 1;
- cache->slack = FTC_HASH_INITIAL_SIZE * FTC_HASH_MAX_LOAD;
-
- (void)FT_NEW_ARRAY( cache->buckets, FTC_HASH_INITIAL_SIZE * 2 );
- return error;
- }
-
-
- static void
- FTC_Cache_Clear( FTC_Cache cache )
- {
- if ( cache && cache->buckets )
- {
- FTC_Manager manager = cache->manager;
- FT_UFast i;
- FT_UFast count;
-
-
- count = cache->p + cache->mask + 1;
-
- for ( i = 0; i < count; i++ )
- {
- FTC_Node *pnode = cache->buckets + i, next, node = *pnode;
-
-
- while ( node )
- {
- next = node->link;
- node->link = NULL;
-
- /* remove node from mru list */
- ftc_node_mru_unlink( node, manager );
-
- /* now finalize it */
- manager->cur_weight -= cache->clazz.node_weight( node, cache );
-
- cache->clazz.node_free( node, cache );
- node = next;
- }
- cache->buckets[i] = NULL;
- }
- ftc_cache_resize( cache );
- }
- }
-
-
- FT_LOCAL_DEF( void )
- ftc_cache_done( FTC_Cache cache )
- {
- if ( cache->memory )
- {
- FT_Memory memory = cache->memory;
-
-
- FTC_Cache_Clear( cache );
-
- FT_FREE( cache->buckets );
- cache->mask = 0;
- cache->p = 0;
- cache->slack = 0;
-
- cache->memory = NULL;
- }
- }
-
-
- FT_LOCAL_DEF( void )
- FTC_Cache_Done( FTC_Cache cache )
- {
- ftc_cache_done( cache );
- }
-
-
- static void
- ftc_cache_add( FTC_Cache cache,
- FT_Offset hash,
- FTC_Node node )
- {
- node->hash = hash;
- node->cache_index = (FT_UInt16)cache->index;
- node->ref_count = 0;
-
- ftc_node_hash_link( node, cache );
- ftc_node_mru_link( node, cache->manager );
-
- {
- FTC_Manager manager = cache->manager;
-
-
- manager->cur_weight += cache->clazz.node_weight( node, cache );
-
- if ( manager->cur_weight >= manager->max_weight )
- {
- node->ref_count++;
- FTC_Manager_Compress( manager );
- node->ref_count--;
- }
- }
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- FTC_Cache_NewNode( FTC_Cache cache,
- FT_Offset hash,
- FT_Pointer query,
- FTC_Node *anode )
- {
- FT_Error error;
- FTC_Node node;
-
-
- /*
- * We use the FTC_CACHE_TRYLOOP macros to support out-of-memory
- * errors (OOM) correctly, i.e., by flushing the cache progressively
- * in order to make more room.
- */
-
- FTC_CACHE_TRYLOOP( cache )
- {
- error = cache->clazz.node_new( &node, query, cache );
- }
- FTC_CACHE_TRYLOOP_END( NULL );
-
- if ( error )
- node = NULL;
- else
- {
- /* don't assume that the cache has the same number of buckets, since
- * our allocation request might have triggered global cache flushing
- */
- ftc_cache_add( cache, hash, node );
- }
-
- *anode = node;
- return error;
- }
-
-
-#ifndef FTC_INLINE
-
- FT_LOCAL_DEF( FT_Error )
- FTC_Cache_Lookup( FTC_Cache cache,
- FT_Offset hash,
- FT_Pointer query,
- FTC_Node *anode )
- {
- FTC_Node* bucket;
- FTC_Node* pnode;
- FTC_Node node;
- FT_Error error = FT_Err_Ok;
- FT_Bool list_changed = FALSE;
-
- FTC_Node_CompareFunc compare = cache->clazz.node_compare;
-
-
- if ( !cache || !anode )
- return FT_THROW( Invalid_Argument );
-
- /* Go to the `top' node of the list sharing same masked hash */
- bucket = pnode = FTC_NODE_TOP_FOR_HASH( cache, hash );
-
- /* Lookup a node with exactly same hash and queried properties. */
- /* NOTE: _nodcomp() may change the linked list to reduce memory. */
- for (;;)
- {
- node = *pnode;
- if ( !node )
- goto NewNode;
-
- if ( node->hash == hash &&
- compare( node, query, cache, &list_changed ) )
- break;
-
- pnode = &node->link;
- }
-
- if ( list_changed )
- {
- /* Update bucket by modified linked list */
- bucket = pnode = FTC_NODE_TOP_FOR_HASH( cache, hash );
-
- /* Update pnode by modified linked list */
- while ( *pnode != node )
- {
- if ( !*pnode )
- {
- FT_ERROR(( "FTC_Cache_Lookup: oops!!! node missing\n" ));
- goto NewNode;
- }
- else
- pnode = &((*pnode)->link);
- }
- }
-
- /* Reorder the list to move the found node to the `top' */
- if ( node != *bucket )
- {
- *pnode = node->link;
- node->link = *bucket;
- *bucket = node;
- }
-
- /* move to head of MRU list */
- {
- FTC_Manager manager = cache->manager;
-
-
- if ( node != manager->nodes_list )
- ftc_node_mru_up( node, manager );
- }
- *anode = node;
-
- return error;
-
- NewNode:
- return FTC_Cache_NewNode( cache, hash, query, anode );
- }
-
-#endif /* !FTC_INLINE */
-
-
- FT_LOCAL_DEF( void )
- FTC_Cache_RemoveFaceID( FTC_Cache cache,
- FTC_FaceID face_id )
- {
- FT_UFast i, count;
- FTC_Manager manager = cache->manager;
- FTC_Node frees = NULL;
-
-
- count = cache->p + cache->mask + 1;
- for ( i = 0; i < count; i++ )
- {
- FTC_Node* bucket = cache->buckets + i;
- FTC_Node* pnode = bucket;
-
-
- for (;;)
- {
- FTC_Node node = *pnode;
- FT_Bool list_changed = FALSE;
-
-
- if ( !node )
- break;
-
- if ( cache->clazz.node_remove_faceid( node, face_id,
- cache, &list_changed ) )
- {
- *pnode = node->link;
- node->link = frees;
- frees = node;
- }
- else
- pnode = &node->link;
- }
- }
-
- /* remove all nodes in the free list */
- while ( frees )
- {
- FTC_Node node;
-
-
- node = frees;
- frees = node->link;
-
- manager->cur_weight -= cache->clazz.node_weight( node, cache );
- ftc_node_mru_unlink( node, manager );
-
- cache->clazz.node_free( node, cache );
-
- cache->slack++;
- }
-
- ftc_cache_resize( cache );
- }
-
-
-/* END */
diff --git a/src/cache/ftccache.h b/src/cache/ftccache.h
deleted file mode 100644
index d3c11ce08..000000000
--- a/src/cache/ftccache.h
+++ /dev/null
@@ -1,352 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftccache.h */
-/* */
-/* FreeType internal cache interface (specification). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTCCACHE_H_
-#define FTCCACHE_H_
-
-
-#include "ftcmru.h"
-
-FT_BEGIN_HEADER
-
-#define FTC_FACE_ID_HASH( i ) \
- ( ( (FT_Offset)(i) >> 3 ) ^ ( (FT_Offset)(i) << 7 ) )
-
- /* handle to cache object */
- typedef struct FTC_CacheRec_* FTC_Cache;
-
- /* handle to cache class */
- typedef const struct FTC_CacheClassRec_* FTC_CacheClass;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CACHE NODE DEFINITIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* Each cache controls one or more cache nodes. Each node is part of */
- /* the global_lru list of the manager. Its `data' field however is used */
- /* as a reference count for now. */
- /* */
- /* A node can be anything, depending on the type of information held by */
- /* the cache. It can be an individual glyph image, a set of bitmaps */
- /* glyphs for a given size, some metrics, etc. */
- /* */
- /*************************************************************************/
-
- /* structure size should be 20 bytes on 32-bits machines */
- typedef struct FTC_NodeRec_
- {
- FTC_MruNodeRec mru; /* circular mru list pointer */
- FTC_Node link; /* used for hashing */
- FT_Offset hash; /* used for hashing too */
- FT_UShort cache_index; /* index of cache the node belongs to */
- FT_Short ref_count; /* reference count for this node */
-
- } FTC_NodeRec;
-
-
-#define FTC_NODE( x ) ( (FTC_Node)(x) )
-#define FTC_NODE_P( x ) ( (FTC_Node*)(x) )
-
-#define FTC_NODE_NEXT( x ) FTC_NODE( (x)->mru.next )
-#define FTC_NODE_PREV( x ) FTC_NODE( (x)->mru.prev )
-
-#ifdef FTC_INLINE
-#define FTC_NODE_TOP_FOR_HASH( cache, hash ) \
- ( ( cache )->buckets + \
- ( ( ( ( hash ) & ( cache )->mask ) < ( cache )->p ) \
- ? ( ( hash ) & ( ( cache )->mask * 2 + 1 ) ) \
- : ( ( hash ) & ( cache )->mask ) ) )
-#else
- FT_LOCAL( FTC_Node* )
- ftc_get_top_node_for_hash( FTC_Cache cache,
- FT_Offset hash );
-#define FTC_NODE_TOP_FOR_HASH( cache, hash ) \
- ftc_get_top_node_for_hash( ( cache ), ( hash ) )
-#endif
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CACHE DEFINITIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* initialize a new cache node */
- typedef FT_Error
- (*FTC_Node_NewFunc)( FTC_Node *pnode,
- FT_Pointer query,
- FTC_Cache cache );
-
- typedef FT_Offset
- (*FTC_Node_WeightFunc)( FTC_Node node,
- FTC_Cache cache );
-
- /* compare a node to a given key pair */
- typedef FT_Bool
- (*FTC_Node_CompareFunc)( FTC_Node node,
- FT_Pointer key,
- FTC_Cache cache,
- FT_Bool* list_changed );
-
-
- typedef void
- (*FTC_Node_FreeFunc)( FTC_Node node,
- FTC_Cache cache );
-
- typedef FT_Error
- (*FTC_Cache_InitFunc)( FTC_Cache cache );
-
- typedef void
- (*FTC_Cache_DoneFunc)( FTC_Cache cache );
-
-
- typedef struct FTC_CacheClassRec_
- {
- FTC_Node_NewFunc node_new;
- FTC_Node_WeightFunc node_weight;
- FTC_Node_CompareFunc node_compare;
- FTC_Node_CompareFunc node_remove_faceid;
- FTC_Node_FreeFunc node_free;
-
- FT_Offset cache_size;
- FTC_Cache_InitFunc cache_init;
- FTC_Cache_DoneFunc cache_done;
-
- } FTC_CacheClassRec;
-
-
- /* each cache really implements a dynamic hash table to manage its nodes */
- typedef struct FTC_CacheRec_
- {
- FT_UFast p;
- FT_UFast mask;
- FT_Long slack;
- FTC_Node* buckets;
-
- FTC_CacheClassRec clazz; /* local copy, for speed */
-
- FTC_Manager manager;
- FT_Memory memory;
- FT_UInt index; /* in manager's table */
-
- FTC_CacheClass org_class; /* original class pointer */
-
- } FTC_CacheRec;
-
-
-#define FTC_CACHE( x ) ( (FTC_Cache)(x) )
-#define FTC_CACHE_P( x ) ( (FTC_Cache*)(x) )
-
-
- /* default cache initialize */
- FT_LOCAL( FT_Error )
- FTC_Cache_Init( FTC_Cache cache );
-
- /* default cache finalizer */
- FT_LOCAL( void )
- FTC_Cache_Done( FTC_Cache cache );
-
- /* Call this function to look up the cache. If no corresponding
- * node is found, a new one is automatically created. This function
- * is capable of flushing the cache adequately to make room for the
- * new cache object.
- */
-
-#ifndef FTC_INLINE
- FT_LOCAL( FT_Error )
- FTC_Cache_Lookup( FTC_Cache cache,
- FT_Offset hash,
- FT_Pointer query,
- FTC_Node *anode );
-#endif
-
- FT_LOCAL( FT_Error )
- FTC_Cache_NewNode( FTC_Cache cache,
- FT_Offset hash,
- FT_Pointer query,
- FTC_Node *anode );
-
- /* Remove all nodes that relate to a given face_id. This is useful
- * when un-installing fonts. Note that if a cache node relates to
- * the face_id but is locked (i.e., has `ref_count > 0'), the node
- * will _not_ be destroyed, but its internal face_id reference will
- * be modified.
- *
- * The final result will be that the node will never come back
- * in further lookup requests, and will be flushed on demand from
- * the cache normally when its reference count reaches 0.
- */
- FT_LOCAL( void )
- FTC_Cache_RemoveFaceID( FTC_Cache cache,
- FTC_FaceID face_id );
-
-
-#ifdef FTC_INLINE
-
-#define FTC_CACHE_LOOKUP_CMP( cache, nodecmp, hash, query, node, error ) \
- FT_BEGIN_STMNT \
- FTC_Node *_bucket, *_pnode, _node; \
- FTC_Cache _cache = FTC_CACHE(cache); \
- FT_Offset _hash = (FT_Offset)(hash); \
- FTC_Node_CompareFunc _nodcomp = (FTC_Node_CompareFunc)(nodecmp); \
- FT_Bool _list_changed = FALSE; \
- \
- \
- error = FT_Err_Ok; \
- node = NULL; \
- \
- /* Go to the `top' node of the list sharing same masked hash */ \
- _bucket = _pnode = FTC_NODE_TOP_FOR_HASH( _cache, _hash ); \
- \
- /* Look up a node with identical hash and queried properties. */ \
- /* NOTE: _nodcomp() may change the linked list to reduce memory. */ \
- for (;;) \
- { \
- _node = *_pnode; \
- if ( !_node ) \
- goto NewNode_; \
- \
- if ( _node->hash == _hash && \
- _nodcomp( _node, query, _cache, &_list_changed ) ) \
- break; \
- \
- _pnode = &_node->link; \
- } \
- \
- if ( _list_changed ) \
- { \
- /* Update _bucket by possibly modified linked list */ \
- _bucket = _pnode = FTC_NODE_TOP_FOR_HASH( _cache, _hash ); \
- \
- /* Update _pnode by possibly modified linked list */ \
- while ( *_pnode != _node ) \
- { \
- if ( !*_pnode ) \
- { \
- FT_ERROR(( "FTC_CACHE_LOOKUP_CMP: oops!!! node missing\n" )); \
- goto NewNode_; \
- } \
- else \
- _pnode = &((*_pnode)->link); \
- } \
- } \
- \
- /* Reorder the list to move the found node to the `top' */ \
- if ( _node != *_bucket ) \
- { \
- *_pnode = _node->link; \
- _node->link = *_bucket; \
- *_bucket = _node; \
- } \
- \
- /* Update MRU list */ \
- { \
- FTC_Manager _manager = _cache->manager; \
- void* _nl = &_manager->nodes_list; \
- \
- \
- if ( _node != _manager->nodes_list ) \
- FTC_MruNode_Up( (FTC_MruNode*)_nl, \
- (FTC_MruNode)_node ); \
- } \
- goto Ok_; \
- \
- NewNode_: \
- error = FTC_Cache_NewNode( _cache, _hash, query, &_node ); \
- \
- Ok_: \
- node = _node; \
- FT_END_STMNT
-
-#else /* !FTC_INLINE */
-
-#define FTC_CACHE_LOOKUP_CMP( cache, nodecmp, hash, query, node, error ) \
- FT_BEGIN_STMNT \
- error = FTC_Cache_Lookup( FTC_CACHE( cache ), hash, query, \
- (FTC_Node*)&(node) ); \
- FT_END_STMNT
-
-#endif /* !FTC_INLINE */
-
-
- /*
- * This macro, together with FTC_CACHE_TRYLOOP_END, defines a retry
- * loop to flush the cache repeatedly in case of memory overflows.
- *
- * It is used when creating a new cache node, or within a lookup
- * that needs to allocate data (e.g. the sbit cache lookup).
- *
- * Example:
- *
- * {
- * FTC_CACHE_TRYLOOP( cache )
- * error = load_data( ... );
- * FTC_CACHE_TRYLOOP_END()
- * }
- *
- */
-#define FTC_CACHE_TRYLOOP( cache ) \
- { \
- FTC_Manager _try_manager = FTC_CACHE( cache )->manager; \
- FT_UInt _try_count = 4; \
- \
- \
- for (;;) \
- { \
- FT_UInt _try_done;
-
-
-#define FTC_CACHE_TRYLOOP_END( list_changed ) \
- if ( !error || FT_ERR_NEQ( error, Out_Of_Memory ) ) \
- break; \
- \
- _try_done = FTC_Manager_FlushN( _try_manager, _try_count ); \
- if ( _try_done > 0 && list_changed != NULL ) \
- *(FT_Bool*)( list_changed ) = TRUE; \
- \
- if ( _try_done == 0 ) \
- break; \
- \
- if ( _try_done == _try_count ) \
- { \
- _try_count *= 2; \
- if ( _try_count < _try_done || \
- _try_count > _try_manager->num_nodes ) \
- _try_count = _try_manager->num_nodes; \
- } \
- } \
- }
-
- /* */
-
-FT_END_HEADER
-
-
-#endif /* FTCCACHE_H_ */
-
-
-/* END */
diff --git a/src/cache/ftccback.h b/src/cache/ftccback.h
deleted file mode 100644
index 2681e8c02..000000000
--- a/src/cache/ftccback.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftccback.h */
-/* */
-/* Callback functions of the caching sub-system (specification only). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-#ifndef FTCCBACK_H_
-#define FTCCBACK_H_
-
-#include <ft2build.h>
-#include FT_CACHE_H
-#include "ftcmru.h"
-#include "ftcimage.h"
-#include "ftcmanag.h"
-#include "ftcglyph.h"
-#include "ftcsbits.h"
-
-
- FT_LOCAL( void )
- ftc_inode_free( FTC_Node inode,
- FTC_Cache cache );
-
- FT_LOCAL( FT_Error )
- ftc_inode_new( FTC_Node *pinode,
- FT_Pointer gquery,
- FTC_Cache cache );
-
- FT_LOCAL( FT_Offset )
- ftc_inode_weight( FTC_Node inode,
- FTC_Cache cache );
-
-
- FT_LOCAL( void )
- ftc_snode_free( FTC_Node snode,
- FTC_Cache cache );
-
- FT_LOCAL( FT_Error )
- ftc_snode_new( FTC_Node *psnode,
- FT_Pointer gquery,
- FTC_Cache cache );
-
- FT_LOCAL( FT_Offset )
- ftc_snode_weight( FTC_Node snode,
- FTC_Cache cache );
-
- FT_LOCAL( FT_Bool )
- ftc_snode_compare( FTC_Node snode,
- FT_Pointer gquery,
- FTC_Cache cache,
- FT_Bool* list_changed );
-
-
- FT_LOCAL( FT_Bool )
- ftc_gnode_compare( FTC_Node gnode,
- FT_Pointer gquery,
- FTC_Cache cache,
- FT_Bool* list_changed );
-
-
- FT_LOCAL( FT_Error )
- ftc_gcache_init( FTC_Cache cache );
-
- FT_LOCAL( void )
- ftc_gcache_done( FTC_Cache cache );
-
-
- FT_LOCAL( FT_Error )
- ftc_cache_init( FTC_Cache cache );
-
- FT_LOCAL( void )
- ftc_cache_done( FTC_Cache cache );
-
- FT_LOCAL( void )
- ftc_node_destroy( FTC_Node node,
- FTC_Manager manager );
-
-
-#endif /* FTCCBACK_H_ */
-
-
-/* END */
diff --git a/src/cache/ftccmap.c b/src/cache/ftccmap.c
deleted file mode 100644
index 2fa84979c..000000000
--- a/src/cache/ftccmap.c
+++ /dev/null
@@ -1,327 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftccmap.c */
-/* */
-/* FreeType CharMap cache (body) */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_CACHE_H
-#include "ftcmanag.h"
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-
-#include "ftccback.h"
-#include "ftcerror.h"
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cache
-
-
- /*************************************************************************/
- /* */
- /* Each FTC_CMapNode contains a simple array to map a range of character */
- /* codes to equivalent glyph indices. */
- /* */
- /* For now, the implementation is very basic: Each node maps a range of */
- /* 128 consecutive character codes to their corresponding glyph indices. */
- /* */
- /* We could do more complex things, but I don't think it is really very */
- /* useful. */
- /* */
- /*************************************************************************/
-
-
- /* number of glyph indices / character code per node */
-#define FTC_CMAP_INDICES_MAX 128
-
- /* compute a query/node hash */
-#define FTC_CMAP_HASH( faceid, index, charcode ) \
- ( FTC_FACE_ID_HASH( faceid ) + 211 * (index) + \
- ( (charcode) / FTC_CMAP_INDICES_MAX ) )
-
- /* the charmap query */
- typedef struct FTC_CMapQueryRec_
- {
- FTC_FaceID face_id;
- FT_UInt cmap_index;
- FT_UInt32 char_code;
-
- } FTC_CMapQueryRec, *FTC_CMapQuery;
-
-#define FTC_CMAP_QUERY( x ) ((FTC_CMapQuery)(x))
-
- /* the cmap cache node */
- typedef struct FTC_CMapNodeRec_
- {
- FTC_NodeRec node;
- FTC_FaceID face_id;
- FT_UInt cmap_index;
- FT_UInt32 first; /* first character in node */
- FT_UInt16 indices[FTC_CMAP_INDICES_MAX]; /* array of glyph indices */
-
- } FTC_CMapNodeRec, *FTC_CMapNode;
-
-#define FTC_CMAP_NODE( x ) ( (FTC_CMapNode)( x ) )
-
- /* if (indices[n] == FTC_CMAP_UNKNOWN), we assume that the corresponding */
- /* glyph indices haven't been queried through FT_Get_Glyph_Index() yet */
-#define FTC_CMAP_UNKNOWN (FT_UInt16)~0
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CHARMAP NODES *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_CALLBACK_DEF( void )
- ftc_cmap_node_free( FTC_Node ftcnode,
- FTC_Cache cache )
- {
- FTC_CMapNode node = (FTC_CMapNode)ftcnode;
- FT_Memory memory = cache->memory;
-
-
- FT_FREE( node );
- }
-
-
- /* initialize a new cmap node */
- FT_CALLBACK_DEF( FT_Error )
- ftc_cmap_node_new( FTC_Node *ftcanode,
- FT_Pointer ftcquery,
- FTC_Cache cache )
- {
- FTC_CMapNode *anode = (FTC_CMapNode*)ftcanode;
- FTC_CMapQuery query = (FTC_CMapQuery)ftcquery;
- FT_Error error;
- FT_Memory memory = cache->memory;
- FTC_CMapNode node = NULL;
- FT_UInt nn;
-
-
- if ( !FT_NEW( node ) )
- {
- node->face_id = query->face_id;
- node->cmap_index = query->cmap_index;
- node->first = (query->char_code / FTC_CMAP_INDICES_MAX) *
- FTC_CMAP_INDICES_MAX;
-
- for ( nn = 0; nn < FTC_CMAP_INDICES_MAX; nn++ )
- node->indices[nn] = FTC_CMAP_UNKNOWN;
- }
-
- *anode = node;
- return error;
- }
-
-
- /* compute the weight of a given cmap node */
- FT_CALLBACK_DEF( FT_Offset )
- ftc_cmap_node_weight( FTC_Node cnode,
- FTC_Cache cache )
- {
- FT_UNUSED( cnode );
- FT_UNUSED( cache );
-
- return sizeof ( *cnode );
- }
-
-
- /* compare a cmap node to a given query */
- FT_CALLBACK_DEF( FT_Bool )
- ftc_cmap_node_compare( FTC_Node ftcnode,
- FT_Pointer ftcquery,
- FTC_Cache cache,
- FT_Bool* list_changed )
- {
- FTC_CMapNode node = (FTC_CMapNode)ftcnode;
- FTC_CMapQuery query = (FTC_CMapQuery)ftcquery;
- FT_UNUSED( cache );
-
-
- if ( list_changed )
- *list_changed = FALSE;
- if ( node->face_id == query->face_id &&
- node->cmap_index == query->cmap_index )
- {
- FT_UInt32 offset = (FT_UInt32)( query->char_code - node->first );
-
-
- return FT_BOOL( offset < FTC_CMAP_INDICES_MAX );
- }
-
- return 0;
- }
-
-
- FT_CALLBACK_DEF( FT_Bool )
- ftc_cmap_node_remove_faceid( FTC_Node ftcnode,
- FT_Pointer ftcface_id,
- FTC_Cache cache,
- FT_Bool* list_changed )
- {
- FTC_CMapNode node = (FTC_CMapNode)ftcnode;
- FTC_FaceID face_id = (FTC_FaceID)ftcface_id;
- FT_UNUSED( cache );
-
-
- if ( list_changed )
- *list_changed = FALSE;
- return FT_BOOL( node->face_id == face_id );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GLYPH IMAGE CACHE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- static
- const FTC_CacheClassRec ftc_cmap_cache_class =
- {
- ftc_cmap_node_new, /* FTC_Node_NewFunc node_new */
- ftc_cmap_node_weight, /* FTC_Node_WeightFunc node_weight */
- ftc_cmap_node_compare, /* FTC_Node_CompareFunc node_compare */
- ftc_cmap_node_remove_faceid, /* FTC_Node_CompareFunc node_remove_faceid */
- ftc_cmap_node_free, /* FTC_Node_FreeFunc node_free */
-
- sizeof ( FTC_CacheRec ),
- ftc_cache_init, /* FTC_Cache_InitFunc cache_init */
- ftc_cache_done, /* FTC_Cache_DoneFunc cache_done */
- };
-
-
- /* documentation is in ftcache.h */
-
- FT_EXPORT_DEF( FT_Error )
- FTC_CMapCache_New( FTC_Manager manager,
- FTC_CMapCache *acache )
- {
- return FTC_Manager_RegisterCache( manager,
- &ftc_cmap_cache_class,
- FTC_CACHE_P( acache ) );
- }
-
-
- /* documentation is in ftcache.h */
-
- FT_EXPORT_DEF( FT_UInt )
- FTC_CMapCache_Lookup( FTC_CMapCache cmap_cache,
- FTC_FaceID face_id,
- FT_Int cmap_index,
- FT_UInt32 char_code )
- {
- FTC_Cache cache = FTC_CACHE( cmap_cache );
- FTC_CMapQueryRec query;
- FTC_Node node;
- FT_Error error;
- FT_UInt gindex = 0;
- FT_Offset hash;
- FT_Int no_cmap_change = 0;
-
-
- if ( cmap_index < 0 )
- {
- /* Treat a negative cmap index as a special value, meaning that you */
- /* don't want to change the FT_Face's character map through this */
- /* call. This can be useful if the face requester callback already */
- /* sets the face's charmap to the appropriate value. */
-
- no_cmap_change = 1;
- cmap_index = 0;
- }
-
- if ( !cache )
- {
- FT_TRACE0(( "FTC_CMapCache_Lookup: bad arguments, returning 0\n" ));
- return 0;
- }
-
- query.face_id = face_id;
- query.cmap_index = (FT_UInt)cmap_index;
- query.char_code = char_code;
-
- hash = FTC_CMAP_HASH( face_id, (FT_UInt)cmap_index, char_code );
-
-#if 1
- FTC_CACHE_LOOKUP_CMP( cache, ftc_cmap_node_compare, hash, &query,
- node, error );
-#else
- error = FTC_Cache_Lookup( cache, hash, &query, &node );
-#endif
- if ( error )
- goto Exit;
-
- FT_ASSERT( (FT_UInt)( char_code - FTC_CMAP_NODE( node )->first ) <
- FTC_CMAP_INDICES_MAX );
-
- /* something rotten can happen with rogue clients */
- if ( (FT_UInt)( char_code - FTC_CMAP_NODE( node )->first >=
- FTC_CMAP_INDICES_MAX ) )
- return 0; /* XXX: should return appropriate error */
-
- gindex = FTC_CMAP_NODE( node )->indices[char_code -
- FTC_CMAP_NODE( node )->first];
- if ( gindex == FTC_CMAP_UNKNOWN )
- {
- FT_Face face;
-
-
- gindex = 0;
-
- error = FTC_Manager_LookupFace( cache->manager,
- FTC_CMAP_NODE( node )->face_id,
- &face );
- if ( error )
- goto Exit;
-
- if ( (FT_UInt)cmap_index < (FT_UInt)face->num_charmaps )
- {
- FT_CharMap old, cmap = NULL;
-
-
- old = face->charmap;
- cmap = face->charmaps[cmap_index];
-
- if ( old != cmap && !no_cmap_change )
- FT_Set_Charmap( face, cmap );
-
- gindex = FT_Get_Char_Index( face, char_code );
-
- if ( old != cmap && !no_cmap_change )
- FT_Set_Charmap( face, old );
- }
-
- FTC_CMAP_NODE( node )->indices[char_code -
- FTC_CMAP_NODE( node )->first]
- = (FT_UShort)gindex;
- }
-
- Exit:
- return gindex;
- }
-
-
-/* END */
diff --git a/src/cache/ftcerror.h b/src/cache/ftcerror.h
deleted file mode 100644
index 84fe52f54..000000000
--- a/src/cache/ftcerror.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcerror.h */
-/* */
-/* Caching sub-system error codes (specification only). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the caching sub-system error enumeration */
- /* constants. */
- /* */
- /*************************************************************************/
-
-#ifndef FTCERROR_H_
-#define FTCERROR_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX FTC_Err_
-#define FT_ERR_BASE FT_Mod_Err_Cache
-
-#include FT_ERRORS_H
-
-#endif /* FTCERROR_H_ */
-
-
-/* END */
diff --git a/src/cache/ftcglyph.c b/src/cache/ftcglyph.c
deleted file mode 100644
index d2468f2f4..000000000
--- a/src/cache/ftcglyph.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcglyph.c */
-/* */
-/* FreeType Glyph Image (FT_Glyph) cache (body). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_CACHE_H
-#include "ftcglyph.h"
-#include FT_ERRORS_H
-
-#include "ftccback.h"
-#include "ftcerror.h"
-
-
- /* create a new chunk node, setting its cache index and ref count */
- FT_LOCAL_DEF( void )
- FTC_GNode_Init( FTC_GNode gnode,
- FT_UInt gindex,
- FTC_Family family )
- {
- gnode->family = family;
- gnode->gindex = gindex;
- family->num_nodes++;
- }
-
-
- FT_LOCAL_DEF( void )
- FTC_GNode_UnselectFamily( FTC_GNode gnode,
- FTC_Cache cache )
- {
- FTC_Family family = gnode->family;
-
-
- gnode->family = NULL;
- if ( family && --family->num_nodes == 0 )
- FTC_FAMILY_FREE( family, cache );
- }
-
-
- FT_LOCAL_DEF( void )
- FTC_GNode_Done( FTC_GNode gnode,
- FTC_Cache cache )
- {
- /* finalize the node */
- gnode->gindex = 0;
-
- FTC_GNode_UnselectFamily( gnode, cache );
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- ftc_gnode_compare( FTC_Node ftcgnode,
- FT_Pointer ftcgquery,
- FTC_Cache cache,
- FT_Bool* list_changed )
- {
- FTC_GNode gnode = (FTC_GNode)ftcgnode;
- FTC_GQuery gquery = (FTC_GQuery)ftcgquery;
- FT_UNUSED( cache );
-
-
- if ( list_changed )
- *list_changed = FALSE;
- return FT_BOOL( gnode->family == gquery->family &&
- gnode->gindex == gquery->gindex );
- }
-
-
-#ifdef FTC_INLINE
-
- FT_LOCAL_DEF( FT_Bool )
- FTC_GNode_Compare( FTC_GNode gnode,
- FTC_GQuery gquery,
- FTC_Cache cache,
- FT_Bool* list_changed )
- {
- return ftc_gnode_compare( FTC_NODE( gnode ), gquery,
- cache, list_changed );
- }
-
-#endif
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CHUNK SETS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- FTC_Family_Init( FTC_Family family,
- FTC_Cache cache )
- {
- FTC_GCacheClass clazz = FTC_CACHE_GCACHE_CLASS( cache );
-
-
- family->clazz = clazz->family_class;
- family->num_nodes = 0;
- family->cache = cache;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- ftc_gcache_init( FTC_Cache ftccache )
- {
- FTC_GCache cache = (FTC_GCache)ftccache;
- FT_Error error;
-
-
- error = FTC_Cache_Init( FTC_CACHE( cache ) );
- if ( !error )
- {
- FTC_GCacheClass clazz = (FTC_GCacheClass)FTC_CACHE( cache )->org_class;
-
- FTC_MruList_Init( &cache->families,
- clazz->family_class,
- 0, /* no maximum here! */
- cache,
- FTC_CACHE( cache )->memory );
- }
-
- return error;
- }
-
-
-#if 0
-
- FT_LOCAL_DEF( FT_Error )
- FTC_GCache_Init( FTC_GCache cache )
- {
- return ftc_gcache_init( FTC_CACHE( cache ) );
- }
-
-#endif /* 0 */
-
-
- FT_LOCAL_DEF( void )
- ftc_gcache_done( FTC_Cache ftccache )
- {
- FTC_GCache cache = (FTC_GCache)ftccache;
-
-
- FTC_Cache_Done( (FTC_Cache)cache );
- FTC_MruList_Done( &cache->families );
- }
-
-
-#if 0
-
- FT_LOCAL_DEF( void )
- FTC_GCache_Done( FTC_GCache cache )
- {
- ftc_gcache_done( FTC_CACHE( cache ) );
- }
-
-#endif /* 0 */
-
-
- FT_LOCAL_DEF( FT_Error )
- FTC_GCache_New( FTC_Manager manager,
- FTC_GCacheClass clazz,
- FTC_GCache *acache )
- {
- return FTC_Manager_RegisterCache( manager, (FTC_CacheClass)clazz,
- (FTC_Cache*)acache );
- }
-
-
-#ifndef FTC_INLINE
-
- FT_LOCAL_DEF( FT_Error )
- FTC_GCache_Lookup( FTC_GCache cache,
- FT_Offset hash,
- FT_UInt gindex,
- FTC_GQuery query,
- FTC_Node *anode )
- {
- FT_Error error;
-
-
- query->gindex = gindex;
-
- FTC_MRULIST_LOOKUP( &cache->families, query, query->family, error );
- if ( !error )
- {
- FTC_Family family = query->family;
-
-
- /* prevent the family from being destroyed too early when an */
- /* out-of-memory condition occurs during glyph node initialization. */
- family->num_nodes++;
-
- error = FTC_Cache_Lookup( FTC_CACHE( cache ), hash, query, anode );
-
- if ( --family->num_nodes == 0 )
- FTC_FAMILY_FREE( family, cache );
- }
- return error;
- }
-
-#endif /* !FTC_INLINE */
-
-
-/* END */
diff --git a/src/cache/ftcglyph.h b/src/cache/ftcglyph.h
deleted file mode 100644
index cab58ed31..000000000
--- a/src/cache/ftcglyph.h
+++ /dev/null
@@ -1,329 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcglyph.h */
-/* */
-/* FreeType abstract glyph cache (specification). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*
- *
- * FTC_GCache is an _abstract_ cache object optimized to store glyph
- * data. It works as follows:
- *
- * - It manages FTC_GNode objects. Each one of them can hold one or more
- * glyph `items'. Item types are not specified in the FTC_GCache but
- * in classes that extend it.
- *
- * - Glyph attributes, like face ID, character size, render mode, etc.,
- * can be grouped into abstract `glyph families'. This avoids storing
- * the attributes within the FTC_GCache, since it is likely that many
- * FTC_GNodes will belong to the same family in typical uses.
- *
- * - Each FTC_GNode is thus an FTC_Node with two additional fields:
- *
- * * gindex: A glyph index, or the first index in a glyph range.
- * * family: A pointer to a glyph `family'.
- *
- * - Family types are not fully specific in the FTC_Family type, but
- * by classes that extend it.
- *
- * Note that both FTC_ImageCache and FTC_SBitCache extend FTC_GCache.
- * They share an FTC_Family sub-class called FTC_BasicFamily which is
- * used to store the following data: face ID, pixel/point sizes, load
- * flags. For more details see the file `src/cache/ftcbasic.c'.
- *
- * Client applications can extend FTC_GNode with their own FTC_GNode
- * and FTC_Family sub-classes to implement more complex caches (e.g.,
- * handling automatic synthesis, like obliquing & emboldening, colored
- * glyphs, etc.).
- *
- * See also the FTC_ICache & FTC_SCache classes in `ftcimage.h' and
- * `ftcsbits.h', which both extend FTC_GCache with additional
- * optimizations.
- *
- * A typical FTC_GCache implementation must provide at least the
- * following:
- *
- * - FTC_GNode sub-class, e.g. MyNode, with relevant methods:
- * my_node_new (must call FTC_GNode_Init)
- * my_node_free (must call FTC_GNode_Done)
- * my_node_compare (must call FTC_GNode_Compare)
- * my_node_remove_faceid (must call ftc_gnode_unselect in case
- * of match)
- *
- * - FTC_Family sub-class, e.g. MyFamily, with relevant methods:
- * my_family_compare
- * my_family_init
- * my_family_reset (optional)
- * my_family_done
- *
- * - FTC_GQuery sub-class, e.g. MyQuery, to hold cache-specific query
- * data.
- *
- * - Constant structures for a FTC_GNodeClass.
- *
- * - MyCacheNew() can be implemented easily as a call to the convenience
- * function FTC_GCache_New.
- *
- * - MyCacheLookup with a call to FTC_GCache_Lookup. This function will
- * automatically:
- *
- * - Search for the corresponding family in the cache, or create
- * a new one if necessary. Put it in FTC_GQUERY(myquery).family
- *
- * - Call FTC_Cache_Lookup.
- *
- * If it returns NULL, you should create a new node, then call
- * ftc_cache_add as usual.
- */
-
-
- /*************************************************************************/
- /* */
- /* Important: The functions defined in this file are only used to */
- /* implement an abstract glyph cache class. You need to */
- /* provide additional logic to implement a complete cache. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /********* *********/
- /********* WARNING, THIS IS BETA CODE. *********/
- /********* *********/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
-#ifndef FTCGLYPH_H_
-#define FTCGLYPH_H_
-
-
-#include <ft2build.h>
-#include "ftcmanag.h"
-
-
-FT_BEGIN_HEADER
-
-
- /*
- * We can group glyphs into `families'. Each family correspond to a
- * given face ID, character size, transform, etc.
- *
- * Families are implemented as MRU list nodes. They are
- * reference-counted.
- */
-
- typedef struct FTC_FamilyRec_
- {
- FTC_MruNodeRec mrunode;
- FT_UInt num_nodes; /* current number of nodes in this family */
- FTC_Cache cache;
- FTC_MruListClass clazz;
-
- } FTC_FamilyRec, *FTC_Family;
-
-#define FTC_FAMILY(x) ( (FTC_Family)(x) )
-#define FTC_FAMILY_P(x) ( (FTC_Family*)(x) )
-
-
- typedef struct FTC_GNodeRec_
- {
- FTC_NodeRec node;
- FTC_Family family;
- FT_UInt gindex;
-
- } FTC_GNodeRec, *FTC_GNode;
-
-#define FTC_GNODE( x ) ( (FTC_GNode)(x) )
-#define FTC_GNODE_P( x ) ( (FTC_GNode*)(x) )
-
-
- typedef struct FTC_GQueryRec_
- {
- FT_UInt gindex;
- FTC_Family family;
-
- } FTC_GQueryRec, *FTC_GQuery;
-
-#define FTC_GQUERY( x ) ( (FTC_GQuery)(x) )
-
-
- /*************************************************************************/
- /* */
- /* These functions are exported so that they can be called from */
- /* user-provided cache classes; otherwise, they are really part of the */
- /* cache sub-system internals. */
- /* */
-
- /* must be called by derived FTC_Node_InitFunc routines */
- FT_LOCAL( void )
- FTC_GNode_Init( FTC_GNode node,
- FT_UInt gindex, /* glyph index for node */
- FTC_Family family );
-
-#ifdef FTC_INLINE
-
- /* returns TRUE iff the query's glyph index correspond to the node; */
- /* this assumes that the `family' and `hash' fields of the query are */
- /* already correctly set */
- FT_LOCAL( FT_Bool )
- FTC_GNode_Compare( FTC_GNode gnode,
- FTC_GQuery gquery,
- FTC_Cache cache,
- FT_Bool* list_changed );
-
-#endif
-
- /* call this function to clear a node's family -- this is necessary */
- /* to implement the `node_remove_faceid' cache method correctly */
- FT_LOCAL( void )
- FTC_GNode_UnselectFamily( FTC_GNode gnode,
- FTC_Cache cache );
-
- /* must be called by derived FTC_Node_DoneFunc routines */
- FT_LOCAL( void )
- FTC_GNode_Done( FTC_GNode node,
- FTC_Cache cache );
-
-
- FT_LOCAL( void )
- FTC_Family_Init( FTC_Family family,
- FTC_Cache cache );
-
- typedef struct FTC_GCacheRec_
- {
- FTC_CacheRec cache;
- FTC_MruListRec families;
-
- } FTC_GCacheRec, *FTC_GCache;
-
-#define FTC_GCACHE( x ) ((FTC_GCache)(x))
-
-
-#if 0
- /* can be used as @FTC_Cache_InitFunc */
- FT_LOCAL( FT_Error )
- FTC_GCache_Init( FTC_GCache cache );
-#endif
-
-
-#if 0
- /* can be used as @FTC_Cache_DoneFunc */
- FT_LOCAL( void )
- FTC_GCache_Done( FTC_GCache cache );
-#endif
-
-
- /* the glyph cache class adds fields for the family implementation */
- typedef struct FTC_GCacheClassRec_
- {
- FTC_CacheClassRec clazz;
- FTC_MruListClass family_class;
-
- } FTC_GCacheClassRec;
-
- typedef const FTC_GCacheClassRec* FTC_GCacheClass;
-
-#define FTC_GCACHE_CLASS( x ) ((FTC_GCacheClass)(x))
-
-#define FTC_CACHE_GCACHE_CLASS( x ) \
- FTC_GCACHE_CLASS( FTC_CACHE(x)->org_class )
-#define FTC_CACHE_FAMILY_CLASS( x ) \
- ( (FTC_MruListClass)FTC_CACHE_GCACHE_CLASS( x )->family_class )
-
-
- /* convenience function; use it instead of FTC_Manager_Register_Cache */
- FT_LOCAL( FT_Error )
- FTC_GCache_New( FTC_Manager manager,
- FTC_GCacheClass clazz,
- FTC_GCache *acache );
-
-#ifndef FTC_INLINE
- FT_LOCAL( FT_Error )
- FTC_GCache_Lookup( FTC_GCache cache,
- FT_Offset hash,
- FT_UInt gindex,
- FTC_GQuery query,
- FTC_Node *anode );
-#endif
-
-
- /* */
-
-
-#define FTC_FAMILY_FREE( family, cache ) \
- FTC_MruList_Remove( &FTC_GCACHE((cache))->families, \
- (FTC_MruNode)(family) )
-
-
-#ifdef FTC_INLINE
-
-#define FTC_GCACHE_LOOKUP_CMP( cache, famcmp, nodecmp, hash, \
- gindex, query, node, error ) \
- FT_BEGIN_STMNT \
- FTC_GCache _gcache = FTC_GCACHE( cache ); \
- FTC_GQuery _gquery = (FTC_GQuery)( query ); \
- FTC_MruNode_CompareFunc _fcompare = (FTC_MruNode_CompareFunc)(famcmp); \
- FTC_MruNode _mrunode; \
- \
- \
- _gquery->gindex = (gindex); \
- \
- FTC_MRULIST_LOOKUP_CMP( &_gcache->families, _gquery, _fcompare, \
- _mrunode, error ); \
- _gquery->family = FTC_FAMILY( _mrunode ); \
- if ( !error ) \
- { \
- FTC_Family _gqfamily = _gquery->family; \
- \
- \
- _gqfamily->num_nodes++; \
- \
- FTC_CACHE_LOOKUP_CMP( cache, nodecmp, hash, query, node, error ); \
- \
- if ( --_gqfamily->num_nodes == 0 ) \
- FTC_FAMILY_FREE( _gqfamily, _gcache ); \
- } \
- FT_END_STMNT
- /* */
-
-#else /* !FTC_INLINE */
-
-#define FTC_GCACHE_LOOKUP_CMP( cache, famcmp, nodecmp, hash, \
- gindex, query, node, error ) \
- FT_BEGIN_STMNT \
- \
- error = FTC_GCache_Lookup( FTC_GCACHE( cache ), hash, gindex, \
- FTC_GQUERY( query ), &node ); \
- \
- FT_END_STMNT
-
-#endif /* !FTC_INLINE */
-
-
-FT_END_HEADER
-
-
-#endif /* FTCGLYPH_H_ */
-
-
-/* END */
diff --git a/src/cache/ftcimage.c b/src/cache/ftcimage.c
deleted file mode 100644
index 359f818cc..000000000
--- a/src/cache/ftcimage.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcimage.c */
-/* */
-/* FreeType Image cache (body). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_CACHE_H
-#include "ftcimage.h"
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_OBJECTS_H
-
-#include "ftccback.h"
-#include "ftcerror.h"
-
-
- /* finalize a given glyph image node */
- FT_LOCAL_DEF( void )
- ftc_inode_free( FTC_Node ftcinode,
- FTC_Cache cache )
- {
- FTC_INode inode = (FTC_INode)ftcinode;
- FT_Memory memory = cache->memory;
-
-
- if ( inode->glyph )
- {
- FT_Done_Glyph( inode->glyph );
- inode->glyph = NULL;
- }
-
- FTC_GNode_Done( FTC_GNODE( inode ), cache );
- FT_FREE( inode );
- }
-
-
- FT_LOCAL_DEF( void )
- FTC_INode_Free( FTC_INode inode,
- FTC_Cache cache )
- {
- ftc_inode_free( FTC_NODE( inode ), cache );
- }
-
-
- /* initialize a new glyph image node */
- FT_LOCAL_DEF( FT_Error )
- FTC_INode_New( FTC_INode *pinode,
- FTC_GQuery gquery,
- FTC_Cache cache )
- {
- FT_Memory memory = cache->memory;
- FT_Error error;
- FTC_INode inode = NULL;
-
-
- if ( !FT_NEW( inode ) )
- {
- FTC_GNode gnode = FTC_GNODE( inode );
- FTC_Family family = gquery->family;
- FT_UInt gindex = gquery->gindex;
- FTC_IFamilyClass clazz = FTC_CACHE_IFAMILY_CLASS( cache );
-
-
- /* initialize its inner fields */
- FTC_GNode_Init( gnode, gindex, family );
-
- /* we will now load the glyph image */
- error = clazz->family_load_glyph( family, gindex, cache,
- &inode->glyph );
- if ( error )
- {
- FTC_INode_Free( inode, cache );
- inode = NULL;
- }
- }
-
- *pinode = inode;
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- ftc_inode_new( FTC_Node *ftcpinode,
- FT_Pointer ftcgquery,
- FTC_Cache cache )
- {
- FTC_INode *pinode = (FTC_INode*)ftcpinode;
- FTC_GQuery gquery = (FTC_GQuery)ftcgquery;
-
-
- return FTC_INode_New( pinode, gquery, cache );
- }
-
-
- FT_LOCAL_DEF( FT_Offset )
- ftc_inode_weight( FTC_Node ftcinode,
- FTC_Cache ftccache )
- {
- FTC_INode inode = (FTC_INode)ftcinode;
- FT_Offset size = 0;
- FT_Glyph glyph = inode->glyph;
-
- FT_UNUSED( ftccache );
-
-
- switch ( glyph->format )
- {
- case FT_GLYPH_FORMAT_BITMAP:
- {
- FT_BitmapGlyph bitg;
-
-
- bitg = (FT_BitmapGlyph)glyph;
- size = bitg->bitmap.rows * (FT_Offset)FT_ABS( bitg->bitmap.pitch ) +
- sizeof ( *bitg );
- }
- break;
-
- case FT_GLYPH_FORMAT_OUTLINE:
- {
- FT_OutlineGlyph outg;
-
-
- outg = (FT_OutlineGlyph)glyph;
- size = (FT_Offset)outg->outline.n_points *
- ( sizeof ( FT_Vector ) + sizeof ( FT_Byte ) ) +
- (FT_Offset)outg->outline.n_contours * sizeof ( FT_Short ) +
- sizeof ( *outg );
- }
- break;
-
- default:
- ;
- }
-
- size += sizeof ( *inode );
- return size;
- }
-
-
-#if 0
-
- FT_LOCAL_DEF( FT_Offset )
- FTC_INode_Weight( FTC_INode inode )
- {
- return ftc_inode_weight( FTC_NODE( inode ), NULL );
- }
-
-#endif /* 0 */
-
-
-/* END */
diff --git a/src/cache/ftcimage.h b/src/cache/ftcimage.h
deleted file mode 100644
index 14049af9d..000000000
--- a/src/cache/ftcimage.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcimage.h */
-/* */
-/* FreeType Generic Image cache (specification) */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*
- * FTC_ICache is an _abstract_ cache used to store a single FT_Glyph
- * image per cache node.
- *
- * FTC_ICache extends FTC_GCache. For an implementation example,
- * see FTC_ImageCache in `src/cache/ftbasic.c'.
- */
-
-
- /*************************************************************************/
- /* */
- /* Each image cache really manages FT_Glyph objects. */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTCIMAGE_H_
-#define FTCIMAGE_H_
-
-
-#include <ft2build.h>
-#include FT_CACHE_H
-#include "ftcglyph.h"
-
-FT_BEGIN_HEADER
-
-
- /* the FT_Glyph image node type - we store only 1 glyph per node */
- typedef struct FTC_INodeRec_
- {
- FTC_GNodeRec gnode;
- FT_Glyph glyph;
-
- } FTC_INodeRec, *FTC_INode;
-
-#define FTC_INODE( x ) ( (FTC_INode)( x ) )
-#define FTC_INODE_GINDEX( x ) FTC_GNODE(x)->gindex
-#define FTC_INODE_FAMILY( x ) FTC_GNODE(x)->family
-
- typedef FT_Error
- (*FTC_IFamily_LoadGlyphFunc)( FTC_Family family,
- FT_UInt gindex,
- FTC_Cache cache,
- FT_Glyph *aglyph );
-
- typedef struct FTC_IFamilyClassRec_
- {
- FTC_MruListClassRec clazz;
- FTC_IFamily_LoadGlyphFunc family_load_glyph;
-
- } FTC_IFamilyClassRec;
-
- typedef const FTC_IFamilyClassRec* FTC_IFamilyClass;
-
-#define FTC_IFAMILY_CLASS( x ) ((FTC_IFamilyClass)(x))
-
-#define FTC_CACHE_IFAMILY_CLASS( x ) \
- FTC_IFAMILY_CLASS( FTC_CACHE_GCACHE_CLASS(x)->family_class )
-
-
- /* can be used as a @FTC_Node_FreeFunc */
- FT_LOCAL( void )
- FTC_INode_Free( FTC_INode inode,
- FTC_Cache cache );
-
- /* Can be used as @FTC_Node_NewFunc. `gquery.index' and `gquery.family'
- * must be set correctly. This function will call the `family_load_glyph'
- * method to load the FT_Glyph into the cache node.
- */
- FT_LOCAL( FT_Error )
- FTC_INode_New( FTC_INode *pinode,
- FTC_GQuery gquery,
- FTC_Cache cache );
-
-#if 0
- /* can be used as @FTC_Node_WeightFunc */
- FT_LOCAL( FT_ULong )
- FTC_INode_Weight( FTC_INode inode );
-#endif
-
-
- /* */
-
-FT_END_HEADER
-
-#endif /* FTCIMAGE_H_ */
-
-
-/* END */
diff --git a/src/cache/ftcmanag.c b/src/cache/ftcmanag.c
deleted file mode 100644
index edec2b6b5..000000000
--- a/src/cache/ftcmanag.c
+++ /dev/null
@@ -1,704 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcmanag.c */
-/* */
-/* FreeType Cache Manager (body). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_CACHE_H
-#include "ftcmanag.h"
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_SIZES_H
-
-#include "ftccback.h"
-#include "ftcerror.h"
-
-#ifdef FT_CONFIG_OPTION_PIC
-#error "cache system does not support PIC yet"
-#endif
-
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cache
-
-
- static FT_Error
- ftc_scaler_lookup_size( FTC_Manager manager,
- FTC_Scaler scaler,
- FT_Size *asize )
- {
- FT_Face face;
- FT_Size size = NULL;
- FT_Error error;
-
-
- error = FTC_Manager_LookupFace( manager, scaler->face_id, &face );
- if ( error )
- goto Exit;
-
- error = FT_New_Size( face, &size );
- if ( error )
- goto Exit;
-
- FT_Activate_Size( size );
-
- if ( scaler->pixel )
- error = FT_Set_Pixel_Sizes( face, scaler->width, scaler->height );
- else
- error = FT_Set_Char_Size( face,
- (FT_F26Dot6)scaler->width,
- (FT_F26Dot6)scaler->height,
- scaler->x_res,
- scaler->y_res );
- if ( error )
- {
- FT_Done_Size( size );
- size = NULL;
- }
-
- Exit:
- *asize = size;
- return error;
- }
-
-
- typedef struct FTC_SizeNodeRec_
- {
- FTC_MruNodeRec node;
- FT_Size size;
- FTC_ScalerRec scaler;
-
- } FTC_SizeNodeRec, *FTC_SizeNode;
-
-#define FTC_SIZE_NODE( x ) ( (FTC_SizeNode)( x ) )
-
-
- FT_CALLBACK_DEF( void )
- ftc_size_node_done( FTC_MruNode ftcnode,
- FT_Pointer data )
- {
- FTC_SizeNode node = (FTC_SizeNode)ftcnode;
- FT_Size size = node->size;
- FT_UNUSED( data );
-
-
- if ( size )
- FT_Done_Size( size );
- }
-
-
- FT_CALLBACK_DEF( FT_Bool )
- ftc_size_node_compare( FTC_MruNode ftcnode,
- FT_Pointer ftcscaler )
- {
- FTC_SizeNode node = (FTC_SizeNode)ftcnode;
- FTC_Scaler scaler = (FTC_Scaler)ftcscaler;
- FTC_Scaler scaler0 = &node->scaler;
-
-
- if ( FTC_SCALER_COMPARE( scaler0, scaler ) )
- {
- FT_Activate_Size( node->size );
- return 1;
- }
- return 0;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- ftc_size_node_init( FTC_MruNode ftcnode,
- FT_Pointer ftcscaler,
- FT_Pointer ftcmanager )
- {
- FTC_SizeNode node = (FTC_SizeNode)ftcnode;
- FTC_Scaler scaler = (FTC_Scaler)ftcscaler;
- FTC_Manager manager = (FTC_Manager)ftcmanager;
-
-
- node->scaler = scaler[0];
-
- return ftc_scaler_lookup_size( manager, scaler, &node->size );
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- ftc_size_node_reset( FTC_MruNode ftcnode,
- FT_Pointer ftcscaler,
- FT_Pointer ftcmanager )
- {
- FTC_SizeNode node = (FTC_SizeNode)ftcnode;
- FTC_Scaler scaler = (FTC_Scaler)ftcscaler;
- FTC_Manager manager = (FTC_Manager)ftcmanager;
-
-
- FT_Done_Size( node->size );
-
- node->scaler = scaler[0];
-
- return ftc_scaler_lookup_size( manager, scaler, &node->size );
- }
-
-
- static
- const FTC_MruListClassRec ftc_size_list_class =
- {
- sizeof ( FTC_SizeNodeRec ),
-
- ftc_size_node_compare, /* FTC_MruNode_CompareFunc node_compare */
- ftc_size_node_init, /* FTC_MruNode_InitFunc node_init */
- ftc_size_node_reset, /* FTC_MruNode_ResetFunc node_reset */
- ftc_size_node_done /* FTC_MruNode_DoneFunc node_done */
- };
-
-
- /* helper function used by ftc_face_node_done */
- static FT_Bool
- ftc_size_node_compare_faceid( FTC_MruNode ftcnode,
- FT_Pointer ftcface_id )
- {
- FTC_SizeNode node = (FTC_SizeNode)ftcnode;
- FTC_FaceID face_id = (FTC_FaceID)ftcface_id;
-
-
- return FT_BOOL( node->scaler.face_id == face_id );
- }
-
-
- /* documentation is in ftcache.h */
-
- FT_EXPORT_DEF( FT_Error )
- FTC_Manager_LookupSize( FTC_Manager manager,
- FTC_Scaler scaler,
- FT_Size *asize )
- {
- FT_Error error;
- FTC_MruNode mrunode;
-
-
- if ( !asize || !scaler )
- return FT_THROW( Invalid_Argument );
-
- *asize = NULL;
-
- if ( !manager )
- return FT_THROW( Invalid_Cache_Handle );
-
-#ifdef FTC_INLINE
-
- FTC_MRULIST_LOOKUP_CMP( &manager->sizes, scaler, ftc_size_node_compare,
- mrunode, error );
-
-#else
- error = FTC_MruList_Lookup( &manager->sizes, scaler, &mrunode );
-#endif
-
- if ( !error )
- *asize = FTC_SIZE_NODE( mrunode )->size;
-
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FACE MRU IMPLEMENTATION *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct FTC_FaceNodeRec_
- {
- FTC_MruNodeRec node;
- FTC_FaceID face_id;
- FT_Face face;
-
- } FTC_FaceNodeRec, *FTC_FaceNode;
-
-#define FTC_FACE_NODE( x ) ( ( FTC_FaceNode )( x ) )
-
-
- FT_CALLBACK_DEF( FT_Error )
- ftc_face_node_init( FTC_MruNode ftcnode,
- FT_Pointer ftcface_id,
- FT_Pointer ftcmanager )
- {
- FTC_FaceNode node = (FTC_FaceNode)ftcnode;
- FTC_FaceID face_id = (FTC_FaceID)ftcface_id;
- FTC_Manager manager = (FTC_Manager)ftcmanager;
- FT_Error error;
-
-
- node->face_id = face_id;
-
- error = manager->request_face( face_id,
- manager->library,
- manager->request_data,
- &node->face );
- if ( !error )
- {
- /* destroy initial size object; it will be re-created later */
- if ( node->face->size )
- FT_Done_Size( node->face->size );
- }
-
- return error;
- }
-
-
- FT_CALLBACK_DEF( void )
- ftc_face_node_done( FTC_MruNode ftcnode,
- FT_Pointer ftcmanager )
- {
- FTC_FaceNode node = (FTC_FaceNode)ftcnode;
- FTC_Manager manager = (FTC_Manager)ftcmanager;
-
-
- /* we must begin by removing all scalers for the target face */
- /* from the manager's list */
- FTC_MruList_RemoveSelection( &manager->sizes,
- ftc_size_node_compare_faceid,
- node->face_id );
-
- /* all right, we can discard the face now */
- FT_Done_Face( node->face );
- node->face = NULL;
- node->face_id = NULL;
- }
-
-
- FT_CALLBACK_DEF( FT_Bool )
- ftc_face_node_compare( FTC_MruNode ftcnode,
- FT_Pointer ftcface_id )
- {
- FTC_FaceNode node = (FTC_FaceNode)ftcnode;
- FTC_FaceID face_id = (FTC_FaceID)ftcface_id;
-
-
- return FT_BOOL( node->face_id == face_id );
- }
-
-
- static
- const FTC_MruListClassRec ftc_face_list_class =
- {
- sizeof ( FTC_FaceNodeRec),
-
- ftc_face_node_compare, /* FTC_MruNode_CompareFunc node_compare */
- ftc_face_node_init, /* FTC_MruNode_InitFunc node_init */
- NULL, /* FTC_MruNode_ResetFunc node_reset */
- ftc_face_node_done /* FTC_MruNode_DoneFunc node_done */
- };
-
-
- /* documentation is in ftcache.h */
-
- FT_EXPORT_DEF( FT_Error )
- FTC_Manager_LookupFace( FTC_Manager manager,
- FTC_FaceID face_id,
- FT_Face *aface )
- {
- FT_Error error;
- FTC_MruNode mrunode;
-
-
- if ( !aface )
- return FT_THROW( Invalid_Argument );
-
- *aface = NULL;
-
- if ( !manager )
- return FT_THROW( Invalid_Cache_Handle );
-
- /* we break encapsulation for the sake of speed */
-#ifdef FTC_INLINE
-
- FTC_MRULIST_LOOKUP_CMP( &manager->faces, face_id, ftc_face_node_compare,
- mrunode, error );
-
-#else
- error = FTC_MruList_Lookup( &manager->faces, face_id, &mrunode );
-#endif
-
- if ( !error )
- *aface = FTC_FACE_NODE( mrunode )->face;
-
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CACHE MANAGER ROUTINES *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* documentation is in ftcache.h */
-
- FT_EXPORT_DEF( FT_Error )
- FTC_Manager_New( FT_Library library,
- FT_UInt max_faces,
- FT_UInt max_sizes,
- FT_ULong max_bytes,
- FTC_Face_Requester requester,
- FT_Pointer req_data,
- FTC_Manager *amanager )
- {
- FT_Error error;
- FT_Memory memory;
- FTC_Manager manager = 0;
-
-
- if ( !library )
- return FT_THROW( Invalid_Library_Handle );
-
- if ( !amanager || !requester )
- return FT_THROW( Invalid_Argument );
-
- memory = library->memory;
-
- if ( FT_NEW( manager ) )
- goto Exit;
-
- if ( max_faces == 0 )
- max_faces = FTC_MAX_FACES_DEFAULT;
-
- if ( max_sizes == 0 )
- max_sizes = FTC_MAX_SIZES_DEFAULT;
-
- if ( max_bytes == 0 )
- max_bytes = FTC_MAX_BYTES_DEFAULT;
-
- manager->library = library;
- manager->memory = memory;
- manager->max_weight = max_bytes;
-
- manager->request_face = requester;
- manager->request_data = req_data;
-
- FTC_MruList_Init( &manager->faces,
- &ftc_face_list_class,
- max_faces,
- manager,
- memory );
-
- FTC_MruList_Init( &manager->sizes,
- &ftc_size_list_class,
- max_sizes,
- manager,
- memory );
-
- *amanager = manager;
-
- Exit:
- return error;
- }
-
-
- /* documentation is in ftcache.h */
-
- FT_EXPORT_DEF( void )
- FTC_Manager_Done( FTC_Manager manager )
- {
- FT_Memory memory;
- FT_UInt idx;
-
-
- if ( !manager || !manager->library )
- return;
-
- memory = manager->memory;
-
- /* now discard all caches */
- for (idx = manager->num_caches; idx-- > 0; )
- {
- FTC_Cache cache = manager->caches[idx];
-
-
- if ( cache )
- {
- cache->clazz.cache_done( cache );
- FT_FREE( cache );
- manager->caches[idx] = NULL;
- }
- }
- manager->num_caches = 0;
-
- /* discard faces and sizes */
- FTC_MruList_Done( &manager->sizes );
- FTC_MruList_Done( &manager->faces );
-
- manager->library = NULL;
- manager->memory = NULL;
-
- FT_FREE( manager );
- }
-
-
- /* documentation is in ftcache.h */
-
- FT_EXPORT_DEF( void )
- FTC_Manager_Reset( FTC_Manager manager )
- {
- if ( !manager )
- return;
-
- FTC_MruList_Reset( &manager->sizes );
- FTC_MruList_Reset( &manager->faces );
-
- FTC_Manager_FlushN( manager, manager->num_nodes );
- }
-
-
-#ifdef FT_DEBUG_ERROR
-
- static void
- FTC_Manager_Check( FTC_Manager manager )
- {
- FTC_Node node, first;
-
-
- first = manager->nodes_list;
-
- /* check node weights */
- if ( first )
- {
- FT_Offset weight = 0;
-
-
- node = first;
-
- do
- {
- FTC_Cache cache = manager->caches[node->cache_index];
-
-
- if ( (FT_UInt)node->cache_index >= manager->num_caches )
- FT_TRACE0(( "FTC_Manager_Check: invalid node (cache index = %ld\n",
- node->cache_index ));
- else
- weight += cache->clazz.node_weight( node, cache );
-
- node = FTC_NODE_NEXT( node );
-
- } while ( node != first );
-
- if ( weight != manager->cur_weight )
- FT_TRACE0(( "FTC_Manager_Check: invalid weight %ld instead of %ld\n",
- manager->cur_weight, weight ));
- }
-
- /* check circular list */
- if ( first )
- {
- FT_UFast count = 0;
-
-
- node = first;
- do
- {
- count++;
- node = FTC_NODE_NEXT( node );
-
- } while ( node != first );
-
- if ( count != manager->num_nodes )
- FT_TRACE0(( "FTC_Manager_Check:"
- " invalid cache node count %d instead of %d\n",
- manager->num_nodes, count ));
- }
- }
-
-#endif /* FT_DEBUG_ERROR */
-
-
- /* `Compress' the manager's data, i.e., get rid of old cache nodes */
- /* that are not referenced anymore in order to limit the total */
- /* memory used by the cache. */
-
- /* documentation is in ftcmanag.h */
-
- FT_LOCAL_DEF( void )
- FTC_Manager_Compress( FTC_Manager manager )
- {
- FTC_Node node, first;
-
-
- if ( !manager )
- return;
-
- first = manager->nodes_list;
-
-#ifdef FT_DEBUG_ERROR
- FTC_Manager_Check( manager );
-
- FT_TRACE0(( "compressing, weight = %ld, max = %ld, nodes = %d\n",
- manager->cur_weight, manager->max_weight,
- manager->num_nodes ));
-#endif
-
- if ( manager->cur_weight < manager->max_weight || !first )
- return;
-
- /* go to last node -- it's a circular list */
- node = FTC_NODE_PREV( first );
- do
- {
- FTC_Node prev;
-
-
- prev = ( node == first ) ? NULL : FTC_NODE_PREV( node );
-
- if ( node->ref_count <= 0 )
- ftc_node_destroy( node, manager );
-
- node = prev;
-
- } while ( node && manager->cur_weight > manager->max_weight );
- }
-
-
- /* documentation is in ftcmanag.h */
-
- FT_LOCAL_DEF( FT_Error )
- FTC_Manager_RegisterCache( FTC_Manager manager,
- FTC_CacheClass clazz,
- FTC_Cache *acache )
- {
- FT_Error error = FT_ERR( Invalid_Argument );
- FTC_Cache cache = NULL;
-
-
- if ( manager && clazz && acache )
- {
- FT_Memory memory = manager->memory;
-
-
- if ( manager->num_caches >= FTC_MAX_CACHES )
- {
- error = FT_THROW( Too_Many_Caches );
- FT_ERROR(( "FTC_Manager_RegisterCache:"
- " too many registered caches\n" ));
- goto Exit;
- }
-
- if ( !FT_ALLOC( cache, clazz->cache_size ) )
- {
- cache->manager = manager;
- cache->memory = memory;
- cache->clazz = clazz[0];
- cache->org_class = clazz;
-
- /* THIS IS VERY IMPORTANT! IT WILL WRETCH THE MANAGER */
- /* IF IT IS NOT SET CORRECTLY */
- cache->index = manager->num_caches;
-
- error = clazz->cache_init( cache );
- if ( error )
- {
- clazz->cache_done( cache );
- FT_FREE( cache );
- goto Exit;
- }
-
- manager->caches[manager->num_caches++] = cache;
- }
- }
-
- Exit:
- if ( acache )
- *acache = cache;
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_UInt )
- FTC_Manager_FlushN( FTC_Manager manager,
- FT_UInt count )
- {
- FTC_Node first = manager->nodes_list;
- FTC_Node node;
- FT_UInt result;
-
-
- /* try to remove `count' nodes from the list */
- if ( !first ) /* empty list! */
- return 0;
-
- /* go to last node - it's a circular list */
- node = FTC_NODE_PREV(first);
- for ( result = 0; result < count; )
- {
- FTC_Node prev = FTC_NODE_PREV( node );
-
-
- /* don't touch locked nodes */
- if ( node->ref_count <= 0 )
- {
- ftc_node_destroy( node, manager );
- result++;
- }
-
- if ( node == first )
- break;
-
- node = prev;
- }
- return result;
- }
-
-
- /* documentation is in ftcache.h */
-
- FT_EXPORT_DEF( void )
- FTC_Manager_RemoveFaceID( FTC_Manager manager,
- FTC_FaceID face_id )
- {
- FT_UInt nn;
-
-
- if ( !manager )
- return;
-
- /* this will remove all FTC_SizeNode that correspond to
- * the face_id as well
- */
- FTC_MruList_RemoveSelection( &manager->faces,
- ftc_face_node_compare,
- face_id );
-
- for ( nn = 0; nn < manager->num_caches; nn++ )
- FTC_Cache_RemoveFaceID( manager->caches[nn], face_id );
- }
-
-
- /* documentation is in ftcache.h */
-
- FT_EXPORT_DEF( void )
- FTC_Node_Unref( FTC_Node node,
- FTC_Manager manager )
- {
- if ( node &&
- manager &&
- (FT_UInt)node->cache_index < manager->num_caches )
- node->ref_count--;
- }
-
-
-/* END */
diff --git a/src/cache/ftcmanag.h b/src/cache/ftcmanag.h
deleted file mode 100644
index 556842e13..000000000
--- a/src/cache/ftcmanag.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcmanag.h */
-/* */
-/* FreeType Cache Manager (specification). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* A cache manager is in charge of the following: */
- /* */
- /* - Maintain a mapping between generic FTC_FaceIDs and live FT_Face */
- /* objects. The mapping itself is performed through a user-provided */
- /* callback. However, the manager maintains a small cache of FT_Face */
- /* and FT_Size objects in order to speed up things considerably. */
- /* */
- /* - Manage one or more cache objects. Each cache is in charge of */
- /* holding a varying number of `cache nodes'. Each cache node */
- /* represents a minimal amount of individually accessible cached */
- /* data. For example, a cache node can be an FT_Glyph image */
- /* containing a vector outline, or some glyph metrics, or anything */
- /* else. */
- /* */
- /* Each cache node has a certain size in bytes that is added to the */
- /* total amount of `cache memory' within the manager. */
- /* */
- /* All cache nodes are located in a global LRU list, where the oldest */
- /* node is at the tail of the list. */
- /* */
- /* Each node belongs to a single cache, and includes a reference */
- /* count to avoid destroying it (due to caching). */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /********* *********/
- /********* WARNING, THIS IS BETA CODE. *********/
- /********* *********/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
-#ifndef FTCMANAG_H_
-#define FTCMANAG_H_
-
-
-#include <ft2build.h>
-#include FT_CACHE_H
-#include "ftcmru.h"
-#include "ftccache.h"
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* cache_subsystem */
- /* */
- /*************************************************************************/
-
-
-#define FTC_MAX_FACES_DEFAULT 2
-#define FTC_MAX_SIZES_DEFAULT 4
-#define FTC_MAX_BYTES_DEFAULT 200000L /* ~200kByte by default */
-
- /* maximum number of caches registered in a single manager */
-#define FTC_MAX_CACHES 16
-
-
- typedef struct FTC_ManagerRec_
- {
- FT_Library library;
- FT_Memory memory;
-
- FTC_Node nodes_list;
- FT_Offset max_weight;
- FT_Offset cur_weight;
- FT_UInt num_nodes;
-
- FTC_Cache caches[FTC_MAX_CACHES];
- FT_UInt num_caches;
-
- FTC_MruListRec faces;
- FTC_MruListRec sizes;
-
- FT_Pointer request_data;
- FTC_Face_Requester request_face;
-
- } FTC_ManagerRec;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FTC_Manager_Compress */
- /* */
- /* <Description> */
- /* This function is used to check the state of the cache manager if */
- /* its `num_bytes' field is greater than its `max_bytes' field. It */
- /* will flush as many old cache nodes as possible (ignoring cache */
- /* nodes with a non-zero reference count). */
- /* */
- /* <InOut> */
- /* manager :: A handle to the cache manager. */
- /* */
- /* <Note> */
- /* Client applications should not call this function directly. It is */
- /* normally invoked by specific cache implementations. */
- /* */
- /* The reason this function is exported is to allow client-specific */
- /* cache classes. */
- /* */
- FT_LOCAL( void )
- FTC_Manager_Compress( FTC_Manager manager );
-
-
- /* try to flush `count' old nodes from the cache; return the number
- * of really flushed nodes
- */
- FT_LOCAL( FT_UInt )
- FTC_Manager_FlushN( FTC_Manager manager,
- FT_UInt count );
-
-
- /* this must be used internally for the moment */
- FT_LOCAL( FT_Error )
- FTC_Manager_RegisterCache( FTC_Manager manager,
- FTC_CacheClass clazz,
- FTC_Cache *acache );
-
- /* */
-
-#define FTC_SCALER_COMPARE( a, b ) \
- ( (a)->face_id == (b)->face_id && \
- (a)->width == (b)->width && \
- (a)->height == (b)->height && \
- ((a)->pixel != 0) == ((b)->pixel != 0) && \
- ( (a)->pixel || \
- ( (a)->x_res == (b)->x_res && \
- (a)->y_res == (b)->y_res ) ) )
-
-#define FTC_SCALER_HASH( q ) \
- ( FTC_FACE_ID_HASH( (q)->face_id ) + \
- (q)->width + (q)->height*7 + \
- ( (q)->pixel ? 0 : ( (q)->x_res*33 ^ (q)->y_res*61 ) ) )
-
- /* */
-
-FT_END_HEADER
-
-#endif /* FTCMANAG_H_ */
-
-
-/* END */
diff --git a/src/cache/ftcmru.c b/src/cache/ftcmru.c
deleted file mode 100644
index e293269f2..000000000
--- a/src/cache/ftcmru.c
+++ /dev/null
@@ -1,357 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcmru.c */
-/* */
-/* FreeType MRU support (body). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_CACHE_H
-#include "ftcmru.h"
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-
-#include "ftcerror.h"
-
-
- FT_LOCAL_DEF( void )
- FTC_MruNode_Prepend( FTC_MruNode *plist,
- FTC_MruNode node )
- {
- FTC_MruNode first = *plist;
-
-
- if ( first )
- {
- FTC_MruNode last = first->prev;
-
-
-#ifdef FT_DEBUG_ERROR
- {
- FTC_MruNode cnode = first;
-
-
- do
- {
- if ( cnode == node )
- {
- fprintf( stderr, "FTC_MruNode_Prepend: invalid action\n" );
- exit( 2 );
- }
- cnode = cnode->next;
-
- } while ( cnode != first );
- }
-#endif
-
- first->prev = node;
- last->next = node;
- node->next = first;
- node->prev = last;
- }
- else
- {
- node->next = node;
- node->prev = node;
- }
- *plist = node;
- }
-
-
- FT_LOCAL_DEF( void )
- FTC_MruNode_Up( FTC_MruNode *plist,
- FTC_MruNode node )
- {
- FTC_MruNode first = *plist;
-
-
- FT_ASSERT( first );
-
- if ( first != node )
- {
- FTC_MruNode prev, next, last;
-
-
-#ifdef FT_DEBUG_ERROR
- {
- FTC_MruNode cnode = first;
- do
- {
- if ( cnode == node )
- goto Ok;
- cnode = cnode->next;
-
- } while ( cnode != first );
-
- fprintf( stderr, "FTC_MruNode_Up: invalid action\n" );
- exit( 2 );
- Ok:
- }
-#endif
- prev = node->prev;
- next = node->next;
-
- prev->next = next;
- next->prev = prev;
-
- last = first->prev;
-
- last->next = node;
- first->prev = node;
-
- node->next = first;
- node->prev = last;
-
- *plist = node;
- }
- }
-
-
- FT_LOCAL_DEF( void )
- FTC_MruNode_Remove( FTC_MruNode *plist,
- FTC_MruNode node )
- {
- FTC_MruNode first = *plist;
- FTC_MruNode prev, next;
-
-
- FT_ASSERT( first );
-
-#ifdef FT_DEBUG_ERROR
- {
- FTC_MruNode cnode = first;
-
-
- do
- {
- if ( cnode == node )
- goto Ok;
- cnode = cnode->next;
-
- } while ( cnode != first );
-
- fprintf( stderr, "FTC_MruNode_Remove: invalid action\n" );
- exit( 2 );
- Ok:
- }
-#endif
-
- prev = node->prev;
- next = node->next;
-
- prev->next = next;
- next->prev = prev;
-
- if ( node == next )
- {
- FT_ASSERT( first == node );
- FT_ASSERT( prev == node );
-
- *plist = NULL;
- }
- else if ( node == first )
- *plist = next;
- }
-
-
- FT_LOCAL_DEF( void )
- FTC_MruList_Init( FTC_MruList list,
- FTC_MruListClass clazz,
- FT_UInt max_nodes,
- FT_Pointer data,
- FT_Memory memory )
- {
- list->num_nodes = 0;
- list->max_nodes = max_nodes;
- list->nodes = NULL;
- list->clazz = *clazz;
- list->data = data;
- list->memory = memory;
- }
-
-
- FT_LOCAL_DEF( void )
- FTC_MruList_Reset( FTC_MruList list )
- {
- while ( list->nodes )
- FTC_MruList_Remove( list, list->nodes );
-
- FT_ASSERT( list->num_nodes == 0 );
- }
-
-
- FT_LOCAL_DEF( void )
- FTC_MruList_Done( FTC_MruList list )
- {
- FTC_MruList_Reset( list );
- }
-
-
-#ifndef FTC_INLINE
- FT_LOCAL_DEF( FTC_MruNode )
- FTC_MruList_Find( FTC_MruList list,
- FT_Pointer key )
- {
- FTC_MruNode_CompareFunc compare = list->clazz.node_compare;
- FTC_MruNode first, node;
-
-
- first = list->nodes;
- node = NULL;
-
- if ( first )
- {
- node = first;
- do
- {
- if ( compare( node, key ) )
- {
- if ( node != first )
- FTC_MruNode_Up( &list->nodes, node );
-
- return node;
- }
-
- node = node->next;
-
- } while ( node != first);
- }
-
- return NULL;
- }
-#endif
-
- FT_LOCAL_DEF( FT_Error )
- FTC_MruList_New( FTC_MruList list,
- FT_Pointer key,
- FTC_MruNode *anode )
- {
- FT_Error error;
- FTC_MruNode node = NULL;
- FT_Memory memory = list->memory;
-
-
- if ( list->num_nodes >= list->max_nodes && list->max_nodes > 0 )
- {
- node = list->nodes->prev;
-
- FT_ASSERT( node );
-
- if ( list->clazz.node_reset )
- {
- FTC_MruNode_Up( &list->nodes, node );
-
- error = list->clazz.node_reset( node, key, list->data );
- if ( !error )
- goto Exit;
- }
-
- FTC_MruNode_Remove( &list->nodes, node );
- list->num_nodes--;
-
- if ( list->clazz.node_done )
- list->clazz.node_done( node, list->data );
- }
- else if ( FT_ALLOC( node, list->clazz.node_size ) )
- goto Exit;
-
- error = list->clazz.node_init( node, key, list->data );
- if ( error )
- goto Fail;
-
- FTC_MruNode_Prepend( &list->nodes, node );
- list->num_nodes++;
-
- Exit:
- *anode = node;
- return error;
-
- Fail:
- if ( list->clazz.node_done )
- list->clazz.node_done( node, list->data );
-
- FT_FREE( node );
- goto Exit;
- }
-
-
-#ifndef FTC_INLINE
- FT_LOCAL_DEF( FT_Error )
- FTC_MruList_Lookup( FTC_MruList list,
- FT_Pointer key,
- FTC_MruNode *anode )
- {
- FTC_MruNode node;
-
-
- node = FTC_MruList_Find( list, key );
- if ( !node )
- return FTC_MruList_New( list, key, anode );
-
- *anode = node;
- return 0;
- }
-#endif /* FTC_INLINE */
-
- FT_LOCAL_DEF( void )
- FTC_MruList_Remove( FTC_MruList list,
- FTC_MruNode node )
- {
- FTC_MruNode_Remove( &list->nodes, node );
- list->num_nodes--;
-
- {
- FT_Memory memory = list->memory;
-
-
- if ( list->clazz.node_done )
- list->clazz.node_done( node, list->data );
-
- FT_FREE( node );
- }
- }
-
-
- FT_LOCAL_DEF( void )
- FTC_MruList_RemoveSelection( FTC_MruList list,
- FTC_MruNode_CompareFunc selection,
- FT_Pointer key )
- {
- FTC_MruNode first, node, next;
-
-
- first = list->nodes;
- while ( first && ( !selection || selection( first, key ) ) )
- {
- FTC_MruList_Remove( list, first );
- first = list->nodes;
- }
-
- if ( first )
- {
- node = first->next;
- while ( node != first )
- {
- next = node->next;
-
- if ( selection( node, key ) )
- FTC_MruList_Remove( list, node );
-
- node = next;
- }
- }
- }
-
-
-/* END */
diff --git a/src/cache/ftcmru.h b/src/cache/ftcmru.h
deleted file mode 100644
index c4c330d55..000000000
--- a/src/cache/ftcmru.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcmru.h */
-/* */
-/* Simple MRU list-cache (specification). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* An MRU is a list that cannot hold more than a certain number of */
- /* elements (`max_elements'). All elements in the list are sorted in */
- /* least-recently-used order, i.e., the `oldest' element is at the tail */
- /* of the list. */
- /* */
- /* When doing a lookup (either through `Lookup()' or `Lookup_Node()'), */
- /* the list is searched for an element with the corresponding key. If */
- /* it is found, the element is moved to the head of the list and is */
- /* returned. */
- /* */
- /* If no corresponding element is found, the lookup routine will try to */
- /* obtain a new element with the relevant key. If the list is already */
- /* full, the oldest element from the list is discarded and replaced by a */
- /* new one; a new element is added to the list otherwise. */
- /* */
- /* Note that it is possible to pre-allocate the element list nodes. */
- /* This is handy if `max_elements' is sufficiently small, as it saves */
- /* allocations/releases during the lookup process. */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTCMRU_H_
-#define FTCMRU_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-#define xxFT_DEBUG_ERROR
-#define FTC_INLINE
-
-FT_BEGIN_HEADER
-
- typedef struct FTC_MruNodeRec_* FTC_MruNode;
-
- typedef struct FTC_MruNodeRec_
- {
- FTC_MruNode next;
- FTC_MruNode prev;
-
- } FTC_MruNodeRec;
-
-
- FT_LOCAL( void )
- FTC_MruNode_Prepend( FTC_MruNode *plist,
- FTC_MruNode node );
-
- FT_LOCAL( void )
- FTC_MruNode_Up( FTC_MruNode *plist,
- FTC_MruNode node );
-
- FT_LOCAL( void )
- FTC_MruNode_Remove( FTC_MruNode *plist,
- FTC_MruNode node );
-
-
- typedef struct FTC_MruListRec_* FTC_MruList;
-
- typedef struct FTC_MruListClassRec_ const * FTC_MruListClass;
-
-
- typedef FT_Bool
- (*FTC_MruNode_CompareFunc)( FTC_MruNode node,
- FT_Pointer key );
-
- typedef FT_Error
- (*FTC_MruNode_InitFunc)( FTC_MruNode node,
- FT_Pointer key,
- FT_Pointer data );
-
- typedef FT_Error
- (*FTC_MruNode_ResetFunc)( FTC_MruNode node,
- FT_Pointer key,
- FT_Pointer data );
-
- typedef void
- (*FTC_MruNode_DoneFunc)( FTC_MruNode node,
- FT_Pointer data );
-
-
- typedef struct FTC_MruListClassRec_
- {
- FT_Offset node_size;
-
- FTC_MruNode_CompareFunc node_compare;
- FTC_MruNode_InitFunc node_init;
- FTC_MruNode_ResetFunc node_reset;
- FTC_MruNode_DoneFunc node_done;
-
- } FTC_MruListClassRec;
-
-
- typedef struct FTC_MruListRec_
- {
- FT_UInt num_nodes;
- FT_UInt max_nodes;
- FTC_MruNode nodes;
- FT_Pointer data;
- FTC_MruListClassRec clazz;
- FT_Memory memory;
-
- } FTC_MruListRec;
-
-
- FT_LOCAL( void )
- FTC_MruList_Init( FTC_MruList list,
- FTC_MruListClass clazz,
- FT_UInt max_nodes,
- FT_Pointer data,
- FT_Memory memory );
-
- FT_LOCAL( void )
- FTC_MruList_Reset( FTC_MruList list );
-
-
- FT_LOCAL( void )
- FTC_MruList_Done( FTC_MruList list );
-
-
- FT_LOCAL( FT_Error )
- FTC_MruList_New( FTC_MruList list,
- FT_Pointer key,
- FTC_MruNode *anode );
-
- FT_LOCAL( void )
- FTC_MruList_Remove( FTC_MruList list,
- FTC_MruNode node );
-
- FT_LOCAL( void )
- FTC_MruList_RemoveSelection( FTC_MruList list,
- FTC_MruNode_CompareFunc selection,
- FT_Pointer key );
-
-
-#ifdef FTC_INLINE
-
-#define FTC_MRULIST_LOOKUP_CMP( list, key, compare, node, error ) \
- FT_BEGIN_STMNT \
- FTC_MruNode* _pfirst = &(list)->nodes; \
- FTC_MruNode_CompareFunc _compare = (FTC_MruNode_CompareFunc)(compare); \
- FTC_MruNode _first, _node; \
- \
- \
- error = FT_Err_Ok; \
- _first = *(_pfirst); \
- _node = NULL; \
- \
- if ( _first ) \
- { \
- _node = _first; \
- do \
- { \
- if ( _compare( _node, (key) ) ) \
- { \
- if ( _node != _first ) \
- FTC_MruNode_Up( _pfirst, _node ); \
- \
- node = _node; \
- goto MruOk_; \
- } \
- _node = _node->next; \
- \
- } while ( _node != _first); \
- } \
- \
- error = FTC_MruList_New( (list), (key), (FTC_MruNode*)(void*)&(node) ); \
- MruOk_: \
- ; \
- FT_END_STMNT
-
-#define FTC_MRULIST_LOOKUP( list, key, node, error ) \
- FTC_MRULIST_LOOKUP_CMP( list, key, (list)->clazz.node_compare, node, error )
-
-#else /* !FTC_INLINE */
-
- FT_LOCAL( FTC_MruNode )
- FTC_MruList_Find( FTC_MruList list,
- FT_Pointer key );
-
- FT_LOCAL( FT_Error )
- FTC_MruList_Lookup( FTC_MruList list,
- FT_Pointer key,
- FTC_MruNode *pnode );
-
-#define FTC_MRULIST_LOOKUP( list, key, node, error ) \
- error = FTC_MruList_Lookup( (list), (key), (FTC_MruNode*)&(node) )
-
-#endif /* !FTC_INLINE */
-
-
-#define FTC_MRULIST_LOOP( list, node ) \
- FT_BEGIN_STMNT \
- FTC_MruNode _first = (list)->nodes; \
- \
- \
- if ( _first ) \
- { \
- FTC_MruNode _node = _first; \
- \
- \
- do \
- { \
- *(FTC_MruNode*)&(node) = _node;
-
-
-#define FTC_MRULIST_LOOP_END() \
- _node = _node->next; \
- \
- } while ( _node != _first ); \
- } \
- FT_END_STMNT
-
- /* */
-
-FT_END_HEADER
-
-
-#endif /* FTCMRU_H_ */
-
-
-/* END */
diff --git a/src/cache/ftcsbits.c b/src/cache/ftcsbits.c
deleted file mode 100644
index 2f9336dec..000000000
--- a/src/cache/ftcsbits.c
+++ /dev/null
@@ -1,423 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcsbits.c */
-/* */
-/* FreeType sbits manager (body). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_CACHE_H
-#include "ftcsbits.h"
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_ERRORS_H
-
-#include "ftccback.h"
-#include "ftcerror.h"
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cache
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** SBIT CACHE NODES *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- static FT_Error
- ftc_sbit_copy_bitmap( FTC_SBit sbit,
- FT_Bitmap* bitmap,
- FT_Memory memory )
- {
- FT_Error error;
- FT_Int pitch = bitmap->pitch;
- FT_ULong size;
-
-
- if ( pitch < 0 )
- pitch = -pitch;
-
- size = (FT_ULong)pitch * bitmap->rows;
- if ( !size )
- return FT_Err_Ok;
-
- if ( !FT_ALLOC( sbit->buffer, size ) )
- FT_MEM_COPY( sbit->buffer, bitmap->buffer, size );
-
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- ftc_snode_free( FTC_Node ftcsnode,
- FTC_Cache cache )
- {
- FTC_SNode snode = (FTC_SNode)ftcsnode;
- FTC_SBit sbit = snode->sbits;
- FT_UInt count = snode->count;
- FT_Memory memory = cache->memory;
-
-
- for ( ; count > 0; sbit++, count-- )
- FT_FREE( sbit->buffer );
-
- FTC_GNode_Done( FTC_GNODE( snode ), cache );
-
- FT_FREE( snode );
- }
-
-
- FT_LOCAL_DEF( void )
- FTC_SNode_Free( FTC_SNode snode,
- FTC_Cache cache )
- {
- ftc_snode_free( FTC_NODE( snode ), cache );
- }
-
-
- /*
- * This function tries to load a small bitmap within a given FTC_SNode.
- * Note that it returns a non-zero error code _only_ in the case of
- * out-of-memory condition. For all other errors (e.g., corresponding
- * to a bad font file), this function will mark the sbit as `unavailable'
- * and return a value of 0.
- *
- * You should also read the comment within the @ftc_snode_compare
- * function below to see how out-of-memory is handled during a lookup.
- */
- static FT_Error
- ftc_snode_load( FTC_SNode snode,
- FTC_Manager manager,
- FT_UInt gindex,
- FT_ULong *asize )
- {
- FT_Error error;
- FTC_GNode gnode = FTC_GNODE( snode );
- FTC_Family family = gnode->family;
- FT_Memory memory = manager->memory;
- FT_Face face;
- FTC_SBit sbit;
- FTC_SFamilyClass clazz;
-
-
- if ( (FT_UInt)(gindex - gnode->gindex) >= snode->count )
- {
- FT_ERROR(( "ftc_snode_load: invalid glyph index" ));
- return FT_THROW( Invalid_Argument );
- }
-
- sbit = snode->sbits + ( gindex - gnode->gindex );
- clazz = (FTC_SFamilyClass)family->clazz;
-
- sbit->buffer = 0;
-
- error = clazz->family_load_glyph( family, gindex, manager, &face );
- if ( error )
- goto BadGlyph;
-
- {
- FT_Int temp;
- FT_GlyphSlot slot = face->glyph;
- FT_Bitmap* bitmap = &slot->bitmap;
- FT_Pos xadvance, yadvance; /* FT_GlyphSlot->advance.{x|y} */
-
-
- if ( slot->format != FT_GLYPH_FORMAT_BITMAP )
- {
- FT_TRACE0(( "ftc_snode_load:"
- " glyph loaded didn't return a bitmap\n" ));
- goto BadGlyph;
- }
-
- /* Check whether our values fit into 8-bit containers! */
- /* If this is not the case, our bitmap is too large */
- /* and we will leave it as `missing' with sbit.buffer = 0 */
-
-#define CHECK_CHAR( d ) ( temp = (FT_Char)d, (FT_Int) temp == (FT_Int) d )
-#define CHECK_BYTE( d ) ( temp = (FT_Byte)d, (FT_UInt)temp == (FT_UInt)d )
-
- /* horizontal advance in pixels */
- xadvance = ( slot->advance.x + 32 ) >> 6;
- yadvance = ( slot->advance.y + 32 ) >> 6;
-
- if ( !CHECK_BYTE( bitmap->rows ) ||
- !CHECK_BYTE( bitmap->width ) ||
- !CHECK_CHAR( bitmap->pitch ) ||
- !CHECK_CHAR( slot->bitmap_left ) ||
- !CHECK_CHAR( slot->bitmap_top ) ||
- !CHECK_CHAR( xadvance ) ||
- !CHECK_CHAR( yadvance ) )
- {
- FT_TRACE2(( "ftc_snode_load:"
- " glyph too large for small bitmap cache\n"));
- goto BadGlyph;
- }
-
- sbit->width = (FT_Byte)bitmap->width;
- sbit->height = (FT_Byte)bitmap->rows;
- sbit->pitch = (FT_Char)bitmap->pitch;
- sbit->left = (FT_Char)slot->bitmap_left;
- sbit->top = (FT_Char)slot->bitmap_top;
- sbit->xadvance = (FT_Char)xadvance;
- sbit->yadvance = (FT_Char)yadvance;
- sbit->format = (FT_Byte)bitmap->pixel_mode;
- sbit->max_grays = (FT_Byte)(bitmap->num_grays - 1);
-
- /* copy the bitmap into a new buffer -- ignore error */
- error = ftc_sbit_copy_bitmap( sbit, bitmap, memory );
-
- /* now, compute size */
- if ( asize )
- *asize = (FT_ULong)FT_ABS( sbit->pitch ) * sbit->height;
-
- } /* glyph loading successful */
-
- /* ignore the errors that might have occurred -- */
- /* we mark unloaded glyphs with `sbit.buffer == 0' */
- /* and `width == 255', `height == 0' */
- /* */
- if ( error && FT_ERR_NEQ( error, Out_Of_Memory ) )
- {
- BadGlyph:
- sbit->width = 255;
- sbit->height = 0;
- sbit->buffer = NULL;
- error = FT_Err_Ok;
- if ( asize )
- *asize = 0;
- }
-
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- FTC_SNode_New( FTC_SNode *psnode,
- FTC_GQuery gquery,
- FTC_Cache cache )
- {
- FT_Memory memory = cache->memory;
- FT_Error error;
- FTC_SNode snode = NULL;
- FT_UInt gindex = gquery->gindex;
- FTC_Family family = gquery->family;
-
- FTC_SFamilyClass clazz = FTC_CACHE_SFAMILY_CLASS( cache );
- FT_UInt total;
- FT_UInt node_count;
-
-
- total = clazz->family_get_count( family, cache->manager );
- if ( total == 0 || gindex >= total )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- if ( !FT_NEW( snode ) )
- {
- FT_UInt count, start;
-
-
- start = gindex - ( gindex % FTC_SBIT_ITEMS_PER_NODE );
- count = total - start;
- if ( count > FTC_SBIT_ITEMS_PER_NODE )
- count = FTC_SBIT_ITEMS_PER_NODE;
-
- FTC_GNode_Init( FTC_GNODE( snode ), start, family );
-
- snode->count = count;
- for ( node_count = 0; node_count < count; node_count++ )
- {
- snode->sbits[node_count].width = 255;
- }
-
- error = ftc_snode_load( snode,
- cache->manager,
- gindex,
- NULL );
- if ( error )
- {
- FTC_SNode_Free( snode, cache );
- snode = NULL;
- }
- }
-
- Exit:
- *psnode = snode;
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- ftc_snode_new( FTC_Node *ftcpsnode,
- FT_Pointer ftcgquery,
- FTC_Cache cache )
- {
- FTC_SNode *psnode = (FTC_SNode*)ftcpsnode;
- FTC_GQuery gquery = (FTC_GQuery)ftcgquery;
-
-
- return FTC_SNode_New( psnode, gquery, cache );
- }
-
-
- FT_LOCAL_DEF( FT_Offset )
- ftc_snode_weight( FTC_Node ftcsnode,
- FTC_Cache cache )
- {
- FTC_SNode snode = (FTC_SNode)ftcsnode;
- FT_UInt count = snode->count;
- FTC_SBit sbit = snode->sbits;
- FT_Int pitch;
- FT_Offset size;
-
- FT_UNUSED( cache );
-
-
- FT_ASSERT( snode->count <= FTC_SBIT_ITEMS_PER_NODE );
-
- /* the node itself */
- size = sizeof ( *snode );
-
- for ( ; count > 0; count--, sbit++ )
- {
- if ( sbit->buffer )
- {
- pitch = sbit->pitch;
- if ( pitch < 0 )
- pitch = -pitch;
-
- /* add the size of a given glyph image */
- size += (FT_Offset)pitch * sbit->height;
- }
- }
-
- return size;
- }
-
-
-#if 0
-
- FT_LOCAL_DEF( FT_Offset )
- FTC_SNode_Weight( FTC_SNode snode )
- {
- return ftc_snode_weight( FTC_NODE( snode ), NULL );
- }
-
-#endif /* 0 */
-
-
- FT_LOCAL_DEF( FT_Bool )
- ftc_snode_compare( FTC_Node ftcsnode,
- FT_Pointer ftcgquery,
- FTC_Cache cache,
- FT_Bool* list_changed )
- {
- FTC_SNode snode = (FTC_SNode)ftcsnode;
- FTC_GQuery gquery = (FTC_GQuery)ftcgquery;
- FTC_GNode gnode = FTC_GNODE( snode );
- FT_UInt gindex = gquery->gindex;
- FT_Bool result;
-
-
- if (list_changed)
- *list_changed = FALSE;
- result = FT_BOOL( gnode->family == gquery->family &&
- (FT_UInt)( gindex - gnode->gindex ) < snode->count );
- if ( result )
- {
- /* check if we need to load the glyph bitmap now */
- FTC_SBit sbit = snode->sbits + ( gindex - gnode->gindex );
-
-
- /*
- * The following code illustrates what to do when you want to
- * perform operations that may fail within a lookup function.
- *
- * Here, we want to load a small bitmap on-demand; we thus
- * need to call the `ftc_snode_load' function which may return
- * a non-zero error code only when we are out of memory (OOM).
- *
- * The correct thing to do is to use @FTC_CACHE_TRYLOOP and
- * @FTC_CACHE_TRYLOOP_END in order to implement a retry loop
- * that is capable of flushing the cache incrementally when
- * an OOM errors occur.
- *
- * However, we need to `lock' the node before this operation to
- * prevent it from being flushed within the loop.
- *
- * When we exit the loop, we unlock the node, then check the `error'
- * variable. If it is non-zero, this means that the cache was
- * completely flushed and that no usable memory was found to load
- * the bitmap.
- *
- * We then prefer to return a value of 0 (i.e., NO MATCH). This
- * ensures that the caller will try to allocate a new node.
- * This operation consequently _fail_ and the lookup function
- * returns the appropriate OOM error code.
- *
- * Note that `buffer == NULL && width == 255' is a hack used to
- * tag `unavailable' bitmaps in the array. We should never try
- * to load these.
- *
- */
-
- if ( !sbit->buffer && sbit->width == 255 )
- {
- FT_ULong size;
- FT_Error error;
-
-
- ftcsnode->ref_count++; /* lock node to prevent flushing */
- /* in retry loop */
-
- FTC_CACHE_TRYLOOP( cache )
- {
- error = ftc_snode_load( snode, cache->manager, gindex, &size );
- }
- FTC_CACHE_TRYLOOP_END( list_changed );
-
- ftcsnode->ref_count--; /* unlock the node */
-
- if ( error )
- result = 0;
- else
- cache->manager->cur_weight += size;
- }
- }
-
- return result;
- }
-
-
-#ifdef FTC_INLINE
-
- FT_LOCAL_DEF( FT_Bool )
- FTC_SNode_Compare( FTC_SNode snode,
- FTC_GQuery gquery,
- FTC_Cache cache,
- FT_Bool* list_changed )
- {
- return ftc_snode_compare( FTC_NODE( snode ), gquery,
- cache, list_changed );
- }
-
-#endif
-
-/* END */
diff --git a/src/cache/ftcsbits.h b/src/cache/ftcsbits.h
deleted file mode 100644
index 1e15ce976..000000000
--- a/src/cache/ftcsbits.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcsbits.h */
-/* */
-/* A small-bitmap cache (specification). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTCSBITS_H_
-#define FTCSBITS_H_
-
-
-#include <ft2build.h>
-#include FT_CACHE_H
-#include "ftcglyph.h"
-
-
-FT_BEGIN_HEADER
-
-#define FTC_SBIT_ITEMS_PER_NODE 16
-
- typedef struct FTC_SNodeRec_
- {
- FTC_GNodeRec gnode;
- FT_UInt count;
- FTC_SBitRec sbits[FTC_SBIT_ITEMS_PER_NODE];
-
- } FTC_SNodeRec, *FTC_SNode;
-
-
-#define FTC_SNODE( x ) ( (FTC_SNode)( x ) )
-#define FTC_SNODE_GINDEX( x ) FTC_GNODE( x )->gindex
-#define FTC_SNODE_FAMILY( x ) FTC_GNODE( x )->family
-
- typedef FT_UInt
- (*FTC_SFamily_GetCountFunc)( FTC_Family family,
- FTC_Manager manager );
-
- typedef FT_Error
- (*FTC_SFamily_LoadGlyphFunc)( FTC_Family family,
- FT_UInt gindex,
- FTC_Manager manager,
- FT_Face *aface );
-
- typedef struct FTC_SFamilyClassRec_
- {
- FTC_MruListClassRec clazz;
- FTC_SFamily_GetCountFunc family_get_count;
- FTC_SFamily_LoadGlyphFunc family_load_glyph;
-
- } FTC_SFamilyClassRec;
-
- typedef const FTC_SFamilyClassRec* FTC_SFamilyClass;
-
-#define FTC_SFAMILY_CLASS( x ) ((FTC_SFamilyClass)(x))
-
-#define FTC_CACHE_SFAMILY_CLASS( x ) \
- FTC_SFAMILY_CLASS( FTC_CACHE_GCACHE_CLASS( x )->family_class )
-
-
- FT_LOCAL( void )
- FTC_SNode_Free( FTC_SNode snode,
- FTC_Cache cache );
-
- FT_LOCAL( FT_Error )
- FTC_SNode_New( FTC_SNode *psnode,
- FTC_GQuery gquery,
- FTC_Cache cache );
-
-#if 0
- FT_LOCAL( FT_ULong )
- FTC_SNode_Weight( FTC_SNode inode );
-#endif
-
-
-#ifdef FTC_INLINE
-
- FT_LOCAL( FT_Bool )
- FTC_SNode_Compare( FTC_SNode snode,
- FTC_GQuery gquery,
- FTC_Cache cache,
- FT_Bool* list_changed);
-
-#endif
-
- /* */
-
-FT_END_HEADER
-
-#endif /* FTCSBITS_H_ */
-
-
-/* END */
diff --git a/src/cache/rules.mk b/src/cache/rules.mk
deleted file mode 100644
index 620468950..000000000
--- a/src/cache/rules.mk
+++ /dev/null
@@ -1,85 +0,0 @@
-#
-# FreeType 2 Cache configuration rules
-#
-
-
-# Copyright 2000-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# Cache driver directory
-#
-CACHE_DIR := $(SRC_DIR)/cache
-
-
-# compilation flags for the driver
-#
-CACHE_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(CACHE_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# Cache driver sources (i.e., C files)
-#
-CACHE_DRV_SRC := $(CACHE_DIR)/ftcbasic.c \
- $(CACHE_DIR)/ftccache.c \
- $(CACHE_DIR)/ftccmap.c \
- $(CACHE_DIR)/ftcglyph.c \
- $(CACHE_DIR)/ftcimage.c \
- $(CACHE_DIR)/ftcmanag.c \
- $(CACHE_DIR)/ftcmru.c \
- $(CACHE_DIR)/ftcsbits.c
-
-
-# Cache driver headers
-#
-CACHE_DRV_H := $(CACHE_DIR)/ftccache.h \
- $(CACHE_DIR)/ftccback.h \
- $(CACHE_DIR)/ftcerror.h \
- $(CACHE_DIR)/ftcglyph.h \
- $(CACHE_DIR)/ftcimage.h \
- $(CACHE_DIR)/ftcmanag.h \
- $(CACHE_DIR)/ftcmru.h \
- $(CACHE_DIR)/ftcsbits.h
-
-
-# Cache driver object(s)
-#
-# CACHE_DRV_OBJ_M is used during `multi' builds.
-# CACHE_DRV_OBJ_S is used during `single' builds.
-#
-CACHE_DRV_OBJ_M := $(CACHE_DRV_SRC:$(CACHE_DIR)/%.c=$(OBJ_DIR)/%.$O)
-CACHE_DRV_OBJ_S := $(OBJ_DIR)/ftcache.$O
-
-# Cache driver source file for single build
-#
-CACHE_DRV_SRC_S := $(CACHE_DIR)/ftcache.c
-
-
-# Cache driver - single object
-#
-$(CACHE_DRV_OBJ_S): $(CACHE_DRV_SRC_S) $(CACHE_DRV_SRC) \
- $(FREETYPE_H) $(CACHE_DRV_H)
- $(CACHE_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(CACHE_DRV_SRC_S))
-
-
-# Cache driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(CACHE_DIR)/%.c $(FREETYPE_H) $(CACHE_DRV_H)
- $(CACHE_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(CACHE_DRV_OBJ_S)
-DRV_OBJS_M += $(CACHE_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/cff/Jamfile b/src/cff/Jamfile
deleted file mode 100644
index e6dd05fc1..000000000
--- a/src/cff/Jamfile
+++ /dev/null
@@ -1,45 +0,0 @@
-# FreeType 2 src/cff Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) cff ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = cffcmap
- cffdrivr
- cffgload
- cffload
- cffobjs
- cffparse
- cffpic
- cf2arrst
- cf2blues
- cf2error
- cf2font
- cf2ft
- cf2hints
- cf2intrp
- cf2read
- cf2stack
- ;
- }
- else
- {
- _sources = cff ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/cff Jamfile
diff --git a/src/cff/cf2arrst.c b/src/cff/cf2arrst.c
deleted file mode 100644
index 6796450fe..000000000
--- a/src/cff/cf2arrst.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2arrst.c */
-/* */
-/* Adobe's code for Array Stacks (body). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2glue.h"
-#include "cf2arrst.h"
-
-#include "cf2error.h"
-
-
- /*
- * CF2_ArrStack uses an error pointer, to enable shared errors.
- * Shared errors are necessary when multiple objects allow the program
- * to continue after detecting errors. Only the first error should be
- * recorded.
- */
-
- FT_LOCAL_DEF( void )
- cf2_arrstack_init( CF2_ArrStack arrstack,
- FT_Memory memory,
- FT_Error* error,
- size_t sizeItem )
- {
- FT_ASSERT( arrstack );
-
- /* initialize the structure */
- arrstack->memory = memory;
- arrstack->error = error;
- arrstack->sizeItem = sizeItem;
- arrstack->allocated = 0;
- arrstack->chunk = 10; /* chunks of 10 items */
- arrstack->count = 0;
- arrstack->totalSize = 0;
- arrstack->ptr = NULL;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_arrstack_finalize( CF2_ArrStack arrstack )
- {
- FT_Memory memory = arrstack->memory; /* for FT_FREE */
-
-
- FT_ASSERT( arrstack );
-
- arrstack->allocated = 0;
- arrstack->count = 0;
- arrstack->totalSize = 0;
-
- /* free the data buffer */
- FT_FREE( arrstack->ptr );
- }
-
-
- /* allocate or reallocate the buffer size; */
- /* return false on memory error */
- static FT_Bool
- cf2_arrstack_setNumElements( CF2_ArrStack arrstack,
- size_t numElements )
- {
- FT_ASSERT( arrstack );
-
- {
- FT_Error error = FT_Err_Ok; /* for FT_REALLOC */
- FT_Memory memory = arrstack->memory; /* for FT_REALLOC */
-
- size_t newSize = numElements * arrstack->sizeItem;
-
-
- if ( numElements > FT_LONG_MAX / arrstack->sizeItem )
- goto exit;
-
-
- FT_ASSERT( newSize > 0 ); /* avoid realloc with zero size */
-
- if ( !FT_REALLOC( arrstack->ptr, arrstack->totalSize, newSize ) )
- {
- arrstack->allocated = numElements;
- arrstack->totalSize = newSize;
-
- if ( arrstack->count > numElements )
- {
- /* we truncated the list! */
- CF2_SET_ERROR( arrstack->error, Stack_Overflow );
- arrstack->count = numElements;
- return FALSE;
- }
-
- return TRUE; /* success */
- }
- }
-
- exit:
- /* if there's not already an error, store this one */
- CF2_SET_ERROR( arrstack->error, Out_Of_Memory );
-
- return FALSE;
- }
-
-
- /* set the count, ensuring allocation is sufficient */
- FT_LOCAL_DEF( void )
- cf2_arrstack_setCount( CF2_ArrStack arrstack,
- size_t numElements )
- {
- FT_ASSERT( arrstack );
-
- if ( numElements > arrstack->allocated )
- {
- /* expand the allocation first */
- if ( !cf2_arrstack_setNumElements( arrstack, numElements ) )
- return;
- }
-
- arrstack->count = numElements;
- }
-
-
- /* clear the count */
- FT_LOCAL_DEF( void )
- cf2_arrstack_clear( CF2_ArrStack arrstack )
- {
- FT_ASSERT( arrstack );
-
- arrstack->count = 0;
- }
-
-
- /* current number of items */
- FT_LOCAL_DEF( size_t )
- cf2_arrstack_size( const CF2_ArrStack arrstack )
- {
- FT_ASSERT( arrstack );
-
- return arrstack->count;
- }
-
-
- FT_LOCAL_DEF( void* )
- cf2_arrstack_getBuffer( const CF2_ArrStack arrstack )
- {
- FT_ASSERT( arrstack );
-
- return arrstack->ptr;
- }
-
-
- /* return pointer to the given element */
- FT_LOCAL_DEF( void* )
- cf2_arrstack_getPointer( const CF2_ArrStack arrstack,
- size_t idx )
- {
- void* newPtr;
-
-
- FT_ASSERT( arrstack );
-
- if ( idx >= arrstack->count )
- {
- /* overflow */
- CF2_SET_ERROR( arrstack->error, Stack_Overflow );
- idx = 0; /* choose safe default */
- }
-
- newPtr = (FT_Byte*)arrstack->ptr + idx * arrstack->sizeItem;
-
- return newPtr;
- }
-
-
- /* push (append) an element at the end of the list; */
- /* return false on memory error */
- /* TODO: should there be a length param for extra checking? */
- FT_LOCAL_DEF( void )
- cf2_arrstack_push( CF2_ArrStack arrstack,
- const void* ptr )
- {
- FT_ASSERT( arrstack );
-
- if ( arrstack->count == arrstack->allocated )
- {
- /* grow the buffer by one chunk */
- if ( !cf2_arrstack_setNumElements(
- arrstack, arrstack->allocated + arrstack->chunk ) )
- {
- /* on error, ignore the push */
- return;
- }
- }
-
- FT_ASSERT( ptr );
-
- {
- size_t offset = arrstack->count * arrstack->sizeItem;
- void* newPtr = (FT_Byte*)arrstack->ptr + offset;
-
-
- FT_MEM_COPY( newPtr, ptr, arrstack->sizeItem );
- arrstack->count += 1;
- }
- }
-
-
-/* END */
diff --git a/src/cff/cf2arrst.h b/src/cff/cf2arrst.h
deleted file mode 100644
index 3c21a3b67..000000000
--- a/src/cff/cf2arrst.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2arrst.h */
-/* */
-/* Adobe's code for Array Stacks (specification). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CF2ARRST_H_
-#define CF2ARRST_H_
-
-
-#include "cf2error.h"
-
-
-FT_BEGIN_HEADER
-
-
- /* need to define the struct here (not opaque) so it can be allocated by */
- /* clients */
- typedef struct CF2_ArrStackRec_
- {
- FT_Memory memory;
- FT_Error* error;
-
- size_t sizeItem; /* bytes per element */
- size_t allocated; /* items allocated */
- size_t chunk; /* allocation increment in items */
- size_t count; /* number of elements allocated */
- size_t totalSize; /* total bytes allocated */
-
- void* ptr; /* ptr to data */
-
- } CF2_ArrStackRec, *CF2_ArrStack;
-
-
- FT_LOCAL( void )
- cf2_arrstack_init( CF2_ArrStack arrstack,
- FT_Memory memory,
- FT_Error* error,
- size_t sizeItem );
- FT_LOCAL( void )
- cf2_arrstack_finalize( CF2_ArrStack arrstack );
-
- FT_LOCAL( void )
- cf2_arrstack_setCount( CF2_ArrStack arrstack,
- size_t numElements );
- FT_LOCAL( void )
- cf2_arrstack_clear( CF2_ArrStack arrstack );
- FT_LOCAL( size_t )
- cf2_arrstack_size( const CF2_ArrStack arrstack );
-
- FT_LOCAL( void* )
- cf2_arrstack_getBuffer( const CF2_ArrStack arrstack );
- FT_LOCAL( void* )
- cf2_arrstack_getPointer( const CF2_ArrStack arrstack,
- size_t idx );
-
- FT_LOCAL( void )
- cf2_arrstack_push( CF2_ArrStack arrstack,
- const void* ptr );
-
-
-FT_END_HEADER
-
-
-#endif /* CF2ARRST_H_ */
-
-
-/* END */
diff --git a/src/cff/cf2blues.c b/src/cff/cf2blues.c
deleted file mode 100644
index f5b44b21c..000000000
--- a/src/cff/cf2blues.c
+++ /dev/null
@@ -1,580 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2blues.c */
-/* */
-/* Adobe's code for handling Blue Zones (body). */
-/* */
-/* Copyright 2009-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2blues.h"
-#include "cf2hints.h"
-#include "cf2font.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cf2blues
-
-
- /*
- * For blue values, the FreeType parser produces an array of integers,
- * while the Adobe CFF engine produces an array of fixed.
- * Define a macro to convert FreeType to fixed.
- */
-#define cf2_blueToFixed( x ) cf2_intToFixed( x )
-
-
- FT_LOCAL_DEF( void )
- cf2_blues_init( CF2_Blues blues,
- CF2_Font font )
- {
- /* pointer to parsed font object */
- CFF_Decoder* decoder = font->decoder;
-
- CF2_Fixed zoneHeight;
- CF2_Fixed maxZoneHeight = 0;
- CF2_Fixed csUnitsPerPixel;
-
- size_t numBlueValues;
- size_t numOtherBlues;
- size_t numFamilyBlues;
- size_t numFamilyOtherBlues;
-
- FT_Pos* blueValues;
- FT_Pos* otherBlues;
- FT_Pos* familyBlues;
- FT_Pos* familyOtherBlues;
-
- size_t i;
- CF2_Fixed emBoxBottom, emBoxTop;
-
-#if 0
- CF2_Int unitsPerEm = font->unitsPerEm;
-
-
- if ( unitsPerEm == 0 )
- unitsPerEm = 1000;
-#endif
-
- FT_ZERO( blues );
- blues->scale = font->innerTransform.d;
-
- cf2_getBlueMetrics( decoder,
- &blues->blueScale,
- &blues->blueShift,
- &blues->blueFuzz );
-
- cf2_getBlueValues( decoder, &numBlueValues, &blueValues );
- cf2_getOtherBlues( decoder, &numOtherBlues, &otherBlues );
- cf2_getFamilyBlues( decoder, &numFamilyBlues, &familyBlues );
- cf2_getFamilyOtherBlues( decoder, &numFamilyOtherBlues, &familyOtherBlues );
-
- /*
- * synthetic em box hint heuristic
- *
- * Apply this when ideographic dictionary (LanguageGroup 1) has no
- * real alignment zones. Adobe tools generate dummy zones at -250 and
- * 1100 for a 1000 unit em. Fonts with ICF-based alignment zones
- * should not enable the heuristic. When the heuristic is enabled,
- * the font's blue zones are ignored.
- *
- */
-
- /* get em box from OS/2 typoAscender/Descender */
- /* TODO: FreeType does not parse these metrics. Skip them for now. */
-#if 0
- FCM_getHorizontalLineMetrics( &e,
- font->font,
- &ascender,
- &descender,
- &linegap );
- if ( ascender - descender == unitsPerEm )
- {
- emBoxBottom = cf2_intToFixed( descender );
- emBoxTop = cf2_intToFixed( ascender );
- }
- else
-#endif
- {
- emBoxBottom = CF2_ICF_Bottom;
- emBoxTop = CF2_ICF_Top;
- }
-
- if ( cf2_getLanguageGroup( decoder ) == 1 &&
- ( numBlueValues == 0 ||
- ( numBlueValues == 4 &&
- cf2_blueToFixed( blueValues[0] ) < emBoxBottom &&
- cf2_blueToFixed( blueValues[1] ) < emBoxBottom &&
- cf2_blueToFixed( blueValues[2] ) > emBoxTop &&
- cf2_blueToFixed( blueValues[3] ) > emBoxTop ) ) )
- {
- /*
- * Construct hint edges suitable for synthetic ghost hints at top
- * and bottom of em box. +-CF2_MIN_COUNTER allows for unhinted
- * features above or below the last hinted edge. This also gives a
- * net 1 pixel boost to the height of ideographic glyphs.
- *
- * Note: Adjust synthetic hints outward by epsilon (0x.0001) to
- * avoid interference. E.g., some fonts have real hints at
- * 880 and -120.
- */
-
- blues->emBoxBottomEdge.csCoord = emBoxBottom - CF2_FIXED_EPSILON;
- blues->emBoxBottomEdge.dsCoord = cf2_fixedRound(
- FT_MulFix(
- blues->emBoxBottomEdge.csCoord,
- blues->scale ) ) -
- CF2_MIN_COUNTER;
- blues->emBoxBottomEdge.scale = blues->scale;
- blues->emBoxBottomEdge.flags = CF2_GhostBottom |
- CF2_Locked |
- CF2_Synthetic;
-
- blues->emBoxTopEdge.csCoord = emBoxTop + CF2_FIXED_EPSILON +
- 2 * font->darkenY;
- blues->emBoxTopEdge.dsCoord = cf2_fixedRound(
- FT_MulFix(
- blues->emBoxTopEdge.csCoord,
- blues->scale ) ) +
- CF2_MIN_COUNTER;
- blues->emBoxTopEdge.scale = blues->scale;
- blues->emBoxTopEdge.flags = CF2_GhostTop |
- CF2_Locked |
- CF2_Synthetic;
-
- blues->doEmBoxHints = TRUE; /* enable the heuristic */
-
- return;
- }
-
- /* copy `BlueValues' and `OtherBlues' to a combined array of top and */
- /* bottom zones */
- for ( i = 0; i < numBlueValues; i += 2 )
- {
- blues->zone[blues->count].csBottomEdge =
- cf2_blueToFixed( blueValues[i] );
- blues->zone[blues->count].csTopEdge =
- cf2_blueToFixed( blueValues[i + 1] );
-
- zoneHeight = SUB_INT32( blues->zone[blues->count].csTopEdge,
- blues->zone[blues->count].csBottomEdge );
-
- if ( zoneHeight < 0 )
- {
- FT_TRACE4(( "cf2_blues_init: ignoring negative zone height\n" ));
- continue; /* reject this zone */
- }
-
- if ( zoneHeight > maxZoneHeight )
- {
- /* take maximum before darkening adjustment */
- /* so overshoot suppression point doesn't change */
- maxZoneHeight = zoneHeight;
- }
-
- /* adjust both edges of top zone upward by twice darkening amount */
- if ( i != 0 )
- {
- blues->zone[blues->count].csTopEdge += 2 * font->darkenY;
- blues->zone[blues->count].csBottomEdge += 2 * font->darkenY;
- }
-
- /* first `BlueValue' is bottom zone; others are top */
- if ( i == 0 )
- {
- blues->zone[blues->count].bottomZone =
- TRUE;
- blues->zone[blues->count].csFlatEdge =
- blues->zone[blues->count].csTopEdge;
- }
- else
- {
- blues->zone[blues->count].bottomZone =
- FALSE;
- blues->zone[blues->count].csFlatEdge =
- blues->zone[blues->count].csBottomEdge;
- }
-
- blues->count += 1;
- }
-
- for ( i = 0; i < numOtherBlues; i += 2 )
- {
- blues->zone[blues->count].csBottomEdge =
- cf2_blueToFixed( otherBlues[i] );
- blues->zone[blues->count].csTopEdge =
- cf2_blueToFixed( otherBlues[i + 1] );
-
- zoneHeight = SUB_INT32( blues->zone[blues->count].csTopEdge,
- blues->zone[blues->count].csBottomEdge );
-
- if ( zoneHeight < 0 )
- {
- FT_TRACE4(( "cf2_blues_init: ignoring negative zone height\n" ));
- continue; /* reject this zone */
- }
-
- if ( zoneHeight > maxZoneHeight )
- {
- /* take maximum before darkening adjustment */
- /* so overshoot suppression point doesn't change */
- maxZoneHeight = zoneHeight;
- }
-
- /* Note: bottom zones are not adjusted for darkening amount */
-
- /* all OtherBlues are bottom zone */
- blues->zone[blues->count].bottomZone =
- TRUE;
- blues->zone[blues->count].csFlatEdge =
- blues->zone[blues->count].csTopEdge;
-
- blues->count += 1;
- }
-
- /* Adjust for FamilyBlues */
-
- /* Search for the nearest flat edge in `FamilyBlues' or */
- /* `FamilyOtherBlues'. According to the Black Book, any matching edge */
- /* must be within one device pixel */
-
- csUnitsPerPixel = FT_DivFix( cf2_intToFixed( 1 ), blues->scale );
-
- /* loop on all zones in this font */
- for ( i = 0; i < blues->count; i++ )
- {
- size_t j;
- CF2_Fixed minDiff;
- CF2_Fixed flatFamilyEdge, diff;
- /* value for this font */
- CF2_Fixed flatEdge = blues->zone[i].csFlatEdge;
-
-
- if ( blues->zone[i].bottomZone )
- {
- /* In a bottom zone, the top edge is the flat edge. */
- /* Search `FamilyOtherBlues' for bottom zones; look for closest */
- /* Family edge that is within the one pixel threshold. */
-
- minDiff = CF2_FIXED_MAX;
-
- for ( j = 0; j < numFamilyOtherBlues; j += 2 )
- {
- /* top edge */
- flatFamilyEdge = cf2_blueToFixed( familyOtherBlues[j + 1] );
-
- diff = cf2_fixedAbs( SUB_INT32( flatEdge, flatFamilyEdge ) );
-
- if ( diff < minDiff && diff < csUnitsPerPixel )
- {
- blues->zone[i].csFlatEdge = flatFamilyEdge;
- minDiff = diff;
-
- if ( diff == 0 )
- break;
- }
- }
-
- /* check the first member of FamilyBlues, which is a bottom zone */
- if ( numFamilyBlues >= 2 )
- {
- /* top edge */
- flatFamilyEdge = cf2_blueToFixed( familyBlues[1] );
-
- diff = cf2_fixedAbs( SUB_INT32( flatEdge, flatFamilyEdge ) );
-
- if ( diff < minDiff && diff < csUnitsPerPixel )
- blues->zone[i].csFlatEdge = flatFamilyEdge;
- }
- }
- else
- {
- /* In a top zone, the bottom edge is the flat edge. */
- /* Search `FamilyBlues' for top zones; skip first zone, which is a */
- /* bottom zone; look for closest Family edge that is within the */
- /* one pixel threshold */
-
- minDiff = CF2_FIXED_MAX;
-
- for ( j = 2; j < numFamilyBlues; j += 2 )
- {
- /* bottom edge */
- flatFamilyEdge = cf2_blueToFixed( familyBlues[j] );
-
- /* adjust edges of top zone upward by twice darkening amount */
- flatFamilyEdge += 2 * font->darkenY; /* bottom edge */
-
- diff = cf2_fixedAbs( SUB_INT32( flatEdge, flatFamilyEdge ) );
-
- if ( diff < minDiff && diff < csUnitsPerPixel )
- {
- blues->zone[i].csFlatEdge = flatFamilyEdge;
- minDiff = diff;
-
- if ( diff == 0 )
- break;
- }
- }
- }
- }
-
- /* TODO: enforce separation of zones, including BlueFuzz */
-
- /* Adjust BlueScale; similar to AdjustBlueScale() in coretype */
- /* `bcsetup.c'. */
-
- if ( maxZoneHeight > 0 )
- {
- if ( blues->blueScale > FT_DivFix( cf2_intToFixed( 1 ),
- maxZoneHeight ) )
- {
- /* clamp at maximum scale */
- blues->blueScale = FT_DivFix( cf2_intToFixed( 1 ),
- maxZoneHeight );
- }
-
- /*
- * TODO: Revisit the bug fix for 613448. The minimum scale
- * requirement catches a number of library fonts. For
- * example, with default BlueScale (.039625) and 0.4 minimum,
- * the test below catches any font with maxZoneHeight < 10.1.
- * There are library fonts ranging from 2 to 10 that get
- * caught, including e.g., Eurostile LT Std Medium with
- * maxZoneHeight of 6.
- *
- */
-#if 0
- if ( blueScale < .4 / maxZoneHeight )
- {
- tetraphilia_assert( 0 );
- /* clamp at minimum scale, per bug 0613448 fix */
- blueScale = .4 / maxZoneHeight;
- }
-#endif
-
- }
-
- /*
- * Suppress overshoot and boost blue zones at small sizes. Boost
- * amount varies linearly from 0.5 pixel near 0 to 0 pixel at
- * blueScale cutoff.
- * Note: This boost amount is different from the coretype heuristic.
- *
- */
-
- if ( blues->scale < blues->blueScale )
- {
- blues->suppressOvershoot = TRUE;
-
- /* Change rounding threshold for `dsFlatEdge'. */
- /* Note: constant changed from 0.5 to 0.6 to avoid a problem with */
- /* 10ppem Arial */
-
- blues->boost = cf2_doubleToFixed( .6 ) -
- FT_MulDiv( cf2_doubleToFixed ( .6 ),
- blues->scale,
- blues->blueScale );
- if ( blues->boost > 0x7FFF )
- {
- /* boost must remain less than 0.5, or baseline could go negative */
- blues->boost = 0x7FFF;
- }
- }
-
- /* boost and darkening have similar effects; don't do both */
- if ( font->stemDarkened )
- blues->boost = 0;
-
- /* set device space alignment for each zone; */
- /* apply boost amount before rounding flat edge */
-
- for ( i = 0; i < blues->count; i++ )
- {
- if ( blues->zone[i].bottomZone )
- blues->zone[i].dsFlatEdge = cf2_fixedRound(
- FT_MulFix(
- blues->zone[i].csFlatEdge,
- blues->scale ) -
- blues->boost );
- else
- blues->zone[i].dsFlatEdge = cf2_fixedRound(
- FT_MulFix(
- blues->zone[i].csFlatEdge,
- blues->scale ) +
- blues->boost );
- }
- }
-
-
- /*
- * Check whether `stemHint' is captured by one of the blue zones.
- *
- * Zero, one or both edges may be valid; only valid edges can be
- * captured. For compatibility with CoolType, search top and bottom
- * zones in the same pass (see `BlueLock'). If a hint is captured,
- * return true and position the edge(s) in one of 3 ways:
- *
- * 1) If `BlueScale' suppresses overshoot, position the captured edge
- * at the flat edge of the zone.
- * 2) If overshoot is not suppressed and `BlueShift' requires
- * overshoot, position the captured edge a minimum of 1 device pixel
- * from the flat edge.
- * 3) If overshoot is not suppressed or required, position the captured
- * edge at the nearest device pixel.
- *
- */
- FT_LOCAL_DEF( FT_Bool )
- cf2_blues_capture( const CF2_Blues blues,
- CF2_Hint bottomHintEdge,
- CF2_Hint topHintEdge )
- {
- /* TODO: validate? */
- CF2_Fixed csFuzz = blues->blueFuzz;
-
- /* new position of captured edge */
- CF2_Fixed dsNew;
-
- /* amount that hint is moved when positioned */
- CF2_Fixed dsMove = 0;
-
- FT_Bool captured = FALSE;
- CF2_UInt i;
-
-
- /* assert edge flags are consistent */
- FT_ASSERT( !cf2_hint_isTop( bottomHintEdge ) &&
- !cf2_hint_isBottom( topHintEdge ) );
-
- /* TODO: search once without blue fuzz for compatibility with coretype? */
- for ( i = 0; i < blues->count; i++ )
- {
- if ( blues->zone[i].bottomZone &&
- cf2_hint_isBottom( bottomHintEdge ) )
- {
- if ( SUB_INT32( blues->zone[i].csBottomEdge, csFuzz ) <=
- bottomHintEdge->csCoord &&
- bottomHintEdge->csCoord <=
- ADD_INT32( blues->zone[i].csTopEdge, csFuzz ) )
- {
- /* bottom edge captured by bottom zone */
-
- if ( blues->suppressOvershoot )
- dsNew = blues->zone[i].dsFlatEdge;
-
- else if ( SUB_INT32( blues->zone[i].csTopEdge,
- bottomHintEdge->csCoord ) >=
- blues->blueShift )
- {
- /* guarantee minimum of 1 pixel overshoot */
- dsNew = FT_MIN(
- cf2_fixedRound( bottomHintEdge->dsCoord ),
- blues->zone[i].dsFlatEdge - cf2_intToFixed( 1 ) );
- }
-
- else
- {
- /* simply round captured edge */
- dsNew = cf2_fixedRound( bottomHintEdge->dsCoord );
- }
-
- dsMove = dsNew - bottomHintEdge->dsCoord;
- captured = TRUE;
-
- break;
- }
- }
-
- if ( !blues->zone[i].bottomZone && cf2_hint_isTop( topHintEdge ) )
- {
- if ( ( SUB_INT32( blues->zone[i].csBottomEdge, csFuzz ) ) <=
- topHintEdge->csCoord &&
- topHintEdge->csCoord <=
- ADD_INT32( blues->zone[i].csTopEdge, csFuzz ) )
- {
- /* top edge captured by top zone */
-
- if ( blues->suppressOvershoot )
- dsNew = blues->zone[i].dsFlatEdge;
-
- else if ( ( topHintEdge->csCoord - blues->zone[i].csBottomEdge ) >=
- blues->blueShift )
- {
- /* guarantee minimum of 1 pixel overshoot */
- dsNew = FT_MAX(
- cf2_fixedRound( topHintEdge->dsCoord ),
- blues->zone[i].dsFlatEdge + cf2_intToFixed( 1 ) );
- }
-
- else
- {
- /* simply round captured edge */
- dsNew = cf2_fixedRound( topHintEdge->dsCoord );
- }
-
- dsMove = dsNew - topHintEdge->dsCoord;
- captured = TRUE;
-
- break;
- }
- }
- }
-
- if ( captured )
- {
- /* move both edges and flag them `locked' */
- if ( cf2_hint_isValid( bottomHintEdge ) )
- {
- bottomHintEdge->dsCoord += dsMove;
- cf2_hint_lock( bottomHintEdge );
- }
-
- if ( cf2_hint_isValid( topHintEdge ) )
- {
- topHintEdge->dsCoord += dsMove;
- cf2_hint_lock( topHintEdge );
- }
- }
-
- return captured;
- }
-
-
-/* END */
diff --git a/src/cff/cf2blues.h b/src/cff/cf2blues.h
deleted file mode 100644
index a6bcd9de5..000000000
--- a/src/cff/cf2blues.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2blues.h */
-/* */
-/* Adobe's code for handling Blue Zones (specification). */
-/* */
-/* Copyright 2009-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
- /*
- * A `CF2_Blues' object stores the blue zones (horizontal alignment
- * zones) of a font. These are specified in the CFF private dictionary
- * by `BlueValues', `OtherBlues', `FamilyBlues', and `FamilyOtherBlues'.
- * Each zone is defined by a top and bottom edge in character space.
- * Further, each zone is either a top zone or a bottom zone, as recorded
- * by `bottomZone'.
- *
- * The maximum number of `BlueValues' and `FamilyBlues' is 7 each.
- * However, these are combined to produce a total of 7 zones.
- * Similarly, the maximum number of `OtherBlues' and `FamilyOtherBlues'
- * is 5 and these are combined to produce an additional 5 zones.
- *
- * Blue zones are used to `capture' hints and force them to a common
- * alignment point. This alignment is recorded in device space in
- * `dsFlatEdge'. Except for this value, a `CF2_Blues' object could be
- * constructed independently of scaling. Construction may occur once
- * the matrix is known. Other features implemented in the Capture
- * method are overshoot suppression, overshoot enforcement, and Blue
- * Boost.
- *
- * Capture is determined by `BlueValues' and `OtherBlues', but the
- * alignment point may be adjusted to the scaled flat edge of
- * `FamilyBlues' or `FamilyOtherBlues'. No alignment is done to the
- * curved edge of a zone.
- *
- */
-
-
-#ifndef CF2BLUES_H_
-#define CF2BLUES_H_
-
-
-#include "cf2glue.h"
-
-
-FT_BEGIN_HEADER
-
-
- /*
- * `CF2_Hint' is shared by `cf2hints.h' and
- * `cf2blues.h', but `cf2blues.h' depends on
- * `cf2hints.h', so define it here. Note: The typedef is in
- * `cf2glue.h'.
- *
- */
- enum
- {
- CF2_GhostBottom = 0x1, /* a single bottom edge */
- CF2_GhostTop = 0x2, /* a single top edge */
- CF2_PairBottom = 0x4, /* the bottom edge of a stem hint */
- CF2_PairTop = 0x8, /* the top edge of a stem hint */
- CF2_Locked = 0x10, /* this edge has been aligned */
- /* by a blue zone */
- CF2_Synthetic = 0x20 /* this edge was synthesized */
- };
-
-
- /*
- * Default value for OS/2 typoAscender/Descender when their difference
- * is not equal to `unitsPerEm'. The default is based on -250 and 1100
- * in `CF2_Blues', assuming 1000 units per em here.
- *
- */
- enum
- {
- CF2_ICF_Top = cf2_intToFixed( 880 ),
- CF2_ICF_Bottom = cf2_intToFixed( -120 )
- };
-
-
- /*
- * Constant used for hint adjustment and for synthetic em box hint
- * placement.
- */
-#define CF2_MIN_COUNTER cf2_doubleToFixed( 0.5 )
-
-
- /* shared typedef is in cf2glue.h */
- struct CF2_HintRec_
- {
- CF2_UInt flags; /* attributes of the edge */
- size_t index; /* index in original stem hint array */
- /* (if not synthetic) */
- CF2_Fixed csCoord;
- CF2_Fixed dsCoord;
- CF2_Fixed scale;
- };
-
-
- typedef struct CF2_BlueRec_
- {
- CF2_Fixed csBottomEdge;
- CF2_Fixed csTopEdge;
- CF2_Fixed csFlatEdge; /* may be from either local or Family zones */
- CF2_Fixed dsFlatEdge; /* top edge of bottom zone or bottom edge */
- /* of top zone (rounded) */
- FT_Bool bottomZone;
-
- } CF2_BlueRec;
-
-
- /* max total blue zones is 12 */
- enum
- {
- CF2_MAX_BLUES = 7,
- CF2_MAX_OTHERBLUES = 5
- };
-
-
- typedef struct CF2_BluesRec_
- {
- CF2_Fixed scale;
- CF2_UInt count;
- FT_Bool suppressOvershoot;
- FT_Bool doEmBoxHints;
-
- CF2_Fixed blueScale;
- CF2_Fixed blueShift;
- CF2_Fixed blueFuzz;
-
- CF2_Fixed boost;
-
- CF2_HintRec emBoxTopEdge;
- CF2_HintRec emBoxBottomEdge;
-
- CF2_BlueRec zone[CF2_MAX_BLUES + CF2_MAX_OTHERBLUES];
-
- } CF2_BluesRec, *CF2_Blues;
-
-
- FT_LOCAL( void )
- cf2_blues_init( CF2_Blues blues,
- CF2_Font font );
- FT_LOCAL( FT_Bool )
- cf2_blues_capture( const CF2_Blues blues,
- CF2_Hint bottomHintEdge,
- CF2_Hint topHintEdge );
-
-
-FT_END_HEADER
-
-
-#endif /* CF2BLUES_H_ */
-
-
-/* END */
diff --git a/src/cff/cf2error.c b/src/cff/cf2error.c
deleted file mode 100644
index e3dd69f50..000000000
--- a/src/cff/cf2error.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2error.c */
-/* */
-/* Adobe's code for error handling (body). */
-/* */
-/* Copyright 2006-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include "cf2error.h"
-
-
- FT_LOCAL_DEF( void )
- cf2_setError( FT_Error* error,
- FT_Error value )
- {
- if ( error && !*error )
- *error = value;
- }
-
-
-/* END */
diff --git a/src/cff/cf2error.h b/src/cff/cf2error.h
deleted file mode 100644
index d2c770d29..000000000
--- a/src/cff/cf2error.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2error.h */
-/* */
-/* Adobe's code for error handling (specification). */
-/* */
-/* Copyright 2006-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CF2ERROR_H_
-#define CF2ERROR_H_
-
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX CF2_Err_
-#define FT_ERR_BASE FT_Mod_Err_CF2
-
-
-#include FT_ERRORS_H
-#include "cf2ft.h"
-
-
-FT_BEGIN_HEADER
-
-
- /*
- * A poor-man error facility.
- *
- * This code being written in vanilla C, doesn't have the luxury of a
- * language-supported exception mechanism such as the one available in
- * Java. Instead, we are stuck with using error codes that must be
- * carefully managed and preserved. However, it is convenient for us to
- * model our error mechanism on a Java-like exception mechanism.
- * When we assign an error code we are thus `throwing' an error.
- *
- * The preservation of an error code is done by coding convention.
- * Upon a function call if the error code is anything other than
- * `FT_Err_Ok', which is guaranteed to be zero, we
- * will return without altering that error. This will allow the
- * error to propagate and be handled at the appropriate location in
- * the code.
- *
- * This allows a style of code where the error code is initialized
- * up front and a block of calls are made with the error code only
- * being checked after the block. If a new error occurs, the original
- * error will be preserved and a functional no-op should result in any
- * subsequent function that has an initial error code not equal to
- * `FT_Err_Ok'.
- *
- * Errors are encoded by calling the `FT_THROW' macro. For example,
- *
- * {
- * FT_Error e;
- *
- *
- * ...
- * e = FT_THROW( Out_Of_Memory );
- * }
- *
- */
-
-
- /* Set error code to a particular value. */
- FT_LOCAL( void )
- cf2_setError( FT_Error* error,
- FT_Error value );
-
-
- /*
- * A macro that conditionally sets an error code.
- *
- * This macro will first check whether `error' is set;
- * if not, it will set it to `e'.
- *
- */
-#define CF2_SET_ERROR( error, e ) \
- cf2_setError( error, FT_THROW( e ) )
-
-
-FT_END_HEADER
-
-
-#endif /* CF2ERROR_H_ */
-
-
-/* END */
diff --git a/src/cff/cf2fixed.h b/src/cff/cf2fixed.h
deleted file mode 100644
index a041184bd..000000000
--- a/src/cff/cf2fixed.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2fixed.h */
-/* */
-/* Adobe's code for Fixed Point Mathematics (specification only). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CF2FIXED_H_
-#define CF2FIXED_H_
-
-
-FT_BEGIN_HEADER
-
-
- /* rasterizer integer and fixed point arithmetic must be 32-bit */
-
-#define CF2_Fixed CF2_F16Dot16
- typedef FT_Int32 CF2_Frac; /* 2.30 fixed point */
-
-
-#define CF2_FIXED_MAX ( (CF2_Fixed)0x7FFFFFFFL )
-#define CF2_FIXED_MIN ( (CF2_Fixed)0x80000000L )
-#define CF2_FIXED_ONE ( (CF2_Fixed)0x10000L )
-#define CF2_FIXED_EPSILON ( (CF2_Fixed)0x0001 )
-
- /* in C 89, left and right shift of negative numbers is */
- /* implementation specific behaviour in the general case */
-
-#define cf2_intToFixed( i ) \
- ( (CF2_Fixed)( (FT_UInt32)(i) << 16 ) )
-#define cf2_fixedToInt( x ) \
- ( (FT_Short)( ( (FT_UInt32)(x) + 0x8000U ) >> 16 ) )
-#define cf2_fixedRound( x ) \
- ( (CF2_Fixed)( ( (FT_UInt32)(x) + 0x8000U ) & 0xFFFF0000UL ) )
-#define cf2_doubleToFixed( f ) \
- ( (CF2_Fixed)( (f) * 65536.0 + 0.5 ) )
-#define cf2_fixedAbs( x ) \
- ( (x) < 0 ? NEG_INT32( x ) : (x) )
-#define cf2_fixedFloor( x ) \
- ( (CF2_Fixed)( (FT_UInt32)(x) & 0xFFFF0000UL ) )
-#define cf2_fixedFraction( x ) \
- ( (x) - cf2_fixedFloor( x ) )
-#define cf2_fracToFixed( x ) \
- ( (x) < 0 ? -( ( -(x) + 0x2000 ) >> 14 ) \
- : ( ( (x) + 0x2000 ) >> 14 ) )
-
-
- /* signed numeric types */
- typedef enum CF2_NumberType_
- {
- CF2_NumberFixed, /* 16.16 */
- CF2_NumberFrac, /* 2.30 */
- CF2_NumberInt /* 32.0 */
-
- } CF2_NumberType;
-
-
-FT_END_HEADER
-
-
-#endif /* CF2FIXED_H_ */
-
-
-/* END */
diff --git a/src/cff/cf2font.c b/src/cff/cf2font.c
deleted file mode 100644
index 4ac71a8d7..000000000
--- a/src/cff/cf2font.c
+++ /dev/null
@@ -1,562 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2font.c */
-/* */
-/* Adobe's code for font instances (body). */
-/* */
-/* Copyright 2007-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_CALC_H
-
-#include "cf2ft.h"
-
-#include "cf2glue.h"
-#include "cf2font.h"
-#include "cf2error.h"
-#include "cf2intrp.h"
-
-
- /* Compute a stem darkening amount in character space. */
- static void
- cf2_computeDarkening( CF2_Fixed emRatio,
- CF2_Fixed ppem,
- CF2_Fixed stemWidth,
- CF2_Fixed* darkenAmount,
- CF2_Fixed boldenAmount,
- FT_Bool stemDarkened,
- FT_Int* darkenParams )
- {
- /*
- * Total darkening amount is computed in 1000 unit character space
- * using the modified 5 part curve as Adobe's Avalon rasterizer.
- * The darkening amount is smaller for thicker stems.
- * It becomes zero when the stem is thicker than 2.333 pixels.
- *
- * By default, we use
- *
- * darkenAmount = 0.4 pixels if scaledStem <= 0.5 pixels,
- * darkenAmount = 0.275 pixels if 1 <= scaledStem <= 1.667 pixels,
- * darkenAmount = 0 pixel if scaledStem >= 2.333 pixels,
- *
- * and piecewise linear in-between:
- *
- *
- * darkening
- * ^
- * |
- * | (x1,y1)
- * |--------+
- * | \
- * | \
- * | \ (x3,y3)
- * | +----------+
- * | (x2,y2) \
- * | \
- * | \
- * | +-----------------
- * | (x4,y4)
- * +---------------------------------------------> stem
- * thickness
- *
- *
- * This corresponds to the following values for the
- * `darkening-parameters' property:
- *
- * (x1, y1) = (500, 400)
- * (x2, y2) = (1000, 275)
- * (x3, y3) = (1667, 275)
- * (x4, y4) = (2333, 0)
- *
- */
-
- /* Internal calculations are done in units per thousand for */
- /* convenience. The x axis is scaled stem width in */
- /* thousandths of a pixel. That is, 1000 is 1 pixel. */
- /* The y axis is darkening amount in thousandths of a pixel.*/
- /* In the code, below, dividing by ppem and */
- /* adjusting for emRatio converts darkenAmount to character */
- /* space (font units). */
- CF2_Fixed stemWidthPer1000, scaledStem;
- FT_Int logBase2;
-
-
- *darkenAmount = 0;
-
- if ( boldenAmount == 0 && !stemDarkened )
- return;
-
- /* protect against range problems and divide by zero */
- if ( emRatio < cf2_doubleToFixed( .01 ) )
- return;
-
- if ( stemDarkened )
- {
- FT_Int x1 = darkenParams[0];
- FT_Int y1 = darkenParams[1];
- FT_Int x2 = darkenParams[2];
- FT_Int y2 = darkenParams[3];
- FT_Int x3 = darkenParams[4];
- FT_Int y3 = darkenParams[5];
- FT_Int x4 = darkenParams[6];
- FT_Int y4 = darkenParams[7];
-
-
- /* convert from true character space to 1000 unit character space; */
- /* add synthetic emboldening effect */
-
- /* `stemWidthPer1000' will not overflow for a legitimate font */
-
- stemWidthPer1000 = FT_MulFix( stemWidth + boldenAmount, emRatio );
-
- /* `scaledStem' can easily overflow, so we must clamp its maximum */
- /* value; the test doesn't need to be precise, but must be */
- /* conservative. The clamp value (default 2333) where */
- /* `darkenAmount' is zero is well below the overflow value of */
- /* 32767. */
- /* */
- /* FT_MSB computes the integer part of the base 2 logarithm. The */
- /* number of bits for the product is 1 or 2 more than the sum of */
- /* logarithms; remembering that the 16 lowest bits of the fraction */
- /* are dropped this is correct to within a factor of almost 4. */
- /* For example, 0x80.0000 * 0x80.0000 = 0x4000.0000 is 23+23 and */
- /* is flagged as possible overflow because 0xFF.FFFF * 0xFF.FFFF = */
- /* 0xFFFF.FE00 is also 23+23. */
-
- logBase2 = FT_MSB( (FT_UInt32)stemWidthPer1000 ) +
- FT_MSB( (FT_UInt32)ppem );
-
- if ( logBase2 >= 46 )
- /* possible overflow */
- scaledStem = cf2_intToFixed( x4 );
- else
- scaledStem = FT_MulFix( stemWidthPer1000, ppem );
-
- /* now apply the darkening parameters */
-
- if ( scaledStem < cf2_intToFixed( x1 ) )
- *darkenAmount = FT_DivFix( cf2_intToFixed( y1 ), ppem );
-
- else if ( scaledStem < cf2_intToFixed( x2 ) )
- {
- FT_Int xdelta = x2 - x1;
- FT_Int ydelta = y2 - y1;
- FT_Int x = stemWidthPer1000 -
- FT_DivFix( cf2_intToFixed( x1 ), ppem );
-
-
- if ( !xdelta )
- goto Try_x3;
-
- *darkenAmount = FT_MulDiv( x, ydelta, xdelta ) +
- FT_DivFix( cf2_intToFixed( y1 ), ppem );
- }
-
- else if ( scaledStem < cf2_intToFixed( x3 ) )
- {
- Try_x3:
- {
- FT_Int xdelta = x3 - x2;
- FT_Int ydelta = y3 - y2;
- FT_Int x = stemWidthPer1000 -
- FT_DivFix( cf2_intToFixed( x2 ), ppem );
-
-
- if ( !xdelta )
- goto Try_x4;
-
- *darkenAmount = FT_MulDiv( x, ydelta, xdelta ) +
- FT_DivFix( cf2_intToFixed( y2 ), ppem );
- }
- }
-
- else if ( scaledStem < cf2_intToFixed( x4 ) )
- {
- Try_x4:
- {
- FT_Int xdelta = x4 - x3;
- FT_Int ydelta = y4 - y3;
- FT_Int x = stemWidthPer1000 -
- FT_DivFix( cf2_intToFixed( x3 ), ppem );
-
-
- if ( !xdelta )
- goto Use_y4;
-
- *darkenAmount = FT_MulDiv( x, ydelta, xdelta ) +
- FT_DivFix( cf2_intToFixed( y3 ), ppem );
- }
- }
-
- else
- {
- Use_y4:
- *darkenAmount = FT_DivFix( cf2_intToFixed( y4 ), ppem );
- }
-
- /* use half the amount on each side and convert back to true */
- /* character space */
- *darkenAmount = FT_DivFix( *darkenAmount, 2 * emRatio );
- }
-
- /* add synthetic emboldening effect in character space */
- *darkenAmount += boldenAmount / 2;
- }
-
-
- /* set up values for the current FontDict and matrix; */
- /* called for each glyph to be rendered */
-
- /* caller's transform is adjusted for subpixel positioning */
- static void
- cf2_font_setup( CF2_Font font,
- const CF2_Matrix* transform )
- {
- /* pointer to parsed font object */
- CFF_Decoder* decoder = font->decoder;
-
- FT_Bool needExtraSetup = FALSE;
-
- CFF_VStoreRec* vstore;
- FT_Bool hasVariations = FALSE;
-
- /* character space units */
- CF2_Fixed boldenX = font->syntheticEmboldeningAmountX;
- CF2_Fixed boldenY = font->syntheticEmboldeningAmountY;
-
- CFF_SubFont subFont;
- CF2_Fixed ppem;
-
- CF2_UInt lenNormalizedV = 0;
- FT_Fixed* normalizedV = NULL;
-
-
- /* clear previous error */
- font->error = FT_Err_Ok;
-
- /* if a CID fontDict has changed, we need to recompute some cached */
- /* data */
- subFont = cf2_getSubfont( decoder );
- if ( font->lastSubfont != subFont )
- {
- font->lastSubfont = subFont;
- needExtraSetup = TRUE;
- }
-
- /* check for variation vectors */
- vstore = cf2_getVStore( decoder );
- hasVariations = ( vstore->dataCount != 0 );
-
- if ( hasVariations )
- {
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- /* check whether Private DICT in this subfont needs to be reparsed */
- font->error = cf2_getNormalizedVector( decoder,
- &lenNormalizedV,
- &normalizedV );
- if ( font->error )
- return;
-
- if ( cff_blend_check_vector( &subFont->blend,
- subFont->private_dict.vsindex,
- lenNormalizedV,
- normalizedV ) )
- {
- /* blend has changed, reparse */
- cff_load_private_dict( decoder->cff,
- subFont,
- lenNormalizedV,
- normalizedV );
- needExtraSetup = TRUE;
- }
-#endif
-
- /* copy from subfont */
- font->blend.font = subFont->blend.font;
-
- /* clear state of charstring blend */
- font->blend.usedBV = FALSE;
-
- /* initialize value for charstring */
- font->vsindex = subFont->private_dict.vsindex;
-
- /* store vector inputs for blends in charstring */
- font->lenNDV = lenNormalizedV;
- font->NDV = normalizedV;
- }
-
- /* if ppem has changed, we need to recompute some cached data */
- /* note: because of CID font matrix concatenation, ppem and transform */
- /* do not necessarily track. */
- ppem = cf2_getPpemY( decoder );
- if ( font->ppem != ppem )
- {
- font->ppem = ppem;
- needExtraSetup = TRUE;
- }
-
- /* copy hinted flag on each call */
- font->hinted = (FT_Bool)( font->renderingFlags & CF2_FlagsHinted );
-
- /* determine if transform has changed; */
- /* include Fontmatrix but ignore translation */
- if ( ft_memcmp( transform,
- &font->currentTransform,
- 4 * sizeof ( CF2_Fixed ) ) != 0 )
- {
- /* save `key' information for `cache of one' matrix data; */
- /* save client transform, without the translation */
- font->currentTransform = *transform;
- font->currentTransform.tx =
- font->currentTransform.ty = cf2_intToFixed( 0 );
-
- /* TODO: FreeType transform is simple scalar; for now, use identity */
- /* for outer */
- font->innerTransform = *transform;
- font->outerTransform.a =
- font->outerTransform.d = cf2_intToFixed( 1 );
- font->outerTransform.b =
- font->outerTransform.c = cf2_intToFixed( 0 );
-
- needExtraSetup = TRUE;
- }
-
- /*
- * font->darkened is set to true if there is a stem darkening request or
- * the font is synthetic emboldened.
- * font->darkened controls whether to adjust blue zones, winding order,
- * and hinting.
- *
- */
- if ( font->stemDarkened != ( font->renderingFlags & CF2_FlagsDarkened ) )
- {
- font->stemDarkened =
- (FT_Bool)( font->renderingFlags & CF2_FlagsDarkened );
-
- /* blue zones depend on darkened flag */
- needExtraSetup = TRUE;
- }
-
- /* recompute variables that are dependent on transform or FontDict or */
- /* darken flag */
- if ( needExtraSetup )
- {
- /* StdVW is found in the private dictionary; */
- /* recompute darkening amounts whenever private dictionary or */
- /* transform change */
- /* Note: a rendering flag turns darkening on or off, so we want to */
- /* store the `on' amounts; */
- /* darkening amount is computed in character space */
- /* TODO: testing size-dependent darkening here; */
- /* what to do for rotations? */
-
- CF2_Fixed emRatio;
- CF2_Fixed stdHW;
- CF2_Int unitsPerEm = font->unitsPerEm;
-
-
- if ( unitsPerEm == 0 )
- unitsPerEm = 1000;
-
- ppem = FT_MAX( cf2_intToFixed( 4 ),
- font->ppem ); /* use minimum ppem of 4 */
-
-#if 0
- /* since vstem is measured in the x-direction, we use the `a' member */
- /* of the fontMatrix */
- emRatio = cf2_fixedFracMul( cf2_intToFixed( 1000 ), fontMatrix->a );
-#endif
-
- /* Freetype does not preserve the fontMatrix when parsing; use */
- /* unitsPerEm instead. */
- /* TODO: check precision of this */
- emRatio = cf2_intToFixed( 1000 ) / unitsPerEm;
- font->stdVW = cf2_getStdVW( decoder );
-
- if ( font->stdVW <= 0 )
- font->stdVW = FT_DivFix( cf2_intToFixed( 75 ), emRatio );
-
- if ( boldenX > 0 )
- {
- /* Ensure that boldenX is at least 1 pixel for synthetic bold font */
- /* (similar to what Avalon does) */
- boldenX = FT_MAX( boldenX,
- FT_DivFix( cf2_intToFixed( unitsPerEm ), ppem ) );
-
- /* Synthetic emboldening adds at least 1 pixel to darkenX, while */
- /* stem darkening adds at most half pixel. Since the purpose of */
- /* stem darkening (readability at small sizes) is met with */
- /* synthetic emboldening, no need to add stem darkening for a */
- /* synthetic bold font. */
- cf2_computeDarkening( emRatio,
- ppem,
- font->stdVW,
- &font->darkenX,
- boldenX,
- FALSE,
- font->darkenParams );
- }
- else
- cf2_computeDarkening( emRatio,
- ppem,
- font->stdVW,
- &font->darkenX,
- 0,
- font->stemDarkened,
- font->darkenParams );
-
-#if 0
- /* since hstem is measured in the y-direction, we use the `d' member */
- /* of the fontMatrix */
- /* TODO: use the same units per em as above; check this */
- emRatio = cf2_fixedFracMul( cf2_intToFixed( 1000 ), fontMatrix->d );
-#endif
-
- /* set the default stem width, because it must be the same for all */
- /* family members; */
- /* choose a constant for StdHW that depends on font contrast */
- stdHW = cf2_getStdHW( decoder );
-
- if ( stdHW > 0 && font->stdVW > MUL_INT32( 2, stdHW ) )
- font->stdHW = FT_DivFix( cf2_intToFixed( 75 ), emRatio );
- else
- {
- /* low contrast font gets less hstem darkening */
- font->stdHW = FT_DivFix( cf2_intToFixed( 110 ), emRatio );
- }
-
- cf2_computeDarkening( emRatio,
- ppem,
- font->stdHW,
- &font->darkenY,
- boldenY,
- font->stemDarkened,
- font->darkenParams );
-
- if ( font->darkenX != 0 || font->darkenY != 0 )
- font->darkened = TRUE;
- else
- font->darkened = FALSE;
-
- font->reverseWinding = FALSE; /* initial expectation is CCW */
-
- /* compute blue zones for this instance */
- cf2_blues_init( &font->blues, font );
-
- } /* needExtraSetup */
- }
-
-
- /* equivalent to AdobeGetOutline */
- FT_LOCAL_DEF( FT_Error )
- cf2_getGlyphOutline( CF2_Font font,
- CF2_Buffer charstring,
- const CF2_Matrix* transform,
- CF2_F16Dot16* glyphWidth )
- {
- FT_Error lastError = FT_Err_Ok;
-
- FT_Vector translation;
-
-#if 0
- FT_Vector advancePoint;
-#endif
-
- CF2_Fixed advWidth = 0;
- FT_Bool needWinding;
-
-
- /* Note: use both integer and fraction for outlines. This allows bbox */
- /* to come out directly. */
-
- translation.x = transform->tx;
- translation.y = transform->ty;
-
- /* set up values based on transform */
- cf2_font_setup( font, transform );
- if ( font->error )
- goto exit; /* setup encountered an error */
-
- /* reset darken direction */
- font->reverseWinding = FALSE;
-
- /* winding order only affects darkening */
- needWinding = font->darkened;
-
- while ( 1 )
- {
- /* reset output buffer */
- cf2_outline_reset( &font->outline );
-
- /* build the outline, passing the full translation */
- cf2_interpT2CharString( font,
- charstring,
- (CF2_OutlineCallbacks)&font->outline,
- &translation,
- FALSE,
- 0,
- 0,
- &advWidth );
-
- if ( font->error )
- goto exit;
-
- if ( !needWinding )
- break;
-
- /* check winding order */
- if ( font->outline.root.windingMomentum >= 0 ) /* CFF is CCW */
- break;
-
- /* invert darkening and render again */
- /* TODO: this should be a parameter to getOutline-computeOffset */
- font->reverseWinding = TRUE;
-
- needWinding = FALSE; /* exit after next iteration */
- }
-
- /* finish storing client outline */
- cf2_outline_close( &font->outline );
-
- exit:
- /* FreeType just wants the advance width; there is no translation */
- *glyphWidth = advWidth;
-
- /* free resources and collect errors from objects we've used */
- cf2_setError( &font->error, lastError );
-
- return font->error;
- }
-
-
-/* END */
diff --git a/src/cff/cf2font.h b/src/cff/cf2font.h
deleted file mode 100644
index 17ecd17bb..000000000
--- a/src/cff/cf2font.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2font.h */
-/* */
-/* Adobe's code for font instances (specification). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CF2FONT_H_
-#define CF2FONT_H_
-
-
-#include "cf2ft.h"
-#include "cf2blues.h"
-#include "cffload.h"
-
-
-FT_BEGIN_HEADER
-
-
-#define CF2_OPERAND_STACK_SIZE 48
-#define CF2_MAX_SUBR 16 /* maximum subroutine nesting; */
- /* only 10 are allowed but there exist */
- /* fonts like `HiraKakuProN-W3.ttf' */
- /* (Hiragino Kaku Gothic ProN W3; */
- /* 8.2d6e1; 2014-12-19) that exceed */
- /* this limit */
-#define CF2_STORAGE_SIZE 32
-
-
- /* typedef is in `cf2glue.h' */
- struct CF2_FontRec_
- {
- FT_Memory memory;
- FT_Error error; /* shared error for this instance */
-
- FT_Bool isCFF2;
- CF2_RenderingFlags renderingFlags;
-
- /* variables that depend on Transform: */
- /* the following have zero translation; */
- /* inner * outer = font * original */
-
- CF2_Matrix currentTransform; /* original client matrix */
- CF2_Matrix innerTransform; /* for hinting; erect, scaled */
- CF2_Matrix outerTransform; /* post hinting; includes rotations */
- CF2_Fixed ppem; /* transform-dependent */
-
- /* variation data */
- CFF_BlendRec blend; /* cached charstring blend vector */
- CF2_UInt vsindex; /* current vsindex */
- CF2_UInt lenNDV; /* current length NDV or zero */
- FT_Fixed* NDV; /* ptr to current NDV or NULL */
-
- CF2_Int unitsPerEm;
-
- CF2_Fixed syntheticEmboldeningAmountX; /* character space units */
- CF2_Fixed syntheticEmboldeningAmountY; /* character space units */
-
- /* FreeType related members */
- CF2_OutlineRec outline; /* freetype glyph outline functions */
- CFF_Decoder* decoder;
- CFF_SubFont lastSubfont; /* FreeType parsed data; */
- /* top font or subfont */
-
- /* these flags can vary from one call to the next */
- FT_Bool hinted;
- FT_Bool darkened; /* true if stemDarkened or synthetic bold */
- /* i.e. darkenX != 0 || darkenY != 0 */
- FT_Bool stemDarkened;
-
- FT_Int darkenParams[8]; /* 1000 unit character space */
-
- /* variables that depend on both FontDict and Transform */
- CF2_Fixed stdVW; /* in character space; depends on dict entry */
- CF2_Fixed stdHW; /* in character space; depends on dict entry */
- CF2_Fixed darkenX; /* character space units */
- CF2_Fixed darkenY; /* depends on transform */
- /* and private dict (StdVW) */
- FT_Bool reverseWinding; /* darken assuming */
- /* counterclockwise winding */
-
- CF2_BluesRec blues; /* computed zone data */
- };
-
-
- FT_LOCAL( FT_Error )
- cf2_getGlyphOutline( CF2_Font font,
- CF2_Buffer charstring,
- const CF2_Matrix* transform,
- CF2_F16Dot16* glyphWidth );
-
-
-FT_END_HEADER
-
-
-#endif /* CF2FONT_H_ */
-
-
-/* END */
diff --git a/src/cff/cf2ft.c b/src/cff/cf2ft.c
deleted file mode 100644
index c6c00d162..000000000
--- a/src/cff/cf2ft.c
+++ /dev/null
@@ -1,755 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2ft.c */
-/* */
-/* FreeType Glue Component to Adobe's Interpreter (body). */
-/* */
-/* Copyright 2013-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2font.h"
-#include "cf2error.h"
-
-
-#define CF2_MAX_SIZE cf2_intToFixed( 2000 ) /* max ppem */
-
-
- /*
- * This check should avoid most internal overflow cases. Clients should
- * generally respond to `Glyph_Too_Big' by getting a glyph outline
- * at EM size, scaling it and filling it as a graphics operation.
- *
- */
- static FT_Error
- cf2_checkTransform( const CF2_Matrix* transform,
- CF2_Int unitsPerEm )
- {
- CF2_Fixed maxScale;
-
-
- FT_ASSERT( unitsPerEm > 0 );
-
- if ( transform->a <= 0 || transform->d <= 0 )
- return FT_THROW( Invalid_Size_Handle );
-
- FT_ASSERT( transform->b == 0 && transform->c == 0 );
- FT_ASSERT( transform->tx == 0 && transform->ty == 0 );
-
- if ( unitsPerEm > 0x7FFF )
- return FT_THROW( Glyph_Too_Big );
-
- maxScale = FT_DivFix( CF2_MAX_SIZE, cf2_intToFixed( unitsPerEm ) );
-
- if ( transform->a > maxScale || transform->d > maxScale )
- return FT_THROW( Glyph_Too_Big );
-
- return FT_Err_Ok;
- }
-
-
- static void
- cf2_setGlyphWidth( CF2_Outline outline,
- CF2_Fixed width )
- {
- CFF_Decoder* decoder = outline->decoder;
-
-
- FT_ASSERT( decoder );
-
- decoder->glyph_width = cf2_fixedToInt( width );
- }
-
-
- /* Clean up font instance. */
- static void
- cf2_free_instance( void* ptr )
- {
- CF2_Font font = (CF2_Font)ptr;
-
-
- if ( font )
- {
- FT_Memory memory = font->memory;
-
-
- FT_FREE( font->blend.lastNDV );
- FT_FREE( font->blend.BV );
- }
- }
-
-
- /********************************************/
- /* */
- /* functions for handling client outline; */
- /* FreeType uses coordinates in 26.6 format */
- /* */
- /********************************************/
-
- static void
- cf2_builder_moveTo( CF2_OutlineCallbacks callbacks,
- const CF2_CallbackParams params )
- {
- /* downcast the object pointer */
- CF2_Outline outline = (CF2_Outline)callbacks;
- CFF_Builder* builder;
-
- (void)params; /* only used in debug mode */
-
-
- FT_ASSERT( outline && outline->decoder );
- FT_ASSERT( params->op == CF2_PathOpMoveTo );
-
- builder = &outline->decoder->builder;
-
- /* note: two successive moves simply close the contour twice */
- cff_builder_close_contour( builder );
- builder->path_begun = 0;
- }
-
-
- static void
- cf2_builder_lineTo( CF2_OutlineCallbacks callbacks,
- const CF2_CallbackParams params )
- {
- FT_Error error;
-
- /* downcast the object pointer */
- CF2_Outline outline = (CF2_Outline)callbacks;
- CFF_Builder* builder;
-
-
- FT_ASSERT( outline && outline->decoder );
- FT_ASSERT( params->op == CF2_PathOpLineTo );
-
- builder = &outline->decoder->builder;
-
- if ( !builder->path_begun )
- {
- /* record the move before the line; also check points and set */
- /* `path_begun' */
- error = cff_builder_start_point( builder,
- params->pt0.x,
- params->pt0.y );
- if ( error )
- {
- if ( !*callbacks->error )
- *callbacks->error = error;
- return;
- }
- }
-
- /* `cff_builder_add_point1' includes a check_points call for one point */
- error = cff_builder_add_point1( builder,
- params->pt1.x,
- params->pt1.y );
- if ( error )
- {
- if ( !*callbacks->error )
- *callbacks->error = error;
- return;
- }
- }
-
-
- static void
- cf2_builder_cubeTo( CF2_OutlineCallbacks callbacks,
- const CF2_CallbackParams params )
- {
- FT_Error error;
-
- /* downcast the object pointer */
- CF2_Outline outline = (CF2_Outline)callbacks;
- CFF_Builder* builder;
-
-
- FT_ASSERT( outline && outline->decoder );
- FT_ASSERT( params->op == CF2_PathOpCubeTo );
-
- builder = &outline->decoder->builder;
-
- if ( !builder->path_begun )
- {
- /* record the move before the line; also check points and set */
- /* `path_begun' */
- error = cff_builder_start_point( builder,
- params->pt0.x,
- params->pt0.y );
- if ( error )
- {
- if ( !*callbacks->error )
- *callbacks->error = error;
- return;
- }
- }
-
- /* prepare room for 3 points: 2 off-curve, 1 on-curve */
- error = cff_check_points( builder, 3 );
- if ( error )
- {
- if ( !*callbacks->error )
- *callbacks->error = error;
- return;
- }
-
- cff_builder_add_point( builder,
- params->pt1.x,
- params->pt1.y, 0 );
- cff_builder_add_point( builder,
- params->pt2.x,
- params->pt2.y, 0 );
- cff_builder_add_point( builder,
- params->pt3.x,
- params->pt3.y, 1 );
- }
-
-
- static void
- cf2_outline_init( CF2_Outline outline,
- FT_Memory memory,
- FT_Error* error )
- {
- FT_ZERO( outline );
-
- outline->root.memory = memory;
- outline->root.error = error;
-
- outline->root.moveTo = cf2_builder_moveTo;
- outline->root.lineTo = cf2_builder_lineTo;
- outline->root.cubeTo = cf2_builder_cubeTo;
- }
-
-
- /* get scaling and hint flag from GlyphSlot */
- static void
- cf2_getScaleAndHintFlag( CFF_Decoder* decoder,
- CF2_Fixed* x_scale,
- CF2_Fixed* y_scale,
- FT_Bool* hinted,
- FT_Bool* scaled )
- {
- FT_ASSERT( decoder && decoder->builder.glyph );
-
- /* note: FreeType scale includes a factor of 64 */
- *hinted = decoder->builder.glyph->hint;
- *scaled = decoder->builder.glyph->scaled;
-
- if ( *hinted )
- {
- *x_scale = ADD_INT32( decoder->builder.glyph->x_scale, 32 ) / 64;
- *y_scale = ADD_INT32( decoder->builder.glyph->y_scale, 32 ) / 64;
- }
- else
- {
- /* for unhinted outlines, `cff_slot_load' does the scaling, */
- /* thus render at `unity' scale */
-
- *x_scale = 0x0400; /* 1/64 as 16.16 */
- *y_scale = 0x0400;
- }
- }
-
-
- /* get units per em from `FT_Face' */
- /* TODO: should handle font matrix concatenation? */
- static FT_UShort
- cf2_getUnitsPerEm( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->builder.face );
- FT_ASSERT( decoder->builder.face->root.units_per_EM );
-
- return decoder->builder.face->root.units_per_EM;
- }
-
-
- /* Main entry point: Render one glyph. */
- FT_LOCAL_DEF( FT_Error )
- cf2_decoder_parse_charstrings( CFF_Decoder* decoder,
- FT_Byte* charstring_base,
- FT_ULong charstring_len )
- {
- FT_Memory memory;
- FT_Error error = FT_Err_Ok;
- CF2_Font font;
-
-
- FT_ASSERT( decoder && decoder->cff );
-
- memory = decoder->builder.memory;
-
- /* CF2 data is saved here across glyphs */
- font = (CF2_Font)decoder->cff->cf2_instance.data;
-
- /* on first glyph, allocate instance structure */
- if ( !decoder->cff->cf2_instance.data )
- {
- decoder->cff->cf2_instance.finalizer =
- (FT_Generic_Finalizer)cf2_free_instance;
-
- if ( FT_ALLOC( decoder->cff->cf2_instance.data,
- sizeof ( CF2_FontRec ) ) )
- return FT_THROW( Out_Of_Memory );
-
- font = (CF2_Font)decoder->cff->cf2_instance.data;
-
- font->memory = memory;
-
- /* initialize a client outline, to be shared by each glyph rendered */
- cf2_outline_init( &font->outline, font->memory, &font->error );
- }
-
- /* save decoder; it is a stack variable and will be different on each */
- /* call */
- font->decoder = decoder;
- font->outline.decoder = decoder;
-
- {
- /* build parameters for Adobe engine */
-
- CFF_Builder* builder = &decoder->builder;
- CFF_Driver driver = (CFF_Driver)FT_FACE_DRIVER( builder->face );
-
- FT_Bool no_stem_darkening_driver =
- driver->no_stem_darkening;
- FT_Char no_stem_darkening_font =
- builder->face->root.internal->no_stem_darkening;
-
- /* local error */
- FT_Error error2 = FT_Err_Ok;
- CF2_BufferRec buf;
- CF2_Matrix transform;
- CF2_F16Dot16 glyphWidth;
-
- FT_Bool hinted;
- FT_Bool scaled;
-
-
- /* FreeType has already looked up the GID; convert to */
- /* `RegionBuffer', assuming that the input has been validated */
- FT_ASSERT( charstring_base + charstring_len >= charstring_base );
-
- FT_ZERO( &buf );
- buf.start =
- buf.ptr = charstring_base;
- buf.end = charstring_base + charstring_len;
-
- FT_ZERO( &transform );
-
- cf2_getScaleAndHintFlag( decoder,
- &transform.a,
- &transform.d,
- &hinted,
- &scaled );
-
- /* copy isCFF2 boolean from TT_Face to CF2_Font */
- font->isCFF2 = builder->face->is_cff2;
-
- font->renderingFlags = 0;
- if ( hinted )
- font->renderingFlags |= CF2_FlagsHinted;
- if ( scaled && ( !no_stem_darkening_font ||
- ( no_stem_darkening_font < 0 &&
- !no_stem_darkening_driver ) ) )
- font->renderingFlags |= CF2_FlagsDarkened;
-
- font->darkenParams[0] = driver->darken_params[0];
- font->darkenParams[1] = driver->darken_params[1];
- font->darkenParams[2] = driver->darken_params[2];
- font->darkenParams[3] = driver->darken_params[3];
- font->darkenParams[4] = driver->darken_params[4];
- font->darkenParams[5] = driver->darken_params[5];
- font->darkenParams[6] = driver->darken_params[6];
- font->darkenParams[7] = driver->darken_params[7];
-
- /* now get an outline for this glyph; */
- /* also get units per em to validate scale */
- font->unitsPerEm = (CF2_Int)cf2_getUnitsPerEm( decoder );
-
- if ( scaled )
- {
- error2 = cf2_checkTransform( &transform, font->unitsPerEm );
- if ( error2 )
- return error2;
- }
-
- error2 = cf2_getGlyphOutline( font, &buf, &transform, &glyphWidth );
- if ( error2 )
- return FT_ERR( Invalid_File_Format );
-
- cf2_setGlyphWidth( &font->outline, glyphWidth );
-
- return FT_Err_Ok;
- }
- }
-
-
- /* get pointer to current FreeType subfont (based on current glyphID) */
- FT_LOCAL_DEF( CFF_SubFont )
- cf2_getSubfont( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- return decoder->current_subfont;
- }
-
-
- /* get pointer to VStore structure */
- FT_LOCAL_DEF( CFF_VStore )
- cf2_getVStore( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->cff );
-
- return &decoder->cff->vstore;
- }
-
-
- /* get maxstack value from CFF2 Top DICT */
- FT_LOCAL_DEF( FT_UInt )
- cf2_getMaxstack( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->cff );
-
- return decoder->cff->top_font.font_dict.maxstack;
- }
-
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- /* Get normalized design vector for current render request; */
- /* return pointer and length. */
- /* */
- /* Note: Uses FT_Fixed not CF2_Fixed for the vector. */
- FT_LOCAL_DEF( FT_Error )
- cf2_getNormalizedVector( CFF_Decoder* decoder,
- CF2_UInt *len,
- FT_Fixed* *vec )
- {
- FT_ASSERT( decoder && decoder->builder.face );
- FT_ASSERT( vec && len );
-
- return cff_get_var_blend( decoder->builder.face, len, NULL, vec, NULL );
- }
-#endif
-
-
- /* get `y_ppem' from `CFF_Size' */
- FT_LOCAL_DEF( CF2_Fixed )
- cf2_getPpemY( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder &&
- decoder->builder.face &&
- decoder->builder.face->root.size );
-
- /*
- * Note that `y_ppem' can be zero if there wasn't a call to
- * `FT_Set_Char_Size' or something similar. However, this isn't a
- * problem since we come to this place in the code only if
- * FT_LOAD_NO_SCALE is set (the other case gets caught by
- * `cf2_checkTransform'). The ppem value is needed to compute the stem
- * darkening, which is disabled for getting the unscaled outline.
- *
- */
- return cf2_intToFixed(
- decoder->builder.face->root.size->metrics.y_ppem );
- }
-
-
- /* get standard stem widths for the current subfont; */
- /* FreeType stores these as integer font units */
- /* (note: variable names seem swapped) */
- FT_LOCAL_DEF( CF2_Fixed )
- cf2_getStdVW( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- return cf2_intToFixed(
- decoder->current_subfont->private_dict.standard_height );
- }
-
-
- FT_LOCAL_DEF( CF2_Fixed )
- cf2_getStdHW( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- return cf2_intToFixed(
- decoder->current_subfont->private_dict.standard_width );
- }
-
-
- /* note: FreeType stores 1000 times the actual value for `BlueScale' */
- FT_LOCAL_DEF( void )
- cf2_getBlueMetrics( CFF_Decoder* decoder,
- CF2_Fixed* blueScale,
- CF2_Fixed* blueShift,
- CF2_Fixed* blueFuzz )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- *blueScale = FT_DivFix(
- decoder->current_subfont->private_dict.blue_scale,
- cf2_intToFixed( 1000 ) );
- *blueShift = cf2_intToFixed(
- decoder->current_subfont->private_dict.blue_shift );
- *blueFuzz = cf2_intToFixed(
- decoder->current_subfont->private_dict.blue_fuzz );
- }
-
-
- /* get blue values counts and arrays; the FreeType parser has validated */
- /* the counts and verified that each is an even number */
- FT_LOCAL_DEF( void )
- cf2_getBlueValues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- *count = decoder->current_subfont->private_dict.num_blue_values;
- *data = (FT_Pos*)
- &decoder->current_subfont->private_dict.blue_values;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_getOtherBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- *count = decoder->current_subfont->private_dict.num_other_blues;
- *data = (FT_Pos*)
- &decoder->current_subfont->private_dict.other_blues;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_getFamilyBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- *count = decoder->current_subfont->private_dict.num_family_blues;
- *data = (FT_Pos*)
- &decoder->current_subfont->private_dict.family_blues;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_getFamilyOtherBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- *count = decoder->current_subfont->private_dict.num_family_other_blues;
- *data = (FT_Pos*)
- &decoder->current_subfont->private_dict.family_other_blues;
- }
-
-
- FT_LOCAL_DEF( CF2_Int )
- cf2_getLanguageGroup( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- return decoder->current_subfont->private_dict.language_group;
- }
-
-
- /* convert unbiased subroutine index to `CF2_Buffer' and */
- /* return 0 on success */
- FT_LOCAL_DEF( CF2_Int )
- cf2_initGlobalRegionBuffer( CFF_Decoder* decoder,
- CF2_Int subrNum,
- CF2_Buffer buf )
- {
- CF2_UInt idx;
-
-
- FT_ASSERT( decoder );
-
- FT_ZERO( buf );
-
- idx = (CF2_UInt)( subrNum + decoder->globals_bias );
- if ( idx >= decoder->num_globals )
- return TRUE; /* error */
-
- FT_ASSERT( decoder->globals );
-
- buf->start =
- buf->ptr = decoder->globals[idx];
- buf->end = decoder->globals[idx + 1];
-
- return FALSE; /* success */
- }
-
-
- /* convert AdobeStandardEncoding code to CF2_Buffer; */
- /* used for seac component */
- FT_LOCAL_DEF( FT_Error )
- cf2_getSeacComponent( CFF_Decoder* decoder,
- CF2_Int code,
- CF2_Buffer buf )
- {
- CF2_Int gid;
- FT_Byte* charstring;
- FT_ULong len;
- FT_Error error;
-
-
- FT_ASSERT( decoder );
-
- FT_ZERO( buf );
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- /* Incremental fonts don't necessarily have valid charsets. */
- /* They use the character code, not the glyph index, in this case. */
- if ( decoder->builder.face->root.internal->incremental_interface )
- gid = code;
- else
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
- {
- gid = cff_lookup_glyph_by_stdcharcode( decoder->cff, code );
- if ( gid < 0 )
- return FT_THROW( Invalid_Glyph_Format );
- }
-
- error = cff_get_glyph_data( decoder->builder.face,
- (CF2_UInt)gid,
- &charstring,
- &len );
- /* TODO: for now, just pass the FreeType error through */
- if ( error )
- return error;
-
- /* assume input has been validated */
- FT_ASSERT( charstring + len >= charstring );
-
- buf->start = charstring;
- buf->end = charstring + len;
- buf->ptr = buf->start;
-
- return FT_Err_Ok;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_freeSeacComponent( CFF_Decoder* decoder,
- CF2_Buffer buf )
- {
- FT_ASSERT( decoder );
-
- cff_free_glyph_data( decoder->builder.face,
- (FT_Byte**)&buf->start,
- (FT_ULong)( buf->end - buf->start ) );
- }
-
-
- FT_LOCAL_DEF( CF2_Int )
- cf2_initLocalRegionBuffer( CFF_Decoder* decoder,
- CF2_Int subrNum,
- CF2_Buffer buf )
- {
- CF2_UInt idx;
-
-
- FT_ASSERT( decoder );
-
- FT_ZERO( buf );
-
- idx = (CF2_UInt)( subrNum + decoder->locals_bias );
- if ( idx >= decoder->num_locals )
- return TRUE; /* error */
-
- FT_ASSERT( decoder->locals );
-
- buf->start =
- buf->ptr = decoder->locals[idx];
- buf->end = decoder->locals[idx + 1];
-
- return FALSE; /* success */
- }
-
-
- FT_LOCAL_DEF( CF2_Fixed )
- cf2_getDefaultWidthX( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- return cf2_intToFixed(
- decoder->current_subfont->private_dict.default_width );
- }
-
-
- FT_LOCAL_DEF( CF2_Fixed )
- cf2_getNominalWidthX( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- return cf2_intToFixed(
- decoder->current_subfont->private_dict.nominal_width );
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_outline_reset( CF2_Outline outline )
- {
- CFF_Decoder* decoder = outline->decoder;
-
-
- FT_ASSERT( decoder );
-
- outline->root.windingMomentum = 0;
-
- FT_GlyphLoader_Rewind( decoder->builder.loader );
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_outline_close( CF2_Outline outline )
- {
- CFF_Decoder* decoder = outline->decoder;
-
-
- FT_ASSERT( decoder );
-
- cff_builder_close_contour( &decoder->builder );
-
- FT_GlyphLoader_Add( decoder->builder.loader );
- }
-
-
-/* END */
diff --git a/src/cff/cf2ft.h b/src/cff/cf2ft.h
deleted file mode 100644
index b054a6e95..000000000
--- a/src/cff/cf2ft.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2ft.h */
-/* */
-/* FreeType Glue Component to Adobe's Interpreter (specification). */
-/* */
-/* Copyright 2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CF2FT_H_
-#define CF2FT_H_
-
-
-#include "cf2types.h"
-
-
- /* TODO: disable asserts for now */
-#define CF2_NDEBUG
-
-
-#include FT_SYSTEM_H
-
-#include "cf2glue.h"
-#include "cffgload.h" /* for CFF_Decoder */
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( FT_Error )
- cf2_decoder_parse_charstrings( CFF_Decoder* decoder,
- FT_Byte* charstring_base,
- FT_ULong charstring_len );
-
- FT_LOCAL( CFF_SubFont )
- cf2_getSubfont( CFF_Decoder* decoder );
-
- FT_LOCAL( CFF_VStore )
- cf2_getVStore( CFF_Decoder* decoder );
-
- FT_LOCAL( FT_UInt )
- cf2_getMaxstack( CFF_Decoder* decoder );
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_LOCAL( FT_Error )
- cf2_getNormalizedVector( CFF_Decoder* decoder,
- CF2_UInt *len,
- FT_Fixed* *vec );
-#endif
-
- FT_LOCAL( CF2_Fixed )
- cf2_getPpemY( CFF_Decoder* decoder );
- FT_LOCAL( CF2_Fixed )
- cf2_getStdVW( CFF_Decoder* decoder );
- FT_LOCAL( CF2_Fixed )
- cf2_getStdHW( CFF_Decoder* decoder );
-
- FT_LOCAL( void )
- cf2_getBlueMetrics( CFF_Decoder* decoder,
- CF2_Fixed* blueScale,
- CF2_Fixed* blueShift,
- CF2_Fixed* blueFuzz );
- FT_LOCAL( void )
- cf2_getBlueValues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data );
- FT_LOCAL( void )
- cf2_getOtherBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data );
- FT_LOCAL( void )
- cf2_getFamilyBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data );
- FT_LOCAL( void )
- cf2_getFamilyOtherBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data );
-
- FT_LOCAL( CF2_Int )
- cf2_getLanguageGroup( CFF_Decoder* decoder );
-
- FT_LOCAL( CF2_Int )
- cf2_initGlobalRegionBuffer( CFF_Decoder* decoder,
- CF2_Int subrNum,
- CF2_Buffer buf );
- FT_LOCAL( FT_Error )
- cf2_getSeacComponent( CFF_Decoder* decoder,
- CF2_Int code,
- CF2_Buffer buf );
- FT_LOCAL( void )
- cf2_freeSeacComponent( CFF_Decoder* decoder,
- CF2_Buffer buf );
- FT_LOCAL( CF2_Int )
- cf2_initLocalRegionBuffer( CFF_Decoder* decoder,
- CF2_Int subrNum,
- CF2_Buffer buf );
-
- FT_LOCAL( CF2_Fixed )
- cf2_getDefaultWidthX( CFF_Decoder* decoder );
- FT_LOCAL( CF2_Fixed )
- cf2_getNominalWidthX( CFF_Decoder* decoder );
-
-
- /*
- * FreeType client outline
- *
- * process output from the charstring interpreter
- */
- typedef struct CF2_OutlineRec_
- {
- CF2_OutlineCallbacksRec root; /* base class must be first */
- CFF_Decoder* decoder;
-
- } CF2_OutlineRec, *CF2_Outline;
-
-
- FT_LOCAL( void )
- cf2_outline_reset( CF2_Outline outline );
- FT_LOCAL( void )
- cf2_outline_close( CF2_Outline outline );
-
-
-FT_END_HEADER
-
-
-#endif /* CF2FT_H_ */
-
-
-/* END */
diff --git a/src/cff/cf2glue.h b/src/cff/cf2glue.h
deleted file mode 100644
index 56a7c248f..000000000
--- a/src/cff/cf2glue.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2glue.h */
-/* */
-/* Adobe's code for shared stuff (specification only). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CF2GLUE_H_
-#define CF2GLUE_H_
-
-
-/* common includes for other modules */
-#include "cf2error.h"
-#include "cf2fixed.h"
-#include "cf2arrst.h"
-#include "cf2read.h"
-
-
-FT_BEGIN_HEADER
-
-
- /* rendering parameters */
-
- /* apply hints to rendered glyphs */
-#define CF2_FlagsHinted 1
- /* for testing */
-#define CF2_FlagsDarkened 2
-
- /* type for holding the flags */
- typedef CF2_Int CF2_RenderingFlags;
-
-
- /* elements of a glyph outline */
- typedef enum CF2_PathOp_
- {
- CF2_PathOpMoveTo = 1, /* change the current point */
- CF2_PathOpLineTo = 2, /* line */
- CF2_PathOpQuadTo = 3, /* quadratic curve */
- CF2_PathOpCubeTo = 4 /* cubic curve */
-
- } CF2_PathOp;
-
-
- /* a matrix of fixed point values */
- typedef struct CF2_Matrix_
- {
- CF2_F16Dot16 a;
- CF2_F16Dot16 b;
- CF2_F16Dot16 c;
- CF2_F16Dot16 d;
- CF2_F16Dot16 tx;
- CF2_F16Dot16 ty;
-
- } CF2_Matrix;
-
-
- /* these typedefs are needed by more than one header file */
- /* and gcc compiler doesn't allow redefinition */
- typedef struct CF2_FontRec_ CF2_FontRec, *CF2_Font;
- typedef struct CF2_HintRec_ CF2_HintRec, *CF2_Hint;
-
-
- /* A common structure for all callback parameters. */
- /* */
- /* Some members may be unused. For example, `pt0' is not used for */
- /* `moveTo' and `pt3' is not used for `quadTo'. The initial point `pt0' */
- /* is included for each path element for generality; curve conversions */
- /* need it. The `op' parameter allows one function to handle multiple */
- /* element types. */
-
- typedef struct CF2_CallbackParamsRec_
- {
- FT_Vector pt0;
- FT_Vector pt1;
- FT_Vector pt2;
- FT_Vector pt3;
-
- CF2_Int op;
-
- } CF2_CallbackParamsRec, *CF2_CallbackParams;
-
-
- /* forward reference */
- typedef struct CF2_OutlineCallbacksRec_ CF2_OutlineCallbacksRec,
- *CF2_OutlineCallbacks;
-
- /* callback function pointers */
- typedef void
- (*CF2_Callback_Type)( CF2_OutlineCallbacks callbacks,
- const CF2_CallbackParams params );
-
-
- struct CF2_OutlineCallbacksRec_
- {
- CF2_Callback_Type moveTo;
- CF2_Callback_Type lineTo;
- CF2_Callback_Type quadTo;
- CF2_Callback_Type cubeTo;
-
- CF2_Int windingMomentum; /* for winding order detection */
-
- FT_Memory memory;
- FT_Error* error;
- };
-
-
-FT_END_HEADER
-
-
-#endif /* CF2GLUE_H_ */
-
-
-/* END */
diff --git a/src/cff/cf2hints.c b/src/cff/cf2hints.c
deleted file mode 100644
index e0f2cc91c..000000000
--- a/src/cff/cf2hints.c
+++ /dev/null
@@ -1,1873 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2hints.c */
-/* */
-/* Adobe's code for handling CFF hints (body). */
-/* */
-/* Copyright 2007-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2glue.h"
-#include "cf2font.h"
-#include "cf2hints.h"
-#include "cf2intrp.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cf2hints
-
-
- typedef struct CF2_HintMoveRec_
- {
- size_t j; /* index of upper hint map edge */
- CF2_Fixed moveUp; /* adjustment to optimum position */
-
- } CF2_HintMoveRec, *CF2_HintMove;
-
-
- /* Compute angular momentum for winding order detection. It is called */
- /* for all lines and curves, but not necessarily in element order. */
- static CF2_Int
- cf2_getWindingMomentum( CF2_Fixed x1,
- CF2_Fixed y1,
- CF2_Fixed x2,
- CF2_Fixed y2 )
- {
- /* cross product of pt1 position from origin with pt2 position from */
- /* pt1; we reduce the precision so that the result fits into 32 bits */
-
- return ( x1 >> 16 ) * ( SUB_INT32( y2, y1 ) >> 16 ) -
- ( y1 >> 16 ) * ( SUB_INT32( x2, x1 ) >> 16 );
- }
-
-
- /*
- * Construct from a StemHint; this is used as a parameter to
- * `cf2_blues_capture'.
- * `hintOrigin' is the character space displacement of a seac accent.
- * Adjust stem hint for darkening here.
- *
- */
- static void
- cf2_hint_init( CF2_Hint hint,
- const CF2_ArrStack stemHintArray,
- size_t indexStemHint,
- const CF2_Font font,
- CF2_Fixed hintOrigin,
- CF2_Fixed scale,
- FT_Bool bottom )
- {
- CF2_Fixed width;
- const CF2_StemHintRec* stemHint;
-
-
- FT_ZERO( hint );
-
- stemHint = (const CF2_StemHintRec*)cf2_arrstack_getPointer(
- stemHintArray,
- indexStemHint );
-
- width = SUB_INT32( stemHint->max, stemHint->min );
-
- if ( width == cf2_intToFixed( -21 ) )
- {
- /* ghost bottom */
-
- if ( bottom )
- {
- hint->csCoord = stemHint->max;
- hint->flags = CF2_GhostBottom;
- }
- else
- hint->flags = 0;
- }
-
- else if ( width == cf2_intToFixed( -20 ) )
- {
- /* ghost top */
-
- if ( bottom )
- hint->flags = 0;
- else
- {
- hint->csCoord = stemHint->min;
- hint->flags = CF2_GhostTop;
- }
- }
-
- else if ( width < 0 )
- {
- /* inverted pair */
-
- /*
- * Hints with negative widths were produced by an early version of a
- * non-Adobe font tool. The Type 2 spec allows edge (ghost) hints
- * with negative widths, but says
- *
- * All other negative widths have undefined meaning.
- *
- * CoolType has a silent workaround that negates the hint width; for
- * permissive mode, we do the same here.
- *
- * Note: Such fonts cannot use ghost hints, but should otherwise work.
- * Note: Some poor hints in our faux fonts can produce negative
- * widths at some blends. For example, see a light weight of
- * `u' in ASerifMM.
- *
- */
- if ( bottom )
- {
- hint->csCoord = stemHint->max;
- hint->flags = CF2_PairBottom;
- }
- else
- {
- hint->csCoord = stemHint->min;
- hint->flags = CF2_PairTop;
- }
- }
-
- else
- {
- /* normal pair */
-
- if ( bottom )
- {
- hint->csCoord = stemHint->min;
- hint->flags = CF2_PairBottom;
- }
- else
- {
- hint->csCoord = stemHint->max;
- hint->flags = CF2_PairTop;
- }
- }
-
- /* Now that ghost hints have been detected, adjust this edge for */
- /* darkening. Bottoms are not changed; tops are incremented by twice */
- /* `darkenY'. */
- if ( cf2_hint_isTop( hint ) )
- hint->csCoord = ADD_INT32( hint->csCoord, 2 * font->darkenY );
-
- hint->csCoord = ADD_INT32( hint->csCoord, hintOrigin );
- hint->scale = scale;
- hint->index = indexStemHint; /* index in original stem hint array */
-
- /* if original stem hint has been used, use the same position */
- if ( hint->flags != 0 && stemHint->used )
- {
- if ( cf2_hint_isTop( hint ) )
- hint->dsCoord = stemHint->maxDS;
- else
- hint->dsCoord = stemHint->minDS;
-
- cf2_hint_lock( hint );
- }
- else
- hint->dsCoord = FT_MulFix( hint->csCoord, scale );
- }
-
-
- /* initialize an invalid hint map element */
- static void
- cf2_hint_initZero( CF2_Hint hint )
- {
- FT_ZERO( hint );
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- cf2_hint_isValid( const CF2_Hint hint )
- {
- return (FT_Bool)( hint->flags != 0 );
- }
-
-
- static FT_Bool
- cf2_hint_isPair( const CF2_Hint hint )
- {
- return (FT_Bool)( ( hint->flags &
- ( CF2_PairBottom | CF2_PairTop ) ) != 0 );
- }
-
-
- static FT_Bool
- cf2_hint_isPairTop( const CF2_Hint hint )
- {
- return (FT_Bool)( ( hint->flags & CF2_PairTop ) != 0 );
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- cf2_hint_isTop( const CF2_Hint hint )
- {
- return (FT_Bool)( ( hint->flags &
- ( CF2_PairTop | CF2_GhostTop ) ) != 0 );
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- cf2_hint_isBottom( const CF2_Hint hint )
- {
- return (FT_Bool)( ( hint->flags &
- ( CF2_PairBottom | CF2_GhostBottom ) ) != 0 );
- }
-
-
- static FT_Bool
- cf2_hint_isLocked( const CF2_Hint hint )
- {
- return (FT_Bool)( ( hint->flags & CF2_Locked ) != 0 );
- }
-
-
- static FT_Bool
- cf2_hint_isSynthetic( const CF2_Hint hint )
- {
- return (FT_Bool)( ( hint->flags & CF2_Synthetic ) != 0 );
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_hint_lock( CF2_Hint hint )
- {
- hint->flags |= CF2_Locked;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_hintmap_init( CF2_HintMap hintmap,
- CF2_Font font,
- CF2_HintMap initialMap,
- CF2_ArrStack hintMoves,
- CF2_Fixed scale )
- {
- FT_ZERO( hintmap );
-
- /* copy parameters from font instance */
- hintmap->hinted = font->hinted;
- hintmap->scale = scale;
- hintmap->font = font;
- hintmap->initialHintMap = initialMap;
- /* will clear in `cf2_hintmap_adjustHints' */
- hintmap->hintMoves = hintMoves;
- }
-
-
- static FT_Bool
- cf2_hintmap_isValid( const CF2_HintMap hintmap )
- {
- return hintmap->isValid;
- }
-
-
- /* transform character space coordinate to device space using hint map */
- static CF2_Fixed
- cf2_hintmap_map( CF2_HintMap hintmap,
- CF2_Fixed csCoord )
- {
- if ( hintmap->count == 0 || ! hintmap->hinted )
- {
- /* there are no hints; use uniform scale and zero offset */
- return FT_MulFix( csCoord, hintmap->scale );
- }
- else
- {
- /* start linear search from last hit */
- CF2_UInt i = hintmap->lastIndex;
-
-
- FT_ASSERT( hintmap->lastIndex < CF2_MAX_HINT_EDGES );
-
- /* search up */
- while ( i < hintmap->count - 1 &&
- csCoord >= hintmap->edge[i + 1].csCoord )
- i += 1;
-
- /* search down */
- while ( i > 0 && csCoord < hintmap->edge[i].csCoord )
- i -= 1;
-
- hintmap->lastIndex = i;
-
- if ( i == 0 && csCoord < hintmap->edge[0].csCoord )
- {
- /* special case for points below first edge: use uniform scale */
- return ADD_INT32( FT_MulFix( SUB_INT32( csCoord,
- hintmap->edge[0].csCoord ),
- hintmap->scale ),
- hintmap->edge[0].dsCoord );
- }
- else
- {
- /*
- * Note: entries with duplicate csCoord are allowed.
- * Use edge[i], the highest entry where csCoord >= entry[i].csCoord
- */
- return ADD_INT32( FT_MulFix( SUB_INT32( csCoord,
- hintmap->edge[i].csCoord ),
- hintmap->edge[i].scale ),
- hintmap->edge[i].dsCoord );
- }
- }
- }
-
-
- /*
- * This hinting policy moves a hint pair in device space so that one of
- * its two edges is on a device pixel boundary (its fractional part is
- * zero). `cf2_hintmap_insertHint' guarantees no overlap in CS
- * space. Ensure here that there is no overlap in DS.
- *
- * In the first pass, edges are adjusted relative to adjacent hints.
- * Those that are below have already been adjusted. Those that are
- * above have not yet been adjusted. If a hint above blocks an
- * adjustment to an optimal position, we will try again in a second
- * pass. The second pass is top-down.
- *
- */
-
- static void
- cf2_hintmap_adjustHints( CF2_HintMap hintmap )
- {
- size_t i, j;
-
-
- cf2_arrstack_clear( hintmap->hintMoves ); /* working storage */
-
- /*
- * First pass is bottom-up (font hint order) without look-ahead.
- * Locked edges are already adjusted.
- * Unlocked edges begin with dsCoord from `initialHintMap'.
- * Save edges that are not optimally adjusted in `hintMoves' array,
- * and process them in second pass.
- */
-
- for ( i = 0; i < hintmap->count; i++ )
- {
- FT_Bool isPair = cf2_hint_isPair( &hintmap->edge[i] );
-
-
- /* index of upper edge (same value for ghost hint) */
- j = isPair ? i + 1 : i;
-
- FT_ASSERT( j < hintmap->count );
- FT_ASSERT( cf2_hint_isValid( &hintmap->edge[i] ) );
- FT_ASSERT( cf2_hint_isValid( &hintmap->edge[j] ) );
- FT_ASSERT( cf2_hint_isLocked( &hintmap->edge[i] ) ==
- cf2_hint_isLocked( &hintmap->edge[j] ) );
-
- if ( !cf2_hint_isLocked( &hintmap->edge[i] ) )
- {
- /* hint edge is not locked, we can adjust it */
- CF2_Fixed fracDown = cf2_fixedFraction( hintmap->edge[i].dsCoord );
- CF2_Fixed fracUp = cf2_fixedFraction( hintmap->edge[j].dsCoord );
-
- /* calculate all four possibilities; moves down are negative */
- CF2_Fixed downMoveDown = 0 - fracDown;
- CF2_Fixed upMoveDown = 0 - fracUp;
- CF2_Fixed downMoveUp = ( fracDown == 0 )
- ? 0
- : cf2_intToFixed( 1 ) - fracDown;
- CF2_Fixed upMoveUp = ( fracUp == 0 )
- ? 0
- : cf2_intToFixed( 1 ) - fracUp;
-
- /* smallest move up */
- CF2_Fixed moveUp = FT_MIN( downMoveUp, upMoveUp );
- /* smallest move down */
- CF2_Fixed moveDown = FT_MAX( downMoveDown, upMoveDown );
-
- /* final amount to move edge or edge pair */
- CF2_Fixed move;
-
- CF2_Fixed downMinCounter = CF2_MIN_COUNTER;
- CF2_Fixed upMinCounter = CF2_MIN_COUNTER;
- FT_Bool saveEdge = FALSE;
-
-
- /* minimum counter constraint doesn't apply when adjacent edges */
- /* are synthetic */
- /* TODO: doesn't seem a big effect; for now, reduce the code */
-#if 0
- if ( i == 0 ||
- cf2_hint_isSynthetic( &hintmap->edge[i - 1] ) )
- downMinCounter = 0;
-
- if ( j >= hintmap->count - 1 ||
- cf2_hint_isSynthetic( &hintmap->edge[j + 1] ) )
- upMinCounter = 0;
-#endif
-
- /* is there room to move up? */
- /* there is if we are at top of array or the next edge is at or */
- /* beyond proposed move up? */
- if ( j >= hintmap->count - 1 ||
- hintmap->edge[j + 1].dsCoord >=
- ADD_INT32( hintmap->edge[j].dsCoord,
- moveUp + upMinCounter ) )
- {
- /* there is room to move up; is there also room to move down? */
- if ( i == 0 ||
- hintmap->edge[i - 1].dsCoord <=
- ADD_INT32( hintmap->edge[i].dsCoord,
- moveDown - downMinCounter ) )
- {
- /* move smaller absolute amount */
- move = ( -moveDown < moveUp ) ? moveDown : moveUp; /* optimum */
- }
- else
- move = moveUp;
- }
- else
- {
- /* is there room to move down? */
- if ( i == 0 ||
- hintmap->edge[i - 1].dsCoord <=
- ADD_INT32( hintmap->edge[i].dsCoord,
- moveDown - downMinCounter ) )
- {
- move = moveDown;
- /* true if non-optimum move */
- saveEdge = (FT_Bool)( moveUp < -moveDown );
- }
- else
- {
- /* no room to move either way without overlapping or reducing */
- /* the counter too much */
- move = 0;
- saveEdge = TRUE;
- }
- }
-
- /* Identify non-moves and moves down that aren't optimal, and save */
- /* them for second pass. */
- /* Do this only if there is an unlocked edge above (which could */
- /* possibly move). */
- if ( saveEdge &&
- j < hintmap->count - 1 &&
- !cf2_hint_isLocked( &hintmap->edge[j + 1] ) )
- {
- CF2_HintMoveRec savedMove;
-
-
- savedMove.j = j;
- /* desired adjustment in second pass */
- savedMove.moveUp = moveUp - move;
-
- cf2_arrstack_push( hintmap->hintMoves, &savedMove );
- }
-
- /* move the edge(s) */
- hintmap->edge[i].dsCoord = ADD_INT32( hintmap->edge[i].dsCoord,
- move );
- if ( isPair )
- hintmap->edge[j].dsCoord = ADD_INT32( hintmap->edge[j].dsCoord,
- move );
- }
-
- /* assert there are no overlaps in device space */
- FT_ASSERT( i == 0 ||
- hintmap->edge[i - 1].dsCoord <= hintmap->edge[i].dsCoord );
- FT_ASSERT( i < j ||
- hintmap->edge[i].dsCoord <= hintmap->edge[j].dsCoord );
-
- /* adjust the scales, avoiding divide by zero */
- if ( i > 0 )
- {
- if ( hintmap->edge[i].csCoord != hintmap->edge[i - 1].csCoord )
- hintmap->edge[i - 1].scale =
- FT_DivFix( SUB_INT32( hintmap->edge[i].dsCoord,
- hintmap->edge[i - 1].dsCoord ),
- SUB_INT32( hintmap->edge[i].csCoord,
- hintmap->edge[i - 1].csCoord ) );
- }
-
- if ( isPair )
- {
- if ( hintmap->edge[j].csCoord != hintmap->edge[j - 1].csCoord )
- hintmap->edge[j - 1].scale =
- FT_DivFix( SUB_INT32( hintmap->edge[j].dsCoord,
- hintmap->edge[j - 1].dsCoord ),
- SUB_INT32( hintmap->edge[j].csCoord,
- hintmap->edge[j - 1].csCoord ) );
-
- i += 1; /* skip upper edge on next loop */
- }
- }
-
- /* second pass tries to move non-optimal hints up, in case there is */
- /* room now */
- for ( i = cf2_arrstack_size( hintmap->hintMoves ); i > 0; i-- )
- {
- CF2_HintMove hintMove = (CF2_HintMove)
- cf2_arrstack_getPointer( hintmap->hintMoves, i - 1 );
-
-
- j = hintMove->j;
-
- /* this was tested before the push, above */
- FT_ASSERT( j < hintmap->count - 1 );
-
- /* is there room to move up? */
- if ( hintmap->edge[j + 1].dsCoord >=
- ADD_INT32( hintmap->edge[j].dsCoord,
- hintMove->moveUp + CF2_MIN_COUNTER ) )
- {
- /* there is more room now, move edge up */
- hintmap->edge[j].dsCoord = ADD_INT32( hintmap->edge[j].dsCoord,
- hintMove->moveUp );
-
- if ( cf2_hint_isPair( &hintmap->edge[j] ) )
- {
- FT_ASSERT( j > 0 );
- hintmap->edge[j - 1].dsCoord =
- ADD_INT32( hintmap->edge[j - 1].dsCoord, hintMove->moveUp );
- }
- }
- }
- }
-
-
- /* insert hint edges into map, sorted by csCoord */
- static void
- cf2_hintmap_insertHint( CF2_HintMap hintmap,
- CF2_Hint bottomHintEdge,
- CF2_Hint topHintEdge )
- {
- CF2_UInt indexInsert;
-
- /* set default values, then check for edge hints */
- FT_Bool isPair = TRUE;
- CF2_Hint firstHintEdge = bottomHintEdge;
- CF2_Hint secondHintEdge = topHintEdge;
-
-
- /* one or none of the input params may be invalid when dealing with */
- /* edge hints; at least one edge must be valid */
- FT_ASSERT( cf2_hint_isValid( bottomHintEdge ) ||
- cf2_hint_isValid( topHintEdge ) );
-
- /* determine how many and which edges to insert */
- if ( !cf2_hint_isValid( bottomHintEdge ) )
- {
- /* insert only the top edge */
- firstHintEdge = topHintEdge;
- isPair = FALSE;
- }
- else if ( !cf2_hint_isValid( topHintEdge ) )
- {
- /* insert only the bottom edge */
- isPair = FALSE;
- }
-
- /* paired edges must be in proper order */
- if ( isPair &&
- topHintEdge->csCoord < bottomHintEdge->csCoord )
- return;
-
- /* linear search to find index value of insertion point */
- indexInsert = 0;
- for ( ; indexInsert < hintmap->count; indexInsert++ )
- {
- if ( hintmap->edge[indexInsert].csCoord >= firstHintEdge->csCoord )
- break;
- }
-
- /*
- * Discard any hints that overlap in character space. Most often, this
- * is while building the initial map, where captured hints from all
- * zones are combined. Define overlap to include hints that `touch'
- * (overlap zero). Hiragino Sans/Gothic fonts have numerous hints that
- * touch. Some fonts have non-ideographic glyphs that overlap our
- * synthetic hints.
- *
- * Overlap also occurs when darkening stem hints that are close.
- *
- */
- if ( indexInsert < hintmap->count )
- {
- /* we are inserting before an existing edge: */
- /* verify that an existing edge is not the same */
- if ( hintmap->edge[indexInsert].csCoord == firstHintEdge->csCoord )
- return; /* ignore overlapping stem hint */
-
- /* verify that a new pair does not straddle the next edge */
- if ( isPair &&
- hintmap->edge[indexInsert].csCoord <= secondHintEdge->csCoord )
- return; /* ignore overlapping stem hint */
-
- /* verify that we are not inserting between paired edges */
- if ( cf2_hint_isPairTop( &hintmap->edge[indexInsert] ) )
- return; /* ignore overlapping stem hint */
- }
-
- /* recompute device space locations using initial hint map */
- if ( cf2_hintmap_isValid( hintmap->initialHintMap ) &&
- !cf2_hint_isLocked( firstHintEdge ) )
- {
- if ( isPair )
- {
- /* Use hint map to position the center of stem, and nominal scale */
- /* to position the two edges. This preserves the stem width. */
- CF2_Fixed midpoint =
- cf2_hintmap_map(
- hintmap->initialHintMap,
- ADD_INT32( secondHintEdge->csCoord,
- firstHintEdge->csCoord ) / 2 );
- CF2_Fixed halfWidth =
- FT_MulFix( SUB_INT32( secondHintEdge->csCoord,
- firstHintEdge->csCoord ) / 2,
- hintmap->scale );
-
-
- firstHintEdge->dsCoord = SUB_INT32( midpoint, halfWidth );
- secondHintEdge->dsCoord = ADD_INT32( midpoint, halfWidth );
- }
- else
- firstHintEdge->dsCoord = cf2_hintmap_map( hintmap->initialHintMap,
- firstHintEdge->csCoord );
- }
-
- /*
- * Discard any hints that overlap in device space; this can occur
- * because locked hints have been moved to align with blue zones.
- *
- * TODO: Although we might correct this later during adjustment, we
- * don't currently have a way to delete a conflicting hint once it has
- * been inserted. See v2.030 MinionPro-Regular, 12 ppem darkened,
- * initial hint map for second path, glyph 945 (the perispomeni (tilde)
- * in U+1F6E, Greek omega with psili and perispomeni). Darkening is
- * 25. Pair 667,747 initially conflicts in design space with top edge
- * 660. This is because 667 maps to 7.87, and the top edge was
- * captured by a zone at 8.0. The pair is later successfully inserted
- * in a zone without the top edge. In this zone it is adjusted to 8.0,
- * and no longer conflicts with the top edge in design space. This
- * means it can be included in yet a later zone which does have the top
- * edge hint. This produces a small mismatch between the first and
- * last points of this path, even though the hint masks are the same.
- * The density map difference is tiny (1/256).
- *
- */
-
- if ( indexInsert > 0 )
- {
- /* we are inserting after an existing edge */
- if ( firstHintEdge->dsCoord < hintmap->edge[indexInsert - 1].dsCoord )
- return;
- }
-
- if ( indexInsert < hintmap->count )
- {
- /* we are inserting before an existing edge */
- if ( isPair )
- {
- if ( secondHintEdge->dsCoord > hintmap->edge[indexInsert].dsCoord )
- return;
- }
- else
- {
- if ( firstHintEdge->dsCoord > hintmap->edge[indexInsert].dsCoord )
- return;
- }
- }
-
- /* make room to insert */
- {
- CF2_UInt iSrc = hintmap->count - 1;
- CF2_UInt iDst = isPair ? hintmap->count + 1 : hintmap->count;
-
- CF2_UInt count = hintmap->count - indexInsert;
-
-
- if ( iDst >= CF2_MAX_HINT_EDGES )
- {
- FT_TRACE4(( "cf2_hintmap_insertHint: too many hintmaps\n" ));
- return;
- }
-
- while ( count-- )
- hintmap->edge[iDst--] = hintmap->edge[iSrc--];
-
- /* insert first edge */
- hintmap->edge[indexInsert] = *firstHintEdge; /* copy struct */
- hintmap->count += 1;
-
- if ( isPair )
- {
- /* insert second edge */
- hintmap->edge[indexInsert + 1] = *secondHintEdge; /* copy struct */
- hintmap->count += 1;
- }
- }
-
- return;
- }
-
-
- /*
- * Build a map from hints and mask.
- *
- * This function may recur one level if `hintmap->initialHintMap' is not yet
- * valid.
- * If `initialMap' is true, simply build initial map.
- *
- * Synthetic hints are used in two ways. A hint at zero is inserted, if
- * needed, in the initial hint map, to prevent translations from
- * propagating across the origin. If synthetic em box hints are enabled
- * for ideographic dictionaries, then they are inserted in all hint
- * maps, including the initial one.
- *
- */
- FT_LOCAL_DEF( void )
- cf2_hintmap_build( CF2_HintMap hintmap,
- CF2_ArrStack hStemHintArray,
- CF2_ArrStack vStemHintArray,
- CF2_HintMask hintMask,
- CF2_Fixed hintOrigin,
- FT_Bool initialMap )
- {
- FT_Byte* maskPtr;
-
- CF2_Font font = hintmap->font;
- CF2_HintMaskRec tempHintMask;
-
- size_t bitCount, i;
- FT_Byte maskByte;
-
-
- /* check whether initial map is constructed */
- if ( !initialMap && !cf2_hintmap_isValid( hintmap->initialHintMap ) )
- {
- /* make recursive call with initialHintMap and temporary mask; */
- /* temporary mask will get all bits set, below */
- cf2_hintmask_init( &tempHintMask, hintMask->error );
- cf2_hintmap_build( hintmap->initialHintMap,
- hStemHintArray,
- vStemHintArray,
- &tempHintMask,
- hintOrigin,
- TRUE );
- }
-
- if ( !cf2_hintmask_isValid( hintMask ) )
- {
- /* without a hint mask, assume all hints are active */
- cf2_hintmask_setAll( hintMask,
- cf2_arrstack_size( hStemHintArray ) +
- cf2_arrstack_size( vStemHintArray ) );
- if ( !cf2_hintmask_isValid( hintMask ) )
- return; /* too many stem hints */
- }
-
- /* begin by clearing the map */
- hintmap->count = 0;
- hintmap->lastIndex = 0;
-
- /* make a copy of the hint mask so we can modify it */
- tempHintMask = *hintMask;
- maskPtr = cf2_hintmask_getMaskPtr( &tempHintMask );
-
- /* use the hStem hints only, which are first in the mask */
- bitCount = cf2_arrstack_size( hStemHintArray );
-
- /* Defense-in-depth. Should never return here. */
- if ( bitCount > hintMask->bitCount )
- return;
-
- /* synthetic embox hints get highest priority */
- if ( font->blues.doEmBoxHints )
- {
- CF2_HintRec dummy;
-
-
- cf2_hint_initZero( &dummy ); /* invalid hint map element */
-
- /* ghost bottom */
- cf2_hintmap_insertHint( hintmap,
- &font->blues.emBoxBottomEdge,
- &dummy );
- /* ghost top */
- cf2_hintmap_insertHint( hintmap,
- &dummy,
- &font->blues.emBoxTopEdge );
- }
-
- /* insert hints captured by a blue zone or already locked (higher */
- /* priority) */
- for ( i = 0, maskByte = 0x80; i < bitCount; i++ )
- {
- if ( maskByte & *maskPtr )
- {
- /* expand StemHint into two `CF2_Hint' elements */
- CF2_HintRec bottomHintEdge, topHintEdge;
-
-
- cf2_hint_init( &bottomHintEdge,
- hStemHintArray,
- i,
- font,
- hintOrigin,
- hintmap->scale,
- TRUE /* bottom */ );
- cf2_hint_init( &topHintEdge,
- hStemHintArray,
- i,
- font,
- hintOrigin,
- hintmap->scale,
- FALSE /* top */ );
-
- if ( cf2_hint_isLocked( &bottomHintEdge ) ||
- cf2_hint_isLocked( &topHintEdge ) ||
- cf2_blues_capture( &font->blues,
- &bottomHintEdge,
- &topHintEdge ) )
- {
- /* insert captured hint into map */
- cf2_hintmap_insertHint( hintmap, &bottomHintEdge, &topHintEdge );
-
- *maskPtr &= ~maskByte; /* turn off the bit for this hint */
- }
- }
-
- if ( ( i & 7 ) == 7 )
- {
- /* move to next mask byte */
- maskPtr++;
- maskByte = 0x80;
- }
- else
- maskByte >>= 1;
- }
-
- /* initial hint map includes only captured hints plus maybe one at 0 */
-
- /*
- * TODO: There is a problem here because we are trying to build a
- * single hint map containing all captured hints. It is
- * possible for there to be conflicts between captured hints,
- * either because of darkening or because the hints are in
- * separate hint zones (we are ignoring hint zones for the
- * initial map). An example of the latter is MinionPro-Regular
- * v2.030 glyph 883 (Greek Capital Alpha with Psili) at 15ppem.
- * A stem hint for the psili conflicts with the top edge hint
- * for the base character. The stem hint gets priority because
- * of its sort order. In glyph 884 (Greek Capital Alpha with
- * Psili and Oxia), the top of the base character gets a stem
- * hint, and the psili does not. This creates different initial
- * maps for the two glyphs resulting in different renderings of
- * the base character. Will probably defer this either as not
- * worth the cost or as a font bug. I don't think there is any
- * good reason for an accent to be captured by an alignment
- * zone. -darnold 2/12/10
- */
-
- if ( initialMap )
- {
- /* Apply a heuristic that inserts a point for (0,0), unless it's */
- /* already covered by a mapping. This locks the baseline for glyphs */
- /* that have no baseline hints. */
-
- if ( hintmap->count == 0 ||
- hintmap->edge[0].csCoord > 0 ||
- hintmap->edge[hintmap->count - 1].csCoord < 0 )
- {
- /* all edges are above 0 or all edges are below 0; */
- /* construct a locked edge hint at 0 */
-
- CF2_HintRec edge, invalid;
-
-
- cf2_hint_initZero( &edge );
-
- edge.flags = CF2_GhostBottom |
- CF2_Locked |
- CF2_Synthetic;
- edge.scale = hintmap->scale;
-
- cf2_hint_initZero( &invalid );
- cf2_hintmap_insertHint( hintmap, &edge, &invalid );
- }
- }
- else
- {
- /* insert remaining hints */
-
- maskPtr = cf2_hintmask_getMaskPtr( &tempHintMask );
-
- for ( i = 0, maskByte = 0x80; i < bitCount; i++ )
- {
- if ( maskByte & *maskPtr )
- {
- CF2_HintRec bottomHintEdge, topHintEdge;
-
-
- cf2_hint_init( &bottomHintEdge,
- hStemHintArray,
- i,
- font,
- hintOrigin,
- hintmap->scale,
- TRUE /* bottom */ );
- cf2_hint_init( &topHintEdge,
- hStemHintArray,
- i,
- font,
- hintOrigin,
- hintmap->scale,
- FALSE /* top */ );
-
- cf2_hintmap_insertHint( hintmap, &bottomHintEdge, &topHintEdge );
- }
-
- if ( ( i & 7 ) == 7 )
- {
- /* move to next mask byte */
- maskPtr++;
- maskByte = 0x80;
- }
- else
- maskByte >>= 1;
- }
- }
-
- /*
- * Note: The following line is a convenient place to break when
- * debugging hinting. Examine `hintmap->edge' for the list of
- * enabled hints, then step over the call to see the effect of
- * adjustment. We stop here first on the recursive call that
- * creates the initial map, and then on each counter group and
- * hint zone.
- */
-
- /* adjust positions of hint edges that are not locked to blue zones */
- cf2_hintmap_adjustHints( hintmap );
-
- /* save the position of all hints that were used in this hint map; */
- /* if we use them again, we'll locate them in the same position */
- if ( !initialMap )
- {
- for ( i = 0; i < hintmap->count; i++ )
- {
- if ( !cf2_hint_isSynthetic( &hintmap->edge[i] ) )
- {
- /* Note: include both valid and invalid edges */
- /* Note: top and bottom edges are copied back separately */
- CF2_StemHint stemhint = (CF2_StemHint)
- cf2_arrstack_getPointer( hStemHintArray,
- hintmap->edge[i].index );
-
-
- if ( cf2_hint_isTop( &hintmap->edge[i] ) )
- stemhint->maxDS = hintmap->edge[i].dsCoord;
- else
- stemhint->minDS = hintmap->edge[i].dsCoord;
-
- stemhint->used = TRUE;
- }
- }
- }
-
- /* hint map is ready to use */
- hintmap->isValid = TRUE;
-
- /* remember this mask has been used */
- cf2_hintmask_setNew( hintMask, FALSE );
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_glyphpath_init( CF2_GlyphPath glyphpath,
- CF2_Font font,
- CF2_OutlineCallbacks callbacks,
- CF2_Fixed scaleY,
- /* CF2_Fixed hShift, */
- CF2_ArrStack hStemHintArray,
- CF2_ArrStack vStemHintArray,
- CF2_HintMask hintMask,
- CF2_Fixed hintOriginY,
- const CF2_Blues blues,
- const FT_Vector* fractionalTranslation )
- {
- FT_ZERO( glyphpath );
-
- glyphpath->font = font;
- glyphpath->callbacks = callbacks;
-
- cf2_arrstack_init( &glyphpath->hintMoves,
- font->memory,
- &font->error,
- sizeof ( CF2_HintMoveRec ) );
-
- cf2_hintmap_init( &glyphpath->initialHintMap,
- font,
- &glyphpath->initialHintMap,
- &glyphpath->hintMoves,
- scaleY );
- cf2_hintmap_init( &glyphpath->firstHintMap,
- font,
- &glyphpath->initialHintMap,
- &glyphpath->hintMoves,
- scaleY );
- cf2_hintmap_init( &glyphpath->hintMap,
- font,
- &glyphpath->initialHintMap,
- &glyphpath->hintMoves,
- scaleY );
-
- glyphpath->scaleX = font->innerTransform.a;
- glyphpath->scaleC = font->innerTransform.c;
- glyphpath->scaleY = font->innerTransform.d;
-
- glyphpath->fractionalTranslation = *fractionalTranslation;
-
-#if 0
- glyphpath->hShift = hShift; /* for fauxing */
-#endif
-
- glyphpath->hStemHintArray = hStemHintArray;
- glyphpath->vStemHintArray = vStemHintArray;
- glyphpath->hintMask = hintMask; /* ptr to current mask */
- glyphpath->hintOriginY = hintOriginY;
- glyphpath->blues = blues;
- glyphpath->darken = font->darkened; /* TODO: should we make copies? */
- glyphpath->xOffset = font->darkenX;
- glyphpath->yOffset = font->darkenY;
- glyphpath->miterLimit = 2 * FT_MAX(
- cf2_fixedAbs( glyphpath->xOffset ),
- cf2_fixedAbs( glyphpath->yOffset ) );
-
- /* .1 character space unit */
- glyphpath->snapThreshold = cf2_doubleToFixed( 0.1 );
-
- glyphpath->moveIsPending = TRUE;
- glyphpath->pathIsOpen = FALSE;
- glyphpath->pathIsClosing = FALSE;
- glyphpath->elemIsQueued = FALSE;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_glyphpath_finalize( CF2_GlyphPath glyphpath )
- {
- cf2_arrstack_finalize( &glyphpath->hintMoves );
- }
-
-
- /*
- * Hint point in y-direction and apply outerTransform.
- * Input `current' hint map (which is actually delayed by one element).
- * Input x,y point in Character Space.
- * Output x,y point in Device Space, including translation.
- */
- static void
- cf2_glyphpath_hintPoint( CF2_GlyphPath glyphpath,
- CF2_HintMap hintmap,
- FT_Vector* ppt,
- CF2_Fixed x,
- CF2_Fixed y )
- {
- FT_Vector pt; /* hinted point in upright DS */
-
-
- pt.x = ADD_INT32( FT_MulFix( glyphpath->scaleX, x ),
- FT_MulFix( glyphpath->scaleC, y ) );
- pt.y = cf2_hintmap_map( hintmap, y );
-
- ppt->x = ADD_INT32(
- FT_MulFix( glyphpath->font->outerTransform.a, pt.x ),
- ADD_INT32(
- FT_MulFix( glyphpath->font->outerTransform.c, pt.y ),
- glyphpath->fractionalTranslation.x ) );
- ppt->y = ADD_INT32(
- FT_MulFix( glyphpath->font->outerTransform.b, pt.x ),
- ADD_INT32(
- FT_MulFix( glyphpath->font->outerTransform.d, pt.y ),
- glyphpath->fractionalTranslation.y ) );
- }
-
-
- /*
- * From two line segments, (u1,u2) and (v1,v2), compute a point of
- * intersection on the corresponding lines.
- * Return false if no intersection is found, or if the intersection is
- * too far away from the ends of the line segments, u2 and v1.
- *
- */
- static FT_Bool
- cf2_glyphpath_computeIntersection( CF2_GlyphPath glyphpath,
- const FT_Vector* u1,
- const FT_Vector* u2,
- const FT_Vector* v1,
- const FT_Vector* v2,
- FT_Vector* intersection )
- {
- /*
- * Let `u' be a zero-based vector from the first segment, `v' from the
- * second segment.
- * Let `w 'be the zero-based vector from `u1' to `v1'.
- * `perp' is the `perpendicular dot product'; see
- * http://mathworld.wolfram.com/PerpDotProduct.html.
- * `s' is the parameter for the parametric line for the first segment
- * (`u').
- *
- * See notation in
- * http://softsurfer.com/Archive/algorithm_0104/algorithm_0104B.htm.
- * Calculations are done in 16.16, but must handle the squaring of
- * line lengths in character space. We scale all vectors by 1/32 to
- * avoid overflow. This allows values up to 4095 to be squared. The
- * scale factor cancels in the divide.
- *
- * TODO: the scale factor could be computed from UnitsPerEm.
- *
- */
-
-#define cf2_perp( a, b ) \
- ( FT_MulFix( a.x, b.y ) - FT_MulFix( a.y, b.x ) )
-
- /* round and divide by 32 */
-#define CF2_CS_SCALE( x ) \
- ( ( (x) + 0x10 ) >> 5 )
-
- FT_Vector u, v, w; /* scaled vectors */
- CF2_Fixed denominator, s;
-
-
- u.x = CF2_CS_SCALE( SUB_INT32( u2->x, u1->x ) );
- u.y = CF2_CS_SCALE( SUB_INT32( u2->y, u1->y ) );
- v.x = CF2_CS_SCALE( SUB_INT32( v2->x, v1->x ) );
- v.y = CF2_CS_SCALE( SUB_INT32( v2->y, v1->y ) );
- w.x = CF2_CS_SCALE( SUB_INT32( v1->x, u1->x ) );
- w.y = CF2_CS_SCALE( SUB_INT32( v1->y, u1->y ) );
-
- denominator = cf2_perp( u, v );
-
- if ( denominator == 0 )
- return FALSE; /* parallel or coincident lines */
-
- s = FT_DivFix( cf2_perp( w, v ), denominator );
-
- intersection->x = ADD_INT32( u1->x,
- FT_MulFix( s, SUB_INT32( u2->x, u1->x ) ) );
- intersection->y = ADD_INT32( u1->y,
- FT_MulFix( s, SUB_INT32( u2->y, u1->y ) ) );
-
-
- /*
- * Special case snapping for horizontal and vertical lines.
- * This cleans up intersections and reduces problems with winding
- * order detection.
- * Sample case is sbc cd KozGoPr6N-Medium.otf 20 16685.
- * Note: these calculations are in character space.
- *
- */
-
- if ( u1->x == u2->x &&
- cf2_fixedAbs( SUB_INT32( intersection->x,
- u1->x ) ) < glyphpath->snapThreshold )
- intersection->x = u1->x;
- if ( u1->y == u2->y &&
- cf2_fixedAbs( SUB_INT32( intersection->y,
- u1->y ) ) < glyphpath->snapThreshold )
- intersection->y = u1->y;
-
- if ( v1->x == v2->x &&
- cf2_fixedAbs( SUB_INT32( intersection->x,
- v1->x ) ) < glyphpath->snapThreshold )
- intersection->x = v1->x;
- if ( v1->y == v2->y &&
- cf2_fixedAbs( SUB_INT32( intersection->y,
- v1->y ) ) < glyphpath->snapThreshold )
- intersection->y = v1->y;
-
- /* limit the intersection distance from midpoint of u2 and v1 */
- if ( cf2_fixedAbs( intersection->x - ADD_INT32( u2->x, v1->x ) / 2 ) >
- glyphpath->miterLimit ||
- cf2_fixedAbs( intersection->y - ADD_INT32( u2->y, v1->y ) / 2 ) >
- glyphpath->miterLimit )
- return FALSE;
-
- return TRUE;
- }
-
-
- /*
- * Push the cached element (glyphpath->prevElem*) to the outline
- * consumer. When a darkening offset is used, the end point of the
- * cached element may be adjusted to an intersection point or we may
- * synthesize a connecting line to the current element. If we are
- * closing a subpath, we may also generate a connecting line to the start
- * point.
- *
- * This is where Character Space (CS) is converted to Device Space (DS)
- * using a hint map. This calculation must use a HintMap that was valid
- * at the time the element was saved. For the first point in a subpath,
- * that is a saved HintMap. For most elements, it just means the caller
- * has delayed building a HintMap from the current HintMask.
- *
- * Transform each point with outerTransform and call the outline
- * callbacks. This is a general 3x3 transform:
- *
- * x' = a*x + c*y + tx, y' = b*x + d*y + ty
- *
- * but it uses 4 elements from CF2_Font and the translation part
- * from CF2_GlyphPath.
- *
- */
- static void
- cf2_glyphpath_pushPrevElem( CF2_GlyphPath glyphpath,
- CF2_HintMap hintmap,
- FT_Vector* nextP0,
- FT_Vector nextP1,
- FT_Bool close )
- {
- CF2_CallbackParamsRec params;
-
- FT_Vector* prevP0;
- FT_Vector* prevP1;
-
- FT_Vector intersection = { 0, 0 };
- FT_Bool useIntersection = FALSE;
-
-
- FT_ASSERT( glyphpath->prevElemOp == CF2_PathOpLineTo ||
- glyphpath->prevElemOp == CF2_PathOpCubeTo );
-
- if ( glyphpath->prevElemOp == CF2_PathOpLineTo )
- {
- prevP0 = &glyphpath->prevElemP0;
- prevP1 = &glyphpath->prevElemP1;
- }
- else
- {
- prevP0 = &glyphpath->prevElemP2;
- prevP1 = &glyphpath->prevElemP3;
- }
-
- /* optimization: if previous and next elements are offset by the same */
- /* amount, then there will be no gap, and no need to compute an */
- /* intersection. */
- if ( prevP1->x != nextP0->x || prevP1->y != nextP0->y )
- {
- /* previous element does not join next element: */
- /* adjust end point of previous element to the intersection */
- useIntersection = cf2_glyphpath_computeIntersection( glyphpath,
- prevP0,
- prevP1,
- nextP0,
- &nextP1,
- &intersection );
- if ( useIntersection )
- {
- /* modify the last point of the cached element (either line or */
- /* curve) */
- *prevP1 = intersection;
- }
- }
-
- params.pt0 = glyphpath->currentDS;
-
- switch( glyphpath->prevElemOp )
- {
- case CF2_PathOpLineTo:
- params.op = CF2_PathOpLineTo;
-
- /* note: pt2 and pt3 are unused */
-
- if ( close )
- {
- /* use first hint map if closing */
- cf2_glyphpath_hintPoint( glyphpath,
- &glyphpath->firstHintMap,
- &params.pt1,
- glyphpath->prevElemP1.x,
- glyphpath->prevElemP1.y );
- }
- else
- {
- cf2_glyphpath_hintPoint( glyphpath,
- hintmap,
- &params.pt1,
- glyphpath->prevElemP1.x,
- glyphpath->prevElemP1.y );
- }
-
- /* output only non-zero length lines */
- if ( params.pt0.x != params.pt1.x || params.pt0.y != params.pt1.y )
- {
- glyphpath->callbacks->lineTo( glyphpath->callbacks, &params );
-
- glyphpath->currentDS = params.pt1;
- }
- break;
-
- case CF2_PathOpCubeTo:
- params.op = CF2_PathOpCubeTo;
-
- /* TODO: should we intersect the interior joins (p1-p2 and p2-p3)? */
- cf2_glyphpath_hintPoint( glyphpath,
- hintmap,
- &params.pt1,
- glyphpath->prevElemP1.x,
- glyphpath->prevElemP1.y );
- cf2_glyphpath_hintPoint( glyphpath,
- hintmap,
- &params.pt2,
- glyphpath->prevElemP2.x,
- glyphpath->prevElemP2.y );
- cf2_glyphpath_hintPoint( glyphpath,
- hintmap,
- &params.pt3,
- glyphpath->prevElemP3.x,
- glyphpath->prevElemP3.y );
-
- glyphpath->callbacks->cubeTo( glyphpath->callbacks, &params );
-
- glyphpath->currentDS = params.pt3;
-
- break;
- }
-
- if ( !useIntersection || close )
- {
- /* insert connecting line between end of previous element and start */
- /* of current one */
- /* note: at the end of a subpath, we might do both, so use `nextP0' */
- /* before we change it, below */
-
- if ( close )
- {
- /* if we are closing the subpath, then nextP0 is in the first */
- /* hint zone */
- cf2_glyphpath_hintPoint( glyphpath,
- &glyphpath->firstHintMap,
- &params.pt1,
- nextP0->x,
- nextP0->y );
- }
- else
- {
- cf2_glyphpath_hintPoint( glyphpath,
- hintmap,
- &params.pt1,
- nextP0->x,
- nextP0->y );
- }
-
- if ( params.pt1.x != glyphpath->currentDS.x ||
- params.pt1.y != glyphpath->currentDS.y )
- {
- /* length is nonzero */
- params.op = CF2_PathOpLineTo;
- params.pt0 = glyphpath->currentDS;
-
- /* note: pt2 and pt3 are unused */
- glyphpath->callbacks->lineTo( glyphpath->callbacks, &params );
-
- glyphpath->currentDS = params.pt1;
- }
- }
-
- if ( useIntersection )
- {
- /* return intersection point to caller */
- *nextP0 = intersection;
- }
- }
-
-
- /* push a MoveTo element based on current point and offset of current */
- /* element */
- static void
- cf2_glyphpath_pushMove( CF2_GlyphPath glyphpath,
- FT_Vector start )
- {
- CF2_CallbackParamsRec params;
-
-
- params.op = CF2_PathOpMoveTo;
- params.pt0 = glyphpath->currentDS;
-
- /* Test if move has really happened yet; it would have called */
- /* `cf2_hintmap_build' to set `isValid'. */
- if ( !cf2_hintmap_isValid( &glyphpath->hintMap ) )
- {
- /* we are here iff first subpath is missing a moveto operator: */
- /* synthesize first moveTo to finish initialization of hintMap */
- cf2_glyphpath_moveTo( glyphpath,
- glyphpath->start.x,
- glyphpath->start.y );
- }
-
- cf2_glyphpath_hintPoint( glyphpath,
- &glyphpath->hintMap,
- &params.pt1,
- start.x,
- start.y );
-
- /* note: pt2 and pt3 are unused */
- glyphpath->callbacks->moveTo( glyphpath->callbacks, &params );
-
- glyphpath->currentDS = params.pt1;
- glyphpath->offsetStart0 = start;
- }
-
-
- /*
- * All coordinates are in character space.
- * On input, (x1, y1) and (x2, y2) give line segment.
- * On output, (x, y) give offset vector.
- * We use a piecewise approximation to trig functions.
- *
- * TODO: Offset true perpendicular and proper length
- * supply the y-translation for hinting here, too,
- * that adds yOffset unconditionally to *y.
- */
- static void
- cf2_glyphpath_computeOffset( CF2_GlyphPath glyphpath,
- CF2_Fixed x1,
- CF2_Fixed y1,
- CF2_Fixed x2,
- CF2_Fixed y2,
- CF2_Fixed* x,
- CF2_Fixed* y )
- {
- CF2_Fixed dx = SUB_INT32( x2, x1 );
- CF2_Fixed dy = SUB_INT32( y2, y1 );
-
-
- /* note: negative offsets don't work here; negate deltas to change */
- /* quadrants, below */
- if ( glyphpath->font->reverseWinding )
- {
- dx = NEG_INT32( dx );
- dy = NEG_INT32( dy );
- }
-
- *x = *y = 0;
-
- if ( !glyphpath->darken )
- return;
-
- /* add momentum for this path element */
- glyphpath->callbacks->windingMomentum +=
- cf2_getWindingMomentum( x1, y1, x2, y2 );
-
- /* note: allow mixed integer and fixed multiplication here */
- if ( dx >= 0 )
- {
- if ( dy >= 0 )
- {
- /* first quadrant, +x +y */
-
- if ( dx > MUL_INT32( 2, dy ) )
- {
- /* +x */
- *x = 0;
- *y = 0;
- }
- else if ( dy > MUL_INT32( 2, dx ) )
- {
- /* +y */
- *x = glyphpath->xOffset;
- *y = glyphpath->yOffset;
- }
- else
- {
- /* +x +y */
- *x = FT_MulFix( cf2_doubleToFixed( 0.7 ),
- glyphpath->xOffset );
- *y = FT_MulFix( cf2_doubleToFixed( 1.0 - 0.7 ),
- glyphpath->yOffset );
- }
- }
- else
- {
- /* fourth quadrant, +x -y */
-
- if ( dx > MUL_INT32( -2, dy ) )
- {
- /* +x */
- *x = 0;
- *y = 0;
- }
- else if ( NEG_INT32( dy ) > MUL_INT32( 2, dx ) )
- {
- /* -y */
- *x = NEG_INT32( glyphpath->xOffset );
- *y = glyphpath->yOffset;
- }
- else
- {
- /* +x -y */
- *x = FT_MulFix( cf2_doubleToFixed( -0.7 ),
- glyphpath->xOffset );
- *y = FT_MulFix( cf2_doubleToFixed( 1.0 - 0.7 ),
- glyphpath->yOffset );
- }
- }
- }
- else
- {
- if ( dy >= 0 )
- {
- /* second quadrant, -x +y */
-
- if ( NEG_INT32( dx ) > MUL_INT32( 2, dy ) )
- {
- /* -x */
- *x = 0;
- *y = MUL_INT32( 2, glyphpath->yOffset );
- }
- else if ( dy > MUL_INT32( -2, dx ) )
- {
- /* +y */
- *x = glyphpath->xOffset;
- *y = glyphpath->yOffset;
- }
- else
- {
- /* -x +y */
- *x = FT_MulFix( cf2_doubleToFixed( 0.7 ),
- glyphpath->xOffset );
- *y = FT_MulFix( cf2_doubleToFixed( 1.0 + 0.7 ),
- glyphpath->yOffset );
- }
- }
- else
- {
- /* third quadrant, -x -y */
-
- if ( NEG_INT32( dx ) > MUL_INT32( -2, dy ) )
- {
- /* -x */
- *x = 0;
- *y = MUL_INT32( 2, glyphpath->yOffset );
- }
- else if ( NEG_INT32( dy ) > MUL_INT32( -2, dx ) )
- {
- /* -y */
- *x = NEG_INT32( glyphpath->xOffset );
- *y = glyphpath->yOffset;
- }
- else
- {
- /* -x -y */
- *x = FT_MulFix( cf2_doubleToFixed( -0.7 ),
- glyphpath->xOffset );
- *y = FT_MulFix( cf2_doubleToFixed( 1.0 + 0.7 ),
- glyphpath->yOffset );
- }
- }
- }
- }
-
-
- /*
- * The functions cf2_glyphpath_{moveTo,lineTo,curveTo,closeOpenPath} are
- * called by the interpreter with Character Space (CS) coordinates. Each
- * path element is placed into a queue of length one to await the
- * calculation of the following element. At that time, the darkening
- * offset of the following element is known and joins can be computed,
- * including possible modification of this element, before mapping to
- * Device Space (DS) and passing it on to the outline consumer.
- *
- */
- FT_LOCAL_DEF( void )
- cf2_glyphpath_moveTo( CF2_GlyphPath glyphpath,
- CF2_Fixed x,
- CF2_Fixed y )
- {
- cf2_glyphpath_closeOpenPath( glyphpath );
-
- /* save the parameters of the move for later, when we'll know how to */
- /* offset it; */
- /* also save last move point */
- glyphpath->currentCS.x = glyphpath->start.x = x;
- glyphpath->currentCS.y = glyphpath->start.y = y;
-
- glyphpath->moveIsPending = TRUE;
-
- /* ensure we have a valid map with current mask */
- if ( !cf2_hintmap_isValid( &glyphpath->hintMap ) ||
- cf2_hintmask_isNew( glyphpath->hintMask ) )
- cf2_hintmap_build( &glyphpath->hintMap,
- glyphpath->hStemHintArray,
- glyphpath->vStemHintArray,
- glyphpath->hintMask,
- glyphpath->hintOriginY,
- FALSE );
-
- /* save a copy of current HintMap to use when drawing initial point */
- glyphpath->firstHintMap = glyphpath->hintMap; /* structure copy */
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_glyphpath_lineTo( CF2_GlyphPath glyphpath,
- CF2_Fixed x,
- CF2_Fixed y )
- {
- CF2_Fixed xOffset, yOffset;
- FT_Vector P0, P1;
- FT_Bool newHintMap;
-
- /*
- * New hints will be applied after cf2_glyphpath_pushPrevElem has run.
- * In case this is a synthesized closing line, any new hints should be
- * delayed until this path is closed (`cf2_hintmask_isNew' will be
- * called again before the next line or curve).
- */
-
- /* true if new hint map not on close */
- newHintMap = cf2_hintmask_isNew( glyphpath->hintMask ) &&
- !glyphpath->pathIsClosing;
-
- /*
- * Zero-length lines may occur in the charstring. Because we cannot
- * compute darkening offsets or intersections from zero-length lines,
- * it is best to remove them and avoid artifacts. However, zero-length
- * lines in CS at the start of a new hint map can generate non-zero
- * lines in DS due to hint substitution. We detect a change in hint
- * map here and pass those zero-length lines along.
- */
-
- /*
- * Note: Find explicitly closed paths here with a conditional
- * breakpoint using
- *
- * !gp->pathIsClosing && gp->start.x == x && gp->start.y == y
- *
- */
-
- if ( glyphpath->currentCS.x == x &&
- glyphpath->currentCS.y == y &&
- !newHintMap )
- /*
- * Ignore zero-length lines in CS where the hint map is the same
- * because the line in DS will also be zero length.
- *
- * Ignore zero-length lines when we synthesize a closing line because
- * the close will be handled in cf2_glyphPath_pushPrevElem.
- */
- return;
-
- cf2_glyphpath_computeOffset( glyphpath,
- glyphpath->currentCS.x,
- glyphpath->currentCS.y,
- x,
- y,
- &xOffset,
- &yOffset );
-
- /* construct offset points */
- P0.x = ADD_INT32( glyphpath->currentCS.x, xOffset );
- P0.y = ADD_INT32( glyphpath->currentCS.y, yOffset );
- P1.x = ADD_INT32( x, xOffset );
- P1.y = ADD_INT32( y, yOffset );
-
- if ( glyphpath->moveIsPending )
- {
- /* emit offset 1st point as MoveTo */
- cf2_glyphpath_pushMove( glyphpath, P0 );
-
- glyphpath->moveIsPending = FALSE; /* adjust state machine */
- glyphpath->pathIsOpen = TRUE;
-
- glyphpath->offsetStart1 = P1; /* record second point */
- }
-
- if ( glyphpath->elemIsQueued )
- {
- FT_ASSERT( cf2_hintmap_isValid( &glyphpath->hintMap ) ||
- glyphpath->hintMap.count == 0 );
-
- cf2_glyphpath_pushPrevElem( glyphpath,
- &glyphpath->hintMap,
- &P0,
- P1,
- FALSE );
- }
-
- /* queue the current element with offset points */
- glyphpath->elemIsQueued = TRUE;
- glyphpath->prevElemOp = CF2_PathOpLineTo;
- glyphpath->prevElemP0 = P0;
- glyphpath->prevElemP1 = P1;
-
- /* update current map */
- if ( newHintMap )
- cf2_hintmap_build( &glyphpath->hintMap,
- glyphpath->hStemHintArray,
- glyphpath->vStemHintArray,
- glyphpath->hintMask,
- glyphpath->hintOriginY,
- FALSE );
-
- glyphpath->currentCS.x = x; /* pre-offset current point */
- glyphpath->currentCS.y = y;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_glyphpath_curveTo( CF2_GlyphPath glyphpath,
- CF2_Fixed x1,
- CF2_Fixed y1,
- CF2_Fixed x2,
- CF2_Fixed y2,
- CF2_Fixed x3,
- CF2_Fixed y3 )
- {
- CF2_Fixed xOffset1, yOffset1, xOffset3, yOffset3;
- FT_Vector P0, P1, P2, P3;
-
-
- /* TODO: ignore zero length portions of curve?? */
- cf2_glyphpath_computeOffset( glyphpath,
- glyphpath->currentCS.x,
- glyphpath->currentCS.y,
- x1,
- y1,
- &xOffset1,
- &yOffset1 );
- cf2_glyphpath_computeOffset( glyphpath,
- x2,
- y2,
- x3,
- y3,
- &xOffset3,
- &yOffset3 );
-
- /* add momentum from the middle segment */
- glyphpath->callbacks->windingMomentum +=
- cf2_getWindingMomentum( x1, y1, x2, y2 );
-
- /* construct offset points */
- P0.x = ADD_INT32( glyphpath->currentCS.x, xOffset1 );
- P0.y = ADD_INT32( glyphpath->currentCS.y, yOffset1 );
- P1.x = ADD_INT32( x1, xOffset1 );
- P1.y = ADD_INT32( y1, yOffset1 );
- /* note: preserve angle of final segment by using offset3 at both ends */
- P2.x = ADD_INT32( x2, xOffset3 );
- P2.y = ADD_INT32( y2, yOffset3 );
- P3.x = ADD_INT32( x3, xOffset3 );
- P3.y = ADD_INT32( y3, yOffset3 );
-
- if ( glyphpath->moveIsPending )
- {
- /* emit offset 1st point as MoveTo */
- cf2_glyphpath_pushMove( glyphpath, P0 );
-
- glyphpath->moveIsPending = FALSE;
- glyphpath->pathIsOpen = TRUE;
-
- glyphpath->offsetStart1 = P1; /* record second point */
- }
-
- if ( glyphpath->elemIsQueued )
- {
- FT_ASSERT( cf2_hintmap_isValid( &glyphpath->hintMap ) ||
- glyphpath->hintMap.count == 0 );
-
- cf2_glyphpath_pushPrevElem( glyphpath,
- &glyphpath->hintMap,
- &P0,
- P1,
- FALSE );
- }
-
- /* queue the current element with offset points */
- glyphpath->elemIsQueued = TRUE;
- glyphpath->prevElemOp = CF2_PathOpCubeTo;
- glyphpath->prevElemP0 = P0;
- glyphpath->prevElemP1 = P1;
- glyphpath->prevElemP2 = P2;
- glyphpath->prevElemP3 = P3;
-
- /* update current map */
- if ( cf2_hintmask_isNew( glyphpath->hintMask ) )
- cf2_hintmap_build( &glyphpath->hintMap,
- glyphpath->hStemHintArray,
- glyphpath->vStemHintArray,
- glyphpath->hintMask,
- glyphpath->hintOriginY,
- FALSE );
-
- glyphpath->currentCS.x = x3; /* pre-offset current point */
- glyphpath->currentCS.y = y3;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_glyphpath_closeOpenPath( CF2_GlyphPath glyphpath )
- {
- if ( glyphpath->pathIsOpen )
- {
- /*
- * A closing line in Character Space line is always generated below
- * with `cf2_glyphPath_lineTo'. It may be ignored later if it turns
- * out to be zero length in Device Space.
- */
- glyphpath->pathIsClosing = TRUE;
-
- cf2_glyphpath_lineTo( glyphpath,
- glyphpath->start.x,
- glyphpath->start.y );
-
- /* empty the final element from the queue and close the path */
- if ( glyphpath->elemIsQueued )
- cf2_glyphpath_pushPrevElem( glyphpath,
- &glyphpath->hintMap,
- &glyphpath->offsetStart0,
- glyphpath->offsetStart1,
- TRUE );
-
- /* reset state machine */
- glyphpath->moveIsPending = TRUE;
- glyphpath->pathIsOpen = FALSE;
- glyphpath->pathIsClosing = FALSE;
- glyphpath->elemIsQueued = FALSE;
- }
- }
-
-
-/* END */
diff --git a/src/cff/cf2hints.h b/src/cff/cf2hints.h
deleted file mode 100644
index a8984542a..000000000
--- a/src/cff/cf2hints.h
+++ /dev/null
@@ -1,289 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2hints.h */
-/* */
-/* Adobe's code for handling CFF hints (body). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CF2HINTS_H_
-#define CF2HINTS_H_
-
-
-FT_BEGIN_HEADER
-
-
- enum
- {
- CF2_MAX_HINTS = 96 /* maximum # of hints */
- };
-
-
- /*
- * A HintMask object stores a bit mask that specifies which hints in the
- * charstring are active at a given time. Hints in CFF must be declared
- * at the start, before any drawing operators, with horizontal hints
- * preceding vertical hints. The HintMask is ordered the same way, with
- * horizontal hints immediately followed by vertical hints. Clients are
- * responsible for knowing how many of each type are present.
- *
- * The maximum total number of hints is 96, as specified by the CFF
- * specification.
- *
- * A HintMask is built 0 or more times while interpreting a charstring, by
- * the HintMask operator. There is only one HintMask, but it is built or
- * rebuilt each time there is a hint substitution (HintMask operator) in
- * the charstring. A default HintMask with all bits set is built if there
- * has been no HintMask operator prior to the first drawing operator.
- *
- */
-
- typedef struct CF2_HintMaskRec_
- {
- FT_Error* error;
-
- FT_Bool isValid;
- FT_Bool isNew;
-
- size_t bitCount;
- size_t byteCount;
-
- FT_Byte mask[( CF2_MAX_HINTS + 7 ) / 8];
-
- } CF2_HintMaskRec, *CF2_HintMask;
-
-
- typedef struct CF2_StemHintRec_
- {
- FT_Bool used; /* DS positions are valid */
-
- CF2_Fixed min; /* original character space value */
- CF2_Fixed max;
-
- CF2_Fixed minDS; /* DS position after first use */
- CF2_Fixed maxDS;
-
- } CF2_StemHintRec, *CF2_StemHint;
-
-
- /*
- * A HintMap object stores a piecewise linear function for mapping
- * y-coordinates from character space to device space, providing
- * appropriate pixel alignment to stem edges.
- *
- * The map is implemented as an array of `CF2_Hint' elements, each
- * representing an edge. When edges are paired, as from stem hints, the
- * bottom edge must immediately precede the top edge in the array.
- * Element character space AND device space positions must both increase
- * monotonically in the array. `CF2_Hint' elements are also used as
- * parameters to `cf2_blues_capture'.
- *
- * The `cf2_hintmap_build' method must be called before any drawing
- * operation (beginning with a Move operator) and at each hint
- * substitution (HintMask operator).
- *
- * The `cf2_hintmap_map' method is called to transform y-coordinates at
- * each drawing operation (move, line, curve).
- *
- */
-
- /* TODO: make this a CF2_ArrStack and add a deep copy method */
- enum
- {
- CF2_MAX_HINT_EDGES = CF2_MAX_HINTS * 2
- };
-
-
- typedef struct CF2_HintMapRec_
- {
- CF2_Font font;
-
- /* initial map based on blue zones */
- struct CF2_HintMapRec_* initialHintMap;
-
- /* working storage for 2nd pass adjustHints */
- CF2_ArrStack hintMoves;
-
- FT_Bool isValid;
- FT_Bool hinted;
-
- CF2_Fixed scale;
- CF2_UInt count;
-
- /* start search from this index */
- CF2_UInt lastIndex;
-
- CF2_HintRec edge[CF2_MAX_HINT_EDGES]; /* 192 */
-
- } CF2_HintMapRec, *CF2_HintMap;
-
-
- FT_LOCAL( FT_Bool )
- cf2_hint_isValid( const CF2_Hint hint );
- FT_LOCAL( FT_Bool )
- cf2_hint_isTop( const CF2_Hint hint );
- FT_LOCAL( FT_Bool )
- cf2_hint_isBottom( const CF2_Hint hint );
- FT_LOCAL( void )
- cf2_hint_lock( CF2_Hint hint );
-
-
- FT_LOCAL( void )
- cf2_hintmap_init( CF2_HintMap hintmap,
- CF2_Font font,
- CF2_HintMap initialMap,
- CF2_ArrStack hintMoves,
- CF2_Fixed scale );
- FT_LOCAL( void )
- cf2_hintmap_build( CF2_HintMap hintmap,
- CF2_ArrStack hStemHintArray,
- CF2_ArrStack vStemHintArray,
- CF2_HintMask hintMask,
- CF2_Fixed hintOrigin,
- FT_Bool initialMap );
-
-
- /*
- * GlyphPath is a wrapper for drawing operations that scales the
- * coordinates according to the render matrix and HintMap. It also tracks
- * open paths to control ClosePath and to insert MoveTo for broken fonts.
- *
- */
- typedef struct CF2_GlyphPathRec_
- {
- /* TODO: gather some of these into a hinting context */
-
- CF2_Font font; /* font instance */
- CF2_OutlineCallbacks callbacks; /* outline consumer */
-
-
- CF2_HintMapRec hintMap; /* current hint map */
- CF2_HintMapRec firstHintMap; /* saved copy */
- CF2_HintMapRec initialHintMap; /* based on all captured hints */
-
- CF2_ArrStackRec hintMoves; /* list of hint moves for 2nd pass */
-
- CF2_Fixed scaleX; /* matrix a */
- CF2_Fixed scaleC; /* matrix c */
- CF2_Fixed scaleY; /* matrix d */
-
- FT_Vector fractionalTranslation; /* including deviceXScale */
-#if 0
- CF2_Fixed hShift; /* character space horizontal shift */
- /* (for fauxing) */
-#endif
-
- FT_Bool pathIsOpen; /* true after MoveTo */
- FT_Bool pathIsClosing; /* true when synthesizing closepath line */
- FT_Bool darken; /* true if stem darkening */
- FT_Bool moveIsPending; /* true between MoveTo and offset MoveTo */
-
- /* references used to call `cf2_hintmap_build', if necessary */
- CF2_ArrStack hStemHintArray;
- CF2_ArrStack vStemHintArray;
- CF2_HintMask hintMask; /* ptr to the current mask */
- CF2_Fixed hintOriginY; /* copy of current origin */
- const CF2_BluesRec* blues;
-
- CF2_Fixed xOffset; /* character space offsets */
- CF2_Fixed yOffset;
-
- /* character space miter limit threshold */
- CF2_Fixed miterLimit;
- /* vertical/horizontal snap distance in character space */
- CF2_Fixed snapThreshold;
-
- FT_Vector offsetStart0; /* first and second points of first */
- FT_Vector offsetStart1; /* element with offset applied */
-
- /* current point, character space, before offset */
- FT_Vector currentCS;
- /* current point, device space */
- FT_Vector currentDS;
- /* start point of subpath, character space */
- FT_Vector start;
-
- /* the following members constitute the `queue' of one element */
- FT_Bool elemIsQueued;
- CF2_Int prevElemOp;
-
- FT_Vector prevElemP0;
- FT_Vector prevElemP1;
- FT_Vector prevElemP2;
- FT_Vector prevElemP3;
-
- } CF2_GlyphPathRec, *CF2_GlyphPath;
-
-
- FT_LOCAL( void )
- cf2_glyphpath_init( CF2_GlyphPath glyphpath,
- CF2_Font font,
- CF2_OutlineCallbacks callbacks,
- CF2_Fixed scaleY,
- /* CF2_Fixed hShift, */
- CF2_ArrStack hStemHintArray,
- CF2_ArrStack vStemHintArray,
- CF2_HintMask hintMask,
- CF2_Fixed hintOrigin,
- const CF2_Blues blues,
- const FT_Vector* fractionalTranslation );
- FT_LOCAL( void )
- cf2_glyphpath_finalize( CF2_GlyphPath glyphpath );
-
- FT_LOCAL( void )
- cf2_glyphpath_moveTo( CF2_GlyphPath glyphpath,
- CF2_Fixed x,
- CF2_Fixed y );
- FT_LOCAL( void )
- cf2_glyphpath_lineTo( CF2_GlyphPath glyphpath,
- CF2_Fixed x,
- CF2_Fixed y );
- FT_LOCAL( void )
- cf2_glyphpath_curveTo( CF2_GlyphPath glyphpath,
- CF2_Fixed x1,
- CF2_Fixed y1,
- CF2_Fixed x2,
- CF2_Fixed y2,
- CF2_Fixed x3,
- CF2_Fixed y3 );
- FT_LOCAL( void )
- cf2_glyphpath_closeOpenPath( CF2_GlyphPath glyphpath );
-
-
-FT_END_HEADER
-
-
-#endif /* CF2HINTS_H_ */
-
-
-/* END */
diff --git a/src/cff/cf2intrp.c b/src/cff/cf2intrp.c
deleted file mode 100644
index a81628074..000000000
--- a/src/cff/cf2intrp.c
+++ /dev/null
@@ -1,1959 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2intrp.c */
-/* */
-/* Adobe's CFF Interpreter (body). */
-/* */
-/* Copyright 2007-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2glue.h"
-#include "cf2font.h"
-#include "cf2stack.h"
-#include "cf2hints.h"
-#include "cf2intrp.h"
-
-#include "cf2error.h"
-
-#include "cffload.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cf2interp
-
-
- FT_LOCAL_DEF( void )
- cf2_hintmask_init( CF2_HintMask hintmask,
- FT_Error* error )
- {
- FT_ZERO( hintmask );
-
- hintmask->error = error;
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- cf2_hintmask_isValid( const CF2_HintMask hintmask )
- {
- return hintmask->isValid;
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- cf2_hintmask_isNew( const CF2_HintMask hintmask )
- {
- return hintmask->isNew;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_hintmask_setNew( CF2_HintMask hintmask,
- FT_Bool val )
- {
- hintmask->isNew = val;
- }
-
-
- /* clients call `getMaskPtr' in order to iterate */
- /* through hint mask */
-
- FT_LOCAL_DEF( FT_Byte* )
- cf2_hintmask_getMaskPtr( CF2_HintMask hintmask )
- {
- return hintmask->mask;
- }
-
-
- static size_t
- cf2_hintmask_setCounts( CF2_HintMask hintmask,
- size_t bitCount )
- {
- if ( bitCount > CF2_MAX_HINTS )
- {
- /* total of h and v stems must be <= 96 */
- CF2_SET_ERROR( hintmask->error, Invalid_Glyph_Format );
- return 0;
- }
-
- hintmask->bitCount = bitCount;
- hintmask->byteCount = ( hintmask->bitCount + 7 ) / 8;
-
- hintmask->isValid = TRUE;
- hintmask->isNew = TRUE;
-
- return bitCount;
- }
-
-
- /* consume the hintmask bytes from the charstring, advancing the src */
- /* pointer */
- static void
- cf2_hintmask_read( CF2_HintMask hintmask,
- CF2_Buffer charstring,
- size_t bitCount )
- {
- size_t i;
-
-#ifndef CF2_NDEBUG
- /* these are the bits in the final mask byte that should be zero */
- /* Note: this variable is only used in an assert expression below */
- /* and then only if CF2_NDEBUG is not defined */
- CF2_UInt mask = ( 1 << ( -(CF2_Int)bitCount & 7 ) ) - 1;
-#endif
-
-
- /* initialize counts and isValid */
- if ( cf2_hintmask_setCounts( hintmask, bitCount ) == 0 )
- return;
-
- FT_ASSERT( hintmask->byteCount > 0 );
-
- FT_TRACE4(( " (maskbytes:" ));
-
- /* set mask and advance interpreter's charstring pointer */
- for ( i = 0; i < hintmask->byteCount; i++ )
- {
- hintmask->mask[i] = (FT_Byte)cf2_buf_readByte( charstring );
- FT_TRACE4(( " 0x%02X", hintmask->mask[i] ));
- }
-
- FT_TRACE4(( ")\n" ));
-
- /* assert any unused bits in last byte are zero unless there's a prior */
- /* error */
- /* bitCount -> mask, 0 -> 0, 1 -> 7f, 2 -> 3f, ... 6 -> 3, 7 -> 1 */
-#ifndef CF2_NDEBUG
- FT_ASSERT( ( hintmask->mask[hintmask->byteCount - 1] & mask ) == 0 ||
- *hintmask->error );
-#endif
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_hintmask_setAll( CF2_HintMask hintmask,
- size_t bitCount )
- {
- size_t i;
- CF2_UInt mask = ( 1 << ( -(CF2_Int)bitCount & 7 ) ) - 1;
-
-
- /* initialize counts and isValid */
- if ( cf2_hintmask_setCounts( hintmask, bitCount ) == 0 )
- return;
-
- FT_ASSERT( hintmask->byteCount > 0 );
- FT_ASSERT( hintmask->byteCount <=
- sizeof ( hintmask->mask ) / sizeof ( hintmask->mask[0] ) );
-
- /* set mask to all ones */
- for ( i = 0; i < hintmask->byteCount; i++ )
- hintmask->mask[i] = 0xFF;
-
- /* clear unused bits */
- /* bitCount -> mask, 0 -> 0, 1 -> 7f, 2 -> 3f, ... 6 -> 3, 7 -> 1 */
- hintmask->mask[hintmask->byteCount - 1] &= ~mask;
- }
-
-
- /* Type2 charstring opcodes */
- enum
- {
- cf2_cmdRESERVED_0, /* 0 */
- cf2_cmdHSTEM, /* 1 */
- cf2_cmdRESERVED_2, /* 2 */
- cf2_cmdVSTEM, /* 3 */
- cf2_cmdVMOVETO, /* 4 */
- cf2_cmdRLINETO, /* 5 */
- cf2_cmdHLINETO, /* 6 */
- cf2_cmdVLINETO, /* 7 */
- cf2_cmdRRCURVETO, /* 8 */
- cf2_cmdRESERVED_9, /* 9 */
- cf2_cmdCALLSUBR, /* 10 */
- cf2_cmdRETURN, /* 11 */
- cf2_cmdESC, /* 12 */
- cf2_cmdRESERVED_13, /* 13 */
- cf2_cmdENDCHAR, /* 14 */
- cf2_cmdVSINDEX, /* 15 */
- cf2_cmdBLEND, /* 16 */
- cf2_cmdRESERVED_17, /* 17 */
- cf2_cmdHSTEMHM, /* 18 */
- cf2_cmdHINTMASK, /* 19 */
- cf2_cmdCNTRMASK, /* 20 */
- cf2_cmdRMOVETO, /* 21 */
- cf2_cmdHMOVETO, /* 22 */
- cf2_cmdVSTEMHM, /* 23 */
- cf2_cmdRCURVELINE, /* 24 */
- cf2_cmdRLINECURVE, /* 25 */
- cf2_cmdVVCURVETO, /* 26 */
- cf2_cmdHHCURVETO, /* 27 */
- cf2_cmdEXTENDEDNMBR, /* 28 */
- cf2_cmdCALLGSUBR, /* 29 */
- cf2_cmdVHCURVETO, /* 30 */
- cf2_cmdHVCURVETO /* 31 */
- };
-
- enum
- {
- cf2_escDOTSECTION, /* 0 */
- cf2_escRESERVED_1, /* 1 */
- cf2_escRESERVED_2, /* 2 */
- cf2_escAND, /* 3 */
- cf2_escOR, /* 4 */
- cf2_escNOT, /* 5 */
- cf2_escRESERVED_6, /* 6 */
- cf2_escRESERVED_7, /* 7 */
- cf2_escRESERVED_8, /* 8 */
- cf2_escABS, /* 9 */
- cf2_escADD, /* 10 like otherADD */
- cf2_escSUB, /* 11 like otherSUB */
- cf2_escDIV, /* 12 */
- cf2_escRESERVED_13, /* 13 */
- cf2_escNEG, /* 14 */
- cf2_escEQ, /* 15 */
- cf2_escRESERVED_16, /* 16 */
- cf2_escRESERVED_17, /* 17 */
- cf2_escDROP, /* 18 */
- cf2_escRESERVED_19, /* 19 */
- cf2_escPUT, /* 20 like otherPUT */
- cf2_escGET, /* 21 like otherGET */
- cf2_escIFELSE, /* 22 like otherIFELSE */
- cf2_escRANDOM, /* 23 like otherRANDOM */
- cf2_escMUL, /* 24 like otherMUL */
- cf2_escRESERVED_25, /* 25 */
- cf2_escSQRT, /* 26 */
- cf2_escDUP, /* 27 like otherDUP */
- cf2_escEXCH, /* 28 like otherEXCH */
- cf2_escINDEX, /* 29 */
- cf2_escROLL, /* 30 */
- cf2_escRESERVED_31, /* 31 */
- cf2_escRESERVED_32, /* 32 */
- cf2_escRESERVED_33, /* 33 */
- cf2_escHFLEX, /* 34 */
- cf2_escFLEX, /* 35 */
- cf2_escHFLEX1, /* 36 */
- cf2_escFLEX1, /* 37 */
- cf2_escRESERVED_38 /* 38 & all higher */
- };
-
-
- /* `stemHintArray' does not change once we start drawing the outline. */
- static void
- cf2_doStems( const CF2_Font font,
- CF2_Stack opStack,
- CF2_ArrStack stemHintArray,
- CF2_Fixed* width,
- FT_Bool* haveWidth,
- CF2_Fixed hintOffset )
- {
- CF2_UInt i;
- CF2_UInt count = cf2_stack_count( opStack );
- FT_Bool hasWidthArg = (FT_Bool)( count & 1 );
-
- /* variable accumulates delta values from operand stack */
- CF2_Fixed position = hintOffset;
-
-
- if ( hasWidthArg && !*haveWidth )
- *width = cf2_stack_getReal( opStack, 0 ) +
- cf2_getNominalWidthX( font->decoder );
-
- if ( font->decoder->width_only )
- goto exit;
-
- for ( i = hasWidthArg ? 1 : 0; i < count; i += 2 )
- {
- /* construct a CF2_StemHint and push it onto the list */
- CF2_StemHintRec stemhint;
-
-
- stemhint.min =
- position = ADD_INT32( position,
- cf2_stack_getReal( opStack, i ) );
- stemhint.max =
- position = ADD_INT32( position,
- cf2_stack_getReal( opStack, i + 1 ) );
-
- stemhint.used = FALSE;
- stemhint.maxDS =
- stemhint.minDS = 0;
-
- cf2_arrstack_push( stemHintArray, &stemhint ); /* defer error check */
- }
-
- cf2_stack_clear( opStack );
-
- exit:
- /* cf2_doStems must define a width (may be default) */
- *haveWidth = TRUE;
- }
-
-
- static void
- cf2_doFlex( CF2_Stack opStack,
- CF2_Fixed* curX,
- CF2_Fixed* curY,
- CF2_GlyphPath glyphPath,
- const FT_Bool* readFromStack,
- FT_Bool doConditionalLastRead )
- {
- CF2_Fixed vals[14];
- CF2_UInt idx;
- FT_Bool isHFlex;
- CF2_Int top, i, j;
-
-
- vals[0] = *curX;
- vals[1] = *curY;
- idx = 0;
- isHFlex = FT_BOOL( readFromStack[9] == FALSE );
- top = isHFlex ? 9 : 10;
-
- for ( i = 0; i < top; i++ )
- {
- vals[i + 2] = vals[i];
- if ( readFromStack[i] )
- vals[i + 2] = ADD_INT32( vals[i + 2], cf2_stack_getReal( opStack,
- idx++ ) );
- }
-
- if ( isHFlex )
- vals[9 + 2] = *curY;
-
- if ( doConditionalLastRead )
- {
- FT_Bool lastIsX = (FT_Bool)(
- cf2_fixedAbs( SUB_INT32( vals[10], *curX ) ) >
- cf2_fixedAbs( SUB_INT32( vals[11], *curY ) ) );
- CF2_Fixed lastVal = cf2_stack_getReal( opStack, idx );
-
-
- if ( lastIsX )
- {
- vals[12] = ADD_INT32( vals[10], lastVal );
- vals[13] = *curY;
- }
- else
- {
- vals[12] = *curX;
- vals[13] = ADD_INT32( vals[11], lastVal );
- }
- }
- else
- {
- if ( readFromStack[10] )
- vals[12] = ADD_INT32( vals[10],
- cf2_stack_getReal( opStack, idx++ ) );
- else
- vals[12] = *curX;
-
- if ( readFromStack[11] )
- vals[13] = ADD_INT32( vals[11],
- cf2_stack_getReal( opStack, idx ) );
- else
- vals[13] = *curY;
- }
-
- for ( j = 0; j < 2; j++ )
- cf2_glyphpath_curveTo( glyphPath, vals[j * 6 + 2],
- vals[j * 6 + 3],
- vals[j * 6 + 4],
- vals[j * 6 + 5],
- vals[j * 6 + 6],
- vals[j * 6 + 7] );
-
- cf2_stack_clear( opStack );
-
- *curX = vals[12];
- *curY = vals[13];
- }
-
-
- /* Blend numOperands on the stack, */
- /* store results into the first numBlends values, */
- /* then pop remaining arguments. */
- static void
- cf2_doBlend( const CFF_Blend blend,
- CF2_Stack opStack,
- CF2_UInt numBlends )
- {
- CF2_UInt delta;
- CF2_UInt base;
- CF2_UInt i, j;
- CF2_UInt numOperands = (CF2_UInt)( numBlends * blend->lenBV );
-
-
- base = cf2_stack_count( opStack ) - numOperands;
- delta = base + numBlends;
-
- for ( i = 0; i < numBlends; i++ )
- {
- const CF2_Fixed* weight = &blend->BV[1];
-
- /* start with first term */
- CF2_Fixed sum = cf2_stack_getReal( opStack, i + base );
-
-
- for ( j = 1; j < blend->lenBV; j++ )
- sum = ADD_INT32( sum,
- FT_MulFix( *weight++,
- cf2_stack_getReal( opStack,
- delta++ ) ) );
-
- /* store blended result */
- cf2_stack_setReal( opStack, i + base, sum );
- }
-
- /* leave only `numBlends' results on stack */
- cf2_stack_pop( opStack, numOperands - numBlends );
- }
-
-
- /*
- * `error' is a shared error code used by many objects in this
- * routine. Before the code continues from an error, it must check and
- * record the error in `*error'. The idea is that this shared
- * error code will record the first error encountered. If testing
- * for an error anyway, the cost of `goto exit' is small, so we do it,
- * even if continuing would be safe. In this case, `lastError' is
- * set, so the testing and storing can be done in one place, at `exit'.
- *
- * Continuing after an error is intended for objects which do their own
- * testing of `*error', e.g., array stack functions. This allows us to
- * avoid an extra test after the call.
- *
- * Unimplemented opcodes are ignored.
- *
- */
- FT_LOCAL_DEF( void )
- cf2_interpT2CharString( CF2_Font font,
- CF2_Buffer buf,
- CF2_OutlineCallbacks callbacks,
- const FT_Vector* translation,
- FT_Bool doingSeac,
- CF2_Fixed curX,
- CF2_Fixed curY,
- CF2_Fixed* width )
- {
- /* lastError is used for errors that are immediately tested */
- FT_Error lastError = FT_Err_Ok;
-
- /* pointer to parsed font object */
- CFF_Decoder* decoder = font->decoder;
-
- FT_Error* error = &font->error;
- FT_Memory memory = font->memory;
-
- CF2_Fixed scaleY = font->innerTransform.d;
- CF2_Fixed nominalWidthX = cf2_getNominalWidthX( decoder );
-
- /* save this for hinting seac accents */
- CF2_Fixed hintOriginY = curY;
-
- CF2_Stack opStack = NULL;
- FT_UInt stackSize;
- FT_Byte op1; /* first opcode byte */
-
- CF2_F16Dot16 storage[CF2_STORAGE_SIZE]; /* for `put' and `get' */
-
- /* instruction limit; 20,000,000 matches Avalon */
- FT_UInt32 instructionLimit = 20000000UL;
-
- CF2_ArrStackRec subrStack;
-
- FT_Bool haveWidth;
- CF2_Buffer charstring = NULL;
-
- CF2_Int charstringIndex = -1; /* initialize to empty */
-
- /* TODO: placeholders for hint structures */
-
- /* objects used for hinting */
- CF2_ArrStackRec hStemHintArray;
- CF2_ArrStackRec vStemHintArray;
-
- CF2_HintMaskRec hintMask;
- CF2_GlyphPathRec glyphPath;
-
-
- FT_ZERO( &storage );
-
- /* initialize the remaining objects */
- cf2_arrstack_init( &subrStack,
- memory,
- error,
- sizeof ( CF2_BufferRec ) );
- cf2_arrstack_init( &hStemHintArray,
- memory,
- error,
- sizeof ( CF2_StemHintRec ) );
- cf2_arrstack_init( &vStemHintArray,
- memory,
- error,
- sizeof ( CF2_StemHintRec ) );
-
- /* initialize CF2_StemHint arrays */
- cf2_hintmask_init( &hintMask, error );
-
- /* initialize path map to manage drawing operations */
-
- /* Note: last 4 params are used to handle `MoveToPermissive', which */
- /* may need to call `hintMap.Build' */
- /* TODO: MoveToPermissive is gone; are these still needed? */
- cf2_glyphpath_init( &glyphPath,
- font,
- callbacks,
- scaleY,
- /* hShift, */
- &hStemHintArray,
- &vStemHintArray,
- &hintMask,
- hintOriginY,
- &font->blues,
- translation );
-
- /*
- * Initialize state for width parsing. From the CFF Spec:
- *
- * The first stack-clearing operator, which must be one of hstem,
- * hstemhm, vstem, vstemhm, cntrmask, hintmask, hmoveto, vmoveto,
- * rmoveto, or endchar, takes an additional argument - the width (as
- * described earlier), which may be expressed as zero or one numeric
- * argument.
- *
- * What we implement here uses the first validly specified width, but
- * does not detect errors for specifying more than one width.
- *
- * If one of the above operators occurs without explicitly specifying
- * a width, we assume the default width.
- *
- * CFF2 charstrings always return the default width (0).
- *
- */
- haveWidth = font->isCFF2 ? TRUE : FALSE;
- *width = cf2_getDefaultWidthX( decoder );
-
- /*
- * Note: At this point, all pointers to resources must be NULL
- * and all local objects must be initialized.
- * There must be no branches to `exit:' above this point.
- *
- */
-
- /* allocate an operand stack */
- stackSize = font->isCFF2 ? cf2_getMaxstack( decoder )
- : CF2_OPERAND_STACK_SIZE;
- opStack = cf2_stack_init( memory, error, stackSize );
-
- if ( !opStack )
- {
- lastError = FT_THROW( Out_Of_Memory );
- goto exit;
- }
-
- /* initialize subroutine stack by placing top level charstring as */
- /* first element (max depth plus one for the charstring) */
- /* Note: Caller owns and must finalize the first charstring. */
- /* Our copy of it does not change that requirement. */
- cf2_arrstack_setCount( &subrStack, CF2_MAX_SUBR + 1 );
-
- charstring = (CF2_Buffer)cf2_arrstack_getBuffer( &subrStack );
- *charstring = *buf; /* structure copy */
-
- charstringIndex = 0; /* entry is valid now */
-
- /* catch errors so far */
- if ( *error )
- goto exit;
-
- /* main interpreter loop */
- while ( 1 )
- {
- if ( cf2_buf_isEnd( charstring ) )
- {
- /* If we've reached the end of the charstring, simulate a */
- /* cf2_cmdRETURN or cf2_cmdENDCHAR. */
- /* We do this for both CFF and CFF2. */
- if ( charstringIndex )
- op1 = cf2_cmdRETURN; /* end of buffer for subroutine */
- else
- op1 = cf2_cmdENDCHAR; /* end of buffer for top level charstring */
- }
- else
- {
- op1 = (FT_Byte)cf2_buf_readByte( charstring );
-
- /* Explicit RETURN and ENDCHAR in CFF2 should be ignored. */
- /* Note: Trace message will report 0 instead of 11 or 14. */
- if ( ( op1 == cf2_cmdRETURN || op1 == cf2_cmdENDCHAR ) &&
- font->isCFF2 )
- op1 = cf2_cmdRESERVED_0;
- }
-
- /* check for errors once per loop */
- if ( *error )
- goto exit;
-
- instructionLimit--;
- if ( instructionLimit == 0 )
- {
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit;
- }
-
- switch( op1 )
- {
- case cf2_cmdRESERVED_0:
- case cf2_cmdRESERVED_2:
- case cf2_cmdRESERVED_9:
- case cf2_cmdRESERVED_13:
- case cf2_cmdRESERVED_17:
- /* we may get here if we have a prior error */
- FT_TRACE4(( " unknown op (%d)\n", op1 ));
- break;
-
- case cf2_cmdVSINDEX:
- FT_TRACE4(( " vsindex\n" ));
-
- if ( !font->isCFF2 )
- break; /* clear stack & ignore */
-
- if ( font->blend.usedBV )
- {
- /* vsindex not allowed after blend */
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit;
- }
-
- {
- FT_Int temp = cf2_stack_popInt( opStack );
-
-
- if ( temp >= 0 )
- font->vsindex = (FT_UInt)temp;
- }
- break;
-
- case cf2_cmdBLEND:
- {
- FT_UInt numBlends;
-
-
- FT_TRACE4(( " blend\n" ));
-
- if ( !font->isCFF2 )
- break; /* clear stack & ignore */
-
- /* do we have a `blend' op in a non-variant font? */
- if ( !font->blend.font )
- {
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit;
- }
-
- /* check cached blend vector */
- if ( cff_blend_check_vector( &font->blend,
- font->vsindex,
- font->lenNDV,
- font->NDV ) )
- {
- lastError = cff_blend_build_vector( &font->blend,
- font->vsindex,
- font->lenNDV,
- font->NDV );
- if ( lastError )
- goto exit;
- }
-
- /* do the blend */
- numBlends = (FT_UInt)cf2_stack_popInt( opStack );
- if ( numBlends > stackSize )
- {
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit;
- }
-
- cf2_doBlend( &font->blend, opStack, numBlends );
-
- font->blend.usedBV = TRUE;
- }
- continue; /* do not clear the stack */
-
- case cf2_cmdHSTEMHM:
- case cf2_cmdHSTEM:
- FT_TRACE4(( op1 == cf2_cmdHSTEMHM ? " hstemhm\n" : " hstem\n" ));
-
- /* never add hints after the mask is computed */
- if ( cf2_hintmask_isValid( &hintMask ) )
- {
- FT_TRACE4(( "cf2_interpT2CharString:"
- " invalid horizontal hint mask\n" ));
- break;
- }
-
- cf2_doStems( font,
- opStack,
- &hStemHintArray,
- width,
- &haveWidth,
- 0 );
-
- if ( font->decoder->width_only )
- goto exit;
-
- break;
-
- case cf2_cmdVSTEMHM:
- case cf2_cmdVSTEM:
- FT_TRACE4(( op1 == cf2_cmdVSTEMHM ? " vstemhm\n" : " vstem\n" ));
-
- /* never add hints after the mask is computed */
- if ( cf2_hintmask_isValid( &hintMask ) )
- {
- FT_TRACE4(( "cf2_interpT2CharString:"
- " invalid vertical hint mask\n" ));
- break;
- }
-
- cf2_doStems( font,
- opStack,
- &vStemHintArray,
- width,
- &haveWidth,
- 0 );
-
- if ( font->decoder->width_only )
- goto exit;
-
- break;
-
- case cf2_cmdVMOVETO:
- FT_TRACE4(( " vmoveto\n" ));
-
- if ( cf2_stack_count( opStack ) > 1 && !haveWidth )
- *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ),
- nominalWidthX );
-
- /* width is defined or default after this */
- haveWidth = TRUE;
-
- if ( font->decoder->width_only )
- goto exit;
-
- curY = ADD_INT32( curY, cf2_stack_popFixed( opStack ) );
-
- cf2_glyphpath_moveTo( &glyphPath, curX, curY );
-
- break;
-
- case cf2_cmdRLINETO:
- {
- CF2_UInt idx;
- CF2_UInt count = cf2_stack_count( opStack );
-
-
- FT_TRACE4(( " rlineto\n" ));
-
- for ( idx = 0; idx < count; idx += 2 )
- {
- curX = ADD_INT32( curX, cf2_stack_getReal( opStack,
- idx + 0 ) );
- curY = ADD_INT32( curY, cf2_stack_getReal( opStack,
- idx + 1 ) );
-
- cf2_glyphpath_lineTo( &glyphPath, curX, curY );
- }
-
- cf2_stack_clear( opStack );
- }
- continue; /* no need to clear stack again */
-
- case cf2_cmdHLINETO:
- case cf2_cmdVLINETO:
- {
- CF2_UInt idx;
- CF2_UInt count = cf2_stack_count( opStack );
-
- FT_Bool isX = FT_BOOL( op1 == cf2_cmdHLINETO );
-
-
- FT_TRACE4(( isX ? " hlineto\n" : " vlineto\n" ));
-
- for ( idx = 0; idx < count; idx++ )
- {
- CF2_Fixed v = cf2_stack_getReal( opStack, idx );
-
-
- if ( isX )
- curX = ADD_INT32( curX, v );
- else
- curY = ADD_INT32( curY, v );
-
- isX = !isX;
-
- cf2_glyphpath_lineTo( &glyphPath, curX, curY );
- }
-
- cf2_stack_clear( opStack );
- }
- continue;
-
- case cf2_cmdRCURVELINE:
- case cf2_cmdRRCURVETO:
- {
- CF2_UInt count = cf2_stack_count( opStack );
- CF2_UInt idx = 0;
-
-
- FT_TRACE4(( op1 == cf2_cmdRCURVELINE ? " rcurveline\n"
- : " rrcurveto\n" ));
-
- while ( idx + 6 <= count )
- {
- CF2_Fixed x1, y1, x2, y2, x3, y3;
-
-
- x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX );
- y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), curY );
- x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), x1 );
- y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y1 );
- x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), x2 );
- y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 5 ), y2 );
-
- cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
-
- curX = x3;
- curY = y3;
- idx += 6;
- }
-
- if ( op1 == cf2_cmdRCURVELINE )
- {
- curX = ADD_INT32( curX, cf2_stack_getReal( opStack,
- idx + 0 ) );
- curY = ADD_INT32( curY, cf2_stack_getReal( opStack,
- idx + 1 ) );
-
- cf2_glyphpath_lineTo( &glyphPath, curX, curY );
- }
-
- cf2_stack_clear( opStack );
- }
- continue; /* no need to clear stack again */
-
- case cf2_cmdCALLGSUBR:
- case cf2_cmdCALLSUBR:
- {
- CF2_Int subrNum;
-
-
- FT_TRACE4(( op1 == cf2_cmdCALLGSUBR ? " callgsubr"
- : " callsubr" ));
-
- if ( charstringIndex > CF2_MAX_SUBR )
- {
- /* max subr plus one for charstring */
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit; /* overflow of stack */
- }
-
- /* push our current CFF charstring region on subrStack */
- charstring = (CF2_Buffer)
- cf2_arrstack_getPointer(
- &subrStack,
- (size_t)charstringIndex + 1 );
-
- /* set up the new CFF region and pointer */
- subrNum = cf2_stack_popInt( opStack );
-
- switch ( op1 )
- {
- case cf2_cmdCALLGSUBR:
- FT_TRACE4(( " (idx %d, entering level %d)\n",
- subrNum + decoder->globals_bias,
- charstringIndex + 1 ));
-
- if ( cf2_initGlobalRegionBuffer( decoder,
- subrNum,
- charstring ) )
- {
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit; /* subroutine lookup or stream error */
- }
- break;
-
- default:
- /* cf2_cmdCALLSUBR */
- FT_TRACE4(( " (idx %d, entering level %d)\n",
- subrNum + decoder->locals_bias,
- charstringIndex + 1 ));
-
- if ( cf2_initLocalRegionBuffer( decoder,
- subrNum,
- charstring ) )
- {
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit; /* subroutine lookup or stream error */
- }
- }
-
- charstringIndex += 1; /* entry is valid now */
- }
- continue; /* do not clear the stack */
-
- case cf2_cmdRETURN:
- FT_TRACE4(( " return (leaving level %d)\n", charstringIndex ));
-
- if ( charstringIndex < 1 )
- {
- /* Note: cannot return from top charstring */
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit; /* underflow of stack */
- }
-
- /* restore position in previous charstring */
- charstring = (CF2_Buffer)
- cf2_arrstack_getPointer(
- &subrStack,
- (CF2_UInt)--charstringIndex );
- continue; /* do not clear the stack */
-
- case cf2_cmdESC:
- {
- FT_Byte op2 = (FT_Byte)cf2_buf_readByte( charstring );
-
-
- /* first switch for 2-byte operators handles CFF2 */
- /* and opcodes that are reserved for both CFF and CFF2 */
- switch ( op2 )
- {
- case cf2_escHFLEX:
- {
- static const FT_Bool readFromStack[12] =
- {
- TRUE /* dx1 */, FALSE /* dy1 */,
- TRUE /* dx2 */, TRUE /* dy2 */,
- TRUE /* dx3 */, FALSE /* dy3 */,
- TRUE /* dx4 */, FALSE /* dy4 */,
- TRUE /* dx5 */, FALSE /* dy5 */,
- TRUE /* dx6 */, FALSE /* dy6 */
- };
-
-
- FT_TRACE4(( " hflex\n" ));
-
- cf2_doFlex( opStack,
- &curX,
- &curY,
- &glyphPath,
- readFromStack,
- FALSE /* doConditionalLastRead */ );
- }
- continue;
-
- case cf2_escFLEX:
- {
- static const FT_Bool readFromStack[12] =
- {
- TRUE /* dx1 */, TRUE /* dy1 */,
- TRUE /* dx2 */, TRUE /* dy2 */,
- TRUE /* dx3 */, TRUE /* dy3 */,
- TRUE /* dx4 */, TRUE /* dy4 */,
- TRUE /* dx5 */, TRUE /* dy5 */,
- TRUE /* dx6 */, TRUE /* dy6 */
- };
-
-
- FT_TRACE4(( " flex\n" ));
-
- cf2_doFlex( opStack,
- &curX,
- &curY,
- &glyphPath,
- readFromStack,
- FALSE /* doConditionalLastRead */ );
- }
- break; /* TODO: why is this not a continue? */
-
- case cf2_escHFLEX1:
- {
- static const FT_Bool readFromStack[12] =
- {
- TRUE /* dx1 */, TRUE /* dy1 */,
- TRUE /* dx2 */, TRUE /* dy2 */,
- TRUE /* dx3 */, FALSE /* dy3 */,
- TRUE /* dx4 */, FALSE /* dy4 */,
- TRUE /* dx5 */, TRUE /* dy5 */,
- TRUE /* dx6 */, FALSE /* dy6 */
- };
-
-
- FT_TRACE4(( " hflex1\n" ));
-
- cf2_doFlex( opStack,
- &curX,
- &curY,
- &glyphPath,
- readFromStack,
- FALSE /* doConditionalLastRead */ );
- }
- continue;
-
- case cf2_escFLEX1:
- {
- static const FT_Bool readFromStack[12] =
- {
- TRUE /* dx1 */, TRUE /* dy1 */,
- TRUE /* dx2 */, TRUE /* dy2 */,
- TRUE /* dx3 */, TRUE /* dy3 */,
- TRUE /* dx4 */, TRUE /* dy4 */,
- TRUE /* dx5 */, TRUE /* dy5 */,
- FALSE /* dx6 */, FALSE /* dy6 */
- };
-
-
- FT_TRACE4(( " flex1\n" ));
-
- cf2_doFlex( opStack,
- &curX,
- &curY,
- &glyphPath,
- readFromStack,
- TRUE /* doConditionalLastRead */ );
- }
- continue;
-
- /* these opcodes are reserved in both CFF & CFF2 */
- case cf2_escRESERVED_1:
- case cf2_escRESERVED_2:
- case cf2_escRESERVED_6:
- case cf2_escRESERVED_7:
- case cf2_escRESERVED_8:
- case cf2_escRESERVED_13:
- case cf2_escRESERVED_16:
- case cf2_escRESERVED_17:
- case cf2_escRESERVED_19:
- case cf2_escRESERVED_25:
- case cf2_escRESERVED_31:
- case cf2_escRESERVED_32:
- case cf2_escRESERVED_33:
- FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
- break;
-
- default:
- {
- if ( font->isCFF2 || op2 >= cf2_escRESERVED_38 )
- FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
- else
- {
- /* second switch for 2-byte operators handles just CFF */
- switch ( op2 )
- {
-
- case cf2_escDOTSECTION:
- /* something about `flip type of locking' -- ignore it */
- FT_TRACE4(( " dotsection\n" ));
-
- break;
-
- case cf2_escAND:
- {
- CF2_F16Dot16 arg1;
- CF2_F16Dot16 arg2;
-
-
- FT_TRACE4(( " and\n" ));
-
- arg2 = cf2_stack_popFixed( opStack );
- arg1 = cf2_stack_popFixed( opStack );
-
- cf2_stack_pushInt( opStack, arg1 && arg2 );
- }
- continue; /* do not clear the stack */
-
- case cf2_escOR:
- {
- CF2_F16Dot16 arg1;
- CF2_F16Dot16 arg2;
-
-
- FT_TRACE4(( " or\n" ));
-
- arg2 = cf2_stack_popFixed( opStack );
- arg1 = cf2_stack_popFixed( opStack );
-
- cf2_stack_pushInt( opStack, arg1 || arg2 );
- }
- continue; /* do not clear the stack */
-
- case cf2_escNOT:
- {
- CF2_F16Dot16 arg;
-
-
- FT_TRACE4(( " not\n" ));
-
- arg = cf2_stack_popFixed( opStack );
-
- cf2_stack_pushInt( opStack, !arg );
- }
- continue; /* do not clear the stack */
-
- case cf2_escABS:
- {
- CF2_F16Dot16 arg;
-
-
- FT_TRACE4(( " abs\n" ));
-
- arg = cf2_stack_popFixed( opStack );
-
- if ( arg < -CF2_FIXED_MAX )
- cf2_stack_pushFixed( opStack, CF2_FIXED_MAX );
- else
- cf2_stack_pushFixed( opStack, FT_ABS( arg ) );
- }
- continue; /* do not clear the stack */
-
- case cf2_escADD:
- {
- CF2_F16Dot16 summand1;
- CF2_F16Dot16 summand2;
-
-
- FT_TRACE4(( " add\n" ));
-
- summand2 = cf2_stack_popFixed( opStack );
- summand1 = cf2_stack_popFixed( opStack );
-
- cf2_stack_pushFixed( opStack,
- ADD_INT32( summand1,
- summand2 ) );
- }
- continue; /* do not clear the stack */
-
- case cf2_escSUB:
- {
- CF2_F16Dot16 minuend;
- CF2_F16Dot16 subtrahend;
-
-
- FT_TRACE4(( " sub\n" ));
-
- subtrahend = cf2_stack_popFixed( opStack );
- minuend = cf2_stack_popFixed( opStack );
-
- cf2_stack_pushFixed( opStack,
- SUB_INT32( minuend, subtrahend ) );
- }
- continue; /* do not clear the stack */
-
- case cf2_escDIV:
- {
- CF2_F16Dot16 dividend;
- CF2_F16Dot16 divisor;
-
-
- FT_TRACE4(( " div\n" ));
-
- divisor = cf2_stack_popFixed( opStack );
- dividend = cf2_stack_popFixed( opStack );
-
- cf2_stack_pushFixed( opStack,
- FT_DivFix( dividend, divisor ) );
- }
- continue; /* do not clear the stack */
-
- case cf2_escNEG:
- {
- CF2_F16Dot16 arg;
-
-
- FT_TRACE4(( " neg\n" ));
-
- arg = cf2_stack_popFixed( opStack );
-
- if ( arg < -CF2_FIXED_MAX )
- cf2_stack_pushFixed( opStack, CF2_FIXED_MAX );
- else
- cf2_stack_pushFixed( opStack, -arg );
- }
- continue; /* do not clear the stack */
-
- case cf2_escEQ:
- {
- CF2_F16Dot16 arg1;
- CF2_F16Dot16 arg2;
-
-
- FT_TRACE4(( " eq\n" ));
-
- arg2 = cf2_stack_popFixed( opStack );
- arg1 = cf2_stack_popFixed( opStack );
-
- cf2_stack_pushInt( opStack, arg1 == arg2 );
- }
- continue; /* do not clear the stack */
-
- case cf2_escDROP:
- FT_TRACE4(( " drop\n" ));
-
- (void)cf2_stack_popFixed( opStack );
- continue; /* do not clear the stack */
-
- case cf2_escPUT:
- {
- CF2_F16Dot16 val;
- CF2_Int idx;
-
-
- FT_TRACE4(( " put\n" ));
-
- idx = cf2_stack_popInt( opStack );
- val = cf2_stack_popFixed( opStack );
-
- if ( idx >= 0 && idx < CF2_STORAGE_SIZE )
- storage[idx] = val;
- }
- continue; /* do not clear the stack */
-
- case cf2_escGET:
- {
- CF2_Int idx;
-
-
- FT_TRACE4(( " get\n" ));
-
- idx = cf2_stack_popInt( opStack );
-
- if ( idx >= 0 && idx < CF2_STORAGE_SIZE )
- cf2_stack_pushFixed( opStack, storage[idx] );
- }
- continue; /* do not clear the stack */
-
- case cf2_escIFELSE:
- {
- CF2_F16Dot16 arg1;
- CF2_F16Dot16 arg2;
- CF2_F16Dot16 cond1;
- CF2_F16Dot16 cond2;
-
-
- FT_TRACE4(( " ifelse\n" ));
-
- cond2 = cf2_stack_popFixed( opStack );
- cond1 = cf2_stack_popFixed( opStack );
- arg2 = cf2_stack_popFixed( opStack );
- arg1 = cf2_stack_popFixed( opStack );
-
- cf2_stack_pushFixed( opStack,
- cond1 <= cond2 ? arg1 : arg2 );
- }
- continue; /* do not clear the stack */
-
- case cf2_escRANDOM: /* in spec */
- {
- CF2_F16Dot16 r;
-
-
- FT_TRACE4(( " random\n" ));
-
- /* only use the lower 16 bits of `random' */
- /* to generate a number in the range (0;1] */
- r = (CF2_F16Dot16)
- ( ( decoder->current_subfont->random & 0xFFFF ) + 1 );
-
- decoder->current_subfont->random =
- cff_random( decoder->current_subfont->random );
-
- cf2_stack_pushFixed( opStack, r );
- }
- continue; /* do not clear the stack */
-
- case cf2_escMUL:
- {
- CF2_F16Dot16 factor1;
- CF2_F16Dot16 factor2;
-
-
- FT_TRACE4(( " mul\n" ));
-
- factor2 = cf2_stack_popFixed( opStack );
- factor1 = cf2_stack_popFixed( opStack );
-
- cf2_stack_pushFixed( opStack,
- FT_MulFix( factor1, factor2 ) );
- }
- continue; /* do not clear the stack */
-
- case cf2_escSQRT:
- {
- CF2_F16Dot16 arg;
-
-
- FT_TRACE4(( " sqrt\n" ));
-
- arg = cf2_stack_popFixed( opStack );
- if ( arg > 0 )
- {
- /* use a start value that doesn't make */
- /* the algorithm's addition overflow */
- FT_Fixed root = arg < 10 ? arg : arg >> 1;
- FT_Fixed new_root;
-
-
- /* Babylonian method */
- for (;;)
- {
- new_root = ( root + FT_DivFix( arg, root ) + 1 ) >> 1;
- if ( new_root == root )
- break;
- root = new_root;
- }
- arg = new_root;
- }
- else
- arg = 0;
-
- cf2_stack_pushFixed( opStack, arg );
- }
- continue; /* do not clear the stack */
-
- case cf2_escDUP:
- {
- CF2_F16Dot16 arg;
-
-
- FT_TRACE4(( " dup\n" ));
-
- arg = cf2_stack_popFixed( opStack );
-
- cf2_stack_pushFixed( opStack, arg );
- cf2_stack_pushFixed( opStack, arg );
- }
- continue; /* do not clear the stack */
-
- case cf2_escEXCH:
- {
- CF2_F16Dot16 arg1;
- CF2_F16Dot16 arg2;
-
-
- FT_TRACE4(( " exch\n" ));
-
- arg2 = cf2_stack_popFixed( opStack );
- arg1 = cf2_stack_popFixed( opStack );
-
- cf2_stack_pushFixed( opStack, arg2 );
- cf2_stack_pushFixed( opStack, arg1 );
- }
- continue; /* do not clear the stack */
-
- case cf2_escINDEX:
- {
- CF2_Int idx;
- CF2_UInt size;
-
-
- FT_TRACE4(( " index\n" ));
-
- idx = cf2_stack_popInt( opStack );
- size = cf2_stack_count( opStack );
-
- if ( size > 0 )
- {
- /* for `cf2_stack_getReal', */
- /* index 0 is bottom of stack */
- CF2_UInt gr_idx;
-
-
- if ( idx < 0 )
- gr_idx = size - 1;
- else if ( (CF2_UInt)idx >= size )
- gr_idx = 0;
- else
- gr_idx = size - 1 - (CF2_UInt)idx;
-
- cf2_stack_pushFixed( opStack,
- cf2_stack_getReal( opStack,
- gr_idx ) );
- }
- }
- continue; /* do not clear the stack */
-
- case cf2_escROLL:
- {
- CF2_Int idx;
- CF2_Int count;
-
-
- FT_TRACE4(( " roll\n" ));
-
- idx = cf2_stack_popInt( opStack );
- count = cf2_stack_popInt( opStack );
-
- cf2_stack_roll( opStack, count, idx );
- }
- continue; /* do not clear the stack */
-
- } /* end of 2nd switch checking op2 */
- }
- }
- } /* end of 1st switch checking op2 */
- } /* case cf2_cmdESC */
-
- break;
-
- case cf2_cmdENDCHAR:
- FT_TRACE4(( " endchar\n" ));
-
- if ( cf2_stack_count( opStack ) == 1 ||
- cf2_stack_count( opStack ) == 5 )
- {
- if ( !haveWidth )
- *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ),
- nominalWidthX );
- }
-
- /* width is defined or default after this */
- haveWidth = TRUE;
-
- if ( font->decoder->width_only )
- goto exit;
-
- /* close path if still open */
- cf2_glyphpath_closeOpenPath( &glyphPath );
-
- /* disable seac for CFF2 (charstring ending with args on stack) */
- if ( !font->isCFF2 && cf2_stack_count( opStack ) > 1 )
- {
- /* must be either 4 or 5 -- */
- /* this is a (deprecated) implied `seac' operator */
-
- CF2_Int achar;
- CF2_Int bchar;
- CF2_BufferRec component;
- CF2_Fixed dummyWidth; /* ignore component width */
- FT_Error error2;
-
-
- if ( doingSeac )
- {
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit; /* nested seac */
- }
-
- achar = cf2_stack_popInt( opStack );
- bchar = cf2_stack_popInt( opStack );
-
- curY = cf2_stack_popFixed( opStack );
- curX = cf2_stack_popFixed( opStack );
-
- error2 = cf2_getSeacComponent( decoder, achar, &component );
- if ( error2 )
- {
- lastError = error2; /* pass FreeType error through */
- goto exit;
- }
- cf2_interpT2CharString( font,
- &component,
- callbacks,
- translation,
- TRUE,
- curX,
- curY,
- &dummyWidth );
- cf2_freeSeacComponent( decoder, &component );
-
- error2 = cf2_getSeacComponent( decoder, bchar, &component );
- if ( error2 )
- {
- lastError = error2; /* pass FreeType error through */
- goto exit;
- }
- cf2_interpT2CharString( font,
- &component,
- callbacks,
- translation,
- TRUE,
- 0,
- 0,
- &dummyWidth );
- cf2_freeSeacComponent( decoder, &component );
- }
- goto exit;
-
- case cf2_cmdCNTRMASK:
- case cf2_cmdHINTMASK:
- /* the final \n in the tracing message gets added in */
- /* `cf2_hintmask_read' (which also traces the mask bytes) */
- FT_TRACE4(( op1 == cf2_cmdCNTRMASK ? " cntrmask" : " hintmask" ));
-
- /* never add hints after the mask is computed */
- if ( cf2_stack_count( opStack ) > 1 &&
- cf2_hintmask_isValid( &hintMask ) )
- {
- FT_TRACE4(( "cf2_interpT2CharString: invalid hint mask\n" ));
- break;
- }
-
- /* if there are arguments on the stack, there this is an */
- /* implied cf2_cmdVSTEMHM */
- cf2_doStems( font,
- opStack,
- &vStemHintArray,
- width,
- &haveWidth,
- 0 );
-
- if ( font->decoder->width_only )
- goto exit;
-
- if ( op1 == cf2_cmdHINTMASK )
- {
- /* consume the hint mask bytes which follow the operator */
- cf2_hintmask_read( &hintMask,
- charstring,
- cf2_arrstack_size( &hStemHintArray ) +
- cf2_arrstack_size( &vStemHintArray ) );
- }
- else
- {
- /*
- * Consume the counter mask bytes which follow the operator:
- * Build a temporary hint map, just to place and lock those
- * stems participating in the counter mask. These are most
- * likely the dominant hstems, and are grouped together in a
- * few counter groups, not necessarily in correspondence
- * with the hint groups. This reduces the chances of
- * conflicts between hstems that are initially placed in
- * separate hint groups and then brought together. The
- * positions are copied back to `hStemHintArray', so we can
- * discard `counterMask' and `counterHintMap'.
- *
- */
- CF2_HintMapRec counterHintMap;
- CF2_HintMaskRec counterMask;
-
-
- cf2_hintmap_init( &counterHintMap,
- font,
- &glyphPath.initialHintMap,
- &glyphPath.hintMoves,
- scaleY );
- cf2_hintmask_init( &counterMask, error );
-
- cf2_hintmask_read( &counterMask,
- charstring,
- cf2_arrstack_size( &hStemHintArray ) +
- cf2_arrstack_size( &vStemHintArray ) );
- cf2_hintmap_build( &counterHintMap,
- &hStemHintArray,
- &vStemHintArray,
- &counterMask,
- 0,
- FALSE );
- }
- break;
-
- case cf2_cmdRMOVETO:
- FT_TRACE4(( " rmoveto\n" ));
-
- if ( cf2_stack_count( opStack ) > 2 && !haveWidth )
- *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ),
- nominalWidthX );
-
- /* width is defined or default after this */
- haveWidth = TRUE;
-
- if ( font->decoder->width_only )
- goto exit;
-
- curY = ADD_INT32( curY, cf2_stack_popFixed( opStack ) );
- curX = ADD_INT32( curX, cf2_stack_popFixed( opStack ) );
-
- cf2_glyphpath_moveTo( &glyphPath, curX, curY );
-
- break;
-
- case cf2_cmdHMOVETO:
- FT_TRACE4(( " hmoveto\n" ));
-
- if ( cf2_stack_count( opStack ) > 1 && !haveWidth )
- *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ),
- nominalWidthX );
-
- /* width is defined or default after this */
- haveWidth = TRUE;
-
- if ( font->decoder->width_only )
- goto exit;
-
- curX = ADD_INT32( curX, cf2_stack_popFixed( opStack ) );
-
- cf2_glyphpath_moveTo( &glyphPath, curX, curY );
-
- break;
-
- case cf2_cmdRLINECURVE:
- {
- CF2_UInt count = cf2_stack_count( opStack );
- CF2_UInt idx = 0;
-
-
- FT_TRACE4(( " rlinecurve\n" ));
-
- while ( idx + 6 < count )
- {
- curX = ADD_INT32( curX, cf2_stack_getReal( opStack,
- idx + 0 ) );
- curY = ADD_INT32( curY, cf2_stack_getReal( opStack,
- idx + 1 ) );
-
- cf2_glyphpath_lineTo( &glyphPath, curX, curY );
- idx += 2;
- }
-
- while ( idx < count )
- {
- CF2_Fixed x1, y1, x2, y2, x3, y3;
-
-
- x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX );
- y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), curY );
- x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), x1 );
- y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y1 );
- x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), x2 );
- y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 5 ), y2 );
-
- cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
-
- curX = x3;
- curY = y3;
- idx += 6;
- }
-
- cf2_stack_clear( opStack );
- }
- continue; /* no need to clear stack again */
-
- case cf2_cmdVVCURVETO:
- {
- CF2_UInt count, count1 = cf2_stack_count( opStack );
- CF2_UInt idx = 0;
-
-
- /* if `cf2_stack_count' isn't of the form 4n or 4n+1, */
- /* we enforce it by clearing the second bit */
- /* (and sorting the stack indexing to suit) */
- count = count1 & ~2U;
- idx += count1 - count;
-
- FT_TRACE4(( " vvcurveto\n" ));
-
- while ( idx < count )
- {
- CF2_Fixed x1, y1, x2, y2, x3, y3;
-
-
- if ( ( count - idx ) & 1 )
- {
- x1 = ADD_INT32( cf2_stack_getReal( opStack, idx ), curX );
-
- idx++;
- }
- else
- x1 = curX;
-
- y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curY );
- x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 );
- y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 );
- x3 = x2;
- y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y2 );
-
- cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
-
- curX = x3;
- curY = y3;
- idx += 4;
- }
-
- cf2_stack_clear( opStack );
- }
- continue; /* no need to clear stack again */
-
- case cf2_cmdHHCURVETO:
- {
- CF2_UInt count, count1 = cf2_stack_count( opStack );
- CF2_UInt idx = 0;
-
-
- /* if `cf2_stack_count' isn't of the form 4n or 4n+1, */
- /* we enforce it by clearing the second bit */
- /* (and sorting the stack indexing to suit) */
- count = count1 & ~2U;
- idx += count1 - count;
-
- FT_TRACE4(( " hhcurveto\n" ));
-
- while ( idx < count )
- {
- CF2_Fixed x1, y1, x2, y2, x3, y3;
-
-
- if ( ( count - idx ) & 1 )
- {
- y1 = ADD_INT32( cf2_stack_getReal( opStack, idx ), curY );
-
- idx++;
- }
- else
- y1 = curY;
-
- x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX );
- x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 );
- y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 );
- x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), x2 );
- y3 = y2;
-
- cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
-
- curX = x3;
- curY = y3;
- idx += 4;
- }
-
- cf2_stack_clear( opStack );
- }
- continue; /* no need to clear stack again */
-
- case cf2_cmdVHCURVETO:
- case cf2_cmdHVCURVETO:
- {
- CF2_UInt count, count1 = cf2_stack_count( opStack );
- CF2_UInt idx = 0;
-
- FT_Bool alternate = FT_BOOL( op1 == cf2_cmdHVCURVETO );
-
-
- /* if `cf2_stack_count' isn't of the form 8n, 8n+1, */
- /* 8n+4, or 8n+5, we enforce it by clearing the */
- /* second bit */
- /* (and sorting the stack indexing to suit) */
- count = count1 & ~2U;
- idx += count1 - count;
-
- FT_TRACE4(( alternate ? " hvcurveto\n" : " vhcurveto\n" ));
-
- while ( idx < count )
- {
- CF2_Fixed x1, x2, x3, y1, y2, y3;
-
-
- if ( alternate )
- {
- x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX );
- y1 = curY;
- x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 );
- y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 );
- y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y2 );
-
- if ( count - idx == 5 )
- {
- x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), x2 );
-
- idx++;
- }
- else
- x3 = x2;
-
- alternate = FALSE;
- }
- else
- {
- x1 = curX;
- y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curY );
- x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 );
- y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 );
- x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), x2 );
-
- if ( count - idx == 5 )
- {
- y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), y2 );
-
- idx++;
- }
- else
- y3 = y2;
-
- alternate = TRUE;
- }
-
- cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
-
- curX = x3;
- curY = y3;
- idx += 4;
- }
-
- cf2_stack_clear( opStack );
- }
- continue; /* no need to clear stack again */
-
- case cf2_cmdEXTENDEDNMBR:
- {
- CF2_Int v;
-
- CF2_Int byte1 = cf2_buf_readByte( charstring );
- CF2_Int byte2 = cf2_buf_readByte( charstring );
-
-
- v = (FT_Short)( ( byte1 << 8 ) |
- byte2 );
-
- FT_TRACE4(( " %d", v ));
-
- cf2_stack_pushInt( opStack, v );
- }
- continue;
-
- default:
- /* numbers */
- {
- if ( /* op1 >= 32 && */ op1 <= 246 )
- {
- CF2_Int v;
-
-
- v = op1 - 139;
-
- FT_TRACE4(( " %d", v ));
-
- /* -107 .. 107 */
- cf2_stack_pushInt( opStack, v );
- }
-
- else if ( /* op1 >= 247 && */ op1 <= 250 )
- {
- CF2_Int v;
-
-
- v = op1;
- v -= 247;
- v *= 256;
- v += cf2_buf_readByte( charstring );
- v += 108;
-
- FT_TRACE4(( " %d", v ));
-
- /* 108 .. 1131 */
- cf2_stack_pushInt( opStack, v );
- }
-
- else if ( /* op1 >= 251 && */ op1 <= 254 )
- {
- CF2_Int v;
-
-
- v = op1;
- v -= 251;
- v *= 256;
- v += cf2_buf_readByte( charstring );
- v = -v - 108;
-
- FT_TRACE4(( " %d", v ));
-
- /* -1131 .. -108 */
- cf2_stack_pushInt( opStack, v );
- }
-
- else /* op1 == 255 */
- {
- CF2_Fixed v;
-
- FT_UInt32 byte1 = (FT_UInt32)cf2_buf_readByte( charstring );
- FT_UInt32 byte2 = (FT_UInt32)cf2_buf_readByte( charstring );
- FT_UInt32 byte3 = (FT_UInt32)cf2_buf_readByte( charstring );
- FT_UInt32 byte4 = (FT_UInt32)cf2_buf_readByte( charstring );
-
-
- v = (CF2_Fixed)( ( byte1 << 24 ) |
- ( byte2 << 16 ) |
- ( byte3 << 8 ) |
- byte4 );
-
- FT_TRACE4(( " %.5f", v / 65536.0 ));
-
- cf2_stack_pushFixed( opStack, v );
- }
- }
- continue; /* don't clear stack */
-
- } /* end of switch statement checking `op1' */
-
- cf2_stack_clear( opStack );
-
- } /* end of main interpreter loop */
-
- /* we get here if the charstring ends without cf2_cmdENDCHAR */
- FT_TRACE4(( "cf2_interpT2CharString:"
- " charstring ends without ENDCHAR\n" ));
-
- exit:
- /* check whether last error seen is also the first one */
- cf2_setError( error, lastError );
-
- if ( *error )
- FT_TRACE4(( "charstring error %d\n", *error ));
-
- /* free resources from objects we've used */
- cf2_glyphpath_finalize( &glyphPath );
- cf2_arrstack_finalize( &vStemHintArray );
- cf2_arrstack_finalize( &hStemHintArray );
- cf2_arrstack_finalize( &subrStack );
- cf2_stack_free( opStack );
-
- FT_TRACE4(( "\n" ));
-
- return;
- }
-
-
-/* END */
diff --git a/src/cff/cf2intrp.h b/src/cff/cf2intrp.h
deleted file mode 100644
index ec030e894..000000000
--- a/src/cff/cf2intrp.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2font.h */
-/* */
-/* Adobe's CFF Interpreter (specification). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CF2INTRP_H_
-#define CF2INTRP_H_
-
-
-#include "cf2ft.h"
-#include "cf2hints.h"
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( void )
- cf2_hintmask_init( CF2_HintMask hintmask,
- FT_Error* error );
- FT_LOCAL( FT_Bool )
- cf2_hintmask_isValid( const CF2_HintMask hintmask );
- FT_LOCAL( FT_Bool )
- cf2_hintmask_isNew( const CF2_HintMask hintmask );
- FT_LOCAL( void )
- cf2_hintmask_setNew( CF2_HintMask hintmask,
- FT_Bool val );
- FT_LOCAL( FT_Byte* )
- cf2_hintmask_getMaskPtr( CF2_HintMask hintmask );
- FT_LOCAL( void )
- cf2_hintmask_setAll( CF2_HintMask hintmask,
- size_t bitCount );
-
- FT_LOCAL( void )
- cf2_interpT2CharString( CF2_Font font,
- CF2_Buffer charstring,
- CF2_OutlineCallbacks callbacks,
- const FT_Vector* translation,
- FT_Bool doingSeac,
- CF2_Fixed curX,
- CF2_Fixed curY,
- CF2_Fixed* width );
-
-
-FT_END_HEADER
-
-
-#endif /* CF2INTRP_H_ */
-
-
-/* END */
diff --git a/src/cff/cf2read.c b/src/cff/cf2read.c
deleted file mode 100644
index 2b429e3ee..000000000
--- a/src/cff/cf2read.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2read.c */
-/* */
-/* Adobe's code for stream handling (body). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2glue.h"
-
-#include "cf2error.h"
-
-
- /* Define CF2_IO_FAIL as 1 to enable random errors and random */
- /* value errors in I/O. */
-#define CF2_IO_FAIL 0
-
-
-#if CF2_IO_FAIL
-
- /* set the .00 value to a nonzero probability */
- static int
- randomError2( void )
- {
- /* for region buffer ReadByte (interp) function */
- return (double)rand() / RAND_MAX < .00;
- }
-
- /* set the .00 value to a nonzero probability */
- static CF2_Int
- randomValue()
- {
- return (double)rand() / RAND_MAX < .00 ? rand() : 0;
- }
-
-#endif /* CF2_IO_FAIL */
-
-
- /* Region Buffer */
- /* */
- /* Can be constructed from a copied buffer managed by */
- /* `FCM_getDatablock'. */
- /* Reads bytes with check for end of buffer. */
-
- /* reading past the end of the buffer sets error and returns zero */
- FT_LOCAL_DEF( CF2_Int )
- cf2_buf_readByte( CF2_Buffer buf )
- {
- if ( buf->ptr < buf->end )
- {
-#if CF2_IO_FAIL
- if ( randomError2() )
- {
- CF2_SET_ERROR( buf->error, Invalid_Stream_Operation );
- return 0;
- }
-
- return *(buf->ptr)++ + randomValue();
-#else
- return *(buf->ptr)++;
-#endif
- }
- else
- {
- CF2_SET_ERROR( buf->error, Invalid_Stream_Operation );
- return 0;
- }
- }
-
-
- /* note: end condition can occur without error */
- FT_LOCAL_DEF( FT_Bool )
- cf2_buf_isEnd( CF2_Buffer buf )
- {
- return (FT_Bool)( buf->ptr >= buf->end );
- }
-
-
-/* END */
diff --git a/src/cff/cf2read.h b/src/cff/cf2read.h
deleted file mode 100644
index b0b0db803..000000000
--- a/src/cff/cf2read.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2read.h */
-/* */
-/* Adobe's code for stream handling (specification). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CF2READ_H_
-#define CF2READ_H_
-
-
-FT_BEGIN_HEADER
-
-
- typedef struct CF2_BufferRec_
- {
- FT_Error* error;
- const FT_Byte* start;
- const FT_Byte* end;
- const FT_Byte* ptr;
-
- } CF2_BufferRec, *CF2_Buffer;
-
-
- FT_LOCAL( CF2_Int )
- cf2_buf_readByte( CF2_Buffer buf );
- FT_LOCAL( FT_Bool )
- cf2_buf_isEnd( CF2_Buffer buf );
-
-
-FT_END_HEADER
-
-
-#endif /* CF2READ_H_ */
-
-
-/* END */
diff --git a/src/cff/cf2stack.c b/src/cff/cf2stack.c
deleted file mode 100644
index 12a026d21..000000000
--- a/src/cff/cf2stack.c
+++ /dev/null
@@ -1,328 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2stack.c */
-/* */
-/* Adobe's code for emulating a CFF stack (body). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2glue.h"
-#include "cf2font.h"
-#include "cf2stack.h"
-
-#include "cf2error.h"
-
-
- /* Allocate and initialize an instance of CF2_Stack. */
- /* Note: This function returns NULL on error (does not set */
- /* `error'). */
- FT_LOCAL_DEF( CF2_Stack )
- cf2_stack_init( FT_Memory memory,
- FT_Error* e,
- FT_UInt stackSize )
- {
- FT_Error error = FT_Err_Ok; /* for FT_NEW */
-
- CF2_Stack stack = NULL;
-
-
- if ( !FT_NEW( stack ) )
- {
- /* initialize the structure; FT_NEW zeroes it */
- stack->memory = memory;
- stack->error = e;
- }
-
- /* allocate the stack buffer */
- if ( FT_NEW_ARRAY( stack->buffer, stackSize ) )
- {
- FT_FREE( stack );
- return NULL;
- }
-
- stack->stackSize = stackSize;
- stack->top = stack->buffer; /* empty stack */
-
- return stack;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_stack_free( CF2_Stack stack )
- {
- if ( stack )
- {
- FT_Memory memory = stack->memory;
-
- /* free the buffer */
- FT_FREE( stack->buffer );
-
- /* free the main structure */
- FT_FREE( stack );
- }
- }
-
-
- FT_LOCAL_DEF( CF2_UInt )
- cf2_stack_count( CF2_Stack stack )
- {
- return (CF2_UInt)( stack->top - stack->buffer );
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_stack_pushInt( CF2_Stack stack,
- CF2_Int val )
- {
- if ( stack->top == stack->buffer + stack->stackSize )
- {
- CF2_SET_ERROR( stack->error, Stack_Overflow );
- return; /* stack overflow */
- }
-
- stack->top->u.i = val;
- stack->top->type = CF2_NumberInt;
- stack->top++;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_stack_pushFixed( CF2_Stack stack,
- CF2_Fixed val )
- {
- if ( stack->top == stack->buffer + stack->stackSize )
- {
- CF2_SET_ERROR( stack->error, Stack_Overflow );
- return; /* stack overflow */
- }
-
- stack->top->u.r = val;
- stack->top->type = CF2_NumberFixed;
- stack->top++;
- }
-
-
- /* this function is only allowed to pop an integer type */
- FT_LOCAL_DEF( CF2_Int )
- cf2_stack_popInt( CF2_Stack stack )
- {
- if ( stack->top == stack->buffer )
- {
- CF2_SET_ERROR( stack->error, Stack_Underflow );
- return 0; /* underflow */
- }
- if ( stack->top[-1].type != CF2_NumberInt )
- {
- CF2_SET_ERROR( stack->error, Syntax_Error );
- return 0; /* type mismatch */
- }
-
- stack->top--;
-
- return stack->top->u.i;
- }
-
-
- /* Note: type mismatch is silently cast */
- /* TODO: check this */
- FT_LOCAL_DEF( CF2_Fixed )
- cf2_stack_popFixed( CF2_Stack stack )
- {
- if ( stack->top == stack->buffer )
- {
- CF2_SET_ERROR( stack->error, Stack_Underflow );
- return cf2_intToFixed( 0 ); /* underflow */
- }
-
- stack->top--;
-
- switch ( stack->top->type )
- {
- case CF2_NumberInt:
- return cf2_intToFixed( stack->top->u.i );
- case CF2_NumberFrac:
- return cf2_fracToFixed( stack->top->u.f );
- default:
- return stack->top->u.r;
- }
- }
-
-
- /* Note: type mismatch is silently cast */
- /* TODO: check this */
- FT_LOCAL_DEF( CF2_Fixed )
- cf2_stack_getReal( CF2_Stack stack,
- CF2_UInt idx )
- {
- FT_ASSERT( cf2_stack_count( stack ) <= stack->stackSize );
-
- if ( idx >= cf2_stack_count( stack ) )
- {
- CF2_SET_ERROR( stack->error, Stack_Overflow );
- return cf2_intToFixed( 0 ); /* bounds error */
- }
-
- switch ( stack->buffer[idx].type )
- {
- case CF2_NumberInt:
- return cf2_intToFixed( stack->buffer[idx].u.i );
- case CF2_NumberFrac:
- return cf2_fracToFixed( stack->buffer[idx].u.f );
- default:
- return stack->buffer[idx].u.r;
- }
- }
-
-
- /* provide random access to stack */
- FT_LOCAL_DEF( void )
- cf2_stack_setReal( CF2_Stack stack,
- CF2_UInt idx,
- CF2_Fixed val )
- {
- if ( idx > cf2_stack_count( stack ) )
- {
- CF2_SET_ERROR( stack->error, Stack_Overflow );
- return;
- }
-
- stack->buffer[idx].u.r = val;
- stack->buffer[idx].type = CF2_NumberFixed;
- }
-
-
- /* discard (pop) num values from stack */
- FT_LOCAL_DEF( void )
- cf2_stack_pop( CF2_Stack stack,
- CF2_UInt num )
- {
- if ( num > cf2_stack_count( stack ) )
- {
- CF2_SET_ERROR( stack->error, Stack_Underflow );
- return;
- }
- stack->top -= num;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_stack_roll( CF2_Stack stack,
- CF2_Int count,
- CF2_Int shift )
- {
- /* we initialize this variable to avoid compiler warnings */
- CF2_StackNumber last = { { 0 }, CF2_NumberInt };
-
- CF2_Int start_idx, idx, i;
-
-
- if ( count < 2 )
- return; /* nothing to do (values 0 and 1), or undefined value */
-
- if ( (CF2_UInt)count > cf2_stack_count( stack ) )
- {
- CF2_SET_ERROR( stack->error, Stack_Overflow );
- return;
- }
-
- if ( shift < 0 )
- shift = -( ( -shift ) % count );
- else
- shift %= count;
-
- if ( shift == 0 )
- return; /* nothing to do */
-
- /* We use the following algorithm to do the rolling, */
- /* which needs two temporary variables only. */
- /* */
- /* Example: */
- /* */
- /* count = 8 */
- /* shift = 2 */
- /* */
- /* stack indices before roll: 7 6 5 4 3 2 1 0 */
- /* stack indices after roll: 1 0 7 6 5 4 3 2 */
- /* */
- /* The value of index 0 gets moved to index 2, while */
- /* the old value of index 2 gets moved to index 4, */
- /* and so on. We thus have the following copying */
- /* chains for shift value 2. */
- /* */
- /* 0 -> 2 -> 4 -> 6 -> 0 */
- /* 1 -> 3 -> 5 -> 7 -> 1 */
- /* */
- /* If `count' and `shift' are incommensurable, we */
- /* have a single chain only. Otherwise, increase */
- /* the start index by 1 after the first chain, then */
- /* do the next chain until all elements in all */
- /* chains are handled. */
-
- start_idx = -1;
- idx = -1;
- for ( i = 0; i < count; i++ )
- {
- CF2_StackNumber tmp;
-
-
- if ( start_idx == idx )
- {
- start_idx++;
- idx = start_idx;
- last = stack->buffer[idx];
- }
-
- idx += shift;
- if ( idx >= count )
- idx -= count;
- else if ( idx < 0 )
- idx += count;
-
- tmp = stack->buffer[idx];
- stack->buffer[idx] = last;
- last = tmp;
- }
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_stack_clear( CF2_Stack stack )
- {
- stack->top = stack->buffer;
- }
-
-
-/* END */
diff --git a/src/cff/cf2stack.h b/src/cff/cf2stack.h
deleted file mode 100644
index ef08eefe4..000000000
--- a/src/cff/cf2stack.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2stack.h */
-/* */
-/* Adobe's code for emulating a CFF stack (specification). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CF2STACK_H_
-#define CF2STACK_H_
-
-
-FT_BEGIN_HEADER
-
-
- /* CFF operand stack; specified maximum of 48 or 192 values */
- typedef struct CF2_StackNumber_
- {
- union
- {
- CF2_Fixed r; /* 16.16 fixed point */
- CF2_Frac f; /* 2.30 fixed point (for font matrix) */
- CF2_Int i;
- } u;
-
- CF2_NumberType type;
-
- } CF2_StackNumber;
-
-
- typedef struct CF2_StackRec_
- {
- FT_Memory memory;
- FT_Error* error;
- CF2_StackNumber* buffer;
- CF2_StackNumber* top;
- FT_UInt stackSize;
-
- } CF2_StackRec, *CF2_Stack;
-
-
- FT_LOCAL( CF2_Stack )
- cf2_stack_init( FT_Memory memory,
- FT_Error* error,
- FT_UInt stackSize );
- FT_LOCAL( void )
- cf2_stack_free( CF2_Stack stack );
-
- FT_LOCAL( CF2_UInt )
- cf2_stack_count( CF2_Stack stack );
-
- FT_LOCAL( void )
- cf2_stack_pushInt( CF2_Stack stack,
- CF2_Int val );
- FT_LOCAL( void )
- cf2_stack_pushFixed( CF2_Stack stack,
- CF2_Fixed val );
-
- FT_LOCAL( CF2_Int )
- cf2_stack_popInt( CF2_Stack stack );
- FT_LOCAL( CF2_Fixed )
- cf2_stack_popFixed( CF2_Stack stack );
-
- FT_LOCAL( CF2_Fixed )
- cf2_stack_getReal( CF2_Stack stack,
- CF2_UInt idx );
- FT_LOCAL( void )
- cf2_stack_setReal( CF2_Stack stack,
- CF2_UInt idx,
- CF2_Fixed val );
-
- FT_LOCAL( void )
- cf2_stack_pop( CF2_Stack stack,
- CF2_UInt num );
-
- FT_LOCAL( void )
- cf2_stack_roll( CF2_Stack stack,
- CF2_Int count,
- CF2_Int idx );
-
- FT_LOCAL( void )
- cf2_stack_clear( CF2_Stack stack );
-
-
-FT_END_HEADER
-
-
-#endif /* CF2STACK_H_ */
-
-
-/* END */
diff --git a/src/cff/cf2types.h b/src/cff/cf2types.h
deleted file mode 100644
index 5b7e1239a..000000000
--- a/src/cff/cf2types.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2types.h */
-/* */
-/* Adobe's code for defining data types (specification only). */
-/* */
-/* Copyright 2011-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CF2TYPES_H_
-#define CF2TYPES_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-
-FT_BEGIN_HEADER
-
-
- /*
- * The data models that we expect to support are as follows:
- *
- * name char short int long long-long pointer example
- * -----------------------------------------------------
- * ILP32 8 16 32 32 64* 32 32-bit MacOS, x86
- * LLP64 8 16 32 32 64 64 x64
- * LP64 8 16 32 64 64 64 64-bit MacOS
- *
- * *) type may be supported by emulation on a 32-bit architecture
- *
- */
-
-
- /* integers at least 32 bits wide */
-#define CF2_UInt FT_UFast
-#define CF2_Int FT_Fast
-
-
- /* fixed-float numbers */
- typedef FT_Int32 CF2_F16Dot16;
-
-
-FT_END_HEADER
-
-
-#endif /* CF2TYPES_H_ */
-
-
-/* END */
diff --git a/src/cff/cff.c b/src/cff/cff.c
deleted file mode 100644
index 397f6dfaf..000000000
--- a/src/cff/cff.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* cff.c */
-/* */
-/* FreeType OpenType driver component (body only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "cffcmap.c"
-#include "cffdrivr.c"
-#include "cffgload.c"
-#include "cffparse.c"
-#include "cffpic.c"
-#include "cffload.c"
-#include "cffobjs.c"
-
-#include "cf2arrst.c"
-#include "cf2blues.c"
-#include "cf2error.c"
-#include "cf2font.c"
-#include "cf2ft.c"
-#include "cf2hints.c"
-#include "cf2intrp.c"
-#include "cf2read.c"
-#include "cf2stack.c"
-
-
-/* END */
diff --git a/src/cff/cffcmap.c b/src/cff/cffcmap.c
deleted file mode 100644
index 4adce7a54..000000000
--- a/src/cff/cffcmap.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffcmap.c */
-/* */
-/* CFF character mapping table (cmap) support (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include "cffcmap.h"
-#include "cffload.h"
-
-#include "cfferrs.h"
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CFF STANDARD (AND EXPERT) ENCODING CMAPS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_CALLBACK_DEF( FT_Error )
- cff_cmap_encoding_init( CFF_CMapStd cmap,
- FT_Pointer pointer )
- {
- TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
- CFF_Font cff = (CFF_Font)face->extra.data;
- CFF_Encoding encoding = &cff->encoding;
-
- FT_UNUSED( pointer );
-
-
- cmap->gids = encoding->codes;
-
- return 0;
- }
-
-
- FT_CALLBACK_DEF( void )
- cff_cmap_encoding_done( CFF_CMapStd cmap )
- {
- cmap->gids = NULL;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- cff_cmap_encoding_char_index( CFF_CMapStd cmap,
- FT_UInt32 char_code )
- {
- FT_UInt result = 0;
-
-
- if ( char_code < 256 )
- result = cmap->gids[char_code];
-
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 )
- cff_cmap_encoding_char_next( CFF_CMapStd cmap,
- FT_UInt32 *pchar_code )
- {
- FT_UInt result = 0;
- FT_UInt32 char_code = *pchar_code;
-
-
- *pchar_code = 0;
-
- if ( char_code < 255 )
- {
- FT_UInt code = (FT_UInt)(char_code + 1);
-
-
- for (;;)
- {
- if ( code >= 256 )
- break;
-
- result = cmap->gids[code];
- if ( result != 0 )
- {
- *pchar_code = code;
- break;
- }
-
- code++;
- }
- }
- return result;
- }
-
-
- FT_DEFINE_CMAP_CLASS(
- cff_cmap_encoding_class_rec,
-
- sizeof ( CFF_CMapStdRec ),
-
- (FT_CMap_InitFunc) cff_cmap_encoding_init, /* init */
- (FT_CMap_DoneFunc) cff_cmap_encoding_done, /* done */
- (FT_CMap_CharIndexFunc)cff_cmap_encoding_char_index, /* char_index */
- (FT_CMap_CharNextFunc) cff_cmap_encoding_char_next, /* char_next */
-
- (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
- (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
- (FT_CMap_VariantListFunc) NULL, /* variant_list */
- (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
- (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
- )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CFF SYNTHETIC UNICODE ENCODING CMAP *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_CALLBACK_DEF( const char* )
- cff_sid_to_glyph_name( TT_Face face,
- FT_UInt idx )
- {
- CFF_Font cff = (CFF_Font)face->extra.data;
- CFF_Charset charset = &cff->charset;
- FT_UInt sid = charset->sids[idx];
-
-
- return cff_index_get_sid_string( cff, sid );
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- cff_cmap_unicode_init( PS_Unicodes unicodes,
- FT_Pointer pointer )
- {
- TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes );
- FT_Memory memory = FT_FACE_MEMORY( face );
- CFF_Font cff = (CFF_Font)face->extra.data;
- CFF_Charset charset = &cff->charset;
- FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames;
-
- FT_UNUSED( pointer );
-
-
- /* can't build Unicode map for CID-keyed font */
- /* because we don't know glyph names. */
- if ( !charset->sids )
- return FT_THROW( No_Unicode_Glyph_Name );
-
- return psnames->unicodes_init( memory,
- unicodes,
- cff->num_glyphs,
- (PS_GetGlyphNameFunc)&cff_sid_to_glyph_name,
- (PS_FreeGlyphNameFunc)NULL,
- (FT_Pointer)face );
- }
-
-
- FT_CALLBACK_DEF( void )
- cff_cmap_unicode_done( PS_Unicodes unicodes )
- {
- FT_Face face = FT_CMAP_FACE( unicodes );
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- FT_FREE( unicodes->maps );
- unicodes->num_maps = 0;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- cff_cmap_unicode_char_index( PS_Unicodes unicodes,
- FT_UInt32 char_code )
- {
- TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes );
- CFF_Font cff = (CFF_Font)face->extra.data;
- FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames;
-
-
- return psnames->unicodes_char_index( unicodes, char_code );
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 )
- cff_cmap_unicode_char_next( PS_Unicodes unicodes,
- FT_UInt32 *pchar_code )
- {
- TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes );
- CFF_Font cff = (CFF_Font)face->extra.data;
- FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames;
-
-
- return psnames->unicodes_char_next( unicodes, pchar_code );
- }
-
-
- FT_DEFINE_CMAP_CLASS(
- cff_cmap_unicode_class_rec,
-
- sizeof ( PS_UnicodesRec ),
-
- (FT_CMap_InitFunc) cff_cmap_unicode_init, /* init */
- (FT_CMap_DoneFunc) cff_cmap_unicode_done, /* done */
- (FT_CMap_CharIndexFunc)cff_cmap_unicode_char_index, /* char_index */
- (FT_CMap_CharNextFunc) cff_cmap_unicode_char_next, /* char_next */
-
- (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
- (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
- (FT_CMap_VariantListFunc) NULL, /* variant_list */
- (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
- (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
- )
-
-
-/* END */
diff --git a/src/cff/cffcmap.h b/src/cff/cffcmap.h
deleted file mode 100644
index 7792e0424..000000000
--- a/src/cff/cffcmap.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffcmap.h */
-/* */
-/* CFF character mapping table (cmap) support (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CFFCMAP_H_
-#define CFFCMAP_H_
-
-#include "cffobjs.h"
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** TYPE1 STANDARD (AND EXPERT) ENCODING CMAPS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* standard (and expert) encoding cmaps */
- typedef struct CFF_CMapStdRec_* CFF_CMapStd;
-
- typedef struct CFF_CMapStdRec_
- {
- FT_CMapRec cmap;
- FT_UShort* gids; /* up to 256 elements */
-
- } CFF_CMapStdRec;
-
-
- FT_DECLARE_CMAP_CLASS(cff_cmap_encoding_class_rec)
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CFF SYNTHETIC UNICODE ENCODING CMAP *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* unicode (synthetic) cmaps */
-
- FT_DECLARE_CMAP_CLASS(cff_cmap_unicode_class_rec)
-
-
-FT_END_HEADER
-
-#endif /* CFFCMAP_H_ */
-
-
-/* END */
diff --git a/src/cff/cffdrivr.c b/src/cff/cffdrivr.c
deleted file mode 100644
index 38bfc2ca3..000000000
--- a/src/cff/cffdrivr.c
+++ /dev/null
@@ -1,1244 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffdrivr.c */
-/* */
-/* OpenType font driver implementation (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H
-#include FT_SERVICE_CID_H
-#include FT_SERVICE_POSTSCRIPT_INFO_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_TT_CMAP_H
-
-#include "cffdrivr.h"
-#include "cffgload.h"
-#include "cffload.h"
-#include "cffcmap.h"
-#include "cffparse.h"
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_METRICS_VARIATIONS_H
-#endif
-
-#include "cfferrs.h"
-#include "cffpic.h"
-
-#include FT_SERVICE_FONT_FORMAT_H
-#include FT_SERVICE_GLYPH_DICT_H
-#include FT_SERVICE_PROPERTIES_H
-#include FT_CFF_DRIVER_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cffdriver
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** F A C E S ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cff_get_kerning */
- /* */
- /* <Description> */
- /* A driver method used to return the kerning vector between two */
- /* glyphs of the same face. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* left_glyph :: The index of the left glyph in the kern pair. */
- /* */
- /* right_glyph :: The index of the right glyph in the kern pair. */
- /* */
- /* <Output> */
- /* kerning :: The kerning vector. This is in font units for */
- /* scalable formats, and in pixels for fixed-sizes */
- /* formats. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* Only horizontal layouts (left-to-right & right-to-left) are */
- /* supported by this function. Other layouts, or more sophisticated */
- /* kernings, are out of scope of this method (the basic driver */
- /* interface is meant to be simple). */
- /* */
- /* They can be implemented by format-specific interfaces. */
- /* */
- FT_CALLBACK_DEF( FT_Error )
- cff_get_kerning( FT_Face ttface, /* TT_Face */
- FT_UInt left_glyph,
- FT_UInt right_glyph,
- FT_Vector* kerning )
- {
- TT_Face face = (TT_Face)ttface;
- SFNT_Service sfnt = (SFNT_Service)face->sfnt;
-
-
- kerning->x = 0;
- kerning->y = 0;
-
- if ( sfnt )
- kerning->x = sfnt->get_kerning( face, left_glyph, right_glyph );
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cff_glyph_load */
- /* */
- /* <Description> */
- /* A driver method used to load a glyph within a given glyph slot. */
- /* */
- /* <Input> */
- /* slot :: A handle to the target slot object where the glyph */
- /* will be loaded. */
- /* */
- /* size :: A handle to the source face size at which the glyph */
- /* must be scaled, loaded, etc. */
- /* */
- /* glyph_index :: The index of the glyph in the font file. */
- /* */
- /* load_flags :: A flag indicating what to load for this glyph. The */
- /* FT_LOAD_??? constants can be used to control the */
- /* glyph loading process (e.g., whether the outline */
- /* should be scaled, whether to load bitmaps or not, */
- /* whether to hint the outline, etc). */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_CALLBACK_DEF( FT_Error )
- cff_glyph_load( FT_GlyphSlot cffslot, /* CFF_GlyphSlot */
- FT_Size cffsize, /* CFF_Size */
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- FT_Error error;
- CFF_GlyphSlot slot = (CFF_GlyphSlot)cffslot;
- CFF_Size size = (CFF_Size)cffsize;
-
-
- if ( !slot )
- return FT_THROW( Invalid_Slot_Handle );
-
- FT_TRACE1(( "cff_glyph_load: glyph index %d\n", glyph_index ));
-
- /* check whether we want a scaled outline or bitmap */
- if ( !size )
- load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
-
- /* reset the size object if necessary */
- if ( load_flags & FT_LOAD_NO_SCALE )
- size = NULL;
-
- if ( size )
- {
- /* these two objects must have the same parent */
- if ( cffsize->face != cffslot->face )
- return FT_THROW( Invalid_Face_Handle );
- }
-
- /* now load the glyph outline if necessary */
- error = cff_slot_load( slot, size, glyph_index, load_flags );
-
- /* force drop-out mode to 2 - irrelevant now */
- /* slot->outline.dropout_mode = 2; */
-
- return error;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- cff_get_advances( FT_Face face,
- FT_UInt start,
- FT_UInt count,
- FT_Int32 flags,
- FT_Fixed* advances )
- {
- FT_UInt nn;
- FT_Error error = FT_Err_Ok;
- FT_GlyphSlot slot = face->glyph;
-
-
- if ( FT_IS_SFNT( face ) )
- {
- /* OpenType 1.7 mandates that the data from `hmtx' table be used; */
- /* it is no longer necessary that those values are identical to */
- /* the values in the `CFF' table */
-
- TT_Face ttface = (TT_Face)face;
- FT_Short dummy;
-
-
- if ( flags & FT_LOAD_VERTICAL_LAYOUT )
- {
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- /* no fast retrieval for blended MM fonts without VVAR table */
- if ( !ttface->is_default_instance &&
- !( ttface->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
- return FT_THROW( Unimplemented_Feature );
-#endif
-
- /* check whether we have data from the `vmtx' table at all; */
- /* otherwise we extract the info from the CFF glyphstrings */
- /* (instead of synthesizing a global value using the `OS/2' */
- /* table) */
- if ( !ttface->vertical_info )
- goto Missing_Table;
-
- for ( nn = 0; nn < count; nn++ )
- {
- FT_UShort ah;
-
-
- ( (SFNT_Service)ttface->sfnt )->get_metrics( ttface,
- 1,
- start + nn,
- &dummy,
- &ah );
-
- FT_TRACE5(( " idx %d: advance height %d font units\n",
- start + nn, ah ));
- advances[nn] = ah;
- }
- }
- else
- {
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- /* no fast retrieval for blended MM fonts without HVAR table */
- if ( !ttface->is_default_instance &&
- !( ttface->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
- return FT_THROW( Unimplemented_Feature );
-#endif
-
- /* check whether we have data from the `hmtx' table at all */
- if ( !ttface->horizontal.number_Of_HMetrics )
- goto Missing_Table;
-
- for ( nn = 0; nn < count; nn++ )
- {
- FT_UShort aw;
-
-
- ( (SFNT_Service)ttface->sfnt )->get_metrics( ttface,
- 0,
- start + nn,
- &dummy,
- &aw );
-
- FT_TRACE5(( " idx %d: advance width %d font units\n",
- start + nn, aw ));
- advances[nn] = aw;
- }
- }
-
- return error;
- }
-
- Missing_Table:
- flags |= (FT_UInt32)FT_LOAD_ADVANCE_ONLY;
-
- for ( nn = 0; nn < count; nn++ )
- {
- error = cff_glyph_load( slot, face->size, start + nn, flags );
- if ( error )
- break;
-
- advances[nn] = ( flags & FT_LOAD_VERTICAL_LAYOUT )
- ? slot->linearVertAdvance
- : slot->linearHoriAdvance;
- }
-
- return error;
- }
-
-
- /*
- * GLYPH DICT SERVICE
- *
- */
-
- static FT_Error
- cff_get_glyph_name( CFF_Face face,
- FT_UInt glyph_index,
- FT_Pointer buffer,
- FT_UInt buffer_max )
- {
- CFF_Font font = (CFF_Font)face->extra.data;
- FT_String* gname;
- FT_UShort sid;
- FT_Error error;
-
-
- /* CFF2 table does not have glyph names; */
- /* we need to use `post' table method */
- if ( font->version_major == 2 )
- {
- FT_Library library = FT_FACE_LIBRARY( face );
- FT_Module sfnt_module = FT_Get_Module( library, "sfnt" );
- FT_Service_GlyphDict service =
- (FT_Service_GlyphDict)ft_module_get_service(
- sfnt_module,
- FT_SERVICE_ID_GLYPH_DICT,
- 0 );
-
-
- if ( service && service->get_name )
- return service->get_name( FT_FACE( face ),
- glyph_index,
- buffer,
- buffer_max );
- else
- {
- FT_ERROR(( "cff_get_glyph_name:"
- " cannot get glyph name from a CFF2 font\n"
- " "
- " without the `PSNames' module\n" ));
- error = FT_THROW( Missing_Module );
- goto Exit;
- }
- }
-
- if ( !font->psnames )
- {
- FT_ERROR(( "cff_get_glyph_name:"
- " cannot get glyph name from CFF & CEF fonts\n"
- " "
- " without the `PSNames' module\n" ));
- error = FT_THROW( Missing_Module );
- goto Exit;
- }
-
- /* first, locate the sid in the charset table */
- sid = font->charset.sids[glyph_index];
-
- /* now, lookup the name itself */
- gname = cff_index_get_sid_string( font, sid );
-
- if ( gname )
- FT_STRCPYN( buffer, gname, buffer_max );
-
- error = FT_Err_Ok;
-
- Exit:
- return error;
- }
-
-
- static FT_UInt
- cff_get_name_index( CFF_Face face,
- FT_String* glyph_name )
- {
- CFF_Font cff;
- CFF_Charset charset;
- FT_Service_PsCMaps psnames;
- FT_String* name;
- FT_UShort sid;
- FT_UInt i;
-
-
- cff = (CFF_FontRec *)face->extra.data;
- charset = &cff->charset;
-
- /* CFF2 table does not have glyph names; */
- /* we need to use `post' table method */
- if ( cff->version_major == 2 )
- {
- FT_Library library = FT_FACE_LIBRARY( face );
- FT_Module sfnt_module = FT_Get_Module( library, "sfnt" );
- FT_Service_GlyphDict service =
- (FT_Service_GlyphDict)ft_module_get_service(
- sfnt_module,
- FT_SERVICE_ID_GLYPH_DICT,
- 0 );
-
-
- if ( service && service->name_index )
- return service->name_index( FT_FACE( face ), glyph_name );
- else
- {
- FT_ERROR(( "cff_get_name_index:"
- " cannot get glyph index from a CFF2 font\n"
- " "
- " without the `PSNames' module\n" ));
- return 0;
- }
- }
-
- FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
- if ( !psnames )
- return 0;
-
- for ( i = 0; i < cff->num_glyphs; i++ )
- {
- sid = charset->sids[i];
-
- if ( sid > 390 )
- name = cff_index_get_string( cff, sid - 391 );
- else
- name = (FT_String *)psnames->adobe_std_strings( sid );
-
- if ( !name )
- continue;
-
- if ( !ft_strcmp( glyph_name, name ) )
- return i;
- }
-
- return 0;
- }
-
-
- FT_DEFINE_SERVICE_GLYPHDICTREC(
- cff_service_glyph_dict,
-
- (FT_GlyphDict_GetNameFunc) cff_get_glyph_name, /* get_name */
- (FT_GlyphDict_NameIndexFunc)cff_get_name_index /* name_index */
- )
-
-
- /*
- * POSTSCRIPT INFO SERVICE
- *
- */
-
- static FT_Int
- cff_ps_has_glyph_names( FT_Face face )
- {
- return ( face->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) > 0;
- }
-
-
- static FT_Error
- cff_ps_get_font_info( CFF_Face face,
- PS_FontInfoRec* afont_info )
- {
- CFF_Font cff = (CFF_Font)face->extra.data;
- FT_Error error = FT_Err_Ok;
-
-
- if ( cff && !cff->font_info )
- {
- CFF_FontRecDict dict = &cff->top_font.font_dict;
- PS_FontInfoRec *font_info = NULL;
- FT_Memory memory = face->root.memory;
-
-
- if ( FT_ALLOC( font_info, sizeof ( *font_info ) ) )
- goto Fail;
-
- font_info->version = cff_index_get_sid_string( cff,
- dict->version );
- font_info->notice = cff_index_get_sid_string( cff,
- dict->notice );
- font_info->full_name = cff_index_get_sid_string( cff,
- dict->full_name );
- font_info->family_name = cff_index_get_sid_string( cff,
- dict->family_name );
- font_info->weight = cff_index_get_sid_string( cff,
- dict->weight );
- font_info->italic_angle = dict->italic_angle;
- font_info->is_fixed_pitch = dict->is_fixed_pitch;
- font_info->underline_position = (FT_Short)dict->underline_position;
- font_info->underline_thickness = (FT_UShort)dict->underline_thickness;
-
- cff->font_info = font_info;
- }
-
- if ( cff )
- *afont_info = *cff->font_info;
-
- Fail:
- return error;
- }
-
-
- FT_DEFINE_SERVICE_PSINFOREC(
- cff_service_ps_info,
-
- (PS_GetFontInfoFunc) cff_ps_get_font_info, /* ps_get_font_info */
- (PS_GetFontExtraFunc) NULL, /* ps_get_font_extra */
- (PS_HasGlyphNamesFunc) cff_ps_has_glyph_names, /* ps_has_glyph_names */
- /* unsupported with CFF fonts */
- (PS_GetFontPrivateFunc)NULL, /* ps_get_font_private */
- /* not implemented */
- (PS_GetFontValueFunc) NULL /* ps_get_font_value */
- )
-
-
- /*
- * POSTSCRIPT NAME SERVICE
- *
- */
-
- static const char*
- cff_get_ps_name( CFF_Face face )
- {
- CFF_Font cff = (CFF_Font)face->extra.data;
- SFNT_Service sfnt = (SFNT_Service)face->sfnt;
-
-
- /* following the OpenType specification 1.7, we return the name stored */
- /* in the `name' table for a CFF wrapped into an SFNT container */
-
- if ( FT_IS_SFNT( FT_FACE( face ) ) && sfnt )
- {
- FT_Library library = FT_FACE_LIBRARY( face );
- FT_Module sfnt_module = FT_Get_Module( library, "sfnt" );
- FT_Service_PsFontName service =
- (FT_Service_PsFontName)ft_module_get_service(
- sfnt_module,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME,
- 0 );
-
-
- if ( service && service->get_ps_font_name )
- return service->get_ps_font_name( FT_FACE( face ) );
- }
-
- return (const char*)cff->font_name;
- }
-
-
- FT_DEFINE_SERVICE_PSFONTNAMEREC(
- cff_service_ps_name,
-
- (FT_PsName_GetFunc)cff_get_ps_name /* get_ps_font_name */
- )
-
-
- /*
- * TT CMAP INFO
- *
- * If the charmap is a synthetic Unicode encoding cmap or
- * a Type 1 standard (or expert) encoding cmap, hide TT CMAP INFO
- * service defined in SFNT module.
- *
- * Otherwise call the service function in the sfnt module.
- *
- */
- static FT_Error
- cff_get_cmap_info( FT_CharMap charmap,
- TT_CMapInfo *cmap_info )
- {
- FT_CMap cmap = FT_CMAP( charmap );
- FT_Error error = FT_Err_Ok;
-
- FT_Face face = FT_CMAP_FACE( cmap );
- FT_Library library = FT_FACE_LIBRARY( face );
-
-
- if ( cmap->clazz != &CFF_CMAP_ENCODING_CLASS_REC_GET &&
- cmap->clazz != &CFF_CMAP_UNICODE_CLASS_REC_GET )
- {
- FT_Module sfnt = FT_Get_Module( library, "sfnt" );
- FT_Service_TTCMaps service =
- (FT_Service_TTCMaps)ft_module_get_service( sfnt,
- FT_SERVICE_ID_TT_CMAP,
- 0 );
-
-
- if ( service && service->get_cmap_info )
- error = service->get_cmap_info( charmap, cmap_info );
- }
- else
- error = FT_THROW( Invalid_CharMap_Format );
-
- return error;
- }
-
-
- FT_DEFINE_SERVICE_TTCMAPSREC(
- cff_service_get_cmap_info,
-
- (TT_CMap_Info_GetFunc)cff_get_cmap_info /* get_cmap_info */
- )
-
-
- /*
- * CID INFO SERVICE
- *
- */
- static FT_Error
- cff_get_ros( CFF_Face face,
- const char* *registry,
- const char* *ordering,
- FT_Int *supplement )
- {
- FT_Error error = FT_Err_Ok;
- CFF_Font cff = (CFF_Font)face->extra.data;
-
-
- if ( cff )
- {
- CFF_FontRecDict dict = &cff->top_font.font_dict;
-
-
- if ( dict->cid_registry == 0xFFFFU )
- {
- error = FT_THROW( Invalid_Argument );
- goto Fail;
- }
-
- if ( registry )
- {
- if ( !cff->registry )
- cff->registry = cff_index_get_sid_string( cff,
- dict->cid_registry );
- *registry = cff->registry;
- }
-
- if ( ordering )
- {
- if ( !cff->ordering )
- cff->ordering = cff_index_get_sid_string( cff,
- dict->cid_ordering );
- *ordering = cff->ordering;
- }
-
- /*
- * XXX: According to Adobe TechNote #5176, the supplement in CFF
- * can be a real number. We truncate it to fit public API
- * since freetype-2.3.6.
- */
- if ( supplement )
- {
- if ( dict->cid_supplement < FT_INT_MIN ||
- dict->cid_supplement > FT_INT_MAX )
- FT_TRACE1(( "cff_get_ros: too large supplement %d is truncated\n",
- dict->cid_supplement ));
- *supplement = (FT_Int)dict->cid_supplement;
- }
- }
-
- Fail:
- return error;
- }
-
-
- static FT_Error
- cff_get_is_cid( CFF_Face face,
- FT_Bool *is_cid )
- {
- FT_Error error = FT_Err_Ok;
- CFF_Font cff = (CFF_Font)face->extra.data;
-
-
- *is_cid = 0;
-
- if ( cff )
- {
- CFF_FontRecDict dict = &cff->top_font.font_dict;
-
-
- if ( dict->cid_registry != 0xFFFFU )
- *is_cid = 1;
- }
-
- return error;
- }
-
-
- static FT_Error
- cff_get_cid_from_glyph_index( CFF_Face face,
- FT_UInt glyph_index,
- FT_UInt *cid )
- {
- FT_Error error = FT_Err_Ok;
- CFF_Font cff;
-
-
- cff = (CFF_Font)face->extra.data;
-
- if ( cff )
- {
- FT_UInt c;
- CFF_FontRecDict dict = &cff->top_font.font_dict;
-
-
- if ( dict->cid_registry == 0xFFFFU )
- {
- error = FT_THROW( Invalid_Argument );
- goto Fail;
- }
-
- if ( glyph_index > cff->num_glyphs )
- {
- error = FT_THROW( Invalid_Argument );
- goto Fail;
- }
-
- c = cff->charset.sids[glyph_index];
-
- if ( cid )
- *cid = c;
- }
-
- Fail:
- return error;
- }
-
-
- FT_DEFINE_SERVICE_CIDREC(
- cff_service_cid_info,
-
- (FT_CID_GetRegistryOrderingSupplementFunc)
- cff_get_ros, /* get_ros */
- (FT_CID_GetIsInternallyCIDKeyedFunc)
- cff_get_is_cid, /* get_is_cid */
- (FT_CID_GetCIDFromGlyphIndexFunc)
- cff_get_cid_from_glyph_index /* get_cid_from_glyph_index */
- )
-
-
- /*
- * PROPERTY SERVICE
- *
- */
- static FT_Error
- cff_property_set( FT_Module module, /* CFF_Driver */
- const char* property_name,
- const void* value,
- FT_Bool value_is_string )
- {
- FT_Error error = FT_Err_Ok;
- CFF_Driver driver = (CFF_Driver)module;
-
-#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- FT_UNUSED( value_is_string );
-#endif
-
-
- if ( !ft_strcmp( property_name, "darkening-parameters" ) )
- {
- FT_Int* darken_params;
- FT_Int x1, y1, x2, y2, x3, y3, x4, y4;
-
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- FT_Int dp[8];
-
-
- if ( value_is_string )
- {
- const char* s = (const char*)value;
- char* ep;
- int i;
-
-
- /* eight comma-separated numbers */
- for ( i = 0; i < 7; i++ )
- {
- dp[i] = (FT_Int)ft_strtol( s, &ep, 10 );
- if ( *ep != ',' || s == ep )
- return FT_THROW( Invalid_Argument );
-
- s = ep + 1;
- }
-
- dp[7] = (FT_Int)ft_strtol( s, &ep, 10 );
- if ( !( *ep == '\0' || *ep == ' ' ) || s == ep )
- return FT_THROW( Invalid_Argument );
-
- darken_params = dp;
- }
- else
-#endif
- darken_params = (FT_Int*)value;
-
- x1 = darken_params[0];
- y1 = darken_params[1];
- x2 = darken_params[2];
- y2 = darken_params[3];
- x3 = darken_params[4];
- y3 = darken_params[5];
- x4 = darken_params[6];
- y4 = darken_params[7];
-
- if ( x1 < 0 || x2 < 0 || x3 < 0 || x4 < 0 ||
- y1 < 0 || y2 < 0 || y3 < 0 || y4 < 0 ||
- x1 > x2 || x2 > x3 || x3 > x4 ||
- y1 > 500 || y2 > 500 || y3 > 500 || y4 > 500 )
- return FT_THROW( Invalid_Argument );
-
- driver->darken_params[0] = x1;
- driver->darken_params[1] = y1;
- driver->darken_params[2] = x2;
- driver->darken_params[3] = y2;
- driver->darken_params[4] = x3;
- driver->darken_params[5] = y3;
- driver->darken_params[6] = x4;
- driver->darken_params[7] = y4;
-
- return error;
- }
- else if ( !ft_strcmp( property_name, "hinting-engine" ) )
- {
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- if ( value_is_string )
- {
- const char* s = (const char*)value;
-
-
- if ( !ft_strcmp( s, "adobe" ) )
- driver->hinting_engine = FT_CFF_HINTING_ADOBE;
-#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
- else if ( !ft_strcmp( s, "freetype" ) )
- driver->hinting_engine = FT_CFF_HINTING_FREETYPE;
-#endif
- else
- return FT_THROW( Invalid_Argument );
- }
- else
-#endif
- {
- FT_UInt* hinting_engine = (FT_UInt*)value;
-
-
- if ( *hinting_engine == FT_CFF_HINTING_ADOBE
-#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
- || *hinting_engine == FT_CFF_HINTING_FREETYPE
-#endif
- )
- driver->hinting_engine = *hinting_engine;
- else
- error = FT_ERR( Unimplemented_Feature );
-
- return error;
- }
- }
- else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
- {
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- if ( value_is_string )
- {
- const char* s = (const char*)value;
- long nsd = ft_strtol( s, NULL, 10 );
-
-
- if ( !nsd )
- driver->no_stem_darkening = FALSE;
- else
- driver->no_stem_darkening = TRUE;
- }
- else
-#endif
- {
- FT_Bool* no_stem_darkening = (FT_Bool*)value;
-
-
- driver->no_stem_darkening = *no_stem_darkening;
- }
-
- return error;
- }
- else if ( !ft_strcmp( property_name, "random-seed" ) )
- {
- FT_Int32 random_seed;
-
-
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- if ( value_is_string )
- {
- const char* s = (const char*)value;
-
-
- random_seed = (FT_Int32)ft_strtol( s, NULL, 10 );
- }
- else
-#endif
- random_seed = *(FT_Int32*)value;
-
- if ( random_seed < 0 )
- random_seed = 0;
-
- driver->random_seed = random_seed;
-
- return error;
- }
-
- FT_TRACE0(( "cff_property_set: missing property `%s'\n",
- property_name ));
- return FT_THROW( Missing_Property );
- }
-
-
- static FT_Error
- cff_property_get( FT_Module module, /* CFF_Driver */
- const char* property_name,
- const void* value )
- {
- FT_Error error = FT_Err_Ok;
- CFF_Driver driver = (CFF_Driver)module;
-
-
- if ( !ft_strcmp( property_name, "darkening-parameters" ) )
- {
- FT_Int* darken_params = driver->darken_params;
- FT_Int* val = (FT_Int*)value;
-
-
- val[0] = darken_params[0];
- val[1] = darken_params[1];
- val[2] = darken_params[2];
- val[3] = darken_params[3];
- val[4] = darken_params[4];
- val[5] = darken_params[5];
- val[6] = darken_params[6];
- val[7] = darken_params[7];
-
- return error;
- }
- else if ( !ft_strcmp( property_name, "hinting-engine" ) )
- {
- FT_UInt hinting_engine = driver->hinting_engine;
- FT_UInt* val = (FT_UInt*)value;
-
-
- *val = hinting_engine;
-
- return error;
- }
- else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
- {
- FT_Bool no_stem_darkening = driver->no_stem_darkening;
- FT_Bool* val = (FT_Bool*)value;
-
-
- *val = no_stem_darkening;
-
- return error;
- }
-
- FT_TRACE0(( "cff_property_get: missing property `%s'\n",
- property_name ));
- return FT_THROW( Missing_Property );
- }
-
-
- FT_DEFINE_SERVICE_PROPERTIESREC(
- cff_service_properties,
-
- (FT_Properties_SetFunc)cff_property_set, /* set_property */
- (FT_Properties_GetFunc)cff_property_get ) /* get_property */
-
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-
- /*
- * MULTIPLE MASTER SERVICE
- *
- */
-
- static FT_Error
- cff_set_mm_blend( CFF_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
-
-
- return mm->set_mm_blend( FT_FACE( face ), num_coords, coords );
- }
-
-
- static FT_Error
- cff_get_mm_blend( CFF_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
-
-
- return mm->get_mm_blend( FT_FACE( face ), num_coords, coords );
- }
-
-
- static FT_Error
- cff_get_mm_var( CFF_Face face,
- FT_MM_Var* *master )
- {
- FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
-
-
- return mm->get_mm_var( FT_FACE( face ), master );
- }
-
-
- static FT_Error
- cff_set_var_design( CFF_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
-
-
- return mm->set_var_design( FT_FACE( face ), num_coords, coords );
- }
-
-
- static FT_Error
- cff_get_var_design( CFF_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
-
-
- return mm->get_var_design( FT_FACE( face ), num_coords, coords );
- }
-
-
- FT_DEFINE_SERVICE_MULTIMASTERSREC(
- cff_service_multi_masters,
-
- (FT_Get_MM_Func) NULL, /* get_mm */
- (FT_Set_MM_Design_Func) NULL, /* set_mm_design */
- (FT_Set_MM_Blend_Func) cff_set_mm_blend, /* set_mm_blend */
- (FT_Get_MM_Blend_Func) cff_get_mm_blend, /* get_mm_blend */
- (FT_Get_MM_Var_Func) cff_get_mm_var, /* get_mm_var */
- (FT_Set_Var_Design_Func)cff_set_var_design, /* set_var_design */
- (FT_Get_Var_Design_Func)cff_get_var_design, /* get_var_design */
-
- (FT_Get_Var_Blend_Func) cff_get_var_blend, /* get_var_blend */
- (FT_Done_Blend_Func) cff_done_blend /* done_blend */
- )
-
-
- /*
- * METRICS VARIATIONS SERVICE
- *
- */
-
- static FT_Error
- cff_hadvance_adjust( CFF_Face face,
- FT_UInt gindex,
- FT_Int *avalue )
- {
- FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)face->var;
-
-
- return var->hadvance_adjust( FT_FACE( face ), gindex, avalue );
- }
-
-
- static void
- cff_metrics_adjust( CFF_Face face )
- {
- FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)face->var;
-
-
- var->metrics_adjust( FT_FACE( face ) );
- }
-
-
- FT_DEFINE_SERVICE_METRICSVARIATIONSREC(
- cff_service_metrics_variations,
-
- (FT_HAdvance_Adjust_Func)cff_hadvance_adjust, /* hadvance_adjust */
- (FT_LSB_Adjust_Func) NULL, /* lsb_adjust */
- (FT_RSB_Adjust_Func) NULL, /* rsb_adjust */
-
- (FT_VAdvance_Adjust_Func)NULL, /* vadvance_adjust */
- (FT_TSB_Adjust_Func) NULL, /* tsb_adjust */
- (FT_BSB_Adjust_Func) NULL, /* bsb_adjust */
- (FT_VOrg_Adjust_Func) NULL, /* vorg_adjust */
-
- (FT_Metrics_Adjust_Func) cff_metrics_adjust /* metrics_adjust */
- )
-#endif
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** D R I V E R I N T E R F A C E ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-#if !defined FT_CONFIG_OPTION_NO_GLYPH_NAMES && \
- defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_DEFINE_SERVICEDESCREC9(
- cff_services,
-
- FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
- FT_SERVICE_ID_MULTI_MASTERS, &CFF_SERVICE_MULTI_MASTERS_GET,
- FT_SERVICE_ID_METRICS_VARIATIONS, &CFF_SERVICE_METRICS_VAR_GET,
- FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_GLYPH_DICT, &CFF_SERVICE_GLYPH_DICT_GET,
- FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
- FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
- FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET
- )
-#elif !defined FT_CONFIG_OPTION_NO_GLYPH_NAMES
- FT_DEFINE_SERVICEDESCREC7(
- cff_services,
-
- FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
- FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_GLYPH_DICT, &CFF_SERVICE_GLYPH_DICT_GET,
- FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
- FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
- FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET
- )
-#elif defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_DEFINE_SERVICEDESCREC8(
- cff_services,
-
- FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
- FT_SERVICE_ID_MULTI_MASTERS, &CFF_SERVICE_MULTI_MASTERS_GET,
- FT_SERVICE_ID_METRICS_VARIATIONS, &CFF_SERVICE_METRICS_VAR_GET,
- FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
- FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
- FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET
- )
-#else
- FT_DEFINE_SERVICEDESCREC6(
- cff_services,
-
- FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
- FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
- FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
- FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET
- )
-#endif
-
-
- FT_CALLBACK_DEF( FT_Module_Interface )
- cff_get_interface( FT_Module driver, /* CFF_Driver */
- const char* module_interface )
- {
- FT_Library library;
- FT_Module sfnt;
- FT_Module_Interface result;
-
-
- /* CFF_SERVICES_GET dereferences `library' in PIC mode */
-#ifdef FT_CONFIG_OPTION_PIC
- if ( !driver )
- return NULL;
- library = driver->library;
- if ( !library )
- return NULL;
-#endif
-
- result = ft_service_list_lookup( CFF_SERVICES_GET, module_interface );
- if ( result )
- return result;
-
- /* `driver' is not yet evaluated in non-PIC mode */
-#ifndef FT_CONFIG_OPTION_PIC
- if ( !driver )
- return NULL;
- library = driver->library;
- if ( !library )
- return NULL;
-#endif
-
- /* we pass our request to the `sfnt' module */
- sfnt = FT_Get_Module( library, "sfnt" );
-
- return sfnt ? sfnt->clazz->get_interface( sfnt, module_interface ) : 0;
- }
-
-
- /* The FT_DriverInterface structure is defined in ftdriver.h. */
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-#define CFF_SIZE_SELECT cff_size_select
-#else
-#define CFF_SIZE_SELECT 0
-#endif
-
- FT_DEFINE_DRIVER(
- cff_driver_class,
-
- FT_MODULE_FONT_DRIVER |
- FT_MODULE_DRIVER_SCALABLE |
- FT_MODULE_DRIVER_HAS_HINTER |
- FT_MODULE_DRIVER_HINTS_LIGHTLY,
-
- sizeof ( CFF_DriverRec ),
- "cff",
- 0x10000L,
- 0x20000L,
-
- NULL, /* module-specific interface */
-
- cff_driver_init, /* FT_Module_Constructor module_init */
- cff_driver_done, /* FT_Module_Destructor module_done */
- cff_get_interface, /* FT_Module_Requester get_interface */
-
- sizeof ( TT_FaceRec ),
- sizeof ( CFF_SizeRec ),
- sizeof ( CFF_GlyphSlotRec ),
-
- cff_face_init, /* FT_Face_InitFunc init_face */
- cff_face_done, /* FT_Face_DoneFunc done_face */
- cff_size_init, /* FT_Size_InitFunc init_size */
- cff_size_done, /* FT_Size_DoneFunc done_size */
- cff_slot_init, /* FT_Slot_InitFunc init_slot */
- cff_slot_done, /* FT_Slot_DoneFunc done_slot */
-
- cff_glyph_load, /* FT_Slot_LoadFunc load_glyph */
-
- cff_get_kerning, /* FT_Face_GetKerningFunc get_kerning */
- NULL, /* FT_Face_AttachFunc attach_file */
- cff_get_advances, /* FT_Face_GetAdvancesFunc get_advances */
-
- cff_size_request, /* FT_Size_RequestFunc request_size */
- CFF_SIZE_SELECT /* FT_Size_SelectFunc select_size */
- )
-
-
-/* END */
diff --git a/src/cff/cffdrivr.h b/src/cff/cffdrivr.h
deleted file mode 100644
index 05381e66d..000000000
--- a/src/cff/cffdrivr.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffdrivr.h */
-/* */
-/* High-level OpenType driver interface (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CFFDRIVER_H_
-#define CFFDRIVER_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_DECLARE_DRIVER( cff_driver_class )
-
-
-FT_END_HEADER
-
-#endif /* CFFDRIVER_H_ */
-
-
-/* END */
diff --git a/src/cff/cfferrs.h b/src/cff/cfferrs.h
deleted file mode 100644
index 40808c105..000000000
--- a/src/cff/cfferrs.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/***************************************************************************/
-/* */
-/* cfferrs.h */
-/* */
-/* CFF error codes (specification only). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the CFF error enumeration constants. */
- /* */
- /*************************************************************************/
-
-#ifndef CFFERRS_H_
-#define CFFERRS_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX CFF_Err_
-#define FT_ERR_BASE FT_Mod_Err_CFF
-
-
-#include FT_ERRORS_H
-
-#endif /* CFFERRS_H_ */
-
-
-/* END */
diff --git a/src/cff/cffgload.c b/src/cff/cffgload.c
deleted file mode 100644
index 20f3a2c28..000000000
--- a/src/cff/cffgload.c
+++ /dev/null
@@ -1,3234 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffgload.c */
-/* */
-/* OpenType Glyph Loader (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H
-#include FT_INTERNAL_CALC_H
-#include FT_OUTLINE_H
-#include FT_CFF_DRIVER_H
-
-#include "cffobjs.h"
-#include "cffload.h"
-#include "cffgload.h"
-#include "cf2ft.h" /* for cf2_decoder_parse_charstrings */
-
-#include "cfferrs.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cffgload
-
-
-#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
-
- typedef enum CFF_Operator_
- {
- cff_op_unknown = 0,
-
- cff_op_rmoveto,
- cff_op_hmoveto,
- cff_op_vmoveto,
-
- cff_op_rlineto,
- cff_op_hlineto,
- cff_op_vlineto,
-
- cff_op_rrcurveto,
- cff_op_hhcurveto,
- cff_op_hvcurveto,
- cff_op_rcurveline,
- cff_op_rlinecurve,
- cff_op_vhcurveto,
- cff_op_vvcurveto,
-
- cff_op_flex,
- cff_op_hflex,
- cff_op_hflex1,
- cff_op_flex1,
-
- cff_op_endchar,
-
- cff_op_hstem,
- cff_op_vstem,
- cff_op_hstemhm,
- cff_op_vstemhm,
-
- cff_op_hintmask,
- cff_op_cntrmask,
- cff_op_dotsection, /* deprecated, acts as no-op */
-
- cff_op_abs,
- cff_op_add,
- cff_op_sub,
- cff_op_div,
- cff_op_neg,
- cff_op_random,
- cff_op_mul,
- cff_op_sqrt,
-
- cff_op_blend,
-
- cff_op_drop,
- cff_op_exch,
- cff_op_index,
- cff_op_roll,
- cff_op_dup,
-
- cff_op_put,
- cff_op_get,
- cff_op_store,
- cff_op_load,
-
- cff_op_and,
- cff_op_or,
- cff_op_not,
- cff_op_eq,
- cff_op_ifelse,
-
- cff_op_callsubr,
- cff_op_callgsubr,
- cff_op_return,
-
- /* Type 1 opcodes: invalid but seen in real life */
- cff_op_hsbw,
- cff_op_closepath,
- cff_op_callothersubr,
- cff_op_pop,
- cff_op_seac,
- cff_op_sbw,
- cff_op_setcurrentpoint,
-
- /* do not remove */
- cff_op_max
-
- } CFF_Operator;
-
-
-#define CFF_COUNT_CHECK_WIDTH 0x80
-#define CFF_COUNT_EXACT 0x40
-#define CFF_COUNT_CLEAR_STACK 0x20
-
- /* count values which have the `CFF_COUNT_CHECK_WIDTH' flag set are */
- /* used for checking the width and requested numbers of arguments */
- /* only; they are set to zero afterwards */
-
- /* the other two flags are informative only and unused currently */
-
- static const FT_Byte cff_argument_counts[] =
- {
- 0, /* unknown */
-
- 2 | CFF_COUNT_CHECK_WIDTH | CFF_COUNT_EXACT, /* rmoveto */
- 1 | CFF_COUNT_CHECK_WIDTH | CFF_COUNT_EXACT,
- 1 | CFF_COUNT_CHECK_WIDTH | CFF_COUNT_EXACT,
-
- 0 | CFF_COUNT_CLEAR_STACK, /* rlineto */
- 0 | CFF_COUNT_CLEAR_STACK,
- 0 | CFF_COUNT_CLEAR_STACK,
-
- 0 | CFF_COUNT_CLEAR_STACK, /* rrcurveto */
- 0 | CFF_COUNT_CLEAR_STACK,
- 0 | CFF_COUNT_CLEAR_STACK,
- 0 | CFF_COUNT_CLEAR_STACK,
- 0 | CFF_COUNT_CLEAR_STACK,
- 0 | CFF_COUNT_CLEAR_STACK,
- 0 | CFF_COUNT_CLEAR_STACK,
-
- 13, /* flex */
- 7,
- 9,
- 11,
-
- 0 | CFF_COUNT_CHECK_WIDTH, /* endchar */
-
- 2 | CFF_COUNT_CHECK_WIDTH, /* hstem */
- 2 | CFF_COUNT_CHECK_WIDTH,
- 2 | CFF_COUNT_CHECK_WIDTH,
- 2 | CFF_COUNT_CHECK_WIDTH,
-
- 0 | CFF_COUNT_CHECK_WIDTH, /* hintmask */
- 0 | CFF_COUNT_CHECK_WIDTH, /* cntrmask */
- 0, /* dotsection */
-
- 1, /* abs */
- 2,
- 2,
- 2,
- 1,
- 0,
- 2,
- 1,
-
- 1, /* blend */
-
- 1, /* drop */
- 2,
- 1,
- 2,
- 1,
-
- 2, /* put */
- 1,
- 4,
- 3,
-
- 2, /* and */
- 2,
- 1,
- 2,
- 4,
-
- 1, /* callsubr */
- 1,
- 0,
-
- 2, /* hsbw */
- 0,
- 0,
- 0,
- 5, /* seac */
- 4, /* sbw */
- 2 /* setcurrentpoint */
- };
-
-#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /********** *********/
- /********** *********/
- /********** GENERIC CHARSTRING PARSING *********/
- /********** *********/
- /********** *********/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cff_builder_init */
- /* */
- /* <Description> */
- /* Initializes a given glyph builder. */
- /* */
- /* <InOut> */
- /* builder :: A pointer to the glyph builder to initialize. */
- /* */
- /* <Input> */
- /* face :: The current face object. */
- /* */
- /* size :: The current size object. */
- /* */
- /* glyph :: The current glyph object. */
- /* */
- /* hinting :: Whether hinting is active. */
- /* */
- static void
- cff_builder_init( CFF_Builder* builder,
- TT_Face face,
- CFF_Size size,
- CFF_GlyphSlot glyph,
- FT_Bool hinting )
- {
- builder->path_begun = 0;
- builder->load_points = 1;
-
- builder->face = face;
- builder->glyph = glyph;
- builder->memory = face->root.memory;
-
- if ( glyph )
- {
- FT_GlyphLoader loader = glyph->root.internal->loader;
-
-
- builder->loader = loader;
- builder->base = &loader->base.outline;
- builder->current = &loader->current.outline;
- FT_GlyphLoader_Rewind( loader );
-
- builder->hints_globals = NULL;
- builder->hints_funcs = NULL;
-
- if ( hinting && size )
- {
- FT_Size ftsize = FT_SIZE( size );
- CFF_Internal internal = (CFF_Internal)ftsize->internal->module_data;
-
-
- if ( internal )
- {
- builder->hints_globals = (void *)internal->topfont;
- builder->hints_funcs = glyph->root.internal->glyph_hints;
- }
- }
- }
-
- builder->pos_x = 0;
- builder->pos_y = 0;
-
- builder->left_bearing.x = 0;
- builder->left_bearing.y = 0;
- builder->advance.x = 0;
- builder->advance.y = 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cff_builder_done */
- /* */
- /* <Description> */
- /* Finalizes a given glyph builder. Its contents can still be used */
- /* after the call, but the function saves important information */
- /* within the corresponding glyph slot. */
- /* */
- /* <Input> */
- /* builder :: A pointer to the glyph builder to finalize. */
- /* */
- static void
- cff_builder_done( CFF_Builder* builder )
- {
- CFF_GlyphSlot glyph = builder->glyph;
-
-
- if ( glyph )
- glyph->root.outline = *builder->base;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cff_compute_bias */
- /* */
- /* <Description> */
- /* Computes the bias value in dependence of the number of glyph */
- /* subroutines. */
- /* */
- /* <Input> */
- /* in_charstring_type :: The `CharstringType' value of the top DICT */
- /* dictionary. */
- /* */
- /* num_subrs :: The number of glyph subroutines. */
- /* */
- /* <Return> */
- /* The bias value. */
- static FT_Int
- cff_compute_bias( FT_Int in_charstring_type,
- FT_UInt num_subrs )
- {
- FT_Int result;
-
-
- if ( in_charstring_type == 1 )
- result = 0;
- else if ( num_subrs < 1240 )
- result = 107;
- else if ( num_subrs < 33900U )
- result = 1131;
- else
- result = 32768U;
-
- return result;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cff_decoder_init */
- /* */
- /* <Description> */
- /* Initializes a given glyph decoder. */
- /* */
- /* <InOut> */
- /* decoder :: A pointer to the glyph builder to initialize. */
- /* */
- /* <Input> */
- /* face :: The current face object. */
- /* */
- /* size :: The current size object. */
- /* */
- /* slot :: The current glyph object. */
- /* */
- /* hinting :: Whether hinting is active. */
- /* */
- /* hint_mode :: The hinting mode. */
- /* */
- FT_LOCAL_DEF( void )
- cff_decoder_init( CFF_Decoder* decoder,
- TT_Face face,
- CFF_Size size,
- CFF_GlyphSlot slot,
- FT_Bool hinting,
- FT_Render_Mode hint_mode )
- {
- CFF_Font cff = (CFF_Font)face->extra.data;
-
-
- /* clear everything */
- FT_ZERO( decoder );
-
- /* initialize builder */
- cff_builder_init( &decoder->builder, face, size, slot, hinting );
-
- /* initialize Type2 decoder */
- decoder->cff = cff;
- decoder->num_globals = cff->global_subrs_index.count;
- decoder->globals = cff->global_subrs;
- decoder->globals_bias = cff_compute_bias(
- cff->top_font.font_dict.charstring_type,
- decoder->num_globals );
-
- decoder->hint_mode = hint_mode;
- }
-
-
- /* this function is used to select the subfont */
- /* and the locals subrs array */
- FT_LOCAL_DEF( FT_Error )
- cff_decoder_prepare( CFF_Decoder* decoder,
- CFF_Size size,
- FT_UInt glyph_index )
- {
- CFF_Builder *builder = &decoder->builder;
- CFF_Font cff = (CFF_Font)builder->face->extra.data;
- CFF_SubFont sub = &cff->top_font;
- FT_Error error = FT_Err_Ok;
-
-
- /* manage CID fonts */
- if ( cff->num_subfonts )
- {
- FT_Byte fd_index = cff_fd_select_get( &cff->fd_select, glyph_index );
-
-
- if ( fd_index >= cff->num_subfonts )
- {
- FT_TRACE4(( "cff_decoder_prepare: invalid CID subfont index\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- FT_TRACE3(( " in subfont %d:\n", fd_index ));
-
- sub = cff->subfonts[fd_index];
-
- if ( builder->hints_funcs && size )
- {
- FT_Size ftsize = FT_SIZE( size );
- CFF_Internal internal = (CFF_Internal)ftsize->internal->module_data;
-
-
- /* for CFFs without subfonts, this value has already been set */
- builder->hints_globals = (void *)internal->subfonts[fd_index];
- }
- }
-
- decoder->num_locals = sub->local_subrs_index.count;
- decoder->locals = sub->local_subrs;
- decoder->locals_bias = cff_compute_bias(
- decoder->cff->top_font.font_dict.charstring_type,
- decoder->num_locals );
-
- decoder->glyph_width = sub->private_dict.default_width;
- decoder->nominal_width = sub->private_dict.nominal_width;
-
- decoder->current_subfont = sub;
-
- Exit:
- return error;
- }
-
-
- /* check that there is enough space for `count' more points */
- FT_LOCAL_DEF( FT_Error )
- cff_check_points( CFF_Builder* builder,
- FT_Int count )
- {
- return FT_GLYPHLOADER_CHECK_POINTS( builder->loader, count, 0 );
- }
-
-
- /* add a new point, do not check space */
- FT_LOCAL_DEF( void )
- cff_builder_add_point( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y,
- FT_Byte flag )
- {
- FT_Outline* outline = builder->current;
-
-
- if ( builder->load_points )
- {
- FT_Vector* point = outline->points + outline->n_points;
- FT_Byte* control = (FT_Byte*)outline->tags + outline->n_points;
-
-#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
- CFF_Driver driver = (CFF_Driver)FT_FACE_DRIVER( builder->face );
-
-
- if ( driver->hinting_engine == FT_CFF_HINTING_FREETYPE )
- {
- point->x = x >> 16;
- point->y = y >> 16;
- }
- else
-#endif
- {
- /* cf2_decoder_parse_charstrings uses 16.16 coordinates */
- point->x = x >> 10;
- point->y = y >> 10;
- }
- *control = (FT_Byte)( flag ? FT_CURVE_TAG_ON : FT_CURVE_TAG_CUBIC );
- }
-
- outline->n_points++;
- }
-
-
- /* check space for a new on-curve point, then add it */
- FT_LOCAL_DEF( FT_Error )
- cff_builder_add_point1( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y )
- {
- FT_Error error;
-
-
- error = cff_check_points( builder, 1 );
- if ( !error )
- cff_builder_add_point( builder, x, y, 1 );
-
- return error;
- }
-
-
- /* check space for a new contour, then add it */
- static FT_Error
- cff_builder_add_contour( CFF_Builder* builder )
- {
- FT_Outline* outline = builder->current;
- FT_Error error;
-
-
- if ( !builder->load_points )
- {
- outline->n_contours++;
- return FT_Err_Ok;
- }
-
- error = FT_GLYPHLOADER_CHECK_POINTS( builder->loader, 0, 1 );
- if ( !error )
- {
- if ( outline->n_contours > 0 )
- outline->contours[outline->n_contours - 1] =
- (short)( outline->n_points - 1 );
-
- outline->n_contours++;
- }
-
- return error;
- }
-
-
- /* if a path was begun, add its first on-curve point */
- FT_LOCAL_DEF( FT_Error )
- cff_builder_start_point( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y )
- {
- FT_Error error = FT_Err_Ok;
-
-
- /* test whether we are building a new contour */
- if ( !builder->path_begun )
- {
- builder->path_begun = 1;
- error = cff_builder_add_contour( builder );
- if ( !error )
- error = cff_builder_add_point1( builder, x, y );
- }
-
- return error;
- }
-
-
- /* close the current contour */
- FT_LOCAL_DEF( void )
- cff_builder_close_contour( CFF_Builder* builder )
- {
- FT_Outline* outline = builder->current;
- FT_Int first;
-
-
- if ( !outline )
- return;
-
- first = outline->n_contours <= 1
- ? 0 : outline->contours[outline->n_contours - 2] + 1;
-
- /* We must not include the last point in the path if it */
- /* is located on the first point. */
- if ( outline->n_points > 1 )
- {
- FT_Vector* p1 = outline->points + first;
- FT_Vector* p2 = outline->points + outline->n_points - 1;
- FT_Byte* control = (FT_Byte*)outline->tags + outline->n_points - 1;
-
-
- /* `delete' last point only if it coincides with the first */
- /* point and if it is not a control point (which can happen). */
- if ( p1->x == p2->x && p1->y == p2->y )
- if ( *control == FT_CURVE_TAG_ON )
- outline->n_points--;
- }
-
- if ( outline->n_contours > 0 )
- {
- /* Don't add contours only consisting of one point, i.e., */
- /* check whether begin point and last point are the same. */
- if ( first == outline->n_points - 1 )
- {
- outline->n_contours--;
- outline->n_points--;
- }
- else
- outline->contours[outline->n_contours - 1] =
- (short)( outline->n_points - 1 );
- }
- }
-
-
- FT_LOCAL_DEF( FT_Int )
- cff_lookup_glyph_by_stdcharcode( CFF_Font cff,
- FT_Int charcode )
- {
- FT_UInt n;
- FT_UShort glyph_sid;
-
-
- /* CID-keyed fonts don't have glyph names */
- if ( !cff->charset.sids )
- return -1;
-
- /* check range of standard char code */
- if ( charcode < 0 || charcode > 255 )
- return -1;
-
- /* Get code to SID mapping from `cff_standard_encoding'. */
- glyph_sid = cff_get_standard_encoding( (FT_UInt)charcode );
-
- for ( n = 0; n < cff->num_glyphs; n++ )
- {
- if ( cff->charset.sids[n] == glyph_sid )
- return (FT_Int)n;
- }
-
- return -1;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- cff_get_glyph_data( TT_Face face,
- FT_UInt glyph_index,
- FT_Byte** pointer,
- FT_ULong* length )
- {
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- /* For incremental fonts get the character data using the */
- /* callback function. */
- if ( face->root.internal->incremental_interface )
- {
- FT_Data data;
- FT_Error error =
- face->root.internal->incremental_interface->funcs->get_glyph_data(
- face->root.internal->incremental_interface->object,
- glyph_index, &data );
-
-
- *pointer = (FT_Byte*)data.pointer;
- *length = (FT_ULong)data.length;
-
- return error;
- }
- else
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
-
- {
- CFF_Font cff = (CFF_Font)(face->extra.data);
-
-
- return cff_index_access_element( &cff->charstrings_index, glyph_index,
- pointer, length );
- }
- }
-
-
- FT_LOCAL_DEF( void )
- cff_free_glyph_data( TT_Face face,
- FT_Byte** pointer,
- FT_ULong length )
- {
-#ifndef FT_CONFIG_OPTION_INCREMENTAL
- FT_UNUSED( length );
-#endif
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- /* For incremental fonts get the character data using the */
- /* callback function. */
- if ( face->root.internal->incremental_interface )
- {
- FT_Data data;
-
-
- data.pointer = *pointer;
- data.length = (FT_Int)length;
-
- face->root.internal->incremental_interface->funcs->free_glyph_data(
- face->root.internal->incremental_interface->object, &data );
- }
- else
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
-
- {
- CFF_Font cff = (CFF_Font)(face->extra.data);
-
-
- cff_index_forget_element( &cff->charstrings_index, pointer );
- }
- }
-
-
-#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
-
- static FT_Error
- cff_operator_seac( CFF_Decoder* decoder,
- FT_Pos asb,
- FT_Pos adx,
- FT_Pos ady,
- FT_Int bchar,
- FT_Int achar )
- {
- FT_Error error;
- CFF_Builder* builder = &decoder->builder;
- FT_Int bchar_index, achar_index;
- TT_Face face = decoder->builder.face;
- FT_Vector left_bearing, advance;
- FT_Byte* charstring;
- FT_ULong charstring_len;
- FT_Pos glyph_width;
-
-
- if ( decoder->seac )
- {
- FT_ERROR(( "cff_operator_seac: invalid nested seac\n" ));
- return FT_THROW( Syntax_Error );
- }
-
- adx += decoder->builder.left_bearing.x;
- ady += decoder->builder.left_bearing.y;
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- /* Incremental fonts don't necessarily have valid charsets. */
- /* They use the character code, not the glyph index, in this case. */
- if ( face->root.internal->incremental_interface )
- {
- bchar_index = bchar;
- achar_index = achar;
- }
- else
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
- {
- CFF_Font cff = (CFF_Font)(face->extra.data);
-
-
- bchar_index = cff_lookup_glyph_by_stdcharcode( cff, bchar );
- achar_index = cff_lookup_glyph_by_stdcharcode( cff, achar );
- }
-
- if ( bchar_index < 0 || achar_index < 0 )
- {
- FT_ERROR(( "cff_operator_seac:"
- " invalid seac character code arguments\n" ));
- return FT_THROW( Syntax_Error );
- }
-
- /* If we are trying to load a composite glyph, do not load the */
- /* accent character and return the array of subglyphs. */
- if ( builder->no_recurse )
- {
- FT_GlyphSlot glyph = (FT_GlyphSlot)builder->glyph;
- FT_GlyphLoader loader = glyph->internal->loader;
- FT_SubGlyph subg;
-
-
- /* reallocate subglyph array if necessary */
- error = FT_GlyphLoader_CheckSubGlyphs( loader, 2 );
- if ( error )
- goto Exit;
-
- subg = loader->current.subglyphs;
-
- /* subglyph 0 = base character */
- subg->index = bchar_index;
- subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES |
- FT_SUBGLYPH_FLAG_USE_MY_METRICS;
- subg->arg1 = 0;
- subg->arg2 = 0;
- subg++;
-
- /* subglyph 1 = accent character */
- subg->index = achar_index;
- subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES;
- subg->arg1 = (FT_Int)( adx >> 16 );
- subg->arg2 = (FT_Int)( ady >> 16 );
-
- /* set up remaining glyph fields */
- glyph->num_subglyphs = 2;
- glyph->subglyphs = loader->base.subglyphs;
- glyph->format = FT_GLYPH_FORMAT_COMPOSITE;
-
- loader->current.num_subglyphs = 2;
- }
-
- FT_GlyphLoader_Prepare( builder->loader );
-
- /* First load `bchar' in builder */
- error = cff_get_glyph_data( face, (FT_UInt)bchar_index,
- &charstring, &charstring_len );
- if ( !error )
- {
- /* the seac operator must not be nested */
- decoder->seac = TRUE;
- error = cff_decoder_parse_charstrings( decoder, charstring,
- charstring_len, 0 );
- decoder->seac = FALSE;
-
- cff_free_glyph_data( face, &charstring, charstring_len );
-
- if ( error )
- goto Exit;
- }
-
- /* Save the left bearing, advance and glyph width of the base */
- /* character as they will be erased by the next load. */
-
- left_bearing = builder->left_bearing;
- advance = builder->advance;
- glyph_width = decoder->glyph_width;
-
- builder->left_bearing.x = 0;
- builder->left_bearing.y = 0;
-
- builder->pos_x = adx - asb;
- builder->pos_y = ady;
-
- /* Now load `achar' on top of the base outline. */
- error = cff_get_glyph_data( face, (FT_UInt)achar_index,
- &charstring, &charstring_len );
- if ( !error )
- {
- /* the seac operator must not be nested */
- decoder->seac = TRUE;
- error = cff_decoder_parse_charstrings( decoder, charstring,
- charstring_len, 0 );
- decoder->seac = FALSE;
-
- cff_free_glyph_data( face, &charstring, charstring_len );
-
- if ( error )
- goto Exit;
- }
-
- /* Restore the left side bearing, advance and glyph width */
- /* of the base character. */
- builder->left_bearing = left_bearing;
- builder->advance = advance;
- decoder->glyph_width = glyph_width;
-
- builder->pos_x = 0;
- builder->pos_y = 0;
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cff_decoder_parse_charstrings */
- /* */
- /* <Description> */
- /* Parses a given Type 2 charstrings program. */
- /* */
- /* <InOut> */
- /* decoder :: The current Type 1 decoder. */
- /* */
- /* <Input> */
- /* charstring_base :: The base of the charstring stream. */
- /* */
- /* charstring_len :: The length in bytes of the charstring stream. */
- /* */
- /* in_dict :: Set to 1 if function is called from top or */
- /* private DICT (needed for Multiple Master CFFs). */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- cff_decoder_parse_charstrings( CFF_Decoder* decoder,
- FT_Byte* charstring_base,
- FT_ULong charstring_len,
- FT_Bool in_dict )
- {
- FT_Error error;
- CFF_Decoder_Zone* zone;
- FT_Byte* ip;
- FT_Byte* limit;
- CFF_Builder* builder = &decoder->builder;
- FT_Pos x, y;
- FT_Fixed* stack;
- FT_Int charstring_type =
- decoder->cff->top_font.font_dict.charstring_type;
- FT_UShort num_designs =
- decoder->cff->top_font.font_dict.num_designs;
- FT_UShort num_axes =
- decoder->cff->top_font.font_dict.num_axes;
-
- T2_Hints_Funcs hinter;
-
-
- /* set default width */
- decoder->num_hints = 0;
- decoder->read_width = 1;
-
- /* initialize the decoder */
- decoder->top = decoder->stack;
- decoder->zone = decoder->zones;
- zone = decoder->zones;
- stack = decoder->top;
-
- hinter = (T2_Hints_Funcs)builder->hints_funcs;
-
- builder->path_begun = 0;
-
- zone->base = charstring_base;
- limit = zone->limit = charstring_base + charstring_len;
- ip = zone->cursor = zone->base;
-
- error = FT_Err_Ok;
-
- x = builder->pos_x;
- y = builder->pos_y;
-
- /* begin hints recording session, if any */
- if ( hinter )
- hinter->open( hinter->hints );
-
- /* now execute loop */
- while ( ip < limit )
- {
- CFF_Operator op;
- FT_Byte v;
-
-
- /********************************************************************/
- /* */
- /* Decode operator or operand */
- /* */
- v = *ip++;
- if ( v >= 32 || v == 28 )
- {
- FT_Int shift = 16;
- FT_Int32 val;
-
-
- /* this is an operand, push it on the stack */
-
- /* if we use shifts, all computations are done with unsigned */
- /* values; the conversion to a signed value is the last step */
- if ( v == 28 )
- {
- if ( ip + 1 >= limit )
- goto Syntax_Error;
- val = (FT_Short)( ( (FT_UShort)ip[0] << 8 ) | ip[1] );
- ip += 2;
- }
- else if ( v < 247 )
- val = (FT_Int32)v - 139;
- else if ( v < 251 )
- {
- if ( ip >= limit )
- goto Syntax_Error;
- val = ( (FT_Int32)v - 247 ) * 256 + *ip++ + 108;
- }
- else if ( v < 255 )
- {
- if ( ip >= limit )
- goto Syntax_Error;
- val = -( (FT_Int32)v - 251 ) * 256 - *ip++ - 108;
- }
- else
- {
- if ( ip + 3 >= limit )
- goto Syntax_Error;
- val = (FT_Int32)( ( (FT_UInt32)ip[0] << 24 ) |
- ( (FT_UInt32)ip[1] << 16 ) |
- ( (FT_UInt32)ip[2] << 8 ) |
- (FT_UInt32)ip[3] );
- ip += 4;
- if ( charstring_type == 2 )
- shift = 0;
- }
- if ( decoder->top - stack >= CFF_MAX_OPERANDS )
- goto Stack_Overflow;
-
- val = (FT_Int32)( (FT_UInt32)val << shift );
- *decoder->top++ = val;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !( val & 0xFFFFL ) )
- FT_TRACE4(( " %hd", (FT_Short)( (FT_UInt32)val >> 16 ) ));
- else
- FT_TRACE4(( " %.5f", val / 65536.0 ));
-#endif
-
- }
- else
- {
- /* The specification says that normally arguments are to be taken */
- /* from the bottom of the stack. However, this seems not to be */
- /* correct, at least for Acroread 7.0.8 on GNU/Linux: It pops the */
- /* arguments similar to a PS interpreter. */
-
- FT_Fixed* args = decoder->top;
- FT_Int num_args = (FT_Int)( args - decoder->stack );
- FT_Int req_args;
-
-
- /* find operator */
- op = cff_op_unknown;
-
- switch ( v )
- {
- case 1:
- op = cff_op_hstem;
- break;
- case 3:
- op = cff_op_vstem;
- break;
- case 4:
- op = cff_op_vmoveto;
- break;
- case 5:
- op = cff_op_rlineto;
- break;
- case 6:
- op = cff_op_hlineto;
- break;
- case 7:
- op = cff_op_vlineto;
- break;
- case 8:
- op = cff_op_rrcurveto;
- break;
- case 9:
- op = cff_op_closepath;
- break;
- case 10:
- op = cff_op_callsubr;
- break;
- case 11:
- op = cff_op_return;
- break;
- case 12:
- {
- if ( ip >= limit )
- goto Syntax_Error;
- v = *ip++;
-
- switch ( v )
- {
- case 0:
- op = cff_op_dotsection;
- break;
- case 1: /* this is actually the Type1 vstem3 operator */
- op = cff_op_vstem;
- break;
- case 2: /* this is actually the Type1 hstem3 operator */
- op = cff_op_hstem;
- break;
- case 3:
- op = cff_op_and;
- break;
- case 4:
- op = cff_op_or;
- break;
- case 5:
- op = cff_op_not;
- break;
- case 6:
- op = cff_op_seac;
- break;
- case 7:
- op = cff_op_sbw;
- break;
- case 8:
- op = cff_op_store;
- break;
- case 9:
- op = cff_op_abs;
- break;
- case 10:
- op = cff_op_add;
- break;
- case 11:
- op = cff_op_sub;
- break;
- case 12:
- op = cff_op_div;
- break;
- case 13:
- op = cff_op_load;
- break;
- case 14:
- op = cff_op_neg;
- break;
- case 15:
- op = cff_op_eq;
- break;
- case 16:
- op = cff_op_callothersubr;
- break;
- case 17:
- op = cff_op_pop;
- break;
- case 18:
- op = cff_op_drop;
- break;
- case 20:
- op = cff_op_put;
- break;
- case 21:
- op = cff_op_get;
- break;
- case 22:
- op = cff_op_ifelse;
- break;
- case 23:
- op = cff_op_random;
- break;
- case 24:
- op = cff_op_mul;
- break;
- case 26:
- op = cff_op_sqrt;
- break;
- case 27:
- op = cff_op_dup;
- break;
- case 28:
- op = cff_op_exch;
- break;
- case 29:
- op = cff_op_index;
- break;
- case 30:
- op = cff_op_roll;
- break;
- case 33:
- op = cff_op_setcurrentpoint;
- break;
- case 34:
- op = cff_op_hflex;
- break;
- case 35:
- op = cff_op_flex;
- break;
- case 36:
- op = cff_op_hflex1;
- break;
- case 37:
- op = cff_op_flex1;
- break;
- default:
- FT_TRACE4(( " unknown op (12, %d)\n", v ));
- break;
- }
- }
- break;
- case 13:
- op = cff_op_hsbw;
- break;
- case 14:
- op = cff_op_endchar;
- break;
- case 16:
- op = cff_op_blend;
- break;
- case 18:
- op = cff_op_hstemhm;
- break;
- case 19:
- op = cff_op_hintmask;
- break;
- case 20:
- op = cff_op_cntrmask;
- break;
- case 21:
- op = cff_op_rmoveto;
- break;
- case 22:
- op = cff_op_hmoveto;
- break;
- case 23:
- op = cff_op_vstemhm;
- break;
- case 24:
- op = cff_op_rcurveline;
- break;
- case 25:
- op = cff_op_rlinecurve;
- break;
- case 26:
- op = cff_op_vvcurveto;
- break;
- case 27:
- op = cff_op_hhcurveto;
- break;
- case 29:
- op = cff_op_callgsubr;
- break;
- case 30:
- op = cff_op_vhcurveto;
- break;
- case 31:
- op = cff_op_hvcurveto;
- break;
- default:
- FT_TRACE4(( " unknown op (%d)\n", v ));
- break;
- }
-
- if ( op == cff_op_unknown )
- continue;
-
- /* in Multiple Master CFFs, T2 charstrings can appear in */
- /* dictionaries, but some operators are prohibited */
- if ( in_dict )
- {
- switch ( op )
- {
- case cff_op_hstem:
- case cff_op_vstem:
- case cff_op_vmoveto:
- case cff_op_rlineto:
- case cff_op_hlineto:
- case cff_op_vlineto:
- case cff_op_rrcurveto:
- case cff_op_hstemhm:
- case cff_op_hintmask:
- case cff_op_cntrmask:
- case cff_op_rmoveto:
- case cff_op_hmoveto:
- case cff_op_vstemhm:
- case cff_op_rcurveline:
- case cff_op_rlinecurve:
- case cff_op_vvcurveto:
- case cff_op_hhcurveto:
- case cff_op_vhcurveto:
- case cff_op_hvcurveto:
- case cff_op_hflex:
- case cff_op_flex:
- case cff_op_hflex1:
- case cff_op_flex1:
- case cff_op_callsubr:
- case cff_op_callgsubr:
- goto MM_Error;
-
- default:
- break;
- }
- }
-
- /* check arguments */
- req_args = cff_argument_counts[op];
- if ( req_args & CFF_COUNT_CHECK_WIDTH )
- {
- if ( num_args > 0 && decoder->read_width )
- {
- /* If `nominal_width' is non-zero, the number is really a */
- /* difference against `nominal_width'. Else, the number here */
- /* is truly a width, not a difference against `nominal_width'. */
- /* If the font does not set `nominal_width', then */
- /* `nominal_width' defaults to zero, and so we can set */
- /* `glyph_width' to `nominal_width' plus number on the stack */
- /* -- for either case. */
-
- FT_Int set_width_ok;
-
-
- switch ( op )
- {
- case cff_op_hmoveto:
- case cff_op_vmoveto:
- set_width_ok = num_args & 2;
- break;
-
- case cff_op_hstem:
- case cff_op_vstem:
- case cff_op_hstemhm:
- case cff_op_vstemhm:
- case cff_op_rmoveto:
- case cff_op_hintmask:
- case cff_op_cntrmask:
- set_width_ok = num_args & 1;
- break;
-
- case cff_op_endchar:
- /* If there is a width specified for endchar, we either have */
- /* 1 argument or 5 arguments. We like to argue. */
- set_width_ok = in_dict
- ? 0
- : ( ( num_args == 5 ) || ( num_args == 1 ) );
- break;
-
- default:
- set_width_ok = 0;
- break;
- }
-
- if ( set_width_ok )
- {
- decoder->glyph_width = decoder->nominal_width +
- ( stack[0] >> 16 );
-
- if ( decoder->width_only )
- {
- /* we only want the advance width; stop here */
- break;
- }
-
- /* Consumed an argument. */
- num_args--;
- }
- }
-
- decoder->read_width = 0;
- req_args = 0;
- }
-
- req_args &= 0x000F;
- if ( num_args < req_args )
- goto Stack_Underflow;
- args -= req_args;
- num_args -= req_args;
-
- /* At this point, `args' points to the first argument of the */
- /* operand in case `req_args' isn't zero. Otherwise, we have */
- /* to adjust `args' manually. */
-
- /* Note that we only pop arguments from the stack which we */
- /* really need and can digest so that we can continue in case */
- /* of superfluous stack elements. */
-
- switch ( op )
- {
- case cff_op_hstem:
- case cff_op_vstem:
- case cff_op_hstemhm:
- case cff_op_vstemhm:
- /* the number of arguments is always even here */
- FT_TRACE4((
- op == cff_op_hstem ? " hstem\n" :
- ( op == cff_op_vstem ? " vstem\n" :
- ( op == cff_op_hstemhm ? " hstemhm\n" : " vstemhm\n" ) ) ));
-
- if ( hinter )
- hinter->stems( hinter->hints,
- ( op == cff_op_hstem || op == cff_op_hstemhm ),
- num_args / 2,
- args - ( num_args & ~1 ) );
-
- decoder->num_hints += num_args / 2;
- args = stack;
- break;
-
- case cff_op_hintmask:
- case cff_op_cntrmask:
- FT_TRACE4(( op == cff_op_hintmask ? " hintmask" : " cntrmask" ));
-
- /* implement vstem when needed -- */
- /* the specification doesn't say it, but this also works */
- /* with the 'cntrmask' operator */
- /* */
- if ( num_args > 0 )
- {
- if ( hinter )
- hinter->stems( hinter->hints,
- 0,
- num_args / 2,
- args - ( num_args & ~1 ) );
-
- decoder->num_hints += num_args / 2;
- }
-
- /* In a valid charstring there must be at least one byte */
- /* after `hintmask' or `cntrmask' (e.g., for a `return' */
- /* instruction). Additionally, there must be space for */
- /* `num_hints' bits. */
-
- if ( ( ip + ( ( decoder->num_hints + 7 ) >> 3 ) ) >= limit )
- goto Syntax_Error;
-
- if ( hinter )
- {
- if ( op == cff_op_hintmask )
- hinter->hintmask( hinter->hints,
- (FT_UInt)builder->current->n_points,
- (FT_UInt)decoder->num_hints,
- ip );
- else
- hinter->counter( hinter->hints,
- (FT_UInt)decoder->num_hints,
- ip );
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- {
- FT_UInt maskbyte;
-
-
- FT_TRACE4(( " (maskbytes:" ));
-
- for ( maskbyte = 0;
- maskbyte < (FT_UInt)( ( decoder->num_hints + 7 ) >> 3 );
- maskbyte++, ip++ )
- FT_TRACE4(( " 0x%02X", *ip ));
-
- FT_TRACE4(( ")\n" ));
- }
-#else
- ip += ( decoder->num_hints + 7 ) >> 3;
-#endif
- args = stack;
- break;
-
- case cff_op_rmoveto:
- FT_TRACE4(( " rmoveto\n" ));
-
- cff_builder_close_contour( builder );
- builder->path_begun = 0;
- x = ADD_LONG( x, args[-2] );
- y = ADD_LONG( y, args[-1] );
- args = stack;
- break;
-
- case cff_op_vmoveto:
- FT_TRACE4(( " vmoveto\n" ));
-
- cff_builder_close_contour( builder );
- builder->path_begun = 0;
- y = ADD_LONG( y, args[-1] );
- args = stack;
- break;
-
- case cff_op_hmoveto:
- FT_TRACE4(( " hmoveto\n" ));
-
- cff_builder_close_contour( builder );
- builder->path_begun = 0;
- x = ADD_LONG( x, args[-1] );
- args = stack;
- break;
-
- case cff_op_rlineto:
- FT_TRACE4(( " rlineto\n" ));
-
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, num_args / 2 ) )
- goto Fail;
-
- if ( num_args < 2 )
- goto Stack_Underflow;
-
- args -= num_args & ~1;
- while ( args < decoder->top )
- {
- x = ADD_LONG( x, args[0] );
- y = ADD_LONG( y, args[1] );
- cff_builder_add_point( builder, x, y, 1 );
- args += 2;
- }
- args = stack;
- break;
-
- case cff_op_hlineto:
- case cff_op_vlineto:
- {
- FT_Int phase = ( op == cff_op_hlineto );
-
-
- FT_TRACE4(( op == cff_op_hlineto ? " hlineto\n"
- : " vlineto\n" ));
-
- if ( num_args < 0 )
- goto Stack_Underflow;
-
- /* there exist subsetted fonts (found in PDFs) */
- /* which call `hlineto' without arguments */
- if ( num_args == 0 )
- break;
-
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, num_args ) )
- goto Fail;
-
- args = stack;
- while ( args < decoder->top )
- {
- if ( phase )
- x = ADD_LONG( x, args[0] );
- else
- y = ADD_LONG( y, args[0] );
-
- if ( cff_builder_add_point1( builder, x, y ) )
- goto Fail;
-
- args++;
- phase ^= 1;
- }
- args = stack;
- }
- break;
-
- case cff_op_rrcurveto:
- {
- FT_Int nargs;
-
-
- FT_TRACE4(( " rrcurveto\n" ));
-
- if ( num_args < 6 )
- goto Stack_Underflow;
-
- nargs = num_args - num_args % 6;
-
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, nargs / 2 ) )
- goto Fail;
-
- args -= nargs;
- while ( args < decoder->top )
- {
- x = ADD_LONG( x, args[0] );
- y = ADD_LONG( y, args[1] );
- cff_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, args[2] );
- y = ADD_LONG( y, args[3] );
- cff_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, args[4] );
- y = ADD_LONG( y, args[5] );
- cff_builder_add_point( builder, x, y, 1 );
-
- args += 6;
- }
- args = stack;
- }
- break;
-
- case cff_op_vvcurveto:
- {
- FT_Int nargs;
-
-
- FT_TRACE4(( " vvcurveto\n" ));
-
- if ( num_args < 4 )
- goto Stack_Underflow;
-
- /* if num_args isn't of the form 4n or 4n+1, */
- /* we enforce it by clearing the second bit */
-
- nargs = num_args & ~2;
-
- if ( cff_builder_start_point( builder, x, y ) )
- goto Fail;
-
- args -= nargs;
-
- if ( nargs & 1 )
- {
- x = ADD_LONG( x, args[0] );
- args++;
- nargs--;
- }
-
- if ( cff_check_points( builder, 3 * ( nargs / 4 ) ) )
- goto Fail;
-
- while ( args < decoder->top )
- {
- y = ADD_LONG( y, args[0] );
- cff_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, args[1] );
- y = ADD_LONG( y, args[2] );
- cff_builder_add_point( builder, x, y, 0 );
-
- y = ADD_LONG( y, args[3] );
- cff_builder_add_point( builder, x, y, 1 );
-
- args += 4;
- }
- args = stack;
- }
- break;
-
- case cff_op_hhcurveto:
- {
- FT_Int nargs;
-
-
- FT_TRACE4(( " hhcurveto\n" ));
-
- if ( num_args < 4 )
- goto Stack_Underflow;
-
- /* if num_args isn't of the form 4n or 4n+1, */
- /* we enforce it by clearing the second bit */
-
- nargs = num_args & ~2;
-
- if ( cff_builder_start_point( builder, x, y ) )
- goto Fail;
-
- args -= nargs;
- if ( nargs & 1 )
- {
- y = ADD_LONG( y, args[0] );
- args++;
- nargs--;
- }
-
- if ( cff_check_points( builder, 3 * ( nargs / 4 ) ) )
- goto Fail;
-
- while ( args < decoder->top )
- {
- x = ADD_LONG( x, args[0] );
- cff_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, args[1] );
- y = ADD_LONG( y, args[2] );
- cff_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, args[3] );
- cff_builder_add_point( builder, x, y, 1 );
-
- args += 4;
- }
- args = stack;
- }
- break;
-
- case cff_op_vhcurveto:
- case cff_op_hvcurveto:
- {
- FT_Int phase;
- FT_Int nargs;
-
-
- FT_TRACE4(( op == cff_op_vhcurveto ? " vhcurveto\n"
- : " hvcurveto\n" ));
-
- if ( cff_builder_start_point( builder, x, y ) )
- goto Fail;
-
- if ( num_args < 4 )
- goto Stack_Underflow;
-
- /* if num_args isn't of the form 8n, 8n+1, 8n+4, or 8n+5, */
- /* we enforce it by clearing the second bit */
-
- nargs = num_args & ~2;
-
- args -= nargs;
- if ( cff_check_points( builder, ( nargs / 4 ) * 3 ) )
- goto Stack_Underflow;
-
- phase = ( op == cff_op_hvcurveto );
-
- while ( nargs >= 4 )
- {
- nargs -= 4;
- if ( phase )
- {
- x = ADD_LONG( x, args[0] );
- cff_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, args[1] );
- y = ADD_LONG( y, args[2] );
- cff_builder_add_point( builder, x, y, 0 );
-
- y = ADD_LONG( y, args[3] );
- if ( nargs == 1 )
- x = ADD_LONG( x, args[4] );
- cff_builder_add_point( builder, x, y, 1 );
- }
- else
- {
- y = ADD_LONG( y, args[0] );
- cff_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, args[1] );
- y = ADD_LONG( y, args[2] );
- cff_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, args[3] );
- if ( nargs == 1 )
- y = ADD_LONG( y, args[4] );
- cff_builder_add_point( builder, x, y, 1 );
- }
- args += 4;
- phase ^= 1;
- }
- args = stack;
- }
- break;
-
- case cff_op_rlinecurve:
- {
- FT_Int num_lines;
- FT_Int nargs;
-
-
- FT_TRACE4(( " rlinecurve\n" ));
-
- if ( num_args < 8 )
- goto Stack_Underflow;
-
- nargs = num_args & ~1;
- num_lines = ( nargs - 6 ) / 2;
-
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, num_lines + 3 ) )
- goto Fail;
-
- args -= nargs;
-
- /* first, add the line segments */
- while ( num_lines > 0 )
- {
- x = ADD_LONG( x, args[0] );
- y = ADD_LONG( y, args[1] );
- cff_builder_add_point( builder, x, y, 1 );
-
- args += 2;
- num_lines--;
- }
-
- /* then the curve */
- x = ADD_LONG( x, args[0] );
- y = ADD_LONG( y, args[1] );
- cff_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, args[2] );
- y = ADD_LONG( y, args[3] );
- cff_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, args[4] );
- y = ADD_LONG( y, args[5] );
- cff_builder_add_point( builder, x, y, 1 );
-
- args = stack;
- }
- break;
-
- case cff_op_rcurveline:
- {
- FT_Int num_curves;
- FT_Int nargs;
-
-
- FT_TRACE4(( " rcurveline\n" ));
-
- if ( num_args < 8 )
- goto Stack_Underflow;
-
- nargs = num_args - 2;
- nargs = nargs - nargs % 6 + 2;
- num_curves = ( nargs - 2 ) / 6;
-
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, num_curves * 3 + 2 ) )
- goto Fail;
-
- args -= nargs;
-
- /* first, add the curves */
- while ( num_curves > 0 )
- {
- x = ADD_LONG( x, args[0] );
- y = ADD_LONG( y, args[1] );
- cff_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, args[2] );
- y = ADD_LONG( y, args[3] );
- cff_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, args[4] );
- y = ADD_LONG( y, args[5] );
- cff_builder_add_point( builder, x, y, 1 );
-
- args += 6;
- num_curves--;
- }
-
- /* then the final line */
- x = ADD_LONG( x, args[0] );
- y = ADD_LONG( y, args[1] );
- cff_builder_add_point( builder, x, y, 1 );
-
- args = stack;
- }
- break;
-
- case cff_op_hflex1:
- {
- FT_Pos start_y;
-
-
- FT_TRACE4(( " hflex1\n" ));
-
- /* adding five more points: 4 control points, 1 on-curve point */
- /* -- make sure we have enough space for the start point if it */
- /* needs to be added */
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, 6 ) )
- goto Fail;
-
- /* record the starting point's y position for later use */
- start_y = y;
-
- /* first control point */
- x = ADD_LONG( x, args[0] );
- y = ADD_LONG( y, args[1] );
- cff_builder_add_point( builder, x, y, 0 );
-
- /* second control point */
- x = ADD_LONG( x, args[2] );
- y = ADD_LONG( y, args[3] );
- cff_builder_add_point( builder, x, y, 0 );
-
- /* join point; on curve, with y-value the same as the last */
- /* control point's y-value */
- x = ADD_LONG( x, args[4] );
- cff_builder_add_point( builder, x, y, 1 );
-
- /* third control point, with y-value the same as the join */
- /* point's y-value */
- x = ADD_LONG( x, args[5] );
- cff_builder_add_point( builder, x, y, 0 );
-
- /* fourth control point */
- x = ADD_LONG( x, args[6] );
- y = ADD_LONG( y, args[7] );
- cff_builder_add_point( builder, x, y, 0 );
-
- /* ending point, with y-value the same as the start */
- x = ADD_LONG( x, args[8] );
- y = start_y;
- cff_builder_add_point( builder, x, y, 1 );
-
- args = stack;
- break;
- }
-
- case cff_op_hflex:
- {
- FT_Pos start_y;
-
-
- FT_TRACE4(( " hflex\n" ));
-
- /* adding six more points; 4 control points, 2 on-curve points */
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, 6 ) )
- goto Fail;
-
- /* record the starting point's y-position for later use */
- start_y = y;
-
- /* first control point */
- x = ADD_LONG( x, args[0] );
- cff_builder_add_point( builder, x, y, 0 );
-
- /* second control point */
- x = ADD_LONG( x, args[1] );
- y = ADD_LONG( y, args[2] );
- cff_builder_add_point( builder, x, y, 0 );
-
- /* join point; on curve, with y-value the same as the last */
- /* control point's y-value */
- x = ADD_LONG( x, args[3] );
- cff_builder_add_point( builder, x, y, 1 );
-
- /* third control point, with y-value the same as the join */
- /* point's y-value */
- x = ADD_LONG( x, args[4] );
- cff_builder_add_point( builder, x, y, 0 );
-
- /* fourth control point */
- x = ADD_LONG( x, args[5] );
- y = start_y;
- cff_builder_add_point( builder, x, y, 0 );
-
- /* ending point, with y-value the same as the start point's */
- /* y-value -- we don't add this point, though */
- x = ADD_LONG( x, args[6] );
- cff_builder_add_point( builder, x, y, 1 );
-
- args = stack;
- break;
- }
-
- case cff_op_flex1:
- {
- FT_Pos start_x, start_y; /* record start x, y values for */
- /* alter use */
- FT_Fixed dx = 0, dy = 0; /* used in horizontal/vertical */
- /* algorithm below */
- FT_Int horizontal, count;
- FT_Fixed* temp;
-
-
- FT_TRACE4(( " flex1\n" ));
-
- /* adding six more points; 4 control points, 2 on-curve points */
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, 6 ) )
- goto Fail;
-
- /* record the starting point's x, y position for later use */
- start_x = x;
- start_y = y;
-
- /* XXX: figure out whether this is supposed to be a horizontal */
- /* or vertical flex; the Type 2 specification is vague... */
-
- temp = args;
-
- /* grab up to the last argument */
- for ( count = 5; count > 0; count-- )
- {
- dx = ADD_LONG( dx, temp[0] );
- dy = ADD_LONG( dy, temp[1] );
- temp += 2;
- }
-
- if ( dx < 0 )
- dx = -dx;
- if ( dy < 0 )
- dy = -dy;
-
- /* strange test, but here it is... */
- horizontal = ( dx > dy );
-
- for ( count = 5; count > 0; count-- )
- {
- x = ADD_LONG( x, args[0] );
- y = ADD_LONG( y, args[1] );
- cff_builder_add_point( builder, x, y,
- (FT_Bool)( count == 3 ) );
- args += 2;
- }
-
- /* is last operand an x- or y-delta? */
- if ( horizontal )
- {
- x = ADD_LONG( x, args[0] );
- y = start_y;
- }
- else
- {
- x = start_x;
- y = ADD_LONG( y, args[0] );
- }
-
- cff_builder_add_point( builder, x, y, 1 );
-
- args = stack;
- break;
- }
-
- case cff_op_flex:
- {
- FT_UInt count;
-
-
- FT_TRACE4(( " flex\n" ));
-
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, 6 ) )
- goto Fail;
-
- for ( count = 6; count > 0; count-- )
- {
- x = ADD_LONG( x, args[0] );
- y = ADD_LONG( y, args[1] );
- cff_builder_add_point( builder, x, y,
- (FT_Bool)( count == 4 || count == 1 ) );
- args += 2;
- }
-
- args = stack;
- }
- break;
-
- case cff_op_seac:
- FT_TRACE4(( " seac\n" ));
-
- error = cff_operator_seac( decoder,
- args[0], args[1], args[2],
- (FT_Int)( args[3] >> 16 ),
- (FT_Int)( args[4] >> 16 ) );
-
- /* add current outline to the glyph slot */
- FT_GlyphLoader_Add( builder->loader );
-
- /* return now! */
- FT_TRACE4(( "\n" ));
- return error;
-
- case cff_op_endchar:
- /* in dictionaries, `endchar' simply indicates end of data */
- if ( in_dict )
- return error;
-
- FT_TRACE4(( " endchar\n" ));
-
- /* We are going to emulate the seac operator. */
- if ( num_args >= 4 )
- {
- /* Save glyph width so that the subglyphs don't overwrite it. */
- FT_Pos glyph_width = decoder->glyph_width;
-
-
- error = cff_operator_seac( decoder,
- 0L, args[-4], args[-3],
- (FT_Int)( args[-2] >> 16 ),
- (FT_Int)( args[-1] >> 16 ) );
-
- decoder->glyph_width = glyph_width;
- }
- else
- {
- cff_builder_close_contour( builder );
-
- /* close hints recording session */
- if ( hinter )
- {
- if ( hinter->close( hinter->hints,
- (FT_UInt)builder->current->n_points ) )
- goto Syntax_Error;
-
- /* apply hints to the loaded glyph outline now */
- error = hinter->apply( hinter->hints,
- builder->current,
- (PSH_Globals)builder->hints_globals,
- decoder->hint_mode );
- if ( error )
- goto Fail;
- }
-
- /* add current outline to the glyph slot */
- FT_GlyphLoader_Add( builder->loader );
- }
-
- /* return now! */
- FT_TRACE4(( "\n" ));
- return error;
-
- case cff_op_abs:
- FT_TRACE4(( " abs\n" ));
-
- if ( args[0] < 0 )
- {
- if ( args[0] == FT_LONG_MIN )
- args[0] = FT_LONG_MAX;
- else
- args[0] = -args[0];
- }
- args++;
- break;
-
- case cff_op_add:
- FT_TRACE4(( " add\n" ));
-
- args[0] = ADD_LONG( args[0], args[1] );
- args++;
- break;
-
- case cff_op_sub:
- FT_TRACE4(( " sub\n" ));
-
- args[0] = SUB_LONG( args[0], args[1] );
- args++;
- break;
-
- case cff_op_div:
- FT_TRACE4(( " div\n" ));
-
- args[0] = FT_DivFix( args[0], args[1] );
- args++;
- break;
-
- case cff_op_neg:
- FT_TRACE4(( " neg\n" ));
-
- if ( args[0] == FT_LONG_MIN )
- args[0] = FT_LONG_MAX;
- args[0] = -args[0];
- args++;
- break;
-
- case cff_op_random:
- FT_TRACE4(( " random\n" ));
-
- /* only use the lower 16 bits of `random' */
- /* to generate a number in the range (0;1] */
- args[0] = (FT_Fixed)
- ( ( decoder->current_subfont->random & 0xFFFF ) + 1 );
- args++;
-
- decoder->current_subfont->random =
- cff_random( decoder->current_subfont->random );
- break;
-
- case cff_op_mul:
- FT_TRACE4(( " mul\n" ));
-
- args[0] = FT_MulFix( args[0], args[1] );
- args++;
- break;
-
- case cff_op_sqrt:
- FT_TRACE4(( " sqrt\n" ));
-
- if ( args[0] > 0 )
- {
- FT_Fixed root = args[0];
- FT_Fixed new_root;
-
-
- for (;;)
- {
- new_root = ( root + FT_DivFix( args[0], root ) + 1 ) >> 1;
- if ( new_root == root )
- break;
- root = new_root;
- }
- args[0] = new_root;
- }
- else
- args[0] = 0;
- args++;
- break;
-
- case cff_op_drop:
- /* nothing */
- FT_TRACE4(( " drop\n" ));
-
- break;
-
- case cff_op_exch:
- {
- FT_Fixed tmp;
-
-
- FT_TRACE4(( " exch\n" ));
-
- tmp = args[0];
- args[0] = args[1];
- args[1] = tmp;
- args += 2;
- }
- break;
-
- case cff_op_index:
- {
- FT_Int idx = (FT_Int)( args[0] >> 16 );
-
-
- FT_TRACE4(( " index\n" ));
-
- if ( idx < 0 )
- idx = 0;
- else if ( idx > num_args - 2 )
- idx = num_args - 2;
- args[0] = args[-( idx + 1 )];
- args++;
- }
- break;
-
- case cff_op_roll:
- {
- FT_Int count = (FT_Int)( args[0] >> 16 );
- FT_Int idx = (FT_Int)( args[1] >> 16 );
-
-
- FT_TRACE4(( " roll\n" ));
-
- if ( count <= 0 )
- count = 1;
-
- args -= count;
- if ( args < stack )
- goto Stack_Underflow;
-
- if ( idx >= 0 )
- {
- while ( idx > 0 )
- {
- FT_Fixed tmp = args[count - 1];
- FT_Int i;
-
-
- for ( i = count - 2; i >= 0; i-- )
- args[i + 1] = args[i];
- args[0] = tmp;
- idx--;
- }
- }
- else
- {
- while ( idx < 0 )
- {
- FT_Fixed tmp = args[0];
- FT_Int i;
-
-
- for ( i = 0; i < count - 1; i++ )
- args[i] = args[i + 1];
- args[count - 1] = tmp;
- idx++;
- }
- }
- args += count;
- }
- break;
-
- case cff_op_dup:
- FT_TRACE4(( " dup\n" ));
-
- args[1] = args[0];
- args += 2;
- break;
-
- case cff_op_put:
- {
- FT_Fixed val = args[0];
- FT_Int idx = (FT_Int)( args[1] >> 16 );
-
-
- FT_TRACE4(( " put\n" ));
-
- /* the Type2 specification before version 16-March-2000 */
- /* didn't give a hard-coded size limit of the temporary */
- /* storage array; instead, an argument of the */
- /* `MultipleMaster' operator set the size */
- if ( idx >= 0 && idx < CFF_MAX_TRANS_ELEMENTS )
- decoder->buildchar[idx] = val;
- }
- break;
-
- case cff_op_get:
- {
- FT_Int idx = (FT_Int)( args[0] >> 16 );
- FT_Fixed val = 0;
-
-
- FT_TRACE4(( " get\n" ));
-
- if ( idx >= 0 && idx < CFF_MAX_TRANS_ELEMENTS )
- val = decoder->buildchar[idx];
-
- args[0] = val;
- args++;
- }
- break;
-
- case cff_op_store:
- /* this operator was removed from the Type2 specification */
- /* in version 16-March-2000 */
-
- /* since we currently don't handle interpolation of multiple */
- /* master fonts, this is a no-op */
- FT_TRACE4(( " store\n"));
- break;
-
- case cff_op_load:
- /* this operator was removed from the Type2 specification */
- /* in version 16-March-2000 */
- {
- FT_Int reg_idx = (FT_Int)args[0];
- FT_Int idx = (FT_Int)args[1];
- FT_Int count = (FT_Int)args[2];
-
-
- FT_TRACE4(( " load\n" ));
-
- /* since we currently don't handle interpolation of multiple */
- /* master fonts, we store a vector [1 0 0 ...] in the */
- /* temporary storage array regardless of the Registry index */
- if ( reg_idx >= 0 && reg_idx <= 2 &&
- idx >= 0 && idx < CFF_MAX_TRANS_ELEMENTS &&
- count >= 0 && count <= num_axes )
- {
- FT_Int end, i;
-
-
- end = FT_MIN( idx + count, CFF_MAX_TRANS_ELEMENTS );
-
- if ( idx < end )
- decoder->buildchar[idx] = 1 << 16;
-
- for ( i = idx + 1; i < end; i++ )
- decoder->buildchar[i] = 0;
- }
- }
- break;
-
- case cff_op_blend:
- /* this operator was removed from the Type2 specification */
- /* in version 16-March-2000 */
- {
- FT_Int num_results = (FT_Int)( args[0] >> 16 );
-
-
- FT_TRACE4(( " blend\n" ));
-
- if ( num_results < 0 )
- goto Syntax_Error;
-
- if ( num_results * (FT_Int)num_designs > num_args )
- goto Stack_Underflow;
-
- /* since we currently don't handle interpolation of multiple */
- /* master fonts, return the `num_results' values of the */
- /* first master */
- args -= num_results * ( num_designs - 1 );
- num_args -= num_results * ( num_designs - 1 );
- }
- break;
-
- case cff_op_dotsection:
- /* this operator is deprecated and ignored by the parser */
- FT_TRACE4(( " dotsection\n" ));
- break;
-
- case cff_op_closepath:
- /* this is an invalid Type 2 operator; however, there */
- /* exist fonts which are incorrectly converted from probably */
- /* Type 1 to CFF, and some parsers seem to accept it */
-
- FT_TRACE4(( " closepath (invalid op)\n" ));
-
- args = stack;
- break;
-
- case cff_op_hsbw:
- /* this is an invalid Type 2 operator; however, there */
- /* exist fonts which are incorrectly converted from probably */
- /* Type 1 to CFF, and some parsers seem to accept it */
-
- FT_TRACE4(( " hsbw (invalid op)\n" ));
-
- decoder->glyph_width =
- ADD_LONG( decoder->nominal_width, ( args[1] >> 16 ) );
-
- decoder->builder.left_bearing.x = args[0];
- decoder->builder.left_bearing.y = 0;
-
- x = ADD_LONG( decoder->builder.pos_x, args[0] );
- y = decoder->builder.pos_y;
- args = stack;
- break;
-
- case cff_op_sbw:
- /* this is an invalid Type 2 operator; however, there */
- /* exist fonts which are incorrectly converted from probably */
- /* Type 1 to CFF, and some parsers seem to accept it */
-
- FT_TRACE4(( " sbw (invalid op)\n" ));
-
- decoder->glyph_width =
- ADD_LONG( decoder->nominal_width, ( args[2] >> 16 ) );
-
- decoder->builder.left_bearing.x = args[0];
- decoder->builder.left_bearing.y = args[1];
-
- x = ADD_LONG( decoder->builder.pos_x, args[0] );
- y = ADD_LONG( decoder->builder.pos_y, args[1] );
- args = stack;
- break;
-
- case cff_op_setcurrentpoint:
- /* this is an invalid Type 2 operator; however, there */
- /* exist fonts which are incorrectly converted from probably */
- /* Type 1 to CFF, and some parsers seem to accept it */
-
- FT_TRACE4(( " setcurrentpoint (invalid op)\n" ));
-
- x = ADD_LONG( decoder->builder.pos_x, args[0] );
- y = ADD_LONG( decoder->builder.pos_y, args[1] );
- args = stack;
- break;
-
- case cff_op_callothersubr:
- /* this is an invalid Type 2 operator; however, there */
- /* exist fonts which are incorrectly converted from probably */
- /* Type 1 to CFF, and some parsers seem to accept it */
-
- FT_TRACE4(( " callothersubr (invalid op)\n" ));
-
- /* subsequent `pop' operands should add the arguments, */
- /* this is the implementation described for `unknown' other */
- /* subroutines in the Type1 spec. */
- /* */
- /* XXX Fix return arguments (see discussion below). */
- args -= 2 + ( args[-2] >> 16 );
- if ( args < stack )
- goto Stack_Underflow;
- break;
-
- case cff_op_pop:
- /* this is an invalid Type 2 operator; however, there */
- /* exist fonts which are incorrectly converted from probably */
- /* Type 1 to CFF, and some parsers seem to accept it */
-
- FT_TRACE4(( " pop (invalid op)\n" ));
-
- /* XXX Increasing `args' is wrong: After a certain number of */
- /* `pop's we get a stack overflow. Reason for doing it is */
- /* code like this (actually found in a CFF font): */
- /* */
- /* 17 1 3 callothersubr */
- /* pop */
- /* callsubr */
- /* */
- /* Since we handle `callothersubr' as a no-op, and */
- /* `callsubr' needs at least one argument, `pop' can't be a */
- /* no-op too as it basically should be. */
- /* */
- /* The right solution would be to provide real support for */
- /* `callothersubr' as done in `t1decode.c', however, given */
- /* the fact that CFF fonts with `pop' are invalid, it is */
- /* questionable whether it is worth the time. */
- args++;
- break;
-
- case cff_op_and:
- {
- FT_Fixed cond = ( args[0] && args[1] );
-
-
- FT_TRACE4(( " and\n" ));
-
- args[0] = cond ? 0x10000L : 0;
- args++;
- }
- break;
-
- case cff_op_or:
- {
- FT_Fixed cond = ( args[0] || args[1] );
-
-
- FT_TRACE4(( " or\n" ));
-
- args[0] = cond ? 0x10000L : 0;
- args++;
- }
- break;
-
- case cff_op_not:
- {
- FT_Fixed cond = !args[0];
-
-
- FT_TRACE4(( " not\n" ));
-
- args[0] = cond ? 0x10000L : 0;
- args++;
- }
- break;
-
- case cff_op_eq:
- {
- FT_Fixed cond = ( args[0] == args[1] );
-
-
- FT_TRACE4(( " eq\n" ));
-
- args[0] = cond ? 0x10000L : 0;
- args++;
- }
- break;
-
- case cff_op_ifelse:
- {
- FT_Fixed cond = ( args[2] <= args[3] );
-
-
- FT_TRACE4(( " ifelse\n" ));
-
- if ( !cond )
- args[0] = args[1];
- args++;
- }
- break;
-
- case cff_op_callsubr:
- {
- FT_UInt idx = (FT_UInt)( ( args[0] >> 16 ) +
- decoder->locals_bias );
-
-
- FT_TRACE4(( " callsubr (idx %d, entering level %d)\n",
- idx,
- zone - decoder->zones + 1 ));
-
- if ( idx >= decoder->num_locals )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:"
- " invalid local subr index\n" ));
- goto Syntax_Error;
- }
-
- if ( zone - decoder->zones >= CFF_MAX_SUBRS_CALLS )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:"
- " too many nested subrs\n" ));
- goto Syntax_Error;
- }
-
- zone->cursor = ip; /* save current instruction pointer */
-
- zone++;
- zone->base = decoder->locals[idx];
- zone->limit = decoder->locals[idx + 1];
- zone->cursor = zone->base;
-
- if ( !zone->base || zone->limit == zone->base )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:"
- " invoking empty subrs\n" ));
- goto Syntax_Error;
- }
-
- decoder->zone = zone;
- ip = zone->base;
- limit = zone->limit;
- }
- break;
-
- case cff_op_callgsubr:
- {
- FT_UInt idx = (FT_UInt)( ( args[0] >> 16 ) +
- decoder->globals_bias );
-
-
- FT_TRACE4(( " callgsubr (idx %d, entering level %d)\n",
- idx,
- zone - decoder->zones + 1 ));
-
- if ( idx >= decoder->num_globals )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:"
- " invalid global subr index\n" ));
- goto Syntax_Error;
- }
-
- if ( zone - decoder->zones >= CFF_MAX_SUBRS_CALLS )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:"
- " too many nested subrs\n" ));
- goto Syntax_Error;
- }
-
- zone->cursor = ip; /* save current instruction pointer */
-
- zone++;
- zone->base = decoder->globals[idx];
- zone->limit = decoder->globals[idx + 1];
- zone->cursor = zone->base;
-
- if ( !zone->base || zone->limit == zone->base )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:"
- " invoking empty subrs\n" ));
- goto Syntax_Error;
- }
-
- decoder->zone = zone;
- ip = zone->base;
- limit = zone->limit;
- }
- break;
-
- case cff_op_return:
- FT_TRACE4(( " return (leaving level %d)\n",
- decoder->zone - decoder->zones ));
-
- if ( decoder->zone <= decoder->zones )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:"
- " unexpected return\n" ));
- goto Syntax_Error;
- }
-
- decoder->zone--;
- zone = decoder->zone;
- ip = zone->cursor;
- limit = zone->limit;
- break;
-
- default:
- FT_ERROR(( "Unimplemented opcode: %d", ip[-1] ));
-
- if ( ip[-1] == 12 )
- FT_ERROR(( " %d", ip[0] ));
- FT_ERROR(( "\n" ));
-
- return FT_THROW( Unimplemented_Feature );
- }
-
- decoder->top = args;
-
- if ( decoder->top - stack >= CFF_MAX_OPERANDS )
- goto Stack_Overflow;
-
- } /* general operator processing */
-
- } /* while ip < limit */
-
- FT_TRACE4(( "..end..\n\n" ));
-
- Fail:
- return error;
-
- MM_Error:
- FT_TRACE4(( "cff_decoder_parse_charstrings:"
- " invalid opcode found in top DICT charstring\n"));
- return FT_THROW( Invalid_File_Format );
-
- Syntax_Error:
- FT_TRACE4(( "cff_decoder_parse_charstrings: syntax error\n" ));
- return FT_THROW( Invalid_File_Format );
-
- Stack_Underflow:
- FT_TRACE4(( "cff_decoder_parse_charstrings: stack underflow\n" ));
- return FT_THROW( Too_Few_Arguments );
-
- Stack_Overflow:
- FT_TRACE4(( "cff_decoder_parse_charstrings: stack overflow\n" ));
- return FT_THROW( Stack_Overflow );
- }
-
-#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /********** *********/
- /********** *********/
- /********** COMPUTE THE MAXIMUM ADVANCE WIDTH *********/
- /********** *********/
- /********** The following code is in charge of computing *********/
- /********** the maximum advance width of the font. It *********/
- /********** quickly processes each glyph charstring to *********/
- /********** extract the value from either a `sbw' or `seac' *********/
- /********** operator. *********/
- /********** *********/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
-#if 0 /* unused until we support pure CFF fonts */
-
-
- FT_LOCAL_DEF( FT_Error )
- cff_compute_max_advance( TT_Face face,
- FT_Int* max_advance )
- {
- FT_Error error = FT_Err_Ok;
- CFF_Decoder decoder;
- FT_Int glyph_index;
- CFF_Font cff = (CFF_Font)face->other;
-
-
- *max_advance = 0;
-
- /* Initialize load decoder */
- cff_decoder_init( &decoder, face, 0, 0, 0, 0 );
-
- decoder.builder.metrics_only = 1;
- decoder.builder.load_points = 0;
-
- /* For each glyph, parse the glyph charstring and extract */
- /* the advance width. */
- for ( glyph_index = 0; glyph_index < face->root.num_glyphs;
- glyph_index++ )
- {
- FT_Byte* charstring;
- FT_ULong charstring_len;
-
-
- /* now get load the unscaled outline */
- error = cff_get_glyph_data( face, glyph_index,
- &charstring, &charstring_len );
- if ( !error )
- {
- error = cff_decoder_prepare( &decoder, size, glyph_index );
- if ( !error )
- error = cff_decoder_parse_charstrings( &decoder,
- charstring,
- charstring_len,
- 0 );
-
- cff_free_glyph_data( face, &charstring, &charstring_len );
- }
-
- /* ignore the error if one has occurred -- skip to next glyph */
- error = FT_Err_Ok;
- }
-
- *max_advance = decoder.builder.advance.x;
-
- return FT_Err_Ok;
- }
-
-
-#endif /* 0 */
-
-
- FT_LOCAL_DEF( FT_Error )
- cff_slot_load( CFF_GlyphSlot glyph,
- CFF_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- FT_Error error;
- CFF_Decoder decoder;
- TT_Face face = (TT_Face)glyph->root.face;
- FT_Bool hinting, scaled, force_scaling;
- CFF_Font cff = (CFF_Font)face->extra.data;
-
- FT_Matrix font_matrix;
- FT_Vector font_offset;
-
-
- force_scaling = FALSE;
-
- /* in a CID-keyed font, consider `glyph_index' as a CID and map */
- /* it immediately to the real glyph_index -- if it isn't a */
- /* subsetted font, glyph_indices and CIDs are identical, though */
- if ( cff->top_font.font_dict.cid_registry != 0xFFFFU &&
- cff->charset.cids )
- {
- /* don't handle CID 0 (.notdef) which is directly mapped to GID 0 */
- if ( glyph_index != 0 )
- {
- glyph_index = cff_charset_cid_to_gindex( &cff->charset,
- glyph_index );
- if ( glyph_index == 0 )
- return FT_THROW( Invalid_Argument );
- }
- }
- else if ( glyph_index >= cff->num_glyphs )
- return FT_THROW( Invalid_Argument );
-
- if ( load_flags & FT_LOAD_NO_RECURSE )
- load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
-
- glyph->x_scale = 0x10000L;
- glyph->y_scale = 0x10000L;
- if ( size )
- {
- glyph->x_scale = size->root.metrics.x_scale;
- glyph->y_scale = size->root.metrics.y_scale;
- }
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-
- /* try to load embedded bitmap if any */
- /* */
- /* XXX: The convention should be emphasized in */
- /* the documents because it can be confusing. */
- if ( size )
- {
- CFF_Face cff_face = (CFF_Face)size->root.face;
- SFNT_Service sfnt = (SFNT_Service)cff_face->sfnt;
- FT_Stream stream = cff_face->root.stream;
-
-
- if ( size->strike_index != 0xFFFFFFFFUL &&
- sfnt->load_eblc &&
- ( load_flags & FT_LOAD_NO_BITMAP ) == 0 )
- {
- TT_SBit_MetricsRec metrics;
-
-
- error = sfnt->load_sbit_image( face,
- size->strike_index,
- glyph_index,
- (FT_UInt)load_flags,
- stream,
- &glyph->root.bitmap,
- &metrics );
-
- if ( !error )
- {
- FT_Bool has_vertical_info;
- FT_UShort advance;
- FT_Short dummy;
-
-
- glyph->root.outline.n_points = 0;
- glyph->root.outline.n_contours = 0;
-
- glyph->root.metrics.width = (FT_Pos)metrics.width << 6;
- glyph->root.metrics.height = (FT_Pos)metrics.height << 6;
-
- glyph->root.metrics.horiBearingX = (FT_Pos)metrics.horiBearingX << 6;
- glyph->root.metrics.horiBearingY = (FT_Pos)metrics.horiBearingY << 6;
- glyph->root.metrics.horiAdvance = (FT_Pos)metrics.horiAdvance << 6;
-
- glyph->root.metrics.vertBearingX = (FT_Pos)metrics.vertBearingX << 6;
- glyph->root.metrics.vertBearingY = (FT_Pos)metrics.vertBearingY << 6;
- glyph->root.metrics.vertAdvance = (FT_Pos)metrics.vertAdvance << 6;
-
- glyph->root.format = FT_GLYPH_FORMAT_BITMAP;
-
- if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
- {
- glyph->root.bitmap_left = metrics.vertBearingX;
- glyph->root.bitmap_top = metrics.vertBearingY;
- }
- else
- {
- glyph->root.bitmap_left = metrics.horiBearingX;
- glyph->root.bitmap_top = metrics.horiBearingY;
- }
-
- /* compute linear advance widths */
-
- (void)( (SFNT_Service)face->sfnt )->get_metrics( face, 0,
- glyph_index,
- &dummy,
- &advance );
- glyph->root.linearHoriAdvance = advance;
-
- has_vertical_info = FT_BOOL(
- face->vertical_info &&
- face->vertical.number_Of_VMetrics > 0 );
-
- /* get the vertical metrics from the vmtx table if we have one */
- if ( has_vertical_info )
- {
- (void)( (SFNT_Service)face->sfnt )->get_metrics( face, 1,
- glyph_index,
- &dummy,
- &advance );
- glyph->root.linearVertAdvance = advance;
- }
- else
- {
- /* make up vertical ones */
- if ( face->os2.version != 0xFFFFU )
- glyph->root.linearVertAdvance = (FT_Pos)
- ( face->os2.sTypoAscender - face->os2.sTypoDescender );
- else
- glyph->root.linearVertAdvance = (FT_Pos)
- ( face->horizontal.Ascender - face->horizontal.Descender );
- }
-
- return error;
- }
- }
- }
-
-#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
-
- /* return immediately if we only want the embedded bitmaps */
- if ( load_flags & FT_LOAD_SBITS_ONLY )
- return FT_THROW( Invalid_Argument );
-
- /* if we have a CID subfont, use its matrix (which has already */
- /* been multiplied with the root matrix) */
-
- /* this scaling is only relevant if the PS hinter isn't active */
- if ( cff->num_subfonts )
- {
- FT_Long top_upm, sub_upm;
- FT_Byte fd_index = cff_fd_select_get( &cff->fd_select,
- glyph_index );
-
-
- if ( fd_index >= cff->num_subfonts )
- fd_index = (FT_Byte)( cff->num_subfonts - 1 );
-
- top_upm = (FT_Long)cff->top_font.font_dict.units_per_em;
- sub_upm = (FT_Long)cff->subfonts[fd_index]->font_dict.units_per_em;
-
-
- font_matrix = cff->subfonts[fd_index]->font_dict.font_matrix;
- font_offset = cff->subfonts[fd_index]->font_dict.font_offset;
-
- if ( top_upm != sub_upm )
- {
- glyph->x_scale = FT_MulDiv( glyph->x_scale, top_upm, sub_upm );
- glyph->y_scale = FT_MulDiv( glyph->y_scale, top_upm, sub_upm );
-
- force_scaling = TRUE;
- }
- }
- else
- {
- font_matrix = cff->top_font.font_dict.font_matrix;
- font_offset = cff->top_font.font_dict.font_offset;
- }
-
- glyph->root.outline.n_points = 0;
- glyph->root.outline.n_contours = 0;
-
- /* top-level code ensures that FT_LOAD_NO_HINTING is set */
- /* if FT_LOAD_NO_SCALE is active */
- hinting = FT_BOOL( ( load_flags & FT_LOAD_NO_HINTING ) == 0 );
- scaled = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 );
-
- glyph->hint = hinting;
- glyph->scaled = scaled;
- glyph->root.format = FT_GLYPH_FORMAT_OUTLINE; /* by default */
-
- {
-#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
- CFF_Driver driver = (CFF_Driver)FT_FACE_DRIVER( face );
-#endif
-
-
- FT_Byte* charstring;
- FT_ULong charstring_len;
-
-
- cff_decoder_init( &decoder, face, size, glyph, hinting,
- FT_LOAD_TARGET_MODE( load_flags ) );
-
- /* this is for pure CFFs */
- if ( load_flags & FT_LOAD_ADVANCE_ONLY )
- decoder.width_only = TRUE;
-
- decoder.builder.no_recurse =
- (FT_Bool)( load_flags & FT_LOAD_NO_RECURSE );
-
- /* now load the unscaled outline */
- error = cff_get_glyph_data( face, glyph_index,
- &charstring, &charstring_len );
- if ( error )
- goto Glyph_Build_Finished;
-
- error = cff_decoder_prepare( &decoder, size, glyph_index );
- if ( error )
- goto Glyph_Build_Finished;
-
-#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
- /* choose which CFF renderer to use */
- if ( driver->hinting_engine == FT_CFF_HINTING_FREETYPE )
- error = cff_decoder_parse_charstrings( &decoder,
- charstring,
- charstring_len,
- 0 );
- else
-#endif
- {
- error = cf2_decoder_parse_charstrings( &decoder,
- charstring,
- charstring_len );
-
- /* Adobe's engine uses 16.16 numbers everywhere; */
- /* as a consequence, glyphs larger than 2000ppem get rejected */
- if ( FT_ERR_EQ( error, Glyph_Too_Big ) )
- {
- /* this time, we retry unhinted and scale up the glyph later on */
- /* (the engine uses and sets the hardcoded value 0x10000 / 64 = */
- /* 0x400 for both `x_scale' and `y_scale' in this case) */
- hinting = FALSE;
- force_scaling = TRUE;
- glyph->hint = hinting;
-
- error = cf2_decoder_parse_charstrings( &decoder,
- charstring,
- charstring_len );
- }
- }
-
- cff_free_glyph_data( face, &charstring, charstring_len );
-
- if ( error )
- goto Glyph_Build_Finished;
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- /* Control data and length may not be available for incremental */
- /* fonts. */
- if ( face->root.internal->incremental_interface )
- {
- glyph->root.control_data = NULL;
- glyph->root.control_len = 0;
- }
- else
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
-
- /* We set control_data and control_len if charstrings is loaded. */
- /* See how charstring loads at cff_index_access_element() in */
- /* cffload.c. */
- {
- CFF_Index csindex = &cff->charstrings_index;
-
-
- if ( csindex->offsets )
- {
- glyph->root.control_data = csindex->bytes +
- csindex->offsets[glyph_index] - 1;
- glyph->root.control_len = (FT_Long)charstring_len;
- }
- }
-
- Glyph_Build_Finished:
- /* save new glyph tables, if no error */
- if ( !error )
- cff_builder_done( &decoder.builder );
- /* XXX: anything to do for broken glyph entry? */
- }
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
-
- /* Incremental fonts can optionally override the metrics. */
- if ( !error &&
- face->root.internal->incremental_interface &&
- face->root.internal->incremental_interface->funcs->get_glyph_metrics )
- {
- FT_Incremental_MetricsRec metrics;
-
-
- metrics.bearing_x = decoder.builder.left_bearing.x;
- metrics.bearing_y = 0;
- metrics.advance = decoder.builder.advance.x;
- metrics.advance_v = decoder.builder.advance.y;
-
- error = face->root.internal->incremental_interface->funcs->get_glyph_metrics(
- face->root.internal->incremental_interface->object,
- glyph_index, FALSE, &metrics );
-
- decoder.builder.left_bearing.x = metrics.bearing_x;
- decoder.builder.advance.x = metrics.advance;
- decoder.builder.advance.y = metrics.advance_v;
- }
-
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
-
- if ( !error )
- {
- /* Now, set the metrics -- this is rather simple, as */
- /* the left side bearing is the xMin, and the top side */
- /* bearing the yMax. */
-
- /* For composite glyphs, return only left side bearing and */
- /* advance width. */
- if ( load_flags & FT_LOAD_NO_RECURSE )
- {
- FT_Slot_Internal internal = glyph->root.internal;
-
-
- glyph->root.metrics.horiBearingX = decoder.builder.left_bearing.x;
- glyph->root.metrics.horiAdvance = decoder.glyph_width;
- internal->glyph_matrix = font_matrix;
- internal->glyph_delta = font_offset;
- internal->glyph_transformed = 1;
- }
- else
- {
- FT_BBox cbox;
- FT_Glyph_Metrics* metrics = &glyph->root.metrics;
- FT_Bool has_vertical_info;
-
-
- if ( face->horizontal.number_Of_HMetrics )
- {
- FT_Short horiBearingX = 0;
- FT_UShort horiAdvance = 0;
-
-
- ( (SFNT_Service)face->sfnt )->get_metrics( face, 0,
- glyph_index,
- &horiBearingX,
- &horiAdvance );
- metrics->horiAdvance = horiAdvance;
- metrics->horiBearingX = horiBearingX;
- glyph->root.linearHoriAdvance = horiAdvance;
- }
- else
- {
- /* copy the _unscaled_ advance width */
- metrics->horiAdvance = decoder.glyph_width;
- glyph->root.linearHoriAdvance = decoder.glyph_width;
- }
-
- glyph->root.internal->glyph_transformed = 0;
-
- has_vertical_info = FT_BOOL( face->vertical_info &&
- face->vertical.number_Of_VMetrics > 0 );
-
- /* get the vertical metrics from the vmtx table if we have one */
- if ( has_vertical_info )
- {
- FT_Short vertBearingY = 0;
- FT_UShort vertAdvance = 0;
-
-
- ( (SFNT_Service)face->sfnt )->get_metrics( face, 1,
- glyph_index,
- &vertBearingY,
- &vertAdvance );
- metrics->vertBearingY = vertBearingY;
- metrics->vertAdvance = vertAdvance;
- }
- else
- {
- /* make up vertical ones */
- if ( face->os2.version != 0xFFFFU )
- metrics->vertAdvance = (FT_Pos)( face->os2.sTypoAscender -
- face->os2.sTypoDescender );
- else
- metrics->vertAdvance = (FT_Pos)( face->horizontal.Ascender -
- face->horizontal.Descender );
- }
-
- glyph->root.linearVertAdvance = metrics->vertAdvance;
-
- glyph->root.format = FT_GLYPH_FORMAT_OUTLINE;
-
- glyph->root.outline.flags = 0;
- if ( size && size->root.metrics.y_ppem < 24 )
- glyph->root.outline.flags |= FT_OUTLINE_HIGH_PRECISION;
-
- glyph->root.outline.flags |= FT_OUTLINE_REVERSE_FILL;
-
- /* apply the font matrix, if any */
- if ( font_matrix.xx != 0x10000L || font_matrix.yy != 0x10000L ||
- font_matrix.xy != 0 || font_matrix.yx != 0 )
- {
- FT_Outline_Transform( &glyph->root.outline, &font_matrix );
-
- metrics->horiAdvance = FT_MulFix( metrics->horiAdvance,
- font_matrix.xx );
- metrics->vertAdvance = FT_MulFix( metrics->vertAdvance,
- font_matrix.yy );
- }
-
- if ( font_offset.x || font_offset.y )
- {
- FT_Outline_Translate( &glyph->root.outline,
- font_offset.x,
- font_offset.y );
-
- metrics->horiAdvance += font_offset.x;
- metrics->vertAdvance += font_offset.y;
- }
-
- if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 || force_scaling )
- {
- /* scale the outline and the metrics */
- FT_Int n;
- FT_Outline* cur = &glyph->root.outline;
- FT_Vector* vec = cur->points;
- FT_Fixed x_scale = glyph->x_scale;
- FT_Fixed y_scale = glyph->y_scale;
-
-
- /* First of all, scale the points */
- if ( !hinting || !decoder.builder.hints_funcs )
- for ( n = cur->n_points; n > 0; n--, vec++ )
- {
- vec->x = FT_MulFix( vec->x, x_scale );
- vec->y = FT_MulFix( vec->y, y_scale );
- }
-
- /* Then scale the metrics */
- metrics->horiAdvance = FT_MulFix( metrics->horiAdvance, x_scale );
- metrics->vertAdvance = FT_MulFix( metrics->vertAdvance, y_scale );
- }
-
- /* compute the other metrics */
- FT_Outline_Get_CBox( &glyph->root.outline, &cbox );
-
- metrics->width = cbox.xMax - cbox.xMin;
- metrics->height = cbox.yMax - cbox.yMin;
-
- metrics->horiBearingX = cbox.xMin;
- metrics->horiBearingY = cbox.yMax;
-
- if ( has_vertical_info )
- metrics->vertBearingX = metrics->horiBearingX -
- metrics->horiAdvance / 2;
- else
- {
- if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
- ft_synthesize_vertical_metrics( metrics,
- metrics->vertAdvance );
- }
- }
- }
-
- return error;
- }
-
-
-/* END */
diff --git a/src/cff/cffgload.h b/src/cff/cffgload.h
deleted file mode 100644
index 0fa93b439..000000000
--- a/src/cff/cffgload.h
+++ /dev/null
@@ -1,246 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffgload.h */
-/* */
-/* OpenType Glyph Loader (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CFFGLOAD_H_
-#define CFFGLOAD_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include "cffobjs.h"
-
-
-FT_BEGIN_HEADER
-
-
-#define CFF_MAX_OPERANDS 48
-#define CFF_MAX_SUBRS_CALLS 16 /* maximum subroutine nesting; */
- /* only 10 are allowed but there exist */
- /* fonts like `HiraKakuProN-W3.ttf' */
- /* (Hiragino Kaku Gothic ProN W3; */
- /* 8.2d6e1; 2014-12-19) that exceed */
- /* this limit */
-#define CFF_MAX_TRANS_ELEMENTS 32
-
-
- /*************************************************************************/
- /* */
- /* <Structure> */
- /* CFF_Builder */
- /* */
- /* <Description> */
- /* A structure used during glyph loading to store its outline. */
- /* */
- /* <Fields> */
- /* memory :: The current memory object. */
- /* */
- /* face :: The current face object. */
- /* */
- /* glyph :: The current glyph slot. */
- /* */
- /* loader :: The current glyph loader. */
- /* */
- /* base :: The base glyph outline. */
- /* */
- /* current :: The current glyph outline. */
- /* */
- /* pos_x :: The horizontal translation (if composite glyph). */
- /* */
- /* pos_y :: The vertical translation (if composite glyph). */
- /* */
- /* left_bearing :: The left side bearing point. */
- /* */
- /* advance :: The horizontal advance vector. */
- /* */
- /* bbox :: Unused. */
- /* */
- /* path_begun :: A flag which indicates that a new path has begun. */
- /* */
- /* load_points :: If this flag is not set, no points are loaded. */
- /* */
- /* no_recurse :: Set but not used. */
- /* */
- /* metrics_only :: A boolean indicating that we only want to compute */
- /* the metrics of a given glyph, not load all of its */
- /* points. */
- /* */
- /* hints_funcs :: Auxiliary pointer for hinting. */
- /* */
- /* hints_globals :: Auxiliary pointer for hinting. */
- /* */
- typedef struct CFF_Builder_
- {
- FT_Memory memory;
- TT_Face face;
- CFF_GlyphSlot glyph;
- FT_GlyphLoader loader;
- FT_Outline* base;
- FT_Outline* current;
-
- FT_Pos pos_x;
- FT_Pos pos_y;
-
- FT_Vector left_bearing;
- FT_Vector advance;
-
- FT_BBox bbox; /* bounding box */
- FT_Bool path_begun;
- FT_Bool load_points;
- FT_Bool no_recurse;
-
- FT_Bool metrics_only;
-
- void* hints_funcs; /* hinter-specific */
- void* hints_globals; /* hinter-specific */
-
- } CFF_Builder;
-
-
- FT_LOCAL( FT_Error )
- cff_check_points( CFF_Builder* builder,
- FT_Int count );
-
- FT_LOCAL( void )
- cff_builder_add_point( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y,
- FT_Byte flag );
- FT_LOCAL( FT_Error )
- cff_builder_add_point1( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y );
- FT_LOCAL( FT_Error )
- cff_builder_start_point( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y );
- FT_LOCAL( void )
- cff_builder_close_contour( CFF_Builder* builder );
-
-
- FT_LOCAL( FT_Int )
- cff_lookup_glyph_by_stdcharcode( CFF_Font cff,
- FT_Int charcode );
- FT_LOCAL( FT_Error )
- cff_get_glyph_data( TT_Face face,
- FT_UInt glyph_index,
- FT_Byte** pointer,
- FT_ULong* length );
- FT_LOCAL( void )
- cff_free_glyph_data( TT_Face face,
- FT_Byte** pointer,
- FT_ULong length );
-
-
- /* execution context charstring zone */
-
- typedef struct CFF_Decoder_Zone_
- {
- FT_Byte* base;
- FT_Byte* limit;
- FT_Byte* cursor;
-
- } CFF_Decoder_Zone;
-
-
- typedef struct CFF_Decoder_
- {
- CFF_Builder builder;
- CFF_Font cff;
-
- FT_Fixed stack[CFF_MAX_OPERANDS + 1];
- FT_Fixed* top;
-
- CFF_Decoder_Zone zones[CFF_MAX_SUBRS_CALLS + 1];
- CFF_Decoder_Zone* zone;
-
- FT_Int flex_state;
- FT_Int num_flex_vectors;
- FT_Vector flex_vectors[7];
-
- FT_Pos glyph_width;
- FT_Pos nominal_width;
-
- FT_Bool read_width;
- FT_Bool width_only;
- FT_Int num_hints;
- FT_Fixed buildchar[CFF_MAX_TRANS_ELEMENTS];
-
- FT_UInt num_locals;
- FT_UInt num_globals;
-
- FT_Int locals_bias;
- FT_Int globals_bias;
-
- FT_Byte** locals;
- FT_Byte** globals;
-
- FT_Byte** glyph_names; /* for pure CFF fonts only */
- FT_UInt num_glyphs; /* number of glyphs in font */
-
- FT_Render_Mode hint_mode;
-
- FT_Bool seac;
-
- CFF_SubFont current_subfont; /* for current glyph_index */
-
- } CFF_Decoder;
-
-
- FT_LOCAL( void )
- cff_decoder_init( CFF_Decoder* decoder,
- TT_Face face,
- CFF_Size size,
- CFF_GlyphSlot slot,
- FT_Bool hinting,
- FT_Render_Mode hint_mode );
-
- FT_LOCAL( FT_Error )
- cff_decoder_prepare( CFF_Decoder* decoder,
- CFF_Size size,
- FT_UInt glyph_index );
-
-#if 0 /* unused until we support pure CFF fonts */
-
- /* Compute the maximum advance width of a font through quick parsing */
- FT_LOCAL( FT_Error )
- cff_compute_max_advance( TT_Face face,
- FT_Int* max_advance );
-
-#endif /* 0 */
-
-#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
- FT_LOCAL( FT_Error )
- cff_decoder_parse_charstrings( CFF_Decoder* decoder,
- FT_Byte* charstring_base,
- FT_ULong charstring_len,
- FT_Bool in_dict );
-#endif
-
- FT_LOCAL( FT_Error )
- cff_slot_load( CFF_GlyphSlot glyph,
- CFF_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags );
-
-
-FT_END_HEADER
-
-#endif /* CFFGLOAD_H_ */
-
-
-/* END */
diff --git a/src/cff/cffload.c b/src/cff/cffload.c
deleted file mode 100644
index 12420384a..000000000
--- a/src/cff/cffload.c
+++ /dev/null
@@ -1,2554 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffload.c */
-/* */
-/* OpenType and CFF data/program tables loader (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_TYPE1_TABLES_H
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include FT_MULTIPLE_MASTERS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#endif
-
-#include "cffload.h"
-#include "cffparse.h"
-
-#include "cfferrs.h"
-
-
-#define FT_FIXED_ONE ( (FT_Fixed)0x10000 )
-
-
-#if 1
-
- static const FT_UShort cff_isoadobe_charset[229] =
- {
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, 87,
- 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, 98, 99, 100, 101, 102, 103,
- 104, 105, 106, 107, 108, 109, 110, 111,
- 112, 113, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 124, 125, 126, 127,
- 128, 129, 130, 131, 132, 133, 134, 135,
- 136, 137, 138, 139, 140, 141, 142, 143,
- 144, 145, 146, 147, 148, 149, 150, 151,
- 152, 153, 154, 155, 156, 157, 158, 159,
- 160, 161, 162, 163, 164, 165, 166, 167,
- 168, 169, 170, 171, 172, 173, 174, 175,
- 176, 177, 178, 179, 180, 181, 182, 183,
- 184, 185, 186, 187, 188, 189, 190, 191,
- 192, 193, 194, 195, 196, 197, 198, 199,
- 200, 201, 202, 203, 204, 205, 206, 207,
- 208, 209, 210, 211, 212, 213, 214, 215,
- 216, 217, 218, 219, 220, 221, 222, 223,
- 224, 225, 226, 227, 228
- };
-
- static const FT_UShort cff_expert_charset[166] =
- {
- 0, 1, 229, 230, 231, 232, 233, 234,
- 235, 236, 237, 238, 13, 14, 15, 99,
- 239, 240, 241, 242, 243, 244, 245, 246,
- 247, 248, 27, 28, 249, 250, 251, 252,
- 253, 254, 255, 256, 257, 258, 259, 260,
- 261, 262, 263, 264, 265, 266, 109, 110,
- 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 300, 301, 302, 303, 304, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, 318, 158, 155, 163, 319,
- 320, 321, 322, 323, 324, 325, 326, 150,
- 164, 169, 327, 328, 329, 330, 331, 332,
- 333, 334, 335, 336, 337, 338, 339, 340,
- 341, 342, 343, 344, 345, 346, 347, 348,
- 349, 350, 351, 352, 353, 354, 355, 356,
- 357, 358, 359, 360, 361, 362, 363, 364,
- 365, 366, 367, 368, 369, 370, 371, 372,
- 373, 374, 375, 376, 377, 378
- };
-
- static const FT_UShort cff_expertsubset_charset[87] =
- {
- 0, 1, 231, 232, 235, 236, 237, 238,
- 13, 14, 15, 99, 239, 240, 241, 242,
- 243, 244, 245, 246, 247, 248, 27, 28,
- 249, 250, 251, 253, 254, 255, 256, 257,
- 258, 259, 260, 261, 262, 263, 264, 265,
- 266, 109, 110, 267, 268, 269, 270, 272,
- 300, 301, 302, 305, 314, 315, 158, 155,
- 163, 320, 321, 322, 323, 324, 325, 326,
- 150, 164, 169, 327, 328, 329, 330, 331,
- 332, 333, 334, 335, 336, 337, 338, 339,
- 340, 341, 342, 343, 344, 345, 346
- };
-
- static const FT_UShort cff_standard_encoding[256] =
- {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 96, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110,
- 0, 111, 112, 113, 114, 0, 115, 116,
- 117, 118, 119, 120, 121, 122, 0, 123,
- 0, 124, 125, 126, 127, 128, 129, 130,
- 131, 0, 132, 133, 0, 134, 135, 136,
- 137, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 138, 0, 139, 0, 0, 0, 0,
- 140, 141, 142, 143, 0, 0, 0, 0,
- 0, 144, 0, 0, 0, 145, 0, 0,
- 146, 147, 148, 149, 0, 0, 0, 0
- };
-
- static const FT_UShort cff_expert_encoding[256] =
- {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 229, 230, 0, 231, 232, 233, 234,
- 235, 236, 237, 238, 13, 14, 15, 99,
- 239, 240, 241, 242, 243, 244, 245, 246,
- 247, 248, 27, 28, 249, 250, 251, 252,
- 0, 253, 254, 255, 256, 257, 0, 0,
- 0, 258, 0, 0, 259, 260, 261, 262,
- 0, 0, 263, 264, 265, 0, 266, 109,
- 110, 267, 268, 269, 0, 270, 271, 272,
- 273, 274, 275, 276, 277, 278, 279, 280,
- 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, 300, 301, 302, 303, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 304, 305, 306, 0, 0, 307, 308,
- 309, 310, 311, 0, 312, 0, 0, 312,
- 0, 0, 314, 315, 0, 0, 316, 317,
- 318, 0, 0, 0, 158, 155, 163, 319,
- 320, 321, 322, 323, 324, 325, 0, 0,
- 326, 150, 164, 169, 327, 328, 329, 330,
- 331, 332, 333, 334, 335, 336, 337, 338,
- 339, 340, 341, 342, 343, 344, 345, 346,
- 347, 348, 349, 350, 351, 352, 353, 354,
- 355, 356, 357, 358, 359, 360, 361, 362,
- 363, 364, 365, 366, 367, 368, 369, 370,
- 371, 372, 373, 374, 375, 376, 377, 378
- };
-
-#endif /* 1 */
-
-
- FT_LOCAL_DEF( FT_UShort )
- cff_get_standard_encoding( FT_UInt charcode )
- {
- return (FT_UShort)( charcode < 256 ? cff_standard_encoding[charcode]
- : 0 );
- }
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cffload
-
-
- /* read an offset from the index's stream current position */
- static FT_ULong
- cff_index_read_offset( CFF_Index idx,
- FT_Error *errorp )
- {
- FT_Error error;
- FT_Stream stream = idx->stream;
- FT_Byte tmp[4];
- FT_ULong result = 0;
-
-
- if ( !FT_STREAM_READ( tmp, idx->off_size ) )
- {
- FT_Int nn;
-
-
- for ( nn = 0; nn < idx->off_size; nn++ )
- result = ( result << 8 ) | tmp[nn];
- }
-
- *errorp = error;
- return result;
- }
-
-
- static FT_Error
- cff_index_init( CFF_Index idx,
- FT_Stream stream,
- FT_Bool load,
- FT_Bool cff2 )
- {
- FT_Error error;
- FT_Memory memory = stream->memory;
- FT_UInt count;
-
-
- FT_ZERO( idx );
-
- idx->stream = stream;
- idx->start = FT_STREAM_POS();
-
- if ( cff2 )
- {
- if ( FT_READ_ULONG( count ) )
- goto Exit;
- idx->hdr_size = 5;
- }
- else
- {
- if ( FT_READ_USHORT( count ) )
- goto Exit;
- idx->hdr_size = 3;
- }
-
- if ( count > 0 )
- {
- FT_Byte offsize;
- FT_ULong size;
-
-
- /* there is at least one element; read the offset size, */
- /* then access the offset table to compute the index's total size */
- if ( FT_READ_BYTE( offsize ) )
- goto Exit;
-
- if ( offsize < 1 || offsize > 4 )
- {
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- idx->count = count;
- idx->off_size = offsize;
- size = (FT_ULong)( count + 1 ) * offsize;
-
- idx->data_offset = idx->start + idx->hdr_size + size;
-
- if ( FT_STREAM_SKIP( size - offsize ) )
- goto Exit;
-
- size = cff_index_read_offset( idx, &error );
- if ( error )
- goto Exit;
-
- if ( size == 0 )
- {
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- idx->data_size = --size;
-
- if ( load )
- {
- /* load the data */
- if ( FT_FRAME_EXTRACT( size, idx->bytes ) )
- goto Exit;
- }
- else
- {
- /* skip the data */
- if ( FT_STREAM_SKIP( size ) )
- goto Exit;
- }
- }
-
- Exit:
- if ( error )
- FT_FREE( idx->offsets );
-
- return error;
- }
-
-
- static void
- cff_index_done( CFF_Index idx )
- {
- if ( idx->stream )
- {
- FT_Stream stream = idx->stream;
- FT_Memory memory = stream->memory;
-
-
- if ( idx->bytes )
- FT_FRAME_RELEASE( idx->bytes );
-
- FT_FREE( idx->offsets );
- FT_ZERO( idx );
- }
- }
-
-
- static FT_Error
- cff_index_load_offsets( CFF_Index idx )
- {
- FT_Error error = FT_Err_Ok;
- FT_Stream stream = idx->stream;
- FT_Memory memory = stream->memory;
-
-
- if ( idx->count > 0 && !idx->offsets )
- {
- FT_Byte offsize = idx->off_size;
- FT_ULong data_size;
- FT_Byte* p;
- FT_Byte* p_end;
- FT_ULong* poff;
-
-
- data_size = (FT_ULong)( idx->count + 1 ) * offsize;
-
- if ( FT_NEW_ARRAY( idx->offsets, idx->count + 1 ) ||
- FT_STREAM_SEEK( idx->start + idx->hdr_size ) ||
- FT_FRAME_ENTER( data_size ) )
- goto Exit;
-
- poff = idx->offsets;
- p = (FT_Byte*)stream->cursor;
- p_end = p + data_size;
-
- switch ( offsize )
- {
- case 1:
- for ( ; p < p_end; p++, poff++ )
- poff[0] = p[0];
- break;
-
- case 2:
- for ( ; p < p_end; p += 2, poff++ )
- poff[0] = FT_PEEK_USHORT( p );
- break;
-
- case 3:
- for ( ; p < p_end; p += 3, poff++ )
- poff[0] = FT_PEEK_UOFF3( p );
- break;
-
- default:
- for ( ; p < p_end; p += 4, poff++ )
- poff[0] = FT_PEEK_ULONG( p );
- }
-
- FT_FRAME_EXIT();
- }
-
- Exit:
- if ( error )
- FT_FREE( idx->offsets );
-
- return error;
- }
-
-
- /* Allocate a table containing pointers to an index's elements. */
- /* The `pool' argument makes this function convert the index */
- /* entries to C-style strings (this is, NULL-terminated). */
- static FT_Error
- cff_index_get_pointers( CFF_Index idx,
- FT_Byte*** table,
- FT_Byte** pool,
- FT_ULong* pool_size )
- {
- FT_Error error = FT_Err_Ok;
- FT_Memory memory = idx->stream->memory;
-
- FT_Byte** t = NULL;
- FT_Byte* new_bytes = NULL;
- FT_ULong new_size;
-
-
- *table = NULL;
-
- if ( !idx->offsets )
- {
- error = cff_index_load_offsets( idx );
- if ( error )
- goto Exit;
- }
-
- new_size = idx->data_size + idx->count;
-
- if ( idx->count > 0 &&
- !FT_NEW_ARRAY( t, idx->count + 1 ) &&
- ( !pool || !FT_ALLOC( new_bytes, new_size ) ) )
- {
- FT_ULong n, cur_offset;
- FT_ULong extra = 0;
- FT_Byte* org_bytes = idx->bytes;
-
-
- /* at this point, `idx->offsets' can't be NULL */
- cur_offset = idx->offsets[0] - 1;
-
- /* sanity check */
- if ( cur_offset != 0 )
- {
- FT_TRACE0(( "cff_index_get_pointers:"
- " invalid first offset value %d set to zero\n",
- cur_offset ));
- cur_offset = 0;
- }
-
- if ( !pool )
- t[0] = org_bytes + cur_offset;
- else
- t[0] = new_bytes + cur_offset;
-
- for ( n = 1; n <= idx->count; n++ )
- {
- FT_ULong next_offset = idx->offsets[n] - 1;
-
-
- /* two sanity checks for invalid offset tables */
- if ( next_offset < cur_offset )
- next_offset = cur_offset;
- else if ( next_offset > idx->data_size )
- next_offset = idx->data_size;
-
- if ( !pool )
- t[n] = org_bytes + next_offset;
- else
- {
- t[n] = new_bytes + next_offset + extra;
-
- if ( next_offset != cur_offset )
- {
- FT_MEM_COPY( t[n - 1], org_bytes + cur_offset, t[n] - t[n - 1] );
- t[n][0] = '\0';
- t[n] += 1;
- extra++;
- }
- }
-
- cur_offset = next_offset;
- }
- *table = t;
-
- if ( pool )
- *pool = new_bytes;
- if ( pool_size )
- *pool_size = new_size;
- }
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- cff_index_access_element( CFF_Index idx,
- FT_UInt element,
- FT_Byte** pbytes,
- FT_ULong* pbyte_len )
- {
- FT_Error error = FT_Err_Ok;
-
-
- if ( idx && idx->count > element )
- {
- /* compute start and end offsets */
- FT_Stream stream = idx->stream;
- FT_ULong off1, off2 = 0;
-
-
- /* load offsets from file or the offset table */
- if ( !idx->offsets )
- {
- FT_ULong pos = element * idx->off_size;
-
-
- if ( FT_STREAM_SEEK( idx->start + idx->hdr_size + pos ) )
- goto Exit;
-
- off1 = cff_index_read_offset( idx, &error );
- if ( error )
- goto Exit;
-
- if ( off1 != 0 )
- {
- do
- {
- element++;
- off2 = cff_index_read_offset( idx, &error );
-
- } while ( off2 == 0 && element < idx->count );
- }
- }
- else /* use offsets table */
- {
- off1 = idx->offsets[element];
- if ( off1 )
- {
- do
- {
- element++;
- off2 = idx->offsets[element];
-
- } while ( off2 == 0 && element < idx->count );
- }
- }
-
- /* XXX: should check off2 does not exceed the end of this entry; */
- /* at present, only truncate off2 at the end of this stream */
- if ( off2 > stream->size + 1 ||
- idx->data_offset > stream->size - off2 + 1 )
- {
- FT_ERROR(( "cff_index_access_element:"
- " offset to next entry (%d)"
- " exceeds the end of stream (%d)\n",
- off2, stream->size - idx->data_offset + 1 ));
- off2 = stream->size - idx->data_offset + 1;
- }
-
- /* access element */
- if ( off1 && off2 > off1 )
- {
- *pbyte_len = off2 - off1;
-
- if ( idx->bytes )
- {
- /* this index was completely loaded in memory, that's easy */
- *pbytes = idx->bytes + off1 - 1;
- }
- else
- {
- /* this index is still on disk/file, access it through a frame */
- if ( FT_STREAM_SEEK( idx->data_offset + off1 - 1 ) ||
- FT_FRAME_EXTRACT( off2 - off1, *pbytes ) )
- goto Exit;
- }
- }
- else
- {
- /* empty index element */
- *pbytes = 0;
- *pbyte_len = 0;
- }
- }
- else
- error = FT_THROW( Invalid_Argument );
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- cff_index_forget_element( CFF_Index idx,
- FT_Byte** pbytes )
- {
- if ( idx->bytes == 0 )
- {
- FT_Stream stream = idx->stream;
-
-
- FT_FRAME_RELEASE( *pbytes );
- }
- }
-
-
- /* get an entry from Name INDEX */
- FT_LOCAL_DEF( FT_String* )
- cff_index_get_name( CFF_Font font,
- FT_UInt element )
- {
- CFF_Index idx = &font->name_index;
- FT_Memory memory;
- FT_Byte* bytes;
- FT_ULong byte_len;
- FT_Error error;
- FT_String* name = 0;
-
-
- if ( !idx->stream ) /* CFF2 does not include a name index */
- goto Exit;
-
- memory = idx->stream->memory;
-
- error = cff_index_access_element( idx, element, &bytes, &byte_len );
- if ( error )
- goto Exit;
-
- if ( !FT_ALLOC( name, byte_len + 1 ) )
- {
- if ( byte_len )
- FT_MEM_COPY( name, bytes, byte_len );
- name[byte_len] = 0;
- }
- cff_index_forget_element( idx, &bytes );
-
- Exit:
- return name;
- }
-
-
- /* get an entry from String INDEX */
- FT_LOCAL_DEF( FT_String* )
- cff_index_get_string( CFF_Font font,
- FT_UInt element )
- {
- return ( element < font->num_strings )
- ? (FT_String*)font->strings[element]
- : NULL;
- }
-
-
- FT_LOCAL_DEF( FT_String* )
- cff_index_get_sid_string( CFF_Font font,
- FT_UInt sid )
- {
- /* value 0xFFFFU indicates a missing dictionary entry */
- if ( sid == 0xFFFFU )
- return NULL;
-
- /* if it is not a standard string, return it */
- if ( sid > 390 )
- return cff_index_get_string( font, sid - 391 );
-
- /* CID-keyed CFF fonts don't have glyph names */
- if ( !font->psnames )
- return NULL;
-
- /* this is a standard string */
- return (FT_String *)font->psnames->adobe_std_strings( sid );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*** ***/
- /*** FD Select table support ***/
- /*** ***/
- /*************************************************************************/
- /*************************************************************************/
-
-
- static void
- CFF_Done_FD_Select( CFF_FDSelect fdselect,
- FT_Stream stream )
- {
- if ( fdselect->data )
- FT_FRAME_RELEASE( fdselect->data );
-
- fdselect->data_size = 0;
- fdselect->format = 0;
- fdselect->range_count = 0;
- }
-
-
- static FT_Error
- CFF_Load_FD_Select( CFF_FDSelect fdselect,
- FT_UInt num_glyphs,
- FT_Stream stream,
- FT_ULong offset )
- {
- FT_Error error;
- FT_Byte format;
- FT_UInt num_ranges;
-
-
- /* read format */
- if ( FT_STREAM_SEEK( offset ) || FT_READ_BYTE( format ) )
- goto Exit;
-
- fdselect->format = format;
- fdselect->cache_count = 0; /* clear cache */
-
- switch ( format )
- {
- case 0: /* format 0, that's simple */
- fdselect->data_size = num_glyphs;
- goto Load_Data;
-
- case 3: /* format 3, a tad more complex */
- if ( FT_READ_USHORT( num_ranges ) )
- goto Exit;
-
- if ( !num_ranges )
- {
- FT_TRACE0(( "CFF_Load_FD_Select: empty FDSelect array\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- fdselect->data_size = num_ranges * 3 + 2;
-
- Load_Data:
- if ( FT_FRAME_EXTRACT( fdselect->data_size, fdselect->data ) )
- goto Exit;
- break;
-
- default: /* hmm... that's wrong */
- error = FT_THROW( Invalid_File_Format );
- }
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Byte )
- cff_fd_select_get( CFF_FDSelect fdselect,
- FT_UInt glyph_index )
- {
- FT_Byte fd = 0;
-
-
- /* if there is no FDSelect, return zero */
- /* Note: CFF2 with just one Font Dict has no FDSelect */
- if ( !fdselect->data )
- goto Exit;
-
- switch ( fdselect->format )
- {
- case 0:
- fd = fdselect->data[glyph_index];
- break;
-
- case 3:
- /* first, compare to the cache */
- if ( (FT_UInt)( glyph_index - fdselect->cache_first ) <
- fdselect->cache_count )
- {
- fd = fdselect->cache_fd;
- break;
- }
-
- /* then, look up the ranges array */
- {
- FT_Byte* p = fdselect->data;
- FT_Byte* p_limit = p + fdselect->data_size;
- FT_Byte fd2;
- FT_UInt first, limit;
-
-
- first = FT_NEXT_USHORT( p );
- do
- {
- if ( glyph_index < first )
- break;
-
- fd2 = *p++;
- limit = FT_NEXT_USHORT( p );
-
- if ( glyph_index < limit )
- {
- fd = fd2;
-
- /* update cache */
- fdselect->cache_first = first;
- fdselect->cache_count = limit - first;
- fdselect->cache_fd = fd2;
- break;
- }
- first = limit;
-
- } while ( p < p_limit );
- }
- break;
-
- default:
- ;
- }
-
- Exit:
- return fd;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*** ***/
- /*** CFF font support ***/
- /*** ***/
- /*************************************************************************/
- /*************************************************************************/
-
- static FT_Error
- cff_charset_compute_cids( CFF_Charset charset,
- FT_UInt num_glyphs,
- FT_Memory memory )
- {
- FT_Error error = FT_Err_Ok;
- FT_UInt i;
- FT_Long j;
- FT_UShort max_cid = 0;
-
-
- if ( charset->max_cid > 0 )
- goto Exit;
-
- for ( i = 0; i < num_glyphs; i++ )
- {
- if ( charset->sids[i] > max_cid )
- max_cid = charset->sids[i];
- }
-
- if ( FT_NEW_ARRAY( charset->cids, (FT_ULong)max_cid + 1 ) )
- goto Exit;
-
- /* When multiple GIDs map to the same CID, we choose the lowest */
- /* GID. This is not described in any spec, but it matches the */
- /* behaviour of recent Acroread versions. */
- for ( j = (FT_Long)num_glyphs - 1; j >= 0; j-- )
- charset->cids[charset->sids[j]] = (FT_UShort)j;
-
- charset->max_cid = max_cid;
- charset->num_glyphs = num_glyphs;
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_UInt )
- cff_charset_cid_to_gindex( CFF_Charset charset,
- FT_UInt cid )
- {
- FT_UInt result = 0;
-
-
- if ( cid <= charset->max_cid )
- result = charset->cids[cid];
-
- return result;
- }
-
-
- static void
- cff_charset_free_cids( CFF_Charset charset,
- FT_Memory memory )
- {
- FT_FREE( charset->cids );
- charset->max_cid = 0;
- }
-
-
- static void
- cff_charset_done( CFF_Charset charset,
- FT_Stream stream )
- {
- FT_Memory memory = stream->memory;
-
-
- cff_charset_free_cids( charset, memory );
-
- FT_FREE( charset->sids );
- charset->format = 0;
- charset->offset = 0;
- }
-
-
- static FT_Error
- cff_charset_load( CFF_Charset charset,
- FT_UInt num_glyphs,
- FT_Stream stream,
- FT_ULong base_offset,
- FT_ULong offset,
- FT_Bool invert )
- {
- FT_Memory memory = stream->memory;
- FT_Error error = FT_Err_Ok;
- FT_UShort glyph_sid;
-
-
- /* If the offset is greater than 2, we have to parse the charset */
- /* table. */
- if ( offset > 2 )
- {
- FT_UInt j;
-
-
- charset->offset = base_offset + offset;
-
- /* Get the format of the table. */
- if ( FT_STREAM_SEEK( charset->offset ) ||
- FT_READ_BYTE( charset->format ) )
- goto Exit;
-
- /* Allocate memory for sids. */
- if ( FT_NEW_ARRAY( charset->sids, num_glyphs ) )
- goto Exit;
-
- /* assign the .notdef glyph */
- charset->sids[0] = 0;
-
- switch ( charset->format )
- {
- case 0:
- if ( num_glyphs > 0 )
- {
- if ( FT_FRAME_ENTER( ( num_glyphs - 1 ) * 2 ) )
- goto Exit;
-
- for ( j = 1; j < num_glyphs; j++ )
- charset->sids[j] = FT_GET_USHORT();
-
- FT_FRAME_EXIT();
- }
- break;
-
- case 1:
- case 2:
- {
- FT_UInt nleft;
- FT_UInt i;
-
-
- j = 1;
-
- while ( j < num_glyphs )
- {
- /* Read the first glyph sid of the range. */
- if ( FT_READ_USHORT( glyph_sid ) )
- goto Exit;
-
- /* Read the number of glyphs in the range. */
- if ( charset->format == 2 )
- {
- if ( FT_READ_USHORT( nleft ) )
- goto Exit;
- }
- else
- {
- if ( FT_READ_BYTE( nleft ) )
- goto Exit;
- }
-
- /* try to rescue some of the SIDs if `nleft' is too large */
- if ( glyph_sid > 0xFFFFL - nleft )
- {
- FT_ERROR(( "cff_charset_load: invalid SID range trimmed"
- " nleft=%d -> %d\n", nleft, 0xFFFFL - glyph_sid ));
- nleft = ( FT_UInt )( 0xFFFFL - glyph_sid );
- }
-
- /* Fill in the range of sids -- `nleft + 1' glyphs. */
- for ( i = 0; j < num_glyphs && i <= nleft; i++, j++, glyph_sid++ )
- charset->sids[j] = glyph_sid;
- }
- }
- break;
-
- default:
- FT_ERROR(( "cff_charset_load: invalid table format\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
- }
- else
- {
- /* Parse default tables corresponding to offset == 0, 1, or 2. */
- /* CFF specification intimates the following: */
- /* */
- /* In order to use a predefined charset, the following must be */
- /* true: The charset constructed for the glyphs in the font's */
- /* charstrings dictionary must match the predefined charset in */
- /* the first num_glyphs. */
-
- charset->offset = offset; /* record charset type */
-
- switch ( (FT_UInt)offset )
- {
- case 0:
- if ( num_glyphs > 229 )
- {
- FT_ERROR(( "cff_charset_load: implicit charset larger than\n"
- "predefined charset (Adobe ISO-Latin)\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* Allocate memory for sids. */
- if ( FT_NEW_ARRAY( charset->sids, num_glyphs ) )
- goto Exit;
-
- /* Copy the predefined charset into the allocated memory. */
- FT_ARRAY_COPY( charset->sids, cff_isoadobe_charset, num_glyphs );
-
- break;
-
- case 1:
- if ( num_glyphs > 166 )
- {
- FT_ERROR(( "cff_charset_load: implicit charset larger than\n"
- "predefined charset (Adobe Expert)\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* Allocate memory for sids. */
- if ( FT_NEW_ARRAY( charset->sids, num_glyphs ) )
- goto Exit;
-
- /* Copy the predefined charset into the allocated memory. */
- FT_ARRAY_COPY( charset->sids, cff_expert_charset, num_glyphs );
-
- break;
-
- case 2:
- if ( num_glyphs > 87 )
- {
- FT_ERROR(( "cff_charset_load: implicit charset larger than\n"
- "predefined charset (Adobe Expert Subset)\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* Allocate memory for sids. */
- if ( FT_NEW_ARRAY( charset->sids, num_glyphs ) )
- goto Exit;
-
- /* Copy the predefined charset into the allocated memory. */
- FT_ARRAY_COPY( charset->sids, cff_expertsubset_charset, num_glyphs );
-
- break;
-
- default:
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
- }
-
- /* we have to invert the `sids' array for subsetted CID-keyed fonts */
- if ( invert )
- error = cff_charset_compute_cids( charset, num_glyphs, memory );
-
- Exit:
- /* Clean up if there was an error. */
- if ( error )
- {
- FT_FREE( charset->sids );
- FT_FREE( charset->cids );
- charset->format = 0;
- charset->offset = 0;
- charset->sids = 0;
- }
-
- return error;
- }
-
-
- static void
- cff_vstore_done( CFF_VStoreRec* vstore,
- FT_Memory memory )
- {
- FT_UInt i;
-
-
- /* free regionList and axisLists */
- if ( vstore->varRegionList )
- {
- for ( i = 0; i < vstore->regionCount; i++ )
- FT_FREE( vstore->varRegionList[i].axisList );
- }
- FT_FREE( vstore->varRegionList );
-
- /* free varData and indices */
- if ( vstore->varData )
- {
- for ( i = 0; i < vstore->dataCount; i++ )
- FT_FREE( vstore->varData[i].regionIndices );
- }
- FT_FREE( vstore->varData );
- }
-
-
- /* convert 2.14 to Fixed */
- #define FT_fdot14ToFixed( x ) ( (FT_Fixed)( (FT_ULong)(x) << 2 ) )
-
-
- static FT_Error
- cff_vstore_load( CFF_VStoreRec* vstore,
- FT_Stream stream,
- FT_ULong base_offset,
- FT_ULong offset )
- {
- FT_Memory memory = stream->memory;
- FT_Error error = FT_ERR( Invalid_File_Format );
-
- FT_ULong* dataOffsetArray = NULL;
- FT_UInt i, j;
-
-
- /* no offset means no vstore to parse */
- if ( offset )
- {
- FT_UInt vsOffset;
- FT_UInt format;
- FT_ULong regionListOffset;
-
-
- /* we need to parse the table to determine its size; */
- /* skip table length */
- if ( FT_STREAM_SEEK( base_offset + offset ) ||
- FT_STREAM_SKIP( 2 ) )
- goto Exit;
-
- /* actual variation store begins after the length */
- vsOffset = FT_STREAM_POS();
-
- /* check the header */
- if ( FT_READ_USHORT( format ) )
- goto Exit;
- if ( format != 1 )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* read top level fields */
- if ( FT_READ_ULONG( regionListOffset ) ||
- FT_READ_USHORT( vstore->dataCount ) )
- goto Exit;
-
- /* make temporary copy of item variation data offsets; */
- /* we'll parse region list first, then come back */
- if ( FT_NEW_ARRAY( dataOffsetArray, vstore->dataCount ) )
- goto Exit;
-
- for ( i = 0; i < vstore->dataCount; i++ )
- {
- if ( FT_READ_ULONG( dataOffsetArray[i] ) )
- goto Exit;
- }
-
- /* parse regionList and axisLists */
- if ( FT_STREAM_SEEK( vsOffset + regionListOffset ) ||
- FT_READ_USHORT( vstore->axisCount ) ||
- FT_READ_USHORT( vstore->regionCount ) )
- goto Exit;
-
- if ( FT_NEW_ARRAY( vstore->varRegionList, vstore->regionCount ) )
- goto Exit;
-
- for ( i = 0; i < vstore->regionCount; i++ )
- {
- CFF_VarRegion* region = &vstore->varRegionList[i];
-
-
- if ( FT_NEW_ARRAY( region->axisList, vstore->axisCount ) )
- goto Exit;
-
- for ( j = 0; j < vstore->axisCount; j++ )
- {
- CFF_AxisCoords* axis = &region->axisList[j];
-
- FT_Int16 start14, peak14, end14;
-
-
- if ( FT_READ_SHORT( start14 ) ||
- FT_READ_SHORT( peak14 ) ||
- FT_READ_SHORT( end14 ) )
- goto Exit;
-
- axis->startCoord = FT_fdot14ToFixed( start14 );
- axis->peakCoord = FT_fdot14ToFixed( peak14 );
- axis->endCoord = FT_fdot14ToFixed( end14 );
- }
- }
-
- /* use dataOffsetArray now to parse varData items */
- if ( FT_NEW_ARRAY( vstore->varData, vstore->dataCount ) )
- goto Exit;
-
- for ( i = 0; i < vstore->dataCount; i++ )
- {
- CFF_VarData* data = &vstore->varData[i];
-
-
- if ( FT_STREAM_SEEK( vsOffset + dataOffsetArray[i] ) )
- goto Exit;
-
- /* ignore `itemCount' and `shortDeltaCount' */
- /* because CFF2 has no delta sets */
- if ( FT_STREAM_SKIP( 4 ) )
- goto Exit;
-
- /* Note: just record values; consistency is checked later */
- /* by cff_blend_build_vector when it consumes `vstore' */
-
- if ( FT_READ_USHORT( data->regionIdxCount ) )
- goto Exit;
-
- if ( FT_NEW_ARRAY( data->regionIndices, data->regionIdxCount ) )
- goto Exit;
-
- for ( j = 0; j < data->regionIdxCount; j++ )
- {
- if ( FT_READ_USHORT( data->regionIndices[j] ) )
- goto Exit;
- }
- }
- }
-
- error = FT_Err_Ok;
-
- Exit:
- FT_FREE( dataOffsetArray );
- if ( error )
- cff_vstore_done( vstore, memory );
-
- return error;
- }
-
-
- /* Clear blend stack (after blend values are consumed). */
- /* */
- /* TODO: Should do this in cff_run_parse, but subFont */
- /* ref is not available there. */
- /* */
- /* Allocation is not changed when stack is cleared. */
- FT_LOCAL_DEF( void )
- cff_blend_clear( CFF_SubFont subFont )
- {
- subFont->blend_top = subFont->blend_stack;
- subFont->blend_used = 0;
- }
-
-
- /* Blend numOperands on the stack, */
- /* store results into the first numBlends values, */
- /* then pop remaining arguments. */
- /* */
- /* This is comparable to `cf2_doBlend' but */
- /* the cffparse stack is different and can't be written. */
- /* Blended values are written to a different buffer, */
- /* using reserved operator 255. */
- /* */
- /* Blend calculation is done in 16.16 fixed point. */
- FT_LOCAL_DEF( FT_Error )
- cff_blend_doBlend( CFF_SubFont subFont,
- CFF_Parser parser,
- FT_UInt numBlends )
- {
- FT_UInt delta;
- FT_UInt base;
- FT_UInt i, j;
- FT_UInt size;
-
- CFF_Blend blend = &subFont->blend;
-
- FT_Memory memory = subFont->blend.font->memory; /* for FT_REALLOC */
- FT_Error error = FT_Err_Ok; /* for FT_REALLOC */
-
- /* compute expected number of operands for this blend */
- FT_UInt numOperands = (FT_UInt)( numBlends * blend->lenBV );
- FT_UInt count = (FT_UInt)( parser->top - 1 - parser->stack );
-
-
- if ( numOperands > count )
- {
- FT_TRACE4(( " cff_blend_doBlend: Stack underflow %d args\n", count ));
-
- error = FT_THROW( Stack_Underflow );
- goto Exit;
- }
-
- /* check whether we have room for `numBlends' values at `blend_top' */
- size = 5 * numBlends; /* add 5 bytes per entry */
- if ( subFont->blend_used + size > subFont->blend_alloc )
- {
- FT_Byte* blend_stack_old = subFont->blend_stack;
- FT_Byte* blend_top_old = subFont->blend_top;
-
-
- /* increase or allocate `blend_stack' and reset `blend_top'; */
- /* prepare to append `numBlends' values to the buffer */
- if ( FT_REALLOC( subFont->blend_stack,
- subFont->blend_alloc,
- subFont->blend_alloc + size ) )
- goto Exit;
-
- subFont->blend_top = subFont->blend_stack + subFont->blend_used;
- subFont->blend_alloc += size;
-
- /* iterate over the parser stack and adjust pointers */
- /* if the reallocated buffer has a different address */
- if ( blend_stack_old &&
- subFont->blend_stack != blend_stack_old )
- {
- FT_PtrDist offset = subFont->blend_stack - blend_stack_old;
- FT_Byte** p;
-
-
- for ( p = parser->stack; p < parser->top; p++ )
- {
- if ( *p >= blend_stack_old && *p < blend_top_old )
- *p += offset;
- }
- }
- }
- subFont->blend_used += size;
-
- base = count - numOperands; /* index of first blend arg */
- delta = base + numBlends; /* index of first delta arg */
-
- for ( i = 0; i < numBlends; i++ )
- {
- const FT_Int32* weight = &blend->BV[1];
- FT_Int32 sum;
-
-
- /* convert inputs to 16.16 fixed point */
- sum = cff_parse_num( parser, &parser->stack[i + base] ) * 65536;
-
- for ( j = 1; j < blend->lenBV; j++ )
- sum = ADD_INT32(
- sum,
- FT_MulFix(
- *weight++,
- cff_parse_num( parser,
- &parser->stack[delta++] ) * 65536 ) );
-
- /* point parser stack to new value on blend_stack */
- parser->stack[i + base] = subFont->blend_top;
-
- /* Push blended result as Type 2 5-byte fixed point number. This */
- /* will not conflict with actual DICTs because 255 is a reserved */
- /* opcode in both CFF and CFF2 DICTs. See `cff_parse_num' for */
- /* decode of this, which rounds to an integer. */
- *subFont->blend_top++ = 255;
- *subFont->blend_top++ = ( (FT_UInt32)sum & 0xFF000000U ) >> 24;
- *subFont->blend_top++ = ( (FT_UInt32)sum & 0x00FF0000U ) >> 16;
- *subFont->blend_top++ = ( (FT_UInt32)sum & 0x0000FF00U ) >> 8;
- *subFont->blend_top++ = (FT_UInt32)sum & 0x000000FFU;
- }
-
- /* leave only numBlends results on parser stack */
- parser->top = &parser->stack[base + numBlends];
-
- Exit:
- return error;
- }
-
-
- /* Compute a blend vector from variation store index and normalized */
- /* vector based on pseudo-code in OpenType Font Variations Overview. */
- /* */
- /* Note: lenNDV == 0 produces a default blend vector, (1,0,0,...). */
- FT_LOCAL_DEF( FT_Error )
- cff_blend_build_vector( CFF_Blend blend,
- FT_UInt vsindex,
- FT_UInt lenNDV,
- FT_Fixed* NDV )
- {
- FT_Error error = FT_Err_Ok; /* for FT_REALLOC */
- FT_Memory memory = blend->font->memory; /* for FT_REALLOC */
-
- FT_UInt len;
- CFF_VStore vs;
- CFF_VarData* varData;
- FT_UInt master;
-
-
- FT_ASSERT( lenNDV == 0 || NDV );
-
- blend->builtBV = FALSE;
-
- vs = &blend->font->vstore;
-
- /* VStore and fvar must be consistent */
- if ( lenNDV != 0 && lenNDV != vs->axisCount )
- {
- FT_TRACE4(( " cff_blend_build_vector: Axis count mismatch\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- if ( vsindex >= vs->dataCount )
- {
- FT_TRACE4(( " cff_blend_build_vector: vsindex out of range\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* select the item variation data structure */
- varData = &vs->varData[vsindex];
-
- /* prepare buffer for the blend vector */
- len = varData->regionIdxCount + 1; /* add 1 for default component */
- if ( FT_REALLOC( blend->BV,
- blend->lenBV * sizeof( *blend->BV ),
- len * sizeof( *blend->BV ) ) )
- goto Exit;
-
- blend->lenBV = len;
-
- /* outer loop steps through master designs to be blended */
- for ( master = 0; master < len; master++ )
- {
- FT_UInt j;
- FT_UInt idx;
- CFF_VarRegion* varRegion;
-
-
- /* default factor is always one */
- if ( master == 0 )
- {
- blend->BV[master] = FT_FIXED_ONE;
- FT_TRACE4(( " build blend vector len %d\n"
- " [ %f ",
- len,
- blend->BV[master] / 65536.0 ));
- continue;
- }
-
- /* VStore array does not include default master, so subtract one */
- idx = varData->regionIndices[master - 1];
- varRegion = &vs->varRegionList[idx];
-
- if ( idx >= vs->regionCount )
- {
- FT_TRACE4(( " cff_blend_build_vector:"
- " region index out of range\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* Note: `lenNDV' could be zero. */
- /* In that case, build default blend vector (1,0,0...). */
- if ( !lenNDV )
- {
- blend->BV[master] = 0;
- continue;
- }
-
- /* In the normal case, initialize each component to 1 */
- /* before inner loop. */
- blend->BV[master] = FT_FIXED_ONE; /* default */
-
- /* inner loop steps through axes in this region */
- for ( j = 0; j < lenNDV; j++ )
- {
- CFF_AxisCoords* axis = &varRegion->axisList[j];
- FT_Fixed axisScalar;
-
-
- /* compute the scalar contribution of this axis; */
- /* ignore invalid ranges */
- if ( axis->startCoord > axis->peakCoord ||
- axis->peakCoord > axis->endCoord )
- axisScalar = FT_FIXED_ONE;
-
- else if ( axis->startCoord < 0 &&
- axis->endCoord > 0 &&
- axis->peakCoord != 0 )
- axisScalar = FT_FIXED_ONE;
-
- /* peak of 0 means ignore this axis */
- else if ( axis->peakCoord == 0 )
- axisScalar = FT_FIXED_ONE;
-
- /* ignore this region if coords are out of range */
- else if ( NDV[j] < axis->startCoord ||
- NDV[j] > axis->endCoord )
- axisScalar = 0;
-
- /* calculate a proportional factor */
- else
- {
- if ( NDV[j] == axis->peakCoord )
- axisScalar = FT_FIXED_ONE;
- else if ( NDV[j] < axis->peakCoord )
- axisScalar = FT_DivFix( NDV[j] - axis->startCoord,
- axis->peakCoord - axis->startCoord );
- else
- axisScalar = FT_DivFix( axis->endCoord - NDV[j],
- axis->endCoord - axis->peakCoord );
- }
-
- /* take product of all the axis scalars */
- blend->BV[master] = FT_MulFix( blend->BV[master], axisScalar );
- }
-
- FT_TRACE4(( ", %f ",
- blend->BV[master] / 65536.0 ));
- }
-
- FT_TRACE4(( "]\n" ));
-
- /* record the parameters used to build the blend vector */
- blend->lastVsindex = vsindex;
-
- if ( lenNDV != 0 )
- {
- /* user has set a normalized vector */
- if ( FT_REALLOC( blend->lastNDV,
- blend->lenNDV * sizeof ( *NDV ),
- lenNDV * sizeof ( *NDV ) ) )
- goto Exit;
-
- FT_MEM_COPY( blend->lastNDV,
- NDV,
- lenNDV * sizeof ( *NDV ) );
- }
-
- blend->lenNDV = lenNDV;
- blend->builtBV = TRUE;
-
- Exit:
- return error;
- }
-
-
- /* `lenNDV' is zero for default vector; */
- /* return TRUE if blend vector needs to be built. */
- FT_LOCAL_DEF( FT_Bool )
- cff_blend_check_vector( CFF_Blend blend,
- FT_UInt vsindex,
- FT_UInt lenNDV,
- FT_Fixed* NDV )
- {
- if ( !blend->builtBV ||
- blend->lastVsindex != vsindex ||
- blend->lenNDV != lenNDV ||
- ( lenNDV &&
- memcmp( NDV,
- blend->lastNDV,
- lenNDV * sizeof ( *NDV ) ) != 0 ) )
- {
- /* need to build blend vector */
- return TRUE;
- }
-
- return FALSE;
- }
-
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-
- FT_LOCAL_DEF( FT_Error )
- cff_get_var_blend( CFF_Face face,
- FT_UInt *num_coords,
- FT_Fixed* *coords,
- FT_Fixed* *normalizedcoords,
- FT_MM_Var* *mm_var )
- {
- FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
-
-
- return mm->get_var_blend( FT_FACE( face ),
- num_coords,
- coords,
- normalizedcoords,
- mm_var );
- }
-
-
- FT_LOCAL_DEF( void )
- cff_done_blend( CFF_Face face )
- {
- FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
-
-
- mm->done_blend( FT_FACE( face ) );
- }
-
-#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
-
-
- static void
- cff_encoding_done( CFF_Encoding encoding )
- {
- encoding->format = 0;
- encoding->offset = 0;
- encoding->count = 0;
- }
-
-
- static FT_Error
- cff_encoding_load( CFF_Encoding encoding,
- CFF_Charset charset,
- FT_UInt num_glyphs,
- FT_Stream stream,
- FT_ULong base_offset,
- FT_ULong offset )
- {
- FT_Error error = FT_Err_Ok;
- FT_UInt count;
- FT_UInt j;
- FT_UShort glyph_sid;
- FT_UInt glyph_code;
-
-
- /* Check for charset->sids. If we do not have this, we fail. */
- if ( !charset->sids )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* Zero out the code to gid/sid mappings. */
- for ( j = 0; j < 256; j++ )
- {
- encoding->sids [j] = 0;
- encoding->codes[j] = 0;
- }
-
- /* Note: The encoding table in a CFF font is indexed by glyph index; */
- /* the first encoded glyph index is 1. Hence, we read the character */
- /* code (`glyph_code') at index j and make the assignment: */
- /* */
- /* encoding->codes[glyph_code] = j + 1 */
- /* */
- /* We also make the assignment: */
- /* */
- /* encoding->sids[glyph_code] = charset->sids[j + 1] */
- /* */
- /* This gives us both a code to GID and a code to SID mapping. */
-
- if ( offset > 1 )
- {
- encoding->offset = base_offset + offset;
-
- /* we need to parse the table to determine its size */
- if ( FT_STREAM_SEEK( encoding->offset ) ||
- FT_READ_BYTE( encoding->format ) ||
- FT_READ_BYTE( count ) )
- goto Exit;
-
- switch ( encoding->format & 0x7F )
- {
- case 0:
- {
- FT_Byte* p;
-
-
- /* By convention, GID 0 is always ".notdef" and is never */
- /* coded in the font. Hence, the number of codes found */
- /* in the table is `count+1'. */
- /* */
- encoding->count = count + 1;
-
- if ( FT_FRAME_ENTER( count ) )
- goto Exit;
-
- p = (FT_Byte*)stream->cursor;
-
- for ( j = 1; j <= count; j++ )
- {
- glyph_code = *p++;
-
- /* Make sure j is not too big. */
- if ( j < num_glyphs )
- {
- /* Assign code to GID mapping. */
- encoding->codes[glyph_code] = (FT_UShort)j;
-
- /* Assign code to SID mapping. */
- encoding->sids[glyph_code] = charset->sids[j];
- }
- }
-
- FT_FRAME_EXIT();
- }
- break;
-
- case 1:
- {
- FT_UInt nleft;
- FT_UInt i = 1;
- FT_UInt k;
-
-
- encoding->count = 0;
-
- /* Parse the Format1 ranges. */
- for ( j = 0; j < count; j++, i += nleft )
- {
- /* Read the first glyph code of the range. */
- if ( FT_READ_BYTE( glyph_code ) )
- goto Exit;
-
- /* Read the number of codes in the range. */
- if ( FT_READ_BYTE( nleft ) )
- goto Exit;
-
- /* Increment nleft, so we read `nleft + 1' codes/sids. */
- nleft++;
-
- /* compute max number of character codes */
- if ( (FT_UInt)nleft > encoding->count )
- encoding->count = nleft;
-
- /* Fill in the range of codes/sids. */
- for ( k = i; k < nleft + i; k++, glyph_code++ )
- {
- /* Make sure k is not too big. */
- if ( k < num_glyphs && glyph_code < 256 )
- {
- /* Assign code to GID mapping. */
- encoding->codes[glyph_code] = (FT_UShort)k;
-
- /* Assign code to SID mapping. */
- encoding->sids[glyph_code] = charset->sids[k];
- }
- }
- }
-
- /* simple check; one never knows what can be found in a font */
- if ( encoding->count > 256 )
- encoding->count = 256;
- }
- break;
-
- default:
- FT_ERROR(( "cff_encoding_load: invalid table format\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* Parse supplemental encodings, if any. */
- if ( encoding->format & 0x80 )
- {
- FT_UInt gindex;
-
-
- /* count supplements */
- if ( FT_READ_BYTE( count ) )
- goto Exit;
-
- for ( j = 0; j < count; j++ )
- {
- /* Read supplemental glyph code. */
- if ( FT_READ_BYTE( glyph_code ) )
- goto Exit;
-
- /* Read the SID associated with this glyph code. */
- if ( FT_READ_USHORT( glyph_sid ) )
- goto Exit;
-
- /* Assign code to SID mapping. */
- encoding->sids[glyph_code] = glyph_sid;
-
- /* First, look up GID which has been assigned to */
- /* SID glyph_sid. */
- for ( gindex = 0; gindex < num_glyphs; gindex++ )
- {
- if ( charset->sids[gindex] == glyph_sid )
- {
- encoding->codes[glyph_code] = (FT_UShort)gindex;
- break;
- }
- }
- }
- }
- }
- else
- {
- /* We take into account the fact a CFF font can use a predefined */
- /* encoding without containing all of the glyphs encoded by this */
- /* encoding (see the note at the end of section 12 in the CFF */
- /* specification). */
-
- switch ( (FT_UInt)offset )
- {
- case 0:
- /* First, copy the code to SID mapping. */
- FT_ARRAY_COPY( encoding->sids, cff_standard_encoding, 256 );
- goto Populate;
-
- case 1:
- /* First, copy the code to SID mapping. */
- FT_ARRAY_COPY( encoding->sids, cff_expert_encoding, 256 );
-
- Populate:
- /* Construct code to GID mapping from code to SID mapping */
- /* and charset. */
-
- encoding->count = 0;
-
- error = cff_charset_compute_cids( charset, num_glyphs,
- stream->memory );
- if ( error )
- goto Exit;
-
- for ( j = 0; j < 256; j++ )
- {
- FT_UInt sid = encoding->sids[j];
- FT_UInt gid = 0;
-
-
- if ( sid )
- gid = cff_charset_cid_to_gindex( charset, sid );
-
- if ( gid != 0 )
- {
- encoding->codes[j] = (FT_UShort)gid;
- encoding->count = j + 1;
- }
- else
- {
- encoding->codes[j] = 0;
- encoding->sids [j] = 0;
- }
- }
- break;
-
- default:
- FT_ERROR(( "cff_encoding_load: invalid table format\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
- }
-
- Exit:
-
- /* Clean up if there was an error. */
- return error;
- }
-
-
- /* Parse private dictionary; first call is always from `cff_face_init', */
- /* so NDV has not been set for CFF2 variation. */
- /* */
- /* `cff_slot_load' must call this function each time NDV changes. */
- FT_LOCAL_DEF( FT_Error )
- cff_load_private_dict( CFF_Font font,
- CFF_SubFont subfont,
- FT_UInt lenNDV,
- FT_Fixed* NDV )
- {
- FT_Error error = FT_Err_Ok;
- CFF_ParserRec parser;
- CFF_FontRecDict top = &subfont->font_dict;
- CFF_Private priv = &subfont->private_dict;
- FT_Stream stream = font->stream;
- FT_UInt stackSize;
-
-
- /* store handle needed to access memory, vstore for blend; */
- /* we need this for clean-up even if there is no private DICT */
- subfont->blend.font = font;
- subfont->blend.usedBV = FALSE; /* clear state */
-
- if ( !top->private_offset || !top->private_size )
- goto Exit2; /* no private DICT, do nothing */
-
- /* set defaults */
- FT_ZERO( priv );
-
- priv->blue_shift = 7;
- priv->blue_fuzz = 1;
- priv->lenIV = -1;
- priv->expansion_factor = (FT_Fixed)( 0.06 * 0x10000L );
- priv->blue_scale = (FT_Fixed)( 0.039625 * 0x10000L * 1000 );
-
- /* provide inputs for blend calculations */
- priv->subfont = subfont;
- subfont->lenNDV = lenNDV;
- subfont->NDV = NDV;
-
- /* add 1 for the operator */
- stackSize = font->cff2 ? font->top_font.font_dict.maxstack + 1
- : CFF_MAX_STACK_DEPTH + 1;
-
- if ( cff_parser_init( &parser,
- font->cff2 ? CFF2_CODE_PRIVATE : CFF_CODE_PRIVATE,
- priv,
- font->library,
- stackSize,
- top->num_designs,
- top->num_axes ) )
- goto Exit;
-
- if ( FT_STREAM_SEEK( font->base_offset + top->private_offset ) ||
- FT_FRAME_ENTER( top->private_size ) )
- goto Exit;
-
- FT_TRACE4(( " private dictionary:\n" ));
- error = cff_parser_run( &parser,
- (FT_Byte*)stream->cursor,
- (FT_Byte*)stream->limit );
- FT_FRAME_EXIT();
-
- if ( error )
- goto Exit;
-
- /* ensure that `num_blue_values' is even */
- priv->num_blue_values &= ~1;
-
- /* sanitize `initialRandomSeed' to be a positive value, if necessary; */
- /* this is not mandated by the specification but by our implementation */
- if ( priv->initial_random_seed < 0 )
- priv->initial_random_seed = -priv->initial_random_seed;
- else if ( priv->initial_random_seed == 0 )
- priv->initial_random_seed = 987654321;
-
- Exit:
- /* clean up */
- cff_blend_clear( subfont ); /* clear blend stack */
- cff_parser_done( &parser ); /* free parser stack */
-
- Exit2:
- /* no clean up (parser not initialized) */
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_UInt32 )
- cff_random( FT_UInt32 r )
- {
- /* a 32bit version of the `xorshift' algorithm */
- r ^= r << 13;
- r ^= r >> 17;
- r ^= r << 5;
-
- return r;
- }
-
-
- /* There are 3 ways to call this function, distinguished by code. */
- /* */
- /* . CFF_CODE_TOPDICT for either a CFF Top DICT or a CFF Font DICT */
- /* . CFF2_CODE_TOPDICT for CFF2 Top DICT */
- /* . CFF2_CODE_FONTDICT for CFF2 Font DICT */
-
- static FT_Error
- cff_subfont_load( CFF_SubFont subfont,
- CFF_Index idx,
- FT_UInt font_index,
- FT_Stream stream,
- FT_ULong base_offset,
- FT_UInt code,
- CFF_Font font,
- CFF_Face face )
- {
- FT_Error error;
- CFF_ParserRec parser;
- FT_Byte* dict = NULL;
- FT_ULong dict_len;
- CFF_FontRecDict top = &subfont->font_dict;
- CFF_Private priv = &subfont->private_dict;
-
- FT_Bool cff2 = FT_BOOL( code == CFF2_CODE_TOPDICT ||
- code == CFF2_CODE_FONTDICT );
- FT_UInt stackSize = cff2 ? CFF2_DEFAULT_STACK
- : CFF_MAX_STACK_DEPTH;
-
-
- /* Note: We use default stack size for CFF2 Font DICT because */
- /* Top and Font DICTs are not allowed to have blend operators. */
- error = cff_parser_init( &parser,
- code,
- &subfont->font_dict,
- font->library,
- stackSize,
- 0,
- 0 );
- if ( error )
- goto Exit;
-
- /* set defaults */
- FT_ZERO( top );
-
- top->underline_position = -( 100L << 16 );
- top->underline_thickness = 50L << 16;
- top->charstring_type = 2;
- top->font_matrix.xx = 0x10000L;
- top->font_matrix.yy = 0x10000L;
- top->cid_count = 8720;
-
- /* we use the implementation specific SID value 0xFFFF to indicate */
- /* missing entries */
- top->version = 0xFFFFU;
- top->notice = 0xFFFFU;
- top->copyright = 0xFFFFU;
- top->full_name = 0xFFFFU;
- top->family_name = 0xFFFFU;
- top->weight = 0xFFFFU;
- top->embedded_postscript = 0xFFFFU;
-
- top->cid_registry = 0xFFFFU;
- top->cid_ordering = 0xFFFFU;
- top->cid_font_name = 0xFFFFU;
-
- /* set default stack size */
- top->maxstack = cff2 ? CFF2_DEFAULT_STACK : 48;
-
- if ( idx->count ) /* count is nonzero for a real index */
- error = cff_index_access_element( idx, font_index, &dict, &dict_len );
- else
- {
- /* CFF2 has a fake top dict index; */
- /* simulate `cff_index_access_element' */
-
- /* Note: macros implicitly use `stream' and set `error' */
- if ( FT_STREAM_SEEK( idx->data_offset ) ||
- FT_FRAME_EXTRACT( idx->data_size, dict ) )
- goto Exit;
-
- dict_len = idx->data_size;
- }
-
- if ( !error )
- {
- FT_TRACE4(( " top dictionary:\n" ));
- error = cff_parser_run( &parser, dict, dict + dict_len );
- }
-
- /* clean up regardless of error */
- if ( idx->count )
- cff_index_forget_element( idx, &dict );
- else
- FT_FRAME_RELEASE( dict );
-
- if ( error )
- goto Exit;
-
- /* if it is a CID font, we stop there */
- if ( top->cid_registry != 0xFFFFU )
- goto Exit;
-
- /* Parse the private dictionary, if any. */
- /* */
- /* CFF2 does not have a private dictionary in the Top DICT */
- /* but may have one in a Font DICT. We need to parse */
- /* the latter here in order to load any local subrs. */
- error = cff_load_private_dict( font, subfont, 0, 0 );
- if ( error )
- goto Exit;
-
- if ( !cff2 )
- {
- /*
- * Initialize the random number generator.
- *
- * . If we have a face-specific seed, use it.
- * If non-zero, update it to a positive value.
- *
- * . Otherwise, use the seed from the CFF driver.
- * If non-zero, update it to a positive value.
- *
- * . If the random value is zero, use the seed given by the subfont's
- * `initialRandomSeed' value.
- *
- */
- if ( face->root.internal->random_seed == -1 )
- {
- CFF_Driver driver = (CFF_Driver)FT_FACE_DRIVER( face );
-
-
- subfont->random = (FT_UInt32)driver->random_seed;
- if ( driver->random_seed )
- {
- do
- {
- driver->random_seed =
- (FT_Int32)cff_random( (FT_UInt32)driver->random_seed );
-
- } while ( driver->random_seed < 0 );
- }
- }
- else
- {
- subfont->random = (FT_UInt32)face->root.internal->random_seed;
- if ( face->root.internal->random_seed )
- {
- do
- {
- face->root.internal->random_seed =
- (FT_Int32)cff_random( (FT_UInt32)face->root.internal->random_seed );
-
- } while ( face->root.internal->random_seed < 0 );
- }
- }
-
- if ( !subfont->random )
- subfont->random = (FT_UInt32)priv->initial_random_seed;
- }
-
- /* read the local subrs, if any */
- if ( priv->local_subrs_offset )
- {
- if ( FT_STREAM_SEEK( base_offset + top->private_offset +
- priv->local_subrs_offset ) )
- goto Exit;
-
- error = cff_index_init( &subfont->local_subrs_index, stream, 1, cff2 );
- if ( error )
- goto Exit;
-
- error = cff_index_get_pointers( &subfont->local_subrs_index,
- &subfont->local_subrs, NULL, NULL );
- if ( error )
- goto Exit;
- }
-
- Exit:
- cff_parser_done( &parser ); /* free parser stack */
-
- return error;
- }
-
-
- static void
- cff_subfont_done( FT_Memory memory,
- CFF_SubFont subfont )
- {
- if ( subfont )
- {
- cff_index_done( &subfont->local_subrs_index );
- FT_FREE( subfont->local_subrs );
-
- FT_FREE( subfont->blend.lastNDV );
- FT_FREE( subfont->blend.BV );
- FT_FREE( subfont->blend_stack );
- }
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- cff_font_load( FT_Library library,
- FT_Stream stream,
- FT_Int face_index,
- CFF_Font font,
- CFF_Face face,
- FT_Bool pure_cff,
- FT_Bool cff2 )
- {
- static const FT_Frame_Field cff_header_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE CFF_FontRec
-
- FT_FRAME_START( 3 ),
- FT_FRAME_BYTE( version_major ),
- FT_FRAME_BYTE( version_minor ),
- FT_FRAME_BYTE( header_size ),
- FT_FRAME_END
- };
-
- FT_Error error;
- FT_Memory memory = stream->memory;
- FT_ULong base_offset;
- CFF_FontRecDict dict;
- CFF_IndexRec string_index;
- FT_UInt subfont_index;
-
-
- FT_ZERO( font );
- FT_ZERO( &string_index );
-
- dict = &font->top_font.font_dict;
- base_offset = FT_STREAM_POS();
-
- font->library = library;
- font->stream = stream;
- font->memory = memory;
- font->cff2 = cff2;
- font->base_offset = base_offset;
-
- /* read CFF font header */
- if ( FT_STREAM_READ_FIELDS( cff_header_fields, font ) )
- goto Exit;
-
- if ( cff2 )
- {
- if ( font->version_major != 2 ||
- font->header_size < 5 )
- {
- FT_TRACE2(( " not a CFF2 font header\n" ));
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
-
- if ( FT_READ_USHORT( font->top_dict_length ) )
- goto Exit;
- }
- else
- {
- FT_Byte absolute_offset;
-
-
- if ( FT_READ_BYTE( absolute_offset ) )
- goto Exit;
-
- if ( font->version_major != 1 ||
- font->header_size < 4 ||
- absolute_offset > 4 )
- {
- FT_TRACE2(( " not a CFF font header\n" ));
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
- }
-
- /* skip the rest of the header */
- if ( FT_STREAM_SEEK( base_offset + font->header_size ) )
- {
- /* For pure CFFs we have read only four bytes so far. Contrary to */
- /* other formats like SFNT those bytes doesn't define a signature; */
- /* it is thus possible that the font isn't a CFF at all. */
- if ( pure_cff )
- {
- FT_TRACE2(( " not a CFF file\n" ));
- error = FT_THROW( Unknown_File_Format );
- }
- goto Exit;
- }
-
- if ( cff2 )
- {
- /* For CFF2, the top dict data immediately follow the header */
- /* and the length is stored in the header `offSize' field; */
- /* there is no index for it. */
- /* */
- /* Use the `font_dict_index' to save the current position */
- /* and length of data, but leave count at zero as an indicator. */
- FT_ZERO( &font->font_dict_index );
-
- font->font_dict_index.data_offset = FT_STREAM_POS();
- font->font_dict_index.data_size = font->top_dict_length;
-
- /* skip the top dict data for now, we will parse it later */
- if ( FT_STREAM_SKIP( font->top_dict_length ) )
- goto Exit;
-
- /* next, read the global subrs index */
- if ( FT_SET_ERROR( cff_index_init( &font->global_subrs_index,
- stream, 1, cff2 ) ) )
- goto Exit;
- }
- else
- {
- /* for CFF, read the name, top dict, string and global subrs index */
- if ( FT_SET_ERROR( cff_index_init( &font->name_index,
- stream, 0, cff2 ) ) )
- {
- if ( pure_cff )
- {
- FT_TRACE2(( " not a CFF file\n" ));
- error = FT_THROW( Unknown_File_Format );
- }
- goto Exit;
- }
-
- /* if we have an empty font name, */
- /* it must be the only font in the CFF */
- if ( font->name_index.count > 1 &&
- font->name_index.data_size < font->name_index.count )
- {
- /* for pure CFFs, we still haven't checked enough bytes */
- /* to be sure that it is a CFF at all */
- error = pure_cff ? FT_THROW( Unknown_File_Format )
- : FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- if ( FT_SET_ERROR( cff_index_init( &font->font_dict_index,
- stream, 0, cff2 ) ) ||
- FT_SET_ERROR( cff_index_init( &string_index,
- stream, 1, cff2 ) ) ||
- FT_SET_ERROR( cff_index_init( &font->global_subrs_index,
- stream, 1, cff2 ) ) ||
- FT_SET_ERROR( cff_index_get_pointers( &string_index,
- &font->strings,
- &font->string_pool,
- &font->string_pool_size ) ) )
- goto Exit;
-
- /* there must be a Top DICT index entry for each name index entry */
- if ( font->name_index.count > font->font_dict_index.count )
- {
- FT_ERROR(( "cff_font_load:"
- " not enough entries in Top DICT index\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
- }
-
- font->num_strings = string_index.count;
-
- if ( pure_cff )
- {
- /* well, we don't really forget the `disabled' fonts... */
- subfont_index = (FT_UInt)( face_index & 0xFFFF );
-
- if ( face_index > 0 && subfont_index >= font->name_index.count )
- {
- FT_ERROR(( "cff_font_load:"
- " invalid subfont index for pure CFF font (%d)\n",
- subfont_index ));
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- font->num_faces = font->name_index.count;
- }
- else
- {
- subfont_index = 0;
-
- if ( font->name_index.count > 1 )
- {
- FT_ERROR(( "cff_font_load:"
- " invalid CFF font with multiple subfonts\n"
- " "
- " in SFNT wrapper\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
- }
-
- /* in case of a font format check, simply exit now */
- if ( face_index < 0 )
- goto Exit;
-
- /* now, parse the top-level font dictionary */
- FT_TRACE4(( "parsing top-level\n" ));
- error = cff_subfont_load( &font->top_font,
- &font->font_dict_index,
- subfont_index,
- stream,
- base_offset,
- cff2 ? CFF2_CODE_TOPDICT : CFF_CODE_TOPDICT,
- font,
- face );
- if ( error )
- goto Exit;
-
- if ( FT_STREAM_SEEK( base_offset + dict->charstrings_offset ) )
- goto Exit;
-
- error = cff_index_init( &font->charstrings_index, stream, 0, cff2 );
- if ( error )
- goto Exit;
-
- /* now, check for a CID or CFF2 font */
- if ( dict->cid_registry != 0xFFFFU ||
- cff2 )
- {
- CFF_IndexRec fd_index;
- CFF_SubFont sub = NULL;
- FT_UInt idx;
-
-
- /* for CFF2, read the Variation Store if available; */
- /* this must follow the Top DICT parse and precede any Private DICT */
- error = cff_vstore_load( &font->vstore,
- stream,
- base_offset,
- dict->vstore_offset );
- if ( error )
- goto Exit;
-
- /* this is a CID-keyed font, we must now allocate a table of */
- /* sub-fonts, then load each of them separately */
- if ( FT_STREAM_SEEK( base_offset + dict->cid_fd_array_offset ) )
- goto Exit;
-
- error = cff_index_init( &fd_index, stream, 0, cff2 );
- if ( error )
- goto Exit;
-
- /* Font Dicts are not limited to 256 for CFF2. */
- /* TODO: support this for CFF2 */
- if ( fd_index.count > CFF_MAX_CID_FONTS )
- {
- FT_TRACE0(( "cff_font_load: FD array too large in CID font\n" ));
- goto Fail_CID;
- }
-
- /* allocate & read each font dict independently */
- font->num_subfonts = fd_index.count;
- if ( FT_NEW_ARRAY( sub, fd_index.count ) )
- goto Fail_CID;
-
- /* set up pointer table */
- for ( idx = 0; idx < fd_index.count; idx++ )
- font->subfonts[idx] = sub + idx;
-
- /* now load each subfont independently */
- for ( idx = 0; idx < fd_index.count; idx++ )
- {
- sub = font->subfonts[idx];
- FT_TRACE4(( "parsing subfont %u\n", idx ));
- error = cff_subfont_load( sub,
- &fd_index,
- idx,
- stream,
- base_offset,
- cff2 ? CFF2_CODE_FONTDICT
- : CFF_CODE_TOPDICT,
- font,
- face );
- if ( error )
- goto Fail_CID;
- }
-
- /* now load the FD Select array; */
- /* CFF2 omits FDSelect if there is only one FD */
- if ( !cff2 || fd_index.count > 1 )
- error = CFF_Load_FD_Select( &font->fd_select,
- font->charstrings_index.count,
- stream,
- base_offset + dict->cid_fd_select_offset );
-
- Fail_CID:
- cff_index_done( &fd_index );
-
- if ( error )
- goto Exit;
- }
- else
- font->num_subfonts = 0;
-
- /* read the charstrings index now */
- if ( dict->charstrings_offset == 0 )
- {
- FT_ERROR(( "cff_font_load: no charstrings offset\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- font->num_glyphs = font->charstrings_index.count;
-
- error = cff_index_get_pointers( &font->global_subrs_index,
- &font->global_subrs, NULL, NULL );
-
- if ( error )
- goto Exit;
-
- /* read the Charset and Encoding tables if available */
- if ( !cff2 && font->num_glyphs > 0 )
- {
- FT_Bool invert = FT_BOOL( dict->cid_registry != 0xFFFFU && pure_cff );
-
-
- error = cff_charset_load( &font->charset, font->num_glyphs, stream,
- base_offset, dict->charset_offset, invert );
- if ( error )
- goto Exit;
-
- /* CID-keyed CFFs don't have an encoding */
- if ( dict->cid_registry == 0xFFFFU )
- {
- error = cff_encoding_load( &font->encoding,
- &font->charset,
- font->num_glyphs,
- stream,
- base_offset,
- dict->encoding_offset );
- if ( error )
- goto Exit;
- }
- }
-
- /* get the font name (/CIDFontName for CID-keyed fonts, */
- /* /FontName otherwise) */
- font->font_name = cff_index_get_name( font, subfont_index );
-
- Exit:
- cff_index_done( &string_index );
-
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- cff_font_done( CFF_Font font )
- {
- FT_Memory memory = font->memory;
- FT_UInt idx;
-
-
- cff_index_done( &font->global_subrs_index );
- cff_index_done( &font->font_dict_index );
- cff_index_done( &font->name_index );
- cff_index_done( &font->charstrings_index );
-
- /* release font dictionaries, but only if working with */
- /* a CID keyed CFF font or a CFF2 font */
- if ( font->num_subfonts > 0 )
- {
- for ( idx = 0; idx < font->num_subfonts; idx++ )
- cff_subfont_done( memory, font->subfonts[idx] );
-
- /* the subfonts array has been allocated as a single block */
- FT_FREE( font->subfonts[0] );
- }
-
- cff_encoding_done( &font->encoding );
- cff_charset_done( &font->charset, font->stream );
- cff_vstore_done( &font->vstore, memory );
-
- cff_subfont_done( memory, &font->top_font );
-
- CFF_Done_FD_Select( &font->fd_select, font->stream );
-
- FT_FREE( font->font_info );
-
- FT_FREE( font->font_name );
- FT_FREE( font->global_subrs );
- FT_FREE( font->strings );
- FT_FREE( font->string_pool );
-
- if ( font->cf2_instance.finalizer )
- {
- font->cf2_instance.finalizer( font->cf2_instance.data );
- FT_FREE( font->cf2_instance.data );
- }
- }
-
-
-/* END */
diff --git a/src/cff/cffload.h b/src/cff/cffload.h
deleted file mode 100644
index c745e8127..000000000
--- a/src/cff/cffload.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffload.h */
-/* */
-/* OpenType & CFF data/program tables loader (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CFFLOAD_H_
-#define CFFLOAD_H_
-
-
-#include <ft2build.h>
-#include "cfftypes.h"
-#include "cffparse.h"
-#include "cffobjs.h" /* for CFF_Face */
-
-
-FT_BEGIN_HEADER
-
- FT_LOCAL( FT_UShort )
- cff_get_standard_encoding( FT_UInt charcode );
-
-
- FT_LOCAL( FT_String* )
- cff_index_get_string( CFF_Font font,
- FT_UInt element );
-
- FT_LOCAL( FT_String* )
- cff_index_get_sid_string( CFF_Font font,
- FT_UInt sid );
-
-
- FT_LOCAL( FT_Error )
- cff_index_access_element( CFF_Index idx,
- FT_UInt element,
- FT_Byte** pbytes,
- FT_ULong* pbyte_len );
-
- FT_LOCAL( void )
- cff_index_forget_element( CFF_Index idx,
- FT_Byte** pbytes );
-
- FT_LOCAL( FT_String* )
- cff_index_get_name( CFF_Font font,
- FT_UInt element );
-
-
- FT_LOCAL( FT_UInt )
- cff_charset_cid_to_gindex( CFF_Charset charset,
- FT_UInt cid );
-
-
- FT_LOCAL( FT_UInt32 )
- cff_random( FT_UInt32 r );
-
- FT_LOCAL( FT_Error )
- cff_font_load( FT_Library library,
- FT_Stream stream,
- FT_Int face_index,
- CFF_Font font,
- CFF_Face face,
- FT_Bool pure_cff,
- FT_Bool cff2 );
-
- FT_LOCAL( void )
- cff_font_done( CFF_Font font );
-
-
- FT_LOCAL( FT_Error )
- cff_load_private_dict( CFF_Font font,
- CFF_SubFont subfont,
- FT_UInt lenNDV,
- FT_Fixed* NDV );
-
- FT_LOCAL( FT_Byte )
- cff_fd_select_get( CFF_FDSelect fdselect,
- FT_UInt glyph_index );
-
- FT_LOCAL( FT_Bool )
- cff_blend_check_vector( CFF_Blend blend,
- FT_UInt vsindex,
- FT_UInt lenNDV,
- FT_Fixed* NDV );
-
- FT_LOCAL( FT_Error )
- cff_blend_build_vector( CFF_Blend blend,
- FT_UInt vsindex,
- FT_UInt lenNDV,
- FT_Fixed* NDV );
-
- FT_LOCAL( void )
- cff_blend_clear( CFF_SubFont subFont );
-
- FT_LOCAL( FT_Error )
- cff_blend_doBlend( CFF_SubFont subfont,
- CFF_Parser parser,
- FT_UInt numBlends );
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_LOCAL( FT_Error )
- cff_get_var_blend( CFF_Face face,
- FT_UInt *num_coords,
- FT_Fixed* *coords,
- FT_Fixed* *normalizedcoords,
- FT_MM_Var* *mm_var );
-
- FT_LOCAL( void )
- cff_done_blend( CFF_Face face );
-#endif
-
-
-FT_END_HEADER
-
-#endif /* CFFLOAD_H_ */
-
-
-/* END */
diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c
deleted file mode 100644
index 61613933f..000000000
--- a/src/cff/cffobjs.c
+++ /dev/null
@@ -1,1208 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffobjs.c */
-/* */
-/* OpenType objects manager (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_STREAM_H
-#include FT_ERRORS_H
-#include FT_TRUETYPE_IDS_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_INTERNAL_SFNT_H
-#include FT_CFF_DRIVER_H
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include FT_MULTIPLE_MASTERS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#endif
-
-#include "cffobjs.h"
-#include "cffload.h"
-#include "cffcmap.h"
-#include "cffpic.h"
-
-#include "cfferrs.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cffobjs
-
-
- /*************************************************************************/
- /* */
- /* SIZE FUNCTIONS */
- /* */
- /*************************************************************************/
-
-
- static PSH_Globals_Funcs
- cff_size_get_globals_funcs( CFF_Size size )
- {
- CFF_Face face = (CFF_Face)size->root.face;
- CFF_Font font = (CFF_Font)face->extra.data;
- PSHinter_Service pshinter = font->pshinter;
- FT_Module module;
-
-
- module = FT_Get_Module( size->root.face->driver->root.library,
- "pshinter" );
- return ( module && pshinter && pshinter->get_globals_funcs )
- ? pshinter->get_globals_funcs( module )
- : 0;
- }
-
-
- FT_LOCAL_DEF( void )
- cff_size_done( FT_Size cffsize ) /* CFF_Size */
- {
- FT_Memory memory = cffsize->face->memory;
- CFF_Size size = (CFF_Size)cffsize;
- CFF_Face face = (CFF_Face)size->root.face;
- CFF_Font font = (CFF_Font)face->extra.data;
- CFF_Internal internal = (CFF_Internal)cffsize->internal->module_data;
-
-
- if ( internal )
- {
- PSH_Globals_Funcs funcs;
-
-
- funcs = cff_size_get_globals_funcs( size );
- if ( funcs )
- {
- FT_UInt i;
-
-
- funcs->destroy( internal->topfont );
-
- for ( i = font->num_subfonts; i > 0; i-- )
- funcs->destroy( internal->subfonts[i - 1] );
- }
-
- FT_FREE( internal );
- }
- }
-
-
- /* CFF and Type 1 private dictionaries have slightly different */
- /* structures; we need to synthesize a Type 1 dictionary on the fly */
-
- static void
- cff_make_private_dict( CFF_SubFont subfont,
- PS_Private priv )
- {
- CFF_Private cpriv = &subfont->private_dict;
- FT_UInt n, count;
-
-
- FT_ZERO( priv );
-
- count = priv->num_blue_values = cpriv->num_blue_values;
- for ( n = 0; n < count; n++ )
- priv->blue_values[n] = (FT_Short)cpriv->blue_values[n];
-
- count = priv->num_other_blues = cpriv->num_other_blues;
- for ( n = 0; n < count; n++ )
- priv->other_blues[n] = (FT_Short)cpriv->other_blues[n];
-
- count = priv->num_family_blues = cpriv->num_family_blues;
- for ( n = 0; n < count; n++ )
- priv->family_blues[n] = (FT_Short)cpriv->family_blues[n];
-
- count = priv->num_family_other_blues = cpriv->num_family_other_blues;
- for ( n = 0; n < count; n++ )
- priv->family_other_blues[n] = (FT_Short)cpriv->family_other_blues[n];
-
- priv->blue_scale = cpriv->blue_scale;
- priv->blue_shift = (FT_Int)cpriv->blue_shift;
- priv->blue_fuzz = (FT_Int)cpriv->blue_fuzz;
-
- priv->standard_width[0] = (FT_UShort)cpriv->standard_width;
- priv->standard_height[0] = (FT_UShort)cpriv->standard_height;
-
- count = priv->num_snap_widths = cpriv->num_snap_widths;
- for ( n = 0; n < count; n++ )
- priv->snap_widths[n] = (FT_Short)cpriv->snap_widths[n];
-
- count = priv->num_snap_heights = cpriv->num_snap_heights;
- for ( n = 0; n < count; n++ )
- priv->snap_heights[n] = (FT_Short)cpriv->snap_heights[n];
-
- priv->force_bold = cpriv->force_bold;
- priv->language_group = cpriv->language_group;
- priv->lenIV = cpriv->lenIV;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- cff_size_init( FT_Size cffsize ) /* CFF_Size */
- {
- CFF_Size size = (CFF_Size)cffsize;
- FT_Error error = FT_Err_Ok;
- PSH_Globals_Funcs funcs = cff_size_get_globals_funcs( size );
-
-
- if ( funcs )
- {
- CFF_Face face = (CFF_Face)cffsize->face;
- CFF_Font font = (CFF_Font)face->extra.data;
- CFF_Internal internal = NULL;
-
- PS_PrivateRec priv;
- FT_Memory memory = cffsize->face->memory;
-
- FT_UInt i;
-
-
- if ( FT_NEW( internal ) )
- goto Exit;
-
- cff_make_private_dict( &font->top_font, &priv );
- error = funcs->create( cffsize->face->memory, &priv,
- &internal->topfont );
- if ( error )
- goto Exit;
-
- for ( i = font->num_subfonts; i > 0; i-- )
- {
- CFF_SubFont sub = font->subfonts[i - 1];
-
-
- cff_make_private_dict( sub, &priv );
- error = funcs->create( cffsize->face->memory, &priv,
- &internal->subfonts[i - 1] );
- if ( error )
- goto Exit;
- }
-
- cffsize->internal->module_data = internal;
- }
-
- size->strike_index = 0xFFFFFFFFUL;
-
- Exit:
- return error;
- }
-
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-
- FT_LOCAL_DEF( FT_Error )
- cff_size_select( FT_Size size,
- FT_ULong strike_index )
- {
- CFF_Size cffsize = (CFF_Size)size;
- PSH_Globals_Funcs funcs;
-
-
- cffsize->strike_index = strike_index;
-
- FT_Select_Metrics( size->face, strike_index );
-
- funcs = cff_size_get_globals_funcs( cffsize );
-
- if ( funcs )
- {
- CFF_Face face = (CFF_Face)size->face;
- CFF_Font font = (CFF_Font)face->extra.data;
- CFF_Internal internal = (CFF_Internal)size->internal->module_data;
-
- FT_Long top_upm = (FT_Long)font->top_font.font_dict.units_per_em;
- FT_UInt i;
-
-
- funcs->set_scale( internal->topfont,
- size->metrics.x_scale, size->metrics.y_scale,
- 0, 0 );
-
- for ( i = font->num_subfonts; i > 0; i-- )
- {
- CFF_SubFont sub = font->subfonts[i - 1];
- FT_Long sub_upm = (FT_Long)sub->font_dict.units_per_em;
- FT_Pos x_scale, y_scale;
-
-
- if ( top_upm != sub_upm )
- {
- x_scale = FT_MulDiv( size->metrics.x_scale, top_upm, sub_upm );
- y_scale = FT_MulDiv( size->metrics.y_scale, top_upm, sub_upm );
- }
- else
- {
- x_scale = size->metrics.x_scale;
- y_scale = size->metrics.y_scale;
- }
-
- funcs->set_scale( internal->subfonts[i - 1],
- x_scale, y_scale, 0, 0 );
- }
- }
-
- return FT_Err_Ok;
- }
-
-#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
-
-
- FT_LOCAL_DEF( FT_Error )
- cff_size_request( FT_Size size,
- FT_Size_Request req )
- {
- CFF_Size cffsize = (CFF_Size)size;
- PSH_Globals_Funcs funcs;
-
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-
- if ( FT_HAS_FIXED_SIZES( size->face ) )
- {
- CFF_Face cffface = (CFF_Face)size->face;
- SFNT_Service sfnt = (SFNT_Service)cffface->sfnt;
- FT_ULong strike_index;
-
-
- if ( sfnt->set_sbit_strike( cffface, req, &strike_index ) )
- cffsize->strike_index = 0xFFFFFFFFUL;
- else
- return cff_size_select( size, strike_index );
- }
-
-#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
-
- FT_Request_Metrics( size->face, req );
-
- funcs = cff_size_get_globals_funcs( cffsize );
-
- if ( funcs )
- {
- CFF_Face cffface = (CFF_Face)size->face;
- CFF_Font font = (CFF_Font)cffface->extra.data;
- CFF_Internal internal = (CFF_Internal)size->internal->module_data;
-
- FT_Long top_upm = (FT_Long)font->top_font.font_dict.units_per_em;
- FT_UInt i;
-
-
- funcs->set_scale( internal->topfont,
- size->metrics.x_scale, size->metrics.y_scale,
- 0, 0 );
-
- for ( i = font->num_subfonts; i > 0; i-- )
- {
- CFF_SubFont sub = font->subfonts[i - 1];
- FT_Long sub_upm = (FT_Long)sub->font_dict.units_per_em;
- FT_Pos x_scale, y_scale;
-
-
- if ( top_upm != sub_upm )
- {
- x_scale = FT_MulDiv( size->metrics.x_scale, top_upm, sub_upm );
- y_scale = FT_MulDiv( size->metrics.y_scale, top_upm, sub_upm );
- }
- else
- {
- x_scale = size->metrics.x_scale;
- y_scale = size->metrics.y_scale;
- }
-
- funcs->set_scale( internal->subfonts[i - 1],
- x_scale, y_scale, 0, 0 );
- }
- }
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* SLOT FUNCTIONS */
- /* */
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- cff_slot_done( FT_GlyphSlot slot )
- {
- slot->internal->glyph_hints = NULL;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- cff_slot_init( FT_GlyphSlot slot )
- {
- CFF_Face face = (CFF_Face)slot->face;
- CFF_Font font = (CFF_Font)face->extra.data;
- PSHinter_Service pshinter = font->pshinter;
-
-
- if ( pshinter )
- {
- FT_Module module;
-
-
- module = FT_Get_Module( slot->face->driver->root.library,
- "pshinter" );
- if ( module )
- {
- T2_Hints_Funcs funcs;
-
-
- funcs = pshinter->get_t2_funcs( module );
- slot->internal->glyph_hints = (void*)funcs;
- }
- }
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* FACE FUNCTIONS */
- /* */
- /*************************************************************************/
-
- static FT_String*
- cff_strcpy( FT_Memory memory,
- const FT_String* source )
- {
- FT_Error error;
- FT_String* result;
-
-
- (void)FT_STRDUP( result, source );
-
- FT_UNUSED( error );
-
- return result;
- }
-
-
- /* Strip all subset prefixes of the form `ABCDEF+'. Usually, there */
- /* is only one, but font names like `APCOOG+JFABTD+FuturaBQ-Bold' */
- /* have been seen in the wild. */
-
- static void
- remove_subset_prefix( FT_String* name )
- {
- FT_Int32 idx = 0;
- FT_Int32 length = (FT_Int32)strlen( name ) + 1;
- FT_Bool continue_search = 1;
-
-
- while ( continue_search )
- {
- if ( length >= 7 && name[6] == '+' )
- {
- for ( idx = 0; idx < 6; idx++ )
- {
- /* ASCII uppercase letters */
- if ( !( 'A' <= name[idx] && name[idx] <= 'Z' ) )
- continue_search = 0;
- }
-
- if ( continue_search )
- {
- for ( idx = 7; idx < length; idx++ )
- name[idx - 7] = name[idx];
- length -= 7;
- }
- }
- else
- continue_search = 0;
- }
- }
-
-
- /* Remove the style part from the family name (if present). */
-
- static void
- remove_style( FT_String* family_name,
- const FT_String* style_name )
- {
- FT_Int32 family_name_length, style_name_length;
-
-
- family_name_length = (FT_Int32)strlen( family_name );
- style_name_length = (FT_Int32)strlen( style_name );
-
- if ( family_name_length > style_name_length )
- {
- FT_Int idx;
-
-
- for ( idx = 1; idx <= style_name_length; idx++ )
- {
- if ( family_name[family_name_length - idx] !=
- style_name[style_name_length - idx] )
- break;
- }
-
- if ( idx > style_name_length )
- {
- /* family_name ends with style_name; remove it */
- idx = family_name_length - style_name_length - 1;
-
- /* also remove special characters */
- /* between real family name and style */
- while ( idx > 0 &&
- ( family_name[idx] == '-' ||
- family_name[idx] == ' ' ||
- family_name[idx] == '_' ||
- family_name[idx] == '+' ) )
- idx--;
-
- if ( idx > 0 )
- family_name[idx + 1] = '\0';
- }
- }
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- cff_face_init( FT_Stream stream,
- FT_Face cffface, /* CFF_Face */
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- CFF_Face face = (CFF_Face)cffface;
- FT_Error error;
- SFNT_Service sfnt;
- FT_Service_PsCMaps psnames;
- PSHinter_Service pshinter;
- FT_Bool pure_cff = 1;
- FT_Bool cff2 = 0;
- FT_Bool sfnt_format = 0;
- FT_Library library = cffface->driver->root.library;
-
-
- sfnt = (SFNT_Service)FT_Get_Module_Interface(
- library, "sfnt" );
- if ( !sfnt )
- {
- FT_ERROR(( "cff_face_init: cannot access `sfnt' module\n" ));
- error = FT_THROW( Missing_Module );
- goto Exit;
- }
-
- FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
-
- pshinter = (PSHinter_Service)FT_Get_Module_Interface(
- library, "pshinter" );
-
- FT_TRACE2(( "CFF driver\n" ));
-
- /* create input stream from resource */
- if ( FT_STREAM_SEEK( 0 ) )
- goto Exit;
-
- /* check whether we have a valid OpenType file */
- FT_TRACE2(( " " ));
- error = sfnt->init_face( stream, face, face_index, num_params, params );
- if ( !error )
- {
- if ( face->format_tag != TTAG_OTTO ) /* `OTTO'; OpenType/CFF font */
- {
- FT_TRACE2(( " not an OpenType/CFF font\n" ));
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
-
- /* if we are performing a simple font format check, exit immediately */
- if ( face_index < 0 )
- return FT_Err_Ok;
-
- sfnt_format = 1;
-
- /* now, the font can be either an OpenType/CFF font, or an SVG CEF */
- /* font; in the latter case it doesn't have a `head' table */
- error = face->goto_table( face, TTAG_head, stream, 0 );
- if ( !error )
- {
- pure_cff = 0;
-
- /* load font directory */
- error = sfnt->load_face( stream, face, face_index,
- num_params, params );
- if ( error )
- goto Exit;
- }
- else
- {
- /* load the `cmap' table explicitly */
- error = sfnt->load_cmap( face, stream );
- if ( error )
- goto Exit;
- }
-
- /* now load the CFF part of the file; */
- /* give priority to CFF2 */
- error = face->goto_table( face, TTAG_CFF2, stream, 0 );
- if ( !error )
- {
- cff2 = 1;
- face->is_cff2 = cff2;
- }
-
- if ( FT_ERR_EQ( error, Table_Missing ) )
- error = face->goto_table( face, TTAG_CFF, stream, 0 );
-
- if ( error )
- goto Exit;
- }
- else
- {
- /* rewind to start of file; we are going to load a pure-CFF font */
- if ( FT_STREAM_SEEK( 0 ) )
- goto Exit;
- error = FT_Err_Ok;
- }
-
- /* now load and parse the CFF table in the file */
- {
- CFF_Font cff = NULL;
- CFF_FontRecDict dict;
- FT_Memory memory = cffface->memory;
- FT_Int32 flags;
- FT_UInt i;
-
-
- if ( FT_NEW( cff ) )
- goto Exit;
-
- face->extra.data = cff;
- error = cff_font_load( library,
- stream,
- face_index,
- cff,
- face,
- pure_cff,
- cff2 );
- if ( error )
- goto Exit;
-
- /* if we are performing a simple font format check, exit immediately */
- /* (this is here for pure CFF) */
- if ( face_index < 0 )
- {
- cffface->num_faces = (FT_Long)cff->num_faces;
- return FT_Err_Ok;
- }
-
- cff->pshinter = pshinter;
- cff->psnames = psnames;
-
- cffface->face_index = face_index & 0xFFFF;
-
- /* Complement the root flags with some interesting information. */
- /* Note that this is only necessary for pure CFF and CEF fonts; */
- /* SFNT based fonts use the `name' table instead. */
-
- cffface->num_glyphs = (FT_Long)cff->num_glyphs;
-
- dict = &cff->top_font.font_dict;
-
- /* we need the `PSNames' module for CFF and CEF formats */
- /* which aren't CID-keyed */
- if ( dict->cid_registry == 0xFFFFU && !psnames )
- {
- FT_ERROR(( "cff_face_init:"
- " cannot open CFF & CEF fonts\n"
- " "
- " without the `PSNames' module\n" ));
- error = FT_THROW( Missing_Module );
- goto Exit;
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- {
- FT_UInt idx;
- FT_String* s;
-
-
- FT_TRACE4(( "SIDs\n" ));
-
- /* dump string index, including default strings for convenience */
- for ( idx = 0; idx <= 390; idx++ )
- {
- s = cff_index_get_sid_string( cff, idx );
- if ( s )
- FT_TRACE4(( " %5d %s\n", idx, s ));
- }
-
- /* In Multiple Master CFFs, two SIDs hold the Normalize Design */
- /* Vector (NDV) and Convert Design Vector (CDV) charstrings, */
- /* which may contain NULL bytes in the middle of the data, too. */
- /* We thus access `cff->strings' directly. */
- for ( idx = 1; idx < cff->num_strings; idx++ )
- {
- FT_Byte* s1 = cff->strings[idx - 1];
- FT_Byte* s2 = cff->strings[idx];
- FT_PtrDist s1len = s2 - s1 - 1; /* without the final NULL byte */
- FT_PtrDist l;
-
-
- FT_TRACE4(( " %5d ", idx + 390 ));
- for ( l = 0; l < s1len; l++ )
- FT_TRACE4(( "%c", s1[l] ));
- FT_TRACE4(( "\n" ));
- }
-
- /* print last element */
- if ( cff->num_strings )
- {
- FT_Byte* s1 = cff->strings[cff->num_strings - 1];
- FT_Byte* s2 = cff->string_pool + cff->string_pool_size;
- FT_PtrDist s1len = s2 - s1 - 1;
- FT_PtrDist l;
-
-
- FT_TRACE4(( " %5d ", cff->num_strings + 390 ));
- for ( l = 0; l < s1len; l++ )
- FT_TRACE4(( "%c", s1[l] ));
- FT_TRACE4(( "\n" ));
- }
- }
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- {
- FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
-
- FT_Int instance_index = face_index >> 16;
-
-
- if ( FT_HAS_MULTIPLE_MASTERS( cffface ) &&
- mm &&
- instance_index > 0 )
- {
- FT_MM_Var* mm_var;
-
-
- error = mm->get_mm_var( cffface, NULL );
- if ( error )
- goto Exit;
-
- mm->get_var_blend( cffface, NULL, NULL, NULL, &mm_var );
-
- if ( mm_var->namedstyle )
- {
- FT_Var_Named_Style* named_style;
- FT_String* style_name;
-
-
- /* in `face_index', the instance index starts with value 1 */
- named_style = mm_var->namedstyle + instance_index - 1;
- error = sfnt->get_name( face,
- (FT_UShort)named_style->strid,
- &style_name );
- if ( error )
- goto Exit;
-
- /* set style name; if already set, replace it */
- if ( face->root.style_name )
- FT_FREE( face->root.style_name );
- face->root.style_name = style_name;
-
- /* finally, select the named instance */
- error = mm->set_var_design( cffface,
- mm_var->num_axis,
- named_style->coords );
- if ( error )
- goto Exit;
- }
- }
- }
-#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
-
- if ( !dict->has_font_matrix )
- dict->units_per_em = pure_cff ? 1000 : face->root.units_per_EM;
-
- /* Normalize the font matrix so that `matrix->yy' is 1; if */
- /* it is zero, we use `matrix->yx' instead. The scaling is */
- /* done with `units_per_em' then (at this point, it already */
- /* contains the scaling factor, but without normalization */
- /* of the matrix). */
- /* */
- /* Note that the offsets must be expressed in integer font */
- /* units. */
-
- {
- FT_Matrix* matrix = &dict->font_matrix;
- FT_Vector* offset = &dict->font_offset;
- FT_ULong* upm = &dict->units_per_em;
- FT_Fixed temp;
-
-
- temp = matrix->yy ? FT_ABS( matrix->yy )
- : FT_ABS( matrix->yx );
-
- if ( temp != 0x10000L )
- {
- *upm = (FT_ULong)FT_DivFix( (FT_Long)*upm, temp );
-
- matrix->xx = FT_DivFix( matrix->xx, temp );
- matrix->yx = FT_DivFix( matrix->yx, temp );
- matrix->xy = FT_DivFix( matrix->xy, temp );
- matrix->yy = FT_DivFix( matrix->yy, temp );
- offset->x = FT_DivFix( offset->x, temp );
- offset->y = FT_DivFix( offset->y, temp );
- }
-
- offset->x >>= 16;
- offset->y >>= 16;
- }
-
- for ( i = cff->num_subfonts; i > 0; i-- )
- {
- CFF_FontRecDict sub = &cff->subfonts[i - 1]->font_dict;
- CFF_FontRecDict top = &cff->top_font.font_dict;
-
- FT_Matrix* matrix;
- FT_Vector* offset;
- FT_ULong* upm;
- FT_Fixed temp;
-
-
- if ( sub->has_font_matrix )
- {
- FT_Long scaling;
-
-
- /* if we have a top-level matrix, */
- /* concatenate the subfont matrix */
-
- if ( top->has_font_matrix )
- {
- if ( top->units_per_em > 1 && sub->units_per_em > 1 )
- scaling = (FT_Long)FT_MIN( top->units_per_em,
- sub->units_per_em );
- else
- scaling = 1;
-
- FT_Matrix_Multiply_Scaled( &top->font_matrix,
- &sub->font_matrix,
- scaling );
- FT_Vector_Transform_Scaled( &sub->font_offset,
- &top->font_matrix,
- scaling );
-
- sub->units_per_em = (FT_ULong)
- FT_MulDiv( (FT_Long)sub->units_per_em,
- (FT_Long)top->units_per_em,
- scaling );
- }
- }
- else
- {
- sub->font_matrix = top->font_matrix;
- sub->font_offset = top->font_offset;
-
- sub->units_per_em = top->units_per_em;
- }
-
- matrix = &sub->font_matrix;
- offset = &sub->font_offset;
- upm = &sub->units_per_em;
-
- temp = matrix->yy ? FT_ABS( matrix->yy )
- : FT_ABS( matrix->yx );
-
-
- if ( temp != 0x10000L )
- {
- *upm = (FT_ULong)FT_DivFix( (FT_Long)*upm, temp );
-
- matrix->xx = FT_DivFix( matrix->xx, temp );
- matrix->yx = FT_DivFix( matrix->yx, temp );
- matrix->xy = FT_DivFix( matrix->xy, temp );
- matrix->yy = FT_DivFix( matrix->yy, temp );
- offset->x = FT_DivFix( offset->x, temp );
- offset->y = FT_DivFix( offset->y, temp );
- }
-
- offset->x >>= 16;
- offset->y >>= 16;
- }
-
- if ( pure_cff )
- {
- char* style_name = NULL;
-
-
- /* set up num_faces */
- cffface->num_faces = (FT_Long)cff->num_faces;
-
- /* compute number of glyphs */
- if ( dict->cid_registry != 0xFFFFU )
- cffface->num_glyphs = (FT_Long)( cff->charset.max_cid + 1 );
- else
- cffface->num_glyphs = (FT_Long)cff->charstrings_index.count;
-
- /* set global bbox, as well as EM size */
- cffface->bbox.xMin = dict->font_bbox.xMin >> 16;
- cffface->bbox.yMin = dict->font_bbox.yMin >> 16;
- /* no `U' suffix here to 0xFFFF! */
- cffface->bbox.xMax = ( dict->font_bbox.xMax + 0xFFFF ) >> 16;
- cffface->bbox.yMax = ( dict->font_bbox.yMax + 0xFFFF ) >> 16;
-
- cffface->units_per_EM = (FT_UShort)( dict->units_per_em );
-
- cffface->ascender = (FT_Short)( cffface->bbox.yMax );
- cffface->descender = (FT_Short)( cffface->bbox.yMin );
-
- cffface->height = (FT_Short)( ( cffface->units_per_EM * 12 ) / 10 );
- if ( cffface->height < cffface->ascender - cffface->descender )
- cffface->height = (FT_Short)( cffface->ascender - cffface->descender );
-
- cffface->underline_position =
- (FT_Short)( dict->underline_position >> 16 );
- cffface->underline_thickness =
- (FT_Short)( dict->underline_thickness >> 16 );
-
- /* retrieve font family & style name */
- cffface->family_name = cff_index_get_name(
- cff,
- (FT_UInt)( face_index & 0xFFFF ) );
- if ( cffface->family_name )
- {
- char* full = cff_index_get_sid_string( cff,
- dict->full_name );
- char* fullp = full;
- char* family = cffface->family_name;
- char* family_name = NULL;
-
-
- remove_subset_prefix( cffface->family_name );
-
- if ( dict->family_name )
- {
- family_name = cff_index_get_sid_string( cff,
- dict->family_name );
- if ( family_name )
- family = family_name;
- }
-
- /* We try to extract the style name from the full name. */
- /* We need to ignore spaces and dashes during the search. */
- if ( full && family )
- {
- while ( *fullp )
- {
- /* skip common characters at the start of both strings */
- if ( *fullp == *family )
- {
- family++;
- fullp++;
- continue;
- }
-
- /* ignore spaces and dashes in full name during comparison */
- if ( *fullp == ' ' || *fullp == '-' )
- {
- fullp++;
- continue;
- }
-
- /* ignore spaces and dashes in family name during comparison */
- if ( *family == ' ' || *family == '-' )
- {
- family++;
- continue;
- }
-
- if ( !*family && *fullp )
- {
- /* The full name begins with the same characters as the */
- /* family name, with spaces and dashes removed. In this */
- /* case, the remaining string in `fullp' will be used as */
- /* the style name. */
- style_name = cff_strcpy( memory, fullp );
-
- /* remove the style part from the family name (if present) */
- remove_style( cffface->family_name, style_name );
- }
- break;
- }
- }
- }
- else
- {
- char *cid_font_name =
- cff_index_get_sid_string( cff,
- dict->cid_font_name );
-
-
- /* do we have a `/FontName' for a CID-keyed font? */
- if ( cid_font_name )
- cffface->family_name = cff_strcpy( memory, cid_font_name );
- }
-
- if ( style_name )
- cffface->style_name = style_name;
- else
- /* assume "Regular" style if we don't know better */
- cffface->style_name = cff_strcpy( memory, (char *)"Regular" );
-
- /*******************************************************************/
- /* */
- /* Compute face flags. */
- /* */
- flags = FT_FACE_FLAG_SCALABLE | /* scalable outlines */
- FT_FACE_FLAG_HORIZONTAL | /* horizontal data */
- FT_FACE_FLAG_HINTER; /* has native hinter */
-
- if ( sfnt_format )
- flags |= FT_FACE_FLAG_SFNT;
-
- /* fixed width font? */
- if ( dict->is_fixed_pitch )
- flags |= FT_FACE_FLAG_FIXED_WIDTH;
-
- /* XXX: WE DO NOT SUPPORT KERNING METRICS IN THE GPOS TABLE FOR NOW */
-#if 0
- /* kerning available? */
- if ( face->kern_pairs )
- flags |= FT_FACE_FLAG_KERNING;
-#endif
-
- cffface->face_flags |= flags;
-
- /*******************************************************************/
- /* */
- /* Compute style flags. */
- /* */
- flags = 0;
-
- if ( dict->italic_angle )
- flags |= FT_STYLE_FLAG_ITALIC;
-
- {
- char *weight = cff_index_get_sid_string( cff,
- dict->weight );
-
-
- if ( weight )
- if ( !ft_strcmp( weight, "Bold" ) ||
- !ft_strcmp( weight, "Black" ) )
- flags |= FT_STYLE_FLAG_BOLD;
- }
-
- /* double check */
- if ( !(flags & FT_STYLE_FLAG_BOLD) && cffface->style_name )
- if ( !ft_strncmp( cffface->style_name, "Bold", 4 ) ||
- !ft_strncmp( cffface->style_name, "Black", 5 ) )
- flags |= FT_STYLE_FLAG_BOLD;
-
- cffface->style_flags = flags;
- }
-
-#ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES
- /* CID-keyed CFF fonts don't have glyph names -- the SFNT loader */
- /* has unset this flag because of the 3.0 `post' table. */
- if ( dict->cid_registry == 0xFFFFU )
- cffface->face_flags |= FT_FACE_FLAG_GLYPH_NAMES;
-#endif
-
- if ( dict->cid_registry != 0xFFFFU && pure_cff )
- cffface->face_flags |= FT_FACE_FLAG_CID_KEYED;
-
- /*******************************************************************/
- /* */
- /* Compute char maps. */
- /* */
-
- /* Try to synthesize a Unicode charmap if there is none available */
- /* already. If an OpenType font contains a Unicode "cmap", we */
- /* will use it, whatever be in the CFF part of the file. */
- {
- FT_CharMapRec cmaprec;
- FT_CharMap cmap;
- FT_UInt nn;
- CFF_Encoding encoding = &cff->encoding;
-
-
- for ( nn = 0; nn < (FT_UInt)cffface->num_charmaps; nn++ )
- {
- cmap = cffface->charmaps[nn];
-
- /* Windows Unicode? */
- if ( cmap->platform_id == TT_PLATFORM_MICROSOFT &&
- cmap->encoding_id == TT_MS_ID_UNICODE_CS )
- goto Skip_Unicode;
-
- /* Apple Unicode platform id? */
- if ( cmap->platform_id == TT_PLATFORM_APPLE_UNICODE )
- goto Skip_Unicode; /* Apple Unicode */
- }
-
- /* since CID-keyed fonts don't contain glyph names, we can't */
- /* construct a cmap */
- if ( pure_cff && cff->top_font.font_dict.cid_registry != 0xFFFFU )
- goto Exit;
-
- /* we didn't find a Unicode charmap -- synthesize one */
- cmaprec.face = cffface;
- cmaprec.platform_id = TT_PLATFORM_MICROSOFT;
- cmaprec.encoding_id = TT_MS_ID_UNICODE_CS;
- cmaprec.encoding = FT_ENCODING_UNICODE;
-
- nn = (FT_UInt)cffface->num_charmaps;
-
- error = FT_CMap_New( &CFF_CMAP_UNICODE_CLASS_REC_GET, NULL,
- &cmaprec, NULL );
- if ( error &&
- FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) )
- goto Exit;
- error = FT_Err_Ok;
-
- /* if no Unicode charmap was previously selected, select this one */
- if ( !cffface->charmap && nn != (FT_UInt)cffface->num_charmaps )
- cffface->charmap = cffface->charmaps[nn];
-
- Skip_Unicode:
- if ( encoding->count > 0 )
- {
- FT_CMap_Class clazz;
-
-
- cmaprec.face = cffface;
- cmaprec.platform_id = TT_PLATFORM_ADOBE; /* Adobe platform id */
-
- if ( encoding->offset == 0 )
- {
- cmaprec.encoding_id = TT_ADOBE_ID_STANDARD;
- cmaprec.encoding = FT_ENCODING_ADOBE_STANDARD;
- clazz = &CFF_CMAP_ENCODING_CLASS_REC_GET;
- }
- else if ( encoding->offset == 1 )
- {
- cmaprec.encoding_id = TT_ADOBE_ID_EXPERT;
- cmaprec.encoding = FT_ENCODING_ADOBE_EXPERT;
- clazz = &CFF_CMAP_ENCODING_CLASS_REC_GET;
- }
- else
- {
- cmaprec.encoding_id = TT_ADOBE_ID_CUSTOM;
- cmaprec.encoding = FT_ENCODING_ADOBE_CUSTOM;
- clazz = &CFF_CMAP_ENCODING_CLASS_REC_GET;
- }
-
- error = FT_CMap_New( clazz, NULL, &cmaprec, NULL );
- }
- }
- }
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- cff_face_done( FT_Face cffface ) /* CFF_Face */
- {
- CFF_Face face = (CFF_Face)cffface;
- FT_Memory memory;
- SFNT_Service sfnt;
-
-
- if ( !face )
- return;
-
- memory = cffface->memory;
- sfnt = (SFNT_Service)face->sfnt;
-
- if ( sfnt )
- sfnt->done_face( face );
-
- {
- CFF_Font cff = (CFF_Font)face->extra.data;
-
-
- if ( cff )
- {
- cff_font_done( cff );
- FT_FREE( face->extra.data );
- }
- }
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- cff_done_blend( face );
- face->blend = NULL;
-#endif
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- cff_driver_init( FT_Module module ) /* CFF_Driver */
- {
- CFF_Driver driver = (CFF_Driver)module;
-
- FT_UInt32 seed;
-
-
- /* set default property values, cf. `ftcffdrv.h' */
-#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
- driver->hinting_engine = FT_CFF_HINTING_FREETYPE;
-#else
- driver->hinting_engine = FT_CFF_HINTING_ADOBE;
-#endif
-
- driver->no_stem_darkening = TRUE;
-
- driver->darken_params[0] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1;
- driver->darken_params[1] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1;
- driver->darken_params[2] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2;
- driver->darken_params[3] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2;
- driver->darken_params[4] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3;
- driver->darken_params[5] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3;
- driver->darken_params[6] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4;
- driver->darken_params[7] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4;
-
- /* compute random seed from some memory addresses */
- seed = (FT_UInt32)( (FT_Offset)(char*)&seed ^
- (FT_Offset)(char*)&module ^
- (FT_Offset)(char*)module->memory );
- seed = seed ^ ( seed >> 10 ) ^ ( seed >> 20 );
-
- driver->random_seed = (FT_Int32)seed;
- if ( driver->random_seed < 0 )
- driver->random_seed = -driver->random_seed;
- else if ( driver->random_seed == 0 )
- driver->random_seed = 123456789;
-
- return FT_Err_Ok;
- }
-
-
- FT_LOCAL_DEF( void )
- cff_driver_done( FT_Module module ) /* CFF_Driver */
- {
- FT_UNUSED( module );
- }
-
-
-/* END */
diff --git a/src/cff/cffobjs.h b/src/cff/cffobjs.h
deleted file mode 100644
index 1dba694c5..000000000
--- a/src/cff/cffobjs.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffobjs.h */
-/* */
-/* OpenType objects manager (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CFFOBJS_H_
-#define CFFOBJS_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include "cfftypes.h"
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CFF_Driver */
- /* */
- /* <Description> */
- /* A handle to an OpenType driver object. */
- /* */
- typedef struct CFF_DriverRec_* CFF_Driver;
-
- typedef TT_Face CFF_Face;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CFF_Size */
- /* */
- /* <Description> */
- /* A handle to an OpenType size object. */
- /* */
- typedef struct CFF_SizeRec_
- {
- FT_SizeRec root;
- FT_ULong strike_index; /* 0xFFFFFFFF to indicate invalid */
-
- } CFF_SizeRec, *CFF_Size;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CFF_GlyphSlot */
- /* */
- /* <Description> */
- /* A handle to an OpenType glyph slot object. */
- /* */
- typedef struct CFF_GlyphSlotRec_
- {
- FT_GlyphSlotRec root;
-
- FT_Bool hint;
- FT_Bool scaled;
-
- FT_Fixed x_scale;
- FT_Fixed y_scale;
-
- } CFF_GlyphSlotRec, *CFF_GlyphSlot;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CFF_Internal */
- /* */
- /* <Description> */
- /* The interface to the `internal' field of `FT_Size'. */
- /* */
- typedef struct CFF_InternalRec_
- {
- PSH_Globals topfont;
- PSH_Globals subfonts[CFF_MAX_CID_FONTS];
-
- } CFF_InternalRec, *CFF_Internal;
-
-
- /*************************************************************************/
- /* */
- /* Subglyph transformation record. */
- /* */
- typedef struct CFF_Transform_
- {
- FT_Fixed xx, xy; /* transformation matrix coefficients */
- FT_Fixed yx, yy;
- FT_F26Dot6 ox, oy; /* offsets */
-
- } CFF_Transform;
-
-
- /***********************************************************************/
- /* */
- /* CFF driver class. */
- /* */
- typedef struct CFF_DriverRec_
- {
- FT_DriverRec root;
-
- FT_UInt hinting_engine;
- FT_Bool no_stem_darkening;
- FT_Int darken_params[8];
- FT_Int32 random_seed;
-
- } CFF_DriverRec;
-
-
- FT_LOCAL( FT_Error )
- cff_size_init( FT_Size size ); /* CFF_Size */
-
- FT_LOCAL( void )
- cff_size_done( FT_Size size ); /* CFF_Size */
-
- FT_LOCAL( FT_Error )
- cff_size_request( FT_Size size,
- FT_Size_Request req );
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-
- FT_LOCAL( FT_Error )
- cff_size_select( FT_Size size,
- FT_ULong strike_index );
-
-#endif
-
- FT_LOCAL( void )
- cff_slot_done( FT_GlyphSlot slot );
-
- FT_LOCAL( FT_Error )
- cff_slot_init( FT_GlyphSlot slot );
-
-
- /*************************************************************************/
- /* */
- /* Face functions */
- /* */
- FT_LOCAL( FT_Error )
- cff_face_init( FT_Stream stream,
- FT_Face face, /* CFF_Face */
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params );
-
- FT_LOCAL( void )
- cff_face_done( FT_Face face ); /* CFF_Face */
-
-
- /*************************************************************************/
- /* */
- /* Driver functions */
- /* */
- FT_LOCAL( FT_Error )
- cff_driver_init( FT_Module module ); /* CFF_Driver */
-
- FT_LOCAL( void )
- cff_driver_done( FT_Module module ); /* CFF_Driver */
-
-
-FT_END_HEADER
-
-#endif /* CFFOBJS_H_ */
-
-
-/* END */
diff --git a/src/cff/cffparse.c b/src/cff/cffparse.c
deleted file mode 100644
index ae55bbb85..000000000
--- a/src/cff/cffparse.c
+++ /dev/null
@@ -1,1681 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffparse.c */
-/* */
-/* CFF token stream parser (body) */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include "cffparse.h"
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-
-#include "cfferrs.h"
-#include "cffpic.h"
-#include "cffgload.h"
-#include "cffload.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cffparse
-
-
- FT_LOCAL_DEF( FT_Error )
- cff_parser_init( CFF_Parser parser,
- FT_UInt code,
- void* object,
- FT_Library library,
- FT_UInt stackSize,
- FT_UShort num_designs,
- FT_UShort num_axes )
- {
- FT_Memory memory = library->memory; /* for FT_NEW_ARRAY */
- FT_Error error; /* for FT_NEW_ARRAY */
-
-
- FT_ZERO( parser );
-
-#if 0
- parser->top = parser->stack;
-#endif
- parser->object_code = code;
- parser->object = object;
- parser->library = library;
- parser->num_designs = num_designs;
- parser->num_axes = num_axes;
-
- /* allocate the stack buffer */
- if ( FT_NEW_ARRAY( parser->stack, stackSize ) )
- {
- FT_FREE( parser->stack );
- goto Exit;
- }
-
- parser->stackSize = stackSize;
- parser->top = parser->stack; /* empty stack */
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- cff_parser_done( CFF_Parser parser )
- {
- FT_Memory memory = parser->library->memory; /* for FT_FREE */
-
-
- FT_FREE( parser->stack );
- }
-
-
- /* read an integer */
- static FT_Long
- cff_parse_integer( FT_Byte* start,
- FT_Byte* limit )
- {
- FT_Byte* p = start;
- FT_Int v = *p++;
- FT_Long val = 0;
-
-
- if ( v == 28 )
- {
- if ( p + 2 > limit )
- goto Bad;
-
- val = (FT_Short)( ( (FT_UShort)p[0] << 8 ) | p[1] );
- }
- else if ( v == 29 )
- {
- if ( p + 4 > limit )
- goto Bad;
-
- val = (FT_Long)( ( (FT_ULong)p[0] << 24 ) |
- ( (FT_ULong)p[1] << 16 ) |
- ( (FT_ULong)p[2] << 8 ) |
- (FT_ULong)p[3] );
- }
- else if ( v < 247 )
- {
- val = v - 139;
- }
- else if ( v < 251 )
- {
- if ( p + 1 > limit )
- goto Bad;
-
- val = ( v - 247 ) * 256 + p[0] + 108;
- }
- else
- {
- if ( p + 1 > limit )
- goto Bad;
-
- val = -( v - 251 ) * 256 - p[0] - 108;
- }
-
- Exit:
- return val;
-
- Bad:
- val = 0;
- FT_TRACE4(( "!!!END OF DATA:!!!" ));
- goto Exit;
- }
-
-
- static const FT_Long power_tens[] =
- {
- 1L,
- 10L,
- 100L,
- 1000L,
- 10000L,
- 100000L,
- 1000000L,
- 10000000L,
- 100000000L,
- 1000000000L
- };
-
- /* maximum values allowed for multiplying */
- /* with the corresponding `power_tens' element */
- static const FT_Long power_ten_limits[] =
- {
- FT_LONG_MAX / 1L,
- FT_LONG_MAX / 10L,
- FT_LONG_MAX / 100L,
- FT_LONG_MAX / 1000L,
- FT_LONG_MAX / 10000L,
- FT_LONG_MAX / 100000L,
- FT_LONG_MAX / 1000000L,
- FT_LONG_MAX / 10000000L,
- FT_LONG_MAX / 100000000L,
- FT_LONG_MAX / 1000000000L,
- };
-
-
- /* read a real */
- static FT_Fixed
- cff_parse_real( FT_Byte* start,
- FT_Byte* limit,
- FT_Long power_ten,
- FT_Long* scaling )
- {
- FT_Byte* p = start;
- FT_Int nib;
- FT_UInt phase;
-
- FT_Long result, number, exponent;
- FT_Int sign = 0, exponent_sign = 0, have_overflow = 0;
- FT_Long exponent_add, integer_length, fraction_length;
-
-
- if ( scaling )
- *scaling = 0;
-
- result = 0;
-
- number = 0;
- exponent = 0;
-
- exponent_add = 0;
- integer_length = 0;
- fraction_length = 0;
-
- /* First of all, read the integer part. */
- phase = 4;
-
- for (;;)
- {
- /* If we entered this iteration with phase == 4, we need to */
- /* read a new byte. This also skips past the initial 0x1E. */
- if ( phase )
- {
- p++;
-
- /* Make sure we don't read past the end. */
- if ( p >= limit )
- goto Bad;
- }
-
- /* Get the nibble. */
- nib = (FT_Int)( p[0] >> phase ) & 0xF;
- phase = 4 - phase;
-
- if ( nib == 0xE )
- sign = 1;
- else if ( nib > 9 )
- break;
- else
- {
- /* Increase exponent if we can't add the digit. */
- if ( number >= 0xCCCCCCCL )
- exponent_add++;
- /* Skip leading zeros. */
- else if ( nib || number )
- {
- integer_length++;
- number = number * 10 + nib;
- }
- }
- }
-
- /* Read fraction part, if any. */
- if ( nib == 0xA )
- for (;;)
- {
- /* If we entered this iteration with phase == 4, we need */
- /* to read a new byte. */
- if ( phase )
- {
- p++;
-
- /* Make sure we don't read past the end. */
- if ( p >= limit )
- goto Bad;
- }
-
- /* Get the nibble. */
- nib = ( p[0] >> phase ) & 0xF;
- phase = 4 - phase;
- if ( nib >= 10 )
- break;
-
- /* Skip leading zeros if possible. */
- if ( !nib && !number )
- exponent_add--;
- /* Only add digit if we don't overflow. */
- else if ( number < 0xCCCCCCCL && fraction_length < 9 )
- {
- fraction_length++;
- number = number * 10 + nib;
- }
- }
-
- /* Read exponent, if any. */
- if ( nib == 12 )
- {
- exponent_sign = 1;
- nib = 11;
- }
-
- if ( nib == 11 )
- {
- for (;;)
- {
- /* If we entered this iteration with phase == 4, */
- /* we need to read a new byte. */
- if ( phase )
- {
- p++;
-
- /* Make sure we don't read past the end. */
- if ( p >= limit )
- goto Bad;
- }
-
- /* Get the nibble. */
- nib = ( p[0] >> phase ) & 0xF;
- phase = 4 - phase;
- if ( nib >= 10 )
- break;
-
- /* Arbitrarily limit exponent. */
- if ( exponent > 1000 )
- have_overflow = 1;
- else
- exponent = exponent * 10 + nib;
- }
-
- if ( exponent_sign )
- exponent = -exponent;
- }
-
- if ( !number )
- goto Exit;
-
- if ( have_overflow )
- {
- if ( exponent_sign )
- goto Underflow;
- else
- goto Overflow;
- }
-
- /* We don't check `power_ten' and `exponent_add'. */
- exponent += power_ten + exponent_add;
-
- if ( scaling )
- {
- /* Only use `fraction_length'. */
- fraction_length += integer_length;
- exponent += integer_length;
-
- if ( fraction_length <= 5 )
- {
- if ( number > 0x7FFFL )
- {
- result = FT_DivFix( number, 10 );
- *scaling = exponent - fraction_length + 1;
- }
- else
- {
- if ( exponent > 0 )
- {
- FT_Long new_fraction_length, shift;
-
-
- /* Make `scaling' as small as possible. */
- new_fraction_length = FT_MIN( exponent, 5 );
- shift = new_fraction_length - fraction_length;
-
- if ( shift > 0 )
- {
- exponent -= new_fraction_length;
- number *= power_tens[shift];
- if ( number > 0x7FFFL )
- {
- number /= 10;
- exponent += 1;
- }
- }
- else
- exponent -= fraction_length;
- }
- else
- exponent -= fraction_length;
-
- result = (FT_Long)( (FT_ULong)number << 16 );
- *scaling = exponent;
- }
- }
- else
- {
- if ( ( number / power_tens[fraction_length - 5] ) > 0x7FFFL )
- {
- result = FT_DivFix( number, power_tens[fraction_length - 4] );
- *scaling = exponent - 4;
- }
- else
- {
- result = FT_DivFix( number, power_tens[fraction_length - 5] );
- *scaling = exponent - 5;
- }
- }
- }
- else
- {
- integer_length += exponent;
- fraction_length -= exponent;
-
- if ( integer_length > 5 )
- goto Overflow;
- if ( integer_length < -5 )
- goto Underflow;
-
- /* Remove non-significant digits. */
- if ( integer_length < 0 )
- {
- number /= power_tens[-integer_length];
- fraction_length += integer_length;
- }
-
- /* this can only happen if exponent was non-zero */
- if ( fraction_length == 10 )
- {
- number /= 10;
- fraction_length -= 1;
- }
-
- /* Convert into 16.16 format. */
- if ( fraction_length > 0 )
- {
- if ( ( number / power_tens[fraction_length] ) > 0x7FFFL )
- goto Exit;
-
- result = FT_DivFix( number, power_tens[fraction_length] );
- }
- else
- {
- number *= power_tens[-fraction_length];
-
- if ( number > 0x7FFFL )
- goto Overflow;
-
- result = (FT_Long)( (FT_ULong)number << 16 );
- }
- }
-
- Exit:
- if ( sign )
- result = -result;
-
- return result;
-
- Overflow:
- result = 0x7FFFFFFFL;
- FT_TRACE4(( "!!!OVERFLOW:!!!" ));
- goto Exit;
-
- Underflow:
- result = 0;
- FT_TRACE4(( "!!!UNDERFLOW:!!!" ));
- goto Exit;
-
- Bad:
- result = 0;
- FT_TRACE4(( "!!!END OF DATA:!!!" ));
- goto Exit;
- }
-
-
- /* read a number, either integer or real */
- FT_LOCAL_DEF( FT_Long )
- cff_parse_num( CFF_Parser parser,
- FT_Byte** d )
- {
- if ( **d == 30 )
- {
- /* binary-coded decimal is truncated to integer */
- return cff_parse_real( *d, parser->limit, 0, NULL ) >> 16;
- }
-
- else if ( **d == 255 )
- {
- /* 16.16 fixed point is used internally for CFF2 blend results. */
- /* Since these are trusted values, a limit check is not needed. */
-
- /* After the 255, 4 bytes give the number. */
- /* The blend value is converted to integer, with rounding; */
- /* due to the right-shift we don't need the lowest byte. */
-#if 0
- return (FT_Short)(
- ( ( ( (FT_UInt32)*( d[0] + 1 ) << 24 ) |
- ( (FT_UInt32)*( d[0] + 2 ) << 16 ) |
- ( (FT_UInt32)*( d[0] + 3 ) << 8 ) |
- (FT_UInt32)*( d[0] + 4 ) ) + 0x8000U ) >> 16 );
-#else
- return (FT_Short)(
- ( ( ( (FT_UInt32)*( d[0] + 1 ) << 16 ) |
- ( (FT_UInt32)*( d[0] + 2 ) << 8 ) |
- (FT_UInt32)*( d[0] + 3 ) ) + 0x80U ) >> 8 );
-#endif
- }
-
- else
- return cff_parse_integer( *d, parser->limit );
- }
-
-
- /* read a floating point number, either integer or real */
- static FT_Fixed
- do_fixed( CFF_Parser parser,
- FT_Byte** d,
- FT_Long scaling )
- {
- if ( **d == 30 )
- return cff_parse_real( *d, parser->limit, scaling, NULL );
- else
- {
- FT_Long val = cff_parse_integer( *d, parser->limit );
-
-
- if ( scaling )
- {
- if ( FT_ABS( val ) > power_ten_limits[scaling] )
- {
- val = val > 0 ? 0x7FFFFFFFL : -0x7FFFFFFFFL;
- goto Overflow;
- }
-
- val *= power_tens[scaling];
- }
-
- if ( val > 0x7FFF )
- {
- val = 0x7FFFFFFFL;
- goto Overflow;
- }
- else if ( val < -0x7FFF )
- {
- val = -0x7FFFFFFFL;
- goto Overflow;
- }
-
- return (FT_Long)( (FT_ULong)val << 16 );
-
- Overflow:
- FT_TRACE4(( "!!!OVERFLOW:!!!" ));
- return val;
- }
- }
-
-
- /* read a floating point number, either integer or real */
- static FT_Fixed
- cff_parse_fixed( CFF_Parser parser,
- FT_Byte** d )
- {
- return do_fixed( parser, d, 0 );
- }
-
-
- /* read a floating point number, either integer or real, */
- /* but return `10^scaling' times the number read in */
- static FT_Fixed
- cff_parse_fixed_scaled( CFF_Parser parser,
- FT_Byte** d,
- FT_Long scaling )
- {
- return do_fixed( parser, d, scaling );
- }
-
-
- /* read a floating point number, either integer or real, */
- /* and return it as precise as possible -- `scaling' returns */
- /* the scaling factor (as a power of 10) */
- static FT_Fixed
- cff_parse_fixed_dynamic( CFF_Parser parser,
- FT_Byte** d,
- FT_Long* scaling )
- {
- FT_ASSERT( scaling );
-
- if ( **d == 30 )
- return cff_parse_real( *d, parser->limit, 0, scaling );
- else
- {
- FT_Long number;
- FT_Int integer_length;
-
-
- number = cff_parse_integer( d[0], d[1] );
-
- if ( number > 0x7FFFL )
- {
- for ( integer_length = 5; integer_length < 10; integer_length++ )
- if ( number < power_tens[integer_length] )
- break;
-
- if ( ( number / power_tens[integer_length - 5] ) > 0x7FFFL )
- {
- *scaling = integer_length - 4;
- return FT_DivFix( number, power_tens[integer_length - 4] );
- }
- else
- {
- *scaling = integer_length - 5;
- return FT_DivFix( number, power_tens[integer_length - 5] );
- }
- }
- else
- {
- *scaling = 0;
- return (FT_Long)( (FT_ULong)number << 16 );
- }
- }
- }
-
-
- static FT_Error
- cff_parse_font_matrix( CFF_Parser parser )
- {
- CFF_FontRecDict dict = (CFF_FontRecDict)parser->object;
- FT_Matrix* matrix = &dict->font_matrix;
- FT_Vector* offset = &dict->font_offset;
- FT_ULong* upm = &dict->units_per_em;
- FT_Byte** data = parser->stack;
- FT_Error error = FT_ERR( Stack_Underflow );
-
-
- if ( parser->top >= parser->stack + 6 )
- {
- FT_Fixed values[6];
- FT_Long scalings[6];
-
- FT_Long min_scaling, max_scaling;
- int i;
-
-
- error = FT_Err_Ok;
-
- dict->has_font_matrix = TRUE;
-
- /* We expect a well-formed font matrix, this is, the matrix elements */
- /* `xx' and `yy' are of approximately the same magnitude. To avoid */
- /* loss of precision, we use the magnitude of the largest matrix */
- /* element to scale all other elements. The scaling factor is then */
- /* contained in the `units_per_em' value. */
-
- max_scaling = FT_LONG_MIN;
- min_scaling = FT_LONG_MAX;
-
- for ( i = 0; i < 6; i++ )
- {
- values[i] = cff_parse_fixed_dynamic( parser, data++, &scalings[i] );
- if ( values[i] )
- {
- if ( scalings[i] > max_scaling )
- max_scaling = scalings[i];
- if ( scalings[i] < min_scaling )
- min_scaling = scalings[i];
- }
- }
-
- if ( max_scaling < -9 ||
- max_scaling > 0 ||
- ( max_scaling - min_scaling ) < 0 ||
- ( max_scaling - min_scaling ) > 9 )
- {
- /* Return default matrix in case of unlikely values. */
-
- FT_TRACE1(( "cff_parse_font_matrix:"
- " strange scaling values (minimum %d, maximum %d),\n"
- " "
- " using default matrix\n", min_scaling, max_scaling ));
-
- matrix->xx = 0x10000L;
- matrix->yx = 0;
- matrix->xy = 0;
- matrix->yy = 0x10000L;
- offset->x = 0;
- offset->y = 0;
- *upm = 1;
-
- goto Exit;
- }
-
- for ( i = 0; i < 6; i++ )
- {
- FT_Fixed value = values[i];
- FT_Long divisor, half_divisor;
-
-
- if ( !value )
- continue;
-
- divisor = power_tens[max_scaling - scalings[i]];
- half_divisor = divisor >> 1;
-
- if ( value < 0 )
- {
- if ( FT_LONG_MIN + half_divisor < value )
- values[i] = ( value - half_divisor ) / divisor;
- else
- values[i] = FT_LONG_MIN / divisor;
- }
- else
- {
- if ( FT_LONG_MAX - half_divisor > value )
- values[i] = ( value + half_divisor ) / divisor;
- else
- values[i] = FT_LONG_MAX / divisor;
- }
- }
-
- matrix->xx = values[0];
- matrix->yx = values[1];
- matrix->xy = values[2];
- matrix->yy = values[3];
- offset->x = values[4];
- offset->y = values[5];
-
- *upm = (FT_ULong)power_tens[-max_scaling];
-
- FT_TRACE4(( " [%f %f %f %f %f %f]\n",
- (double)matrix->xx / *upm / 65536,
- (double)matrix->xy / *upm / 65536,
- (double)matrix->yx / *upm / 65536,
- (double)matrix->yy / *upm / 65536,
- (double)offset->x / *upm / 65536,
- (double)offset->y / *upm / 65536 ));
- }
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- cff_parse_font_bbox( CFF_Parser parser )
- {
- CFF_FontRecDict dict = (CFF_FontRecDict)parser->object;
- FT_BBox* bbox = &dict->font_bbox;
- FT_Byte** data = parser->stack;
- FT_Error error;
-
-
- error = FT_ERR( Stack_Underflow );
-
- if ( parser->top >= parser->stack + 4 )
- {
- bbox->xMin = FT_RoundFix( cff_parse_fixed( parser, data++ ) );
- bbox->yMin = FT_RoundFix( cff_parse_fixed( parser, data++ ) );
- bbox->xMax = FT_RoundFix( cff_parse_fixed( parser, data++ ) );
- bbox->yMax = FT_RoundFix( cff_parse_fixed( parser, data ) );
- error = FT_Err_Ok;
-
- FT_TRACE4(( " [%d %d %d %d]\n",
- bbox->xMin / 65536,
- bbox->yMin / 65536,
- bbox->xMax / 65536,
- bbox->yMax / 65536 ));
- }
-
- return error;
- }
-
-
- static FT_Error
- cff_parse_private_dict( CFF_Parser parser )
- {
- CFF_FontRecDict dict = (CFF_FontRecDict)parser->object;
- FT_Byte** data = parser->stack;
- FT_Error error;
-
-
- error = FT_ERR( Stack_Underflow );
-
- if ( parser->top >= parser->stack + 2 )
- {
- FT_Long tmp;
-
-
- tmp = cff_parse_num( parser, data++ );
- if ( tmp < 0 )
- {
- FT_ERROR(( "cff_parse_private_dict: Invalid dictionary size\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
- dict->private_size = (FT_ULong)tmp;
-
- tmp = cff_parse_num( parser, data );
- if ( tmp < 0 )
- {
- FT_ERROR(( "cff_parse_private_dict: Invalid dictionary offset\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
- dict->private_offset = (FT_ULong)tmp;
-
- FT_TRACE4(( " %lu %lu\n",
- dict->private_size, dict->private_offset ));
-
- error = FT_Err_Ok;
- }
-
- Fail:
- return error;
- }
-
-
- /* The `MultipleMaster' operator comes before any */
- /* top DICT operators that contain T2 charstrings. */
-
- static FT_Error
- cff_parse_multiple_master( CFF_Parser parser )
- {
- CFF_FontRecDict dict = (CFF_FontRecDict)parser->object;
- FT_Error error;
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- /* beautify tracing message */
- if ( ft_trace_levels[FT_COMPONENT] < 4 )
- FT_TRACE1(( "Multiple Master CFFs not supported yet,"
- " handling first master design only\n" ));
- else
- FT_TRACE1(( " (not supported yet,"
- " handling first master design only)\n" ));
-#endif
-
- error = FT_ERR( Stack_Underflow );
-
- /* currently, we handle only the first argument */
- if ( parser->top >= parser->stack + 5 )
- {
- FT_Long num_designs = cff_parse_num( parser, parser->stack );
-
-
- if ( num_designs > 16 || num_designs < 2 )
- {
- FT_ERROR(( "cff_parse_multiple_master:"
- " Invalid number of designs\n" ));
- error = FT_THROW( Invalid_File_Format );
- }
- else
- {
- dict->num_designs = (FT_UShort)num_designs;
- dict->num_axes = (FT_UShort)( parser->top - parser->stack - 4 );
-
- parser->num_designs = dict->num_designs;
- parser->num_axes = dict->num_axes;
-
- error = FT_Err_Ok;
- }
- }
-
- return error;
- }
-
-
- static FT_Error
- cff_parse_cid_ros( CFF_Parser parser )
- {
- CFF_FontRecDict dict = (CFF_FontRecDict)parser->object;
- FT_Byte** data = parser->stack;
- FT_Error error;
-
-
- error = FT_ERR( Stack_Underflow );
-
- if ( parser->top >= parser->stack + 3 )
- {
- dict->cid_registry = (FT_UInt)cff_parse_num( parser, data++ );
- dict->cid_ordering = (FT_UInt)cff_parse_num( parser, data++ );
- if ( **data == 30 )
- FT_TRACE1(( "cff_parse_cid_ros: real supplement is rounded\n" ));
- dict->cid_supplement = cff_parse_num( parser, data );
- if ( dict->cid_supplement < 0 )
- FT_TRACE1(( "cff_parse_cid_ros: negative supplement %d is found\n",
- dict->cid_supplement ));
- error = FT_Err_Ok;
-
- FT_TRACE4(( " %d %d %d\n",
- dict->cid_registry,
- dict->cid_ordering,
- dict->cid_supplement ));
- }
-
- return error;
- }
-
-
- static FT_Error
- cff_parse_vsindex( CFF_Parser parser )
- {
- /* vsindex operator can only be used in a Private DICT */
- CFF_Private priv = (CFF_Private)parser->object;
- FT_Byte** data = parser->stack;
- CFF_Blend blend;
- FT_Error error;
-
-
- if ( !priv || !priv->subfont )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- blend = &priv->subfont->blend;
-
- if ( blend->usedBV )
- {
- FT_ERROR(( " cff_parse_vsindex: vsindex not allowed after blend\n" ));
- error = FT_THROW( Syntax_Error );
- goto Exit;
- }
-
- priv->vsindex = (FT_UInt)cff_parse_num( parser, data++ );
-
- FT_TRACE4(( " %d\n", priv->vsindex ));
-
- error = FT_Err_Ok;
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- cff_parse_blend( CFF_Parser parser )
- {
- /* blend operator can only be used in a Private DICT */
- CFF_Private priv = (CFF_Private)parser->object;
- CFF_SubFont subFont;
- CFF_Blend blend;
- FT_UInt numBlends;
- FT_Error error;
-
-
- if ( !priv || !priv->subfont )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- subFont = priv->subfont;
- blend = &subFont->blend;
-
- if ( cff_blend_check_vector( blend,
- priv->vsindex,
- subFont->lenNDV,
- subFont->NDV ) )
- {
- error = cff_blend_build_vector( blend,
- priv->vsindex,
- subFont->lenNDV,
- subFont->NDV );
- if ( error )
- goto Exit;
- }
-
- numBlends = (FT_UInt)cff_parse_num( parser, parser->top - 1 );
- if ( numBlends > parser->stackSize )
- {
- FT_ERROR(( "cff_parse_blend: Invalid number of blends\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- FT_TRACE4(( " %d values blended\n", numBlends ));
-
- error = cff_blend_doBlend( subFont, parser, numBlends );
-
- blend->usedBV = TRUE;
-
- Exit:
- return error;
- }
-
-
- /* maxstack operator increases parser and operand stacks for CFF2 */
- static FT_Error
- cff_parse_maxstack( CFF_Parser parser )
- {
- /* maxstack operator can only be used in a Top DICT */
- CFF_FontRecDict dict = (CFF_FontRecDict)parser->object;
- FT_Byte** data = parser->stack;
- FT_Error error = FT_Err_Ok;
-
-
- if ( !dict )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- dict->maxstack = (FT_UInt)cff_parse_num( parser, data++ );
- if ( dict->maxstack > CFF2_MAX_STACK )
- dict->maxstack = CFF2_MAX_STACK;
- if ( dict->maxstack < CFF2_DEFAULT_STACK )
- dict->maxstack = CFF2_DEFAULT_STACK;
-
- FT_TRACE4(( " %d\n", dict->maxstack ));
-
- Exit:
- return error;
- }
-
-
-#define CFF_FIELD_NUM( code, name, id ) \
- CFF_FIELD( code, name, id, cff_kind_num )
-#define CFF_FIELD_FIXED( code, name, id ) \
- CFF_FIELD( code, name, id, cff_kind_fixed )
-#define CFF_FIELD_FIXED_1000( code, name, id ) \
- CFF_FIELD( code, name, id, cff_kind_fixed_thousand )
-#define CFF_FIELD_STRING( code, name, id ) \
- CFF_FIELD( code, name, id, cff_kind_string )
-#define CFF_FIELD_BOOL( code, name, id ) \
- CFF_FIELD( code, name, id, cff_kind_bool )
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-
-#undef CFF_FIELD
-#undef CFF_FIELD_DELTA
-
-
-#ifndef FT_DEBUG_LEVEL_TRACE
-
-
-#define CFF_FIELD_CALLBACK( code, name, id ) \
- { \
- cff_kind_callback, \
- code | CFFCODE, \
- 0, 0, \
- cff_parse_ ## name, \
- 0, 0 \
- },
-
-#define CFF_FIELD_BLEND( code, id ) \
- { \
- cff_kind_blend, \
- code | CFFCODE, \
- 0, 0, \
- cff_parse_blend, \
- 0, 0 \
- },
-
-#define CFF_FIELD( code, name, id, kind ) \
- { \
- kind, \
- code | CFFCODE, \
- FT_FIELD_OFFSET( name ), \
- FT_FIELD_SIZE( name ), \
- 0, 0, 0 \
- },
-
-#define CFF_FIELD_DELTA( code, name, max, id ) \
- { \
- cff_kind_delta, \
- code | CFFCODE, \
- FT_FIELD_OFFSET( name ), \
- FT_FIELD_SIZE_DELTA( name ), \
- 0, \
- max, \
- FT_FIELD_OFFSET( num_ ## name ) \
- },
-
- static const CFF_Field_Handler cff_field_handlers[] =
- {
-
-#include "cfftoken.h"
-
- { 0, 0, 0, 0, 0, 0, 0 }
- };
-
-
-#else /* FT_DEBUG_LEVEL_TRACE */
-
-
-
-#define CFF_FIELD_CALLBACK( code, name, id ) \
- { \
- cff_kind_callback, \
- code | CFFCODE, \
- 0, 0, \
- cff_parse_ ## name, \
- 0, 0, \
- id \
- },
-
-#define CFF_FIELD_BLEND( code, id ) \
- { \
- cff_kind_blend, \
- code | CFFCODE, \
- 0, 0, \
- cff_parse_blend, \
- 0, 0, \
- id \
- },
-
-#define CFF_FIELD( code, name, id, kind ) \
- { \
- kind, \
- code | CFFCODE, \
- FT_FIELD_OFFSET( name ), \
- FT_FIELD_SIZE( name ), \
- 0, 0, 0, \
- id \
- },
-
-#define CFF_FIELD_DELTA( code, name, max, id ) \
- { \
- cff_kind_delta, \
- code | CFFCODE, \
- FT_FIELD_OFFSET( name ), \
- FT_FIELD_SIZE_DELTA( name ), \
- 0, \
- max, \
- FT_FIELD_OFFSET( num_ ## name ), \
- id \
- },
-
- static const CFF_Field_Handler cff_field_handlers[] =
- {
-
-#include "cfftoken.h"
-
- { 0, 0, 0, 0, 0, 0, 0, 0 }
- };
-
-
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-
- void
- FT_Destroy_Class_cff_field_handlers( FT_Library library,
- CFF_Field_Handler* clazz )
- {
- FT_Memory memory = library->memory;
-
-
- if ( clazz )
- FT_FREE( clazz );
- }
-
-
- FT_Error
- FT_Create_Class_cff_field_handlers( FT_Library library,
- CFF_Field_Handler** output_class )
- {
- CFF_Field_Handler* clazz = NULL;
- FT_Error error;
- FT_Memory memory = library->memory;
-
- int i = 0;
-
-
-#undef CFF_FIELD
-#define CFF_FIELD( code, name, id, kind ) i++;
-#undef CFF_FIELD_DELTA
-#define CFF_FIELD_DELTA( code, name, max, id ) i++;
-#undef CFF_FIELD_CALLBACK
-#define CFF_FIELD_CALLBACK( code, name, id ) i++;
-#undef CFF_FIELD_BLEND
-#define CFF_FIELD_BLEND( code, id ) i++;
-
-#include "cfftoken.h"
-
- i++; /* { 0, 0, 0, 0, 0, 0, 0 } */
-
- if ( FT_ALLOC( clazz, sizeof ( CFF_Field_Handler ) * i ) )
- return error;
-
- i = 0;
-
-
-#ifndef FT_DEBUG_LEVEL_TRACE
-
-
-#undef CFF_FIELD_CALLBACK
-#define CFF_FIELD_CALLBACK( code_, name_, id_ ) \
- clazz[i].kind = cff_kind_callback; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = 0; \
- clazz[i].size = 0; \
- clazz[i].reader = cff_parse_ ## name_; \
- clazz[i].array_max = 0; \
- clazz[i].count_offset = 0; \
- i++;
-
-#undef CFF_FIELD
-#define CFF_FIELD( code_, name_, id_, kind_ ) \
- clazz[i].kind = kind_; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = FT_FIELD_OFFSET( name_ ); \
- clazz[i].size = FT_FIELD_SIZE( name_ ); \
- clazz[i].reader = 0; \
- clazz[i].array_max = 0; \
- clazz[i].count_offset = 0; \
- i++; \
-
-#undef CFF_FIELD_DELTA
-#define CFF_FIELD_DELTA( code_, name_, max_, id_ ) \
- clazz[i].kind = cff_kind_delta; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = FT_FIELD_OFFSET( name_ ); \
- clazz[i].size = FT_FIELD_SIZE_DELTA( name_ ); \
- clazz[i].reader = 0; \
- clazz[i].array_max = max_; \
- clazz[i].count_offset = FT_FIELD_OFFSET( num_ ## name_ ); \
- i++;
-
-#undef CFF_FIELD_BLEND
-#define CFF_FIELD_BLEND( code_, id_ ) \
- clazz[i].kind = cff_kind_blend; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = 0; \
- clazz[i].size = 0; \
- clazz[i].reader = cff_parse_blend; \
- clazz[i].array_max = 0; \
- clazz[i].count_offset = 0; \
- i++;
-
-#include "cfftoken.h"
-
- clazz[i].kind = 0;
- clazz[i].code = 0;
- clazz[i].offset = 0;
- clazz[i].size = 0;
- clazz[i].reader = 0;
- clazz[i].array_max = 0;
- clazz[i].count_offset = 0;
-
-
-#else /* FT_DEBUG_LEVEL_TRACE */
-
-
-#undef CFF_FIELD_CALLBACK
-#define CFF_FIELD_CALLBACK( code_, name_, id_ ) \
- clazz[i].kind = cff_kind_callback; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = 0; \
- clazz[i].size = 0; \
- clazz[i].reader = cff_parse_ ## name_; \
- clazz[i].array_max = 0; \
- clazz[i].count_offset = 0; \
- clazz[i].id = id_; \
- i++;
-
-#undef CFF_FIELD
-#define CFF_FIELD( code_, name_, id_, kind_ ) \
- clazz[i].kind = kind_; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = FT_FIELD_OFFSET( name_ ); \
- clazz[i].size = FT_FIELD_SIZE( name_ ); \
- clazz[i].reader = 0; \
- clazz[i].array_max = 0; \
- clazz[i].count_offset = 0; \
- clazz[i].id = id_; \
- i++; \
-
-#undef CFF_FIELD_DELTA
-#define CFF_FIELD_DELTA( code_, name_, max_, id_ ) \
- clazz[i].kind = cff_kind_delta; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = FT_FIELD_OFFSET( name_ ); \
- clazz[i].size = FT_FIELD_SIZE_DELTA( name_ ); \
- clazz[i].reader = 0; \
- clazz[i].array_max = max_; \
- clazz[i].count_offset = FT_FIELD_OFFSET( num_ ## name_ ); \
- clazz[i].id = id_; \
- i++;
-
-#undef CFF_FIELD_BLEND
-#define CFF_FIELD_BLEND( code_, id_ ) \
- clazz[i].kind = cff_kind_blend; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = 0; \
- clazz[i].size = 0; \
- clazz[i].reader = cff_parse_blend; \
- clazz[i].array_max = 0; \
- clazz[i].count_offset = 0; \
- clazz[i].id = id_; \
- i++;
-
-#include "cfftoken.h"
-
- clazz[i].kind = 0;
- clazz[i].code = 0;
- clazz[i].offset = 0;
- clazz[i].size = 0;
- clazz[i].reader = 0;
- clazz[i].array_max = 0;
- clazz[i].count_offset = 0;
- clazz[i].id = 0;
-
-
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
-
- *output_class = clazz;
-
- return FT_Err_Ok;
- }
-
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
- FT_LOCAL_DEF( FT_Error )
- cff_parser_run( CFF_Parser parser,
- FT_Byte* start,
- FT_Byte* limit )
- {
- FT_Byte* p = start;
- FT_Error error = FT_Err_Ok;
- FT_Library library = parser->library;
- FT_UNUSED( library );
-
-
- parser->top = parser->stack;
- parser->start = start;
- parser->limit = limit;
- parser->cursor = start;
-
- while ( p < limit )
- {
- FT_UInt v = *p;
-
- /* Opcode 31 is legacy MM T2 operator, not a number. */
- /* Opcode 255 is reserved and should not appear in fonts; */
- /* it is used internally for CFF2 blends. */
- if ( v >= 27 && v != 31 && v != 255 )
- {
- /* it's a number; we will push its position on the stack */
- if ( (FT_UInt)( parser->top - parser->stack ) >= parser->stackSize )
- goto Stack_Overflow;
-
- *parser->top++ = p;
-
- /* now, skip it */
- if ( v == 30 )
- {
- /* skip real number */
- p++;
- for (;;)
- {
- /* An unterminated floating point number at the */
- /* end of a dictionary is invalid but harmless. */
- if ( p >= limit )
- goto Exit;
- v = p[0] >> 4;
- if ( v == 15 )
- break;
- v = p[0] & 0xF;
- if ( v == 15 )
- break;
- p++;
- }
- }
- else if ( v == 28 )
- p += 2;
- else if ( v == 29 )
- p += 4;
- else if ( v > 246 )
- p += 1;
- }
-#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
- else if ( v == 31 )
- {
- /* a Type 2 charstring */
-
- CFF_Decoder decoder;
- CFF_FontRec cff_rec;
- FT_Byte* charstring_base;
- FT_ULong charstring_len;
-
- FT_Fixed* stack;
- FT_Byte* q;
-
-
- charstring_base = ++p;
-
- /* search `endchar' operator */
- for (;;)
- {
- if ( p >= limit )
- goto Exit;
- if ( *p == 14 )
- break;
- p++;
- }
-
- charstring_len = (FT_ULong)( p - charstring_base ) + 1;
-
- /* construct CFF_Decoder object */
- FT_ZERO( &decoder );
- FT_ZERO( &cff_rec );
-
- cff_rec.top_font.font_dict.num_designs = parser->num_designs;
- cff_rec.top_font.font_dict.num_axes = parser->num_axes;
- decoder.cff = &cff_rec;
-
- error = cff_decoder_parse_charstrings( &decoder,
- charstring_base,
- charstring_len,
- 1 );
-
- /* Now copy the stack data in the temporary decoder object, */
- /* converting it back to charstring number representations */
- /* (this is ugly, I know). */
- /* */
- /* We overwrite the original top DICT charstring under the */
- /* assumption that the charstring representation of the result */
- /* of `cff_decoder_parse_charstrings' is shorter, which should */
- /* be always true. */
-
- q = charstring_base - 1;
- stack = decoder.stack;
-
- while ( stack < decoder.top )
- {
- FT_ULong num;
- FT_Bool neg;
-
-
- if ( (FT_UInt)( parser->top - parser->stack ) >= parser->stackSize )
- goto Stack_Overflow;
-
- *parser->top++ = q;
-
- if ( *stack < 0 )
- {
- num = (FT_ULong)-*stack;
- neg = 1;
- }
- else
- {
- num = (FT_ULong)*stack;
- neg = 0;
- }
-
- if ( num & 0xFFFFU )
- {
- if ( neg )
- num = (FT_ULong)-num;
-
- *q++ = 255;
- *q++ = ( num & 0xFF000000U ) >> 24;
- *q++ = ( num & 0x00FF0000U ) >> 16;
- *q++ = ( num & 0x0000FF00U ) >> 8;
- *q++ = num & 0x000000FFU;
- }
- else
- {
- num >>= 16;
-
- if ( neg )
- {
- if ( num <= 107 )
- *q++ = (FT_Byte)( 139 - num );
- else if ( num <= 1131 )
- {
- *q++ = (FT_Byte)( ( ( num - 108 ) >> 8 ) + 251 );
- *q++ = (FT_Byte)( ( num - 108 ) & 0xFF );
- }
- else
- {
- num = (FT_ULong)-num;
-
- *q++ = 28;
- *q++ = (FT_Byte)( num >> 8 );
- *q++ = (FT_Byte)( num & 0xFF );
- }
- }
- else
- {
- if ( num <= 107 )
- *q++ = (FT_Byte)( num + 139 );
- else if ( num <= 1131 )
- {
- *q++ = (FT_Byte)( ( ( num - 108 ) >> 8 ) + 247 );
- *q++ = (FT_Byte)( ( num - 108 ) & 0xFF );
- }
- else
- {
- *q++ = 28;
- *q++ = (FT_Byte)( num >> 8 );
- *q++ = (FT_Byte)( num & 0xFF );
- }
- }
- }
-
- stack++;
- }
- }
-#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
- else
- {
- /* This is not a number, hence it's an operator. Compute its code */
- /* and look for it in our current list. */
-
- FT_UInt code;
- FT_UInt num_args;
- const CFF_Field_Handler* field;
-
-
- if ( (FT_UInt)( parser->top - parser->stack ) >= parser->stackSize )
- goto Stack_Overflow;
-
- num_args = (FT_UInt)( parser->top - parser->stack );
- *parser->top = p;
- code = v;
-
- if ( v == 12 )
- {
- /* two byte operator */
- p++;
- if ( p >= limit )
- goto Syntax_Error;
-
- code = 0x100 | p[0];
- }
- code = code | parser->object_code;
-
- for ( field = CFF_FIELD_HANDLERS_GET; field->kind; field++ )
- {
- if ( field->code == (FT_Int)code )
- {
- /* we found our field's handler; read it */
- FT_Long val;
- FT_Byte* q = (FT_Byte*)parser->object + field->offset;
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE4(( " %s", field->id ));
-#endif
-
- /* check that we have enough arguments -- except for */
- /* delta encoded arrays, which can be empty */
- if ( field->kind != cff_kind_delta && num_args < 1 )
- goto Stack_Underflow;
-
- switch ( field->kind )
- {
- case cff_kind_bool:
- case cff_kind_string:
- case cff_kind_num:
- val = cff_parse_num( parser, parser->stack );
- goto Store_Number;
-
- case cff_kind_fixed:
- val = cff_parse_fixed( parser, parser->stack );
- goto Store_Number;
-
- case cff_kind_fixed_thousand:
- val = cff_parse_fixed_scaled( parser, parser->stack, 3 );
-
- Store_Number:
- switch ( field->size )
- {
- case (8 / FT_CHAR_BIT):
- *(FT_Byte*)q = (FT_Byte)val;
- break;
-
- case (16 / FT_CHAR_BIT):
- *(FT_Short*)q = (FT_Short)val;
- break;
-
- case (32 / FT_CHAR_BIT):
- *(FT_Int32*)q = (FT_Int)val;
- break;
-
- default: /* for 64-bit systems */
- *(FT_Long*)q = val;
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- switch ( field->kind )
- {
- case cff_kind_bool:
- FT_TRACE4(( " %s\n", val ? "true" : "false" ));
- break;
-
- case cff_kind_string:
- FT_TRACE4(( " %ld (SID)\n", val ));
- break;
-
- case cff_kind_num:
- FT_TRACE4(( " %ld\n", val ));
- break;
-
- case cff_kind_fixed:
- FT_TRACE4(( " %f\n", (double)val / 65536 ));
- break;
-
- case cff_kind_fixed_thousand:
- FT_TRACE4(( " %f\n", (double)val / 65536 / 1000 ));
-
- default:
- ; /* never reached */
- }
-#endif
-
- break;
-
- case cff_kind_delta:
- {
- FT_Byte* qcount = (FT_Byte*)parser->object +
- field->count_offset;
-
- FT_Byte** data = parser->stack;
-
-
- if ( num_args > field->array_max )
- num_args = field->array_max;
-
- FT_TRACE4(( " [" ));
-
- /* store count */
- *qcount = (FT_Byte)num_args;
-
- val = 0;
- while ( num_args > 0 )
- {
- val = ADD_LONG( val, cff_parse_num( parser, data++ ) );
- switch ( field->size )
- {
- case (8 / FT_CHAR_BIT):
- *(FT_Byte*)q = (FT_Byte)val;
- break;
-
- case (16 / FT_CHAR_BIT):
- *(FT_Short*)q = (FT_Short)val;
- break;
-
- case (32 / FT_CHAR_BIT):
- *(FT_Int32*)q = (FT_Int)val;
- break;
-
- default: /* for 64-bit systems */
- *(FT_Long*)q = val;
- }
-
- FT_TRACE4(( " %ld", val ));
-
- q += field->size;
- num_args--;
- }
-
- FT_TRACE4(( "]\n" ));
- }
- break;
-
- default: /* callback or blend */
- error = field->reader( parser );
- if ( error )
- goto Exit;
- }
- goto Found;
- }
- }
-
- /* this is an unknown operator, or it is unsupported; */
- /* we will ignore it for now. */
-
- Found:
- /* clear stack */
- /* TODO: could clear blend stack here, */
- /* but we don't have access to subFont */
- if ( field->kind != cff_kind_blend )
- parser->top = parser->stack;
- }
- p++;
- }
-
- Exit:
- return error;
-
- Stack_Overflow:
- error = FT_THROW( Invalid_Argument );
- goto Exit;
-
- Stack_Underflow:
- error = FT_THROW( Invalid_Argument );
- goto Exit;
-
- Syntax_Error:
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
-
-/* END */
diff --git a/src/cff/cffparse.h b/src/cff/cffparse.h
deleted file mode 100644
index 83d1bba45..000000000
--- a/src/cff/cffparse.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffparse.h */
-/* */
-/* CFF token stream parser (specification) */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CFFPARSE_H_
-#define CFFPARSE_H_
-
-
-#include <ft2build.h>
-#include "cfftypes.h"
-#include FT_INTERNAL_OBJECTS_H
-
-
-FT_BEGIN_HEADER
-
-
- /* CFF uses constant parser stack size; */
- /* CFF2 can increase from default 193 */
-#define CFF_MAX_STACK_DEPTH 96
-
- /*
- * There are plans to remove the `maxstack' operator in a forthcoming
- * revision of the CFF2 specification, increasing the (then static) stack
- * size to 513. By making the default stack size equal to the maximum
- * stack size, the operator is essentially disabled, which has the
- * desired effect in FreeType.
- */
-#define CFF2_MAX_STACK 513
-#define CFF2_DEFAULT_STACK 513
-
-#define CFF_CODE_TOPDICT 0x1000
-#define CFF_CODE_PRIVATE 0x2000
-#define CFF2_CODE_TOPDICT 0x3000
-#define CFF2_CODE_FONTDICT 0x4000
-#define CFF2_CODE_PRIVATE 0x5000
-
-
- typedef struct CFF_ParserRec_
- {
- FT_Library library;
- FT_Byte* start;
- FT_Byte* limit;
- FT_Byte* cursor;
-
- FT_Byte** stack;
- FT_Byte** top;
- FT_UInt stackSize; /* allocated size */
-
- FT_UInt object_code;
- void* object;
-
- FT_UShort num_designs; /* a copy of `CFF_FontRecDict->num_designs' */
- FT_UShort num_axes; /* a copy of `CFF_FontRecDict->num_axes' */
-
- } CFF_ParserRec, *CFF_Parser;
-
-
- FT_LOCAL( FT_Long )
- cff_parse_num( CFF_Parser parser,
- FT_Byte** d );
-
- FT_LOCAL( FT_Error )
- cff_parser_init( CFF_Parser parser,
- FT_UInt code,
- void* object,
- FT_Library library,
- FT_UInt stackSize,
- FT_UShort num_designs,
- FT_UShort num_axes );
-
- FT_LOCAL( void )
- cff_parser_done( CFF_Parser parser );
-
- FT_LOCAL( FT_Error )
- cff_parser_run( CFF_Parser parser,
- FT_Byte* start,
- FT_Byte* limit );
-
-
- enum
- {
- cff_kind_none = 0,
- cff_kind_num,
- cff_kind_fixed,
- cff_kind_fixed_thousand,
- cff_kind_string,
- cff_kind_bool,
- cff_kind_delta,
- cff_kind_callback,
- cff_kind_blend,
-
- cff_kind_max /* do not remove */
- };
-
-
- /* now generate handlers for the most simple fields */
- typedef FT_Error (*CFF_Field_Reader)( CFF_Parser parser );
-
- typedef struct CFF_Field_Handler_
- {
- int kind;
- int code;
- FT_UInt offset;
- FT_Byte size;
- CFF_Field_Reader reader;
- FT_UInt array_max;
- FT_UInt count_offset;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- const char* id;
-#endif
-
- } CFF_Field_Handler;
-
-
-FT_END_HEADER
-
-
-#endif /* CFFPARSE_H_ */
-
-
-/* END */
diff --git a/src/cff/cffpic.c b/src/cff/cffpic.c
deleted file mode 100644
index 4e9ba12b3..000000000
--- a/src/cff/cffpic.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffpic.c */
-/* */
-/* The FreeType position independent code services for cff module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "cffcmap.h"
-#include "cffpic.h"
-#include "cfferrs.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from cffdrivr.c */
- FT_Error
- FT_Create_Class_cff_services( FT_Library library,
- FT_ServiceDescRec** output_class );
- void
- FT_Destroy_Class_cff_services( FT_Library library,
- FT_ServiceDescRec* clazz );
- void
- FT_Init_Class_cff_service_ps_info( FT_Library library,
- FT_Service_PsInfoRec* clazz );
- void
- FT_Init_Class_cff_service_glyph_dict( FT_Library library,
- FT_Service_GlyphDictRec* clazz );
- void
- FT_Init_Class_cff_service_ps_name( FT_Library library,
- FT_Service_PsFontNameRec* clazz );
- void
- FT_Init_Class_cff_service_get_cmap_info( FT_Library library,
- FT_Service_TTCMapsRec* clazz );
- void
- FT_Init_Class_cff_service_cid_info( FT_Library library,
- FT_Service_CIDRec* clazz );
-
- /* forward declaration of PIC init functions from cffparse.c */
- FT_Error
- FT_Create_Class_cff_field_handlers( FT_Library library,
- CFF_Field_Handler** output_class );
- void
- FT_Destroy_Class_cff_field_handlers( FT_Library library,
- CFF_Field_Handler* clazz );
-
-
- void
- cff_driver_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->cff )
- {
- CffModulePIC* container = (CffModulePIC*)pic_container->cff;
-
-
- if ( container->cff_services )
- FT_Destroy_Class_cff_services( library,
- container->cff_services );
- container->cff_services = NULL;
- if ( container->cff_field_handlers )
- FT_Destroy_Class_cff_field_handlers(
- library, container->cff_field_handlers );
- container->cff_field_handlers = NULL;
- FT_FREE( container );
- pic_container->cff = NULL;
- }
- }
-
-
- FT_Error
- cff_driver_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- CffModulePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC ( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->cff = container;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- error = FT_Create_Class_cff_services( library,
- &container->cff_services );
- if ( error )
- goto Exit;
-
- error = FT_Create_Class_cff_field_handlers(
- library, &container->cff_field_handlers );
- if ( error )
- goto Exit;
-
- FT_Init_Class_cff_service_ps_info(
- library, &container->cff_service_ps_info );
- FT_Init_Class_cff_service_glyph_dict(
- library, &container->cff_service_glyph_dict );
- FT_Init_Class_cff_service_ps_name(
- library, &container->cff_service_ps_name );
- FT_Init_Class_cff_service_get_cmap_info(
- library, &container->cff_service_get_cmap_info );
- FT_Init_Class_cff_service_cid_info(
- library, &container->cff_service_cid_info );
- FT_Init_Class_cff_cmap_encoding_class_rec(
- library, &container->cff_cmap_encoding_class_rec );
- FT_Init_Class_cff_cmap_unicode_class_rec(
- library, &container->cff_cmap_unicode_class_rec );
-
- Exit:
- if ( error )
- cff_driver_class_pic_free( library );
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/cff/cffpic.h b/src/cff/cffpic.h
deleted file mode 100644
index 5db39cd62..000000000
--- a/src/cff/cffpic.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffpic.h */
-/* */
-/* The FreeType position independent code services for cff module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CFFPIC_H_
-#define CFFPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define CFF_SERVICE_PS_INFO_GET cff_service_ps_info
-#define CFF_SERVICE_GLYPH_DICT_GET cff_service_glyph_dict
-#define CFF_SERVICE_PS_NAME_GET cff_service_ps_name
-#define CFF_SERVICE_GET_CMAP_INFO_GET cff_service_get_cmap_info
-#define CFF_SERVICE_CID_INFO_GET cff_service_cid_info
-#define CFF_SERVICE_PROPERTIES_GET cff_service_properties
-#define CFF_SERVICES_GET cff_services
-#define CFF_SERVICE_MULTI_MASTERS_GET cff_service_multi_masters
-#define CFF_SERVICE_METRICS_VAR_GET cff_service_metrics_variations
-#define CFF_CMAP_ENCODING_CLASS_REC_GET cff_cmap_encoding_class_rec
-#define CFF_CMAP_UNICODE_CLASS_REC_GET cff_cmap_unicode_class_rec
-#define CFF_FIELD_HANDLERS_GET cff_field_handlers
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#include FT_SERVICE_GLYPH_DICT_H
-#include "cffparse.h"
-#include FT_SERVICE_POSTSCRIPT_INFO_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_TT_CMAP_H
-#include FT_SERVICE_CID_H
-#include FT_SERVICE_PROPERTIES_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_METRICS_VARIATIONS_H
-
-
-FT_BEGIN_HEADER
-
- typedef struct CffModulePIC_
- {
- FT_ServiceDescRec* cff_services;
- CFF_Field_Handler* cff_field_handlers;
- FT_Service_PsInfoRec cff_service_ps_info;
- FT_Service_GlyphDictRec cff_service_glyph_dict;
- FT_Service_PsFontNameRec cff_service_ps_name;
- FT_Service_TTCMapsRec cff_service_get_cmap_info;
- FT_Service_CIDRec cff_service_cid_info;
- FT_Service_PropertiesRec cff_service_properties;
- FT_Service_MultiMastersRec cff_service_multi_masters;
- FT_Service_MetricsVariationsRec cff_service_metrics_variations;
- FT_CMap_ClassRec cff_cmap_encoding_class_rec;
- FT_CMap_ClassRec cff_cmap_unicode_class_rec;
-
- } CffModulePIC;
-
-
-#define GET_PIC( lib ) \
- ( (CffModulePIC*)( (lib)->pic_container.cff ) )
-
-#define CFF_SERVICE_PS_INFO_GET \
- ( GET_PIC( library )->cff_service_ps_info )
-#define CFF_SERVICE_GLYPH_DICT_GET \
- ( GET_PIC( library )->cff_service_glyph_dict )
-#define CFF_SERVICE_PS_NAME_GET \
- ( GET_PIC( library )->cff_service_ps_name )
-#define CFF_SERVICE_GET_CMAP_INFO_GET \
- ( GET_PIC( library )->cff_service_get_cmap_info )
-#define CFF_SERVICE_CID_INFO_GET \
- ( GET_PIC( library )->cff_service_cid_info )
-#define CFF_SERVICE_PROPERTIES_GET \
- ( GET_PIC( library )->cff_service_properties )
-#define CFF_SERVICES_GET \
- ( GET_PIC( library )->cff_services )
-#define CFF_SERVICE_MULTI_MASTERS_GET \
- ( GET_PIC( library )->cff_service_multi_masters )
-#define CFF_SERVICE_METRICS_VAR_GET \
- ( GET_PIC( library )->cff_service_metrics_variations )
-#define CFF_CMAP_ENCODING_CLASS_REC_GET \
- ( GET_PIC( library )->cff_cmap_encoding_class_rec )
-#define CFF_CMAP_UNICODE_CLASS_REC_GET \
- ( GET_PIC( library )->cff_cmap_unicode_class_rec )
-#define CFF_FIELD_HANDLERS_GET \
- ( GET_PIC( library )->cff_field_handlers )
-
- /* see cffpic.c for the implementation */
- void
- cff_driver_class_pic_free( FT_Library library );
-
- FT_Error
- cff_driver_class_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* CFFPIC_H_ */
-
-
-/* END */
diff --git a/src/cff/cfftoken.h b/src/cff/cfftoken.h
deleted file mode 100644
index 3222e933f..000000000
--- a/src/cff/cfftoken.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/***************************************************************************/
-/* */
-/* cfftoken.h */
-/* */
-/* CFF token definitions (specification only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE CFF_FontRecDictRec
-
-#undef CFFCODE
-#define CFFCODE CFF_CODE_TOPDICT
-
- CFF_FIELD_STRING ( 0, version, "Version" )
- CFF_FIELD_STRING ( 1, notice, "Notice" )
- CFF_FIELD_STRING ( 0x100, copyright, "Copyright" )
- CFF_FIELD_STRING ( 2, full_name, "FullName" )
- CFF_FIELD_STRING ( 3, family_name, "FamilyName" )
- CFF_FIELD_STRING ( 4, weight, "Weight" )
- CFF_FIELD_BOOL ( 0x101, is_fixed_pitch, "isFixedPitch" )
- CFF_FIELD_FIXED ( 0x102, italic_angle, "ItalicAngle" )
- CFF_FIELD_FIXED ( 0x103, underline_position, "UnderlinePosition" )
- CFF_FIELD_FIXED ( 0x104, underline_thickness, "UnderlineThickness" )
- CFF_FIELD_NUM ( 0x105, paint_type, "PaintType" )
- CFF_FIELD_NUM ( 0x106, charstring_type, "CharstringType" )
- CFF_FIELD_CALLBACK( 0x107, font_matrix, "FontMatrix" )
- CFF_FIELD_NUM ( 13, unique_id, "UniqueID" )
- CFF_FIELD_CALLBACK( 5, font_bbox, "FontBBox" )
- CFF_FIELD_NUM ( 0x108, stroke_width, "StrokeWidth" )
-#if 0
- CFF_FIELD_DELTA ( 14, xuid, 16, "XUID" )
-#endif
- CFF_FIELD_NUM ( 15, charset_offset, "charset" )
- CFF_FIELD_NUM ( 16, encoding_offset, "Encoding" )
- CFF_FIELD_NUM ( 17, charstrings_offset, "CharStrings" )
- CFF_FIELD_CALLBACK( 18, private_dict, "Private" )
- CFF_FIELD_NUM ( 0x114, synthetic_base, "SyntheticBase" )
- CFF_FIELD_STRING ( 0x115, embedded_postscript, "PostScript" )
-
-#if 0
- CFF_FIELD_STRING ( 0x116, base_font_name, "BaseFontName" )
- CFF_FIELD_DELTA ( 0x117, base_font_blend, 16, "BaseFontBlend" )
-#endif
-
- /* the next two operators were removed from the Type2 specification */
- /* in version 16-March-2000 */
- CFF_FIELD_CALLBACK( 0x118, multiple_master, "MultipleMaster" )
-#if 0
- CFF_FIELD_CALLBACK( 0x11A, blend_axis_types, "BlendAxisTypes" )
-#endif
-
- CFF_FIELD_CALLBACK( 0x11E, cid_ros, "ROS" )
- CFF_FIELD_NUM ( 0x11F, cid_font_version, "CIDFontVersion" )
- CFF_FIELD_NUM ( 0x120, cid_font_revision, "CIDFontRevision" )
- CFF_FIELD_NUM ( 0x121, cid_font_type, "CIDFontType" )
- CFF_FIELD_NUM ( 0x122, cid_count, "CIDCount" )
- CFF_FIELD_NUM ( 0x123, cid_uid_base, "UIDBase" )
- CFF_FIELD_NUM ( 0x124, cid_fd_array_offset, "FDArray" )
- CFF_FIELD_NUM ( 0x125, cid_fd_select_offset, "FDSelect" )
- CFF_FIELD_STRING ( 0x126, cid_font_name, "FontName" )
-
-#if 0
- CFF_FIELD_NUM ( 0x127, chameleon, "Chameleon" )
-#endif
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE CFF_PrivateRec
-#undef CFFCODE
-#define CFFCODE CFF_CODE_PRIVATE
-
- CFF_FIELD_DELTA ( 6, blue_values, 14, "BlueValues" )
- CFF_FIELD_DELTA ( 7, other_blues, 10, "OtherBlues" )
- CFF_FIELD_DELTA ( 8, family_blues, 14, "FamilyBlues" )
- CFF_FIELD_DELTA ( 9, family_other_blues, 10, "FamilyOtherBlues" )
- CFF_FIELD_FIXED_1000( 0x109, blue_scale, "BlueScale" )
- CFF_FIELD_NUM ( 0x10A, blue_shift, "BlueShift" )
- CFF_FIELD_NUM ( 0x10B, blue_fuzz, "BlueFuzz" )
- CFF_FIELD_NUM ( 10, standard_width, "StdHW" )
- CFF_FIELD_NUM ( 11, standard_height, "StdVW" )
- CFF_FIELD_DELTA ( 0x10C, snap_widths, 13, "StemSnapH" )
- CFF_FIELD_DELTA ( 0x10D, snap_heights, 13, "StemSnapV" )
- CFF_FIELD_BOOL ( 0x10E, force_bold, "ForceBold" )
- CFF_FIELD_FIXED ( 0x10F, force_bold_threshold, "ForceBoldThreshold" )
- CFF_FIELD_NUM ( 0x110, lenIV, "lenIV" )
- CFF_FIELD_NUM ( 0x111, language_group, "LanguageGroup" )
- CFF_FIELD_FIXED ( 0x112, expansion_factor, "ExpansionFactor" )
- CFF_FIELD_NUM ( 0x113, initial_random_seed, "initialRandomSeed" )
- CFF_FIELD_NUM ( 19, local_subrs_offset, "Subrs" )
- CFF_FIELD_NUM ( 20, default_width, "defaultWidthX" )
- CFF_FIELD_NUM ( 21, nominal_width, "nominalWidthX" )
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE CFF_FontRecDictRec
-#undef CFFCODE
-#define CFFCODE CFF2_CODE_TOPDICT
-
- CFF_FIELD_CALLBACK( 0x107, font_matrix, "FontMatrix" )
- CFF_FIELD_NUM ( 17, charstrings_offset, "CharStrings" )
- CFF_FIELD_NUM ( 0x124, cid_fd_array_offset, "FDArray" )
- CFF_FIELD_NUM ( 0x125, cid_fd_select_offset, "FDSelect" )
- CFF_FIELD_NUM ( 24, vstore_offset, "vstore" )
- CFF_FIELD_CALLBACK( 25, maxstack, "maxstack" )
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE CFF_FontRecDictRec
-#undef CFFCODE
-#define CFFCODE CFF2_CODE_FONTDICT
-
- CFF_FIELD_CALLBACK( 18, private_dict, "Private" )
- CFF_FIELD_CALLBACK( 0x107, font_matrix, "FontMatrix" )
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE CFF_PrivateRec
-#undef CFFCODE
-#define CFFCODE CFF2_CODE_PRIVATE
-
- CFF_FIELD_DELTA ( 6, blue_values, 14, "BlueValues" )
- CFF_FIELD_DELTA ( 7, other_blues, 10, "OtherBlues" )
- CFF_FIELD_DELTA ( 8, family_blues, 14, "FamilyBlues" )
- CFF_FIELD_DELTA ( 9, family_other_blues, 10, "FamilyOtherBlues" )
- CFF_FIELD_FIXED_1000( 0x109, blue_scale, "BlueScale" )
- CFF_FIELD_NUM ( 0x10A, blue_shift, "BlueShift" )
- CFF_FIELD_NUM ( 0x10B, blue_fuzz, "BlueFuzz" )
- CFF_FIELD_NUM ( 10, standard_width, "StdHW" )
- CFF_FIELD_NUM ( 11, standard_height, "StdVW" )
- CFF_FIELD_DELTA ( 0x10C, snap_widths, 13, "StemSnapH" )
- CFF_FIELD_DELTA ( 0x10D, snap_heights, 13, "StemSnapV" )
- CFF_FIELD_NUM ( 0x111, language_group, "LanguageGroup" )
- CFF_FIELD_FIXED ( 0x112, expansion_factor, "ExpansionFactor" )
- CFF_FIELD_CALLBACK ( 22, vsindex, "vsindex" )
- CFF_FIELD_BLEND ( 23, "blend" )
- CFF_FIELD_NUM ( 19, local_subrs_offset, "Subrs" )
-
-
-/* END */
diff --git a/src/cff/cfftypes.h b/src/cff/cfftypes.h
deleted file mode 100644
index 74f569f08..000000000
--- a/src/cff/cfftypes.h
+++ /dev/null
@@ -1,405 +0,0 @@
-/***************************************************************************/
-/* */
-/* cfftypes.h */
-/* */
-/* Basic OpenType/CFF type definitions and interface (specification */
-/* only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CFFTYPES_H_
-#define CFFTYPES_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TYPE1_TABLES_H
-#include FT_INTERNAL_SERVICE_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* CFF_IndexRec */
- /* */
- /* <Description> */
- /* A structure used to model a CFF Index table. */
- /* */
- /* <Fields> */
- /* stream :: The source input stream. */
- /* */
- /* start :: The position of the first index byte in the */
- /* input stream. */
- /* */
- /* count :: The number of elements in the index. */
- /* */
- /* off_size :: The size in bytes of object offsets in index. */
- /* */
- /* data_offset :: The position of first data byte in the index's */
- /* bytes. */
- /* */
- /* data_size :: The size of the data table in this index. */
- /* */
- /* offsets :: A table of element offsets in the index. Must be */
- /* loaded explicitly. */
- /* */
- /* bytes :: If the index is loaded in memory, its bytes. */
- /* */
- typedef struct CFF_IndexRec_
- {
- FT_Stream stream;
- FT_ULong start;
- FT_UInt hdr_size;
- FT_UInt count;
- FT_Byte off_size;
- FT_ULong data_offset;
- FT_ULong data_size;
-
- FT_ULong* offsets;
- FT_Byte* bytes;
-
- } CFF_IndexRec, *CFF_Index;
-
-
- typedef struct CFF_EncodingRec_
- {
- FT_UInt format;
- FT_ULong offset;
-
- FT_UInt count;
- FT_UShort sids [256]; /* avoid dynamic allocations */
- FT_UShort codes[256];
-
- } CFF_EncodingRec, *CFF_Encoding;
-
-
- typedef struct CFF_CharsetRec_
- {
-
- FT_UInt format;
- FT_ULong offset;
-
- FT_UShort* sids;
- FT_UShort* cids; /* the inverse mapping of `sids'; only needed */
- /* for CID-keyed fonts */
- FT_UInt max_cid;
- FT_UInt num_glyphs;
-
- } CFF_CharsetRec, *CFF_Charset;
-
-
- /* cf. similar fields in file `ttgxvar.h' from the `truetype' module */
-
- typedef struct CFF_VarData_
- {
-#if 0
- FT_UInt itemCount; /* not used; always zero */
- FT_UInt shortDeltaCount; /* not used; always zero */
-#endif
-
- FT_UInt regionIdxCount; /* number of region indexes */
- FT_UInt* regionIndices; /* array of `regionIdxCount' indices; */
- /* these index `varRegionList' */
- } CFF_VarData;
-
-
- /* contribution of one axis to a region */
- typedef struct CFF_AxisCoords_
- {
- FT_Fixed startCoord;
- FT_Fixed peakCoord; /* zero peak means no effect (factor = 1) */
- FT_Fixed endCoord;
-
- } CFF_AxisCoords;
-
-
- typedef struct CFF_VarRegion_
- {
- CFF_AxisCoords* axisList; /* array of axisCount records */
-
- } CFF_VarRegion;
-
-
- typedef struct CFF_VStoreRec_
- {
- FT_UInt dataCount;
- CFF_VarData* varData; /* array of dataCount records */
- /* vsindex indexes this array */
- FT_UShort axisCount;
- FT_UInt regionCount; /* total number of regions defined */
- CFF_VarRegion* varRegionList;
-
- } CFF_VStoreRec, *CFF_VStore;
-
-
- /* forward reference */
- typedef struct CFF_FontRec_* CFF_Font;
-
-
- /* This object manages one cached blend vector. */
- /* */
- /* There is a BlendRec for Private DICT parsing in each subfont */
- /* and a BlendRec for charstrings in CF2_Font instance data. */
- /* A cached BV may be used across DICTs or Charstrings if inputs */
- /* have not changed. */
- /* */
- /* `usedBV' is reset at the start of each parse or charstring. */
- /* vsindex cannot be changed after a BV is used. */
- /* */
- /* Note: NDV is long (32/64 bit), while BV is 16.16 (FT_Int32). */
- typedef struct CFF_BlendRec_
- {
- FT_Bool builtBV; /* blendV has been built */
- FT_Bool usedBV; /* blendV has been used */
- CFF_Font font; /* top level font struct */
- FT_UInt lastVsindex; /* last vsindex used */
- FT_UInt lenNDV; /* normDV length (aka numAxes) */
- FT_Fixed* lastNDV; /* last NDV used */
- FT_UInt lenBV; /* BlendV length (aka numMasters) */
- FT_Int32* BV; /* current blendV (per DICT/glyph) */
-
- } CFF_BlendRec, *CFF_Blend;
-
-
- typedef struct CFF_FontRecDictRec_
- {
- FT_UInt version;
- FT_UInt notice;
- FT_UInt copyright;
- FT_UInt full_name;
- FT_UInt family_name;
- FT_UInt weight;
- FT_Bool is_fixed_pitch;
- FT_Fixed italic_angle;
- FT_Fixed underline_position;
- FT_Fixed underline_thickness;
- FT_Int paint_type;
- FT_Int charstring_type;
- FT_Matrix font_matrix;
- FT_Bool has_font_matrix;
- FT_ULong units_per_em; /* temporarily used as scaling value also */
- FT_Vector font_offset;
- FT_ULong unique_id;
- FT_BBox font_bbox;
- FT_Pos stroke_width;
- FT_ULong charset_offset;
- FT_ULong encoding_offset;
- FT_ULong charstrings_offset;
- FT_ULong private_offset;
- FT_ULong private_size;
- FT_Long synthetic_base;
- FT_UInt embedded_postscript;
-
- /* these should only be used for the top-level font dictionary */
- FT_UInt cid_registry;
- FT_UInt cid_ordering;
- FT_Long cid_supplement;
-
- FT_Long cid_font_version;
- FT_Long cid_font_revision;
- FT_Long cid_font_type;
- FT_ULong cid_count;
- FT_ULong cid_uid_base;
- FT_ULong cid_fd_array_offset;
- FT_ULong cid_fd_select_offset;
- FT_UInt cid_font_name;
-
- /* the next fields come from the data of the deprecated */
- /* `MultipleMaster' operator; they are needed to parse the (also */
- /* deprecated) `blend' operator in Type 2 charstrings */
- FT_UShort num_designs;
- FT_UShort num_axes;
-
- /* fields for CFF2 */
- FT_ULong vstore_offset;
- FT_UInt maxstack;
-
- } CFF_FontRecDictRec, *CFF_FontRecDict;
-
-
- /* forward reference */
- typedef struct CFF_SubFontRec_* CFF_SubFont;
-
-
- typedef struct CFF_PrivateRec_
- {
- FT_Byte num_blue_values;
- FT_Byte num_other_blues;
- FT_Byte num_family_blues;
- FT_Byte num_family_other_blues;
-
- FT_Pos blue_values[14];
- FT_Pos other_blues[10];
- FT_Pos family_blues[14];
- FT_Pos family_other_blues[10];
-
- FT_Fixed blue_scale;
- FT_Pos blue_shift;
- FT_Pos blue_fuzz;
- FT_Pos standard_width;
- FT_Pos standard_height;
-
- FT_Byte num_snap_widths;
- FT_Byte num_snap_heights;
- FT_Pos snap_widths[13];
- FT_Pos snap_heights[13];
- FT_Bool force_bold;
- FT_Fixed force_bold_threshold;
- FT_Int lenIV;
- FT_Int language_group;
- FT_Fixed expansion_factor;
- FT_Long initial_random_seed;
- FT_ULong local_subrs_offset;
- FT_Pos default_width;
- FT_Pos nominal_width;
-
- /* fields for CFF2 */
- FT_UInt vsindex;
- CFF_SubFont subfont;
-
- } CFF_PrivateRec, *CFF_Private;
-
-
- typedef struct CFF_FDSelectRec_
- {
- FT_Byte format;
- FT_UInt range_count;
-
- /* that's the table, taken from the file `as is' */
- FT_Byte* data;
- FT_UInt data_size;
-
- /* small cache for format 3 only */
- FT_UInt cache_first;
- FT_UInt cache_count;
- FT_Byte cache_fd;
-
- } CFF_FDSelectRec, *CFF_FDSelect;
-
-
- /* A SubFont packs a font dict and a private dict together. They are */
- /* needed to support CID-keyed CFF fonts. */
- typedef struct CFF_SubFontRec_
- {
- CFF_FontRecDictRec font_dict;
- CFF_PrivateRec private_dict;
-
- /* fields for CFF2 */
- CFF_BlendRec blend; /* current blend vector */
- FT_UInt lenNDV; /* current length NDV or zero */
- FT_Fixed* NDV; /* ptr to current NDV or NULL */
-
- /* `blend_stack' is a writable buffer to hold blend results. */
- /* This buffer is to the side of the normal cff parser stack; */
- /* `cff_parse_blend' and `cff_blend_doBlend' push blend results here. */
- /* The normal stack then points to these values instead of the DICT */
- /* because all other operators in Private DICT clear the stack. */
- /* `blend_stack' could be cleared at each operator other than blend. */
- /* Blended values are stored as 5-byte fixed point values. */
-
- FT_Byte* blend_stack; /* base of stack allocation */
- FT_Byte* blend_top; /* first empty slot */
- FT_UInt blend_used; /* number of bytes in use */
- FT_UInt blend_alloc; /* number of bytes allocated */
-
- CFF_IndexRec local_subrs_index;
- FT_Byte** local_subrs; /* array of pointers */
- /* into Local Subrs INDEX data */
-
- FT_UInt32 random;
-
- } CFF_SubFontRec;
-
-
-#define CFF_MAX_CID_FONTS 256
-
-
- typedef struct CFF_FontRec_
- {
- FT_Library library;
- FT_Stream stream;
- FT_Memory memory; /* TODO: take this from stream->memory? */
- FT_ULong base_offset; /* offset to start of CFF */
- FT_UInt num_faces;
- FT_UInt num_glyphs;
-
- FT_Byte version_major;
- FT_Byte version_minor;
- FT_Byte header_size;
-
- FT_UInt top_dict_length; /* cff2 only */
-
- FT_Bool cff2;
-
- CFF_IndexRec name_index;
- CFF_IndexRec top_dict_index;
- CFF_IndexRec global_subrs_index;
-
- CFF_EncodingRec encoding;
- CFF_CharsetRec charset;
-
- CFF_IndexRec charstrings_index;
- CFF_IndexRec font_dict_index;
- CFF_IndexRec private_index;
- CFF_IndexRec local_subrs_index;
-
- FT_String* font_name;
-
- /* array of pointers into Global Subrs INDEX data */
- FT_Byte** global_subrs;
-
- /* array of pointers into String INDEX data stored at string_pool */
- FT_UInt num_strings;
- FT_Byte** strings;
- FT_Byte* string_pool;
- FT_ULong string_pool_size;
-
- CFF_SubFontRec top_font;
- FT_UInt num_subfonts;
- CFF_SubFont subfonts[CFF_MAX_CID_FONTS];
-
- CFF_FDSelectRec fd_select;
-
- /* interface to PostScript hinter */
- PSHinter_Service pshinter;
-
- /* interface to Postscript Names service */
- FT_Service_PsCMaps psnames;
-
- /* since version 2.3.0 */
- PS_FontInfoRec* font_info; /* font info dictionary */
-
- /* since version 2.3.6 */
- FT_String* registry;
- FT_String* ordering;
-
- /* since version 2.4.12 */
- FT_Generic cf2_instance;
-
- /* since version 2.7.1 */
- CFF_VStoreRec vstore; /* parsed vstore structure */
-
- } CFF_FontRec;
-
-
-FT_END_HEADER
-
-#endif /* CFFTYPES_H_ */
-
-
-/* END */
diff --git a/src/cff/module.mk b/src/cff/module.mk
deleted file mode 100644
index 2975aeed8..000000000
--- a/src/cff/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 CFF module definition
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += CFF_DRIVER
-
-define CFF_DRIVER
-$(OPEN_DRIVER) FT_Driver_ClassRec, cff_driver_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)cff $(ECHO_DRIVER_DESC)OpenType fonts with extension *.otf$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/cff/rules.mk b/src/cff/rules.mk
deleted file mode 100644
index 86840bfe3..000000000
--- a/src/cff/rules.mk
+++ /dev/null
@@ -1,89 +0,0 @@
-#
-# FreeType 2 OpenType/CFF driver configuration rules
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# OpenType driver directory
-#
-CFF_DIR := $(SRC_DIR)/cff
-
-
-CFF_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(CFF_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# CFF driver sources (i.e., C files)
-#
-CFF_DRV_SRC := $(CFF_DIR)/cffcmap.c \
- $(CFF_DIR)/cffdrivr.c \
- $(CFF_DIR)/cffgload.c \
- $(CFF_DIR)/cffload.c \
- $(CFF_DIR)/cffobjs.c \
- $(CFF_DIR)/cffparse.c \
- $(CFF_DIR)/cffpic.c \
- $(CFF_DIR)/cf2arrst.c \
- $(CFF_DIR)/cf2blues.c \
- $(CFF_DIR)/cf2error.c \
- $(CFF_DIR)/cf2font.c \
- $(CFF_DIR)/cf2ft.c \
- $(CFF_DIR)/cf2hints.c \
- $(CFF_DIR)/cf2intrp.c \
- $(CFF_DIR)/cf2read.c \
- $(CFF_DIR)/cf2stack.c
-
-
-# CFF driver headers
-#
-CFF_DRV_H := $(CFF_DRV_SRC:%.c=%.h) \
- $(CFF_DIR)/cfferrs.h \
- $(CFF_DIR)/cfftoken.h \
- $(CFF_DIR)/cfftypes.h \
- $(CFF_DIR)/cf2fixed.h \
- $(CFF_DIR)/cf2glue.h \
- $(CFF_DIR)/cf2types.h
-
-
-# CFF driver object(s)
-#
-# CFF_DRV_OBJ_M is used during `multi' builds
-# CFF_DRV_OBJ_S is used during `single' builds
-#
-CFF_DRV_OBJ_M := $(CFF_DRV_SRC:$(CFF_DIR)/%.c=$(OBJ_DIR)/%.$O)
-CFF_DRV_OBJ_S := $(OBJ_DIR)/cff.$O
-
-# CFF driver source file for single build
-#
-CFF_DRV_SRC_S := $(CFF_DIR)/cff.c
-
-
-# CFF driver - single object
-#
-$(CFF_DRV_OBJ_S): $(CFF_DRV_SRC_S) $(CFF_DRV_SRC) $(FREETYPE_H) $(CFF_DRV_H)
- $(CFF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(CFF_DRV_SRC_S))
-
-
-# CFF driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(CFF_DIR)/%.c $(FREETYPE_H) $(CFF_DRV_H)
- $(CFF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(CFF_DRV_OBJ_S)
-DRV_OBJS_M += $(CFF_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/cid/Jamfile b/src/cid/Jamfile
deleted file mode 100644
index 8d3ba6a47..000000000
--- a/src/cid/Jamfile
+++ /dev/null
@@ -1,34 +0,0 @@
-# FreeType 2 src/cid Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) cid ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = cidgload
- cidload
- cidobjs
- cidparse
- cidriver
- ;
- }
- else
- {
- _sources = type1cid ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/cid Jamfile
diff --git a/src/cid/ciderrs.h b/src/cid/ciderrs.h
deleted file mode 100644
index 709dc8cd1..000000000
--- a/src/cid/ciderrs.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* ciderrs.h */
-/* */
-/* CID error codes (specification only). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the CID error enumeration constants. */
- /* */
- /*************************************************************************/
-
-#ifndef CIDERRS_H_
-#define CIDERRS_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX CID_Err_
-#define FT_ERR_BASE FT_Mod_Err_CID
-
-#include FT_ERRORS_H
-
-#endif /* CIDERRS_H_ */
-
-
-/* END */
diff --git a/src/cid/cidgload.c b/src/cid/cidgload.c
deleted file mode 100644
index b96c33334..000000000
--- a/src/cid/cidgload.c
+++ /dev/null
@@ -1,458 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidgload.c */
-/* */
-/* CID-keyed Type1 Glyph Loader (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include "cidload.h"
-#include "cidgload.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_CALC_H
-
-#include "ciderrs.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cidgload
-
-
- FT_CALLBACK_DEF( FT_Error )
- cid_load_glyph( T1_Decoder decoder,
- FT_UInt glyph_index )
- {
- CID_Face face = (CID_Face)decoder->builder.face;
- CID_FaceInfo cid = &face->cid;
- FT_Byte* p;
- FT_ULong fd_select;
- FT_Stream stream = face->cid_stream;
- FT_Error error = FT_Err_Ok;
- FT_Byte* charstring = NULL;
- FT_Memory memory = face->root.memory;
- FT_ULong glyph_length = 0;
- PSAux_Service psaux = (PSAux_Service)face->psaux;
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- FT_Incremental_InterfaceRec *inc =
- face->root.internal->incremental_interface;
-#endif
-
-
- FT_TRACE1(( "cid_load_glyph: glyph index %d\n", glyph_index ));
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
-
- /* For incremental fonts get the character data using */
- /* the callback function. */
- if ( inc )
- {
- FT_Data glyph_data;
-
-
- error = inc->funcs->get_glyph_data( inc->object,
- glyph_index, &glyph_data );
- if ( error )
- goto Exit;
-
- p = (FT_Byte*)glyph_data.pointer;
- fd_select = cid_get_offset( &p, (FT_Byte)cid->fd_bytes );
-
- if ( glyph_data.length != 0 )
- {
- glyph_length = (FT_ULong)( glyph_data.length - cid->fd_bytes );
- (void)FT_ALLOC( charstring, glyph_length );
- if ( !error )
- ft_memcpy( charstring, glyph_data.pointer + cid->fd_bytes,
- glyph_length );
- }
-
- inc->funcs->free_glyph_data( inc->object, &glyph_data );
-
- if ( error )
- goto Exit;
- }
-
- else
-
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
-
- /* For ordinary fonts read the CID font dictionary index */
- /* and charstring offset from the CIDMap. */
- {
- FT_UInt entry_len = (FT_UInt)( cid->fd_bytes + cid->gd_bytes );
- FT_ULong off1, off2;
-
-
- if ( FT_STREAM_SEEK( cid->data_offset + cid->cidmap_offset +
- glyph_index * entry_len ) ||
- FT_FRAME_ENTER( 2 * entry_len ) )
- goto Exit;
-
- p = (FT_Byte*)stream->cursor;
- fd_select = cid_get_offset( &p, (FT_Byte)cid->fd_bytes );
- off1 = cid_get_offset( &p, (FT_Byte)cid->gd_bytes );
- p += cid->fd_bytes;
- off2 = cid_get_offset( &p, (FT_Byte)cid->gd_bytes );
- FT_FRAME_EXIT();
-
- if ( fd_select >= (FT_ULong)cid->num_dicts ||
- off2 > stream->size ||
- off1 > off2 )
- {
- FT_TRACE0(( "cid_load_glyph: invalid glyph stream offsets\n" ));
- error = FT_THROW( Invalid_Offset );
- goto Exit;
- }
-
- glyph_length = off2 - off1;
- if ( glyph_length == 0 )
- goto Exit;
- if ( FT_ALLOC( charstring, glyph_length ) )
- goto Exit;
- if ( FT_STREAM_READ_AT( cid->data_offset + off1,
- charstring, glyph_length ) )
- goto Exit;
- }
-
- /* Now set up the subrs array and parse the charstrings. */
- {
- CID_FaceDict dict;
- CID_Subrs cid_subrs = face->subrs + fd_select;
- FT_UInt cs_offset;
-
-
- /* Set up subrs */
- decoder->num_subrs = cid_subrs->num_subrs;
- decoder->subrs = cid_subrs->code;
- decoder->subrs_len = 0;
- decoder->subrs_hash = NULL;
-
- /* Set up font matrix */
- dict = cid->font_dicts + fd_select;
-
- decoder->font_matrix = dict->font_matrix;
- decoder->font_offset = dict->font_offset;
- decoder->lenIV = dict->private_dict.lenIV;
-
- /* Decode the charstring. */
-
- /* Adjustment for seed bytes. */
- cs_offset = decoder->lenIV >= 0 ? (FT_UInt)decoder->lenIV : 0;
- if ( cs_offset > glyph_length )
- {
- FT_TRACE0(( "cid_load_glyph: invalid glyph stream offsets\n" ));
- error = FT_THROW( Invalid_Offset );
- goto Exit;
- }
-
- /* Decrypt only if lenIV >= 0. */
- if ( decoder->lenIV >= 0 )
- psaux->t1_decrypt( charstring, glyph_length, 4330 );
-
- error = decoder->funcs.parse_charstrings(
- decoder, charstring + cs_offset,
- glyph_length - cs_offset );
- }
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
-
- /* Incremental fonts can optionally override the metrics. */
- if ( !error && inc && inc->funcs->get_glyph_metrics )
- {
- FT_Incremental_MetricsRec metrics;
-
-
- metrics.bearing_x = FIXED_TO_INT( decoder->builder.left_bearing.x );
- metrics.bearing_y = 0;
- metrics.advance = FIXED_TO_INT( decoder->builder.advance.x );
- metrics.advance_v = FIXED_TO_INT( decoder->builder.advance.y );
-
- error = inc->funcs->get_glyph_metrics( inc->object,
- glyph_index, FALSE, &metrics );
-
- decoder->builder.left_bearing.x = INT_TO_FIXED( metrics.bearing_x );
- decoder->builder.advance.x = INT_TO_FIXED( metrics.advance );
- decoder->builder.advance.y = INT_TO_FIXED( metrics.advance_v );
- }
-
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
-
- Exit:
- FT_FREE( charstring );
-
- return error;
- }
-
-
-#if 0
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /********** *********/
- /********** *********/
- /********** COMPUTE THE MAXIMUM ADVANCE WIDTH *********/
- /********** *********/
- /********** The following code is in charge of computing *********/
- /********** the maximum advance width of the font. It *********/
- /********** quickly processes each glyph charstring to *********/
- /********** extract the value from either a `sbw' or `seac' *********/
- /********** operator. *********/
- /********** *********/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_LOCAL_DEF( FT_Error )
- cid_face_compute_max_advance( CID_Face face,
- FT_Int* max_advance )
- {
- FT_Error error;
- T1_DecoderRec decoder;
- FT_Int glyph_index;
-
- PSAux_Service psaux = (PSAux_Service)face->psaux;
-
-
- *max_advance = 0;
-
- /* Initialize load decoder */
- error = psaux->t1_decoder_funcs->init( &decoder,
- (FT_Face)face,
- 0, /* size */
- 0, /* glyph slot */
- 0, /* glyph names! XXX */
- 0, /* blend == 0 */
- 0, /* hinting == 0 */
- cid_load_glyph );
- if ( error )
- return error;
-
- /* TODO: initialize decoder.len_buildchar and decoder.buildchar */
- /* if we ever support CID-keyed multiple master fonts */
-
- decoder.builder.metrics_only = 1;
- decoder.builder.load_points = 0;
-
- /* for each glyph, parse the glyph charstring and extract */
- /* the advance width */
- for ( glyph_index = 0; glyph_index < face->root.num_glyphs;
- glyph_index++ )
- {
- /* now get load the unscaled outline */
- error = cid_load_glyph( &decoder, glyph_index );
- /* ignore the error if one occurred - skip to next glyph */
- }
-
- *max_advance = FIXED_TO_INT( decoder.builder.advance.x );
-
- psaux->t1_decoder_funcs->done( &decoder );
-
- return FT_Err_Ok;
- }
-
-
-#endif /* 0 */
-
-
- FT_LOCAL_DEF( FT_Error )
- cid_slot_load_glyph( FT_GlyphSlot cidglyph, /* CID_GlyphSlot */
- FT_Size cidsize, /* CID_Size */
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- CID_GlyphSlot glyph = (CID_GlyphSlot)cidglyph;
- FT_Error error;
- T1_DecoderRec decoder;
- CID_Face face = (CID_Face)cidglyph->face;
- FT_Bool hinting;
-
- PSAux_Service psaux = (PSAux_Service)face->psaux;
- FT_Matrix font_matrix;
- FT_Vector font_offset;
-
-
- if ( glyph_index >= (FT_UInt)face->root.num_glyphs )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- if ( load_flags & FT_LOAD_NO_RECURSE )
- load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
-
- glyph->x_scale = cidsize->metrics.x_scale;
- glyph->y_scale = cidsize->metrics.y_scale;
-
- cidglyph->outline.n_points = 0;
- cidglyph->outline.n_contours = 0;
-
- hinting = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 &&
- ( load_flags & FT_LOAD_NO_HINTING ) == 0 );
-
- cidglyph->format = FT_GLYPH_FORMAT_OUTLINE;
-
- error = psaux->t1_decoder_funcs->init( &decoder,
- cidglyph->face,
- cidsize,
- cidglyph,
- 0, /* glyph names -- XXX */
- 0, /* blend == 0 */
- hinting,
- FT_LOAD_TARGET_MODE( load_flags ),
- cid_load_glyph );
- if ( error )
- goto Exit;
-
- /* TODO: initialize decoder.len_buildchar and decoder.buildchar */
- /* if we ever support CID-keyed multiple master fonts */
-
- /* set up the decoder */
- decoder.builder.no_recurse = FT_BOOL(
- ( ( load_flags & FT_LOAD_NO_RECURSE ) != 0 ) );
-
- error = cid_load_glyph( &decoder, glyph_index );
- if ( error )
- goto Exit;
-
- font_matrix = decoder.font_matrix;
- font_offset = decoder.font_offset;
-
- /* save new glyph tables */
- psaux->t1_decoder_funcs->done( &decoder );
-
- /* now set the metrics -- this is rather simple, as */
- /* the left side bearing is the xMin, and the top side */
- /* bearing the yMax */
- cidglyph->outline.flags &= FT_OUTLINE_OWNER;
- cidglyph->outline.flags |= FT_OUTLINE_REVERSE_FILL;
-
- /* for composite glyphs, return only left side bearing and */
- /* advance width */
- if ( load_flags & FT_LOAD_NO_RECURSE )
- {
- FT_Slot_Internal internal = cidglyph->internal;
-
-
- cidglyph->metrics.horiBearingX =
- FIXED_TO_INT( decoder.builder.left_bearing.x );
- cidglyph->metrics.horiAdvance =
- FIXED_TO_INT( decoder.builder.advance.x );
-
- internal->glyph_matrix = font_matrix;
- internal->glyph_delta = font_offset;
- internal->glyph_transformed = 1;
- }
- else
- {
- FT_BBox cbox;
- FT_Glyph_Metrics* metrics = &cidglyph->metrics;
-
-
- /* copy the _unscaled_ advance width */
- metrics->horiAdvance =
- FIXED_TO_INT( decoder.builder.advance.x );
- cidglyph->linearHoriAdvance =
- FIXED_TO_INT( decoder.builder.advance.x );
- cidglyph->internal->glyph_transformed = 0;
-
- /* make up vertical ones */
- metrics->vertAdvance = ( face->cid.font_bbox.yMax -
- face->cid.font_bbox.yMin ) >> 16;
- cidglyph->linearVertAdvance = metrics->vertAdvance;
-
- cidglyph->format = FT_GLYPH_FORMAT_OUTLINE;
-
- if ( cidsize->metrics.y_ppem < 24 )
- cidglyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION;
-
- /* apply the font matrix, if any */
- if ( font_matrix.xx != 0x10000L || font_matrix.yy != 0x10000L ||
- font_matrix.xy != 0 || font_matrix.yx != 0 )
- {
- FT_Outline_Transform( &cidglyph->outline, &font_matrix );
-
- metrics->horiAdvance = FT_MulFix( metrics->horiAdvance,
- font_matrix.xx );
- metrics->vertAdvance = FT_MulFix( metrics->vertAdvance,
- font_matrix.yy );
- }
-
- if ( font_offset.x || font_offset.y )
- {
- FT_Outline_Translate( &cidglyph->outline,
- font_offset.x,
- font_offset.y );
-
- metrics->horiAdvance += font_offset.x;
- metrics->vertAdvance += font_offset.y;
- }
-
- if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 )
- {
- /* scale the outline and the metrics */
- FT_Int n;
- FT_Outline* cur = decoder.builder.base;
- FT_Vector* vec = cur->points;
- FT_Fixed x_scale = glyph->x_scale;
- FT_Fixed y_scale = glyph->y_scale;
-
-
- /* First of all, scale the points */
- if ( !hinting || !decoder.builder.hints_funcs )
- for ( n = cur->n_points; n > 0; n--, vec++ )
- {
- vec->x = FT_MulFix( vec->x, x_scale );
- vec->y = FT_MulFix( vec->y, y_scale );
- }
-
- /* Then scale the metrics */
- metrics->horiAdvance = FT_MulFix( metrics->horiAdvance, x_scale );
- metrics->vertAdvance = FT_MulFix( metrics->vertAdvance, y_scale );
- }
-
- /* compute the other metrics */
- FT_Outline_Get_CBox( &cidglyph->outline, &cbox );
-
- metrics->width = cbox.xMax - cbox.xMin;
- metrics->height = cbox.yMax - cbox.yMin;
-
- metrics->horiBearingX = cbox.xMin;
- metrics->horiBearingY = cbox.yMax;
-
- if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
- {
- /* make up vertical ones */
- ft_synthesize_vertical_metrics( metrics,
- metrics->vertAdvance );
- }
- }
-
- Exit:
- return error;
- }
-
-
-/* END */
diff --git a/src/cid/cidgload.h b/src/cid/cidgload.h
deleted file mode 100644
index 7f816b5bc..000000000
--- a/src/cid/cidgload.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidgload.h */
-/* */
-/* OpenType Glyph Loader (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CIDGLOAD_H_
-#define CIDGLOAD_H_
-
-
-#include <ft2build.h>
-#include "cidobjs.h"
-
-
-FT_BEGIN_HEADER
-
-
-#if 0
-
- /* Compute the maximum advance width of a font through quick parsing */
- FT_LOCAL( FT_Error )
- cid_face_compute_max_advance( CID_Face face,
- FT_Int* max_advance );
-
-#endif /* 0 */
-
- FT_LOCAL( FT_Error )
- cid_slot_load_glyph( FT_GlyphSlot glyph, /* CID_Glyph_Slot */
- FT_Size size, /* CID_Size */
- FT_UInt glyph_index,
- FT_Int32 load_flags );
-
-
-FT_END_HEADER
-
-#endif /* CIDGLOAD_H_ */
-
-
-/* END */
diff --git a/src/cid/cidload.c b/src/cid/cidload.c
deleted file mode 100644
index ff0722110..000000000
--- a/src/cid/cidload.c
+++ /dev/null
@@ -1,846 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidload.c */
-/* */
-/* CID-keyed Type1 font loader (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_CONFIG_CONFIG_H
-#include FT_MULTIPLE_MASTERS_H
-#include FT_INTERNAL_TYPE1_TYPES_H
-
-#include "cidload.h"
-
-#include "ciderrs.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cidload
-
-
- /* read a single offset */
- FT_LOCAL_DEF( FT_ULong )
- cid_get_offset( FT_Byte* *start,
- FT_Byte offsize )
- {
- FT_ULong result;
- FT_Byte* p = *start;
-
-
- for ( result = 0; offsize > 0; offsize-- )
- {
- result <<= 8;
- result |= *p++;
- }
-
- *start = p;
- return result;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** TYPE 1 SYMBOL PARSING *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- static FT_Error
- cid_load_keyword( CID_Face face,
- CID_Loader* loader,
- const T1_Field keyword )
- {
- FT_Error error;
- CID_Parser* parser = &loader->parser;
- FT_Byte* object;
- void* dummy_object;
- CID_FaceInfo cid = &face->cid;
-
-
- /* if the keyword has a dedicated callback, call it */
- if ( keyword->type == T1_FIELD_TYPE_CALLBACK )
- {
- keyword->reader( (FT_Face)face, parser );
- error = parser->root.error;
- goto Exit;
- }
-
- /* we must now compute the address of our target object */
- switch ( keyword->location )
- {
- case T1_FIELD_LOCATION_CID_INFO:
- object = (FT_Byte*)cid;
- break;
-
- case T1_FIELD_LOCATION_FONT_INFO:
- object = (FT_Byte*)&cid->font_info;
- break;
-
- case T1_FIELD_LOCATION_FONT_EXTRA:
- object = (FT_Byte*)&face->font_extra;
- break;
-
- case T1_FIELD_LOCATION_BBOX:
- object = (FT_Byte*)&cid->font_bbox;
- break;
-
- default:
- {
- CID_FaceDict dict;
-
-
- if ( parser->num_dict < 0 || parser->num_dict >= cid->num_dicts )
- {
- FT_ERROR(( "cid_load_keyword: invalid use of `%s'\n",
- keyword->ident ));
- error = FT_THROW( Syntax_Error );
- goto Exit;
- }
-
- dict = cid->font_dicts + parser->num_dict;
- switch ( keyword->location )
- {
- case T1_FIELD_LOCATION_PRIVATE:
- object = (FT_Byte*)&dict->private_dict;
- break;
-
- default:
- object = (FT_Byte*)dict;
- }
- }
- }
-
- dummy_object = object;
-
- /* now, load the keyword data in the object's field(s) */
- if ( keyword->type == T1_FIELD_TYPE_INTEGER_ARRAY ||
- keyword->type == T1_FIELD_TYPE_FIXED_ARRAY )
- error = cid_parser_load_field_table( &loader->parser, keyword,
- &dummy_object );
- else
- error = cid_parser_load_field( &loader->parser,
- keyword, &dummy_object );
- Exit:
- return error;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- cid_parse_font_matrix( CID_Face face,
- CID_Parser* parser )
- {
- CID_FaceDict dict;
- FT_Face root = (FT_Face)&face->root;
- FT_Fixed temp[6];
- FT_Fixed temp_scale;
-
-
- if ( parser->num_dict >= 0 && parser->num_dict < face->cid.num_dicts )
- {
- FT_Matrix* matrix;
- FT_Vector* offset;
- FT_Int result;
-
-
- dict = face->cid.font_dicts + parser->num_dict;
- matrix = &dict->font_matrix;
- offset = &dict->font_offset;
-
- /* input is scaled by 1000 to accommodate default FontMatrix */
- result = cid_parser_to_fixed_array( parser, 6, temp, 3 );
-
- if ( result < 6 )
- return FT_THROW( Invalid_File_Format );
-
- temp_scale = FT_ABS( temp[3] );
-
- if ( temp_scale == 0 )
- {
- FT_ERROR(( "cid_parse_font_matrix: invalid font matrix\n" ));
- return FT_THROW( Invalid_File_Format );
- }
-
- /* atypical case */
- if ( temp_scale != 0x10000L )
- {
- /* set units per EM based on FontMatrix values */
- root->units_per_EM = (FT_UShort)FT_DivFix( 1000, temp_scale );
-
- temp[0] = FT_DivFix( temp[0], temp_scale );
- temp[1] = FT_DivFix( temp[1], temp_scale );
- temp[2] = FT_DivFix( temp[2], temp_scale );
- temp[4] = FT_DivFix( temp[4], temp_scale );
- temp[5] = FT_DivFix( temp[5], temp_scale );
- temp[3] = temp[3] < 0 ? -0x10000L : 0x10000L;
- }
-
- matrix->xx = temp[0];
- matrix->yx = temp[1];
- matrix->xy = temp[2];
- matrix->yy = temp[3];
-
- /* note that the font offsets are expressed in integer font units */
- offset->x = temp[4] >> 16;
- offset->y = temp[5] >> 16;
- }
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- parse_fd_array( CID_Face face,
- CID_Parser* parser )
- {
- CID_FaceInfo cid = &face->cid;
- FT_Memory memory = face->root.memory;
- FT_Stream stream = parser->stream;
- FT_Error error = FT_Err_Ok;
- FT_Long num_dicts;
-
-
- num_dicts = cid_parser_to_int( parser );
- if ( num_dicts < 0 )
- {
- FT_ERROR(( "parse_fd_array: invalid number of dictionaries\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /*
- * A single entry in the FDArray must (at least) contain the following
- * structure elements.
- *
- * %ADOBeginFontDict 18
- * X dict begin 13
- * /FontMatrix [X X X X] 22
- * /Private X dict begin 22
- * end 4
- * end 4
- * %ADOEndFontDict 16
- *
- * This needs 18+13+22+22+4+4+16=99 bytes or more. Normally, you also
- * need a `dup X' at the very beginning and a `put' at the end, so a
- * rough guess using 100 bytes as the minimum is justified.
- */
- if ( (FT_ULong)num_dicts > stream->size / 100 )
- {
- FT_TRACE0(( "parse_fd_array: adjusting FDArray size"
- " (from %d to %d)\n",
- num_dicts,
- stream->size / 100 ));
- num_dicts = (FT_Long)( stream->size / 100 );
- }
-
- if ( !cid->font_dicts )
- {
- FT_Int n;
-
-
- if ( FT_NEW_ARRAY( cid->font_dicts, num_dicts ) )
- goto Exit;
-
- cid->num_dicts = num_dicts;
-
- /* don't forget to set a few defaults */
- for ( n = 0; n < cid->num_dicts; n++ )
- {
- CID_FaceDict dict = cid->font_dicts + n;
-
-
- /* default value for lenIV */
- dict->private_dict.lenIV = 4;
- }
- }
-
- Exit:
- return error;
- }
-
-
- /* by mistake, `expansion_factor' appears both in PS_PrivateRec */
- /* and CID_FaceDictRec (both are public header files and can't */
- /* changed); we simply copy the value */
-
- FT_CALLBACK_DEF( FT_Error )
- parse_expansion_factor( CID_Face face,
- CID_Parser* parser )
- {
- CID_FaceDict dict;
-
-
- if ( parser->num_dict >= 0 && parser->num_dict < face->cid.num_dicts )
- {
- dict = face->cid.font_dicts + parser->num_dict;
-
- dict->expansion_factor = cid_parser_to_fixed( parser, 0 );
- dict->private_dict.expansion_factor = dict->expansion_factor;
- }
-
- return FT_Err_Ok;
- }
-
-
- static
- const T1_FieldRec cid_field_records[] =
- {
-
-#include "cidtoken.h"
-
- T1_FIELD_CALLBACK( "FDArray", parse_fd_array, 0 )
- T1_FIELD_CALLBACK( "FontMatrix", cid_parse_font_matrix, 0 )
- T1_FIELD_CALLBACK( "ExpansionFactor", parse_expansion_factor, 0 )
-
- { 0, T1_FIELD_LOCATION_CID_INFO, T1_FIELD_TYPE_NONE, 0, 0, 0, 0, 0, 0 }
- };
-
-
- static FT_Error
- cid_parse_dict( CID_Face face,
- CID_Loader* loader,
- FT_Byte* base,
- FT_ULong size )
- {
- CID_Parser* parser = &loader->parser;
-
-
- parser->root.cursor = base;
- parser->root.limit = base + size;
- parser->root.error = FT_Err_Ok;
-
- {
- FT_Byte* cur = base;
- FT_Byte* limit = cur + size;
-
-
- for (;;)
- {
- FT_Byte* newlimit;
-
-
- parser->root.cursor = cur;
- cid_parser_skip_spaces( parser );
-
- if ( parser->root.cursor >= limit )
- newlimit = limit - 1 - 17;
- else
- newlimit = parser->root.cursor - 17;
-
- /* look for `%ADOBeginFontDict' */
- for ( ; cur < newlimit; cur++ )
- {
- if ( *cur == '%' &&
- ft_strncmp( (char*)cur, "%ADOBeginFontDict", 17 ) == 0 )
- {
- /* if /FDArray was found, then cid->num_dicts is > 0, and */
- /* we can start increasing parser->num_dict */
- if ( face->cid.num_dicts > 0 )
- parser->num_dict++;
- }
- }
-
- cur = parser->root.cursor;
- /* no error can occur in cid_parser_skip_spaces */
- if ( cur >= limit )
- break;
-
- cid_parser_skip_PS_token( parser );
- if ( parser->root.cursor >= limit || parser->root.error )
- break;
-
- /* look for immediates */
- if ( *cur == '/' && cur + 2 < limit )
- {
- FT_UInt len;
-
-
- cur++;
- len = (FT_UInt)( parser->root.cursor - cur );
-
- if ( len > 0 && len < 22 )
- {
- /* now compare the immediate name to the keyword table */
- T1_Field keyword = (T1_Field)cid_field_records;
-
-
- for (;;)
- {
- FT_Byte* name;
-
-
- name = (FT_Byte*)keyword->ident;
- if ( !name )
- break;
-
- if ( cur[0] == name[0] &&
- len == ft_strlen( (const char*)name ) )
- {
- FT_UInt n;
-
-
- for ( n = 1; n < len; n++ )
- if ( cur[n] != name[n] )
- break;
-
- if ( n >= len )
- {
- /* we found it - run the parsing callback */
- parser->root.error = cid_load_keyword( face,
- loader,
- keyword );
- if ( parser->root.error )
- return parser->root.error;
- break;
- }
- }
- keyword++;
- }
- }
- }
-
- cur = parser->root.cursor;
- }
-
- if ( !face->cid.num_dicts )
- {
- FT_ERROR(( "cid_parse_dict: No font dictionary found\n" ));
- return FT_THROW( Invalid_File_Format );
- }
- }
-
- return parser->root.error;
- }
-
-
- /* read the subrmap and the subrs of each font dict */
- static FT_Error
- cid_read_subrs( CID_Face face )
- {
- CID_FaceInfo cid = &face->cid;
- FT_Memory memory = face->root.memory;
- FT_Stream stream = face->cid_stream;
- FT_Error error;
- FT_Int n;
- CID_Subrs subr;
- FT_UInt max_offsets = 0;
- FT_ULong* offsets = NULL;
- PSAux_Service psaux = (PSAux_Service)face->psaux;
-
-
- if ( FT_NEW_ARRAY( face->subrs, cid->num_dicts ) )
- goto Exit;
-
- subr = face->subrs;
- for ( n = 0; n < cid->num_dicts; n++, subr++ )
- {
- CID_FaceDict dict = cid->font_dicts + n;
- FT_Int lenIV = dict->private_dict.lenIV;
- FT_UInt count, num_subrs = dict->num_subrs;
- FT_ULong data_len;
- FT_Byte* p;
-
-
- if ( !num_subrs )
- continue;
-
- /* reallocate offsets array if needed */
- if ( num_subrs + 1 > max_offsets )
- {
- FT_UInt new_max = FT_PAD_CEIL( num_subrs + 1, 4 );
-
-
- if ( new_max <= max_offsets )
- {
- error = FT_THROW( Syntax_Error );
- goto Fail;
- }
-
- if ( FT_RENEW_ARRAY( offsets, max_offsets, new_max ) )
- goto Fail;
-
- max_offsets = new_max;
- }
-
- /* read the subrmap's offsets */
- if ( FT_STREAM_SEEK( cid->data_offset + dict->subrmap_offset ) ||
- FT_FRAME_ENTER( ( num_subrs + 1 ) * (FT_UInt)dict->sd_bytes ) )
- goto Fail;
-
- p = (FT_Byte*)stream->cursor;
- for ( count = 0; count <= num_subrs; count++ )
- offsets[count] = cid_get_offset( &p, (FT_Byte)dict->sd_bytes );
-
- FT_FRAME_EXIT();
-
- /* offsets must be ordered */
- for ( count = 1; count <= num_subrs; count++ )
- if ( offsets[count - 1] > offsets[count] )
- {
- FT_ERROR(( "cid_read_subrs: offsets are not ordered\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- if ( offsets[num_subrs] > stream->size - cid->data_offset )
- {
- FT_ERROR(( "cid_read_subrs: too large `subrs' offsets\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- /* now, compute the size of subrs charstrings, */
- /* allocate, and read them */
- data_len = offsets[num_subrs] - offsets[0];
-
- if ( FT_NEW_ARRAY( subr->code, num_subrs + 1 ) ||
- FT_ALLOC( subr->code[0], data_len ) )
- goto Fail;
-
- if ( FT_STREAM_SEEK( cid->data_offset + offsets[0] ) ||
- FT_STREAM_READ( subr->code[0], data_len ) )
- goto Fail;
-
- /* set up pointers */
- for ( count = 1; count <= num_subrs; count++ )
- {
- FT_ULong len;
-
-
- len = offsets[count] - offsets[count - 1];
- subr->code[count] = subr->code[count - 1] + len;
- }
-
- /* decrypt subroutines, but only if lenIV >= 0 */
- if ( lenIV >= 0 )
- {
- for ( count = 0; count < num_subrs; count++ )
- {
- FT_ULong len;
-
-
- len = offsets[count + 1] - offsets[count];
- psaux->t1_decrypt( subr->code[count], len, 4330 );
- }
- }
-
- subr->num_subrs = (FT_Int)num_subrs;
- }
-
- Exit:
- FT_FREE( offsets );
- return error;
-
- Fail:
- if ( face->subrs )
- {
- for ( n = 0; n < cid->num_dicts; n++ )
- {
- if ( face->subrs[n].code )
- FT_FREE( face->subrs[n].code[0] );
-
- FT_FREE( face->subrs[n].code );
- }
- FT_FREE( face->subrs );
- }
- goto Exit;
- }
-
-
- static void
- cid_init_loader( CID_Loader* loader,
- CID_Face face )
- {
- FT_UNUSED( face );
-
- FT_ZERO( loader );
- }
-
-
- static void
- cid_done_loader( CID_Loader* loader )
- {
- CID_Parser* parser = &loader->parser;
-
-
- /* finalize parser */
- cid_parser_done( parser );
- }
-
-
- static FT_Error
- cid_hex_to_binary( FT_Byte* data,
- FT_ULong data_len,
- FT_ULong offset,
- CID_Face face )
- {
- FT_Stream stream = face->root.stream;
- FT_Error error;
-
- FT_Byte buffer[256];
- FT_Byte *p, *plimit;
- FT_Byte *d, *dlimit;
- FT_Byte val;
-
- FT_Bool upper_nibble, done;
-
-
- if ( FT_STREAM_SEEK( offset ) )
- goto Exit;
-
- d = data;
- dlimit = d + data_len;
- p = buffer;
- plimit = p;
-
- upper_nibble = 1;
- done = 0;
-
- while ( d < dlimit )
- {
- if ( p >= plimit )
- {
- FT_ULong oldpos = FT_STREAM_POS();
- FT_ULong size = stream->size - oldpos;
-
-
- if ( size == 0 )
- {
- error = FT_THROW( Syntax_Error );
- goto Exit;
- }
-
- if ( FT_STREAM_READ( buffer, 256 > size ? size : 256 ) )
- goto Exit;
- p = buffer;
- plimit = p + FT_STREAM_POS() - oldpos;
- }
-
- if ( ft_isdigit( *p ) )
- val = (FT_Byte)( *p - '0' );
- else if ( *p >= 'a' && *p <= 'f' )
- val = (FT_Byte)( *p - 'a' );
- else if ( *p >= 'A' && *p <= 'F' )
- val = (FT_Byte)( *p - 'A' + 10 );
- else if ( *p == ' ' ||
- *p == '\t' ||
- *p == '\r' ||
- *p == '\n' ||
- *p == '\f' ||
- *p == '\0' )
- {
- p++;
- continue;
- }
- else if ( *p == '>' )
- {
- val = 0;
- done = 1;
- }
- else
- {
- error = FT_THROW( Syntax_Error );
- goto Exit;
- }
-
- if ( upper_nibble )
- *d = (FT_Byte)( val << 4 );
- else
- {
- *d = (FT_Byte)( *d + val );
- d++;
- }
-
- upper_nibble = (FT_Byte)( 1 - upper_nibble );
-
- if ( done )
- break;
-
- p++;
- }
-
- error = FT_Err_Ok;
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- cid_face_open( CID_Face face,
- FT_Int face_index )
- {
- CID_Loader loader;
- CID_Parser* parser;
- FT_Memory memory = face->root.memory;
- FT_Error error;
- FT_Int n;
-
- CID_FaceInfo cid = &face->cid;
-
- FT_ULong binary_length;
- FT_ULong entry_len;
-
-
- cid_init_loader( &loader, face );
-
- parser = &loader.parser;
- error = cid_parser_new( parser, face->root.stream, face->root.memory,
- (PSAux_Service)face->psaux );
- if ( error )
- goto Exit;
-
- error = cid_parse_dict( face, &loader,
- parser->postscript,
- parser->postscript_len );
- if ( error )
- goto Exit;
-
- if ( face_index < 0 )
- goto Exit;
-
- if ( FT_NEW( face->cid_stream ) )
- goto Exit;
-
- if ( parser->binary_length )
- {
- if ( parser->binary_length >
- face->root.stream->size - parser->data_offset )
- {
- FT_TRACE0(( "cid_face_open: adjusting length of binary data\n"
- " (from %d to %d bytes)\n",
- parser->binary_length,
- face->root.stream->size - parser->data_offset ));
- parser->binary_length = face->root.stream->size -
- parser->data_offset;
- }
-
- /* we must convert the data section from hexadecimal to binary */
- if ( FT_ALLOC( face->binary_data, parser->binary_length ) ||
- FT_SET_ERROR( cid_hex_to_binary( face->binary_data,
- parser->binary_length,
- parser->data_offset,
- face ) ) )
- goto Exit;
-
- FT_Stream_OpenMemory( face->cid_stream,
- face->binary_data, parser->binary_length );
- cid->data_offset = 0;
- }
- else
- {
- *face->cid_stream = *face->root.stream;
- cid->data_offset = loader.parser.data_offset;
- }
-
- /* sanity tests */
-
- if ( cid->fd_bytes < 0 || cid->gd_bytes < 1 )
- {
- FT_ERROR(( "cid_parse_dict:"
- " Invalid `FDBytes' or `GDBytes' value\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* allow at most 32bit offsets */
- if ( cid->fd_bytes > 4 || cid->gd_bytes > 4 )
- {
- FT_ERROR(( "cid_parse_dict:"
- " Values of `FDBytes' or `GDBytes' larger than 4\n"
- " "
- " are not supported\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- binary_length = face->cid_stream->size - cid->data_offset;
- entry_len = (FT_ULong)( cid->fd_bytes + cid->gd_bytes );
-
- for ( n = 0; n < cid->num_dicts; n++ )
- {
- CID_FaceDict dict = cid->font_dicts + n;
-
-
- if ( dict->sd_bytes < 0 ||
- ( dict->num_subrs && dict->sd_bytes < 1 ) )
- {
- FT_ERROR(( "cid_parse_dict: Invalid `SDBytes' value\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- if ( dict->sd_bytes > 4 )
- {
- FT_ERROR(( "cid_parse_dict:"
- " Values of `SDBytes' larger than 4"
- " are not supported\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- if ( dict->subrmap_offset > binary_length )
- {
- FT_ERROR(( "cid_parse_dict: Invalid `SubrMapOffset' value\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* `num_subrs' is scanned as a signed integer */
- if ( (FT_Int)dict->num_subrs < 0 ||
- ( dict->sd_bytes &&
- dict->num_subrs > ( binary_length - dict->subrmap_offset ) /
- (FT_UInt)dict->sd_bytes ) )
- {
- FT_ERROR(( "cid_parse_dict: Invalid `SubrCount' value\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
- }
-
- if ( cid->cidmap_offset > binary_length )
- {
- FT_ERROR(( "cid_parse_dict: Invalid `CIDMapOffset' value\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- if ( entry_len &&
- cid->cid_count >
- ( binary_length - cid->cidmap_offset ) / entry_len )
- {
- FT_ERROR(( "cid_parse_dict: Invalid `CIDCount' value\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* we can now safely proceed */
- error = cid_read_subrs( face );
-
- Exit:
- cid_done_loader( &loader );
- return error;
- }
-
-
-/* END */
diff --git a/src/cid/cidload.h b/src/cid/cidload.h
deleted file mode 100644
index 45a0e6df2..000000000
--- a/src/cid/cidload.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidload.h */
-/* */
-/* CID-keyed Type1 font loader (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CIDLOAD_H_
-#define CIDLOAD_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_STREAM_H
-#include "cidparse.h"
-
-
-FT_BEGIN_HEADER
-
-
- typedef struct CID_Loader_
- {
- CID_Parser parser; /* parser used to read the stream */
- FT_Int num_chars; /* number of characters in encoding */
-
- } CID_Loader;
-
-
- FT_LOCAL( FT_ULong )
- cid_get_offset( FT_Byte** start,
- FT_Byte offsize );
-
- FT_LOCAL( FT_Error )
- cid_face_open( CID_Face face,
- FT_Int face_index );
-
-
-FT_END_HEADER
-
-#endif /* CIDLOAD_H_ */
-
-
-/* END */
diff --git a/src/cid/cidobjs.c b/src/cid/cidobjs.c
deleted file mode 100644
index ceda8ff97..000000000
--- a/src/cid/cidobjs.c
+++ /dev/null
@@ -1,492 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidobjs.c */
-/* */
-/* CID objects manager (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-
-#include "cidgload.h"
-#include "cidload.h"
-
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-
-#include "ciderrs.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cidobjs
-
-
- /*************************************************************************/
- /* */
- /* SLOT FUNCTIONS */
- /* */
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- cid_slot_done( FT_GlyphSlot slot )
- {
- slot->internal->glyph_hints = NULL;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- cid_slot_init( FT_GlyphSlot slot )
- {
- CID_Face face;
- PSHinter_Service pshinter;
-
-
- face = (CID_Face)slot->face;
- pshinter = (PSHinter_Service)face->pshinter;
-
- if ( pshinter )
- {
- FT_Module module;
-
-
- module = FT_Get_Module( slot->face->driver->root.library,
- "pshinter" );
- if ( module )
- {
- T1_Hints_Funcs funcs;
-
-
- funcs = pshinter->get_t1_funcs( module );
- slot->internal->glyph_hints = (void*)funcs;
- }
- }
-
- return 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* SIZE FUNCTIONS */
- /* */
- /*************************************************************************/
-
-
- static PSH_Globals_Funcs
- cid_size_get_globals_funcs( CID_Size size )
- {
- CID_Face face = (CID_Face)size->root.face;
- PSHinter_Service pshinter = (PSHinter_Service)face->pshinter;
- FT_Module module;
-
-
- module = FT_Get_Module( size->root.face->driver->root.library,
- "pshinter" );
- return ( module && pshinter && pshinter->get_globals_funcs )
- ? pshinter->get_globals_funcs( module )
- : 0;
- }
-
-
- FT_LOCAL_DEF( void )
- cid_size_done( FT_Size cidsize ) /* CID_Size */
- {
- CID_Size size = (CID_Size)cidsize;
-
-
- if ( cidsize->internal->module_data )
- {
- PSH_Globals_Funcs funcs;
-
-
- funcs = cid_size_get_globals_funcs( size );
- if ( funcs )
- funcs->destroy( (PSH_Globals)cidsize->internal->module_data );
-
- cidsize->internal->module_data = NULL;
- }
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- cid_size_init( FT_Size cidsize ) /* CID_Size */
- {
- CID_Size size = (CID_Size)cidsize;
- FT_Error error = FT_Err_Ok;
- PSH_Globals_Funcs funcs = cid_size_get_globals_funcs( size );
-
-
- if ( funcs )
- {
- PSH_Globals globals;
- CID_Face face = (CID_Face)cidsize->face;
- CID_FaceDict dict = face->cid.font_dicts + face->root.face_index;
- PS_Private priv = &dict->private_dict;
-
-
- error = funcs->create( cidsize->face->memory, priv, &globals );
- if ( !error )
- cidsize->internal->module_data = globals;
- }
-
- return error;
- }
-
-
- FT_LOCAL( FT_Error )
- cid_size_request( FT_Size size,
- FT_Size_Request req )
- {
- PSH_Globals_Funcs funcs;
-
-
- FT_Request_Metrics( size->face, req );
-
- funcs = cid_size_get_globals_funcs( (CID_Size)size );
-
- if ( funcs )
- funcs->set_scale( (PSH_Globals)size->internal->module_data,
- size->metrics.x_scale,
- size->metrics.y_scale,
- 0, 0 );
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* FACE FUNCTIONS */
- /* */
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cid_face_done */
- /* */
- /* <Description> */
- /* Finalizes a given face object. */
- /* */
- /* <Input> */
- /* face :: A pointer to the face object to destroy. */
- /* */
- FT_LOCAL_DEF( void )
- cid_face_done( FT_Face cidface ) /* CID_Face */
- {
- CID_Face face = (CID_Face)cidface;
- FT_Memory memory;
- CID_FaceInfo cid;
- PS_FontInfo info;
-
-
- if ( !face )
- return;
-
- cid = &face->cid;
- info = &cid->font_info;
- memory = cidface->memory;
-
- /* release subrs */
- if ( face->subrs )
- {
- FT_Int n;
-
-
- for ( n = 0; n < cid->num_dicts; n++ )
- {
- CID_Subrs subr = face->subrs + n;
-
-
- if ( subr->code )
- {
- FT_FREE( subr->code[0] );
- FT_FREE( subr->code );
- }
- }
-
- FT_FREE( face->subrs );
- }
-
- /* release FontInfo strings */
- FT_FREE( info->version );
- FT_FREE( info->notice );
- FT_FREE( info->full_name );
- FT_FREE( info->family_name );
- FT_FREE( info->weight );
-
- /* release font dictionaries */
- FT_FREE( cid->font_dicts );
- cid->num_dicts = 0;
-
- /* release other strings */
- FT_FREE( cid->cid_font_name );
- FT_FREE( cid->registry );
- FT_FREE( cid->ordering );
-
- cidface->family_name = NULL;
- cidface->style_name = NULL;
-
- FT_FREE( face->binary_data );
- FT_FREE( face->cid_stream );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cid_face_init */
- /* */
- /* <Description> */
- /* Initializes a given CID face object. */
- /* */
- /* <Input> */
- /* stream :: The source font stream. */
- /* */
- /* face_index :: The index of the font face in the resource. */
- /* */
- /* num_params :: Number of additional generic parameters. Ignored. */
- /* */
- /* params :: Additional generic parameters. Ignored. */
- /* */
- /* <InOut> */
- /* face :: The newly built face object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- cid_face_init( FT_Stream stream,
- FT_Face cidface, /* CID_Face */
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- CID_Face face = (CID_Face)cidface;
- FT_Error error;
- PSAux_Service psaux;
- PSHinter_Service pshinter;
-
- FT_UNUSED( num_params );
- FT_UNUSED( params );
- FT_UNUSED( stream );
-
-
- cidface->num_faces = 1;
-
- psaux = (PSAux_Service)face->psaux;
- if ( !psaux )
- {
- psaux = (PSAux_Service)FT_Get_Module_Interface(
- FT_FACE_LIBRARY( face ), "psaux" );
-
- if ( !psaux )
- {
- FT_ERROR(( "cid_face_init: cannot access `psaux' module\n" ));
- error = FT_THROW( Missing_Module );
- goto Exit;
- }
-
- face->psaux = psaux;
- }
-
- pshinter = (PSHinter_Service)face->pshinter;
- if ( !pshinter )
- {
- pshinter = (PSHinter_Service)FT_Get_Module_Interface(
- FT_FACE_LIBRARY( face ), "pshinter" );
-
- face->pshinter = pshinter;
- }
-
- FT_TRACE2(( "CID driver\n" ));
-
- /* open the tokenizer; this will also check the font format */
- if ( FT_STREAM_SEEK( 0 ) )
- goto Exit;
-
- error = cid_face_open( face, face_index );
- if ( error )
- goto Exit;
-
- /* if we just wanted to check the format, leave successfully now */
- if ( face_index < 0 )
- goto Exit;
-
- /* check the face index */
- /* XXX: handle CID fonts with more than a single face */
- if ( ( face_index & 0xFFFF ) != 0 )
- {
- FT_ERROR(( "cid_face_init: invalid face index\n" ));
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- /* now load the font program into the face object */
-
- /* initialize the face object fields */
-
- /* set up root face fields */
- {
- CID_FaceInfo cid = &face->cid;
- PS_FontInfo info = &cid->font_info;
-
-
- cidface->num_glyphs = (FT_Long)cid->cid_count;
- cidface->num_charmaps = 0;
-
- cidface->face_index = face_index & 0xFFFF;
-
- cidface->face_flags |= FT_FACE_FLAG_SCALABLE | /* scalable outlines */
- FT_FACE_FLAG_HORIZONTAL | /* horizontal data */
- FT_FACE_FLAG_HINTER; /* has native hinter */
-
- if ( info->is_fixed_pitch )
- cidface->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;
-
- /* XXX: TODO: add kerning with .afm support */
-
- /* get style name -- be careful, some broken fonts only */
- /* have a /FontName dictionary entry! */
- cidface->family_name = info->family_name;
- /* assume "Regular" style if we don't know better */
- cidface->style_name = (char *)"Regular";
- if ( cidface->family_name )
- {
- char* full = info->full_name;
- char* family = cidface->family_name;
-
-
- if ( full )
- {
- while ( *full )
- {
- if ( *full == *family )
- {
- family++;
- full++;
- }
- else
- {
- if ( *full == ' ' || *full == '-' )
- full++;
- else if ( *family == ' ' || *family == '-' )
- family++;
- else
- {
- if ( !*family )
- cidface->style_name = full;
- break;
- }
- }
- }
- }
- }
- else
- {
- /* do we have a `/FontName'? */
- if ( cid->cid_font_name )
- cidface->family_name = cid->cid_font_name;
- }
-
- /* compute style flags */
- cidface->style_flags = 0;
- if ( info->italic_angle )
- cidface->style_flags |= FT_STYLE_FLAG_ITALIC;
- if ( info->weight )
- {
- if ( !ft_strcmp( info->weight, "Bold" ) ||
- !ft_strcmp( info->weight, "Black" ) )
- cidface->style_flags |= FT_STYLE_FLAG_BOLD;
- }
-
- /* no embedded bitmap support */
- cidface->num_fixed_sizes = 0;
- cidface->available_sizes = NULL;
-
- cidface->bbox.xMin = cid->font_bbox.xMin >> 16;
- cidface->bbox.yMin = cid->font_bbox.yMin >> 16;
- /* no `U' suffix here to 0xFFFF! */
- cidface->bbox.xMax = ( cid->font_bbox.xMax + 0xFFFF ) >> 16;
- cidface->bbox.yMax = ( cid->font_bbox.yMax + 0xFFFF ) >> 16;
-
- if ( !cidface->units_per_EM )
- cidface->units_per_EM = 1000;
-
- cidface->ascender = (FT_Short)( cidface->bbox.yMax );
- cidface->descender = (FT_Short)( cidface->bbox.yMin );
-
- cidface->height = (FT_Short)( ( cidface->units_per_EM * 12 ) / 10 );
- if ( cidface->height < cidface->ascender - cidface->descender )
- cidface->height = (FT_Short)( cidface->ascender - cidface->descender );
-
- cidface->underline_position = (FT_Short)info->underline_position;
- cidface->underline_thickness = (FT_Short)info->underline_thickness;
- }
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cid_driver_init */
- /* */
- /* <Description> */
- /* Initializes a given CID driver object. */
- /* */
- /* <Input> */
- /* driver :: A handle to the target driver object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- cid_driver_init( FT_Module driver )
- {
- FT_UNUSED( driver );
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cid_driver_done */
- /* */
- /* <Description> */
- /* Finalizes a given CID driver. */
- /* */
- /* <Input> */
- /* driver :: A handle to the target CID driver. */
- /* */
- FT_LOCAL_DEF( void )
- cid_driver_done( FT_Module driver )
- {
- FT_UNUSED( driver );
- }
-
-
-/* END */
diff --git a/src/cid/cidobjs.h b/src/cid/cidobjs.h
deleted file mode 100644
index 8bcf886e1..000000000
--- a/src/cid/cidobjs.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidobjs.h */
-/* */
-/* CID objects manager (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CIDOBJS_H_
-#define CIDOBJS_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_TYPE1_TYPES_H
-
-
-FT_BEGIN_HEADER
-
-
- /* The following structures must be defined by the hinter */
- typedef struct CID_Size_Hints_ CID_Size_Hints;
- typedef struct CID_Glyph_Hints_ CID_Glyph_Hints;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CID_Driver */
- /* */
- /* <Description> */
- /* A handle to a Type 1 driver object. */
- /* */
- typedef struct CID_DriverRec_* CID_Driver;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CID_Size */
- /* */
- /* <Description> */
- /* A handle to a Type 1 size object. */
- /* */
- typedef struct CID_SizeRec_* CID_Size;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CID_GlyphSlot */
- /* */
- /* <Description> */
- /* A handle to a Type 1 glyph slot object. */
- /* */
- typedef struct CID_GlyphSlotRec_* CID_GlyphSlot;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CID_CharMap */
- /* */
- /* <Description> */
- /* A handle to a Type 1 character mapping object. */
- /* */
- /* <Note> */
- /* The Type 1 format doesn't use a charmap but an encoding table. */
- /* The driver is responsible for making up charmap objects */
- /* corresponding to these tables. */
- /* */
- typedef struct CID_CharMapRec_* CID_CharMap;
-
-
- /*************************************************************************/
- /* */
- /* HERE BEGINS THE TYPE 1 SPECIFIC STUFF */
- /* */
- /*************************************************************************/
-
-
- typedef struct CID_SizeRec_
- {
- FT_SizeRec root;
- FT_Bool valid;
-
- } CID_SizeRec;
-
-
- typedef struct CID_GlyphSlotRec_
- {
- FT_GlyphSlotRec root;
-
- FT_Bool hint;
- FT_Bool scaled;
-
- FT_Fixed x_scale;
- FT_Fixed y_scale;
-
- } CID_GlyphSlotRec;
-
-
- FT_LOCAL( void )
- cid_slot_done( FT_GlyphSlot slot );
-
- FT_LOCAL( FT_Error )
- cid_slot_init( FT_GlyphSlot slot );
-
-
- FT_LOCAL( void )
- cid_size_done( FT_Size size ); /* CID_Size */
-
- FT_LOCAL( FT_Error )
- cid_size_init( FT_Size size ); /* CID_Size */
-
- FT_LOCAL( FT_Error )
- cid_size_request( FT_Size size, /* CID_Size */
- FT_Size_Request req );
-
- FT_LOCAL( FT_Error )
- cid_face_init( FT_Stream stream,
- FT_Face face, /* CID_Face */
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params );
-
- FT_LOCAL( void )
- cid_face_done( FT_Face face ); /* CID_Face */
-
-
- FT_LOCAL( FT_Error )
- cid_driver_init( FT_Module driver );
-
- FT_LOCAL( void )
- cid_driver_done( FT_Module driver );
-
-
-FT_END_HEADER
-
-#endif /* CIDOBJS_H_ */
-
-
-/* END */
diff --git a/src/cid/cidparse.c b/src/cid/cidparse.c
deleted file mode 100644
index 007609bbd..000000000
--- a/src/cid/cidparse.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidparse.c */
-/* */
-/* CID-keyed Type1 parser (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_STREAM_H
-
-#include "cidparse.h"
-
-#include "ciderrs.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cidparse
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** INPUT STREAM PARSER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
-#define STARTDATA "StartData"
-#define STARTDATA_LEN ( sizeof ( STARTDATA ) - 1 )
-#define SFNTS "/sfnts"
-#define SFNTS_LEN ( sizeof ( SFNTS ) - 1 )
-
-
- FT_LOCAL_DEF( FT_Error )
- cid_parser_new( CID_Parser* parser,
- FT_Stream stream,
- FT_Memory memory,
- PSAux_Service psaux )
- {
- FT_Error error;
- FT_ULong base_offset, offset, ps_len;
- FT_Byte *cur, *limit;
- FT_Byte *arg1, *arg2;
-
-
- FT_ZERO( parser );
- psaux->ps_parser_funcs->init( &parser->root, 0, 0, memory );
-
- parser->stream = stream;
-
- base_offset = FT_STREAM_POS();
-
- /* first of all, check the font format in the header */
- if ( FT_FRAME_ENTER( 31 ) )
- goto Exit;
-
- if ( ft_strncmp( (char *)stream->cursor,
- "%!PS-Adobe-3.0 Resource-CIDFont", 31 ) )
- {
- FT_TRACE2(( " not a CID-keyed font\n" ));
- error = FT_THROW( Unknown_File_Format );
- }
-
- FT_FRAME_EXIT();
- if ( error )
- goto Exit;
-
- Again:
- /* now, read the rest of the file until we find */
- /* `StartData' or `/sfnts' */
- {
- /*
- * The algorithm is as follows (omitting the case with less than 256
- * bytes to fill for simplicity).
- *
- * 1. Fill the buffer with 256 + STARTDATA_LEN bytes.
- *
- * 2. Search for the STARTDATA and SFNTS strings at positions
- * buffer[0], buffer[1], ...,
- * buffer[255 + STARTDATA_LEN - SFNTS_LEN].
- *
- * 3. Move the last STARTDATA_LEN bytes to buffer[0].
- *
- * 4. Fill the buffer with 256 bytes, starting at STARTDATA_LEN.
- *
- * 5. Repeat with step 2.
- *
- */
- FT_Byte buffer[256 + STARTDATA_LEN + 1];
-
- /* values for the first loop */
- FT_ULong read_len = 256 + STARTDATA_LEN;
- FT_ULong read_offset = 0;
- FT_Byte* p = buffer;
-
-
- for ( offset = FT_STREAM_POS(); ; offset += 256 )
- {
- FT_ULong stream_len;
-
-
- stream_len = stream->size - FT_STREAM_POS();
-
- read_len = FT_MIN( read_len, stream_len );
- if ( FT_STREAM_READ( p, read_len ) )
- goto Exit;
-
- /* ensure that we do not compare with data beyond the buffer */
- p[read_len] = '\0';
-
- limit = p + read_len - SFNTS_LEN;
-
- for ( p = buffer; p < limit; p++ )
- {
- if ( p[0] == 'S' &&
- ft_strncmp( (char*)p, STARTDATA, STARTDATA_LEN ) == 0 )
- {
- /* save offset of binary data after `StartData' */
- offset += (FT_ULong)( p - buffer ) + STARTDATA_LEN + 1;
- goto Found;
- }
- else if ( p[1] == 's' &&
- ft_strncmp( (char*)p, SFNTS, SFNTS_LEN ) == 0 )
- {
- offset += (FT_ULong)( p - buffer ) + SFNTS_LEN + 1;
- goto Found;
- }
- }
-
- if ( read_offset + read_len < STARTDATA_LEN )
- {
- FT_TRACE2(( "cid_parser_new: no `StartData' keyword found\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- FT_MEM_MOVE( buffer,
- buffer + read_offset + read_len - STARTDATA_LEN,
- STARTDATA_LEN );
-
- /* values for the next loop */
- read_len = 256;
- read_offset = STARTDATA_LEN;
- p = buffer + read_offset;
- }
- }
-
- Found:
- /* We have found the start of the binary data or the `/sfnts' token. */
- /* Now rewind and extract the frame corresponding to this PostScript */
- /* section. */
-
- ps_len = offset - base_offset;
- if ( FT_STREAM_SEEK( base_offset ) ||
- FT_FRAME_EXTRACT( ps_len, parser->postscript ) )
- goto Exit;
-
- parser->data_offset = offset;
- parser->postscript_len = ps_len;
- parser->root.base = parser->postscript;
- parser->root.cursor = parser->postscript;
- parser->root.limit = parser->root.cursor + ps_len;
- parser->num_dict = -1;
-
- /* Finally, we check whether `StartData' or `/sfnts' was real -- */
- /* it could be in a comment or string. We also get the arguments */
- /* of `StartData' to find out whether the data is represented in */
- /* binary or hex format. */
-
- arg1 = parser->root.cursor;
- cid_parser_skip_PS_token( parser );
- cid_parser_skip_spaces ( parser );
- arg2 = parser->root.cursor;
- cid_parser_skip_PS_token( parser );
- cid_parser_skip_spaces ( parser );
-
- limit = parser->root.limit;
- cur = parser->root.cursor;
-
- while ( cur <= limit - SFNTS_LEN )
- {
- if ( parser->root.error )
- {
- error = parser->root.error;
- goto Exit;
- }
-
- if ( cur[0] == 'S' &&
- cur <= limit - STARTDATA_LEN &&
- ft_strncmp( (char*)cur, STARTDATA, STARTDATA_LEN ) == 0 )
- {
- if ( ft_strncmp( (char*)arg1, "(Hex)", 5 ) == 0 )
- {
- FT_Long tmp = ft_strtol( (const char *)arg2, NULL, 10 );
-
-
- if ( tmp < 0 )
- {
- FT_ERROR(( "cid_parser_new: invalid length of hex data\n" ));
- error = FT_THROW( Invalid_File_Format );
- }
- else
- parser->binary_length = (FT_ULong)tmp;
- }
-
- goto Exit;
- }
- else if ( cur[1] == 's' &&
- ft_strncmp( (char*)cur, SFNTS, SFNTS_LEN ) == 0 )
- {
- FT_TRACE2(( "cid_parser_new: cannot handle Type 11 fonts\n" ));
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
-
- cid_parser_skip_PS_token( parser );
- cid_parser_skip_spaces ( parser );
- arg1 = arg2;
- arg2 = cur;
- cur = parser->root.cursor;
- }
-
- /* we haven't found the correct `StartData'; go back and continue */
- /* searching */
- FT_FRAME_RELEASE( parser->postscript );
- if ( !FT_STREAM_SEEK( offset ) )
- goto Again;
-
- Exit:
- return error;
- }
-
-
-#undef STARTDATA
-#undef STARTDATA_LEN
-#undef SFNTS
-#undef SFNTS_LEN
-
-
- FT_LOCAL_DEF( void )
- cid_parser_done( CID_Parser* parser )
- {
- /* always free the private dictionary */
- if ( parser->postscript )
- {
- FT_Stream stream = parser->stream;
-
-
- FT_FRAME_RELEASE( parser->postscript );
- }
- parser->root.funcs.done( &parser->root );
- }
-
-
-/* END */
diff --git a/src/cid/cidparse.h b/src/cid/cidparse.h
deleted file mode 100644
index 20bebb942..000000000
--- a/src/cid/cidparse.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidparse.h */
-/* */
-/* CID-keyed Type1 parser (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CIDPARSE_H_
-#define CIDPARSE_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_TYPE1_TYPES_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* CID_Parser */
- /* */
- /* <Description> */
- /* A CID_Parser is an object used to parse a Type 1 fonts very */
- /* quickly. */
- /* */
- /* <Fields> */
- /* root :: The root PS_ParserRec fields. */
- /* */
- /* stream :: The current input stream. */
- /* */
- /* postscript :: A pointer to the data to be parsed. */
- /* */
- /* postscript_len :: The length of the data to be parsed. */
- /* */
- /* data_offset :: The start position of the binary data (i.e., the */
- /* end of the data to be parsed. */
- /* */
- /* binary_length :: The length of the data after the `StartData' */
- /* command if the data format is hexadecimal. */
- /* */
- /* cid :: A structure which holds the information about */
- /* the current font. */
- /* */
- /* num_dict :: The number of font dictionaries. */
- /* */
- typedef struct CID_Parser_
- {
- PS_ParserRec root;
- FT_Stream stream;
-
- FT_Byte* postscript;
- FT_ULong postscript_len;
-
- FT_ULong data_offset;
-
- FT_ULong binary_length;
-
- CID_FaceInfo cid;
- FT_Int num_dict;
-
- } CID_Parser;
-
-
- FT_LOCAL( FT_Error )
- cid_parser_new( CID_Parser* parser,
- FT_Stream stream,
- FT_Memory memory,
- PSAux_Service psaux );
-
- FT_LOCAL( void )
- cid_parser_done( CID_Parser* parser );
-
-
- /*************************************************************************/
- /* */
- /* PARSING ROUTINES */
- /* */
- /*************************************************************************/
-
-#define cid_parser_skip_spaces( p ) \
- (p)->root.funcs.skip_spaces( &(p)->root )
-#define cid_parser_skip_PS_token( p ) \
- (p)->root.funcs.skip_PS_token( &(p)->root )
-
-#define cid_parser_to_int( p ) (p)->root.funcs.to_int( &(p)->root )
-#define cid_parser_to_fixed( p, t ) (p)->root.funcs.to_fixed( &(p)->root, t )
-
-#define cid_parser_to_coord_array( p, m, c ) \
- (p)->root.funcs.to_coord_array( &(p)->root, m, c )
-#define cid_parser_to_fixed_array( p, m, f, t ) \
- (p)->root.funcs.to_fixed_array( &(p)->root, m, f, t )
-#define cid_parser_to_token( p, t ) \
- (p)->root.funcs.to_token( &(p)->root, t )
-#define cid_parser_to_token_array( p, t, m, c ) \
- (p)->root.funcs.to_token_array( &(p)->root, t, m, c )
-
-#define cid_parser_load_field( p, f, o ) \
- (p)->root.funcs.load_field( &(p)->root, f, o, 0, 0 )
-#define cid_parser_load_field_table( p, f, o ) \
- (p)->root.funcs.load_field_table( &(p)->root, f, o, 0, 0 )
-
-
-FT_END_HEADER
-
-#endif /* CIDPARSE_H_ */
-
-
-/* END */
diff --git a/src/cid/cidriver.c b/src/cid/cidriver.c
deleted file mode 100644
index bb611a961..000000000
--- a/src/cid/cidriver.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidriver.c */
-/* */
-/* CID driver interface (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include "cidriver.h"
-#include "cidgload.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "ciderrs.h"
-
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_FONT_FORMAT_H
-#include FT_SERVICE_POSTSCRIPT_INFO_H
-#include FT_SERVICE_CID_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_ciddriver
-
-
- /*
- * POSTSCRIPT NAME SERVICE
- *
- */
-
- static const char*
- cid_get_postscript_name( CID_Face face )
- {
- const char* result = face->cid.cid_font_name;
-
-
- if ( result && result[0] == '/' )
- result++;
-
- return result;
- }
-
-
- static const FT_Service_PsFontNameRec cid_service_ps_name =
- {
- (FT_PsName_GetFunc)cid_get_postscript_name /* get_ps_font_name */
- };
-
-
- /*
- * POSTSCRIPT INFO SERVICE
- *
- */
-
- static FT_Error
- cid_ps_get_font_info( FT_Face face,
- PS_FontInfoRec* afont_info )
- {
- *afont_info = ((CID_Face)face)->cid.font_info;
-
- return FT_Err_Ok;
- }
-
- static FT_Error
- cid_ps_get_font_extra( FT_Face face,
- PS_FontExtraRec* afont_extra )
- {
- *afont_extra = ((CID_Face)face)->font_extra;
-
- return FT_Err_Ok;
- }
-
- static const FT_Service_PsInfoRec cid_service_ps_info =
- {
- (PS_GetFontInfoFunc) cid_ps_get_font_info, /* ps_get_font_info */
- (PS_GetFontExtraFunc) cid_ps_get_font_extra, /* ps_get_font_extra */
- /* unsupported with CID fonts */
- (PS_HasGlyphNamesFunc) NULL, /* ps_has_glyph_names */
- /* unsupported */
- (PS_GetFontPrivateFunc)NULL, /* ps_get_font_private */
- /* not implemented */
- (PS_GetFontValueFunc) NULL /* ps_get_font_value */
- };
-
-
- /*
- * CID INFO SERVICE
- *
- */
- static FT_Error
- cid_get_ros( CID_Face face,
- const char* *registry,
- const char* *ordering,
- FT_Int *supplement )
- {
- CID_FaceInfo cid = &face->cid;
-
-
- if ( registry )
- *registry = cid->registry;
-
- if ( ordering )
- *ordering = cid->ordering;
-
- if ( supplement )
- *supplement = cid->supplement;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Error
- cid_get_is_cid( CID_Face face,
- FT_Bool *is_cid )
- {
- FT_Error error = FT_Err_Ok;
- FT_UNUSED( face );
-
-
- if ( is_cid )
- *is_cid = 1; /* cid driver is only used for CID keyed fonts */
-
- return error;
- }
-
-
- static FT_Error
- cid_get_cid_from_glyph_index( CID_Face face,
- FT_UInt glyph_index,
- FT_UInt *cid )
- {
- FT_Error error = FT_Err_Ok;
- FT_UNUSED( face );
-
-
- if ( cid )
- *cid = glyph_index; /* identity mapping */
-
- return error;
- }
-
-
- static const FT_Service_CIDRec cid_service_cid_info =
- {
- (FT_CID_GetRegistryOrderingSupplementFunc)
- cid_get_ros, /* get_ros */
- (FT_CID_GetIsInternallyCIDKeyedFunc)
- cid_get_is_cid, /* get_is_cid */
- (FT_CID_GetCIDFromGlyphIndexFunc)
- cid_get_cid_from_glyph_index /* get_cid_from_glyph_index */
- };
-
-
- /*
- * SERVICE LIST
- *
- */
-
- static const FT_ServiceDescRec cid_services[] =
- {
- { FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CID },
- { FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cid_service_ps_name },
- { FT_SERVICE_ID_POSTSCRIPT_INFO, &cid_service_ps_info },
- { FT_SERVICE_ID_CID, &cid_service_cid_info },
- { NULL, NULL }
- };
-
-
- FT_CALLBACK_DEF( FT_Module_Interface )
- cid_get_interface( FT_Module module,
- const char* cid_interface )
- {
- FT_UNUSED( module );
-
- return ft_service_list_lookup( cid_services, cid_interface );
- }
-
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Driver_ClassRec t1cid_driver_class =
- {
- {
- FT_MODULE_FONT_DRIVER |
- FT_MODULE_DRIVER_SCALABLE |
- FT_MODULE_DRIVER_HAS_HINTER,
- sizeof ( FT_DriverRec ),
-
- "t1cid", /* module name */
- 0x10000L, /* version 1.0 of driver */
- 0x20000L, /* requires FreeType 2.0 */
-
- NULL, /* module-specific interface */
-
- cid_driver_init, /* FT_Module_Constructor module_init */
- cid_driver_done, /* FT_Module_Destructor module_done */
- cid_get_interface /* FT_Module_Requester get_interface */
- },
-
- sizeof ( CID_FaceRec ),
- sizeof ( CID_SizeRec ),
- sizeof ( CID_GlyphSlotRec ),
-
- cid_face_init, /* FT_Face_InitFunc init_face */
- cid_face_done, /* FT_Face_DoneFunc done_face */
- cid_size_init, /* FT_Size_InitFunc init_size */
- cid_size_done, /* FT_Size_DoneFunc done_size */
- cid_slot_init, /* FT_Slot_InitFunc init_slot */
- cid_slot_done, /* FT_Slot_DoneFunc done_slot */
-
- cid_slot_load_glyph, /* FT_Slot_LoadFunc load_glyph */
-
- NULL, /* FT_Face_GetKerningFunc get_kerning */
- NULL, /* FT_Face_AttachFunc attach_file */
- NULL, /* FT_Face_GetAdvancesFunc get_advances */
-
- cid_size_request, /* FT_Size_RequestFunc request_size */
- NULL /* FT_Size_SelectFunc select_size */
- };
-
-
-/* END */
diff --git a/src/cid/cidriver.h b/src/cid/cidriver.h
deleted file mode 100644
index 76640c57b..000000000
--- a/src/cid/cidriver.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidriver.h */
-/* */
-/* High-level CID driver interface (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CIDRIVER_H_
-#define CIDRIVER_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-
-
-FT_BEGIN_HEADER
-
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
-
- FT_CALLBACK_TABLE
- const FT_Driver_ClassRec t1cid_driver_class;
-
-
-FT_END_HEADER
-
-#endif /* CIDRIVER_H_ */
-
-
-/* END */
diff --git a/src/cid/cidtoken.h b/src/cid/cidtoken.h
deleted file mode 100644
index 653cc5586..000000000
--- a/src/cid/cidtoken.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidtoken.h */
-/* */
-/* CID token definitions (specification only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE CID_FaceInfoRec
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_CID_INFO
-
- T1_FIELD_KEY ( "CIDFontName", cid_font_name, 0 )
- T1_FIELD_FIXED ( "CIDFontVersion", cid_version, 0 )
- T1_FIELD_NUM ( "CIDFontType", cid_font_type, 0 )
- T1_FIELD_STRING( "Registry", registry, 0 )
- T1_FIELD_STRING( "Ordering", ordering, 0 )
- T1_FIELD_NUM ( "Supplement", supplement, 0 )
- T1_FIELD_NUM ( "UIDBase", uid_base, 0 )
- T1_FIELD_NUM ( "CIDMapOffset", cidmap_offset, 0 )
- T1_FIELD_NUM ( "FDBytes", fd_bytes, 0 )
- T1_FIELD_NUM ( "GDBytes", gd_bytes, 0 )
- T1_FIELD_NUM ( "CIDCount", cid_count, 0 )
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PS_FontInfoRec
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_FONT_INFO
-
- T1_FIELD_STRING( "version", version, 0 )
- T1_FIELD_STRING( "Notice", notice, 0 )
- T1_FIELD_STRING( "FullName", full_name, 0 )
- T1_FIELD_STRING( "FamilyName", family_name, 0 )
- T1_FIELD_STRING( "Weight", weight, 0 )
- T1_FIELD_NUM ( "ItalicAngle", italic_angle, 0 )
- T1_FIELD_BOOL ( "isFixedPitch", is_fixed_pitch, 0 )
- T1_FIELD_NUM ( "UnderlinePosition", underline_position, 0 )
- T1_FIELD_NUM ( "UnderlineThickness", underline_thickness, 0 )
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PS_FontExtraRec
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_FONT_EXTRA
-
- T1_FIELD_NUM ( "FSType", fs_type, 0 )
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE CID_FaceDictRec
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_FONT_DICT
-
- T1_FIELD_NUM ( "PaintType", paint_type, 0 )
- T1_FIELD_NUM ( "FontType", font_type, 0 )
- T1_FIELD_NUM ( "SubrMapOffset", subrmap_offset, 0 )
- T1_FIELD_NUM ( "SDBytes", sd_bytes, 0 )
- T1_FIELD_NUM ( "SubrCount", num_subrs, 0 )
- T1_FIELD_NUM ( "lenBuildCharArray", len_buildchar, 0 )
- T1_FIELD_FIXED( "ForceBoldThreshold", forcebold_threshold, 0 )
- T1_FIELD_FIXED( "StrokeWidth", stroke_width, 0 )
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PS_PrivateRec
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_PRIVATE
-
- T1_FIELD_NUM ( "UniqueID", unique_id, 0 )
- T1_FIELD_NUM ( "lenIV", lenIV, 0 )
- T1_FIELD_NUM ( "LanguageGroup", language_group, 0 )
- T1_FIELD_NUM ( "password", password, 0 )
-
- T1_FIELD_FIXED_1000( "BlueScale", blue_scale, 0 )
- T1_FIELD_NUM ( "BlueShift", blue_shift, 0 )
- T1_FIELD_NUM ( "BlueFuzz", blue_fuzz, 0 )
-
- T1_FIELD_NUM_TABLE ( "BlueValues", blue_values, 14, 0 )
- T1_FIELD_NUM_TABLE ( "OtherBlues", other_blues, 10, 0 )
- T1_FIELD_NUM_TABLE ( "FamilyBlues", family_blues, 14, 0 )
- T1_FIELD_NUM_TABLE ( "FamilyOtherBlues", family_other_blues, 10, 0 )
-
- T1_FIELD_NUM_TABLE2( "StdHW", standard_width, 1, 0 )
- T1_FIELD_NUM_TABLE2( "StdVW", standard_height, 1, 0 )
- T1_FIELD_NUM_TABLE2( "MinFeature", min_feature, 2, 0 )
-
- T1_FIELD_NUM_TABLE ( "StemSnapH", snap_widths, 12, 0 )
- T1_FIELD_NUM_TABLE ( "StemSnapV", snap_heights, 12, 0 )
-
- T1_FIELD_BOOL ( "ForceBold", force_bold, 0 )
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE FT_BBox
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_BBOX
-
- T1_FIELD_BBOX( "FontBBox", xMin, 0 )
-
-
-/* END */
diff --git a/src/cid/module.mk b/src/cid/module.mk
deleted file mode 100644
index b30b8679b..000000000
--- a/src/cid/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 CID module definition
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += TYPE1CID_DRIVER
-
-define TYPE1CID_DRIVER
-$(OPEN_DRIVER) FT_Driver_ClassRec, t1cid_driver_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)cid $(ECHO_DRIVER_DESC)Postscript CID-keyed fonts, no known extension$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/cid/rules.mk b/src/cid/rules.mk
deleted file mode 100644
index fcddd92ec..000000000
--- a/src/cid/rules.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-#
-# FreeType 2 CID driver configuration rules
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# CID driver directory
-#
-CID_DIR := $(SRC_DIR)/cid
-
-
-CID_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(CID_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# CID driver sources (i.e., C files)
-#
-CID_DRV_SRC := $(CID_DIR)/cidparse.c \
- $(CID_DIR)/cidload.c \
- $(CID_DIR)/cidriver.c \
- $(CID_DIR)/cidgload.c \
- $(CID_DIR)/cidobjs.c
-
-# CID driver headers
-#
-CID_DRV_H := $(CID_DRV_SRC:%.c=%.h) \
- $(CID_DIR)/cidtoken.h \
- $(CID_DIR)/ciderrs.h
-
-
-# CID driver object(s)
-#
-# CID_DRV_OBJ_M is used during `multi' builds
-# CID_DRV_OBJ_S is used during `single' builds
-#
-CID_DRV_OBJ_M := $(CID_DRV_SRC:$(CID_DIR)/%.c=$(OBJ_DIR)/%.$O)
-CID_DRV_OBJ_S := $(OBJ_DIR)/type1cid.$O
-
-# CID driver source file for single build
-#
-CID_DRV_SRC_S := $(CID_DIR)/type1cid.c
-
-
-# CID driver - single object
-#
-$(CID_DRV_OBJ_S): $(CID_DRV_SRC_S) $(CID_DRV_SRC) $(FREETYPE_H) $(CID_DRV_H)
- $(CID_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(CID_DRV_SRC_S))
-
-
-# CID driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(CID_DIR)/%.c $(FREETYPE_H) $(CID_DRV_H)
- $(CID_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(CID_DRV_OBJ_S)
-DRV_OBJS_M += $(CID_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/cid/type1cid.c b/src/cid/type1cid.c
deleted file mode 100644
index 93e6f810d..000000000
--- a/src/cid/type1cid.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/***************************************************************************/
-/* */
-/* type1cid.c */
-/* */
-/* FreeType OpenType driver component (body only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "cidgload.c"
-#include "cidload.c"
-#include "cidobjs.c"
-#include "cidparse.c"
-#include "cidriver.c"
-
-
-/* END */
diff --git a/src/gxvalid/Jamfile b/src/gxvalid/Jamfile
deleted file mode 100644
index a120128ae..000000000
--- a/src/gxvalid/Jamfile
+++ /dev/null
@@ -1,52 +0,0 @@
-# FreeType 2 src/gxvalid Jamfile
-#
-# Copyright 2005-2017 by
-# suzuki toshiya, Masatake YAMATO and Red Hat K.K.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) gxvalid ;
-
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = gxvbsln
- gxvcommn
- gxvfeat
- gxvjust
- gxvkern
- gxvlcar
- gxvmod
- gxvmort
- gxvmort0
- gxvmort1
- gxvmort2
- gxvmort4
- gxvmort5
- gxvmorx
- gxvmorx0
- gxvmorx1
- gxvmorx2
- gxvmorx4
- gxvmorx5
- gxvopbd
- gxvprop
- gxvtrak
- ;
- }
- else
- {
- _sources = gxvalid ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/gxvalid Jamfile
diff --git a/src/gxvalid/README b/src/gxvalid/README
deleted file mode 100644
index 7201459aa..000000000
--- a/src/gxvalid/README
+++ /dev/null
@@ -1,532 +0,0 @@
-gxvalid: TrueType GX validator
-==============================
-
-
-1. What is this
----------------
-
- `gxvalid' is a module to validate TrueType GX tables: a collection of
- additional tables in TrueType font which are used by `QuickDraw GX
- Text', Apple Advanced Typography (AAT). In addition, gxvalid can
- validates `kern' tables which have been extended for AAT. Like the
- otvalid module, gxvalid uses Freetype 2's validator framework
- (ftvalid).
-
- You can link gxvalid with your program; before running your own layout
- engine, gxvalid validates a font file. As the result, you can remove
- error-checking code from the layout engine. It is also possible to
- use gxvalid as a stand-alone font validator; the `ftvalid' test
- program included in the ft2demo bundle calls gxvalid internally.
- A stand-alone font validator may be useful for font developers.
-
- This documents documents the following issues.
-
- - supported TrueType GX tables
- - fundamental validation limitations
- - permissive error handling of broken GX tables
- - `kern' table issue.
-
-
-2. Supported tables
--------------------
-
- The following GX tables are currently supported.
-
- bsln
- feat
- just
- kern(*)
- lcar
- mort
- morx
- opbd
- prop
- trak
-
- The following GX tables are currently unsupported.
-
- cvar
- fdsc
- fmtx
- fvar
- gvar
- Zapf
-
- The following GX tables won't be supported.
-
- acnt(**)
- hsty(***)
-
- The following undocumented tables in TrueType fonts designed for Apple
- platform aren't handled either.
-
- addg
- CVTM
- TPNM
- umif
-
-
- *) The `kern' validator handles both the classic and the new kern
- formats; the former is supported on both Microsoft and Apple
- platforms, while the latter is supported on Apple platforms.
-
- **) `acnt' tables are not supported by currently available Apple font
- tools.
-
- ***) There is one more Apple extension, `hsty', but it is for
- Newton-OS, not GX (Newton-OS is a platform by Apple, but it can
- use sfnt- housed bitmap fonts only). Therefore, it should be
- excluded from `Apple platform' in the context of TrueType.
- gxvalid ignores it as Apple font tools do so.
-
-
- We have checked 183 fonts bundled with MacOS 9.1, MacOS 9.2, MacOS
- 10.0, MacOS X 10.1, MSIE for MacOS, and AppleWorks 6.0. In addition,
- we have checked 67 Dynalab fonts (designed for MacOS) and 189 Ricoh
- fonts (designed for Windows and MacOS dual platforms). The number of
- fonts including TrueType GX tables are as follows.
-
- bsln: 76
- feat: 191
- just: 84
- kern: 59
- lcar: 4
- mort: 326
- morx: 19
- opbd: 4
- prop: 114
- trak: 16
-
- Dynalab and Ricoh fonts don't have GX tables except of `feat' and
- `mort'.
-
-
-3. Fundamental validation limitations
--------------------------------------
-
- TrueType GX provides layout information to libraries for font
- rasterizers and text layout. gxvalid can check whether the layout
- data in a font is conformant to the TrueType GX format specified by
- Apple. But gxvalid cannot check a how QuickDraw GX/AAT renderer uses
- the stored information.
-
- 3-1. Validation of State Machine activity
- -----------------------------------------
-
- QuickDraw GX/AAT uses a `State Machine' to provide `stateful' layout
- features, and TrueType GX stores the state transition diagram of
- this `State Machine' in a `StateTable' data structure. While the
- State Machine receives a series of glyph IDs, the State Machine
- starts with `start of text' state, walks around various states and
- generates various layout information to the renderer, and finally
- reaches the `end of text' state.
-
- gxvalid can check essential errors like:
-
- - possibility of state transitions to undefined states
- - existence of glyph IDs that the State Machine doesn't know how
- to handle
- - the State Machine cannot compute the layout information from
- given diagram
-
- These errors can be checked within finite steps, and without the
- State Machine itself, because these are `expression' errors of state
- transition diagram.
-
- There is no limitation about how long the State Machine walks
- around, so validation of the algorithm in the state transition
- diagram requires infinite steps, even if we had a State Machine in
- gxvalid. Therefore, the following errors and problems cannot be
- checked.
-
- - existence of states which the State Machine never transits to
- - the possibility that the State Machine never reaches `end of
- text'
- - the possibility of stack underflow/overflow in the State Machine
- (in ligature and contextual glyph substitutions, the State
- Machine can store 16 glyphs onto its stack)
-
- In addition, gxvalid doesn't check `temporary glyph IDs' used in the
- chained State Machines (in `mort' and `morx' tables). If a layout
- feature is implemented by a single State Machine, a glyph ID
- converted by the State Machine is passed to the glyph renderer, thus
- it should not point to an undefined glyph ID. But if a layout
- feature is implemented by chained State Machines, a component State
- Machine (if it is not the final one) is permitted to generate
- undefined glyph IDs for temporary use, because it is handled by next
- component State Machine and not by the glyph renderer. To validate
- such temporary glyph IDs, gxvalid must stack all undefined glyph IDs
- which can occur in the output of the previous State Machine and
- search them in the `ClassTable' structure of the current State
- Machine. It is too complex to list all possible glyph IDs from the
- StateTable, especially from a ligature substitution table.
-
- 3-2. Validation of relationship between multiple layout features
- ----------------------------------------------------------------
-
- gxvalid does not validate the relationship between multiple layout
- features at all.
-
- If multiple layout features are defined in TrueType GX tables,
- possible interactions, overrides, and conflicts between layout
- features are implicitly given in the font too. For example, there
- are several predefined spacing control features:
-
- - Text Spacing (Proportional/Monospace/Half-width/Normal)
- - Number Spacing (Monospaced-numbers/Proportional-numbers)
- - Kana Spacing (Full-width/Proportional)
- - Ideographic Spacing (Full-width/Proportional)
- - CJK Roman Spacing (Half-width/Proportional/Default-roman
- /Full-width-roman/Proportional)
-
- If all layout features are independently managed, we can activate
- inconsistent typographic rules like `Text Spacing=Monospace' and
- `Ideographic Spacing=Proportional' at the same time.
-
- The combinations of layout features is managed by a 32bit integer
- (one bit each for selector setting), so we can define relationships
- between up to 32 features, theoretically. But if one feature
- setting affects another feature setting, we need typographic
- priority rules to validate the relationship. Unfortunately, the
- TrueType GX format specification does not give such information even
- for predefined features.
-
-
-4. Permissive error handling of broken GX tables
-------------------------------------------------
-
- When Apple's font rendering system finds an inconsistency, like a
- specification violation or an unspecified value in a TrueType GX
- table, it does not always return error. In most cases, the rendering
- engine silently ignores such wrong values or even whole tables. In
- fact, MacOS is shipped with fonts including broken GX/AAT tables, but
- no harmful effects due to `officially broken' fonts are observed by
- end-users.
-
- gxvalid is designed to continue the validation process as long as
- possible. When gxvalid find wrong values, gxvalid warns it at least,
- and takes a fallback procedure if possible. The fallback procedure
- depends on the debug level.
-
- We used the following three tools to investigate Apple's error handling.
-
- - FontValidator (for MacOS 8.5 - 9.2) resource fork font
- - ftxvalidator (for MacOS X 10.1 -) dfont or naked-sfnt
- - ftxdumperfuser (for MacOS X 10.1 -) dfont or naked-sfnt
-
- However, all tests were done on a PowerPC based Macintosh; at present,
- we have not checked those tools on a m68k-based Macintosh.
-
- In total, we checked 183 fonts bundled to MacOS 9.1, MacOS 9.2, MacOS
- 10.0, MacOS X 10.1, MSIE for MacOS, and AppleWorks 6.0. These fonts
- are distributed officially, but many broken GX/AAT tables were found
- by Apple's font tools. In the following, we list typical violation of
- the GX specification, in fonts officially distributed with those Apple
- systems.
-
- 4-1. broken BinSrchHeader (19/183)
- ----------------------------------
-
- `BinSrchHeader' is a header of a data array for m68k platforms to
- access memory efficiently. Although there are only two independent
- parameters for real (`unitSize' and `nUnits'), BinSrchHeader has
- three additional parameters which can be calculated from `unitSize'
- and `nUnits', for fast setup. Apple font tools ignore them
- silently, so gxvalid warns if it finds and inconsistency, and always
- continues validation. The additional parameters are ignored
- regardless of the consistency.
-
- 19 fonts include such inconsistencies; all breaks are in the
- BinSrchHeader structure of the `kern' table.
-
- 4-2. too-short LookupTable (5/183)
- ----------------------------------
-
- LookupTable format 0 is a simple array to get a value from a given
- GID (glyph ID); the index of this array is a GID too. Therefore,
- the length of the array is expected to be same as the maximum GID
- value defined in the `maxp' table, but there are some fonts whose
- LookupTable format 0 is too short to cover all GIDs. FontValidator
- ignores this error silently, ftxvalidator and ftxdumperfuser both
- warn and continue. Similar problems are found in format 3 subtables
- of `kern'. gxvalid warns always and abort if the validation level
- is set to FT_VALIDATE_PARANOID.
-
- 5 fonts include too-short kern format 0 subtables.
- 1 font includes too-short kern format 3 subtable.
-
- 4-3. broken LookupTable format 2 (1/183)
- ----------------------------------------
-
- LookupTable format 2, subformat 4 covers the GID space by a
- collection of segments which are specified by `firstGlyph' and
- `lastGlyph'. Some fonts store `firstGlyph' and `lastGlyph' in
- reverse order, so the segment specification is broken. Apple font
- tools ignore this error silently; a broken segment is ignored as if
- it did not exist. gxvalid warns and normalize the segment at
- FT_VALIDATE_DEFAULT, or ignore the segment at FT_VALIDATE_TIGHT, or
- abort at FT_VALIDATE_PARANOID.
-
- 1 font includes broken LookupTable format 2, in the `just' table.
-
- *) It seems that all fonts manufactured by ITC for AppleWorks have
- this error.
-
- 4-4. bad bracketing in glyph property (14/183)
- ----------------------------------------------
-
- GX/AAT defines a `bracketing' property of the glyphs in the `prop'
- table, to control layout features of strings enclosed inside and
- outside of brackets. Some fonts give inappropriate bracket
- properties to glyphs. Apple font tools warn about this error;
- gxvalid warns too and aborts at FT_VALIDATE_PARANOID.
-
- 14 fonts include wrong bracket properties.
-
-
- 4-5. invalid feature number (117/183)
- -------------------------------------
-
- The GX/AAT extension can include 255 different layout features, but
- popular layout features are predefined (see
- http://developer.apple.com/fonts/Registry/index.html). Some fonts
- include feature numbers which are incompatible with the predefined
- feature registry.
-
- In our survey, there are 140 fonts including `feat' table.
-
- a) 67 fonts use a feature number which should not be used.
- b) 117 fonts set the wrong feature range (nSetting). This is mostly
- found in the `mort' and `morx' tables.
-
- Apple font tools give no warning, although they cannot recognize
- what the feature is. At FT_VALIDATE_DEFAULT, gxvalid warns but
- continues in both cases (a, b). At FT_VALIDATE_TIGHT, gxvalid warns
- and aborts for (a), but continues for (b). At FT_VALIDATE_PARANOID,
- gxvalid warns and aborts in both cases (a, b).
-
- 4-6. invalid prop version (10/183)
- ----------------------------------
-
- As most TrueType GX tables, the `prop' table must start with a 32bit
- version identifier: 0x00010000, 0x00020000 or 0x00030000. But some
- fonts store nonsense binary data instead. When Apple font tools
- find them, they abort the processing immediately, and the data which
- follows is unhandled. gxvalid does the same.
-
- 10 fonts include broken `prop' version.
-
- All of these fonts are classic TrueType fonts for the Japanese
- script, manufactured by Apple.
-
- 4-7. unknown resource name (2/183)
- ------------------------------------
-
- NOTE: THIS IS NOT A TRUETYPE GX ERROR.
-
- If a TrueType font is stored in the resource fork or in dfont
- format, the data must be tagged as `sfnt' in the resource fork index
- to invoke TrueType font handler for the data. But the TrueType font
- data in `Keyboard.dfont' is tagged as `kbd', and that in
- `LastResort.dfont' is tagged as `lst'. Apple font tools can detect
- that the data is in TrueType format and successfully validate them.
- Maybe this is possible because they are known to be dfont. The
- current implementation of the resource fork driver of FreeType
- cannot do that, thus gxvalid cannot validate them.
-
- 2 fonts use an unknown tag for the TrueType font resource.
-
-5. `kern' table issues
-----------------------
-
- In common terminology of TrueType, `kern' is classified as a basic and
- platform-independent table. But there are Apple extensions of `kern',
- and there is an extension which requires a GX state machine for
- contextual kerning. Therefore, gxvalid includes a special validator
- for `kern' tables. Unfortunately, there is no exact algorithm to
- check Apple's extension, so gxvalid includes a heuristic algorithm to
- find the proper validation routines for all possible data formats,
- including the data format for Microsoft. By calling
- classic_kern_validate() instead of gxv_validate(), you can specify the
- `kern' format explicitly. However, current FreeType2 uses Microsoft
- `kern' format only, others are ignored (and should be handled in a
- library one level higher than FreeType).
-
- 5-1. History
- ------------
-
- The original 16bit version of `kern' was designed by Apple in the
- pre-GX era, and it was also approved by Microsoft. Afterwards,
- Apple designed a new 32bit version of the `kern' table. According
- to the documentation, the difference between the 16bit and 32bit
- version is only the size of variables in the `kern' header. In the
- following, we call the original 16bit version as `classic', and
- 32bit version as `new'.
-
- 5-2. Versions and dialects which should be differentiated
- ---------------------------------------------------------
-
- The `kern' table consists of a table header and several subtables.
- The version number which identifies a `classic' or a `new' version
- is explicitly written in the table header, but there are
- undocumented differences between Microsoft's and Apple's formats.
- It is called a `dialect' in the following. There are three cases
- which should be handled: the new Apple-dialect, the classic
- Apple-dialect, and the classic Microsoft-dialect. An analysis of
- the formats and the auto detection algorithm of gxvalid is described
- in the following.
-
- 5-2-1. Version detection: classic and new kern
- ----------------------------------------------
-
- According to Apple TrueType specification, there are only two
- differences between the classic and the new:
-
- - The `kern' table header starts with the version number.
- The classic version starts with 0x0000 (16bit),
- the new version starts with 0x00010000 (32bit).
-
- - In the `kern' table header, the number of subtables follows
- the version number.
- In the classic version, it is stored as a 16bit value.
- In the new version, it is stored as a 32bit value.
-
- From Apple font tool's output (DumpKERN is also tested in addition
- to the three Apple font tools in above), there is another
- undocumented difference. In the new version, the subtable header
- includes a 16bit variable named `tupleIndex' which does not exist
- in the classic version.
-
- The new version can store all subtable formats (0, 1, 2, and 3),
- but the Apple TrueType specification does not mention the subtable
- formats available in the classic version.
-
- 5-2-2. Available subtable formats in classic version
- ----------------------------------------------------
-
- Although the Apple TrueType specification recommends to use the
- classic version in the case if the font is designed for both the
- Apple and Microsoft platforms, it does not document the available
- subtable formats in the classic version.
-
- According to the Microsoft TrueType specification, the subtable
- format assured for Windows and OS/2 support is only subtable
- format 0. The Microsoft TrueType specification also describes
- subtable format 2, but does not mention which platforms support
- it. Subtable formats 1, 3, and higher are documented as reserved
- for future use. Therefore, the classic version can store subtable
- formats 0 and 2, at least. `ttfdump.exe', a font tool provided by
- Microsoft, ignores the subtable format written in the subtable
- header, and parses the table as if all subtables are in format 0.
-
- `kern' subtable format 1 uses a StateTable, so it cannot be
- utilized without a GX State Machine. Therefore, it is reasonable
- to assume that format 1 (and 3) were introduced after Apple had
- introduced GX and moved to the new 32bit version.
-
- 5-2-3. Apple and Microsoft dialects
- -----------------------------------
-
- The `kern' subtable has a 16bit `coverage' field to describe
- kerning attributes, but bit interpretations by Apple and Microsoft
- are different: For example, Apple uses bits 0-7 to identify the
- subtable, while Microsoft uses bits 8-15.
-
- In addition, due to the output of DumpKERN and FontValidator,
- Apple's bit interpretations of coverage in classic and new version
- are incompatible also. In summary, there are three dialects:
- classic Apple dialect, classic Microsoft dialect, and new Apple
- dialect. The classic Microsoft dialect and the new Apple dialect
- are documented by each vendors' TrueType font specification, but
- the documentation for classic Apple dialect is not available.
-
- For example, in the new Apple dialect, bit 15 is documented as
- `set to 1 if the kerning is vertical'. On the other hand, in
- classic Microsoft dialect, bit 1 is documented as `set to 1 if the
- kerning is horizontal'. From the outputs of DumpKERN and
- FontValidator, classic Apple dialect recognizes 15 as `set to 1
- when the kerning is horizontal'. From the results of similar
- experiments, classic Apple dialect seems to be the Endian reverse
- of the classic Microsoft dialect.
-
- As a conclusion it must be noted that no font tool can identify
- classic Apple dialect or classic Microsoft dialect automatically.
-
- 5-2-4. gxvalid auto dialect detection algorithm
- -----------------------------------------------
-
- The first 16 bits of the `kern' table are enough to identify the
- version:
-
- - if the first 16 bits are 0x0000, the `kern' table is in
- classic Apple dialect or classic Microsoft dialect
- - if the first 16 bits are 0x0001, and next 16 bits are 0x0000,
- the kern table is in new Apple dialect.
-
- If the `kern' table is a classic one, the 16bit `coverage' field
- is checked next. Firstly, the coverage bits are decoded for the
- classic Apple dialect using the following bit masks (this is based
- on DumpKERN output):
-
- 0x8000: 1=horizontal, 0=vertical
- 0x4000: not used
- 0x2000: 1=cross-stream, 0=normal
- 0x1FF0: reserved
- 0x000F: subtable format
-
- If any of reserved bits are set or the subtable bits is
- interpreted as format 1 or 3, we take it as `impossible in classic
- Apple dialect' and retry, using the classic Microsoft dialect.
-
- The most popular coverage in new Apple-dialect: 0x8000,
- The most popular coverage in classic Apple-dialect: 0x0000,
- The most popular coverage in classic Microsoft dialect: 0x0001.
-
- 5-3. Tested fonts
- -----------------
-
- We checked 59 fonts bundled with MacOS and 38 fonts bundled with
- Windows, where all font include a `kern' table.
-
- - fonts bundled with MacOS
- * new Apple dialect
- format 0: 18
- format 2: 1
- format 3: 1
- * classic Apple dialect
- format 0: 14
- * classic Microsoft dialect
- format 0: 15
-
- - fonts bundled with Windows
- * classic Microsoft dialect
- format 0: 38
-
- It looks strange that classic Microsoft-dialect fonts are bundled to
- MacOS: they come from MSIE for MacOS, except of MarkerFelt.dfont.
-
-
- ACKNOWLEDGEMENT
- ---------------
-
- Some parts of gxvalid are derived from both the `gxlayout' module and
- the `otvalid' module. Development of gxlayout was supported by the
- Information-technology Promotion Agency(IPA), Japan.
-
- The detailed analysis of undefined glyph ID utilization in `mort' and
- `morx' tables is provided by George Williams.
-
-------------------------------------------------------------------------
-
-Copyright 2004-2017 by
-suzuki toshiya, Masatake YAMATO, Red hat K.K.,
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute this
-file you indicate that you have read the license and understand and
-accept it fully.
-
-
---- end of README ---
diff --git a/src/gxvalid/gxvalid.c b/src/gxvalid/gxvalid.c
deleted file mode 100644
index da485141d..000000000
--- a/src/gxvalid/gxvalid.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvalid.c */
-/* */
-/* FreeType validator for TrueTypeGX/AAT tables (body only). */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "gxvbsln.c"
-#include "gxvcommn.c"
-#include "gxvfeat.c"
-#include "gxvjust.c"
-#include "gxvkern.c"
-#include "gxvlcar.c"
-#include "gxvmod.c"
-#include "gxvmort.c"
-#include "gxvmort0.c"
-#include "gxvmort1.c"
-#include "gxvmort2.c"
-#include "gxvmort4.c"
-#include "gxvmort5.c"
-#include "gxvmorx.c"
-#include "gxvmorx0.c"
-#include "gxvmorx1.c"
-#include "gxvmorx2.c"
-#include "gxvmorx4.c"
-#include "gxvmorx5.c"
-#include "gxvopbd.c"
-#include "gxvprop.c"
-#include "gxvtrak.c"
-
-
-/* END */
diff --git a/src/gxvalid/gxvalid.h b/src/gxvalid/gxvalid.h
deleted file mode 100644
index 78116ef85..000000000
--- a/src/gxvalid/gxvalid.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvalid.h */
-/* */
-/* TrueTypeGX/AAT table validation (specification only). */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#ifndef GXVALID_H_
-#define GXVALID_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#include "gxverror.h" /* must come before FT_INTERNAL_VALIDATE_H */
-
-#include FT_INTERNAL_VALIDATE_H
-#include FT_INTERNAL_STREAM_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( void )
- gxv_feat_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator valid );
-
-
- FT_LOCAL( void )
- gxv_bsln_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator valid );
-
-
- FT_LOCAL( void )
- gxv_trak_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator valid );
-
- FT_LOCAL( void )
- gxv_just_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator valid );
-
- FT_LOCAL( void )
- gxv_mort_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator valid );
-
- FT_LOCAL( void )
- gxv_morx_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator valid );
-
- FT_LOCAL( void )
- gxv_kern_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator valid );
-
- FT_LOCAL( void )
- gxv_kern_validate_classic( FT_Bytes table,
- FT_Face face,
- FT_Int dialect_flags,
- FT_Validator valid );
-
- FT_LOCAL( void )
- gxv_opbd_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator valid );
-
- FT_LOCAL( void )
- gxv_prop_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator valid );
-
- FT_LOCAL( void )
- gxv_lcar_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator valid );
-
-
-FT_END_HEADER
-
-
-#endif /* GXVALID_H_ */
-
-
-/* END */
diff --git a/src/gxvalid/gxvbsln.c b/src/gxvalid/gxvbsln.c
deleted file mode 100644
index 81dff7304..000000000
--- a/src/gxvalid/gxvbsln.c
+++ /dev/null
@@ -1,334 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvbsln.c */
-/* */
-/* TrueTypeGX/AAT bsln table validation (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvalid.h"
-#include "gxvcommn.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvbsln
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Data and Types *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define GXV_BSLN_VALUE_COUNT 32
-#define GXV_BSLN_VALUE_EMPTY 0xFFFFU
-
-
- typedef struct GXV_bsln_DataRec_
- {
- FT_Bytes ctlPoints_p;
- FT_UShort defaultBaseline;
-
- } GXV_bsln_DataRec, *GXV_bsln_Data;
-
-
-#define GXV_BSLN_DATA( field ) GXV_TABLE_DATA( bsln, field )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** UTILITY FUNCTIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- gxv_bsln_LookupValue_validate( FT_UShort glyph,
- GXV_LookupValueCPtr value_p,
- GXV_Validator gxvalid )
- {
- FT_UShort v = value_p->u;
- FT_UShort* ctlPoints;
-
- FT_UNUSED( glyph );
-
-
- GXV_NAME_ENTER( "lookup value" );
-
- if ( v >= GXV_BSLN_VALUE_COUNT )
- FT_INVALID_DATA;
-
- ctlPoints = (FT_UShort*)GXV_BSLN_DATA( ctlPoints_p );
- if ( ctlPoints && ctlPoints[v] == GXV_BSLN_VALUE_EMPTY )
- FT_INVALID_DATA;
-
- GXV_EXIT;
- }
-
-
- /*
- +===============+ --------+
- | lookup header | |
- +===============+ |
- | BinSrchHeader | |
- +===============+ |
- | lastGlyph[0] | |
- +---------------+ |
- | firstGlyph[0] | | head of lookup table
- +---------------+ | +
- | offset[0] | -> | offset [byte]
- +===============+ | +
- | lastGlyph[1] | | (glyphID - firstGlyph) * 2 [byte]
- +---------------+ |
- | firstGlyph[1] | |
- +---------------+ |
- | offset[1] | |
- +===============+ |
- |
- ... |
- |
- 16bit value array |
- +===============+ |
- | value | <-------+
- ...
- */
-
- static GXV_LookupValueDesc
- gxv_bsln_LookupFmt4_transit( FT_UShort relative_gindex,
- GXV_LookupValueCPtr base_value_p,
- FT_Bytes lookuptbl_limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p;
- FT_Bytes limit;
- FT_UShort offset;
- GXV_LookupValueDesc value;
-
- /* XXX: check range ? */
- offset = (FT_UShort)( base_value_p->u +
- ( relative_gindex * sizeof ( FT_UShort ) ) );
-
- p = gxvalid->lookuptbl_head + offset;
- limit = lookuptbl_limit;
- GXV_LIMIT_CHECK( 2 );
-
- value.u = FT_NEXT_USHORT( p );
-
- return value;
- }
-
-
- static void
- gxv_bsln_parts_fmt0_validate( FT_Bytes tables,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = tables;
-
-
- GXV_NAME_ENTER( "parts format 0" );
-
- /* deltas */
- GXV_LIMIT_CHECK( 2 * GXV_BSLN_VALUE_COUNT );
-
- gxvalid->table_data = NULL; /* No ctlPoints here. */
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_bsln_parts_fmt1_validate( FT_Bytes tables,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = tables;
-
-
- GXV_NAME_ENTER( "parts format 1" );
-
- /* deltas */
- gxv_bsln_parts_fmt0_validate( p, limit, gxvalid );
-
- /* mappingData */
- gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- gxvalid->lookupval_func = gxv_bsln_LookupValue_validate;
- gxvalid->lookupfmt4_trans = gxv_bsln_LookupFmt4_transit;
- gxv_LookupTable_validate( p + 2 * GXV_BSLN_VALUE_COUNT,
- limit,
- gxvalid );
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_bsln_parts_fmt2_validate( FT_Bytes tables,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = tables;
-
- FT_UShort stdGlyph;
- FT_UShort ctlPoint;
- FT_Int i;
-
- FT_UShort defaultBaseline = GXV_BSLN_DATA( defaultBaseline );
-
-
- GXV_NAME_ENTER( "parts format 2" );
-
- GXV_LIMIT_CHECK( 2 + ( 2 * GXV_BSLN_VALUE_COUNT ) );
-
- /* stdGlyph */
- stdGlyph = FT_NEXT_USHORT( p );
- GXV_TRACE(( " (stdGlyph = %u)\n", stdGlyph ));
-
- gxv_glyphid_validate( stdGlyph, gxvalid );
-
- /* Record the position of ctlPoints */
- GXV_BSLN_DATA( ctlPoints_p ) = p;
-
- /* ctlPoints */
- for ( i = 0; i < GXV_BSLN_VALUE_COUNT; i++ )
- {
- ctlPoint = FT_NEXT_USHORT( p );
- if ( ctlPoint == GXV_BSLN_VALUE_EMPTY )
- {
- if ( i == defaultBaseline )
- FT_INVALID_DATA;
- }
- else
- gxv_ctlPoint_validate( stdGlyph, ctlPoint, gxvalid );
- }
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_bsln_parts_fmt3_validate( FT_Bytes tables,
- FT_Bytes limit,
- GXV_Validator gxvalid)
- {
- FT_Bytes p = tables;
-
-
- GXV_NAME_ENTER( "parts format 3" );
-
- /* stdGlyph + ctlPoints */
- gxv_bsln_parts_fmt2_validate( p, limit, gxvalid );
-
- /* mappingData */
- gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- gxvalid->lookupval_func = gxv_bsln_LookupValue_validate;
- gxvalid->lookupfmt4_trans = gxv_bsln_LookupFmt4_transit;
- gxv_LookupTable_validate( p + ( 2 + 2 * GXV_BSLN_VALUE_COUNT ),
- limit,
- gxvalid );
-
- GXV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** bsln TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- gxv_bsln_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator ftvalid )
- {
- GXV_ValidatorRec gxvalidrec;
- GXV_Validator gxvalid = &gxvalidrec;
-
- GXV_bsln_DataRec bslnrec;
- GXV_bsln_Data bsln = &bslnrec;
-
- FT_Bytes p = table;
- FT_Bytes limit = 0;
-
- FT_ULong version;
- FT_UShort format;
- FT_UShort defaultBaseline;
-
- GXV_Validate_Func fmt_funcs_table [] =
- {
- gxv_bsln_parts_fmt0_validate,
- gxv_bsln_parts_fmt1_validate,
- gxv_bsln_parts_fmt2_validate,
- gxv_bsln_parts_fmt3_validate,
- };
-
-
- gxvalid->root = ftvalid;
- gxvalid->table_data = bsln;
- gxvalid->face = face;
-
- FT_TRACE3(( "validating `bsln' table\n" ));
- GXV_INIT;
-
-
- GXV_LIMIT_CHECK( 4 + 2 + 2 );
- version = FT_NEXT_ULONG( p );
- format = FT_NEXT_USHORT( p );
- defaultBaseline = FT_NEXT_USHORT( p );
-
- /* only version 1.0 is defined (1996) */
- if ( version != 0x00010000UL )
- FT_INVALID_FORMAT;
-
- /* only format 1, 2, 3 are defined (1996) */
- GXV_TRACE(( " (format = %d)\n", format ));
- if ( format > 3 )
- FT_INVALID_FORMAT;
-
- if ( defaultBaseline > 31 )
- FT_INVALID_FORMAT;
-
- bsln->defaultBaseline = defaultBaseline;
-
- fmt_funcs_table[format]( p, limit, gxvalid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* arch-tag: ebe81143-fdaa-4c68-a4d1-b57227daa3bc
- (do not change this comment) */
-
-
-/* END */
diff --git a/src/gxvalid/gxvcommn.c b/src/gxvalid/gxvcommn.c
deleted file mode 100644
index db0a91ea7..000000000
--- a/src/gxvalid/gxvcommn.c
+++ /dev/null
@@ -1,1746 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvcommn.c */
-/* */
-/* TrueTypeGX/AAT common tables validation (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvcommn.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvcommon
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 16bit offset sorter *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static int
- gxv_compare_ushort_offset( FT_UShort* a,
- FT_UShort* b )
- {
- if ( *a < *b )
- return -1;
- else if ( *a > *b )
- return 1;
- else
- return 0;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_set_length_by_ushort_offset( FT_UShort* offset,
- FT_UShort** length,
- FT_UShort* buff,
- FT_UInt nmemb,
- FT_UShort limit,
- GXV_Validator gxvalid )
- {
- FT_UInt i;
-
-
- for ( i = 0; i < nmemb; i++ )
- *(length[i]) = 0;
-
- for ( i = 0; i < nmemb; i++ )
- buff[i] = offset[i];
- buff[nmemb] = limit;
-
- ft_qsort( buff, ( nmemb + 1 ), sizeof ( FT_UShort ),
- ( int(*)(const void*, const void*) )gxv_compare_ushort_offset );
-
- if ( buff[nmemb] > limit )
- FT_INVALID_OFFSET;
-
- for ( i = 0; i < nmemb; i++ )
- {
- FT_UInt j;
-
-
- for ( j = 0; j < nmemb; j++ )
- if ( buff[j] == offset[i] )
- break;
-
- if ( j == nmemb )
- FT_INVALID_OFFSET;
-
- *(length[i]) = (FT_UShort)( buff[j + 1] - buff[j] );
-
- if ( 0 != offset[i] && 0 == *(length[i]) )
- FT_INVALID_OFFSET;
- }
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 32bit offset sorter *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static int
- gxv_compare_ulong_offset( FT_ULong* a,
- FT_ULong* b )
- {
- if ( *a < *b )
- return -1;
- else if ( *a > *b )
- return 1;
- else
- return 0;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_set_length_by_ulong_offset( FT_ULong* offset,
- FT_ULong** length,
- FT_ULong* buff,
- FT_UInt nmemb,
- FT_ULong limit,
- GXV_Validator gxvalid)
- {
- FT_UInt i;
-
-
- for ( i = 0; i < nmemb; i++ )
- *(length[i]) = 0;
-
- for ( i = 0; i < nmemb; i++ )
- buff[i] = offset[i];
- buff[nmemb] = limit;
-
- ft_qsort( buff, ( nmemb + 1 ), sizeof ( FT_ULong ),
- ( int(*)(const void*, const void*) )gxv_compare_ulong_offset );
-
- if ( buff[nmemb] > limit )
- FT_INVALID_OFFSET;
-
- for ( i = 0; i < nmemb; i++ )
- {
- FT_UInt j;
-
-
- for ( j = 0; j < nmemb; j++ )
- if ( buff[j] == offset[i] )
- break;
-
- if ( j == nmemb )
- FT_INVALID_OFFSET;
-
- *(length[i]) = buff[j + 1] - buff[j];
-
- if ( 0 != offset[i] && 0 == *(length[i]) )
- FT_INVALID_OFFSET;
- }
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** scan value array and get min & max *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_LOCAL_DEF( void )
- gxv_array_getlimits_byte( FT_Bytes table,
- FT_Bytes limit,
- FT_Byte* min,
- FT_Byte* max,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
-
- *min = 0xFF;
- *max = 0x00;
-
- while ( p < limit )
- {
- FT_Byte val;
-
-
- GXV_LIMIT_CHECK( 1 );
- val = FT_NEXT_BYTE( p );
-
- *min = (FT_Byte)FT_MIN( *min, val );
- *max = (FT_Byte)FT_MAX( *max, val );
- }
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_array_getlimits_ushort( FT_Bytes table,
- FT_Bytes limit,
- FT_UShort* min,
- FT_UShort* max,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
-
- *min = 0xFFFFU;
- *max = 0x0000;
-
- while ( p < limit )
- {
- FT_UShort val;
-
-
- GXV_LIMIT_CHECK( 2 );
- val = FT_NEXT_USHORT( p );
-
- *min = (FT_Byte)FT_MIN( *min, val );
- *max = (FT_Byte)FT_MAX( *max, val );
- }
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** BINSEARCHHEADER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct GXV_BinSrchHeader_
- {
- FT_UShort unitSize;
- FT_UShort nUnits;
- FT_UShort searchRange;
- FT_UShort entrySelector;
- FT_UShort rangeShift;
-
- } GXV_BinSrchHeader;
-
-
- static void
- gxv_BinSrchHeader_check_consistency( GXV_BinSrchHeader* binSrchHeader,
- GXV_Validator gxvalid )
- {
- FT_UShort searchRange;
- FT_UShort entrySelector;
- FT_UShort rangeShift;
-
-
- if ( binSrchHeader->unitSize == 0 )
- FT_INVALID_DATA;
-
- if ( binSrchHeader->nUnits == 0 )
- {
- if ( binSrchHeader->searchRange == 0 &&
- binSrchHeader->entrySelector == 0 &&
- binSrchHeader->rangeShift == 0 )
- return;
- else
- FT_INVALID_DATA;
- }
-
- for ( searchRange = 1, entrySelector = 1;
- ( searchRange * 2 ) <= binSrchHeader->nUnits &&
- searchRange < 0x8000U;
- searchRange *= 2, entrySelector++ )
- ;
-
- entrySelector--;
- searchRange = (FT_UShort)( searchRange * binSrchHeader->unitSize );
- rangeShift = (FT_UShort)( binSrchHeader->nUnits * binSrchHeader->unitSize
- - searchRange );
-
- if ( searchRange != binSrchHeader->searchRange ||
- entrySelector != binSrchHeader->entrySelector ||
- rangeShift != binSrchHeader->rangeShift )
- {
- GXV_TRACE(( "Inconsistency found in BinSrchHeader\n" ));
- GXV_TRACE(( "originally: unitSize=%d, nUnits=%d, "
- "searchRange=%d, entrySelector=%d, "
- "rangeShift=%d\n",
- binSrchHeader->unitSize, binSrchHeader->nUnits,
- binSrchHeader->searchRange, binSrchHeader->entrySelector,
- binSrchHeader->rangeShift ));
- GXV_TRACE(( "calculated: unitSize=%d, nUnits=%d, "
- "searchRange=%d, entrySelector=%d, "
- "rangeShift=%d\n",
- binSrchHeader->unitSize, binSrchHeader->nUnits,
- searchRange, entrySelector, rangeShift ));
-
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
- }
- }
-
-
- /*
- * parser & validator of BinSrchHeader
- * which is used in LookupTable format 2, 4, 6.
- *
- * Essential parameters (unitSize, nUnits) are returned by
- * given pointer, others (searchRange, entrySelector, rangeShift)
- * can be calculated by essential parameters, so they are just
- * validated and discarded.
- *
- * However, wrong values in searchRange, entrySelector, rangeShift
- * won't cause fatal errors, because these parameters might be
- * only used in old m68k font driver in MacOS.
- * -- suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
- */
-
- FT_LOCAL_DEF( void )
- gxv_BinSrchHeader_validate( FT_Bytes table,
- FT_Bytes limit,
- FT_UShort* unitSize_p,
- FT_UShort* nUnits_p,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- GXV_BinSrchHeader binSrchHeader;
-
-
- GXV_NAME_ENTER( "BinSrchHeader validate" );
-
- if ( *unitSize_p == 0 )
- {
- GXV_LIMIT_CHECK( 2 );
- binSrchHeader.unitSize = FT_NEXT_USHORT( p );
- }
- else
- binSrchHeader.unitSize = *unitSize_p;
-
- if ( *nUnits_p == 0 )
- {
- GXV_LIMIT_CHECK( 2 );
- binSrchHeader.nUnits = FT_NEXT_USHORT( p );
- }
- else
- binSrchHeader.nUnits = *nUnits_p;
-
- GXV_LIMIT_CHECK( 2 + 2 + 2 );
- binSrchHeader.searchRange = FT_NEXT_USHORT( p );
- binSrchHeader.entrySelector = FT_NEXT_USHORT( p );
- binSrchHeader.rangeShift = FT_NEXT_USHORT( p );
- GXV_TRACE(( "nUnits %d\n", binSrchHeader.nUnits ));
-
- gxv_BinSrchHeader_check_consistency( &binSrchHeader, gxvalid );
-
- if ( *unitSize_p == 0 )
- *unitSize_p = binSrchHeader.unitSize;
-
- if ( *nUnits_p == 0 )
- *nUnits_p = binSrchHeader.nUnits;
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- GXV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** LOOKUP TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define GXV_LOOKUP_VALUE_LOAD( P, SIGNSPEC ) \
- ( P += 2, gxv_lookup_value_load( P - 2, SIGNSPEC ) )
-
- static GXV_LookupValueDesc
- gxv_lookup_value_load( FT_Bytes p,
- int signspec )
- {
- GXV_LookupValueDesc v;
-
-
- if ( signspec == GXV_LOOKUPVALUE_UNSIGNED )
- v.u = FT_NEXT_USHORT( p );
- else
- v.s = FT_NEXT_SHORT( p );
-
- return v;
- }
-
-
-#define GXV_UNITSIZE_VALIDATE( FORMAT, UNITSIZE, NUNITS, CORRECTSIZE ) \
- FT_BEGIN_STMNT \
- if ( UNITSIZE != CORRECTSIZE ) \
- { \
- FT_ERROR(( "unitSize=%d differs from" \
- " expected unitSize=%d" \
- " in LookupTable %s\n", \
- UNITSIZE, CORRECTSIZE, FORMAT )); \
- if ( UNITSIZE != 0 && NUNITS != 0 ) \
- { \
- FT_ERROR(( " cannot validate anymore\n" )); \
- FT_INVALID_FORMAT; \
- } \
- else \
- FT_ERROR(( " forcibly continues\n" )); \
- } \
- FT_END_STMNT
-
-
- /* ================= Simple Array Format 0 Lookup Table ================ */
- static void
- gxv_LookupTable_fmt0_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UShort i;
-
- GXV_LookupValueDesc value;
-
-
- GXV_NAME_ENTER( "LookupTable format 0" );
-
- GXV_LIMIT_CHECK( 2 * gxvalid->face->num_glyphs );
-
- for ( i = 0; i < gxvalid->face->num_glyphs; i++ )
- {
- GXV_LIMIT_CHECK( 2 );
- if ( p + 2 >= limit ) /* some fonts have too-short fmt0 array */
- {
- GXV_TRACE(( "too short, glyphs %d - %d are missing\n",
- i, gxvalid->face->num_glyphs ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
- break;
- }
-
- value = GXV_LOOKUP_VALUE_LOAD( p, gxvalid->lookupval_sign );
- gxvalid->lookupval_func( i, &value, gxvalid );
- }
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- GXV_EXIT;
- }
-
-
- /* ================= Segment Single Format 2 Lookup Table ============== */
- /*
- * Apple spec says:
- *
- * To guarantee that a binary search terminates, you must include one or
- * more special `end of search table' values at the end of the data to
- * be searched. The number of termination values that need to be
- * included is table-specific. The value that indicates binary search
- * termination is 0xFFFF.
- *
- * The problem is that nUnits does not include this end-marker. It's
- * quite difficult to discriminate whether the following 0xFFFF comes from
- * the end-marker or some next data.
- *
- * -- suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
- */
- static void
- gxv_LookupTable_fmt2_skip_endmarkers( FT_Bytes table,
- FT_UShort unitSize,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
-
- while ( ( p + 4 ) < gxvalid->root->limit )
- {
- if ( p[0] != 0xFF || p[1] != 0xFF || /* lastGlyph */
- p[2] != 0xFF || p[3] != 0xFF ) /* firstGlyph */
- break;
- p += unitSize;
- }
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- }
-
-
- static void
- gxv_LookupTable_fmt2_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UShort gid;
-
- FT_UShort unitSize;
- FT_UShort nUnits;
- FT_UShort unit;
- FT_UShort lastGlyph;
- FT_UShort firstGlyph;
- GXV_LookupValueDesc value;
-
-
- GXV_NAME_ENTER( "LookupTable format 2" );
-
- unitSize = nUnits = 0;
- gxv_BinSrchHeader_validate( p, limit, &unitSize, &nUnits, gxvalid );
- p += gxvalid->subtable_length;
-
- GXV_UNITSIZE_VALIDATE( "format2", unitSize, nUnits, 6 );
-
- for ( unit = 0, gid = 0; unit < nUnits; unit++ )
- {
- GXV_LIMIT_CHECK( 2 + 2 + 2 );
- lastGlyph = FT_NEXT_USHORT( p );
- firstGlyph = FT_NEXT_USHORT( p );
- value = GXV_LOOKUP_VALUE_LOAD( p, gxvalid->lookupval_sign );
-
- gxv_glyphid_validate( firstGlyph, gxvalid );
- gxv_glyphid_validate( lastGlyph, gxvalid );
-
- if ( lastGlyph < gid )
- {
- GXV_TRACE(( "reverse ordered segment specification:"
- " lastGlyph[%d]=%d < lastGlyph[%d]=%d\n",
- unit, lastGlyph, unit - 1 , gid ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
- }
-
- if ( lastGlyph < firstGlyph )
- {
- GXV_TRACE(( "reverse ordered range specification at unit %d:",
- " lastGlyph %d < firstGlyph %d ",
- unit, lastGlyph, firstGlyph ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
-
- if ( gxvalid->root->level == FT_VALIDATE_TIGHT )
- continue; /* ftxvalidator silently skips such an entry */
-
- FT_TRACE4(( "continuing with exchanged values\n" ));
- gid = firstGlyph;
- firstGlyph = lastGlyph;
- lastGlyph = gid;
- }
-
- for ( gid = firstGlyph; gid <= lastGlyph; gid++ )
- gxvalid->lookupval_func( gid, &value, gxvalid );
- }
-
- gxv_LookupTable_fmt2_skip_endmarkers( p, unitSize, gxvalid );
- p += gxvalid->subtable_length;
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- GXV_EXIT;
- }
-
-
- /* ================= Segment Array Format 4 Lookup Table =============== */
- static void
- gxv_LookupTable_fmt4_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UShort unit;
- FT_UShort gid;
-
- FT_UShort unitSize;
- FT_UShort nUnits;
- FT_UShort lastGlyph;
- FT_UShort firstGlyph;
- GXV_LookupValueDesc base_value;
- GXV_LookupValueDesc value;
-
-
- GXV_NAME_ENTER( "LookupTable format 4" );
-
- unitSize = nUnits = 0;
- gxv_BinSrchHeader_validate( p, limit, &unitSize, &nUnits, gxvalid );
- p += gxvalid->subtable_length;
-
- GXV_UNITSIZE_VALIDATE( "format4", unitSize, nUnits, 6 );
-
- for ( unit = 0, gid = 0; unit < nUnits; unit++ )
- {
- GXV_LIMIT_CHECK( 2 + 2 );
- lastGlyph = FT_NEXT_USHORT( p );
- firstGlyph = FT_NEXT_USHORT( p );
-
- gxv_glyphid_validate( firstGlyph, gxvalid );
- gxv_glyphid_validate( lastGlyph, gxvalid );
-
- if ( lastGlyph < gid )
- {
- GXV_TRACE(( "reverse ordered segment specification:"
- " lastGlyph[%d]=%d < lastGlyph[%d]=%d\n",
- unit, lastGlyph, unit - 1 , gid ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
- }
-
- if ( lastGlyph < firstGlyph )
- {
- GXV_TRACE(( "reverse ordered range specification at unit %d:",
- " lastGlyph %d < firstGlyph %d ",
- unit, lastGlyph, firstGlyph ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
-
- if ( gxvalid->root->level == FT_VALIDATE_TIGHT )
- continue; /* ftxvalidator silently skips such an entry */
-
- FT_TRACE4(( "continuing with exchanged values\n" ));
- gid = firstGlyph;
- firstGlyph = lastGlyph;
- lastGlyph = gid;
- }
-
- GXV_LIMIT_CHECK( 2 );
- base_value = GXV_LOOKUP_VALUE_LOAD( p, GXV_LOOKUPVALUE_UNSIGNED );
-
- for ( gid = firstGlyph; gid <= lastGlyph; gid++ )
- {
- value = gxvalid->lookupfmt4_trans( (FT_UShort)( gid - firstGlyph ),
- &base_value,
- limit,
- gxvalid );
-
- gxvalid->lookupval_func( gid, &value, gxvalid );
- }
- }
-
- gxv_LookupTable_fmt2_skip_endmarkers( p, unitSize, gxvalid );
- p += gxvalid->subtable_length;
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- GXV_EXIT;
- }
-
-
- /* ================= Segment Table Format 6 Lookup Table =============== */
- static void
- gxv_LookupTable_fmt6_skip_endmarkers( FT_Bytes table,
- FT_UShort unitSize,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
-
- while ( p < gxvalid->root->limit )
- {
- if ( p[0] != 0xFF || p[1] != 0xFF )
- break;
- p += unitSize;
- }
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- }
-
-
- static void
- gxv_LookupTable_fmt6_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UShort unit;
- FT_UShort prev_glyph;
-
- FT_UShort unitSize;
- FT_UShort nUnits;
- FT_UShort glyph;
- GXV_LookupValueDesc value;
-
-
- GXV_NAME_ENTER( "LookupTable format 6" );
-
- unitSize = nUnits = 0;
- gxv_BinSrchHeader_validate( p, limit, &unitSize, &nUnits, gxvalid );
- p += gxvalid->subtable_length;
-
- GXV_UNITSIZE_VALIDATE( "format6", unitSize, nUnits, 4 );
-
- for ( unit = 0, prev_glyph = 0; unit < nUnits; unit++ )
- {
- GXV_LIMIT_CHECK( 2 + 2 );
- glyph = FT_NEXT_USHORT( p );
- value = GXV_LOOKUP_VALUE_LOAD( p, gxvalid->lookupval_sign );
-
- if ( gxv_glyphid_validate( glyph, gxvalid ) )
- GXV_TRACE(( " endmarker found within defined range"
- " (entry %d < nUnits=%d)\n",
- unit, nUnits ));
-
- if ( prev_glyph > glyph )
- {
- GXV_TRACE(( "current gid 0x%04x < previous gid 0x%04x\n",
- glyph, prev_glyph ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
- }
- prev_glyph = glyph;
-
- gxvalid->lookupval_func( glyph, &value, gxvalid );
- }
-
- gxv_LookupTable_fmt6_skip_endmarkers( p, unitSize, gxvalid );
- p += gxvalid->subtable_length;
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- GXV_EXIT;
- }
-
-
- /* ================= Trimmed Array Format 8 Lookup Table =============== */
- static void
- gxv_LookupTable_fmt8_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UShort i;
-
- GXV_LookupValueDesc value;
- FT_UShort firstGlyph;
- FT_UShort glyphCount;
-
-
- GXV_NAME_ENTER( "LookupTable format 8" );
-
- /* firstGlyph + glyphCount */
- GXV_LIMIT_CHECK( 2 + 2 );
- firstGlyph = FT_NEXT_USHORT( p );
- glyphCount = FT_NEXT_USHORT( p );
-
- gxv_glyphid_validate( firstGlyph, gxvalid );
- gxv_glyphid_validate( (FT_UShort)( firstGlyph + glyphCount ), gxvalid );
-
- /* valueArray */
- for ( i = 0; i < glyphCount; i++ )
- {
- GXV_LIMIT_CHECK( 2 );
- value = GXV_LOOKUP_VALUE_LOAD( p, gxvalid->lookupval_sign );
- gxvalid->lookupval_func( (FT_UShort)( firstGlyph + i ), &value, gxvalid );
- }
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- GXV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_LookupTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UShort format;
-
- GXV_Validate_Func fmt_funcs_table[] =
- {
- gxv_LookupTable_fmt0_validate, /* 0 */
- NULL, /* 1 */
- gxv_LookupTable_fmt2_validate, /* 2 */
- NULL, /* 3 */
- gxv_LookupTable_fmt4_validate, /* 4 */
- NULL, /* 5 */
- gxv_LookupTable_fmt6_validate, /* 6 */
- NULL, /* 7 */
- gxv_LookupTable_fmt8_validate, /* 8 */
- };
-
- GXV_Validate_Func func;
-
-
- GXV_NAME_ENTER( "LookupTable" );
-
- /* lookuptbl_head may be used in fmt4 transit function. */
- gxvalid->lookuptbl_head = table;
-
- /* format */
- GXV_LIMIT_CHECK( 2 );
- format = FT_NEXT_USHORT( p );
- GXV_TRACE(( " (format %d)\n", format ));
-
- if ( format > 8 )
- FT_INVALID_FORMAT;
-
- func = fmt_funcs_table[format];
- if ( !func )
- FT_INVALID_FORMAT;
-
- func( p, limit, gxvalid );
- p += gxvalid->subtable_length;
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
-
- GXV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Glyph ID *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( FT_Int )
- gxv_glyphid_validate( FT_UShort gid,
- GXV_Validator gxvalid )
- {
- FT_Face face;
-
-
- if ( gid == 0xFFFFU )
- {
- GXV_EXIT;
- return 1;
- }
-
- face = gxvalid->face;
- if ( face->num_glyphs < gid )
- {
- GXV_TRACE(( " gxv_glyphid_check() gid overflow: num_glyphs %d < %d\n",
- face->num_glyphs, gid ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
- }
-
- return 0;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CONTROL POINT *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- gxv_ctlPoint_validate( FT_UShort gid,
- FT_UShort ctl_point,
- GXV_Validator gxvalid )
- {
- FT_Face face;
- FT_Error error;
-
- FT_GlyphSlot glyph;
- FT_Outline outline;
- FT_UShort n_points;
-
-
- face = gxvalid->face;
-
- error = FT_Load_Glyph( face,
- gid,
- FT_LOAD_NO_BITMAP | FT_LOAD_IGNORE_TRANSFORM );
- if ( error )
- FT_INVALID_GLYPH_ID;
-
- glyph = face->glyph;
- outline = glyph->outline;
- n_points = (FT_UShort)outline.n_points;
-
- if ( !( ctl_point < n_points ) )
- FT_INVALID_DATA;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** SFNT NAME *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- gxv_sfntName_validate( FT_UShort name_index,
- FT_UShort min_index,
- FT_UShort max_index,
- GXV_Validator gxvalid )
- {
- FT_SfntName name;
- FT_UInt i;
- FT_UInt nnames;
-
-
- GXV_NAME_ENTER( "sfntName" );
-
- if ( name_index < min_index || max_index < name_index )
- FT_INVALID_FORMAT;
-
- nnames = FT_Get_Sfnt_Name_Count( gxvalid->face );
- for ( i = 0; i < nnames; i++ )
- {
- if ( FT_Get_Sfnt_Name( gxvalid->face, i, &name ) != FT_Err_Ok )
- continue;
-
- if ( name.name_id == name_index )
- goto Out;
- }
-
- GXV_TRACE(( " nameIndex = %d (UNTITLED)\n", name_index ));
- FT_INVALID_DATA;
- goto Exit; /* make compiler happy */
-
- Out:
- FT_TRACE1(( " nameIndex = %d (", name_index ));
- GXV_TRACE_HEXDUMP_SFNTNAME( name );
- FT_TRACE1(( ")\n" ));
-
- Exit:
- GXV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** STATE TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* -------------------------- Class Table --------------------------- */
-
- /*
- * highestClass specifies how many classes are defined in this
- * Class Subtable. Apple spec does not mention whether undefined
- * holes in the class (e.g.: 0-3 are predefined, 4 is unused, 5 is used)
- * are permitted. At present, holes in a defined class are not checked.
- * -- suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
- */
-
- static void
- gxv_ClassTable_validate( FT_Bytes table,
- FT_UShort* length_p,
- FT_UShort stateSize,
- FT_Byte* maxClassID_p,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_Bytes limit = table + *length_p;
- FT_UShort firstGlyph;
- FT_UShort nGlyphs;
-
-
- GXV_NAME_ENTER( "ClassTable" );
-
- *maxClassID_p = 3; /* Classes 0, 2, and 3 are predefined */
-
- GXV_LIMIT_CHECK( 2 + 2 );
- firstGlyph = FT_NEXT_USHORT( p );
- nGlyphs = FT_NEXT_USHORT( p );
-
- GXV_TRACE(( " (firstGlyph = %d, nGlyphs = %d)\n", firstGlyph, nGlyphs ));
-
- if ( !nGlyphs )
- goto Out;
-
- gxv_glyphid_validate( (FT_UShort)( firstGlyph + nGlyphs ), gxvalid );
-
- {
- FT_Byte nGlyphInClass[256];
- FT_Byte classID;
- FT_UShort i;
-
-
- FT_MEM_ZERO( nGlyphInClass, 256 );
-
-
- for ( i = 0; i < nGlyphs; i++ )
- {
- GXV_LIMIT_CHECK( 1 );
- classID = FT_NEXT_BYTE( p );
- switch ( classID )
- {
- /* following classes should not appear in class array */
- case 0: /* end of text */
- case 2: /* out of bounds */
- case 3: /* end of line */
- FT_INVALID_DATA;
- break;
-
- case 1: /* out of bounds */
- default: /* user-defined: 4 - ( stateSize - 1 ) */
- if ( classID >= stateSize )
- FT_INVALID_DATA; /* assign glyph to undefined state */
-
- nGlyphInClass[classID]++;
- break;
- }
- }
- *length_p = (FT_UShort)( p - table );
-
- /* scan max ClassID in use */
- for ( i = 0; i < stateSize; i++ )
- if ( ( 3 < i ) && ( nGlyphInClass[i] > 0 ) )
- *maxClassID_p = (FT_Byte)i; /* XXX: Check Range? */
- }
-
- Out:
- GXV_TRACE(( "Declared stateSize=0x%02x, Used maxClassID=0x%02x\n",
- stateSize, *maxClassID_p ));
- GXV_EXIT;
- }
-
-
- /* --------------------------- State Array ----------------------------- */
-
- static void
- gxv_StateArray_validate( FT_Bytes table,
- FT_UShort* length_p,
- FT_Byte maxClassID,
- FT_UShort stateSize,
- FT_Byte* maxState_p,
- FT_Byte* maxEntry_p,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_Bytes limit = table + *length_p;
- FT_Byte clazz;
- FT_Byte entry;
-
- FT_UNUSED( stateSize ); /* for the non-debugging case */
-
-
- GXV_NAME_ENTER( "StateArray" );
-
- GXV_TRACE(( "parse %d bytes by stateSize=%d maxClassID=%d\n",
- (int)(*length_p), stateSize, (int)(maxClassID) ));
-
- /*
- * 2 states are predefined and must be described in StateArray:
- * state 0 (start of text), 1 (start of line)
- */
- GXV_LIMIT_CHECK( ( 1 + maxClassID ) * 2 );
-
- *maxState_p = 0;
- *maxEntry_p = 0;
-
- /* read if enough to read another state */
- while ( p + ( 1 + maxClassID ) <= limit )
- {
- (*maxState_p)++;
- for ( clazz = 0; clazz <= maxClassID; clazz++ )
- {
- entry = FT_NEXT_BYTE( p );
- *maxEntry_p = (FT_Byte)FT_MAX( *maxEntry_p, entry );
- }
- }
- GXV_TRACE(( "parsed: maxState=%d, maxEntry=%d\n",
- *maxState_p, *maxEntry_p ));
-
- *length_p = (FT_UShort)( p - table );
-
- GXV_EXIT;
- }
-
-
- /* --------------------------- Entry Table ----------------------------- */
-
- static void
- gxv_EntryTable_validate( FT_Bytes table,
- FT_UShort* length_p,
- FT_Byte maxEntry,
- FT_UShort stateArray,
- FT_UShort stateArray_length,
- FT_Byte maxClassID,
- FT_Bytes statetable_table,
- FT_Bytes statetable_limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_Bytes limit = table + *length_p;
- FT_Byte entry;
- FT_Byte state;
- FT_Int entrySize = 2 + 2 + GXV_GLYPHOFFSET_SIZE( statetable );
-
- GXV_XStateTable_GlyphOffsetDesc glyphOffset;
-
-
- GXV_NAME_ENTER( "EntryTable" );
-
- GXV_TRACE(( "maxEntry=%d entrySize=%d\n", maxEntry, entrySize ));
-
- if ( ( maxEntry + 1 ) * entrySize > *length_p )
- {
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_TOO_SHORT );
-
- /* ftxvalidator and FontValidator both warn and continue */
- maxEntry = (FT_Byte)( *length_p / entrySize - 1 );
- GXV_TRACE(( "too large maxEntry, shrinking to %d fit EntryTable length\n",
- maxEntry ));
- }
-
- for ( entry = 0; entry <= maxEntry; entry++ )
- {
- FT_UShort newState;
- FT_UShort flags;
-
-
- GXV_LIMIT_CHECK( 2 + 2 );
- newState = FT_NEXT_USHORT( p );
- flags = FT_NEXT_USHORT( p );
-
-
- if ( newState < stateArray ||
- stateArray + stateArray_length < newState )
- {
- GXV_TRACE(( " newState offset 0x%04x is out of stateArray\n",
- newState ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
- continue;
- }
-
- if ( 0 != ( ( newState - stateArray ) % ( 1 + maxClassID ) ) )
- {
- GXV_TRACE(( " newState offset 0x%04x is not aligned to %d-classes\n",
- newState, 1 + maxClassID ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
- continue;
- }
-
- state = (FT_Byte)( ( newState - stateArray ) / ( 1 + maxClassID ) );
-
- switch ( GXV_GLYPHOFFSET_FMT( statetable ) )
- {
- case GXV_GLYPHOFFSET_NONE:
- glyphOffset.uc = 0; /* make compiler happy */
- break;
-
- case GXV_GLYPHOFFSET_UCHAR:
- glyphOffset.uc = FT_NEXT_BYTE( p );
- break;
-
- case GXV_GLYPHOFFSET_CHAR:
- glyphOffset.c = FT_NEXT_CHAR( p );
- break;
-
- case GXV_GLYPHOFFSET_USHORT:
- glyphOffset.u = FT_NEXT_USHORT( p );
- break;
-
- case GXV_GLYPHOFFSET_SHORT:
- glyphOffset.s = FT_NEXT_SHORT( p );
- break;
-
- case GXV_GLYPHOFFSET_ULONG:
- glyphOffset.ul = FT_NEXT_ULONG( p );
- break;
-
- case GXV_GLYPHOFFSET_LONG:
- glyphOffset.l = FT_NEXT_LONG( p );
- break;
- }
-
- if ( gxvalid->statetable.entry_validate_func )
- gxvalid->statetable.entry_validate_func( state,
- flags,
- &glyphOffset,
- statetable_table,
- statetable_limit,
- gxvalid );
- }
-
- *length_p = (FT_UShort)( p - table );
-
- GXV_EXIT;
- }
-
-
- /* =========================== State Table ============================= */
-
- FT_LOCAL_DEF( void )
- gxv_StateTable_subtable_setup( FT_UShort table_size,
- FT_UShort classTable,
- FT_UShort stateArray,
- FT_UShort entryTable,
- FT_UShort* classTable_length_p,
- FT_UShort* stateArray_length_p,
- FT_UShort* entryTable_length_p,
- GXV_Validator gxvalid )
- {
- FT_UShort o[3];
- FT_UShort* l[3];
- FT_UShort buff[4];
-
-
- o[0] = classTable;
- o[1] = stateArray;
- o[2] = entryTable;
- l[0] = classTable_length_p;
- l[1] = stateArray_length_p;
- l[2] = entryTable_length_p;
-
- gxv_set_length_by_ushort_offset( o, l, buff, 3, table_size, gxvalid );
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_StateTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_UShort stateSize;
- FT_UShort classTable; /* offset to Class(Sub)Table */
- FT_UShort stateArray; /* offset to StateArray */
- FT_UShort entryTable; /* offset to EntryTable */
-
- FT_UShort classTable_length;
- FT_UShort stateArray_length;
- FT_UShort entryTable_length;
- FT_Byte maxClassID;
- FT_Byte maxState;
- FT_Byte maxEntry;
-
- GXV_StateTable_Subtable_Setup_Func setup_func;
-
- FT_Bytes p = table;
-
-
- GXV_NAME_ENTER( "StateTable" );
-
- GXV_TRACE(( "StateTable header\n" ));
-
- GXV_LIMIT_CHECK( 2 + 2 + 2 + 2 );
- stateSize = FT_NEXT_USHORT( p );
- classTable = FT_NEXT_USHORT( p );
- stateArray = FT_NEXT_USHORT( p );
- entryTable = FT_NEXT_USHORT( p );
-
- GXV_TRACE(( "stateSize=0x%04x\n", stateSize ));
- GXV_TRACE(( "offset to classTable=0x%04x\n", classTable ));
- GXV_TRACE(( "offset to stateArray=0x%04x\n", stateArray ));
- GXV_TRACE(( "offset to entryTable=0x%04x\n", entryTable ));
-
- if ( stateSize > 0xFF )
- FT_INVALID_DATA;
-
- if ( gxvalid->statetable.optdata_load_func )
- gxvalid->statetable.optdata_load_func( p, limit, gxvalid );
-
- if ( gxvalid->statetable.subtable_setup_func )
- setup_func = gxvalid->statetable.subtable_setup_func;
- else
- setup_func = gxv_StateTable_subtable_setup;
-
- setup_func( (FT_UShort)( limit - table ),
- classTable,
- stateArray,
- entryTable,
- &classTable_length,
- &stateArray_length,
- &entryTable_length,
- gxvalid );
-
- GXV_TRACE(( "StateTable Subtables\n" ));
-
- if ( classTable != 0 )
- gxv_ClassTable_validate( table + classTable,
- &classTable_length,
- stateSize,
- &maxClassID,
- gxvalid );
- else
- maxClassID = (FT_Byte)( stateSize - 1 );
-
- if ( stateArray != 0 )
- gxv_StateArray_validate( table + stateArray,
- &stateArray_length,
- maxClassID,
- stateSize,
- &maxState,
- &maxEntry,
- gxvalid );
- else
- {
-#if 0
- maxState = 1; /* 0:start of text, 1:start of line are predefined */
-#endif
- maxEntry = 0;
- }
-
- if ( maxEntry > 0 && entryTable == 0 )
- FT_INVALID_OFFSET;
-
- if ( entryTable != 0 )
- gxv_EntryTable_validate( table + entryTable,
- &entryTable_length,
- maxEntry,
- stateArray,
- stateArray_length,
- maxClassID,
- table,
- limit,
- gxvalid );
-
- GXV_EXIT;
- }
-
-
- /* ================= eXtended State Table (for morx) =================== */
-
- FT_LOCAL_DEF( void )
- gxv_XStateTable_subtable_setup( FT_ULong table_size,
- FT_ULong classTable,
- FT_ULong stateArray,
- FT_ULong entryTable,
- FT_ULong* classTable_length_p,
- FT_ULong* stateArray_length_p,
- FT_ULong* entryTable_length_p,
- GXV_Validator gxvalid )
- {
- FT_ULong o[3];
- FT_ULong* l[3];
- FT_ULong buff[4];
-
-
- o[0] = classTable;
- o[1] = stateArray;
- o[2] = entryTable;
- l[0] = classTable_length_p;
- l[1] = stateArray_length_p;
- l[2] = entryTable_length_p;
-
- gxv_set_length_by_ulong_offset( o, l, buff, 3, table_size, gxvalid );
- }
-
-
- static void
- gxv_XClassTable_lookupval_validate( FT_UShort glyph,
- GXV_LookupValueCPtr value_p,
- GXV_Validator gxvalid )
- {
- FT_UNUSED( glyph );
-
- if ( value_p->u >= gxvalid->xstatetable.nClasses )
- FT_INVALID_DATA;
- if ( value_p->u > gxvalid->xstatetable.maxClassID )
- gxvalid->xstatetable.maxClassID = value_p->u;
- }
-
-
- /*
- +===============+ --------+
- | lookup header | |
- +===============+ |
- | BinSrchHeader | |
- +===============+ |
- | lastGlyph[0] | |
- +---------------+ |
- | firstGlyph[0] | | head of lookup table
- +---------------+ | +
- | offset[0] | -> | offset [byte]
- +===============+ | +
- | lastGlyph[1] | | (glyphID - firstGlyph) * 2 [byte]
- +---------------+ |
- | firstGlyph[1] | |
- +---------------+ |
- | offset[1] | |
- +===============+ |
- |
- .... |
- |
- 16bit value array |
- +===============+ |
- | value | <-------+
- ....
- */
- static GXV_LookupValueDesc
- gxv_XClassTable_lookupfmt4_transit( FT_UShort relative_gindex,
- GXV_LookupValueCPtr base_value_p,
- FT_Bytes lookuptbl_limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p;
- FT_Bytes limit;
- FT_UShort offset;
- GXV_LookupValueDesc value;
-
- /* XXX: check range? */
- offset = (FT_UShort)( base_value_p->u +
- relative_gindex * sizeof ( FT_UShort ) );
-
- p = gxvalid->lookuptbl_head + offset;
- limit = lookuptbl_limit;
-
- GXV_LIMIT_CHECK ( 2 );
- value.u = FT_NEXT_USHORT( p );
-
- return value;
- }
-
-
- static void
- gxv_XStateArray_validate( FT_Bytes table,
- FT_ULong* length_p,
- FT_UShort maxClassID,
- FT_ULong stateSize,
- FT_UShort* maxState_p,
- FT_UShort* maxEntry_p,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_Bytes limit = table + *length_p;
- FT_UShort clazz;
- FT_UShort entry;
-
- FT_UNUSED( stateSize ); /* for the non-debugging case */
-
-
- GXV_NAME_ENTER( "XStateArray" );
-
- GXV_TRACE(( "parse % 3d bytes by stateSize=% 3d maxClassID=% 3d\n",
- (int)(*length_p), stateSize, (int)(maxClassID) ));
-
- /*
- * 2 states are predefined and must be described:
- * state 0 (start of text), 1 (start of line)
- */
- GXV_LIMIT_CHECK( ( 1 + maxClassID ) * 2 * 2 );
-
- *maxState_p = 0;
- *maxEntry_p = 0;
-
- /* read if enough to read another state */
- while ( p + ( ( 1 + maxClassID ) * 2 ) <= limit )
- {
- (*maxState_p)++;
- for ( clazz = 0; clazz <= maxClassID; clazz++ )
- {
- entry = FT_NEXT_USHORT( p );
- *maxEntry_p = (FT_UShort)FT_MAX( *maxEntry_p, entry );
- }
- }
- GXV_TRACE(( "parsed: maxState=%d, maxEntry=%d\n",
- *maxState_p, *maxEntry_p ));
-
- *length_p = (FT_ULong)( p - table );
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_XEntryTable_validate( FT_Bytes table,
- FT_ULong* length_p,
- FT_UShort maxEntry,
- FT_ULong stateArray_length,
- FT_UShort maxClassID,
- FT_Bytes xstatetable_table,
- FT_Bytes xstatetable_limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_Bytes limit = table + *length_p;
- FT_UShort entry;
- FT_UShort state;
- FT_Int entrySize = 2 + 2 + GXV_GLYPHOFFSET_SIZE( xstatetable );
-
-
- GXV_NAME_ENTER( "XEntryTable" );
- GXV_TRACE(( "maxEntry=%d entrySize=%d\n", maxEntry, entrySize ));
-
- if ( ( p + ( maxEntry + 1 ) * entrySize ) > limit )
- FT_INVALID_TOO_SHORT;
-
- for (entry = 0; entry <= maxEntry; entry++ )
- {
- FT_UShort newState_idx;
- FT_UShort flags;
- GXV_XStateTable_GlyphOffsetDesc glyphOffset;
-
-
- GXV_LIMIT_CHECK( 2 + 2 );
- newState_idx = FT_NEXT_USHORT( p );
- flags = FT_NEXT_USHORT( p );
-
- if ( stateArray_length < (FT_ULong)( newState_idx * 2 ) )
- {
- GXV_TRACE(( " newState index 0x%04x points out of stateArray\n",
- newState_idx ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
- }
-
- state = (FT_UShort)( newState_idx / ( 1 + maxClassID ) );
- if ( 0 != ( newState_idx % ( 1 + maxClassID ) ) )
- {
- FT_TRACE4(( "-> new state = %d (supposed)\n"
- "but newState index 0x%04x is not aligned to %d-classes\n",
- state, newState_idx, 1 + maxClassID ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
- }
-
- switch ( GXV_GLYPHOFFSET_FMT( xstatetable ) )
- {
- case GXV_GLYPHOFFSET_NONE:
- glyphOffset.uc = 0; /* make compiler happy */
- break;
-
- case GXV_GLYPHOFFSET_UCHAR:
- glyphOffset.uc = FT_NEXT_BYTE( p );
- break;
-
- case GXV_GLYPHOFFSET_CHAR:
- glyphOffset.c = FT_NEXT_CHAR( p );
- break;
-
- case GXV_GLYPHOFFSET_USHORT:
- glyphOffset.u = FT_NEXT_USHORT( p );
- break;
-
- case GXV_GLYPHOFFSET_SHORT:
- glyphOffset.s = FT_NEXT_SHORT( p );
- break;
-
- case GXV_GLYPHOFFSET_ULONG:
- glyphOffset.ul = FT_NEXT_ULONG( p );
- break;
-
- case GXV_GLYPHOFFSET_LONG:
- glyphOffset.l = FT_NEXT_LONG( p );
- break;
-
- default:
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_FORMAT );
- goto Exit;
- }
-
- if ( gxvalid->xstatetable.entry_validate_func )
- gxvalid->xstatetable.entry_validate_func( state,
- flags,
- &glyphOffset,
- xstatetable_table,
- xstatetable_limit,
- gxvalid );
- }
-
- Exit:
- *length_p = (FT_ULong)( p - table );
-
- GXV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_XStateTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- /* StateHeader members */
- FT_ULong classTable; /* offset to Class(Sub)Table */
- FT_ULong stateArray; /* offset to StateArray */
- FT_ULong entryTable; /* offset to EntryTable */
-
- FT_ULong classTable_length;
- FT_ULong stateArray_length;
- FT_ULong entryTable_length;
- FT_UShort maxState;
- FT_UShort maxEntry;
-
- GXV_XStateTable_Subtable_Setup_Func setup_func;
-
- FT_Bytes p = table;
-
-
- GXV_NAME_ENTER( "XStateTable" );
-
- GXV_TRACE(( "XStateTable header\n" ));
-
- GXV_LIMIT_CHECK( 4 + 4 + 4 + 4 );
- gxvalid->xstatetable.nClasses = FT_NEXT_ULONG( p );
- classTable = FT_NEXT_ULONG( p );
- stateArray = FT_NEXT_ULONG( p );
- entryTable = FT_NEXT_ULONG( p );
-
- GXV_TRACE(( "nClasses =0x%08x\n", gxvalid->xstatetable.nClasses ));
- GXV_TRACE(( "offset to classTable=0x%08x\n", classTable ));
- GXV_TRACE(( "offset to stateArray=0x%08x\n", stateArray ));
- GXV_TRACE(( "offset to entryTable=0x%08x\n", entryTable ));
-
- if ( gxvalid->xstatetable.nClasses > 0xFFFFU )
- FT_INVALID_DATA;
-
- GXV_TRACE(( "StateTable Subtables\n" ));
-
- if ( gxvalid->xstatetable.optdata_load_func )
- gxvalid->xstatetable.optdata_load_func( p, limit, gxvalid );
-
- if ( gxvalid->xstatetable.subtable_setup_func )
- setup_func = gxvalid->xstatetable.subtable_setup_func;
- else
- setup_func = gxv_XStateTable_subtable_setup;
-
- setup_func( (FT_ULong)( limit - table ),
- classTable,
- stateArray,
- entryTable,
- &classTable_length,
- &stateArray_length,
- &entryTable_length,
- gxvalid );
-
- if ( classTable != 0 )
- {
- gxvalid->xstatetable.maxClassID = 0;
- gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- gxvalid->lookupval_func = gxv_XClassTable_lookupval_validate;
- gxvalid->lookupfmt4_trans = gxv_XClassTable_lookupfmt4_transit;
- gxv_LookupTable_validate( table + classTable,
- table + classTable + classTable_length,
- gxvalid );
-#if 0
- if ( gxvalid->subtable_length < classTable_length )
- classTable_length = gxvalid->subtable_length;
-#endif
- }
- else
- {
- /* XXX: check range? */
- gxvalid->xstatetable.maxClassID =
- (FT_UShort)( gxvalid->xstatetable.nClasses - 1 );
- }
-
- if ( stateArray != 0 )
- gxv_XStateArray_validate( table + stateArray,
- &stateArray_length,
- gxvalid->xstatetable.maxClassID,
- gxvalid->xstatetable.nClasses,
- &maxState,
- &maxEntry,
- gxvalid );
- else
- {
-#if 0
- maxState = 1; /* 0:start of text, 1:start of line are predefined */
-#endif
- maxEntry = 0;
- }
-
- if ( maxEntry > 0 && entryTable == 0 )
- FT_INVALID_OFFSET;
-
- if ( entryTable != 0 )
- gxv_XEntryTable_validate( table + entryTable,
- &entryTable_length,
- maxEntry,
- stateArray_length,
- gxvalid->xstatetable.maxClassID,
- table,
- limit,
- gxvalid );
-
- GXV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Table overlapping *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static int
- gxv_compare_ranges( FT_Bytes table1_start,
- FT_ULong table1_length,
- FT_Bytes table2_start,
- FT_ULong table2_length )
- {
- if ( table1_start == table2_start )
- {
- if ( ( table1_length == 0 || table2_length == 0 ) )
- goto Out;
- }
- else if ( table1_start < table2_start )
- {
- if ( ( table1_start + table1_length ) <= table2_start )
- goto Out;
- }
- else if ( table1_start > table2_start )
- {
- if ( ( table1_start >= table2_start + table2_length ) )
- goto Out;
- }
- return 1;
-
- Out:
- return 0;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_odtect_add_range( FT_Bytes start,
- FT_ULong length,
- const FT_String* name,
- GXV_odtect_Range odtect )
- {
- odtect->range[odtect->nRanges].start = start;
- odtect->range[odtect->nRanges].length = length;
- odtect->range[odtect->nRanges].name = (FT_String*)name;
- odtect->nRanges++;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_odtect_validate( GXV_odtect_Range odtect,
- GXV_Validator gxvalid )
- {
- FT_UInt i, j;
-
-
- GXV_NAME_ENTER( "check overlap among multi ranges" );
-
- for ( i = 0; i < odtect->nRanges; i++ )
- for ( j = 0; j < i; j++ )
- if ( 0 != gxv_compare_ranges( odtect->range[i].start,
- odtect->range[i].length,
- odtect->range[j].start,
- odtect->range[j].length ) )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( odtect->range[i].name || odtect->range[j].name )
- GXV_TRACE(( "found overlap between range %d and range %d\n",
- i, j ));
- else
- GXV_TRACE(( "found overlap between `%s' and `%s\'\n",
- odtect->range[i].name,
- odtect->range[j].name ));
-#endif
- FT_INVALID_OFFSET;
- }
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvcommn.h b/src/gxvalid/gxvcommn.h
deleted file mode 100644
index 10b1c800f..000000000
--- a/src/gxvalid/gxvcommn.h
+++ /dev/null
@@ -1,582 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvcommn.h */
-/* */
-/* TrueTypeGX/AAT common tables validation (specification). */
-/* */
-/* Copyright 2004-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
- /*
- * keywords in variable naming
- * ---------------------------
- * table: Of type FT_Bytes, pointing to the start of this table/subtable.
- * limit: Of type FT_Bytes, pointing to the end of this table/subtable,
- * including padding for alignment.
- * offset: Of type FT_UInt, the number of octets from the start to target.
- * length: Of type FT_UInt, the number of octets from the start to the
- * end in this table/subtable, including padding for alignment.
- *
- * _MIN, _MAX: Should be added to the tail of macros, as INT_MIN, etc.
- */
-
-
-#ifndef GXVCOMMN_H_
-#define GXVCOMMN_H_
-
-
-#include <ft2build.h>
-#include "gxvalid.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_SFNT_NAMES_H
-
-
-FT_BEGIN_HEADER
-
-
- /* some variables are not evaluated or only used in trace */
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-#define GXV_LOAD_TRACE_VARS
-#else
-#undef GXV_LOAD_TRACE_VARS
-#endif
-
-#undef GXV_LOAD_UNUSED_VARS /* debug purpose */
-
-#define IS_PARANOID_VALIDATION ( gxvalid->root->level >= FT_VALIDATE_PARANOID )
-#define GXV_SET_ERR_IF_PARANOID( err ) { if ( IS_PARANOID_VALIDATION ) ( err ); }
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** VALIDATION *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct GXV_ValidatorRec_* GXV_Validator;
-
-
-#define DUMMY_LIMIT 0
-
- typedef void
- (*GXV_Validate_Func)( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid );
-
-
- /* ====================== LookupTable Validator ======================== */
-
- typedef union GXV_LookupValueDesc_
- {
- FT_UShort u;
- FT_Short s;
-
- } GXV_LookupValueDesc;
-
- typedef const GXV_LookupValueDesc* GXV_LookupValueCPtr;
-
- typedef enum GXV_LookupValue_SignSpec_
- {
- GXV_LOOKUPVALUE_UNSIGNED = 0,
- GXV_LOOKUPVALUE_SIGNED
-
- } GXV_LookupValue_SignSpec;
-
-
- typedef void
- (*GXV_Lookup_Value_Validate_Func)( FT_UShort glyph,
- GXV_LookupValueCPtr value_p,
- GXV_Validator gxvalid );
-
- typedef GXV_LookupValueDesc
- (*GXV_Lookup_Fmt4_Transit_Func)( FT_UShort relative_gindex,
- GXV_LookupValueCPtr base_value_p,
- FT_Bytes lookuptbl_limit,
- GXV_Validator gxvalid );
-
-
- /* ====================== StateTable Validator ========================= */
-
- typedef enum GXV_GlyphOffset_Format_
- {
- GXV_GLYPHOFFSET_NONE = -1,
- GXV_GLYPHOFFSET_UCHAR = 2,
- GXV_GLYPHOFFSET_CHAR,
- GXV_GLYPHOFFSET_USHORT = 4,
- GXV_GLYPHOFFSET_SHORT,
- GXV_GLYPHOFFSET_ULONG = 8,
- GXV_GLYPHOFFSET_LONG
-
- } GXV_GlyphOffset_Format;
-
-
-#define GXV_GLYPHOFFSET_FMT( table ) \
- ( gxvalid->table.entry_glyphoffset_fmt )
-
-#define GXV_GLYPHOFFSET_SIZE( table ) \
- ( gxvalid->table.entry_glyphoffset_fmt / 2 )
-
-
- /* ----------------------- 16bit StateTable ---------------------------- */
-
- typedef union GXV_StateTable_GlyphOffsetDesc_
- {
- FT_Byte uc;
- FT_UShort u; /* same as GXV_LookupValueDesc */
- FT_ULong ul;
- FT_Char c;
- FT_Short s; /* same as GXV_LookupValueDesc */
- FT_Long l;
-
- } GXV_StateTable_GlyphOffsetDesc;
-
- typedef const GXV_StateTable_GlyphOffsetDesc* GXV_StateTable_GlyphOffsetCPtr;
-
- typedef void
- (*GXV_StateTable_Subtable_Setup_Func)( FT_UShort table_size,
- FT_UShort classTable,
- FT_UShort stateArray,
- FT_UShort entryTable,
- FT_UShort* classTable_length_p,
- FT_UShort* stateArray_length_p,
- FT_UShort* entryTable_length_p,
- GXV_Validator gxvalid );
-
- typedef void
- (*GXV_StateTable_Entry_Validate_Func)(
- FT_Byte state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetCPtr glyphOffset_p,
- FT_Bytes statetable_table,
- FT_Bytes statetable_limit,
- GXV_Validator gxvalid );
-
- typedef void
- (*GXV_StateTable_OptData_Load_Func)( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid );
-
- typedef struct GXV_StateTable_ValidatorRec_
- {
- GXV_GlyphOffset_Format entry_glyphoffset_fmt;
- void* optdata;
-
- GXV_StateTable_Subtable_Setup_Func subtable_setup_func;
- GXV_StateTable_Entry_Validate_Func entry_validate_func;
- GXV_StateTable_OptData_Load_Func optdata_load_func;
-
- } GXV_StateTable_ValidatorRec, *GXV_StateTable_ValidatorRecData;
-
-
- /* ---------------------- 32bit XStateTable ---------------------------- */
-
- typedef GXV_StateTable_GlyphOffsetDesc GXV_XStateTable_GlyphOffsetDesc;
-
- typedef const GXV_XStateTable_GlyphOffsetDesc* GXV_XStateTable_GlyphOffsetCPtr;
-
- typedef void
- (*GXV_XStateTable_Subtable_Setup_Func)( FT_ULong table_size,
- FT_ULong classTable,
- FT_ULong stateArray,
- FT_ULong entryTable,
- FT_ULong* classTable_length_p,
- FT_ULong* stateArray_length_p,
- FT_ULong* entryTable_length_p,
- GXV_Validator gxvalid );
-
- typedef void
- (*GXV_XStateTable_Entry_Validate_Func)(
- FT_UShort state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetCPtr glyphOffset_p,
- FT_Bytes xstatetable_table,
- FT_Bytes xstatetable_limit,
- GXV_Validator gxvalid );
-
-
- typedef GXV_StateTable_OptData_Load_Func GXV_XStateTable_OptData_Load_Func;
-
-
- typedef struct GXV_XStateTable_ValidatorRec_
- {
- int entry_glyphoffset_fmt;
- void* optdata;
-
- GXV_XStateTable_Subtable_Setup_Func subtable_setup_func;
- GXV_XStateTable_Entry_Validate_Func entry_validate_func;
- GXV_XStateTable_OptData_Load_Func optdata_load_func;
-
- FT_ULong nClasses;
- FT_UShort maxClassID;
-
- } GXV_XStateTable_ValidatorRec, *GXV_XStateTable_ValidatorRecData;
-
-
- /* ===================================================================== */
-
- typedef struct GXV_ValidatorRec_
- {
- FT_Validator root;
-
- FT_Face face;
- void* table_data;
-
- FT_ULong subtable_length;
-
- GXV_LookupValue_SignSpec lookupval_sign;
- GXV_Lookup_Value_Validate_Func lookupval_func;
- GXV_Lookup_Fmt4_Transit_Func lookupfmt4_trans;
- FT_Bytes lookuptbl_head;
-
- FT_UShort min_gid;
- FT_UShort max_gid;
-
- GXV_StateTable_ValidatorRec statetable;
- GXV_XStateTable_ValidatorRec xstatetable;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_UInt debug_indent;
- const FT_String* debug_function_name[3];
-#endif
-
- } GXV_ValidatorRec;
-
-
-#define GXV_TABLE_DATA( tag, field ) \
- ( ( (GXV_ ## tag ## _Data)gxvalid->table_data )->field )
-
-#undef FT_INVALID_
-#define FT_INVALID_( _error ) \
- ft_validator_error( gxvalid->root, FT_THROW( _error ) )
-
-#define GXV_LIMIT_CHECK( _count ) \
- FT_BEGIN_STMNT \
- if ( p + _count > ( limit? limit : gxvalid->root->limit ) ) \
- FT_INVALID_TOO_SHORT; \
- FT_END_STMNT
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
-#define GXV_INIT gxvalid->debug_indent = 0
-
-#define GXV_NAME_ENTER( name ) \
- FT_BEGIN_STMNT \
- gxvalid->debug_indent += 2; \
- FT_TRACE4(( "%*.s", gxvalid->debug_indent, 0 )); \
- FT_TRACE4(( "%s table\n", name )); \
- FT_END_STMNT
-
-#define GXV_EXIT gxvalid->debug_indent -= 2
-
-#define GXV_TRACE( s ) \
- FT_BEGIN_STMNT \
- FT_TRACE4(( "%*.s", gxvalid->debug_indent, 0 )); \
- FT_TRACE4( s ); \
- FT_END_STMNT
-
-#else /* !FT_DEBUG_LEVEL_TRACE */
-
-#define GXV_INIT do { } while ( 0 )
-#define GXV_NAME_ENTER( name ) do { } while ( 0 )
-#define GXV_EXIT do { } while ( 0 )
-
-#define GXV_TRACE( s ) do { } while ( 0 )
-
-#endif /* !FT_DEBUG_LEVEL_TRACE */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 32bit alignment checking *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define GXV_32BIT_ALIGNMENT_VALIDATE( a ) \
- FT_BEGIN_STMNT \
- { \
- if ( (a) & 3 ) \
- FT_INVALID_OFFSET; \
- } \
- FT_END_STMNT
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Dumping Binary Data *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define GXV_TRACE_HEXDUMP( p, len ) \
- FT_BEGIN_STMNT \
- { \
- FT_Bytes b; \
- \
- \
- for ( b = p; b < (FT_Bytes)p + len; b++ ) \
- FT_TRACE1(("\\x%02x", *b)); \
- } \
- FT_END_STMNT
-
-#define GXV_TRACE_HEXDUMP_C( p, len ) \
- FT_BEGIN_STMNT \
- { \
- FT_Bytes b; \
- \
- \
- for ( b = p; b < (FT_Bytes)p + len; b++ ) \
- if ( 0x40 < *b && *b < 0x7E ) \
- FT_TRACE1(("%c", *b)); \
- else \
- FT_TRACE1(("\\x%02x", *b)); \
- } \
- FT_END_STMNT
-
-#define GXV_TRACE_HEXDUMP_SFNTNAME( n ) \
- GXV_TRACE_HEXDUMP( n.string, n.string_len )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** LOOKUP TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- gxv_BinSrchHeader_validate( FT_Bytes p,
- FT_Bytes limit,
- FT_UShort* unitSize_p,
- FT_UShort* nUnits_p,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_LookupTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Glyph ID *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( FT_Int )
- gxv_glyphid_validate( FT_UShort gid,
- GXV_Validator gxvalid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CONTROL POINT *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- gxv_ctlPoint_validate( FT_UShort gid,
- FT_UShort ctl_point,
- GXV_Validator gxvalid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** SFNT NAME *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- gxv_sfntName_validate( FT_UShort name_index,
- FT_UShort min_index,
- FT_UShort max_index,
- GXV_Validator gxvalid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** STATE TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- gxv_StateTable_subtable_setup( FT_UShort table_size,
- FT_UShort classTable,
- FT_UShort stateArray,
- FT_UShort entryTable,
- FT_UShort* classTable_length_p,
- FT_UShort* stateArray_length_p,
- FT_UShort* entryTable_length_p,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_XStateTable_subtable_setup( FT_ULong table_size,
- FT_ULong classTable,
- FT_ULong stateArray,
- FT_ULong entryTable,
- FT_ULong* classTable_length_p,
- FT_ULong* stateArray_length_p,
- FT_ULong* entryTable_length_p,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_StateTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_XStateTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** UTILITY MACROS AND FUNCTIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- gxv_array_getlimits_byte( FT_Bytes table,
- FT_Bytes limit,
- FT_Byte* min,
- FT_Byte* max,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_array_getlimits_ushort( FT_Bytes table,
- FT_Bytes limit,
- FT_UShort* min,
- FT_UShort* max,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_set_length_by_ushort_offset( FT_UShort* offset,
- FT_UShort** length,
- FT_UShort* buff,
- FT_UInt nmemb,
- FT_UShort limit,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_set_length_by_ulong_offset( FT_ULong* offset,
- FT_ULong** length,
- FT_ULong* buff,
- FT_UInt nmemb,
- FT_ULong limit,
- GXV_Validator gxvalid);
-
-
-#define GXV_SUBTABLE_OFFSET_CHECK( _offset ) \
- FT_BEGIN_STMNT \
- if ( (_offset) > gxvalid->subtable_length ) \
- FT_INVALID_OFFSET; \
- FT_END_STMNT
-
-#define GXV_SUBTABLE_LIMIT_CHECK( _count ) \
- FT_BEGIN_STMNT \
- if ( ( p + (_count) - gxvalid->subtable_start ) > \
- gxvalid->subtable_length ) \
- FT_INVALID_TOO_SHORT; \
- FT_END_STMNT
-
-#define GXV_USHORT_TO_SHORT( _us ) \
- ( ( 0x8000U < ( _us ) ) ? ( ( _us ) - 0x8000U ) : ( _us ) )
-
-#define GXV_STATETABLE_HEADER_SIZE ( 2 + 2 + 2 + 2 )
-#define GXV_STATEHEADER_SIZE GXV_STATETABLE_HEADER_SIZE
-
-#define GXV_XSTATETABLE_HEADER_SIZE ( 4 + 4 + 4 + 4 )
-#define GXV_XSTATEHEADER_SIZE GXV_XSTATETABLE_HEADER_SIZE
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Table overlapping *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct GXV_odtect_DataRec_
- {
- FT_Bytes start;
- FT_ULong length;
- FT_String* name;
-
- } GXV_odtect_DataRec, *GXV_odtect_Data;
-
- typedef struct GXV_odtect_RangeRec_
- {
- FT_UInt nRanges;
- GXV_odtect_Data range;
-
- } GXV_odtect_RangeRec, *GXV_odtect_Range;
-
-
- FT_LOCAL( void )
- gxv_odtect_add_range( FT_Bytes start,
- FT_ULong length,
- const FT_String* name,
- GXV_odtect_Range odtect );
-
- FT_LOCAL( void )
- gxv_odtect_validate( GXV_odtect_Range odtect,
- GXV_Validator gxvalid );
-
-
-#define GXV_ODTECT( n, odtect ) \
- GXV_odtect_DataRec odtect ## _range[n]; \
- GXV_odtect_RangeRec odtect ## _rec = { 0, NULL }; \
- GXV_odtect_Range odtect = NULL
-
-#define GXV_ODTECT_INIT( odtect ) \
- FT_BEGIN_STMNT \
- odtect ## _rec.nRanges = 0; \
- odtect ## _rec.range = odtect ## _range; \
- odtect = & odtect ## _rec; \
- FT_END_STMNT
-
-
- /* */
-
-FT_END_HEADER
-
-#endif /* GXVCOMMN_H_ */
-
-
-/* END */
diff --git a/src/gxvalid/gxverror.h b/src/gxvalid/gxverror.h
deleted file mode 100644
index 80a2b8a26..000000000
--- a/src/gxvalid/gxverror.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxverror.h */
-/* */
-/* TrueTypeGX/AAT validation module error codes (specification only). */
-/* */
-/* Copyright 2004-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the OpenType validation module error */
- /* enumeration constants. */
- /* */
- /*************************************************************************/
-
-#ifndef GXVERROR_H_
-#define GXVERROR_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX GXV_Err_
-#define FT_ERR_BASE FT_Mod_Err_GXvalid
-
-#include FT_ERRORS_H
-
-#endif /* GXVERROR_H_ */
-
-
-/* END */
diff --git a/src/gxvalid/gxvfeat.c b/src/gxvalid/gxvfeat.c
deleted file mode 100644
index 2e3ec6f9b..000000000
--- a/src/gxvalid/gxvfeat.c
+++ /dev/null
@@ -1,339 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvfeat.c */
-/* */
-/* TrueTypeGX/AAT feat table validation (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvalid.h"
-#include "gxvcommn.h"
-#include "gxvfeat.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvfeat
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Data and Types *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct GXV_feat_DataRec_
- {
- FT_UInt reserved_size;
- FT_UShort feature;
- FT_UShort setting;
-
- } GXV_feat_DataRec, *GXV_feat_Data;
-
-
-#define GXV_FEAT_DATA( field ) GXV_TABLE_DATA( feat, field )
-
-
- typedef enum GXV_FeatureFlagsMask_
- {
- GXV_FEAT_MASK_EXCLUSIVE_SETTINGS = 0x8000U,
- GXV_FEAT_MASK_DYNAMIC_DEFAULT = 0x4000,
- GXV_FEAT_MASK_UNUSED = 0x3F00,
- GXV_FEAT_MASK_DEFAULT_SETTING = 0x00FF
-
- } GXV_FeatureFlagsMask;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** UTILITY FUNCTIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- gxv_feat_registry_validate( FT_UShort feature,
- FT_UShort nSettings,
- FT_Bool exclusive,
- GXV_Validator gxvalid )
- {
- GXV_NAME_ENTER( "feature in registry" );
-
- GXV_TRACE(( " (feature = %u)\n", feature ));
-
- if ( feature >= gxv_feat_registry_length )
- {
- GXV_TRACE(( "feature number %d is out of range %d\n",
- feature, gxv_feat_registry_length ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
- goto Exit;
- }
-
- if ( gxv_feat_registry[feature].existence == 0 )
- {
- GXV_TRACE(( "feature number %d is in defined range but doesn't exist\n",
- feature ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
- goto Exit;
- }
-
- if ( gxv_feat_registry[feature].apple_reserved )
- {
- /* Don't use here. Apple is reserved. */
- GXV_TRACE(( "feature number %d is reserved by Apple\n", feature ));
- if ( gxvalid->root->level >= FT_VALIDATE_TIGHT )
- FT_INVALID_DATA;
- }
-
- if ( nSettings != gxv_feat_registry[feature].nSettings )
- {
- GXV_TRACE(( "feature %d: nSettings %d != defined nSettings %d\n",
- feature, nSettings,
- gxv_feat_registry[feature].nSettings ));
- if ( gxvalid->root->level >= FT_VALIDATE_TIGHT )
- FT_INVALID_DATA;
- }
-
- if ( exclusive != gxv_feat_registry[feature].exclusive )
- {
- GXV_TRACE(( "exclusive flag %d differs from predefined value\n",
- exclusive ));
- if ( gxvalid->root->level >= FT_VALIDATE_TIGHT )
- FT_INVALID_DATA;
- }
-
- Exit:
- GXV_EXIT;
- }
-
-
- static void
- gxv_feat_name_index_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
- FT_Short nameIndex;
-
-
- GXV_NAME_ENTER( "nameIndex" );
-
- GXV_LIMIT_CHECK( 2 );
- nameIndex = FT_NEXT_SHORT ( p );
- GXV_TRACE(( " (nameIndex = %d)\n", nameIndex ));
-
- gxv_sfntName_validate( (FT_UShort)nameIndex,
- 255,
- 32768U,
- gxvalid );
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_feat_setting_validate( FT_Bytes table,
- FT_Bytes limit,
- FT_Bool exclusive,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UShort setting;
-
-
- GXV_NAME_ENTER( "setting" );
-
- GXV_LIMIT_CHECK( 2 );
-
- setting = FT_NEXT_USHORT( p );
-
- /* If we have exclusive setting, the setting should be odd. */
- if ( exclusive && ( setting & 1 ) == 0 )
- FT_INVALID_DATA;
-
- gxv_feat_name_index_validate( p, limit, gxvalid );
-
- GXV_FEAT_DATA( setting ) = setting;
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_feat_name_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UInt reserved_size = GXV_FEAT_DATA( reserved_size );
-
- FT_UShort feature;
- FT_UShort nSettings;
- FT_ULong settingTable;
- FT_UShort featureFlags;
-
- FT_Bool exclusive;
- FT_Int last_setting;
- FT_UInt i;
-
-
- GXV_NAME_ENTER( "name" );
-
- /* feature + nSettings + settingTable + featureFlags */
- GXV_LIMIT_CHECK( 2 + 2 + 4 + 2 );
-
- feature = FT_NEXT_USHORT( p );
- GXV_FEAT_DATA( feature ) = feature;
-
- nSettings = FT_NEXT_USHORT( p );
- settingTable = FT_NEXT_ULONG ( p );
- featureFlags = FT_NEXT_USHORT( p );
-
- if ( settingTable < reserved_size )
- FT_INVALID_OFFSET;
-
- if ( ( featureFlags & GXV_FEAT_MASK_UNUSED ) == 0 )
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
-
- exclusive = FT_BOOL( featureFlags & GXV_FEAT_MASK_EXCLUSIVE_SETTINGS );
- if ( exclusive )
- {
- FT_Byte dynamic_default;
-
-
- if ( featureFlags & GXV_FEAT_MASK_DYNAMIC_DEFAULT )
- dynamic_default = (FT_Byte)( featureFlags &
- GXV_FEAT_MASK_DEFAULT_SETTING );
- else
- dynamic_default = 0;
-
- /* If exclusive, check whether default setting is in the range. */
- if ( !( dynamic_default < nSettings ) )
- FT_INVALID_FORMAT;
- }
-
- gxv_feat_registry_validate( feature, nSettings, exclusive, gxvalid );
-
- gxv_feat_name_index_validate( p, limit, gxvalid );
-
- p = gxvalid->root->base + settingTable;
- for ( last_setting = -1, i = 0; i < nSettings; i++ )
- {
- gxv_feat_setting_validate( p, limit, exclusive, gxvalid );
-
- if ( (FT_Int)GXV_FEAT_DATA( setting ) <= last_setting )
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_FORMAT );
-
- last_setting = (FT_Int)GXV_FEAT_DATA( setting );
- /* setting + nameIndex */
- p += ( 2 + 2 );
- }
-
- GXV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** feat TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- gxv_feat_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator ftvalid )
- {
- GXV_ValidatorRec gxvalidrec;
- GXV_Validator gxvalid = &gxvalidrec;
-
- GXV_feat_DataRec featrec;
- GXV_feat_Data feat = &featrec;
-
- FT_Bytes p = table;
- FT_Bytes limit = 0;
-
- FT_UInt featureNameCount;
-
- FT_UInt i;
- FT_Int last_feature;
-
-
- gxvalid->root = ftvalid;
- gxvalid->table_data = feat;
- gxvalid->face = face;
-
- FT_TRACE3(( "validating `feat' table\n" ));
- GXV_INIT;
-
- feat->reserved_size = 0;
-
- /* version + featureNameCount + none_0 + none_1 */
- GXV_LIMIT_CHECK( 4 + 2 + 2 + 4 );
- feat->reserved_size += 4 + 2 + 2 + 4;
-
- if ( FT_NEXT_ULONG( p ) != 0x00010000UL ) /* Version */
- FT_INVALID_FORMAT;
-
- featureNameCount = FT_NEXT_USHORT( p );
- GXV_TRACE(( " (featureNameCount = %d)\n", featureNameCount ));
-
- if ( !( IS_PARANOID_VALIDATION ) )
- p += 6; /* skip (none) and (none) */
- else
- {
- if ( FT_NEXT_USHORT( p ) != 0 )
- FT_INVALID_DATA;
-
- if ( FT_NEXT_ULONG( p ) != 0 )
- FT_INVALID_DATA;
- }
-
- feat->reserved_size += featureNameCount * ( 2 + 2 + 4 + 2 + 2 );
-
- for ( last_feature = -1, i = 0; i < featureNameCount; i++ )
- {
- gxv_feat_name_validate( p, limit, gxvalid );
-
- if ( (FT_Int)GXV_FEAT_DATA( feature ) <= last_feature )
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_FORMAT );
-
- last_feature = GXV_FEAT_DATA( feature );
- p += 2 + 2 + 4 + 2 + 2;
- }
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvfeat.h b/src/gxvalid/gxvfeat.h
deleted file mode 100644
index 8c0e847eb..000000000
--- a/src/gxvalid/gxvfeat.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvfeat.h */
-/* */
-/* TrueTypeGX/AAT feat table validation (specification). */
-/* */
-/* Copyright 2004-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#ifndef GXVFEAT_H_
-#define GXVFEAT_H_
-
-
-#include "gxvalid.h"
-#include "gxvcommn.h"
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Registry predefined by Apple *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* TODO: More compact format */
- typedef struct GXV_Feature_RegistryRec_
- {
- FT_Bool existence;
- FT_Bool apple_reserved;
- FT_Bool exclusive;
- FT_Byte nSettings;
-
- } GX_Feature_RegistryRec;
-
-
-#define gxv_feat_registry_length \
- ( sizeof ( gxv_feat_registry ) / \
- sizeof ( GX_Feature_RegistryRec ) )
-
-
- static GX_Feature_RegistryRec gxv_feat_registry[] =
- {
- /* Generated from gxvfgen.c */
- {1, 0, 0, 1}, /* All Typographic Features */
- {1, 0, 0, 8}, /* Ligatures */
- {1, 0, 1, 3}, /* Cursive Connection */
- {1, 0, 1, 6}, /* Letter Case */
- {1, 0, 0, 1}, /* Vertical Substitution */
- {1, 0, 0, 1}, /* Linguistic Rearrangement */
- {1, 0, 1, 2}, /* Number Spacing */
- {1, 1, 0, 0}, /* Apple Reserved 1 */
- {1, 0, 0, 5}, /* Smart Swashes */
- {1, 0, 1, 3}, /* Diacritics */
- {1, 0, 1, 4}, /* Vertical Position */
- {1, 0, 1, 3}, /* Fractions */
- {1, 1, 0, 0}, /* Apple Reserved 2 */
- {1, 0, 0, 1}, /* Overlapping Characters */
- {1, 0, 0, 6}, /* Typographic Extras */
- {1, 0, 0, 5}, /* Mathematical Extras */
- {1, 0, 1, 7}, /* Ornament Sets */
- {1, 0, 1, 1}, /* Character Alternatives */
- {1, 0, 1, 5}, /* Design Complexity */
- {1, 0, 1, 6}, /* Style Options */
- {1, 0, 1, 11}, /* Character Shape */
- {1, 0, 1, 2}, /* Number Case */
- {1, 0, 1, 4}, /* Text Spacing */
- {1, 0, 1, 10}, /* Transliteration */
- {1, 0, 1, 9}, /* Annotation */
- {1, 0, 1, 2}, /* Kana Spacing */
- {1, 0, 1, 2}, /* Ideographic Spacing */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {0, 0, 0, 0}, /* __EMPTY__ */
- {1, 0, 1, 4}, /* Text Spacing */
- {1, 0, 1, 2}, /* Kana Spacing */
- {1, 0, 1, 2}, /* Ideographic Spacing */
- {1, 0, 1, 4}, /* CJK Roman Spacing */
- };
-
-
-#endif /* GXVFEAT_H_ */
-
-
-/* END */
diff --git a/src/gxvalid/gxvfgen.c b/src/gxvalid/gxvfgen.c
deleted file mode 100644
index 8cc08cd9c..000000000
--- a/src/gxvalid/gxvfgen.c
+++ /dev/null
@@ -1,483 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxfgen.c */
-/* */
-/* Generate feature registry data for gxv `feat' validator. */
-/* This program is derived from gxfeatreg.c in gxlayout. */
-/* */
-/* Copyright 2004-2017 by */
-/* Masatake YAMATO and Redhat K.K. */
-/* */
-/* This file may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxfeatreg.c */
-/* */
-/* Database of font features pre-defined by Apple Computer, Inc. */
-/* http://developer.apple.com/fonts/Registry/ */
-/* (body). */
-/* */
-/* Copyright 2003 by */
-/* Masatake YAMATO and Redhat K.K. */
-/* */
-/* This file may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* Development of gxfeatreg.c is supported by */
-/* Information-technology Promotion Agency, Japan. */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* This file is compiled as a stand-alone executable. */
-/* This file is never compiled into `libfreetype2'. */
-/* The output of this file is used in `gxvfeat.c'. */
-/* ----------------------------------------------------------------------- */
-/* Compile: gcc `pkg-config --cflags freetype2` gxvfgen.c -o gxvfgen */
-/* Run: ./gxvfgen > tmp.c */
-/* */
-/***************************************************************************/
-
- /*******************************************************************/
- /* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING */
- /*******************************************************************/
-
- /*
- * If you add a new setting to a feature, check the number of settings
- * in the feature. If the number is greater than the value defined as
- * FEATREG_MAX_SETTING, update the value.
- */
-#define FEATREG_MAX_SETTING 12
-
- /*******************************************************************/
- /* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING */
- /*******************************************************************/
-
-
-#include <stdio.h>
-#include <string.h>
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Data and Types *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define APPLE_RESERVED "Apple Reserved"
-#define APPLE_RESERVED_LENGTH 14
-
- typedef struct GX_Feature_RegistryRec_
- {
- const char* feat_name;
- char exclusive;
- char* setting_name[FEATREG_MAX_SETTING];
-
- } GX_Feature_RegistryRec;
-
-
-#define EMPTYFEAT {0, 0, {NULL}}
-
-
- static GX_Feature_RegistryRec featreg_table[] = {
- { /* 0 */
- "All Typographic Features",
- 0,
- {
- "All Type Features",
- NULL
- }
- }, { /* 1 */
- "Ligatures",
- 0,
- {
- "Required Ligatures",
- "Common Ligatures",
- "Rare Ligatures",
- "Logos",
- "Rebus Pictures",
- "Diphthong Ligatures",
- "Squared Ligatures",
- "Squared Ligatures, Abbreviated",
- NULL
- }
- }, { /* 2 */
- "Cursive Connection",
- 1,
- {
- "Unconnected",
- "Partially Connected",
- "Cursive",
- NULL
- }
- }, { /* 3 */
- "Letter Case",
- 1,
- {
- "Upper & Lower Case",
- "All Caps",
- "All Lower Case",
- "Small Caps",
- "Initial Caps",
- "Initial Caps & Small Caps",
- NULL
- }
- }, { /* 4 */
- "Vertical Substitution",
- 0,
- {
- /* "Substitute Vertical Forms", */
- "Turns on the feature",
- NULL
- }
- }, { /* 5 */
- "Linguistic Rearrangement",
- 0,
- {
- /* "Linguistic Rearrangement", */
- "Turns on the feature",
- NULL
- }
- }, { /* 6 */
- "Number Spacing",
- 1,
- {
- "Monospaced Numbers",
- "Proportional Numbers",
- NULL
- }
- }, { /* 7 */
- APPLE_RESERVED " 1",
- 0,
- {NULL}
- }, { /* 8 */
- "Smart Swashes",
- 0,
- {
- "Word Initial Swashes",
- "Word Final Swashes",
- "Line Initial Swashes",
- "Line Final Swashes",
- "Non-Final Swashes",
- NULL
- }
- }, { /* 9 */
- "Diacritics",
- 1,
- {
- "Show Diacritics",
- "Hide Diacritics",
- "Decompose Diacritics",
- NULL
- }
- }, { /* 10 */
- "Vertical Position",
- 1,
- {
- /* "Normal Position", */
- "No Vertical Position",
- "Superiors",
- "Inferiors",
- "Ordinals",
- NULL
- }
- }, { /* 11 */
- "Fractions",
- 1,
- {
- "No Fractions",
- "Vertical Fractions",
- "Diagonal Fractions",
- NULL
- }
- }, { /* 12 */
- APPLE_RESERVED " 2",
- 0,
- {NULL}
- }, { /* 13 */
- "Overlapping Characters",
- 0,
- {
- /* "Prevent Overlap", */
- "Turns on the feature",
- NULL
- }
- }, { /* 14 */
- "Typographic Extras",
- 0,
- {
- "Hyphens to Em Dash",
- "Hyphens to En Dash",
- "Unslashed Zero",
- "Form Interrobang",
- "Smart Quotes",
- "Periods to Ellipsis",
- NULL
- }
- }, { /* 15 */
- "Mathematical Extras",
- 0,
- {
- "Hyphens to Minus",
- "Asterisk to Multiply",
- "Slash to Divide",
- "Inequality Ligatures",
- "Exponents",
- NULL
- }
- }, { /* 16 */
- "Ornament Sets",
- 1,
- {
- "No Ornaments",
- "Dingbats",
- "Pi Characters",
- "Fleurons",
- "Decorative Borders",
- "International Symbols",
- "Math Symbols",
- NULL
- }
- }, { /* 17 */
- "Character Alternatives",
- 1,
- {
- "No Alternates",
- /* TODO */
- NULL
- }
- }, { /* 18 */
- "Design Complexity",
- 1,
- {
- "Design Level 1",
- "Design Level 2",
- "Design Level 3",
- "Design Level 4",
- "Design Level 5",
- /* TODO */
- NULL
- }
- }, { /* 19 */
- "Style Options",
- 1,
- {
- "No Style Options",
- "Display Text",
- "Engraved Text",
- "Illuminated Caps",
- "Tilling Caps",
- "Tall Caps",
- NULL
- }
- }, { /* 20 */
- "Character Shape",
- 1,
- {
- "Traditional Characters",
- "Simplified Characters",
- "JIS 1978 Characters",
- "JIS 1983 Characters",
- "JIS 1990 Characters",
- "Traditional Characters, Alternative Set 1",
- "Traditional Characters, Alternative Set 2",
- "Traditional Characters, Alternative Set 3",
- "Traditional Characters, Alternative Set 4",
- "Traditional Characters, Alternative Set 5",
- "Expert Characters",
- NULL /* count => 12 */
- }
- }, { /* 21 */
- "Number Case",
- 1,
- {
- "Lower Case Numbers",
- "Upper Case Numbers",
- NULL
- }
- }, { /* 22 */
- "Text Spacing",
- 1,
- {
- "Proportional",
- "Monospaced",
- "Half-width",
- "Normal",
- NULL
- }
- }, /* Here after Newer */ { /* 23 */
- "Transliteration",
- 1,
- {
- "No Transliteration",
- "Hanja To Hangul",
- "Hiragana to Katakana",
- "Katakana to Hiragana",
- "Kana to Romanization",
- "Romanization to Hiragana",
- "Romanization to Katakana",
- "Hanja to Hangul, Alternative Set 1",
- "Hanja to Hangul, Alternative Set 2",
- "Hanja to Hangul, Alternative Set 3",
- NULL
- }
- }, { /* 24 */
- "Annotation",
- 1,
- {
- "No Annotation",
- "Box Annotation",
- "Rounded Box Annotation",
- "Circle Annotation",
- "Inverted Circle Annotation",
- "Parenthesis Annotation",
- "Period Annotation",
- "Roman Numeral Annotation",
- "Diamond Annotation",
- NULL
- }
- }, { /* 25 */
- "Kana Spacing",
- 1,
- {
- "Full Width",
- "Proportional",
- NULL
- }
- }, { /* 26 */
- "Ideographic Spacing",
- 1,
- {
- "Full Width",
- "Proportional",
- NULL
- }
- }, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 27-30 */
- EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 31-35 */
- EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 36-40 */
- EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 40-45 */
- EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 46-50 */
- EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 51-55 */
- EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 56-60 */
- EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 61-65 */
- EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 66-70 */
- EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 71-75 */
- EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 76-80 */
- EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 81-85 */
- EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 86-90 */
- EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 91-95 */
- EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 96-98 */
- EMPTYFEAT, /* 99 */ { /* 100 => 22 */
- "Text Spacing",
- 1,
- {
- "Proportional",
- "Monospaced",
- "Half-width",
- "Normal",
- NULL
- }
- }, { /* 101 => 25 */
- "Kana Spacing",
- 1,
- {
- "Full Width",
- "Proportional",
- NULL
- }
- }, { /* 102 => 26 */
- "Ideographic Spacing",
- 1,
- {
- "Full Width",
- "Proportional",
- NULL
- }
- }, { /* 103 */
- "CJK Roman Spacing",
- 1,
- {
- "Half-width",
- "Proportional",
- "Default Roman",
- "Full-width Roman",
- NULL
- }
- }, { /* 104 => 1 */
- "All Typographic Features",
- 0,
- {
- "All Type Features",
- NULL
- }
- }
- };
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Generator *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- int
- main( void )
- {
- int i;
-
-
- printf( " {\n" );
- printf( " /* Generated from %s */\n", __FILE__ );
-
- for ( i = 0;
- i < sizeof ( featreg_table ) / sizeof ( GX_Feature_RegistryRec );
- i++ )
- {
- const char* feat_name;
- int nSettings;
-
-
- feat_name = featreg_table[i].feat_name;
- for ( nSettings = 0;
- featreg_table[i].setting_name[nSettings];
- nSettings++)
- ; /* Do nothing */
-
- printf( " {%1d, %1d, %1d, %2d}, /* %s */\n",
- feat_name ? 1 : 0,
- ( feat_name &&
- ( ft_strncmp( feat_name,
- APPLE_RESERVED, APPLE_RESERVED_LENGTH ) == 0 )
- ) ? 1 : 0,
- featreg_table[i].exclusive ? 1 : 0,
- nSettings,
- feat_name ? feat_name : "__EMPTY__" );
- }
-
- printf( " };\n" );
-
- return 0;
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvjust.c b/src/gxvalid/gxvjust.c
deleted file mode 100644
index c8cfd83ea..000000000
--- a/src/gxvalid/gxvjust.c
+++ /dev/null
@@ -1,719 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvjust.c */
-/* */
-/* TrueTypeGX/AAT just table validation (body). */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvalid.h"
-#include "gxvcommn.h"
-
-#include FT_SFNT_NAMES_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvjust
-
- /*
- * referred `just' table format specification:
- * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6just.html
- * last updated 2000.
- * ----------------------------------------------
- * [JUST HEADER]: GXV_JUST_HEADER_SIZE
- * version (fixed: 32bit) = 0x00010000
- * format (uint16: 16bit) = 0 is only defined (2000)
- * horizOffset (uint16: 16bit)
- * vertOffset (uint16: 16bit)
- * ----------------------------------------------
- */
-
- typedef struct GXV_just_DataRec_
- {
- FT_UShort wdc_offset_max;
- FT_UShort wdc_offset_min;
- FT_UShort pc_offset_max;
- FT_UShort pc_offset_min;
-
- } GXV_just_DataRec, *GXV_just_Data;
-
-
-#define GXV_JUST_DATA( a ) GXV_TABLE_DATA( just, a )
-
-
- /* GX just table does not define their subset of GID */
- static void
- gxv_just_check_max_gid( FT_UShort gid,
- const FT_String* msg_tag,
- GXV_Validator gxvalid )
- {
- if ( gid < gxvalid->face->num_glyphs )
- return;
-
- GXV_TRACE(( "just table includes too large %s"
- " GID=%d > %d (in maxp)\n",
- msg_tag, gid, gxvalid->face->num_glyphs ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
- }
-
-
- static void
- gxv_just_wdp_entry_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_ULong justClass;
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_Fixed beforeGrowLimit;
- FT_Fixed beforeShrinkGrowLimit;
- FT_Fixed afterGrowLimit;
- FT_Fixed afterShrinkGrowLimit;
- FT_UShort growFlags;
- FT_UShort shrinkFlags;
-#endif
-
-
- GXV_LIMIT_CHECK( 4 + 4 + 4 + 4 + 4 + 2 + 2 );
- justClass = FT_NEXT_ULONG( p );
-#ifndef GXV_LOAD_UNUSED_VARS
- p += 4 + 4 + 4 + 4 + 2 + 2;
-#else
- beforeGrowLimit = FT_NEXT_ULONG( p );
- beforeShrinkGrowLimit = FT_NEXT_ULONG( p );
- afterGrowLimit = FT_NEXT_ULONG( p );
- afterShrinkGrowLimit = FT_NEXT_ULONG( p );
- growFlags = FT_NEXT_USHORT( p );
- shrinkFlags = FT_NEXT_USHORT( p );
-#endif
-
- /* According to Apple spec, only 7bits in justClass is used */
- if ( ( justClass & 0xFFFFFF80UL ) != 0 )
- {
- GXV_TRACE(( "just table includes non-zero value"
- " in unused justClass higher bits"
- " of WidthDeltaPair" ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
- }
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- }
-
-
- static void
- gxv_just_wdc_entry_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_ULong count, i;
-
-
- GXV_LIMIT_CHECK( 4 );
- count = FT_NEXT_ULONG( p );
- for ( i = 0; i < count; i++ )
- {
- GXV_TRACE(( "validating wdc pair %d/%d\n", i + 1, count ));
- gxv_just_wdp_entry_validate( p, limit, gxvalid );
- p += gxvalid->subtable_length;
- }
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- }
-
-
- static void
- gxv_just_widthDeltaClusters_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_Bytes wdc_end = table + GXV_JUST_DATA( wdc_offset_max );
- FT_UInt i;
-
-
- GXV_NAME_ENTER( "just justDeltaClusters" );
-
- if ( limit <= wdc_end )
- FT_INVALID_OFFSET;
-
- for ( i = 0; p <= wdc_end; i++ )
- {
- gxv_just_wdc_entry_validate( p, limit, gxvalid );
- p += gxvalid->subtable_length;
- }
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_just_actSubrecord_type0_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
- FT_Fixed lowerLimit;
- FT_Fixed upperLimit;
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_UShort order;
-#endif
- FT_UShort decomposedCount;
-
- FT_UInt i;
-
-
- GXV_LIMIT_CHECK( 4 + 4 + 2 + 2 );
- lowerLimit = FT_NEXT_LONG( p );
- upperLimit = FT_NEXT_LONG( p );
-#ifdef GXV_LOAD_UNUSED_VARS
- order = FT_NEXT_USHORT( p );
-#else
- p += 2;
-#endif
- decomposedCount = FT_NEXT_USHORT( p );
-
- if ( lowerLimit >= upperLimit )
- {
- GXV_TRACE(( "just table includes invalid range spec:"
- " lowerLimit(%d) > upperLimit(%d)\n" ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
- }
-
- for ( i = 0; i < decomposedCount; i++ )
- {
- FT_UShort glyphs;
-
-
- GXV_LIMIT_CHECK( 2 );
- glyphs = FT_NEXT_USHORT( p );
- gxv_just_check_max_gid( glyphs, "type0:glyphs", gxvalid );
- }
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- }
-
-
- static void
- gxv_just_actSubrecord_type1_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UShort addGlyph;
-
-
- GXV_LIMIT_CHECK( 2 );
- addGlyph = FT_NEXT_USHORT( p );
-
- gxv_just_check_max_gid( addGlyph, "type1:addGlyph", gxvalid );
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- }
-
-
- static void
- gxv_just_actSubrecord_type2_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_Fixed substThreshhold; /* Apple misspelled "Threshhold" */
-#endif
- FT_UShort addGlyph;
- FT_UShort substGlyph;
-
-
- GXV_LIMIT_CHECK( 4 + 2 + 2 );
-#ifdef GXV_LOAD_UNUSED_VARS
- substThreshhold = FT_NEXT_ULONG( p );
-#else
- p += 4;
-#endif
- addGlyph = FT_NEXT_USHORT( p );
- substGlyph = FT_NEXT_USHORT( p );
-
- if ( addGlyph != 0xFFFF )
- gxv_just_check_max_gid( addGlyph, "type2:addGlyph", gxvalid );
-
- gxv_just_check_max_gid( substGlyph, "type2:substGlyph", gxvalid );
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- }
-
-
- static void
- gxv_just_actSubrecord_type4_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_ULong variantsAxis;
- FT_Fixed minimumLimit;
- FT_Fixed noStretchValue;
- FT_Fixed maximumLimit;
-
-
- GXV_LIMIT_CHECK( 4 + 4 + 4 + 4 );
- variantsAxis = FT_NEXT_ULONG( p );
- minimumLimit = FT_NEXT_LONG( p );
- noStretchValue = FT_NEXT_LONG( p );
- maximumLimit = FT_NEXT_LONG( p );
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
-
- if ( variantsAxis != 0x64756374L ) /* 'duct' */
- GXV_TRACE(( "variantsAxis 0x%08x is non default value",
- variantsAxis ));
-
- if ( minimumLimit > noStretchValue )
- GXV_TRACE(( "type4:minimumLimit 0x%08x > noStretchValue 0x%08x\n",
- minimumLimit, noStretchValue ));
- else if ( noStretchValue > maximumLimit )
- GXV_TRACE(( "type4:noStretchValue 0x%08x > maximumLimit 0x%08x\n",
- noStretchValue, maximumLimit ));
- else if ( !IS_PARANOID_VALIDATION )
- return;
-
- FT_INVALID_DATA;
- }
-
-
- static void
- gxv_just_actSubrecord_type5_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UShort flags;
- FT_UShort glyph;
-
-
- GXV_LIMIT_CHECK( 2 + 2 );
- flags = FT_NEXT_USHORT( p );
- glyph = FT_NEXT_USHORT( p );
-
- if ( flags )
- GXV_TRACE(( "type5: nonzero value 0x%04x in unused flags\n",
- flags ));
- gxv_just_check_max_gid( glyph, "type5:glyph", gxvalid );
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- }
-
-
- /* parse single actSubrecord */
- static void
- gxv_just_actSubrecord_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UShort actionClass;
- FT_UShort actionType;
- FT_ULong actionLength;
-
-
- GXV_NAME_ENTER( "just actSubrecord" );
-
- GXV_LIMIT_CHECK( 2 + 2 + 4 );
- actionClass = FT_NEXT_USHORT( p );
- actionType = FT_NEXT_USHORT( p );
- actionLength = FT_NEXT_ULONG( p );
-
- /* actionClass is related with justClass using 7bit only */
- if ( ( actionClass & 0xFF80 ) != 0 )
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
-
- if ( actionType == 0 )
- gxv_just_actSubrecord_type0_validate( p, limit, gxvalid );
- else if ( actionType == 1 )
- gxv_just_actSubrecord_type1_validate( p, limit, gxvalid );
- else if ( actionType == 2 )
- gxv_just_actSubrecord_type2_validate( p, limit, gxvalid );
- else if ( actionType == 3 )
- ; /* Stretch glyph action: no actionData */
- else if ( actionType == 4 )
- gxv_just_actSubrecord_type4_validate( p, limit, gxvalid );
- else if ( actionType == 5 )
- gxv_just_actSubrecord_type5_validate( p, limit, gxvalid );
- else
- FT_INVALID_DATA;
-
- gxvalid->subtable_length = actionLength;
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_just_pcActionRecord_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_ULong actionCount;
- FT_ULong i;
-
-
- GXV_LIMIT_CHECK( 4 );
- actionCount = FT_NEXT_ULONG( p );
- GXV_TRACE(( "actionCount = %d\n", actionCount ));
-
- for ( i = 0; i < actionCount; i++ )
- {
- gxv_just_actSubrecord_validate( p, limit, gxvalid );
- p += gxvalid->subtable_length;
- }
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_just_pcTable_LookupValue_entry_validate( FT_UShort glyph,
- GXV_LookupValueCPtr value_p,
- GXV_Validator gxvalid )
- {
- FT_UNUSED( glyph );
-
- if ( value_p->u > GXV_JUST_DATA( pc_offset_max ) )
- GXV_JUST_DATA( pc_offset_max ) = value_p->u;
- if ( value_p->u < GXV_JUST_DATA( pc_offset_max ) )
- GXV_JUST_DATA( pc_offset_min ) = value_p->u;
- }
-
-
- static void
- gxv_just_pcLookupTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
-
- GXV_NAME_ENTER( "just pcLookupTable" );
- GXV_JUST_DATA( pc_offset_max ) = 0x0000;
- GXV_JUST_DATA( pc_offset_min ) = 0xFFFFU;
-
- gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- gxvalid->lookupval_func = gxv_just_pcTable_LookupValue_entry_validate;
-
- gxv_LookupTable_validate( p, limit, gxvalid );
-
- /* subtable_length is set by gxv_LookupTable_validate() */
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_just_postcompTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
-
- GXV_NAME_ENTER( "just postcompTable" );
-
- gxv_just_pcLookupTable_validate( p, limit, gxvalid );
- p += gxvalid->subtable_length;
-
- gxv_just_pcActionRecord_validate( p, limit, gxvalid );
- p += gxvalid->subtable_length;
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_just_classTable_entry_validate(
- FT_Byte state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetCPtr glyphOffset_p,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
-#ifdef GXV_LOAD_UNUSED_VARS
- /* TODO: validate markClass & currentClass */
- FT_UShort setMark;
- FT_UShort dontAdvance;
- FT_UShort markClass;
- FT_UShort currentClass;
-#endif
-
- FT_UNUSED( state );
- FT_UNUSED( glyphOffset_p );
- FT_UNUSED( table );
- FT_UNUSED( limit );
- FT_UNUSED( gxvalid );
-
-#ifndef GXV_LOAD_UNUSED_VARS
- FT_UNUSED( flags );
-#else
- setMark = (FT_UShort)( ( flags >> 15 ) & 1 );
- dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
- markClass = (FT_UShort)( ( flags >> 7 ) & 0x7F );
- currentClass = (FT_UShort)( flags & 0x7F );
-#endif
- }
-
-
- static void
- gxv_just_justClassTable_validate ( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UShort length;
- FT_UShort coverage;
- FT_ULong subFeatureFlags;
-
-
- GXV_NAME_ENTER( "just justClassTable" );
-
- GXV_LIMIT_CHECK( 2 + 2 + 4 );
- length = FT_NEXT_USHORT( p );
- coverage = FT_NEXT_USHORT( p );
- subFeatureFlags = FT_NEXT_ULONG( p );
-
- GXV_TRACE(( " justClassTable: coverage = 0x%04x (%s) ", coverage ));
- if ( ( coverage & 0x4000 ) == 0 )
- GXV_TRACE(( "ascending\n" ));
- else
- GXV_TRACE(( "descending\n" ));
-
- if ( subFeatureFlags )
- GXV_TRACE(( " justClassTable: nonzero value (0x%08x)"
- " in unused subFeatureFlags\n", subFeatureFlags ));
-
- gxvalid->statetable.optdata = NULL;
- gxvalid->statetable.optdata_load_func = NULL;
- gxvalid->statetable.subtable_setup_func = NULL;
- gxvalid->statetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE;
- gxvalid->statetable.entry_validate_func =
- gxv_just_classTable_entry_validate;
-
- gxv_StateTable_validate( p, table + length, gxvalid );
-
- /* subtable_length is set by gxv_LookupTable_validate() */
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_just_wdcTable_LookupValue_validate( FT_UShort glyph,
- GXV_LookupValueCPtr value_p,
- GXV_Validator gxvalid )
- {
- FT_UNUSED( glyph );
-
- if ( value_p->u > GXV_JUST_DATA( wdc_offset_max ) )
- GXV_JUST_DATA( wdc_offset_max ) = value_p->u;
- if ( value_p->u < GXV_JUST_DATA( wdc_offset_min ) )
- GXV_JUST_DATA( wdc_offset_min ) = value_p->u;
- }
-
-
- static void
- gxv_just_justData_lookuptable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
-
- GXV_JUST_DATA( wdc_offset_max ) = 0x0000;
- GXV_JUST_DATA( wdc_offset_min ) = 0xFFFFU;
-
- gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- gxvalid->lookupval_func = gxv_just_wdcTable_LookupValue_validate;
-
- gxv_LookupTable_validate( p, limit, gxvalid );
-
- /* subtable_length is set by gxv_LookupTable_validate() */
-
- GXV_EXIT;
- }
-
-
- /*
- * gxv_just_justData_validate() parses and validates horizData, vertData.
- */
- static void
- gxv_just_justData_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- /*
- * following 3 offsets are measured from the start of `just'
- * (which table points to), not justData
- */
- FT_UShort justClassTableOffset;
- FT_UShort wdcTableOffset;
- FT_UShort pcTableOffset;
- FT_Bytes p = table;
-
- GXV_ODTECT( 4, odtect );
-
-
- GXV_NAME_ENTER( "just justData" );
-
- GXV_ODTECT_INIT( odtect );
- GXV_LIMIT_CHECK( 2 + 2 + 2 );
- justClassTableOffset = FT_NEXT_USHORT( p );
- wdcTableOffset = FT_NEXT_USHORT( p );
- pcTableOffset = FT_NEXT_USHORT( p );
-
- GXV_TRACE(( " (justClassTableOffset = 0x%04x)\n", justClassTableOffset ));
- GXV_TRACE(( " (wdcTableOffset = 0x%04x)\n", wdcTableOffset ));
- GXV_TRACE(( " (pcTableOffset = 0x%04x)\n", pcTableOffset ));
-
- gxv_just_justData_lookuptable_validate( p, limit, gxvalid );
- gxv_odtect_add_range( p, gxvalid->subtable_length,
- "just_LookupTable", odtect );
-
- if ( wdcTableOffset )
- {
- gxv_just_widthDeltaClusters_validate(
- gxvalid->root->base + wdcTableOffset, limit, gxvalid );
- gxv_odtect_add_range( gxvalid->root->base + wdcTableOffset,
- gxvalid->subtable_length, "just_wdcTable", odtect );
- }
-
- if ( pcTableOffset )
- {
- gxv_just_postcompTable_validate( gxvalid->root->base + pcTableOffset,
- limit, gxvalid );
- gxv_odtect_add_range( gxvalid->root->base + pcTableOffset,
- gxvalid->subtable_length, "just_pcTable", odtect );
- }
-
- if ( justClassTableOffset )
- {
- gxv_just_justClassTable_validate(
- gxvalid->root->base + justClassTableOffset, limit, gxvalid );
- gxv_odtect_add_range( gxvalid->root->base + justClassTableOffset,
- gxvalid->subtable_length, "just_justClassTable",
- odtect );
- }
-
- gxv_odtect_validate( odtect, gxvalid );
-
- GXV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_just_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator ftvalid )
- {
- FT_Bytes p = table;
- FT_Bytes limit = 0;
-
- GXV_ValidatorRec gxvalidrec;
- GXV_Validator gxvalid = &gxvalidrec;
- GXV_just_DataRec justrec;
- GXV_just_Data just = &justrec;
-
- FT_ULong version;
- FT_UShort format;
- FT_UShort horizOffset;
- FT_UShort vertOffset;
-
- GXV_ODTECT( 3, odtect );
-
-
- GXV_ODTECT_INIT( odtect );
-
- gxvalid->root = ftvalid;
- gxvalid->table_data = just;
- gxvalid->face = face;
-
- FT_TRACE3(( "validating `just' table\n" ));
- GXV_INIT;
-
- limit = gxvalid->root->limit;
-
- GXV_LIMIT_CHECK( 4 + 2 + 2 + 2 );
- version = FT_NEXT_ULONG( p );
- format = FT_NEXT_USHORT( p );
- horizOffset = FT_NEXT_USHORT( p );
- vertOffset = FT_NEXT_USHORT( p );
- gxv_odtect_add_range( table, (FT_ULong)( p - table ),
- "just header", odtect );
-
-
- /* Version 1.0 (always:2000) */
- GXV_TRACE(( " (version = 0x%08x)\n", version ));
- if ( version != 0x00010000UL )
- FT_INVALID_FORMAT;
-
- /* format 0 (always:2000) */
- GXV_TRACE(( " (format = 0x%04x)\n", format ));
- if ( format != 0x0000 )
- FT_INVALID_FORMAT;
-
- GXV_TRACE(( " (horizOffset = %d)\n", horizOffset ));
- GXV_TRACE(( " (vertOffset = %d)\n", vertOffset ));
-
-
- /* validate justData */
- if ( 0 < horizOffset )
- {
- gxv_just_justData_validate( table + horizOffset, limit, gxvalid );
- gxv_odtect_add_range( table + horizOffset, gxvalid->subtable_length,
- "horizJustData", odtect );
- }
-
- if ( 0 < vertOffset )
- {
- gxv_just_justData_validate( table + vertOffset, limit, gxvalid );
- gxv_odtect_add_range( table + vertOffset, gxvalid->subtable_length,
- "vertJustData", odtect );
- }
-
- gxv_odtect_validate( odtect, gxvalid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvkern.c b/src/gxvalid/gxvkern.c
deleted file mode 100644
index 9f9037387..000000000
--- a/src/gxvalid/gxvkern.c
+++ /dev/null
@@ -1,920 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvkern.c */
-/* */
-/* TrueTypeGX/AAT kern table validation (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvalid.h"
-#include "gxvcommn.h"
-
-#include FT_SFNT_NAMES_H
-#include FT_SERVICE_GX_VALIDATE_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvkern
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Data and Types *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef enum GXV_kern_Version_
- {
- KERN_VERSION_CLASSIC = 0x0000,
- KERN_VERSION_NEW = 0x0001
-
- } GXV_kern_Version;
-
-
- typedef enum GXV_kern_Dialect_
- {
- KERN_DIALECT_UNKNOWN = 0,
- KERN_DIALECT_MS = FT_VALIDATE_MS,
- KERN_DIALECT_APPLE = FT_VALIDATE_APPLE,
- KERN_DIALECT_ANY = FT_VALIDATE_CKERN
-
- } GXV_kern_Dialect;
-
-
- typedef struct GXV_kern_DataRec_
- {
- GXV_kern_Version version;
- void *subtable_data;
- GXV_kern_Dialect dialect_request;
-
- } GXV_kern_DataRec, *GXV_kern_Data;
-
-
-#define GXV_KERN_DATA( field ) GXV_TABLE_DATA( kern, field )
-
-#define KERN_IS_CLASSIC( gxvalid ) \
- ( KERN_VERSION_CLASSIC == GXV_KERN_DATA( version ) )
-#define KERN_IS_NEW( gxvalid ) \
- ( KERN_VERSION_NEW == GXV_KERN_DATA( version ) )
-
-#define KERN_DIALECT( gxvalid ) \
- GXV_KERN_DATA( dialect_request )
-#define KERN_ALLOWS_MS( gxvalid ) \
- ( KERN_DIALECT( gxvalid ) & KERN_DIALECT_MS )
-#define KERN_ALLOWS_APPLE( gxvalid ) \
- ( KERN_DIALECT( gxvalid ) & KERN_DIALECT_APPLE )
-
-#define GXV_KERN_HEADER_SIZE ( KERN_IS_NEW( gxvalid ) ? 8 : 4 )
-#define GXV_KERN_SUBTABLE_HEADER_SIZE ( KERN_IS_NEW( gxvalid ) ? 8 : 6 )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** SUBTABLE VALIDATORS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* ============================= format 0 ============================== */
-
- static void
- gxv_kern_subtable_fmt0_pairs_validate( FT_Bytes table,
- FT_Bytes limit,
- FT_UShort nPairs,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UShort i;
-
- FT_UShort last_gid_left = 0;
- FT_UShort last_gid_right = 0;
-
- FT_UNUSED( limit );
-
-
- GXV_NAME_ENTER( "kern format 0 pairs" );
-
- for ( i = 0; i < nPairs; i++ )
- {
- FT_UShort gid_left;
- FT_UShort gid_right;
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_Short kernValue;
-#endif
-
-
- /* left */
- gid_left = FT_NEXT_USHORT( p );
- gxv_glyphid_validate( gid_left, gxvalid );
-
- /* right */
- gid_right = FT_NEXT_USHORT( p );
- gxv_glyphid_validate( gid_right, gxvalid );
-
- /* Pairs of left and right GIDs must be unique and sorted. */
- GXV_TRACE(( "left gid = %u, right gid = %u\n", gid_left, gid_right ));
- if ( gid_left == last_gid_left )
- {
- if ( last_gid_right < gid_right )
- last_gid_right = gid_right;
- else
- FT_INVALID_DATA;
- }
- else if ( last_gid_left < gid_left )
- {
- last_gid_left = gid_left;
- last_gid_right = gid_right;
- }
- else
- FT_INVALID_DATA;
-
- /* skip the kern value */
-#ifdef GXV_LOAD_UNUSED_VARS
- kernValue = FT_NEXT_SHORT( p );
-#else
- p += 2;
-#endif
- }
-
- GXV_EXIT;
- }
-
- static void
- gxv_kern_subtable_fmt0_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table + GXV_KERN_SUBTABLE_HEADER_SIZE;
-
- FT_UShort nPairs;
- FT_UShort unitSize;
-
-
- GXV_NAME_ENTER( "kern subtable format 0" );
-
- unitSize = 2 + 2 + 2;
- nPairs = 0;
-
- /* nPairs, searchRange, entrySelector, rangeShift */
- GXV_LIMIT_CHECK( 2 + 2 + 2 + 2 );
- gxv_BinSrchHeader_validate( p, limit, &unitSize, &nPairs, gxvalid );
- p += 2 + 2 + 2 + 2;
-
- gxv_kern_subtable_fmt0_pairs_validate( p, limit, nPairs, gxvalid );
-
- GXV_EXIT;
- }
-
-
- /* ============================= format 1 ============================== */
-
-
- typedef struct GXV_kern_fmt1_StateOptRec_
- {
- FT_UShort valueTable;
- FT_UShort valueTable_length;
-
- } GXV_kern_fmt1_StateOptRec, *GXV_kern_fmt1_StateOptRecData;
-
-
- static void
- gxv_kern_subtable_fmt1_valueTable_load( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- GXV_kern_fmt1_StateOptRecData optdata =
- (GXV_kern_fmt1_StateOptRecData)gxvalid->statetable.optdata;
-
-
- GXV_LIMIT_CHECK( 2 );
- optdata->valueTable = FT_NEXT_USHORT( p );
- }
-
-
- /*
- * passed tables_size covers whole StateTable, including kern fmt1 header
- */
- static void
- gxv_kern_subtable_fmt1_subtable_setup( FT_UShort table_size,
- FT_UShort classTable,
- FT_UShort stateArray,
- FT_UShort entryTable,
- FT_UShort* classTable_length_p,
- FT_UShort* stateArray_length_p,
- FT_UShort* entryTable_length_p,
- GXV_Validator gxvalid )
- {
- FT_UShort o[4];
- FT_UShort *l[4];
- FT_UShort buff[5];
-
- GXV_kern_fmt1_StateOptRecData optdata =
- (GXV_kern_fmt1_StateOptRecData)gxvalid->statetable.optdata;
-
-
- o[0] = classTable;
- o[1] = stateArray;
- o[2] = entryTable;
- o[3] = optdata->valueTable;
- l[0] = classTable_length_p;
- l[1] = stateArray_length_p;
- l[2] = entryTable_length_p;
- l[3] = &(optdata->valueTable_length);
-
- gxv_set_length_by_ushort_offset( o, l, buff, 4, table_size, gxvalid );
- }
-
-
- /*
- * passed table & limit are of whole StateTable, not including subtables
- */
- static void
- gxv_kern_subtable_fmt1_entry_validate(
- FT_Byte state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetCPtr glyphOffset_p,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_UShort push;
- FT_UShort dontAdvance;
-#endif
- FT_UShort valueOffset;
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_UShort kernAction;
- FT_UShort kernValue;
-#endif
-
- FT_UNUSED( state );
- FT_UNUSED( glyphOffset_p );
-
-
-#ifdef GXV_LOAD_UNUSED_VARS
- push = (FT_UShort)( ( flags >> 15 ) & 1 );
- dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
-#endif
- valueOffset = (FT_UShort)( flags & 0x3FFF );
-
- {
- GXV_kern_fmt1_StateOptRecData vt_rec =
- (GXV_kern_fmt1_StateOptRecData)gxvalid->statetable.optdata;
- FT_Bytes p;
-
-
- if ( valueOffset < vt_rec->valueTable )
- FT_INVALID_OFFSET;
-
- p = table + valueOffset;
- limit = table + vt_rec->valueTable + vt_rec->valueTable_length;
-
- GXV_LIMIT_CHECK( 2 + 2 );
-#ifdef GXV_LOAD_UNUSED_VARS
- kernAction = FT_NEXT_USHORT( p );
- kernValue = FT_NEXT_USHORT( p );
-#endif
- }
- }
-
-
- static void
- gxv_kern_subtable_fmt1_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- GXV_kern_fmt1_StateOptRec vt_rec;
-
-
- GXV_NAME_ENTER( "kern subtable format 1" );
-
- gxvalid->statetable.optdata =
- &vt_rec;
- gxvalid->statetable.optdata_load_func =
- gxv_kern_subtable_fmt1_valueTable_load;
- gxvalid->statetable.subtable_setup_func =
- gxv_kern_subtable_fmt1_subtable_setup;
- gxvalid->statetable.entry_glyphoffset_fmt =
- GXV_GLYPHOFFSET_NONE;
- gxvalid->statetable.entry_validate_func =
- gxv_kern_subtable_fmt1_entry_validate;
-
- gxv_StateTable_validate( p, limit, gxvalid );
-
- GXV_EXIT;
- }
-
-
- /* ================ Data for Class-Based Subtables 2, 3 ================ */
-
- typedef enum GXV_kern_ClassSpec_
- {
- GXV_KERN_CLS_L = 0,
- GXV_KERN_CLS_R
-
- } GXV_kern_ClassSpec;
-
-
- /* ============================= format 2 ============================== */
-
- /* ---------------------- format 2 specific data ----------------------- */
-
- typedef struct GXV_kern_subtable_fmt2_DataRec_
- {
- FT_UShort rowWidth;
- FT_UShort array;
- FT_UShort offset_min[2];
- FT_UShort offset_max[2];
- const FT_String* class_tag[2];
- GXV_odtect_Range odtect;
-
- } GXV_kern_subtable_fmt2_DataRec, *GXV_kern_subtable_fmt2_Data;
-
-
-#define GXV_KERN_FMT2_DATA( field ) \
- ( ( (GXV_kern_subtable_fmt2_DataRec *) \
- ( GXV_KERN_DATA( subtable_data ) ) )->field )
-
-
- /* -------------------------- utility functions ----------------------- */
-
- static void
- gxv_kern_subtable_fmt2_clstbl_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_kern_ClassSpec spec,
- GXV_Validator gxvalid )
- {
- const FT_String* tag = GXV_KERN_FMT2_DATA( class_tag[spec] );
- GXV_odtect_Range odtect = GXV_KERN_FMT2_DATA( odtect );
-
- FT_Bytes p = table;
- FT_UShort firstGlyph;
- FT_UShort nGlyphs;
-
-
- GXV_NAME_ENTER( "kern format 2 classTable" );
-
- GXV_LIMIT_CHECK( 2 + 2 );
- firstGlyph = FT_NEXT_USHORT( p );
- nGlyphs = FT_NEXT_USHORT( p );
- GXV_TRACE(( " %s firstGlyph=%d, nGlyphs=%d\n",
- tag, firstGlyph, nGlyphs ));
-
- gxv_glyphid_validate( firstGlyph, gxvalid );
- gxv_glyphid_validate( (FT_UShort)( firstGlyph + nGlyphs - 1 ), gxvalid );
-
- gxv_array_getlimits_ushort( p, p + ( 2 * nGlyphs ),
- &( GXV_KERN_FMT2_DATA( offset_min[spec] ) ),
- &( GXV_KERN_FMT2_DATA( offset_max[spec] ) ),
- gxvalid );
-
- gxv_odtect_add_range( table, 2 * nGlyphs, tag, odtect );
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_kern_subtable_fmt2_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- GXV_ODTECT( 3, odtect );
- GXV_kern_subtable_fmt2_DataRec fmt2_rec =
- { 0, 0, { 0, 0 }, { 0, 0 }, { "leftClass", "rightClass" }, NULL };
-
- FT_Bytes p = table + GXV_KERN_SUBTABLE_HEADER_SIZE;
- FT_UShort leftOffsetTable;
- FT_UShort rightOffsetTable;
-
-
- GXV_NAME_ENTER( "kern subtable format 2" );
-
- GXV_ODTECT_INIT( odtect );
- fmt2_rec.odtect = odtect;
- GXV_KERN_DATA( subtable_data ) = &fmt2_rec;
-
- GXV_LIMIT_CHECK( 2 + 2 + 2 + 2 );
- GXV_KERN_FMT2_DATA( rowWidth ) = FT_NEXT_USHORT( p );
- leftOffsetTable = FT_NEXT_USHORT( p );
- rightOffsetTable = FT_NEXT_USHORT( p );
- GXV_KERN_FMT2_DATA( array ) = FT_NEXT_USHORT( p );
-
- GXV_TRACE(( "rowWidth = %d\n", GXV_KERN_FMT2_DATA( rowWidth ) ));
-
-
- GXV_LIMIT_CHECK( leftOffsetTable );
- GXV_LIMIT_CHECK( rightOffsetTable );
- GXV_LIMIT_CHECK( GXV_KERN_FMT2_DATA( array ) );
-
- gxv_kern_subtable_fmt2_clstbl_validate( table + leftOffsetTable, limit,
- GXV_KERN_CLS_L, gxvalid );
-
- gxv_kern_subtable_fmt2_clstbl_validate( table + rightOffsetTable, limit,
- GXV_KERN_CLS_R, gxvalid );
-
- if ( GXV_KERN_FMT2_DATA( offset_min[GXV_KERN_CLS_L] ) +
- GXV_KERN_FMT2_DATA( offset_min[GXV_KERN_CLS_R] )
- < GXV_KERN_FMT2_DATA( array ) )
- FT_INVALID_OFFSET;
-
- gxv_odtect_add_range( table + GXV_KERN_FMT2_DATA( array ),
- GXV_KERN_FMT2_DATA( offset_max[GXV_KERN_CLS_L] )
- + GXV_KERN_FMT2_DATA( offset_max[GXV_KERN_CLS_R] )
- - GXV_KERN_FMT2_DATA( array ),
- "array", odtect );
-
- gxv_odtect_validate( odtect, gxvalid );
-
- GXV_EXIT;
- }
-
-
- /* ============================= format 3 ============================== */
-
- static void
- gxv_kern_subtable_fmt3_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table + GXV_KERN_SUBTABLE_HEADER_SIZE;
- FT_UShort glyphCount;
- FT_Byte kernValueCount;
- FT_Byte leftClassCount;
- FT_Byte rightClassCount;
- FT_Byte flags;
-
-
- GXV_NAME_ENTER( "kern subtable format 3" );
-
- GXV_LIMIT_CHECK( 2 + 1 + 1 + 1 + 1 );
- glyphCount = FT_NEXT_USHORT( p );
- kernValueCount = FT_NEXT_BYTE( p );
- leftClassCount = FT_NEXT_BYTE( p );
- rightClassCount = FT_NEXT_BYTE( p );
- flags = FT_NEXT_BYTE( p );
-
- if ( gxvalid->face->num_glyphs != glyphCount )
- {
- GXV_TRACE(( "maxGID=%d, but glyphCount=%d\n",
- gxvalid->face->num_glyphs, glyphCount ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
- }
-
- if ( flags != 0 )
- GXV_TRACE(( "kern subtable fmt3 has nonzero value"
- " (%d) in unused flag\n", flags ));
- /*
- * just skip kernValue[kernValueCount]
- */
- GXV_LIMIT_CHECK( 2 * kernValueCount );
- p += 2 * kernValueCount;
-
- /*
- * check leftClass[gid] < leftClassCount
- */
- {
- FT_Byte min, max;
-
-
- GXV_LIMIT_CHECK( glyphCount );
- gxv_array_getlimits_byte( p, p + glyphCount, &min, &max, gxvalid );
- p += gxvalid->subtable_length;
-
- if ( leftClassCount < max )
- FT_INVALID_DATA;
- }
-
- /*
- * check rightClass[gid] < rightClassCount
- */
- {
- FT_Byte min, max;
-
-
- GXV_LIMIT_CHECK( glyphCount );
- gxv_array_getlimits_byte( p, p + glyphCount, &min, &max, gxvalid );
- p += gxvalid->subtable_length;
-
- if ( rightClassCount < max )
- FT_INVALID_DATA;
- }
-
- /*
- * check kernIndex[i, j] < kernValueCount
- */
- {
- FT_UShort i, j;
-
-
- for ( i = 0; i < leftClassCount; i++ )
- {
- for ( j = 0; j < rightClassCount; j++ )
- {
- GXV_LIMIT_CHECK( 1 );
- if ( kernValueCount < FT_NEXT_BYTE( p ) )
- FT_INVALID_OFFSET;
- }
- }
- }
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
-
- GXV_EXIT;
- }
-
-
- static FT_Bool
- gxv_kern_coverage_new_apple_validate( FT_UShort coverage,
- FT_UShort* format,
- GXV_Validator gxvalid )
- {
- /* new Apple-dialect */
-#ifdef GXV_LOAD_TRACE_VARS
- FT_Bool kernVertical;
- FT_Bool kernCrossStream;
- FT_Bool kernVariation;
-#endif
-
- FT_UNUSED( gxvalid );
-
-
- /* reserved bits = 0 */
- if ( coverage & 0x1FFC )
- return FALSE;
-
-#ifdef GXV_LOAD_TRACE_VARS
- kernVertical = FT_BOOL( ( coverage >> 15 ) & 1 );
- kernCrossStream = FT_BOOL( ( coverage >> 14 ) & 1 );
- kernVariation = FT_BOOL( ( coverage >> 13 ) & 1 );
-#endif
-
- *format = (FT_UShort)( coverage & 0x0003 );
-
- GXV_TRACE(( "new Apple-dialect: "
- "horizontal=%d, cross-stream=%d, variation=%d, format=%d\n",
- !kernVertical, kernCrossStream, kernVariation, *format ));
-
- GXV_TRACE(( "kerning values in Apple format subtable are ignored\n" ));
-
- return TRUE;
- }
-
-
- static FT_Bool
- gxv_kern_coverage_classic_apple_validate( FT_UShort coverage,
- FT_UShort* format,
- GXV_Validator gxvalid )
- {
- /* classic Apple-dialect */
-#ifdef GXV_LOAD_TRACE_VARS
- FT_Bool horizontal;
- FT_Bool cross_stream;
-#endif
-
-
- /* check expected flags, but don't check if MS-dialect is impossible */
- if ( !( coverage & 0xFD00 ) && KERN_ALLOWS_MS( gxvalid ) )
- return FALSE;
-
- /* reserved bits = 0 */
- if ( coverage & 0x02FC )
- return FALSE;
-
-#ifdef GXV_LOAD_TRACE_VARS
- horizontal = FT_BOOL( ( coverage >> 15 ) & 1 );
- cross_stream = FT_BOOL( ( coverage >> 13 ) & 1 );
-#endif
-
- *format = (FT_UShort)( coverage & 0x0003 );
-
- GXV_TRACE(( "classic Apple-dialect: "
- "horizontal=%d, cross-stream=%d, format=%d\n",
- horizontal, cross_stream, *format ));
-
- /* format 1 requires GX State Machine, too new for classic */
- if ( *format == 1 )
- return FALSE;
-
- GXV_TRACE(( "kerning values in Apple format subtable are ignored\n" ));
-
- return TRUE;
- }
-
-
- static FT_Bool
- gxv_kern_coverage_classic_microsoft_validate( FT_UShort coverage,
- FT_UShort* format,
- GXV_Validator gxvalid )
- {
- /* classic Microsoft-dialect */
-#ifdef GXV_LOAD_TRACE_VARS
- FT_Bool horizontal;
- FT_Bool minimum;
- FT_Bool cross_stream;
- FT_Bool override;
-#endif
-
- FT_UNUSED( gxvalid );
-
-
- /* reserved bits = 0 */
- if ( coverage & 0xFDF0 )
- return FALSE;
-
-#ifdef GXV_LOAD_TRACE_VARS
- horizontal = FT_BOOL( coverage & 1 );
- minimum = FT_BOOL( ( coverage >> 1 ) & 1 );
- cross_stream = FT_BOOL( ( coverage >> 2 ) & 1 );
- override = FT_BOOL( ( coverage >> 3 ) & 1 );
-#endif
-
- *format = (FT_UShort)( ( coverage >> 8 ) & 0x0003 );
-
- GXV_TRACE(( "classic Microsoft-dialect: "
- "horizontal=%d, minimum=%d, cross-stream=%d, "
- "override=%d, format=%d\n",
- horizontal, minimum, cross_stream, override, *format ));
-
- if ( *format == 2 )
- GXV_TRACE((
- "kerning values in Microsoft format 2 subtable are ignored\n" ));
-
- return TRUE;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MAIN *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static GXV_kern_Dialect
- gxv_kern_coverage_validate( FT_UShort coverage,
- FT_UShort* format,
- GXV_Validator gxvalid )
- {
- GXV_kern_Dialect result = KERN_DIALECT_UNKNOWN;
-
-
- GXV_NAME_ENTER( "validating coverage" );
-
- GXV_TRACE(( "interpret coverage 0x%04x by Apple style\n", coverage ));
-
- if ( KERN_IS_NEW( gxvalid ) )
- {
- if ( gxv_kern_coverage_new_apple_validate( coverage,
- format,
- gxvalid ) )
- {
- result = KERN_DIALECT_APPLE;
- goto Exit;
- }
- }
-
- if ( KERN_IS_CLASSIC( gxvalid ) && KERN_ALLOWS_APPLE( gxvalid ) )
- {
- if ( gxv_kern_coverage_classic_apple_validate( coverage,
- format,
- gxvalid ) )
- {
- result = KERN_DIALECT_APPLE;
- goto Exit;
- }
- }
-
- if ( KERN_IS_CLASSIC( gxvalid ) && KERN_ALLOWS_MS( gxvalid ) )
- {
- if ( gxv_kern_coverage_classic_microsoft_validate( coverage,
- format,
- gxvalid ) )
- {
- result = KERN_DIALECT_MS;
- goto Exit;
- }
- }
-
- GXV_TRACE(( "cannot interpret coverage, broken kern subtable\n" ));
-
- Exit:
- GXV_EXIT;
- return result;
- }
-
-
- static void
- gxv_kern_subtable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-#ifdef GXV_LOAD_TRACE_VARS
- FT_UShort version = 0; /* MS only: subtable version, unused */
-#endif
- FT_ULong length; /* MS: 16bit, Apple: 32bit*/
- FT_UShort coverage;
-#ifdef GXV_LOAD_TRACE_VARS
- FT_UShort tupleIndex = 0; /* Apple only */
-#endif
- FT_UShort u16[2];
- FT_UShort format = 255; /* subtable format */
-
-
- GXV_NAME_ENTER( "kern subtable" );
-
- GXV_LIMIT_CHECK( 2 + 2 + 2 );
- u16[0] = FT_NEXT_USHORT( p ); /* Apple: length_hi MS: version */
- u16[1] = FT_NEXT_USHORT( p ); /* Apple: length_lo MS: length */
- coverage = FT_NEXT_USHORT( p );
-
- switch ( gxv_kern_coverage_validate( coverage, &format, gxvalid ) )
- {
- case KERN_DIALECT_MS:
-#ifdef GXV_LOAD_TRACE_VARS
- version = u16[0];
-#endif
- length = u16[1];
-#ifdef GXV_LOAD_TRACE_VARS
- tupleIndex = 0;
-#endif
- GXV_TRACE(( "Subtable version = %d\n", version ));
- GXV_TRACE(( "Subtable length = %d\n", length ));
- break;
-
- case KERN_DIALECT_APPLE:
-#ifdef GXV_LOAD_TRACE_VARS
- version = 0;
-#endif
- length = ( (FT_ULong)u16[0] << 16 ) + u16[1];
-#ifdef GXV_LOAD_TRACE_VARS
- tupleIndex = 0;
-#endif
- GXV_TRACE(( "Subtable length = %d\n", length ));
-
- if ( KERN_IS_NEW( gxvalid ) )
- {
- GXV_LIMIT_CHECK( 2 );
-#ifdef GXV_LOAD_TRACE_VARS
- tupleIndex = FT_NEXT_USHORT( p );
-#else
- p += 2;
-#endif
- GXV_TRACE(( "Subtable tupleIndex = %d\n", tupleIndex ));
- }
- break;
-
- default:
- length = u16[1];
- GXV_TRACE(( "cannot detect subtable dialect, "
- "just skip %d byte\n", length ));
- goto Exit;
- }
-
- /* formats 1, 2, 3 require the position of the start of this subtable */
- if ( format == 0 )
- gxv_kern_subtable_fmt0_validate( table, table + length, gxvalid );
- else if ( format == 1 )
- gxv_kern_subtable_fmt1_validate( table, table + length, gxvalid );
- else if ( format == 2 )
- gxv_kern_subtable_fmt2_validate( table, table + length, gxvalid );
- else if ( format == 3 )
- gxv_kern_subtable_fmt3_validate( table, table + length, gxvalid );
- else
- FT_INVALID_DATA;
-
- Exit:
- gxvalid->subtable_length = length;
- GXV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** kern TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- gxv_kern_validate_generic( FT_Bytes table,
- FT_Face face,
- FT_Bool classic_only,
- GXV_kern_Dialect dialect_request,
- FT_Validator ftvalid )
- {
- GXV_ValidatorRec gxvalidrec;
- GXV_Validator gxvalid = &gxvalidrec;
-
- GXV_kern_DataRec kernrec;
- GXV_kern_Data kern = &kernrec;
-
- FT_Bytes p = table;
- FT_Bytes limit = 0;
-
- FT_ULong nTables = 0;
- FT_UInt i;
-
-
- gxvalid->root = ftvalid;
- gxvalid->table_data = kern;
- gxvalid->face = face;
-
- FT_TRACE3(( "validating `kern' table\n" ));
- GXV_INIT;
- KERN_DIALECT( gxvalid ) = dialect_request;
-
- GXV_LIMIT_CHECK( 2 );
- GXV_KERN_DATA( version ) = (GXV_kern_Version)FT_NEXT_USHORT( p );
- GXV_TRACE(( "version 0x%04x (higher 16bit)\n",
- GXV_KERN_DATA( version ) ));
-
- if ( 0x0001 < GXV_KERN_DATA( version ) )
- FT_INVALID_FORMAT;
- else if ( KERN_IS_CLASSIC( gxvalid ) )
- {
- GXV_LIMIT_CHECK( 2 );
- nTables = FT_NEXT_USHORT( p );
- }
- else if ( KERN_IS_NEW( gxvalid ) )
- {
- if ( classic_only )
- FT_INVALID_FORMAT;
-
- if ( 0x0000 != FT_NEXT_USHORT( p ) )
- FT_INVALID_FORMAT;
-
- GXV_LIMIT_CHECK( 4 );
- nTables = FT_NEXT_ULONG( p );
- }
-
- for ( i = 0; i < nTables; i++ )
- {
- GXV_TRACE(( "validating subtable %d/%d\n", i, nTables ));
- /* p should be 32bit-aligned? */
- gxv_kern_subtable_validate( p, 0, gxvalid );
- p += gxvalid->subtable_length;
- }
-
- FT_TRACE4(( "\n" ));
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_kern_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator ftvalid )
- {
- gxv_kern_validate_generic( table, face, 0, KERN_DIALECT_ANY, ftvalid );
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_kern_validate_classic( FT_Bytes table,
- FT_Face face,
- FT_Int dialect_flags,
- FT_Validator ftvalid )
- {
- GXV_kern_Dialect dialect_request;
-
-
- dialect_request = (GXV_kern_Dialect)dialect_flags;
- gxv_kern_validate_generic( table, face, 1, dialect_request, ftvalid );
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvlcar.c b/src/gxvalid/gxvlcar.c
deleted file mode 100644
index 775d5229f..000000000
--- a/src/gxvalid/gxvlcar.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvlcar.c */
-/* */
-/* TrueTypeGX/AAT lcar table validation (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvalid.h"
-#include "gxvcommn.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvlcar
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Data and Types *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct GXV_lcar_DataRec_
- {
- FT_UShort format;
-
- } GXV_lcar_DataRec, *GXV_lcar_Data;
-
-
-#define GXV_LCAR_DATA( FIELD ) GXV_TABLE_DATA( lcar, FIELD )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** UTILITY FUNCTIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- gxv_lcar_partial_validate( FT_Short partial,
- FT_UShort glyph,
- GXV_Validator gxvalid )
- {
- GXV_NAME_ENTER( "partial" );
-
- if ( GXV_LCAR_DATA( format ) != 1 )
- goto Exit;
-
- gxv_ctlPoint_validate( glyph, (FT_UShort)partial, gxvalid );
-
- Exit:
- GXV_EXIT;
- }
-
-
- static void
- gxv_lcar_LookupValue_validate( FT_UShort glyph,
- GXV_LookupValueCPtr value_p,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = gxvalid->root->base + value_p->u;
- FT_Bytes limit = gxvalid->root->limit;
- FT_UShort count;
- FT_Short partial;
- FT_UShort i;
-
-
- GXV_NAME_ENTER( "element in lookupTable" );
-
- GXV_LIMIT_CHECK( 2 );
- count = FT_NEXT_USHORT( p );
-
- GXV_LIMIT_CHECK( 2 * count );
- for ( i = 0; i < count; i++ )
- {
- partial = FT_NEXT_SHORT( p );
- gxv_lcar_partial_validate( partial, glyph, gxvalid );
- }
-
- GXV_EXIT;
- }
-
-
- /*
- +------ lcar --------------------+
- | |
- | +===============+ |
- | | lookup header | |
- | +===============+ |
- | | BinSrchHeader | |
- | +===============+ |
- | | lastGlyph[0] | |
- | +---------------+ |
- | | firstGlyph[0] | | head of lcar sfnt table
- | +---------------+ | +
- | | offset[0] | -> | offset [byte]
- | +===============+ | +
- | | lastGlyph[1] | | (glyphID - firstGlyph) * 2 [byte]
- | +---------------+ |
- | | firstGlyph[1] | |
- | +---------------+ |
- | | offset[1] | |
- | +===============+ |
- | |
- | .... |
- | |
- | 16bit value array |
- | +===============+ |
- +------| value | <-------+
- | ....
- |
- |
- |
- |
- |
- +----> lcar values...handled by lcar callback function
- */
-
- static GXV_LookupValueDesc
- gxv_lcar_LookupFmt4_transit( FT_UShort relative_gindex,
- GXV_LookupValueCPtr base_value_p,
- FT_Bytes lookuptbl_limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p;
- FT_Bytes limit;
- FT_UShort offset;
- GXV_LookupValueDesc value;
-
- FT_UNUSED( lookuptbl_limit );
-
- /* XXX: check range? */
- offset = (FT_UShort)( base_value_p->u +
- relative_gindex * sizeof ( FT_UShort ) );
- p = gxvalid->root->base + offset;
- limit = gxvalid->root->limit;
-
- GXV_LIMIT_CHECK ( 2 );
- value.u = FT_NEXT_USHORT( p );
-
- return value;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** lcar TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- gxv_lcar_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator ftvalid )
- {
- FT_Bytes p = table;
- FT_Bytes limit = 0;
- GXV_ValidatorRec gxvalidrec;
- GXV_Validator gxvalid = &gxvalidrec;
-
- GXV_lcar_DataRec lcarrec;
- GXV_lcar_Data lcar = &lcarrec;
-
- FT_Fixed version;
-
-
- gxvalid->root = ftvalid;
- gxvalid->table_data = lcar;
- gxvalid->face = face;
-
- FT_TRACE3(( "validating `lcar' table\n" ));
- GXV_INIT;
-
- GXV_LIMIT_CHECK( 4 + 2 );
- version = FT_NEXT_LONG( p );
- GXV_LCAR_DATA( format ) = FT_NEXT_USHORT( p );
-
- if ( version != 0x00010000UL)
- FT_INVALID_FORMAT;
-
- if ( GXV_LCAR_DATA( format ) > 1 )
- FT_INVALID_FORMAT;
-
- gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- gxvalid->lookupval_func = gxv_lcar_LookupValue_validate;
- gxvalid->lookupfmt4_trans = gxv_lcar_LookupFmt4_transit;
- gxv_LookupTable_validate( p, limit, gxvalid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvmod.c b/src/gxvalid/gxvmod.c
deleted file mode 100644
index 84e9275ba..000000000
--- a/src/gxvalid/gxvmod.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmod.c */
-/* */
-/* FreeType's TrueTypeGX/AAT validation module implementation (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_TRUETYPE_TABLES_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_GX_VALIDATE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_GX_VALIDATE_H
-
-#include "gxvmod.h"
-#include "gxvalid.h"
-#include "gxvcommn.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvmodule
-
-
- static FT_Error
- gxv_load_table( FT_Face face,
- FT_Tag tag,
- FT_Byte* volatile* table,
- FT_ULong* table_len )
- {
- FT_Error error;
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- error = FT_Load_Sfnt_Table( face, tag, 0, NULL, table_len );
- if ( FT_ERR_EQ( error, Table_Missing ) )
- return FT_Err_Ok;
- if ( error )
- goto Exit;
-
- if ( FT_ALLOC( *table, *table_len ) )
- goto Exit;
-
- error = FT_Load_Sfnt_Table( face, tag, 0, *table, table_len );
-
- Exit:
- return error;
- }
-
-
-#define GXV_TABLE_DECL( _sfnt ) \
- FT_Byte* volatile _sfnt = NULL; \
- FT_ULong len_ ## _sfnt = 0
-
-#define GXV_TABLE_LOAD( _sfnt ) \
- if ( ( FT_VALIDATE_ ## _sfnt ## _INDEX < table_count ) && \
- ( gx_flags & FT_VALIDATE_ ## _sfnt ) ) \
- { \
- error = gxv_load_table( face, TTAG_ ## _sfnt, \
- &_sfnt, &len_ ## _sfnt ); \
- if ( error ) \
- goto Exit; \
- }
-
-#define GXV_TABLE_VALIDATE( _sfnt ) \
- if ( _sfnt ) \
- { \
- ft_validator_init( &valid, _sfnt, _sfnt + len_ ## _sfnt, \
- FT_VALIDATE_DEFAULT ); \
- if ( ft_setjmp( valid.jump_buffer ) == 0 ) \
- gxv_ ## _sfnt ## _validate( _sfnt, face, &valid ); \
- error = valid.error; \
- if ( error ) \
- goto Exit; \
- }
-
-#define GXV_TABLE_SET( _sfnt ) \
- if ( FT_VALIDATE_ ## _sfnt ## _INDEX < table_count ) \
- tables[FT_VALIDATE_ ## _sfnt ## _INDEX] = (FT_Bytes)_sfnt
-
-
- static FT_Error
- gxv_validate( FT_Face face,
- FT_UInt gx_flags,
- FT_Bytes tables[FT_VALIDATE_GX_LENGTH],
- FT_UInt table_count )
- {
- FT_Memory volatile memory = FT_FACE_MEMORY( face );
-
- FT_Error error = FT_Err_Ok;
- FT_ValidatorRec volatile valid;
-
- FT_UInt i;
-
-
- GXV_TABLE_DECL( feat );
- GXV_TABLE_DECL( bsln );
- GXV_TABLE_DECL( trak );
- GXV_TABLE_DECL( just );
- GXV_TABLE_DECL( mort );
- GXV_TABLE_DECL( morx );
- GXV_TABLE_DECL( kern );
- GXV_TABLE_DECL( opbd );
- GXV_TABLE_DECL( prop );
- GXV_TABLE_DECL( lcar );
-
- for ( i = 0; i < table_count; i++ )
- tables[i] = 0;
-
- /* load tables */
- GXV_TABLE_LOAD( feat );
- GXV_TABLE_LOAD( bsln );
- GXV_TABLE_LOAD( trak );
- GXV_TABLE_LOAD( just );
- GXV_TABLE_LOAD( mort );
- GXV_TABLE_LOAD( morx );
- GXV_TABLE_LOAD( kern );
- GXV_TABLE_LOAD( opbd );
- GXV_TABLE_LOAD( prop );
- GXV_TABLE_LOAD( lcar );
-
- /* validate tables */
- GXV_TABLE_VALIDATE( feat );
- GXV_TABLE_VALIDATE( bsln );
- GXV_TABLE_VALIDATE( trak );
- GXV_TABLE_VALIDATE( just );
- GXV_TABLE_VALIDATE( mort );
- GXV_TABLE_VALIDATE( morx );
- GXV_TABLE_VALIDATE( kern );
- GXV_TABLE_VALIDATE( opbd );
- GXV_TABLE_VALIDATE( prop );
- GXV_TABLE_VALIDATE( lcar );
-
- /* Set results */
- GXV_TABLE_SET( feat );
- GXV_TABLE_SET( mort );
- GXV_TABLE_SET( morx );
- GXV_TABLE_SET( bsln );
- GXV_TABLE_SET( just );
- GXV_TABLE_SET( kern );
- GXV_TABLE_SET( opbd );
- GXV_TABLE_SET( trak );
- GXV_TABLE_SET( prop );
- GXV_TABLE_SET( lcar );
-
- Exit:
- if ( error )
- {
- FT_FREE( feat );
- FT_FREE( bsln );
- FT_FREE( trak );
- FT_FREE( just );
- FT_FREE( mort );
- FT_FREE( morx );
- FT_FREE( kern );
- FT_FREE( opbd );
- FT_FREE( prop );
- FT_FREE( lcar );
- }
-
- return error;
- }
-
-
- static FT_Error
- classic_kern_validate( FT_Face face,
- FT_UInt ckern_flags,
- FT_Bytes* ckern_table )
- {
- FT_Memory volatile memory = FT_FACE_MEMORY( face );
-
- FT_Byte* volatile ckern = NULL;
- FT_ULong len_ckern = 0;
-
- /* without volatile on `error' GCC 4.1.1. emits: */
- /* warning: variable 'error' might be clobbered by 'longjmp' or 'vfork' */
- /* this warning seems spurious but --- */
- FT_Error volatile error;
- FT_ValidatorRec volatile valid;
-
-
- *ckern_table = NULL;
-
- error = gxv_load_table( face, TTAG_kern, &ckern, &len_ckern );
- if ( error )
- goto Exit;
-
- if ( ckern )
- {
- ft_validator_init( &valid, ckern, ckern + len_ckern,
- FT_VALIDATE_DEFAULT );
- if ( ft_setjmp( valid.jump_buffer ) == 0 )
- gxv_kern_validate_classic( ckern, face,
- ckern_flags & FT_VALIDATE_CKERN, &valid );
- error = valid.error;
- if ( error )
- goto Exit;
- }
-
- *ckern_table = ckern;
-
- Exit:
- if ( error )
- FT_FREE( ckern );
-
- return error;
- }
-
-
- static
- const FT_Service_GXvalidateRec gxvalid_interface =
- {
- gxv_validate /* validate */
- };
-
-
- static
- const FT_Service_CKERNvalidateRec ckernvalid_interface =
- {
- classic_kern_validate /* validate */
- };
-
-
- static
- const FT_ServiceDescRec gxvalid_services[] =
- {
- { FT_SERVICE_ID_GX_VALIDATE, &gxvalid_interface },
- { FT_SERVICE_ID_CLASSICKERN_VALIDATE, &ckernvalid_interface },
- { NULL, NULL }
- };
-
-
- static FT_Pointer
- gxvalid_get_service( FT_Module module,
- const char* service_id )
- {
- FT_UNUSED( module );
-
- return ft_service_list_lookup( gxvalid_services, service_id );
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Module_Class gxv_module_class =
- {
- 0,
- sizeof ( FT_ModuleRec ),
- "gxvalid",
- 0x10000L,
- 0x20000L,
-
- NULL, /* module-specific interface */
-
- (FT_Module_Constructor)NULL, /* module_init */
- (FT_Module_Destructor) NULL, /* module_done */
- (FT_Module_Requester) gxvalid_get_service /* get_interface */
- };
-
-
-/* END */
diff --git a/src/gxvalid/gxvmod.h b/src/gxvalid/gxvmod.h
deleted file mode 100644
index df25e60cb..000000000
--- a/src/gxvalid/gxvmod.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmod.h */
-/* */
-/* FreeType's TrueTypeGX/AAT validation module implementation */
-/* (specification). */
-/* */
-/* Copyright 2004-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#ifndef GXVMOD_H_
-#define GXVMOD_H_
-
-#include <ft2build.h>
-#include FT_MODULE_H
-
-
-FT_BEGIN_HEADER
-
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
-
- FT_EXPORT_VAR( const FT_Module_Class ) gxv_module_class;
-
-
-FT_END_HEADER
-
-#endif /* GXVMOD_H_ */
-
-
-/* END */
diff --git a/src/gxvalid/gxvmort.c b/src/gxvalid/gxvmort.c
deleted file mode 100644
index 184a6317c..000000000
--- a/src/gxvalid/gxvmort.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmort.c */
-/* */
-/* TrueTypeGX/AAT mort table validation (body). */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvmort.h"
-#include "gxvfeat.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvmort
-
-
- static void
- gxv_mort_feature_validate( GXV_mort_feature f,
- GXV_Validator gxvalid )
- {
- if ( f->featureType >= gxv_feat_registry_length )
- {
- GXV_TRACE(( "featureType %d is out of registered range, "
- "setting %d is unchecked\n",
- f->featureType, f->featureSetting ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
- }
- else if ( !gxv_feat_registry[f->featureType].existence )
- {
- GXV_TRACE(( "featureType %d is within registered area "
- "but undefined, setting %d is unchecked\n",
- f->featureType, f->featureSetting ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
- }
- else
- {
- FT_Byte nSettings_max;
-
-
- /* nSettings in gxvfeat.c is halved for exclusive on/off settings */
- nSettings_max = gxv_feat_registry[f->featureType].nSettings;
- if ( gxv_feat_registry[f->featureType].exclusive )
- nSettings_max = (FT_Byte)( 2 * nSettings_max );
-
- GXV_TRACE(( "featureType %d is registered", f->featureType ));
- GXV_TRACE(( "setting %d", f->featureSetting ));
-
- if ( f->featureSetting > nSettings_max )
- {
- GXV_TRACE(( "out of defined range %d", nSettings_max ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
- }
- GXV_TRACE(( "\n" ));
- }
-
- /* TODO: enableFlags must be unique value in specified chain? */
- }
-
-
- /*
- * nFeatureFlags is typed to FT_ULong to accept that in
- * mort (typed FT_UShort) and morx (typed FT_ULong).
- */
- FT_LOCAL_DEF( void )
- gxv_mort_featurearray_validate( FT_Bytes table,
- FT_Bytes limit,
- FT_ULong nFeatureFlags,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_ULong i;
-
- GXV_mort_featureRec f = GXV_MORT_FEATURE_OFF;
-
-
- GXV_NAME_ENTER( "mort feature list" );
- for ( i = 0; i < nFeatureFlags; i++ )
- {
- GXV_LIMIT_CHECK( 2 + 2 + 4 + 4 );
- f.featureType = FT_NEXT_USHORT( p );
- f.featureSetting = FT_NEXT_USHORT( p );
- f.enableFlags = FT_NEXT_ULONG( p );
- f.disableFlags = FT_NEXT_ULONG( p );
-
- gxv_mort_feature_validate( &f, gxvalid );
- }
-
- if ( !IS_GXV_MORT_FEATURE_OFF( f ) )
- FT_INVALID_DATA;
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- GXV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_mort_coverage_validate( FT_UShort coverage,
- GXV_Validator gxvalid )
- {
- FT_UNUSED( gxvalid );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( coverage & 0x8000U )
- GXV_TRACE(( " this subtable is for vertical text only\n" ));
- else
- GXV_TRACE(( " this subtable is for horizontal text only\n" ));
-
- if ( coverage & 0x4000 )
- GXV_TRACE(( " this subtable is applied to glyph array "
- "in descending order\n" ));
- else
- GXV_TRACE(( " this subtable is applied to glyph array "
- "in ascending order\n" ));
-
- if ( coverage & 0x2000 )
- GXV_TRACE(( " this subtable is forcibly applied to "
- "vertical/horizontal text\n" ));
-
- if ( coverage & 0x1FF8 )
- GXV_TRACE(( " coverage has non-zero bits in reserved area\n" ));
-#endif
- }
-
-
- static void
- gxv_mort_subtables_validate( FT_Bytes table,
- FT_Bytes limit,
- FT_UShort nSubtables,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
- GXV_Validate_Func fmt_funcs_table[] =
- {
- gxv_mort_subtable_type0_validate, /* 0 */
- gxv_mort_subtable_type1_validate, /* 1 */
- gxv_mort_subtable_type2_validate, /* 2 */
- NULL, /* 3 */
- gxv_mort_subtable_type4_validate, /* 4 */
- gxv_mort_subtable_type5_validate, /* 5 */
-
- };
-
- FT_UShort i;
-
-
- GXV_NAME_ENTER( "subtables in a chain" );
-
- for ( i = 0; i < nSubtables; i++ )
- {
- GXV_Validate_Func func;
-
- FT_UShort length;
- FT_UShort coverage;
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_ULong subFeatureFlags;
-#endif
- FT_UInt type;
- FT_UInt rest;
-
-
- GXV_LIMIT_CHECK( 2 + 2 + 4 );
- length = FT_NEXT_USHORT( p );
- coverage = FT_NEXT_USHORT( p );
-#ifdef GXV_LOAD_UNUSED_VARS
- subFeatureFlags = FT_NEXT_ULONG( p );
-#else
- p += 4;
-#endif
-
- GXV_TRACE(( "validating chain subtable %d/%d (%d bytes)\n",
- i + 1, nSubtables, length ));
- type = coverage & 0x0007;
- rest = length - ( 2 + 2 + 4 );
-
- GXV_LIMIT_CHECK( rest );
- gxv_mort_coverage_validate( coverage, gxvalid );
-
- if ( type > 5 )
- FT_INVALID_FORMAT;
-
- func = fmt_funcs_table[type];
- if ( !func )
- GXV_TRACE(( "morx type %d is reserved\n", type ));
-
- func( p, p + rest, gxvalid );
-
- p += rest;
- /* TODO: validate subFeatureFlags */
- }
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_mort_chain_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_ULong defaultFlags;
-#endif
- FT_ULong chainLength;
- FT_UShort nFeatureFlags;
- FT_UShort nSubtables;
-
-
- GXV_NAME_ENTER( "mort chain header" );
-
- GXV_LIMIT_CHECK( 4 + 4 + 2 + 2 );
-#ifdef GXV_LOAD_UNUSED_VARS
- defaultFlags = FT_NEXT_ULONG( p );
-#else
- p += 4;
-#endif
- chainLength = FT_NEXT_ULONG( p );
- nFeatureFlags = FT_NEXT_USHORT( p );
- nSubtables = FT_NEXT_USHORT( p );
-
- gxv_mort_featurearray_validate( p, table + chainLength,
- nFeatureFlags, gxvalid );
- p += gxvalid->subtable_length;
- gxv_mort_subtables_validate( p, table + chainLength, nSubtables, gxvalid );
- gxvalid->subtable_length = chainLength;
-
- /* TODO: validate defaultFlags */
- GXV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_mort_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator ftvalid )
- {
- GXV_ValidatorRec gxvalidrec;
- GXV_Validator gxvalid = &gxvalidrec;
- FT_Bytes p = table;
- FT_Bytes limit = 0;
- FT_ULong version;
- FT_ULong nChains;
- FT_ULong i;
-
-
- gxvalid->root = ftvalid;
- gxvalid->face = face;
- limit = gxvalid->root->limit;
-
- FT_TRACE3(( "validating `mort' table\n" ));
- GXV_INIT;
-
- GXV_LIMIT_CHECK( 4 + 4 );
- version = FT_NEXT_ULONG( p );
- nChains = FT_NEXT_ULONG( p );
-
- if (version != 0x00010000UL)
- FT_INVALID_FORMAT;
-
- for ( i = 0; i < nChains; i++ )
- {
- GXV_TRACE(( "validating chain %d/%d\n", i + 1, nChains ));
- GXV_32BIT_ALIGNMENT_VALIDATE( p - table );
- gxv_mort_chain_validate( p, limit, gxvalid );
- p += gxvalid->subtable_length;
- }
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvmort.h b/src/gxvalid/gxvmort.h
deleted file mode 100644
index d0543adcc..000000000
--- a/src/gxvalid/gxvmort.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmort.h */
-/* */
-/* TrueTypeGX/AAT common definition for mort table (specification). */
-/* */
-/* Copyright 2004-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#ifndef GXVMORT_H_
-#define GXVMORT_H_
-
-#include "gxvalid.h"
-#include "gxvcommn.h"
-
-#include FT_SFNT_NAMES_H
-
-
- typedef struct GXV_mort_featureRec_
- {
- FT_UShort featureType;
- FT_UShort featureSetting;
- FT_ULong enableFlags;
- FT_ULong disableFlags;
-
- } GXV_mort_featureRec, *GXV_mort_feature;
-
-#define GXV_MORT_FEATURE_OFF {0, 1, 0x00000000UL, 0x00000000UL}
-
-#define IS_GXV_MORT_FEATURE_OFF( f ) \
- ( (f).featureType == 0 || \
- (f).featureSetting == 1 || \
- (f).enableFlags == 0x00000000UL || \
- (f).disableFlags == 0x00000000UL )
-
-
- FT_LOCAL( void )
- gxv_mort_featurearray_validate( FT_Bytes table,
- FT_Bytes limit,
- FT_ULong nFeatureFlags,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_mort_coverage_validate( FT_UShort coverage,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_mort_subtable_type0_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_mort_subtable_type1_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_mort_subtable_type2_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_mort_subtable_type4_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_mort_subtable_type5_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid );
-
-
-#endif /* GXVMORT_H_ */
-
-
-/* END */
diff --git a/src/gxvalid/gxvmort0.c b/src/gxvalid/gxvmort0.c
deleted file mode 100644
index a75fad776..000000000
--- a/src/gxvalid/gxvmort0.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmort0.c */
-/* */
-/* TrueTypeGX/AAT mort table validation */
-/* body for type0 (Indic Script Rearrangement) subtable. */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvmort.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvmort
-
-
- static const char* GXV_Mort_IndicScript_Msg[] =
- {
- "no change",
- "Ax => xA",
- "xD => Dx",
- "AxD => DxA",
- "ABx => xAB",
- "ABx => xBA",
- "xCD => CDx",
- "xCD => DCx",
- "AxCD => CDxA",
- "AxCD => DCxA",
- "ABxD => DxAB",
- "ABxD => DxBA",
- "ABxCD => CDxAB",
- "ABxCD => CDxBA",
- "ABxCD => DCxAB",
- "ABxCD => DCxBA",
-
- };
-
-
- static void
- gxv_mort_subtable_type0_entry_validate(
- FT_Byte state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetCPtr glyphOffset_p,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_UShort markFirst;
- FT_UShort dontAdvance;
- FT_UShort markLast;
- FT_UShort reserved;
- FT_UShort verb = 0;
-
- FT_UNUSED( state );
- FT_UNUSED( table );
- FT_UNUSED( limit );
-
- FT_UNUSED( GXV_Mort_IndicScript_Msg[verb] ); /* for the non-debugging */
- FT_UNUSED( glyphOffset_p ); /* case */
-
-
- markFirst = (FT_UShort)( ( flags >> 15 ) & 1 );
- dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
- markLast = (FT_UShort)( ( flags >> 13 ) & 1 );
-
- reserved = (FT_UShort)( flags & 0x1FF0 );
- verb = (FT_UShort)( flags & 0x000F );
-
- GXV_TRACE(( " IndicScript MorphRule for glyphOffset 0x%04x",
- glyphOffset_p->u ));
- GXV_TRACE(( " markFirst=%01d", markFirst ));
- GXV_TRACE(( " dontAdvance=%01d", dontAdvance ));
- GXV_TRACE(( " markLast=%01d", markLast ));
- GXV_TRACE(( " %02d", verb ));
- GXV_TRACE(( " %s\n", GXV_Mort_IndicScript_Msg[verb] ));
-
- if ( markFirst > 0 && markLast > 0 )
- {
- GXV_TRACE(( " [odd] a glyph is marked as the first and last"
- " in Indic rearrangement\n" ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
- }
-
- if ( markFirst > 0 && dontAdvance > 0 )
- {
- GXV_TRACE(( " [odd] the first glyph is marked as dontAdvance"
- " in Indic rearrangement\n" ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
- }
-
- if ( 0 < reserved )
- {
- GXV_TRACE(( " non-zero bits found in reserved range\n" ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
- }
- else
- GXV_TRACE(( "\n" ));
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_mort_subtable_type0_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
-
- GXV_NAME_ENTER(
- "mort chain subtable type0 (Indic-Script Rearrangement)" );
-
- GXV_LIMIT_CHECK( GXV_STATETABLE_HEADER_SIZE );
-
- gxvalid->statetable.optdata = NULL;
- gxvalid->statetable.optdata_load_func = NULL;
- gxvalid->statetable.subtable_setup_func = NULL;
- gxvalid->statetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE;
- gxvalid->statetable.entry_validate_func =
- gxv_mort_subtable_type0_entry_validate;
-
- gxv_StateTable_validate( p, limit, gxvalid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvmort1.c b/src/gxvalid/gxvmort1.c
deleted file mode 100644
index 361ef2262..000000000
--- a/src/gxvalid/gxvmort1.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmort1.c */
-/* */
-/* TrueTypeGX/AAT mort table validation */
-/* body for type1 (Contextual Substitution) subtable. */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvmort.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvmort
-
-
- typedef struct GXV_mort_subtable_type1_StateOptRec_
- {
- FT_UShort substitutionTable;
- FT_UShort substitutionTable_length;
-
- } GXV_mort_subtable_type1_StateOptRec,
- *GXV_mort_subtable_type1_StateOptRecData;
-
-#define GXV_MORT_SUBTABLE_TYPE1_HEADER_SIZE \
- ( GXV_STATETABLE_HEADER_SIZE + 2 )
-
-
- static void
- gxv_mort_subtable_type1_substitutionTable_load( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
- GXV_mort_subtable_type1_StateOptRecData optdata =
- (GXV_mort_subtable_type1_StateOptRecData)gxvalid->statetable.optdata;
-
-
- GXV_LIMIT_CHECK( 2 );
- optdata->substitutionTable = FT_NEXT_USHORT( p );
- }
-
-
- static void
- gxv_mort_subtable_type1_subtable_setup( FT_UShort table_size,
- FT_UShort classTable,
- FT_UShort stateArray,
- FT_UShort entryTable,
- FT_UShort* classTable_length_p,
- FT_UShort* stateArray_length_p,
- FT_UShort* entryTable_length_p,
- GXV_Validator gxvalid )
- {
- FT_UShort o[4];
- FT_UShort *l[4];
- FT_UShort buff[5];
-
- GXV_mort_subtable_type1_StateOptRecData optdata =
- (GXV_mort_subtable_type1_StateOptRecData)gxvalid->statetable.optdata;
-
-
- o[0] = classTable;
- o[1] = stateArray;
- o[2] = entryTable;
- o[3] = optdata->substitutionTable;
- l[0] = classTable_length_p;
- l[1] = stateArray_length_p;
- l[2] = entryTable_length_p;
- l[3] = &( optdata->substitutionTable_length );
-
- gxv_set_length_by_ushort_offset( o, l, buff, 4, table_size, gxvalid );
- }
-
-
- static void
- gxv_mort_subtable_type1_offset_to_subst_validate(
- FT_Short wordOffset,
- const FT_String* tag,
- FT_Byte state,
- GXV_Validator gxvalid )
- {
- FT_UShort substTable;
- FT_UShort substTable_limit;
-
- FT_UNUSED( tag );
- FT_UNUSED( state );
-
-
- substTable =
- ((GXV_mort_subtable_type1_StateOptRec *)
- (gxvalid->statetable.optdata))->substitutionTable;
- substTable_limit =
- (FT_UShort)( substTable +
- ((GXV_mort_subtable_type1_StateOptRec *)
- (gxvalid->statetable.optdata))->substitutionTable_length );
-
- gxvalid->min_gid = (FT_UShort)( ( substTable - wordOffset * 2 ) / 2 );
- gxvalid->max_gid = (FT_UShort)( ( substTable_limit - wordOffset * 2 ) / 2 );
- gxvalid->max_gid = (FT_UShort)( FT_MAX( gxvalid->max_gid,
- gxvalid->face->num_glyphs ) );
-
- /* XXX: check range? */
-
- /* TODO: min_gid & max_gid comparison with ClassTable contents */
- }
-
-
- static void
- gxv_mort_subtable_type1_entry_validate(
- FT_Byte state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetCPtr glyphOffset_p,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_UShort setMark;
- FT_UShort dontAdvance;
-#endif
- FT_UShort reserved;
- FT_Short markOffset;
- FT_Short currentOffset;
-
- FT_UNUSED( table );
- FT_UNUSED( limit );
-
-
-#ifdef GXV_LOAD_UNUSED_VARS
- setMark = (FT_UShort)( flags >> 15 );
- dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
-#endif
- reserved = (FT_UShort)( flags & 0x3FFF );
-
- markOffset = (FT_Short)( glyphOffset_p->ul >> 16 );
- currentOffset = (FT_Short)( glyphOffset_p->ul );
-
- if ( 0 < reserved )
- {
- GXV_TRACE(( " non-zero bits found in reserved range\n" ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
- }
-
- gxv_mort_subtable_type1_offset_to_subst_validate( markOffset,
- "markOffset",
- state,
- gxvalid );
-
- gxv_mort_subtable_type1_offset_to_subst_validate( currentOffset,
- "currentOffset",
- state,
- gxvalid );
- }
-
-
- static void
- gxv_mort_subtable_type1_substTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UShort num_gids = (FT_UShort)(
- ((GXV_mort_subtable_type1_StateOptRec *)
- (gxvalid->statetable.optdata))->substitutionTable_length / 2 );
- FT_UShort i;
-
-
- GXV_NAME_ENTER( "validating contents of substitutionTable" );
- for ( i = 0; i < num_gids; i++ )
- {
- FT_UShort dst_gid;
-
-
- GXV_LIMIT_CHECK( 2 );
- dst_gid = FT_NEXT_USHORT( p );
-
- if ( dst_gid >= 0xFFFFU )
- continue;
-
- if ( dst_gid < gxvalid->min_gid || gxvalid->max_gid < dst_gid )
- {
- GXV_TRACE(( "substTable include a strange gid[%d]=%d >"
- " out of define range (%d..%d)\n",
- i, dst_gid, gxvalid->min_gid, gxvalid->max_gid ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
- }
- }
-
- GXV_EXIT;
- }
-
-
- /*
- * subtable for Contextual glyph substitution is a modified StateTable.
- * In addition to classTable, stateArray, and entryTable, the field
- * `substitutionTable' is added.
- */
- FT_LOCAL_DEF( void )
- gxv_mort_subtable_type1_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
- GXV_mort_subtable_type1_StateOptRec st_rec;
-
-
- GXV_NAME_ENTER( "mort chain subtable type1 (Contextual Glyph Subst)" );
-
- GXV_LIMIT_CHECK( GXV_MORT_SUBTABLE_TYPE1_HEADER_SIZE );
-
- gxvalid->statetable.optdata =
- &st_rec;
- gxvalid->statetable.optdata_load_func =
- gxv_mort_subtable_type1_substitutionTable_load;
- gxvalid->statetable.subtable_setup_func =
- gxv_mort_subtable_type1_subtable_setup;
- gxvalid->statetable.entry_glyphoffset_fmt =
- GXV_GLYPHOFFSET_ULONG;
- gxvalid->statetable.entry_validate_func =
-
- gxv_mort_subtable_type1_entry_validate;
- gxv_StateTable_validate( p, limit, gxvalid );
-
- gxv_mort_subtable_type1_substTable_validate(
- table + st_rec.substitutionTable,
- table + st_rec.substitutionTable + st_rec.substitutionTable_length,
- gxvalid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvmort2.c b/src/gxvalid/gxvmort2.c
deleted file mode 100644
index c17e51e32..000000000
--- a/src/gxvalid/gxvmort2.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmort2.c */
-/* */
-/* TrueTypeGX/AAT mort table validation */
-/* body for type2 (Ligature Substitution) subtable. */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvmort.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvmort
-
-
- typedef struct GXV_mort_subtable_type2_StateOptRec_
- {
- FT_UShort ligActionTable;
- FT_UShort componentTable;
- FT_UShort ligatureTable;
- FT_UShort ligActionTable_length;
- FT_UShort componentTable_length;
- FT_UShort ligatureTable_length;
-
- } GXV_mort_subtable_type2_StateOptRec,
- *GXV_mort_subtable_type2_StateOptRecData;
-
-#define GXV_MORT_SUBTABLE_TYPE2_HEADER_SIZE \
- ( GXV_STATETABLE_HEADER_SIZE + 2 + 2 + 2 )
-
-
- static void
- gxv_mort_subtable_type2_opttable_load( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- GXV_mort_subtable_type2_StateOptRecData optdata =
- (GXV_mort_subtable_type2_StateOptRecData)gxvalid->statetable.optdata;
-
-
- GXV_LIMIT_CHECK( 2 + 2 + 2 );
- optdata->ligActionTable = FT_NEXT_USHORT( p );
- optdata->componentTable = FT_NEXT_USHORT( p );
- optdata->ligatureTable = FT_NEXT_USHORT( p );
-
- GXV_TRACE(( "offset to ligActionTable=0x%04x\n",
- optdata->ligActionTable ));
- GXV_TRACE(( "offset to componentTable=0x%04x\n",
- optdata->componentTable ));
- GXV_TRACE(( "offset to ligatureTable=0x%04x\n",
- optdata->ligatureTable ));
- }
-
-
- static void
- gxv_mort_subtable_type2_subtable_setup( FT_UShort table_size,
- FT_UShort classTable,
- FT_UShort stateArray,
- FT_UShort entryTable,
- FT_UShort *classTable_length_p,
- FT_UShort *stateArray_length_p,
- FT_UShort *entryTable_length_p,
- GXV_Validator gxvalid )
- {
- FT_UShort o[6];
- FT_UShort *l[6];
- FT_UShort buff[7];
-
- GXV_mort_subtable_type2_StateOptRecData optdata =
- (GXV_mort_subtable_type2_StateOptRecData)gxvalid->statetable.optdata;
-
-
- GXV_NAME_ENTER( "subtable boundaries setup" );
-
- o[0] = classTable;
- o[1] = stateArray;
- o[2] = entryTable;
- o[3] = optdata->ligActionTable;
- o[4] = optdata->componentTable;
- o[5] = optdata->ligatureTable;
- l[0] = classTable_length_p;
- l[1] = stateArray_length_p;
- l[2] = entryTable_length_p;
- l[3] = &(optdata->ligActionTable_length);
- l[4] = &(optdata->componentTable_length);
- l[5] = &(optdata->ligatureTable_length);
-
- gxv_set_length_by_ushort_offset( o, l, buff, 6, table_size, gxvalid );
-
- GXV_TRACE(( "classTable: offset=0x%04x length=0x%04x\n",
- classTable, *classTable_length_p ));
- GXV_TRACE(( "stateArray: offset=0x%04x length=0x%04x\n",
- stateArray, *stateArray_length_p ));
- GXV_TRACE(( "entryTable: offset=0x%04x length=0x%04x\n",
- entryTable, *entryTable_length_p ));
- GXV_TRACE(( "ligActionTable: offset=0x%04x length=0x%04x\n",
- optdata->ligActionTable,
- optdata->ligActionTable_length ));
- GXV_TRACE(( "componentTable: offset=0x%04x length=0x%04x\n",
- optdata->componentTable,
- optdata->componentTable_length ));
- GXV_TRACE(( "ligatureTable: offset=0x%04x length=0x%04x\n",
- optdata->ligatureTable,
- optdata->ligatureTable_length ));
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_mort_subtable_type2_ligActionOffset_validate(
- FT_Bytes table,
- FT_UShort ligActionOffset,
- GXV_Validator gxvalid )
- {
- /* access ligActionTable */
- GXV_mort_subtable_type2_StateOptRecData optdata =
- (GXV_mort_subtable_type2_StateOptRecData)gxvalid->statetable.optdata;
-
- FT_Bytes lat_base = table + optdata->ligActionTable;
- FT_Bytes p = table + ligActionOffset;
- FT_Bytes lat_limit = lat_base + optdata->ligActionTable;
-
-
- GXV_32BIT_ALIGNMENT_VALIDATE( ligActionOffset );
- if ( p < lat_base )
- {
- GXV_TRACE(( "too short offset 0x%04x: p < lat_base (%d byte rewind)\n",
- ligActionOffset, lat_base - p ));
-
- /* FontValidator, ftxvalidator, ftxdumperfuser warn but continue */
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
- }
- else if ( lat_limit < p )
- {
- GXV_TRACE(( "too large offset 0x%04x: lat_limit < p (%d byte overrun)\n",
- ligActionOffset, p - lat_limit ));
-
- /* FontValidator, ftxvalidator, ftxdumperfuser warn but continue */
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
- }
- else
- {
- /* validate entry in ligActionTable */
- FT_ULong lig_action;
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_UShort last;
- FT_UShort store;
-#endif
- FT_ULong offset;
-
-
- lig_action = FT_NEXT_ULONG( p );
-#ifdef GXV_LOAD_UNUSED_VARS
- last = (FT_UShort)( ( lig_action >> 31 ) & 1 );
- store = (FT_UShort)( ( lig_action >> 30 ) & 1 );
-#endif
-
- /* Apple spec defines this offset as a word offset */
- offset = lig_action & 0x3FFFFFFFUL;
- if ( offset * 2 < optdata->ligatureTable )
- {
- GXV_TRACE(( "too short offset 0x%08x:"
- " 2 x offset < ligatureTable (%d byte rewind)\n",
- offset, optdata->ligatureTable - offset * 2 ));
-
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
- } else if ( offset * 2 >
- optdata->ligatureTable + optdata->ligatureTable_length )
- {
- GXV_TRACE(( "too long offset 0x%08x:"
- " 2 x offset > ligatureTable + ligatureTable_length"
- " (%d byte overrun)\n",
- offset,
- optdata->ligatureTable + optdata->ligatureTable_length
- - offset * 2 ));
-
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
- }
- }
- }
-
-
- static void
- gxv_mort_subtable_type2_entry_validate(
- FT_Byte state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetCPtr glyphOffset_p,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_UShort setComponent;
- FT_UShort dontAdvance;
-#endif
- FT_UShort offset;
-
- FT_UNUSED( state );
- FT_UNUSED( glyphOffset_p );
- FT_UNUSED( limit );
-
-
-#ifdef GXV_LOAD_UNUSED_VARS
- setComponent = (FT_UShort)( ( flags >> 15 ) & 1 );
- dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
-#endif
-
- offset = (FT_UShort)( flags & 0x3FFFU );
-
- if ( 0 < offset )
- gxv_mort_subtable_type2_ligActionOffset_validate( table, offset,
- gxvalid );
- }
-
-
- static void
- gxv_mort_subtable_type2_ligatureTable_validate( FT_Bytes table,
- GXV_Validator gxvalid )
- {
- GXV_mort_subtable_type2_StateOptRecData optdata =
- (GXV_mort_subtable_type2_StateOptRecData)gxvalid->statetable.optdata;
-
- FT_Bytes p = table + optdata->ligatureTable;
- FT_Bytes limit = table + optdata->ligatureTable
- + optdata->ligatureTable_length;
-
-
- GXV_NAME_ENTER( "mort chain subtable type2 - substitutionTable" );
- if ( 0 != optdata->ligatureTable )
- {
- /* Apple does not give specification of ligatureTable format */
- while ( p < limit )
- {
- FT_UShort lig_gid;
-
-
- GXV_LIMIT_CHECK( 2 );
- lig_gid = FT_NEXT_USHORT( p );
-
- if ( gxvalid->face->num_glyphs < lig_gid )
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
- }
- }
- GXV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_mort_subtable_type2_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
- GXV_mort_subtable_type2_StateOptRec lig_rec;
-
-
- GXV_NAME_ENTER( "mort chain subtable type2 (Ligature Substitution)" );
-
- GXV_LIMIT_CHECK( GXV_MORT_SUBTABLE_TYPE2_HEADER_SIZE );
-
- gxvalid->statetable.optdata =
- &lig_rec;
- gxvalid->statetable.optdata_load_func =
- gxv_mort_subtable_type2_opttable_load;
- gxvalid->statetable.subtable_setup_func =
- gxv_mort_subtable_type2_subtable_setup;
- gxvalid->statetable.entry_glyphoffset_fmt =
- GXV_GLYPHOFFSET_NONE;
- gxvalid->statetable.entry_validate_func =
- gxv_mort_subtable_type2_entry_validate;
-
- gxv_StateTable_validate( p, limit, gxvalid );
-
- p += gxvalid->subtable_length;
- gxv_mort_subtable_type2_ligatureTable_validate( table, gxvalid );
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvmort4.c b/src/gxvalid/gxvmort4.c
deleted file mode 100644
index 041bab369..000000000
--- a/src/gxvalid/gxvmort4.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmort4.c */
-/* */
-/* TrueTypeGX/AAT mort table validation */
-/* body for type4 (Non-Contextual Glyph Substitution) subtable. */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvmort.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvmort
-
-
- static void
- gxv_mort_subtable_type4_lookupval_validate( FT_UShort glyph,
- GXV_LookupValueCPtr value_p,
- GXV_Validator gxvalid )
- {
- FT_UNUSED( glyph );
-
- gxv_glyphid_validate( value_p->u, gxvalid );
- }
-
- /*
- +===============+ --------+
- | lookup header | |
- +===============+ |
- | BinSrchHeader | |
- +===============+ |
- | lastGlyph[0] | |
- +---------------+ |
- | firstGlyph[0] | | head of lookup table
- +---------------+ | +
- | offset[0] | -> | offset [byte]
- +===============+ | +
- | lastGlyph[1] | | (glyphID - firstGlyph) * 2 [byte]
- +---------------+ |
- | firstGlyph[1] | |
- +---------------+ |
- | offset[1] | |
- +===============+ |
- |
- .... |
- |
- 16bit value array |
- +===============+ |
- | value | <-------+
- ....
- */
-
- static GXV_LookupValueDesc
- gxv_mort_subtable_type4_lookupfmt4_transit(
- FT_UShort relative_gindex,
- GXV_LookupValueCPtr base_value_p,
- FT_Bytes lookuptbl_limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p;
- FT_Bytes limit;
- FT_UShort offset;
- GXV_LookupValueDesc value;
-
- /* XXX: check range? */
- offset = (FT_UShort)( base_value_p->u +
- relative_gindex * sizeof ( FT_UShort ) );
-
- p = gxvalid->lookuptbl_head + offset;
- limit = lookuptbl_limit;
-
- GXV_LIMIT_CHECK( 2 );
- value.u = FT_NEXT_USHORT( p );
-
- return value;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_mort_subtable_type4_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
-
- GXV_NAME_ENTER( "mort chain subtable type4 "
- "(Non-Contextual Glyph Substitution)" );
-
- gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- gxvalid->lookupval_func = gxv_mort_subtable_type4_lookupval_validate;
- gxvalid->lookupfmt4_trans = gxv_mort_subtable_type4_lookupfmt4_transit;
-
- gxv_LookupTable_validate( p, limit, gxvalid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvmort5.c b/src/gxvalid/gxvmort5.c
deleted file mode 100644
index 4751eceaa..000000000
--- a/src/gxvalid/gxvmort5.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmort5.c */
-/* */
-/* TrueTypeGX/AAT mort table validation */
-/* body for type5 (Contextual Glyph Insertion) subtable. */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvmort.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvmort
-
-
- /*
- * mort subtable type5 (Contextual Glyph Insertion)
- * has the format of StateTable with insertion-glyph-list,
- * but without name. The offset is given by glyphOffset in
- * entryTable. There is no table location declaration
- * like xxxTable.
- */
-
- typedef struct GXV_mort_subtable_type5_StateOptRec_
- {
- FT_UShort classTable;
- FT_UShort stateArray;
- FT_UShort entryTable;
-
-#define GXV_MORT_SUBTABLE_TYPE5_HEADER_SIZE GXV_STATETABLE_HEADER_SIZE
-
- FT_UShort* classTable_length_p;
- FT_UShort* stateArray_length_p;
- FT_UShort* entryTable_length_p;
-
- } GXV_mort_subtable_type5_StateOptRec,
- *GXV_mort_subtable_type5_StateOptRecData;
-
-
- FT_LOCAL_DEF( void )
- gxv_mort_subtable_type5_subtable_setup( FT_UShort table_size,
- FT_UShort classTable,
- FT_UShort stateArray,
- FT_UShort entryTable,
- FT_UShort* classTable_length_p,
- FT_UShort* stateArray_length_p,
- FT_UShort* entryTable_length_p,
- GXV_Validator gxvalid )
- {
- GXV_mort_subtable_type5_StateOptRecData optdata =
- (GXV_mort_subtable_type5_StateOptRecData)gxvalid->statetable.optdata;
-
-
- gxv_StateTable_subtable_setup( table_size,
- classTable,
- stateArray,
- entryTable,
- classTable_length_p,
- stateArray_length_p,
- entryTable_length_p,
- gxvalid );
-
- optdata->classTable = classTable;
- optdata->stateArray = stateArray;
- optdata->entryTable = entryTable;
-
- optdata->classTable_length_p = classTable_length_p;
- optdata->stateArray_length_p = stateArray_length_p;
- optdata->entryTable_length_p = entryTable_length_p;
- }
-
-
- static void
- gxv_mort_subtable_type5_InsertList_validate( FT_UShort offset,
- FT_UShort count,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- /*
- * We don't know the range of insertion-glyph-list.
- * Set range by whole of state table.
- */
- FT_Bytes p = table + offset;
-
- GXV_mort_subtable_type5_StateOptRecData optdata =
- (GXV_mort_subtable_type5_StateOptRecData)gxvalid->statetable.optdata;
-
- if ( optdata->classTable < offset &&
- offset < optdata->classTable + *(optdata->classTable_length_p) )
- GXV_TRACE(( " offset runs into ClassTable" ));
- if ( optdata->stateArray < offset &&
- offset < optdata->stateArray + *(optdata->stateArray_length_p) )
- GXV_TRACE(( " offset runs into StateArray" ));
- if ( optdata->entryTable < offset &&
- offset < optdata->entryTable + *(optdata->entryTable_length_p) )
- GXV_TRACE(( " offset runs into EntryTable" ));
-
-#ifndef GXV_LOAD_TRACE_VARS
- GXV_LIMIT_CHECK( count * 2 );
-#else
- while ( p < table + offset + ( count * 2 ) )
- {
- FT_UShort insert_glyphID;
-
-
- GXV_LIMIT_CHECK( 2 );
- insert_glyphID = FT_NEXT_USHORT( p );
- GXV_TRACE(( " 0x%04x", insert_glyphID ));
- }
- GXV_TRACE(( "\n" ));
-#endif
- }
-
-
- static void
- gxv_mort_subtable_type5_entry_validate(
- FT_Byte state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetCPtr glyphOffset,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_Bool setMark;
- FT_Bool dontAdvance;
- FT_Bool currentIsKashidaLike;
- FT_Bool markedIsKashidaLike;
- FT_Bool currentInsertBefore;
- FT_Bool markedInsertBefore;
-#endif
- FT_Byte currentInsertCount;
- FT_Byte markedInsertCount;
- FT_UShort currentInsertList;
- FT_UShort markedInsertList;
-
- FT_UNUSED( state );
-
-
-#ifdef GXV_LOAD_UNUSED_VARS
- setMark = FT_BOOL( ( flags >> 15 ) & 1 );
- dontAdvance = FT_BOOL( ( flags >> 14 ) & 1 );
- currentIsKashidaLike = FT_BOOL( ( flags >> 13 ) & 1 );
- markedIsKashidaLike = FT_BOOL( ( flags >> 12 ) & 1 );
- currentInsertBefore = FT_BOOL( ( flags >> 11 ) & 1 );
- markedInsertBefore = FT_BOOL( ( flags >> 10 ) & 1 );
-#endif
-
- currentInsertCount = (FT_Byte)( ( flags >> 5 ) & 0x1F );
- markedInsertCount = (FT_Byte)( flags & 0x001F );
-
- currentInsertList = (FT_UShort)( glyphOffset->ul >> 16 );
- markedInsertList = (FT_UShort)( glyphOffset->ul );
-
- if ( 0 != currentInsertList && 0 != currentInsertCount )
- {
- gxv_mort_subtable_type5_InsertList_validate( currentInsertList,
- currentInsertCount,
- table,
- limit,
- gxvalid );
- }
-
- if ( 0 != markedInsertList && 0 != markedInsertCount )
- {
- gxv_mort_subtable_type5_InsertList_validate( markedInsertList,
- markedInsertCount,
- table,
- limit,
- gxvalid );
- }
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_mort_subtable_type5_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
- GXV_mort_subtable_type5_StateOptRec et_rec;
- GXV_mort_subtable_type5_StateOptRecData et = &et_rec;
-
-
- GXV_NAME_ENTER( "mort chain subtable type5 (Glyph Insertion)" );
-
- GXV_LIMIT_CHECK( GXV_MORT_SUBTABLE_TYPE5_HEADER_SIZE );
-
- gxvalid->statetable.optdata =
- et;
- gxvalid->statetable.optdata_load_func =
- NULL;
- gxvalid->statetable.subtable_setup_func =
- gxv_mort_subtable_type5_subtable_setup;
- gxvalid->statetable.entry_glyphoffset_fmt =
- GXV_GLYPHOFFSET_ULONG;
- gxvalid->statetable.entry_validate_func =
- gxv_mort_subtable_type5_entry_validate;
-
- gxv_StateTable_validate( p, limit, gxvalid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvmorx.c b/src/gxvalid/gxvmorx.c
deleted file mode 100644
index 2bb4f3b8b..000000000
--- a/src/gxvalid/gxvmorx.c
+++ /dev/null
@@ -1,199 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmorx.c */
-/* */
-/* TrueTypeGX/AAT morx table validation (body). */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvmorx.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvmorx
-
-
- static void
- gxv_morx_subtables_validate( FT_Bytes table,
- FT_Bytes limit,
- FT_UShort nSubtables,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
- GXV_Validate_Func fmt_funcs_table[] =
- {
- gxv_morx_subtable_type0_validate, /* 0 */
- gxv_morx_subtable_type1_validate, /* 1 */
- gxv_morx_subtable_type2_validate, /* 2 */
- NULL, /* 3 */
- gxv_morx_subtable_type4_validate, /* 4 */
- gxv_morx_subtable_type5_validate, /* 5 */
-
- };
-
- FT_UShort i;
-
-
- GXV_NAME_ENTER( "subtables in a chain" );
-
- for ( i = 0; i < nSubtables; i++ )
- {
- GXV_Validate_Func func;
-
- FT_ULong length;
- FT_ULong coverage;
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_ULong subFeatureFlags;
-#endif
- FT_ULong type;
- FT_ULong rest;
-
-
- GXV_LIMIT_CHECK( 4 + 4 + 4 );
- length = FT_NEXT_ULONG( p );
- coverage = FT_NEXT_ULONG( p );
-#ifdef GXV_LOAD_UNUSED_VARS
- subFeatureFlags = FT_NEXT_ULONG( p );
-#else
- p += 4;
-#endif
-
- GXV_TRACE(( "validating chain subtable %d/%d (%d bytes)\n",
- i + 1, nSubtables, length ));
-
- type = coverage & 0x0007;
- rest = length - ( 4 + 4 + 4 );
- GXV_LIMIT_CHECK( rest );
-
- /* morx coverage consists of mort_coverage & 16bit padding */
- gxv_mort_coverage_validate( (FT_UShort)( ( coverage >> 16 ) | coverage ),
- gxvalid );
- if ( type > 5 )
- FT_INVALID_FORMAT;
-
- func = fmt_funcs_table[type];
- if ( !func )
- GXV_TRACE(( "morx type %d is reserved\n", type ));
-
- func( p, p + rest, gxvalid );
-
- /* TODO: subFeatureFlags should be unique in a table? */
- p += rest;
- }
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_morx_chain_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_ULong defaultFlags;
-#endif
- FT_ULong chainLength;
- FT_ULong nFeatureFlags;
- FT_ULong nSubtables;
-
-
- GXV_NAME_ENTER( "morx chain header" );
-
- GXV_LIMIT_CHECK( 4 + 4 + 4 + 4 );
-#ifdef GXV_LOAD_UNUSED_VARS
- defaultFlags = FT_NEXT_ULONG( p );
-#else
- p += 4;
-#endif
- chainLength = FT_NEXT_ULONG( p );
- nFeatureFlags = FT_NEXT_ULONG( p );
- nSubtables = FT_NEXT_ULONG( p );
-
- /* feature-array of morx is same with that of mort */
- gxv_mort_featurearray_validate( p, limit, nFeatureFlags, gxvalid );
- p += gxvalid->subtable_length;
-
- if ( nSubtables >= 0x10000L )
- FT_INVALID_DATA;
-
- gxv_morx_subtables_validate( p, table + chainLength,
- (FT_UShort)nSubtables, gxvalid );
-
- gxvalid->subtable_length = chainLength;
-
- /* TODO: defaultFlags should be compared with the flags in tables */
-
- GXV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_morx_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator ftvalid )
- {
- GXV_ValidatorRec gxvalidrec;
- GXV_Validator gxvalid = &gxvalidrec;
- FT_Bytes p = table;
- FT_Bytes limit = 0;
- FT_ULong version;
- FT_ULong nChains;
- FT_ULong i;
-
-
- gxvalid->root = ftvalid;
- gxvalid->face = face;
-
- FT_TRACE3(( "validating `morx' table\n" ));
- GXV_INIT;
-
- GXV_LIMIT_CHECK( 4 + 4 );
- version = FT_NEXT_ULONG( p );
- nChains = FT_NEXT_ULONG( p );
-
- if ( version != 0x00020000UL )
- FT_INVALID_FORMAT;
-
- for ( i = 0; i < nChains; i++ )
- {
- GXV_TRACE(( "validating chain %d/%d\n", i + 1, nChains ));
- GXV_32BIT_ALIGNMENT_VALIDATE( p - table );
- gxv_morx_chain_validate( p, limit, gxvalid );
- p += gxvalid->subtable_length;
- }
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvmorx.h b/src/gxvalid/gxvmorx.h
deleted file mode 100644
index 20cec5867..000000000
--- a/src/gxvalid/gxvmorx.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmorx.h */
-/* */
-/* TrueTypeGX/AAT common definition for morx table (specification). */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#ifndef GXVMORX_H_
-#define GXVMORX_H_
-
-
-#include "gxvalid.h"
-#include "gxvcommn.h"
-#include "gxvmort.h"
-
-#include FT_SFNT_NAMES_H
-
-
- FT_LOCAL( void )
- gxv_morx_subtable_type0_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_morx_subtable_type1_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_morx_subtable_type2_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_morx_subtable_type4_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid );
-
- FT_LOCAL( void )
- gxv_morx_subtable_type5_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid );
-
-
-#endif /* GXVMORX_H_ */
-
-
-/* END */
diff --git a/src/gxvalid/gxvmorx0.c b/src/gxvalid/gxvmorx0.c
deleted file mode 100644
index e0a0a9243..000000000
--- a/src/gxvalid/gxvmorx0.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmorx0.c */
-/* */
-/* TrueTypeGX/AAT morx table validation */
-/* body for type0 (Indic Script Rearrangement) subtable. */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvmorx.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvmorx
-
-
- static void
- gxv_morx_subtable_type0_entry_validate(
- FT_UShort state,
- FT_UShort flags,
- GXV_XStateTable_GlyphOffsetCPtr glyphOffset_p,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_UShort markFirst;
- FT_UShort dontAdvance;
- FT_UShort markLast;
-#endif
- FT_UShort reserved;
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_UShort verb;
-#endif
-
- FT_UNUSED( state );
- FT_UNUSED( glyphOffset_p );
- FT_UNUSED( table );
- FT_UNUSED( limit );
-
-
-#ifdef GXV_LOAD_UNUSED_VARS
- markFirst = (FT_UShort)( ( flags >> 15 ) & 1 );
- dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
- markLast = (FT_UShort)( ( flags >> 13 ) & 1 );
-#endif
-
- reserved = (FT_UShort)( flags & 0x1FF0 );
-#ifdef GXV_LOAD_UNUSED_VARS
- verb = (FT_UShort)( flags & 0x000F );
-#endif
-
- if ( 0 < reserved )
- {
- GXV_TRACE(( " non-zero bits found in reserved range\n" ));
- FT_INVALID_DATA;
- }
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_morx_subtable_type0_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
-
- GXV_NAME_ENTER(
- "morx chain subtable type0 (Indic-Script Rearrangement)" );
-
- GXV_LIMIT_CHECK( GXV_STATETABLE_HEADER_SIZE );
-
- gxvalid->xstatetable.optdata = NULL;
- gxvalid->xstatetable.optdata_load_func = NULL;
- gxvalid->xstatetable.subtable_setup_func = NULL;
- gxvalid->xstatetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE;
- gxvalid->xstatetable.entry_validate_func =
- gxv_morx_subtable_type0_entry_validate;
-
- gxv_XStateTable_validate( p, limit, gxvalid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvmorx1.c b/src/gxvalid/gxvmorx1.c
deleted file mode 100644
index 9afebdbfa..000000000
--- a/src/gxvalid/gxvmorx1.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmorx1.c */
-/* */
-/* TrueTypeGX/AAT morx table validation */
-/* body for type1 (Contextual Substitution) subtable. */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvmorx.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvmorx
-
-
- typedef struct GXV_morx_subtable_type1_StateOptRec_
- {
- FT_ULong substitutionTable;
- FT_ULong substitutionTable_length;
- FT_UShort substitutionTable_num_lookupTables;
-
- } GXV_morx_subtable_type1_StateOptRec,
- *GXV_morx_subtable_type1_StateOptRecData;
-
-
-#define GXV_MORX_SUBTABLE_TYPE1_HEADER_SIZE \
- ( GXV_STATETABLE_HEADER_SIZE + 2 )
-
-
- static void
- gxv_morx_subtable_type1_substitutionTable_load( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
- GXV_morx_subtable_type1_StateOptRecData optdata =
- (GXV_morx_subtable_type1_StateOptRecData)gxvalid->xstatetable.optdata;
-
-
- GXV_LIMIT_CHECK( 2 );
- optdata->substitutionTable = FT_NEXT_USHORT( p );
- }
-
-
- static void
- gxv_morx_subtable_type1_subtable_setup( FT_ULong table_size,
- FT_ULong classTable,
- FT_ULong stateArray,
- FT_ULong entryTable,
- FT_ULong* classTable_length_p,
- FT_ULong* stateArray_length_p,
- FT_ULong* entryTable_length_p,
- GXV_Validator gxvalid )
- {
- FT_ULong o[4];
- FT_ULong *l[4];
- FT_ULong buff[5];
-
- GXV_morx_subtable_type1_StateOptRecData optdata =
- (GXV_morx_subtable_type1_StateOptRecData)gxvalid->xstatetable.optdata;
-
-
- o[0] = classTable;
- o[1] = stateArray;
- o[2] = entryTable;
- o[3] = optdata->substitutionTable;
- l[0] = classTable_length_p;
- l[1] = stateArray_length_p;
- l[2] = entryTable_length_p;
- l[3] = &(optdata->substitutionTable_length);
-
- gxv_set_length_by_ulong_offset( o, l, buff, 4, table_size, gxvalid );
- }
-
-
- static void
- gxv_morx_subtable_type1_entry_validate(
- FT_UShort state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetCPtr glyphOffset_p,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
-#ifdef GXV_LOAD_TRACE_VARS
- FT_UShort setMark;
- FT_UShort dontAdvance;
-#endif
- FT_UShort reserved;
- FT_Short markIndex;
- FT_Short currentIndex;
-
- GXV_morx_subtable_type1_StateOptRecData optdata =
- (GXV_morx_subtable_type1_StateOptRecData)gxvalid->xstatetable.optdata;
-
- FT_UNUSED( state );
- FT_UNUSED( table );
- FT_UNUSED( limit );
-
-
-#ifdef GXV_LOAD_TRACE_VARS
- setMark = (FT_UShort)( ( flags >> 15 ) & 1 );
- dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
-#endif
-
- reserved = (FT_UShort)( flags & 0x3FFF );
-
- markIndex = (FT_Short)( glyphOffset_p->ul >> 16 );
- currentIndex = (FT_Short)( glyphOffset_p->ul );
-
- GXV_TRACE(( " setMark=%01d dontAdvance=%01d\n",
- setMark, dontAdvance ));
-
- if ( 0 < reserved )
- {
- GXV_TRACE(( " non-zero bits found in reserved range\n" ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
- }
-
- GXV_TRACE(( "markIndex = %d, currentIndex = %d\n",
- markIndex, currentIndex ));
-
- if ( optdata->substitutionTable_num_lookupTables < markIndex + 1 )
- optdata->substitutionTable_num_lookupTables =
- (FT_UShort)( markIndex + 1 );
-
- if ( optdata->substitutionTable_num_lookupTables < currentIndex + 1 )
- optdata->substitutionTable_num_lookupTables =
- (FT_UShort)( currentIndex + 1 );
- }
-
-
- static void
- gxv_morx_subtable_type1_LookupValue_validate( FT_UShort glyph,
- GXV_LookupValueCPtr value_p,
- GXV_Validator gxvalid )
- {
- FT_UNUSED( glyph ); /* for the non-debugging case */
-
- GXV_TRACE(( "morx subtable type1 subst.: %d -> %d\n", glyph, value_p->u ));
-
- if ( value_p->u > gxvalid->face->num_glyphs )
- FT_INVALID_GLYPH_ID;
- }
-
-
- static GXV_LookupValueDesc
- gxv_morx_subtable_type1_LookupFmt4_transit(
- FT_UShort relative_gindex,
- GXV_LookupValueCPtr base_value_p,
- FT_Bytes lookuptbl_limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p;
- FT_Bytes limit;
- FT_UShort offset;
- GXV_LookupValueDesc value;
-
- /* XXX: check range? */
- offset = (FT_UShort)( base_value_p->u +
- relative_gindex * sizeof ( FT_UShort ) );
-
- p = gxvalid->lookuptbl_head + offset;
- limit = lookuptbl_limit;
-
- GXV_LIMIT_CHECK ( 2 );
- value.u = FT_NEXT_USHORT( p );
-
- return value;
- }
-
-
- /*
- * TODO: length should be limit?
- **/
- static void
- gxv_morx_subtable_type1_substitutionTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UShort i;
-
- GXV_morx_subtable_type1_StateOptRecData optdata =
- (GXV_morx_subtable_type1_StateOptRecData)gxvalid->xstatetable.optdata;
-
-
- /* TODO: calculate offset/length for each lookupTables */
- gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- gxvalid->lookupval_func = gxv_morx_subtable_type1_LookupValue_validate;
- gxvalid->lookupfmt4_trans = gxv_morx_subtable_type1_LookupFmt4_transit;
-
- for ( i = 0; i < optdata->substitutionTable_num_lookupTables; i++ )
- {
- FT_ULong offset;
-
-
- GXV_LIMIT_CHECK( 4 );
- offset = FT_NEXT_ULONG( p );
-
- gxv_LookupTable_validate( table + offset, limit, gxvalid );
- }
-
- /* TODO: overlapping of lookupTables in substitutionTable */
- }
-
-
- /*
- * subtable for Contextual glyph substitution is a modified StateTable.
- * In addition to classTable, stateArray, entryTable, the field
- * `substitutionTable' is added.
- */
- FT_LOCAL_DEF( void )
- gxv_morx_subtable_type1_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
- GXV_morx_subtable_type1_StateOptRec st_rec;
-
-
- GXV_NAME_ENTER( "morx chain subtable type1 (Contextual Glyph Subst)" );
-
- GXV_LIMIT_CHECK( GXV_MORX_SUBTABLE_TYPE1_HEADER_SIZE );
-
- st_rec.substitutionTable_num_lookupTables = 0;
-
- gxvalid->xstatetable.optdata =
- &st_rec;
- gxvalid->xstatetable.optdata_load_func =
- gxv_morx_subtable_type1_substitutionTable_load;
- gxvalid->xstatetable.subtable_setup_func =
- gxv_morx_subtable_type1_subtable_setup;
- gxvalid->xstatetable.entry_glyphoffset_fmt =
- GXV_GLYPHOFFSET_ULONG;
- gxvalid->xstatetable.entry_validate_func =
- gxv_morx_subtable_type1_entry_validate;
-
- gxv_XStateTable_validate( p, limit, gxvalid );
-
- gxv_morx_subtable_type1_substitutionTable_validate(
- table + st_rec.substitutionTable,
- table + st_rec.substitutionTable + st_rec.substitutionTable_length,
- gxvalid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvmorx2.c b/src/gxvalid/gxvmorx2.c
deleted file mode 100644
index 3a60cf68a..000000000
--- a/src/gxvalid/gxvmorx2.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmorx2.c */
-/* */
-/* TrueTypeGX/AAT morx table validation */
-/* body for type2 (Ligature Substitution) subtable. */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvmorx.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvmorx
-
-
- typedef struct GXV_morx_subtable_type2_StateOptRec_
- {
- FT_ULong ligActionTable;
- FT_ULong componentTable;
- FT_ULong ligatureTable;
- FT_ULong ligActionTable_length;
- FT_ULong componentTable_length;
- FT_ULong ligatureTable_length;
-
- } GXV_morx_subtable_type2_StateOptRec,
- *GXV_morx_subtable_type2_StateOptRecData;
-
-
-#define GXV_MORX_SUBTABLE_TYPE2_HEADER_SIZE \
- ( GXV_XSTATETABLE_HEADER_SIZE + 4 + 4 + 4 )
-
-
- static void
- gxv_morx_subtable_type2_opttable_load( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
- GXV_morx_subtable_type2_StateOptRecData optdata =
- (GXV_morx_subtable_type2_StateOptRecData)gxvalid->xstatetable.optdata;
-
-
- GXV_LIMIT_CHECK( 4 + 4 + 4 );
- optdata->ligActionTable = FT_NEXT_ULONG( p );
- optdata->componentTable = FT_NEXT_ULONG( p );
- optdata->ligatureTable = FT_NEXT_ULONG( p );
-
- GXV_TRACE(( "offset to ligActionTable=0x%08x\n",
- optdata->ligActionTable ));
- GXV_TRACE(( "offset to componentTable=0x%08x\n",
- optdata->componentTable ));
- GXV_TRACE(( "offset to ligatureTable=0x%08x\n",
- optdata->ligatureTable ));
- }
-
-
- static void
- gxv_morx_subtable_type2_subtable_setup( FT_ULong table_size,
- FT_ULong classTable,
- FT_ULong stateArray,
- FT_ULong entryTable,
- FT_ULong* classTable_length_p,
- FT_ULong* stateArray_length_p,
- FT_ULong* entryTable_length_p,
- GXV_Validator gxvalid )
- {
- FT_ULong o[6];
- FT_ULong* l[6];
- FT_ULong buff[7];
-
- GXV_morx_subtable_type2_StateOptRecData optdata =
- (GXV_morx_subtable_type2_StateOptRecData)gxvalid->xstatetable.optdata;
-
-
- GXV_NAME_ENTER( "subtable boundaries setup" );
-
- o[0] = classTable;
- o[1] = stateArray;
- o[2] = entryTable;
- o[3] = optdata->ligActionTable;
- o[4] = optdata->componentTable;
- o[5] = optdata->ligatureTable;
- l[0] = classTable_length_p;
- l[1] = stateArray_length_p;
- l[2] = entryTable_length_p;
- l[3] = &(optdata->ligActionTable_length);
- l[4] = &(optdata->componentTable_length);
- l[5] = &(optdata->ligatureTable_length);
-
- gxv_set_length_by_ulong_offset( o, l, buff, 6, table_size, gxvalid );
-
- GXV_TRACE(( "classTable: offset=0x%08x length=0x%08x\n",
- classTable, *classTable_length_p ));
- GXV_TRACE(( "stateArray: offset=0x%08x length=0x%08x\n",
- stateArray, *stateArray_length_p ));
- GXV_TRACE(( "entryTable: offset=0x%08x length=0x%08x\n",
- entryTable, *entryTable_length_p ));
- GXV_TRACE(( "ligActionTable: offset=0x%08x length=0x%08x\n",
- optdata->ligActionTable,
- optdata->ligActionTable_length ));
- GXV_TRACE(( "componentTable: offset=0x%08x length=0x%08x\n",
- optdata->componentTable,
- optdata->componentTable_length ));
- GXV_TRACE(( "ligatureTable: offset=0x%08x length=0x%08x\n",
- optdata->ligatureTable,
- optdata->ligatureTable_length ));
-
- GXV_EXIT;
- }
-
-
-#define GXV_MORX_LIGACTION_ENTRY_SIZE 4
-
-
- static void
- gxv_morx_subtable_type2_ligActionIndex_validate(
- FT_Bytes table,
- FT_UShort ligActionIndex,
- GXV_Validator gxvalid )
- {
- /* access ligActionTable */
- GXV_morx_subtable_type2_StateOptRecData optdata =
- (GXV_morx_subtable_type2_StateOptRecData)gxvalid->xstatetable.optdata;
-
- FT_Bytes lat_base = table + optdata->ligActionTable;
- FT_Bytes p = lat_base +
- ligActionIndex * GXV_MORX_LIGACTION_ENTRY_SIZE;
- FT_Bytes lat_limit = lat_base + optdata->ligActionTable;
-
-
- if ( p < lat_base )
- {
- GXV_TRACE(( "p < lat_base (%d byte rewind)\n", lat_base - p ));
- FT_INVALID_OFFSET;
- }
- else if ( lat_limit < p )
- {
- GXV_TRACE(( "lat_limit < p (%d byte overrun)\n", p - lat_limit ));
- FT_INVALID_OFFSET;
- }
-
- {
- /* validate entry in ligActionTable */
- FT_ULong lig_action;
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_UShort last;
- FT_UShort store;
-#endif
- FT_ULong offset;
- FT_Long gid_limit;
-
-
- lig_action = FT_NEXT_ULONG( p );
-#ifdef GXV_LOAD_UNUSED_VARS
- last = (FT_UShort)( ( lig_action >> 31 ) & 1 );
- store = (FT_UShort)( ( lig_action >> 30 ) & 1 );
-#endif
-
- offset = lig_action & 0x3FFFFFFFUL;
-
- /* this offset is 30-bit signed value to add to GID */
- /* it is different from the location offset in mort */
- if ( ( offset & 0x3FFF0000UL ) == 0x3FFF0000UL )
- { /* negative offset */
- gid_limit = gxvalid->face->num_glyphs -
- (FT_Long)( offset & 0x0000FFFFUL );
- if ( gid_limit > 0 )
- return;
-
- GXV_TRACE(( "ligature action table includes"
- " too negative offset moving all GID"
- " below defined range: 0x%04x\n",
- offset & 0xFFFFU ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
- }
- else if ( ( offset & 0x3FFF0000UL ) == 0x00000000UL )
- { /* positive offset */
- if ( (FT_Long)offset < gxvalid->face->num_glyphs )
- return;
-
- GXV_TRACE(( "ligature action table includes"
- " too large offset moving all GID"
- " over defined range: 0x%04x\n",
- offset & 0xFFFFU ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
- }
-
- GXV_TRACE(( "ligature action table includes"
- " invalid offset to add to 16-bit GID:"
- " 0x%08x\n", offset ));
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
- }
- }
-
-
- static void
- gxv_morx_subtable_type2_entry_validate(
- FT_UShort state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetCPtr glyphOffset_p,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_UShort setComponent;
- FT_UShort dontAdvance;
- FT_UShort performAction;
-#endif
- FT_UShort reserved;
- FT_UShort ligActionIndex;
-
- FT_UNUSED( state );
- FT_UNUSED( limit );
-
-
-#ifdef GXV_LOAD_UNUSED_VARS
- setComponent = (FT_UShort)( ( flags >> 15 ) & 1 );
- dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
- performAction = (FT_UShort)( ( flags >> 13 ) & 1 );
-#endif
-
- reserved = (FT_UShort)( flags & 0x1FFF );
- ligActionIndex = glyphOffset_p->u;
-
- if ( reserved > 0 )
- GXV_TRACE(( " reserved 14bit is non-zero\n" ));
-
- if ( 0 < ligActionIndex )
- gxv_morx_subtable_type2_ligActionIndex_validate(
- table, ligActionIndex, gxvalid );
- }
-
-
- static void
- gxv_morx_subtable_type2_ligatureTable_validate( FT_Bytes table,
- GXV_Validator gxvalid )
- {
- GXV_morx_subtable_type2_StateOptRecData optdata =
- (GXV_morx_subtable_type2_StateOptRecData)gxvalid->xstatetable.optdata;
-
- FT_Bytes p = table + optdata->ligatureTable;
- FT_Bytes limit = table + optdata->ligatureTable
- + optdata->ligatureTable_length;
-
-
- GXV_NAME_ENTER( "morx chain subtable type2 - substitutionTable" );
-
- if ( 0 != optdata->ligatureTable )
- {
- /* Apple does not give specification of ligatureTable format */
- while ( p < limit )
- {
- FT_UShort lig_gid;
-
-
- GXV_LIMIT_CHECK( 2 );
- lig_gid = FT_NEXT_USHORT( p );
- if ( lig_gid < gxvalid->face->num_glyphs )
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
- }
- }
-
- GXV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_morx_subtable_type2_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
- GXV_morx_subtable_type2_StateOptRec lig_rec;
-
-
- GXV_NAME_ENTER( "morx chain subtable type2 (Ligature Substitution)" );
-
- GXV_LIMIT_CHECK( GXV_MORX_SUBTABLE_TYPE2_HEADER_SIZE );
-
- gxvalid->xstatetable.optdata =
- &lig_rec;
- gxvalid->xstatetable.optdata_load_func =
- gxv_morx_subtable_type2_opttable_load;
- gxvalid->xstatetable.subtable_setup_func =
- gxv_morx_subtable_type2_subtable_setup;
- gxvalid->xstatetable.entry_glyphoffset_fmt =
- GXV_GLYPHOFFSET_USHORT;
- gxvalid->xstatetable.entry_validate_func =
- gxv_morx_subtable_type2_entry_validate;
-
- gxv_XStateTable_validate( p, limit, gxvalid );
-
-#if 0
- p += gxvalid->subtable_length;
-#endif
- gxv_morx_subtable_type2_ligatureTable_validate( table, gxvalid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvmorx4.c b/src/gxvalid/gxvmorx4.c
deleted file mode 100644
index 29555685a..000000000
--- a/src/gxvalid/gxvmorx4.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmorx4.c */
-/* */
-/* TrueTypeGX/AAT morx table validation */
-/* body for "morx" type4 (Non-Contextual Glyph Substitution) subtable. */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvmorx.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvmorx
-
-
- FT_LOCAL_DEF( void )
- gxv_morx_subtable_type4_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- GXV_NAME_ENTER( "morx chain subtable type4 "
- "(Non-Contextual Glyph Substitution)" );
-
- gxv_mort_subtable_type4_validate( table, limit, gxvalid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvmorx5.c b/src/gxvalid/gxvmorx5.c
deleted file mode 100644
index 05c11417e..000000000
--- a/src/gxvalid/gxvmorx5.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmorx5.c */
-/* */
-/* TrueTypeGX/AAT morx table validation */
-/* body for type5 (Contextual Glyph Insertion) subtable. */
-/* */
-/* Copyright 2005-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvmorx.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvmorx
-
-
- /*
- * `morx' subtable type5 (Contextual Glyph Insertion)
- * has format of a StateTable with insertion-glyph-list
- * without name. However, the 32bit offset from the head
- * of subtable to the i-g-l is given after `entryTable',
- * without variable name specification (the existence of
- * this offset to the table is different from mort type5).
- */
-
-
- typedef struct GXV_morx_subtable_type5_StateOptRec_
- {
- FT_ULong insertionGlyphList;
- FT_ULong insertionGlyphList_length;
-
- } GXV_morx_subtable_type5_StateOptRec,
- *GXV_morx_subtable_type5_StateOptRecData;
-
-
-#define GXV_MORX_SUBTABLE_TYPE5_HEADER_SIZE \
- ( GXV_STATETABLE_HEADER_SIZE + 4 )
-
-
- static void
- gxv_morx_subtable_type5_insertionGlyphList_load( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
- GXV_morx_subtable_type5_StateOptRecData optdata =
- (GXV_morx_subtable_type5_StateOptRecData)gxvalid->xstatetable.optdata;
-
-
- GXV_LIMIT_CHECK( 4 );
- optdata->insertionGlyphList = FT_NEXT_ULONG( p );
- }
-
-
- static void
- gxv_morx_subtable_type5_subtable_setup( FT_ULong table_size,
- FT_ULong classTable,
- FT_ULong stateArray,
- FT_ULong entryTable,
- FT_ULong* classTable_length_p,
- FT_ULong* stateArray_length_p,
- FT_ULong* entryTable_length_p,
- GXV_Validator gxvalid )
- {
- FT_ULong o[4];
- FT_ULong* l[4];
- FT_ULong buff[5];
-
- GXV_morx_subtable_type5_StateOptRecData optdata =
- (GXV_morx_subtable_type5_StateOptRecData)gxvalid->xstatetable.optdata;
-
-
- o[0] = classTable;
- o[1] = stateArray;
- o[2] = entryTable;
- o[3] = optdata->insertionGlyphList;
- l[0] = classTable_length_p;
- l[1] = stateArray_length_p;
- l[2] = entryTable_length_p;
- l[3] = &(optdata->insertionGlyphList_length);
-
- gxv_set_length_by_ulong_offset( o, l, buff, 4, table_size, gxvalid );
- }
-
-
- static void
- gxv_morx_subtable_type5_InsertList_validate( FT_UShort table_index,
- FT_UShort count,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table + table_index * 2;
-
-
-#ifndef GXV_LOAD_TRACE_VARS
- GXV_LIMIT_CHECK( count * 2 );
-#else
- while ( p < table + count * 2 + table_index * 2 )
- {
- FT_UShort insert_glyphID;
-
-
- GXV_LIMIT_CHECK( 2 );
- insert_glyphID = FT_NEXT_USHORT( p );
- GXV_TRACE(( " 0x%04x", insert_glyphID ));
- }
-
- GXV_TRACE(( "\n" ));
-#endif
- }
-
-
- static void
- gxv_morx_subtable_type5_entry_validate(
- FT_UShort state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetCPtr glyphOffset_p,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
-#ifdef GXV_LOAD_UNUSED_VARS
- FT_Bool setMark;
- FT_Bool dontAdvance;
- FT_Bool currentIsKashidaLike;
- FT_Bool markedIsKashidaLike;
- FT_Bool currentInsertBefore;
- FT_Bool markedInsertBefore;
-#endif
- FT_Byte currentInsertCount;
- FT_Byte markedInsertCount;
- FT_Byte currentInsertList;
- FT_UShort markedInsertList;
-
- FT_UNUSED( state );
-
-
-#ifdef GXV_LOAD_UNUSED_VARS
- setMark = FT_BOOL( ( flags >> 15 ) & 1 );
- dontAdvance = FT_BOOL( ( flags >> 14 ) & 1 );
- currentIsKashidaLike = FT_BOOL( ( flags >> 13 ) & 1 );
- markedIsKashidaLike = FT_BOOL( ( flags >> 12 ) & 1 );
- currentInsertBefore = FT_BOOL( ( flags >> 11 ) & 1 );
- markedInsertBefore = FT_BOOL( ( flags >> 10 ) & 1 );
-#endif
-
- currentInsertCount = (FT_Byte)( ( flags >> 5 ) & 0x1F );
- markedInsertCount = (FT_Byte)( flags & 0x001F );
-
- currentInsertList = (FT_Byte) ( glyphOffset_p->ul >> 16 );
- markedInsertList = (FT_UShort)( glyphOffset_p->ul );
-
- if ( currentInsertList && 0 != currentInsertCount )
- gxv_morx_subtable_type5_InsertList_validate( currentInsertList,
- currentInsertCount,
- table, limit,
- gxvalid );
-
- if ( markedInsertList && 0 != markedInsertCount )
- gxv_morx_subtable_type5_InsertList_validate( markedInsertList,
- markedInsertCount,
- table, limit,
- gxvalid );
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_morx_subtable_type5_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
- GXV_morx_subtable_type5_StateOptRec et_rec;
- GXV_morx_subtable_type5_StateOptRecData et = &et_rec;
-
-
- GXV_NAME_ENTER( "morx chain subtable type5 (Glyph Insertion)" );
-
- GXV_LIMIT_CHECK( GXV_MORX_SUBTABLE_TYPE5_HEADER_SIZE );
-
- gxvalid->xstatetable.optdata =
- et;
- gxvalid->xstatetable.optdata_load_func =
- gxv_morx_subtable_type5_insertionGlyphList_load;
- gxvalid->xstatetable.subtable_setup_func =
- gxv_morx_subtable_type5_subtable_setup;
- gxvalid->xstatetable.entry_glyphoffset_fmt =
- GXV_GLYPHOFFSET_ULONG;
- gxvalid->xstatetable.entry_validate_func =
- gxv_morx_subtable_type5_entry_validate;
-
- gxv_XStateTable_validate( p, limit, gxvalid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvopbd.c b/src/gxvalid/gxvopbd.c
deleted file mode 100644
index 11580d8b2..000000000
--- a/src/gxvalid/gxvopbd.c
+++ /dev/null
@@ -1,218 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvopbd.c */
-/* */
-/* TrueTypeGX/AAT opbd table validation (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvalid.h"
-#include "gxvcommn.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvopbd
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Data and Types *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct GXV_opbd_DataRec_
- {
- FT_UShort format;
- FT_UShort valueOffset_min;
-
- } GXV_opbd_DataRec, *GXV_opbd_Data;
-
-
-#define GXV_OPBD_DATA( FIELD ) GXV_TABLE_DATA( opbd, FIELD )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** UTILITY FUNCTIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- gxv_opbd_LookupValue_validate( FT_UShort glyph,
- GXV_LookupValueCPtr value_p,
- GXV_Validator gxvalid )
- {
- /* offset in LookupTable is measured from the head of opbd table */
- FT_Bytes p = gxvalid->root->base + value_p->u;
- FT_Bytes limit = gxvalid->root->limit;
- FT_Short delta_value;
- int i;
-
-
- if ( value_p->u < GXV_OPBD_DATA( valueOffset_min ) )
- GXV_OPBD_DATA( valueOffset_min ) = value_p->u;
-
- for ( i = 0; i < 4; i++ )
- {
- GXV_LIMIT_CHECK( 2 );
- delta_value = FT_NEXT_SHORT( p );
-
- if ( GXV_OPBD_DATA( format ) ) /* format 1, value is ctrl pt. */
- {
- if ( delta_value == -1 )
- continue;
-
- gxv_ctlPoint_validate( glyph, (FT_UShort)delta_value, gxvalid );
- }
- else /* format 0, value is distance */
- continue;
- }
- }
-
-
- /*
- opbd ---------------------+
- |
- +===============+ |
- | lookup header | |
- +===============+ |
- | BinSrchHeader | |
- +===============+ |
- | lastGlyph[0] | |
- +---------------+ |
- | firstGlyph[0] | | head of opbd sfnt table
- +---------------+ | +
- | offset[0] | -> | offset [byte]
- +===============+ | +
- | lastGlyph[1] | | (glyphID - firstGlyph) * 4 * sizeof(FT_Short) [byte]
- +---------------+ |
- | firstGlyph[1] | |
- +---------------+ |
- | offset[1] | |
- +===============+ |
- |
- .... |
- |
- 48bit value array |
- +===============+ |
- | value | <-------+
- | |
- | |
- | |
- +---------------+
- .... */
-
- static GXV_LookupValueDesc
- gxv_opbd_LookupFmt4_transit( FT_UShort relative_gindex,
- GXV_LookupValueCPtr base_value_p,
- FT_Bytes lookuptbl_limit,
- GXV_Validator gxvalid )
- {
- GXV_LookupValueDesc value;
-
- FT_UNUSED( lookuptbl_limit );
- FT_UNUSED( gxvalid );
-
- /* XXX: check range? */
- value.u = (FT_UShort)( base_value_p->u +
- relative_gindex * 4 * sizeof ( FT_Short ) );
-
- return value;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** opbd TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- gxv_opbd_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator ftvalid )
- {
- GXV_ValidatorRec gxvalidrec;
- GXV_Validator gxvalid = &gxvalidrec;
- GXV_opbd_DataRec opbdrec;
- GXV_opbd_Data opbd = &opbdrec;
- FT_Bytes p = table;
- FT_Bytes limit = 0;
-
- FT_ULong version;
-
-
- gxvalid->root = ftvalid;
- gxvalid->table_data = opbd;
- gxvalid->face = face;
-
- FT_TRACE3(( "validating `opbd' table\n" ));
- GXV_INIT;
- GXV_OPBD_DATA( valueOffset_min ) = 0xFFFFU;
-
-
- GXV_LIMIT_CHECK( 4 + 2 );
- version = FT_NEXT_ULONG( p );
- GXV_OPBD_DATA( format ) = FT_NEXT_USHORT( p );
-
-
- /* only 0x00010000 is defined (1996) */
- GXV_TRACE(( "(version=0x%08x)\n", version ));
- if ( 0x00010000UL != version )
- FT_INVALID_FORMAT;
-
- /* only values 0 and 1 are defined (1996) */
- GXV_TRACE(( "(format=0x%04x)\n", GXV_OPBD_DATA( format ) ));
- if ( 0x0001 < GXV_OPBD_DATA( format ) )
- FT_INVALID_FORMAT;
-
- gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- gxvalid->lookupval_func = gxv_opbd_LookupValue_validate;
- gxvalid->lookupfmt4_trans = gxv_opbd_LookupFmt4_transit;
-
- gxv_LookupTable_validate( p, limit, gxvalid );
- p += gxvalid->subtable_length;
-
- if ( p > table + GXV_OPBD_DATA( valueOffset_min ) )
- {
- GXV_TRACE((
- "found overlap between LookupTable and opbd_value array\n" ));
- FT_INVALID_OFFSET;
- }
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvprop.c b/src/gxvalid/gxvprop.c
deleted file mode 100644
index 7d398b7e6..000000000
--- a/src/gxvalid/gxvprop.c
+++ /dev/null
@@ -1,330 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvprop.c */
-/* */
-/* TrueTypeGX/AAT prop table validation (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvalid.h"
-#include "gxvcommn.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvprop
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Data and Types *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define GXV_PROP_HEADER_SIZE ( 4 + 2 + 2 )
-#define GXV_PROP_SIZE_MIN GXV_PROP_HEADER_SIZE
-
- typedef struct GXV_prop_DataRec_
- {
- FT_Fixed version;
-
- } GXV_prop_DataRec, *GXV_prop_Data;
-
-#define GXV_PROP_DATA( field ) GXV_TABLE_DATA( prop, field )
-
-#define GXV_PROP_FLOATER 0x8000U
-#define GXV_PROP_USE_COMPLEMENTARY_BRACKET 0x1000U
-#define GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET 0x0F00U
-#define GXV_PROP_ATTACHING_TO_RIGHT 0x0080U
-#define GXV_PROP_RESERVED 0x0060U
-#define GXV_PROP_DIRECTIONALITY_CLASS 0x001FU
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** UTILITY FUNCTIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- gxv_prop_zero_advance_validate( FT_UShort gid,
- GXV_Validator gxvalid )
- {
- FT_Face face;
- FT_Error error;
- FT_GlyphSlot glyph;
-
-
- GXV_NAME_ENTER( "zero advance" );
-
- face = gxvalid->face;
-
- error = FT_Load_Glyph( face,
- gid,
- FT_LOAD_IGNORE_TRANSFORM );
- if ( error )
- FT_INVALID_GLYPH_ID;
-
- glyph = face->glyph;
-
- if ( glyph->advance.x != (FT_Pos)0 ||
- glyph->advance.y != (FT_Pos)0 )
- {
- GXV_TRACE(( " found non-zero advance in zero-advance glyph\n" ));
- FT_INVALID_DATA;
- }
-
- GXV_EXIT;
- }
-
-
- /* Pass 0 as GLYPH to check the default property */
- static void
- gxv_prop_property_validate( FT_UShort property,
- FT_UShort glyph,
- GXV_Validator gxvalid )
- {
- if ( glyph != 0 && ( property & GXV_PROP_FLOATER ) )
- gxv_prop_zero_advance_validate( glyph, gxvalid );
-
- if ( property & GXV_PROP_USE_COMPLEMENTARY_BRACKET )
- {
- FT_UShort offset;
- char complement;
-
-
- offset = (FT_UShort)( property & GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET );
- if ( offset == 0 )
- {
- GXV_TRACE(( " found zero offset to property\n" ));
- FT_INVALID_OFFSET;
- }
-
- complement = (char)( offset >> 8 );
- if ( complement & 0x08 )
- {
- /* Top bit is set: negative */
-
- /* Calculate the absolute offset */
- complement = (char)( ( complement & 0x07 ) + 1 );
-
- /* The gid for complement must be greater than 0 */
- if ( glyph <= complement )
- {
- GXV_TRACE(( " found non-positive glyph complement\n" ));
- FT_INVALID_DATA;
- }
- }
- else
- {
- /* The gid for complement must be the face. */
- gxv_glyphid_validate( (FT_UShort)( glyph + complement ), gxvalid );
- }
- }
- else
- {
- if ( property & GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET )
- GXV_TRACE(( "glyph %d cannot have complementary bracketing\n",
- glyph ));
- }
-
- /* this is introduced in version 2.0 */
- if ( property & GXV_PROP_ATTACHING_TO_RIGHT )
- {
- if ( GXV_PROP_DATA( version ) == 0x00010000UL )
- {
- GXV_TRACE(( " found older version (1.0) in new version table\n" ));
- FT_INVALID_DATA;
- }
- }
-
- if ( property & GXV_PROP_RESERVED )
- {
- GXV_TRACE(( " found non-zero bits in reserved bits\n" ));
- FT_INVALID_DATA;
- }
-
- if ( ( property & GXV_PROP_DIRECTIONALITY_CLASS ) > 11 )
- {
- /* TODO: Too restricted. Use the validation level. */
- if ( GXV_PROP_DATA( version ) == 0x00010000UL ||
- GXV_PROP_DATA( version ) == 0x00020000UL )
- {
- GXV_TRACE(( " found too old version in directionality class\n" ));
- FT_INVALID_DATA;
- }
- }
- }
-
-
- static void
- gxv_prop_LookupValue_validate( FT_UShort glyph,
- GXV_LookupValueCPtr value_p,
- GXV_Validator gxvalid )
- {
- gxv_prop_property_validate( value_p->u, glyph, gxvalid );
- }
-
-
- /*
- +===============+ --------+
- | lookup header | |
- +===============+ |
- | BinSrchHeader | |
- +===============+ |
- | lastGlyph[0] | |
- +---------------+ |
- | firstGlyph[0] | | head of lookup table
- +---------------+ | +
- | offset[0] | -> | offset [byte]
- +===============+ | +
- | lastGlyph[1] | | (glyphID - firstGlyph) * 2 [byte]
- +---------------+ |
- | firstGlyph[1] | |
- +---------------+ |
- | offset[1] | |
- +===============+ |
- |
- ... |
- |
- 16bit value array |
- +===============+ |
- | value | <-------+
- ...
- */
-
- static GXV_LookupValueDesc
- gxv_prop_LookupFmt4_transit( FT_UShort relative_gindex,
- GXV_LookupValueCPtr base_value_p,
- FT_Bytes lookuptbl_limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p;
- FT_Bytes limit;
- FT_UShort offset;
- GXV_LookupValueDesc value;
-
- /* XXX: check range? */
- offset = (FT_UShort)( base_value_p->u +
- relative_gindex * sizeof ( FT_UShort ) );
- p = gxvalid->lookuptbl_head + offset;
- limit = lookuptbl_limit;
-
- GXV_LIMIT_CHECK ( 2 );
- value.u = FT_NEXT_USHORT( p );
-
- return value;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** prop TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- gxv_prop_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator ftvalid )
- {
- FT_Bytes p = table;
- FT_Bytes limit = 0;
- GXV_ValidatorRec gxvalidrec;
- GXV_Validator gxvalid = &gxvalidrec;
-
- GXV_prop_DataRec proprec;
- GXV_prop_Data prop = &proprec;
-
- FT_Fixed version;
- FT_UShort format;
- FT_UShort defaultProp;
-
-
- gxvalid->root = ftvalid;
- gxvalid->table_data = prop;
- gxvalid->face = face;
-
- FT_TRACE3(( "validating `prop' table\n" ));
- GXV_INIT;
-
- GXV_LIMIT_CHECK( 4 + 2 + 2 );
- version = FT_NEXT_LONG( p );
- format = FT_NEXT_USHORT( p );
- defaultProp = FT_NEXT_USHORT( p );
-
- GXV_TRACE(( " version 0x%08x\n", version ));
- GXV_TRACE(( " format 0x%04x\n", format ));
- GXV_TRACE(( " defaultProp 0x%04x\n", defaultProp ));
-
- /* only versions 1.0, 2.0, 3.0 are defined (1996) */
- if ( version != 0x00010000UL &&
- version != 0x00020000UL &&
- version != 0x00030000UL )
- {
- GXV_TRACE(( " found unknown version\n" ));
- FT_INVALID_FORMAT;
- }
-
-
- /* only formats 0x0000, 0x0001 are defined (1996) */
- if ( format > 1 )
- {
- GXV_TRACE(( " found unknown format\n" ));
- FT_INVALID_FORMAT;
- }
-
- gxv_prop_property_validate( defaultProp, 0, gxvalid );
-
- if ( format == 0 )
- {
- FT_TRACE3(( "(format 0, no per-glyph properties, "
- "remaining %d bytes are skipped)", limit - p ));
- goto Exit;
- }
-
- /* format == 1 */
- GXV_PROP_DATA( version ) = version;
-
- gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- gxvalid->lookupval_func = gxv_prop_LookupValue_validate;
- gxvalid->lookupfmt4_trans = gxv_prop_LookupFmt4_transit;
-
- gxv_LookupTable_validate( p, limit, gxvalid );
-
- Exit:
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/src/gxvalid/gxvtrak.c b/src/gxvalid/gxvtrak.c
deleted file mode 100644
index dd4982556..000000000
--- a/src/gxvalid/gxvtrak.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvtrak.c */
-/* */
-/* TrueTypeGX/AAT trak table validation (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-/***************************************************************************/
-/* */
-/* gxvalid is derived from both gxlayout module and otvalid module. */
-/* Development of gxlayout is supported by the Information-technology */
-/* Promotion Agency(IPA), Japan. */
-/* */
-/***************************************************************************/
-
-
-#include "gxvalid.h"
-#include "gxvcommn.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_gxvtrak
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Data and Types *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*
- * referred track table format specification:
- * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6trak.html
- * last update was 1996.
- * ----------------------------------------------
- * [MINIMUM HEADER]: GXV_TRAK_SIZE_MIN
- * version (fixed: 32bit) = 0x00010000
- * format (uint16: 16bit) = 0 is only defined (1996)
- * horizOffset (uint16: 16bit)
- * vertOffset (uint16: 16bit)
- * reserved (uint16: 16bit) = 0
- * ----------------------------------------------
- * [VARIABLE BODY]:
- * horizData
- * header ( 2 + 2 + 4
- * trackTable + nTracks * ( 4 + 2 + 2 )
- * sizeTable + nSizes * 4 )
- * ----------------------------------------------
- * vertData
- * header ( 2 + 2 + 4
- * trackTable + nTracks * ( 4 + 2 + 2 )
- * sizeTable + nSizes * 4 )
- * ----------------------------------------------
- */
- typedef struct GXV_trak_DataRec_
- {
- FT_UShort trackValueOffset_min;
- FT_UShort trackValueOffset_max;
-
- } GXV_trak_DataRec, *GXV_trak_Data;
-
-
-#define GXV_TRAK_DATA( FIELD ) GXV_TABLE_DATA( trak, FIELD )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** UTILITY FUNCTIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- gxv_trak_trackTable_validate( FT_Bytes table,
- FT_Bytes limit,
- FT_UShort nTracks,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
-
- FT_Fixed track, t;
- FT_UShort nameIndex;
- FT_UShort offset;
- FT_UShort i, j;
-
-
- GXV_NAME_ENTER( "trackTable" );
-
- GXV_TRAK_DATA( trackValueOffset_min ) = 0xFFFFU;
- GXV_TRAK_DATA( trackValueOffset_max ) = 0x0000;
-
- GXV_LIMIT_CHECK( nTracks * ( 4 + 2 + 2 ) );
-
- for ( i = 0; i < nTracks; i++ )
- {
- p = table + i * ( 4 + 2 + 2 );
- track = FT_NEXT_LONG( p );
- nameIndex = FT_NEXT_USHORT( p );
- offset = FT_NEXT_USHORT( p );
-
- if ( offset < GXV_TRAK_DATA( trackValueOffset_min ) )
- GXV_TRAK_DATA( trackValueOffset_min ) = offset;
- if ( offset > GXV_TRAK_DATA( trackValueOffset_max ) )
- GXV_TRAK_DATA( trackValueOffset_max ) = offset;
-
- gxv_sfntName_validate( nameIndex, 256, 32767, gxvalid );
-
- for ( j = i; j < nTracks; j++ )
- {
- p = table + j * ( 4 + 2 + 2 );
- t = FT_NEXT_LONG( p );
- if ( t == track )
- GXV_TRACE(( "duplicated entries found for track value 0x%x\n",
- track ));
- }
- }
-
- gxvalid->subtable_length = (FT_ULong)( p - table );
- GXV_EXIT;
- }
-
-
- static void
- gxv_trak_trackData_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator gxvalid )
- {
- FT_Bytes p = table;
- FT_UShort nTracks;
- FT_UShort nSizes;
- FT_ULong sizeTableOffset;
-
- GXV_ODTECT( 4, odtect );
-
-
- GXV_ODTECT_INIT( odtect );
- GXV_NAME_ENTER( "trackData" );
-
- /* read the header of trackData */
- GXV_LIMIT_CHECK( 2 + 2 + 4 );
- nTracks = FT_NEXT_USHORT( p );
- nSizes = FT_NEXT_USHORT( p );
- sizeTableOffset = FT_NEXT_ULONG( p );
-
- gxv_odtect_add_range( table, (FT_ULong)( p - table ),
- "trackData header", odtect );
-
- /* validate trackTable */
- gxv_trak_trackTable_validate( p, limit, nTracks, gxvalid );
- gxv_odtect_add_range( p, gxvalid->subtable_length,
- "trackTable", odtect );
-
- /* sizeTable is array of FT_Fixed, don't check contents */
- p = gxvalid->root->base + sizeTableOffset;
- GXV_LIMIT_CHECK( nSizes * 4 );
- gxv_odtect_add_range( p, nSizes * 4, "sizeTable", odtect );
-
- /* validate trackValueOffet */
- p = gxvalid->root->base + GXV_TRAK_DATA( trackValueOffset_min );
- if ( limit - p < nTracks * nSizes * 2 )
- GXV_TRACE(( "too short trackValue array\n" ));
-
- p = gxvalid->root->base + GXV_TRAK_DATA( trackValueOffset_max );
- GXV_LIMIT_CHECK( nSizes * 2 );
-
- gxv_odtect_add_range( gxvalid->root->base
- + GXV_TRAK_DATA( trackValueOffset_min ),
- GXV_TRAK_DATA( trackValueOffset_max )
- - GXV_TRAK_DATA( trackValueOffset_min )
- + nSizes * 2,
- "trackValue array", odtect );
-
- gxv_odtect_validate( odtect, gxvalid );
-
- GXV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** trak TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- gxv_trak_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator ftvalid )
- {
- FT_Bytes p = table;
- FT_Bytes limit = 0;
-
- GXV_ValidatorRec gxvalidrec;
- GXV_Validator gxvalid = &gxvalidrec;
- GXV_trak_DataRec trakrec;
- GXV_trak_Data trak = &trakrec;
-
- FT_ULong version;
- FT_UShort format;
- FT_UShort horizOffset;
- FT_UShort vertOffset;
- FT_UShort reserved;
-
-
- GXV_ODTECT( 3, odtect );
-
- GXV_ODTECT_INIT( odtect );
- gxvalid->root = ftvalid;
- gxvalid->table_data = trak;
- gxvalid->face = face;
-
- limit = gxvalid->root->limit;
-
- FT_TRACE3(( "validating `trak' table\n" ));
- GXV_INIT;
-
- GXV_LIMIT_CHECK( 4 + 2 + 2 + 2 + 2 );
- version = FT_NEXT_ULONG( p );
- format = FT_NEXT_USHORT( p );
- horizOffset = FT_NEXT_USHORT( p );
- vertOffset = FT_NEXT_USHORT( p );
- reserved = FT_NEXT_USHORT( p );
-
- GXV_TRACE(( " (version = 0x%08x)\n", version ));
- GXV_TRACE(( " (format = 0x%04x)\n", format ));
- GXV_TRACE(( " (horizOffset = 0x%04x)\n", horizOffset ));
- GXV_TRACE(( " (vertOffset = 0x%04x)\n", vertOffset ));
- GXV_TRACE(( " (reserved = 0x%04x)\n", reserved ));
-
- /* Version 1.0 (always:1996) */
- if ( version != 0x00010000UL )
- FT_INVALID_FORMAT;
-
- /* format 0 (always:1996) */
- if ( format != 0x0000 )
- FT_INVALID_FORMAT;
-
- GXV_32BIT_ALIGNMENT_VALIDATE( horizOffset );
- GXV_32BIT_ALIGNMENT_VALIDATE( vertOffset );
-
- /* Reserved Fixed Value (always) */
- if ( reserved != 0x0000 )
- FT_INVALID_DATA;
-
- /* validate trackData */
- if ( 0 < horizOffset )
- {
- gxv_trak_trackData_validate( table + horizOffset, limit, gxvalid );
- gxv_odtect_add_range( table + horizOffset, gxvalid->subtable_length,
- "horizJustData", odtect );
- }
-
- if ( 0 < vertOffset )
- {
- gxv_trak_trackData_validate( table + vertOffset, limit, gxvalid );
- gxv_odtect_add_range( table + vertOffset, gxvalid->subtable_length,
- "vertJustData", odtect );
- }
-
- gxv_odtect_validate( odtect, gxvalid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/src/gxvalid/module.mk b/src/gxvalid/module.mk
deleted file mode 100644
index 7f87e1081..000000000
--- a/src/gxvalid/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 gxvalid module definition
-#
-
-# Copyright 2004-2017 by
-# suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += GXVALID_MODULE
-
-define GXVALID_MODULE
-$(OPEN_DRIVER) FT_Module_Class, gxv_module_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)gxvalid $(ECHO_DRIVER_DESC)TrueTypeGX/AAT validation module$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/gxvalid/rules.mk b/src/gxvalid/rules.mk
deleted file mode 100644
index 10ec08c5b..000000000
--- a/src/gxvalid/rules.mk
+++ /dev/null
@@ -1,98 +0,0 @@
-#
-# FreeType 2 TrueTypeGX/AAT validation driver configuration rules
-#
-
-
-# Copyright 2004-2017 by
-# suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# GXV driver directory
-#
-GXV_DIR := $(SRC_DIR)/gxvalid
-
-
-# compilation flags for the driver
-#
-GXV_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(GXV_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# GXV driver sources (i.e., C files)
-#
-GXV_DRV_SRC := $(GXV_DIR)/gxvcommn.c \
- $(GXV_DIR)/gxvfeat.c \
- $(GXV_DIR)/gxvbsln.c \
- $(GXV_DIR)/gxvtrak.c \
- $(GXV_DIR)/gxvopbd.c \
- $(GXV_DIR)/gxvprop.c \
- $(GXV_DIR)/gxvjust.c \
- $(GXV_DIR)/gxvmort.c \
- $(GXV_DIR)/gxvmort0.c \
- $(GXV_DIR)/gxvmort1.c \
- $(GXV_DIR)/gxvmort2.c \
- $(GXV_DIR)/gxvmort4.c \
- $(GXV_DIR)/gxvmort5.c \
- $(GXV_DIR)/gxvmorx.c \
- $(GXV_DIR)/gxvmorx0.c \
- $(GXV_DIR)/gxvmorx1.c \
- $(GXV_DIR)/gxvmorx2.c \
- $(GXV_DIR)/gxvmorx4.c \
- $(GXV_DIR)/gxvmorx5.c \
- $(GXV_DIR)/gxvlcar.c \
- $(GXV_DIR)/gxvkern.c \
- $(GXV_DIR)/gxvmod.c
-
-# GXV driver headers
-#
-GXV_DRV_H := $(GXV_DIR)/gxvalid.h \
- $(GXV_DIR)/gxverror.h \
- $(GXV_DIR)/gxvcommn.h \
- $(GXV_DIR)/gxvfeat.h \
- $(GXV_DIR)/gxvmod.h \
- $(GXV_DIR)/gxvmort.h \
- $(GXV_DIR)/gxvmorx.h
-
-
-# GXV driver object(s)
-#
-# GXV_DRV_OBJ_M is used during `multi' builds.
-# GXV_DRV_OBJ_S is used during `single' builds.
-#
-GXV_DRV_OBJ_M := $(GXV_DRV_SRC:$(GXV_DIR)/%.c=$(OBJ_DIR)/%.$O)
-GXV_DRV_OBJ_S := $(OBJ_DIR)/gxvalid.$O
-
-# GXV driver source file for single build
-#
-GXV_DRV_SRC_S := $(GXV_DIR)/gxvalid.c
-
-
-# GXV driver - single object
-#
-$(GXV_DRV_OBJ_S): $(GXV_DRV_SRC_S) $(GXV_DRV_SRC) \
- $(FREETYPE_H) $(GXV_DRV_H)
- $(GXV_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(GXV_DRV_SRC_S))
-
-
-# GXV driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(GXV_DIR)/%.c $(FREETYPE_H) $(GXV_DRV_H)
- $(GXV_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(GXV_DRV_OBJ_S)
-DRV_OBJS_M += $(GXV_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/gzip/Jamfile b/src/gzip/Jamfile
deleted file mode 100644
index 170c13a4c..000000000
--- a/src/gzip/Jamfile
+++ /dev/null
@@ -1,16 +0,0 @@
-# FreeType 2 src/gzip Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) gzip ;
-
-Library $(FT2_LIB) : ftgzip.c ;
-
-# end of src/pcf Jamfile
diff --git a/src/gzip/adler32.c b/src/gzip/adler32.c
deleted file mode 100644
index c53f9dd12..000000000
--- a/src/gzip/adler32.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* adler32.c -- compute the Adler-32 checksum of a data stream
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#include "zlib.h"
-
-#define BASE 65521L /* largest prime smaller than 65536 */
-#define NMAX 5552
-/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
-
-#define DO1(buf,i) {s1 += buf[i]; s2 += s1;}
-#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
-#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
-#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
-#define DO16(buf) DO8(buf,0); DO8(buf,8);
-
-/* ========================================================================= */
-ZEXPORT(uLong) adler32( /* adler, buf, len) */
- uLong adler,
- const Bytef *buf,
- uInt len )
-{
- unsigned long s1 = adler & 0xffff;
- unsigned long s2 = (adler >> 16) & 0xffff;
- int k;
-
- if (buf == Z_NULL) return 1L;
-
- while (len > 0) {
- k = len < NMAX ? len : NMAX;
- len -= k;
- while (k >= 16) {
- DO16(buf);
- buf += 16;
- k -= 16;
- }
- if (k != 0) do {
- s1 += *buf++;
- s2 += s1;
- } while (--k);
- s1 %= BASE;
- s2 %= BASE;
- }
- return (s2 << 16) | s1;
-}
diff --git a/src/gzip/ftgzip.c b/src/gzip/ftgzip.c
deleted file mode 100644
index c487786d9..000000000
--- a/src/gzip/ftgzip.c
+++ /dev/null
@@ -1,816 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgzip.c */
-/* */
-/* FreeType support for .gz compressed files. */
-/* */
-/* This optional component relies on zlib. It should mainly be used to */
-/* parse compressed PCF fonts, as found with many X11 server */
-/* distributions. */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_GZIP_H
-#include FT_CONFIG_STANDARD_LIBRARY_H
-
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX Gzip_Err_
-#define FT_ERR_BASE FT_Mod_Err_Gzip
-
-#include FT_ERRORS_H
-
-
-#ifdef FT_CONFIG_OPTION_USE_ZLIB
-
-#ifdef FT_CONFIG_OPTION_PIC
-#error "gzip code does not support PIC yet"
-#endif
-
-#ifdef FT_CONFIG_OPTION_SYSTEM_ZLIB
-
-#include <zlib.h>
-
-#else /* !FT_CONFIG_OPTION_SYSTEM_ZLIB */
-
- /* In this case, we include our own modified sources of the ZLib */
- /* within the `gzip' component. The modifications were necessary */
- /* to #include all files without conflicts, as well as preventing */
- /* the definition of `extern' functions that may cause linking */
- /* conflicts when a program is linked with both FreeType and the */
- /* original ZLib. */
-
-#ifndef USE_ZLIB_ZCALLOC
-#define MY_ZCALLOC /* prevent all zcalloc() & zfree() in zutil.c */
-#endif
-
- /* Note that our `zlib.h' includes `ftzconf.h' instead of `zconf.h'; */
- /* the main reason is that even a global `zlib.h' includes `zconf.h' */
- /* with */
- /* */
- /* #include "zconf.h" */
- /* */
- /* instead of the expected */
- /* */
- /* #include <zconf.h> */
- /* */
- /* so that configuration with `FT_CONFIG_OPTION_SYSTEM_ZLIB' might */
- /* include the wrong `zconf.h' file, leading to errors. */
-#include "zlib.h"
-
-#undef SLOW
-#define SLOW 1 /* we can't use asm-optimized sources here! */
-
-#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */
- /* We disable the warning `conversion from XXX to YYY, */
- /* possible loss of data' in order to compile cleanly with */
- /* the maximum level of warnings: zlib is non-FreeType */
- /* code. */
-#pragma warning( push )
-#pragma warning( disable : 4244 )
-#endif /* _MSC_VER */
-
- /* Urgh. `inflate_mask' must not be declared twice -- C++ doesn't like
- this. We temporarily disable it and load all necessary header files. */
-#define NO_INFLATE_MASK
-#include "zutil.h"
-#include "inftrees.h"
-#include "infblock.h"
-#include "infcodes.h"
-#include "infutil.h"
-#undef NO_INFLATE_MASK
-
- /* infutil.c must be included before infcodes.c */
-#include "zutil.c"
-#include "inftrees.c"
-#include "infutil.c"
-#include "infcodes.c"
-#include "infblock.c"
-#include "inflate.c"
-#include "adler32.c"
-
-#if defined( _MSC_VER )
-#pragma warning( pop )
-#endif
-
-#endif /* !FT_CONFIG_OPTION_SYSTEM_ZLIB */
-
-
-/***************************************************************************/
-/***************************************************************************/
-/***** *****/
-/***** Z L I B M E M O R Y M A N A G E M E N T *****/
-/***** *****/
-/***************************************************************************/
-/***************************************************************************/
-
- /* it is better to use FreeType memory routines instead of raw
- 'malloc/free' */
-
- static voidpf
- ft_gzip_alloc( FT_Memory memory,
- uInt items,
- uInt size )
- {
- FT_ULong sz = (FT_ULong)size * items;
- FT_Error error;
- FT_Pointer p = NULL;
-
-
- (void)FT_ALLOC( p, sz );
- return p;
- }
-
-
- static void
- ft_gzip_free( FT_Memory memory,
- voidpf address )
- {
- FT_MEM_FREE( address );
- }
-
-
-#if !defined( FT_CONFIG_OPTION_SYSTEM_ZLIB ) && !defined( USE_ZLIB_ZCALLOC )
-
- local voidpf
- zcalloc ( voidpf opaque,
- unsigned items,
- unsigned size )
- {
- return ft_gzip_alloc( (FT_Memory)opaque, items, size );
- }
-
- local void
- zcfree( voidpf opaque,
- voidpf ptr )
- {
- ft_gzip_free( (FT_Memory)opaque, ptr );
- }
-
-#endif /* !SYSTEM_ZLIB && !USE_ZLIB_ZCALLOC */
-
-
-/***************************************************************************/
-/***************************************************************************/
-/***** *****/
-/***** Z L I B F I L E D E S C R I P T O R *****/
-/***** *****/
-/***************************************************************************/
-/***************************************************************************/
-
-#define FT_GZIP_BUFFER_SIZE 4096
-
- typedef struct FT_GZipFileRec_
- {
- FT_Stream source; /* parent/source stream */
- FT_Stream stream; /* embedding stream */
- FT_Memory memory; /* memory allocator */
- z_stream zstream; /* zlib input stream */
-
- FT_ULong start; /* starting position, after .gz header */
- FT_Byte input[FT_GZIP_BUFFER_SIZE]; /* input read buffer */
-
- FT_Byte buffer[FT_GZIP_BUFFER_SIZE]; /* output buffer */
- FT_ULong pos; /* position in output */
- FT_Byte* cursor;
- FT_Byte* limit;
-
- } FT_GZipFileRec, *FT_GZipFile;
-
-
- /* gzip flag byte */
-#define FT_GZIP_ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */
-#define FT_GZIP_HEAD_CRC 0x02 /* bit 1 set: header CRC present */
-#define FT_GZIP_EXTRA_FIELD 0x04 /* bit 2 set: extra field present */
-#define FT_GZIP_ORIG_NAME 0x08 /* bit 3 set: original file name present */
-#define FT_GZIP_COMMENT 0x10 /* bit 4 set: file comment present */
-#define FT_GZIP_RESERVED 0xE0 /* bits 5..7: reserved */
-
-
- /* check and skip .gz header - we don't support `transparent' compression */
- static FT_Error
- ft_gzip_check_header( FT_Stream stream )
- {
- FT_Error error;
- FT_Byte head[4];
-
-
- if ( FT_STREAM_SEEK( 0 ) ||
- FT_STREAM_READ( head, 4 ) )
- goto Exit;
-
- /* head[0] && head[1] are the magic numbers; */
- /* head[2] is the method, and head[3] the flags */
- if ( head[0] != 0x1F ||
- head[1] != 0x8B ||
- head[2] != Z_DEFLATED ||
- (head[3] & FT_GZIP_RESERVED) )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* skip time, xflags and os code */
- (void)FT_STREAM_SKIP( 6 );
-
- /* skip the extra field */
- if ( head[3] & FT_GZIP_EXTRA_FIELD )
- {
- FT_UInt len;
-
-
- if ( FT_READ_USHORT_LE( len ) ||
- FT_STREAM_SKIP( len ) )
- goto Exit;
- }
-
- /* skip original file name */
- if ( head[3] & FT_GZIP_ORIG_NAME )
- for (;;)
- {
- FT_UInt c;
-
-
- if ( FT_READ_BYTE( c ) )
- goto Exit;
-
- if ( c == 0 )
- break;
- }
-
- /* skip .gz comment */
- if ( head[3] & FT_GZIP_COMMENT )
- for (;;)
- {
- FT_UInt c;
-
-
- if ( FT_READ_BYTE( c ) )
- goto Exit;
-
- if ( c == 0 )
- break;
- }
-
- /* skip CRC */
- if ( head[3] & FT_GZIP_HEAD_CRC )
- if ( FT_STREAM_SKIP( 2 ) )
- goto Exit;
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- ft_gzip_file_init( FT_GZipFile zip,
- FT_Stream stream,
- FT_Stream source )
- {
- z_stream* zstream = &zip->zstream;
- FT_Error error = FT_Err_Ok;
-
-
- zip->stream = stream;
- zip->source = source;
- zip->memory = stream->memory;
-
- zip->limit = zip->buffer + FT_GZIP_BUFFER_SIZE;
- zip->cursor = zip->limit;
- zip->pos = 0;
-
- /* check and skip .gz header */
- {
- stream = source;
-
- error = ft_gzip_check_header( stream );
- if ( error )
- goto Exit;
-
- zip->start = FT_STREAM_POS();
- }
-
- /* initialize zlib -- there is no zlib header in the compressed stream */
- zstream->zalloc = (alloc_func)ft_gzip_alloc;
- zstream->zfree = (free_func) ft_gzip_free;
- zstream->opaque = stream->memory;
-
- zstream->avail_in = 0;
- zstream->next_in = zip->buffer;
-
- if ( inflateInit2( zstream, -MAX_WBITS ) != Z_OK ||
- !zstream->next_in )
- error = FT_THROW( Invalid_File_Format );
-
- Exit:
- return error;
- }
-
-
- static void
- ft_gzip_file_done( FT_GZipFile zip )
- {
- z_stream* zstream = &zip->zstream;
-
-
- inflateEnd( zstream );
-
- /* clear the rest */
- zstream->zalloc = NULL;
- zstream->zfree = NULL;
- zstream->opaque = NULL;
- zstream->next_in = NULL;
- zstream->next_out = NULL;
- zstream->avail_in = 0;
- zstream->avail_out = 0;
-
- zip->memory = NULL;
- zip->source = NULL;
- zip->stream = NULL;
- }
-
-
- static FT_Error
- ft_gzip_file_reset( FT_GZipFile zip )
- {
- FT_Stream stream = zip->source;
- FT_Error error;
-
-
- if ( !FT_STREAM_SEEK( zip->start ) )
- {
- z_stream* zstream = &zip->zstream;
-
-
- inflateReset( zstream );
-
- zstream->avail_in = 0;
- zstream->next_in = zip->input;
- zstream->avail_out = 0;
- zstream->next_out = zip->buffer;
-
- zip->limit = zip->buffer + FT_GZIP_BUFFER_SIZE;
- zip->cursor = zip->limit;
- zip->pos = 0;
- }
-
- return error;
- }
-
-
- static FT_Error
- ft_gzip_file_fill_input( FT_GZipFile zip )
- {
- z_stream* zstream = &zip->zstream;
- FT_Stream stream = zip->source;
- FT_ULong size;
-
-
- if ( stream->read )
- {
- size = stream->read( stream, stream->pos, zip->input,
- FT_GZIP_BUFFER_SIZE );
- if ( size == 0 )
- {
- zip->limit = zip->cursor;
- return FT_THROW( Invalid_Stream_Operation );
- }
- }
- else
- {
- size = stream->size - stream->pos;
- if ( size > FT_GZIP_BUFFER_SIZE )
- size = FT_GZIP_BUFFER_SIZE;
-
- if ( size == 0 )
- {
- zip->limit = zip->cursor;
- return FT_THROW( Invalid_Stream_Operation );
- }
-
- FT_MEM_COPY( zip->input, stream->base + stream->pos, size );
- }
- stream->pos += size;
-
- zstream->next_in = zip->input;
- zstream->avail_in = size;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Error
- ft_gzip_file_fill_output( FT_GZipFile zip )
- {
- z_stream* zstream = &zip->zstream;
- FT_Error error = FT_Err_Ok;
-
-
- zip->cursor = zip->buffer;
- zstream->next_out = zip->cursor;
- zstream->avail_out = FT_GZIP_BUFFER_SIZE;
-
- while ( zstream->avail_out > 0 )
- {
- int err;
-
-
- if ( zstream->avail_in == 0 )
- {
- error = ft_gzip_file_fill_input( zip );
- if ( error )
- break;
- }
-
- err = inflate( zstream, Z_NO_FLUSH );
-
- if ( err == Z_STREAM_END )
- {
- zip->limit = zstream->next_out;
- if ( zip->limit == zip->cursor )
- error = FT_THROW( Invalid_Stream_Operation );
- break;
- }
- else if ( err != Z_OK )
- {
- zip->limit = zip->cursor;
- error = FT_THROW( Invalid_Stream_Operation );
- break;
- }
- }
-
- return error;
- }
-
-
- /* fill output buffer; `count' must be <= FT_GZIP_BUFFER_SIZE */
- static FT_Error
- ft_gzip_file_skip_output( FT_GZipFile zip,
- FT_ULong count )
- {
- FT_Error error = FT_Err_Ok;
- FT_ULong delta;
-
-
- for (;;)
- {
- delta = (FT_ULong)( zip->limit - zip->cursor );
- if ( delta >= count )
- delta = count;
-
- zip->cursor += delta;
- zip->pos += delta;
-
- count -= delta;
- if ( count == 0 )
- break;
-
- error = ft_gzip_file_fill_output( zip );
- if ( error )
- break;
- }
-
- return error;
- }
-
-
- static FT_ULong
- ft_gzip_file_io( FT_GZipFile zip,
- FT_ULong pos,
- FT_Byte* buffer,
- FT_ULong count )
- {
- FT_ULong result = 0;
- FT_Error error;
-
-
- /* Reset inflate stream if we're seeking backwards. */
- /* Yes, that is not too efficient, but it saves memory :-) */
- if ( pos < zip->pos )
- {
- error = ft_gzip_file_reset( zip );
- if ( error )
- goto Exit;
- }
-
- /* skip unwanted bytes */
- if ( pos > zip->pos )
- {
- error = ft_gzip_file_skip_output( zip, (FT_ULong)( pos - zip->pos ) );
- if ( error )
- goto Exit;
- }
-
- if ( count == 0 )
- goto Exit;
-
- /* now read the data */
- for (;;)
- {
- FT_ULong delta;
-
-
- delta = (FT_ULong)( zip->limit - zip->cursor );
- if ( delta >= count )
- delta = count;
-
- FT_MEM_COPY( buffer, zip->cursor, delta );
- buffer += delta;
- result += delta;
- zip->cursor += delta;
- zip->pos += delta;
-
- count -= delta;
- if ( count == 0 )
- break;
-
- error = ft_gzip_file_fill_output( zip );
- if ( error )
- break;
- }
-
- Exit:
- return result;
- }
-
-
-/***************************************************************************/
-/***************************************************************************/
-/***** *****/
-/***** G Z E M B E D D I N G S T R E A M *****/
-/***** *****/
-/***************************************************************************/
-/***************************************************************************/
-
- static void
- ft_gzip_stream_close( FT_Stream stream )
- {
- FT_GZipFile zip = (FT_GZipFile)stream->descriptor.pointer;
- FT_Memory memory = stream->memory;
-
-
- if ( zip )
- {
- /* finalize gzip file descriptor */
- ft_gzip_file_done( zip );
-
- FT_FREE( zip );
-
- stream->descriptor.pointer = NULL;
- }
-
- if ( !stream->read )
- FT_FREE( stream->base );
- }
-
-
- static unsigned long
- ft_gzip_stream_io( FT_Stream stream,
- unsigned long offset,
- unsigned char* buffer,
- unsigned long count )
- {
- FT_GZipFile zip = (FT_GZipFile)stream->descriptor.pointer;
-
-
- return ft_gzip_file_io( zip, offset, buffer, count );
- }
-
-
- static FT_ULong
- ft_gzip_get_uncompressed_size( FT_Stream stream )
- {
- FT_Error error;
- FT_ULong old_pos;
- FT_ULong result = 0;
-
-
- old_pos = stream->pos;
- if ( !FT_Stream_Seek( stream, stream->size - 4 ) )
- {
- result = FT_Stream_ReadULongLE( stream, &error );
- if ( error )
- result = 0;
-
- (void)FT_Stream_Seek( stream, old_pos );
- }
-
- return result;
- }
-
-
- /* documentation is in ftgzip.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stream_OpenGzip( FT_Stream stream,
- FT_Stream source )
- {
- FT_Error error;
- FT_Memory memory;
- FT_GZipFile zip = NULL;
-
-
- if ( !stream || !source )
- {
- error = FT_THROW( Invalid_Stream_Handle );
- goto Exit;
- }
-
- memory = source->memory;
-
- /*
- * check the header right now; this prevents allocating un-necessary
- * objects when we don't need them
- */
- error = ft_gzip_check_header( source );
- if ( error )
- goto Exit;
-
- FT_ZERO( stream );
- stream->memory = memory;
-
- if ( !FT_QNEW( zip ) )
- {
- error = ft_gzip_file_init( zip, stream, source );
- if ( error )
- {
- FT_FREE( zip );
- goto Exit;
- }
-
- stream->descriptor.pointer = zip;
- }
-
- /*
- * We use the following trick to try to dramatically improve the
- * performance while dealing with small files. If the original stream
- * size is less than a certain threshold, we try to load the whole font
- * file into memory. This saves us from using the 32KB buffer needed
- * to inflate the file, plus the two 4KB intermediate input/output
- * buffers used in the `FT_GZipFile' structure.
- */
- {
- FT_ULong zip_size = ft_gzip_get_uncompressed_size( source );
-
-
- if ( zip_size != 0 && zip_size < 40 * 1024 )
- {
- FT_Byte* zip_buff = NULL;
-
-
- if ( !FT_ALLOC( zip_buff, zip_size ) )
- {
- FT_ULong count;
-
-
- count = ft_gzip_file_io( zip, 0, zip_buff, zip_size );
- if ( count == zip_size )
- {
- ft_gzip_file_done( zip );
- FT_FREE( zip );
-
- stream->descriptor.pointer = NULL;
-
- stream->size = zip_size;
- stream->pos = 0;
- stream->base = zip_buff;
- stream->read = NULL;
- stream->close = ft_gzip_stream_close;
-
- goto Exit;
- }
-
- ft_gzip_file_io( zip, 0, NULL, 0 );
- FT_FREE( zip_buff );
- }
- error = FT_Err_Ok;
- }
-
- if ( zip_size )
- stream->size = zip_size;
- else
- stream->size = 0x7FFFFFFFL; /* don't know the real size! */
- }
-
- stream->pos = 0;
- stream->base = NULL;
- stream->read = ft_gzip_stream_io;
- stream->close = ft_gzip_stream_close;
-
- Exit:
- return error;
- }
-
-
- /* documentation is in ftgzip.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Gzip_Uncompress( FT_Memory memory,
- FT_Byte* output,
- FT_ULong* output_len,
- const FT_Byte* input,
- FT_ULong input_len )
- {
- z_stream stream;
- int err;
-
-
- /* check for `input' delayed to `inflate' */
-
- if ( !memory || ! output_len || !output )
- return FT_THROW( Invalid_Argument );
-
- /* this function is modeled after zlib's `uncompress' function */
-
- stream.next_in = (Bytef*)input;
- stream.avail_in = (uInt)input_len;
-
- stream.next_out = output;
- stream.avail_out = (uInt)*output_len;
-
- stream.zalloc = (alloc_func)ft_gzip_alloc;
- stream.zfree = (free_func) ft_gzip_free;
- stream.opaque = memory;
-
- err = inflateInit2( &stream, MAX_WBITS );
- if ( err != Z_OK )
- return FT_THROW( Invalid_Argument );
-
- err = inflate( &stream, Z_FINISH );
- if ( err != Z_STREAM_END )
- {
- inflateEnd( &stream );
- if ( err == Z_OK )
- err = Z_BUF_ERROR;
- }
- else
- {
- *output_len = stream.total_out;
-
- err = inflateEnd( &stream );
- }
-
- if ( err == Z_MEM_ERROR )
- return FT_THROW( Out_Of_Memory );
-
- if ( err == Z_BUF_ERROR )
- return FT_THROW( Array_Too_Large );
-
- if ( err == Z_DATA_ERROR )
- return FT_THROW( Invalid_Table );
-
- return FT_Err_Ok;
- }
-
-
-#else /* !FT_CONFIG_OPTION_USE_ZLIB */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stream_OpenGzip( FT_Stream stream,
- FT_Stream source )
- {
- FT_UNUSED( stream );
- FT_UNUSED( source );
-
- return FT_THROW( Unimplemented_Feature );
- }
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_Gzip_Uncompress( FT_Memory memory,
- FT_Byte* output,
- FT_ULong* output_len,
- const FT_Byte* input,
- FT_ULong input_len )
- {
- FT_UNUSED( memory );
- FT_UNUSED( output );
- FT_UNUSED( output_len );
- FT_UNUSED( input );
- FT_UNUSED( input_len );
-
- return FT_THROW( Unimplemented_Feature );
- }
-
-#endif /* !FT_CONFIG_OPTION_USE_ZLIB */
-
-
-/* END */
diff --git a/src/gzip/ftzconf.h b/src/gzip/ftzconf.h
deleted file mode 100644
index 3abf0ba03..000000000
--- a/src/gzip/ftzconf.h
+++ /dev/null
@@ -1,284 +0,0 @@
-/* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2002 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#ifndef _ZCONF_H
-#define _ZCONF_H
-
-/*
- * If you *really* need a unique prefix for all types and library functions,
- * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
- */
-#ifdef Z_PREFIX
-# define deflateInit_ z_deflateInit_
-# define deflate z_deflate
-# define deflateEnd z_deflateEnd
-# define inflateInit_ z_inflateInit_
-# define inflate z_inflate
-# define inflateEnd z_inflateEnd
-# define deflateInit2_ z_deflateInit2_
-# define deflateSetDictionary z_deflateSetDictionary
-# define deflateCopy z_deflateCopy
-# define deflateReset z_deflateReset
-# define deflateParams z_deflateParams
-# define inflateInit2_ z_inflateInit2_
-# define inflateSetDictionary z_inflateSetDictionary
-# define inflateSync z_inflateSync
-# define inflateSyncPoint z_inflateSyncPoint
-# define inflateReset z_inflateReset
-# define compress z_compress
-# define compress2 z_compress2
-# define uncompress z_uncompress
-# define adler32 z_adler32
-# define crc32 z_crc32
-# define get_crc_table z_get_crc_table
-
-# define Byte z_Byte
-# define uInt z_uInt
-# define uLong z_uLong
-# define Bytef z_Bytef
-# define charf z_charf
-# define intf z_intf
-# define uIntf z_uIntf
-# define uLongf z_uLongf
-# define voidpf z_voidpf
-# define voidp z_voidp
-#endif
-
-#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
-# define WIN32
-#endif
-#if defined(__GNUC__) || defined(WIN32) || defined(__386__) || defined(i386)
-# ifndef __32BIT__
-# define __32BIT__
-# endif
-#endif
-#if defined(__MSDOS__) && !defined(MSDOS)
-# define MSDOS
-#endif
-
-/* WinCE doesn't have errno.h */
-#ifdef _WIN32_WCE
-# define NO_ERRNO_H
-#endif
-
-
-/*
- * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
- * than 64k bytes at a time (needed on systems with 16-bit int).
- */
-#if defined(MSDOS) && !defined(__32BIT__)
-# define MAXSEG_64K
-#endif
-#ifdef MSDOS
-# define UNALIGNED_OK
-#endif
-
-#if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32)) && !defined(STDC)
-# define STDC
-#endif
-#if defined(__STDC__) || defined(__cplusplus) || defined(__OS2__)
-# ifndef STDC
-# define STDC
-# endif
-#endif
-
-#ifndef STDC
-# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
-# define const
-# endif
-#endif
-
-/* Some Mac compilers merge all .h files incorrectly: */
-#if defined(__MWERKS__) || defined(applec) ||defined(THINK_C) ||defined(__SC__)
-# define NO_DUMMY_DECL
-#endif
-
-/* Old Borland C and LCC incorrectly complains about missing returns: */
-#if defined(__BORLANDC__) && (__BORLANDC__ < 0x500)
-# define NEED_DUMMY_RETURN
-#endif
-
-#if defined(__LCC__)
-# define NEED_DUMMY_RETURN
-#endif
-
-/* Maximum value for memLevel in deflateInit2 */
-#ifndef MAX_MEM_LEVEL
-# ifdef MAXSEG_64K
-# define MAX_MEM_LEVEL 8
-# else
-# define MAX_MEM_LEVEL 9
-# endif
-#endif
-
-/* Maximum value for windowBits in deflateInit2 and inflateInit2.
- * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
- * created by gzip. (Files created by minigzip can still be extracted by
- * gzip.)
- */
-#ifndef MAX_WBITS
-# define MAX_WBITS 15 /* 32K LZ77 window */
-#endif
-
-/* The memory requirements for deflate are (in bytes):
- (1 << (windowBits+2)) + (1 << (memLevel+9))
- that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
- plus a few kilobytes for small objects. For example, if you want to reduce
- the default memory requirements from 256K to 128K, compile with
- make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
- Of course this will generally degrade compression (there's no free lunch).
-
- The memory requirements for inflate are (in bytes) 1 << windowBits
- that is, 32K for windowBits=15 (default value) plus a few kilobytes
- for small objects.
-*/
-
- /* Type declarations */
-
-#ifndef OF /* function prototypes */
-# ifdef STDC
-# define OF(args) args
-# else
-# define OF(args) ()
-# endif
-#endif
-
-/* The following definitions for FAR are needed only for MSDOS mixed
- * model programming (small or medium model with some far allocations).
- * This was tested only with MSC; for other MSDOS compilers you may have
- * to define NO_MEMCPY in zutil.h. If you don't need the mixed model,
- * just define FAR to be empty.
- */
-#if (defined(M_I86SM) || defined(M_I86MM)) && !defined(__32BIT__)
- /* MSC small or medium model */
-# define SMALL_MEDIUM
-# ifdef _MSC_VER
-# define FAR _far
-# else
-# define FAR far
-# endif
-#endif
-#if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__))
-# ifndef __32BIT__
-# define SMALL_MEDIUM
-# define FAR _far
-# endif
-#endif
-
-/* Compile with -DZLIB_DLL for Windows DLL support */
-#if defined(ZLIB_DLL)
-# if defined(_WINDOWS) || defined(WINDOWS)
-# ifdef FAR
-# undef FAR
-# endif
-# include <windows.h>
-# define ZEXPORT(x) x WINAPI
-# ifdef WIN32
-# define ZEXPORTVA(x) x WINAPIV
-# else
-# define ZEXPORTVA(x) x FAR _cdecl _export
-# endif
-# endif
-# if defined (__BORLANDC__)
-# if (__BORLANDC__ >= 0x0500) && defined (WIN32)
-# include <windows.h>
-# define ZEXPORT(x) x __declspec(dllexport) WINAPI
-# define ZEXPORTRVA(x) x __declspec(dllexport) WINAPIV
-# else
-# if defined (_Windows) && defined (__DLL__)
-# define ZEXPORT(x) x _export
-# define ZEXPORTVA(x) x _export
-# endif
-# endif
-# endif
-#endif
-
-
-#ifndef ZEXPORT
-# define ZEXPORT(x) static x
-#endif
-#ifndef ZEXPORTVA
-# define ZEXPORTVA(x) static x
-#endif
-#ifndef ZEXTERN
-# define ZEXTERN(x) static x
-#endif
-#ifndef ZEXTERNDEF
-# define ZEXTERNDEF(x) static x
-#endif
-
-#ifndef FAR
-# define FAR
-#endif
-
-#if !defined(MACOS) && !defined(TARGET_OS_MAC)
-typedef unsigned char Byte; /* 8 bits */
-#endif
-typedef unsigned int uInt; /* 16 bits or more */
-typedef unsigned long uLong; /* 32 bits or more */
-
-#ifdef SMALL_MEDIUM
- /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
-# define Bytef Byte FAR
-#else
- typedef Byte FAR Bytef;
-#endif
-typedef char FAR charf;
-typedef int FAR intf;
-typedef uInt FAR uIntf;
-typedef uLong FAR uLongf;
-
-#ifdef STDC
- typedef void FAR *voidpf;
- typedef void *voidp;
-#else
- typedef Byte FAR *voidpf;
- typedef Byte *voidp;
-#endif
-
-#ifdef HAVE_UNISTD_H
-# include <sys/types.h> /* for off_t */
-# include <unistd.h> /* for SEEK_* and off_t */
-# define z_off_t off_t
-#endif
-#ifndef SEEK_SET
-# define SEEK_SET 0 /* Seek from beginning of file. */
-# define SEEK_CUR 1 /* Seek from current position. */
-# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
-#endif
-#ifndef z_off_t
-# define z_off_t long
-#endif
-
-/* MVS linker does not support external names larger than 8 bytes */
-#if defined(__MVS__)
-# pragma map(deflateInit_,"DEIN")
-# pragma map(deflateInit2_,"DEIN2")
-# pragma map(deflateEnd,"DEEND")
-# pragma map(inflateInit_,"ININ")
-# pragma map(inflateInit2_,"ININ2")
-# pragma map(inflateEnd,"INEND")
-# pragma map(inflateSync,"INSY")
-# pragma map(inflateSetDictionary,"INSEDI")
-# pragma map(inflate_blocks,"INBL")
-# pragma map(inflate_blocks_new,"INBLNE")
-# pragma map(inflate_blocks_free,"INBLFR")
-# pragma map(inflate_blocks_reset,"INBLRE")
-# pragma map(inflate_codes_free,"INCOFR")
-# pragma map(inflate_codes,"INCO")
-# pragma map(inflate_fast,"INFA")
-# pragma map(inflate_flush,"INFLU")
-# pragma map(inflate_mask,"INMA")
-# pragma map(inflate_set_dictionary,"INSEDI2")
-# pragma map(inflate_copyright,"INCOPY")
-# pragma map(inflate_trees_bits,"INTRBI")
-# pragma map(inflate_trees_dynamic,"INTRDY")
-# pragma map(inflate_trees_fixed,"INTRFI")
-# pragma map(inflate_trees_free,"INTRFR")
-#endif
-
-#endif /* _ZCONF_H */
diff --git a/src/gzip/infblock.c b/src/gzip/infblock.c
deleted file mode 100644
index d6e2dc297..000000000
--- a/src/gzip/infblock.c
+++ /dev/null
@@ -1,387 +0,0 @@
-/* infblock.c -- interpret and process block types to last block
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "infblock.h"
-#include "inftrees.h"
-#include "infcodes.h"
-#include "infutil.h"
-
-
-/* simplify the use of the inflate_huft type with some defines */
-#define exop word.what.Exop
-#define bits word.what.Bits
-
-/* Table for deflate from PKZIP's appnote.txt. */
-local const uInt border[] = { /* Order of the bit length code lengths */
- 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
-
-/*
- Notes beyond the 1.93a appnote.txt:
-
- 1. Distance pointers never point before the beginning of the output
- stream.
- 2. Distance pointers can point back across blocks, up to 32k away.
- 3. There is an implied maximum of 7 bits for the bit length table and
- 15 bits for the actual data.
- 4. If only one code exists, then it is encoded using one bit. (Zero
- would be more efficient, but perhaps a little confusing.) If two
- codes exist, they are coded using one bit each (0 and 1).
- 5. There is no way of sending zero distance codes--a dummy must be
- sent if there are none. (History: a pre 2.0 version of PKZIP would
- store blocks with no distance codes, but this was discovered to be
- too harsh a criterion.) Valid only for 1.93a. 2.04c does allow
- zero distance codes, which is sent as one code of zero bits in
- length.
- 6. There are up to 286 literal/length codes. Code 256 represents the
- end-of-block. Note however that the static length tree defines
- 288 codes just to fill out the Huffman codes. Codes 286 and 287
- cannot be used though, since there is no length base or extra bits
- defined for them. Similarily, there are up to 30 distance codes.
- However, static trees define 32 codes (all 5 bits) to fill out the
- Huffman codes, but the last two had better not show up in the data.
- 7. Unzip can check dynamic Huffman blocks for complete code sets.
- The exception is that a single code would not be complete (see #4).
- 8. The five bits following the block type is really the number of
- literal codes sent minus 257.
- 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
- (1+6+6). Therefore, to output three times the length, you output
- three codes (1+1+1), whereas to output four times the same length,
- you only need two codes (1+3). Hmm.
- 10. In the tree reconstruction algorithm, Code = Code + Increment
- only if BitLength(i) is not zero. (Pretty obvious.)
- 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19)
- 12. Note: length code 284 can represent 227-258, but length code 285
- really is 258. The last length deserves its own, short code
- since it gets used a lot in very redundant files. The length
- 258 is special since 258 - 3 (the min match length) is 255.
- 13. The literal/length and distance code bit lengths are read as a
- single stream of lengths. It is possible (and advantageous) for
- a repeat code (16, 17, or 18) to go across the boundary between
- the two sets of lengths.
- */
-
-
-local void inflate_blocks_reset( /* s, z, c) */
-inflate_blocks_statef *s,
-z_streamp z,
-uLongf *c )
-{
- if (c != Z_NULL)
- *c = s->check;
- if (s->mode == BTREE || s->mode == DTREE)
- ZFREE(z, s->sub.trees.blens);
- if (s->mode == CODES)
- inflate_codes_free(s->sub.decode.codes, z);
- s->mode = TYPE;
- s->bitk = 0;
- s->bitb = 0;
- s->read = s->write = s->window;
- if (s->checkfn != Z_NULL)
- z->adler = s->check = (*s->checkfn)(0L, (const Bytef *)Z_NULL, 0);
- Tracev((stderr, "inflate: blocks reset\n"));
-}
-
-
-local inflate_blocks_statef *inflate_blocks_new( /* z, c, w) */
-z_streamp z,
-check_func c,
-uInt w )
-{
- inflate_blocks_statef *s;
-
- if ((s = (inflate_blocks_statef *)ZALLOC
- (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL)
- return s;
- if ((s->hufts =
- (inflate_huft *)ZALLOC(z, sizeof(inflate_huft), MANY)) == Z_NULL)
- {
- ZFREE(z, s);
- return Z_NULL;
- }
- if ((s->window = (Bytef *)ZALLOC(z, 1, w)) == Z_NULL)
- {
- ZFREE(z, s->hufts);
- ZFREE(z, s);
- return Z_NULL;
- }
- s->end = s->window + w;
- s->checkfn = c;
- s->mode = TYPE;
- Tracev((stderr, "inflate: blocks allocated\n"));
- inflate_blocks_reset(s, z, Z_NULL);
- return s;
-}
-
-
-local int inflate_blocks( /* s, z, r) */
-inflate_blocks_statef *s,
-z_streamp z,
-int r )
-{
- uInt t; /* temporary storage */
- uLong b; /* bit buffer */
- uInt k; /* bits in bit buffer */
- Bytef *p; /* input data pointer */
- uInt n; /* bytes available there */
- Bytef *q; /* output window write pointer */
- uInt m; /* bytes to end of window or read pointer */
-
- /* copy input/output information to locals (UPDATE macro restores) */
- LOAD
-
- /* process input based on current state */
- while (1) switch (s->mode)
- {
- case TYPE:
- NEEDBITS(3)
- t = (uInt)b & 7;
- s->last = t & 1;
- switch (t >> 1)
- {
- case 0: /* stored */
- Tracev((stderr, "inflate: stored block%s\n",
- s->last ? " (last)" : ""));
- DUMPBITS(3)
- t = k & 7; /* go to byte boundary */
- DUMPBITS(t)
- s->mode = LENS; /* get length of stored block */
- break;
- case 1: /* fixed */
- Tracev((stderr, "inflate: fixed codes block%s\n",
- s->last ? " (last)" : ""));
- {
- uInt bl, bd;
- inflate_huft *tl, *td;
-
- inflate_trees_fixed(&bl, &bd, (const inflate_huft**)&tl,
- (const inflate_huft**)&td, z);
- s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z);
- if (s->sub.decode.codes == Z_NULL)
- {
- r = Z_MEM_ERROR;
- LEAVE
- }
- }
- DUMPBITS(3)
- s->mode = CODES;
- break;
- case 2: /* dynamic */
- Tracev((stderr, "inflate: dynamic codes block%s\n",
- s->last ? " (last)" : ""));
- DUMPBITS(3)
- s->mode = TABLE;
- break;
- case 3: /* illegal */
- DUMPBITS(3)
- s->mode = BAD;
- z->msg = (char*)"invalid block type";
- r = Z_DATA_ERROR;
- LEAVE
- }
- break;
- case LENS:
- NEEDBITS(32)
- if ((((~b) >> 16) & 0xffff) != (b & 0xffff))
- {
- s->mode = BAD;
- z->msg = (char*)"invalid stored block lengths";
- r = Z_DATA_ERROR;
- LEAVE
- }
- s->sub.left = (uInt)b & 0xffff;
- b = k = 0; /* dump bits */
- Tracev((stderr, "inflate: stored length %u\n", s->sub.left));
- s->mode = s->sub.left ? STORED : (s->last ? DRY : TYPE);
- break;
- case STORED:
- if (n == 0)
- LEAVE
- NEEDOUT
- t = s->sub.left;
- if (t > n) t = n;
- if (t > m) t = m;
- zmemcpy(q, p, t);
- p += t; n -= t;
- q += t; m -= t;
- if ((s->sub.left -= t) != 0)
- break;
- Tracev((stderr, "inflate: stored end, %lu total out\n",
- z->total_out + (q >= s->read ? q - s->read :
- (s->end - s->read) + (q - s->window))));
- s->mode = s->last ? DRY : TYPE;
- break;
- case TABLE:
- NEEDBITS(14)
- s->sub.trees.table = t = (uInt)b & 0x3fff;
-#ifndef PKZIP_BUG_WORKAROUND
- if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
- {
- s->mode = BAD;
- z->msg = (char*)"too many length or distance symbols";
- r = Z_DATA_ERROR;
- LEAVE
- }
-#endif
- t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
- if ((s->sub.trees.blens = (uIntf*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL)
- {
- r = Z_MEM_ERROR;
- LEAVE
- }
- DUMPBITS(14)
- s->sub.trees.index = 0;
- Tracev((stderr, "inflate: table sizes ok\n"));
- s->mode = BTREE;
- case BTREE:
- while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
- {
- NEEDBITS(3)
- s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7;
- DUMPBITS(3)
- }
- while (s->sub.trees.index < 19)
- s->sub.trees.blens[border[s->sub.trees.index++]] = 0;
- s->sub.trees.bb = 7;
- t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb,
- &s->sub.trees.tb, s->hufts, z);
- if (t != Z_OK)
- {
- r = t;
- if (r == Z_DATA_ERROR)
- {
- ZFREE(z, s->sub.trees.blens);
- s->mode = BAD;
- }
- LEAVE
- }
- s->sub.trees.index = 0;
- Tracev((stderr, "inflate: bits tree ok\n"));
- s->mode = DTREE;
- case DTREE:
- while (t = s->sub.trees.table,
- s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
- {
- inflate_huft *h;
- uInt i, j, c;
-
- t = s->sub.trees.bb;
- NEEDBITS(t)
- h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]);
- t = h->bits;
- c = h->base;
- if (c < 16)
- {
- DUMPBITS(t)
- s->sub.trees.blens[s->sub.trees.index++] = c;
- }
- else /* c == 16..18 */
- {
- i = c == 18 ? 7 : c - 14;
- j = c == 18 ? 11 : 3;
- NEEDBITS(t + i)
- DUMPBITS(t)
- j += (uInt)b & inflate_mask[i];
- DUMPBITS(i)
- i = s->sub.trees.index;
- t = s->sub.trees.table;
- if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
- (c == 16 && i < 1))
- {
- ZFREE(z, s->sub.trees.blens);
- s->mode = BAD;
- z->msg = (char*)"invalid bit length repeat";
- r = Z_DATA_ERROR;
- LEAVE
- }
- c = c == 16 ? s->sub.trees.blens[i - 1] : 0;
- do {
- s->sub.trees.blens[i++] = c;
- } while (--j);
- s->sub.trees.index = i;
- }
- }
- s->sub.trees.tb = Z_NULL;
- {
- uInt bl, bd;
- inflate_huft *tl, *td;
- inflate_codes_statef *c;
-
- bl = 9; /* must be <= 9 for lookahead assumptions */
- bd = 6; /* must be <= 9 for lookahead assumptions */
- t = s->sub.trees.table;
- t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f),
- s->sub.trees.blens, &bl, &bd, &tl, &td,
- s->hufts, z);
- if (t != Z_OK)
- {
- if (t == (uInt)Z_DATA_ERROR)
- {
- ZFREE(z, s->sub.trees.blens);
- s->mode = BAD;
- }
- r = t;
- LEAVE
- }
- Tracev((stderr, "inflate: trees ok\n"));
- if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL)
- {
- r = Z_MEM_ERROR;
- LEAVE
- }
- s->sub.decode.codes = c;
- }
- ZFREE(z, s->sub.trees.blens);
- s->mode = CODES;
- case CODES:
- UPDATE
- if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
- return inflate_flush(s, z, r);
- r = Z_OK;
- inflate_codes_free(s->sub.decode.codes, z);
- LOAD
- Tracev((stderr, "inflate: codes end, %lu total out\n",
- z->total_out + (q >= s->read ? q - s->read :
- (s->end - s->read) + (q - s->window))));
- if (!s->last)
- {
- s->mode = TYPE;
- break;
- }
- s->mode = DRY;
- case DRY:
- FLUSH
- if (s->read != s->write)
- LEAVE
- s->mode = DONE;
- case DONE:
- r = Z_STREAM_END;
- LEAVE
- case BAD:
- r = Z_DATA_ERROR;
- LEAVE
- default:
- r = Z_STREAM_ERROR;
- LEAVE
- }
-#ifdef NEED_DUMMY_RETURN
- return 0;
-#endif
-}
-
-
-local int inflate_blocks_free( /* s, z) */
-inflate_blocks_statef *s,
-z_streamp z )
-{
- inflate_blocks_reset(s, z, Z_NULL);
- ZFREE(z, s->window);
- ZFREE(z, s->hufts);
- ZFREE(z, s);
- Tracev((stderr, "inflate: blocks freed\n"));
- return Z_OK;
-}
-
-
diff --git a/src/gzip/infblock.h b/src/gzip/infblock.h
deleted file mode 100644
index c2535a1e4..000000000
--- a/src/gzip/infblock.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* infblock.h -- header to use infblock.c
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-#ifndef _INFBLOCK_H
-#define _INFBLOCK_H
-
-struct inflate_blocks_state;
-typedef struct inflate_blocks_state FAR inflate_blocks_statef;
-
-local inflate_blocks_statef * inflate_blocks_new OF((
- z_streamp z,
- check_func c, /* check function */
- uInt w)); /* window size */
-
-local int inflate_blocks OF((
- inflate_blocks_statef *,
- z_streamp ,
- int)); /* initial return code */
-
-local void inflate_blocks_reset OF((
- inflate_blocks_statef *,
- z_streamp ,
- uLongf *)); /* check value on output */
-
-local int inflate_blocks_free OF((
- inflate_blocks_statef *,
- z_streamp));
-
-#endif /* _INFBLOCK_H */
diff --git a/src/gzip/infcodes.c b/src/gzip/infcodes.c
deleted file mode 100644
index f7bfd58c4..000000000
--- a/src/gzip/infcodes.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/* infcodes.c -- process literals and length/distance pairs
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "inftrees.h"
-#include "infblock.h"
-#include "infcodes.h"
-#include "infutil.h"
-
-/* simplify the use of the inflate_huft type with some defines */
-#define exop word.what.Exop
-#define bits word.what.Bits
-
-typedef enum { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
- START, /* x: set up for LEN */
- LEN, /* i: get length/literal/eob next */
- LENEXT, /* i: getting length extra (have base) */
- DIST, /* i: get distance next */
- DISTEXT, /* i: getting distance extra */
- COPY, /* o: copying bytes in window, waiting for space */
- LIT, /* o: got literal, waiting for output space */
- WASH, /* o: got eob, possibly still output waiting */
- END, /* x: got eob and all data flushed */
- BADCODE} /* x: got error */
-inflate_codes_mode;
-
-/* inflate codes private state */
-struct inflate_codes_state {
-
- /* mode */
- inflate_codes_mode mode; /* current inflate_codes mode */
-
- /* mode dependent information */
- uInt len;
- union {
- struct {
- inflate_huft *tree; /* pointer into tree */
- uInt need; /* bits needed */
- } code; /* if LEN or DIST, where in tree */
- uInt lit; /* if LIT, literal */
- struct {
- uInt get; /* bits to get for extra */
- uInt dist; /* distance back to copy from */
- } copy; /* if EXT or COPY, where and how much */
- } sub; /* submode */
-
- /* mode independent information */
- Byte lbits; /* ltree bits decoded per branch */
- Byte dbits; /* dtree bits decoder per branch */
- inflate_huft *ltree; /* literal/length/eob tree */
- inflate_huft *dtree; /* distance tree */
-
-};
-
-
-local inflate_codes_statef *inflate_codes_new( /* bl, bd, tl, td, z) */
-uInt bl, uInt bd,
-inflate_huft *tl,
-inflate_huft *td, /* need separate declaration for Borland C++ */
-z_streamp z )
-{
- inflate_codes_statef *c;
-
- if ((c = (inflate_codes_statef *)
- ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL)
- {
- c->mode = START;
- c->lbits = (Byte)bl;
- c->dbits = (Byte)bd;
- c->ltree = tl;
- c->dtree = td;
- Tracev((stderr, "inflate: codes new\n"));
- }
- return c;
-}
-
-
-local int inflate_codes( /* s, z, r) */
-inflate_blocks_statef *s,
-z_streamp z,
-int r )
-{
- uInt j; /* temporary storage */
- inflate_huft *t; /* temporary pointer */
- uInt e; /* extra bits or operation */
- uLong b; /* bit buffer */
- uInt k; /* bits in bit buffer */
- Bytef *p; /* input data pointer */
- uInt n; /* bytes available there */
- Bytef *q; /* output window write pointer */
- uInt m; /* bytes to end of window or read pointer */
- Bytef *f; /* pointer to copy strings from */
- inflate_codes_statef *c = s->sub.decode.codes; /* codes state */
-
- /* copy input/output information to locals (UPDATE macro restores) */
- LOAD
-
- /* process input and output based on current state */
- while (1) switch (c->mode)
- { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
- case START: /* x: set up for LEN */
-#ifndef SLOW
- if (m >= 258 && n >= 10)
- {
- UPDATE
- r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z);
- LOAD
- if (r != Z_OK)
- {
- c->mode = r == Z_STREAM_END ? WASH : BADCODE;
- break;
- }
- }
-#endif /* !SLOW */
- c->sub.code.need = c->lbits;
- c->sub.code.tree = c->ltree;
- c->mode = LEN;
- case LEN: /* i: get length/literal/eob next */
- j = c->sub.code.need;
- NEEDBITS(j)
- t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
- DUMPBITS(t->bits)
- e = (uInt)(t->exop);
- if (e == 0) /* literal */
- {
- c->sub.lit = t->base;
- Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
- "inflate: literal '%c'\n" :
- "inflate: literal 0x%02x\n", t->base));
- c->mode = LIT;
- break;
- }
- if (e & 16) /* length */
- {
- c->sub.copy.get = e & 15;
- c->len = t->base;
- c->mode = LENEXT;
- break;
- }
- if ((e & 64) == 0) /* next table */
- {
- c->sub.code.need = e;
- c->sub.code.tree = t + t->base;
- break;
- }
- if (e & 32) /* end of block */
- {
- Tracevv((stderr, "inflate: end of block\n"));
- c->mode = WASH;
- break;
- }
- c->mode = BADCODE; /* invalid code */
- z->msg = (char*)"invalid literal/length code";
- r = Z_DATA_ERROR;
- LEAVE
- case LENEXT: /* i: getting length extra (have base) */
- j = c->sub.copy.get;
- NEEDBITS(j)
- c->len += (uInt)b & inflate_mask[j];
- DUMPBITS(j)
- c->sub.code.need = c->dbits;
- c->sub.code.tree = c->dtree;
- Tracevv((stderr, "inflate: length %u\n", c->len));
- c->mode = DIST;
- case DIST: /* i: get distance next */
- j = c->sub.code.need;
- NEEDBITS(j)
- t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
- DUMPBITS(t->bits)
- e = (uInt)(t->exop);
- if (e & 16) /* distance */
- {
- c->sub.copy.get = e & 15;
- c->sub.copy.dist = t->base;
- c->mode = DISTEXT;
- break;
- }
- if ((e & 64) == 0) /* next table */
- {
- c->sub.code.need = e;
- c->sub.code.tree = t + t->base;
- break;
- }
- c->mode = BADCODE; /* invalid code */
- z->msg = (char*)"invalid distance code";
- r = Z_DATA_ERROR;
- LEAVE
- case DISTEXT: /* i: getting distance extra */
- j = c->sub.copy.get;
- NEEDBITS(j)
- c->sub.copy.dist += (uInt)b & inflate_mask[j];
- DUMPBITS(j)
- Tracevv((stderr, "inflate: distance %u\n", c->sub.copy.dist));
- c->mode = COPY;
- case COPY: /* o: copying bytes in window, waiting for space */
- f = q - c->sub.copy.dist;
- while (f < s->window) /* modulo window size-"while" instead */
- f += s->end - s->window; /* of "if" handles invalid distances */
- while (c->len)
- {
- NEEDOUT
- OUTBYTE(*f++)
- if (f == s->end)
- f = s->window;
- c->len--;
- }
- c->mode = START;
- break;
- case LIT: /* o: got literal, waiting for output space */
- NEEDOUT
- OUTBYTE(c->sub.lit)
- c->mode = START;
- break;
- case WASH: /* o: got eob, possibly more output */
- if (k > 7) /* return unused byte, if any */
- {
- Assert(k < 16, "inflate_codes grabbed too many bytes")
- k -= 8;
- n++;
- p--; /* can always return one */
- }
- FLUSH
- if (s->read != s->write)
- LEAVE
- c->mode = END;
- case END:
- r = Z_STREAM_END;
- LEAVE
- case BADCODE: /* x: got error */
- r = Z_DATA_ERROR;
- LEAVE
- default:
- r = Z_STREAM_ERROR;
- LEAVE
- }
-#ifdef NEED_DUMMY_RETURN
- return Z_STREAM_ERROR; /* Some dumb compilers complain without this */
-#endif
-}
-
-
-local void inflate_codes_free( /* c, z) */
-inflate_codes_statef *c,
-z_streamp z )
-{
- ZFREE(z, c);
- Tracev((stderr, "inflate: codes free\n"));
-}
diff --git a/src/gzip/infcodes.h b/src/gzip/infcodes.h
deleted file mode 100644
index 154d7f896..000000000
--- a/src/gzip/infcodes.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* infcodes.h -- header to use infcodes.c
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-#ifndef _INFCODES_H
-#define _INFCODES_H
-
-struct inflate_codes_state;
-typedef struct inflate_codes_state FAR inflate_codes_statef;
-
-local inflate_codes_statef *inflate_codes_new OF((
- uInt, uInt,
- inflate_huft *, inflate_huft *,
- z_streamp ));
-
-local int inflate_codes OF((
- inflate_blocks_statef *,
- z_streamp ,
- int));
-
-local void inflate_codes_free OF((
- inflate_codes_statef *,
- z_streamp ));
-
-#endif /* _INFCODES_H */
diff --git a/src/gzip/inffixed.h b/src/gzip/inffixed.h
deleted file mode 100644
index 4d4760ea0..000000000
--- a/src/gzip/inffixed.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/* inffixed.h -- table for decoding fixed codes
- * Generated automatically by the maketree.c program
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-local const uInt fixed_bl = 9;
-local const uInt fixed_bd = 5;
-local const inflate_huft fixed_tl[] = {
- {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
- {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},192},
- {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},160},
- {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},224},
- {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},144},
- {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},208},
- {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},176},
- {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},240},
- {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
- {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},200},
- {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},168},
- {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},232},
- {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},152},
- {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},216},
- {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},184},
- {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},248},
- {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
- {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},196},
- {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},164},
- {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},228},
- {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},148},
- {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},212},
- {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},180},
- {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},244},
- {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
- {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},204},
- {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},172},
- {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},236},
- {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},156},
- {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},220},
- {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},188},
- {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},252},
- {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
- {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},194},
- {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},162},
- {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},226},
- {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},146},
- {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},210},
- {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},178},
- {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},242},
- {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
- {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},202},
- {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},170},
- {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},234},
- {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},154},
- {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},218},
- {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},186},
- {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},250},
- {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
- {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},198},
- {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},166},
- {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},230},
- {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},150},
- {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},214},
- {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},182},
- {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},246},
- {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
- {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},206},
- {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},174},
- {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},238},
- {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},158},
- {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},222},
- {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},190},
- {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},254},
- {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
- {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},193},
- {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},161},
- {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},225},
- {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},145},
- {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},209},
- {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},177},
- {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},241},
- {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
- {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},201},
- {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},169},
- {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},233},
- {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},153},
- {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},217},
- {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},185},
- {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},249},
- {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
- {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},197},
- {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},165},
- {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},229},
- {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},149},
- {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},213},
- {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},181},
- {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},245},
- {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
- {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},205},
- {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},173},
- {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},237},
- {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},157},
- {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},221},
- {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},189},
- {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},253},
- {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
- {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},195},
- {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},163},
- {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},227},
- {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},147},
- {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},211},
- {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},179},
- {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},243},
- {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
- {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},203},
- {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},171},
- {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},235},
- {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},155},
- {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},219},
- {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},187},
- {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},251},
- {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
- {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},199},
- {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},167},
- {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},231},
- {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},151},
- {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},215},
- {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},183},
- {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},247},
- {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
- {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},207},
- {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},175},
- {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},239},
- {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},159},
- {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},223},
- {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},191},
- {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},255}
- };
-local const inflate_huft fixed_td[] = {
- {{{80,5}},1}, {{{87,5}},257}, {{{83,5}},17}, {{{91,5}},4097},
- {{{81,5}},5}, {{{89,5}},1025}, {{{85,5}},65}, {{{93,5}},16385},
- {{{80,5}},3}, {{{88,5}},513}, {{{84,5}},33}, {{{92,5}},8193},
- {{{82,5}},9}, {{{90,5}},2049}, {{{86,5}},129}, {{{192,5}},24577},
- {{{80,5}},2}, {{{87,5}},385}, {{{83,5}},25}, {{{91,5}},6145},
- {{{81,5}},7}, {{{89,5}},1537}, {{{85,5}},97}, {{{93,5}},24577},
- {{{80,5}},4}, {{{88,5}},769}, {{{84,5}},49}, {{{92,5}},12289},
- {{{82,5}},13}, {{{90,5}},3073}, {{{86,5}},193}, {{{192,5}},24577}
- };
diff --git a/src/gzip/inflate.c b/src/gzip/inflate.c
deleted file mode 100644
index 8877fa3eb..000000000
--- a/src/gzip/inflate.c
+++ /dev/null
@@ -1,273 +0,0 @@
-/* inflate.c -- zlib interface to inflate modules
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "infblock.h"
-
-#define DONE INFLATE_DONE
-#define BAD INFLATE_BAD
-
-typedef enum {
- METHOD, /* waiting for method byte */
- FLAG, /* waiting for flag byte */
- DICT4, /* four dictionary check bytes to go */
- DICT3, /* three dictionary check bytes to go */
- DICT2, /* two dictionary check bytes to go */
- DICT1, /* one dictionary check byte to go */
- DICT0, /* waiting for inflateSetDictionary */
- BLOCKS, /* decompressing blocks */
- CHECK4, /* four check bytes to go */
- CHECK3, /* three check bytes to go */
- CHECK2, /* two check bytes to go */
- CHECK1, /* one check byte to go */
- DONE, /* finished check, done */
- BAD} /* got an error--stay here */
-inflate_mode;
-
-/* inflate private state */
-struct internal_state {
-
- /* mode */
- inflate_mode mode; /* current inflate mode */
-
- /* mode dependent information */
- union {
- uInt method; /* if FLAGS, method byte */
- struct {
- uLong was; /* computed check value */
- uLong need; /* stream check value */
- } check; /* if CHECK, check values to compare */
- uInt marker; /* if BAD, inflateSync's marker bytes count */
- } sub; /* submode */
-
- /* mode independent information */
- int nowrap; /* flag for no wrapper */
- uInt wbits; /* log2(window size) (8..15, defaults to 15) */
- inflate_blocks_statef
- *blocks; /* current inflate_blocks state */
-
-};
-
-
-ZEXPORT(int) inflateReset( /* z) */
-z_streamp z )
-{
- if (z == Z_NULL || z->state == Z_NULL)
- return Z_STREAM_ERROR;
- z->total_in = z->total_out = 0;
- z->msg = Z_NULL;
- z->state->mode = z->state->nowrap ? BLOCKS : METHOD;
- inflate_blocks_reset(z->state->blocks, z, Z_NULL);
- Tracev((stderr, "inflate: reset\n"));
- return Z_OK;
-}
-
-
-ZEXPORT(int) inflateEnd( /* z) */
-z_streamp z )
-{
- if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
- return Z_STREAM_ERROR;
- if (z->state->blocks != Z_NULL)
- inflate_blocks_free(z->state->blocks, z);
- ZFREE(z, z->state);
- z->state = Z_NULL;
- Tracev((stderr, "inflate: end\n"));
- return Z_OK;
-}
-
-
-ZEXPORT(int) inflateInit2_( /* z, w, version, stream_size) */
-z_streamp z,
-int w,
-const char *version,
-int stream_size )
-{
- if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
- stream_size != sizeof(z_stream))
- return Z_VERSION_ERROR;
-
- /* initialize state */
- if (z == Z_NULL)
- return Z_STREAM_ERROR;
- z->msg = Z_NULL;
- if (z->zalloc == Z_NULL)
- {
- z->zalloc = zcalloc;
- z->opaque = (voidpf)0;
- }
- if (z->zfree == Z_NULL) z->zfree = zcfree;
- if ((z->state = (struct internal_state FAR *)
- ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL)
- return Z_MEM_ERROR;
- z->state->blocks = Z_NULL;
-
- /* handle undocumented nowrap option (no zlib header or check) */
- z->state->nowrap = 0;
- if (w < 0)
- {
- w = - w;
- z->state->nowrap = 1;
- }
-
- /* set window size */
- if (w < 8 || w > 15)
- {
- inflateEnd(z);
- return Z_STREAM_ERROR;
- }
- z->state->wbits = (uInt)w;
-
- /* create inflate_blocks state */
- if ((z->state->blocks =
- inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, (uInt)1 << w))
- == Z_NULL)
- {
- inflateEnd(z);
- return Z_MEM_ERROR;
- }
- Tracev((stderr, "inflate: allocated\n"));
-
- /* reset state */
- inflateReset(z);
- return Z_OK;
-}
-
-
-
-#undef NEEDBYTE
-#define NEEDBYTE {if(z->avail_in==0)return r;r=f;}
-
-#undef NEXTBYTE
-#define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
-
-
-ZEXPORT(int) inflate( /* z, f) */
-z_streamp z,
-int f )
-{
- int r;
- uInt b;
-
- if (z == Z_NULL || z->state == Z_NULL || z->next_in == Z_NULL)
- return Z_STREAM_ERROR;
- f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK;
- r = Z_BUF_ERROR;
- while (1) switch (z->state->mode)
- {
- case METHOD:
- NEEDBYTE
- if (((z->state->sub.method = NEXTBYTE) & 0xf) != Z_DEFLATED)
- {
- z->state->mode = BAD;
- z->msg = (char*)"unknown compression method";
- z->state->sub.marker = 5; /* can't try inflateSync */
- break;
- }
- if ((z->state->sub.method >> 4) + 8 > z->state->wbits)
- {
- z->state->mode = BAD;
- z->msg = (char*)"invalid window size";
- z->state->sub.marker = 5; /* can't try inflateSync */
- break;
- }
- z->state->mode = FLAG;
- case FLAG:
- NEEDBYTE
- b = NEXTBYTE;
- if (((z->state->sub.method << 8) + b) % 31)
- {
- z->state->mode = BAD;
- z->msg = (char*)"incorrect header check";
- z->state->sub.marker = 5; /* can't try inflateSync */
- break;
- }
- Tracev((stderr, "inflate: zlib header ok\n"));
- if (!(b & PRESET_DICT))
- {
- z->state->mode = BLOCKS;
- break;
- }
- z->state->mode = DICT4;
- case DICT4:
- NEEDBYTE
- z->state->sub.check.need = (uLong)NEXTBYTE << 24;
- z->state->mode = DICT3;
- case DICT3:
- NEEDBYTE
- z->state->sub.check.need += (uLong)NEXTBYTE << 16;
- z->state->mode = DICT2;
- case DICT2:
- NEEDBYTE
- z->state->sub.check.need += (uLong)NEXTBYTE << 8;
- z->state->mode = DICT1;
- case DICT1:
- NEEDBYTE
- z->state->sub.check.need += (uLong)NEXTBYTE;
- z->adler = z->state->sub.check.need;
- z->state->mode = DICT0;
- return Z_NEED_DICT;
- case DICT0:
- z->state->mode = BAD;
- z->msg = (char*)"need dictionary";
- z->state->sub.marker = 0; /* can try inflateSync */
- return Z_STREAM_ERROR;
- case BLOCKS:
- r = inflate_blocks(z->state->blocks, z, r);
- if (r == Z_DATA_ERROR)
- {
- z->state->mode = BAD;
- z->state->sub.marker = 0; /* can try inflateSync */
- break;
- }
- if (r == Z_OK)
- r = f;
- if (r != Z_STREAM_END)
- return r;
- r = f;
- inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
- if (z->state->nowrap)
- {
- z->state->mode = DONE;
- break;
- }
- z->state->mode = CHECK4;
- case CHECK4:
- NEEDBYTE
- z->state->sub.check.need = (uLong)NEXTBYTE << 24;
- z->state->mode = CHECK3;
- case CHECK3:
- NEEDBYTE
- z->state->sub.check.need += (uLong)NEXTBYTE << 16;
- z->state->mode = CHECK2;
- case CHECK2:
- NEEDBYTE
- z->state->sub.check.need += (uLong)NEXTBYTE << 8;
- z->state->mode = CHECK1;
- case CHECK1:
- NEEDBYTE
- z->state->sub.check.need += (uLong)NEXTBYTE;
-
- if (z->state->sub.check.was != z->state->sub.check.need)
- {
- z->state->mode = BAD;
- z->msg = (char*)"incorrect data check";
- z->state->sub.marker = 5; /* can't try inflateSync */
- break;
- }
- Tracev((stderr, "inflate: zlib check ok\n"));
- z->state->mode = DONE;
- case DONE:
- return Z_STREAM_END;
- case BAD:
- return Z_DATA_ERROR;
- default:
- return Z_STREAM_ERROR;
- }
-#ifdef NEED_DUMMY_RETURN
- return Z_STREAM_ERROR; /* Some dumb compilers complain without this */
-#endif
-}
-
diff --git a/src/gzip/inftrees.c b/src/gzip/inftrees.c
deleted file mode 100644
index 56f52b170..000000000
--- a/src/gzip/inftrees.c
+++ /dev/null
@@ -1,468 +0,0 @@
-/* inftrees.c -- generate Huffman trees for efficient decoding
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "inftrees.h"
-
-#if !defined(BUILDFIXED) && !defined(STDC)
-# define BUILDFIXED /* non ANSI compilers may not accept inffixed.h */
-#endif
-
-
-#if 0
-local const char inflate_copyright[] =
- " inflate 1.1.4 Copyright 1995-2002 Mark Adler ";
-#endif
-/*
- If you use the zlib library in a product, an acknowledgment is welcome
- in the documentation of your product. If for some reason you cannot
- include such an acknowledgment, I would appreciate that you keep this
- copyright string in the executable of your product.
- */
-
-/* simplify the use of the inflate_huft type with some defines */
-#define exop word.what.Exop
-#define bits word.what.Bits
-
-
-local int huft_build OF((
- uIntf *, /* code lengths in bits */
- uInt, /* number of codes */
- uInt, /* number of "simple" codes */
- const uIntf *, /* list of base values for non-simple codes */
- const uIntf *, /* list of extra bits for non-simple codes */
- inflate_huft * FAR*,/* result: starting table */
- uIntf *, /* maximum lookup bits (returns actual) */
- inflate_huft *, /* space for trees */
- uInt *, /* hufts used in space */
- uIntf * )); /* space for values */
-
-/* Tables for deflate from PKZIP's appnote.txt. */
-local const uInt cplens[31] = { /* Copy lengths for literal codes 257..285 */
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
- 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
- /* see note #13 above about 258 */
-local const uInt cplext[31] = { /* Extra bits for literal codes 257..285 */
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
- 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; /* 112==invalid */
-local const uInt cpdist[30] = { /* Copy offsets for distance codes 0..29 */
- 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
- 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
- 8193, 12289, 16385, 24577};
-local const uInt cpdext[30] = { /* Extra bits for distance codes */
- 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
- 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
- 12, 12, 13, 13};
-
-/*
- Huffman code decoding is performed using a multi-level table lookup.
- The fastest way to decode is to simply build a lookup table whose
- size is determined by the longest code. However, the time it takes
- to build this table can also be a factor if the data being decoded
- is not very long. The most common codes are necessarily the
- shortest codes, so those codes dominate the decoding time, and hence
- the speed. The idea is you can have a shorter table that decodes the
- shorter, more probable codes, and then point to subsidiary tables for
- the longer codes. The time it costs to decode the longer codes is
- then traded against the time it takes to make longer tables.
-
- This results of this trade are in the variables lbits and dbits
- below. lbits is the number of bits the first level table for literal/
- length codes can decode in one step, and dbits is the same thing for
- the distance codes. Subsequent tables are also less than or equal to
- those sizes. These values may be adjusted either when all of the
- codes are shorter than that, in which case the longest code length in
- bits is used, or when the shortest code is *longer* than the requested
- table size, in which case the length of the shortest code in bits is
- used.
-
- There are two different values for the two tables, since they code a
- different number of possibilities each. The literal/length table
- codes 286 possible values, or in a flat code, a little over eight
- bits. The distance table codes 30 possible values, or a little less
- than five bits, flat. The optimum values for speed end up being
- about one bit more than those, so lbits is 8+1 and dbits is 5+1.
- The optimum values may differ though from machine to machine, and
- possibly even between compilers. Your mileage may vary.
- */
-
-
-/* If BMAX needs to be larger than 16, then h and x[] should be uLong. */
-#define BMAX 15 /* maximum bit length of any code */
-
-local int huft_build( /* b, n, s, d, e, t, m, hp, hn, v) */
-uIntf *b, /* code lengths in bits (all assumed <= BMAX) */
-uInt n, /* number of codes (assumed <= 288) */
-uInt s, /* number of simple-valued codes (0..s-1) */
-const uIntf *d, /* list of base values for non-simple codes */
-const uIntf *e, /* list of extra bits for non-simple codes */
-inflate_huft * FAR *t, /* result: starting table */
-uIntf *m, /* maximum lookup bits, returns actual */
-inflate_huft *hp, /* space for trees */
-uInt *hn, /* hufts used in space */
-uIntf *v /* working area: values in order of bit length */
-/* Given a list of code lengths and a maximum table size, make a set of
- tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR
- if the given code set is incomplete (the tables are still built in this
- case), or Z_DATA_ERROR if the input is invalid. */
-)
-{
-
- uInt a; /* counter for codes of length k */
- uInt c[BMAX+1]; /* bit length count table */
- uInt f; /* i repeats in table every f entries */
- int g; /* maximum code length */
- int h; /* table level */
- uInt i; /* counter, current code */
- uInt j; /* counter */
- int k; /* number of bits in current code */
- int l; /* bits per table (returned in m) */
- uInt mask; /* (1 << w) - 1, to avoid cc -O bug on HP */
- uIntf *p; /* pointer into c[], b[], or v[] */
- inflate_huft *q; /* points to current table */
- struct inflate_huft_s r; /* table entry for structure assignment */
- inflate_huft *u[BMAX]; /* table stack */
- int w; /* bits before this table == (l * h) */
- uInt x[BMAX+1]; /* bit offsets, then code stack */
- uIntf *xp; /* pointer into x */
- int y; /* number of dummy codes added */
- uInt z; /* number of entries in current table */
-
-
- /* Make compiler happy */
- r.base = 0;
-
- /* Generate counts for each bit length */
- p = c;
-#define C0 *p++ = 0;
-#define C2 C0 C0 C0 C0
-#define C4 C2 C2 C2 C2
- C4 /* clear c[]--assume BMAX+1 is 16 */
- p = b; i = n;
- do {
- c[*p++]++; /* assume all entries <= BMAX */
- } while (--i);
- if (c[0] == n) /* null input--all zero length codes */
- {
- *t = (inflate_huft *)Z_NULL;
- *m = 0;
- return Z_OK;
- }
-
-
- /* Find minimum and maximum length, bound *m by those */
- l = *m;
- for (j = 1; j <= BMAX; j++)
- if (c[j])
- break;
- k = j; /* minimum code length */
- if ((uInt)l < j)
- l = j;
- for (i = BMAX; i; i--)
- if (c[i])
- break;
- g = i; /* maximum code length */
- if ((uInt)l > i)
- l = i;
- *m = l;
-
-
- /* Adjust last length count to fill out codes, if needed */
- for (y = 1 << j; j < i; j++, y <<= 1)
- if ((y -= c[j]) < 0)
- return Z_DATA_ERROR;
- if ((y -= c[i]) < 0)
- return Z_DATA_ERROR;
- c[i] += y;
-
-
- /* Generate starting offsets into the value table for each length */
- x[1] = j = 0;
- p = c + 1; xp = x + 2;
- while (--i) { /* note that i == g from above */
- *xp++ = (j += *p++);
- }
-
-
- /* Make a table of values in order of bit lengths */
- p = b; i = 0;
- do {
- if ((j = *p++) != 0)
- v[x[j]++] = i;
- } while (++i < n);
- n = x[g]; /* set n to length of v */
-
-
- /* Generate the Huffman codes and for each, make the table entries */
- x[0] = i = 0; /* first Huffman code is zero */
- p = v; /* grab values in bit order */
- h = -1; /* no tables yet--level -1 */
- w = -l; /* bits decoded == (l * h) */
- u[0] = (inflate_huft *)Z_NULL; /* just to keep compilers happy */
- q = (inflate_huft *)Z_NULL; /* ditto */
- z = 0; /* ditto */
-
- /* go through the bit lengths (k already is bits in shortest code) */
- for (; k <= g; k++)
- {
- a = c[k];
- while (a--)
- {
- /* here i is the Huffman code of length k bits for value *p */
- /* make tables up to required level */
- while (k > w + l)
- {
- h++;
- w += l; /* previous table always l bits */
-
- /* compute minimum size table less than or equal to l bits */
- z = g - w;
- z = z > (uInt)l ? (uInt)l : z; /* table size upper limit */
- if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */
- { /* too few codes for k-w bit table */
- f -= a + 1; /* deduct codes from patterns left */
- xp = c + k;
- if (j < z)
- while (++j < z) /* try smaller tables up to z bits */
- {
- if ((f <<= 1) <= *++xp)
- break; /* enough codes to use up j bits */
- f -= *xp; /* else deduct codes from patterns */
- }
- }
- z = 1 << j; /* table entries for j-bit table */
-
- /* allocate new table */
- if (*hn + z > MANY) /* (note: doesn't matter for fixed) */
- return Z_DATA_ERROR; /* overflow of MANY */
- u[h] = q = hp + *hn;
- *hn += z;
-
- /* connect to last table, if there is one */
- if (h)
- {
- x[h] = i; /* save pattern for backing up */
- r.bits = (Byte)l; /* bits to dump before this table */
- r.exop = (Byte)j; /* bits in this table */
- j = i >> (w - l);
- r.base = (uInt)(q - u[h-1] - j); /* offset to this table */
- u[h-1][j] = r; /* connect to last table */
- }
- else
- *t = q; /* first table is returned result */
- }
-
- /* set up table entry in r */
- r.bits = (Byte)(k - w);
- if (p >= v + n)
- r.exop = 128 + 64; /* out of values--invalid code */
- else if (*p < s)
- {
- r.exop = (Byte)(*p < 256 ? 0 : 32 + 64); /* 256 is end-of-block */
- r.base = *p++; /* simple code is just the value */
- }
- else
- {
- r.exop = (Byte)(e[*p - s] + 16 + 64);/* non-simple--look up in lists */
- r.base = d[*p++ - s];
- }
-
- /* fill code-like entries with r */
- f = 1 << (k - w);
- for (j = i >> w; j < z; j += f)
- q[j] = r;
-
- /* backwards increment the k-bit code i */
- for (j = 1 << (k - 1); i & j; j >>= 1)
- i ^= j;
- i ^= j;
-
- /* backup over finished tables */
- mask = (1 << w) - 1; /* needed on HP, cc -O bug */
- while ((i & mask) != x[h])
- {
- h--; /* don't need to update q */
- w -= l;
- mask = (1 << w) - 1;
- }
- }
- }
-
-
- /* Return Z_BUF_ERROR if we were given an incomplete table */
- return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
-}
-
-
-local int inflate_trees_bits( /* c, bb, tb, hp, z) */
-uIntf *c, /* 19 code lengths */
-uIntf *bb, /* bits tree desired/actual depth */
-inflate_huft * FAR *tb, /* bits tree result */
-inflate_huft *hp, /* space for trees */
-z_streamp z /* for messages */
-)
-{
- int r;
- uInt hn = 0; /* hufts used in space */
- uIntf *v; /* work area for huft_build */
-
- if ((v = (uIntf*)ZALLOC(z, 19, sizeof(uInt))) == Z_NULL)
- return Z_MEM_ERROR;
- r = huft_build(c, 19, 19, (uIntf*)Z_NULL, (uIntf*)Z_NULL,
- tb, bb, hp, &hn, v);
- if (r == Z_DATA_ERROR)
- z->msg = (char*)"oversubscribed dynamic bit lengths tree";
- else if (r == Z_BUF_ERROR || *bb == 0)
- {
- z->msg = (char*)"incomplete dynamic bit lengths tree";
- r = Z_DATA_ERROR;
- }
- ZFREE(z, v);
- return r;
-}
-
-
-local int inflate_trees_dynamic( /* nl, nd, c, bl, bd, tl, td, hp, z) */
-uInt nl, /* number of literal/length codes */
-uInt nd, /* number of distance codes */
-uIntf *c, /* that many (total) code lengths */
-uIntf *bl, /* literal desired/actual bit depth */
-uIntf *bd, /* distance desired/actual bit depth */
-inflate_huft * FAR *tl, /* literal/length tree result */
-inflate_huft * FAR *td, /* distance tree result */
-inflate_huft *hp, /* space for trees */
-z_streamp z /* for messages */
-)
-{
- int r;
- uInt hn = 0; /* hufts used in space */
- uIntf *v; /* work area for huft_build */
-
- /* allocate work area */
- if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
- return Z_MEM_ERROR;
-
- /* build literal/length tree */
- r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v);
- if (r != Z_OK || *bl == 0)
- {
- if (r == Z_DATA_ERROR)
- z->msg = (char*)"oversubscribed literal/length tree";
- else if (r != Z_MEM_ERROR)
- {
- z->msg = (char*)"incomplete literal/length tree";
- r = Z_DATA_ERROR;
- }
- ZFREE(z, v);
- return r;
- }
-
- /* build distance tree */
- r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v);
- if (r != Z_OK || (*bd == 0 && nl > 257))
- {
- if (r == Z_DATA_ERROR)
- z->msg = (char*)"oversubscribed distance tree";
- else if (r == Z_BUF_ERROR) {
-#if 0
- {
-#endif
-#ifdef PKZIP_BUG_WORKAROUND
- r = Z_OK;
- }
-#else
- z->msg = (char*)"incomplete distance tree";
- r = Z_DATA_ERROR;
- }
- else if (r != Z_MEM_ERROR)
- {
- z->msg = (char*)"empty distance tree with lengths";
- r = Z_DATA_ERROR;
- }
- ZFREE(z, v);
- return r;
-#endif
- }
-
- /* done */
- ZFREE(z, v);
- return Z_OK;
-}
-
-
-/* build fixed tables only once--keep them here */
-#ifdef BUILDFIXED
-local int fixed_built = 0;
-#define FIXEDH 544 /* number of hufts used by fixed tables */
-local inflate_huft fixed_mem[FIXEDH];
-local uInt fixed_bl;
-local uInt fixed_bd;
-local inflate_huft *fixed_tl;
-local inflate_huft *fixed_td;
-#else
-#include "inffixed.h"
-#endif
-
-
-local int inflate_trees_fixed( /* bl, bd, tl, td, z) */
-uIntf *bl, /* literal desired/actual bit depth */
-uIntf *bd, /* distance desired/actual bit depth */
-const inflate_huft * FAR *tl, /* literal/length tree result */
-const inflate_huft * FAR *td, /* distance tree result */
-z_streamp z /* for memory allocation */
-)
-{
-#ifdef BUILDFIXED
- /* build fixed tables if not already */
- if (!fixed_built)
- {
- int k; /* temporary variable */
- uInt f = 0; /* number of hufts used in fixed_mem */
- uIntf *c; /* length list for huft_build */
- uIntf *v; /* work area for huft_build */
-
- /* allocate memory */
- if ((c = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
- return Z_MEM_ERROR;
- if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
- {
- ZFREE(z, c);
- return Z_MEM_ERROR;
- }
-
- /* literal table */
- for (k = 0; k < 144; k++)
- c[k] = 8;
- for (; k < 256; k++)
- c[k] = 9;
- for (; k < 280; k++)
- c[k] = 7;
- for (; k < 288; k++)
- c[k] = 8;
- fixed_bl = 9;
- huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl,
- fixed_mem, &f, v);
-
- /* distance table */
- for (k = 0; k < 30; k++)
- c[k] = 5;
- fixed_bd = 5;
- huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd,
- fixed_mem, &f, v);
-
- /* done */
- ZFREE(z, v);
- ZFREE(z, c);
- fixed_built = 1;
- }
-#else
- FT_UNUSED(z);
-#endif
- *bl = fixed_bl;
- *bd = fixed_bd;
- *tl = fixed_tl;
- *td = fixed_td;
- return Z_OK;
-}
diff --git a/src/gzip/inftrees.h b/src/gzip/inftrees.h
deleted file mode 100644
index 07bf2aa0b..000000000
--- a/src/gzip/inftrees.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* inftrees.h -- header to use inftrees.c
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-/* Huffman code lookup table entry--this entry is four bytes for machines
- that have 16-bit pointers (e.g. PC's in the small or medium model). */
-
-#ifndef _INFTREES_H
-#define _INFTREES_H
-
-typedef struct inflate_huft_s FAR inflate_huft;
-
-struct inflate_huft_s {
- union {
- struct {
- Byte Exop; /* number of extra bits or operation */
- Byte Bits; /* number of bits in this code or subcode */
- } what;
- uInt pad; /* pad structure to a power of 2 (4 bytes for */
- } word; /* 16-bit, 8 bytes for 32-bit int's) */
- uInt base; /* literal, length base, distance base,
- or table offset */
-};
-
-/* Maximum size of dynamic tree. The maximum found in a long but non-
- exhaustive search was 1004 huft structures (850 for length/literals
- and 154 for distances, the latter actually the result of an
- exhaustive search). The actual maximum is not known, but the
- value below is more than safe. */
-#define MANY 1440
-
-local int inflate_trees_bits OF((
- uIntf *, /* 19 code lengths */
- uIntf *, /* bits tree desired/actual depth */
- inflate_huft * FAR *, /* bits tree result */
- inflate_huft *, /* space for trees */
- z_streamp)); /* for messages */
-
-local int inflate_trees_dynamic OF((
- uInt, /* number of literal/length codes */
- uInt, /* number of distance codes */
- uIntf *, /* that many (total) code lengths */
- uIntf *, /* literal desired/actual bit depth */
- uIntf *, /* distance desired/actual bit depth */
- inflate_huft * FAR *, /* literal/length tree result */
- inflate_huft * FAR *, /* distance tree result */
- inflate_huft *, /* space for trees */
- z_streamp)); /* for messages */
-
-local int inflate_trees_fixed OF((
- uIntf *, /* literal desired/actual bit depth */
- uIntf *, /* distance desired/actual bit depth */
- const inflate_huft * FAR *, /* literal/length tree result */
- const inflate_huft * FAR *, /* distance tree result */
- z_streamp)); /* for memory allocation */
-
-#endif /* _INFTREES_H */
diff --git a/src/gzip/infutil.c b/src/gzip/infutil.c
deleted file mode 100644
index 6087b4064..000000000
--- a/src/gzip/infutil.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* inflate_util.c -- data and routines common to blocks and codes
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "infblock.h"
-#include "inftrees.h"
-#include "infcodes.h"
-#include "infutil.h"
-
-
-/* And'ing with mask[n] masks the lower n bits */
-local const uInt inflate_mask[17] = {
- 0x0000,
- 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
- 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
-};
-
-
-/* copy as much as possible from the sliding window to the output area */
-local int inflate_flush( /* s, z, r) */
-inflate_blocks_statef *s,
-z_streamp z,
-int r )
-{
- uInt n;
- Bytef *p;
- Bytef *q;
-
- /* local copies of source and destination pointers */
- p = z->next_out;
- q = s->read;
-
- /* compute number of bytes to copy as far as end of window */
- n = (uInt)((q <= s->write ? s->write : s->end) - q);
- if (n > z->avail_out) n = z->avail_out;
- if (n && r == Z_BUF_ERROR) r = Z_OK;
-
- /* update counters */
- z->avail_out -= n;
- z->total_out += n;
-
- /* update check information */
- if (s->checkfn != Z_NULL)
- z->adler = s->check = (*s->checkfn)(s->check, q, n);
-
- /* copy as far as end of window */
- zmemcpy(p, q, n);
- p += n;
- q += n;
-
- /* see if more to copy at beginning of window */
- if (q == s->end)
- {
- /* wrap pointers */
- q = s->window;
- if (s->write == s->end)
- s->write = s->window;
-
- /* compute bytes to copy */
- n = (uInt)(s->write - q);
- if (n > z->avail_out) n = z->avail_out;
- if (n && r == Z_BUF_ERROR) r = Z_OK;
-
- /* update counters */
- z->avail_out -= n;
- z->total_out += n;
-
- /* update check information */
- if (s->checkfn != Z_NULL)
- z->adler = s->check = (*s->checkfn)(s->check, q, n);
-
- /* copy */
- zmemcpy(p, q, n);
- p += n;
- q += n;
- }
-
- /* update pointers */
- z->next_out = p;
- s->read = q;
-
- /* done */
- return r;
-}
diff --git a/src/gzip/infutil.h b/src/gzip/infutil.h
deleted file mode 100644
index 7174b6dd0..000000000
--- a/src/gzip/infutil.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* infutil.h -- types and macros common to blocks and codes
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-#ifndef _INFUTIL_H
-#define _INFUTIL_H
-
-typedef enum {
- TYPE, /* get type bits (3, including end bit) */
- LENS, /* get lengths for stored */
- STORED, /* processing stored block */
- TABLE, /* get table lengths */
- BTREE, /* get bit lengths tree for a dynamic block */
- DTREE, /* get length, distance trees for a dynamic block */
- CODES, /* processing fixed or dynamic block */
- DRY, /* output remaining window bytes */
- DONE, /* finished last block, done */
- BAD} /* got a data error--stuck here */
-inflate_block_mode;
-
-/* inflate blocks semi-private state */
-struct inflate_blocks_state {
-
- /* mode */
- inflate_block_mode mode; /* current inflate_block mode */
-
- /* mode dependent information */
- union {
- uInt left; /* if STORED, bytes left to copy */
- struct {
- uInt table; /* table lengths (14 bits) */
- uInt index; /* index into blens (or border) */
- uIntf *blens; /* bit lengths of codes */
- uInt bb; /* bit length tree depth */
- inflate_huft *tb; /* bit length decoding tree */
- } trees; /* if DTREE, decoding info for trees */
- struct {
- inflate_codes_statef
- *codes;
- } decode; /* if CODES, current state */
- } sub; /* submode */
- uInt last; /* true if this block is the last block */
-
- /* mode independent information */
- uInt bitk; /* bits in bit buffer */
- uLong bitb; /* bit buffer */
- inflate_huft *hufts; /* single malloc for tree space */
- Bytef *window; /* sliding window */
- Bytef *end; /* one byte after sliding window */
- Bytef *read; /* window read pointer */
- Bytef *write; /* window write pointer */
- check_func checkfn; /* check function */
- uLong check; /* check on output */
-
-};
-
-
-/* defines for inflate input/output */
-/* update pointers and return */
-#define UPDBITS {s->bitb=b;s->bitk=k;}
-#define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
-#define UPDOUT {s->write=q;}
-#define UPDATE {UPDBITS UPDIN UPDOUT}
-#define LEAVE {UPDATE return inflate_flush(s,z,r);}
-/* get bytes and bits */
-#define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
-#define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
-#define NEXTBYTE (n--,*p++)
-#define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
-#define DUMPBITS(j) {b>>=(j);k-=(j);}
-/* output bytes */
-#define WAVAIL (uInt)(q<s->read?s->read-q-1:s->end-q)
-#define LOADOUT {q=s->write;m=(uInt)WAVAIL;}
-#define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}}
-#define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT}
-#define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
-#define OUTBYTE(a) {*q++=(Byte)(a);m--;}
-/* load local pointers */
-#define LOAD {LOADIN LOADOUT}
-
-/* masks for lower bits (size given to avoid silly warnings with Visual C++) */
-#ifndef NO_INFLATE_MASK
-local uInt inflate_mask[17];
-#endif
-
-/* copy as much as possible from the sliding window to the output area */
-local int inflate_flush OF((
- inflate_blocks_statef *,
- z_streamp ,
- int));
-
-#endif
diff --git a/src/gzip/rules.mk b/src/gzip/rules.mk
deleted file mode 100644
index bc7d5fa63..000000000
--- a/src/gzip/rules.mk
+++ /dev/null
@@ -1,83 +0,0 @@
-#
-# FreeType 2 GZip support configuration rules
-#
-
-
-# Copyright 2002-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# gzip driver directory
-#
-GZIP_DIR := $(SRC_DIR)/gzip
-
-
-# compilation flags for the driver
-#
-ifeq ($(SYSTEM_ZLIB),)
- GZIP_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(GZIP_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-else
- GZIP_COMPILE := $(CC) $(ANSIFLAGS) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-endif
-
-
-# gzip support sources
-#
-# All source and header files get loaded by `ftgzip.c' only if SYSTEM_ZLIB
-# is not defined (regardless whether we have a `single' or a `multi' build).
-# However, it doesn't harm if we add everything as a dependency
-# unconditionally.
-#
-GZIP_DRV_SRCS := $(GZIP_DIR)/adler32.c \
- $(GZIP_DIR)/ftzconf.h \
- $(GZIP_DIR)/infblock.c \
- $(GZIP_DIR)/infblock.h \
- $(GZIP_DIR)/infcodes.c \
- $(GZIP_DIR)/infcodes.h \
- $(GZIP_DIR)/inffixed.h \
- $(GZIP_DIR)/inflate.c \
- $(GZIP_DIR)/inftrees.c \
- $(GZIP_DIR)/inftrees.h \
- $(GZIP_DIR)/infutil.c \
- $(GZIP_DIR)/infutil.h \
- $(GZIP_DIR)/zlib.h \
- $(GZIP_DIR)/zutil.c \
- $(GZIP_DIR)/zutil.h
-
-
-# gzip driver object(s)
-#
-# GZIP_DRV_OBJ is used during both `single' and `multi' builds
-#
-GZIP_DRV_OBJ := $(OBJ_DIR)/ftgzip.$O
-
-
-# gzip main source file
-#
-GZIP_DRV_SRC := $(GZIP_DIR)/ftgzip.c
-
-
-# gzip support - object
-#
-$(GZIP_DRV_OBJ): $(GZIP_DRV_SRC) $(GZIP_DRV_SRCS) $(FREETYPE_H)
- $(GZIP_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(GZIP_DRV_SRC))
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(GZIP_DRV_OBJ)
-DRV_OBJS_M += $(GZIP_DRV_OBJ)
-
-
-# EOF
diff --git a/src/gzip/zlib.h b/src/gzip/zlib.h
deleted file mode 100644
index a4e82c6a0..000000000
--- a/src/gzip/zlib.h
+++ /dev/null
@@ -1,830 +0,0 @@
-/* zlib.h -- interface of the 'zlib' general purpose compression library
- version 1.1.4, March 11th, 2002
-
- Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-
- Jean-loup Gailly Mark Adler
- jloup@gzip.org madler@alumni.caltech.edu
-
-
- The data format used by the zlib library is described by RFCs (Request for
- Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
- (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
-*/
-
-#ifndef _ZLIB_H
-#define _ZLIB_H
-
-#include "ftzconf.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define ZLIB_VERSION "1.1.4"
-
-/*
- The 'zlib' compression library provides in-memory compression and
- decompression functions, including integrity checks of the uncompressed
- data. This version of the library supports only one compression method
- (deflation) but other algorithms will be added later and will have the same
- stream interface.
-
- Compression can be done in a single step if the buffers are large
- enough (for example if an input file is mmap'ed), or can be done by
- repeated calls of the compression function. In the latter case, the
- application must provide more input and/or consume the output
- (providing more output space) before each call.
-
- The library also supports reading and writing files in gzip (.gz) format
- with an interface similar to that of stdio.
-
- The library does not install any signal handler. The decoder checks
- the consistency of the compressed data, so the library should never
- crash even in case of corrupted input.
-*/
-
-typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
-typedef void (*free_func) OF((voidpf opaque, voidpf address));
-
-struct internal_state;
-
-typedef struct z_stream_s {
- Bytef *next_in; /* next input byte */
- uInt avail_in; /* number of bytes available at next_in */
- uLong total_in; /* total nb of input bytes read so far */
-
- Bytef *next_out; /* next output byte should be put there */
- uInt avail_out; /* remaining free space at next_out */
- uLong total_out; /* total nb of bytes output so far */
-
- char *msg; /* last error message, NULL if no error */
- struct internal_state FAR *state; /* not visible by applications */
-
- alloc_func zalloc; /* used to allocate the internal state */
- free_func zfree; /* used to free the internal state */
- voidpf opaque; /* private data object passed to zalloc and zfree */
-
- int data_type; /* best guess about the data type: ascii or binary */
- uLong adler; /* adler32 value of the uncompressed data */
- uLong reserved; /* reserved for future use */
-} z_stream;
-
-typedef z_stream FAR *z_streamp;
-
-/*
- The application must update next_in and avail_in when avail_in has
- dropped to zero. It must update next_out and avail_out when avail_out
- has dropped to zero. The application must initialize zalloc, zfree and
- opaque before calling the init function. All other fields are set by the
- compression library and must not be updated by the application.
-
- The opaque value provided by the application will be passed as the first
- parameter for calls of zalloc and zfree. This can be useful for custom
- memory management. The compression library attaches no meaning to the
- opaque value.
-
- zalloc must return Z_NULL if there is not enough memory for the object.
- If zlib is used in a multi-threaded application, zalloc and zfree must be
- thread safe.
-
- On 16-bit systems, the functions zalloc and zfree must be able to allocate
- exactly 65536 bytes, but will not be required to allocate more than this
- if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
- pointers returned by zalloc for objects of exactly 65536 bytes *must*
- have their offset normalized to zero. The default allocation function
- provided by this library ensures this (see zutil.c). To reduce memory
- requirements and avoid any allocation of 64K objects, at the expense of
- compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
-
- The fields total_in and total_out can be used for statistics or
- progress reports. After compression, total_in holds the total size of
- the uncompressed data and may be saved for use in the decompressor
- (particularly if the decompressor wants to decompress everything in
- a single step).
-*/
-
- /* constants */
-
-#define Z_NO_FLUSH 0
-#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
-#define Z_SYNC_FLUSH 2
-#define Z_FULL_FLUSH 3
-#define Z_FINISH 4
-/* Allowed flush values; see deflate() below for details */
-
-#define Z_OK 0
-#define Z_STREAM_END 1
-#define Z_NEED_DICT 2
-#define Z_ERRNO (-1)
-#define Z_STREAM_ERROR (-2)
-#define Z_DATA_ERROR (-3)
-#define Z_MEM_ERROR (-4)
-#define Z_BUF_ERROR (-5)
-#define Z_VERSION_ERROR (-6)
-/* Return codes for the compression/decompression functions. Negative
- * values are errors, positive values are used for special but normal events.
- */
-
-#define Z_NO_COMPRESSION 0
-#define Z_BEST_SPEED 1
-#define Z_BEST_COMPRESSION 9
-#define Z_DEFAULT_COMPRESSION (-1)
-/* compression levels */
-
-#define Z_FILTERED 1
-#define Z_HUFFMAN_ONLY 2
-#define Z_DEFAULT_STRATEGY 0
-/* compression strategy; see deflateInit2() below for details */
-
-#define Z_BINARY 0
-#define Z_ASCII 1
-#define Z_UNKNOWN 2
-/* Possible values of the data_type field */
-
-#define Z_DEFLATED 8
-/* The deflate compression method (the only one supported in this version) */
-
-#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */
-
-
- /* basic functions */
-
-/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
- If the first character differs, the library code actually used is
- not compatible with the zlib.h header file used by the application.
- This check is automatically made by deflateInit and inflateInit.
- */
-
-/*
-ZEXTERN(int) deflateInit OF((z_streamp strm, int level));
-
- Initializes the internal stream state for compression. The fields
- zalloc, zfree and opaque must be initialized before by the caller.
- If zalloc and zfree are set to Z_NULL, deflateInit updates them to
- use default allocation functions.
-
- The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
- 1 gives best speed, 9 gives best compression, 0 gives no compression at
- all (the input data is simply copied a block at a time).
- Z_DEFAULT_COMPRESSION requests a default compromise between speed and
- compression (currently equivalent to level 6).
-
- deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
- enough memory, Z_STREAM_ERROR if level is not a valid compression level,
- Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
- with the version assumed by the caller (ZLIB_VERSION).
- msg is set to null if there is no error message. deflateInit does not
- perform any compression: this will be done by deflate().
-*/
-
-
-/*
- deflate compresses as much data as possible, and stops when the input
- buffer becomes empty or the output buffer becomes full. It may introduce some
- output latency (reading input without producing any output) except when
- forced to flush.
-
- The detailed semantics are as follows. deflate performs one or both of the
- following actions:
-
- - Compress more input starting at next_in and update next_in and avail_in
- accordingly. If not all input can be processed (because there is not
- enough room in the output buffer), next_in and avail_in are updated and
- processing will resume at this point for the next call of deflate().
-
- - Provide more output starting at next_out and update next_out and avail_out
- accordingly. This action is forced if the parameter flush is non zero.
- Forcing flush frequently degrades the compression ratio, so this parameter
- should be set only when necessary (in interactive applications).
- Some output may be provided even if flush is not set.
-
- Before the call of deflate(), the application should ensure that at least
- one of the actions is possible, by providing more input and/or consuming
- more output, and updating avail_in or avail_out accordingly; avail_out
- should never be zero before the call. The application can consume the
- compressed output when it wants, for example when the output buffer is full
- (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK
- and with zero avail_out, it must be called again after making room in the
- output buffer because there might be more output pending.
-
- If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
- flushed to the output buffer and the output is aligned on a byte boundary, so
- that the decompressor can get all input data available so far. (In particular
- avail_in is zero after the call if enough output space has been provided
- before the call.) Flushing may degrade compression for some compression
- algorithms and so it should be used only when necessary.
-
- If flush is set to Z_FULL_FLUSH, all output is flushed as with
- Z_SYNC_FLUSH, and the compression state is reset so that decompression can
- restart from this point if previous compressed data has been damaged or if
- random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
- the compression.
-
- If deflate returns with avail_out == 0, this function must be called again
- with the same value of the flush parameter and more output space (updated
- avail_out), until the flush is complete (deflate returns with non-zero
- avail_out).
-
- If the parameter flush is set to Z_FINISH, pending input is processed,
- pending output is flushed and deflate returns with Z_STREAM_END if there
- was enough output space; if deflate returns with Z_OK, this function must be
- called again with Z_FINISH and more output space (updated avail_out) but no
- more input data, until it returns with Z_STREAM_END or an error. After
- deflate has returned Z_STREAM_END, the only possible operations on the
- stream are deflateReset or deflateEnd.
-
- Z_FINISH can be used immediately after deflateInit if all the compression
- is to be done in a single step. In this case, avail_out must be at least
- 0.1% larger than avail_in plus 12 bytes. If deflate does not return
- Z_STREAM_END, then it must be called again as described above.
-
- deflate() sets strm->adler to the adler32 checksum of all input read
- so far (that is, total_in bytes).
-
- deflate() may update data_type if it can make a good guess about
- the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
- binary. This field is only for information purposes and does not affect
- the compression algorithm in any manner.
-
- deflate() returns Z_OK if some progress has been made (more input
- processed or more output produced), Z_STREAM_END if all input has been
- consumed and all output has been produced (only when flush is set to
- Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
- if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
- (for example avail_in or avail_out was zero).
-*/
-
-
-/*
- All dynamically allocated data structures for this stream are freed.
- This function discards any unprocessed input and does not flush any
- pending output.
-
- deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
- stream state was inconsistent, Z_DATA_ERROR if the stream was freed
- prematurely (some input or output was discarded). In the error case,
- msg may be set but then points to a static string (which must not be
- deallocated).
-*/
-
-
-/*
-ZEXTERN(int) inflateInit OF((z_streamp strm));
-
- Initializes the internal stream state for decompression. The fields
- next_in, avail_in, zalloc, zfree and opaque must be initialized before by
- the caller. If next_in is not Z_NULL and avail_in is large enough (the exact
- value depends on the compression method), inflateInit determines the
- compression method from the zlib header and allocates all data structures
- accordingly; otherwise the allocation will be deferred to the first call of
- inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to
- use default allocation functions.
-
- inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
- memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
- version assumed by the caller. msg is set to null if there is no error
- message. inflateInit does not perform any decompression apart from reading
- the zlib header if present: this will be done by inflate(). (So next_in and
- avail_in may be modified, but next_out and avail_out are unchanged.)
-*/
-
-
-ZEXTERN(int) inflate OF((z_streamp strm, int flush));
-/*
- inflate decompresses as much data as possible, and stops when the input
- buffer becomes empty or the output buffer becomes full. It may some
- introduce some output latency (reading input without producing any output)
- except when forced to flush.
-
- The detailed semantics are as follows. inflate performs one or both of the
- following actions:
-
- - Decompress more input starting at next_in and update next_in and avail_in
- accordingly. If not all input can be processed (because there is not
- enough room in the output buffer), next_in is updated and processing
- will resume at this point for the next call of inflate().
-
- - Provide more output starting at next_out and update next_out and avail_out
- accordingly. inflate() provides as much output as possible, until there
- is no more input data or no more space in the output buffer (see below
- about the flush parameter).
-
- Before the call of inflate(), the application should ensure that at least
- one of the actions is possible, by providing more input and/or consuming
- more output, and updating the next_* and avail_* values accordingly.
- The application can consume the uncompressed output when it wants, for
- example when the output buffer is full (avail_out == 0), or after each
- call of inflate(). If inflate returns Z_OK and with zero avail_out, it
- must be called again after making room in the output buffer because there
- might be more output pending.
-
- If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much
- output as possible to the output buffer. The flushing behavior of inflate is
- not specified for values of the flush parameter other than Z_SYNC_FLUSH
- and Z_FINISH, but the current implementation actually flushes as much output
- as possible anyway.
-
- inflate() should normally be called until it returns Z_STREAM_END or an
- error. However if all decompression is to be performed in a single step
- (a single call of inflate), the parameter flush should be set to
- Z_FINISH. In this case all pending input is processed and all pending
- output is flushed; avail_out must be large enough to hold all the
- uncompressed data. (The size of the uncompressed data may have been saved
- by the compressor for this purpose.) The next operation on this stream must
- be inflateEnd to deallocate the decompression state. The use of Z_FINISH
- is never required, but can be used to inform inflate that a faster routine
- may be used for the single inflate() call.
-
- If a preset dictionary is needed at this point (see inflateSetDictionary
- below), inflate sets strm-adler to the adler32 checksum of the
- dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise
- it sets strm->adler to the adler32 checksum of all output produced
- so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or
- an error code as described below. At the end of the stream, inflate()
- checks that its computed adler32 checksum is equal to that saved by the
- compressor and returns Z_STREAM_END only if the checksum is correct.
-
- inflate() returns Z_OK if some progress has been made (more input processed
- or more output produced), Z_STREAM_END if the end of the compressed data has
- been reached and all uncompressed output has been produced, Z_NEED_DICT if a
- preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
- corrupted (input stream not conforming to the zlib format or incorrect
- adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent
- (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not
- enough memory, Z_BUF_ERROR if no progress is possible or if there was not
- enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR
- case, the application may then call inflateSync to look for a good
- compression block.
-*/
-
-
-ZEXTERN(int) inflateEnd OF((z_streamp strm));
-/*
- All dynamically allocated data structures for this stream are freed.
- This function discards any unprocessed input and does not flush any
- pending output.
-
- inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
- was inconsistent. In the error case, msg may be set but then points to a
- static string (which must not be deallocated).
-*/
-
- /* Advanced functions */
-
-/*
- The following functions are needed only in some special applications.
-*/
-
-/*
-ZEXTERN(int) deflateInit2 OF((z_streamp strm,
- int level,
- int method,
- int windowBits,
- int memLevel,
- int strategy));
-
- This is another version of deflateInit with more compression options. The
- fields next_in, zalloc, zfree and opaque must be initialized before by
- the caller.
-
- The method parameter is the compression method. It must be Z_DEFLATED in
- this version of the library.
-
- The windowBits parameter is the base two logarithm of the window size
- (the size of the history buffer). It should be in the range 8..15 for this
- version of the library. Larger values of this parameter result in better
- compression at the expense of memory usage. The default value is 15 if
- deflateInit is used instead.
-
- The memLevel parameter specifies how much memory should be allocated
- for the internal compression state. memLevel=1 uses minimum memory but
- is slow and reduces compression ratio; memLevel=9 uses maximum memory
- for optimal speed. The default value is 8. See zconf.h for total memory
- usage as a function of windowBits and memLevel.
-
- The strategy parameter is used to tune the compression algorithm. Use the
- value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
- filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no
- string match). Filtered data consists mostly of small values with a
- somewhat random distribution. In this case, the compression algorithm is
- tuned to compress them better. The effect of Z_FILTERED is to force more
- Huffman coding and less string matching; it is somewhat intermediate
- between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects
- the compression ratio but not the correctness of the compressed output even
- if it is not set appropriately.
-
- deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
- memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
- method). msg is set to null if there is no error message. deflateInit2 does
- not perform any compression: this will be done by deflate().
-*/
-
-/*
- Initializes the compression dictionary from the given byte sequence
- without producing any compressed output. This function must be called
- immediately after deflateInit, deflateInit2 or deflateReset, before any
- call of deflate. The compressor and decompressor must use exactly the same
- dictionary (see inflateSetDictionary).
-
- The dictionary should consist of strings (byte sequences) that are likely
- to be encountered later in the data to be compressed, with the most commonly
- used strings preferably put towards the end of the dictionary. Using a
- dictionary is most useful when the data to be compressed is short and can be
- predicted with good accuracy; the data can then be compressed better than
- with the default empty dictionary.
-
- Depending on the size of the compression data structures selected by
- deflateInit or deflateInit2, a part of the dictionary may in effect be
- discarded, for example if the dictionary is larger than the window size in
- deflate or deflate2. Thus the strings most likely to be useful should be
- put at the end of the dictionary, not at the front.
-
- Upon return of this function, strm->adler is set to the Adler32 value
- of the dictionary; the decompressor may later use this value to determine
- which dictionary has been used by the compressor. (The Adler32 value
- applies to the whole dictionary even if only a subset of the dictionary is
- actually used by the compressor.)
-
- deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
- parameter is invalid (such as NULL dictionary) or the stream state is
- inconsistent (for example if deflate has already been called for this stream
- or if the compression method is bsort). deflateSetDictionary does not
- perform any compression: this will be done by deflate().
-*/
-
-/*
- Sets the destination stream as a complete copy of the source stream.
-
- This function can be useful when several compression strategies will be
- tried, for example when there are several ways of pre-processing the input
- data with a filter. The streams that will be discarded should then be freed
- by calling deflateEnd. Note that deflateCopy duplicates the internal
- compression state which can be quite large, so this strategy is slow and
- can consume lots of memory.
-
- deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
- enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
- (such as zalloc being NULL). msg is left unchanged in both source and
- destination.
-*/
-
-/*
- This function is equivalent to deflateEnd followed by deflateInit,
- but does not free and reallocate all the internal compression state.
- The stream will keep the same compression level and any other attributes
- that may have been set by deflateInit2.
-
- deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
- stream state was inconsistent (such as zalloc or state being NULL).
-*/
-
-/*
- Dynamically update the compression level and compression strategy. The
- interpretation of level and strategy is as in deflateInit2. This can be
- used to switch between compression and straight copy of the input data, or
- to switch to a different kind of input data requiring a different
- strategy. If the compression level is changed, the input available so far
- is compressed with the old level (and may be flushed); the new level will
- take effect only at the next call of deflate().
-
- Before the call of deflateParams, the stream state must be set as for
- a call of deflate(), since the currently available input may have to
- be compressed and flushed. In particular, strm->avail_out must be non-zero.
-
- deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
- stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR
- if strm->avail_out was zero.
-*/
-
-/*
-ZEXTERN(int) inflateInit2 OF((z_streamp strm,
- int windowBits));
-
- This is another version of inflateInit with an extra parameter. The
- fields next_in, avail_in, zalloc, zfree and opaque must be initialized
- before by the caller.
-
- The windowBits parameter is the base two logarithm of the maximum window
- size (the size of the history buffer). It should be in the range 8..15 for
- this version of the library. The default value is 15 if inflateInit is used
- instead. If a compressed stream with a larger window size is given as
- input, inflate() will return with the error code Z_DATA_ERROR instead of
- trying to allocate a larger window.
-
- inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
- memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
- memLevel). msg is set to null if there is no error message. inflateInit2
- does not perform any decompression apart from reading the zlib header if
- present: this will be done by inflate(). (So next_in and avail_in may be
- modified, but next_out and avail_out are unchanged.)
-*/
-
-/*
- Initializes the decompression dictionary from the given uncompressed byte
- sequence. This function must be called immediately after a call of inflate
- if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
- can be determined from the Adler32 value returned by this call of
- inflate. The compressor and decompressor must use exactly the same
- dictionary (see deflateSetDictionary).
-
- inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
- parameter is invalid (such as NULL dictionary) or the stream state is
- inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
- expected one (incorrect Adler32 value). inflateSetDictionary does not
- perform any decompression: this will be done by subsequent calls of
- inflate().
-*/
-
-/*
- Skips invalid compressed data until a full flush point (see above the
- description of deflate with Z_FULL_FLUSH) can be found, or until all
- available input is skipped. No output is provided.
-
- inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
- if no more input was provided, Z_DATA_ERROR if no flush point has been found,
- or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
- case, the application may save the current value of total_in which
- indicates where valid compressed data was found. In the error case, the
- application may repeatedly call inflateSync, providing more input each time,
- until success or end of the input data.
-*/
-
-ZEXTERN(int) inflateReset OF((z_streamp strm));
-/*
- This function is equivalent to inflateEnd followed by inflateInit,
- but does not free and reallocate all the internal decompression state.
- The stream will keep attributes that may have been set by inflateInit2.
-
- inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
- stream state was inconsistent (such as zalloc or state being NULL).
-*/
-
-
- /* utility functions */
-
-/*
- The following utility functions are implemented on top of the
- basic stream-oriented functions. To simplify the interface, some
- default options are assumed (compression level and memory usage,
- standard memory allocation functions). The source code of these
- utility functions can easily be modified if you need special options.
-*/
-
-/*
- Compresses the source buffer into the destination buffer. sourceLen is
- the byte length of the source buffer. Upon entry, destLen is the total
- size of the destination buffer, which must be at least 0.1% larger than
- sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the
- compressed buffer.
- This function can be used to compress a whole file at once if the
- input file is mmap'ed.
- compress returns Z_OK if success, Z_MEM_ERROR if there was not
- enough memory, Z_BUF_ERROR if there was not enough room in the output
- buffer.
-*/
-
-/*
- Compresses the source buffer into the destination buffer. The level
- parameter has the same meaning as in deflateInit. sourceLen is the byte
- length of the source buffer. Upon entry, destLen is the total size of the
- destination buffer, which must be at least 0.1% larger than sourceLen plus
- 12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
-
- compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
- memory, Z_BUF_ERROR if there was not enough room in the output buffer,
- Z_STREAM_ERROR if the level parameter is invalid.
-*/
-
-/*
- Decompresses the source buffer into the destination buffer. sourceLen is
- the byte length of the source buffer. Upon entry, destLen is the total
- size of the destination buffer, which must be large enough to hold the
- entire uncompressed data. (The size of the uncompressed data must have
- been saved previously by the compressor and transmitted to the decompressor
- by some mechanism outside the scope of this compression library.)
- Upon exit, destLen is the actual size of the compressed buffer.
- This function can be used to decompress a whole file at once if the
- input file is mmap'ed.
-
- uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
- enough memory, Z_BUF_ERROR if there was not enough room in the output
- buffer, or Z_DATA_ERROR if the input data was corrupted.
-*/
-
-
-/*
- Opens a gzip (.gz) file for reading or writing. The mode parameter
- is as in fopen ("rb" or "wb") but can also include a compression level
- ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
- Huffman only compression as in "wb1h". (See the description
- of deflateInit2 for more information about the strategy parameter.)
-
- gzopen can be used to read a file which is not in gzip format; in this
- case gzread will directly read from the file without decompression.
-
- gzopen returns NULL if the file could not be opened or if there was
- insufficient memory to allocate the (de)compression state; errno
- can be checked to distinguish the two cases (if errno is zero, the
- zlib error is Z_MEM_ERROR). */
-
-/*
- gzdopen() associates a gzFile with the file descriptor fd. File
- descriptors are obtained from calls like open, dup, creat, pipe or
- fileno (in the file has been previously opened with fopen).
- The mode parameter is as in gzopen.
- The next call of gzclose on the returned gzFile will also close the
- file descriptor fd, just like fclose(fdopen(fd), mode) closes the file
- descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode).
- gzdopen returns NULL if there was insufficient memory to allocate
- the (de)compression state.
-*/
-
-/*
- Dynamically update the compression level or strategy. See the description
- of deflateInit2 for the meaning of these parameters.
- gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
- opened for writing.
-*/
-
-/*
- Reads the given number of uncompressed bytes from the compressed file.
- If the input file was not in gzip format, gzread copies the given number
- of bytes into the buffer.
- gzread returns the number of uncompressed bytes actually read (0 for
- end of file, -1 for error). */
-
-/*
- Writes the given number of uncompressed bytes into the compressed file.
- gzwrite returns the number of uncompressed bytes actually written
- (0 in case of error).
-*/
-
-/*
- Converts, formats, and writes the args to the compressed file under
- control of the format string, as in fprintf. gzprintf returns the number of
- uncompressed bytes actually written (0 in case of error).
-*/
-
-/*
- Writes the given null-terminated string to the compressed file, excluding
- the terminating null character.
- gzputs returns the number of characters written, or -1 in case of error.
-*/
-
-/*
- Reads bytes from the compressed file until len-1 characters are read, or
- a newline character is read and transferred to buf, or an end-of-file
- condition is encountered. The string is then terminated with a null
- character.
- gzgets returns buf, or Z_NULL in case of error.
-*/
-
-/*
- Writes c, converted to an unsigned char, into the compressed file.
- gzputc returns the value that was written, or -1 in case of error.
-*/
-
-/*
- Reads one byte from the compressed file. gzgetc returns this byte
- or -1 in case of end of file or error.
-*/
-
-/*
- Flushes all pending output into the compressed file. The parameter
- flush is as in the deflate() function. The return value is the zlib
- error number (see function gzerror below). gzflush returns Z_OK if
- the flush parameter is Z_FINISH and all output could be flushed.
- gzflush should be called only when strictly necessary because it can
- degrade compression.
-*/
-
-/*
- Sets the starting position for the next gzread or gzwrite on the
- given compressed file. The offset represents a number of bytes in the
- uncompressed data stream. The whence parameter is defined as in lseek(2);
- the value SEEK_END is not supported.
- If the file is opened for reading, this function is emulated but can be
- extremely slow. If the file is opened for writing, only forward seeks are
- supported; gzseek then compresses a sequence of zeroes up to the new
- starting position.
-
- gzseek returns the resulting offset location as measured in bytes from
- the beginning of the uncompressed stream, or -1 in case of error, in
- particular if the file is opened for writing and the new starting position
- would be before the current position.
-*/
-
-/*
- Rewinds the given file. This function is supported only for reading.
-
- gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
-*/
-
-/*
- Returns the starting position for the next gzread or gzwrite on the
- given compressed file. This position represents a number of bytes in the
- uncompressed data stream.
-
- gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
-*/
-
-/*
- Returns 1 when EOF has previously been detected reading the given
- input stream, otherwise zero.
-*/
-
-/*
- Flushes all pending output if necessary, closes the compressed file
- and deallocates all the (de)compression state. The return value is the zlib
- error number (see function gzerror below).
-*/
-
-/*
- Returns the error message for the last error which occurred on the
- given compressed file. errnum is set to zlib error number. If an
- error occurred in the file system and not in the compression library,
- errnum is set to Z_ERRNO and the application may consult errno
- to get the exact error code.
-*/
-
- /* checksum functions */
-
-/*
- These functions are not related to compression but are exported
- anyway because they might be useful in applications using the
- compression library.
-*/
-
-ZEXTERN(uLong) adler32 OF((uLong adler, const Bytef *buf, uInt len));
-
-/*
- Update a running Adler-32 checksum with the bytes buf[0..len-1] and
- return the updated checksum. If buf is NULL, this function returns
- the required initial value for the checksum.
- An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
- much faster. Usage example:
-
- uLong adler = adler32(0L, Z_NULL, 0);
-
- while (read_buffer(buffer, length) != EOF) {
- adler = adler32(adler, buffer, length);
- }
- if (adler != original_adler) error();
-*/
-
-/*
- Update a running crc with the bytes buf[0..len-1] and return the updated
- crc. If buf is NULL, this function returns the required initial value
- for the crc. Pre- and post-conditioning (one's complement) is performed
- within this function so it shouldn't be done by the application.
- Usage example:
-
- uLong crc = crc32(0L, Z_NULL, 0);
-
- while (read_buffer(buffer, length) != EOF) {
- crc = crc32(crc, buffer, length);
- }
- if (crc != original_crc) error();
-*/
-
-
- /* various hacks, don't look :) */
-
-/* deflateInit and inflateInit are macros to allow checking the zlib version
- * and the compiler's view of z_stream:
- */
-ZEXTERN(int) inflateInit2_ OF((z_streamp strm, int windowBits,
- const char *version, int stream_size));
-#define deflateInit(strm, level) \
- deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream))
-#define inflateInit(strm) \
- inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream))
-#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
- deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
- (strategy), ZLIB_VERSION, sizeof(z_stream))
-#define inflateInit2(strm, windowBits) \
- inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ZLIB_H */
diff --git a/src/gzip/zutil.c b/src/gzip/zutil.c
deleted file mode 100644
index 7ad0c1f81..000000000
--- a/src/gzip/zutil.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/* zutil.c -- target dependent utility functions for the compression library
- * Copyright (C) 1995-2002 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#include "zutil.h"
-
-#ifndef STDC
-extern void exit OF((int));
-#endif
-
-
-#ifndef HAVE_MEMCPY
-
-void zmemcpy(dest, source, len)
- Bytef* dest;
- const Bytef* source;
- uInt len;
-{
- if (len == 0) return;
- do {
- *dest++ = *source++; /* ??? to be unrolled */
- } while (--len != 0);
-}
-
-int zmemcmp(s1, s2, len)
- const Bytef* s1;
- const Bytef* s2;
- uInt len;
-{
- uInt j;
-
- for (j = 0; j < len; j++) {
- if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
- }
- return 0;
-}
-
-void zmemzero(dest, len)
- Bytef* dest;
- uInt len;
-{
- if (len == 0) return;
- do {
- *dest++ = 0; /* ??? to be unrolled */
- } while (--len != 0);
-}
-#endif
-
-#if defined( MSDOS ) && defined( __TURBOC__ ) && !defined( MY_ZCALLOC )
-#if (defined( __BORLANDC__) || !defined(SMALL_MEDIUM)) && !defined(__32BIT__)
-/* Small and medium model in Turbo C are for now limited to near allocation
- * with reduced MAX_WBITS and MAX_MEM_LEVEL
- */
-# define MY_ZCALLOC
-
-/* Turbo C malloc() does not allow dynamic allocation of 64K bytes
- * and farmalloc(64K) returns a pointer with an offset of 8, so we
- * must fix the pointer. Warning: the pointer must be put back to its
- * original form in order to free it, use zcfree().
- */
-
-#define MAX_PTR 10
-/* 10*64K = 640K */
-
-local int next_ptr = 0;
-
-typedef struct ptr_table_s {
- voidpf org_ptr;
- voidpf new_ptr;
-} ptr_table;
-
-local ptr_table table[MAX_PTR];
-/* This table is used to remember the original form of pointers
- * to large buffers (64K). Such pointers are normalized with a zero offset.
- * Since MSDOS is not a preemptive multitasking OS, this table is not
- * protected from concurrent access. This hack doesn't work anyway on
- * a protected system like OS/2. Use Microsoft C instead.
- */
-
-voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
-{
- voidpf buf = opaque; /* just to make some compilers happy */
- ulg bsize = (ulg)items*size;
-
- /* If we allocate less than 65520 bytes, we assume that farmalloc
- * will return a usable pointer which doesn't have to be normalized.
- */
- if (bsize < 65520L) {
- buf = farmalloc(bsize);
- if (*(ush*)&buf != 0) return buf;
- } else {
- buf = farmalloc(bsize + 16L);
- }
- if (buf == NULL || next_ptr >= MAX_PTR) return NULL;
- table[next_ptr].org_ptr = buf;
-
- /* Normalize the pointer to seg:0 */
- *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;
- *(ush*)&buf = 0;
- table[next_ptr++].new_ptr = buf;
- return buf;
-}
-
-void zcfree (voidpf opaque, voidpf ptr)
-{
- int n;
- if (*(ush*)&ptr != 0) { /* object < 64K */
- farfree(ptr);
- return;
- }
- /* Find the original pointer */
- for (n = 0; n < next_ptr; n++) {
- if (ptr != table[n].new_ptr) continue;
-
- farfree(table[n].org_ptr);
- while (++n < next_ptr) {
- table[n-1] = table[n];
- }
- next_ptr--;
- return;
- }
- ptr = opaque; /* just to make some compilers happy */
- Assert(0, "zcfree: ptr not found");
-}
-#endif
-#endif /* MSDOS && __TURBOC__ */
-
-
-#if defined(M_I86) && !defined(__32BIT__) && !defined( MY_ZCALLOC )
-/* Microsoft C in 16-bit mode */
-
-# define MY_ZCALLOC
-
-#if (!defined(_MSC_VER) || (_MSC_VER <= 600))
-# define _halloc halloc
-# define _hfree hfree
-#endif
-
-voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
-{
- if (opaque) opaque = 0; /* to make compiler happy */
- return _halloc((long)items, size);
-}
-
-void zcfree (voidpf opaque, voidpf ptr)
-{
- if (opaque) opaque = 0; /* to make compiler happy */
- _hfree(ptr);
-}
-
-#endif /* MSC */
-
-
-#ifndef MY_ZCALLOC /* Any system without a special alloc function */
-
-#ifndef STDC
-extern voidp ft_scalloc OF((uInt items, uInt size));
-extern void ft_sfree OF((voidpf ptr));
-#endif
-
-voidpf zcalloc (opaque, items, size)
- voidpf opaque;
- unsigned items;
- unsigned size;
-{
- if (opaque) items += size - size; /* make compiler happy */
- return (voidpf)ft_scalloc(items, size);
-}
-
-void zcfree (opaque, ptr)
- voidpf opaque;
- voidpf ptr;
-{
- ft_sfree(ptr);
- if (opaque) return; /* make compiler happy */
-}
-
-#endif /* MY_ZCALLOC */
diff --git a/src/gzip/zutil.h b/src/gzip/zutil.h
deleted file mode 100644
index c9688cd9c..000000000
--- a/src/gzip/zutil.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/* zutil.h -- internal interface and configuration of the compression library
- * Copyright (C) 1995-2002 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-/* @(#) $Id$ */
-
-#ifndef _Z_UTIL_H
-#define _Z_UTIL_H
-
-#include "zlib.h"
-
-#ifdef STDC
-# include <stddef.h>
-# include <string.h>
-# include <stdlib.h>
-#endif
-#ifdef NO_ERRNO_H
- extern int errno;
-#else
-# include <errno.h>
-#endif
-
-#ifndef local
-# define local static
-#endif
-/* compile with -Dlocal if your debugger can't find static symbols */
-
-typedef unsigned char uch;
-typedef uch FAR uchf;
-typedef unsigned short ush;
-typedef ush FAR ushf;
-typedef unsigned long ulg;
-
-
-#define ERR_RETURN(strm,err) \
- return (strm->msg = (char*)ERR_MSG(err), (err))
-/* To be used only when the state is known to be valid */
-
- /* common constants */
-
-#ifndef DEF_WBITS
-# define DEF_WBITS MAX_WBITS
-#endif
-/* default windowBits for decompression. MAX_WBITS is for compression only */
-
-#if MAX_MEM_LEVEL >= 8
-# define DEF_MEM_LEVEL 8
-#else
-# define DEF_MEM_LEVEL MAX_MEM_LEVEL
-#endif
-/* default memLevel */
-
-#define STORED_BLOCK 0
-#define STATIC_TREES 1
-#define DYN_TREES 2
-/* The three kinds of block type */
-
-#define MIN_MATCH 3
-#define MAX_MATCH 258
-/* The minimum and maximum match lengths */
-
-#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
-
- /* target dependencies */
-
-#ifdef MSDOS
-# define OS_CODE 0x00
-# if defined(__TURBOC__) || defined(__BORLANDC__)
-# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
- /* Allow compilation with ANSI keywords only enabled */
- void _Cdecl farfree( void *block );
- void *_Cdecl farmalloc( unsigned long nbytes );
-# else
-# include <alloc.h>
-# endif
-# else /* MSC or DJGPP */
-# endif
-#endif
-
-#ifdef OS2
-# define OS_CODE 0x06
-#endif
-
-#ifdef WIN32 /* Window 95 & Windows NT */
-# define OS_CODE 0x0b
-#endif
-
-#if defined(VAXC) || defined(VMS)
-# define OS_CODE 0x02
-# define F_OPEN(name, mode) \
- ft_fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
-#endif
-
-#ifdef AMIGA
-# define OS_CODE 0x01
-#endif
-
-#if defined(ATARI) || defined(atarist)
-# define OS_CODE 0x05
-#endif
-
-#if defined(MACOS) || defined(TARGET_OS_MAC)
-# define OS_CODE 0x07
-# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
-# include <unix.h> /* for fdopen */
-# else
-# ifndef fdopen
-# define fdopen(fd,mode) NULL /* No fdopen() */
-# endif
-# endif
-#endif
-
-#ifdef __50SERIES /* Prime/PRIMOS */
-# define OS_CODE 0x0F
-#endif
-
-#ifdef TOPS20
-# define OS_CODE 0x0a
-#endif
-
-#if defined(_BEOS_) || defined(RISCOS)
-# define fdopen(fd,mode) NULL /* No fdopen() */
-#endif
-
-#if (defined(_MSC_VER) && (_MSC_VER > 600))
-# define fdopen(fd,type) _fdopen(fd,type)
-#endif
-
-
- /* Common defaults */
-
-#ifndef OS_CODE
-# define OS_CODE 0x03 /* assume Unix */
-#endif
-
-#ifndef F_OPEN
-# define F_OPEN(name, mode) ft_fopen((name), (mode))
-#endif
-
- /* functions */
-
-#ifdef HAVE_STRERROR
- extern char *strerror OF((int));
-# define zstrerror(errnum) strerror(errnum)
-#else
-# define zstrerror(errnum) ""
-#endif
-
-#if defined(pyr)
-# define NO_MEMCPY
-#endif
-#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
- /* Use our own functions for small and medium model with MSC <= 5.0.
- * You may have to use the same strategy for Borland C (untested).
- * The __SC__ check is for Symantec.
- */
-# define NO_MEMCPY
-#endif
-#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
-# define HAVE_MEMCPY
-#endif
-#ifdef HAVE_MEMCPY
-# ifdef SMALL_MEDIUM /* MSDOS small or medium model */
-# define zmemcpy _fmemcpy
-# define zmemcmp _fmemcmp
-# define zmemzero(dest, len) _fmemset(dest, 0, len)
-# else
-# define zmemcpy ft_memcpy
-# define zmemcmp ft_memcmp
-# define zmemzero(dest, len) ft_memset(dest, 0, len)
-# endif
-#else
- extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
- extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
- extern void zmemzero OF((Bytef* dest, uInt len));
-#endif
-
-/* Diagnostic functions */
-#ifdef DEBUG
-# include <stdio.h>
- extern int z_verbose;
- extern void z_error OF((char *m));
-# define Assert(cond,msg) {if(!(cond)) z_error(msg);}
-# define Trace(x) {if (z_verbose>=0) fprintf x ;}
-# define Tracev(x) {if (z_verbose>0) fprintf x ;}
-# define Tracevv(x) {if (z_verbose>1) fprintf x ;}
-# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
-# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
-#else
-# define Assert(cond,msg)
-# define Trace(x)
-# define Tracev(x)
-# define Tracevv(x)
-# define Tracec(c,x)
-# define Tracecv(c,x)
-#endif
-
-
-typedef uLong (*check_func) OF((uLong check, const Bytef *buf,
- uInt len));
-local voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size));
-local void zcfree OF((voidpf opaque, voidpf ptr));
-
-#define ZALLOC(strm, items, size) \
- (*((strm)->zalloc))((strm)->opaque, (items), (size))
-#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
-#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
-
-#endif /* _Z_UTIL_H */
diff --git a/src/lzw/Jamfile b/src/lzw/Jamfile
deleted file mode 100644
index 8e61f080a..000000000
--- a/src/lzw/Jamfile
+++ /dev/null
@@ -1,16 +0,0 @@
-# FreeType 2 src/lzw Jamfile
-#
-# Copyright 2004-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) lzw ;
-
-Library $(FT2_LIB) : ftlzw.c ;
-
-# end of src/lzw Jamfile
diff --git a/src/lzw/ftlzw.c b/src/lzw/ftlzw.c
deleted file mode 100644
index 941f6cef4..000000000
--- a/src/lzw/ftlzw.c
+++ /dev/null
@@ -1,420 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftlzw.c */
-/* */
-/* FreeType support for .Z compressed files. */
-/* */
-/* This optional component relies on NetBSD's zopen(). It should mainly */
-/* be used to parse compressed PCF fonts, as found with many X11 server */
-/* distributions. */
-/* */
-/* Copyright 2004-2017 by */
-/* Albert Chin-A-Young. */
-/* */
-/* based on code in `src/gzip/ftgzip.c' */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-#include <ft2build.h>
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_LZW_H
-#include FT_CONFIG_STANDARD_LIBRARY_H
-
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX LZW_Err_
-#define FT_ERR_BASE FT_Mod_Err_LZW
-
-#include FT_ERRORS_H
-
-
-#ifdef FT_CONFIG_OPTION_USE_LZW
-
-#ifdef FT_CONFIG_OPTION_PIC
-#error "lzw code does not support PIC yet"
-#endif
-
-#include "ftzopen.h"
-
-
-/***************************************************************************/
-/***************************************************************************/
-/***** *****/
-/***** M E M O R Y M A N A G E M E N T *****/
-/***** *****/
-/***************************************************************************/
-/***************************************************************************/
-
-/***************************************************************************/
-/***************************************************************************/
-/***** *****/
-/***** F I L E D E S C R I P T O R *****/
-/***** *****/
-/***************************************************************************/
-/***************************************************************************/
-
-#define FT_LZW_BUFFER_SIZE 4096
-
- typedef struct FT_LZWFileRec_
- {
- FT_Stream source; /* parent/source stream */
- FT_Stream stream; /* embedding stream */
- FT_Memory memory; /* memory allocator */
- FT_LzwStateRec lzw; /* lzw decompressor state */
-
- FT_Byte buffer[FT_LZW_BUFFER_SIZE]; /* output buffer */
- FT_ULong pos; /* position in output */
- FT_Byte* cursor;
- FT_Byte* limit;
-
- } FT_LZWFileRec, *FT_LZWFile;
-
-
- /* check and skip .Z header */
- static FT_Error
- ft_lzw_check_header( FT_Stream stream )
- {
- FT_Error error;
- FT_Byte head[2];
-
-
- if ( FT_STREAM_SEEK( 0 ) ||
- FT_STREAM_READ( head, 2 ) )
- goto Exit;
-
- /* head[0] && head[1] are the magic numbers */
- if ( head[0] != 0x1F ||
- head[1] != 0x9D )
- error = FT_THROW( Invalid_File_Format );
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- ft_lzw_file_init( FT_LZWFile zip,
- FT_Stream stream,
- FT_Stream source )
- {
- FT_LzwState lzw = &zip->lzw;
- FT_Error error;
-
-
- zip->stream = stream;
- zip->source = source;
- zip->memory = stream->memory;
-
- zip->limit = zip->buffer + FT_LZW_BUFFER_SIZE;
- zip->cursor = zip->limit;
- zip->pos = 0;
-
- /* check and skip .Z header */
- error = ft_lzw_check_header( source );
- if ( error )
- goto Exit;
-
- /* initialize internal lzw variable */
- ft_lzwstate_init( lzw, source );
-
- Exit:
- return error;
- }
-
-
- static void
- ft_lzw_file_done( FT_LZWFile zip )
- {
- /* clear the rest */
- ft_lzwstate_done( &zip->lzw );
-
- zip->memory = NULL;
- zip->source = NULL;
- zip->stream = NULL;
- }
-
-
- static FT_Error
- ft_lzw_file_reset( FT_LZWFile zip )
- {
- FT_Stream stream = zip->source;
- FT_Error error;
-
-
- if ( !FT_STREAM_SEEK( 0 ) )
- {
- ft_lzwstate_reset( &zip->lzw );
-
- zip->limit = zip->buffer + FT_LZW_BUFFER_SIZE;
- zip->cursor = zip->limit;
- zip->pos = 0;
- }
-
- return error;
- }
-
-
- static FT_Error
- ft_lzw_file_fill_output( FT_LZWFile zip )
- {
- FT_LzwState lzw = &zip->lzw;
- FT_ULong count;
- FT_Error error = FT_Err_Ok;
-
-
- zip->cursor = zip->buffer;
-
- count = ft_lzwstate_io( lzw, zip->buffer, FT_LZW_BUFFER_SIZE );
-
- zip->limit = zip->cursor + count;
-
- if ( count == 0 )
- error = FT_THROW( Invalid_Stream_Operation );
-
- return error;
- }
-
-
- /* fill output buffer; `count' must be <= FT_LZW_BUFFER_SIZE */
- static FT_Error
- ft_lzw_file_skip_output( FT_LZWFile zip,
- FT_ULong count )
- {
- FT_Error error = FT_Err_Ok;
-
-
- /* first, we skip what we can from the output buffer */
- {
- FT_ULong delta = (FT_ULong)( zip->limit - zip->cursor );
-
-
- if ( delta >= count )
- delta = count;
-
- zip->cursor += delta;
- zip->pos += delta;
-
- count -= delta;
- }
-
- /* next, we skip as many bytes remaining as possible */
- while ( count > 0 )
- {
- FT_ULong delta = FT_LZW_BUFFER_SIZE;
- FT_ULong numread;
-
-
- if ( delta > count )
- delta = count;
-
- numread = ft_lzwstate_io( &zip->lzw, NULL, delta );
- if ( numread < delta )
- {
- /* not enough bytes */
- error = FT_THROW( Invalid_Stream_Operation );
- break;
- }
-
- zip->pos += delta;
- count -= delta;
- }
-
- return error;
- }
-
-
- static FT_ULong
- ft_lzw_file_io( FT_LZWFile zip,
- FT_ULong pos,
- FT_Byte* buffer,
- FT_ULong count )
- {
- FT_ULong result = 0;
- FT_Error error;
-
-
- /* seeking backwards. */
- if ( pos < zip->pos )
- {
- /* If the new position is within the output buffer, simply */
- /* decrement pointers, otherwise we reset the stream completely! */
- if ( ( zip->pos - pos ) <= (FT_ULong)( zip->cursor - zip->buffer ) )
- {
- zip->cursor -= zip->pos - pos;
- zip->pos = pos;
- }
- else
- {
- error = ft_lzw_file_reset( zip );
- if ( error )
- goto Exit;
- }
- }
-
- /* skip unwanted bytes */
- if ( pos > zip->pos )
- {
- error = ft_lzw_file_skip_output( zip, (FT_ULong)( pos - zip->pos ) );
- if ( error )
- goto Exit;
- }
-
- if ( count == 0 )
- goto Exit;
-
- /* now read the data */
- for (;;)
- {
- FT_ULong delta;
-
-
- delta = (FT_ULong)( zip->limit - zip->cursor );
- if ( delta >= count )
- delta = count;
-
- FT_MEM_COPY( buffer + result, zip->cursor, delta );
- result += delta;
- zip->cursor += delta;
- zip->pos += delta;
-
- count -= delta;
- if ( count == 0 )
- break;
-
- error = ft_lzw_file_fill_output( zip );
- if ( error )
- break;
- }
-
- Exit:
- return result;
- }
-
-
-/***************************************************************************/
-/***************************************************************************/
-/***** *****/
-/***** L Z W E M B E D D I N G S T R E A M *****/
-/***** *****/
-/***************************************************************************/
-/***************************************************************************/
-
- static void
- ft_lzw_stream_close( FT_Stream stream )
- {
- FT_LZWFile zip = (FT_LZWFile)stream->descriptor.pointer;
- FT_Memory memory = stream->memory;
-
-
- if ( zip )
- {
- /* finalize lzw file descriptor */
- ft_lzw_file_done( zip );
-
- FT_FREE( zip );
-
- stream->descriptor.pointer = NULL;
- }
- }
-
-
- static unsigned long
- ft_lzw_stream_io( FT_Stream stream,
- unsigned long offset,
- unsigned char* buffer,
- unsigned long count )
- {
- FT_LZWFile zip = (FT_LZWFile)stream->descriptor.pointer;
-
-
- return ft_lzw_file_io( zip, offset, buffer, count );
- }
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stream_OpenLZW( FT_Stream stream,
- FT_Stream source )
- {
- FT_Error error;
- FT_Memory memory;
- FT_LZWFile zip = NULL;
-
-
- if ( !stream || !source )
- {
- error = FT_THROW( Invalid_Stream_Handle );
- goto Exit;
- }
-
- memory = source->memory;
-
- /*
- * Check the header right now; this prevents allocation of a huge
- * LZWFile object (400 KByte of heap memory) if not necessary.
- *
- * Did I mention that you should never use .Z compressed font
- * files?
- */
- error = ft_lzw_check_header( source );
- if ( error )
- goto Exit;
-
- FT_ZERO( stream );
- stream->memory = memory;
-
- if ( !FT_NEW( zip ) )
- {
- error = ft_lzw_file_init( zip, stream, source );
- if ( error )
- {
- FT_FREE( zip );
- goto Exit;
- }
-
- stream->descriptor.pointer = zip;
- }
-
- stream->size = 0x7FFFFFFFL; /* don't know the real size! */
- stream->pos = 0;
- stream->base = 0;
- stream->read = ft_lzw_stream_io;
- stream->close = ft_lzw_stream_close;
-
- Exit:
- return error;
- }
-
-
-#include "ftzopen.c"
-
-
-#else /* !FT_CONFIG_OPTION_USE_LZW */
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stream_OpenLZW( FT_Stream stream,
- FT_Stream source )
- {
- FT_UNUSED( stream );
- FT_UNUSED( source );
-
- return FT_THROW( Unimplemented_Feature );
- }
-
-
-#endif /* !FT_CONFIG_OPTION_USE_LZW */
-
-
-/* END */
diff --git a/src/lzw/ftzopen.c b/src/lzw/ftzopen.c
deleted file mode 100644
index 486c546c1..000000000
--- a/src/lzw/ftzopen.c
+++ /dev/null
@@ -1,424 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftzopen.c */
-/* */
-/* FreeType support for .Z compressed files. */
-/* */
-/* This optional component relies on NetBSD's zopen(). It should mainly */
-/* be used to parse compressed PCF fonts, as found with many X11 server */
-/* distributions. */
-/* */
-/* Copyright 2005-2017 by */
-/* David Turner. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-#include "ftzopen.h"
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_DEBUG_H
-
-
- static int
- ft_lzwstate_refill( FT_LzwState state )
- {
- FT_ULong count;
-
-
- if ( state->in_eof )
- return -1;
-
- count = FT_Stream_TryRead( state->source,
- state->buf_tab,
- state->num_bits ); /* WHY? */
-
- state->buf_size = (FT_UInt)count;
- state->buf_total += count;
- state->in_eof = FT_BOOL( count < state->num_bits );
- state->buf_offset = 0;
-
- state->buf_size <<= 3;
- if ( state->buf_size > state->num_bits )
- state->buf_size -= state->num_bits - 1;
- else
- return -1; /* not enough data */
-
- if ( count == 0 ) /* end of file */
- return -1;
-
- return 0;
- }
-
-
- static FT_Int32
- ft_lzwstate_get_code( FT_LzwState state )
- {
- FT_UInt num_bits = state->num_bits;
- FT_UInt offset = state->buf_offset;
- FT_Byte* p;
- FT_Int result;
-
-
- if ( state->buf_clear ||
- offset >= state->buf_size ||
- state->free_ent >= state->free_bits )
- {
- if ( state->free_ent >= state->free_bits )
- {
- state->num_bits = ++num_bits;
- if ( num_bits > LZW_MAX_BITS )
- return -1;
-
- state->free_bits = state->num_bits < state->max_bits
- ? (FT_UInt)( ( 1UL << num_bits ) - 256 )
- : state->max_free + 1;
- }
-
- if ( state->buf_clear )
- {
- state->num_bits = num_bits = LZW_INIT_BITS;
- state->free_bits = (FT_UInt)( ( 1UL << num_bits ) - 256 );
- state->buf_clear = 0;
- }
-
- if ( ft_lzwstate_refill( state ) < 0 )
- return -1;
-
- offset = 0;
- }
-
- state->buf_offset = offset + num_bits;
-
- p = &state->buf_tab[offset >> 3];
- offset &= 7;
- result = *p++ >> offset;
- offset = 8 - offset;
- num_bits -= offset;
-
- if ( num_bits >= 8 )
- {
- result |= *p++ << offset;
- offset += 8;
- num_bits -= 8;
- }
- if ( num_bits > 0 )
- result |= ( *p & LZW_MASK( num_bits ) ) << offset;
-
- return result;
- }
-
-
- /* grow the character stack */
- static int
- ft_lzwstate_stack_grow( FT_LzwState state )
- {
- if ( state->stack_top >= state->stack_size )
- {
- FT_Memory memory = state->memory;
- FT_Error error;
- FT_Offset old_size = state->stack_size;
- FT_Offset new_size = old_size;
-
- new_size = new_size + ( new_size >> 1 ) + 4;
-
- if ( state->stack == state->stack_0 )
- {
- state->stack = NULL;
- old_size = 0;
- }
-
- /* requirement of the character stack larger than 1<<LZW_MAX_BITS */
- /* implies bug in the decompression code */
- if ( new_size > ( 1 << LZW_MAX_BITS ) )
- {
- new_size = 1 << LZW_MAX_BITS;
- if ( new_size == old_size )
- return -1;
- }
-
- if ( FT_RENEW_ARRAY( state->stack, old_size, new_size ) )
- return -1;
-
- state->stack_size = new_size;
- }
- return 0;
- }
-
-
- /* grow the prefix/suffix arrays */
- static int
- ft_lzwstate_prefix_grow( FT_LzwState state )
- {
- FT_UInt old_size = state->prefix_size;
- FT_UInt new_size = old_size;
- FT_Memory memory = state->memory;
- FT_Error error;
-
-
- if ( new_size == 0 ) /* first allocation -> 9 bits */
- new_size = 512;
- else
- new_size += new_size >> 2; /* don't grow too fast */
-
- /*
- * Note that the `suffix' array is located in the same memory block
- * pointed to by `prefix'.
- *
- * I know that sizeof(FT_Byte) == 1 by definition, but it is clearer
- * to write it literally.
- *
- */
- if ( FT_REALLOC_MULT( state->prefix, old_size, new_size,
- sizeof ( FT_UShort ) + sizeof ( FT_Byte ) ) )
- return -1;
-
- /* now adjust `suffix' and move the data accordingly */
- state->suffix = (FT_Byte*)( state->prefix + new_size );
-
- FT_MEM_MOVE( state->suffix,
- state->prefix + old_size,
- old_size * sizeof ( FT_Byte ) );
-
- state->prefix_size = new_size;
- return 0;
- }
-
-
- FT_LOCAL_DEF( void )
- ft_lzwstate_reset( FT_LzwState state )
- {
- state->in_eof = 0;
- state->buf_offset = 0;
- state->buf_size = 0;
- state->buf_clear = 0;
- state->buf_total = 0;
- state->stack_top = 0;
- state->num_bits = LZW_INIT_BITS;
- state->phase = FT_LZW_PHASE_START;
- }
-
-
- FT_LOCAL_DEF( void )
- ft_lzwstate_init( FT_LzwState state,
- FT_Stream source )
- {
- FT_ZERO( state );
-
- state->source = source;
- state->memory = source->memory;
-
- state->prefix = NULL;
- state->suffix = NULL;
- state->prefix_size = 0;
-
- state->stack = state->stack_0;
- state->stack_size = sizeof ( state->stack_0 );
-
- ft_lzwstate_reset( state );
- }
-
-
- FT_LOCAL_DEF( void )
- ft_lzwstate_done( FT_LzwState state )
- {
- FT_Memory memory = state->memory;
-
-
- ft_lzwstate_reset( state );
-
- if ( state->stack != state->stack_0 )
- FT_FREE( state->stack );
-
- FT_FREE( state->prefix );
- state->suffix = NULL;
-
- FT_ZERO( state );
- }
-
-
-#define FTLZW_STACK_PUSH( c ) \
- FT_BEGIN_STMNT \
- if ( state->stack_top >= state->stack_size && \
- ft_lzwstate_stack_grow( state ) < 0 ) \
- goto Eof; \
- \
- state->stack[state->stack_top++] = (FT_Byte)(c); \
- FT_END_STMNT
-
-
- FT_LOCAL_DEF( FT_ULong )
- ft_lzwstate_io( FT_LzwState state,
- FT_Byte* buffer,
- FT_ULong out_size )
- {
- FT_ULong result = 0;
-
- FT_UInt old_char = state->old_char;
- FT_UInt old_code = state->old_code;
- FT_UInt in_code = state->in_code;
-
-
- if ( out_size == 0 )
- goto Exit;
-
- switch ( state->phase )
- {
- case FT_LZW_PHASE_START:
- {
- FT_Byte max_bits;
- FT_Int32 c;
-
-
- /* skip magic bytes, and read max_bits + block_flag */
- if ( FT_Stream_Seek( state->source, 2 ) != 0 ||
- FT_Stream_TryRead( state->source, &max_bits, 1 ) != 1 )
- goto Eof;
-
- state->max_bits = max_bits & LZW_BIT_MASK;
- state->block_mode = max_bits & LZW_BLOCK_MASK;
- state->max_free = (FT_UInt)( ( 1UL << state->max_bits ) - 256 );
-
- if ( state->max_bits > LZW_MAX_BITS )
- goto Eof;
-
- state->num_bits = LZW_INIT_BITS;
- state->free_ent = ( state->block_mode ? LZW_FIRST
- : LZW_CLEAR ) - 256;
- in_code = 0;
-
- state->free_bits = state->num_bits < state->max_bits
- ? (FT_UInt)( ( 1UL << state->num_bits ) - 256 )
- : state->max_free + 1;
-
- c = ft_lzwstate_get_code( state );
- if ( c < 0 || c > 255 )
- goto Eof;
-
- old_code = old_char = (FT_UInt)c;
-
- if ( buffer )
- buffer[result] = (FT_Byte)old_char;
-
- if ( ++result >= out_size )
- goto Exit;
-
- state->phase = FT_LZW_PHASE_CODE;
- }
- /* fall-through */
-
- case FT_LZW_PHASE_CODE:
- {
- FT_Int32 c;
- FT_UInt code;
-
-
- NextCode:
- c = ft_lzwstate_get_code( state );
- if ( c < 0 )
- goto Eof;
-
- code = (FT_UInt)c;
-
- if ( code == LZW_CLEAR && state->block_mode )
- {
- /* why not LZW_FIRST-256 ? */
- state->free_ent = ( LZW_FIRST - 1 ) - 256;
- state->buf_clear = 1;
-
- /* not quite right, but at least more predictable */
- old_code = 0;
- old_char = 0;
-
- goto NextCode;
- }
-
- in_code = code; /* save code for later */
-
- if ( code >= 256U )
- {
- /* special case for KwKwKwK */
- if ( code - 256U >= state->free_ent )
- {
- /* corrupted LZW stream */
- if ( code - 256U > state->free_ent )
- goto Eof;
-
- FTLZW_STACK_PUSH( old_char );
- code = old_code;
- }
-
- while ( code >= 256U )
- {
- if ( !state->prefix )
- goto Eof;
-
- FTLZW_STACK_PUSH( state->suffix[code - 256] );
- code = state->prefix[code - 256];
- }
- }
-
- old_char = code;
- FTLZW_STACK_PUSH( old_char );
-
- state->phase = FT_LZW_PHASE_STACK;
- }
- /* fall-through */
-
- case FT_LZW_PHASE_STACK:
- {
- while ( state->stack_top > 0 )
- {
- state->stack_top--;
-
- if ( buffer )
- buffer[result] = state->stack[state->stack_top];
-
- if ( ++result == out_size )
- goto Exit;
- }
-
- /* now create new entry */
- if ( state->free_ent < state->max_free )
- {
- if ( state->free_ent >= state->prefix_size &&
- ft_lzwstate_prefix_grow( state ) < 0 )
- goto Eof;
-
- FT_ASSERT( state->free_ent < state->prefix_size );
-
- state->prefix[state->free_ent] = (FT_UShort)old_code;
- state->suffix[state->free_ent] = (FT_Byte) old_char;
-
- state->free_ent += 1;
- }
-
- old_code = in_code;
-
- state->phase = FT_LZW_PHASE_CODE;
- goto NextCode;
- }
-
- default: /* state == EOF */
- ;
- }
-
- Exit:
- state->old_code = old_code;
- state->old_char = old_char;
- state->in_code = in_code;
-
- return result;
-
- Eof:
- state->phase = FT_LZW_PHASE_EOF;
- goto Exit;
- }
-
-
-/* END */
diff --git a/src/lzw/ftzopen.h b/src/lzw/ftzopen.h
deleted file mode 100644
index a108862c0..000000000
--- a/src/lzw/ftzopen.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftzopen.h */
-/* */
-/* FreeType support for .Z compressed files. */
-/* */
-/* This optional component relies on NetBSD's zopen(). It should mainly */
-/* be used to parse compressed PCF fonts, as found with many X11 server */
-/* distributions. */
-/* */
-/* Copyright 2005-2017 by */
-/* David Turner. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-#ifndef FTZOPEN_H_
-#define FTZOPEN_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-
- /*
- * This is a complete re-implementation of the LZW file reader,
- * since the old one was incredibly badly written, using
- * 400 KByte of heap memory before decompressing anything.
- *
- */
-
-#define FT_LZW_IN_BUFF_SIZE 64
-#define FT_LZW_DEFAULT_STACK_SIZE 64
-
-#define LZW_INIT_BITS 9
-#define LZW_MAX_BITS 16
-
-#define LZW_CLEAR 256
-#define LZW_FIRST 257
-
-#define LZW_BIT_MASK 0x1F
-#define LZW_BLOCK_MASK 0x80
-#define LZW_MASK( n ) ( ( 1U << (n) ) - 1U )
-
-
- typedef enum FT_LzwPhase_
- {
- FT_LZW_PHASE_START = 0,
- FT_LZW_PHASE_CODE,
- FT_LZW_PHASE_STACK,
- FT_LZW_PHASE_EOF
-
- } FT_LzwPhase;
-
-
- /*
- * state of LZW decompressor
- *
- * small technical note
- * --------------------
- *
- * We use a few tricks in this implementation that are explained here to
- * ease debugging and maintenance.
- *
- * - First of all, the `prefix' and `suffix' arrays contain the suffix
- * and prefix for codes over 256; this means that
- *
- * prefix_of(code) == state->prefix[code-256]
- * suffix_of(code) == state->suffix[code-256]
- *
- * Each prefix is a 16-bit code, and each suffix an 8-bit byte.
- *
- * Both arrays are stored in a single memory block, pointed to by
- * `state->prefix'. This means that the following equality is always
- * true:
- *
- * state->suffix == (FT_Byte*)(state->prefix + state->prefix_size)
- *
- * Of course, state->prefix_size is the number of prefix/suffix slots
- * in the arrays, corresponding to codes 256..255+prefix_size.
- *
- * - `free_ent' is the index of the next free entry in the `prefix'
- * and `suffix' arrays. This means that the corresponding `next free
- * code' is really `256+free_ent'.
- *
- * Moreover, `max_free' is the maximum value that `free_ent' can reach.
- *
- * `max_free' corresponds to `(1 << max_bits) - 256'. Note that this
- * value is always <= 0xFF00, which means that both `free_ent' and
- * `max_free' can be stored in an FT_UInt variable, even on 16-bit
- * machines.
- *
- * If `free_ent == max_free', you cannot add new codes to the
- * prefix/suffix table.
- *
- * - `num_bits' is the current number of code bits, starting at 9 and
- * growing each time `free_ent' reaches the value of `free_bits'. The
- * latter is computed as follows
- *
- * if num_bits < max_bits:
- * free_bits = (1 << num_bits)-256
- * else:
- * free_bits = max_free + 1
- *
- * Since the value of `max_free + 1' can never be reached by
- * `free_ent', `num_bits' cannot grow larger than `max_bits'.
- */
-
- typedef struct FT_LzwStateRec_
- {
- FT_LzwPhase phase;
- FT_Int in_eof;
-
- FT_Byte buf_tab[16];
- FT_UInt buf_offset;
- FT_UInt buf_size;
- FT_Bool buf_clear;
- FT_Offset buf_total;
-
- FT_UInt max_bits; /* max code bits, from file header */
- FT_Int block_mode; /* block mode flag, from file header */
- FT_UInt max_free; /* (1 << max_bits) - 256 */
-
- FT_UInt num_bits; /* current code bit number */
- FT_UInt free_ent; /* index of next free entry */
- FT_UInt free_bits; /* if reached by free_ent, increment num_bits */
- FT_UInt old_code;
- FT_UInt old_char;
- FT_UInt in_code;
-
- FT_UShort* prefix; /* always dynamically allocated / reallocated */
- FT_Byte* suffix; /* suffix = (FT_Byte*)(prefix + prefix_size) */
- FT_UInt prefix_size; /* number of slots in `prefix' or `suffix' */
-
- FT_Byte* stack; /* character stack */
- FT_UInt stack_top;
- FT_Offset stack_size;
- FT_Byte stack_0[FT_LZW_DEFAULT_STACK_SIZE]; /* minimize heap alloc */
-
- FT_Stream source; /* source stream */
- FT_Memory memory;
-
- } FT_LzwStateRec, *FT_LzwState;
-
-
- FT_LOCAL( void )
- ft_lzwstate_init( FT_LzwState state,
- FT_Stream source );
-
- FT_LOCAL( void )
- ft_lzwstate_done( FT_LzwState state );
-
-
- FT_LOCAL( void )
- ft_lzwstate_reset( FT_LzwState state );
-
-
- FT_LOCAL( FT_ULong )
- ft_lzwstate_io( FT_LzwState state,
- FT_Byte* buffer,
- FT_ULong out_size );
-
-/* */
-
-#endif /* FTZOPEN_H_ */
-
-
-/* END */
diff --git a/src/lzw/rules.mk b/src/lzw/rules.mk
deleted file mode 100644
index e7bf68a06..000000000
--- a/src/lzw/rules.mk
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# FreeType 2 LZW support configuration rules
-#
-
-
-# Copyright 2004-2017 by
-# Albert Chin-A-Young.
-#
-# based on `src/lzw/rules.mk'
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# LZW driver directory
-#
-LZW_DIR := $(SRC_DIR)/lzw
-
-
-# compilation flags for the driver
-#
-LZW_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(LZW_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# LZW support sources (i.e., C files)
-#
-LZW_DRV_SRC := $(LZW_DIR)/ftlzw.c
-
-# LZW support headers
-#
-LZW_DRV_H := $(LZW_DIR)/ftzopen.h \
- $(LZW_DIR)/ftzopen.c
-
-
-# LZW driver object(s)
-#
-# LZW_DRV_OBJ_M is used during `multi' builds
-# LZW_DRV_OBJ_S is used during `single' builds
-#
-LZW_DRV_OBJ_M := $(OBJ_DIR)/ftlzw.$O
-LZW_DRV_OBJ_S := $(OBJ_DIR)/ftlzw.$O
-
-# LZW support source file for single build
-#
-LZW_DRV_SRC_S := $(LZW_DIR)/ftlzw.c
-
-
-# LZW support - single object
-#
-$(LZW_DRV_OBJ_S): $(LZW_DRV_SRC_S) $(LZW_DRV_SRC) $(FREETYPE_H) $(LZW_DRV_H)
- $(LZW_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(LZW_DRV_SRC_S))
-
-
-# LZW support - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(LZW_DIR)/%.c $(FREETYPE_H) $(LZW_DRV_H)
- $(LZW_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(LZW_DRV_OBJ_S)
-DRV_OBJS_M += $(LZW_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/otvalid/Jamfile b/src/otvalid/Jamfile
deleted file mode 100644
index a755f2bcf..000000000
--- a/src/otvalid/Jamfile
+++ /dev/null
@@ -1,37 +0,0 @@
-# FreeType 2 src/otvalid Jamfile
-#
-# Copyright 2004-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) otvalid ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = otvbase
- otvcommn
- otvgdef
- otvgpos
- otvgsub
- otvjstf
- otvmath
- otvmod
- ;
- }
- else
- {
- _sources = otvalid ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/otvalid Jamfile
diff --git a/src/otvalid/module.mk b/src/otvalid/module.mk
deleted file mode 100644
index 5ee1265db..000000000
--- a/src/otvalid/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 otvalid module definition
-#
-
-
-# Copyright 2004-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += OTVALID_MODULE
-
-define OTVALID_MODULE
-$(OPEN_DRIVER) FT_Module_Class, otv_module_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)otvalid $(ECHO_DRIVER_DESC)OpenType validation module$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/otvalid/otvalid.c b/src/otvalid/otvalid.c
deleted file mode 100644
index 312751a1f..000000000
--- a/src/otvalid/otvalid.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvalid.c */
-/* */
-/* FreeType validator for OpenType tables (body only). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "otvbase.c"
-#include "otvcommn.c"
-#include "otvgdef.c"
-#include "otvgpos.c"
-#include "otvgsub.c"
-#include "otvjstf.c"
-#include "otvmath.c"
-#include "otvmod.c"
-
-
-/* END */
diff --git a/src/otvalid/otvalid.h b/src/otvalid/otvalid.h
deleted file mode 100644
index f2969cccc..000000000
--- a/src/otvalid/otvalid.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvalid.h */
-/* */
-/* OpenType table validation (specification only). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef OTVALID_H_
-#define OTVALID_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#include "otverror.h" /* must come before FT_INTERNAL_VALIDATE_H */
-
-#include FT_INTERNAL_VALIDATE_H
-#include FT_INTERNAL_STREAM_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( void )
- otv_BASE_validate( FT_Bytes table,
- FT_Validator valid );
-
- /* GSUB and GPOS tables should already be validated; */
- /* if missing, set corresponding argument to 0 */
- FT_LOCAL( void )
- otv_GDEF_validate( FT_Bytes table,
- FT_Bytes gsub,
- FT_Bytes gpos,
- FT_UInt glyph_count,
- FT_Validator valid );
-
- FT_LOCAL( void )
- otv_GPOS_validate( FT_Bytes table,
- FT_UInt glyph_count,
- FT_Validator valid );
-
- FT_LOCAL( void )
- otv_GSUB_validate( FT_Bytes table,
- FT_UInt glyph_count,
- FT_Validator valid );
-
- /* GSUB and GPOS tables should already be validated; */
- /* if missing, set corresponding argument to 0 */
- FT_LOCAL( void )
- otv_JSTF_validate( FT_Bytes table,
- FT_Bytes gsub,
- FT_Bytes gpos,
- FT_UInt glyph_count,
- FT_Validator valid );
-
- FT_LOCAL( void )
- otv_MATH_validate( FT_Bytes table,
- FT_UInt glyph_count,
- FT_Validator ftvalid );
-
-
-FT_END_HEADER
-
-#endif /* OTVALID_H_ */
-
-
-/* END */
diff --git a/src/otvalid/otvbase.c b/src/otvalid/otvbase.c
deleted file mode 100644
index 3adad8439..000000000
--- a/src/otvalid/otvbase.c
+++ /dev/null
@@ -1,318 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvbase.c */
-/* */
-/* OpenType BASE table validation (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "otvalid.h"
-#include "otvcommn.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_otvbase
-
-
- static void
- otv_BaseCoord_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt BaseCoordFormat;
-
-
- OTV_NAME_ENTER( "BaseCoord" );
-
- OTV_LIMIT_CHECK( 4 );
- BaseCoordFormat = FT_NEXT_USHORT( p );
- p += 2; /* skip Coordinate */
-
- OTV_TRACE(( " (format %d)\n", BaseCoordFormat ));
-
- switch ( BaseCoordFormat )
- {
- case 1: /* BaseCoordFormat1 */
- break;
-
- case 2: /* BaseCoordFormat2 */
- OTV_LIMIT_CHECK( 4 ); /* ReferenceGlyph, BaseCoordPoint */
- break;
-
- case 3: /* BaseCoordFormat3 */
- OTV_LIMIT_CHECK( 2 );
- /* DeviceTable */
- otv_Device_validate( table + FT_NEXT_USHORT( p ), otvalid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- static void
- otv_BaseTagList_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt BaseTagCount;
-
-
- OTV_NAME_ENTER( "BaseTagList" );
-
- OTV_LIMIT_CHECK( 2 );
-
- BaseTagCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (BaseTagCount = %d)\n", BaseTagCount ));
-
- OTV_LIMIT_CHECK( BaseTagCount * 4 ); /* BaselineTag */
-
- OTV_EXIT;
- }
-
-
- static void
- otv_BaseValues_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt BaseCoordCount;
-
-
- OTV_NAME_ENTER( "BaseValues" );
-
- OTV_LIMIT_CHECK( 4 );
-
- p += 2; /* skip DefaultIndex */
- BaseCoordCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (BaseCoordCount = %d)\n", BaseCoordCount ));
-
- OTV_LIMIT_CHECK( BaseCoordCount * 2 );
-
- /* BaseCoord */
- for ( ; BaseCoordCount > 0; BaseCoordCount-- )
- otv_BaseCoord_validate( table + FT_NEXT_USHORT( p ), otvalid );
-
- OTV_EXIT;
- }
-
-
- static void
- otv_MinMax_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt table_size;
- FT_UInt FeatMinMaxCount;
-
- OTV_OPTIONAL_TABLE( MinCoord );
- OTV_OPTIONAL_TABLE( MaxCoord );
-
-
- OTV_NAME_ENTER( "MinMax" );
-
- OTV_LIMIT_CHECK( 6 );
-
- OTV_OPTIONAL_OFFSET( MinCoord );
- OTV_OPTIONAL_OFFSET( MaxCoord );
- FeatMinMaxCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (FeatMinMaxCount = %d)\n", FeatMinMaxCount ));
-
- table_size = FeatMinMaxCount * 8 + 6;
-
- OTV_SIZE_CHECK( MinCoord );
- if ( MinCoord )
- otv_BaseCoord_validate( table + MinCoord, otvalid );
-
- OTV_SIZE_CHECK( MaxCoord );
- if ( MaxCoord )
- otv_BaseCoord_validate( table + MaxCoord, otvalid );
-
- OTV_LIMIT_CHECK( FeatMinMaxCount * 8 );
-
- /* FeatMinMaxRecord */
- for ( ; FeatMinMaxCount > 0; FeatMinMaxCount-- )
- {
- p += 4; /* skip FeatureTableTag */
-
- OTV_OPTIONAL_OFFSET( MinCoord );
- OTV_OPTIONAL_OFFSET( MaxCoord );
-
- OTV_SIZE_CHECK( MinCoord );
- if ( MinCoord )
- otv_BaseCoord_validate( table + MinCoord, otvalid );
-
- OTV_SIZE_CHECK( MaxCoord );
- if ( MaxCoord )
- otv_BaseCoord_validate( table + MaxCoord, otvalid );
- }
-
- OTV_EXIT;
- }
-
-
- static void
- otv_BaseScript_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt table_size;
- FT_UInt BaseLangSysCount;
-
- OTV_OPTIONAL_TABLE( BaseValues );
- OTV_OPTIONAL_TABLE( DefaultMinMax );
-
-
- OTV_NAME_ENTER( "BaseScript" );
-
- OTV_LIMIT_CHECK( 6 );
- OTV_OPTIONAL_OFFSET( BaseValues );
- OTV_OPTIONAL_OFFSET( DefaultMinMax );
- BaseLangSysCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (BaseLangSysCount = %d)\n", BaseLangSysCount ));
-
- table_size = BaseLangSysCount * 6 + 6;
-
- OTV_SIZE_CHECK( BaseValues );
- if ( BaseValues )
- otv_BaseValues_validate( table + BaseValues, otvalid );
-
- OTV_SIZE_CHECK( DefaultMinMax );
- if ( DefaultMinMax )
- otv_MinMax_validate( table + DefaultMinMax, otvalid );
-
- OTV_LIMIT_CHECK( BaseLangSysCount * 6 );
-
- /* BaseLangSysRecord */
- for ( ; BaseLangSysCount > 0; BaseLangSysCount-- )
- {
- p += 4; /* skip BaseLangSysTag */
-
- otv_MinMax_validate( table + FT_NEXT_USHORT( p ), otvalid );
- }
-
- OTV_EXIT;
- }
-
-
- static void
- otv_BaseScriptList_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt BaseScriptCount;
-
-
- OTV_NAME_ENTER( "BaseScriptList" );
-
- OTV_LIMIT_CHECK( 2 );
- BaseScriptCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (BaseScriptCount = %d)\n", BaseScriptCount ));
-
- OTV_LIMIT_CHECK( BaseScriptCount * 6 );
-
- /* BaseScriptRecord */
- for ( ; BaseScriptCount > 0; BaseScriptCount-- )
- {
- p += 4; /* skip BaseScriptTag */
-
- /* BaseScript */
- otv_BaseScript_validate( table + FT_NEXT_USHORT( p ), otvalid );
- }
-
- OTV_EXIT;
- }
-
-
- static void
- otv_Axis_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt table_size;
-
- OTV_OPTIONAL_TABLE( BaseTagList );
-
-
- OTV_NAME_ENTER( "Axis" );
-
- OTV_LIMIT_CHECK( 4 );
- OTV_OPTIONAL_OFFSET( BaseTagList );
-
- table_size = 4;
-
- OTV_SIZE_CHECK( BaseTagList );
- if ( BaseTagList )
- otv_BaseTagList_validate( table + BaseTagList, otvalid );
-
- /* BaseScriptList */
- otv_BaseScriptList_validate( table + FT_NEXT_USHORT( p ), otvalid );
-
- OTV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- otv_BASE_validate( FT_Bytes table,
- FT_Validator ftvalid )
- {
- OTV_ValidatorRec otvalidrec;
- OTV_Validator otvalid = &otvalidrec;
- FT_Bytes p = table;
- FT_UInt table_size;
-
- OTV_OPTIONAL_TABLE( HorizAxis );
- OTV_OPTIONAL_TABLE( VertAxis );
-
-
- otvalid->root = ftvalid;
-
- FT_TRACE3(( "validating BASE table\n" ));
- OTV_INIT;
-
- OTV_LIMIT_CHECK( 6 );
-
- if ( FT_NEXT_ULONG( p ) != 0x10000UL ) /* Version */
- FT_INVALID_FORMAT;
-
- table_size = 6;
-
- OTV_OPTIONAL_OFFSET( HorizAxis );
- OTV_SIZE_CHECK( HorizAxis );
- if ( HorizAxis )
- otv_Axis_validate( table + HorizAxis, otvalid );
-
- OTV_OPTIONAL_OFFSET( VertAxis );
- OTV_SIZE_CHECK( VertAxis );
- if ( VertAxis )
- otv_Axis_validate( table + VertAxis, otvalid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/src/otvalid/otvcommn.c b/src/otvalid/otvcommn.c
deleted file mode 100644
index 3407d2ad4..000000000
--- a/src/otvalid/otvcommn.c
+++ /dev/null
@@ -1,1086 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvcommn.c */
-/* */
-/* OpenType common tables validation (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "otvcommn.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_otvcommon
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** COVERAGE TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- otv_Coverage_validate( FT_Bytes table,
- OTV_Validator otvalid,
- FT_Int expected_count )
- {
- FT_Bytes p = table;
- FT_UInt CoverageFormat;
- FT_UInt total = 0;
-
-
- OTV_NAME_ENTER( "Coverage" );
-
- OTV_LIMIT_CHECK( 4 );
- CoverageFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", CoverageFormat ));
-
- switch ( CoverageFormat )
- {
- case 1: /* CoverageFormat1 */
- {
- FT_UInt GlyphCount;
- FT_UInt i;
-
-
- GlyphCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount ));
-
- OTV_LIMIT_CHECK( GlyphCount * 2 ); /* GlyphArray */
-
- for ( i = 0; i < GlyphCount; i++ )
- {
- FT_UInt gid;
-
-
- gid = FT_NEXT_USHORT( p );
- if ( gid >= otvalid->glyph_count )
- FT_INVALID_GLYPH_ID;
- }
-
- total = GlyphCount;
- }
- break;
-
- case 2: /* CoverageFormat2 */
- {
- FT_UInt n, RangeCount;
- FT_UInt Start, End, StartCoverageIndex, last = 0;
-
-
- RangeCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (RangeCount = %d)\n", RangeCount ));
-
- OTV_LIMIT_CHECK( RangeCount * 6 );
-
- /* RangeRecord */
- for ( n = 0; n < RangeCount; n++ )
- {
- Start = FT_NEXT_USHORT( p );
- End = FT_NEXT_USHORT( p );
- StartCoverageIndex = FT_NEXT_USHORT( p );
-
- if ( Start > End || StartCoverageIndex != total )
- FT_INVALID_DATA;
-
- if ( End >= otvalid->glyph_count )
- FT_INVALID_GLYPH_ID;
-
- if ( n > 0 && Start <= last )
- FT_INVALID_DATA;
-
- total += End - Start + 1;
- last = End;
- }
- }
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- /* Generally, a coverage table offset has an associated count field. */
- /* The number of glyphs in the table should match this field. If */
- /* there is no associated count, a value of -1 tells us not to check. */
- if ( expected_count != -1 && (FT_UInt)expected_count != total )
- FT_INVALID_DATA;
-
- OTV_EXIT;
- }
-
-
- FT_LOCAL_DEF( FT_UInt )
- otv_Coverage_get_first( FT_Bytes table )
- {
- FT_Bytes p = table;
-
-
- p += 4; /* skip CoverageFormat and Glyph/RangeCount */
-
- return FT_NEXT_USHORT( p );
- }
-
-
- FT_LOCAL_DEF( FT_UInt )
- otv_Coverage_get_last( FT_Bytes table )
- {
- FT_Bytes p = table;
- FT_UInt CoverageFormat = FT_NEXT_USHORT( p );
- FT_UInt count = FT_NEXT_USHORT( p ); /* Glyph/RangeCount */
- FT_UInt result = 0;
-
-
- switch ( CoverageFormat )
- {
- case 1:
- p += ( count - 1 ) * 2;
- result = FT_NEXT_USHORT( p );
- break;
-
- case 2:
- p += ( count - 1 ) * 6 + 2;
- result = FT_NEXT_USHORT( p );
- break;
-
- default:
- ;
- }
-
- return result;
- }
-
-
- FT_LOCAL_DEF( FT_UInt )
- otv_Coverage_get_count( FT_Bytes table )
- {
- FT_Bytes p = table;
- FT_UInt CoverageFormat = FT_NEXT_USHORT( p );
- FT_UInt count = FT_NEXT_USHORT( p ); /* Glyph/RangeCount */
- FT_UInt result = 0;
-
-
- switch ( CoverageFormat )
- {
- case 1:
- return count;
-
- case 2:
- {
- FT_UInt Start, End;
-
-
- for ( ; count > 0; count-- )
- {
- Start = FT_NEXT_USHORT( p );
- End = FT_NEXT_USHORT( p );
- p += 2; /* skip StartCoverageIndex */
-
- result += End - Start + 1;
- }
- }
- break;
-
- default:
- ;
- }
-
- return result;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CLASS DEFINITION TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- otv_ClassDef_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt ClassFormat;
-
-
- OTV_NAME_ENTER( "ClassDef" );
-
- OTV_LIMIT_CHECK( 4 );
- ClassFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", ClassFormat ));
-
- switch ( ClassFormat )
- {
- case 1: /* ClassDefFormat1 */
- {
- FT_UInt StartGlyph;
- FT_UInt GlyphCount;
-
-
- OTV_LIMIT_CHECK( 4 );
-
- StartGlyph = FT_NEXT_USHORT( p );
- GlyphCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount ));
-
- OTV_LIMIT_CHECK( GlyphCount * 2 ); /* ClassValueArray */
-
- if ( StartGlyph + GlyphCount - 1 >= otvalid->glyph_count )
- FT_INVALID_GLYPH_ID;
- }
- break;
-
- case 2: /* ClassDefFormat2 */
- {
- FT_UInt n, ClassRangeCount;
- FT_UInt Start, End, last = 0;
-
-
- ClassRangeCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (ClassRangeCount = %d)\n", ClassRangeCount ));
-
- OTV_LIMIT_CHECK( ClassRangeCount * 6 );
-
- /* ClassRangeRecord */
- for ( n = 0; n < ClassRangeCount; n++ )
- {
- Start = FT_NEXT_USHORT( p );
- End = FT_NEXT_USHORT( p );
- p += 2; /* skip Class */
-
- if ( Start > End || ( n > 0 && Start <= last ) )
- FT_INVALID_DATA;
-
- if ( End >= otvalid->glyph_count )
- FT_INVALID_GLYPH_ID;
-
- last = End;
- }
- }
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- /* no need to check glyph indices used as input to class definition */
- /* tables since even invalid glyph indices return a meaningful result */
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** DEVICE TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- otv_Device_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt StartSize, EndSize, DeltaFormat, count;
-
-
- OTV_NAME_ENTER( "Device" );
-
- OTV_LIMIT_CHECK( 8 );
- StartSize = FT_NEXT_USHORT( p );
- EndSize = FT_NEXT_USHORT( p );
- DeltaFormat = FT_NEXT_USHORT( p );
-
- if ( DeltaFormat < 1 || DeltaFormat > 3 )
- FT_INVALID_FORMAT;
-
- if ( EndSize < StartSize )
- FT_INVALID_DATA;
-
- count = EndSize - StartSize + 1;
- OTV_LIMIT_CHECK( ( 1 << DeltaFormat ) * count / 8 ); /* DeltaValue */
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** LOOKUPS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* uses otvalid->type_count */
- /* uses otvalid->type_funcs */
-
- FT_LOCAL_DEF( void )
- otv_Lookup_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt LookupType, SubTableCount;
- OTV_Validate_Func validate;
-
-
- OTV_NAME_ENTER( "Lookup" );
-
- OTV_LIMIT_CHECK( 6 );
- LookupType = FT_NEXT_USHORT( p );
- p += 2; /* skip LookupFlag */
- SubTableCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (type %d)\n", LookupType ));
-
- if ( LookupType == 0 || LookupType > otvalid->type_count )
- FT_INVALID_DATA;
-
- validate = otvalid->type_funcs[LookupType - 1];
-
- OTV_TRACE(( " (SubTableCount = %d)\n", SubTableCount ));
-
- OTV_LIMIT_CHECK( SubTableCount * 2 );
-
- /* SubTable */
- for ( ; SubTableCount > 0; SubTableCount-- )
- validate( table + FT_NEXT_USHORT( p ), otvalid );
-
- OTV_EXIT;
- }
-
-
- /* uses valid->lookup_count */
-
- FT_LOCAL_DEF( void )
- otv_LookupList_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt LookupCount;
-
-
- OTV_NAME_ENTER( "LookupList" );
-
- OTV_LIMIT_CHECK( 2 );
- LookupCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (LookupCount = %d)\n", LookupCount ));
-
- OTV_LIMIT_CHECK( LookupCount * 2 );
-
- otvalid->lookup_count = LookupCount;
-
- /* Lookup */
- for ( ; LookupCount > 0; LookupCount-- )
- otv_Lookup_validate( table + FT_NEXT_USHORT( p ), otvalid );
-
- OTV_EXIT;
- }
-
-
- static FT_UInt
- otv_LookupList_get_count( FT_Bytes table )
- {
- return FT_NEXT_USHORT( table );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FEATURES *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* uses otvalid->lookup_count */
-
- FT_LOCAL_DEF( void )
- otv_Feature_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt LookupCount;
-
-
- OTV_NAME_ENTER( "Feature" );
-
- OTV_LIMIT_CHECK( 4 );
- p += 2; /* skip FeatureParams (unused) */
- LookupCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (LookupCount = %d)\n", LookupCount ));
-
- OTV_LIMIT_CHECK( LookupCount * 2 );
-
- /* LookupListIndex */
- for ( ; LookupCount > 0; LookupCount-- )
- if ( FT_NEXT_USHORT( p ) >= otvalid->lookup_count )
- FT_INVALID_DATA;
-
- OTV_EXIT;
- }
-
-
- static FT_UInt
- otv_Feature_get_count( FT_Bytes table )
- {
- return FT_NEXT_USHORT( table );
- }
-
-
- /* sets otvalid->lookup_count */
-
- FT_LOCAL_DEF( void )
- otv_FeatureList_validate( FT_Bytes table,
- FT_Bytes lookups,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt FeatureCount;
-
-
- OTV_NAME_ENTER( "FeatureList" );
-
- OTV_LIMIT_CHECK( 2 );
- FeatureCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (FeatureCount = %d)\n", FeatureCount ));
-
- OTV_LIMIT_CHECK( FeatureCount * 2 );
-
- otvalid->lookup_count = otv_LookupList_get_count( lookups );
-
- /* FeatureRecord */
- for ( ; FeatureCount > 0; FeatureCount-- )
- {
- p += 4; /* skip FeatureTag */
-
- /* Feature */
- otv_Feature_validate( table + FT_NEXT_USHORT( p ), otvalid );
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** LANGUAGE SYSTEM *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* uses otvalid->extra1 (number of features) */
-
- FT_LOCAL_DEF( void )
- otv_LangSys_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt ReqFeatureIndex;
- FT_UInt FeatureCount;
-
-
- OTV_NAME_ENTER( "LangSys" );
-
- OTV_LIMIT_CHECK( 6 );
- p += 2; /* skip LookupOrder (unused) */
- ReqFeatureIndex = FT_NEXT_USHORT( p );
- FeatureCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (ReqFeatureIndex = %d)\n", ReqFeatureIndex ));
- OTV_TRACE(( " (FeatureCount = %d)\n", FeatureCount ));
-
- if ( ReqFeatureIndex != 0xFFFFU && ReqFeatureIndex >= otvalid->extra1 )
- FT_INVALID_DATA;
-
- OTV_LIMIT_CHECK( FeatureCount * 2 );
-
- /* FeatureIndex */
- for ( ; FeatureCount > 0; FeatureCount-- )
- if ( FT_NEXT_USHORT( p ) >= otvalid->extra1 )
- FT_INVALID_DATA;
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** SCRIPTS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- otv_Script_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_UInt DefaultLangSys, LangSysCount;
- FT_Bytes p = table;
-
-
- OTV_NAME_ENTER( "Script" );
-
- OTV_LIMIT_CHECK( 4 );
- DefaultLangSys = FT_NEXT_USHORT( p );
- LangSysCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (LangSysCount = %d)\n", LangSysCount ));
-
- if ( DefaultLangSys != 0 )
- otv_LangSys_validate( table + DefaultLangSys, otvalid );
-
- OTV_LIMIT_CHECK( LangSysCount * 6 );
-
- /* LangSysRecord */
- for ( ; LangSysCount > 0; LangSysCount-- )
- {
- p += 4; /* skip LangSysTag */
-
- /* LangSys */
- otv_LangSys_validate( table + FT_NEXT_USHORT( p ), otvalid );
- }
-
- OTV_EXIT;
- }
-
-
- /* sets otvalid->extra1 (number of features) */
-
- FT_LOCAL_DEF( void )
- otv_ScriptList_validate( FT_Bytes table,
- FT_Bytes features,
- OTV_Validator otvalid )
- {
- FT_UInt ScriptCount;
- FT_Bytes p = table;
-
-
- OTV_NAME_ENTER( "ScriptList" );
-
- OTV_LIMIT_CHECK( 2 );
- ScriptCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (ScriptCount = %d)\n", ScriptCount ));
-
- OTV_LIMIT_CHECK( ScriptCount * 6 );
-
- otvalid->extra1 = otv_Feature_get_count( features );
-
- /* ScriptRecord */
- for ( ; ScriptCount > 0; ScriptCount-- )
- {
- p += 4; /* skip ScriptTag */
-
- otv_Script_validate( table + FT_NEXT_USHORT( p ), otvalid ); /* Script */
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** UTILITY FUNCTIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*
- u: uint16
- ux: unit16 [x]
-
- s: struct
- sx: struct [x]
- sxy: struct [x], using external y count
-
- x: uint16 x
-
- C: Coverage
-
- O: Offset
- On: Offset (NULL)
- Ox: Offset [x]
- Onx: Offset (NULL) [x]
- */
-
- FT_LOCAL_DEF( void )
- otv_x_Ox( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt Count;
- OTV_Validate_Func func;
-
-
- OTV_ENTER;
-
- OTV_LIMIT_CHECK( 2 );
- Count = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (Count = %d)\n", Count ));
-
- OTV_LIMIT_CHECK( Count * 2 );
-
- otvalid->nesting_level++;
- func = otvalid->func[otvalid->nesting_level];
-
- for ( ; Count > 0; Count-- )
- func( table + FT_NEXT_USHORT( p ), otvalid );
-
- otvalid->nesting_level--;
-
- OTV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- otv_u_C_x_Ox( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt Count, Coverage;
- OTV_Validate_Func func;
-
-
- OTV_ENTER;
-
- p += 2; /* skip Format */
-
- OTV_LIMIT_CHECK( 4 );
- Coverage = FT_NEXT_USHORT( p );
- Count = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (Count = %d)\n", Count ));
-
- otv_Coverage_validate( table + Coverage, otvalid, (FT_Int)Count );
-
- OTV_LIMIT_CHECK( Count * 2 );
-
- otvalid->nesting_level++;
- func = otvalid->func[otvalid->nesting_level];
-
- for ( ; Count > 0; Count-- )
- func( table + FT_NEXT_USHORT( p ), otvalid );
-
- otvalid->nesting_level--;
-
- OTV_EXIT;
- }
-
-
- /* uses otvalid->extra1 (if > 0: array value limit) */
-
- FT_LOCAL_DEF( void )
- otv_x_ux( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt Count;
-
-
- OTV_ENTER;
-
- OTV_LIMIT_CHECK( 2 );
- Count = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (Count = %d)\n", Count ));
-
- OTV_LIMIT_CHECK( Count * 2 );
-
- if ( otvalid->extra1 )
- {
- for ( ; Count > 0; Count-- )
- if ( FT_NEXT_USHORT( p ) >= otvalid->extra1 )
- FT_INVALID_DATA;
- }
-
- OTV_EXIT;
- }
-
-
- /* `ux' in the function's name is not really correct since only x-1 */
- /* elements are tested */
-
- /* uses otvalid->extra1 (array value limit) */
-
- FT_LOCAL_DEF( void )
- otv_x_y_ux_sy( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt Count1, Count2;
-
-
- OTV_ENTER;
-
- OTV_LIMIT_CHECK( 4 );
- Count1 = FT_NEXT_USHORT( p );
- Count2 = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (Count1 = %d)\n", Count1 ));
- OTV_TRACE(( " (Count2 = %d)\n", Count2 ));
-
- if ( Count1 == 0 )
- FT_INVALID_DATA;
-
- OTV_LIMIT_CHECK( ( Count1 - 1 ) * 2 + Count2 * 4 );
- p += ( Count1 - 1 ) * 2;
-
- for ( ; Count2 > 0; Count2-- )
- {
- if ( FT_NEXT_USHORT( p ) >= Count1 )
- FT_INVALID_DATA;
-
- if ( FT_NEXT_USHORT( p ) >= otvalid->extra1 )
- FT_INVALID_DATA;
- }
-
- OTV_EXIT;
- }
-
-
- /* `uy' in the function's name is not really correct since only y-1 */
- /* elements are tested */
-
- /* uses otvalid->extra1 (array value limit) */
-
- FT_LOCAL_DEF( void )
- otv_x_ux_y_uy_z_uz_p_sp( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt BacktrackCount, InputCount, LookaheadCount;
- FT_UInt Count;
-
-
- OTV_ENTER;
-
- OTV_LIMIT_CHECK( 2 );
- BacktrackCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (BacktrackCount = %d)\n", BacktrackCount ));
-
- OTV_LIMIT_CHECK( BacktrackCount * 2 + 2 );
- p += BacktrackCount * 2;
-
- InputCount = FT_NEXT_USHORT( p );
- if ( InputCount == 0 )
- FT_INVALID_DATA;
-
- OTV_TRACE(( " (InputCount = %d)\n", InputCount ));
-
- OTV_LIMIT_CHECK( InputCount * 2 );
- p += ( InputCount - 1 ) * 2;
-
- LookaheadCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (LookaheadCount = %d)\n", LookaheadCount ));
-
- OTV_LIMIT_CHECK( LookaheadCount * 2 + 2 );
- p += LookaheadCount * 2;
-
- Count = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (Count = %d)\n", Count ));
-
- OTV_LIMIT_CHECK( Count * 4 );
-
- for ( ; Count > 0; Count-- )
- {
- if ( FT_NEXT_USHORT( p ) >= InputCount )
- FT_INVALID_DATA;
-
- if ( FT_NEXT_USHORT( p ) >= otvalid->extra1 )
- FT_INVALID_DATA;
- }
-
- OTV_EXIT;
- }
-
-
- /* sets otvalid->extra1 (valid->lookup_count) */
-
- FT_LOCAL_DEF( void )
- otv_u_O_O_x_Onx( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt Coverage, ClassDef, ClassSetCount;
- OTV_Validate_Func func;
-
-
- OTV_ENTER;
-
- p += 2; /* skip Format */
-
- OTV_LIMIT_CHECK( 6 );
- Coverage = FT_NEXT_USHORT( p );
- ClassDef = FT_NEXT_USHORT( p );
- ClassSetCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (ClassSetCount = %d)\n", ClassSetCount ));
-
- otv_Coverage_validate( table + Coverage, otvalid, -1 );
- otv_ClassDef_validate( table + ClassDef, otvalid );
-
- OTV_LIMIT_CHECK( ClassSetCount * 2 );
-
- otvalid->nesting_level++;
- func = otvalid->func[otvalid->nesting_level];
- otvalid->extra1 = otvalid->lookup_count;
-
- for ( ; ClassSetCount > 0; ClassSetCount-- )
- {
- FT_UInt offset = FT_NEXT_USHORT( p );
-
-
- if ( offset )
- func( table + offset, otvalid );
- }
-
- otvalid->nesting_level--;
-
- OTV_EXIT;
- }
-
-
- /* uses otvalid->lookup_count */
-
- FT_LOCAL_DEF( void )
- otv_u_x_y_Ox_sy( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt GlyphCount, Count, count1;
-
-
- OTV_ENTER;
-
- p += 2; /* skip Format */
-
- OTV_LIMIT_CHECK( 4 );
- GlyphCount = FT_NEXT_USHORT( p );
- Count = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount ));
- OTV_TRACE(( " (Count = %d)\n", Count ));
-
- OTV_LIMIT_CHECK( GlyphCount * 2 + Count * 4 );
-
- for ( count1 = GlyphCount; count1 > 0; count1-- )
- otv_Coverage_validate( table + FT_NEXT_USHORT( p ), otvalid, -1 );
-
- for ( ; Count > 0; Count-- )
- {
- if ( FT_NEXT_USHORT( p ) >= GlyphCount )
- FT_INVALID_DATA;
-
- if ( FT_NEXT_USHORT( p ) >= otvalid->lookup_count )
- FT_INVALID_DATA;
- }
-
- OTV_EXIT;
- }
-
-
- /* sets otvalid->extra1 (valid->lookup_count) */
-
- FT_LOCAL_DEF( void )
- otv_u_O_O_O_O_x_Onx( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt Coverage;
- FT_UInt BacktrackClassDef, InputClassDef, LookaheadClassDef;
- FT_UInt ChainClassSetCount;
- OTV_Validate_Func func;
-
-
- OTV_ENTER;
-
- p += 2; /* skip Format */
-
- OTV_LIMIT_CHECK( 10 );
- Coverage = FT_NEXT_USHORT( p );
- BacktrackClassDef = FT_NEXT_USHORT( p );
- InputClassDef = FT_NEXT_USHORT( p );
- LookaheadClassDef = FT_NEXT_USHORT( p );
- ChainClassSetCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (ChainClassSetCount = %d)\n", ChainClassSetCount ));
-
- otv_Coverage_validate( table + Coverage, otvalid, -1 );
-
- otv_ClassDef_validate( table + BacktrackClassDef, otvalid );
- otv_ClassDef_validate( table + InputClassDef, otvalid );
- otv_ClassDef_validate( table + LookaheadClassDef, otvalid );
-
- OTV_LIMIT_CHECK( ChainClassSetCount * 2 );
-
- otvalid->nesting_level++;
- func = otvalid->func[otvalid->nesting_level];
- otvalid->extra1 = otvalid->lookup_count;
-
- for ( ; ChainClassSetCount > 0; ChainClassSetCount-- )
- {
- FT_UInt offset = FT_NEXT_USHORT( p );
-
-
- if ( offset )
- func( table + offset, otvalid );
- }
-
- otvalid->nesting_level--;
-
- OTV_EXIT;
- }
-
-
- /* uses otvalid->lookup_count */
-
- FT_LOCAL_DEF( void )
- otv_u_x_Ox_y_Oy_z_Oz_p_sp( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt BacktrackGlyphCount, InputGlyphCount, LookaheadGlyphCount;
- FT_UInt count1, count2;
-
-
- OTV_ENTER;
-
- p += 2; /* skip Format */
-
- OTV_LIMIT_CHECK( 2 );
- BacktrackGlyphCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (BacktrackGlyphCount = %d)\n", BacktrackGlyphCount ));
-
- OTV_LIMIT_CHECK( BacktrackGlyphCount * 2 + 2 );
-
- for ( ; BacktrackGlyphCount > 0; BacktrackGlyphCount-- )
- otv_Coverage_validate( table + FT_NEXT_USHORT( p ), otvalid, -1 );
-
- InputGlyphCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (InputGlyphCount = %d)\n", InputGlyphCount ));
-
- OTV_LIMIT_CHECK( InputGlyphCount * 2 + 2 );
-
- for ( count1 = InputGlyphCount; count1 > 0; count1-- )
- otv_Coverage_validate( table + FT_NEXT_USHORT( p ), otvalid, -1 );
-
- LookaheadGlyphCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (LookaheadGlyphCount = %d)\n", LookaheadGlyphCount ));
-
- OTV_LIMIT_CHECK( LookaheadGlyphCount * 2 + 2 );
-
- for ( ; LookaheadGlyphCount > 0; LookaheadGlyphCount-- )
- otv_Coverage_validate( table + FT_NEXT_USHORT( p ), otvalid, -1 );
-
- count2 = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (Count = %d)\n", count2 ));
-
- OTV_LIMIT_CHECK( count2 * 4 );
-
- for ( ; count2 > 0; count2-- )
- {
- if ( FT_NEXT_USHORT( p ) >= InputGlyphCount )
- FT_INVALID_DATA;
-
- if ( FT_NEXT_USHORT( p ) >= otvalid->lookup_count )
- FT_INVALID_DATA;
- }
-
- OTV_EXIT;
- }
-
-
- FT_LOCAL_DEF( FT_UInt )
- otv_GSUBGPOS_get_Lookup_count( FT_Bytes table )
- {
- FT_Bytes p = table + 8;
-
-
- return otv_LookupList_get_count( table + FT_NEXT_USHORT( p ) );
- }
-
-
- FT_LOCAL_DEF( FT_UInt )
- otv_GSUBGPOS_have_MarkAttachmentType_flag( FT_Bytes table )
- {
- FT_Bytes p, lookup;
- FT_UInt count;
-
-
- if ( !table )
- return 0;
-
- /* LookupList */
- p = table + 8;
- table += FT_NEXT_USHORT( p );
-
- /* LookupCount */
- p = table;
- count = FT_NEXT_USHORT( p );
-
- for ( ; count > 0; count-- )
- {
- FT_Bytes oldp;
-
-
- /* Lookup */
- lookup = table + FT_NEXT_USHORT( p );
-
- oldp = p;
-
- /* LookupFlag */
- p = lookup + 2;
- if ( FT_NEXT_USHORT( p ) & 0xFF00U )
- return 1;
-
- p = oldp;
- }
-
- return 0;
- }
-
-
-/* END */
diff --git a/src/otvalid/otvcommn.h b/src/otvalid/otvcommn.h
deleted file mode 100644
index 10a603ebb..000000000
--- a/src/otvalid/otvcommn.h
+++ /dev/null
@@ -1,437 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvcommn.h */
-/* */
-/* OpenType common tables validation (specification). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef OTVCOMMN_H_
-#define OTVCOMMN_H_
-
-
-#include <ft2build.h>
-#include "otvalid.h"
-#include FT_INTERNAL_DEBUG_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** VALIDATION *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct OTV_ValidatorRec_* OTV_Validator;
-
- typedef void (*OTV_Validate_Func)( FT_Bytes table,
- OTV_Validator otvalid );
-
- typedef struct OTV_ValidatorRec_
- {
- FT_Validator root;
- FT_UInt type_count;
- OTV_Validate_Func* type_funcs;
-
- FT_UInt lookup_count;
- FT_UInt glyph_count;
-
- FT_UInt nesting_level;
-
- OTV_Validate_Func func[3];
-
- FT_UInt extra1; /* for passing parameters */
- FT_UInt extra2;
- FT_Bytes extra3;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_UInt debug_indent;
- const FT_String* debug_function_name[3];
-#endif
-
- } OTV_ValidatorRec;
-
-
-#undef FT_INVALID_
-#define FT_INVALID_( _error ) \
- ft_validator_error( otvalid->root, FT_THROW( _error ) )
-
-#define OTV_OPTIONAL_TABLE( _table ) FT_UShort _table; \
- FT_Bytes _table ## _p
-
-#define OTV_OPTIONAL_OFFSET( _offset ) \
- FT_BEGIN_STMNT \
- _offset ## _p = p; \
- _offset = FT_NEXT_USHORT( p ); \
- FT_END_STMNT
-
-#define OTV_LIMIT_CHECK( _count ) \
- FT_BEGIN_STMNT \
- if ( p + (_count) > otvalid->root->limit ) \
- FT_INVALID_TOO_SHORT; \
- FT_END_STMNT
-
-#define OTV_SIZE_CHECK( _size ) \
- FT_BEGIN_STMNT \
- if ( _size > 0 && _size < table_size ) \
- { \
- if ( otvalid->root->level == FT_VALIDATE_PARANOID ) \
- FT_INVALID_OFFSET; \
- else \
- { \
- /* strip off `const' */ \
- FT_Byte* pp = (FT_Byte*)_size ## _p; \
- \
- \
- FT_TRACE3(( "\n" \
- "Invalid offset to optional table `%s'" \
- " set to zero.\n" \
- "\n", #_size )); \
- \
- /* always assume 16bit entities */ \
- _size = pp[0] = pp[1] = 0; \
- } \
- } \
- FT_END_STMNT
-
-
-#define OTV_NAME_(x) #x
-#define OTV_NAME(x) OTV_NAME_(x)
-
-#define OTV_FUNC_(x) x##Func
-#define OTV_FUNC(x) OTV_FUNC_(x)
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
-#define OTV_NEST1( x ) \
- FT_BEGIN_STMNT \
- otvalid->nesting_level = 0; \
- otvalid->func[0] = OTV_FUNC( x ); \
- otvalid->debug_function_name[0] = OTV_NAME( x ); \
- FT_END_STMNT
-
-#define OTV_NEST2( x, y ) \
- FT_BEGIN_STMNT \
- otvalid->nesting_level = 0; \
- otvalid->func[0] = OTV_FUNC( x ); \
- otvalid->func[1] = OTV_FUNC( y ); \
- otvalid->debug_function_name[0] = OTV_NAME( x ); \
- otvalid->debug_function_name[1] = OTV_NAME( y ); \
- FT_END_STMNT
-
-#define OTV_NEST3( x, y, z ) \
- FT_BEGIN_STMNT \
- otvalid->nesting_level = 0; \
- otvalid->func[0] = OTV_FUNC( x ); \
- otvalid->func[1] = OTV_FUNC( y ); \
- otvalid->func[2] = OTV_FUNC( z ); \
- otvalid->debug_function_name[0] = OTV_NAME( x ); \
- otvalid->debug_function_name[1] = OTV_NAME( y ); \
- otvalid->debug_function_name[2] = OTV_NAME( z ); \
- FT_END_STMNT
-
-#define OTV_INIT otvalid->debug_indent = 0
-
-#define OTV_ENTER \
- FT_BEGIN_STMNT \
- otvalid->debug_indent += 2; \
- FT_TRACE4(( "%*.s", otvalid->debug_indent, 0 )); \
- FT_TRACE4(( "%s table\n", \
- otvalid->debug_function_name[otvalid->nesting_level] )); \
- FT_END_STMNT
-
-#define OTV_NAME_ENTER( name ) \
- FT_BEGIN_STMNT \
- otvalid->debug_indent += 2; \
- FT_TRACE4(( "%*.s", otvalid->debug_indent, 0 )); \
- FT_TRACE4(( "%s table\n", name )); \
- FT_END_STMNT
-
-#define OTV_EXIT otvalid->debug_indent -= 2
-
-#define OTV_TRACE( s ) \
- FT_BEGIN_STMNT \
- FT_TRACE4(( "%*.s", otvalid->debug_indent, 0 )); \
- FT_TRACE4( s ); \
- FT_END_STMNT
-
-#else /* !FT_DEBUG_LEVEL_TRACE */
-
-#define OTV_NEST1( x ) \
- FT_BEGIN_STMNT \
- otvalid->nesting_level = 0; \
- otvalid->func[0] = OTV_FUNC( x ); \
- FT_END_STMNT
-
-#define OTV_NEST2( x, y ) \
- FT_BEGIN_STMNT \
- otvalid->nesting_level = 0; \
- otvalid->func[0] = OTV_FUNC( x ); \
- otvalid->func[1] = OTV_FUNC( y ); \
- FT_END_STMNT
-
-#define OTV_NEST3( x, y, z ) \
- FT_BEGIN_STMNT \
- otvalid->nesting_level = 0; \
- otvalid->func[0] = OTV_FUNC( x ); \
- otvalid->func[1] = OTV_FUNC( y ); \
- otvalid->func[2] = OTV_FUNC( z ); \
- FT_END_STMNT
-
-#define OTV_INIT do { } while ( 0 )
-#define OTV_ENTER do { } while ( 0 )
-#define OTV_NAME_ENTER( name ) do { } while ( 0 )
-#define OTV_EXIT do { } while ( 0 )
-
-#define OTV_TRACE( s ) do { } while ( 0 )
-
-#endif /* !FT_DEBUG_LEVEL_TRACE */
-
-
-#define OTV_RUN otvalid->func[0]
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** COVERAGE TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- otv_Coverage_validate( FT_Bytes table,
- OTV_Validator otvalid,
- FT_Int expected_count );
-
- /* return first covered glyph */
- FT_LOCAL( FT_UInt )
- otv_Coverage_get_first( FT_Bytes table );
-
- /* return last covered glyph */
- FT_LOCAL( FT_UInt )
- otv_Coverage_get_last( FT_Bytes table );
-
- /* return number of covered glyphs */
- FT_LOCAL( FT_UInt )
- otv_Coverage_get_count( FT_Bytes table );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CLASS DEFINITION TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- otv_ClassDef_validate( FT_Bytes table,
- OTV_Validator otvalid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** DEVICE TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- otv_Device_validate( FT_Bytes table,
- OTV_Validator otvalid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** LOOKUPS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- otv_Lookup_validate( FT_Bytes table,
- OTV_Validator otvalid );
-
- FT_LOCAL( void )
- otv_LookupList_validate( FT_Bytes table,
- OTV_Validator otvalid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FEATURES *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- otv_Feature_validate( FT_Bytes table,
- OTV_Validator otvalid );
-
- /* lookups must already be validated */
- FT_LOCAL( void )
- otv_FeatureList_validate( FT_Bytes table,
- FT_Bytes lookups,
- OTV_Validator otvalid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** LANGUAGE SYSTEM *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- otv_LangSys_validate( FT_Bytes table,
- OTV_Validator otvalid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** SCRIPTS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- otv_Script_validate( FT_Bytes table,
- OTV_Validator otvalid );
-
- /* features must already be validated */
- FT_LOCAL( void )
- otv_ScriptList_validate( FT_Bytes table,
- FT_Bytes features,
- OTV_Validator otvalid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** UTILITY FUNCTIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define ChainPosClassSetFunc otv_x_Ox
-#define ChainPosRuleSetFunc otv_x_Ox
-#define ChainSubClassSetFunc otv_x_Ox
-#define ChainSubRuleSetFunc otv_x_Ox
-#define JstfLangSysFunc otv_x_Ox
-#define JstfMaxFunc otv_x_Ox
-#define LigGlyphFunc otv_x_Ox
-#define LigatureArrayFunc otv_x_Ox
-#define LigatureSetFunc otv_x_Ox
-#define PosClassSetFunc otv_x_Ox
-#define PosRuleSetFunc otv_x_Ox
-#define SubClassSetFunc otv_x_Ox
-#define SubRuleSetFunc otv_x_Ox
-
- FT_LOCAL( void )
- otv_x_Ox ( FT_Bytes table,
- OTV_Validator otvalid );
-
-#define AlternateSubstFormat1Func otv_u_C_x_Ox
-#define ChainContextPosFormat1Func otv_u_C_x_Ox
-#define ChainContextSubstFormat1Func otv_u_C_x_Ox
-#define ContextPosFormat1Func otv_u_C_x_Ox
-#define ContextSubstFormat1Func otv_u_C_x_Ox
-#define LigatureSubstFormat1Func otv_u_C_x_Ox
-#define MultipleSubstFormat1Func otv_u_C_x_Ox
-
- FT_LOCAL( void )
- otv_u_C_x_Ox( FT_Bytes table,
- OTV_Validator otvalid );
-
-#define AlternateSetFunc otv_x_ux
-#define AttachPointFunc otv_x_ux
-#define ExtenderGlyphFunc otv_x_ux
-#define JstfGPOSModListFunc otv_x_ux
-#define JstfGSUBModListFunc otv_x_ux
-#define SequenceFunc otv_x_ux
-
- FT_LOCAL( void )
- otv_x_ux( FT_Bytes table,
- OTV_Validator otvalid );
-
-#define PosClassRuleFunc otv_x_y_ux_sy
-#define PosRuleFunc otv_x_y_ux_sy
-#define SubClassRuleFunc otv_x_y_ux_sy
-#define SubRuleFunc otv_x_y_ux_sy
-
- FT_LOCAL( void )
- otv_x_y_ux_sy( FT_Bytes table,
- OTV_Validator otvalid );
-
-#define ChainPosClassRuleFunc otv_x_ux_y_uy_z_uz_p_sp
-#define ChainPosRuleFunc otv_x_ux_y_uy_z_uz_p_sp
-#define ChainSubClassRuleFunc otv_x_ux_y_uy_z_uz_p_sp
-#define ChainSubRuleFunc otv_x_ux_y_uy_z_uz_p_sp
-
- FT_LOCAL( void )
- otv_x_ux_y_uy_z_uz_p_sp( FT_Bytes table,
- OTV_Validator otvalid );
-
-#define ContextPosFormat2Func otv_u_O_O_x_Onx
-#define ContextSubstFormat2Func otv_u_O_O_x_Onx
-
- FT_LOCAL( void )
- otv_u_O_O_x_Onx( FT_Bytes table,
- OTV_Validator otvalid );
-
-#define ContextPosFormat3Func otv_u_x_y_Ox_sy
-#define ContextSubstFormat3Func otv_u_x_y_Ox_sy
-
- FT_LOCAL( void )
- otv_u_x_y_Ox_sy( FT_Bytes table,
- OTV_Validator otvalid );
-
-#define ChainContextPosFormat2Func otv_u_O_O_O_O_x_Onx
-#define ChainContextSubstFormat2Func otv_u_O_O_O_O_x_Onx
-
- FT_LOCAL( void )
- otv_u_O_O_O_O_x_Onx( FT_Bytes table,
- OTV_Validator otvalid );
-
-#define ChainContextPosFormat3Func otv_u_x_Ox_y_Oy_z_Oz_p_sp
-#define ChainContextSubstFormat3Func otv_u_x_Ox_y_Oy_z_Oz_p_sp
-
- FT_LOCAL( void )
- otv_u_x_Ox_y_Oy_z_Oz_p_sp( FT_Bytes table,
- OTV_Validator otvalid );
-
-
- FT_LOCAL( FT_UInt )
- otv_GSUBGPOS_get_Lookup_count( FT_Bytes table );
-
- FT_LOCAL( FT_UInt )
- otv_GSUBGPOS_have_MarkAttachmentType_flag( FT_Bytes table );
-
- /* */
-
-FT_END_HEADER
-
-#endif /* OTVCOMMN_H_ */
-
-
-/* END */
diff --git a/src/otvalid/otverror.h b/src/otvalid/otverror.h
deleted file mode 100644
index 699903987..000000000
--- a/src/otvalid/otverror.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/***************************************************************************/
-/* */
-/* otverror.h */
-/* */
-/* OpenType validation module error codes (specification only). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the OpenType validation module error */
- /* enumeration constants. */
- /* */
- /*************************************************************************/
-
-#ifndef OTVERROR_H_
-#define OTVERROR_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX OTV_Err_
-#define FT_ERR_BASE FT_Mod_Err_OTvalid
-
-#include FT_ERRORS_H
-
-#endif /* OTVERROR_H_ */
-
-
-/* END */
diff --git a/src/otvalid/otvgdef.c b/src/otvalid/otvgdef.c
deleted file mode 100644
index 27b9a69ca..000000000
--- a/src/otvalid/otvgdef.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvgdef.c */
-/* */
-/* OpenType GDEF table validation (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "otvalid.h"
-#include "otvcommn.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_otvgdef
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** UTILITY FUNCTIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define AttachListFunc otv_O_x_Ox
-#define LigCaretListFunc otv_O_x_Ox
-
- /* sets valid->extra1 (0) */
-
- static void
- otv_O_x_Ox( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_Bytes Coverage;
- FT_UInt GlyphCount;
- OTV_Validate_Func func;
-
-
- OTV_ENTER;
-
- OTV_LIMIT_CHECK( 4 );
- Coverage = table + FT_NEXT_USHORT( p );
- GlyphCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount ));
-
- otv_Coverage_validate( Coverage, otvalid, (FT_Int)GlyphCount );
- if ( GlyphCount != otv_Coverage_get_count( Coverage ) )
- FT_INVALID_DATA;
-
- OTV_LIMIT_CHECK( GlyphCount * 2 );
-
- otvalid->nesting_level++;
- func = otvalid->func[otvalid->nesting_level];
- otvalid->extra1 = 0;
-
- for ( ; GlyphCount > 0; GlyphCount-- )
- func( table + FT_NEXT_USHORT( p ), otvalid );
-
- otvalid->nesting_level--;
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** LIGATURE CARETS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define CaretValueFunc otv_CaretValue_validate
-
- static void
- otv_CaretValue_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt CaretValueFormat;
-
-
- OTV_ENTER;
-
- OTV_LIMIT_CHECK( 4 );
-
- CaretValueFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format = %d)\n", CaretValueFormat ));
-
- switch ( CaretValueFormat )
- {
- case 1: /* CaretValueFormat1 */
- /* skip Coordinate, no test */
- break;
-
- case 2: /* CaretValueFormat2 */
- /* skip CaretValuePoint, no test */
- break;
-
- case 3: /* CaretValueFormat3 */
- p += 2; /* skip Coordinate */
-
- OTV_LIMIT_CHECK( 2 );
-
- /* DeviceTable */
- otv_Device_validate( table + FT_NEXT_USHORT( p ), otvalid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GDEF TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets otvalid->glyph_count */
-
- FT_LOCAL_DEF( void )
- otv_GDEF_validate( FT_Bytes table,
- FT_Bytes gsub,
- FT_Bytes gpos,
- FT_UInt glyph_count,
- FT_Validator ftvalid )
- {
- OTV_ValidatorRec otvalidrec;
- OTV_Validator otvalid = &otvalidrec;
- FT_Bytes p = table;
- FT_UInt table_size;
- FT_Bool need_MarkAttachClassDef;
-
- OTV_OPTIONAL_TABLE( GlyphClassDef );
- OTV_OPTIONAL_TABLE( AttachListOffset );
- OTV_OPTIONAL_TABLE( LigCaretListOffset );
- OTV_OPTIONAL_TABLE( MarkAttachClassDef );
-
-
- otvalid->root = ftvalid;
-
- FT_TRACE3(( "validating GDEF table\n" ));
- OTV_INIT;
-
- OTV_LIMIT_CHECK( 12 );
-
- if ( FT_NEXT_ULONG( p ) != 0x10000UL ) /* Version */
- FT_INVALID_FORMAT;
-
- /* MarkAttachClassDef has been added to the OpenType */
- /* specification without increasing GDEF's version, */
- /* so we use this ugly hack to find out whether the */
- /* table is needed actually. */
-
- need_MarkAttachClassDef = FT_BOOL(
- otv_GSUBGPOS_have_MarkAttachmentType_flag( gsub ) ||
- otv_GSUBGPOS_have_MarkAttachmentType_flag( gpos ) );
-
- if ( need_MarkAttachClassDef )
- table_size = 12; /* OpenType >= 1.2 */
- else
- table_size = 10; /* OpenType < 1.2 */
-
- otvalid->glyph_count = glyph_count;
-
- OTV_OPTIONAL_OFFSET( GlyphClassDef );
- OTV_SIZE_CHECK( GlyphClassDef );
- if ( GlyphClassDef )
- otv_ClassDef_validate( table + GlyphClassDef, otvalid );
-
- OTV_OPTIONAL_OFFSET( AttachListOffset );
- OTV_SIZE_CHECK( AttachListOffset );
- if ( AttachListOffset )
- {
- OTV_NEST2( AttachList, AttachPoint );
- OTV_RUN( table + AttachListOffset, otvalid );
- }
-
- OTV_OPTIONAL_OFFSET( LigCaretListOffset );
- OTV_SIZE_CHECK( LigCaretListOffset );
- if ( LigCaretListOffset )
- {
- OTV_NEST3( LigCaretList, LigGlyph, CaretValue );
- OTV_RUN( table + LigCaretListOffset, otvalid );
- }
-
- if ( need_MarkAttachClassDef )
- {
- OTV_OPTIONAL_OFFSET( MarkAttachClassDef );
- OTV_SIZE_CHECK( MarkAttachClassDef );
- if ( MarkAttachClassDef )
- otv_ClassDef_validate( table + MarkAttachClassDef, otvalid );
- }
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/src/otvalid/otvgpos.c b/src/otvalid/otvgpos.c
deleted file mode 100644
index 0fbcc2077..000000000
--- a/src/otvalid/otvgpos.c
+++ /dev/null
@@ -1,1021 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvgpos.c */
-/* */
-/* OpenType GPOS table validation (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "otvalid.h"
-#include "otvcommn.h"
-#include "otvgpos.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_otvgpos
-
-
- static void
- otv_Anchor_validate( FT_Bytes table,
- OTV_Validator valid );
-
- static void
- otv_MarkArray_validate( FT_Bytes table,
- OTV_Validator valid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** UTILITY FUNCTIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define BaseArrayFunc otv_x_sxy
-#define LigatureAttachFunc otv_x_sxy
-#define Mark2ArrayFunc otv_x_sxy
-
- /* uses valid->extra1 (counter) */
- /* uses valid->extra2 (boolean to handle NULL anchor field) */
-
- static void
- otv_x_sxy( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt Count, count1, table_size;
-
-
- OTV_ENTER;
-
- OTV_LIMIT_CHECK( 2 );
-
- Count = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (Count = %d)\n", Count ));
-
- OTV_LIMIT_CHECK( Count * otvalid->extra1 * 2 );
-
- table_size = Count * otvalid->extra1 * 2 + 2;
-
- for ( ; Count > 0; Count-- )
- for ( count1 = otvalid->extra1; count1 > 0; count1-- )
- {
- OTV_OPTIONAL_TABLE( anchor_offset );
-
-
- OTV_OPTIONAL_OFFSET( anchor_offset );
-
- if ( otvalid->extra2 )
- {
- OTV_SIZE_CHECK( anchor_offset );
- if ( anchor_offset )
- otv_Anchor_validate( table + anchor_offset, otvalid );
- }
- else
- otv_Anchor_validate( table + anchor_offset, otvalid );
- }
-
- OTV_EXIT;
- }
-
-
-#define MarkBasePosFormat1Func otv_u_O_O_u_O_O
-#define MarkLigPosFormat1Func otv_u_O_O_u_O_O
-#define MarkMarkPosFormat1Func otv_u_O_O_u_O_O
-
- /* sets otvalid->extra1 (class count) */
-
- static void
- otv_u_O_O_u_O_O( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt Coverage1, Coverage2, ClassCount;
- FT_UInt Array1, Array2;
- OTV_Validate_Func func;
-
-
- OTV_ENTER;
-
- p += 2; /* skip PosFormat */
-
- OTV_LIMIT_CHECK( 10 );
- Coverage1 = FT_NEXT_USHORT( p );
- Coverage2 = FT_NEXT_USHORT( p );
- ClassCount = FT_NEXT_USHORT( p );
- Array1 = FT_NEXT_USHORT( p );
- Array2 = FT_NEXT_USHORT( p );
-
- otv_Coverage_validate( table + Coverage1, otvalid, -1 );
- otv_Coverage_validate( table + Coverage2, otvalid, -1 );
-
- otv_MarkArray_validate( table + Array1, otvalid );
-
- otvalid->nesting_level++;
- func = otvalid->func[otvalid->nesting_level];
- otvalid->extra1 = ClassCount;
-
- func( table + Array2, otvalid );
-
- otvalid->nesting_level--;
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** VALUE RECORDS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static FT_UInt
- otv_value_length( FT_UInt format )
- {
- FT_UInt count;
-
-
- count = ( ( format & 0xAA ) >> 1 ) + ( format & 0x55 );
- count = ( ( count & 0xCC ) >> 2 ) + ( count & 0x33 );
- count = ( ( count & 0xF0 ) >> 4 ) + ( count & 0x0F );
-
- return count * 2;
- }
-
-
- /* uses otvalid->extra3 (pointer to base table) */
-
- static void
- otv_ValueRecord_validate( FT_Bytes table,
- FT_UInt format,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt count;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_Int loop;
- FT_ULong res = 0;
-
-
- OTV_NAME_ENTER( "ValueRecord" );
-
- /* display `format' in dual representation */
- for ( loop = 7; loop >= 0; loop-- )
- {
- res <<= 4;
- res += ( format >> loop ) & 1;
- }
-
- OTV_TRACE(( " (format 0b%08lx)\n", res ));
-#endif
-
- if ( format >= 0x100 )
- FT_INVALID_FORMAT;
-
- for ( count = 4; count > 0; count-- )
- {
- if ( format & 1 )
- {
- /* XPlacement, YPlacement, XAdvance, YAdvance */
- OTV_LIMIT_CHECK( 2 );
- p += 2;
- }
-
- format >>= 1;
- }
-
- for ( count = 4; count > 0; count-- )
- {
- if ( format & 1 )
- {
- FT_PtrDist table_size;
-
- OTV_OPTIONAL_TABLE( device );
-
-
- /* XPlaDevice, YPlaDevice, XAdvDevice, YAdvDevice */
- OTV_LIMIT_CHECK( 2 );
- OTV_OPTIONAL_OFFSET( device );
-
- /* XXX: this value is usually too small, especially if the current */
- /* ValueRecord is part of an array -- getting the correct table */
- /* size is probably not worth the trouble */
-
- table_size = p - otvalid->extra3;
-
- OTV_SIZE_CHECK( device );
- if ( device )
- otv_Device_validate( otvalid->extra3 + device, otvalid );
- }
- format >>= 1;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** ANCHORS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_Anchor_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt AnchorFormat;
-
-
- OTV_NAME_ENTER( "Anchor");
-
- OTV_LIMIT_CHECK( 6 );
- AnchorFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", AnchorFormat ));
-
- p += 4; /* skip XCoordinate and YCoordinate */
-
- switch ( AnchorFormat )
- {
- case 1:
- break;
-
- case 2:
- OTV_LIMIT_CHECK( 2 ); /* AnchorPoint */
- break;
-
- case 3:
- {
- FT_UInt table_size;
-
- OTV_OPTIONAL_TABLE( XDeviceTable );
- OTV_OPTIONAL_TABLE( YDeviceTable );
-
-
- OTV_LIMIT_CHECK( 4 );
- OTV_OPTIONAL_OFFSET( XDeviceTable );
- OTV_OPTIONAL_OFFSET( YDeviceTable );
-
- table_size = 6 + 4;
-
- OTV_SIZE_CHECK( XDeviceTable );
- if ( XDeviceTable )
- otv_Device_validate( table + XDeviceTable, otvalid );
-
- OTV_SIZE_CHECK( YDeviceTable );
- if ( YDeviceTable )
- otv_Device_validate( table + YDeviceTable, otvalid );
- }
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MARK ARRAYS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_MarkArray_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt MarkCount;
-
-
- OTV_NAME_ENTER( "MarkArray" );
-
- OTV_LIMIT_CHECK( 2 );
- MarkCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (MarkCount = %d)\n", MarkCount ));
-
- OTV_LIMIT_CHECK( MarkCount * 4 );
-
- /* MarkRecord */
- for ( ; MarkCount > 0; MarkCount-- )
- {
- p += 2; /* skip Class */
- /* MarkAnchor */
- otv_Anchor_validate( table + FT_NEXT_USHORT( p ), otvalid );
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 1 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets otvalid->extra3 (pointer to base table) */
-
- static void
- otv_SinglePos_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt PosFormat;
-
-
- OTV_NAME_ENTER( "SinglePos" );
-
- OTV_LIMIT_CHECK( 2 );
- PosFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", PosFormat ));
-
- otvalid->extra3 = table;
-
- switch ( PosFormat )
- {
- case 1: /* SinglePosFormat1 */
- {
- FT_UInt Coverage, ValueFormat;
-
-
- OTV_LIMIT_CHECK( 4 );
- Coverage = FT_NEXT_USHORT( p );
- ValueFormat = FT_NEXT_USHORT( p );
-
- otv_Coverage_validate( table + Coverage, otvalid, -1 );
- otv_ValueRecord_validate( p, ValueFormat, otvalid ); /* Value */
- }
- break;
-
- case 2: /* SinglePosFormat2 */
- {
- FT_UInt Coverage, ValueFormat, ValueCount, len_value;
-
-
- OTV_LIMIT_CHECK( 6 );
- Coverage = FT_NEXT_USHORT( p );
- ValueFormat = FT_NEXT_USHORT( p );
- ValueCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (ValueCount = %d)\n", ValueCount ));
-
- len_value = otv_value_length( ValueFormat );
-
- otv_Coverage_validate( table + Coverage,
- otvalid,
- (FT_Int)ValueCount );
-
- OTV_LIMIT_CHECK( ValueCount * len_value );
-
- /* Value */
- for ( ; ValueCount > 0; ValueCount-- )
- {
- otv_ValueRecord_validate( p, ValueFormat, otvalid );
- p += len_value;
- }
- }
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 2 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_PairSet_validate( FT_Bytes table,
- FT_UInt format1,
- FT_UInt format2,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt value_len1, value_len2, PairValueCount;
-
-
- OTV_NAME_ENTER( "PairSet" );
-
- OTV_LIMIT_CHECK( 2 );
- PairValueCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (PairValueCount = %d)\n", PairValueCount ));
-
- value_len1 = otv_value_length( format1 );
- value_len2 = otv_value_length( format2 );
-
- OTV_LIMIT_CHECK( PairValueCount * ( value_len1 + value_len2 + 2 ) );
-
- /* PairValueRecord */
- for ( ; PairValueCount > 0; PairValueCount-- )
- {
- p += 2; /* skip SecondGlyph */
-
- if ( format1 )
- otv_ValueRecord_validate( p, format1, otvalid ); /* Value1 */
- p += value_len1;
-
- if ( format2 )
- otv_ValueRecord_validate( p, format2, otvalid ); /* Value2 */
- p += value_len2;
- }
-
- OTV_EXIT;
- }
-
-
- /* sets otvalid->extra3 (pointer to base table) */
-
- static void
- otv_PairPos_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt PosFormat;
-
-
- OTV_NAME_ENTER( "PairPos" );
-
- OTV_LIMIT_CHECK( 2 );
- PosFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", PosFormat ));
-
- otvalid->extra3 = table;
-
- switch ( PosFormat )
- {
- case 1: /* PairPosFormat1 */
- {
- FT_UInt Coverage, ValueFormat1, ValueFormat2, PairSetCount;
-
-
- OTV_LIMIT_CHECK( 8 );
- Coverage = FT_NEXT_USHORT( p );
- ValueFormat1 = FT_NEXT_USHORT( p );
- ValueFormat2 = FT_NEXT_USHORT( p );
- PairSetCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (PairSetCount = %d)\n", PairSetCount ));
-
- otv_Coverage_validate( table + Coverage, otvalid, -1 );
-
- OTV_LIMIT_CHECK( PairSetCount * 2 );
-
- /* PairSetOffset */
- for ( ; PairSetCount > 0; PairSetCount-- )
- otv_PairSet_validate( table + FT_NEXT_USHORT( p ),
- ValueFormat1, ValueFormat2, otvalid );
- }
- break;
-
- case 2: /* PairPosFormat2 */
- {
- FT_UInt Coverage, ValueFormat1, ValueFormat2, ClassDef1, ClassDef2;
- FT_UInt ClassCount1, ClassCount2, len_value1, len_value2, count;
-
-
- OTV_LIMIT_CHECK( 14 );
- Coverage = FT_NEXT_USHORT( p );
- ValueFormat1 = FT_NEXT_USHORT( p );
- ValueFormat2 = FT_NEXT_USHORT( p );
- ClassDef1 = FT_NEXT_USHORT( p );
- ClassDef2 = FT_NEXT_USHORT( p );
- ClassCount1 = FT_NEXT_USHORT( p );
- ClassCount2 = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (ClassCount1 = %d)\n", ClassCount1 ));
- OTV_TRACE(( " (ClassCount2 = %d)\n", ClassCount2 ));
-
- len_value1 = otv_value_length( ValueFormat1 );
- len_value2 = otv_value_length( ValueFormat2 );
-
- otv_Coverage_validate( table + Coverage, otvalid, -1 );
- otv_ClassDef_validate( table + ClassDef1, otvalid );
- otv_ClassDef_validate( table + ClassDef2, otvalid );
-
- OTV_LIMIT_CHECK( ClassCount1 * ClassCount2 *
- ( len_value1 + len_value2 ) );
-
- /* Class1Record */
- for ( ; ClassCount1 > 0; ClassCount1-- )
- {
- /* Class2Record */
- for ( count = ClassCount2; count > 0; count-- )
- {
- if ( ValueFormat1 )
- /* Value1 */
- otv_ValueRecord_validate( p, ValueFormat1, otvalid );
- p += len_value1;
-
- if ( ValueFormat2 )
- /* Value2 */
- otv_ValueRecord_validate( p, ValueFormat2, otvalid );
- p += len_value2;
- }
- }
- }
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 3 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_CursivePos_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt PosFormat;
-
-
- OTV_NAME_ENTER( "CursivePos" );
-
- OTV_LIMIT_CHECK( 2 );
- PosFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", PosFormat ));
-
- switch ( PosFormat )
- {
- case 1: /* CursivePosFormat1 */
- {
- FT_UInt table_size;
- FT_UInt Coverage, EntryExitCount;
-
- OTV_OPTIONAL_TABLE( EntryAnchor );
- OTV_OPTIONAL_TABLE( ExitAnchor );
-
-
- OTV_LIMIT_CHECK( 4 );
- Coverage = FT_NEXT_USHORT( p );
- EntryExitCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (EntryExitCount = %d)\n", EntryExitCount ));
-
- otv_Coverage_validate( table + Coverage,
- otvalid,
- (FT_Int)EntryExitCount );
-
- OTV_LIMIT_CHECK( EntryExitCount * 4 );
-
- table_size = EntryExitCount * 4 + 4;
-
- /* EntryExitRecord */
- for ( ; EntryExitCount > 0; EntryExitCount-- )
- {
- OTV_OPTIONAL_OFFSET( EntryAnchor );
- OTV_OPTIONAL_OFFSET( ExitAnchor );
-
- OTV_SIZE_CHECK( EntryAnchor );
- if ( EntryAnchor )
- otv_Anchor_validate( table + EntryAnchor, otvalid );
-
- OTV_SIZE_CHECK( ExitAnchor );
- if ( ExitAnchor )
- otv_Anchor_validate( table + ExitAnchor, otvalid );
- }
- }
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 4 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* UNDOCUMENTED (in OpenType 1.5): */
- /* BaseRecord tables can contain NULL pointers. */
-
- /* sets otvalid->extra2 (1) */
-
- static void
- otv_MarkBasePos_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt PosFormat;
-
-
- OTV_NAME_ENTER( "MarkBasePos" );
-
- OTV_LIMIT_CHECK( 2 );
- PosFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", PosFormat ));
-
- switch ( PosFormat )
- {
- case 1:
- otvalid->extra2 = 1;
- OTV_NEST2( MarkBasePosFormat1, BaseArray );
- OTV_RUN( table, otvalid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 5 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets otvalid->extra2 (1) */
-
- static void
- otv_MarkLigPos_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt PosFormat;
-
-
- OTV_NAME_ENTER( "MarkLigPos" );
-
- OTV_LIMIT_CHECK( 2 );
- PosFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", PosFormat ));
-
- switch ( PosFormat )
- {
- case 1:
- otvalid->extra2 = 1;
- OTV_NEST3( MarkLigPosFormat1, LigatureArray, LigatureAttach );
- OTV_RUN( table, otvalid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 6 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets otvalid->extra2 (0) */
-
- static void
- otv_MarkMarkPos_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt PosFormat;
-
-
- OTV_NAME_ENTER( "MarkMarkPos" );
-
- OTV_LIMIT_CHECK( 2 );
- PosFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", PosFormat ));
-
- switch ( PosFormat )
- {
- case 1:
- otvalid->extra2 = 0;
- OTV_NEST2( MarkMarkPosFormat1, Mark2Array );
- OTV_RUN( table, otvalid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 7 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets otvalid->extra1 (lookup count) */
-
- static void
- otv_ContextPos_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt PosFormat;
-
-
- OTV_NAME_ENTER( "ContextPos" );
-
- OTV_LIMIT_CHECK( 2 );
- PosFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", PosFormat ));
-
- switch ( PosFormat )
- {
- case 1:
- /* no need to check glyph indices/classes used as input for these */
- /* context rules since even invalid glyph indices/classes return */
- /* meaningful results */
-
- otvalid->extra1 = otvalid->lookup_count;
- OTV_NEST3( ContextPosFormat1, PosRuleSet, PosRule );
- OTV_RUN( table, otvalid );
- break;
-
- case 2:
- /* no need to check glyph indices/classes used as input for these */
- /* context rules since even invalid glyph indices/classes return */
- /* meaningful results */
-
- OTV_NEST3( ContextPosFormat2, PosClassSet, PosClassRule );
- OTV_RUN( table, otvalid );
- break;
-
- case 3:
- OTV_NEST1( ContextPosFormat3 );
- OTV_RUN( table, otvalid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 8 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets otvalid->extra1 (lookup count) */
-
- static void
- otv_ChainContextPos_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt PosFormat;
-
-
- OTV_NAME_ENTER( "ChainContextPos" );
-
- OTV_LIMIT_CHECK( 2 );
- PosFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", PosFormat ));
-
- switch ( PosFormat )
- {
- case 1:
- /* no need to check glyph indices/classes used as input for these */
- /* context rules since even invalid glyph indices/classes return */
- /* meaningful results */
-
- otvalid->extra1 = otvalid->lookup_count;
- OTV_NEST3( ChainContextPosFormat1,
- ChainPosRuleSet, ChainPosRule );
- OTV_RUN( table, otvalid );
- break;
-
- case 2:
- /* no need to check glyph indices/classes used as input for these */
- /* context rules since even invalid glyph indices/classes return */
- /* meaningful results */
-
- OTV_NEST3( ChainContextPosFormat2,
- ChainPosClassSet, ChainPosClassRule );
- OTV_RUN( table, otvalid );
- break;
-
- case 3:
- OTV_NEST1( ChainContextPosFormat3 );
- OTV_RUN( table, otvalid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 9 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* uses otvalid->type_funcs */
-
- static void
- otv_ExtensionPos_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt PosFormat;
-
-
- OTV_NAME_ENTER( "ExtensionPos" );
-
- OTV_LIMIT_CHECK( 2 );
- PosFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", PosFormat ));
-
- switch ( PosFormat )
- {
- case 1: /* ExtensionPosFormat1 */
- {
- FT_UInt ExtensionLookupType;
- FT_ULong ExtensionOffset;
- OTV_Validate_Func validate;
-
-
- OTV_LIMIT_CHECK( 6 );
- ExtensionLookupType = FT_NEXT_USHORT( p );
- ExtensionOffset = FT_NEXT_ULONG( p );
-
- if ( ExtensionLookupType == 0 || ExtensionLookupType >= 9 )
- FT_INVALID_DATA;
-
- validate = otvalid->type_funcs[ExtensionLookupType - 1];
- validate( table + ExtensionOffset, otvalid );
- }
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- static const OTV_Validate_Func otv_gpos_validate_funcs[9] =
- {
- otv_SinglePos_validate,
- otv_PairPos_validate,
- otv_CursivePos_validate,
- otv_MarkBasePos_validate,
- otv_MarkLigPos_validate,
- otv_MarkMarkPos_validate,
- otv_ContextPos_validate,
- otv_ChainContextPos_validate,
- otv_ExtensionPos_validate
- };
-
-
- /* sets otvalid->type_count */
- /* sets otvalid->type_funcs */
-
- FT_LOCAL_DEF( void )
- otv_GPOS_subtable_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- otvalid->type_count = 9;
- otvalid->type_funcs = (OTV_Validate_Func*)otv_gpos_validate_funcs;
-
- otv_Lookup_validate( table, otvalid );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets otvalid->glyph_count */
-
- FT_LOCAL_DEF( void )
- otv_GPOS_validate( FT_Bytes table,
- FT_UInt glyph_count,
- FT_Validator ftvalid )
- {
- OTV_ValidatorRec validrec;
- OTV_Validator otvalid = &validrec;
- FT_Bytes p = table;
- FT_UInt ScriptList, FeatureList, LookupList;
-
-
- otvalid->root = ftvalid;
-
- FT_TRACE3(( "validating GPOS table\n" ));
- OTV_INIT;
-
- OTV_LIMIT_CHECK( 10 );
-
- if ( FT_NEXT_ULONG( p ) != 0x10000UL ) /* Version */
- FT_INVALID_FORMAT;
-
- ScriptList = FT_NEXT_USHORT( p );
- FeatureList = FT_NEXT_USHORT( p );
- LookupList = FT_NEXT_USHORT( p );
-
- otvalid->type_count = 9;
- otvalid->type_funcs = (OTV_Validate_Func*)otv_gpos_validate_funcs;
- otvalid->glyph_count = glyph_count;
-
- otv_LookupList_validate( table + LookupList,
- otvalid );
- otv_FeatureList_validate( table + FeatureList, table + LookupList,
- otvalid );
- otv_ScriptList_validate( table + ScriptList, table + FeatureList,
- otvalid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/src/otvalid/otvgpos.h b/src/otvalid/otvgpos.h
deleted file mode 100644
index 99b0ad391..000000000
--- a/src/otvalid/otvgpos.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvgpos.h */
-/* */
-/* OpenType GPOS table validator (specification). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef OTVGPOS_H_
-#define OTVGPOS_H_
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( void )
- otv_GPOS_subtable_validate( FT_Bytes table,
- OTV_Validator valid );
-
-
-FT_END_HEADER
-
-#endif /* OTVGPOS_H_ */
-
-
-/* END */
diff --git a/src/otvalid/otvgsub.c b/src/otvalid/otvgsub.c
deleted file mode 100644
index f9bd8dc5d..000000000
--- a/src/otvalid/otvgsub.c
+++ /dev/null
@@ -1,587 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvgsub.c */
-/* */
-/* OpenType GSUB table validation (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "otvalid.h"
-#include "otvcommn.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_otvgsub
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB LOOKUP TYPE 1 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* uses otvalid->glyph_count */
-
- static void
- otv_SingleSubst_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt SubstFormat;
-
-
- OTV_NAME_ENTER( "SingleSubst" );
-
- OTV_LIMIT_CHECK( 2 );
- SubstFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", SubstFormat ));
-
- switch ( SubstFormat )
- {
- case 1: /* SingleSubstFormat1 */
- {
- FT_Bytes Coverage;
- FT_Int DeltaGlyphID;
- FT_Long idx;
-
-
- OTV_LIMIT_CHECK( 4 );
- Coverage = table + FT_NEXT_USHORT( p );
- DeltaGlyphID = FT_NEXT_SHORT( p );
-
- otv_Coverage_validate( Coverage, otvalid, -1 );
-
- idx = (FT_Long)otv_Coverage_get_first( Coverage ) + DeltaGlyphID;
- if ( idx < 0 )
- FT_INVALID_DATA;
-
- idx = (FT_Long)otv_Coverage_get_last( Coverage ) + DeltaGlyphID;
- if ( (FT_UInt)idx >= otvalid->glyph_count )
- FT_INVALID_DATA;
- }
- break;
-
- case 2: /* SingleSubstFormat2 */
- {
- FT_UInt Coverage, GlyphCount;
-
-
- OTV_LIMIT_CHECK( 4 );
- Coverage = FT_NEXT_USHORT( p );
- GlyphCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount ));
-
- otv_Coverage_validate( table + Coverage,
- otvalid,
- (FT_Int)GlyphCount );
-
- OTV_LIMIT_CHECK( GlyphCount * 2 );
-
- /* Substitute */
- for ( ; GlyphCount > 0; GlyphCount-- )
- if ( FT_NEXT_USHORT( p ) >= otvalid->glyph_count )
- FT_INVALID_GLYPH_ID;
- }
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB LOOKUP TYPE 2 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets otvalid->extra1 (glyph count) */
-
- static void
- otv_MultipleSubst_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt SubstFormat;
-
-
- OTV_NAME_ENTER( "MultipleSubst" );
-
- OTV_LIMIT_CHECK( 2 );
- SubstFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", SubstFormat ));
-
- switch ( SubstFormat )
- {
- case 1:
- otvalid->extra1 = otvalid->glyph_count;
- OTV_NEST2( MultipleSubstFormat1, Sequence );
- OTV_RUN( table, otvalid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB LOOKUP TYPE 3 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets otvalid->extra1 (glyph count) */
-
- static void
- otv_AlternateSubst_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt SubstFormat;
-
-
- OTV_NAME_ENTER( "AlternateSubst" );
-
- OTV_LIMIT_CHECK( 2 );
- SubstFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", SubstFormat ));
-
- switch ( SubstFormat )
- {
- case 1:
- otvalid->extra1 = otvalid->glyph_count;
- OTV_NEST2( AlternateSubstFormat1, AlternateSet );
- OTV_RUN( table, otvalid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB LOOKUP TYPE 4 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define LigatureFunc otv_Ligature_validate
-
- /* uses otvalid->glyph_count */
-
- static void
- otv_Ligature_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt LigatureGlyph, CompCount;
-
-
- OTV_ENTER;
-
- OTV_LIMIT_CHECK( 4 );
- LigatureGlyph = FT_NEXT_USHORT( p );
- if ( LigatureGlyph >= otvalid->glyph_count )
- FT_INVALID_DATA;
-
- CompCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (CompCount = %d)\n", CompCount ));
-
- if ( CompCount == 0 )
- FT_INVALID_DATA;
-
- CompCount--;
-
- OTV_LIMIT_CHECK( CompCount * 2 ); /* Component */
-
- /* no need to check the Component glyph indices */
-
- OTV_EXIT;
- }
-
-
- static void
- otv_LigatureSubst_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt SubstFormat;
-
-
- OTV_NAME_ENTER( "LigatureSubst" );
-
- OTV_LIMIT_CHECK( 2 );
- SubstFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", SubstFormat ));
-
- switch ( SubstFormat )
- {
- case 1:
- OTV_NEST3( LigatureSubstFormat1, LigatureSet, Ligature );
- OTV_RUN( table, otvalid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB LOOKUP TYPE 5 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets otvalid->extra1 (lookup count) */
-
- static void
- otv_ContextSubst_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt SubstFormat;
-
-
- OTV_NAME_ENTER( "ContextSubst" );
-
- OTV_LIMIT_CHECK( 2 );
- SubstFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", SubstFormat ));
-
- switch ( SubstFormat )
- {
- case 1:
- /* no need to check glyph indices/classes used as input for these */
- /* context rules since even invalid glyph indices/classes return */
- /* meaningful results */
-
- otvalid->extra1 = otvalid->lookup_count;
- OTV_NEST3( ContextSubstFormat1, SubRuleSet, SubRule );
- OTV_RUN( table, otvalid );
- break;
-
- case 2:
- /* no need to check glyph indices/classes used as input for these */
- /* context rules since even invalid glyph indices/classes return */
- /* meaningful results */
-
- OTV_NEST3( ContextSubstFormat2, SubClassSet, SubClassRule );
- OTV_RUN( table, otvalid );
- break;
-
- case 3:
- OTV_NEST1( ContextSubstFormat3 );
- OTV_RUN( table, otvalid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB LOOKUP TYPE 6 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets otvalid->extra1 (lookup count) */
-
- static void
- otv_ChainContextSubst_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt SubstFormat;
-
-
- OTV_NAME_ENTER( "ChainContextSubst" );
-
- OTV_LIMIT_CHECK( 2 );
- SubstFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", SubstFormat ));
-
- switch ( SubstFormat )
- {
- case 1:
- /* no need to check glyph indices/classes used as input for these */
- /* context rules since even invalid glyph indices/classes return */
- /* meaningful results */
-
- otvalid->extra1 = otvalid->lookup_count;
- OTV_NEST3( ChainContextSubstFormat1,
- ChainSubRuleSet, ChainSubRule );
- OTV_RUN( table, otvalid );
- break;
-
- case 2:
- /* no need to check glyph indices/classes used as input for these */
- /* context rules since even invalid glyph indices/classes return */
- /* meaningful results */
-
- OTV_NEST3( ChainContextSubstFormat2,
- ChainSubClassSet, ChainSubClassRule );
- OTV_RUN( table, otvalid );
- break;
-
- case 3:
- OTV_NEST1( ChainContextSubstFormat3 );
- OTV_RUN( table, otvalid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB LOOKUP TYPE 7 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* uses otvalid->type_funcs */
-
- static void
- otv_ExtensionSubst_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt SubstFormat;
-
-
- OTV_NAME_ENTER( "ExtensionSubst" );
-
- OTV_LIMIT_CHECK( 2 );
- SubstFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", SubstFormat ));
-
- switch ( SubstFormat )
- {
- case 1: /* ExtensionSubstFormat1 */
- {
- FT_UInt ExtensionLookupType;
- FT_ULong ExtensionOffset;
- OTV_Validate_Func validate;
-
-
- OTV_LIMIT_CHECK( 6 );
- ExtensionLookupType = FT_NEXT_USHORT( p );
- ExtensionOffset = FT_NEXT_ULONG( p );
-
- if ( ExtensionLookupType == 0 ||
- ExtensionLookupType == 7 ||
- ExtensionLookupType > 8 )
- FT_INVALID_DATA;
-
- validate = otvalid->type_funcs[ExtensionLookupType - 1];
- validate( table + ExtensionOffset, otvalid );
- }
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB LOOKUP TYPE 8 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* uses otvalid->glyph_count */
-
- static void
- otv_ReverseChainSingleSubst_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table, Coverage;
- FT_UInt SubstFormat;
- FT_UInt BacktrackGlyphCount, LookaheadGlyphCount, GlyphCount;
-
-
- OTV_NAME_ENTER( "ReverseChainSingleSubst" );
-
- OTV_LIMIT_CHECK( 2 );
- SubstFormat = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (format %d)\n", SubstFormat ));
-
- switch ( SubstFormat )
- {
- case 1: /* ReverseChainSingleSubstFormat1 */
- OTV_LIMIT_CHECK( 4 );
- Coverage = table + FT_NEXT_USHORT( p );
- BacktrackGlyphCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (BacktrackGlyphCount = %d)\n", BacktrackGlyphCount ));
-
- otv_Coverage_validate( Coverage, otvalid, -1 );
-
- OTV_LIMIT_CHECK( BacktrackGlyphCount * 2 + 2 );
-
- for ( ; BacktrackGlyphCount > 0; BacktrackGlyphCount-- )
- otv_Coverage_validate( table + FT_NEXT_USHORT( p ), otvalid, -1 );
-
- LookaheadGlyphCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (LookaheadGlyphCount = %d)\n", LookaheadGlyphCount ));
-
- OTV_LIMIT_CHECK( LookaheadGlyphCount * 2 + 2 );
-
- for ( ; LookaheadGlyphCount > 0; LookaheadGlyphCount-- )
- otv_Coverage_validate( table + FT_NEXT_USHORT( p ), otvalid, -1 );
-
- GlyphCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount ));
-
- if ( GlyphCount != otv_Coverage_get_count( Coverage ) )
- FT_INVALID_DATA;
-
- OTV_LIMIT_CHECK( GlyphCount * 2 );
-
- /* Substitute */
- for ( ; GlyphCount > 0; GlyphCount-- )
- if ( FT_NEXT_USHORT( p ) >= otvalid->glyph_count )
- FT_INVALID_DATA;
-
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- static const OTV_Validate_Func otv_gsub_validate_funcs[8] =
- {
- otv_SingleSubst_validate,
- otv_MultipleSubst_validate,
- otv_AlternateSubst_validate,
- otv_LigatureSubst_validate,
- otv_ContextSubst_validate,
- otv_ChainContextSubst_validate,
- otv_ExtensionSubst_validate,
- otv_ReverseChainSingleSubst_validate
- };
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets otvalid->type_count */
- /* sets otvalid->type_funcs */
- /* sets otvalid->glyph_count */
-
- FT_LOCAL_DEF( void )
- otv_GSUB_validate( FT_Bytes table,
- FT_UInt glyph_count,
- FT_Validator ftvalid )
- {
- OTV_ValidatorRec otvalidrec;
- OTV_Validator otvalid = &otvalidrec;
- FT_Bytes p = table;
- FT_UInt ScriptList, FeatureList, LookupList;
-
-
- otvalid->root = ftvalid;
-
- FT_TRACE3(( "validating GSUB table\n" ));
- OTV_INIT;
-
- OTV_LIMIT_CHECK( 10 );
-
- if ( FT_NEXT_ULONG( p ) != 0x10000UL ) /* Version */
- FT_INVALID_FORMAT;
-
- ScriptList = FT_NEXT_USHORT( p );
- FeatureList = FT_NEXT_USHORT( p );
- LookupList = FT_NEXT_USHORT( p );
-
- otvalid->type_count = 8;
- otvalid->type_funcs = (OTV_Validate_Func*)otv_gsub_validate_funcs;
- otvalid->glyph_count = glyph_count;
-
- otv_LookupList_validate( table + LookupList,
- otvalid );
- otv_FeatureList_validate( table + FeatureList, table + LookupList,
- otvalid );
- otv_ScriptList_validate( table + ScriptList, table + FeatureList,
- otvalid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/src/otvalid/otvjstf.c b/src/otvalid/otvjstf.c
deleted file mode 100644
index 57a38f95c..000000000
--- a/src/otvalid/otvjstf.c
+++ /dev/null
@@ -1,259 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvjstf.c */
-/* */
-/* OpenType JSTF table validation (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "otvalid.h"
-#include "otvcommn.h"
-#include "otvgpos.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_otvjstf
-
-
-#define JstfPriorityFunc otv_JstfPriority_validate
-#define JstfLookupFunc otv_GPOS_subtable_validate
-
- /* uses otvalid->extra1 (GSUB lookup count) */
- /* uses otvalid->extra2 (GPOS lookup count) */
- /* sets otvalid->extra1 (counter) */
-
- static void
- otv_JstfPriority_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt table_size;
- FT_UInt gsub_lookup_count, gpos_lookup_count;
-
- OTV_OPTIONAL_TABLE( ShrinkageEnableGSUB );
- OTV_OPTIONAL_TABLE( ShrinkageDisableGSUB );
- OTV_OPTIONAL_TABLE( ShrinkageEnableGPOS );
- OTV_OPTIONAL_TABLE( ShrinkageDisableGPOS );
- OTV_OPTIONAL_TABLE( ExtensionEnableGSUB );
- OTV_OPTIONAL_TABLE( ExtensionDisableGSUB );
- OTV_OPTIONAL_TABLE( ExtensionEnableGPOS );
- OTV_OPTIONAL_TABLE( ExtensionDisableGPOS );
- OTV_OPTIONAL_TABLE( ShrinkageJstfMax );
- OTV_OPTIONAL_TABLE( ExtensionJstfMax );
-
-
- OTV_ENTER;
- OTV_TRACE(( "JstfPriority table\n" ));
-
- OTV_LIMIT_CHECK( 20 );
-
- gsub_lookup_count = otvalid->extra1;
- gpos_lookup_count = otvalid->extra2;
-
- table_size = 20;
-
- otvalid->extra1 = gsub_lookup_count;
-
- OTV_OPTIONAL_OFFSET( ShrinkageEnableGSUB );
- OTV_SIZE_CHECK( ShrinkageEnableGSUB );
- if ( ShrinkageEnableGSUB )
- otv_x_ux( table + ShrinkageEnableGSUB, otvalid );
-
- OTV_OPTIONAL_OFFSET( ShrinkageDisableGSUB );
- OTV_SIZE_CHECK( ShrinkageDisableGSUB );
- if ( ShrinkageDisableGSUB )
- otv_x_ux( table + ShrinkageDisableGSUB, otvalid );
-
- otvalid->extra1 = gpos_lookup_count;
-
- OTV_OPTIONAL_OFFSET( ShrinkageEnableGPOS );
- OTV_SIZE_CHECK( ShrinkageEnableGPOS );
- if ( ShrinkageEnableGPOS )
- otv_x_ux( table + ShrinkageEnableGPOS, otvalid );
-
- OTV_OPTIONAL_OFFSET( ShrinkageDisableGPOS );
- OTV_SIZE_CHECK( ShrinkageDisableGPOS );
- if ( ShrinkageDisableGPOS )
- otv_x_ux( table + ShrinkageDisableGPOS, otvalid );
-
- OTV_OPTIONAL_OFFSET( ShrinkageJstfMax );
- OTV_SIZE_CHECK( ShrinkageJstfMax );
- if ( ShrinkageJstfMax )
- {
- /* XXX: check lookup types? */
- OTV_NEST2( JstfMax, JstfLookup );
- OTV_RUN( table + ShrinkageJstfMax, otvalid );
- }
-
- otvalid->extra1 = gsub_lookup_count;
-
- OTV_OPTIONAL_OFFSET( ExtensionEnableGSUB );
- OTV_SIZE_CHECK( ExtensionEnableGSUB );
- if ( ExtensionEnableGSUB )
- otv_x_ux( table + ExtensionEnableGSUB, otvalid );
-
- OTV_OPTIONAL_OFFSET( ExtensionDisableGSUB );
- OTV_SIZE_CHECK( ExtensionDisableGSUB );
- if ( ExtensionDisableGSUB )
- otv_x_ux( table + ExtensionDisableGSUB, otvalid );
-
- otvalid->extra1 = gpos_lookup_count;
-
- OTV_OPTIONAL_OFFSET( ExtensionEnableGPOS );
- OTV_SIZE_CHECK( ExtensionEnableGPOS );
- if ( ExtensionEnableGPOS )
- otv_x_ux( table + ExtensionEnableGPOS, otvalid );
-
- OTV_OPTIONAL_OFFSET( ExtensionDisableGPOS );
- OTV_SIZE_CHECK( ExtensionDisableGPOS );
- if ( ExtensionDisableGPOS )
- otv_x_ux( table + ExtensionDisableGPOS, otvalid );
-
- OTV_OPTIONAL_OFFSET( ExtensionJstfMax );
- OTV_SIZE_CHECK( ExtensionJstfMax );
- if ( ExtensionJstfMax )
- {
- /* XXX: check lookup types? */
- OTV_NEST2( JstfMax, JstfLookup );
- OTV_RUN( table + ExtensionJstfMax, otvalid );
- }
-
- otvalid->extra1 = gsub_lookup_count;
- otvalid->extra2 = gpos_lookup_count;
-
- OTV_EXIT;
- }
-
-
- /* sets otvalid->extra (glyph count) */
- /* sets otvalid->func1 (otv_JstfPriority_validate) */
-
- static void
- otv_JstfScript_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt table_size;
- FT_UInt JstfLangSysCount;
-
- OTV_OPTIONAL_TABLE( ExtGlyph );
- OTV_OPTIONAL_TABLE( DefJstfLangSys );
-
-
- OTV_NAME_ENTER( "JstfScript" );
-
- OTV_LIMIT_CHECK( 6 );
- OTV_OPTIONAL_OFFSET( ExtGlyph );
- OTV_OPTIONAL_OFFSET( DefJstfLangSys );
- JstfLangSysCount = FT_NEXT_USHORT( p );
-
- OTV_TRACE(( " (JstfLangSysCount = %d)\n", JstfLangSysCount ));
-
- table_size = JstfLangSysCount * 6 + 6;
-
- OTV_SIZE_CHECK( ExtGlyph );
- if ( ExtGlyph )
- {
- otvalid->extra1 = otvalid->glyph_count;
- OTV_NEST1( ExtenderGlyph );
- OTV_RUN( table + ExtGlyph, otvalid );
- }
-
- OTV_SIZE_CHECK( DefJstfLangSys );
- if ( DefJstfLangSys )
- {
- OTV_NEST2( JstfLangSys, JstfPriority );
- OTV_RUN( table + DefJstfLangSys, otvalid );
- }
-
- OTV_LIMIT_CHECK( 6 * JstfLangSysCount );
-
- /* JstfLangSysRecord */
- OTV_NEST2( JstfLangSys, JstfPriority );
- for ( ; JstfLangSysCount > 0; JstfLangSysCount-- )
- {
- p += 4; /* skip JstfLangSysTag */
-
- OTV_RUN( table + FT_NEXT_USHORT( p ), otvalid );
- }
-
- OTV_EXIT;
- }
-
-
- /* sets otvalid->extra1 (GSUB lookup count) */
- /* sets otvalid->extra2 (GPOS lookup count) */
- /* sets otvalid->glyph_count */
-
- FT_LOCAL_DEF( void )
- otv_JSTF_validate( FT_Bytes table,
- FT_Bytes gsub,
- FT_Bytes gpos,
- FT_UInt glyph_count,
- FT_Validator ftvalid )
- {
- OTV_ValidatorRec otvalidrec;
- OTV_Validator otvalid = &otvalidrec;
- FT_Bytes p = table;
- FT_UInt JstfScriptCount;
-
-
- otvalid->root = ftvalid;
-
-
- FT_TRACE3(( "validating JSTF table\n" ));
- OTV_INIT;
-
- OTV_LIMIT_CHECK( 6 );
-
- if ( FT_NEXT_ULONG( p ) != 0x10000UL ) /* Version */
- FT_INVALID_FORMAT;
-
- JstfScriptCount = FT_NEXT_USHORT( p );
-
- FT_TRACE3(( " (JstfScriptCount = %d)\n", JstfScriptCount ));
-
- OTV_LIMIT_CHECK( JstfScriptCount * 6 );
-
- if ( gsub )
- otvalid->extra1 = otv_GSUBGPOS_get_Lookup_count( gsub );
- else
- otvalid->extra1 = 0;
-
- if ( gpos )
- otvalid->extra2 = otv_GSUBGPOS_get_Lookup_count( gpos );
- else
- otvalid->extra2 = 0;
-
- otvalid->glyph_count = glyph_count;
-
- /* JstfScriptRecord */
- for ( ; JstfScriptCount > 0; JstfScriptCount-- )
- {
- p += 4; /* skip JstfScriptTag */
-
- /* JstfScript */
- otv_JstfScript_validate( table + FT_NEXT_USHORT( p ), otvalid );
- }
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/src/otvalid/otvmath.c b/src/otvalid/otvmath.c
deleted file mode 100644
index a14d36970..000000000
--- a/src/otvalid/otvmath.c
+++ /dev/null
@@ -1,453 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvmath.c */
-/* */
-/* OpenType MATH table validation (body). */
-/* */
-/* Copyright 2007-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* Written by George Williams. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "otvalid.h"
-#include "otvcommn.h"
-#include "otvgpos.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_otvmath
-
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MATH TYPOGRAPHIC CONSTANTS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_MathConstants_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt i;
- FT_UInt table_size;
-
- OTV_OPTIONAL_TABLE( DeviceTableOffset );
-
-
- OTV_NAME_ENTER( "MathConstants" );
-
- /* 56 constants, 51 have device tables */
- OTV_LIMIT_CHECK( 2 * ( 56 + 51 ) );
- table_size = 2 * ( 56 + 51 );
-
- p += 4 * 2; /* First 4 constants have no device tables */
- for ( i = 0; i < 51; i++ )
- {
- p += 2; /* skip the value */
- OTV_OPTIONAL_OFFSET( DeviceTableOffset );
- OTV_SIZE_CHECK( DeviceTableOffset );
- if ( DeviceTableOffset )
- otv_Device_validate( table + DeviceTableOffset, otvalid );
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MATH ITALICS CORRECTION *****/
- /***** MATH TOP ACCENT ATTACHMENT *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_MathItalicsCorrectionInfo_validate( FT_Bytes table,
- OTV_Validator otvalid,
- FT_Int isItalic )
- {
- FT_Bytes p = table;
- FT_UInt i, cnt, table_size;
-
- OTV_OPTIONAL_TABLE( Coverage );
- OTV_OPTIONAL_TABLE( DeviceTableOffset );
-
- FT_UNUSED( isItalic ); /* only used if tracing is active */
-
-
- OTV_NAME_ENTER( isItalic ? "MathItalicsCorrectionInfo"
- : "MathTopAccentAttachment" );
-
- OTV_LIMIT_CHECK( 4 );
-
- OTV_OPTIONAL_OFFSET( Coverage );
- cnt = FT_NEXT_USHORT( p );
-
- OTV_LIMIT_CHECK( 4 * cnt );
- table_size = 4 + 4 * cnt;
-
- OTV_SIZE_CHECK( Coverage );
- otv_Coverage_validate( table + Coverage, otvalid, (FT_Int)cnt );
-
- for ( i = 0; i < cnt; i++ )
- {
- p += 2; /* Skip the value */
- OTV_OPTIONAL_OFFSET( DeviceTableOffset );
- OTV_SIZE_CHECK( DeviceTableOffset );
- if ( DeviceTableOffset )
- otv_Device_validate( table + DeviceTableOffset, otvalid );
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MATH KERNING *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_MathKern_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt i, cnt, table_size;
-
- OTV_OPTIONAL_TABLE( DeviceTableOffset );
-
-
- /* OTV_NAME_ENTER( "MathKern" );*/
-
- OTV_LIMIT_CHECK( 2 );
-
- cnt = FT_NEXT_USHORT( p );
-
- OTV_LIMIT_CHECK( 4 * cnt + 2 );
- table_size = 4 + 4 * cnt;
-
- /* Heights */
- for ( i = 0; i < cnt; i++ )
- {
- p += 2; /* Skip the value */
- OTV_OPTIONAL_OFFSET( DeviceTableOffset );
- OTV_SIZE_CHECK( DeviceTableOffset );
- if ( DeviceTableOffset )
- otv_Device_validate( table + DeviceTableOffset, otvalid );
- }
-
- /* One more Kerning value */
- for ( i = 0; i < cnt + 1; i++ )
- {
- p += 2; /* Skip the value */
- OTV_OPTIONAL_OFFSET( DeviceTableOffset );
- OTV_SIZE_CHECK( DeviceTableOffset );
- if ( DeviceTableOffset )
- otv_Device_validate( table + DeviceTableOffset, otvalid );
- }
-
- OTV_EXIT;
- }
-
-
- static void
- otv_MathKernInfo_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt i, j, cnt, table_size;
-
- OTV_OPTIONAL_TABLE( Coverage );
- OTV_OPTIONAL_TABLE( MKRecordOffset );
-
-
- OTV_NAME_ENTER( "MathKernInfo" );
-
- OTV_LIMIT_CHECK( 4 );
-
- OTV_OPTIONAL_OFFSET( Coverage );
- cnt = FT_NEXT_USHORT( p );
-
- OTV_LIMIT_CHECK( 8 * cnt );
- table_size = 4 + 8 * cnt;
-
- OTV_SIZE_CHECK( Coverage );
- otv_Coverage_validate( table + Coverage, otvalid, (FT_Int)cnt );
-
- for ( i = 0; i < cnt; i++ )
- {
- for ( j = 0; j < 4; j++ )
- {
- OTV_OPTIONAL_OFFSET( MKRecordOffset );
- OTV_SIZE_CHECK( MKRecordOffset );
- if ( MKRecordOffset )
- otv_MathKern_validate( table + MKRecordOffset, otvalid );
- }
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MATH GLYPH INFO *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_MathGlyphInfo_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt MathItalicsCorrectionInfo, MathTopAccentAttachment;
- FT_UInt ExtendedShapeCoverage, MathKernInfo;
-
-
- OTV_NAME_ENTER( "MathGlyphInfo" );
-
- OTV_LIMIT_CHECK( 8 );
-
- MathItalicsCorrectionInfo = FT_NEXT_USHORT( p );
- MathTopAccentAttachment = FT_NEXT_USHORT( p );
- ExtendedShapeCoverage = FT_NEXT_USHORT( p );
- MathKernInfo = FT_NEXT_USHORT( p );
-
- if ( MathItalicsCorrectionInfo )
- otv_MathItalicsCorrectionInfo_validate(
- table + MathItalicsCorrectionInfo, otvalid, TRUE );
-
- /* Italic correction and Top Accent Attachment have the same format */
- if ( MathTopAccentAttachment )
- otv_MathItalicsCorrectionInfo_validate(
- table + MathTopAccentAttachment, otvalid, FALSE );
-
- if ( ExtendedShapeCoverage )
- {
- OTV_NAME_ENTER( "ExtendedShapeCoverage" );
- otv_Coverage_validate( table + ExtendedShapeCoverage, otvalid, -1 );
- OTV_EXIT;
- }
-
- if ( MathKernInfo )
- otv_MathKernInfo_validate( table + MathKernInfo, otvalid );
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MATH GLYPH CONSTRUCTION *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_GlyphAssembly_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt pcnt, table_size;
- FT_UInt i;
-
- OTV_OPTIONAL_TABLE( DeviceTableOffset );
-
-
- /* OTV_NAME_ENTER( "GlyphAssembly" ); */
-
- OTV_LIMIT_CHECK( 6 );
-
- p += 2; /* Skip the Italics Correction value */
- OTV_OPTIONAL_OFFSET( DeviceTableOffset );
- pcnt = FT_NEXT_USHORT( p );
-
- OTV_LIMIT_CHECK( 8 * pcnt );
- table_size = 6 + 8 * pcnt;
-
- OTV_SIZE_CHECK( DeviceTableOffset );
- if ( DeviceTableOffset )
- otv_Device_validate( table + DeviceTableOffset, otvalid );
-
- for ( i = 0; i < pcnt; i++ )
- {
- FT_UInt gid;
-
-
- gid = FT_NEXT_USHORT( p );
- if ( gid >= otvalid->glyph_count )
- FT_INVALID_GLYPH_ID;
- p += 2*4; /* skip the Start, End, Full, and Flags fields */
- }
-
- /* OTV_EXIT; */
- }
-
-
- static void
- otv_MathGlyphConstruction_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt vcnt, table_size;
- FT_UInt i;
-
- OTV_OPTIONAL_TABLE( GlyphAssembly );
-
-
- /* OTV_NAME_ENTER( "MathGlyphConstruction" ); */
-
- OTV_LIMIT_CHECK( 4 );
-
- OTV_OPTIONAL_OFFSET( GlyphAssembly );
- vcnt = FT_NEXT_USHORT( p );
-
- OTV_LIMIT_CHECK( 4 * vcnt );
- table_size = 4 + 4 * vcnt;
-
- for ( i = 0; i < vcnt; i++ )
- {
- FT_UInt gid;
-
-
- gid = FT_NEXT_USHORT( p );
- if ( gid >= otvalid->glyph_count )
- FT_INVALID_GLYPH_ID;
- p += 2; /* skip the size */
- }
-
- OTV_SIZE_CHECK( GlyphAssembly );
- if ( GlyphAssembly )
- otv_GlyphAssembly_validate( table+GlyphAssembly, otvalid );
-
- /* OTV_EXIT; */
- }
-
-
- static void
- otv_MathVariants_validate( FT_Bytes table,
- OTV_Validator otvalid )
- {
- FT_Bytes p = table;
- FT_UInt vcnt, hcnt, i, table_size;
-
- OTV_OPTIONAL_TABLE( VCoverage );
- OTV_OPTIONAL_TABLE( HCoverage );
- OTV_OPTIONAL_TABLE( Offset );
-
-
- OTV_NAME_ENTER( "MathVariants" );
-
- OTV_LIMIT_CHECK( 10 );
-
- p += 2; /* Skip the MinConnectorOverlap constant */
- OTV_OPTIONAL_OFFSET( VCoverage );
- OTV_OPTIONAL_OFFSET( HCoverage );
- vcnt = FT_NEXT_USHORT( p );
- hcnt = FT_NEXT_USHORT( p );
-
- OTV_LIMIT_CHECK( 2 * vcnt + 2 * hcnt );
- table_size = 10 + 2 * vcnt + 2 * hcnt;
-
- OTV_SIZE_CHECK( VCoverage );
- if ( VCoverage )
- otv_Coverage_validate( table + VCoverage, otvalid, (FT_Int)vcnt );
-
- OTV_SIZE_CHECK( HCoverage );
- if ( HCoverage )
- otv_Coverage_validate( table + HCoverage, otvalid, (FT_Int)hcnt );
-
- for ( i = 0; i < vcnt; i++ )
- {
- OTV_OPTIONAL_OFFSET( Offset );
- OTV_SIZE_CHECK( Offset );
- otv_MathGlyphConstruction_validate( table + Offset, otvalid );
- }
-
- for ( i = 0; i < hcnt; i++ )
- {
- OTV_OPTIONAL_OFFSET( Offset );
- OTV_SIZE_CHECK( Offset );
- otv_MathGlyphConstruction_validate( table + Offset, otvalid );
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MATH TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets otvalid->glyph_count */
-
- FT_LOCAL_DEF( void )
- otv_MATH_validate( FT_Bytes table,
- FT_UInt glyph_count,
- FT_Validator ftvalid )
- {
- OTV_ValidatorRec otvalidrec;
- OTV_Validator otvalid = &otvalidrec;
- FT_Bytes p = table;
- FT_UInt MathConstants, MathGlyphInfo, MathVariants;
-
-
- otvalid->root = ftvalid;
-
- FT_TRACE3(( "validating MATH table\n" ));
- OTV_INIT;
-
- OTV_LIMIT_CHECK( 10 );
-
- if ( FT_NEXT_ULONG( p ) != 0x10000UL ) /* Version */
- FT_INVALID_FORMAT;
-
- MathConstants = FT_NEXT_USHORT( p );
- MathGlyphInfo = FT_NEXT_USHORT( p );
- MathVariants = FT_NEXT_USHORT( p );
-
- otvalid->glyph_count = glyph_count;
-
- otv_MathConstants_validate( table + MathConstants,
- otvalid );
- otv_MathGlyphInfo_validate( table + MathGlyphInfo,
- otvalid );
- otv_MathVariants_validate ( table + MathVariants,
- otvalid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/src/otvalid/otvmod.c b/src/otvalid/otvmod.c
deleted file mode 100644
index 35ffc43d3..000000000
--- a/src/otvalid/otvmod.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvmod.c */
-/* */
-/* FreeType's OpenType validation module implementation (body). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_TRUETYPE_TABLES_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_OPENTYPE_VALIDATE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_OPENTYPE_VALIDATE_H
-
-#include "otvmod.h"
-#include "otvalid.h"
-#include "otvcommn.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_otvmodule
-
-
- static FT_Error
- otv_load_table( FT_Face face,
- FT_Tag tag,
- FT_Byte* volatile* table,
- FT_ULong* table_len )
- {
- FT_Error error;
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- error = FT_Load_Sfnt_Table( face, tag, 0, NULL, table_len );
- if ( FT_ERR_EQ( error, Table_Missing ) )
- return FT_Err_Ok;
- if ( error )
- goto Exit;
-
- if ( FT_ALLOC( *table, *table_len ) )
- goto Exit;
-
- error = FT_Load_Sfnt_Table( face, tag, 0, *table, table_len );
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- otv_validate( FT_Face volatile face,
- FT_UInt ot_flags,
- FT_Bytes *ot_base,
- FT_Bytes *ot_gdef,
- FT_Bytes *ot_gpos,
- FT_Bytes *ot_gsub,
- FT_Bytes *ot_jstf )
- {
- FT_Error error = FT_Err_Ok;
- FT_Byte* volatile base;
- FT_Byte* volatile gdef;
- FT_Byte* volatile gpos;
- FT_Byte* volatile gsub;
- FT_Byte* volatile jstf;
- FT_Byte* volatile math;
- FT_ULong len_base, len_gdef, len_gpos, len_gsub, len_jstf;
- FT_ULong len_math;
- FT_UInt num_glyphs = (FT_UInt)face->num_glyphs;
- FT_ValidatorRec volatile valid;
-
-
- base = gdef = gpos = gsub = jstf = math = NULL;
- len_base = len_gdef = len_gpos = len_gsub = len_jstf = len_math = 0;
-
- /*
- * XXX: OpenType tables cannot handle 32-bit glyph index,
- * although broken TrueType can have 32-bit glyph index.
- */
- if ( face->num_glyphs > 0xFFFFL )
- {
- FT_TRACE1(( "otv_validate: Invalid glyphs index (0x0000FFFF - 0x%08x) ",
- face->num_glyphs ));
- FT_TRACE1(( "are not handled by OpenType tables\n" ));
- num_glyphs = 0xFFFF;
- }
-
- /* load tables */
-
- if ( ot_flags & FT_VALIDATE_BASE )
- {
- error = otv_load_table( face, TTAG_BASE, &base, &len_base );
- if ( error )
- goto Exit;
- }
-
- if ( ot_flags & FT_VALIDATE_GDEF )
- {
- error = otv_load_table( face, TTAG_GDEF, &gdef, &len_gdef );
- if ( error )
- goto Exit;
- }
-
- if ( ot_flags & FT_VALIDATE_GPOS )
- {
- error = otv_load_table( face, TTAG_GPOS, &gpos, &len_gpos );
- if ( error )
- goto Exit;
- }
-
- if ( ot_flags & FT_VALIDATE_GSUB )
- {
- error = otv_load_table( face, TTAG_GSUB, &gsub, &len_gsub );
- if ( error )
- goto Exit;
- }
-
- if ( ot_flags & FT_VALIDATE_JSTF )
- {
- error = otv_load_table( face, TTAG_JSTF, &jstf, &len_jstf );
- if ( error )
- goto Exit;
- }
-
- if ( ot_flags & FT_VALIDATE_MATH )
- {
- error = otv_load_table( face, TTAG_MATH, &math, &len_math );
- if ( error )
- goto Exit;
- }
-
- /* validate tables */
-
- if ( base )
- {
- ft_validator_init( &valid, base, base + len_base, FT_VALIDATE_DEFAULT );
- if ( ft_setjmp( valid.jump_buffer ) == 0 )
- otv_BASE_validate( base, &valid );
- error = valid.error;
- if ( error )
- goto Exit;
- }
-
- if ( gpos )
- {
- ft_validator_init( &valid, gpos, gpos + len_gpos, FT_VALIDATE_DEFAULT );
- if ( ft_setjmp( valid.jump_buffer ) == 0 )
- otv_GPOS_validate( gpos, num_glyphs, &valid );
- error = valid.error;
- if ( error )
- goto Exit;
- }
-
- if ( gsub )
- {
- ft_validator_init( &valid, gsub, gsub + len_gsub, FT_VALIDATE_DEFAULT );
- if ( ft_setjmp( valid.jump_buffer ) == 0 )
- otv_GSUB_validate( gsub, num_glyphs, &valid );
- error = valid.error;
- if ( error )
- goto Exit;
- }
-
- if ( gdef )
- {
- ft_validator_init( &valid, gdef, gdef + len_gdef, FT_VALIDATE_DEFAULT );
- if ( ft_setjmp( valid.jump_buffer ) == 0 )
- otv_GDEF_validate( gdef, gsub, gpos, num_glyphs, &valid );
- error = valid.error;
- if ( error )
- goto Exit;
- }
-
- if ( jstf )
- {
- ft_validator_init( &valid, jstf, jstf + len_jstf, FT_VALIDATE_DEFAULT );
- if ( ft_setjmp( valid.jump_buffer ) == 0 )
- otv_JSTF_validate( jstf, gsub, gpos, num_glyphs, &valid );
- error = valid.error;
- if ( error )
- goto Exit;
- }
-
- if ( math )
- {
- ft_validator_init( &valid, math, math + len_math, FT_VALIDATE_DEFAULT );
- if ( ft_setjmp( valid.jump_buffer ) == 0 )
- otv_MATH_validate( math, num_glyphs, &valid );
- error = valid.error;
- if ( error )
- goto Exit;
- }
-
- *ot_base = (FT_Bytes)base;
- *ot_gdef = (FT_Bytes)gdef;
- *ot_gpos = (FT_Bytes)gpos;
- *ot_gsub = (FT_Bytes)gsub;
- *ot_jstf = (FT_Bytes)jstf;
-
- Exit:
- if ( error )
- {
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- FT_FREE( base );
- FT_FREE( gdef );
- FT_FREE( gpos );
- FT_FREE( gsub );
- FT_FREE( jstf );
- }
-
- {
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- FT_FREE( math ); /* Can't return this as API is frozen */
- }
-
- return error;
- }
-
-
- static
- const FT_Service_OTvalidateRec otvalid_interface =
- {
- otv_validate /* validate */
- };
-
-
- static
- const FT_ServiceDescRec otvalid_services[] =
- {
- { FT_SERVICE_ID_OPENTYPE_VALIDATE, &otvalid_interface },
- { NULL, NULL }
- };
-
-
- static FT_Pointer
- otvalid_get_service( FT_Module module,
- const char* service_id )
- {
- FT_UNUSED( module );
-
- return ft_service_list_lookup( otvalid_services, service_id );
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Module_Class otv_module_class =
- {
- 0,
- sizeof ( FT_ModuleRec ),
- "otvalid",
- 0x10000L,
- 0x20000L,
-
- NULL, /* module-specific interface */
-
- (FT_Module_Constructor)NULL, /* module_init */
- (FT_Module_Destructor) NULL, /* module_done */
- (FT_Module_Requester) otvalid_get_service /* get_interface */
- };
-
-
-/* END */
diff --git a/src/otvalid/otvmod.h b/src/otvalid/otvmod.h
deleted file mode 100644
index 30d401ddc..000000000
--- a/src/otvalid/otvmod.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvmod.h */
-/* */
-/* FreeType's OpenType validation module implementation */
-/* (specification). */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef OTVMOD_H_
-#define OTVMOD_H_
-
-
-#include <ft2build.h>
-#include FT_MODULE_H
-
-
-FT_BEGIN_HEADER
-
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
-
- FT_EXPORT_VAR( const FT_Module_Class ) otv_module_class;
-
-
-FT_END_HEADER
-
-#endif /* OTVMOD_H_ */
-
-
-/* END */
diff --git a/src/otvalid/rules.mk b/src/otvalid/rules.mk
deleted file mode 100644
index 10329a96e..000000000
--- a/src/otvalid/rules.mk
+++ /dev/null
@@ -1,81 +0,0 @@
-#
-# FreeType 2 OpenType validation driver configuration rules
-#
-
-
-# Copyright 2004-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# OTV driver directory
-#
-OTV_DIR := $(SRC_DIR)/otvalid
-
-
-# compilation flags for the driver
-#
-OTV_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(OTV_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# OTV driver sources (i.e., C files)
-#
-OTV_DRV_SRC := $(OTV_DIR)/otvbase.c \
- $(OTV_DIR)/otvcommn.c \
- $(OTV_DIR)/otvgdef.c \
- $(OTV_DIR)/otvgpos.c \
- $(OTV_DIR)/otvgsub.c \
- $(OTV_DIR)/otvjstf.c \
- $(OTV_DIR)/otvmath.c \
- $(OTV_DIR)/otvmod.c
-
-# OTV driver headers
-#
-OTV_DRV_H := $(OTV_DIR)/otvalid.h \
- $(OTV_DIR)/otvcommn.h \
- $(OTV_DIR)/otverror.h \
- $(OTV_DIR)/otvgpos.h \
- $(OTV_DIR)/otvmod.h
-
-
-# OTV driver object(s)
-#
-# OTV_DRV_OBJ_M is used during `multi' builds.
-# OTV_DRV_OBJ_S is used during `single' builds.
-#
-OTV_DRV_OBJ_M := $(OTV_DRV_SRC:$(OTV_DIR)/%.c=$(OBJ_DIR)/%.$O)
-OTV_DRV_OBJ_S := $(OBJ_DIR)/otvalid.$O
-
-# OTV driver source file for single build
-#
-OTV_DRV_SRC_S := $(OTV_DIR)/otvalid.c
-
-
-# OTV driver - single object
-#
-$(OTV_DRV_OBJ_S): $(OTV_DRV_SRC_S) $(OTV_DRV_SRC) \
- $(FREETYPE_H) $(OTV_DRV_H)
- $(OTV_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(OTV_DRV_SRC_S))
-
-
-# OTV driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(OTV_DIR)/%.c $(FREETYPE_H) $(OTV_DRV_H)
- $(OTV_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(OTV_DRV_OBJ_S)
-DRV_OBJS_M += $(OTV_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/pcf/Jamfile b/src/pcf/Jamfile
deleted file mode 100644
index 794f27dfb..000000000
--- a/src/pcf/Jamfile
+++ /dev/null
@@ -1,32 +0,0 @@
-# FreeType 2 src/pcf Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) pcf ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = pcfdrivr
- pcfread
- pcfutil
- ;
- }
- else
- {
- _sources = pcf ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/pcf Jamfile
diff --git a/src/pcf/README b/src/pcf/README
deleted file mode 100644
index 10eff15fb..000000000
--- a/src/pcf/README
+++ /dev/null
@@ -1,96 +0,0 @@
- FreeType font driver for PCF fonts
-
- Francesco Zappa Nardelli
- <francesco.zappa.nardelli@ens.fr>
-
-
-Introduction
-************
-
-PCF (Portable Compiled Format) is a binary bitmap font format, largely used
-in X world. This code implements a PCF driver for the FreeType library.
-Glyph images are loaded into memory only on demand, thus leading to a small
-memory footprint.
-
-Information on the PCF font format can only be worked out from
-`pcfread.c', and `pcfwrite.c', to be found, for instance, in the XFree86
-(www.xfree86.org) source tree (xc/lib/font/bitmap/).
-
-Many good bitmap fonts in bdf format come with XFree86: they can be
-compiled into the pcf format using the `bdftopcf' utility.
-
-
-Supported hardware
-******************
-
-The driver has been tested on linux/x86 and sunos5.5/sparc. In both
-cases the compiler was gcc. When back in Paris, I will test it also
-on linux/alpha.
-
-
-Encodings
-*********
-
-Use `FT_Get_BDF_Charset_ID' to access the encoding and registry.
-
-The driver always exports `ft_encoding_none' as face->charmap.encoding.
-FT_Get_Char_Index() behavior is unmodified, that is, it converts the ULong
-value given as argument into the corresponding glyph number.
-
-
-Known problems
-**************
-
-- dealing explicitly with encodings breaks the uniformity of freetype2
- api.
-
-- except for encodings properties, client applications have no
- visibility of the PCF_Face object. This means that applications
- cannot directly access font tables and are obliged to trust
- FreeType.
-
-- currently, glyph names and ink_metrics are ignored.
-
-I plan to give full visibility of the PCF_Face object in the next
-release of the driver, thus implementing also glyph names and
-ink_metrics.
-
-- height is defined as (ascent - descent). Is this correct?
-
-- if unable to read size information from the font, PCF_Init_Face
- sets available_size->width and available_size->height to 12.
-
-- too many english grammar errors in the readme file :-(
-
-
-License
-*******
-
-Copyright (C) 2000 by Francesco Zappa Nardelli
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
-Credits
-*******
-
-Keith Packard wrote the pcf driver found in XFree86. His work is at
-the same time the specification and the sample implementation of the
-PCF format. Undoubtedly, this driver is inspired from his work.
diff --git a/src/pcf/module.mk b/src/pcf/module.mk
deleted file mode 100644
index df383ff0f..000000000
--- a/src/pcf/module.mk
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# FreeType 2 PCF module definition
-#
-
-# Copyright 2000, 2006 by
-# Francesco Zappa Nardelli
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-
-FTMODULE_H_COMMANDS += PCF_DRIVER
-
-define PCF_DRIVER
-$(OPEN_DRIVER) FT_Driver_ClassRec, pcf_driver_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)pcf $(ECHO_DRIVER_DESC)pcf bitmap fonts$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/pcf/pcf.c b/src/pcf/pcf.c
deleted file mode 100644
index 8ffd6e280..000000000
--- a/src/pcf/pcf.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* pcf.c
-
- FreeType font driver for pcf fonts
-
- Copyright 2000-2001, 2003 by
- Francesco Zappa Nardelli
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "pcfdrivr.c"
-#include "pcfread.c"
-#include "pcfutil.c"
-
-
-/* END */
diff --git a/src/pcf/pcf.h b/src/pcf/pcf.h
deleted file mode 100644
index f0390cb1e..000000000
--- a/src/pcf/pcf.h
+++ /dev/null
@@ -1,247 +0,0 @@
-/* pcf.h
-
- FreeType font driver for pcf fonts
-
- Copyright (C) 2000, 2001, 2002, 2003, 2006, 2010 by
- Francesco Zappa Nardelli
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-
-#ifndef PCF_H_
-#define PCF_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-#include FT_INTERNAL_STREAM_H
-
-
-FT_BEGIN_HEADER
-
- typedef struct PCF_TableRec_
- {
- FT_ULong type;
- FT_ULong format;
- FT_ULong size;
- FT_ULong offset;
-
- } PCF_TableRec, *PCF_Table;
-
-
- typedef struct PCF_TocRec_
- {
- FT_ULong version;
- FT_ULong count;
- PCF_Table tables;
-
- } PCF_TocRec, *PCF_Toc;
-
-
- typedef struct PCF_ParsePropertyRec_
- {
- FT_Long name;
- FT_Byte isString;
- FT_Long value;
-
- } PCF_ParsePropertyRec, *PCF_ParseProperty;
-
-
- typedef struct PCF_PropertyRec_
- {
- FT_String* name;
- FT_Byte isString;
-
- union
- {
- FT_String* atom;
- FT_Long l;
- FT_ULong ul;
-
- } value;
-
- } PCF_PropertyRec, *PCF_Property;
-
-
- typedef struct PCF_Compressed_MetricRec_
- {
- FT_Byte leftSideBearing;
- FT_Byte rightSideBearing;
- FT_Byte characterWidth;
- FT_Byte ascent;
- FT_Byte descent;
-
- } PCF_Compressed_MetricRec, *PCF_Compressed_Metric;
-
-
- typedef struct PCF_MetricRec_
- {
- FT_Short leftSideBearing;
- FT_Short rightSideBearing;
- FT_Short characterWidth;
- FT_Short ascent;
- FT_Short descent;
- FT_Short attributes;
- FT_ULong bits;
-
- } PCF_MetricRec, *PCF_Metric;
-
-
- typedef struct PCF_AccelRec_
- {
- FT_Byte noOverlap;
- FT_Byte constantMetrics;
- FT_Byte terminalFont;
- FT_Byte constantWidth;
- FT_Byte inkInside;
- FT_Byte inkMetrics;
- FT_Byte drawDirection;
- FT_Long fontAscent;
- FT_Long fontDescent;
- FT_Long maxOverlap;
- PCF_MetricRec minbounds;
- PCF_MetricRec maxbounds;
- PCF_MetricRec ink_minbounds;
- PCF_MetricRec ink_maxbounds;
-
- } PCF_AccelRec, *PCF_Accel;
-
-
- typedef struct PCF_EncodingRec_
- {
- FT_Long enc;
- FT_UShort glyph;
-
- } PCF_EncodingRec, *PCF_Encoding;
-
-
- typedef struct PCF_FaceRec_
- {
- FT_FaceRec root;
-
- FT_StreamRec comp_stream;
- FT_Stream comp_source;
-
- char* charset_encoding;
- char* charset_registry;
-
- PCF_TocRec toc;
- PCF_AccelRec accel;
-
- int nprops;
- PCF_Property properties;
-
- FT_ULong nmetrics;
- PCF_Metric metrics;
- FT_ULong nencodings;
- PCF_Encoding encodings;
-
- FT_Short defaultChar;
-
- FT_ULong bitmapsFormat;
-
- FT_CharMap charmap_handle;
- FT_CharMapRec charmap; /* a single charmap per face */
-
- } PCF_FaceRec, *PCF_Face;
-
-
- typedef struct PCF_DriverRec_
- {
- FT_DriverRec root;
-
- FT_Bool no_long_family_names;
-
- } PCF_DriverRec, *PCF_Driver;
-
-
- /* macros for pcf font format */
-
-#define LSBFirst 0
-#define MSBFirst 1
-
-#define PCF_FILE_VERSION ( ( 'p' << 24 ) | \
- ( 'c' << 16 ) | \
- ( 'f' << 8 ) | 1 )
-#define PCF_FORMAT_MASK 0xFFFFFF00UL
-
-#define PCF_DEFAULT_FORMAT 0x00000000UL
-#define PCF_INKBOUNDS 0x00000200UL
-#define PCF_ACCEL_W_INKBOUNDS 0x00000100UL
-#define PCF_COMPRESSED_METRICS 0x00000100UL
-
-#define PCF_FORMAT_MATCH( a, b ) \
- ( ( (a) & PCF_FORMAT_MASK ) == ( (b) & PCF_FORMAT_MASK ) )
-
-#define PCF_GLYPH_PAD_MASK ( 3 << 0 )
-#define PCF_BYTE_MASK ( 1 << 2 )
-#define PCF_BIT_MASK ( 1 << 3 )
-#define PCF_SCAN_UNIT_MASK ( 3 << 4 )
-
-#define PCF_BYTE_ORDER( f ) \
- ( ( (f) & PCF_BYTE_MASK ) ? MSBFirst : LSBFirst )
-#define PCF_BIT_ORDER( f ) \
- ( ( (f) & PCF_BIT_MASK ) ? MSBFirst : LSBFirst )
-#define PCF_GLYPH_PAD_INDEX( f ) \
- ( (f) & PCF_GLYPH_PAD_MASK )
-#define PCF_GLYPH_PAD( f ) \
- ( 1 << PCF_GLYPH_PAD_INDEX( f ) )
-#define PCF_SCAN_UNIT_INDEX( f ) \
- ( ( (f) & PCF_SCAN_UNIT_MASK ) >> 4 )
-#define PCF_SCAN_UNIT( f ) \
- ( 1 << PCF_SCAN_UNIT_INDEX( f ) )
-#define PCF_FORMAT_BITS( f ) \
- ( (f) & ( PCF_GLYPH_PAD_MASK | \
- PCF_BYTE_MASK | \
- PCF_BIT_MASK | \
- PCF_SCAN_UNIT_MASK ) )
-
-#define PCF_SIZE_TO_INDEX( s ) ( (s) == 4 ? 2 : (s) == 2 ? 1 : 0 )
-#define PCF_INDEX_TO_SIZE( b ) ( 1 << b )
-
-#define PCF_FORMAT( bit, byte, glyph, scan ) \
- ( ( PCF_SIZE_TO_INDEX( scan ) << 4 ) | \
- ( ( (bit) == MSBFirst ? 1 : 0 ) << 3 ) | \
- ( ( (byte) == MSBFirst ? 1 : 0 ) << 2 ) | \
- ( PCF_SIZE_TO_INDEX( glyph ) << 0 ) )
-
-#define PCF_PROPERTIES ( 1 << 0 )
-#define PCF_ACCELERATORS ( 1 << 1 )
-#define PCF_METRICS ( 1 << 2 )
-#define PCF_BITMAPS ( 1 << 3 )
-#define PCF_INK_METRICS ( 1 << 4 )
-#define PCF_BDF_ENCODINGS ( 1 << 5 )
-#define PCF_SWIDTHS ( 1 << 6 )
-#define PCF_GLYPH_NAMES ( 1 << 7 )
-#define PCF_BDF_ACCELERATORS ( 1 << 8 )
-
-#define GLYPHPADOPTIONS 4 /* I'm not sure about this */
-
- FT_LOCAL( FT_Error )
- pcf_load_font( FT_Stream stream,
- PCF_Face face,
- FT_Long face_index );
-
-FT_END_HEADER
-
-#endif /* PCF_H_ */
-
-
-/* END */
diff --git a/src/pcf/pcfdrivr.c b/src/pcf/pcfdrivr.c
deleted file mode 100644
index 169f75e95..000000000
--- a/src/pcf/pcfdrivr.c
+++ /dev/null
@@ -1,869 +0,0 @@
-/* pcfdrivr.c
-
- FreeType font driver for pcf files
-
- Copyright (C) 2000-2004, 2006-2011, 2013, 2014 by
- Francesco Zappa Nardelli
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-
-#include <ft2build.h>
-
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_GZIP_H
-#include FT_LZW_H
-#include FT_BZIP2_H
-#include FT_ERRORS_H
-#include FT_BDF_H
-#include FT_TRUETYPE_IDS_H
-
-#include "pcf.h"
-#include "pcfdrivr.h"
-#include "pcfread.h"
-
-#include "pcferror.h"
-#include "pcfutil.h"
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_pcfread
-
-#include FT_SERVICE_BDF_H
-#include FT_SERVICE_FONT_FORMAT_H
-#include FT_SERVICE_PROPERTIES_H
-#include FT_PCF_DRIVER_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_pcfdriver
-
-
- typedef struct PCF_CMapRec_
- {
- FT_CMapRec root;
- FT_ULong num_encodings;
- PCF_Encoding encodings;
-
- } PCF_CMapRec, *PCF_CMap;
-
-
- FT_CALLBACK_DEF( FT_Error )
- pcf_cmap_init( FT_CMap pcfcmap, /* PCF_CMap */
- FT_Pointer init_data )
- {
- PCF_CMap cmap = (PCF_CMap)pcfcmap;
- PCF_Face face = (PCF_Face)FT_CMAP_FACE( pcfcmap );
-
- FT_UNUSED( init_data );
-
-
- cmap->num_encodings = face->nencodings;
- cmap->encodings = face->encodings;
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( void )
- pcf_cmap_done( FT_CMap pcfcmap ) /* PCF_CMap */
- {
- PCF_CMap cmap = (PCF_CMap)pcfcmap;
-
-
- cmap->encodings = NULL;
- cmap->num_encodings = 0;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- pcf_cmap_char_index( FT_CMap pcfcmap, /* PCF_CMap */
- FT_UInt32 charcode )
- {
- PCF_CMap cmap = (PCF_CMap)pcfcmap;
- PCF_Encoding encodings = cmap->encodings;
- FT_ULong min, max, mid;
- FT_UInt result = 0;
-
-
- min = 0;
- max = cmap->num_encodings;
-
- while ( min < max )
- {
- FT_ULong code;
-
-
- mid = ( min + max ) >> 1;
- code = (FT_ULong)encodings[mid].enc;
-
- if ( charcode == code )
- {
- result = encodings[mid].glyph + 1;
- break;
- }
-
- if ( charcode < code )
- max = mid;
- else
- min = mid + 1;
- }
-
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- pcf_cmap_char_next( FT_CMap pcfcmap, /* PCF_CMap */
- FT_UInt32 *acharcode )
- {
- PCF_CMap cmap = (PCF_CMap)pcfcmap;
- PCF_Encoding encodings = cmap->encodings;
- FT_ULong min, max, mid;
- FT_ULong charcode = *acharcode + 1;
- FT_UInt result = 0;
-
-
- min = 0;
- max = cmap->num_encodings;
-
- while ( min < max )
- {
- FT_ULong code;
-
-
- mid = ( min + max ) >> 1;
- code = (FT_ULong)encodings[mid].enc;
-
- if ( charcode == code )
- {
- result = encodings[mid].glyph + 1;
- goto Exit;
- }
-
- if ( charcode < code )
- max = mid;
- else
- min = mid + 1;
- }
-
- charcode = 0;
- if ( min < cmap->num_encodings )
- {
- charcode = (FT_ULong)encodings[min].enc;
- result = encodings[min].glyph + 1;
- }
-
- Exit:
- if ( charcode > 0xFFFFFFFFUL )
- {
- FT_TRACE1(( "pcf_cmap_char_next: charcode 0x%x > 32bit API" ));
- *acharcode = 0;
- /* XXX: result should be changed to indicate an overflow error */
- }
- else
- *acharcode = (FT_UInt32)charcode;
- return result;
- }
-
-
- static
- const FT_CMap_ClassRec pcf_cmap_class =
- {
- sizeof ( PCF_CMapRec ),
- pcf_cmap_init,
- pcf_cmap_done,
- pcf_cmap_char_index,
- pcf_cmap_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- };
-
-
- FT_CALLBACK_DEF( void )
- PCF_Face_Done( FT_Face pcfface ) /* PCF_Face */
- {
- PCF_Face face = (PCF_Face)pcfface;
- FT_Memory memory;
-
-
- if ( !face )
- return;
-
- memory = FT_FACE_MEMORY( face );
-
- FT_FREE( face->encodings );
- FT_FREE( face->metrics );
-
- /* free properties */
- if ( face->properties )
- {
- FT_Int i;
-
-
- for ( i = 0; i < face->nprops; i++ )
- {
- PCF_Property prop = &face->properties[i];
-
-
- if ( prop )
- {
- FT_FREE( prop->name );
- if ( prop->isString )
- FT_FREE( prop->value.atom );
- }
- }
-
- FT_FREE( face->properties );
- }
-
- FT_FREE( face->toc.tables );
- FT_FREE( pcfface->family_name );
- FT_FREE( pcfface->style_name );
- FT_FREE( pcfface->available_sizes );
- FT_FREE( face->charset_encoding );
- FT_FREE( face->charset_registry );
-
- /* close compressed stream if any */
- if ( pcfface->stream == &face->comp_stream )
- {
- FT_Stream_Close( &face->comp_stream );
- pcfface->stream = face->comp_source;
- }
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- PCF_Face_Init( FT_Stream stream,
- FT_Face pcfface, /* PCF_Face */
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- PCF_Face face = (PCF_Face)pcfface;
- FT_Error error;
-
- FT_UNUSED( num_params );
- FT_UNUSED( params );
-
-
- FT_TRACE2(( "PCF driver\n" ));
-
- error = pcf_load_font( stream, face, face_index );
- if ( error )
- {
- PCF_Face_Done( pcfface );
-
-#if defined( FT_CONFIG_OPTION_USE_ZLIB ) || \
- defined( FT_CONFIG_OPTION_USE_LZW ) || \
- defined( FT_CONFIG_OPTION_USE_BZIP2 )
-
-#ifdef FT_CONFIG_OPTION_USE_ZLIB
- {
- FT_Error error2;
-
-
- /* this didn't work, try gzip support! */
- FT_TRACE2(( " ... try gzip stream\n" ));
- error2 = FT_Stream_OpenGzip( &face->comp_stream, stream );
- if ( FT_ERR_EQ( error2, Unimplemented_Feature ) )
- goto Fail;
-
- error = error2;
- }
-#endif /* FT_CONFIG_OPTION_USE_ZLIB */
-
-#ifdef FT_CONFIG_OPTION_USE_LZW
- if ( error )
- {
- FT_Error error3;
-
-
- /* this didn't work, try LZW support! */
- FT_TRACE2(( " ... try LZW stream\n" ));
- error3 = FT_Stream_OpenLZW( &face->comp_stream, stream );
- if ( FT_ERR_EQ( error3, Unimplemented_Feature ) )
- goto Fail;
-
- error = error3;
- }
-#endif /* FT_CONFIG_OPTION_USE_LZW */
-
-#ifdef FT_CONFIG_OPTION_USE_BZIP2
- if ( error )
- {
- FT_Error error4;
-
-
- /* this didn't work, try Bzip2 support! */
- FT_TRACE2(( " ... try Bzip2 stream\n" ));
- error4 = FT_Stream_OpenBzip2( &face->comp_stream, stream );
- if ( FT_ERR_EQ( error4, Unimplemented_Feature ) )
- goto Fail;
-
- error = error4;
- }
-#endif /* FT_CONFIG_OPTION_USE_BZIP2 */
-
- if ( error )
- goto Fail;
-
- face->comp_source = stream;
- pcfface->stream = &face->comp_stream;
-
- stream = pcfface->stream;
-
- error = pcf_load_font( stream, face, face_index );
- if ( error )
- goto Fail;
-
-#else /* !(FT_CONFIG_OPTION_USE_ZLIB ||
- FT_CONFIG_OPTION_USE_LZW ||
- FT_CONFIG_OPTION_USE_BZIP2) */
-
- goto Fail;
-
-#endif
- }
-
- /* PCF cannot have multiple faces in a single font file.
- * XXX: A non-zero face_index is already an invalid argument, but
- * Type1, Type42 drivers have a convention to return
- * an invalid argument error when the font could be
- * opened by the specified driver.
- */
- if ( face_index < 0 )
- goto Exit;
- else if ( face_index > 0 && ( face_index & 0xFFFF ) > 0 )
- {
- FT_ERROR(( "PCF_Face_Init: invalid face index\n" ));
- PCF_Face_Done( pcfface );
- return FT_THROW( Invalid_Argument );
- }
-
- /* set up charmap */
- {
- FT_String *charset_registry = face->charset_registry;
- FT_String *charset_encoding = face->charset_encoding;
- FT_Bool unicode_charmap = 0;
-
-
- if ( charset_registry && charset_encoding )
- {
- char* s = charset_registry;
-
-
- /* Uh, oh, compare first letters manually to avoid dependency
- on locales. */
- if ( ( s[0] == 'i' || s[0] == 'I' ) &&
- ( s[1] == 's' || s[1] == 'S' ) &&
- ( s[2] == 'o' || s[2] == 'O' ) )
- {
- s += 3;
- if ( !ft_strcmp( s, "10646" ) ||
- ( !ft_strcmp( s, "8859" ) &&
- !ft_strcmp( face->charset_encoding, "1" ) ) )
- unicode_charmap = 1;
- /* another name for ASCII */
- else if ( !ft_strcmp( s, "646.1991" ) &&
- !ft_strcmp( face->charset_encoding, "IRV" ) )
- unicode_charmap = 1;
- }
- }
-
- {
- FT_CharMapRec charmap;
-
-
- charmap.face = FT_FACE( face );
- charmap.encoding = FT_ENCODING_NONE;
- /* initial platform/encoding should indicate unset status? */
- charmap.platform_id = TT_PLATFORM_APPLE_UNICODE;
- charmap.encoding_id = TT_APPLE_ID_DEFAULT;
-
- if ( unicode_charmap )
- {
- charmap.encoding = FT_ENCODING_UNICODE;
- charmap.platform_id = TT_PLATFORM_MICROSOFT;
- charmap.encoding_id = TT_MS_ID_UNICODE_CS;
- }
-
- error = FT_CMap_New( &pcf_cmap_class, NULL, &charmap, NULL );
- }
- }
-
- Exit:
- return error;
-
- Fail:
- FT_TRACE2(( " not a PCF file\n" ));
- PCF_Face_Done( pcfface );
- error = FT_THROW( Unknown_File_Format ); /* error */
- goto Exit;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- PCF_Size_Select( FT_Size size,
- FT_ULong strike_index )
- {
- PCF_Accel accel = &( (PCF_Face)size->face )->accel;
-
-
- FT_Select_Metrics( size->face, strike_index );
-
- size->metrics.ascender = accel->fontAscent * 64;
- size->metrics.descender = -accel->fontDescent * 64;
- size->metrics.max_advance = accel->maxbounds.characterWidth * 64;
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- PCF_Size_Request( FT_Size size,
- FT_Size_Request req )
- {
- PCF_Face face = (PCF_Face)size->face;
- FT_Bitmap_Size* bsize = size->face->available_sizes;
- FT_Error error = FT_ERR( Invalid_Pixel_Size );
- FT_Long height;
-
-
- height = FT_REQUEST_HEIGHT( req );
- height = ( height + 32 ) >> 6;
-
- switch ( req->type )
- {
- case FT_SIZE_REQUEST_TYPE_NOMINAL:
- if ( height == ( ( bsize->y_ppem + 32 ) >> 6 ) )
- error = FT_Err_Ok;
- break;
-
- case FT_SIZE_REQUEST_TYPE_REAL_DIM:
- if ( height == ( face->accel.fontAscent +
- face->accel.fontDescent ) )
- error = FT_Err_Ok;
- break;
-
- default:
- error = FT_THROW( Unimplemented_Feature );
- break;
- }
-
- if ( error )
- return error;
- else
- return PCF_Size_Select( size, 0 );
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- PCF_Glyph_Load( FT_GlyphSlot slot,
- FT_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- PCF_Face face = (PCF_Face)FT_SIZE_FACE( size );
- FT_Stream stream;
- FT_Error error = FT_Err_Ok;
- FT_Bitmap* bitmap = &slot->bitmap;
- PCF_Metric metric;
- FT_ULong bytes;
-
-
- FT_TRACE1(( "PCF_Glyph_Load: glyph index %d\n", glyph_index ));
-
- if ( !face )
- {
- error = FT_THROW( Invalid_Face_Handle );
- goto Exit;
- }
-
- if ( glyph_index >= (FT_UInt)face->root.num_glyphs )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- stream = face->root.stream;
-
- if ( glyph_index > 0 )
- glyph_index--;
-
- metric = face->metrics + glyph_index;
-
- bitmap->rows = (unsigned int)( metric->ascent +
- metric->descent );
- bitmap->width = (unsigned int)( metric->rightSideBearing -
- metric->leftSideBearing );
- bitmap->num_grays = 1;
- bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
-
- switch ( PCF_GLYPH_PAD( face->bitmapsFormat ) )
- {
- case 1:
- bitmap->pitch = (int)( ( bitmap->width + 7 ) >> 3 );
- break;
-
- case 2:
- bitmap->pitch = (int)( ( ( bitmap->width + 15 ) >> 4 ) << 1 );
- break;
-
- case 4:
- bitmap->pitch = (int)( ( ( bitmap->width + 31 ) >> 5 ) << 2 );
- break;
-
- case 8:
- bitmap->pitch = (int)( ( ( bitmap->width + 63 ) >> 6 ) << 3 );
- break;
-
- default:
- return FT_THROW( Invalid_File_Format );
- }
-
- slot->format = FT_GLYPH_FORMAT_BITMAP;
- slot->bitmap_left = metric->leftSideBearing;
- slot->bitmap_top = metric->ascent;
-
- slot->metrics.horiAdvance = (FT_Pos)( metric->characterWidth * 64 );
- slot->metrics.horiBearingX = (FT_Pos)( metric->leftSideBearing * 64 );
- slot->metrics.horiBearingY = (FT_Pos)( metric->ascent * 64 );
- slot->metrics.width = (FT_Pos)( ( metric->rightSideBearing -
- metric->leftSideBearing ) * 64 );
- slot->metrics.height = (FT_Pos)( bitmap->rows * 64 );
-
- ft_synthesize_vertical_metrics( &slot->metrics,
- ( face->accel.fontAscent +
- face->accel.fontDescent ) * 64 );
-
- if ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY )
- goto Exit;
-
- /* XXX: to do: are there cases that need repadding the bitmap? */
- bytes = (FT_ULong)bitmap->pitch * bitmap->rows;
-
- error = ft_glyphslot_alloc_bitmap( slot, (FT_ULong)bytes );
- if ( error )
- goto Exit;
-
- if ( FT_STREAM_SEEK( metric->bits ) ||
- FT_STREAM_READ( bitmap->buffer, bytes ) )
- goto Exit;
-
- if ( PCF_BIT_ORDER( face->bitmapsFormat ) != MSBFirst )
- BitOrderInvert( bitmap->buffer, bytes );
-
- if ( ( PCF_BYTE_ORDER( face->bitmapsFormat ) !=
- PCF_BIT_ORDER( face->bitmapsFormat ) ) )
- {
- switch ( PCF_SCAN_UNIT( face->bitmapsFormat ) )
- {
- case 1:
- break;
-
- case 2:
- TwoByteSwap( bitmap->buffer, bytes );
- break;
-
- case 4:
- FourByteSwap( bitmap->buffer, bytes );
- break;
- }
- }
-
- Exit:
- return error;
- }
-
-
- /*
- *
- * BDF SERVICE
- *
- */
-
- static FT_Error
- pcf_get_bdf_property( PCF_Face face,
- const char* prop_name,
- BDF_PropertyRec *aproperty )
- {
- PCF_Property prop;
-
-
- prop = pcf_find_property( face, prop_name );
- if ( prop )
- {
- if ( prop->isString )
- {
- aproperty->type = BDF_PROPERTY_TYPE_ATOM;
- aproperty->u.atom = prop->value.atom;
- }
- else
- {
- if ( prop->value.l > 0x7FFFFFFFL ||
- prop->value.l < ( -1 - 0x7FFFFFFFL ) )
- {
- FT_TRACE1(( "pcf_get_bdf_property:" ));
- FT_TRACE1(( " too large integer 0x%x is truncated\n" ));
- }
-
- /*
- * The PCF driver loads all properties as signed integers.
- * This really doesn't seem to be a problem, because this is
- * sufficient for any meaningful values.
- */
- aproperty->type = BDF_PROPERTY_TYPE_INTEGER;
- aproperty->u.integer = (FT_Int32)prop->value.l;
- }
-
- return FT_Err_Ok;
- }
-
- return FT_THROW( Invalid_Argument );
- }
-
-
- static FT_Error
- pcf_get_charset_id( PCF_Face face,
- const char* *acharset_encoding,
- const char* *acharset_registry )
- {
- *acharset_encoding = face->charset_encoding;
- *acharset_registry = face->charset_registry;
-
- return FT_Err_Ok;
- }
-
-
- static const FT_Service_BDFRec pcf_service_bdf =
- {
- (FT_BDF_GetCharsetIdFunc)pcf_get_charset_id, /* get_charset_id */
- (FT_BDF_GetPropertyFunc) pcf_get_bdf_property /* get_property */
- };
-
-
- /*
- * PROPERTY SERVICE
- *
- */
- static FT_Error
- pcf_property_set( FT_Module module, /* PCF_Driver */
- const char* property_name,
- const void* value,
- FT_Bool value_is_string )
- {
-#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
-
- FT_Error error = FT_Err_Ok;
- PCF_Driver driver = (PCF_Driver)module;
-
-#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- FT_UNUSED( value_is_string );
-#endif
-
-
- if ( !ft_strcmp( property_name, "no-long-family-names" ) )
- {
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- if ( value_is_string )
- {
- const char* s = (const char*)value;
- long lfn = ft_strtol( s, NULL, 10 );
-
-
- if ( lfn == 0 )
- driver->no_long_family_names = 0;
- else if ( lfn == 1 )
- driver->no_long_family_names = 1;
- else
- return FT_THROW( Invalid_Argument );
- }
- else
-#endif
- {
- FT_Bool* no_long_family_names = (FT_Bool*)value;
-
-
- driver->no_long_family_names = *no_long_family_names;
- }
-
- return error;
- }
-
-#else /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
-
- FT_UNUSED( module );
- FT_UNUSED( value );
- FT_UNUSED( value_is_string );
-#ifndef FT_DEBUG_LEVEL_TRACE
- FT_UNUSED( property_name );
-#endif
-
-#endif /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
-
- FT_TRACE0(( "pcf_property_set: missing property `%s'\n",
- property_name ));
- return FT_THROW( Missing_Property );
- }
-
-
- static FT_Error
- pcf_property_get( FT_Module module, /* PCF_Driver */
- const char* property_name,
- const void* value )
- {
-#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
-
- FT_Error error = FT_Err_Ok;
- PCF_Driver driver = (PCF_Driver)module;
-
-
- if ( !ft_strcmp( property_name, "no-long-family-names" ) )
- {
- FT_Bool no_long_family_names = driver->no_long_family_names;
- FT_Bool* val = (FT_Bool*)value;
-
-
- *val = no_long_family_names;
-
- return error;
- }
-
-#else /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
-
- FT_UNUSED( module );
- FT_UNUSED( value );
-#ifndef FT_DEBUG_LEVEL_TRACE
- FT_UNUSED( property_name );
-#endif
-
-#endif /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
-
- FT_TRACE0(( "pcf_property_get: missing property `%s'\n",
- property_name ));
- return FT_THROW( Missing_Property );
- }
-
-
- FT_DEFINE_SERVICE_PROPERTIESREC(
- pcf_service_properties,
-
- (FT_Properties_SetFunc)pcf_property_set, /* set_property */
- (FT_Properties_GetFunc)pcf_property_get ) /* get_property */
-
-
- /*
- *
- * SERVICE LIST
- *
- */
-
- static const FT_ServiceDescRec pcf_services[] =
- {
- { FT_SERVICE_ID_BDF, &pcf_service_bdf },
- { FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_PCF },
- { FT_SERVICE_ID_PROPERTIES, &pcf_service_properties },
- { NULL, NULL }
- };
-
-
- FT_CALLBACK_DEF( FT_Module_Interface )
- pcf_driver_requester( FT_Module module,
- const char* name )
- {
- FT_UNUSED( module );
-
- return ft_service_list_lookup( pcf_services, name );
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- pcf_driver_init( FT_Module module ) /* PCF_Driver */
- {
-#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
- PCF_Driver driver = (PCF_Driver)module;
-
-
- driver->no_long_family_names = 0;
-#else
- FT_UNUSED( module );
-#endif
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( void )
- pcf_driver_done( FT_Module module ) /* PCF_Driver */
- {
- FT_UNUSED( module );
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Driver_ClassRec pcf_driver_class =
- {
- {
- FT_MODULE_FONT_DRIVER |
- FT_MODULE_DRIVER_NO_OUTLINES,
-
- sizeof ( PCF_DriverRec ),
- "pcf",
- 0x10000L,
- 0x20000L,
-
- NULL, /* module-specific interface */
-
- pcf_driver_init, /* FT_Module_Constructor module_init */
- pcf_driver_done, /* FT_Module_Destructor module_done */
- pcf_driver_requester /* FT_Module_Requester get_interface */
- },
-
- sizeof ( PCF_FaceRec ),
- sizeof ( FT_SizeRec ),
- sizeof ( FT_GlyphSlotRec ),
-
- PCF_Face_Init, /* FT_Face_InitFunc init_face */
- PCF_Face_Done, /* FT_Face_DoneFunc done_face */
- NULL, /* FT_Size_InitFunc init_size */
- NULL, /* FT_Size_DoneFunc done_size */
- NULL, /* FT_Slot_InitFunc init_slot */
- NULL, /* FT_Slot_DoneFunc done_slot */
-
- PCF_Glyph_Load, /* FT_Slot_LoadFunc load_glyph */
-
- NULL, /* FT_Face_GetKerningFunc get_kerning */
- NULL, /* FT_Face_AttachFunc attach_file */
- NULL, /* FT_Face_GetAdvancesFunc get_advances */
-
- PCF_Size_Request, /* FT_Size_RequestFunc request_size */
- PCF_Size_Select /* FT_Size_SelectFunc select_size */
- };
-
-
-/* END */
diff --git a/src/pcf/pcfdrivr.h b/src/pcf/pcfdrivr.h
deleted file mode 100644
index 29d30497c..000000000
--- a/src/pcf/pcfdrivr.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* pcfdrivr.h
-
- FreeType font driver for pcf fonts
-
- Copyright 2000-2001, 2002 by
- Francesco Zappa Nardelli
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-
-#ifndef PCFDRIVR_H_
-#define PCFDRIVR_H_
-
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-
-FT_BEGIN_HEADER
-
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
- FT_EXPORT_VAR( const FT_Driver_ClassRec ) pcf_driver_class;
-
-FT_END_HEADER
-
-
-#endif /* PCFDRIVR_H_ */
-
-
-/* END */
diff --git a/src/pcf/pcferror.h b/src/pcf/pcferror.h
deleted file mode 100644
index add8ef223..000000000
--- a/src/pcf/pcferror.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* pcferror.h */
-/* */
-/* PCF error codes (specification only). */
-/* */
-/* Copyright 2001, 2012 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the PCF error enumeration constants. */
- /* */
- /*************************************************************************/
-
-#ifndef PCFERROR_H_
-#define PCFERROR_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX PCF_Err_
-#define FT_ERR_BASE FT_Mod_Err_PCF
-
-#include FT_ERRORS_H
-
-#endif /* PCFERROR_H_ */
-
-
-/* END */
diff --git a/src/pcf/pcfread.c b/src/pcf/pcfread.c
deleted file mode 100644
index da216b05f..000000000
--- a/src/pcf/pcfread.c
+++ /dev/null
@@ -1,1663 +0,0 @@
-/* pcfread.c
-
- FreeType font driver for pcf fonts
-
- Copyright 2000-2010, 2012-2014 by
- Francesco Zappa Nardelli
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-
-#include <ft2build.h>
-
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_OBJECTS_H
-
-#include "pcf.h"
-#include "pcfread.h"
-
-#include "pcferror.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_pcfread
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- static const char* const tableNames[] =
- {
- "properties",
- "accelerators",
- "metrics",
- "bitmaps",
- "ink metrics",
- "encodings",
- "swidths",
- "glyph names",
- "BDF accelerators"
- };
-#endif
-
-
- static
- const FT_Frame_Field pcf_toc_header[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PCF_TocRec
-
- FT_FRAME_START( 8 ),
- FT_FRAME_ULONG_LE( version ),
- FT_FRAME_ULONG_LE( count ),
- FT_FRAME_END
- };
-
-
- static
- const FT_Frame_Field pcf_table_header[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PCF_TableRec
-
- FT_FRAME_START( 16 ),
- FT_FRAME_ULONG_LE( type ),
- FT_FRAME_ULONG_LE( format ),
- FT_FRAME_ULONG_LE( size ), /* rounded up to a multiple of 4 */
- FT_FRAME_ULONG_LE( offset ),
- FT_FRAME_END
- };
-
-
- static FT_Error
- pcf_read_TOC( FT_Stream stream,
- PCF_Face face )
- {
- FT_Error error;
- PCF_Toc toc = &face->toc;
- PCF_Table tables;
-
- FT_Memory memory = FT_FACE( face )->memory;
- FT_UInt n;
-
- FT_ULong size;
-
-
- if ( FT_STREAM_SEEK( 0 ) ||
- FT_STREAM_READ_FIELDS( pcf_toc_header, toc ) )
- return FT_THROW( Cannot_Open_Resource );
-
- if ( toc->version != PCF_FILE_VERSION ||
- toc->count == 0 )
- return FT_THROW( Invalid_File_Format );
-
- if ( stream->size < 16 )
- return FT_THROW( Invalid_File_Format );
-
- /* we need 16 bytes per TOC entry, */
- /* and there can be most 9 tables */
- if ( toc->count > ( stream->size >> 4 ) ||
- toc->count > 9 )
- {
- FT_TRACE0(( "pcf_read_TOC: adjusting number of tables"
- " (from %d to %d)\n",
- toc->count,
- FT_MIN( stream->size >> 4, 9 ) ));
- toc->count = FT_MIN( stream->size >> 4, 9 );
- }
-
- if ( FT_NEW_ARRAY( face->toc.tables, toc->count ) )
- return error;
-
- tables = face->toc.tables;
- for ( n = 0; n < toc->count; n++ )
- {
- if ( FT_STREAM_READ_FIELDS( pcf_table_header, tables ) )
- goto Exit;
- tables++;
- }
-
- /* Sort tables and check for overlaps. Because they are almost */
- /* always ordered already, an in-place bubble sort with simultaneous */
- /* boundary checking seems appropriate. */
- tables = face->toc.tables;
-
- for ( n = 0; n < toc->count - 1; n++ )
- {
- FT_UInt i, have_change;
-
-
- have_change = 0;
-
- for ( i = 0; i < toc->count - 1 - n; i++ )
- {
- PCF_TableRec tmp;
-
-
- if ( tables[i].offset > tables[i + 1].offset )
- {
- tmp = tables[i];
- tables[i] = tables[i + 1];
- tables[i + 1] = tmp;
-
- have_change = 1;
- }
-
- if ( ( tables[i].size > tables[i + 1].offset ) ||
- ( tables[i].offset > tables[i + 1].offset - tables[i].size ) )
- {
- error = FT_THROW( Invalid_Offset );
- goto Exit;
- }
- }
-
- if ( !have_change )
- break;
- }
-
- /*
- * We now check whether the `size' and `offset' values are reasonable:
- * `offset' + `size' must not exceed the stream size.
- *
- * Note, however, that X11's `pcfWriteFont' routine (used by the
- * `bdftopcf' program to create PDF font files) has two special
- * features.
- *
- * - It always assigns the accelerator table a size of 100 bytes in the
- * TOC, regardless of its real size, which can vary between 34 and 72
- * bytes.
- *
- * - Due to the way the routine is designed, it ships out the last font
- * table with its real size, ignoring the TOC's size value. Since
- * the TOC size values are always rounded up to a multiple of 4, the
- * difference can be up to three bytes for all tables except the
- * accelerator table, for which the difference can be as large as 66
- * bytes.
- *
- */
-
- tables = face->toc.tables;
- size = stream->size;
-
- for ( n = 0; n < toc->count - 1; n++ )
- {
- /* we need two checks to avoid overflow */
- if ( ( tables->size > size ) ||
- ( tables->offset > size - tables->size ) )
- {
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
- tables++;
- }
-
- /* only check `tables->offset' for last table element ... */
- if ( ( tables->offset > size ) )
- {
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
- /* ... and adjust `tables->size' to the real value if necessary */
- if ( tables->size > size - tables->offset )
- tables->size = size - tables->offset;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
- {
- FT_UInt i, j;
- const char* name = "?";
-
-
- FT_TRACE4(( "pcf_read_TOC:\n" ));
-
- FT_TRACE4(( " number of tables: %ld\n", face->toc.count ));
-
- tables = face->toc.tables;
- for ( i = 0; i < toc->count; i++ )
- {
- for ( j = 0; j < sizeof ( tableNames ) / sizeof ( tableNames[0] );
- j++ )
- if ( tables[i].type == (FT_UInt)( 1 << j ) )
- name = tableNames[j];
-
- FT_TRACE4(( " %d: type=%s, format=0x%X,"
- " size=%ld (0x%lX), offset=%ld (0x%lX)\n",
- i, name,
- tables[i].format,
- tables[i].size, tables[i].size,
- tables[i].offset, tables[i].offset ));
- }
- }
-
-#endif
-
- return FT_Err_Ok;
-
- Exit:
- FT_FREE( face->toc.tables );
- return error;
- }
-
-
-#define PCF_METRIC_SIZE 12
-
- static
- const FT_Frame_Field pcf_metric_header[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PCF_MetricRec
-
- FT_FRAME_START( PCF_METRIC_SIZE ),
- FT_FRAME_SHORT_LE( leftSideBearing ),
- FT_FRAME_SHORT_LE( rightSideBearing ),
- FT_FRAME_SHORT_LE( characterWidth ),
- FT_FRAME_SHORT_LE( ascent ),
- FT_FRAME_SHORT_LE( descent ),
- FT_FRAME_SHORT_LE( attributes ),
- FT_FRAME_END
- };
-
-
- static
- const FT_Frame_Field pcf_metric_msb_header[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PCF_MetricRec
-
- FT_FRAME_START( PCF_METRIC_SIZE ),
- FT_FRAME_SHORT( leftSideBearing ),
- FT_FRAME_SHORT( rightSideBearing ),
- FT_FRAME_SHORT( characterWidth ),
- FT_FRAME_SHORT( ascent ),
- FT_FRAME_SHORT( descent ),
- FT_FRAME_SHORT( attributes ),
- FT_FRAME_END
- };
-
-
-#define PCF_COMPRESSED_METRIC_SIZE 5
-
- static
- const FT_Frame_Field pcf_compressed_metric_header[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PCF_Compressed_MetricRec
-
- FT_FRAME_START( PCF_COMPRESSED_METRIC_SIZE ),
- FT_FRAME_BYTE( leftSideBearing ),
- FT_FRAME_BYTE( rightSideBearing ),
- FT_FRAME_BYTE( characterWidth ),
- FT_FRAME_BYTE( ascent ),
- FT_FRAME_BYTE( descent ),
- FT_FRAME_END
- };
-
-
- static FT_Error
- pcf_get_metric( FT_Stream stream,
- FT_ULong format,
- PCF_Metric metric )
- {
- FT_Error error = FT_Err_Ok;
-
-
- if ( PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
- {
- const FT_Frame_Field* fields;
-
-
- /* parsing normal metrics */
- fields = ( PCF_BYTE_ORDER( format ) == MSBFirst )
- ? pcf_metric_msb_header
- : pcf_metric_header;
-
- /* the following sets `error' but doesn't return in case of failure */
- (void)FT_STREAM_READ_FIELDS( fields, metric );
- }
- else
- {
- PCF_Compressed_MetricRec compr;
-
-
- /* parsing compressed metrics */
- if ( FT_STREAM_READ_FIELDS( pcf_compressed_metric_header, &compr ) )
- goto Exit;
-
- metric->leftSideBearing = (FT_Short)( compr.leftSideBearing - 0x80 );
- metric->rightSideBearing = (FT_Short)( compr.rightSideBearing - 0x80 );
- metric->characterWidth = (FT_Short)( compr.characterWidth - 0x80 );
- metric->ascent = (FT_Short)( compr.ascent - 0x80 );
- metric->descent = (FT_Short)( compr.descent - 0x80 );
- metric->attributes = 0;
- }
-
- FT_TRACE5(( " width=%d,"
- " lsb=%d, rsb=%d,"
- " ascent=%d, descent=%d,"
- " attributes=%d\n",
- metric->characterWidth,
- metric->leftSideBearing,
- metric->rightSideBearing,
- metric->ascent,
- metric->descent,
- metric->attributes ));
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- pcf_seek_to_table_type( FT_Stream stream,
- PCF_Table tables,
- FT_ULong ntables, /* same as PCF_Toc->count */
- FT_ULong type,
- FT_ULong *aformat,
- FT_ULong *asize )
- {
- FT_Error error = FT_ERR( Invalid_File_Format );
- FT_ULong i;
-
-
- for ( i = 0; i < ntables; i++ )
- if ( tables[i].type == type )
- {
- if ( stream->pos > tables[i].offset )
- {
- error = FT_THROW( Invalid_Stream_Skip );
- goto Fail;
- }
-
- if ( FT_STREAM_SKIP( tables[i].offset - stream->pos ) )
- {
- error = FT_THROW( Invalid_Stream_Skip );
- goto Fail;
- }
-
- *asize = tables[i].size;
- *aformat = tables[i].format;
-
- return FT_Err_Ok;
- }
-
- Fail:
- *asize = 0;
- return error;
- }
-
-
- static FT_Bool
- pcf_has_table_type( PCF_Table tables,
- FT_ULong ntables, /* same as PCF_Toc->count */
- FT_ULong type )
- {
- FT_ULong i;
-
-
- for ( i = 0; i < ntables; i++ )
- if ( tables[i].type == type )
- return TRUE;
-
- return FALSE;
- }
-
-
-#define PCF_PROPERTY_SIZE 9
-
- static
- const FT_Frame_Field pcf_property_header[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PCF_ParsePropertyRec
-
- FT_FRAME_START( PCF_PROPERTY_SIZE ),
- FT_FRAME_LONG_LE( name ),
- FT_FRAME_BYTE ( isString ),
- FT_FRAME_LONG_LE( value ),
- FT_FRAME_END
- };
-
-
- static
- const FT_Frame_Field pcf_property_msb_header[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PCF_ParsePropertyRec
-
- FT_FRAME_START( PCF_PROPERTY_SIZE ),
- FT_FRAME_LONG( name ),
- FT_FRAME_BYTE( isString ),
- FT_FRAME_LONG( value ),
- FT_FRAME_END
- };
-
-
- FT_LOCAL_DEF( PCF_Property )
- pcf_find_property( PCF_Face face,
- const FT_String* prop )
- {
- PCF_Property properties = face->properties;
- FT_Bool found = 0;
- int i;
-
-
- for ( i = 0; i < face->nprops && !found; i++ )
- {
- if ( !ft_strcmp( properties[i].name, prop ) )
- found = 1;
- }
-
- if ( found )
- return properties + i - 1;
- else
- return NULL;
- }
-
-
- static FT_Error
- pcf_get_properties( FT_Stream stream,
- PCF_Face face )
- {
- PCF_ParseProperty props = NULL;
- PCF_Property properties = NULL;
- FT_ULong nprops, orig_nprops, i;
- FT_ULong format, size;
- FT_Error error;
- FT_Memory memory = FT_FACE( face )->memory;
- FT_ULong string_size;
- FT_String* strings = NULL;
-
-
- error = pcf_seek_to_table_type( stream,
- face->toc.tables,
- face->toc.count,
- PCF_PROPERTIES,
- &format,
- &size );
- if ( error )
- goto Bail;
-
- if ( FT_READ_ULONG_LE( format ) )
- goto Bail;
-
- FT_TRACE4(( "pcf_get_properties:\n"
- " format: 0x%lX (%s)\n",
- format,
- PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB" ));
-
- if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
- goto Bail;
-
- if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- (void)FT_READ_ULONG( orig_nprops );
- else
- (void)FT_READ_ULONG_LE( orig_nprops );
- if ( error )
- goto Bail;
-
- FT_TRACE4(( " number of properties: %ld\n", orig_nprops ));
-
- /* rough estimate */
- if ( orig_nprops > size / PCF_PROPERTY_SIZE )
- {
- error = FT_THROW( Invalid_Table );
- goto Bail;
- }
-
- /* as a heuristic limit to avoid excessive allocation in */
- /* gzip bombs (i.e., very small, invalid input data that */
- /* pretends to expand to an insanely large file) we only */
- /* load the first 256 properties */
- if ( orig_nprops > 256 )
- {
- FT_TRACE0(( "pcf_get_properties:"
- " only loading first 256 properties\n" ));
- nprops = 256;
- }
- else
- nprops = orig_nprops;
-
- face->nprops = (int)nprops;
-
- if ( FT_NEW_ARRAY( props, nprops ) )
- goto Bail;
-
- for ( i = 0; i < nprops; i++ )
- {
- if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- {
- if ( FT_STREAM_READ_FIELDS( pcf_property_msb_header, props + i ) )
- goto Bail;
- }
- else
- {
- if ( FT_STREAM_READ_FIELDS( pcf_property_header, props + i ) )
- goto Bail;
- }
- }
-
- /* this skip will only work if we really have an extremely large */
- /* number of properties; it will fail for fake data, avoiding an */
- /* unnecessarily large allocation later on */
- if ( FT_STREAM_SKIP( ( orig_nprops - nprops ) * PCF_PROPERTY_SIZE ) )
- {
- error = FT_THROW( Invalid_Stream_Skip );
- goto Bail;
- }
-
- /* pad the property array */
- /* */
- /* clever here - nprops is the same as the number of odd-units read, */
- /* as only isStringProp are odd length (Keith Packard) */
- /* */
- if ( orig_nprops & 3 )
- {
- i = 4 - ( orig_nprops & 3 );
- if ( FT_STREAM_SKIP( i ) )
- {
- error = FT_THROW( Invalid_Stream_Skip );
- goto Bail;
- }
- }
-
- if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- (void)FT_READ_ULONG( string_size );
- else
- (void)FT_READ_ULONG_LE( string_size );
- if ( error )
- goto Bail;
-
- FT_TRACE4(( " string size: %ld\n", string_size ));
-
- /* rough estimate */
- if ( string_size > size - orig_nprops * PCF_PROPERTY_SIZE )
- {
- error = FT_THROW( Invalid_Table );
- goto Bail;
- }
-
- /* the strings in the `strings' array are PostScript strings, */
- /* which can have a maximum length of 65536 characters each */
- if ( string_size > 16777472 ) /* 256 * (65536 + 1) */
- {
- FT_TRACE0(( "pcf_get_properties:"
- " loading only 16777472 bytes of strings array\n" ));
- string_size = 16777472;
- }
-
- /* allocate one more byte so that we have a final null byte */
- if ( FT_NEW_ARRAY( strings, string_size + 1 ) )
- goto Bail;
-
- error = FT_Stream_Read( stream, (FT_Byte*)strings, string_size );
- if ( error )
- goto Bail;
-
- if ( FT_NEW_ARRAY( properties, nprops ) )
- goto Bail;
-
- face->properties = properties;
-
- FT_TRACE4(( "\n" ));
- for ( i = 0; i < nprops; i++ )
- {
- FT_Long name_offset = props[i].name;
-
-
- if ( ( name_offset < 0 ) ||
- ( (FT_ULong)name_offset > string_size ) )
- {
- error = FT_THROW( Invalid_Offset );
- goto Bail;
- }
-
- if ( FT_STRDUP( properties[i].name, strings + name_offset ) )
- goto Bail;
-
- FT_TRACE4(( " %s:", properties[i].name ));
-
- properties[i].isString = props[i].isString;
-
- if ( props[i].isString )
- {
- FT_Long value_offset = props[i].value;
-
-
- if ( ( value_offset < 0 ) ||
- ( (FT_ULong)value_offset > string_size ) )
- {
- error = FT_THROW( Invalid_Offset );
- goto Bail;
- }
-
- if ( FT_STRDUP( properties[i].value.atom, strings + value_offset ) )
- goto Bail;
-
- FT_TRACE4(( " `%s'\n", properties[i].value.atom ));
- }
- else
- {
- properties[i].value.l = props[i].value;
-
- FT_TRACE4(( " %d\n", properties[i].value.l ));
- }
- }
-
- error = FT_Err_Ok;
-
- Bail:
- FT_FREE( props );
- FT_FREE( strings );
-
- return error;
- }
-
-
- static FT_Error
- pcf_get_metrics( FT_Stream stream,
- PCF_Face face )
- {
- FT_Error error;
- FT_Memory memory = FT_FACE( face )->memory;
- FT_ULong format, size;
- PCF_Metric metrics = NULL;
- FT_ULong nmetrics, orig_nmetrics, i;
-
-
- error = pcf_seek_to_table_type( stream,
- face->toc.tables,
- face->toc.count,
- PCF_METRICS,
- &format,
- &size );
- if ( error )
- return error;
-
- if ( FT_READ_ULONG_LE( format ) )
- goto Bail;
-
- FT_TRACE4(( "pcf_get_metrics:\n"
- " format: 0x%lX (%s, %s)\n",
- format,
- PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB",
- PCF_FORMAT_MATCH( format, PCF_COMPRESSED_METRICS ) ?
- "compressed" : "uncompressed" ));
-
- if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) &&
- !PCF_FORMAT_MATCH( format, PCF_COMPRESSED_METRICS ) )
- return FT_THROW( Invalid_File_Format );
-
- if ( PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
- {
- if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- (void)FT_READ_ULONG( orig_nmetrics );
- else
- (void)FT_READ_ULONG_LE( orig_nmetrics );
- }
- else
- {
- if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- (void)FT_READ_USHORT( orig_nmetrics );
- else
- (void)FT_READ_USHORT_LE( orig_nmetrics );
- }
- if ( error )
- return FT_THROW( Invalid_File_Format );
-
- FT_TRACE4(( " number of metrics: %ld\n", orig_nmetrics ));
-
- /* rough estimate */
- if ( PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
- {
- if ( orig_nmetrics > size / PCF_METRIC_SIZE )
- return FT_THROW( Invalid_Table );
- }
- else
- {
- if ( orig_nmetrics > size / PCF_COMPRESSED_METRIC_SIZE )
- return FT_THROW( Invalid_Table );
- }
-
- if ( !orig_nmetrics )
- return FT_THROW( Invalid_Table );
-
- /* PCF is a format from ancient times; Unicode was in its */
- /* infancy, and widely used two-byte character sets for CJK */
- /* scripts (Big 5, GB 2312, JIS X 0208, etc.) did have at most */
- /* 15000 characters. Even the more exotic CNS 11643 and CCCII */
- /* standards, which were essentially three-byte character sets, */
- /* provided less then 65536 assigned characters. */
- /* */
- /* While technically possible to have a larger number of glyphs */
- /* in PCF files, we thus limit the number to 65536. */
- if ( orig_nmetrics > 65536 )
- {
- FT_TRACE0(( "pcf_get_metrics:"
- " only loading first 65536 metrics\n" ));
- nmetrics = 65536;
- }
- else
- nmetrics = orig_nmetrics;
-
- face->nmetrics = nmetrics;
-
- if ( FT_NEW_ARRAY( face->metrics, nmetrics ) )
- return error;
-
- metrics = face->metrics;
-
- FT_TRACE4(( "\n" ));
- for ( i = 0; i < nmetrics; i++, metrics++ )
- {
- FT_TRACE5(( " idx %ld:", i ));
- error = pcf_get_metric( stream, format, metrics );
-
- metrics->bits = 0;
-
- if ( error )
- break;
-
- /* sanity checks -- those values are used in `PCF_Glyph_Load' to */
- /* compute a glyph's bitmap dimensions, thus setting them to zero in */
- /* case of an error disables this particular glyph only */
- if ( metrics->rightSideBearing < metrics->leftSideBearing ||
- metrics->ascent < -metrics->descent )
- {
- metrics->characterWidth = 0;
- metrics->leftSideBearing = 0;
- metrics->rightSideBearing = 0;
- metrics->ascent = 0;
- metrics->descent = 0;
-
- FT_TRACE0(( "pcf_get_metrics:"
- " invalid metrics for glyph %d\n", i ));
- }
- }
-
- if ( error )
- FT_FREE( face->metrics );
-
- Bail:
- return error;
- }
-
-
- static FT_Error
- pcf_get_bitmaps( FT_Stream stream,
- PCF_Face face )
- {
- FT_Error error;
- FT_Memory memory = FT_FACE( face )->memory;
- FT_Long* offsets = NULL;
- FT_Long bitmapSizes[GLYPHPADOPTIONS];
- FT_ULong format, size;
- FT_ULong nbitmaps, orig_nbitmaps, i, sizebitmaps = 0;
-
-
- error = pcf_seek_to_table_type( stream,
- face->toc.tables,
- face->toc.count,
- PCF_BITMAPS,
- &format,
- &size );
- if ( error )
- return error;
-
- error = FT_Stream_EnterFrame( stream, 8 );
- if ( error )
- return error;
-
- format = FT_GET_ULONG_LE();
- if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- orig_nbitmaps = FT_GET_ULONG();
- else
- orig_nbitmaps = FT_GET_ULONG_LE();
-
- FT_Stream_ExitFrame( stream );
-
- FT_TRACE4(( "pcf_get_bitmaps:\n"
- " format: 0x%lX\n"
- " (%s, %s,\n"
- " padding=%d bits, scanning=%d bits)\n",
- format,
- PCF_BYTE_ORDER( format ) == MSBFirst
- ? "most significant byte first"
- : "least significant byte first",
- PCF_BIT_ORDER( format ) == MSBFirst
- ? "most significant bit first"
- : "least significant bit first",
- 8 << PCF_GLYPH_PAD_INDEX( format ),
- 8 << PCF_SCAN_UNIT_INDEX( format ) ));
-
- if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
- return FT_THROW( Invalid_File_Format );
-
- FT_TRACE4(( " number of bitmaps: %ld\n", orig_nbitmaps ));
-
- /* see comment in `pcf_get_metrics' */
- if ( orig_nbitmaps > 65536 )
- {
- FT_TRACE0(( "pcf_get_bitmaps:"
- " only loading first 65536 bitmaps\n" ));
- nbitmaps = 65536;
- }
- else
- nbitmaps = orig_nbitmaps;
-
- if ( nbitmaps != face->nmetrics )
- return FT_THROW( Invalid_File_Format );
-
- if ( FT_NEW_ARRAY( offsets, nbitmaps ) )
- return error;
-
- FT_TRACE5(( "\n" ));
- for ( i = 0; i < nbitmaps; i++ )
- {
- if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- (void)FT_READ_LONG( offsets[i] );
- else
- (void)FT_READ_LONG_LE( offsets[i] );
-
- FT_TRACE5(( " bitmap %ld: offset %ld (0x%lX)\n",
- i, offsets[i], offsets[i] ));
- }
- if ( error )
- goto Bail;
-
- for ( i = 0; i < GLYPHPADOPTIONS; i++ )
- {
- if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- (void)FT_READ_LONG( bitmapSizes[i] );
- else
- (void)FT_READ_LONG_LE( bitmapSizes[i] );
- if ( error )
- goto Bail;
-
- sizebitmaps = (FT_ULong)bitmapSizes[PCF_GLYPH_PAD_INDEX( format )];
-
- FT_TRACE4(( " %ld-bit padding implies a size of %ld\n",
- 8 << i, bitmapSizes[i] ));
- }
-
- FT_TRACE4(( " %ld bitmaps, using %ld-bit padding\n",
- nbitmaps,
- 8 << PCF_GLYPH_PAD_INDEX( format ) ));
- FT_TRACE4(( " bitmap size: %ld\n", sizebitmaps ));
-
- FT_UNUSED( sizebitmaps ); /* only used for debugging */
-
- /* right now, we only check the bitmap offsets; */
- /* actual bitmaps are only loaded on demand */
- for ( i = 0; i < nbitmaps; i++ )
- {
- /* rough estimate */
- if ( ( offsets[i] < 0 ) ||
- ( (FT_ULong)offsets[i] > size ) )
- {
- FT_TRACE0(( "pcf_get_bitmaps:"
- " invalid offset to bitmap data of glyph %ld\n", i ));
- }
- else
- face->metrics[i].bits = stream->pos + (FT_ULong)offsets[i];
- }
-
- face->bitmapsFormat = format;
-
- Bail:
- FT_FREE( offsets );
- return error;
- }
-
-
- static FT_Error
- pcf_get_encodings( FT_Stream stream,
- PCF_Face face )
- {
- FT_Error error;
- FT_Memory memory = FT_FACE( face )->memory;
- FT_ULong format, size;
- int firstCol, lastCol;
- int firstRow, lastRow;
- FT_ULong nencoding;
- FT_UShort encodingOffset;
- int i, j;
- FT_ULong k;
- PCF_Encoding encoding = NULL;
-
-
- error = pcf_seek_to_table_type( stream,
- face->toc.tables,
- face->toc.count,
- PCF_BDF_ENCODINGS,
- &format,
- &size );
- if ( error )
- return error;
-
- error = FT_Stream_EnterFrame( stream, 14 );
- if ( error )
- return error;
-
- format = FT_GET_ULONG_LE();
-
- if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- {
- firstCol = FT_GET_SHORT();
- lastCol = FT_GET_SHORT();
- firstRow = FT_GET_SHORT();
- lastRow = FT_GET_SHORT();
- face->defaultChar = FT_GET_SHORT();
- }
- else
- {
- firstCol = FT_GET_SHORT_LE();
- lastCol = FT_GET_SHORT_LE();
- firstRow = FT_GET_SHORT_LE();
- lastRow = FT_GET_SHORT_LE();
- face->defaultChar = FT_GET_SHORT_LE();
- }
-
- FT_Stream_ExitFrame( stream );
-
- FT_TRACE4(( "pcf_get_encodings:\n"
- " format: 0x%lX (%s)\n",
- format,
- PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB" ));
-
- if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
- return FT_THROW( Invalid_File_Format );
-
- FT_TRACE4(( " firstCol 0x%X, lastCol 0x%X\n"
- " firstRow 0x%X, lastRow 0x%X\n",
- firstCol, lastCol,
- firstRow, lastRow ));
-
- /* sanity checks; we limit numbers of rows and columns to 256 */
- if ( firstCol < 0 ||
- firstCol > lastCol ||
- lastCol > 0xFF ||
- firstRow < 0 ||
- firstRow > lastRow ||
- lastRow > 0xFF )
- return FT_THROW( Invalid_Table );
-
- nencoding = (FT_ULong)( lastCol - firstCol + 1 ) *
- (FT_ULong)( lastRow - firstRow + 1 );
-
- if ( FT_NEW_ARRAY( encoding, nencoding ) )
- return error;
-
- error = FT_Stream_EnterFrame( stream, 2 * nencoding );
- if ( error )
- goto Bail;
-
- FT_TRACE5(( "\n" ));
-
- k = 0;
- for ( i = firstRow; i <= lastRow; i++ )
- {
- for ( j = firstCol; j <= lastCol; j++ )
- {
- /* X11's reference implementation uses the equivalent to */
- /* `FT_GET_SHORT', however PCF fonts with more than 32768 */
- /* characters (e.g. `unifont.pcf') clearly show that an */
- /* unsigned value is needed. */
- if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- encodingOffset = FT_GET_USHORT();
- else
- encodingOffset = FT_GET_USHORT_LE();
-
- if ( encodingOffset != 0xFFFFU )
- {
- encoding[k].enc = i * 256 + j;
- encoding[k].glyph = encodingOffset;
-
- FT_TRACE5(( " code %d (0x%04X): idx %d\n",
- encoding[k].enc, encoding[k].enc, encoding[k].glyph ));
-
- k++;
- }
- }
- }
- FT_Stream_ExitFrame( stream );
-
- if ( FT_RENEW_ARRAY( encoding, nencoding, k ) )
- goto Bail;
-
- face->nencodings = k;
- face->encodings = encoding;
-
- return error;
-
- Bail:
- FT_FREE( encoding );
- return error;
- }
-
-
- static
- const FT_Frame_Field pcf_accel_header[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PCF_AccelRec
-
- FT_FRAME_START( 20 ),
- FT_FRAME_BYTE ( noOverlap ),
- FT_FRAME_BYTE ( constantMetrics ),
- FT_FRAME_BYTE ( terminalFont ),
- FT_FRAME_BYTE ( constantWidth ),
- FT_FRAME_BYTE ( inkInside ),
- FT_FRAME_BYTE ( inkMetrics ),
- FT_FRAME_BYTE ( drawDirection ),
- FT_FRAME_SKIP_BYTES( 1 ),
- FT_FRAME_LONG_LE ( fontAscent ),
- FT_FRAME_LONG_LE ( fontDescent ),
- FT_FRAME_LONG_LE ( maxOverlap ),
- FT_FRAME_END
- };
-
-
- static
- const FT_Frame_Field pcf_accel_msb_header[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PCF_AccelRec
-
- FT_FRAME_START( 20 ),
- FT_FRAME_BYTE ( noOverlap ),
- FT_FRAME_BYTE ( constantMetrics ),
- FT_FRAME_BYTE ( terminalFont ),
- FT_FRAME_BYTE ( constantWidth ),
- FT_FRAME_BYTE ( inkInside ),
- FT_FRAME_BYTE ( inkMetrics ),
- FT_FRAME_BYTE ( drawDirection ),
- FT_FRAME_SKIP_BYTES( 1 ),
- FT_FRAME_LONG ( fontAscent ),
- FT_FRAME_LONG ( fontDescent ),
- FT_FRAME_LONG ( maxOverlap ),
- FT_FRAME_END
- };
-
-
- static FT_Error
- pcf_get_accel( FT_Stream stream,
- PCF_Face face,
- FT_ULong type )
- {
- FT_ULong format, size;
- FT_Error error;
- PCF_Accel accel = &face->accel;
-
-
- error = pcf_seek_to_table_type( stream,
- face->toc.tables,
- face->toc.count,
- type,
- &format,
- &size );
- if ( error )
- goto Bail;
-
- if ( FT_READ_ULONG_LE( format ) )
- goto Bail;
-
- FT_TRACE4(( "pcf_get_accel%s:\n"
- " format: 0x%lX (%s, %s)\n",
- type == PCF_BDF_ACCELERATORS ? " (getting BDF accelerators)"
- : "",
- format,
- PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB",
- PCF_FORMAT_MATCH( format, PCF_ACCEL_W_INKBOUNDS ) ?
- "accelerated" : "not accelerated" ));
-
- if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) &&
- !PCF_FORMAT_MATCH( format, PCF_ACCEL_W_INKBOUNDS ) )
- goto Bail;
-
- if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- {
- if ( FT_STREAM_READ_FIELDS( pcf_accel_msb_header, accel ) )
- goto Bail;
- }
- else
- {
- if ( FT_STREAM_READ_FIELDS( pcf_accel_header, accel ) )
- goto Bail;
- }
-
- FT_TRACE5(( " noOverlap=%s, constantMetrics=%s,"
- " terminalFont=%s, constantWidth=%s\n"
- " inkInside=%s, inkMetrics=%s, drawDirection=%s\n"
- " fontAscent=%ld, fontDescent=%ld, maxOverlap=%ld\n",
- accel->noOverlap ? "yes" : "no",
- accel->constantMetrics ? "yes" : "no",
- accel->terminalFont ? "yes" : "no",
- accel->constantWidth ? "yes" : "no",
- accel->inkInside ? "yes" : "no",
- accel->inkMetrics ? "yes" : "no",
- accel->drawDirection ? "RTL" : "LTR",
- accel->fontAscent,
- accel->fontDescent,
- accel->maxOverlap ));
-
- /* sanity checks */
- if ( FT_ABS( accel->fontAscent ) > 0x7FFF )
- {
- accel->fontAscent = accel->fontAscent < 0 ? -0x7FFF : 0x7FFF;
- FT_TRACE0(( "pfc_get_accel: clamping font ascent to value %d\n",
- accel->fontAscent ));
- }
- if ( FT_ABS( accel->fontDescent ) > 0x7FFF )
- {
- accel->fontDescent = accel->fontDescent < 0 ? -0x7FFF : 0x7FFF;
- FT_TRACE0(( "pfc_get_accel: clamping font descent to value %d\n",
- accel->fontDescent ));
- }
-
- FT_TRACE5(( " minbounds:" ));
- error = pcf_get_metric( stream,
- format & ( ~PCF_FORMAT_MASK ),
- &(accel->minbounds) );
- if ( error )
- goto Bail;
-
- FT_TRACE5(( " maxbounds:" ));
- error = pcf_get_metric( stream,
- format & ( ~PCF_FORMAT_MASK ),
- &(accel->maxbounds) );
- if ( error )
- goto Bail;
-
- if ( PCF_FORMAT_MATCH( format, PCF_ACCEL_W_INKBOUNDS ) )
- {
- FT_TRACE5(( " ink minbounds:" ));
- error = pcf_get_metric( stream,
- format & ( ~PCF_FORMAT_MASK ),
- &(accel->ink_minbounds) );
- if ( error )
- goto Bail;
-
- FT_TRACE5(( " ink maxbounds:" ));
- error = pcf_get_metric( stream,
- format & ( ~PCF_FORMAT_MASK ),
- &(accel->ink_maxbounds) );
- if ( error )
- goto Bail;
- }
- else
- {
- accel->ink_minbounds = accel->minbounds;
- accel->ink_maxbounds = accel->maxbounds;
- }
-
- Bail:
- return error;
- }
-
-
- static FT_Error
- pcf_interpret_style( PCF_Face pcf )
- {
- FT_Error error = FT_Err_Ok;
- FT_Face face = FT_FACE( pcf );
- FT_Memory memory = face->memory;
-
- PCF_Property prop;
-
- size_t nn, len;
- char* strings[4] = { NULL, NULL, NULL, NULL };
- size_t lengths[4];
-
-
- face->style_flags = 0;
-
- prop = pcf_find_property( pcf, "SLANT" );
- if ( prop && prop->isString &&
- ( *(prop->value.atom) == 'O' || *(prop->value.atom) == 'o' ||
- *(prop->value.atom) == 'I' || *(prop->value.atom) == 'i' ) )
- {
- face->style_flags |= FT_STYLE_FLAG_ITALIC;
- strings[2] = ( *(prop->value.atom) == 'O' ||
- *(prop->value.atom) == 'o' ) ? (char *)"Oblique"
- : (char *)"Italic";
- }
-
- prop = pcf_find_property( pcf, "WEIGHT_NAME" );
- if ( prop && prop->isString &&
- ( *(prop->value.atom) == 'B' || *(prop->value.atom) == 'b' ) )
- {
- face->style_flags |= FT_STYLE_FLAG_BOLD;
- strings[1] = (char*)"Bold";
- }
-
- prop = pcf_find_property( pcf, "SETWIDTH_NAME" );
- if ( prop && prop->isString &&
- *(prop->value.atom) &&
- !( *(prop->value.atom) == 'N' || *(prop->value.atom) == 'n' ) )
- strings[3] = (char*)( prop->value.atom );
-
- prop = pcf_find_property( pcf, "ADD_STYLE_NAME" );
- if ( prop && prop->isString &&
- *(prop->value.atom) &&
- !( *(prop->value.atom) == 'N' || *(prop->value.atom) == 'n' ) )
- strings[0] = (char*)( prop->value.atom );
-
- for ( len = 0, nn = 0; nn < 4; nn++ )
- {
- lengths[nn] = 0;
- if ( strings[nn] )
- {
- lengths[nn] = ft_strlen( strings[nn] );
- len += lengths[nn] + 1;
- }
- }
-
- if ( len == 0 )
- {
- strings[0] = (char*)"Regular";
- lengths[0] = ft_strlen( strings[0] );
- len = lengths[0] + 1;
- }
-
- {
- char* s;
-
-
- if ( FT_ALLOC( face->style_name, len ) )
- return error;
-
- s = face->style_name;
-
- for ( nn = 0; nn < 4; nn++ )
- {
- char* src = strings[nn];
-
-
- len = lengths[nn];
-
- if ( !src )
- continue;
-
- /* separate elements with a space */
- if ( s != face->style_name )
- *s++ = ' ';
-
- ft_memcpy( s, src, len );
-
- /* need to convert spaces to dashes for */
- /* add_style_name and setwidth_name */
- if ( nn == 0 || nn == 3 )
- {
- size_t mm;
-
-
- for ( mm = 0; mm < len; mm++ )
- if ( s[mm] == ' ' )
- s[mm] = '-';
- }
-
- s += len;
- }
- *s = 0;
- }
-
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- pcf_load_font( FT_Stream stream,
- PCF_Face face,
- FT_Long face_index )
- {
- FT_Face root = FT_FACE( face );
- FT_Error error;
- FT_Memory memory = FT_FACE( face )->memory;
- FT_Bool hasBDFAccelerators;
-
-
- error = pcf_read_TOC( stream, face );
- if ( error )
- goto Exit;
-
- root->num_faces = 1;
- root->face_index = 0;
-
- /* If we are performing a simple font format check, exit immediately. */
- if ( face_index < 0 )
- return FT_Err_Ok;
-
- error = pcf_get_properties( stream, face );
- if ( error )
- goto Exit;
-
- /* Use the old accelerators if no BDF accelerators are in the file. */
- hasBDFAccelerators = pcf_has_table_type( face->toc.tables,
- face->toc.count,
- PCF_BDF_ACCELERATORS );
- if ( !hasBDFAccelerators )
- {
- error = pcf_get_accel( stream, face, PCF_ACCELERATORS );
- if ( error )
- goto Exit;
- }
-
- /* metrics */
- error = pcf_get_metrics( stream, face );
- if ( error )
- goto Exit;
-
- /* bitmaps */
- error = pcf_get_bitmaps( stream, face );
- if ( error )
- goto Exit;
-
- /* encodings */
- error = pcf_get_encodings( stream, face );
- if ( error )
- goto Exit;
-
- /* BDF style accelerators (i.e. bounds based on encoded glyphs) */
- if ( hasBDFAccelerators )
- {
- error = pcf_get_accel( stream, face, PCF_BDF_ACCELERATORS );
- if ( error )
- goto Exit;
- }
-
- /* XXX: TO DO: inkmetrics and glyph_names are missing */
-
- /* now construct the face object */
- {
- PCF_Property prop;
-
-
- root->face_flags |= FT_FACE_FLAG_FIXED_SIZES |
- FT_FACE_FLAG_HORIZONTAL |
- FT_FACE_FLAG_FAST_GLYPHS;
-
- if ( face->accel.constantWidth )
- root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;
-
- if ( FT_SET_ERROR( pcf_interpret_style( face ) ) )
- goto Exit;
-
- prop = pcf_find_property( face, "FAMILY_NAME" );
- if ( prop && prop->isString )
- {
-
-#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
-
- PCF_Driver driver = (PCF_Driver)FT_FACE_DRIVER( face );
-
-
- if ( !driver->no_long_family_names )
- {
- /* Prepend the foundry name plus a space to the family name. */
- /* There are many fonts just called `Fixed' which look */
- /* completely different, and which have nothing to do with each */
- /* other. When selecting `Fixed' in KDE or Gnome one gets */
- /* results that appear rather random, the style changes often if */
- /* one changes the size and one cannot select some fonts at all. */
- /* */
- /* We also check whether we have `wide' characters; all put */
- /* together, we get family names like `Sony Fixed' or `Misc */
- /* Fixed Wide'. */
-
- PCF_Property foundry_prop, point_size_prop, average_width_prop;
-
- int l = ft_strlen( prop->value.atom ) + 1;
- int wide = 0;
-
-
- foundry_prop = pcf_find_property( face, "FOUNDRY" );
- point_size_prop = pcf_find_property( face, "POINT_SIZE" );
- average_width_prop = pcf_find_property( face, "AVERAGE_WIDTH" );
-
- if ( point_size_prop && average_width_prop )
- {
- if ( average_width_prop->value.l >= point_size_prop->value.l )
- {
- /* This font is at least square shaped or even wider */
- wide = 1;
- l += ft_strlen( " Wide" );
- }
- }
-
- if ( foundry_prop && foundry_prop->isString )
- {
- l += ft_strlen( foundry_prop->value.atom ) + 1;
-
- if ( FT_NEW_ARRAY( root->family_name, l ) )
- goto Exit;
-
- ft_strcpy( root->family_name, foundry_prop->value.atom );
- ft_strcat( root->family_name, " " );
- ft_strcat( root->family_name, prop->value.atom );
- }
- else
- {
- if ( FT_NEW_ARRAY( root->family_name, l ) )
- goto Exit;
-
- ft_strcpy( root->family_name, prop->value.atom );
- }
-
- if ( wide )
- ft_strcat( root->family_name, " Wide" );
- }
- else
-
-#endif /* PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
-
- {
- if ( FT_STRDUP( root->family_name, prop->value.atom ) )
- goto Exit;
- }
- }
- else
- root->family_name = NULL;
-
- /*
- * Note: We shift all glyph indices by +1 since we must
- * respect the convention that glyph 0 always corresponds
- * to the `missing glyph'.
- *
- * This implies bumping the number of `available' glyphs by 1.
- */
- root->num_glyphs = (FT_Long)( face->nmetrics + 1 );
-
- root->num_fixed_sizes = 1;
- if ( FT_NEW_ARRAY( root->available_sizes, 1 ) )
- goto Exit;
-
- {
- FT_Bitmap_Size* bsize = root->available_sizes;
- FT_Short resolution_x = 0, resolution_y = 0;
-
-
- FT_ZERO( bsize );
-
- /* for simplicity, we take absolute values of integer properties */
-
-#if 0
- bsize->height = face->accel.maxbounds.ascent << 6;
-#endif
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( face->accel.fontAscent + face->accel.fontDescent < 0 )
- FT_TRACE0(( "pcf_load_font: negative height\n" ));
-#endif
- if ( FT_ABS( face->accel.fontAscent +
- face->accel.fontDescent ) > 0x7FFF )
- {
- bsize->height = 0x7FFF;
- FT_TRACE0(( "pcf_load_font: clamping height to value %d\n",
- bsize->height ));
- }
- else
- bsize->height = FT_ABS( (FT_Short)( face->accel.fontAscent +
- face->accel.fontDescent ) );
-
- prop = pcf_find_property( face, "AVERAGE_WIDTH" );
- if ( prop )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( prop->value.l < 0 )
- FT_TRACE0(( "pcf_load_font: negative average width\n" ));
-#endif
- if ( ( FT_ABS( prop->value.l ) > 0x7FFFL * 10 - 5 ) )
- {
- bsize->width = 0x7FFF;
- FT_TRACE0(( "pcf_load_font: clamping average width to value %d\n",
- bsize->width ));
- }
- else
- bsize->width = FT_ABS( (FT_Short)( ( prop->value.l + 5 ) / 10 ) );
- }
- else
- {
- /* this is a heuristical value */
- bsize->width = (FT_Short)FT_MulDiv( bsize->height, 2, 3 );
- }
-
- prop = pcf_find_property( face, "POINT_SIZE" );
- if ( prop )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( prop->value.l < 0 )
- FT_TRACE0(( "pcf_load_font: negative point size\n" ));
-#endif
- /* convert from 722.7 decipoints to 72 points per inch */
- if ( FT_ABS( prop->value.l ) > 0x504C2L ) /* 0x7FFF * 72270/7200 */
- {
- bsize->size = 0x7FFF;
- FT_TRACE0(( "pcf_load_font: clamping point size to value %d\n",
- bsize->size ));
- }
- else
- bsize->size = FT_MulDiv( FT_ABS( prop->value.l ),
- 64 * 7200,
- 72270L );
- }
-
- prop = pcf_find_property( face, "PIXEL_SIZE" );
- if ( prop )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( prop->value.l < 0 )
- FT_TRACE0(( "pcf_load_font: negative pixel size\n" ));
-#endif
- if ( FT_ABS( prop->value.l ) > 0x7FFF )
- {
- bsize->y_ppem = 0x7FFF << 6;
- FT_TRACE0(( "pcf_load_font: clamping pixel size to value %d\n",
- bsize->y_ppem ));
- }
- else
- bsize->y_ppem = FT_ABS( (FT_Short)prop->value.l ) << 6;
- }
-
- prop = pcf_find_property( face, "RESOLUTION_X" );
- if ( prop )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( prop->value.l < 0 )
- FT_TRACE0(( "pcf_load_font: negative X resolution\n" ));
-#endif
- if ( FT_ABS( prop->value.l ) > 0x7FFF )
- {
- resolution_x = 0x7FFF;
- FT_TRACE0(( "pcf_load_font: clamping X resolution to value %d\n",
- resolution_x ));
- }
- else
- resolution_x = FT_ABS( (FT_Short)prop->value.l );
- }
-
- prop = pcf_find_property( face, "RESOLUTION_Y" );
- if ( prop )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( prop->value.l < 0 )
- FT_TRACE0(( "pcf_load_font: negative Y resolution\n" ));
-#endif
- if ( FT_ABS( prop->value.l ) > 0x7FFF )
- {
- resolution_y = 0x7FFF;
- FT_TRACE0(( "pcf_load_font: clamping Y resolution to value %d\n",
- resolution_y ));
- }
- else
- resolution_y = FT_ABS( (FT_Short)prop->value.l );
- }
-
- if ( bsize->y_ppem == 0 )
- {
- bsize->y_ppem = bsize->size;
- if ( resolution_y )
- bsize->y_ppem = FT_MulDiv( bsize->y_ppem, resolution_y, 72 );
- }
- if ( resolution_x && resolution_y )
- bsize->x_ppem = FT_MulDiv( bsize->y_ppem,
- resolution_x,
- resolution_y );
- else
- bsize->x_ppem = bsize->y_ppem;
- }
-
- /* set up charset */
- {
- PCF_Property charset_registry, charset_encoding;
-
-
- charset_registry = pcf_find_property( face, "CHARSET_REGISTRY" );
- charset_encoding = pcf_find_property( face, "CHARSET_ENCODING" );
-
- if ( charset_registry && charset_registry->isString &&
- charset_encoding && charset_encoding->isString )
- {
- if ( FT_STRDUP( face->charset_encoding,
- charset_encoding->value.atom ) ||
- FT_STRDUP( face->charset_registry,
- charset_registry->value.atom ) )
- goto Exit;
- }
- }
- }
-
- Exit:
- if ( error )
- {
- /* This is done to respect the behaviour of the original */
- /* PCF font driver. */
- error = FT_THROW( Invalid_File_Format );
- }
-
- return error;
- }
-
-
-/* END */
diff --git a/src/pcf/pcfread.h b/src/pcf/pcfread.h
deleted file mode 100644
index bed30e503..000000000
--- a/src/pcf/pcfread.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* pcfread.h
-
- FreeType font driver for pcf fonts
-
- Copyright 2003 by
- Francesco Zappa Nardelli
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-
-#ifndef PCFREAD_H_
-#define PCFREAD_H_
-
-
-#include <ft2build.h>
-
-FT_BEGIN_HEADER
-
- FT_LOCAL( PCF_Property )
- pcf_find_property( PCF_Face face,
- const FT_String* prop );
-
-FT_END_HEADER
-
-#endif /* PCFREAD_H_ */
-
-
-/* END */
diff --git a/src/pcf/pcfutil.c b/src/pcf/pcfutil.c
deleted file mode 100644
index 0451ee8de..000000000
--- a/src/pcf/pcfutil.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-
-Copyright 1990, 1994, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/lib/font/util/utilbitmap.c,v 1.3 1999/08/22 08:58:58 dawes Exp $ */
-
-/*
- * Author: Keith Packard, MIT X Consortium
- */
-
-/* Modified for use with FreeType */
-
-
-#include <ft2build.h>
-#include "pcfutil.h"
-
-
- /*
- * Invert bit order within each BYTE of an array.
- */
-
- FT_LOCAL_DEF( void )
- BitOrderInvert( unsigned char* buf,
- size_t nbytes )
- {
- for ( ; nbytes > 0; nbytes--, buf++ )
- {
- unsigned int val = *buf;
-
-
- val = ( ( val >> 1 ) & 0x55 ) | ( ( val << 1 ) & 0xAA );
- val = ( ( val >> 2 ) & 0x33 ) | ( ( val << 2 ) & 0xCC );
- val = ( ( val >> 4 ) & 0x0F ) | ( ( val << 4 ) & 0xF0 );
-
- *buf = (unsigned char)val;
- }
- }
-
-
- /*
- * Invert byte order within each 16-bits of an array.
- */
-
- FT_LOCAL_DEF( void )
- TwoByteSwap( unsigned char* buf,
- size_t nbytes )
- {
- for ( ; nbytes >= 2; nbytes -= 2, buf += 2 )
- {
- unsigned char c;
-
-
- c = buf[0];
- buf[0] = buf[1];
- buf[1] = c;
- }
- }
-
- /*
- * Invert byte order within each 32-bits of an array.
- */
-
- FT_LOCAL_DEF( void )
- FourByteSwap( unsigned char* buf,
- size_t nbytes )
- {
- for ( ; nbytes >= 4; nbytes -= 4, buf += 4 )
- {
- unsigned char c;
-
-
- c = buf[0];
- buf[0] = buf[3];
- buf[3] = c;
-
- c = buf[1];
- buf[1] = buf[2];
- buf[2] = c;
- }
- }
-
-
-/* END */
diff --git a/src/pcf/pcfutil.h b/src/pcf/pcfutil.h
deleted file mode 100644
index be986e756..000000000
--- a/src/pcf/pcfutil.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* pcfutil.h
-
- FreeType font driver for pcf fonts
-
- Copyright 2000, 2001, 2004 by
- Francesco Zappa Nardelli
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-
-#ifndef PCFUTIL_H_
-#define PCFUTIL_H_
-
-
-#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H
-
-
-FT_BEGIN_HEADER
-
- FT_LOCAL( void )
- BitOrderInvert( unsigned char* buf,
- size_t nbytes );
-
- FT_LOCAL( void )
- TwoByteSwap( unsigned char* buf,
- size_t nbytes );
-
- FT_LOCAL( void )
- FourByteSwap( unsigned char* buf,
- size_t nbytes );
-
-FT_END_HEADER
-
-#endif /* PCFUTIL_H_ */
-
-
-/* END */
diff --git a/src/pcf/rules.mk b/src/pcf/rules.mk
deleted file mode 100644
index 1b55daf4f..000000000
--- a/src/pcf/rules.mk
+++ /dev/null
@@ -1,82 +0,0 @@
-#
-# FreeType 2 pcf driver configuration rules
-#
-
-
-# Copyright (C) 2000, 2001, 2003, 2008 by
-# Francesco Zappa Nardelli
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-
-# pcf driver directory
-#
-PCF_DIR := $(SRC_DIR)/pcf
-
-
-PCF_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(PCF_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# pcf driver sources (i.e., C files)
-#
-PCF_DRV_SRC := $(PCF_DIR)/pcfdrivr.c \
- $(PCF_DIR)/pcfread.c \
- $(PCF_DIR)/pcfutil.c
-
-# pcf driver headers
-#
-PCF_DRV_H := $(PCF_DRV_SRC:%.c=%.h) \
- $(PCF_DIR)/pcf.h \
- $(PCF_DIR)/pcferror.h
-
-# pcf driver object(s)
-#
-# PCF_DRV_OBJ_M is used during `multi' builds
-# PCF_DRV_OBJ_S is used during `single' builds
-#
-PCF_DRV_OBJ_M := $(PCF_DRV_SRC:$(PCF_DIR)/%.c=$(OBJ_DIR)/%.$O)
-PCF_DRV_OBJ_S := $(OBJ_DIR)/pcf.$O
-
-# pcf driver source file for single build
-#
-PCF_DRV_SRC_S := $(PCF_DIR)/pcf.c
-
-
-# pcf driver - single object
-#
-$(PCF_DRV_OBJ_S): $(PCF_DRV_SRC_S) $(PCF_DRV_SRC) $(FREETYPE_H) $(PCF_DRV_H)
- $(PCF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(PCF_DRV_SRC_S))
-
-
-# pcf driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(PCF_DIR)/%.c $(FREETYPE_H) $(PCF_DRV_H)
- $(PCF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(PCF_DRV_OBJ_S)
-DRV_OBJS_M += $(PCF_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/pfr/Jamfile b/src/pfr/Jamfile
deleted file mode 100644
index 178317162..000000000
--- a/src/pfr/Jamfile
+++ /dev/null
@@ -1,35 +0,0 @@
-# FreeType 2 src/pfr Jamfile
-#
-# Copyright 2002-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) pfr ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = pfrcmap
- pfrdrivr
- pfrgload
- pfrload
- pfrobjs
- pfrsbit
- ;
- }
- else
- {
- _sources = pfr ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/pfr Jamfile
diff --git a/src/pfr/module.mk b/src/pfr/module.mk
deleted file mode 100644
index 7b84da970..000000000
--- a/src/pfr/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 PFR module definition
-#
-
-
-# Copyright 2002-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += PFR_DRIVER
-
-define PFR_DRIVER
-$(OPEN_DRIVER) FT_Driver_ClassRec, pfr_driver_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)pfr $(ECHO_DRIVER_DESC)PFR/TrueDoc font files with extension *.pfr$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/pfr/pfr.c b/src/pfr/pfr.c
deleted file mode 100644
index 4f31f5d9b..000000000
--- a/src/pfr/pfr.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfr.c */
-/* */
-/* FreeType PFR driver component. */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "pfrcmap.c"
-#include "pfrdrivr.c"
-#include "pfrgload.c"
-#include "pfrload.c"
-#include "pfrobjs.c"
-#include "pfrsbit.c"
-
-
-/* END */
diff --git a/src/pfr/pfrcmap.c b/src/pfr/pfrcmap.c
deleted file mode 100644
index 1d6b15be4..000000000
--- a/src/pfr/pfrcmap.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrcmap.c */
-/* */
-/* FreeType PFR cmap handling (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include "pfrcmap.h"
-#include "pfrobjs.h"
-
-#include "pfrerror.h"
-
-
- FT_CALLBACK_DEF( FT_Error )
- pfr_cmap_init( PFR_CMap cmap,
- FT_Pointer pointer )
- {
- FT_Error error = FT_Err_Ok;
- PFR_Face face = (PFR_Face)FT_CMAP_FACE( cmap );
-
- FT_UNUSED( pointer );
-
-
- cmap->num_chars = face->phy_font.num_chars;
- cmap->chars = face->phy_font.chars;
-
- /* just for safety, check that the character entries are correctly */
- /* sorted in increasing character code order */
- {
- FT_UInt n;
-
-
- for ( n = 1; n < cmap->num_chars; n++ )
- {
- if ( cmap->chars[n - 1].char_code >= cmap->chars[n].char_code )
- {
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
- }
- }
-
- Exit:
- return error;
- }
-
-
- FT_CALLBACK_DEF( void )
- pfr_cmap_done( PFR_CMap cmap )
- {
- cmap->chars = NULL;
- cmap->num_chars = 0;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- pfr_cmap_char_index( PFR_CMap cmap,
- FT_UInt32 char_code )
- {
- FT_UInt min = 0;
- FT_UInt max = cmap->num_chars;
-
-
- while ( min < max )
- {
- PFR_Char gchar;
- FT_UInt mid;
-
-
- mid = min + ( max - min ) / 2;
- gchar = cmap->chars + mid;
-
- if ( gchar->char_code == char_code )
- return mid + 1;
-
- if ( gchar->char_code < char_code )
- min = mid + 1;
- else
- max = mid;
- }
- return 0;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 )
- pfr_cmap_char_next( PFR_CMap cmap,
- FT_UInt32 *pchar_code )
- {
- FT_UInt result = 0;
- FT_UInt32 char_code = *pchar_code + 1;
-
-
- Restart:
- {
- FT_UInt min = 0;
- FT_UInt max = cmap->num_chars;
- FT_UInt mid;
- PFR_Char gchar;
-
-
- while ( min < max )
- {
- mid = min + ( ( max - min ) >> 1 );
- gchar = cmap->chars + mid;
-
- if ( gchar->char_code == char_code )
- {
- result = mid;
- if ( result != 0 )
- {
- result++;
- goto Exit;
- }
-
- char_code++;
- goto Restart;
- }
-
- if ( gchar->char_code < char_code )
- min = mid + 1;
- else
- max = mid;
- }
-
- /* we didn't find it, but we have a pair just above it */
- char_code = 0;
-
- if ( min < cmap->num_chars )
- {
- gchar = cmap->chars + min;
- result = min;
- if ( result != 0 )
- {
- result++;
- char_code = gchar->char_code;
- }
- }
- }
-
- Exit:
- *pchar_code = char_code;
- return result;
- }
-
-
- FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec
- pfr_cmap_class_rec =
- {
- sizeof ( PFR_CMapRec ),
-
- (FT_CMap_InitFunc) pfr_cmap_init, /* init */
- (FT_CMap_DoneFunc) pfr_cmap_done, /* done */
- (FT_CMap_CharIndexFunc)pfr_cmap_char_index, /* char_index */
- (FT_CMap_CharNextFunc) pfr_cmap_char_next, /* char_next */
-
- (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
- (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
- (FT_CMap_VariantListFunc) NULL, /* variant_list */
- (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
- (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
- };
-
-
-/* END */
diff --git a/src/pfr/pfrcmap.h b/src/pfr/pfrcmap.h
deleted file mode 100644
index 957bf65b4..000000000
--- a/src/pfr/pfrcmap.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrcmap.h */
-/* */
-/* FreeType PFR cmap handling (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PFRCMAP_H_
-#define PFRCMAP_H_
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include "pfrtypes.h"
-
-
-FT_BEGIN_HEADER
-
- typedef struct PFR_CMapRec_
- {
- FT_CMapRec cmap;
- FT_UInt num_chars;
- PFR_Char chars;
-
- } PFR_CMapRec, *PFR_CMap;
-
-
- FT_CALLBACK_TABLE const FT_CMap_ClassRec pfr_cmap_class_rec;
-
-FT_END_HEADER
-
-
-#endif /* PFRCMAP_H_ */
-
-
-/* END */
diff --git a/src/pfr/pfrdrivr.c b/src/pfr/pfrdrivr.c
deleted file mode 100644
index 195cdb76a..000000000
--- a/src/pfr/pfrdrivr.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrdrivr.c */
-/* */
-/* FreeType PFR driver interface (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_SERVICE_PFR_H
-#include FT_SERVICE_FONT_FORMAT_H
-#include "pfrdrivr.h"
-#include "pfrobjs.h"
-
-#include "pfrerror.h"
-
-
- FT_CALLBACK_DEF( FT_Error )
- pfr_get_kerning( FT_Face pfrface, /* PFR_Face */
- FT_UInt left,
- FT_UInt right,
- FT_Vector *avector )
- {
- PFR_Face face = (PFR_Face)pfrface;
- PFR_PhyFont phys = &face->phy_font;
-
-
- (void)pfr_face_get_kerning( pfrface, left, right, avector );
-
- /* convert from metrics to outline units when necessary */
- if ( phys->outline_resolution != phys->metrics_resolution )
- {
- if ( avector->x != 0 )
- avector->x = FT_MulDiv( avector->x,
- (FT_Long)phys->outline_resolution,
- (FT_Long)phys->metrics_resolution );
-
- if ( avector->y != 0 )
- avector->y = FT_MulDiv( avector->y,
- (FT_Long)phys->outline_resolution,
- (FT_Long)phys->metrics_resolution );
- }
-
- return FT_Err_Ok;
- }
-
-
- /*
- * PFR METRICS SERVICE
- *
- */
-
- FT_CALLBACK_DEF( FT_Error )
- pfr_get_advance( FT_Face pfrface, /* PFR_Face */
- FT_UInt gindex,
- FT_Pos *anadvance )
- {
- PFR_Face face = (PFR_Face)pfrface;
- FT_Error error = FT_ERR( Invalid_Argument );
-
-
- *anadvance = 0;
-
- if ( !gindex )
- goto Exit;
-
- gindex--;
-
- if ( face )
- {
- PFR_PhyFont phys = &face->phy_font;
-
-
- if ( gindex < phys->num_chars )
- {
- *anadvance = phys->chars[gindex].advance;
- error = FT_Err_Ok;
- }
- }
-
- Exit:
- return error;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- pfr_get_metrics( FT_Face pfrface, /* PFR_Face */
- FT_UInt *anoutline_resolution,
- FT_UInt *ametrics_resolution,
- FT_Fixed *ametrics_x_scale,
- FT_Fixed *ametrics_y_scale )
- {
- PFR_Face face = (PFR_Face)pfrface;
- PFR_PhyFont phys = &face->phy_font;
- FT_Fixed x_scale, y_scale;
- FT_Size size = face->root.size;
-
-
- if ( anoutline_resolution )
- *anoutline_resolution = phys->outline_resolution;
-
- if ( ametrics_resolution )
- *ametrics_resolution = phys->metrics_resolution;
-
- x_scale = 0x10000L;
- y_scale = 0x10000L;
-
- if ( size )
- {
- x_scale = FT_DivFix( size->metrics.x_ppem << 6,
- (FT_Long)phys->metrics_resolution );
-
- y_scale = FT_DivFix( size->metrics.y_ppem << 6,
- (FT_Long)phys->metrics_resolution );
- }
-
- if ( ametrics_x_scale )
- *ametrics_x_scale = x_scale;
-
- if ( ametrics_y_scale )
- *ametrics_y_scale = y_scale;
-
- return FT_Err_Ok;
- }
-
-
- static
- const FT_Service_PfrMetricsRec pfr_metrics_service_rec =
- {
- pfr_get_metrics, /* get_metrics */
- pfr_face_get_kerning, /* get_kerning */
- pfr_get_advance /* get_advance */
- };
-
-
- /*
- * SERVICE LIST
- *
- */
-
- static const FT_ServiceDescRec pfr_services[] =
- {
- { FT_SERVICE_ID_PFR_METRICS, &pfr_metrics_service_rec },
- { FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_PFR },
- { NULL, NULL }
- };
-
-
- FT_CALLBACK_DEF( FT_Module_Interface )
- pfr_get_service( FT_Module module,
- const FT_String* service_id )
- {
- FT_UNUSED( module );
-
- return ft_service_list_lookup( pfr_services, service_id );
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Driver_ClassRec pfr_driver_class =
- {
- {
- FT_MODULE_FONT_DRIVER |
- FT_MODULE_DRIVER_SCALABLE,
-
- sizeof ( FT_DriverRec ),
-
- "pfr",
- 0x10000L,
- 0x20000L,
-
- NULL, /* module-specific interface */
-
- NULL, /* FT_Module_Constructor module_init */
- NULL, /* FT_Module_Destructor module_done */
- pfr_get_service /* FT_Module_Requester get_interface */
- },
-
- sizeof ( PFR_FaceRec ),
- sizeof ( PFR_SizeRec ),
- sizeof ( PFR_SlotRec ),
-
- pfr_face_init, /* FT_Face_InitFunc init_face */
- pfr_face_done, /* FT_Face_DoneFunc done_face */
- NULL, /* FT_Size_InitFunc init_size */
- NULL, /* FT_Size_DoneFunc done_size */
- pfr_slot_init, /* FT_Slot_InitFunc init_slot */
- pfr_slot_done, /* FT_Slot_DoneFunc done_slot */
-
- pfr_slot_load, /* FT_Slot_LoadFunc load_glyph */
-
- pfr_get_kerning, /* FT_Face_GetKerningFunc get_kerning */
- NULL, /* FT_Face_AttachFunc attach_file */
- NULL, /* FT_Face_GetAdvancesFunc get_advances */
-
- NULL, /* FT_Size_RequestFunc request_size */
- NULL, /* FT_Size_SelectFunc select_size */
- };
-
-
-/* END */
diff --git a/src/pfr/pfrdrivr.h b/src/pfr/pfrdrivr.h
deleted file mode 100644
index b81d56017..000000000
--- a/src/pfr/pfrdrivr.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrdrivr.h */
-/* */
-/* High-level Type PFR driver interface (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PFRDRIVR_H_
-#define PFRDRIVR_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-
-
-FT_BEGIN_HEADER
-
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
-
- FT_EXPORT_VAR( const FT_Driver_ClassRec ) pfr_driver_class;
-
-
-FT_END_HEADER
-
-
-#endif /* PFRDRIVR_H_ */
-
-
-/* END */
diff --git a/src/pfr/pfrerror.h b/src/pfr/pfrerror.h
deleted file mode 100644
index ef044e32c..000000000
--- a/src/pfr/pfrerror.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrerror.h */
-/* */
-/* PFR error codes (specification only). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the PFR error enumeration constants. */
- /* */
- /*************************************************************************/
-
-#ifndef PFRERROR_H_
-#define PFRERROR_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX PFR_Err_
-#define FT_ERR_BASE FT_Mod_Err_PFR
-
-#include FT_ERRORS_H
-
-#endif /* PFRERROR_H_ */
-
-
-/* END */
diff --git a/src/pfr/pfrgload.c b/src/pfr/pfrgload.c
deleted file mode 100644
index 93f5fc709..000000000
--- a/src/pfr/pfrgload.c
+++ /dev/null
@@ -1,847 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrgload.c */
-/* */
-/* FreeType PFR glyph loader (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "pfrgload.h"
-#include "pfrsbit.h"
-#include "pfrload.h" /* for macro definitions */
-#include FT_INTERNAL_DEBUG_H
-
-#include "pfrerror.h"
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_pfr
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** PFR GLYPH BUILDER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_LOCAL_DEF( void )
- pfr_glyph_init( PFR_Glyph glyph,
- FT_GlyphLoader loader )
- {
- FT_ZERO( glyph );
-
- glyph->loader = loader;
- glyph->path_begun = 0;
-
- FT_GlyphLoader_Rewind( loader );
- }
-
-
- FT_LOCAL_DEF( void )
- pfr_glyph_done( PFR_Glyph glyph )
- {
- FT_Memory memory = glyph->loader->memory;
-
-
- FT_FREE( glyph->x_control );
- glyph->y_control = NULL;
-
- glyph->max_xy_control = 0;
-#if 0
- glyph->num_x_control = 0;
- glyph->num_y_control = 0;
-#endif
-
- FT_FREE( glyph->subs );
-
- glyph->max_subs = 0;
- glyph->num_subs = 0;
-
- glyph->loader = NULL;
- glyph->path_begun = 0;
- }
-
-
- /* close current contour, if any */
- static void
- pfr_glyph_close_contour( PFR_Glyph glyph )
- {
- FT_GlyphLoader loader = glyph->loader;
- FT_Outline* outline = &loader->current.outline;
- FT_Int last, first;
-
-
- if ( !glyph->path_begun )
- return;
-
- /* compute first and last point indices in current glyph outline */
- last = outline->n_points - 1;
- first = 0;
- if ( outline->n_contours > 0 )
- first = outline->contours[outline->n_contours - 1];
-
- /* if the last point falls on the same location as the first one */
- /* we need to delete it */
- if ( last > first )
- {
- FT_Vector* p1 = outline->points + first;
- FT_Vector* p2 = outline->points + last;
-
-
- if ( p1->x == p2->x && p1->y == p2->y )
- {
- outline->n_points--;
- last--;
- }
- }
-
- /* don't add empty contours */
- if ( last >= first )
- outline->contours[outline->n_contours++] = (short)last;
-
- glyph->path_begun = 0;
- }
-
-
- /* reset glyph to start the loading of a new glyph */
- static void
- pfr_glyph_start( PFR_Glyph glyph )
- {
- glyph->path_begun = 0;
- }
-
-
- static FT_Error
- pfr_glyph_line_to( PFR_Glyph glyph,
- FT_Vector* to )
- {
- FT_GlyphLoader loader = glyph->loader;
- FT_Outline* outline = &loader->current.outline;
- FT_Error error;
-
-
- /* check that we have begun a new path */
- if ( !glyph->path_begun )
- {
- error = FT_THROW( Invalid_Table );
- FT_ERROR(( "pfr_glyph_line_to: invalid glyph data\n" ));
- goto Exit;
- }
-
- error = FT_GLYPHLOADER_CHECK_POINTS( loader, 1, 0 );
- if ( !error )
- {
- FT_Int n = outline->n_points;
-
-
- outline->points[n] = *to;
- outline->tags [n] = FT_CURVE_TAG_ON;
-
- outline->n_points++;
- }
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- pfr_glyph_curve_to( PFR_Glyph glyph,
- FT_Vector* control1,
- FT_Vector* control2,
- FT_Vector* to )
- {
- FT_GlyphLoader loader = glyph->loader;
- FT_Outline* outline = &loader->current.outline;
- FT_Error error;
-
-
- /* check that we have begun a new path */
- if ( !glyph->path_begun )
- {
- error = FT_THROW( Invalid_Table );
- FT_ERROR(( "pfr_glyph_line_to: invalid glyph data\n" ));
- goto Exit;
- }
-
- error = FT_GLYPHLOADER_CHECK_POINTS( loader, 3, 0 );
- if ( !error )
- {
- FT_Vector* vec = outline->points + outline->n_points;
- FT_Byte* tag = (FT_Byte*)outline->tags + outline->n_points;
-
-
- vec[0] = *control1;
- vec[1] = *control2;
- vec[2] = *to;
- tag[0] = FT_CURVE_TAG_CUBIC;
- tag[1] = FT_CURVE_TAG_CUBIC;
- tag[2] = FT_CURVE_TAG_ON;
-
- outline->n_points = (FT_Short)( outline->n_points + 3 );
- }
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- pfr_glyph_move_to( PFR_Glyph glyph,
- FT_Vector* to )
- {
- FT_GlyphLoader loader = glyph->loader;
- FT_Error error;
-
-
- /* close current contour if any */
- pfr_glyph_close_contour( glyph );
-
- /* indicate that a new contour has started */
- glyph->path_begun = 1;
-
- /* check that there is space for a new contour and a new point */
- error = FT_GLYPHLOADER_CHECK_POINTS( loader, 1, 1 );
- if ( !error )
- {
- /* add new start point */
- error = pfr_glyph_line_to( glyph, to );
- }
-
- return error;
- }
-
-
- static void
- pfr_glyph_end( PFR_Glyph glyph )
- {
- /* close current contour if any */
- pfr_glyph_close_contour( glyph );
-
- /* merge the current glyph into the stack */
- FT_GlyphLoader_Add( glyph->loader );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** PFR GLYPH LOADER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* load a simple glyph */
- static FT_Error
- pfr_glyph_load_simple( PFR_Glyph glyph,
- FT_Byte* p,
- FT_Byte* limit )
- {
- FT_Error error = FT_Err_Ok;
- FT_Memory memory = glyph->loader->memory;
- FT_UInt flags, x_count, y_count, i, count, mask;
- FT_Int x;
-
-
- PFR_CHECK( 1 );
- flags = PFR_NEXT_BYTE( p );
-
- /* test for composite glyphs */
- if ( flags & PFR_GLYPH_IS_COMPOUND )
- goto Failure;
-
- x_count = 0;
- y_count = 0;
-
- if ( flags & PFR_GLYPH_1BYTE_XYCOUNT )
- {
- PFR_CHECK( 1 );
- count = PFR_NEXT_BYTE( p );
- x_count = count & 15;
- y_count = count >> 4;
- }
- else
- {
- if ( flags & PFR_GLYPH_XCOUNT )
- {
- PFR_CHECK( 1 );
- x_count = PFR_NEXT_BYTE( p );
- }
-
- if ( flags & PFR_GLYPH_YCOUNT )
- {
- PFR_CHECK( 1 );
- y_count = PFR_NEXT_BYTE( p );
- }
- }
-
- count = x_count + y_count;
-
- /* re-allocate array when necessary */
- if ( count > glyph->max_xy_control )
- {
- FT_UInt new_max = FT_PAD_CEIL( count, 8 );
-
-
- if ( FT_RENEW_ARRAY( glyph->x_control,
- glyph->max_xy_control,
- new_max ) )
- goto Exit;
-
- glyph->max_xy_control = new_max;
- }
-
- glyph->y_control = glyph->x_control + x_count;
-
- mask = 0;
- x = 0;
-
- for ( i = 0; i < count; i++ )
- {
- if ( ( i & 7 ) == 0 )
- {
- PFR_CHECK( 1 );
- mask = PFR_NEXT_BYTE( p );
- }
-
- if ( mask & 1 )
- {
- PFR_CHECK( 2 );
- x = PFR_NEXT_SHORT( p );
- }
- else
- {
- PFR_CHECK( 1 );
- x += PFR_NEXT_BYTE( p );
- }
-
- glyph->x_control[i] = x;
-
- mask >>= 1;
- }
-
- /* XXX: we ignore the secondary stroke and edge definitions */
- /* since we don't support native PFR hinting */
- /* */
- if ( flags & PFR_GLYPH_SINGLE_EXTRA_ITEMS )
- {
- error = pfr_extra_items_skip( &p, limit );
- if ( error )
- goto Exit;
- }
-
- pfr_glyph_start( glyph );
-
- /* now load a simple glyph */
- {
- FT_Vector pos[4];
- FT_Vector* cur;
-
-
- pos[0].x = pos[0].y = 0;
- pos[3] = pos[0];
-
- for (;;)
- {
- FT_UInt format, format_low, args_format = 0, args_count, n;
-
-
- /***************************************************************/
- /* read instruction */
- /* */
- PFR_CHECK( 1 );
- format = PFR_NEXT_BYTE( p );
- format_low = format & 15;
-
- switch ( format >> 4 )
- {
- case 0: /* end glyph */
- FT_TRACE6(( "- end glyph" ));
- args_count = 0;
- break;
-
- case 1: /* general line operation */
- FT_TRACE6(( "- general line" ));
- goto Line1;
-
- case 4: /* move to inside contour */
- FT_TRACE6(( "- move to inside" ));
- goto Line1;
-
- case 5: /* move to outside contour */
- FT_TRACE6(( "- move to outside" ));
- Line1:
- args_format = format_low;
- args_count = 1;
- break;
-
- case 2: /* horizontal line to */
- FT_TRACE6(( "- horizontal line to cx.%d", format_low ));
- if ( format_low >= x_count )
- goto Failure;
- pos[0].x = glyph->x_control[format_low];
- pos[0].y = pos[3].y;
- pos[3] = pos[0];
- args_count = 0;
- break;
-
- case 3: /* vertical line to */
- FT_TRACE6(( "- vertical line to cy.%d", format_low ));
- if ( format_low >= y_count )
- goto Failure;
- pos[0].x = pos[3].x;
- pos[0].y = glyph->y_control[format_low];
- pos[3] = pos[0];
- args_count = 0;
- break;
-
- case 6: /* horizontal to vertical curve */
- FT_TRACE6(( "- hv curve " ));
- args_format = 0xB8E;
- args_count = 3;
- break;
-
- case 7: /* vertical to horizontal curve */
- FT_TRACE6(( "- vh curve" ));
- args_format = 0xE2B;
- args_count = 3;
- break;
-
- default: /* general curve to */
- FT_TRACE6(( "- general curve" ));
- args_count = 4;
- args_format = format_low;
- }
-
- /***********************************************************/
- /* now read arguments */
- /* */
- cur = pos;
- for ( n = 0; n < args_count; n++ )
- {
- FT_UInt idx;
- FT_Int delta;
-
-
- /* read the X argument */
- switch ( args_format & 3 )
- {
- case 0: /* 8-bit index */
- PFR_CHECK( 1 );
- idx = PFR_NEXT_BYTE( p );
- if ( idx >= x_count )
- goto Failure;
- cur->x = glyph->x_control[idx];
- FT_TRACE7(( " cx#%d", idx ));
- break;
-
- case 1: /* 16-bit absolute value */
- PFR_CHECK( 2 );
- cur->x = PFR_NEXT_SHORT( p );
- FT_TRACE7(( " x.%d", cur->x ));
- break;
-
- case 2: /* 8-bit delta */
- PFR_CHECK( 1 );
- delta = PFR_NEXT_INT8( p );
- cur->x = pos[3].x + delta;
- FT_TRACE7(( " dx.%d", delta ));
- break;
-
- default:
- FT_TRACE7(( " |" ));
- cur->x = pos[3].x;
- }
-
- /* read the Y argument */
- switch ( ( args_format >> 2 ) & 3 )
- {
- case 0: /* 8-bit index */
- PFR_CHECK( 1 );
- idx = PFR_NEXT_BYTE( p );
- if ( idx >= y_count )
- goto Failure;
- cur->y = glyph->y_control[idx];
- FT_TRACE7(( " cy#%d", idx ));
- break;
-
- case 1: /* 16-bit absolute value */
- PFR_CHECK( 2 );
- cur->y = PFR_NEXT_SHORT( p );
- FT_TRACE7(( " y.%d", cur->y ));
- break;
-
- case 2: /* 8-bit delta */
- PFR_CHECK( 1 );
- delta = PFR_NEXT_INT8( p );
- cur->y = pos[3].y + delta;
- FT_TRACE7(( " dy.%d", delta ));
- break;
-
- default:
- FT_TRACE7(( " -" ));
- cur->y = pos[3].y;
- }
-
- /* read the additional format flag for the general curve */
- if ( n == 0 && args_count == 4 )
- {
- PFR_CHECK( 1 );
- args_format = PFR_NEXT_BYTE( p );
- args_count--;
- }
- else
- args_format >>= 4;
-
- /* save the previous point */
- pos[3] = cur[0];
- cur++;
- }
-
- FT_TRACE7(( "\n" ));
-
- /***********************************************************/
- /* finally, execute instruction */
- /* */
- switch ( format >> 4 )
- {
- case 0: /* end glyph => EXIT */
- pfr_glyph_end( glyph );
- goto Exit;
-
- case 1: /* line operations */
- case 2:
- case 3:
- error = pfr_glyph_line_to( glyph, pos );
- goto Test_Error;
-
- case 4: /* move to inside contour */
- case 5: /* move to outside contour */
- error = pfr_glyph_move_to( glyph, pos );
- goto Test_Error;
-
- default: /* curve operations */
- error = pfr_glyph_curve_to( glyph, pos, pos + 1, pos + 2 );
-
- Test_Error: /* test error condition */
- if ( error )
- goto Exit;
- }
- } /* for (;;) */
- }
-
- Exit:
- return error;
-
- Failure:
- Too_Short:
- error = FT_THROW( Invalid_Table );
- FT_ERROR(( "pfr_glyph_load_simple: invalid glyph data\n" ));
- goto Exit;
- }
-
-
- /* load a composite/compound glyph */
- static FT_Error
- pfr_glyph_load_compound( PFR_Glyph glyph,
- FT_Byte* p,
- FT_Byte* limit )
- {
- FT_Error error = FT_Err_Ok;
- FT_GlyphLoader loader = glyph->loader;
- FT_Memory memory = loader->memory;
- PFR_SubGlyph subglyph;
- FT_UInt flags, i, count, org_count;
- FT_Int x_pos, y_pos;
-
-
- PFR_CHECK( 1 );
- flags = PFR_NEXT_BYTE( p );
-
- /* test for composite glyphs */
- if ( !( flags & PFR_GLYPH_IS_COMPOUND ) )
- goto Failure;
-
- count = flags & 0x3F;
-
- /* ignore extra items when present */
- /* */
- if ( flags & PFR_GLYPH_COMPOUND_EXTRA_ITEMS )
- {
- error = pfr_extra_items_skip( &p, limit );
- if ( error )
- goto Exit;
- }
-
- /* we can't rely on the FT_GlyphLoader to load sub-glyphs, because */
- /* the PFR format is dumb, using direct file offsets to point to the */
- /* sub-glyphs (instead of glyph indices). Sigh. */
- /* */
- /* For now, we load the list of sub-glyphs into a different array */
- /* but this will prevent us from using the auto-hinter at its best */
- /* quality. */
- /* */
- org_count = glyph->num_subs;
-
- if ( org_count + count > glyph->max_subs )
- {
- FT_UInt new_max = ( org_count + count + 3 ) & (FT_UInt)-4;
-
-
- /* we arbitrarily limit the number of subglyphs */
- /* to avoid endless recursion */
- if ( new_max > 64 )
- {
- error = FT_THROW( Invalid_Table );
- FT_ERROR(( "pfr_glyph_load_compound:"
- " too many compound glyphs components\n" ));
- goto Exit;
- }
-
- if ( FT_RENEW_ARRAY( glyph->subs, glyph->max_subs, new_max ) )
- goto Exit;
-
- glyph->max_subs = new_max;
- }
-
- subglyph = glyph->subs + org_count;
-
- for ( i = 0; i < count; i++, subglyph++ )
- {
- FT_UInt format;
-
-
- x_pos = 0;
- y_pos = 0;
-
- PFR_CHECK( 1 );
- format = PFR_NEXT_BYTE( p );
-
- /* read scale when available */
- subglyph->x_scale = 0x10000L;
- if ( format & PFR_SUBGLYPH_XSCALE )
- {
- PFR_CHECK( 2 );
- subglyph->x_scale = PFR_NEXT_SHORT( p ) * 16;
- }
-
- subglyph->y_scale = 0x10000L;
- if ( format & PFR_SUBGLYPH_YSCALE )
- {
- PFR_CHECK( 2 );
- subglyph->y_scale = PFR_NEXT_SHORT( p ) * 16;
- }
-
- /* read offset */
- switch ( format & 3 )
- {
- case 1:
- PFR_CHECK( 2 );
- x_pos = PFR_NEXT_SHORT( p );
- break;
-
- case 2:
- PFR_CHECK( 1 );
- x_pos += PFR_NEXT_INT8( p );
- break;
-
- default:
- ;
- }
-
- switch ( ( format >> 2 ) & 3 )
- {
- case 1:
- PFR_CHECK( 2 );
- y_pos = PFR_NEXT_SHORT( p );
- break;
-
- case 2:
- PFR_CHECK( 1 );
- y_pos += PFR_NEXT_INT8( p );
- break;
-
- default:
- ;
- }
-
- subglyph->x_delta = x_pos;
- subglyph->y_delta = y_pos;
-
- /* read glyph position and size now */
- if ( format & PFR_SUBGLYPH_2BYTE_SIZE )
- {
- PFR_CHECK( 2 );
- subglyph->gps_size = PFR_NEXT_USHORT( p );
- }
- else
- {
- PFR_CHECK( 1 );
- subglyph->gps_size = PFR_NEXT_BYTE( p );
- }
-
- if ( format & PFR_SUBGLYPH_3BYTE_OFFSET )
- {
- PFR_CHECK( 3 );
- subglyph->gps_offset = PFR_NEXT_ULONG( p );
- }
- else
- {
- PFR_CHECK( 2 );
- subglyph->gps_offset = PFR_NEXT_USHORT( p );
- }
-
- glyph->num_subs++;
- }
-
- Exit:
- return error;
-
- Failure:
- Too_Short:
- error = FT_THROW( Invalid_Table );
- FT_ERROR(( "pfr_glyph_load_compound: invalid glyph data\n" ));
- goto Exit;
- }
-
-
- static FT_Error
- pfr_glyph_load_rec( PFR_Glyph glyph,
- FT_Stream stream,
- FT_ULong gps_offset,
- FT_ULong offset,
- FT_ULong size )
- {
- FT_Error error;
- FT_Byte* p;
- FT_Byte* limit;
-
-
- if ( FT_STREAM_SEEK( gps_offset + offset ) ||
- FT_FRAME_ENTER( size ) )
- goto Exit;
-
- p = (FT_Byte*)stream->cursor;
- limit = p + size;
-
- if ( size > 0 && *p & PFR_GLYPH_IS_COMPOUND )
- {
- FT_UInt n, old_count, count;
- FT_GlyphLoader loader = glyph->loader;
- FT_Outline* base = &loader->base.outline;
-
-
- old_count = glyph->num_subs;
-
- /* this is a compound glyph - load it */
- error = pfr_glyph_load_compound( glyph, p, limit );
-
- FT_FRAME_EXIT();
-
- if ( error )
- goto Exit;
-
- count = glyph->num_subs - old_count;
-
- FT_TRACE4(( "compound glyph with %d elements (offset %lu):\n",
- count, offset ));
-
- /* now, load each individual glyph */
- for ( n = 0; n < count; n++ )
- {
- FT_Int i, old_points, num_points;
- PFR_SubGlyph subglyph;
-
-
- FT_TRACE4(( " subglyph %d:\n", n ));
-
- subglyph = glyph->subs + old_count + n;
- old_points = base->n_points;
-
- error = pfr_glyph_load_rec( glyph, stream, gps_offset,
- subglyph->gps_offset,
- subglyph->gps_size );
- if ( error )
- break;
-
- /* note that `glyph->subs' might have been re-allocated */
- subglyph = glyph->subs + old_count + n;
- num_points = base->n_points - old_points;
-
- /* translate and eventually scale the new glyph points */
- if ( subglyph->x_scale != 0x10000L || subglyph->y_scale != 0x10000L )
- {
- FT_Vector* vec = base->points + old_points;
-
-
- for ( i = 0; i < num_points; i++, vec++ )
- {
- vec->x = FT_MulFix( vec->x, subglyph->x_scale ) +
- subglyph->x_delta;
- vec->y = FT_MulFix( vec->y, subglyph->y_scale ) +
- subglyph->y_delta;
- }
- }
- else
- {
- FT_Vector* vec = loader->base.outline.points + old_points;
-
-
- for ( i = 0; i < num_points; i++, vec++ )
- {
- vec->x += subglyph->x_delta;
- vec->y += subglyph->y_delta;
- }
- }
-
- /* proceed to next sub-glyph */
- }
-
- FT_TRACE4(( "end compound glyph with %d elements\n", count ));
- }
- else
- {
- FT_TRACE4(( "simple glyph (offset %lu)\n", offset ));
-
- /* load a simple glyph */
- error = pfr_glyph_load_simple( glyph, p, limit );
-
- FT_FRAME_EXIT();
- }
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- pfr_glyph_load( PFR_Glyph glyph,
- FT_Stream stream,
- FT_ULong gps_offset,
- FT_ULong offset,
- FT_ULong size )
- {
- /* initialize glyph loader */
- FT_GlyphLoader_Rewind( glyph->loader );
-
- glyph->num_subs = 0;
-
- /* load the glyph, recursively when needed */
- return pfr_glyph_load_rec( glyph, stream, gps_offset, offset, size );
- }
-
-
-/* END */
diff --git a/src/pfr/pfrgload.h b/src/pfr/pfrgload.h
deleted file mode 100644
index 661232387..000000000
--- a/src/pfr/pfrgload.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrgload.h */
-/* */
-/* FreeType PFR glyph loader (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PFRGLOAD_H_
-#define PFRGLOAD_H_
-
-#include "pfrtypes.h"
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( void )
- pfr_glyph_init( PFR_Glyph glyph,
- FT_GlyphLoader loader );
-
- FT_LOCAL( void )
- pfr_glyph_done( PFR_Glyph glyph );
-
-
- FT_LOCAL( FT_Error )
- pfr_glyph_load( PFR_Glyph glyph,
- FT_Stream stream,
- FT_ULong gps_offset,
- FT_ULong offset,
- FT_ULong size );
-
-
-FT_END_HEADER
-
-
-#endif /* PFRGLOAD_H_ */
-
-
-/* END */
diff --git a/src/pfr/pfrload.c b/src/pfr/pfrload.c
deleted file mode 100644
index 4f8416582..000000000
--- a/src/pfr/pfrload.c
+++ /dev/null
@@ -1,1049 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrload.c */
-/* */
-/* FreeType PFR loader (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "pfrload.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-
-#include "pfrerror.h"
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_pfr
-
-
- /*
- * The overall structure of a PFR file is as follows.
- *
- * PFR header
- * 58 bytes (contains nPhysFonts)
- *
- * Logical font directory (size at most 2^16 bytes)
- * 2 bytes (nLogFonts)
- * + nLogFonts * 5 bytes
- *
- * ==> nLogFonts <= 13106
- *
- * Logical font section (size at most 2^24 bytes)
- * nLogFonts * logFontRecord
- *
- * logFontRecord (size at most 2^16 bytes)
- * 12 bytes (fontMatrix)
- * + 1 byte (flags)
- * + 0-5 bytes (depending on `flags')
- * + 0-(1+255*(2+255)) = 0-65536 (depending on `flags')
- * + 5 bytes (physical font info)
- * + 0-1 bytes (depending on PFR header)
- *
- * ==> minimum size 18 bytes
- *
- * Physical font section (size at most 2^24 bytes)
- * nPhysFonts * (physFontRecord
- * + nBitmapSizes * nBmapChars * bmapCharRecord)
- *
- * physFontRecord (size at most 2^24 bytes)
- * 14 bytes (font info)
- * + 1 byte (flags)
- * + 0-2 (depending on `flags')
- * + 0-? (structure too complicated to be shown here; depending on
- * `flags'; contains `nBitmapSizes' and `nBmapChars')
- * + 3 bytes (nAuxBytes)
- * + nAuxBytes
- * + 1 byte (nBlueValues)
- * + 2 * nBlueValues
- * + 6 bytes (hinting data)
- * + 2 bytes (nCharacters)
- * + nCharacters * (4-10 bytes) (depending on `flags')
- *
- * ==> minimum size 27 bytes
- *
- * bmapCharRecord
- * 4-7 bytes
- *
- * Glyph program strings (three possible types: simpleGps, compoundGps,
- * and bitmapGps; size at most 2^24 bytes)
- * simpleGps (size at most 2^16 bytes)
- * 1 byte (flags)
- * 1-2 bytes (n[XY]orus, depending on `flags')
- * 0-(64+512*2) = 0-1088 bytes (depending on `n[XY]orus')
- * 0-? (structure too complicated to be shown here; depending on
- * `flags')
- * 1-? glyph data (faintly resembling PS Type 1 charstrings)
- *
- * ==> minimum size 3 bytes
- *
- * compoundGps (size at most 2^16 bytes)
- * 1 byte (nElements <= 63, flags)
- * + 0-(1+255*(2+255)) = 0-65536 (depending on `flags')
- * + nElements * (6-14 bytes)
- *
- * bitmapGps (size at most 2^16 bytes)
- * 1 byte (flags)
- * 3-13 bytes (position info, depending on `flags')
- * 0-? bitmap data
- *
- * ==> minimum size 4 bytes
- *
- * PFR trailer
- * 8 bytes
- *
- *
- * ==> minimum size of a valid PFR:
- * 58 (header)
- * + 2 (nLogFonts)
- * + 27 (1 physFontRecord)
- * + 8 (trailer)
- * -----
- * 95 bytes
- *
- */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** EXTRA ITEMS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_LOCAL_DEF( FT_Error )
- pfr_extra_items_skip( FT_Byte* *pp,
- FT_Byte* limit )
- {
- return pfr_extra_items_parse( pp, limit, NULL, NULL );
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- pfr_extra_items_parse( FT_Byte* *pp,
- FT_Byte* limit,
- PFR_ExtraItem item_list,
- FT_Pointer item_data )
- {
- FT_Error error = FT_Err_Ok;
- FT_Byte* p = *pp;
- FT_UInt num_items, item_type, item_size;
-
-
- PFR_CHECK( 1 );
- num_items = PFR_NEXT_BYTE( p );
-
- for ( ; num_items > 0; num_items-- )
- {
- PFR_CHECK( 2 );
- item_size = PFR_NEXT_BYTE( p );
- item_type = PFR_NEXT_BYTE( p );
-
- PFR_CHECK( item_size );
-
- if ( item_list )
- {
- PFR_ExtraItem extra = item_list;
-
-
- for ( extra = item_list; extra->parser != NULL; extra++ )
- {
- if ( extra->type == item_type )
- {
- error = extra->parser( p, p + item_size, item_data );
- if ( error )
- goto Exit;
-
- break;
- }
- }
- }
-
- p += item_size;
- }
-
- Exit:
- *pp = p;
- return error;
-
- Too_Short:
- FT_ERROR(( "pfr_extra_items_parse: invalid extra items table\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** PFR HEADER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static const FT_Frame_Field pfr_header_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PFR_HeaderRec
-
- FT_FRAME_START( 58 ),
- FT_FRAME_ULONG ( signature ),
- FT_FRAME_USHORT( version ),
- FT_FRAME_USHORT( signature2 ),
- FT_FRAME_USHORT( header_size ),
-
- FT_FRAME_USHORT( log_dir_size ),
- FT_FRAME_USHORT( log_dir_offset ),
-
- FT_FRAME_USHORT( log_font_max_size ),
- FT_FRAME_UOFF3 ( log_font_section_size ),
- FT_FRAME_UOFF3 ( log_font_section_offset ),
-
- FT_FRAME_USHORT( phy_font_max_size ),
- FT_FRAME_UOFF3 ( phy_font_section_size ),
- FT_FRAME_UOFF3 ( phy_font_section_offset ),
-
- FT_FRAME_USHORT( gps_max_size ),
- FT_FRAME_UOFF3 ( gps_section_size ),
- FT_FRAME_UOFF3 ( gps_section_offset ),
-
- FT_FRAME_BYTE ( max_blue_values ),
- FT_FRAME_BYTE ( max_x_orus ),
- FT_FRAME_BYTE ( max_y_orus ),
-
- FT_FRAME_BYTE ( phy_font_max_size_high ),
- FT_FRAME_BYTE ( color_flags ),
-
- FT_FRAME_UOFF3 ( bct_max_size ),
- FT_FRAME_UOFF3 ( bct_set_max_size ),
- FT_FRAME_UOFF3 ( phy_bct_set_max_size ),
-
- FT_FRAME_USHORT( num_phy_fonts ),
- FT_FRAME_BYTE ( max_vert_stem_snap ),
- FT_FRAME_BYTE ( max_horz_stem_snap ),
- FT_FRAME_USHORT( max_chars ),
- FT_FRAME_END
- };
-
-
- FT_LOCAL_DEF( FT_Error )
- pfr_header_load( PFR_Header header,
- FT_Stream stream )
- {
- FT_Error error;
-
-
- /* read header directly */
- if ( !FT_STREAM_SEEK( 0 ) &&
- !FT_STREAM_READ_FIELDS( pfr_header_fields, header ) )
- {
- /* make a few adjustments to the header */
- header->phy_font_max_size +=
- (FT_UInt32)header->phy_font_max_size_high << 16;
- }
-
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- pfr_header_check( PFR_Header header )
- {
- FT_Bool result = 1;
-
-
- /* check signature and header size */
- if ( header->signature != 0x50465230L || /* "PFR0" */
- header->version > 4 ||
- header->header_size < 58 ||
- header->signature2 != 0x0D0A ) /* CR/LF */
- {
- result = 0;
- }
-
- return result;
- }
-
-
- /***********************************************************************/
- /***********************************************************************/
- /***** *****/
- /***** PFR LOGICAL FONTS *****/
- /***** *****/
- /***********************************************************************/
- /***********************************************************************/
-
-
- FT_LOCAL_DEF( FT_Error )
- pfr_log_font_count( FT_Stream stream,
- FT_UInt32 section_offset,
- FT_Long *acount )
- {
- FT_Error error;
- FT_UInt count;
- FT_UInt result = 0;
-
-
- if ( FT_STREAM_SEEK( section_offset ) ||
- FT_READ_USHORT( count ) )
- goto Exit;
-
- /* check maximum value and a rough minimum size: */
- /* - no more than 13106 log fonts */
- /* - we need 5 bytes for a log header record */
- /* - we need at least 18 bytes for a log font record */
- /* - the overall size is at least 95 bytes plus the */
- /* log header and log font records */
- if ( count > ( ( 1 << 16 ) - 2 ) / 5 ||
- 2 + count * 5 >= stream->size - section_offset ||
- 95 + count * ( 5 + 18 ) >= stream->size )
- {
- FT_ERROR(( "pfr_log_font_count:"
- " invalid number of logical fonts\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- result = count;
-
- Exit:
- *acount = (FT_Long)result;
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- pfr_log_font_load( PFR_LogFont log_font,
- FT_Stream stream,
- FT_UInt idx,
- FT_UInt32 section_offset,
- FT_Bool size_increment )
- {
- FT_UInt num_log_fonts;
- FT_UInt flags;
- FT_UInt32 offset;
- FT_UInt32 size;
- FT_Error error;
-
-
- if ( FT_STREAM_SEEK( section_offset ) ||
- FT_READ_USHORT( num_log_fonts ) )
- goto Exit;
-
- if ( idx >= num_log_fonts )
- return FT_THROW( Invalid_Argument );
-
- if ( FT_STREAM_SKIP( idx * 5 ) ||
- FT_READ_USHORT( size ) ||
- FT_READ_UOFF3 ( offset ) )
- goto Exit;
-
- /* save logical font size and offset */
- log_font->size = size;
- log_font->offset = offset;
-
- /* now, check the rest of the table before loading it */
- {
- FT_Byte* p;
- FT_Byte* limit;
- FT_UInt local;
-
-
- if ( FT_STREAM_SEEK( offset ) ||
- FT_FRAME_ENTER( size ) )
- goto Exit;
-
- p = stream->cursor;
- limit = p + size;
-
- PFR_CHECK( 13 );
-
- log_font->matrix[0] = PFR_NEXT_LONG( p );
- log_font->matrix[1] = PFR_NEXT_LONG( p );
- log_font->matrix[2] = PFR_NEXT_LONG( p );
- log_font->matrix[3] = PFR_NEXT_LONG( p );
-
- flags = PFR_NEXT_BYTE( p );
-
- local = 0;
- if ( flags & PFR_LOG_STROKE )
- {
- local++;
- if ( flags & PFR_LOG_2BYTE_STROKE )
- local++;
-
- if ( ( flags & PFR_LINE_JOIN_MASK ) == PFR_LINE_JOIN_MITER )
- local += 3;
- }
- if ( flags & PFR_LOG_BOLD )
- {
- local++;
- if ( flags & PFR_LOG_2BYTE_BOLD )
- local++;
- }
-
- PFR_CHECK( local );
-
- if ( flags & PFR_LOG_STROKE )
- {
- log_font->stroke_thickness = ( flags & PFR_LOG_2BYTE_STROKE )
- ? PFR_NEXT_SHORT( p )
- : PFR_NEXT_BYTE( p );
-
- if ( ( flags & PFR_LINE_JOIN_MASK ) == PFR_LINE_JOIN_MITER )
- log_font->miter_limit = PFR_NEXT_LONG( p );
- }
-
- if ( flags & PFR_LOG_BOLD )
- {
- log_font->bold_thickness = ( flags & PFR_LOG_2BYTE_BOLD )
- ? PFR_NEXT_SHORT( p )
- : PFR_NEXT_BYTE( p );
- }
-
- if ( flags & PFR_LOG_EXTRA_ITEMS )
- {
- error = pfr_extra_items_skip( &p, limit );
- if ( error )
- goto Fail;
- }
-
- PFR_CHECK( 5 );
- log_font->phys_size = PFR_NEXT_USHORT( p );
- log_font->phys_offset = PFR_NEXT_ULONG( p );
- if ( size_increment )
- {
- PFR_CHECK( 1 );
- log_font->phys_size += (FT_UInt32)PFR_NEXT_BYTE( p ) << 16;
- }
- }
-
- Fail:
- FT_FRAME_EXIT();
-
- Exit:
- return error;
-
- Too_Short:
- FT_ERROR(( "pfr_log_font_load: invalid logical font table\n" ));
- error = FT_THROW( Invalid_Table );
- goto Fail;
- }
-
-
- /***********************************************************************/
- /***********************************************************************/
- /***** *****/
- /***** PFR PHYSICAL FONTS *****/
- /***** *****/
- /***********************************************************************/
- /***********************************************************************/
-
-
- /* load bitmap strikes lists */
- FT_CALLBACK_DEF( FT_Error )
- pfr_extra_item_load_bitmap_info( FT_Byte* p,
- FT_Byte* limit,
- PFR_PhyFont phy_font )
- {
- FT_Memory memory = phy_font->memory;
- PFR_Strike strike;
- FT_UInt flags0;
- FT_UInt n, count, size1;
- FT_Error error = FT_Err_Ok;
-
-
- PFR_CHECK( 5 );
-
- p += 3; /* skip bctSize */
- flags0 = PFR_NEXT_BYTE( p );
- count = PFR_NEXT_BYTE( p );
-
- /* re-allocate when needed */
- if ( phy_font->num_strikes + count > phy_font->max_strikes )
- {
- FT_UInt new_max = FT_PAD_CEIL( phy_font->num_strikes + count, 4 );
-
-
- if ( FT_RENEW_ARRAY( phy_font->strikes,
- phy_font->num_strikes,
- new_max ) )
- goto Exit;
-
- phy_font->max_strikes = new_max;
- }
-
- size1 = 1 + 1 + 1 + 2 + 2 + 1;
- if ( flags0 & PFR_STRIKE_2BYTE_XPPM )
- size1++;
-
- if ( flags0 & PFR_STRIKE_2BYTE_YPPM )
- size1++;
-
- if ( flags0 & PFR_STRIKE_3BYTE_SIZE )
- size1++;
-
- if ( flags0 & PFR_STRIKE_3BYTE_OFFSET )
- size1++;
-
- if ( flags0 & PFR_STRIKE_2BYTE_COUNT )
- size1++;
-
- strike = phy_font->strikes + phy_font->num_strikes;
-
- PFR_CHECK( count * size1 );
-
- for ( n = 0; n < count; n++, strike++ )
- {
- strike->x_ppm = ( flags0 & PFR_STRIKE_2BYTE_XPPM )
- ? PFR_NEXT_USHORT( p )
- : PFR_NEXT_BYTE( p );
-
- strike->y_ppm = ( flags0 & PFR_STRIKE_2BYTE_YPPM )
- ? PFR_NEXT_USHORT( p )
- : PFR_NEXT_BYTE( p );
-
- strike->flags = PFR_NEXT_BYTE( p );
-
- strike->bct_size = ( flags0 & PFR_STRIKE_3BYTE_SIZE )
- ? PFR_NEXT_ULONG( p )
- : PFR_NEXT_USHORT( p );
-
- strike->bct_offset = ( flags0 & PFR_STRIKE_3BYTE_OFFSET )
- ? PFR_NEXT_ULONG( p )
- : PFR_NEXT_USHORT( p );
-
- strike->num_bitmaps = ( flags0 & PFR_STRIKE_2BYTE_COUNT )
- ? PFR_NEXT_USHORT( p )
- : PFR_NEXT_BYTE( p );
- }
-
- phy_font->num_strikes += count;
-
- Exit:
- return error;
-
- Too_Short:
- error = FT_THROW( Invalid_Table );
- FT_ERROR(( "pfr_extra_item_load_bitmap_info:"
- " invalid bitmap info table\n" ));
- goto Exit;
- }
-
-
- /* Load font ID. This is a so-called `unique' name that is rather
- * long and descriptive (like `Tiresias ScreenFont v7.51').
- *
- * Note that a PFR font's family name is contained in an *undocumented*
- * string of the `auxiliary data' portion of a physical font record. This
- * may also contain the `real' style name!
- *
- * If no family name is present, the font ID is used instead for the
- * family.
- */
- FT_CALLBACK_DEF( FT_Error )
- pfr_extra_item_load_font_id( FT_Byte* p,
- FT_Byte* limit,
- PFR_PhyFont phy_font )
- {
- FT_Error error = FT_Err_Ok;
- FT_Memory memory = phy_font->memory;
- FT_UInt len = (FT_UInt)( limit - p );
-
-
- if ( phy_font->font_id )
- goto Exit;
-
- if ( FT_ALLOC( phy_font->font_id, len + 1 ) )
- goto Exit;
-
- /* copy font ID name, and terminate it for safety */
- FT_MEM_COPY( phy_font->font_id, p, len );
- phy_font->font_id[len] = 0;
-
- Exit:
- return error;
- }
-
-
- /* load stem snap tables */
- FT_CALLBACK_DEF( FT_Error )
- pfr_extra_item_load_stem_snaps( FT_Byte* p,
- FT_Byte* limit,
- PFR_PhyFont phy_font )
- {
- FT_UInt count, num_vert, num_horz;
- FT_Int* snaps = NULL;
- FT_Error error = FT_Err_Ok;
- FT_Memory memory = phy_font->memory;
-
-
- if ( phy_font->vertical.stem_snaps )
- goto Exit;
-
- PFR_CHECK( 1 );
- count = PFR_NEXT_BYTE( p );
-
- num_vert = count & 15;
- num_horz = count >> 4;
- count = num_vert + num_horz;
-
- PFR_CHECK( count * 2 );
-
- if ( FT_NEW_ARRAY( snaps, count ) )
- goto Exit;
-
- phy_font->vertical.stem_snaps = snaps;
- phy_font->horizontal.stem_snaps = snaps + num_vert;
-
- for ( ; count > 0; count--, snaps++ )
- *snaps = FT_NEXT_SHORT( p );
-
- Exit:
- return error;
-
- Too_Short:
- error = FT_THROW( Invalid_Table );
- FT_ERROR(( "pfr_extra_item_load_stem_snaps:"
- " invalid stem snaps table\n" ));
- goto Exit;
- }
-
-
-
- /* load kerning pair data */
- FT_CALLBACK_DEF( FT_Error )
- pfr_extra_item_load_kerning_pairs( FT_Byte* p,
- FT_Byte* limit,
- PFR_PhyFont phy_font )
- {
- PFR_KernItem item = NULL;
- FT_Error error = FT_Err_Ok;
- FT_Memory memory = phy_font->memory;
-
-
- if ( FT_NEW( item ) )
- goto Exit;
-
- PFR_CHECK( 4 );
-
- item->pair_count = PFR_NEXT_BYTE( p );
- item->base_adj = PFR_NEXT_SHORT( p );
- item->flags = PFR_NEXT_BYTE( p );
- item->offset = phy_font->offset +
- (FT_Offset)( p - phy_font->cursor );
-
-#ifndef PFR_CONFIG_NO_CHECKS
- item->pair_size = 3;
-
- if ( item->flags & PFR_KERN_2BYTE_CHAR )
- item->pair_size += 2;
-
- if ( item->flags & PFR_KERN_2BYTE_ADJ )
- item->pair_size += 1;
-
- PFR_CHECK( item->pair_count * item->pair_size );
-#endif
-
- /* load first and last pairs into the item to speed up */
- /* lookup later... */
- if ( item->pair_count > 0 )
- {
- FT_UInt char1, char2;
- FT_Byte* q;
-
-
- if ( item->flags & PFR_KERN_2BYTE_CHAR )
- {
- q = p;
- char1 = PFR_NEXT_USHORT( q );
- char2 = PFR_NEXT_USHORT( q );
-
- item->pair1 = PFR_KERN_INDEX( char1, char2 );
-
- q = p + item->pair_size * ( item->pair_count - 1 );
- char1 = PFR_NEXT_USHORT( q );
- char2 = PFR_NEXT_USHORT( q );
-
- item->pair2 = PFR_KERN_INDEX( char1, char2 );
- }
- else
- {
- q = p;
- char1 = PFR_NEXT_BYTE( q );
- char2 = PFR_NEXT_BYTE( q );
-
- item->pair1 = PFR_KERN_INDEX( char1, char2 );
-
- q = p + item->pair_size * ( item->pair_count - 1 );
- char1 = PFR_NEXT_BYTE( q );
- char2 = PFR_NEXT_BYTE( q );
-
- item->pair2 = PFR_KERN_INDEX( char1, char2 );
- }
-
- /* add new item to the current list */
- item->next = NULL;
- *phy_font->kern_items_tail = item;
- phy_font->kern_items_tail = &item->next;
- phy_font->num_kern_pairs += item->pair_count;
- }
- else
- {
- /* empty item! */
- FT_FREE( item );
- }
-
- Exit:
- return error;
-
- Too_Short:
- FT_FREE( item );
-
- error = FT_THROW( Invalid_Table );
- FT_ERROR(( "pfr_extra_item_load_kerning_pairs:"
- " invalid kerning pairs table\n" ));
- goto Exit;
- }
-
-
- static const PFR_ExtraItemRec pfr_phy_font_extra_items[] =
- {
- { 1, (PFR_ExtraItem_ParseFunc)pfr_extra_item_load_bitmap_info },
- { 2, (PFR_ExtraItem_ParseFunc)pfr_extra_item_load_font_id },
- { 3, (PFR_ExtraItem_ParseFunc)pfr_extra_item_load_stem_snaps },
- { 4, (PFR_ExtraItem_ParseFunc)pfr_extra_item_load_kerning_pairs },
- { 0, NULL }
- };
-
-
- /*
- * Load a name from the auxiliary data. Since this extracts undocumented
- * strings from the font file, we need to be careful here.
- */
- static FT_Error
- pfr_aux_name_load( FT_Byte* p,
- FT_UInt len,
- FT_Memory memory,
- FT_String* *astring )
- {
- FT_Error error = FT_Err_Ok;
- FT_String* result = NULL;
- FT_UInt n, ok;
-
-
- if ( *astring )
- FT_FREE( *astring );
-
- if ( len > 0 && p[len - 1] == 0 )
- len--;
-
- /* check that each character is ASCII */
- /* for making sure not to load garbage */
- ok = ( len > 0 );
- for ( n = 0; n < len; n++ )
- if ( p[n] < 32 || p[n] > 127 )
- {
- ok = 0;
- break;
- }
-
- if ( ok )
- {
- if ( FT_ALLOC( result, len + 1 ) )
- goto Exit;
-
- FT_MEM_COPY( result, p, len );
- result[len] = 0;
- }
-
- Exit:
- *astring = result;
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- pfr_phy_font_done( PFR_PhyFont phy_font,
- FT_Memory memory )
- {
- FT_FREE( phy_font->font_id );
- FT_FREE( phy_font->family_name );
- FT_FREE( phy_font->style_name );
-
- FT_FREE( phy_font->vertical.stem_snaps );
- phy_font->vertical.num_stem_snaps = 0;
-
- phy_font->horizontal.stem_snaps = NULL;
- phy_font->horizontal.num_stem_snaps = 0;
-
- FT_FREE( phy_font->strikes );
- phy_font->num_strikes = 0;
- phy_font->max_strikes = 0;
-
- FT_FREE( phy_font->chars );
- phy_font->num_chars = 0;
- phy_font->chars_offset = 0;
-
- FT_FREE( phy_font->blue_values );
- phy_font->num_blue_values = 0;
-
- {
- PFR_KernItem item, next;
-
-
- item = phy_font->kern_items;
- while ( item )
- {
- next = item->next;
- FT_FREE( item );
- item = next;
- }
- phy_font->kern_items = NULL;
- phy_font->kern_items_tail = NULL;
- }
-
- phy_font->num_kern_pairs = 0;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- pfr_phy_font_load( PFR_PhyFont phy_font,
- FT_Stream stream,
- FT_UInt32 offset,
- FT_UInt32 size )
- {
- FT_Error error;
- FT_Memory memory = stream->memory;
- FT_UInt flags;
- FT_ULong num_aux;
- FT_Byte* p;
- FT_Byte* limit;
-
-
- phy_font->memory = memory;
- phy_font->offset = offset;
-
- phy_font->kern_items = NULL;
- phy_font->kern_items_tail = &phy_font->kern_items;
-
- if ( FT_STREAM_SEEK( offset ) ||
- FT_FRAME_ENTER( size ) )
- goto Exit;
-
- phy_font->cursor = stream->cursor;
-
- p = stream->cursor;
- limit = p + size;
-
- PFR_CHECK( 15 );
- phy_font->font_ref_number = PFR_NEXT_USHORT( p );
- phy_font->outline_resolution = PFR_NEXT_USHORT( p );
- phy_font->metrics_resolution = PFR_NEXT_USHORT( p );
- phy_font->bbox.xMin = PFR_NEXT_SHORT( p );
- phy_font->bbox.yMin = PFR_NEXT_SHORT( p );
- phy_font->bbox.xMax = PFR_NEXT_SHORT( p );
- phy_font->bbox.yMax = PFR_NEXT_SHORT( p );
- phy_font->flags = flags = PFR_NEXT_BYTE( p );
-
- /* get the standard advance for non-proportional fonts */
- if ( !(flags & PFR_PHY_PROPORTIONAL) )
- {
- PFR_CHECK( 2 );
- phy_font->standard_advance = PFR_NEXT_SHORT( p );
- }
-
- /* load the extra items when present */
- if ( flags & PFR_PHY_EXTRA_ITEMS )
- {
- error = pfr_extra_items_parse( &p, limit,
- pfr_phy_font_extra_items, phy_font );
-
- if ( error )
- goto Fail;
- }
-
- /* In certain fonts, the auxiliary bytes contain interesting */
- /* information. These are not in the specification but can be */
- /* guessed by looking at the content of a few PFR0 fonts. */
- PFR_CHECK( 3 );
- num_aux = PFR_NEXT_ULONG( p );
-
- if ( num_aux > 0 )
- {
- FT_Byte* q = p;
- FT_Byte* q2;
-
-
- PFR_CHECK_SIZE( num_aux );
- p += num_aux;
-
- while ( num_aux > 0 )
- {
- FT_UInt length, type;
-
-
- if ( q + 4 > p )
- break;
-
- length = PFR_NEXT_USHORT( q );
- if ( length < 4 || length > num_aux )
- break;
-
- q2 = q + length - 2;
- type = PFR_NEXT_USHORT( q );
-
- switch ( type )
- {
- case 1:
- /* this seems to correspond to the font's family name, padded to */
- /* an even number of bytes with a zero byte appended if needed */
- error = pfr_aux_name_load( q, length - 4U, memory,
- &phy_font->family_name );
- if ( error )
- goto Exit;
- break;
-
- case 2:
- if ( q + 32 > q2 )
- break;
-
- q += 10;
- phy_font->ascent = PFR_NEXT_SHORT( q );
- phy_font->descent = PFR_NEXT_SHORT( q );
- phy_font->leading = PFR_NEXT_SHORT( q );
- break;
-
- case 3:
- /* this seems to correspond to the font's style name, padded to */
- /* an even number of bytes with a zero byte appended if needed */
- error = pfr_aux_name_load( q, length - 4U, memory,
- &phy_font->style_name );
- if ( error )
- goto Exit;
- break;
-
- default:
- ;
- }
-
- q = q2;
- num_aux -= length;
- }
- }
-
- /* read the blue values */
- {
- FT_UInt n, count;
-
-
- PFR_CHECK( 1 );
- phy_font->num_blue_values = count = PFR_NEXT_BYTE( p );
-
- PFR_CHECK( count * 2 );
-
- if ( FT_NEW_ARRAY( phy_font->blue_values, count ) )
- goto Fail;
-
- for ( n = 0; n < count; n++ )
- phy_font->blue_values[n] = PFR_NEXT_SHORT( p );
- }
-
- PFR_CHECK( 8 );
- phy_font->blue_fuzz = PFR_NEXT_BYTE( p );
- phy_font->blue_scale = PFR_NEXT_BYTE( p );
-
- phy_font->vertical.standard = PFR_NEXT_USHORT( p );
- phy_font->horizontal.standard = PFR_NEXT_USHORT( p );
-
- /* read the character descriptors */
- {
- FT_UInt n, count, Size;
-
-
- phy_font->num_chars = count = PFR_NEXT_USHORT( p );
- phy_font->chars_offset = offset + (FT_Offset)( p - stream->cursor );
-
- Size = 1 + 1 + 2;
- if ( flags & PFR_PHY_2BYTE_CHARCODE )
- Size += 1;
-
- if ( flags & PFR_PHY_PROPORTIONAL )
- Size += 2;
-
- if ( flags & PFR_PHY_ASCII_CODE )
- Size += 1;
-
- if ( flags & PFR_PHY_2BYTE_GPS_SIZE )
- Size += 1;
-
- if ( flags & PFR_PHY_3BYTE_GPS_OFFSET )
- Size += 1;
-
- PFR_CHECK_SIZE( count * Size );
-
- if ( FT_NEW_ARRAY( phy_font->chars, count ) )
- goto Fail;
-
- for ( n = 0; n < count; n++ )
- {
- PFR_Char cur = &phy_font->chars[n];
-
-
- cur->char_code = ( flags & PFR_PHY_2BYTE_CHARCODE )
- ? PFR_NEXT_USHORT( p )
- : PFR_NEXT_BYTE( p );
-
- cur->advance = ( flags & PFR_PHY_PROPORTIONAL )
- ? PFR_NEXT_SHORT( p )
- : phy_font->standard_advance;
-
-#if 0
- cur->ascii = ( flags & PFR_PHY_ASCII_CODE )
- ? PFR_NEXT_BYTE( p )
- : 0;
-#else
- if ( flags & PFR_PHY_ASCII_CODE )
- p += 1;
-#endif
- cur->gps_size = ( flags & PFR_PHY_2BYTE_GPS_SIZE )
- ? PFR_NEXT_USHORT( p )
- : PFR_NEXT_BYTE( p );
-
- cur->gps_offset = ( flags & PFR_PHY_3BYTE_GPS_OFFSET )
- ? PFR_NEXT_ULONG( p )
- : PFR_NEXT_USHORT( p );
- }
- }
-
- /* that's it! */
-
- Fail:
- FT_FRAME_EXIT();
-
- /* save position of bitmap info */
- phy_font->bct_offset = FT_STREAM_POS();
- phy_font->cursor = NULL;
-
- Exit:
- return error;
-
- Too_Short:
- error = FT_THROW( Invalid_Table );
- FT_ERROR(( "pfr_phy_font_load: invalid physical font table\n" ));
- goto Fail;
- }
-
-
-/* END */
diff --git a/src/pfr/pfrload.h b/src/pfr/pfrload.h
deleted file mode 100644
index f9475ae06..000000000
--- a/src/pfr/pfrload.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrload.h */
-/* */
-/* FreeType PFR loader (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PFRLOAD_H_
-#define PFRLOAD_H_
-
-#include "pfrobjs.h"
-#include FT_INTERNAL_STREAM_H
-
-
-FT_BEGIN_HEADER
-
- /* some size checks should be always done (mainly to prevent */
- /* excessive allocation for malformed data), ... */
-#define PFR_CHECK_SIZE( x ) do \
- { \
- if ( p + (x) > limit ) \
- goto Too_Short; \
- } while ( 0 )
-
- /* ... and some only if intensive checking is explicitly requested */
-#ifdef PFR_CONFIG_NO_CHECKS
-#define PFR_CHECK( x ) do { } while ( 0 )
-#else
-#define PFR_CHECK PFR_CHECK_SIZE
-#endif
-
-#define PFR_NEXT_BYTE( p ) FT_NEXT_BYTE( p )
-#define PFR_NEXT_INT8( p ) FT_NEXT_CHAR( p )
-#define PFR_NEXT_SHORT( p ) FT_NEXT_SHORT( p )
-#define PFR_NEXT_USHORT( p ) FT_NEXT_USHORT( p )
-#define PFR_NEXT_LONG( p ) FT_NEXT_OFF3( p )
-#define PFR_NEXT_ULONG( p ) FT_NEXT_UOFF3( p )
-
-
- /* handling extra items */
-
- typedef FT_Error
- (*PFR_ExtraItem_ParseFunc)( FT_Byte* p,
- FT_Byte* limit,
- FT_Pointer data );
-
- typedef struct PFR_ExtraItemRec_
- {
- FT_UInt type;
- PFR_ExtraItem_ParseFunc parser;
-
- } PFR_ExtraItemRec;
-
- typedef const struct PFR_ExtraItemRec_* PFR_ExtraItem;
-
-
- FT_LOCAL( FT_Error )
- pfr_extra_items_skip( FT_Byte* *pp,
- FT_Byte* limit );
-
- FT_LOCAL( FT_Error )
- pfr_extra_items_parse( FT_Byte* *pp,
- FT_Byte* limit,
- PFR_ExtraItem item_list,
- FT_Pointer item_data );
-
-
- /* load a PFR header */
- FT_LOCAL( FT_Error )
- pfr_header_load( PFR_Header header,
- FT_Stream stream );
-
- /* check a PFR header */
- FT_LOCAL( FT_Bool )
- pfr_header_check( PFR_Header header );
-
-
- /* return number of logical fonts in this file */
- FT_LOCAL( FT_Error )
- pfr_log_font_count( FT_Stream stream,
- FT_UInt32 log_section_offset,
- FT_Long *acount );
-
- /* load a pfr logical font entry */
- FT_LOCAL( FT_Error )
- pfr_log_font_load( PFR_LogFont log_font,
- FT_Stream stream,
- FT_UInt face_index,
- FT_UInt32 section_offset,
- FT_Bool size_increment );
-
-
- /* load a physical font entry */
- FT_LOCAL( FT_Error )
- pfr_phy_font_load( PFR_PhyFont phy_font,
- FT_Stream stream,
- FT_UInt32 offset,
- FT_UInt32 size );
-
- /* finalize a physical font */
- FT_LOCAL( void )
- pfr_phy_font_done( PFR_PhyFont phy_font,
- FT_Memory memory );
-
- /* */
-
-FT_END_HEADER
-
-#endif /* PFRLOAD_H_ */
-
-
-/* END */
diff --git a/src/pfr/pfrobjs.c b/src/pfr/pfrobjs.c
deleted file mode 100644
index 514af8050..000000000
--- a/src/pfr/pfrobjs.c
+++ /dev/null
@@ -1,600 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrobjs.c */
-/* */
-/* FreeType PFR object methods (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "pfrobjs.h"
-#include "pfrload.h"
-#include "pfrgload.h"
-#include "pfrcmap.h"
-#include "pfrsbit.h"
-#include FT_OUTLINE_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-#include FT_TRUETYPE_IDS_H
-
-#include "pfrerror.h"
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_pfr
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FACE OBJECT METHODS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- pfr_face_done( FT_Face pfrface ) /* PFR_Face */
- {
- PFR_Face face = (PFR_Face)pfrface;
- FT_Memory memory;
-
-
- if ( !face )
- return;
-
- memory = pfrface->driver->root.memory;
-
- /* we don't want dangling pointers */
- pfrface->family_name = NULL;
- pfrface->style_name = NULL;
-
- /* finalize the physical font record */
- pfr_phy_font_done( &face->phy_font, FT_FACE_MEMORY( face ) );
-
- /* no need to finalize the logical font or the header */
- FT_FREE( pfrface->available_sizes );
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- pfr_face_init( FT_Stream stream,
- FT_Face pfrface,
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- PFR_Face face = (PFR_Face)pfrface;
- FT_Error error;
-
- FT_UNUSED( num_params );
- FT_UNUSED( params );
-
-
- FT_TRACE2(( "PFR driver\n" ));
-
- /* load the header and check it */
- error = pfr_header_load( &face->header, stream );
- if ( error )
- goto Exit;
-
- if ( !pfr_header_check( &face->header ) )
- {
- FT_TRACE2(( " not a PFR font\n" ));
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
-
- /* check face index */
- {
- FT_Long num_faces;
-
-
- error = pfr_log_font_count( stream,
- face->header.log_dir_offset,
- &num_faces );
- if ( error )
- goto Exit;
-
- pfrface->num_faces = num_faces;
- }
-
- if ( face_index < 0 )
- goto Exit;
-
- if ( ( face_index & 0xFFFF ) >= pfrface->num_faces )
- {
- FT_ERROR(( "pfr_face_init: invalid face index\n" ));
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- /* load the face */
- error = pfr_log_font_load(
- &face->log_font,
- stream,
- (FT_UInt)( face_index & 0xFFFF ),
- face->header.log_dir_offset,
- FT_BOOL( face->header.phy_font_max_size_high != 0 ) );
- if ( error )
- goto Exit;
-
- /* now load the physical font descriptor */
- error = pfr_phy_font_load( &face->phy_font, stream,
- face->log_font.phys_offset,
- face->log_font.phys_size );
- if ( error )
- goto Exit;
-
- /* now set up all root face fields */
- {
- PFR_PhyFont phy_font = &face->phy_font;
-
-
- pfrface->face_index = face_index & 0xFFFF;
- pfrface->num_glyphs = (FT_Long)phy_font->num_chars + 1;
-
- pfrface->face_flags |= FT_FACE_FLAG_SCALABLE;
-
- /* if gps_offset == 0 for all characters, we */
- /* assume that the font only contains bitmaps */
- {
- FT_UInt nn;
-
-
- for ( nn = 0; nn < phy_font->num_chars; nn++ )
- if ( phy_font->chars[nn].gps_offset != 0 )
- break;
-
- if ( nn == phy_font->num_chars )
- {
- if ( phy_font->num_strikes > 0 )
- pfrface->face_flags = 0; /* not scalable */
- else
- {
- FT_ERROR(( "pfr_face_init: font doesn't contain glyphs\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
- }
- }
-
- if ( ( phy_font->flags & PFR_PHY_PROPORTIONAL ) == 0 )
- pfrface->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;
-
- if ( phy_font->flags & PFR_PHY_VERTICAL )
- pfrface->face_flags |= FT_FACE_FLAG_VERTICAL;
- else
- pfrface->face_flags |= FT_FACE_FLAG_HORIZONTAL;
-
- if ( phy_font->num_strikes > 0 )
- pfrface->face_flags |= FT_FACE_FLAG_FIXED_SIZES;
-
- if ( phy_font->num_kern_pairs > 0 )
- pfrface->face_flags |= FT_FACE_FLAG_KERNING;
-
- /* If no family name was found in the `undocumented' auxiliary
- * data, use the font ID instead. This sucks but is better than
- * nothing.
- */
- pfrface->family_name = phy_font->family_name;
- if ( !pfrface->family_name )
- pfrface->family_name = phy_font->font_id;
-
- /* note that the style name can be NULL in certain PFR fonts,
- * probably meaning `Regular'
- */
- pfrface->style_name = phy_font->style_name;
-
- pfrface->num_fixed_sizes = 0;
- pfrface->available_sizes = NULL;
-
- pfrface->bbox = phy_font->bbox;
- pfrface->units_per_EM = (FT_UShort)phy_font->outline_resolution;
- pfrface->ascender = (FT_Short) phy_font->bbox.yMax;
- pfrface->descender = (FT_Short) phy_font->bbox.yMin;
-
- pfrface->height = (FT_Short)( ( pfrface->units_per_EM * 12 ) / 10 );
- if ( pfrface->height < pfrface->ascender - pfrface->descender )
- pfrface->height = (FT_Short)(pfrface->ascender - pfrface->descender);
-
- if ( phy_font->num_strikes > 0 )
- {
- FT_UInt n, count = phy_font->num_strikes;
- FT_Bitmap_Size* size;
- PFR_Strike strike;
- FT_Memory memory = pfrface->stream->memory;
-
-
- if ( FT_NEW_ARRAY( pfrface->available_sizes, count ) )
- goto Exit;
-
- size = pfrface->available_sizes;
- strike = phy_font->strikes;
- for ( n = 0; n < count; n++, size++, strike++ )
- {
- size->height = (FT_Short)strike->y_ppm;
- size->width = (FT_Short)strike->x_ppm;
- size->size = (FT_Pos)( strike->y_ppm << 6 );
- size->x_ppem = (FT_Pos)( strike->x_ppm << 6 );
- size->y_ppem = (FT_Pos)( strike->y_ppm << 6 );
- }
- pfrface->num_fixed_sizes = (FT_Int)count;
- }
-
- /* now compute maximum advance width */
- if ( ( phy_font->flags & PFR_PHY_PROPORTIONAL ) == 0 )
- pfrface->max_advance_width = (FT_Short)phy_font->standard_advance;
- else
- {
- FT_Int max = 0;
- FT_UInt count = phy_font->num_chars;
- PFR_Char gchar = phy_font->chars;
-
-
- for ( ; count > 0; count--, gchar++ )
- {
- if ( max < gchar->advance )
- max = gchar->advance;
- }
-
- pfrface->max_advance_width = (FT_Short)max;
- }
-
- pfrface->max_advance_height = pfrface->height;
-
- pfrface->underline_position = (FT_Short)( -pfrface->units_per_EM / 10 );
- pfrface->underline_thickness = (FT_Short)( pfrface->units_per_EM / 30 );
-
- /* create charmap */
- {
- FT_CharMapRec charmap;
-
-
- charmap.face = pfrface;
- charmap.platform_id = TT_PLATFORM_MICROSOFT;
- charmap.encoding_id = TT_MS_ID_UNICODE_CS;
- charmap.encoding = FT_ENCODING_UNICODE;
-
- error = FT_CMap_New( &pfr_cmap_class_rec, NULL, &charmap, NULL );
- }
-
- /* check whether we have loaded any kerning pairs */
- if ( phy_font->num_kern_pairs )
- pfrface->face_flags |= FT_FACE_FLAG_KERNING;
- }
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** SLOT OBJECT METHOD *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( FT_Error )
- pfr_slot_init( FT_GlyphSlot pfrslot ) /* PFR_Slot */
- {
- PFR_Slot slot = (PFR_Slot)pfrslot;
- FT_GlyphLoader loader = pfrslot->internal->loader;
-
-
- pfr_glyph_init( &slot->glyph, loader );
-
- return 0;
- }
-
-
- FT_LOCAL_DEF( void )
- pfr_slot_done( FT_GlyphSlot pfrslot ) /* PFR_Slot */
- {
- PFR_Slot slot = (PFR_Slot)pfrslot;
-
-
- pfr_glyph_done( &slot->glyph );
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- pfr_slot_load( FT_GlyphSlot pfrslot, /* PFR_Slot */
- FT_Size pfrsize, /* PFR_Size */
- FT_UInt gindex,
- FT_Int32 load_flags )
- {
- PFR_Slot slot = (PFR_Slot)pfrslot;
- PFR_Size size = (PFR_Size)pfrsize;
- FT_Error error;
- PFR_Face face = (PFR_Face)pfrslot->face;
- PFR_Char gchar;
- FT_Outline* outline = &pfrslot->outline;
- FT_ULong gps_offset;
-
-
- FT_TRACE1(( "pfr_slot_load: glyph index %d\n", gindex ));
-
- if ( gindex > 0 )
- gindex--;
-
- if ( !face || gindex >= face->phy_font.num_chars )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- /* try to load an embedded bitmap */
- if ( ( load_flags & ( FT_LOAD_NO_SCALE | FT_LOAD_NO_BITMAP ) ) == 0 )
- {
- error = pfr_slot_load_bitmap(
- slot,
- size,
- gindex,
- ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY ) != 0 );
- if ( !error )
- goto Exit;
- }
-
- if ( load_flags & FT_LOAD_SBITS_ONLY )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- gchar = face->phy_font.chars + gindex;
- pfrslot->format = FT_GLYPH_FORMAT_OUTLINE;
- outline->n_points = 0;
- outline->n_contours = 0;
- gps_offset = face->header.gps_section_offset;
-
- /* load the glyph outline (FT_LOAD_NO_RECURSE isn't supported) */
- error = pfr_glyph_load( &slot->glyph, face->root.stream,
- gps_offset, gchar->gps_offset, gchar->gps_size );
-
- if ( !error )
- {
- FT_BBox cbox;
- FT_Glyph_Metrics* metrics = &pfrslot->metrics;
- FT_Pos advance;
- FT_UInt em_metrics, em_outline;
- FT_Bool scaling;
-
-
- scaling = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 );
-
- /* copy outline data */
- *outline = slot->glyph.loader->base.outline;
-
- outline->flags &= ~FT_OUTLINE_OWNER;
- outline->flags |= FT_OUTLINE_REVERSE_FILL;
-
- if ( size && pfrsize->metrics.y_ppem < 24 )
- outline->flags |= FT_OUTLINE_HIGH_PRECISION;
-
- /* compute the advance vector */
- metrics->horiAdvance = 0;
- metrics->vertAdvance = 0;
-
- advance = gchar->advance;
- em_metrics = face->phy_font.metrics_resolution;
- em_outline = face->phy_font.outline_resolution;
-
- if ( em_metrics != em_outline )
- advance = FT_MulDiv( advance,
- (FT_Long)em_outline,
- (FT_Long)em_metrics );
-
- if ( face->phy_font.flags & PFR_PHY_VERTICAL )
- metrics->vertAdvance = advance;
- else
- metrics->horiAdvance = advance;
-
- pfrslot->linearHoriAdvance = metrics->horiAdvance;
- pfrslot->linearVertAdvance = metrics->vertAdvance;
-
- /* make up vertical metrics(?) */
- metrics->vertBearingX = 0;
- metrics->vertBearingY = 0;
-
-#if 0 /* some fonts seem to be broken here! */
-
- /* Apply the font matrix, if any. */
- /* TODO: Test existing fonts with unusual matrix */
- /* whether we have to adjust Units per EM. */
- {
- FT_Matrix font_matrix;
-
-
- font_matrix.xx = face->log_font.matrix[0] << 8;
- font_matrix.yx = face->log_font.matrix[1] << 8;
- font_matrix.xy = face->log_font.matrix[2] << 8;
- font_matrix.yy = face->log_font.matrix[3] << 8;
-
- FT_Outline_Transform( outline, &font_matrix );
- }
-#endif
-
- /* scale when needed */
- if ( scaling )
- {
- FT_Int n;
- FT_Fixed x_scale = pfrsize->metrics.x_scale;
- FT_Fixed y_scale = pfrsize->metrics.y_scale;
- FT_Vector* vec = outline->points;
-
-
- /* scale outline points */
- for ( n = 0; n < outline->n_points; n++, vec++ )
- {
- vec->x = FT_MulFix( vec->x, x_scale );
- vec->y = FT_MulFix( vec->y, y_scale );
- }
-
- /* scale the advance */
- metrics->horiAdvance = FT_MulFix( metrics->horiAdvance, x_scale );
- metrics->vertAdvance = FT_MulFix( metrics->vertAdvance, y_scale );
- }
-
- /* compute the rest of the metrics */
- FT_Outline_Get_CBox( outline, &cbox );
-
- metrics->width = cbox.xMax - cbox.xMin;
- metrics->height = cbox.yMax - cbox.yMin;
- metrics->horiBearingX = cbox.xMin;
- metrics->horiBearingY = cbox.yMax - metrics->height;
- }
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** KERNING METHOD *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( FT_Error )
- pfr_face_get_kerning( FT_Face pfrface, /* PFR_Face */
- FT_UInt glyph1,
- FT_UInt glyph2,
- FT_Vector* kerning )
- {
- PFR_Face face = (PFR_Face)pfrface;
- FT_Error error = FT_Err_Ok;
- PFR_PhyFont phy_font = &face->phy_font;
- FT_UInt32 code1, code2, pair;
-
-
- kerning->x = 0;
- kerning->y = 0;
-
- if ( glyph1 > 0 )
- glyph1--;
-
- if ( glyph2 > 0 )
- glyph2--;
-
- /* convert glyph indices to character codes */
- if ( glyph1 > phy_font->num_chars ||
- glyph2 > phy_font->num_chars )
- goto Exit;
-
- code1 = phy_font->chars[glyph1].char_code;
- code2 = phy_font->chars[glyph2].char_code;
- pair = PFR_KERN_INDEX( code1, code2 );
-
- /* now search the list of kerning items */
- {
- PFR_KernItem item = phy_font->kern_items;
- FT_Stream stream = pfrface->stream;
-
-
- for ( ; item; item = item->next )
- {
- if ( pair >= item->pair1 && pair <= item->pair2 )
- goto FoundPair;
- }
- goto Exit;
-
- FoundPair: /* we found an item, now parse it and find the value if any */
- if ( FT_STREAM_SEEK( item->offset ) ||
- FT_FRAME_ENTER( item->pair_count * item->pair_size ) )
- goto Exit;
-
- {
- FT_UInt count = item->pair_count;
- FT_UInt size = item->pair_size;
- FT_UInt power = 1 << FT_MSB( count );
- FT_UInt probe = power * size;
- FT_UInt extra = count - power;
- FT_Byte* base = stream->cursor;
- FT_Bool twobytes = FT_BOOL( item->flags & PFR_KERN_2BYTE_CHAR );
- FT_Bool twobyte_adj = FT_BOOL( item->flags & PFR_KERN_2BYTE_ADJ );
- FT_Byte* p;
- FT_UInt32 cpair;
-
-
- if ( extra > 0 )
- {
- p = base + extra * size;
-
- if ( twobytes )
- cpair = FT_NEXT_ULONG( p );
- else
- cpair = PFR_NEXT_KPAIR( p );
-
- if ( cpair == pair )
- goto Found;
-
- if ( cpair < pair )
- {
- if ( twobyte_adj )
- p += 2;
- else
- p++;
- base = p;
- }
- }
-
- while ( probe > size )
- {
- probe >>= 1;
- p = base + probe;
-
- if ( twobytes )
- cpair = FT_NEXT_ULONG( p );
- else
- cpair = PFR_NEXT_KPAIR( p );
-
- if ( cpair == pair )
- goto Found;
-
- if ( cpair < pair )
- base += probe;
- }
-
- p = base;
-
- if ( twobytes )
- cpair = FT_NEXT_ULONG( p );
- else
- cpair = PFR_NEXT_KPAIR( p );
-
- if ( cpair == pair )
- {
- FT_Int value;
-
-
- Found:
- if ( twobyte_adj )
- value = FT_PEEK_SHORT( p );
- else
- value = p[0];
-
- kerning->x = item->base_adj + value;
- }
- }
-
- FT_FRAME_EXIT();
- }
-
- Exit:
- return error;
- }
-
-
-/* END */
diff --git a/src/pfr/pfrobjs.h b/src/pfr/pfrobjs.h
deleted file mode 100644
index d6ad6562d..000000000
--- a/src/pfr/pfrobjs.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrobjs.h */
-/* */
-/* FreeType PFR object methods (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PFROBJS_H_
-#define PFROBJS_H_
-
-#include "pfrtypes.h"
-
-
-FT_BEGIN_HEADER
-
- typedef struct PFR_FaceRec_* PFR_Face;
-
- typedef struct PFR_SizeRec_* PFR_Size;
-
- typedef struct PFR_SlotRec_* PFR_Slot;
-
-
- typedef struct PFR_FaceRec_
- {
- FT_FaceRec root;
- PFR_HeaderRec header;
- PFR_LogFontRec log_font;
- PFR_PhyFontRec phy_font;
-
- } PFR_FaceRec;
-
-
- typedef struct PFR_SizeRec_
- {
- FT_SizeRec root;
-
- } PFR_SizeRec;
-
-
- typedef struct PFR_SlotRec_
- {
- FT_GlyphSlotRec root;
- PFR_GlyphRec glyph;
-
- } PFR_SlotRec;
-
-
- FT_LOCAL( FT_Error )
- pfr_face_init( FT_Stream stream,
- FT_Face face, /* PFR_Face */
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params );
-
- FT_LOCAL( void )
- pfr_face_done( FT_Face face ); /* PFR_Face */
-
-
- FT_LOCAL( FT_Error )
- pfr_face_get_kerning( FT_Face face, /* PFR_Face */
- FT_UInt glyph1,
- FT_UInt glyph2,
- FT_Vector* kerning );
-
-
- FT_LOCAL( FT_Error )
- pfr_slot_init( FT_GlyphSlot slot ); /* PFR_Slot */
-
- FT_LOCAL( void )
- pfr_slot_done( FT_GlyphSlot slot ); /* PFR_Slot */
-
-
- FT_LOCAL( FT_Error )
- pfr_slot_load( FT_GlyphSlot slot, /* PFR_Slot */
- FT_Size size, /* PFR_Size */
- FT_UInt gindex,
- FT_Int32 load_flags );
-
-
-FT_END_HEADER
-
-#endif /* PFROBJS_H_ */
-
-
-/* END */
diff --git a/src/pfr/pfrsbit.c b/src/pfr/pfrsbit.c
deleted file mode 100644
index 54e7d0e6c..000000000
--- a/src/pfr/pfrsbit.c
+++ /dev/null
@@ -1,808 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrsbit.c */
-/* */
-/* FreeType PFR bitmap loader (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "pfrsbit.h"
-#include "pfrload.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-
-#include "pfrerror.h"
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_pfr
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** PFR BIT WRITER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct PFR_BitWriter_
- {
- FT_Byte* line; /* current line start */
- FT_Int pitch; /* line size in bytes */
- FT_UInt width; /* width in pixels/bits */
- FT_UInt rows; /* number of remaining rows to scan */
- FT_UInt total; /* total number of bits to draw */
-
- } PFR_BitWriterRec, *PFR_BitWriter;
-
-
- static void
- pfr_bitwriter_init( PFR_BitWriter writer,
- FT_Bitmap* target,
- FT_Bool decreasing )
- {
- writer->line = target->buffer;
- writer->pitch = target->pitch;
- writer->width = target->width;
- writer->rows = target->rows;
- writer->total = writer->width * writer->rows;
-
- if ( !decreasing )
- {
- writer->line += writer->pitch * (FT_Int)( target->rows - 1 );
- writer->pitch = -writer->pitch;
- }
- }
-
-
- static void
- pfr_bitwriter_decode_bytes( PFR_BitWriter writer,
- FT_Byte* p,
- FT_Byte* limit )
- {
- FT_UInt n, reload;
- FT_UInt left = writer->width;
- FT_Byte* cur = writer->line;
- FT_UInt mask = 0x80;
- FT_UInt val = 0;
- FT_UInt c = 0;
-
-
- n = (FT_UInt)( limit - p ) * 8;
- if ( n > writer->total )
- n = writer->total;
-
- reload = n & 7;
-
- for ( ; n > 0; n-- )
- {
- if ( ( n & 7 ) == reload )
- val = *p++;
-
- if ( val & 0x80 )
- c |= mask;
-
- val <<= 1;
- mask >>= 1;
-
- if ( --left <= 0 )
- {
- cur[0] = (FT_Byte)c;
- left = writer->width;
- mask = 0x80;
-
- writer->line += writer->pitch;
- cur = writer->line;
- c = 0;
- }
- else if ( mask == 0 )
- {
- cur[0] = (FT_Byte)c;
- mask = 0x80;
- c = 0;
- cur++;
- }
- }
-
- if ( mask != 0x80 )
- cur[0] = (FT_Byte)c;
- }
-
-
- static void
- pfr_bitwriter_decode_rle1( PFR_BitWriter writer,
- FT_Byte* p,
- FT_Byte* limit )
- {
- FT_Int phase, count, counts[2];
- FT_UInt n, reload;
- FT_UInt left = writer->width;
- FT_Byte* cur = writer->line;
- FT_UInt mask = 0x80;
- FT_UInt c = 0;
-
-
- n = writer->total;
-
- phase = 1;
- counts[0] = 0;
- counts[1] = 0;
- count = 0;
- reload = 1;
-
- for ( ; n > 0; n-- )
- {
- if ( reload )
- {
- do
- {
- if ( phase )
- {
- FT_Int v;
-
-
- if ( p >= limit )
- break;
-
- v = *p++;
- counts[0] = v >> 4;
- counts[1] = v & 15;
- phase = 0;
- count = counts[0];
- }
- else
- {
- phase = 1;
- count = counts[1];
- }
-
- } while ( count == 0 );
- }
-
- if ( phase )
- c |= mask;
-
- mask >>= 1;
-
- if ( --left <= 0 )
- {
- cur[0] = (FT_Byte)c;
- left = writer->width;
- mask = 0x80;
-
- writer->line += writer->pitch;
- cur = writer->line;
- c = 0;
- }
- else if ( mask == 0 )
- {
- cur[0] = (FT_Byte)c;
- mask = 0x80;
- c = 0;
- cur++;
- }
-
- reload = ( --count <= 0 );
- }
-
- if ( mask != 0x80 )
- cur[0] = (FT_Byte) c;
- }
-
-
- static void
- pfr_bitwriter_decode_rle2( PFR_BitWriter writer,
- FT_Byte* p,
- FT_Byte* limit )
- {
- FT_Int phase, count;
- FT_UInt n, reload;
- FT_UInt left = writer->width;
- FT_Byte* cur = writer->line;
- FT_UInt mask = 0x80;
- FT_UInt c = 0;
-
-
- n = writer->total;
-
- phase = 1;
- count = 0;
- reload = 1;
-
- for ( ; n > 0; n-- )
- {
- if ( reload )
- {
- do
- {
- if ( p >= limit )
- break;
-
- count = *p++;
- phase = phase ^ 1;
-
- } while ( count == 0 );
- }
-
- if ( phase )
- c |= mask;
-
- mask >>= 1;
-
- if ( --left <= 0 )
- {
- cur[0] = (FT_Byte)c;
- c = 0;
- mask = 0x80;
- left = writer->width;
-
- writer->line += writer->pitch;
- cur = writer->line;
- }
- else if ( mask == 0 )
- {
- cur[0] = (FT_Byte)c;
- c = 0;
- mask = 0x80;
- cur++;
- }
-
- reload = ( --count <= 0 );
- }
-
- if ( mask != 0x80 )
- cur[0] = (FT_Byte) c;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** BITMAP DATA DECODING *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- pfr_lookup_bitmap_data( FT_Byte* base,
- FT_Byte* limit,
- FT_UInt count,
- FT_UInt* flags,
- FT_UInt char_code,
- FT_ULong* found_offset,
- FT_ULong* found_size )
- {
- FT_UInt min, max, char_len;
- FT_Bool two = FT_BOOL( *flags & PFR_BITMAP_2BYTE_CHARCODE );
- FT_Byte* buff;
-
-
- char_len = 4;
- if ( two )
- char_len += 1;
- if ( *flags & PFR_BITMAP_2BYTE_SIZE )
- char_len += 1;
- if ( *flags & PFR_BITMAP_3BYTE_OFFSET )
- char_len += 1;
-
- if ( !( *flags & PFR_BITMAP_CHARCODES_VALIDATED ) )
- {
- FT_Byte* p;
- FT_Byte* lim;
- FT_UInt code;
- FT_Long prev_code;
-
-
- *flags |= PFR_BITMAP_VALID_CHARCODES;
- prev_code = -1;
- lim = base + count * char_len;
-
- if ( lim > limit )
- {
- FT_TRACE0(( "pfr_lookup_bitmap_data:"
- " number of bitmap records too large,\n"
- " "
- " thus ignoring all bitmaps in this strike\n" ));
- *flags &= ~PFR_BITMAP_VALID_CHARCODES;
- }
- else
- {
- /* check whether records are sorted by code */
- for ( p = base; p < lim; p += char_len )
- {
- if ( two )
- code = FT_PEEK_USHORT( p );
- else
- code = *p;
-
- if ( (FT_Long)code <= prev_code )
- {
- FT_TRACE0(( "pfr_lookup_bitmap_data:"
- " bitmap records are not sorted,\n"
- " "
- " thus ignoring all bitmaps in this strike\n" ));
- *flags &= ~PFR_BITMAP_VALID_CHARCODES;
- break;
- }
-
- prev_code = code;
- }
- }
-
- *flags |= PFR_BITMAP_CHARCODES_VALIDATED;
- }
-
- /* ignore bitmaps in case table is not valid */
- /* (this might be sanitized, but PFR is dead...) */
- if ( !( *flags & PFR_BITMAP_VALID_CHARCODES ) )
- goto Fail;
-
- min = 0;
- max = count;
-
- /* binary search */
- while ( min < max )
- {
- FT_UInt mid, code;
-
-
- mid = ( min + max ) >> 1;
- buff = base + mid * char_len;
-
- if ( two )
- code = PFR_NEXT_USHORT( buff );
- else
- code = PFR_NEXT_BYTE( buff );
-
- if ( char_code < code )
- max = mid;
- else if ( char_code > code )
- min = mid + 1;
- else
- goto Found_It;
- }
-
- Fail:
- /* Not found */
- *found_size = 0;
- *found_offset = 0;
- return;
-
- Found_It:
- if ( *flags & PFR_BITMAP_2BYTE_SIZE )
- *found_size = PFR_NEXT_USHORT( buff );
- else
- *found_size = PFR_NEXT_BYTE( buff );
-
- if ( *flags & PFR_BITMAP_3BYTE_OFFSET )
- *found_offset = PFR_NEXT_ULONG( buff );
- else
- *found_offset = PFR_NEXT_USHORT( buff );
- }
-
-
- /* load bitmap metrics. `*padvance' must be set to the default value */
- /* before calling this function */
- /* */
- static FT_Error
- pfr_load_bitmap_metrics( FT_Byte** pdata,
- FT_Byte* limit,
- FT_Long scaled_advance,
- FT_Long *axpos,
- FT_Long *aypos,
- FT_UInt *axsize,
- FT_UInt *aysize,
- FT_Long *aadvance,
- FT_UInt *aformat )
- {
- FT_Error error = FT_Err_Ok;
- FT_Byte flags;
- FT_Byte b;
- FT_Byte* p = *pdata;
- FT_Long xpos, ypos, advance;
- FT_UInt xsize, ysize;
-
-
- PFR_CHECK( 1 );
- flags = PFR_NEXT_BYTE( p );
-
- xpos = 0;
- ypos = 0;
- xsize = 0;
- ysize = 0;
- advance = 0;
-
- switch ( flags & 3 )
- {
- case 0:
- PFR_CHECK( 1 );
- b = PFR_NEXT_BYTE( p );
- xpos = (FT_Char)b >> 4;
- ypos = ( (FT_Char)( b << 4 ) ) >> 4;
- break;
-
- case 1:
- PFR_CHECK( 2 );
- xpos = PFR_NEXT_INT8( p );
- ypos = PFR_NEXT_INT8( p );
- break;
-
- case 2:
- PFR_CHECK( 4 );
- xpos = PFR_NEXT_SHORT( p );
- ypos = PFR_NEXT_SHORT( p );
- break;
-
- case 3:
- PFR_CHECK( 6 );
- xpos = PFR_NEXT_LONG( p );
- ypos = PFR_NEXT_LONG( p );
- break;
-
- default:
- ;
- }
-
- flags >>= 2;
- switch ( flags & 3 )
- {
- case 0:
- /* blank image */
- xsize = 0;
- ysize = 0;
- break;
-
- case 1:
- PFR_CHECK( 1 );
- b = PFR_NEXT_BYTE( p );
- xsize = ( b >> 4 ) & 0xF;
- ysize = b & 0xF;
- break;
-
- case 2:
- PFR_CHECK( 2 );
- xsize = PFR_NEXT_BYTE( p );
- ysize = PFR_NEXT_BYTE( p );
- break;
-
- case 3:
- PFR_CHECK( 4 );
- xsize = PFR_NEXT_USHORT( p );
- ysize = PFR_NEXT_USHORT( p );
- break;
-
- default:
- ;
- }
-
- flags >>= 2;
- switch ( flags & 3 )
- {
- case 0:
- advance = scaled_advance;
- break;
-
- case 1:
- PFR_CHECK( 1 );
- advance = PFR_NEXT_INT8( p ) * 256;
- break;
-
- case 2:
- PFR_CHECK( 2 );
- advance = PFR_NEXT_SHORT( p );
- break;
-
- case 3:
- PFR_CHECK( 3 );
- advance = PFR_NEXT_LONG( p );
- break;
-
- default:
- ;
- }
-
- *axpos = xpos;
- *aypos = ypos;
- *axsize = xsize;
- *aysize = ysize;
- *aadvance = advance;
- *aformat = flags >> 2;
- *pdata = p;
-
- Exit:
- return error;
-
- Too_Short:
- error = FT_THROW( Invalid_Table );
- FT_ERROR(( "pfr_load_bitmap_metrics: invalid glyph data\n" ));
- goto Exit;
- }
-
-
- static FT_Error
- pfr_load_bitmap_bits( FT_Byte* p,
- FT_Byte* limit,
- FT_UInt format,
- FT_Bool decreasing,
- FT_Bitmap* target )
- {
- FT_Error error = FT_Err_Ok;
- PFR_BitWriterRec writer;
-
-
- if ( target->rows > 0 && target->width > 0 )
- {
- pfr_bitwriter_init( &writer, target, decreasing );
-
- switch ( format )
- {
- case 0: /* packed bits */
- pfr_bitwriter_decode_bytes( &writer, p, limit );
- break;
-
- case 1: /* RLE1 */
- pfr_bitwriter_decode_rle1( &writer, p, limit );
- break;
-
- case 2: /* RLE2 */
- pfr_bitwriter_decode_rle2( &writer, p, limit );
- break;
-
- default:
- ;
- }
- }
-
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** BITMAP LOADING *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( FT_Error )
- pfr_slot_load_bitmap( PFR_Slot glyph,
- PFR_Size size,
- FT_UInt glyph_index,
- FT_Bool metrics_only )
- {
- FT_Error error;
- PFR_Face face = (PFR_Face) glyph->root.face;
- FT_Stream stream = face->root.stream;
- PFR_PhyFont phys = &face->phy_font;
- FT_ULong gps_offset;
- FT_ULong gps_size;
- PFR_Char character;
- PFR_Strike strike;
-
-
- character = &phys->chars[glyph_index];
-
- /* look up a bitmap strike corresponding to the current */
- /* character dimensions */
- {
- FT_UInt n;
-
-
- strike = phys->strikes;
- for ( n = 0; n < phys->num_strikes; n++ )
- {
- if ( strike->x_ppm == (FT_UInt)size->root.metrics.x_ppem &&
- strike->y_ppm == (FT_UInt)size->root.metrics.y_ppem )
- goto Found_Strike;
-
- strike++;
- }
-
- /* couldn't find it */
- return FT_THROW( Invalid_Argument );
- }
-
- Found_Strike:
-
- /* now look up the glyph's position within the file */
- {
- FT_UInt char_len;
-
-
- char_len = 4;
- if ( strike->flags & PFR_BITMAP_2BYTE_CHARCODE )
- char_len += 1;
- if ( strike->flags & PFR_BITMAP_2BYTE_SIZE )
- char_len += 1;
- if ( strike->flags & PFR_BITMAP_3BYTE_OFFSET )
- char_len += 1;
-
- /* access data directly in the frame to speed lookups */
- if ( FT_STREAM_SEEK( phys->bct_offset + strike->bct_offset ) ||
- FT_FRAME_ENTER( char_len * strike->num_bitmaps ) )
- goto Exit;
-
- pfr_lookup_bitmap_data( stream->cursor,
- stream->limit,
- strike->num_bitmaps,
- &strike->flags,
- character->char_code,
- &gps_offset,
- &gps_size );
-
- FT_FRAME_EXIT();
-
- if ( gps_size == 0 )
- {
- /* could not find a bitmap program string for this glyph */
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
- }
-
- /* get the bitmap metrics */
- {
- FT_Long xpos = 0, ypos = 0, advance = 0;
- FT_UInt xsize = 0, ysize = 0, format = 0;
- FT_Byte* p;
-
-
- /* compute linear advance */
- advance = character->advance;
- if ( phys->metrics_resolution != phys->outline_resolution )
- advance = FT_MulDiv( advance,
- (FT_Long)phys->outline_resolution,
- (FT_Long)phys->metrics_resolution );
-
- glyph->root.linearHoriAdvance = advance;
-
- /* compute default advance, i.e., scaled advance; this can be */
- /* overridden in the bitmap header of certain glyphs */
- advance = FT_MulDiv( (FT_Fixed)size->root.metrics.x_ppem << 8,
- character->advance,
- (FT_Long)phys->metrics_resolution );
-
- if ( FT_STREAM_SEEK( face->header.gps_section_offset + gps_offset ) ||
- FT_FRAME_ENTER( gps_size ) )
- goto Exit;
-
- p = stream->cursor;
- error = pfr_load_bitmap_metrics( &p, stream->limit,
- advance,
- &xpos, &ypos,
- &xsize, &ysize,
- &advance, &format );
- if ( error )
- goto Exit1;
-
- /*
- * Before allocating the target bitmap, we check whether the given
- * bitmap dimensions are valid, depending on the image format.
- *
- * Format 0: We have a stream of pixels (with 8 pixels per byte).
- *
- * (xsize * ysize + 7) / 8 <= gps_size
- *
- * Format 1: Run-length encoding; the high nibble holds the number of
- * white bits, the low nibble the number of black bits. In
- * other words, a single byte can represent at most 15
- * pixels.
- *
- * xsize * ysize <= 15 * gps_size
- *
- * Format 2: Run-length encoding; the high byte holds the number of
- * white bits, the low byte the number of black bits. In
- * other words, two bytes can represent at most 255 pixels.
- *
- * xsize * ysize <= 255 * (gps_size + 1) / 2
- */
- switch ( format )
- {
- case 0:
- if ( ( (FT_ULong)xsize * ysize + 7 ) / 8 > gps_size )
- error = FT_THROW( Invalid_Table );
- break;
- case 1:
- if ( (FT_ULong)xsize * ysize > 15 * gps_size )
- error = FT_THROW( Invalid_Table );
- break;
- case 2:
- if ( (FT_ULong)xsize * ysize > 255 * ( ( gps_size + 1 ) / 2 ) )
- error = FT_THROW( Invalid_Table );
- break;
- default:
- FT_ERROR(( "pfr_slot_load_bitmap: invalid image type\n" ));
- error = FT_THROW( Invalid_Table );
- }
-
- if ( error )
- {
- if ( FT_ERR_EQ( error, Invalid_Table ) )
- FT_ERROR(( "pfr_slot_load_bitmap: invalid bitmap dimensions\n" ));
- goto Exit1;
- }
-
- /*
- * XXX: on 16bit systems we return an error for huge bitmaps
- * that cause size truncation, because truncated
- * size properties make bitmap glyphs broken.
- */
- if ( xpos > FT_INT_MAX ||
- xpos < FT_INT_MIN ||
- ysize > FT_INT_MAX ||
- ypos > FT_INT_MAX - (FT_Long)ysize ||
- ypos + (FT_Long)ysize < FT_INT_MIN )
- {
- FT_TRACE1(( "pfr_slot_load_bitmap:" ));
- FT_TRACE1(( "huge bitmap glyph %dx%d over FT_GlyphSlot\n",
- xpos, ypos ));
- error = FT_THROW( Invalid_Pixel_Size );
- }
-
- if ( !error )
- {
- glyph->root.format = FT_GLYPH_FORMAT_BITMAP;
-
- /* Set up glyph bitmap and metrics */
-
- /* XXX: needs casts to fit FT_Bitmap.{width|rows|pitch} */
- glyph->root.bitmap.width = xsize;
- glyph->root.bitmap.rows = ysize;
- glyph->root.bitmap.pitch = (FT_Int)( xsize + 7 ) >> 3;
- glyph->root.bitmap.pixel_mode = FT_PIXEL_MODE_MONO;
-
- /* XXX: needs casts to fit FT_Glyph_Metrics.{width|height} */
- glyph->root.metrics.width = (FT_Pos)xsize << 6;
- glyph->root.metrics.height = (FT_Pos)ysize << 6;
- glyph->root.metrics.horiBearingX = xpos * 64;
- glyph->root.metrics.horiBearingY = ypos * 64;
- glyph->root.metrics.horiAdvance = FT_PIX_ROUND( ( advance >> 2 ) );
- glyph->root.metrics.vertBearingX = - glyph->root.metrics.width >> 1;
- glyph->root.metrics.vertBearingY = 0;
- glyph->root.metrics.vertAdvance = size->root.metrics.height;
-
- /* XXX: needs casts fit FT_GlyphSlotRec.bitmap_{left|top} */
- glyph->root.bitmap_left = (FT_Int)xpos;
- glyph->root.bitmap_top = (FT_Int)( ypos + (FT_Long)ysize );
-
- if ( metrics_only )
- goto Exit1;
-
- /* Allocate and read bitmap data */
- {
- FT_ULong len = (FT_ULong)glyph->root.bitmap.pitch * ysize;
-
-
- error = ft_glyphslot_alloc_bitmap( &glyph->root, len );
- if ( !error )
- error = pfr_load_bitmap_bits(
- p,
- stream->limit,
- format,
- FT_BOOL( face->header.color_flags &
- PFR_FLAG_INVERT_BITMAP ),
- &glyph->root.bitmap );
- }
- }
-
- Exit1:
- FT_FRAME_EXIT();
- }
-
- Exit:
- return error;
- }
-
-
-/* END */
diff --git a/src/pfr/pfrsbit.h b/src/pfr/pfrsbit.h
deleted file mode 100644
index fc270f50a..000000000
--- a/src/pfr/pfrsbit.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrsbit.h */
-/* */
-/* FreeType PFR bitmap loader (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PFRSBIT_H_
-#define PFRSBIT_H_
-
-#include "pfrobjs.h"
-
-FT_BEGIN_HEADER
-
- FT_LOCAL( FT_Error )
- pfr_slot_load_bitmap( PFR_Slot glyph,
- PFR_Size size,
- FT_UInt glyph_index,
- FT_Bool metrics_only );
-
-FT_END_HEADER
-
-#endif /* PFRSBIT_H_ */
-
-
-/* END */
diff --git a/src/pfr/pfrtypes.h b/src/pfr/pfrtypes.h
deleted file mode 100644
index c3d542c20..000000000
--- a/src/pfr/pfrtypes.h
+++ /dev/null
@@ -1,332 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrtypes.h */
-/* */
-/* FreeType PFR data structures (specification only). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PFRTYPES_H_
-#define PFRTYPES_H_
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-
-FT_BEGIN_HEADER
-
- /************************************************************************/
-
- /* the PFR Header structure */
- typedef struct PFR_HeaderRec_
- {
- FT_UInt32 signature;
- FT_UInt version;
- FT_UInt signature2;
- FT_UInt header_size;
-
- FT_UInt log_dir_size;
- FT_UInt log_dir_offset;
-
- FT_UInt log_font_max_size;
- FT_UInt32 log_font_section_size;
- FT_UInt32 log_font_section_offset;
-
- FT_UInt32 phy_font_max_size;
- FT_UInt32 phy_font_section_size;
- FT_UInt32 phy_font_section_offset;
-
- FT_UInt gps_max_size;
- FT_UInt32 gps_section_size;
- FT_UInt32 gps_section_offset;
-
- FT_UInt max_blue_values;
- FT_UInt max_x_orus;
- FT_UInt max_y_orus;
-
- FT_UInt phy_font_max_size_high;
- FT_UInt color_flags;
-
- FT_UInt32 bct_max_size;
- FT_UInt32 bct_set_max_size;
- FT_UInt32 phy_bct_set_max_size;
-
- FT_UInt num_phy_fonts;
- FT_UInt max_vert_stem_snap;
- FT_UInt max_horz_stem_snap;
- FT_UInt max_chars;
-
- } PFR_HeaderRec, *PFR_Header;
-
-
- /* used in `color_flags' field of the PFR_Header */
-#define PFR_FLAG_BLACK_PIXEL 0x01U
-#define PFR_FLAG_INVERT_BITMAP 0x02U
-
-
- /************************************************************************/
-
- typedef struct PFR_LogFontRec_
- {
- FT_UInt32 size;
- FT_UInt32 offset;
-
- FT_Int32 matrix[4];
- FT_UInt stroke_flags;
- FT_Int stroke_thickness;
- FT_Int bold_thickness;
- FT_Int32 miter_limit;
-
- FT_UInt32 phys_size;
- FT_UInt32 phys_offset;
-
- } PFR_LogFontRec, *PFR_LogFont;
-
-
-#define PFR_LINE_JOIN_MITER 0x00U
-#define PFR_LINE_JOIN_ROUND 0x01U
-#define PFR_LINE_JOIN_BEVEL 0x02U
-#define PFR_LINE_JOIN_MASK ( PFR_LINE_JOIN_ROUND | PFR_LINE_JOIN_BEVEL )
-
-#define PFR_LOG_STROKE 0x04U
-#define PFR_LOG_2BYTE_STROKE 0x08U
-#define PFR_LOG_BOLD 0x10U
-#define PFR_LOG_2BYTE_BOLD 0x20U
-#define PFR_LOG_EXTRA_ITEMS 0x40U
-
-
- /************************************************************************/
-
-#define PFR_BITMAP_2BYTE_CHARCODE 0x01U
-#define PFR_BITMAP_2BYTE_SIZE 0x02U
-#define PFR_BITMAP_3BYTE_OFFSET 0x04U
-
- /*not part of the specification but used for implementation */
-#define PFR_BITMAP_CHARCODES_VALIDATED 0x40U
-#define PFR_BITMAP_VALID_CHARCODES 0x80U
-
-
- typedef struct PFR_BitmapCharRec_
- {
- FT_UInt char_code;
- FT_UInt gps_size;
- FT_UInt32 gps_offset;
-
- } PFR_BitmapCharRec, *PFR_BitmapChar;
-
-
-#define PFR_STRIKE_2BYTE_XPPM 0x01U
-#define PFR_STRIKE_2BYTE_YPPM 0x02U
-#define PFR_STRIKE_3BYTE_SIZE 0x04U
-#define PFR_STRIKE_3BYTE_OFFSET 0x08U
-#define PFR_STRIKE_2BYTE_COUNT 0x10U
-
-
- typedef struct PFR_StrikeRec_
- {
- FT_UInt x_ppm;
- FT_UInt y_ppm;
- FT_UInt flags;
-
- FT_UInt32 gps_size;
- FT_UInt32 gps_offset;
-
- FT_UInt32 bct_size;
- FT_UInt32 bct_offset;
-
- /* optional */
- FT_UInt num_bitmaps;
- PFR_BitmapChar bitmaps;
-
- } PFR_StrikeRec, *PFR_Strike;
-
-
- /************************************************************************/
-
- typedef struct PFR_CharRec_
- {
- FT_UInt char_code;
- FT_Int advance;
- FT_UInt gps_size;
- FT_UInt32 gps_offset;
-
- } PFR_CharRec, *PFR_Char;
-
-
- /************************************************************************/
-
- typedef struct PFR_DimensionRec_
- {
- FT_UInt standard;
- FT_UInt num_stem_snaps;
- FT_Int* stem_snaps;
-
- } PFR_DimensionRec, *PFR_Dimension;
-
- /************************************************************************/
-
- typedef struct PFR_KernItemRec_* PFR_KernItem;
-
- typedef struct PFR_KernItemRec_
- {
- PFR_KernItem next;
- FT_Byte pair_count;
- FT_Byte flags;
- FT_Short base_adj;
- FT_UInt pair_size;
- FT_Offset offset;
- FT_UInt32 pair1;
- FT_UInt32 pair2;
-
- } PFR_KernItemRec;
-
-
-#define PFR_KERN_INDEX( g1, g2 ) \
- ( ( (FT_UInt32)(g1) << 16 ) | (FT_UInt16)(g2) )
-
-#define PFR_KERN_PAIR_INDEX( pair ) \
- PFR_KERN_INDEX( (pair)->glyph1, (pair)->glyph2 )
-
-#define PFR_NEXT_KPAIR( p ) ( p += 2, \
- ( (FT_UInt32)p[-2] << 16 ) | p[-1] )
-
-
- /************************************************************************/
-
- typedef struct PFR_PhyFontRec_
- {
- FT_Memory memory;
- FT_UInt32 offset;
-
- FT_UInt font_ref_number;
- FT_UInt outline_resolution;
- FT_UInt metrics_resolution;
- FT_BBox bbox;
- FT_UInt flags;
- FT_Int standard_advance;
-
- FT_Int ascent; /* optional, bbox.yMax if not present */
- FT_Int descent; /* optional, bbox.yMin if not present */
- FT_Int leading; /* optional, 0 if not present */
-
- PFR_DimensionRec horizontal;
- PFR_DimensionRec vertical;
-
- FT_String* font_id;
- FT_String* family_name;
- FT_String* style_name;
-
- FT_UInt num_strikes;
- FT_UInt max_strikes;
- PFR_StrikeRec* strikes;
-
- FT_UInt num_blue_values;
- FT_Int *blue_values;
- FT_UInt blue_fuzz;
- FT_UInt blue_scale;
-
- FT_UInt num_chars;
- FT_Offset chars_offset;
- PFR_Char chars;
-
- FT_UInt num_kern_pairs;
- PFR_KernItem kern_items;
- PFR_KernItem* kern_items_tail;
-
- /* not part of the spec, but used during load */
- FT_ULong bct_offset;
- FT_Byte* cursor;
-
- } PFR_PhyFontRec, *PFR_PhyFont;
-
-
-#define PFR_PHY_VERTICAL 0x01U
-#define PFR_PHY_2BYTE_CHARCODE 0x02U
-#define PFR_PHY_PROPORTIONAL 0x04U
-#define PFR_PHY_ASCII_CODE 0x08U
-#define PFR_PHY_2BYTE_GPS_SIZE 0x10U
-#define PFR_PHY_3BYTE_GPS_OFFSET 0x20U
-#define PFR_PHY_EXTRA_ITEMS 0x80U
-
-
-#define PFR_KERN_2BYTE_CHAR 0x01U
-#define PFR_KERN_2BYTE_ADJ 0x02U
-
-
- /************************************************************************/
-
-#define PFR_GLYPH_YCOUNT 0x01U
-#define PFR_GLYPH_XCOUNT 0x02U
-#define PFR_GLYPH_1BYTE_XYCOUNT 0x04U
-
-#define PFR_GLYPH_SINGLE_EXTRA_ITEMS 0x08U
-#define PFR_GLYPH_COMPOUND_EXTRA_ITEMS 0x40U
-
-#define PFR_GLYPH_IS_COMPOUND 0x80U
-
-
- /* controlled coordinate */
- typedef struct PFR_CoordRec_
- {
- FT_UInt org;
- FT_UInt cur;
-
- } PFR_CoordRec, *PFR_Coord;
-
-
- typedef struct PFR_SubGlyphRec_
- {
- FT_Fixed x_scale;
- FT_Fixed y_scale;
- FT_Int x_delta;
- FT_Int y_delta;
- FT_UInt32 gps_offset;
- FT_UInt gps_size;
-
- } PFR_SubGlyphRec, *PFR_SubGlyph;
-
-
-#define PFR_SUBGLYPH_XSCALE 0x10U
-#define PFR_SUBGLYPH_YSCALE 0x20U
-#define PFR_SUBGLYPH_2BYTE_SIZE 0x40U
-#define PFR_SUBGLYPH_3BYTE_OFFSET 0x80U
-
-
- typedef struct PFR_GlyphRec_
- {
- FT_Byte format;
-
-#if 0
- FT_UInt num_x_control;
- FT_UInt num_y_control;
-#endif
- FT_UInt max_xy_control;
- FT_Pos* x_control;
- FT_Pos* y_control;
-
-
- FT_UInt num_subs;
- FT_UInt max_subs;
- PFR_SubGlyphRec* subs;
-
- FT_GlyphLoader loader;
- FT_Bool path_begun;
-
- } PFR_GlyphRec, *PFR_Glyph;
-
-
-FT_END_HEADER
-
-#endif /* PFRTYPES_H_ */
-
-
-/* END */
diff --git a/src/pfr/rules.mk b/src/pfr/rules.mk
deleted file mode 100644
index 9940f6228..000000000
--- a/src/pfr/rules.mk
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# FreeType 2 PFR driver configuration rules
-#
-
-
-# Copyright 2002-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# pfr driver directory
-#
-PFR_DIR := $(SRC_DIR)/pfr
-
-
-# compilation flags for the driver
-#
-PFR_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(PFR_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# pfr driver sources (i.e., C files)
-#
-PFR_DRV_SRC := $(PFR_DIR)/pfrload.c \
- $(PFR_DIR)/pfrgload.c \
- $(PFR_DIR)/pfrcmap.c \
- $(PFR_DIR)/pfrdrivr.c \
- $(PFR_DIR)/pfrsbit.c \
- $(PFR_DIR)/pfrobjs.c
-
-# pfr driver headers
-#
-PFR_DRV_H := $(PFR_DRV_SRC:%.c=%.h) \
- $(PFR_DIR)/pfrerror.h \
- $(PFR_DIR)/pfrtypes.h
-
-
-# Pfr driver object(s)
-#
-# PFR_DRV_OBJ_M is used during `multi' builds
-# PFR_DRV_OBJ_S is used during `single' builds
-#
-PFR_DRV_OBJ_M := $(PFR_DRV_SRC:$(PFR_DIR)/%.c=$(OBJ_DIR)/%.$O)
-PFR_DRV_OBJ_S := $(OBJ_DIR)/pfr.$O
-
-# pfr driver source file for single build
-#
-PFR_DRV_SRC_S := $(PFR_DIR)/pfr.c
-
-
-# pfr driver - single object
-#
-$(PFR_DRV_OBJ_S): $(PFR_DRV_SRC_S) $(PFR_DRV_SRC) $(FREETYPE_H) $(PFR_DRV_H)
- $(PFR_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(PFR_DRV_SRC_S))
-
-
-# pfr driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(PFR_DIR)/%.c $(FREETYPE_H) $(PFR_DRV_H)
- $(PFR_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(PFR_DRV_OBJ_S)
-DRV_OBJS_M += $(PFR_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/psaux/Jamfile b/src/psaux/Jamfile
deleted file mode 100644
index 798b73d1c..000000000
--- a/src/psaux/Jamfile
+++ /dev/null
@@ -1,35 +0,0 @@
-# FreeType 2 src/psaux Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) psaux ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = afmparse
- psauxmod
- psconv
- psobjs
- t1cmap
- t1decode
- ;
- }
- else
- {
- _sources = psaux ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/psaux Jamfile
diff --git a/src/psaux/afmparse.c b/src/psaux/afmparse.c
deleted file mode 100644
index ff2cc8cf0..000000000
--- a/src/psaux/afmparse.c
+++ /dev/null
@@ -1,986 +0,0 @@
-/***************************************************************************/
-/* */
-/* afmparse.c */
-/* */
-/* AFM parser (body). */
-/* */
-/* Copyright 2006-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
-
-#include "afmparse.h"
-#include "psconv.h"
-
-#include "psauxerr.h"
-
-
-/***************************************************************************/
-/* */
-/* AFM_Stream */
-/* */
-/* The use of AFM_Stream is largely inspired by parseAFM.[ch] from t1lib. */
-/* */
-/* */
-
- enum
- {
- AFM_STREAM_STATUS_NORMAL,
- AFM_STREAM_STATUS_EOC,
- AFM_STREAM_STATUS_EOL,
- AFM_STREAM_STATUS_EOF
- };
-
-
- typedef struct AFM_StreamRec_
- {
- FT_Byte* cursor;
- FT_Byte* base;
- FT_Byte* limit;
-
- FT_Int status;
-
- } AFM_StreamRec;
-
-
-#ifndef EOF
-#define EOF -1
-#endif
-
-
- /* this works because empty lines are ignored */
-#define AFM_IS_NEWLINE( ch ) ( (ch) == '\r' || (ch) == '\n' )
-
-#define AFM_IS_EOF( ch ) ( (ch) == EOF || (ch) == '\x1a' )
-#define AFM_IS_SPACE( ch ) ( (ch) == ' ' || (ch) == '\t' )
-
- /* column separator; there is no `column' in the spec actually */
-#define AFM_IS_SEP( ch ) ( (ch) == ';' )
-
-#define AFM_GETC() \
- ( ( (stream)->cursor < (stream)->limit ) ? *(stream)->cursor++ \
- : EOF )
-
-#define AFM_STREAM_KEY_BEGIN( stream ) \
- (char*)( (stream)->cursor - 1 )
-
-#define AFM_STREAM_KEY_LEN( stream, key ) \
- (FT_Offset)( (char*)(stream)->cursor - key - 1 )
-
-#define AFM_STATUS_EOC( stream ) \
- ( (stream)->status >= AFM_STREAM_STATUS_EOC )
-
-#define AFM_STATUS_EOL( stream ) \
- ( (stream)->status >= AFM_STREAM_STATUS_EOL )
-
-#define AFM_STATUS_EOF( stream ) \
- ( (stream)->status >= AFM_STREAM_STATUS_EOF )
-
-
- static int
- afm_stream_skip_spaces( AFM_Stream stream )
- {
- int ch = 0; /* make stupid compiler happy */
-
-
- if ( AFM_STATUS_EOC( stream ) )
- return ';';
-
- while ( 1 )
- {
- ch = AFM_GETC();
- if ( !AFM_IS_SPACE( ch ) )
- break;
- }
-
- if ( AFM_IS_NEWLINE( ch ) )
- stream->status = AFM_STREAM_STATUS_EOL;
- else if ( AFM_IS_SEP( ch ) )
- stream->status = AFM_STREAM_STATUS_EOC;
- else if ( AFM_IS_EOF( ch ) )
- stream->status = AFM_STREAM_STATUS_EOF;
-
- return ch;
- }
-
-
- /* read a key or value in current column */
- static char*
- afm_stream_read_one( AFM_Stream stream )
- {
- char* str;
-
-
- afm_stream_skip_spaces( stream );
- if ( AFM_STATUS_EOC( stream ) )
- return NULL;
-
- str = AFM_STREAM_KEY_BEGIN( stream );
-
- while ( 1 )
- {
- int ch = AFM_GETC();
-
-
- if ( AFM_IS_SPACE( ch ) )
- break;
- else if ( AFM_IS_NEWLINE( ch ) )
- {
- stream->status = AFM_STREAM_STATUS_EOL;
- break;
- }
- else if ( AFM_IS_SEP( ch ) )
- {
- stream->status = AFM_STREAM_STATUS_EOC;
- break;
- }
- else if ( AFM_IS_EOF( ch ) )
- {
- stream->status = AFM_STREAM_STATUS_EOF;
- break;
- }
- }
-
- return str;
- }
-
-
- /* read a string (i.e., read to EOL) */
- static char*
- afm_stream_read_string( AFM_Stream stream )
- {
- char* str;
-
-
- afm_stream_skip_spaces( stream );
- if ( AFM_STATUS_EOL( stream ) )
- return NULL;
-
- str = AFM_STREAM_KEY_BEGIN( stream );
-
- /* scan to eol */
- while ( 1 )
- {
- int ch = AFM_GETC();
-
-
- if ( AFM_IS_NEWLINE( ch ) )
- {
- stream->status = AFM_STREAM_STATUS_EOL;
- break;
- }
- else if ( AFM_IS_EOF( ch ) )
- {
- stream->status = AFM_STREAM_STATUS_EOF;
- break;
- }
- }
-
- return str;
- }
-
-
- /*************************************************************************/
- /* */
- /* AFM_Parser */
- /* */
- /* */
-
- /* all keys defined in Ch. 7-10 of 5004.AFM_Spec.pdf */
- typedef enum AFM_Token_
- {
- AFM_TOKEN_ASCENDER,
- AFM_TOKEN_AXISLABEL,
- AFM_TOKEN_AXISTYPE,
- AFM_TOKEN_B,
- AFM_TOKEN_BLENDAXISTYPES,
- AFM_TOKEN_BLENDDESIGNMAP,
- AFM_TOKEN_BLENDDESIGNPOSITIONS,
- AFM_TOKEN_C,
- AFM_TOKEN_CC,
- AFM_TOKEN_CH,
- AFM_TOKEN_CAPHEIGHT,
- AFM_TOKEN_CHARWIDTH,
- AFM_TOKEN_CHARACTERSET,
- AFM_TOKEN_CHARACTERS,
- AFM_TOKEN_DESCENDER,
- AFM_TOKEN_ENCODINGSCHEME,
- AFM_TOKEN_ENDAXIS,
- AFM_TOKEN_ENDCHARMETRICS,
- AFM_TOKEN_ENDCOMPOSITES,
- AFM_TOKEN_ENDDIRECTION,
- AFM_TOKEN_ENDFONTMETRICS,
- AFM_TOKEN_ENDKERNDATA,
- AFM_TOKEN_ENDKERNPAIRS,
- AFM_TOKEN_ENDTRACKKERN,
- AFM_TOKEN_ESCCHAR,
- AFM_TOKEN_FAMILYNAME,
- AFM_TOKEN_FONTBBOX,
- AFM_TOKEN_FONTNAME,
- AFM_TOKEN_FULLNAME,
- AFM_TOKEN_ISBASEFONT,
- AFM_TOKEN_ISCIDFONT,
- AFM_TOKEN_ISFIXEDPITCH,
- AFM_TOKEN_ISFIXEDV,
- AFM_TOKEN_ITALICANGLE,
- AFM_TOKEN_KP,
- AFM_TOKEN_KPH,
- AFM_TOKEN_KPX,
- AFM_TOKEN_KPY,
- AFM_TOKEN_L,
- AFM_TOKEN_MAPPINGSCHEME,
- AFM_TOKEN_METRICSSETS,
- AFM_TOKEN_N,
- AFM_TOKEN_NOTICE,
- AFM_TOKEN_PCC,
- AFM_TOKEN_STARTAXIS,
- AFM_TOKEN_STARTCHARMETRICS,
- AFM_TOKEN_STARTCOMPOSITES,
- AFM_TOKEN_STARTDIRECTION,
- AFM_TOKEN_STARTFONTMETRICS,
- AFM_TOKEN_STARTKERNDATA,
- AFM_TOKEN_STARTKERNPAIRS,
- AFM_TOKEN_STARTKERNPAIRS0,
- AFM_TOKEN_STARTKERNPAIRS1,
- AFM_TOKEN_STARTTRACKKERN,
- AFM_TOKEN_STDHW,
- AFM_TOKEN_STDVW,
- AFM_TOKEN_TRACKKERN,
- AFM_TOKEN_UNDERLINEPOSITION,
- AFM_TOKEN_UNDERLINETHICKNESS,
- AFM_TOKEN_VV,
- AFM_TOKEN_VVECTOR,
- AFM_TOKEN_VERSION,
- AFM_TOKEN_W,
- AFM_TOKEN_W0,
- AFM_TOKEN_W0X,
- AFM_TOKEN_W0Y,
- AFM_TOKEN_W1,
- AFM_TOKEN_W1X,
- AFM_TOKEN_W1Y,
- AFM_TOKEN_WX,
- AFM_TOKEN_WY,
- AFM_TOKEN_WEIGHT,
- AFM_TOKEN_WEIGHTVECTOR,
- AFM_TOKEN_XHEIGHT,
- N_AFM_TOKENS,
- AFM_TOKEN_UNKNOWN
-
- } AFM_Token;
-
-
- static const char* const afm_key_table[N_AFM_TOKENS] =
- {
- "Ascender",
- "AxisLabel",
- "AxisType",
- "B",
- "BlendAxisTypes",
- "BlendDesignMap",
- "BlendDesignPositions",
- "C",
- "CC",
- "CH",
- "CapHeight",
- "CharWidth",
- "CharacterSet",
- "Characters",
- "Descender",
- "EncodingScheme",
- "EndAxis",
- "EndCharMetrics",
- "EndComposites",
- "EndDirection",
- "EndFontMetrics",
- "EndKernData",
- "EndKernPairs",
- "EndTrackKern",
- "EscChar",
- "FamilyName",
- "FontBBox",
- "FontName",
- "FullName",
- "IsBaseFont",
- "IsCIDFont",
- "IsFixedPitch",
- "IsFixedV",
- "ItalicAngle",
- "KP",
- "KPH",
- "KPX",
- "KPY",
- "L",
- "MappingScheme",
- "MetricsSets",
- "N",
- "Notice",
- "PCC",
- "StartAxis",
- "StartCharMetrics",
- "StartComposites",
- "StartDirection",
- "StartFontMetrics",
- "StartKernData",
- "StartKernPairs",
- "StartKernPairs0",
- "StartKernPairs1",
- "StartTrackKern",
- "StdHW",
- "StdVW",
- "TrackKern",
- "UnderlinePosition",
- "UnderlineThickness",
- "VV",
- "VVector",
- "Version",
- "W",
- "W0",
- "W0X",
- "W0Y",
- "W1",
- "W1X",
- "W1Y",
- "WX",
- "WY",
- "Weight",
- "WeightVector",
- "XHeight"
- };
-
-
- /*
- * `afm_parser_read_vals' and `afm_parser_next_key' provide
- * high-level operations to an AFM_Stream. The rest of the
- * parser functions should use them without accessing the
- * AFM_Stream directly.
- */
-
- FT_LOCAL_DEF( FT_Int )
- afm_parser_read_vals( AFM_Parser parser,
- AFM_Value vals,
- FT_Int n )
- {
- AFM_Stream stream = parser->stream;
- char* str;
- FT_Int i;
-
-
- if ( n > AFM_MAX_ARGUMENTS )
- return 0;
-
- for ( i = 0; i < n; i++ )
- {
- FT_Offset len;
- AFM_Value val = vals + i;
-
-
- if ( val->type == AFM_VALUE_TYPE_STRING )
- str = afm_stream_read_string( stream );
- else
- str = afm_stream_read_one( stream );
-
- if ( !str )
- break;
-
- len = AFM_STREAM_KEY_LEN( stream, str );
-
- switch ( val->type )
- {
- case AFM_VALUE_TYPE_STRING:
- case AFM_VALUE_TYPE_NAME:
- {
- FT_Memory memory = parser->memory;
- FT_Error error;
-
-
- if ( !FT_QALLOC( val->u.s, len + 1 ) )
- {
- ft_memcpy( val->u.s, str, len );
- val->u.s[len] = '\0';
- }
- }
- break;
-
- case AFM_VALUE_TYPE_FIXED:
- val->u.f = PS_Conv_ToFixed( (FT_Byte**)(void*)&str,
- (FT_Byte*)str + len, 0 );
- break;
-
- case AFM_VALUE_TYPE_INTEGER:
- val->u.i = PS_Conv_ToInt( (FT_Byte**)(void*)&str,
- (FT_Byte*)str + len );
- break;
-
- case AFM_VALUE_TYPE_BOOL:
- val->u.b = FT_BOOL( len == 4 &&
- !ft_strncmp( str, "true", 4 ) );
- break;
-
- case AFM_VALUE_TYPE_INDEX:
- if ( parser->get_index )
- val->u.i = parser->get_index( str, len, parser->user_data );
- else
- val->u.i = 0;
- break;
- }
- }
-
- return i;
- }
-
-
- FT_LOCAL_DEF( char* )
- afm_parser_next_key( AFM_Parser parser,
- FT_Bool line,
- FT_Offset* len )
- {
- AFM_Stream stream = parser->stream;
- char* key = NULL; /* make stupid compiler happy */
-
-
- if ( line )
- {
- while ( 1 )
- {
- /* skip current line */
- if ( !AFM_STATUS_EOL( stream ) )
- afm_stream_read_string( stream );
-
- stream->status = AFM_STREAM_STATUS_NORMAL;
- key = afm_stream_read_one( stream );
-
- /* skip empty line */
- if ( !key &&
- !AFM_STATUS_EOF( stream ) &&
- AFM_STATUS_EOL( stream ) )
- continue;
-
- break;
- }
- }
- else
- {
- while ( 1 )
- {
- /* skip current column */
- while ( !AFM_STATUS_EOC( stream ) )
- afm_stream_read_one( stream );
-
- stream->status = AFM_STREAM_STATUS_NORMAL;
- key = afm_stream_read_one( stream );
-
- /* skip empty column */
- if ( !key &&
- !AFM_STATUS_EOF( stream ) &&
- AFM_STATUS_EOC( stream ) )
- continue;
-
- break;
- }
- }
-
- if ( len )
- *len = ( key ) ? (FT_Offset)AFM_STREAM_KEY_LEN( stream, key )
- : 0;
-
- return key;
- }
-
-
- static AFM_Token
- afm_tokenize( const char* key,
- FT_Offset len )
- {
- int n;
-
-
- for ( n = 0; n < N_AFM_TOKENS; n++ )
- {
- if ( *( afm_key_table[n] ) == *key )
- {
- for ( ; n < N_AFM_TOKENS; n++ )
- {
- if ( *( afm_key_table[n] ) != *key )
- return AFM_TOKEN_UNKNOWN;
-
- if ( ft_strncmp( afm_key_table[n], key, len ) == 0 )
- return (AFM_Token) n;
- }
- }
- }
-
- return AFM_TOKEN_UNKNOWN;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- afm_parser_init( AFM_Parser parser,
- FT_Memory memory,
- FT_Byte* base,
- FT_Byte* limit )
- {
- AFM_Stream stream = NULL;
- FT_Error error;
-
-
- if ( FT_NEW( stream ) )
- return error;
-
- stream->cursor = stream->base = base;
- stream->limit = limit;
-
- /* don't skip the first line during the first call */
- stream->status = AFM_STREAM_STATUS_EOL;
-
- parser->memory = memory;
- parser->stream = stream;
- parser->FontInfo = NULL;
- parser->get_index = NULL;
-
- return FT_Err_Ok;
- }
-
-
- FT_LOCAL( void )
- afm_parser_done( AFM_Parser parser )
- {
- FT_Memory memory = parser->memory;
-
-
- FT_FREE( parser->stream );
- }
-
-
- static FT_Error
- afm_parser_read_int( AFM_Parser parser,
- FT_Int* aint )
- {
- AFM_ValueRec val;
-
-
- val.type = AFM_VALUE_TYPE_INTEGER;
-
- if ( afm_parser_read_vals( parser, &val, 1 ) == 1 )
- {
- *aint = val.u.i;
-
- return FT_Err_Ok;
- }
- else
- return FT_THROW( Syntax_Error );
- }
-
-
- static FT_Error
- afm_parse_track_kern( AFM_Parser parser )
- {
- AFM_FontInfo fi = parser->FontInfo;
- AFM_TrackKern tk;
- char* key;
- FT_Offset len;
- int n = -1;
- FT_Int tmp;
-
-
- if ( afm_parser_read_int( parser, &tmp ) )
- goto Fail;
-
- if ( tmp < 0 )
- goto Fail;
-
- fi->NumTrackKern = (FT_UInt)tmp;
-
- if ( fi->NumTrackKern )
- {
- FT_Memory memory = parser->memory;
- FT_Error error;
-
-
- if ( FT_QNEW_ARRAY( fi->TrackKerns, fi->NumTrackKern ) )
- return error;
- }
-
- while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 )
- {
- AFM_ValueRec shared_vals[5];
-
-
- switch ( afm_tokenize( key, len ) )
- {
- case AFM_TOKEN_TRACKKERN:
- n++;
-
- if ( n >= (int)fi->NumTrackKern )
- goto Fail;
-
- tk = fi->TrackKerns + n;
-
- shared_vals[0].type = AFM_VALUE_TYPE_INTEGER;
- shared_vals[1].type = AFM_VALUE_TYPE_FIXED;
- shared_vals[2].type = AFM_VALUE_TYPE_FIXED;
- shared_vals[3].type = AFM_VALUE_TYPE_FIXED;
- shared_vals[4].type = AFM_VALUE_TYPE_FIXED;
- if ( afm_parser_read_vals( parser, shared_vals, 5 ) != 5 )
- goto Fail;
-
- tk->degree = shared_vals[0].u.i;
- tk->min_ptsize = shared_vals[1].u.f;
- tk->min_kern = shared_vals[2].u.f;
- tk->max_ptsize = shared_vals[3].u.f;
- tk->max_kern = shared_vals[4].u.f;
-
- break;
-
- case AFM_TOKEN_ENDTRACKKERN:
- case AFM_TOKEN_ENDKERNDATA:
- case AFM_TOKEN_ENDFONTMETRICS:
- fi->NumTrackKern = (FT_UInt)( n + 1 );
- return FT_Err_Ok;
-
- case AFM_TOKEN_UNKNOWN:
- break;
-
- default:
- goto Fail;
- }
- }
-
- Fail:
- return FT_THROW( Syntax_Error );
- }
-
-
-#undef KERN_INDEX
-#define KERN_INDEX( g1, g2 ) ( ( (FT_ULong)g1 << 16 ) | g2 )
-
-
- /* compare two kerning pairs */
- FT_CALLBACK_DEF( int )
- afm_compare_kern_pairs( const void* a,
- const void* b )
- {
- AFM_KernPair kp1 = (AFM_KernPair)a;
- AFM_KernPair kp2 = (AFM_KernPair)b;
-
- FT_ULong index1 = KERN_INDEX( kp1->index1, kp1->index2 );
- FT_ULong index2 = KERN_INDEX( kp2->index1, kp2->index2 );
-
-
- if ( index1 > index2 )
- return 1;
- else if ( index1 < index2 )
- return -1;
- else
- return 0;
- }
-
-
- static FT_Error
- afm_parse_kern_pairs( AFM_Parser parser )
- {
- AFM_FontInfo fi = parser->FontInfo;
- AFM_KernPair kp;
- char* key;
- FT_Offset len;
- int n = -1;
- FT_Int tmp;
-
-
- if ( afm_parser_read_int( parser, &tmp ) )
- goto Fail;
-
- if ( tmp < 0 )
- goto Fail;
-
- fi->NumKernPair = (FT_UInt)tmp;
-
- if ( fi->NumKernPair )
- {
- FT_Memory memory = parser->memory;
- FT_Error error;
-
-
- if ( FT_QNEW_ARRAY( fi->KernPairs, fi->NumKernPair ) )
- return error;
- }
-
- while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 )
- {
- AFM_Token token = afm_tokenize( key, len );
-
-
- switch ( token )
- {
- case AFM_TOKEN_KP:
- case AFM_TOKEN_KPX:
- case AFM_TOKEN_KPY:
- {
- FT_Int r;
- AFM_ValueRec shared_vals[4];
-
-
- n++;
-
- if ( n >= (int)fi->NumKernPair )
- goto Fail;
-
- kp = fi->KernPairs + n;
-
- shared_vals[0].type = AFM_VALUE_TYPE_INDEX;
- shared_vals[1].type = AFM_VALUE_TYPE_INDEX;
- shared_vals[2].type = AFM_VALUE_TYPE_INTEGER;
- shared_vals[3].type = AFM_VALUE_TYPE_INTEGER;
- r = afm_parser_read_vals( parser, shared_vals, 4 );
- if ( r < 3 )
- goto Fail;
-
- /* index values can't be negative */
- kp->index1 = shared_vals[0].u.u;
- kp->index2 = shared_vals[1].u.u;
- if ( token == AFM_TOKEN_KPY )
- {
- kp->x = 0;
- kp->y = shared_vals[2].u.i;
- }
- else
- {
- kp->x = shared_vals[2].u.i;
- kp->y = ( token == AFM_TOKEN_KP && r == 4 )
- ? shared_vals[3].u.i : 0;
- }
- }
- break;
-
- case AFM_TOKEN_ENDKERNPAIRS:
- case AFM_TOKEN_ENDKERNDATA:
- case AFM_TOKEN_ENDFONTMETRICS:
- fi->NumKernPair = (FT_UInt)( n + 1 );
- ft_qsort( fi->KernPairs, fi->NumKernPair,
- sizeof ( AFM_KernPairRec ),
- afm_compare_kern_pairs );
- return FT_Err_Ok;
-
- case AFM_TOKEN_UNKNOWN:
- break;
-
- default:
- goto Fail;
- }
- }
-
- Fail:
- return FT_THROW( Syntax_Error );
- }
-
-
- static FT_Error
- afm_parse_kern_data( AFM_Parser parser )
- {
- FT_Error error;
- char* key;
- FT_Offset len;
-
-
- while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 )
- {
- switch ( afm_tokenize( key, len ) )
- {
- case AFM_TOKEN_STARTTRACKKERN:
- error = afm_parse_track_kern( parser );
- if ( error )
- return error;
- break;
-
- case AFM_TOKEN_STARTKERNPAIRS:
- case AFM_TOKEN_STARTKERNPAIRS0:
- error = afm_parse_kern_pairs( parser );
- if ( error )
- return error;
- break;
-
- case AFM_TOKEN_ENDKERNDATA:
- case AFM_TOKEN_ENDFONTMETRICS:
- return FT_Err_Ok;
-
- case AFM_TOKEN_UNKNOWN:
- break;
-
- default:
- goto Fail;
- }
- }
-
- Fail:
- return FT_THROW( Syntax_Error );
- }
-
-
- static FT_Error
- afm_parser_skip_section( AFM_Parser parser,
- FT_Int n,
- AFM_Token end_section )
- {
- char* key;
- FT_Offset len;
-
-
- while ( n-- > 0 )
- {
- key = afm_parser_next_key( parser, 1, NULL );
- if ( !key )
- goto Fail;
- }
-
- while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 )
- {
- AFM_Token token = afm_tokenize( key, len );
-
-
- if ( token == end_section || token == AFM_TOKEN_ENDFONTMETRICS )
- return FT_Err_Ok;
- }
-
- Fail:
- return FT_THROW( Syntax_Error );
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- afm_parser_parse( AFM_Parser parser )
- {
- FT_Memory memory = parser->memory;
- AFM_FontInfo fi = parser->FontInfo;
- FT_Error error = FT_ERR( Syntax_Error );
- char* key;
- FT_Offset len;
- FT_Int metrics_sets = 0;
-
-
- if ( !fi )
- return FT_THROW( Invalid_Argument );
-
- key = afm_parser_next_key( parser, 1, &len );
- if ( !key || len != 16 ||
- ft_strncmp( key, "StartFontMetrics", 16 ) != 0 )
- return FT_THROW( Unknown_File_Format );
-
- while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 )
- {
- AFM_ValueRec shared_vals[4];
-
-
- switch ( afm_tokenize( key, len ) )
- {
- case AFM_TOKEN_METRICSSETS:
- if ( afm_parser_read_int( parser, &metrics_sets ) )
- goto Fail;
-
- if ( metrics_sets != 0 && metrics_sets != 2 )
- {
- error = FT_THROW( Unimplemented_Feature );
-
- goto Fail;
- }
- break;
-
- case AFM_TOKEN_ISCIDFONT:
- shared_vals[0].type = AFM_VALUE_TYPE_BOOL;
- if ( afm_parser_read_vals( parser, shared_vals, 1 ) != 1 )
- goto Fail;
-
- fi->IsCIDFont = shared_vals[0].u.b;
- break;
-
- case AFM_TOKEN_FONTBBOX:
- shared_vals[0].type = AFM_VALUE_TYPE_FIXED;
- shared_vals[1].type = AFM_VALUE_TYPE_FIXED;
- shared_vals[2].type = AFM_VALUE_TYPE_FIXED;
- shared_vals[3].type = AFM_VALUE_TYPE_FIXED;
- if ( afm_parser_read_vals( parser, shared_vals, 4 ) != 4 )
- goto Fail;
-
- fi->FontBBox.xMin = shared_vals[0].u.f;
- fi->FontBBox.yMin = shared_vals[1].u.f;
- fi->FontBBox.xMax = shared_vals[2].u.f;
- fi->FontBBox.yMax = shared_vals[3].u.f;
- break;
-
- case AFM_TOKEN_ASCENDER:
- shared_vals[0].type = AFM_VALUE_TYPE_FIXED;
- if ( afm_parser_read_vals( parser, shared_vals, 1 ) != 1 )
- goto Fail;
-
- fi->Ascender = shared_vals[0].u.f;
- break;
-
- case AFM_TOKEN_DESCENDER:
- shared_vals[0].type = AFM_VALUE_TYPE_FIXED;
- if ( afm_parser_read_vals( parser, shared_vals, 1 ) != 1 )
- goto Fail;
-
- fi->Descender = shared_vals[0].u.f;
- break;
-
- case AFM_TOKEN_STARTCHARMETRICS:
- {
- FT_Int n = 0;
-
-
- if ( afm_parser_read_int( parser, &n ) )
- goto Fail;
-
- error = afm_parser_skip_section( parser, n,
- AFM_TOKEN_ENDCHARMETRICS );
- if ( error )
- return error;
- }
- break;
-
- case AFM_TOKEN_STARTKERNDATA:
- error = afm_parse_kern_data( parser );
- if ( error )
- goto Fail;
- /* fall through since we only support kern data */
-
- case AFM_TOKEN_ENDFONTMETRICS:
- return FT_Err_Ok;
-
- default:
- break;
- }
- }
-
- Fail:
- FT_FREE( fi->TrackKerns );
- fi->NumTrackKern = 0;
-
- FT_FREE( fi->KernPairs );
- fi->NumKernPair = 0;
-
- fi->IsCIDFont = 0;
-
- return error;
- }
-
-#else /* T1_CONFIG_OPTION_NO_AFM */
-
- /* ANSI C doesn't like empty source files */
- typedef int _afm_parse_dummy;
-
-#endif /* T1_CONFIG_OPTION_NO_AFM */
-
-
-/* END */
diff --git a/src/psaux/afmparse.h b/src/psaux/afmparse.h
deleted file mode 100644
index cd2beb780..000000000
--- a/src/psaux/afmparse.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/***************************************************************************/
-/* */
-/* afmparse.h */
-/* */
-/* AFM parser (specification). */
-/* */
-/* Copyright 2006-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFMPARSE_H_
-#define AFMPARSE_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( FT_Error )
- afm_parser_init( AFM_Parser parser,
- FT_Memory memory,
- FT_Byte* base,
- FT_Byte* limit );
-
-
- FT_LOCAL( void )
- afm_parser_done( AFM_Parser parser );
-
-
- FT_LOCAL( FT_Error )
- afm_parser_parse( AFM_Parser parser );
-
-
- enum AFM_ValueType_
- {
- AFM_VALUE_TYPE_STRING,
- AFM_VALUE_TYPE_NAME,
- AFM_VALUE_TYPE_FIXED, /* real number */
- AFM_VALUE_TYPE_INTEGER,
- AFM_VALUE_TYPE_BOOL,
- AFM_VALUE_TYPE_INDEX /* glyph index */
- };
-
-
- typedef struct AFM_ValueRec_
- {
- enum AFM_ValueType_ type;
- union
- {
- char* s;
- FT_Fixed f;
- FT_Int i;
- FT_UInt u;
- FT_Bool b;
-
- } u;
-
- } AFM_ValueRec, *AFM_Value;
-
-#define AFM_MAX_ARGUMENTS 5
-
- FT_LOCAL( FT_Int )
- afm_parser_read_vals( AFM_Parser parser,
- AFM_Value vals,
- FT_Int n );
-
- /* read the next key from the next line or column */
- FT_LOCAL( char* )
- afm_parser_next_key( AFM_Parser parser,
- FT_Bool line,
- FT_Offset* len );
-
-FT_END_HEADER
-
-#endif /* AFMPARSE_H_ */
-
-
-/* END */
diff --git a/src/psaux/module.mk b/src/psaux/module.mk
deleted file mode 100644
index c70a22716..000000000
--- a/src/psaux/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 PSaux module definition
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += PSAUX_MODULE
-
-define PSAUX_MODULE
-$(OPEN_DRIVER) FT_Module_Class, psaux_module_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)psaux $(ECHO_DRIVER_DESC)Postscript Type 1 & Type 2 helper module$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/psaux/psaux.c b/src/psaux/psaux.c
deleted file mode 100644
index c373aa7d5..000000000
--- a/src/psaux/psaux.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/***************************************************************************/
-/* */
-/* psaux.c */
-/* */
-/* FreeType auxiliary PostScript driver component (body only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "afmparse.c"
-#include "psauxmod.c"
-#include "psconv.c"
-#include "psobjs.c"
-#include "t1cmap.c"
-#include "t1decode.c"
-
-
-/* END */
diff --git a/src/psaux/psauxerr.h b/src/psaux/psauxerr.h
deleted file mode 100644
index 1d7ac6001..000000000
--- a/src/psaux/psauxerr.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/***************************************************************************/
-/* */
-/* psauxerr.h */
-/* */
-/* PS auxiliary module error codes (specification only). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the PS auxiliary module error enumeration */
- /* constants. */
- /* */
- /*************************************************************************/
-
-#ifndef PSAUXERR_H_
-#define PSAUXERR_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX PSaux_Err_
-#define FT_ERR_BASE FT_Mod_Err_PSaux
-
-#include FT_ERRORS_H
-
-#endif /* PSAUXERR_H_ */
-
-
-/* END */
diff --git a/src/psaux/psauxmod.c b/src/psaux/psauxmod.c
deleted file mode 100644
index 1f589cefc..000000000
--- a/src/psaux/psauxmod.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/***************************************************************************/
-/* */
-/* psauxmod.c */
-/* */
-/* FreeType auxiliary PostScript module implementation (body). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include "psauxmod.h"
-#include "psobjs.h"
-#include "t1decode.h"
-#include "t1cmap.h"
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
-#include "afmparse.h"
-#endif
-
-
- FT_CALLBACK_TABLE_DEF
- const PS_Table_FuncsRec ps_table_funcs =
- {
- ps_table_new, /* init */
- ps_table_done, /* done */
- ps_table_add, /* add */
- ps_table_release /* release */
- };
-
-
- FT_CALLBACK_TABLE_DEF
- const PS_Parser_FuncsRec ps_parser_funcs =
- {
- ps_parser_init, /* init */
- ps_parser_done, /* done */
-
- ps_parser_skip_spaces, /* skip_spaces */
- ps_parser_skip_PS_token, /* skip_PS_token */
-
- ps_parser_to_int, /* to_int */
- ps_parser_to_fixed, /* to_fixed */
- ps_parser_to_bytes, /* to_bytes */
- ps_parser_to_coord_array, /* to_coord_array */
- ps_parser_to_fixed_array, /* to_fixed_array */
- ps_parser_to_token, /* to_token */
- ps_parser_to_token_array, /* to_token_array */
-
- ps_parser_load_field, /* load_field */
- ps_parser_load_field_table /* load_field_table */
- };
-
-
- FT_CALLBACK_TABLE_DEF
- const T1_Builder_FuncsRec t1_builder_funcs =
- {
- t1_builder_init, /* init */
- t1_builder_done, /* done */
-
- t1_builder_check_points, /* check_points */
- t1_builder_add_point, /* add_point */
- t1_builder_add_point1, /* add_point1 */
- t1_builder_add_contour, /* add_contour */
- t1_builder_start_point, /* start_point */
- t1_builder_close_contour /* close_contour */
- };
-
-
- FT_CALLBACK_TABLE_DEF
- const T1_Decoder_FuncsRec t1_decoder_funcs =
- {
- t1_decoder_init, /* init */
- t1_decoder_done, /* done */
- t1_decoder_parse_charstrings /* parse_charstrings */
- };
-
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
- FT_CALLBACK_TABLE_DEF
- const AFM_Parser_FuncsRec afm_parser_funcs =
- {
- afm_parser_init, /* init */
- afm_parser_done, /* done */
- afm_parser_parse /* parse */
- };
-#endif
-
-
- FT_CALLBACK_TABLE_DEF
- const T1_CMap_ClassesRec t1_cmap_classes =
- {
- &t1_cmap_standard_class_rec,
- &t1_cmap_expert_class_rec,
- &t1_cmap_custom_class_rec,
- &t1_cmap_unicode_class_rec
- };
-
-
- static
- const PSAux_Interface psaux_interface =
- {
- &ps_table_funcs,
- &ps_parser_funcs,
- &t1_builder_funcs,
- &t1_decoder_funcs,
- t1_decrypt,
-
- (const T1_CMap_ClassesRec*) &t1_cmap_classes,
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
- &afm_parser_funcs,
-#else
- 0,
-#endif
- };
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Module_Class psaux_module_class =
- {
- 0,
- sizeof ( FT_ModuleRec ),
- "psaux",
- 0x20000L,
- 0x20000L,
-
- &psaux_interface, /* module-specific interface */
-
- (FT_Module_Constructor)NULL, /* module_init */
- (FT_Module_Destructor) NULL, /* module_done */
- (FT_Module_Requester) NULL /* get_interface */
- };
-
-
-/* END */
diff --git a/src/psaux/psauxmod.h b/src/psaux/psauxmod.h
deleted file mode 100644
index 926f37eba..000000000
--- a/src/psaux/psauxmod.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/***************************************************************************/
-/* */
-/* psauxmod.h */
-/* */
-/* FreeType auxiliary PostScript module implementation (specification). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PSAUXMOD_H_
-#define PSAUXMOD_H_
-
-
-#include <ft2build.h>
-#include FT_MODULE_H
-
-
-FT_BEGIN_HEADER
-
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
-
- FT_EXPORT_VAR( const FT_Module_Class ) psaux_driver_class;
-
-
-FT_END_HEADER
-
-#endif /* PSAUXMOD_H_ */
-
-
-/* END */
diff --git a/src/psaux/psconv.c b/src/psaux/psconv.c
deleted file mode 100644
index d125b0834..000000000
--- a/src/psaux/psconv.c
+++ /dev/null
@@ -1,611 +0,0 @@
-/***************************************************************************/
-/* */
-/* psconv.c */
-/* */
-/* Some convenience conversions (body). */
-/* */
-/* Copyright 2006-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_INTERNAL_DEBUG_H
-
-#include "psconv.h"
-#include "psauxerr.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_psconv
-
-
- /* The following array is used by various functions to quickly convert */
- /* digits (both decimal and non-decimal) into numbers. */
-
-#if 'A' == 65
- /* ASCII */
-
- static const FT_Char ft_char_table[128] =
- {
- /* 0x00 */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
- -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,
- -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,
- };
-
- /* no character >= 0x80 can represent a valid number */
-#define OP >=
-
-#endif /* 'A' == 65 */
-
-#if 'A' == 193
- /* EBCDIC */
-
- static const FT_Char ft_char_table[128] =
- {
- /* 0x80 */
- -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, -1, -1, -1, -1, -1, -1,
- -1, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1,
- -1, -1, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, -1, -1, -1, -1, -1, -1,
- -1, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1,
- -1, -1, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, -1,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
- };
-
- /* no character < 0x80 can represent a valid number */
-#define OP <
-
-#endif /* 'A' == 193 */
-
-
- FT_LOCAL_DEF( FT_Long )
- PS_Conv_Strtol( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Long base )
- {
- FT_Byte* p = *cursor;
-
- FT_Long num = 0;
- FT_Bool sign = 0;
- FT_Bool have_overflow = 0;
-
- FT_Long num_limit;
- FT_Char c_limit;
-
-
- if ( p >= limit )
- goto Bad;
-
- if ( base < 2 || base > 36 )
- {
- FT_TRACE4(( "!!!INVALID BASE:!!!" ));
- return 0;
- }
-
- if ( *p == '-' || *p == '+' )
- {
- sign = FT_BOOL( *p == '-' );
-
- p++;
- if ( p == limit )
- goto Bad;
-
- /* only a single sign is allowed */
- if ( *p == '-' || *p == '+' )
- return 0;
- }
-
- num_limit = 0x7FFFFFFFL / base;
- c_limit = (FT_Char)( 0x7FFFFFFFL % base );
-
- for ( ; p < limit; p++ )
- {
- FT_Char c;
-
-
- if ( IS_PS_SPACE( *p ) || *p OP 0x80 )
- break;
-
- c = ft_char_table[*p & 0x7F];
-
- if ( c < 0 || c >= base )
- break;
-
- if ( num > num_limit || ( num == num_limit && c > c_limit ) )
- have_overflow = 1;
- else
- num = num * base + c;
- }
-
- *cursor = p;
-
- if ( have_overflow )
- {
- num = 0x7FFFFFFFL;
- FT_TRACE4(( "!!!OVERFLOW:!!!" ));
- }
-
- if ( sign )
- num = -num;
-
- return num;
-
- Bad:
- FT_TRACE4(( "!!!END OF DATA:!!!" ));
- return 0;
- }
-
-
- FT_LOCAL_DEF( FT_Long )
- PS_Conv_ToInt( FT_Byte** cursor,
- FT_Byte* limit )
-
- {
- FT_Byte* p = *cursor;
- FT_Byte* curp;
-
- FT_Long num;
-
-
- curp = p;
- num = PS_Conv_Strtol( &p, limit, 10 );
-
- if ( p == curp )
- return 0;
-
- if ( p < limit && *p == '#' )
- {
- p++;
-
- curp = p;
- num = PS_Conv_Strtol( &p, limit, num );
-
- if ( p == curp )
- return 0;
- }
-
- *cursor = p;
-
- return num;
- }
-
-
- FT_LOCAL_DEF( FT_Fixed )
- PS_Conv_ToFixed( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Long power_ten )
- {
- FT_Byte* p = *cursor;
- FT_Byte* curp;
-
- FT_Fixed integral = 0;
- FT_Long decimal = 0;
- FT_Long divider = 1;
-
- FT_Bool sign = 0;
- FT_Bool have_overflow = 0;
- FT_Bool have_underflow = 0;
-
-
- if ( p >= limit )
- goto Bad;
-
- if ( *p == '-' || *p == '+' )
- {
- sign = FT_BOOL( *p == '-' );
-
- p++;
- if ( p == limit )
- goto Bad;
-
- /* only a single sign is allowed */
- if ( *p == '-' || *p == '+' )
- return 0;
- }
-
- /* read the integer part */
- if ( *p != '.' )
- {
- curp = p;
- integral = PS_Conv_ToInt( &p, limit );
-
- if ( p == curp )
- return 0;
-
- if ( integral > 0x7FFF )
- have_overflow = 1;
- else
- integral = (FT_Fixed)( (FT_UInt32)integral << 16 );
- }
-
- /* read the decimal part */
- if ( p < limit && *p == '.' )
- {
- p++;
-
- for ( ; p < limit; p++ )
- {
- FT_Char c;
-
-
- if ( IS_PS_SPACE( *p ) || *p OP 0x80 )
- break;
-
- c = ft_char_table[*p & 0x7F];
-
- if ( c < 0 || c >= 10 )
- break;
-
- /* only add digit if we don't overflow */
- if ( divider < 0xCCCCCCCL && decimal < 0xCCCCCCCL )
- {
- decimal = decimal * 10 + c;
-
- if ( !integral && power_ten > 0 )
- power_ten--;
- else
- divider *= 10;
- }
- }
- }
-
- /* read exponent, if any */
- if ( p + 1 < limit && ( *p == 'e' || *p == 'E' ) )
- {
- FT_Long exponent;
-
-
- p++;
-
- curp = p;
- exponent = PS_Conv_ToInt( &p, limit );
-
- if ( curp == p )
- return 0;
-
- /* arbitrarily limit exponent */
- if ( exponent > 1000 )
- have_overflow = 1;
- else if ( exponent < -1000 )
- have_underflow = 1;
- else
- power_ten += exponent;
- }
-
- *cursor = p;
-
- if ( !integral && !decimal )
- return 0;
-
- if ( have_overflow )
- goto Overflow;
- if ( have_underflow )
- goto Underflow;
-
- while ( power_ten > 0 )
- {
- if ( integral >= 0xCCCCCCCL )
- goto Overflow;
- integral *= 10;
-
- if ( decimal >= 0xCCCCCCCL )
- {
- if ( divider == 1 )
- goto Overflow;
- divider /= 10;
- }
- else
- decimal *= 10;
-
- power_ten--;
- }
-
- while ( power_ten < 0 )
- {
- integral /= 10;
- if ( divider < 0xCCCCCCCL )
- divider *= 10;
- else
- decimal /= 10;
-
- if ( !integral && !decimal )
- goto Underflow;
-
- power_ten++;
- }
-
- if ( decimal )
- {
- decimal = FT_DivFix( decimal, divider );
- /* it's not necessary to check this addition for overflow */
- /* due to the structure of the real number representation */
- integral += decimal;
- }
-
- Exit:
- if ( sign )
- integral = -integral;
-
- return integral;
-
- Bad:
- FT_TRACE4(( "!!!END OF DATA:!!!" ));
- return 0;
-
- Overflow:
- integral = 0x7FFFFFFFL;
- FT_TRACE4(( "!!!OVERFLOW:!!!" ));
- goto Exit;
-
- Underflow:
- FT_TRACE4(( "!!!UNDERFLOW:!!!" ));
- return 0;
- }
-
-
-#if 0
- FT_LOCAL_DEF( FT_UInt )
- PS_Conv_StringDecode( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Byte* buffer,
- FT_Offset n )
- {
- FT_Byte* p;
- FT_UInt r = 0;
-
-
- for ( p = *cursor; r < n && p < limit; p++ )
- {
- FT_Byte b;
-
-
- if ( *p != '\\' )
- {
- buffer[r++] = *p;
-
- continue;
- }
-
- p++;
-
- switch ( *p )
- {
- case 'n':
- b = '\n';
- break;
- case 'r':
- b = '\r';
- break;
- case 't':
- b = '\t';
- break;
- case 'b':
- b = '\b';
- break;
- case 'f':
- b = '\f';
- break;
- case '\r':
- p++;
- if ( *p != '\n' )
- {
- b = *p;
-
- break;
- }
- /* no break */
- case '\n':
- continue;
- break;
- default:
- if ( IS_PS_DIGIT( *p ) )
- {
- b = *p - '0';
-
- p++;
-
- if ( IS_PS_DIGIT( *p ) )
- {
- b = b * 8 + *p - '0';
-
- p++;
-
- if ( IS_PS_DIGIT( *p ) )
- b = b * 8 + *p - '0';
- else
- {
- buffer[r++] = b;
- b = *p;
- }
- }
- else
- {
- buffer[r++] = b;
- b = *p;
- }
- }
- else
- b = *p;
- break;
- }
-
- buffer[r++] = b;
- }
-
- *cursor = p;
-
- return r;
- }
-#endif /* 0 */
-
-
- FT_LOCAL_DEF( FT_UInt )
- PS_Conv_ASCIIHexDecode( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Byte* buffer,
- FT_Offset n )
- {
- FT_Byte* p;
- FT_UInt r = 0;
- FT_UInt w = 0;
- FT_UInt pad = 0x01;
-
-
- n *= 2;
-
-#if 1
-
- p = *cursor;
-
- if ( p >= limit )
- return 0;
-
- if ( n > (FT_UInt)( limit - p ) )
- n = (FT_UInt)( limit - p );
-
- /* we try to process two nibbles at a time to be as fast as possible */
- for ( ; r < n; r++ )
- {
- FT_UInt c = p[r];
-
-
- if ( IS_PS_SPACE( c ) )
- continue;
-
- if ( c OP 0x80 )
- break;
-
- c = (FT_UInt)ft_char_table[c & 0x7F];
- if ( c >= 16 )
- break;
-
- pad = ( pad << 4 ) | c;
- if ( pad & 0x100 )
- {
- buffer[w++] = (FT_Byte)pad;
- pad = 0x01;
- }
- }
-
- if ( pad != 0x01 )
- buffer[w++] = (FT_Byte)( pad << 4 );
-
- *cursor = p + r;
-
- return w;
-
-#else /* 0 */
-
- for ( r = 0; r < n; r++ )
- {
- FT_Char c;
-
-
- if ( IS_PS_SPACE( *p ) )
- continue;
-
- if ( *p OP 0x80 )
- break;
-
- c = ft_char_table[*p & 0x7F];
-
- if ( (unsigned)c >= 16 )
- break;
-
- if ( r & 1 )
- {
- *buffer = (FT_Byte)(*buffer + c);
- buffer++;
- }
- else
- *buffer = (FT_Byte)(c << 4);
-
- r++;
- }
-
- *cursor = p;
-
- return ( r + 1 ) / 2;
-
-#endif /* 0 */
-
- }
-
-
- FT_LOCAL_DEF( FT_UInt )
- PS_Conv_EexecDecode( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Byte* buffer,
- FT_Offset n,
- FT_UShort* seed )
- {
- FT_Byte* p;
- FT_UInt r;
- FT_UInt s = *seed;
-
-
-#if 1
-
- p = *cursor;
-
- if ( p >= limit )
- return 0;
-
- if ( n > (FT_UInt)(limit - p) )
- n = (FT_UInt)(limit - p);
-
- for ( r = 0; r < n; r++ )
- {
- FT_UInt val = p[r];
- FT_UInt b = ( val ^ ( s >> 8 ) );
-
-
- s = ( (val + s)*52845U + 22719 ) & 0xFFFFU;
- buffer[r] = (FT_Byte) b;
- }
-
- *cursor = p + n;
- *seed = (FT_UShort)s;
-
-#else /* 0 */
-
- for ( r = 0, p = *cursor; r < n && p < limit; r++, p++ )
- {
- FT_Byte b = (FT_Byte)( *p ^ ( s >> 8 ) );
-
-
- s = (FT_UShort)( ( *p + s ) * 52845U + 22719 );
- *buffer++ = b;
- }
- *cursor = p;
- *seed = s;
-
-#endif /* 0 */
-
- return r;
- }
-
-
-/* END */
diff --git a/src/psaux/psconv.h b/src/psaux/psconv.h
deleted file mode 100644
index cab254ac5..000000000
--- a/src/psaux/psconv.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/***************************************************************************/
-/* */
-/* psconv.h */
-/* */
-/* Some convenience conversions (specification). */
-/* */
-/* Copyright 2006-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PSCONV_H_
-#define PSCONV_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( FT_Long )
- PS_Conv_Strtol( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Long base );
-
-
- FT_LOCAL( FT_Long )
- PS_Conv_ToInt( FT_Byte** cursor,
- FT_Byte* limit );
-
- FT_LOCAL( FT_Fixed )
- PS_Conv_ToFixed( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Long power_ten );
-
-#if 0
- FT_LOCAL( FT_UInt )
- PS_Conv_StringDecode( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Byte* buffer,
- FT_Offset n );
-#endif
-
- FT_LOCAL( FT_UInt )
- PS_Conv_ASCIIHexDecode( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Byte* buffer,
- FT_Offset n );
-
- FT_LOCAL( FT_UInt )
- PS_Conv_EexecDecode( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Byte* buffer,
- FT_Offset n,
- FT_UShort* seed );
-
-
-FT_END_HEADER
-
-#endif /* PSCONV_H_ */
-
-
-/* END */
diff --git a/src/psaux/psobjs.c b/src/psaux/psobjs.c
deleted file mode 100644
index f04edea41..000000000
--- a/src/psaux/psobjs.c
+++ /dev/null
@@ -1,1782 +0,0 @@
-/***************************************************************************/
-/* */
-/* psobjs.c */
-/* */
-/* Auxiliary functions for PostScript fonts (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-
-#include "psobjs.h"
-#include "psconv.h"
-
-#include "psauxerr.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_psobjs
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** PS_TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ps_table_new */
- /* */
- /* <Description> */
- /* Initializes a PS_Table. */
- /* */
- /* <InOut> */
- /* table :: The address of the target table. */
- /* */
- /* <Input> */
- /* count :: The table size = the maximum number of elements. */
- /* */
- /* memory :: The memory object to use for all subsequent */
- /* reallocations. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- ps_table_new( PS_Table table,
- FT_Int count,
- FT_Memory memory )
- {
- FT_Error error;
-
-
- table->memory = memory;
- if ( FT_NEW_ARRAY( table->elements, count ) ||
- FT_NEW_ARRAY( table->lengths, count ) )
- goto Exit;
-
- table->max_elems = count;
- table->init = 0xDEADBEEFUL;
- table->num_elems = 0;
- table->block = NULL;
- table->capacity = 0;
- table->cursor = 0;
-
- *(PS_Table_FuncsRec*)&table->funcs = ps_table_funcs;
-
- Exit:
- if ( error )
- FT_FREE( table->elements );
-
- return error;
- }
-
-
- static void
- shift_elements( PS_Table table,
- FT_Byte* old_base )
- {
- FT_PtrDist delta = table->block - old_base;
- FT_Byte** offset = table->elements;
- FT_Byte** limit = offset + table->max_elems;
-
-
- for ( ; offset < limit; offset++ )
- {
- if ( offset[0] )
- offset[0] += delta;
- }
- }
-
-
- static FT_Error
- reallocate_t1_table( PS_Table table,
- FT_Offset new_size )
- {
- FT_Memory memory = table->memory;
- FT_Byte* old_base = table->block;
- FT_Error error;
-
-
- /* allocate new base block */
- if ( FT_ALLOC( table->block, new_size ) )
- {
- table->block = old_base;
- return error;
- }
-
- /* copy elements and shift offsets */
- if ( old_base )
- {
- FT_MEM_COPY( table->block, old_base, table->capacity );
- shift_elements( table, old_base );
- FT_FREE( old_base );
- }
-
- table->capacity = new_size;
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ps_table_add */
- /* */
- /* <Description> */
- /* Adds an object to a PS_Table, possibly growing its memory block. */
- /* */
- /* <InOut> */
- /* table :: The target table. */
- /* */
- /* <Input> */
- /* idx :: The index of the object in the table. */
- /* */
- /* object :: The address of the object to copy in memory. */
- /* */
- /* length :: The length in bytes of the source object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. An error is returned if a */
- /* reallocation fails. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- ps_table_add( PS_Table table,
- FT_Int idx,
- void* object,
- FT_UInt length )
- {
- if ( idx < 0 || idx >= table->max_elems )
- {
- FT_ERROR(( "ps_table_add: invalid index\n" ));
- return FT_THROW( Invalid_Argument );
- }
-
- /* grow the base block if needed */
- if ( table->cursor + length > table->capacity )
- {
- FT_Error error;
- FT_Offset new_size = table->capacity;
- FT_PtrDist in_offset;
-
-
- in_offset = (FT_Byte*)object - table->block;
- if ( in_offset < 0 || (FT_Offset)in_offset >= table->capacity )
- in_offset = -1;
-
- while ( new_size < table->cursor + length )
- {
- /* increase size by 25% and round up to the nearest multiple
- of 1024 */
- new_size += ( new_size >> 2 ) + 1;
- new_size = FT_PAD_CEIL( new_size, 1024 );
- }
-
- error = reallocate_t1_table( table, new_size );
- if ( error )
- return error;
-
- if ( in_offset >= 0 )
- object = table->block + in_offset;
- }
-
- /* add the object to the base block and adjust offset */
- table->elements[idx] = table->block + table->cursor;
- table->lengths [idx] = length;
- FT_MEM_COPY( table->block + table->cursor, object, length );
-
- table->cursor += length;
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ps_table_done */
- /* */
- /* <Description> */
- /* Finalizes a PS_TableRec (i.e., reallocate it to its current */
- /* cursor). */
- /* */
- /* <InOut> */
- /* table :: The target table. */
- /* */
- /* <Note> */
- /* This function does NOT release the heap's memory block. It is up */
- /* to the caller to clean it, or reference it in its own structures. */
- /* */
- FT_LOCAL_DEF( void )
- ps_table_done( PS_Table table )
- {
- FT_Memory memory = table->memory;
- FT_Error error;
- FT_Byte* old_base = table->block;
-
-
- /* should never fail, because rec.cursor <= rec.size */
- if ( !old_base )
- return;
-
- if ( FT_ALLOC( table->block, table->cursor ) )
- return;
- FT_MEM_COPY( table->block, old_base, table->cursor );
- shift_elements( table, old_base );
-
- table->capacity = table->cursor;
- FT_FREE( old_base );
-
- FT_UNUSED( error );
- }
-
-
- FT_LOCAL_DEF( void )
- ps_table_release( PS_Table table )
- {
- FT_Memory memory = table->memory;
-
-
- if ( (FT_ULong)table->init == 0xDEADBEEFUL )
- {
- FT_FREE( table->block );
- FT_FREE( table->elements );
- FT_FREE( table->lengths );
- table->init = 0;
- }
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** T1 PARSER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* first character must be already part of the comment */
-
- static void
- skip_comment( FT_Byte* *acur,
- FT_Byte* limit )
- {
- FT_Byte* cur = *acur;
-
-
- while ( cur < limit )
- {
- if ( IS_PS_NEWLINE( *cur ) )
- break;
- cur++;
- }
-
- *acur = cur;
- }
-
-
- static void
- skip_spaces( FT_Byte* *acur,
- FT_Byte* limit )
- {
- FT_Byte* cur = *acur;
-
-
- while ( cur < limit )
- {
- if ( !IS_PS_SPACE( *cur ) )
- {
- if ( *cur == '%' )
- /* According to the PLRM, a comment is equal to a space. */
- skip_comment( &cur, limit );
- else
- break;
- }
- cur++;
- }
-
- *acur = cur;
- }
-
-
-#define IS_OCTAL_DIGIT( c ) ( '0' <= (c) && (c) <= '7' )
-
-
- /* first character must be `('; */
- /* *acur is positioned at the character after the closing `)' */
-
- static FT_Error
- skip_literal_string( FT_Byte* *acur,
- FT_Byte* limit )
- {
- FT_Byte* cur = *acur;
- FT_Int embed = 0;
- FT_Error error = FT_ERR( Invalid_File_Format );
- unsigned int i;
-
-
- while ( cur < limit )
- {
- FT_Byte c = *cur;
-
-
- cur++;
-
- if ( c == '\\' )
- {
- /* Red Book 3rd ed., section `Literal Text Strings', p. 29: */
- /* A backslash can introduce three different types */
- /* of escape sequences: */
- /* - a special escaped char like \r, \n, etc. */
- /* - a one-, two-, or three-digit octal number */
- /* - none of the above in which case the backslash is ignored */
-
- if ( cur == limit )
- /* error (or to be ignored?) */
- break;
-
- switch ( *cur )
- {
- /* skip `special' escape */
- case 'n':
- case 'r':
- case 't':
- case 'b':
- case 'f':
- case '\\':
- case '(':
- case ')':
- cur++;
- break;
-
- default:
- /* skip octal escape or ignore backslash */
- for ( i = 0; i < 3 && cur < limit; i++ )
- {
- if ( !IS_OCTAL_DIGIT( *cur ) )
- break;
-
- cur++;
- }
- }
- }
- else if ( c == '(' )
- embed++;
- else if ( c == ')' )
- {
- embed--;
- if ( embed == 0 )
- {
- error = FT_Err_Ok;
- break;
- }
- }
- }
-
- *acur = cur;
-
- return error;
- }
-
-
- /* first character must be `<' */
-
- static FT_Error
- skip_string( FT_Byte* *acur,
- FT_Byte* limit )
- {
- FT_Byte* cur = *acur;
- FT_Error err = FT_Err_Ok;
-
-
- while ( ++cur < limit )
- {
- /* All whitespace characters are ignored. */
- skip_spaces( &cur, limit );
- if ( cur >= limit )
- break;
-
- if ( !IS_PS_XDIGIT( *cur ) )
- break;
- }
-
- if ( cur < limit && *cur != '>' )
- {
- FT_ERROR(( "skip_string: missing closing delimiter `>'\n" ));
- err = FT_THROW( Invalid_File_Format );
- }
- else
- cur++;
-
- *acur = cur;
- return err;
- }
-
-
- /* first character must be the opening brace that */
- /* starts the procedure */
-
- /* NB: [ and ] need not match: */
- /* `/foo {[} def' is a valid PostScript fragment, */
- /* even within a Type1 font */
-
- static FT_Error
- skip_procedure( FT_Byte* *acur,
- FT_Byte* limit )
- {
- FT_Byte* cur;
- FT_Int embed = 0;
- FT_Error error = FT_Err_Ok;
-
-
- FT_ASSERT( **acur == '{' );
-
- for ( cur = *acur; cur < limit && error == FT_Err_Ok; cur++ )
- {
- switch ( *cur )
- {
- case '{':
- embed++;
- break;
-
- case '}':
- embed--;
- if ( embed == 0 )
- {
- cur++;
- goto end;
- }
- break;
-
- case '(':
- error = skip_literal_string( &cur, limit );
- break;
-
- case '<':
- error = skip_string( &cur, limit );
- break;
-
- case '%':
- skip_comment( &cur, limit );
- break;
- }
- }
-
- end:
- if ( embed != 0 )
- error = FT_THROW( Invalid_File_Format );
-
- *acur = cur;
-
- return error;
- }
-
-
- /***********************************************************************/
- /* */
- /* All exported parsing routines handle leading whitespace and stop at */
- /* the first character which isn't part of the just handled token. */
- /* */
- /***********************************************************************/
-
-
- FT_LOCAL_DEF( void )
- ps_parser_skip_PS_token( PS_Parser parser )
- {
- /* Note: PostScript allows any non-delimiting, non-whitespace */
- /* character in a name (PS Ref Manual, 3rd ed, p31). */
- /* PostScript delimiters are (, ), <, >, [, ], {, }, /, and %. */
-
- FT_Byte* cur = parser->cursor;
- FT_Byte* limit = parser->limit;
- FT_Error error = FT_Err_Ok;
-
-
- skip_spaces( &cur, limit ); /* this also skips comments */
- if ( cur >= limit )
- goto Exit;
-
- /* self-delimiting, single-character tokens */
- if ( *cur == '[' || *cur == ']' )
- {
- cur++;
- goto Exit;
- }
-
- /* skip balanced expressions (procedures and strings) */
-
- if ( *cur == '{' ) /* {...} */
- {
- error = skip_procedure( &cur, limit );
- goto Exit;
- }
-
- if ( *cur == '(' ) /* (...) */
- {
- error = skip_literal_string( &cur, limit );
- goto Exit;
- }
-
- if ( *cur == '<' ) /* <...> */
- {
- if ( cur + 1 < limit && *(cur + 1) == '<' ) /* << */
- {
- cur++;
- cur++;
- }
- else
- error = skip_string( &cur, limit );
-
- goto Exit;
- }
-
- if ( *cur == '>' )
- {
- cur++;
- if ( cur >= limit || *cur != '>' ) /* >> */
- {
- FT_ERROR(( "ps_parser_skip_PS_token:"
- " unexpected closing delimiter `>'\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
- cur++;
- goto Exit;
- }
-
- if ( *cur == '/' )
- cur++;
-
- /* anything else */
- while ( cur < limit )
- {
- /* *cur might be invalid (e.g., ')' or '}'), but this */
- /* is handled by the test `cur == parser->cursor' below */
- if ( IS_PS_DELIM( *cur ) )
- break;
-
- cur++;
- }
-
- Exit:
- if ( cur < limit && cur == parser->cursor )
- {
- FT_ERROR(( "ps_parser_skip_PS_token:"
- " current token is `%c' which is self-delimiting\n"
- " "
- " but invalid at this point\n",
- *cur ));
-
- error = FT_THROW( Invalid_File_Format );
- }
-
- if ( cur > limit )
- cur = limit;
-
- parser->error = error;
- parser->cursor = cur;
- }
-
-
- FT_LOCAL_DEF( void )
- ps_parser_skip_spaces( PS_Parser parser )
- {
- skip_spaces( &parser->cursor, parser->limit );
- }
-
-
- /* `token' here means either something between balanced delimiters */
- /* or the next token; the delimiters are not removed. */
-
- FT_LOCAL_DEF( void )
- ps_parser_to_token( PS_Parser parser,
- T1_Token token )
- {
- FT_Byte* cur;
- FT_Byte* limit;
- FT_Int embed;
-
-
- token->type = T1_TOKEN_TYPE_NONE;
- token->start = NULL;
- token->limit = NULL;
-
- /* first of all, skip leading whitespace */
- ps_parser_skip_spaces( parser );
-
- cur = parser->cursor;
- limit = parser->limit;
-
- if ( cur >= limit )
- return;
-
- switch ( *cur )
- {
- /************* check for literal string *****************/
- case '(':
- token->type = T1_TOKEN_TYPE_STRING;
- token->start = cur;
-
- if ( skip_literal_string( &cur, limit ) == FT_Err_Ok )
- token->limit = cur;
- break;
-
- /************* check for programs/array *****************/
- case '{':
- token->type = T1_TOKEN_TYPE_ARRAY;
- token->start = cur;
-
- if ( skip_procedure( &cur, limit ) == FT_Err_Ok )
- token->limit = cur;
- break;
-
- /************* check for table/array ********************/
- /* XXX: in theory we should also look for "<<" */
- /* since this is semantically equivalent to "["; */
- /* in practice it doesn't matter (?) */
- case '[':
- token->type = T1_TOKEN_TYPE_ARRAY;
- embed = 1;
- token->start = cur++;
-
- /* we need this to catch `[ ]' */
- parser->cursor = cur;
- ps_parser_skip_spaces( parser );
- cur = parser->cursor;
-
- while ( cur < limit && !parser->error )
- {
- /* XXX: this is wrong because it does not */
- /* skip comments, procedures, and strings */
- if ( *cur == '[' )
- embed++;
- else if ( *cur == ']' )
- {
- embed--;
- if ( embed <= 0 )
- {
- token->limit = ++cur;
- break;
- }
- }
-
- parser->cursor = cur;
- ps_parser_skip_PS_token( parser );
- /* we need this to catch `[XXX ]' */
- ps_parser_skip_spaces ( parser );
- cur = parser->cursor;
- }
- break;
-
- /* ************ otherwise, it is any token **************/
- default:
- token->start = cur;
- token->type = ( *cur == '/' ) ? T1_TOKEN_TYPE_KEY : T1_TOKEN_TYPE_ANY;
- ps_parser_skip_PS_token( parser );
- cur = parser->cursor;
- if ( !parser->error )
- token->limit = cur;
- }
-
- if ( !token->limit )
- {
- token->start = NULL;
- token->type = T1_TOKEN_TYPE_NONE;
- }
-
- parser->cursor = cur;
- }
-
-
- /* NB: `tokens' can be NULL if we only want to count */
- /* the number of array elements */
-
- FT_LOCAL_DEF( void )
- ps_parser_to_token_array( PS_Parser parser,
- T1_Token tokens,
- FT_UInt max_tokens,
- FT_Int* pnum_tokens )
- {
- T1_TokenRec master;
-
-
- *pnum_tokens = -1;
-
- /* this also handles leading whitespace */
- ps_parser_to_token( parser, &master );
-
- if ( master.type == T1_TOKEN_TYPE_ARRAY )
- {
- FT_Byte* old_cursor = parser->cursor;
- FT_Byte* old_limit = parser->limit;
- T1_Token cur = tokens;
- T1_Token limit = cur + max_tokens;
-
-
- /* don't include outermost delimiters */
- parser->cursor = master.start + 1;
- parser->limit = master.limit - 1;
-
- while ( parser->cursor < parser->limit )
- {
- T1_TokenRec token;
-
-
- ps_parser_to_token( parser, &token );
- if ( !token.type )
- break;
-
- if ( tokens && cur < limit )
- *cur = token;
-
- cur++;
- }
-
- *pnum_tokens = (FT_Int)( cur - tokens );
-
- parser->cursor = old_cursor;
- parser->limit = old_limit;
- }
- }
-
-
- /* first character must be a delimiter or a part of a number */
- /* NB: `coords' can be NULL if we just want to skip the */
- /* array; in this case we ignore `max_coords' */
-
- static FT_Int
- ps_tocoordarray( FT_Byte* *acur,
- FT_Byte* limit,
- FT_Int max_coords,
- FT_Short* coords )
- {
- FT_Byte* cur = *acur;
- FT_Int count = 0;
- FT_Byte c, ender;
-
-
- if ( cur >= limit )
- goto Exit;
-
- /* check for the beginning of an array; otherwise, only one number */
- /* will be read */
- c = *cur;
- ender = 0;
-
- if ( c == '[' )
- ender = ']';
- else if ( c == '{' )
- ender = '}';
-
- if ( ender )
- cur++;
-
- /* now, read the coordinates */
- while ( cur < limit )
- {
- FT_Short dummy;
- FT_Byte* old_cur;
-
-
- /* skip whitespace in front of data */
- skip_spaces( &cur, limit );
- if ( cur >= limit )
- goto Exit;
-
- if ( *cur == ender )
- {
- cur++;
- break;
- }
-
- old_cur = cur;
-
- if ( coords && count >= max_coords )
- break;
-
- /* call PS_Conv_ToFixed() even if coords == NULL */
- /* to properly parse number at `cur' */
- *( coords ? &coords[count] : &dummy ) =
- (FT_Short)( PS_Conv_ToFixed( &cur, limit, 0 ) >> 16 );
-
- if ( old_cur == cur )
- {
- count = -1;
- goto Exit;
- }
- else
- count++;
-
- if ( !ender )
- break;
- }
-
- Exit:
- *acur = cur;
- return count;
- }
-
-
- /* first character must be a delimiter or a part of a number */
- /* NB: `values' can be NULL if we just want to skip the */
- /* array; in this case we ignore `max_values' */
- /* */
- /* return number of successfully parsed values */
-
- static FT_Int
- ps_tofixedarray( FT_Byte* *acur,
- FT_Byte* limit,
- FT_Int max_values,
- FT_Fixed* values,
- FT_Int power_ten )
- {
- FT_Byte* cur = *acur;
- FT_Int count = 0;
- FT_Byte c, ender;
-
-
- if ( cur >= limit )
- goto Exit;
-
- /* Check for the beginning of an array. Otherwise, only one number */
- /* will be read. */
- c = *cur;
- ender = 0;
-
- if ( c == '[' )
- ender = ']';
- else if ( c == '{' )
- ender = '}';
-
- if ( ender )
- cur++;
-
- /* now, read the values */
- while ( cur < limit )
- {
- FT_Fixed dummy;
- FT_Byte* old_cur;
-
-
- /* skip whitespace in front of data */
- skip_spaces( &cur, limit );
- if ( cur >= limit )
- goto Exit;
-
- if ( *cur == ender )
- {
- cur++;
- break;
- }
-
- old_cur = cur;
-
- if ( values && count >= max_values )
- break;
-
- /* call PS_Conv_ToFixed() even if coords == NULL */
- /* to properly parse number at `cur' */
- *( values ? &values[count] : &dummy ) =
- PS_Conv_ToFixed( &cur, limit, power_ten );
-
- if ( old_cur == cur )
- {
- count = -1;
- goto Exit;
- }
- else
- count++;
-
- if ( !ender )
- break;
- }
-
- Exit:
- *acur = cur;
- return count;
- }
-
-
-#if 0
-
- static FT_String*
- ps_tostring( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Memory memory )
- {
- FT_Byte* cur = *cursor;
- FT_UInt len = 0;
- FT_Int count;
- FT_String* result;
- FT_Error error;
-
-
- /* XXX: some stupid fonts have a `Notice' or `Copyright' string */
- /* that simply doesn't begin with an opening parenthesis, even */
- /* though they have a closing one! E.g. "amuncial.pfb" */
- /* */
- /* We must deal with these ill-fated cases there. Note that */
- /* these fonts didn't work with the old Type 1 driver as the */
- /* notice/copyright was not recognized as a valid string token */
- /* and made the old token parser commit errors. */
-
- while ( cur < limit && ( *cur == ' ' || *cur == '\t' ) )
- cur++;
- if ( cur + 1 >= limit )
- return 0;
-
- if ( *cur == '(' )
- cur++; /* skip the opening parenthesis, if there is one */
-
- *cursor = cur;
- count = 0;
-
- /* then, count its length */
- for ( ; cur < limit; cur++ )
- {
- if ( *cur == '(' )
- count++;
-
- else if ( *cur == ')' )
- {
- count--;
- if ( count < 0 )
- break;
- }
- }
-
- len = (FT_UInt)( cur - *cursor );
- if ( cur >= limit || FT_ALLOC( result, len + 1 ) )
- return 0;
-
- /* now copy the string */
- FT_MEM_COPY( result, *cursor, len );
- result[len] = '\0';
- *cursor = cur;
- return result;
- }
-
-#endif /* 0 */
-
-
- static int
- ps_tobool( FT_Byte* *acur,
- FT_Byte* limit )
- {
- FT_Byte* cur = *acur;
- FT_Bool result = 0;
-
-
- /* return 1 if we find `true', 0 otherwise */
- if ( cur + 3 < limit &&
- cur[0] == 't' &&
- cur[1] == 'r' &&
- cur[2] == 'u' &&
- cur[3] == 'e' )
- {
- result = 1;
- cur += 5;
- }
- else if ( cur + 4 < limit &&
- cur[0] == 'f' &&
- cur[1] == 'a' &&
- cur[2] == 'l' &&
- cur[3] == 's' &&
- cur[4] == 'e' )
- {
- result = 0;
- cur += 6;
- }
-
- *acur = cur;
- return result;
- }
-
-
- /* load a simple field (i.e. non-table) into the current list of objects */
-
- FT_LOCAL_DEF( FT_Error )
- ps_parser_load_field( PS_Parser parser,
- const T1_Field field,
- void** objects,
- FT_UInt max_objects,
- FT_ULong* pflags )
- {
- T1_TokenRec token;
- FT_Byte* cur;
- FT_Byte* limit;
- FT_UInt count;
- FT_UInt idx;
- FT_Error error;
- T1_FieldType type;
-
-
- /* this also skips leading whitespace */
- ps_parser_to_token( parser, &token );
- if ( !token.type )
- goto Fail;
-
- count = 1;
- idx = 0;
- cur = token.start;
- limit = token.limit;
-
- type = field->type;
-
- /* we must detect arrays in /FontBBox */
- if ( type == T1_FIELD_TYPE_BBOX )
- {
- T1_TokenRec token2;
- FT_Byte* old_cur = parser->cursor;
- FT_Byte* old_limit = parser->limit;
-
-
- /* don't include delimiters */
- parser->cursor = token.start + 1;
- parser->limit = token.limit - 1;
-
- ps_parser_to_token( parser, &token2 );
- parser->cursor = old_cur;
- parser->limit = old_limit;
-
- if ( token2.type == T1_TOKEN_TYPE_ARRAY )
- {
- type = T1_FIELD_TYPE_MM_BBOX;
- goto FieldArray;
- }
- }
- else if ( token.type == T1_TOKEN_TYPE_ARRAY )
- {
- count = max_objects;
-
- FieldArray:
- /* if this is an array and we have no blend, an error occurs */
- if ( max_objects == 0 )
- goto Fail;
-
- idx = 1;
-
- /* don't include delimiters */
- cur++;
- limit--;
- }
-
- for ( ; count > 0; count--, idx++ )
- {
- FT_Byte* q = (FT_Byte*)objects[idx] + field->offset;
- FT_Long val;
- FT_String* string = NULL;
-
-
- skip_spaces( &cur, limit );
-
- switch ( type )
- {
- case T1_FIELD_TYPE_BOOL:
- val = ps_tobool( &cur, limit );
- goto Store_Integer;
-
- case T1_FIELD_TYPE_FIXED:
- val = PS_Conv_ToFixed( &cur, limit, 0 );
- goto Store_Integer;
-
- case T1_FIELD_TYPE_FIXED_1000:
- val = PS_Conv_ToFixed( &cur, limit, 3 );
- goto Store_Integer;
-
- case T1_FIELD_TYPE_INTEGER:
- val = PS_Conv_ToInt( &cur, limit );
- /* fall through */
-
- Store_Integer:
- switch ( field->size )
- {
- case (8 / FT_CHAR_BIT):
- *(FT_Byte*)q = (FT_Byte)val;
- break;
-
- case (16 / FT_CHAR_BIT):
- *(FT_UShort*)q = (FT_UShort)val;
- break;
-
- case (32 / FT_CHAR_BIT):
- *(FT_UInt32*)q = (FT_UInt32)val;
- break;
-
- default: /* for 64-bit systems */
- *(FT_Long*)q = val;
- }
- break;
-
- case T1_FIELD_TYPE_STRING:
- case T1_FIELD_TYPE_KEY:
- {
- FT_Memory memory = parser->memory;
- FT_UInt len = (FT_UInt)( limit - cur );
-
-
- if ( cur >= limit )
- break;
-
- /* we allow both a string or a name */
- /* for cases like /FontName (foo) def */
- if ( token.type == T1_TOKEN_TYPE_KEY )
- {
- /* don't include leading `/' */
- len--;
- cur++;
- }
- else if ( token.type == T1_TOKEN_TYPE_STRING )
- {
- /* don't include delimiting parentheses */
- /* XXX we don't handle <<...>> here */
- /* XXX should we convert octal escapes? */
- /* if so, what encoding should we use? */
- cur++;
- len -= 2;
- }
- else
- {
- FT_ERROR(( "ps_parser_load_field:"
- " expected a name or string\n"
- " "
- " but found token of type %d instead\n",
- token.type ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* for this to work (FT_String**)q must have been */
- /* initialized to NULL */
- if ( *(FT_String**)q )
- {
- FT_TRACE0(( "ps_parser_load_field: overwriting field %s\n",
- field->ident ));
- FT_FREE( *(FT_String**)q );
- *(FT_String**)q = NULL;
- }
-
- if ( FT_ALLOC( string, len + 1 ) )
- goto Exit;
-
- FT_MEM_COPY( string, cur, len );
- string[len] = 0;
-
- *(FT_String**)q = string;
- }
- break;
-
- case T1_FIELD_TYPE_BBOX:
- {
- FT_Fixed temp[4];
- FT_BBox* bbox = (FT_BBox*)q;
- FT_Int result;
-
-
- result = ps_tofixedarray( &cur, limit, 4, temp, 0 );
-
- if ( result < 4 )
- {
- FT_ERROR(( "ps_parser_load_field:"
- " expected four integers in bounding box\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- bbox->xMin = FT_RoundFix( temp[0] );
- bbox->yMin = FT_RoundFix( temp[1] );
- bbox->xMax = FT_RoundFix( temp[2] );
- bbox->yMax = FT_RoundFix( temp[3] );
- }
- break;
-
- case T1_FIELD_TYPE_MM_BBOX:
- {
- FT_Memory memory = parser->memory;
- FT_Fixed* temp = NULL;
- FT_Int result;
- FT_UInt i;
-
-
- if ( FT_NEW_ARRAY( temp, max_objects * 4 ) )
- goto Exit;
-
- for ( i = 0; i < 4; i++ )
- {
- result = ps_tofixedarray( &cur, limit, (FT_Int)max_objects,
- temp + i * max_objects, 0 );
- if ( result < 0 || (FT_UInt)result < max_objects )
- {
- FT_ERROR(( "ps_parser_load_field:"
- " expected %d integer%s in the %s subarray\n"
- " "
- " of /FontBBox in the /Blend dictionary\n",
- max_objects, max_objects > 1 ? "s" : "",
- i == 0 ? "first"
- : ( i == 1 ? "second"
- : ( i == 2 ? "third"
- : "fourth" ) ) ));
- error = FT_THROW( Invalid_File_Format );
-
- FT_FREE( temp );
- goto Exit;
- }
-
- skip_spaces( &cur, limit );
- }
-
- for ( i = 0; i < max_objects; i++ )
- {
- FT_BBox* bbox = (FT_BBox*)objects[i];
-
-
- bbox->xMin = FT_RoundFix( temp[i ] );
- bbox->yMin = FT_RoundFix( temp[i + max_objects] );
- bbox->xMax = FT_RoundFix( temp[i + 2 * max_objects] );
- bbox->yMax = FT_RoundFix( temp[i + 3 * max_objects] );
- }
-
- FT_FREE( temp );
- }
- break;
-
- default:
- /* an error occurred */
- goto Fail;
- }
- }
-
-#if 0 /* obsolete -- keep for reference */
- if ( pflags )
- *pflags |= 1L << field->flag_bit;
-#else
- FT_UNUSED( pflags );
-#endif
-
- error = FT_Err_Ok;
-
- Exit:
- return error;
-
- Fail:
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
-
-#define T1_MAX_TABLE_ELEMENTS 32
-
-
- FT_LOCAL_DEF( FT_Error )
- ps_parser_load_field_table( PS_Parser parser,
- const T1_Field field,
- void** objects,
- FT_UInt max_objects,
- FT_ULong* pflags )
- {
- T1_TokenRec elements[T1_MAX_TABLE_ELEMENTS];
- T1_Token token;
- FT_Int num_elements;
- FT_Error error = FT_Err_Ok;
- FT_Byte* old_cursor;
- FT_Byte* old_limit;
- T1_FieldRec fieldrec = *(T1_Field)field;
-
-
- fieldrec.type = T1_FIELD_TYPE_INTEGER;
- if ( field->type == T1_FIELD_TYPE_FIXED_ARRAY ||
- field->type == T1_FIELD_TYPE_BBOX )
- fieldrec.type = T1_FIELD_TYPE_FIXED;
-
- ps_parser_to_token_array( parser, elements,
- T1_MAX_TABLE_ELEMENTS, &num_elements );
- if ( num_elements < 0 )
- {
- error = FT_ERR( Ignore );
- goto Exit;
- }
- if ( (FT_UInt)num_elements > field->array_max )
- num_elements = (FT_Int)field->array_max;
-
- old_cursor = parser->cursor;
- old_limit = parser->limit;
-
- /* we store the elements count if necessary; */
- /* we further assume that `count_offset' can't be zero */
- if ( field->type != T1_FIELD_TYPE_BBOX && field->count_offset != 0 )
- *(FT_Byte*)( (FT_Byte*)objects[0] + field->count_offset ) =
- (FT_Byte)num_elements;
-
- /* we now load each element, adjusting the field.offset on each one */
- token = elements;
- for ( ; num_elements > 0; num_elements--, token++ )
- {
- parser->cursor = token->start;
- parser->limit = token->limit;
-
- error = ps_parser_load_field( parser,
- &fieldrec,
- objects,
- max_objects,
- 0 );
- if ( error )
- break;
-
- fieldrec.offset += fieldrec.size;
- }
-
-#if 0 /* obsolete -- keep for reference */
- if ( pflags )
- *pflags |= 1L << field->flag_bit;
-#else
- FT_UNUSED( pflags );
-#endif
-
- parser->cursor = old_cursor;
- parser->limit = old_limit;
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Long )
- ps_parser_to_int( PS_Parser parser )
- {
- ps_parser_skip_spaces( parser );
- return PS_Conv_ToInt( &parser->cursor, parser->limit );
- }
-
-
- /* first character must be `<' if `delimiters' is non-zero */
-
- FT_LOCAL_DEF( FT_Error )
- ps_parser_to_bytes( PS_Parser parser,
- FT_Byte* bytes,
- FT_Offset max_bytes,
- FT_ULong* pnum_bytes,
- FT_Bool delimiters )
- {
- FT_Error error = FT_Err_Ok;
- FT_Byte* cur;
-
-
- ps_parser_skip_spaces( parser );
- cur = parser->cursor;
-
- if ( cur >= parser->limit )
- goto Exit;
-
- if ( delimiters )
- {
- if ( *cur != '<' )
- {
- FT_ERROR(( "ps_parser_to_bytes: Missing starting delimiter `<'\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- cur++;
- }
-
- *pnum_bytes = PS_Conv_ASCIIHexDecode( &cur,
- parser->limit,
- bytes,
- max_bytes );
-
- if ( delimiters )
- {
- if ( cur < parser->limit && *cur != '>' )
- {
- FT_ERROR(( "ps_parser_to_bytes: Missing closing delimiter `>'\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- cur++;
- }
-
- parser->cursor = cur;
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Fixed )
- ps_parser_to_fixed( PS_Parser parser,
- FT_Int power_ten )
- {
- ps_parser_skip_spaces( parser );
- return PS_Conv_ToFixed( &parser->cursor, parser->limit, power_ten );
- }
-
-
- FT_LOCAL_DEF( FT_Int )
- ps_parser_to_coord_array( PS_Parser parser,
- FT_Int max_coords,
- FT_Short* coords )
- {
- ps_parser_skip_spaces( parser );
- return ps_tocoordarray( &parser->cursor, parser->limit,
- max_coords, coords );
- }
-
-
- FT_LOCAL_DEF( FT_Int )
- ps_parser_to_fixed_array( PS_Parser parser,
- FT_Int max_values,
- FT_Fixed* values,
- FT_Int power_ten )
- {
- ps_parser_skip_spaces( parser );
- return ps_tofixedarray( &parser->cursor, parser->limit,
- max_values, values, power_ten );
- }
-
-
-#if 0
-
- FT_LOCAL_DEF( FT_String* )
- T1_ToString( PS_Parser parser )
- {
- return ps_tostring( &parser->cursor, parser->limit, parser->memory );
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- T1_ToBool( PS_Parser parser )
- {
- return ps_tobool( &parser->cursor, parser->limit );
- }
-
-#endif /* 0 */
-
-
- FT_LOCAL_DEF( void )
- ps_parser_init( PS_Parser parser,
- FT_Byte* base,
- FT_Byte* limit,
- FT_Memory memory )
- {
- parser->error = FT_Err_Ok;
- parser->base = base;
- parser->limit = limit;
- parser->cursor = base;
- parser->memory = memory;
- parser->funcs = ps_parser_funcs;
- }
-
-
- FT_LOCAL_DEF( void )
- ps_parser_done( PS_Parser parser )
- {
- FT_UNUSED( parser );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** T1 BUILDER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* t1_builder_init */
- /* */
- /* <Description> */
- /* Initializes a given glyph builder. */
- /* */
- /* <InOut> */
- /* builder :: A pointer to the glyph builder to initialize. */
- /* */
- /* <Input> */
- /* face :: The current face object. */
- /* */
- /* size :: The current size object. */
- /* */
- /* glyph :: The current glyph object. */
- /* */
- /* hinting :: Whether hinting should be applied. */
- /* */
- FT_LOCAL_DEF( void )
- t1_builder_init( T1_Builder builder,
- FT_Face face,
- FT_Size size,
- FT_GlyphSlot glyph,
- FT_Bool hinting )
- {
- builder->parse_state = T1_Parse_Start;
- builder->load_points = 1;
-
- builder->face = face;
- builder->glyph = glyph;
- builder->memory = face->memory;
-
- if ( glyph )
- {
- FT_GlyphLoader loader = glyph->internal->loader;
-
-
- builder->loader = loader;
- builder->base = &loader->base.outline;
- builder->current = &loader->current.outline;
- FT_GlyphLoader_Rewind( loader );
-
- builder->hints_globals = size->internal->module_data;
- builder->hints_funcs = NULL;
-
- if ( hinting )
- builder->hints_funcs = glyph->internal->glyph_hints;
- }
-
- builder->pos_x = 0;
- builder->pos_y = 0;
-
- builder->left_bearing.x = 0;
- builder->left_bearing.y = 0;
- builder->advance.x = 0;
- builder->advance.y = 0;
-
- builder->funcs = t1_builder_funcs;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* t1_builder_done */
- /* */
- /* <Description> */
- /* Finalizes a given glyph builder. Its contents can still be used */
- /* after the call, but the function saves important information */
- /* within the corresponding glyph slot. */
- /* */
- /* <Input> */
- /* builder :: A pointer to the glyph builder to finalize. */
- /* */
- FT_LOCAL_DEF( void )
- t1_builder_done( T1_Builder builder )
- {
- FT_GlyphSlot glyph = builder->glyph;
-
-
- if ( glyph )
- glyph->outline = *builder->base;
- }
-
-
- /* check that there is enough space for `count' more points */
- FT_LOCAL_DEF( FT_Error )
- t1_builder_check_points( T1_Builder builder,
- FT_Int count )
- {
- return FT_GLYPHLOADER_CHECK_POINTS( builder->loader, count, 0 );
- }
-
-
- /* add a new point, do not check space */
- FT_LOCAL_DEF( void )
- t1_builder_add_point( T1_Builder builder,
- FT_Pos x,
- FT_Pos y,
- FT_Byte flag )
- {
- FT_Outline* outline = builder->current;
-
-
- if ( builder->load_points )
- {
- FT_Vector* point = outline->points + outline->n_points;
- FT_Byte* control = (FT_Byte*)outline->tags + outline->n_points;
-
-
- point->x = FIXED_TO_INT( x );
- point->y = FIXED_TO_INT( y );
- *control = (FT_Byte)( flag ? FT_CURVE_TAG_ON : FT_CURVE_TAG_CUBIC );
- }
- outline->n_points++;
- }
-
-
- /* check space for a new on-curve point, then add it */
- FT_LOCAL_DEF( FT_Error )
- t1_builder_add_point1( T1_Builder builder,
- FT_Pos x,
- FT_Pos y )
- {
- FT_Error error;
-
-
- error = t1_builder_check_points( builder, 1 );
- if ( !error )
- t1_builder_add_point( builder, x, y, 1 );
-
- return error;
- }
-
-
- /* check space for a new contour, then add it */
- FT_LOCAL_DEF( FT_Error )
- t1_builder_add_contour( T1_Builder builder )
- {
- FT_Outline* outline = builder->current;
- FT_Error error;
-
-
- /* this might happen in invalid fonts */
- if ( !outline )
- {
- FT_ERROR(( "t1_builder_add_contour: no outline to add points to\n" ));
- return FT_THROW( Invalid_File_Format );
- }
-
- if ( !builder->load_points )
- {
- outline->n_contours++;
- return FT_Err_Ok;
- }
-
- error = FT_GLYPHLOADER_CHECK_POINTS( builder->loader, 0, 1 );
- if ( !error )
- {
- if ( outline->n_contours > 0 )
- outline->contours[outline->n_contours - 1] =
- (short)( outline->n_points - 1 );
-
- outline->n_contours++;
- }
-
- return error;
- }
-
-
- /* if a path was begun, add its first on-curve point */
- FT_LOCAL_DEF( FT_Error )
- t1_builder_start_point( T1_Builder builder,
- FT_Pos x,
- FT_Pos y )
- {
- FT_Error error = FT_ERR( Invalid_File_Format );
-
-
- /* test whether we are building a new contour */
-
- if ( builder->parse_state == T1_Parse_Have_Path )
- error = FT_Err_Ok;
- else
- {
- builder->parse_state = T1_Parse_Have_Path;
- error = t1_builder_add_contour( builder );
- if ( !error )
- error = t1_builder_add_point1( builder, x, y );
- }
-
- return error;
- }
-
-
- /* close the current contour */
- FT_LOCAL_DEF( void )
- t1_builder_close_contour( T1_Builder builder )
- {
- FT_Outline* outline = builder->current;
- FT_Int first;
-
-
- if ( !outline )
- return;
-
- first = outline->n_contours <= 1
- ? 0 : outline->contours[outline->n_contours - 2] + 1;
-
- /* in malformed fonts it can happen that a contour was started */
- /* but no points were added */
- if ( outline->n_contours && first == outline->n_points )
- {
- outline->n_contours--;
- return;
- }
-
- /* We must not include the last point in the path if it */
- /* is located on the first point. */
- if ( outline->n_points > 1 )
- {
- FT_Vector* p1 = outline->points + first;
- FT_Vector* p2 = outline->points + outline->n_points - 1;
- FT_Byte* control = (FT_Byte*)outline->tags + outline->n_points - 1;
-
-
- /* `delete' last point only if it coincides with the first */
- /* point and it is not a control point (which can happen). */
- if ( p1->x == p2->x && p1->y == p2->y )
- if ( *control == FT_CURVE_TAG_ON )
- outline->n_points--;
- }
-
- if ( outline->n_contours > 0 )
- {
- /* Don't add contours only consisting of one point, i.e., */
- /* check whether the first and the last point is the same. */
- if ( first == outline->n_points - 1 )
- {
- outline->n_contours--;
- outline->n_points--;
- }
- else
- outline->contours[outline->n_contours - 1] =
- (short)( outline->n_points - 1 );
- }
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** OTHER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- t1_decrypt( FT_Byte* buffer,
- FT_Offset length,
- FT_UShort seed )
- {
- PS_Conv_EexecDecode( &buffer,
- buffer + length,
- buffer,
- length,
- &seed );
- }
-
-
-/* END */
diff --git a/src/psaux/psobjs.h b/src/psaux/psobjs.h
deleted file mode 100644
index 202e5b241..000000000
--- a/src/psaux/psobjs.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/***************************************************************************/
-/* */
-/* psobjs.h */
-/* */
-/* Auxiliary functions for PostScript fonts (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PSOBJS_H_
-#define PSOBJS_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** T1_TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_CALLBACK_TABLE
- const PS_Table_FuncsRec ps_table_funcs;
-
- FT_CALLBACK_TABLE
- const PS_Parser_FuncsRec ps_parser_funcs;
-
- FT_CALLBACK_TABLE
- const T1_Builder_FuncsRec t1_builder_funcs;
-
-
- FT_LOCAL( FT_Error )
- ps_table_new( PS_Table table,
- FT_Int count,
- FT_Memory memory );
-
- FT_LOCAL( FT_Error )
- ps_table_add( PS_Table table,
- FT_Int idx,
- void* object,
- FT_UInt length );
-
- FT_LOCAL( void )
- ps_table_done( PS_Table table );
-
-
- FT_LOCAL( void )
- ps_table_release( PS_Table table );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** T1 PARSER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_LOCAL( void )
- ps_parser_skip_spaces( PS_Parser parser );
-
- FT_LOCAL( void )
- ps_parser_skip_PS_token( PS_Parser parser );
-
- FT_LOCAL( void )
- ps_parser_to_token( PS_Parser parser,
- T1_Token token );
-
- FT_LOCAL( void )
- ps_parser_to_token_array( PS_Parser parser,
- T1_Token tokens,
- FT_UInt max_tokens,
- FT_Int* pnum_tokens );
-
- FT_LOCAL( FT_Error )
- ps_parser_load_field( PS_Parser parser,
- const T1_Field field,
- void** objects,
- FT_UInt max_objects,
- FT_ULong* pflags );
-
- FT_LOCAL( FT_Error )
- ps_parser_load_field_table( PS_Parser parser,
- const T1_Field field,
- void** objects,
- FT_UInt max_objects,
- FT_ULong* pflags );
-
- FT_LOCAL( FT_Long )
- ps_parser_to_int( PS_Parser parser );
-
-
- FT_LOCAL( FT_Error )
- ps_parser_to_bytes( PS_Parser parser,
- FT_Byte* bytes,
- FT_Offset max_bytes,
- FT_ULong* pnum_bytes,
- FT_Bool delimiters );
-
-
- FT_LOCAL( FT_Fixed )
- ps_parser_to_fixed( PS_Parser parser,
- FT_Int power_ten );
-
-
- FT_LOCAL( FT_Int )
- ps_parser_to_coord_array( PS_Parser parser,
- FT_Int max_coords,
- FT_Short* coords );
-
- FT_LOCAL( FT_Int )
- ps_parser_to_fixed_array( PS_Parser parser,
- FT_Int max_values,
- FT_Fixed* values,
- FT_Int power_ten );
-
-
- FT_LOCAL( void )
- ps_parser_init( PS_Parser parser,
- FT_Byte* base,
- FT_Byte* limit,
- FT_Memory memory );
-
- FT_LOCAL( void )
- ps_parser_done( PS_Parser parser );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** T1 BUILDER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- t1_builder_init( T1_Builder builder,
- FT_Face face,
- FT_Size size,
- FT_GlyphSlot glyph,
- FT_Bool hinting );
-
- FT_LOCAL( void )
- t1_builder_done( T1_Builder builder );
-
- FT_LOCAL( FT_Error )
- t1_builder_check_points( T1_Builder builder,
- FT_Int count );
-
- FT_LOCAL( void )
- t1_builder_add_point( T1_Builder builder,
- FT_Pos x,
- FT_Pos y,
- FT_Byte flag );
-
- FT_LOCAL( FT_Error )
- t1_builder_add_point1( T1_Builder builder,
- FT_Pos x,
- FT_Pos y );
-
- FT_LOCAL( FT_Error )
- t1_builder_add_contour( T1_Builder builder );
-
-
- FT_LOCAL( FT_Error )
- t1_builder_start_point( T1_Builder builder,
- FT_Pos x,
- FT_Pos y );
-
-
- FT_LOCAL( void )
- t1_builder_close_contour( T1_Builder builder );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** OTHER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- t1_decrypt( FT_Byte* buffer,
- FT_Offset length,
- FT_UShort seed );
-
-
-FT_END_HEADER
-
-#endif /* PSOBJS_H_ */
-
-
-/* END */
diff --git a/src/psaux/rules.mk b/src/psaux/rules.mk
deleted file mode 100644
index 542ae12d2..000000000
--- a/src/psaux/rules.mk
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# FreeType 2 PSaux driver configuration rules
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# PSAUX driver directory
-#
-PSAUX_DIR := $(SRC_DIR)/psaux
-
-
-# compilation flags for the driver
-#
-PSAUX_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(PSAUX_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# PSAUX driver sources (i.e., C files)
-#
-PSAUX_DRV_SRC := $(PSAUX_DIR)/psobjs.c \
- $(PSAUX_DIR)/t1decode.c \
- $(PSAUX_DIR)/t1cmap.c \
- $(PSAUX_DIR)/afmparse.c \
- $(PSAUX_DIR)/psconv.c \
- $(PSAUX_DIR)/psauxmod.c
-
-# PSAUX driver headers
-#
-PSAUX_DRV_H := $(PSAUX_DRV_SRC:%c=%h) \
- $(PSAUX_DIR)/psauxerr.h
-
-
-# PSAUX driver object(s)
-#
-# PSAUX_DRV_OBJ_M is used during `multi' builds.
-# PSAUX_DRV_OBJ_S is used during `single' builds.
-#
-PSAUX_DRV_OBJ_M := $(PSAUX_DRV_SRC:$(PSAUX_DIR)/%.c=$(OBJ_DIR)/%.$O)
-PSAUX_DRV_OBJ_S := $(OBJ_DIR)/psaux.$O
-
-# PSAUX driver source file for single build
-#
-PSAUX_DRV_SRC_S := $(PSAUX_DIR)/psaux.c
-
-
-# PSAUX driver - single object
-#
-$(PSAUX_DRV_OBJ_S): $(PSAUX_DRV_SRC_S) $(PSAUX_DRV_SRC) \
- $(FREETYPE_H) $(PSAUX_DRV_H)
- $(PSAUX_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(PSAUX_DRV_SRC_S))
-
-
-# PSAUX driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(PSAUX_DIR)/%.c $(FREETYPE_H) $(PSAUX_DRV_H)
- $(PSAUX_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(PSAUX_DRV_OBJ_S)
-DRV_OBJS_M += $(PSAUX_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/psaux/t1cmap.c b/src/psaux/t1cmap.c
deleted file mode 100644
index 45b713eb7..000000000
--- a/src/psaux/t1cmap.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1cmap.c */
-/* */
-/* Type 1 character map support (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "t1cmap.h"
-
-#include FT_INTERNAL_DEBUG_H
-
-#include "psauxerr.h"
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** TYPE1 STANDARD (AND EXPERT) ENCODING CMAPS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- t1_cmap_std_init( T1_CMapStd cmap,
- FT_Int is_expert )
- {
- T1_Face face = (T1_Face)FT_CMAP_FACE( cmap );
- FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames;
-
-
- cmap->num_glyphs = (FT_UInt)face->type1.num_glyphs;
- cmap->glyph_names = (const char* const*)face->type1.glyph_names;
- cmap->sid_to_string = psnames->adobe_std_strings;
- cmap->code_to_sid = is_expert ? psnames->adobe_expert_encoding
- : psnames->adobe_std_encoding;
-
- FT_ASSERT( cmap->code_to_sid );
- }
-
-
- FT_CALLBACK_DEF( void )
- t1_cmap_std_done( T1_CMapStd cmap )
- {
- cmap->num_glyphs = 0;
- cmap->glyph_names = NULL;
- cmap->sid_to_string = NULL;
- cmap->code_to_sid = NULL;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- t1_cmap_std_char_index( T1_CMapStd cmap,
- FT_UInt32 char_code )
- {
- FT_UInt result = 0;
-
-
- if ( char_code < 256 )
- {
- FT_UInt code, n;
- const char* glyph_name;
-
-
- /* convert character code to Adobe SID string */
- code = cmap->code_to_sid[char_code];
- glyph_name = cmap->sid_to_string( code );
-
- /* look for the corresponding glyph name */
- for ( n = 0; n < cmap->num_glyphs; n++ )
- {
- const char* gname = cmap->glyph_names[n];
-
-
- if ( gname && gname[0] == glyph_name[0] &&
- ft_strcmp( gname, glyph_name ) == 0 )
- {
- result = n;
- break;
- }
- }
- }
-
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 )
- t1_cmap_std_char_next( T1_CMapStd cmap,
- FT_UInt32 *pchar_code )
- {
- FT_UInt result = 0;
- FT_UInt32 char_code = *pchar_code + 1;
-
-
- while ( char_code < 256 )
- {
- result = t1_cmap_std_char_index( cmap, char_code );
- if ( result != 0 )
- goto Exit;
-
- char_code++;
- }
- char_code = 0;
-
- Exit:
- *pchar_code = char_code;
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- t1_cmap_standard_init( T1_CMapStd cmap,
- FT_Pointer pointer )
- {
- FT_UNUSED( pointer );
-
-
- t1_cmap_std_init( cmap, 0 );
- return 0;
- }
-
-
- FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec
- t1_cmap_standard_class_rec =
- {
- sizeof ( T1_CMapStdRec ),
-
- (FT_CMap_InitFunc) t1_cmap_standard_init, /* init */
- (FT_CMap_DoneFunc) t1_cmap_std_done, /* done */
- (FT_CMap_CharIndexFunc)t1_cmap_std_char_index, /* char_index */
- (FT_CMap_CharNextFunc) t1_cmap_std_char_next, /* char_next */
-
- (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
- (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
- (FT_CMap_VariantListFunc) NULL, /* variant_list */
- (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
- (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
- };
-
-
- FT_CALLBACK_DEF( FT_Error )
- t1_cmap_expert_init( T1_CMapStd cmap,
- FT_Pointer pointer )
- {
- FT_UNUSED( pointer );
-
-
- t1_cmap_std_init( cmap, 1 );
- return 0;
- }
-
- FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec
- t1_cmap_expert_class_rec =
- {
- sizeof ( T1_CMapStdRec ),
-
- (FT_CMap_InitFunc) t1_cmap_expert_init, /* init */
- (FT_CMap_DoneFunc) t1_cmap_std_done, /* done */
- (FT_CMap_CharIndexFunc)t1_cmap_std_char_index, /* char_index */
- (FT_CMap_CharNextFunc) t1_cmap_std_char_next, /* char_next */
-
- (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
- (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
- (FT_CMap_VariantListFunc) NULL, /* variant_list */
- (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
- (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
- };
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** TYPE1 CUSTOM ENCODING CMAP *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_CALLBACK_DEF( FT_Error )
- t1_cmap_custom_init( T1_CMapCustom cmap,
- FT_Pointer pointer )
- {
- T1_Face face = (T1_Face)FT_CMAP_FACE( cmap );
- T1_Encoding encoding = &face->type1.encoding;
-
- FT_UNUSED( pointer );
-
-
- cmap->first = (FT_UInt)encoding->code_first;
- cmap->count = (FT_UInt)encoding->code_last - cmap->first;
- cmap->indices = encoding->char_index;
-
- FT_ASSERT( cmap->indices );
- FT_ASSERT( encoding->code_first <= encoding->code_last );
-
- return 0;
- }
-
-
- FT_CALLBACK_DEF( void )
- t1_cmap_custom_done( T1_CMapCustom cmap )
- {
- cmap->indices = NULL;
- cmap->first = 0;
- cmap->count = 0;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- t1_cmap_custom_char_index( T1_CMapCustom cmap,
- FT_UInt32 char_code )
- {
- FT_UInt result = 0;
-
-
- if ( ( char_code >= cmap->first ) &&
- ( char_code < ( cmap->first + cmap->count ) ) )
- result = cmap->indices[char_code];
-
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 )
- t1_cmap_custom_char_next( T1_CMapCustom cmap,
- FT_UInt32 *pchar_code )
- {
- FT_UInt result = 0;
- FT_UInt32 char_code = *pchar_code;
-
-
- char_code++;
-
- if ( char_code < cmap->first )
- char_code = cmap->first;
-
- for ( ; char_code < ( cmap->first + cmap->count ); char_code++ )
- {
- result = cmap->indices[char_code];
- if ( result != 0 )
- goto Exit;
- }
-
- char_code = 0;
-
- Exit:
- *pchar_code = char_code;
- return result;
- }
-
-
- FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec
- t1_cmap_custom_class_rec =
- {
- sizeof ( T1_CMapCustomRec ),
-
- (FT_CMap_InitFunc) t1_cmap_custom_init, /* init */
- (FT_CMap_DoneFunc) t1_cmap_custom_done, /* done */
- (FT_CMap_CharIndexFunc)t1_cmap_custom_char_index, /* char_index */
- (FT_CMap_CharNextFunc) t1_cmap_custom_char_next, /* char_next */
-
- (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
- (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
- (FT_CMap_VariantListFunc) NULL, /* variant_list */
- (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
- (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
- };
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** TYPE1 SYNTHETIC UNICODE ENCODING CMAP *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_CALLBACK_DEF( const char * )
- psaux_get_glyph_name( T1_Face face,
- FT_UInt idx )
- {
- return face->type1.glyph_names[idx];
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- t1_cmap_unicode_init( PS_Unicodes unicodes,
- FT_Pointer pointer )
- {
- T1_Face face = (T1_Face)FT_CMAP_FACE( unicodes );
- FT_Memory memory = FT_FACE_MEMORY( face );
- FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames;
-
- FT_UNUSED( pointer );
-
-
- return psnames->unicodes_init( memory,
- unicodes,
- (FT_UInt)face->type1.num_glyphs,
- (PS_GetGlyphNameFunc)&psaux_get_glyph_name,
- (PS_FreeGlyphNameFunc)NULL,
- (FT_Pointer)face );
- }
-
-
- FT_CALLBACK_DEF( void )
- t1_cmap_unicode_done( PS_Unicodes unicodes )
- {
- FT_Face face = FT_CMAP_FACE( unicodes );
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- FT_FREE( unicodes->maps );
- unicodes->num_maps = 0;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- t1_cmap_unicode_char_index( PS_Unicodes unicodes,
- FT_UInt32 char_code )
- {
- T1_Face face = (T1_Face)FT_CMAP_FACE( unicodes );
- FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames;
-
-
- return psnames->unicodes_char_index( unicodes, char_code );
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 )
- t1_cmap_unicode_char_next( PS_Unicodes unicodes,
- FT_UInt32 *pchar_code )
- {
- T1_Face face = (T1_Face)FT_CMAP_FACE( unicodes );
- FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames;
-
-
- return psnames->unicodes_char_next( unicodes, pchar_code );
- }
-
-
- FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec
- t1_cmap_unicode_class_rec =
- {
- sizeof ( PS_UnicodesRec ),
-
- (FT_CMap_InitFunc) t1_cmap_unicode_init, /* init */
- (FT_CMap_DoneFunc) t1_cmap_unicode_done, /* done */
- (FT_CMap_CharIndexFunc)t1_cmap_unicode_char_index, /* char_index */
- (FT_CMap_CharNextFunc) t1_cmap_unicode_char_next, /* char_next */
-
- (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
- (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
- (FT_CMap_VariantListFunc) NULL, /* variant_list */
- (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
- (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
- };
-
-
-/* END */
diff --git a/src/psaux/t1cmap.h b/src/psaux/t1cmap.h
deleted file mode 100644
index 7870245a3..000000000
--- a/src/psaux/t1cmap.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1cmap.h */
-/* */
-/* Type 1 character map support (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef T1CMAP_H_
-#define T1CMAP_H_
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_TYPE1_TYPES_H
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** TYPE1 STANDARD (AND EXPERT) ENCODING CMAPS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* standard (and expert) encoding cmaps */
- typedef struct T1_CMapStdRec_* T1_CMapStd;
-
- typedef struct T1_CMapStdRec_
- {
- FT_CMapRec cmap;
-
- const FT_UShort* code_to_sid;
- PS_Adobe_Std_StringsFunc sid_to_string;
-
- FT_UInt num_glyphs;
- const char* const* glyph_names;
-
- } T1_CMapStdRec;
-
-
- FT_CALLBACK_TABLE const FT_CMap_ClassRec
- t1_cmap_standard_class_rec;
-
- FT_CALLBACK_TABLE const FT_CMap_ClassRec
- t1_cmap_expert_class_rec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** TYPE1 CUSTOM ENCODING CMAP *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct T1_CMapCustomRec_* T1_CMapCustom;
-
- typedef struct T1_CMapCustomRec_
- {
- FT_CMapRec cmap;
- FT_UInt first;
- FT_UInt count;
- FT_UShort* indices;
-
- } T1_CMapCustomRec;
-
-
- FT_CALLBACK_TABLE const FT_CMap_ClassRec
- t1_cmap_custom_class_rec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** TYPE1 SYNTHETIC UNICODE ENCODING CMAP *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* unicode (synthetic) cmaps */
-
- FT_CALLBACK_TABLE const FT_CMap_ClassRec
- t1_cmap_unicode_class_rec;
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* T1CMAP_H_ */
-
-
-/* END */
diff --git a/src/psaux/t1decode.c b/src/psaux/t1decode.c
deleted file mode 100644
index 1250b53f5..000000000
--- a/src/psaux/t1decode.c
+++ /dev/null
@@ -1,1648 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1decode.c */
-/* */
-/* PostScript Type 1 decoding routines (body). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-#include FT_INTERNAL_HASH_H
-#include FT_OUTLINE_H
-
-#include "t1decode.h"
-#include "psobjs.h"
-
-#include "psauxerr.h"
-
-/* ensure proper sign extension */
-#define Fix2Int( f ) ( (FT_Int)(FT_Short)( (f) >> 16 ) )
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_t1decode
-
-
- typedef enum T1_Operator_
- {
- op_none = 0,
- op_endchar,
- op_hsbw,
- op_seac,
- op_sbw,
- op_closepath,
- op_hlineto,
- op_hmoveto,
- op_hvcurveto,
- op_rlineto,
- op_rmoveto,
- op_rrcurveto,
- op_vhcurveto,
- op_vlineto,
- op_vmoveto,
- op_dotsection,
- op_hstem,
- op_hstem3,
- op_vstem,
- op_vstem3,
- op_div,
- op_callothersubr,
- op_callsubr,
- op_pop,
- op_return,
- op_setcurrentpoint,
- op_unknown15,
-
- op_max /* never remove this one */
-
- } T1_Operator;
-
-
- static
- const FT_Int t1_args_count[op_max] =
- {
- 0, /* none */
- 0, /* endchar */
- 2, /* hsbw */
- 5, /* seac */
- 4, /* sbw */
- 0, /* closepath */
- 1, /* hlineto */
- 1, /* hmoveto */
- 4, /* hvcurveto */
- 2, /* rlineto */
- 2, /* rmoveto */
- 6, /* rrcurveto */
- 4, /* vhcurveto */
- 1, /* vlineto */
- 1, /* vmoveto */
- 0, /* dotsection */
- 2, /* hstem */
- 6, /* hstem3 */
- 2, /* vstem */
- 6, /* vstem3 */
- 2, /* div */
- -1, /* callothersubr */
- 1, /* callsubr */
- 0, /* pop */
- 0, /* return */
- 2, /* setcurrentpoint */
- 2 /* opcode 15 (undocumented and obsolete) */
- };
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* t1_lookup_glyph_by_stdcharcode */
- /* */
- /* <Description> */
- /* Looks up a given glyph by its StandardEncoding charcode. Used to */
- /* implement the SEAC Type 1 operator. */
- /* */
- /* <Input> */
- /* face :: The current face object. */
- /* */
- /* charcode :: The character code to look for. */
- /* */
- /* <Return> */
- /* A glyph index in the font face. Returns -1 if the corresponding */
- /* glyph wasn't found. */
- /* */
- static FT_Int
- t1_lookup_glyph_by_stdcharcode( T1_Decoder decoder,
- FT_Int charcode )
- {
- FT_UInt n;
- const FT_String* glyph_name;
- FT_Service_PsCMaps psnames = decoder->psnames;
-
-
- /* check range of standard char code */
- if ( charcode < 0 || charcode > 255 )
- return -1;
-
- glyph_name = psnames->adobe_std_strings(
- psnames->adobe_std_encoding[charcode]);
-
- for ( n = 0; n < decoder->num_glyphs; n++ )
- {
- FT_String* name = (FT_String*)decoder->glyph_names[n];
-
-
- if ( name &&
- name[0] == glyph_name[0] &&
- ft_strcmp( name, glyph_name ) == 0 )
- return (FT_Int)n;
- }
-
- return -1;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* t1operator_seac */
- /* */
- /* <Description> */
- /* Implements the `seac' Type 1 operator for a Type 1 decoder. */
- /* */
- /* <Input> */
- /* decoder :: The current CID decoder. */
- /* */
- /* asb :: The accent's side bearing. */
- /* */
- /* adx :: The horizontal offset of the accent. */
- /* */
- /* ady :: The vertical offset of the accent. */
- /* */
- /* bchar :: The base character's StandardEncoding charcode. */
- /* */
- /* achar :: The accent character's StandardEncoding charcode. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- static FT_Error
- t1operator_seac( T1_Decoder decoder,
- FT_Pos asb,
- FT_Pos adx,
- FT_Pos ady,
- FT_Int bchar,
- FT_Int achar )
- {
- FT_Error error;
- FT_Int bchar_index, achar_index;
-#if 0
- FT_Int n_base_points;
- FT_Outline* base = decoder->builder.base;
-#endif
- FT_Vector left_bearing, advance;
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- T1_Face face = (T1_Face)decoder->builder.face;
-#endif
-
-
- if ( decoder->seac )
- {
- FT_ERROR(( "t1operator_seac: invalid nested seac\n" ));
- return FT_THROW( Syntax_Error );
- }
-
- if ( decoder->builder.metrics_only )
- {
- FT_ERROR(( "t1operator_seac: unexpected seac\n" ));
- return FT_THROW( Syntax_Error );
- }
-
- /* seac weirdness */
- adx += decoder->builder.left_bearing.x;
-
- /* `glyph_names' is set to 0 for CID fonts which do not */
- /* include an encoding. How can we deal with these? */
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- if ( decoder->glyph_names == 0 &&
- !face->root.internal->incremental_interface )
-#else
- if ( decoder->glyph_names == 0 )
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
- {
- FT_ERROR(( "t1operator_seac:"
- " glyph names table not available in this font\n" ));
- return FT_THROW( Syntax_Error );
- }
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- if ( face->root.internal->incremental_interface )
- {
- /* the caller must handle the font encoding also */
- bchar_index = bchar;
- achar_index = achar;
- }
- else
-#endif
- {
- bchar_index = t1_lookup_glyph_by_stdcharcode( decoder, bchar );
- achar_index = t1_lookup_glyph_by_stdcharcode( decoder, achar );
- }
-
- if ( bchar_index < 0 || achar_index < 0 )
- {
- FT_ERROR(( "t1operator_seac:"
- " invalid seac character code arguments\n" ));
- return FT_THROW( Syntax_Error );
- }
-
- /* if we are trying to load a composite glyph, do not load the */
- /* accent character and return the array of subglyphs. */
- if ( decoder->builder.no_recurse )
- {
- FT_GlyphSlot glyph = (FT_GlyphSlot)decoder->builder.glyph;
- FT_GlyphLoader loader = glyph->internal->loader;
- FT_SubGlyph subg;
-
-
- /* reallocate subglyph array if necessary */
- error = FT_GlyphLoader_CheckSubGlyphs( loader, 2 );
- if ( error )
- goto Exit;
-
- subg = loader->current.subglyphs;
-
- /* subglyph 0 = base character */
- subg->index = bchar_index;
- subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES |
- FT_SUBGLYPH_FLAG_USE_MY_METRICS;
- subg->arg1 = 0;
- subg->arg2 = 0;
- subg++;
-
- /* subglyph 1 = accent character */
- subg->index = achar_index;
- subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES;
- subg->arg1 = (FT_Int)FIXED_TO_INT( adx - asb );
- subg->arg2 = (FT_Int)FIXED_TO_INT( ady );
-
- /* set up remaining glyph fields */
- glyph->num_subglyphs = 2;
- glyph->subglyphs = loader->base.subglyphs;
- glyph->format = FT_GLYPH_FORMAT_COMPOSITE;
-
- loader->current.num_subglyphs = 2;
- goto Exit;
- }
-
- /* First load `bchar' in builder */
- /* now load the unscaled outline */
-
- FT_GlyphLoader_Prepare( decoder->builder.loader ); /* prepare loader */
-
- /* the seac operator must not be nested */
- decoder->seac = TRUE;
- error = t1_decoder_parse_glyph( decoder, (FT_UInt)bchar_index );
- decoder->seac = FALSE;
- if ( error )
- goto Exit;
-
- /* save the left bearing and width of the base character */
- /* as they will be erased by the next load. */
-
- left_bearing = decoder->builder.left_bearing;
- advance = decoder->builder.advance;
-
- decoder->builder.left_bearing.x = 0;
- decoder->builder.left_bearing.y = 0;
-
- decoder->builder.pos_x = adx - asb;
- decoder->builder.pos_y = ady;
-
- /* Now load `achar' on top of */
- /* the base outline */
-
- /* the seac operator must not be nested */
- decoder->seac = TRUE;
- error = t1_decoder_parse_glyph( decoder, (FT_UInt)achar_index );
- decoder->seac = FALSE;
- if ( error )
- goto Exit;
-
- /* restore the left side bearing and */
- /* advance width of the base character */
-
- decoder->builder.left_bearing = left_bearing;
- decoder->builder.advance = advance;
-
- decoder->builder.pos_x = 0;
- decoder->builder.pos_y = 0;
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* t1_decoder_parse_charstrings */
- /* */
- /* <Description> */
- /* Parses a given Type 1 charstrings program. */
- /* */
- /* <Input> */
- /* decoder :: The current Type 1 decoder. */
- /* */
- /* charstring_base :: The base address of the charstring stream. */
- /* */
- /* charstring_len :: The length in bytes of the charstring stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- t1_decoder_parse_charstrings( T1_Decoder decoder,
- FT_Byte* charstring_base,
- FT_UInt charstring_len )
- {
- FT_Error error;
- T1_Decoder_Zone zone;
- FT_Byte* ip;
- FT_Byte* limit;
- T1_Builder builder = &decoder->builder;
- FT_Pos x, y, orig_x, orig_y;
- FT_Int known_othersubr_result_cnt = 0;
- FT_Int unknown_othersubr_result_cnt = 0;
- FT_Bool large_int;
- FT_Fixed seed;
-
- T1_Hints_Funcs hinter;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_Bool bol = TRUE;
-#endif
-
-
- /* compute random seed from stack address of parameter */
- seed = (FT_Fixed)( ( (FT_Offset)(char*)&seed ^
- (FT_Offset)(char*)&decoder ^
- (FT_Offset)(char*)&charstring_base ) &
- FT_ULONG_MAX );
- seed = ( seed ^ ( seed >> 10 ) ^ ( seed >> 20 ) ) & 0xFFFFL;
- if ( seed == 0 )
- seed = 0x7384;
-
- /* First of all, initialize the decoder */
- decoder->top = decoder->stack;
- decoder->zone = decoder->zones;
- zone = decoder->zones;
-
- builder->parse_state = T1_Parse_Start;
-
- hinter = (T1_Hints_Funcs)builder->hints_funcs;
-
- /* a font that reads BuildCharArray without setting */
- /* its values first is buggy, but ... */
- FT_ASSERT( ( decoder->len_buildchar == 0 ) ==
- ( decoder->buildchar == NULL ) );
-
- if ( decoder->buildchar && decoder->len_buildchar > 0 )
- FT_ARRAY_ZERO( decoder->buildchar, decoder->len_buildchar );
-
- FT_TRACE4(( "\n"
- "Start charstring\n" ));
-
- zone->base = charstring_base;
- limit = zone->limit = charstring_base + charstring_len;
- ip = zone->cursor = zone->base;
-
- error = FT_Err_Ok;
-
- x = orig_x = builder->pos_x;
- y = orig_y = builder->pos_y;
-
- /* begin hints recording session, if any */
- if ( hinter )
- hinter->open( hinter->hints );
-
- large_int = FALSE;
-
- /* now, execute loop */
- while ( ip < limit )
- {
- FT_Long* top = decoder->top;
- T1_Operator op = op_none;
- FT_Int32 value = 0;
-
-
- FT_ASSERT( known_othersubr_result_cnt == 0 ||
- unknown_othersubr_result_cnt == 0 );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( bol )
- {
- FT_TRACE5(( " (%d)", decoder->top - decoder->stack ));
- bol = FALSE;
- }
-#endif
-
- /*********************************************************************/
- /* */
- /* Decode operator or operand */
- /* */
- /* */
-
- /* first of all, decompress operator or value */
- switch ( *ip++ )
- {
- case 1:
- op = op_hstem;
- break;
-
- case 3:
- op = op_vstem;
- break;
- case 4:
- op = op_vmoveto;
- break;
- case 5:
- op = op_rlineto;
- break;
- case 6:
- op = op_hlineto;
- break;
- case 7:
- op = op_vlineto;
- break;
- case 8:
- op = op_rrcurveto;
- break;
- case 9:
- op = op_closepath;
- break;
- case 10:
- op = op_callsubr;
- break;
- case 11:
- op = op_return;
- break;
-
- case 13:
- op = op_hsbw;
- break;
- case 14:
- op = op_endchar;
- break;
-
- case 15: /* undocumented, obsolete operator */
- op = op_unknown15;
- break;
-
- case 21:
- op = op_rmoveto;
- break;
- case 22:
- op = op_hmoveto;
- break;
-
- case 30:
- op = op_vhcurveto;
- break;
- case 31:
- op = op_hvcurveto;
- break;
-
- case 12:
- if ( ip >= limit )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " invalid escape (12+EOF)\n" ));
- goto Syntax_Error;
- }
-
- switch ( *ip++ )
- {
- case 0:
- op = op_dotsection;
- break;
- case 1:
- op = op_vstem3;
- break;
- case 2:
- op = op_hstem3;
- break;
- case 6:
- op = op_seac;
- break;
- case 7:
- op = op_sbw;
- break;
- case 12:
- op = op_div;
- break;
- case 16:
- op = op_callothersubr;
- break;
- case 17:
- op = op_pop;
- break;
- case 33:
- op = op_setcurrentpoint;
- break;
-
- default:
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " invalid escape (12+%d)\n",
- ip[-1] ));
- goto Syntax_Error;
- }
- break;
-
- case 255: /* four bytes integer */
- if ( ip + 4 > limit )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " unexpected EOF in integer\n" ));
- goto Syntax_Error;
- }
-
- value = (FT_Int32)( ( (FT_UInt32)ip[0] << 24 ) |
- ( (FT_UInt32)ip[1] << 16 ) |
- ( (FT_UInt32)ip[2] << 8 ) |
- (FT_UInt32)ip[3] );
- ip += 4;
-
- /* According to the specification, values > 32000 or < -32000 must */
- /* be followed by a `div' operator to make the result be in the */
- /* range [-32000;32000]. We expect that the second argument of */
- /* `div' is not a large number. Additionally, we don't handle */
- /* stuff like `<large1> <large2> <num> div <num> div' or */
- /* <large1> <large2> <num> div div'. This is probably not allowed */
- /* anyway. */
- if ( value > 32000 || value < -32000 )
- {
- if ( large_int )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " no `div' after large integer\n" ));
- }
- else
- large_int = TRUE;
- }
- else
- {
- if ( !large_int )
- value = (FT_Int32)( (FT_UInt32)value << 16 );
- }
-
- break;
-
- default:
- if ( ip[-1] >= 32 )
- {
- if ( ip[-1] < 247 )
- value = (FT_Int32)ip[-1] - 139;
- else
- {
- if ( ++ip > limit )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " unexpected EOF in integer\n" ));
- goto Syntax_Error;
- }
-
- if ( ip[-2] < 251 )
- value = ( ( ip[-2] - 247 ) * 256 ) + ip[-1] + 108;
- else
- value = -( ( ( ip[-2] - 251 ) * 256 ) + ip[-1] + 108 );
- }
-
- if ( !large_int )
- value = (FT_Int32)( (FT_UInt32)value << 16 );
- }
- else
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " invalid byte (%d)\n", ip[-1] ));
- goto Syntax_Error;
- }
- }
-
- if ( unknown_othersubr_result_cnt > 0 )
- {
- switch ( op )
- {
- case op_callsubr:
- case op_return:
- case op_none:
- case op_pop:
- break;
-
- default:
- /* all operands have been transferred by previous pops */
- unknown_othersubr_result_cnt = 0;
- break;
- }
- }
-
- if ( large_int && !( op == op_none || op == op_div ) )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " no `div' after large integer\n" ));
-
- large_int = FALSE;
- }
-
- /*********************************************************************/
- /* */
- /* Push value on stack, or process operator */
- /* */
- /* */
- if ( op == op_none )
- {
- if ( top - decoder->stack >= T1_MAX_CHARSTRINGS_OPERANDS )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings: stack overflow\n" ));
- goto Syntax_Error;
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( large_int )
- FT_TRACE4(( " %d", value ));
- else
- FT_TRACE4(( " %d", value / 65536 ));
-#endif
-
- *top++ = value;
- decoder->top = top;
- }
- else if ( op == op_callothersubr ) /* callothersubr */
- {
- FT_Int subr_no;
- FT_Int arg_cnt;
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE4(( " callothersubr\n" ));
- bol = TRUE;
-#endif
-
- if ( top - decoder->stack < 2 )
- goto Stack_Underflow;
-
- top -= 2;
-
- subr_no = Fix2Int( top[1] );
- arg_cnt = Fix2Int( top[0] );
-
- /***********************************************************/
- /* */
- /* remove all operands to callothersubr from the stack */
- /* */
- /* for handled othersubrs, where we know the number of */
- /* arguments, we increase the stack by the value of */
- /* known_othersubr_result_cnt */
- /* */
- /* for unhandled othersubrs the following pops adjust the */
- /* stack pointer as necessary */
-
- if ( arg_cnt > top - decoder->stack )
- goto Stack_Underflow;
-
- top -= arg_cnt;
-
- known_othersubr_result_cnt = 0;
- unknown_othersubr_result_cnt = 0;
-
- /* XXX TODO: The checks to `arg_count == <whatever>' */
- /* might not be correct; an othersubr expects a certain */
- /* number of operands on the PostScript stack (as opposed */
- /* to the T1 stack) but it doesn't have to put them there */
- /* by itself; previous othersubrs might have left the */
- /* operands there if they were not followed by an */
- /* appropriate number of pops */
- /* */
- /* On the other hand, Adobe Reader 7.0.8 for Linux doesn't */
- /* accept a font that contains charstrings like */
- /* */
- /* 100 200 2 20 callothersubr */
- /* 300 1 20 callothersubr pop */
- /* */
- /* Perhaps this is the reason why BuildCharArray exists. */
-
- switch ( subr_no )
- {
- case 0: /* end flex feature */
- if ( arg_cnt != 3 )
- goto Unexpected_OtherSubr;
-
- if ( !decoder->flex_state ||
- decoder->num_flex_vectors != 7 )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " unexpected flex end\n" ));
- goto Syntax_Error;
- }
-
- /* the two `results' are popped by the following setcurrentpoint */
- top[0] = x;
- top[1] = y;
- known_othersubr_result_cnt = 2;
- break;
-
- case 1: /* start flex feature */
- if ( arg_cnt != 0 )
- goto Unexpected_OtherSubr;
-
- if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) ||
- FT_SET_ERROR( t1_builder_check_points( builder, 6 ) ) )
- goto Fail;
-
- decoder->flex_state = 1;
- decoder->num_flex_vectors = 0;
- break;
-
- case 2: /* add flex vectors */
- {
- FT_Int idx;
-
-
- if ( arg_cnt != 0 )
- goto Unexpected_OtherSubr;
-
- if ( !decoder->flex_state )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " missing flex start\n" ));
- goto Syntax_Error;
- }
-
- /* note that we should not add a point for index 0; */
- /* this will move our current position to the flex */
- /* point without adding any point to the outline */
- idx = decoder->num_flex_vectors++;
- if ( idx > 0 && idx < 7 )
- {
- /* in malformed fonts it is possible to have other */
- /* opcodes in the middle of a flex (which don't */
- /* increase `num_flex_vectors'); we thus have to */
- /* check whether we can add a point */
- if ( FT_SET_ERROR( t1_builder_check_points( builder, 1 ) ) )
- goto Syntax_Error;
-
- t1_builder_add_point( builder,
- x,
- y,
- (FT_Byte)( idx == 3 || idx == 6 ) );
- }
- }
- break;
-
- case 3: /* change hints */
- if ( arg_cnt != 1 )
- goto Unexpected_OtherSubr;
-
- known_othersubr_result_cnt = 1;
-
- if ( hinter )
- hinter->reset( hinter->hints,
- (FT_UInt)builder->current->n_points );
- break;
-
- case 12:
- case 13:
- /* counter control hints, clear stack */
- top = decoder->stack;
- break;
-
- case 14:
- case 15:
- case 16:
- case 17:
- case 18: /* multiple masters */
- {
- PS_Blend blend = decoder->blend;
- FT_UInt num_points, nn, mm;
- FT_Long* delta;
- FT_Long* values;
-
-
- if ( !blend )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " unexpected multiple masters operator\n" ));
- goto Syntax_Error;
- }
-
- num_points = (FT_UInt)subr_no - 13 + ( subr_no == 18 );
- if ( arg_cnt != (FT_Int)( num_points * blend->num_designs ) )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " incorrect number of multiple masters arguments\n" ));
- goto Syntax_Error;
- }
-
- /* We want to compute */
- /* */
- /* a0*w0 + a1*w1 + ... + ak*wk */
- /* */
- /* but we only have a0, a1-a0, a2-a0, ..., ak-a0. */
- /* */
- /* However, given that w0 + w1 + ... + wk == 1, we can */
- /* rewrite it easily as */
- /* */
- /* a0 + (a1-a0)*w1 + (a2-a0)*w2 + ... + (ak-a0)*wk */
- /* */
- /* where k == num_designs-1. */
- /* */
- /* I guess that's why it's written in this `compact' */
- /* form. */
- /* */
- delta = top + num_points;
- values = top;
- for ( nn = 0; nn < num_points; nn++ )
- {
- FT_Long tmp = values[0];
-
-
- for ( mm = 1; mm < blend->num_designs; mm++ )
- tmp = ADD_LONG( tmp,
- FT_MulFix( *delta++,
- blend->weight_vector[mm] ) );
-
- *values++ = tmp;
- }
-
- known_othersubr_result_cnt = (FT_Int)num_points;
- break;
- }
-
- case 19:
- /* <idx> 1 19 callothersubr */
- /* => replace elements starting from index cvi( <idx> ) */
- /* of BuildCharArray with WeightVector */
- {
- FT_Int idx;
- PS_Blend blend = decoder->blend;
-
-
- if ( arg_cnt != 1 || !blend )
- goto Unexpected_OtherSubr;
-
- idx = Fix2Int( top[0] );
-
- if ( idx < 0 ||
- (FT_UInt)idx + blend->num_designs > decoder->len_buildchar )
- goto Unexpected_OtherSubr;
-
- ft_memcpy( &decoder->buildchar[idx],
- blend->weight_vector,
- blend->num_designs *
- sizeof ( blend->weight_vector[0] ) );
- }
- break;
-
- case 20:
- /* <arg1> <arg2> 2 20 callothersubr pop */
- /* ==> push <arg1> + <arg2> onto T1 stack */
- if ( arg_cnt != 2 )
- goto Unexpected_OtherSubr;
-
- top[0] = ADD_LONG( top[0], top[1] );
-
- known_othersubr_result_cnt = 1;
- break;
-
- case 21:
- /* <arg1> <arg2> 2 21 callothersubr pop */
- /* ==> push <arg1> - <arg2> onto T1 stack */
- if ( arg_cnt != 2 )
- goto Unexpected_OtherSubr;
-
- top[0] = SUB_LONG( top[0], top[1] );
-
- known_othersubr_result_cnt = 1;
- break;
-
- case 22:
- /* <arg1> <arg2> 2 22 callothersubr pop */
- /* ==> push <arg1> * <arg2> onto T1 stack */
- if ( arg_cnt != 2 )
- goto Unexpected_OtherSubr;
-
- top[0] = FT_MulFix( top[0], top[1] );
-
- known_othersubr_result_cnt = 1;
- break;
-
- case 23:
- /* <arg1> <arg2> 2 23 callothersubr pop */
- /* ==> push <arg1> / <arg2> onto T1 stack */
- if ( arg_cnt != 2 || top[1] == 0 )
- goto Unexpected_OtherSubr;
-
- top[0] = FT_DivFix( top[0], top[1] );
-
- known_othersubr_result_cnt = 1;
- break;
-
- case 24:
- /* <val> <idx> 2 24 callothersubr */
- /* ==> set BuildCharArray[cvi( <idx> )] = <val> */
- {
- FT_Int idx;
- PS_Blend blend = decoder->blend;
-
-
- if ( arg_cnt != 2 || !blend )
- goto Unexpected_OtherSubr;
-
- idx = Fix2Int( top[1] );
-
- if ( idx < 0 || (FT_UInt) idx >= decoder->len_buildchar )
- goto Unexpected_OtherSubr;
-
- decoder->buildchar[idx] = top[0];
- }
- break;
-
- case 25:
- /* <idx> 1 25 callothersubr pop */
- /* ==> push BuildCharArray[cvi( idx )] */
- /* onto T1 stack */
- {
- FT_Int idx;
- PS_Blend blend = decoder->blend;
-
-
- if ( arg_cnt != 1 || !blend )
- goto Unexpected_OtherSubr;
-
- idx = Fix2Int( top[0] );
-
- if ( idx < 0 || (FT_UInt) idx >= decoder->len_buildchar )
- goto Unexpected_OtherSubr;
-
- top[0] = decoder->buildchar[idx];
- }
-
- known_othersubr_result_cnt = 1;
- break;
-
-#if 0
- case 26:
- /* <val> mark <idx> ==> set BuildCharArray[cvi( <idx> )] = <val>, */
- /* leave mark on T1 stack */
- /* <val> <idx> ==> set BuildCharArray[cvi( <idx> )] = <val> */
- XXX which routine has left its mark on the (PostScript) stack?;
- break;
-#endif
-
- case 27:
- /* <res1> <res2> <val1> <val2> 4 27 callothersubr pop */
- /* ==> push <res1> onto T1 stack if <val1> <= <val2>, */
- /* otherwise push <res2> */
- if ( arg_cnt != 4 )
- goto Unexpected_OtherSubr;
-
- if ( top[2] > top[3] )
- top[0] = top[1];
-
- known_othersubr_result_cnt = 1;
- break;
-
- case 28:
- /* 0 28 callothersubr pop */
- /* => push random value from interval [0, 1) onto stack */
- if ( arg_cnt != 0 )
- goto Unexpected_OtherSubr;
-
- {
- FT_Fixed Rand;
-
-
- Rand = seed;
- if ( Rand >= 0x8000L )
- Rand++;
-
- top[0] = Rand;
-
- seed = FT_MulFix( seed, 0x10000L - seed );
- if ( seed == 0 )
- seed += 0x2873;
- }
-
- known_othersubr_result_cnt = 1;
- break;
-
- default:
- if ( arg_cnt >= 0 && subr_no >= 0 )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " unknown othersubr [%d %d], wish me luck\n",
- arg_cnt, subr_no ));
- unknown_othersubr_result_cnt = arg_cnt;
- break;
- }
- /* fall through */
-
- Unexpected_OtherSubr:
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " invalid othersubr [%d %d]\n", arg_cnt, subr_no ));
- goto Syntax_Error;
- }
-
- top += known_othersubr_result_cnt;
-
- decoder->top = top;
- }
- else /* general operator */
- {
- FT_Int num_args = t1_args_count[op];
-
-
- FT_ASSERT( num_args >= 0 );
-
- if ( top - decoder->stack < num_args )
- goto Stack_Underflow;
-
- /* XXX Operators usually take their operands from the */
- /* bottom of the stack, i.e., the operands are */
- /* decoder->stack[0], ..., decoder->stack[num_args - 1]; */
- /* only div, callsubr, and callothersubr are different. */
- /* In practice it doesn't matter (?). */
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
- switch ( op )
- {
- case op_callsubr:
- case op_div:
- case op_callothersubr:
- case op_pop:
- case op_return:
- break;
-
- default:
- if ( top - decoder->stack != num_args )
- FT_TRACE0(( "t1_decoder_parse_charstrings:"
- " too much operands on the stack"
- " (seen %d, expected %d)\n",
- top - decoder->stack, num_args ));
- break;
- }
-
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
- top -= num_args;
-
- switch ( op )
- {
- case op_endchar:
- FT_TRACE4(( " endchar\n" ));
-
- t1_builder_close_contour( builder );
-
- /* close hints recording session */
- if ( hinter )
- {
- if ( hinter->close( hinter->hints,
- (FT_UInt)builder->current->n_points ) )
- goto Syntax_Error;
-
- /* apply hints to the loaded glyph outline now */
- error = hinter->apply( hinter->hints,
- builder->current,
- (PSH_Globals)builder->hints_globals,
- decoder->hint_mode );
- if ( error )
- goto Fail;
- }
-
- /* add current outline to the glyph slot */
- FT_GlyphLoader_Add( builder->loader );
-
- /* the compiler should optimize away this empty loop but ... */
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
- if ( decoder->len_buildchar > 0 )
- {
- FT_UInt i;
-
-
- FT_TRACE4(( "BuildCharArray = [ " ));
-
- for ( i = 0; i < decoder->len_buildchar; i++ )
- FT_TRACE4(( "%d ", decoder->buildchar[i] ));
-
- FT_TRACE4(( "]\n" ));
- }
-
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
- FT_TRACE4(( "\n" ));
-
- /* return now! */
- return FT_Err_Ok;
-
- case op_hsbw:
- FT_TRACE4(( " hsbw" ));
-
- builder->parse_state = T1_Parse_Have_Width;
-
- builder->left_bearing.x = ADD_LONG( builder->left_bearing.x,
- top[0] );
-
- builder->advance.x = top[1];
- builder->advance.y = 0;
-
- orig_x = x = ADD_LONG( builder->pos_x, top[0] );
- orig_y = y = builder->pos_y;
-
- FT_UNUSED( orig_y );
-
- /* the `metrics_only' indicates that we only want to compute */
- /* the glyph's metrics (lsb + advance width), not load the */
- /* rest of it; so exit immediately */
- if ( builder->metrics_only )
- return FT_Err_Ok;
-
- break;
-
- case op_seac:
- return t1operator_seac( decoder,
- top[0],
- top[1],
- top[2],
- Fix2Int( top[3] ),
- Fix2Int( top[4] ) );
-
- case op_sbw:
- FT_TRACE4(( " sbw" ));
-
- builder->parse_state = T1_Parse_Have_Width;
-
- builder->left_bearing.x = ADD_LONG( builder->left_bearing.x,
- top[0] );
- builder->left_bearing.y = ADD_LONG( builder->left_bearing.y,
- top[1] );
-
- builder->advance.x = top[2];
- builder->advance.y = top[3];
-
- x = ADD_LONG( builder->pos_x, top[0] );
- y = ADD_LONG( builder->pos_y, top[1] );
-
- /* the `metrics_only' indicates that we only want to compute */
- /* the glyph's metrics (lsb + advance width), not load the */
- /* rest of it; so exit immediately */
- if ( builder->metrics_only )
- return FT_Err_Ok;
-
- break;
-
- case op_closepath:
- FT_TRACE4(( " closepath" ));
-
- /* if there is no path, `closepath' is a no-op */
- if ( builder->parse_state == T1_Parse_Have_Path ||
- builder->parse_state == T1_Parse_Have_Moveto )
- t1_builder_close_contour( builder );
-
- builder->parse_state = T1_Parse_Have_Width;
- break;
-
- case op_hlineto:
- FT_TRACE4(( " hlineto" ));
-
- if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) )
- goto Fail;
-
- x = ADD_LONG( x, top[0] );
- goto Add_Line;
-
- case op_hmoveto:
- FT_TRACE4(( " hmoveto" ));
-
- x = ADD_LONG( x, top[0] );
-
- if ( !decoder->flex_state )
- {
- if ( builder->parse_state == T1_Parse_Start )
- goto Syntax_Error;
- builder->parse_state = T1_Parse_Have_Moveto;
- }
- break;
-
- case op_hvcurveto:
- FT_TRACE4(( " hvcurveto" ));
-
- if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) ||
- FT_SET_ERROR( t1_builder_check_points( builder, 3 ) ) )
- goto Fail;
-
- x = ADD_LONG( x, top[0] );
- t1_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, top[1] );
- y = ADD_LONG( y, top[2] );
- t1_builder_add_point( builder, x, y, 0 );
-
- y = ADD_LONG( y, top[3] );
- t1_builder_add_point( builder, x, y, 1 );
- break;
-
- case op_rlineto:
- FT_TRACE4(( " rlineto" ));
-
- if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) )
- goto Fail;
-
- x = ADD_LONG( x, top[0] );
- y = ADD_LONG( y, top[1] );
-
- Add_Line:
- if ( FT_SET_ERROR( t1_builder_add_point1( builder, x, y ) ) )
- goto Fail;
- break;
-
- case op_rmoveto:
- FT_TRACE4(( " rmoveto" ));
-
- x = ADD_LONG( x, top[0] );
- y = ADD_LONG( y, top[1] );
-
- if ( !decoder->flex_state )
- {
- if ( builder->parse_state == T1_Parse_Start )
- goto Syntax_Error;
- builder->parse_state = T1_Parse_Have_Moveto;
- }
- break;
-
- case op_rrcurveto:
- FT_TRACE4(( " rrcurveto" ));
-
- if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) ||
- FT_SET_ERROR( t1_builder_check_points( builder, 3 ) ) )
- goto Fail;
-
- x = ADD_LONG( x, top[0] );
- y = ADD_LONG( y, top[1] );
- t1_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, top[2] );
- y = ADD_LONG( y, top[3] );
- t1_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, top[4] );
- y = ADD_LONG( y, top[5] );
- t1_builder_add_point( builder, x, y, 1 );
- break;
-
- case op_vhcurveto:
- FT_TRACE4(( " vhcurveto" ));
-
- if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) ||
- FT_SET_ERROR( t1_builder_check_points( builder, 3 ) ) )
- goto Fail;
-
- y = ADD_LONG( y, top[0] );
- t1_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, top[1] );
- y = ADD_LONG( y, top[2] );
- t1_builder_add_point( builder, x, y, 0 );
-
- x = ADD_LONG( x, top[3] );
- t1_builder_add_point( builder, x, y, 1 );
- break;
-
- case op_vlineto:
- FT_TRACE4(( " vlineto" ));
-
- if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) )
- goto Fail;
-
- y = ADD_LONG( y, top[0] );
- goto Add_Line;
-
- case op_vmoveto:
- FT_TRACE4(( " vmoveto" ));
-
- y = ADD_LONG( y, top[0] );
-
- if ( !decoder->flex_state )
- {
- if ( builder->parse_state == T1_Parse_Start )
- goto Syntax_Error;
- builder->parse_state = T1_Parse_Have_Moveto;
- }
- break;
-
- case op_div:
- FT_TRACE4(( " div" ));
-
- /* if `large_int' is set, we divide unscaled numbers; */
- /* otherwise, we divide numbers in 16.16 format -- */
- /* in both cases, it is the same operation */
- *top = FT_DivFix( top[0], top[1] );
- top++;
-
- large_int = FALSE;
- break;
-
- case op_callsubr:
- {
- FT_Int idx;
-
-
- FT_TRACE4(( " callsubr" ));
-
- idx = Fix2Int( top[0] );
-
- if ( decoder->subrs_hash )
- {
- size_t* val = ft_hash_num_lookup( idx,
- decoder->subrs_hash );
-
-
- if ( val )
- idx = *val;
- else
- idx = -1;
- }
-
- if ( idx < 0 || idx >= decoder->num_subrs )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " invalid subrs index\n" ));
- goto Syntax_Error;
- }
-
- if ( zone - decoder->zones >= T1_MAX_SUBRS_CALLS )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " too many nested subrs\n" ));
- goto Syntax_Error;
- }
-
- zone->cursor = ip; /* save current instruction pointer */
-
- zone++;
-
- /* The Type 1 driver stores subroutines without the seed bytes. */
- /* The CID driver stores subroutines with seed bytes. This */
- /* case is taken care of when decoder->subrs_len == 0. */
- zone->base = decoder->subrs[idx];
-
- if ( decoder->subrs_len )
- zone->limit = zone->base + decoder->subrs_len[idx];
- else
- {
- /* We are using subroutines from a CID font. We must adjust */
- /* for the seed bytes. */
- zone->base += ( decoder->lenIV >= 0 ? decoder->lenIV : 0 );
- zone->limit = decoder->subrs[idx + 1];
- }
-
- zone->cursor = zone->base;
-
- if ( !zone->base )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " invoking empty subrs\n" ));
- goto Syntax_Error;
- }
-
- decoder->zone = zone;
- ip = zone->base;
- limit = zone->limit;
- break;
- }
-
- case op_pop:
- FT_TRACE4(( " pop" ));
-
- if ( known_othersubr_result_cnt > 0 )
- {
- known_othersubr_result_cnt--;
- /* ignore, we pushed the operands ourselves */
- break;
- }
-
- if ( unknown_othersubr_result_cnt == 0 )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " no more operands for othersubr\n" ));
- goto Syntax_Error;
- }
-
- unknown_othersubr_result_cnt--;
- top++; /* `push' the operand to callothersubr onto the stack */
- break;
-
- case op_return:
- FT_TRACE4(( " return" ));
-
- if ( zone <= decoder->zones )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " unexpected return\n" ));
- goto Syntax_Error;
- }
-
- zone--;
- ip = zone->cursor;
- limit = zone->limit;
- decoder->zone = zone;
- break;
-
- case op_dotsection:
- FT_TRACE4(( " dotsection" ));
-
- break;
-
- case op_hstem:
- FT_TRACE4(( " hstem" ));
-
- /* record horizontal hint */
- if ( hinter )
- {
- /* top[0] += builder->left_bearing.y; */
- hinter->stem( hinter->hints, 1, top );
- }
- break;
-
- case op_hstem3:
- FT_TRACE4(( " hstem3" ));
-
- /* record horizontal counter-controlled hints */
- if ( hinter )
- hinter->stem3( hinter->hints, 1, top );
- break;
-
- case op_vstem:
- FT_TRACE4(( " vstem" ));
-
- /* record vertical hint */
- if ( hinter )
- {
- top[0] = ADD_LONG( top[0], orig_x );
- hinter->stem( hinter->hints, 0, top );
- }
- break;
-
- case op_vstem3:
- FT_TRACE4(( " vstem3" ));
-
- /* record vertical counter-controlled hints */
- if ( hinter )
- {
- FT_Pos dx = orig_x;
-
-
- top[0] = ADD_LONG( top[0], dx );
- top[2] = ADD_LONG( top[2], dx );
- top[4] = ADD_LONG( top[4], dx );
- hinter->stem3( hinter->hints, 0, top );
- }
- break;
-
- case op_setcurrentpoint:
- FT_TRACE4(( " setcurrentpoint" ));
-
- /* From the T1 specification, section 6.4: */
- /* */
- /* The setcurrentpoint command is used only in */
- /* conjunction with results from OtherSubrs procedures. */
-
- /* known_othersubr_result_cnt != 0 is already handled */
- /* above. */
-
- /* Note, however, that both Ghostscript and Adobe */
- /* Distiller handle this situation by silently ignoring */
- /* the inappropriate `setcurrentpoint' instruction. So */
- /* we do the same. */
-#if 0
-
- if ( decoder->flex_state != 1 )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " unexpected `setcurrentpoint'\n" ));
- goto Syntax_Error;
- }
- else
- ...
-#endif
-
- x = top[0];
- y = top[1];
- decoder->flex_state = 0;
- break;
-
- case op_unknown15:
- FT_TRACE4(( " opcode_15" ));
- /* nothing to do except to pop the two arguments */
- break;
-
- default:
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- " unhandled opcode %d\n", op ));
- goto Syntax_Error;
- }
-
- /* XXX Operators usually clear the operand stack; */
- /* only div, callsubr, callothersubr, pop, and */
- /* return are different. */
- /* In practice it doesn't matter (?). */
-
- decoder->top = top;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE4(( "\n" ));
- bol = TRUE;
-#endif
-
- } /* general operator processing */
-
- } /* while ip < limit */
-
- FT_TRACE4(( "..end..\n\n" ));
-
- Fail:
- return error;
-
- Syntax_Error:
- return FT_THROW( Syntax_Error );
-
- Stack_Underflow:
- return FT_THROW( Stack_Underflow );
- }
-
-
- /* parse a single Type 1 glyph */
- FT_LOCAL_DEF( FT_Error )
- t1_decoder_parse_glyph( T1_Decoder decoder,
- FT_UInt glyph )
- {
- return decoder->parse_callback( decoder, glyph );
- }
-
-
- /* initialize T1 decoder */
- FT_LOCAL_DEF( FT_Error )
- t1_decoder_init( T1_Decoder decoder,
- FT_Face face,
- FT_Size size,
- FT_GlyphSlot slot,
- FT_Byte** glyph_names,
- PS_Blend blend,
- FT_Bool hinting,
- FT_Render_Mode hint_mode,
- T1_Decoder_Callback parse_callback )
- {
- FT_ZERO( decoder );
-
- /* retrieve PSNames interface from list of current modules */
- {
- FT_Service_PsCMaps psnames;
-
-
- FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
- if ( !psnames )
- {
- FT_ERROR(( "t1_decoder_init:"
- " the `psnames' module is not available\n" ));
- return FT_THROW( Unimplemented_Feature );
- }
-
- decoder->psnames = psnames;
- }
-
- t1_builder_init( &decoder->builder, face, size, slot, hinting );
-
- /* decoder->buildchar and decoder->len_buildchar have to be */
- /* initialized by the caller since we cannot know the length */
- /* of the BuildCharArray */
-
- decoder->num_glyphs = (FT_UInt)face->num_glyphs;
- decoder->glyph_names = glyph_names;
- decoder->hint_mode = hint_mode;
- decoder->blend = blend;
- decoder->parse_callback = parse_callback;
-
- decoder->funcs = t1_decoder_funcs;
-
- return FT_Err_Ok;
- }
-
-
- /* finalize T1 decoder */
- FT_LOCAL_DEF( void )
- t1_decoder_done( T1_Decoder decoder )
- {
- t1_builder_done( &decoder->builder );
- }
-
-
-/* END */
diff --git a/src/psaux/t1decode.h b/src/psaux/t1decode.h
deleted file mode 100644
index 12c27de77..000000000
--- a/src/psaux/t1decode.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1decode.h */
-/* */
-/* PostScript Type 1 decoding routines (specification). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef T1DECODE_H_
-#define T1DECODE_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_INTERNAL_TYPE1_TYPES_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_CALLBACK_TABLE
- const T1_Decoder_FuncsRec t1_decoder_funcs;
-
-
- FT_LOCAL( FT_Error )
- t1_decoder_parse_glyph( T1_Decoder decoder,
- FT_UInt glyph_index );
-
- FT_LOCAL( FT_Error )
- t1_decoder_parse_charstrings( T1_Decoder decoder,
- FT_Byte* base,
- FT_UInt len );
-
- FT_LOCAL( FT_Error )
- t1_decoder_init( T1_Decoder decoder,
- FT_Face face,
- FT_Size size,
- FT_GlyphSlot slot,
- FT_Byte** glyph_names,
- PS_Blend blend,
- FT_Bool hinting,
- FT_Render_Mode hint_mode,
- T1_Decoder_Callback parse_glyph );
-
- FT_LOCAL( void )
- t1_decoder_done( T1_Decoder decoder );
-
-
-FT_END_HEADER
-
-#endif /* T1DECODE_H_ */
-
-
-/* END */
diff --git a/src/pshinter/Jamfile b/src/pshinter/Jamfile
deleted file mode 100644
index 2b65271cc..000000000
--- a/src/pshinter/Jamfile
+++ /dev/null
@@ -1,34 +0,0 @@
-# FreeType 2 src/pshinter Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) pshinter ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = pshalgo
- pshglob
- pshmod
- pshpic
- pshrec
- ;
- }
- else
- {
- _sources = pshinter ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/pshinter Jamfile
diff --git a/src/pshinter/module.mk b/src/pshinter/module.mk
deleted file mode 100644
index 77e35c4c1..000000000
--- a/src/pshinter/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 PSHinter module definition
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += PSHINTER_MODULE
-
-define PSHINTER_MODULE
-$(OPEN_DRIVER) FT_Module_Class, pshinter_module_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)pshinter $(ECHO_DRIVER_DESC)Postscript hinter module$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/pshinter/pshalgo.c b/src/pshinter/pshalgo.c
deleted file mode 100644
index 9ad1a3a02..000000000
--- a/src/pshinter/pshalgo.c
+++ /dev/null
@@ -1,2195 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshalgo.c */
-/* */
-/* PostScript hinting algorithm (body). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used */
-/* modified and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-#include "pshalgo.h"
-
-#include "pshnterr.h"
-
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_pshalgo2
-
-
-#ifdef DEBUG_HINTER
- PSH_Hint_Table ps_debug_hint_table = NULL;
- PSH_HintFunc ps_debug_hint_func = NULL;
- PSH_Glyph ps_debug_glyph = NULL;
-#endif
-
-
-#define COMPUTE_INFLEXS /* compute inflection points to optimize `S' */
- /* and similar glyphs */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** BASIC HINTS RECORDINGS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* return true if two stem hints overlap */
- static FT_Int
- psh_hint_overlap( PSH_Hint hint1,
- PSH_Hint hint2 )
- {
- return hint1->org_pos + hint1->org_len >= hint2->org_pos &&
- hint2->org_pos + hint2->org_len >= hint1->org_pos;
- }
-
-
- /* destroy hints table */
- static void
- psh_hint_table_done( PSH_Hint_Table table,
- FT_Memory memory )
- {
- FT_FREE( table->zones );
- table->num_zones = 0;
- table->zone = NULL;
-
- FT_FREE( table->sort );
- FT_FREE( table->hints );
- table->num_hints = 0;
- table->max_hints = 0;
- table->sort_global = NULL;
- }
-
-
- /* deactivate all hints in a table */
- static void
- psh_hint_table_deactivate( PSH_Hint_Table table )
- {
- FT_UInt count = table->max_hints;
- PSH_Hint hint = table->hints;
-
-
- for ( ; count > 0; count--, hint++ )
- {
- psh_hint_deactivate( hint );
- hint->order = -1;
- }
- }
-
-
- /* internal function to record a new hint */
- static void
- psh_hint_table_record( PSH_Hint_Table table,
- FT_UInt idx )
- {
- PSH_Hint hint = table->hints + idx;
-
-
- if ( idx >= table->max_hints )
- {
- FT_TRACE0(( "psh_hint_table_record: invalid hint index %d\n", idx ));
- return;
- }
-
- /* ignore active hints */
- if ( psh_hint_is_active( hint ) )
- return;
-
- psh_hint_activate( hint );
-
- /* now scan the current active hint set to check */
- /* whether `hint' overlaps with another hint */
- {
- PSH_Hint* sorted = table->sort_global;
- FT_UInt count = table->num_hints;
- PSH_Hint hint2;
-
-
- hint->parent = NULL;
- for ( ; count > 0; count--, sorted++ )
- {
- hint2 = sorted[0];
-
- if ( psh_hint_overlap( hint, hint2 ) )
- {
- hint->parent = hint2;
- break;
- }
- }
- }
-
- if ( table->num_hints < table->max_hints )
- table->sort_global[table->num_hints++] = hint;
- else
- FT_TRACE0(( "psh_hint_table_record: too many sorted hints! BUG!\n" ));
- }
-
-
- static void
- psh_hint_table_record_mask( PSH_Hint_Table table,
- PS_Mask hint_mask )
- {
- FT_Int mask = 0, val = 0;
- FT_Byte* cursor = hint_mask->bytes;
- FT_UInt idx, limit;
-
-
- limit = hint_mask->num_bits;
-
- for ( idx = 0; idx < limit; idx++ )
- {
- if ( mask == 0 )
- {
- val = *cursor++;
- mask = 0x80;
- }
-
- if ( val & mask )
- psh_hint_table_record( table, idx );
-
- mask >>= 1;
- }
- }
-
-
- /* create hints table */
- static FT_Error
- psh_hint_table_init( PSH_Hint_Table table,
- PS_Hint_Table hints,
- PS_Mask_Table hint_masks,
- PS_Mask_Table counter_masks,
- FT_Memory memory )
- {
- FT_UInt count;
- FT_Error error;
-
- FT_UNUSED( counter_masks );
-
-
- count = hints->num_hints;
-
- /* allocate our tables */
- if ( FT_NEW_ARRAY( table->sort, 2 * count ) ||
- FT_NEW_ARRAY( table->hints, count ) ||
- FT_NEW_ARRAY( table->zones, 2 * count + 1 ) )
- goto Exit;
-
- table->max_hints = count;
- table->sort_global = table->sort + count;
- table->num_hints = 0;
- table->num_zones = 0;
- table->zone = NULL;
-
- /* initialize the `table->hints' array */
- {
- PSH_Hint write = table->hints;
- PS_Hint read = hints->hints;
-
-
- for ( ; count > 0; count--, write++, read++ )
- {
- write->org_pos = read->pos;
- write->org_len = read->len;
- write->flags = read->flags;
- }
- }
-
- /* we now need to determine the initial `parent' stems; first */
- /* activate the hints that are given by the initial hint masks */
- if ( hint_masks )
- {
- PS_Mask mask = hint_masks->masks;
-
-
- count = hint_masks->num_masks;
- table->hint_masks = hint_masks;
-
- for ( ; count > 0; count--, mask++ )
- psh_hint_table_record_mask( table, mask );
- }
-
- /* finally, do a linear parse in case some hints were left alone */
- if ( table->num_hints != table->max_hints )
- {
- FT_UInt idx;
-
-
- FT_TRACE0(( "psh_hint_table_init: missing/incorrect hint masks\n" ));
-
- count = table->max_hints;
- for ( idx = 0; idx < count; idx++ )
- psh_hint_table_record( table, idx );
- }
-
- Exit:
- return error;
- }
-
-
- static void
- psh_hint_table_activate_mask( PSH_Hint_Table table,
- PS_Mask hint_mask )
- {
- FT_Int mask = 0, val = 0;
- FT_Byte* cursor = hint_mask->bytes;
- FT_UInt idx, limit, count;
-
-
- limit = hint_mask->num_bits;
- count = 0;
-
- psh_hint_table_deactivate( table );
-
- for ( idx = 0; idx < limit; idx++ )
- {
- if ( mask == 0 )
- {
- val = *cursor++;
- mask = 0x80;
- }
-
- if ( val & mask )
- {
- PSH_Hint hint = &table->hints[idx];
-
-
- if ( !psh_hint_is_active( hint ) )
- {
- FT_UInt count2;
-
-#if 0
- PSH_Hint* sort = table->sort;
- PSH_Hint hint2;
-
-
- for ( count2 = count; count2 > 0; count2--, sort++ )
- {
- hint2 = sort[0];
- if ( psh_hint_overlap( hint, hint2 ) )
- FT_TRACE0(( "psh_hint_table_activate_mask:"
- " found overlapping hints\n" ))
- }
-#else
- count2 = 0;
-#endif
-
- if ( count2 == 0 )
- {
- psh_hint_activate( hint );
- if ( count < table->max_hints )
- table->sort[count++] = hint;
- else
- FT_TRACE0(( "psh_hint_tableactivate_mask:"
- " too many active hints\n" ));
- }
- }
- }
-
- mask >>= 1;
- }
- table->num_hints = count;
-
- /* now, sort the hints; they are guaranteed to not overlap */
- /* so we can compare their "org_pos" field directly */
- {
- FT_Int i1, i2;
- PSH_Hint hint1, hint2;
- PSH_Hint* sort = table->sort;
-
-
- /* a simple bubble sort will do, since in 99% of cases, the hints */
- /* will be already sorted -- and the sort will be linear */
- for ( i1 = 1; i1 < (FT_Int)count; i1++ )
- {
- hint1 = sort[i1];
- for ( i2 = i1 - 1; i2 >= 0; i2-- )
- {
- hint2 = sort[i2];
-
- if ( hint2->org_pos < hint1->org_pos )
- break;
-
- sort[i2 + 1] = hint2;
- sort[i2] = hint1;
- }
- }
- }
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** HINTS GRID-FITTING AND OPTIMIZATION *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#if 1
- static FT_Pos
- psh_dimension_quantize_len( PSH_Dimension dim,
- FT_Pos len,
- FT_Bool do_snapping )
- {
- if ( len <= 64 )
- len = 64;
- else
- {
- FT_Pos delta = len - dim->stdw.widths[0].cur;
-
-
- if ( delta < 0 )
- delta = -delta;
-
- if ( delta < 40 )
- {
- len = dim->stdw.widths[0].cur;
- if ( len < 48 )
- len = 48;
- }
-
- if ( len < 3 * 64 )
- {
- delta = ( len & 63 );
- len &= -64;
-
- if ( delta < 10 )
- len += delta;
-
- else if ( delta < 32 )
- len += 10;
-
- else if ( delta < 54 )
- len += 54;
-
- else
- len += delta;
- }
- else
- len = FT_PIX_ROUND( len );
- }
-
- if ( do_snapping )
- len = FT_PIX_ROUND( len );
-
- return len;
- }
-#endif /* 0 */
-
-
-#ifdef DEBUG_HINTER
-
- static void
- ps_simple_scale( PSH_Hint_Table table,
- FT_Fixed scale,
- FT_Fixed delta,
- FT_Int dimension )
- {
- FT_UInt count;
-
-
- for ( count = 0; count < table->max_hints; count++ )
- {
- PSH_Hint hint = table->hints + count;
-
-
- hint->cur_pos = FT_MulFix( hint->org_pos, scale ) + delta;
- hint->cur_len = FT_MulFix( hint->org_len, scale );
-
- if ( ps_debug_hint_func )
- ps_debug_hint_func( hint, dimension );
- }
- }
-
-#endif /* DEBUG_HINTER */
-
-
- static FT_Fixed
- psh_hint_snap_stem_side_delta( FT_Fixed pos,
- FT_Fixed len )
- {
- FT_Fixed delta1 = FT_PIX_ROUND( pos ) - pos;
- FT_Fixed delta2 = FT_PIX_ROUND( pos + len ) - pos - len;
-
-
- if ( FT_ABS( delta1 ) <= FT_ABS( delta2 ) )
- return delta1;
- else
- return delta2;
- }
-
-
- static void
- psh_hint_align( PSH_Hint hint,
- PSH_Globals globals,
- FT_Int dimension,
- PSH_Glyph glyph )
- {
- PSH_Dimension dim = &globals->dimension[dimension];
- FT_Fixed scale = dim->scale_mult;
- FT_Fixed delta = dim->scale_delta;
-
-
- if ( !psh_hint_is_fitted( hint ) )
- {
- FT_Pos pos = FT_MulFix( hint->org_pos, scale ) + delta;
- FT_Pos len = FT_MulFix( hint->org_len, scale );
-
- FT_Int do_snapping;
- FT_Pos fit_len;
- PSH_AlignmentRec align;
-
-
- /* ignore stem alignments when requested through the hint flags */
- if ( ( dimension == 0 && !glyph->do_horz_hints ) ||
- ( dimension == 1 && !glyph->do_vert_hints ) )
- {
- hint->cur_pos = pos;
- hint->cur_len = len;
-
- psh_hint_set_fitted( hint );
- return;
- }
-
- /* perform stem snapping when requested - this is necessary
- * for monochrome and LCD hinting modes only
- */
- do_snapping = ( dimension == 0 && glyph->do_horz_snapping ) ||
- ( dimension == 1 && glyph->do_vert_snapping );
-
- hint->cur_len = fit_len = len;
-
- /* check blue zones for horizontal stems */
- align.align = PSH_BLUE_ALIGN_NONE;
- align.align_bot = align.align_top = 0;
-
- if ( dimension == 1 )
- psh_blues_snap_stem( &globals->blues,
- hint->org_pos + hint->org_len,
- hint->org_pos,
- &align );
-
- switch ( align.align )
- {
- case PSH_BLUE_ALIGN_TOP:
- /* the top of the stem is aligned against a blue zone */
- hint->cur_pos = align.align_top - fit_len;
- break;
-
- case PSH_BLUE_ALIGN_BOT:
- /* the bottom of the stem is aligned against a blue zone */
- hint->cur_pos = align.align_bot;
- break;
-
- case PSH_BLUE_ALIGN_TOP | PSH_BLUE_ALIGN_BOT:
- /* both edges of the stem are aligned against blue zones */
- hint->cur_pos = align.align_bot;
- hint->cur_len = align.align_top - align.align_bot;
- break;
-
- default:
- {
- PSH_Hint parent = hint->parent;
-
-
- if ( parent )
- {
- FT_Pos par_org_center, par_cur_center;
- FT_Pos cur_org_center, cur_delta;
-
-
- /* ensure that parent is already fitted */
- if ( !psh_hint_is_fitted( parent ) )
- psh_hint_align( parent, globals, dimension, glyph );
-
- /* keep original relation between hints, this is, use the */
- /* scaled distance between the centers of the hints to */
- /* compute the new position */
- par_org_center = parent->org_pos + ( parent->org_len >> 1 );
- par_cur_center = parent->cur_pos + ( parent->cur_len >> 1 );
- cur_org_center = hint->org_pos + ( hint->org_len >> 1 );
-
- cur_delta = FT_MulFix( cur_org_center - par_org_center, scale );
- pos = par_cur_center + cur_delta - ( len >> 1 );
- }
-
- hint->cur_pos = pos;
- hint->cur_len = fit_len;
-
- /* Stem adjustment tries to snap stem widths to standard
- * ones. This is important to prevent unpleasant rounding
- * artefacts.
- */
- if ( glyph->do_stem_adjust )
- {
- if ( len <= 64 )
- {
- /* the stem is less than one pixel; we will center it
- * around the nearest pixel center
- */
- if ( len >= 32 )
- {
- /* This is a special case where we also widen the stem
- * and align it to the pixel grid.
- *
- * stem_center = pos + (len/2)
- * nearest_pixel_center = FT_ROUND(stem_center-32)+32
- * new_pos = nearest_pixel_center-32
- * = FT_ROUND(stem_center-32)
- * = FT_FLOOR(stem_center-32+32)
- * = FT_FLOOR(stem_center)
- * new_len = 64
- */
- pos = FT_PIX_FLOOR( pos + ( len >> 1 ) );
- len = 64;
- }
- else if ( len > 0 )
- {
- /* This is a very small stem; we simply align it to the
- * pixel grid, trying to find the minimum displacement.
- *
- * left = pos
- * right = pos + len
- * left_nearest_edge = ROUND(pos)
- * right_nearest_edge = ROUND(right)
- *
- * if ( ABS(left_nearest_edge - left) <=
- * ABS(right_nearest_edge - right) )
- * new_pos = left
- * else
- * new_pos = right
- */
- FT_Pos left_nearest = FT_PIX_ROUND( pos );
- FT_Pos right_nearest = FT_PIX_ROUND( pos + len );
- FT_Pos left_disp = left_nearest - pos;
- FT_Pos right_disp = right_nearest - ( pos + len );
-
-
- if ( left_disp < 0 )
- left_disp = -left_disp;
- if ( right_disp < 0 )
- right_disp = -right_disp;
- if ( left_disp <= right_disp )
- pos = left_nearest;
- else
- pos = right_nearest;
- }
- else
- {
- /* this is a ghost stem; we simply round it */
- pos = FT_PIX_ROUND( pos );
- }
- }
- else
- {
- len = psh_dimension_quantize_len( dim, len, 0 );
- }
- }
-
- /* now that we have a good hinted stem width, try to position */
- /* the stem along a pixel grid integer coordinate */
- hint->cur_pos = pos + psh_hint_snap_stem_side_delta( pos, len );
- hint->cur_len = len;
- }
- }
-
- if ( do_snapping )
- {
- pos = hint->cur_pos;
- len = hint->cur_len;
-
- if ( len < 64 )
- len = 64;
- else
- len = FT_PIX_ROUND( len );
-
- switch ( align.align )
- {
- case PSH_BLUE_ALIGN_TOP:
- hint->cur_pos = align.align_top - len;
- hint->cur_len = len;
- break;
-
- case PSH_BLUE_ALIGN_BOT:
- hint->cur_len = len;
- break;
-
- case PSH_BLUE_ALIGN_BOT | PSH_BLUE_ALIGN_TOP:
- /* don't touch */
- break;
-
-
- default:
- hint->cur_len = len;
- if ( len & 64 )
- pos = FT_PIX_FLOOR( pos + ( len >> 1 ) ) + 32;
- else
- pos = FT_PIX_ROUND( pos + ( len >> 1 ) );
-
- hint->cur_pos = pos - ( len >> 1 );
- hint->cur_len = len;
- }
- }
-
- psh_hint_set_fitted( hint );
-
-#ifdef DEBUG_HINTER
- if ( ps_debug_hint_func )
- ps_debug_hint_func( hint, dimension );
-#endif
- }
- }
-
-
-#if 0 /* not used for now, experimental */
-
- /*
- * A variant to perform "light" hinting (i.e. FT_RENDER_MODE_LIGHT)
- * of stems
- */
- static void
- psh_hint_align_light( PSH_Hint hint,
- PSH_Globals globals,
- FT_Int dimension,
- PSH_Glyph glyph )
- {
- PSH_Dimension dim = &globals->dimension[dimension];
- FT_Fixed scale = dim->scale_mult;
- FT_Fixed delta = dim->scale_delta;
-
-
- if ( !psh_hint_is_fitted( hint ) )
- {
- FT_Pos pos = FT_MulFix( hint->org_pos, scale ) + delta;
- FT_Pos len = FT_MulFix( hint->org_len, scale );
-
- FT_Pos fit_len;
-
- PSH_AlignmentRec align;
-
-
- /* ignore stem alignments when requested through the hint flags */
- if ( ( dimension == 0 && !glyph->do_horz_hints ) ||
- ( dimension == 1 && !glyph->do_vert_hints ) )
- {
- hint->cur_pos = pos;
- hint->cur_len = len;
-
- psh_hint_set_fitted( hint );
- return;
- }
-
- fit_len = len;
-
- hint->cur_len = fit_len;
-
- /* check blue zones for horizontal stems */
- align.align = PSH_BLUE_ALIGN_NONE;
- align.align_bot = align.align_top = 0;
-
- if ( dimension == 1 )
- psh_blues_snap_stem( &globals->blues,
- hint->org_pos + hint->org_len,
- hint->org_pos,
- &align );
-
- switch ( align.align )
- {
- case PSH_BLUE_ALIGN_TOP:
- /* the top of the stem is aligned against a blue zone */
- hint->cur_pos = align.align_top - fit_len;
- break;
-
- case PSH_BLUE_ALIGN_BOT:
- /* the bottom of the stem is aligned against a blue zone */
- hint->cur_pos = align.align_bot;
- break;
-
- case PSH_BLUE_ALIGN_TOP | PSH_BLUE_ALIGN_BOT:
- /* both edges of the stem are aligned against blue zones */
- hint->cur_pos = align.align_bot;
- hint->cur_len = align.align_top - align.align_bot;
- break;
-
- default:
- {
- PSH_Hint parent = hint->parent;
-
-
- if ( parent )
- {
- FT_Pos par_org_center, par_cur_center;
- FT_Pos cur_org_center, cur_delta;
-
-
- /* ensure that parent is already fitted */
- if ( !psh_hint_is_fitted( parent ) )
- psh_hint_align_light( parent, globals, dimension, glyph );
-
- par_org_center = parent->org_pos + ( parent->org_len / 2 );
- par_cur_center = parent->cur_pos + ( parent->cur_len / 2 );
- cur_org_center = hint->org_pos + ( hint->org_len / 2 );
-
- cur_delta = FT_MulFix( cur_org_center - par_org_center, scale );
- pos = par_cur_center + cur_delta - ( len >> 1 );
- }
-
- /* Stems less than one pixel wide are easy -- we want to
- * make them as dark as possible, so they must fall within
- * one pixel. If the stem is split between two pixels
- * then snap the edge that is nearer to the pixel boundary
- * to the pixel boundary.
- */
- if ( len <= 64 )
- {
- if ( ( pos + len + 63 ) / 64 != pos / 64 + 1 )
- pos += psh_hint_snap_stem_side_delta ( pos, len );
- }
-
- /* Position stems other to minimize the amount of mid-grays.
- * There are, in general, two positions that do this,
- * illustrated as A) and B) below.
- *
- * + + + +
- *
- * A) |--------------------------------|
- * B) |--------------------------------|
- * C) |--------------------------------|
- *
- * Position A) (split the excess stem equally) should be better
- * for stems of width N + f where f < 0.5.
- *
- * Position B) (split the deficiency equally) should be better
- * for stems of width N + f where f > 0.5.
- *
- * It turns out though that minimizing the total number of lit
- * pixels is also important, so position C), with one edge
- * aligned with a pixel boundary is actually preferable
- * to A). There are also more possible positions for C) than
- * for A) or B), so it involves less distortion of the overall
- * character shape.
- */
- else /* len > 64 */
- {
- FT_Fixed frac_len = len & 63;
- FT_Fixed center = pos + ( len >> 1 );
- FT_Fixed delta_a, delta_b;
-
-
- if ( ( len / 64 ) & 1 )
- {
- delta_a = FT_PIX_FLOOR( center ) + 32 - center;
- delta_b = FT_PIX_ROUND( center ) - center;
- }
- else
- {
- delta_a = FT_PIX_ROUND( center ) - center;
- delta_b = FT_PIX_FLOOR( center ) + 32 - center;
- }
-
- /* We choose between B) and C) above based on the amount
- * of fractional stem width; for small amounts, choose
- * C) always, for large amounts, B) always, and inbetween,
- * pick whichever one involves less stem movement.
- */
- if ( frac_len < 32 )
- {
- pos += psh_hint_snap_stem_side_delta ( pos, len );
- }
- else if ( frac_len < 48 )
- {
- FT_Fixed side_delta = psh_hint_snap_stem_side_delta ( pos,
- len );
-
- if ( FT_ABS( side_delta ) < FT_ABS( delta_b ) )
- pos += side_delta;
- else
- pos += delta_b;
- }
- else
- {
- pos += delta_b;
- }
- }
-
- hint->cur_pos = pos;
- }
- } /* switch */
-
- psh_hint_set_fitted( hint );
-
-#ifdef DEBUG_HINTER
- if ( ps_debug_hint_func )
- ps_debug_hint_func( hint, dimension );
-#endif
- }
- }
-
-#endif /* 0 */
-
-
- static void
- psh_hint_table_align_hints( PSH_Hint_Table table,
- PSH_Globals globals,
- FT_Int dimension,
- PSH_Glyph glyph )
- {
- PSH_Hint hint;
- FT_UInt count;
-
-#ifdef DEBUG_HINTER
-
- PSH_Dimension dim = &globals->dimension[dimension];
- FT_Fixed scale = dim->scale_mult;
- FT_Fixed delta = dim->scale_delta;
-
-
- if ( ps_debug_no_vert_hints && dimension == 0 )
- {
- ps_simple_scale( table, scale, delta, dimension );
- return;
- }
-
- if ( ps_debug_no_horz_hints && dimension == 1 )
- {
- ps_simple_scale( table, scale, delta, dimension );
- return;
- }
-
-#endif /* DEBUG_HINTER*/
-
- hint = table->hints;
- count = table->max_hints;
-
- for ( ; count > 0; count--, hint++ )
- psh_hint_align( hint, globals, dimension, glyph );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** POINTS INTERPOLATION ROUTINES *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define xxDEBUG_ZONES
-
-
-#ifdef DEBUG_ZONES
-
-#include FT_CONFIG_STANDARD_LIBRARY_H
-
- static void
- psh_print_zone( PSH_Zone zone )
- {
- printf( "zone [scale,delta,min,max] = [%.5f,%.2f,%d,%d]\n",
- zone->scale / 65536.0,
- zone->delta / 64.0,
- zone->min,
- zone->max );
- }
-
-#endif /* DEBUG_ZONES */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** HINTER GLYPH MANAGEMENT *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define psh_corner_is_flat ft_corner_is_flat
-#define psh_corner_orientation ft_corner_orientation
-
-
-#ifdef COMPUTE_INFLEXS
-
- /* compute all inflex points in a given glyph */
- static void
- psh_glyph_compute_inflections( PSH_Glyph glyph )
- {
- FT_UInt n;
-
-
- for ( n = 0; n < glyph->num_contours; n++ )
- {
- PSH_Point first, start, end, before, after;
- FT_Pos in_x, in_y, out_x, out_y;
- FT_Int orient_prev, orient_cur;
- FT_Int finished = 0;
-
-
- /* we need at least 4 points to create an inflection point */
- if ( glyph->contours[n].count < 4 )
- continue;
-
- /* compute first segment in contour */
- first = glyph->contours[n].start;
-
- start = end = first;
- do
- {
- end = end->next;
- if ( end == first )
- goto Skip;
-
- in_x = end->org_u - start->org_u;
- in_y = end->org_v - start->org_v;
-
- } while ( in_x == 0 && in_y == 0 );
-
- /* extend the segment start whenever possible */
- before = start;
- do
- {
- do
- {
- start = before;
- before = before->prev;
- if ( before == first )
- goto Skip;
-
- out_x = start->org_u - before->org_u;
- out_y = start->org_v - before->org_v;
-
- } while ( out_x == 0 && out_y == 0 );
-
- orient_prev = psh_corner_orientation( in_x, in_y, out_x, out_y );
-
- } while ( orient_prev == 0 );
-
- first = start;
- in_x = out_x;
- in_y = out_y;
-
- /* now, process all segments in the contour */
- do
- {
- /* first, extend current segment's end whenever possible */
- after = end;
- do
- {
- do
- {
- end = after;
- after = after->next;
- if ( after == first )
- finished = 1;
-
- out_x = after->org_u - end->org_u;
- out_y = after->org_v - end->org_v;
-
- } while ( out_x == 0 && out_y == 0 );
-
- orient_cur = psh_corner_orientation( in_x, in_y, out_x, out_y );
-
- } while ( orient_cur == 0 );
-
- if ( ( orient_cur ^ orient_prev ) < 0 )
- {
- do
- {
- psh_point_set_inflex( start );
- start = start->next;
- }
- while ( start != end );
-
- psh_point_set_inflex( start );
- }
-
- start = end;
- end = after;
- orient_prev = orient_cur;
- in_x = out_x;
- in_y = out_y;
-
- } while ( !finished );
-
- Skip:
- ;
- }
- }
-
-#endif /* COMPUTE_INFLEXS */
-
-
- static void
- psh_glyph_done( PSH_Glyph glyph )
- {
- FT_Memory memory = glyph->memory;
-
-
- psh_hint_table_done( &glyph->hint_tables[1], memory );
- psh_hint_table_done( &glyph->hint_tables[0], memory );
-
- FT_FREE( glyph->points );
- FT_FREE( glyph->contours );
-
- glyph->num_points = 0;
- glyph->num_contours = 0;
-
- glyph->memory = NULL;
- }
-
-
- static int
- psh_compute_dir( FT_Pos dx,
- FT_Pos dy )
- {
- FT_Pos ax, ay;
- int result = PSH_DIR_NONE;
-
-
- ax = FT_ABS( dx );
- ay = FT_ABS( dy );
-
- if ( ay * 12 < ax )
- {
- /* |dy| <<< |dx| means a near-horizontal segment */
- result = ( dx >= 0 ) ? PSH_DIR_RIGHT : PSH_DIR_LEFT;
- }
- else if ( ax * 12 < ay )
- {
- /* |dx| <<< |dy| means a near-vertical segment */
- result = ( dy >= 0 ) ? PSH_DIR_UP : PSH_DIR_DOWN;
- }
-
- return result;
- }
-
-
- /* load outline point coordinates into hinter glyph */
- static void
- psh_glyph_load_points( PSH_Glyph glyph,
- FT_Int dimension )
- {
- FT_Vector* vec = glyph->outline->points;
- PSH_Point point = glyph->points;
- FT_UInt count = glyph->num_points;
-
-
- for ( ; count > 0; count--, point++, vec++ )
- {
- point->flags2 = 0;
- point->hint = NULL;
- if ( dimension == 0 )
- {
- point->org_u = vec->x;
- point->org_v = vec->y;
- }
- else
- {
- point->org_u = vec->y;
- point->org_v = vec->x;
- }
-
-#ifdef DEBUG_HINTER
- point->org_x = vec->x;
- point->org_y = vec->y;
-#endif
-
- }
- }
-
-
- /* save hinted point coordinates back to outline */
- static void
- psh_glyph_save_points( PSH_Glyph glyph,
- FT_Int dimension )
- {
- FT_UInt n;
- PSH_Point point = glyph->points;
- FT_Vector* vec = glyph->outline->points;
- char* tags = glyph->outline->tags;
-
-
- for ( n = 0; n < glyph->num_points; n++ )
- {
- if ( dimension == 0 )
- vec[n].x = point->cur_u;
- else
- vec[n].y = point->cur_u;
-
- if ( psh_point_is_strong( point ) )
- tags[n] |= (char)( ( dimension == 0 ) ? 32 : 64 );
-
-#ifdef DEBUG_HINTER
-
- if ( dimension == 0 )
- {
- point->cur_x = point->cur_u;
- point->flags_x = point->flags2 | point->flags;
- }
- else
- {
- point->cur_y = point->cur_u;
- point->flags_y = point->flags2 | point->flags;
- }
-
-#endif
-
- point++;
- }
- }
-
-
- static FT_Error
- psh_glyph_init( PSH_Glyph glyph,
- FT_Outline* outline,
- PS_Hints ps_hints,
- PSH_Globals globals )
- {
- FT_Error error;
- FT_Memory memory;
-
-
- /* clear all fields */
- FT_ZERO( glyph );
-
- memory = glyph->memory = globals->memory;
-
- /* allocate and setup points + contours arrays */
- if ( FT_NEW_ARRAY( glyph->points, outline->n_points ) ||
- FT_NEW_ARRAY( glyph->contours, outline->n_contours ) )
- goto Exit;
-
- glyph->num_points = (FT_UInt)outline->n_points;
- glyph->num_contours = (FT_UInt)outline->n_contours;
-
- {
- FT_UInt first = 0, next, n;
- PSH_Point points = glyph->points;
- PSH_Contour contour = glyph->contours;
-
-
- for ( n = 0; n < glyph->num_contours; n++ )
- {
- FT_UInt count;
- PSH_Point point;
-
-
- next = (FT_UInt)outline->contours[n] + 1;
- count = next - first;
-
- contour->start = points + first;
- contour->count = count;
-
- if ( count > 0 )
- {
- point = points + first;
-
- point->prev = points + next - 1;
- point->contour = contour;
-
- for ( ; count > 1; count-- )
- {
- point[0].next = point + 1;
- point[1].prev = point;
- point++;
- point->contour = contour;
- }
- point->next = points + first;
- }
-
- contour++;
- first = next;
- }
- }
-
- {
- PSH_Point points = glyph->points;
- PSH_Point point = points;
- FT_Vector* vec = outline->points;
- FT_UInt n;
-
-
- for ( n = 0; n < glyph->num_points; n++, point++ )
- {
- FT_Int n_prev = (FT_Int)( point->prev - points );
- FT_Int n_next = (FT_Int)( point->next - points );
- FT_Pos dxi, dyi, dxo, dyo;
-
-
- if ( !( outline->tags[n] & FT_CURVE_TAG_ON ) )
- point->flags = PSH_POINT_OFF;
-
- dxi = vec[n].x - vec[n_prev].x;
- dyi = vec[n].y - vec[n_prev].y;
-
- point->dir_in = (FT_Char)psh_compute_dir( dxi, dyi );
-
- dxo = vec[n_next].x - vec[n].x;
- dyo = vec[n_next].y - vec[n].y;
-
- point->dir_out = (FT_Char)psh_compute_dir( dxo, dyo );
-
- /* detect smooth points */
- if ( point->flags & PSH_POINT_OFF )
- point->flags |= PSH_POINT_SMOOTH;
-
- else if ( point->dir_in == point->dir_out )
- {
- if ( point->dir_out != PSH_DIR_NONE ||
- psh_corner_is_flat( dxi, dyi, dxo, dyo ) )
- point->flags |= PSH_POINT_SMOOTH;
- }
- }
- }
-
- glyph->outline = outline;
- glyph->globals = globals;
-
-#ifdef COMPUTE_INFLEXS
- psh_glyph_load_points( glyph, 0 );
- psh_glyph_compute_inflections( glyph );
-#endif /* COMPUTE_INFLEXS */
-
- /* now deal with hints tables */
- error = psh_hint_table_init( &glyph->hint_tables [0],
- &ps_hints->dimension[0].hints,
- &ps_hints->dimension[0].masks,
- &ps_hints->dimension[0].counters,
- memory );
- if ( error )
- goto Exit;
-
- error = psh_hint_table_init( &glyph->hint_tables [1],
- &ps_hints->dimension[1].hints,
- &ps_hints->dimension[1].masks,
- &ps_hints->dimension[1].counters,
- memory );
- if ( error )
- goto Exit;
-
- Exit:
- return error;
- }
-
-
- /* compute all extrema in a glyph for a given dimension */
- static void
- psh_glyph_compute_extrema( PSH_Glyph glyph )
- {
- FT_UInt n;
-
-
- /* first of all, compute all local extrema */
- for ( n = 0; n < glyph->num_contours; n++ )
- {
- PSH_Point first = glyph->contours[n].start;
- PSH_Point point, before, after;
-
-
- if ( glyph->contours[n].count == 0 )
- continue;
-
- point = first;
- before = point;
-
- do
- {
- before = before->prev;
- if ( before == first )
- goto Skip;
-
- } while ( before->org_u == point->org_u );
-
- first = point = before->next;
-
- for (;;)
- {
- after = point;
- do
- {
- after = after->next;
- if ( after == first )
- goto Next;
-
- } while ( after->org_u == point->org_u );
-
- if ( before->org_u < point->org_u )
- {
- if ( after->org_u < point->org_u )
- {
- /* local maximum */
- goto Extremum;
- }
- }
- else /* before->org_u > point->org_u */
- {
- if ( after->org_u > point->org_u )
- {
- /* local minimum */
- Extremum:
- do
- {
- psh_point_set_extremum( point );
- point = point->next;
-
- } while ( point != after );
- }
- }
-
- before = after->prev;
- point = after;
-
- } /* for */
-
- Next:
- ;
- }
-
- /* for each extremum, determine its direction along the */
- /* orthogonal axis */
- for ( n = 0; n < glyph->num_points; n++ )
- {
- PSH_Point point, before, after;
-
-
- point = &glyph->points[n];
- before = point;
- after = point;
-
- if ( psh_point_is_extremum( point ) )
- {
- do
- {
- before = before->prev;
- if ( before == point )
- goto Skip;
-
- } while ( before->org_v == point->org_v );
-
- do
- {
- after = after->next;
- if ( after == point )
- goto Skip;
-
- } while ( after->org_v == point->org_v );
- }
-
- if ( before->org_v < point->org_v &&
- after->org_v > point->org_v )
- {
- psh_point_set_positive( point );
- }
- else if ( before->org_v > point->org_v &&
- after->org_v < point->org_v )
- {
- psh_point_set_negative( point );
- }
-
- Skip:
- ;
- }
- }
-
-
- /* major_dir is the direction for points on the bottom/left of the stem; */
- /* Points on the top/right of the stem will have a direction of */
- /* -major_dir. */
-
- static void
- psh_hint_table_find_strong_points( PSH_Hint_Table table,
- PSH_Point point,
- FT_UInt count,
- FT_Int threshold,
- FT_Int major_dir )
- {
- PSH_Hint* sort = table->sort;
- FT_UInt num_hints = table->num_hints;
-
-
- for ( ; count > 0; count--, point++ )
- {
- FT_Int point_dir = 0;
- FT_Pos org_u = point->org_u;
-
-
- if ( psh_point_is_strong( point ) )
- continue;
-
- if ( PSH_DIR_COMPARE( point->dir_in, major_dir ) )
- point_dir = point->dir_in;
-
- else if ( PSH_DIR_COMPARE( point->dir_out, major_dir ) )
- point_dir = point->dir_out;
-
- if ( point_dir )
- {
- if ( point_dir == major_dir )
- {
- FT_UInt nn;
-
-
- for ( nn = 0; nn < num_hints; nn++ )
- {
- PSH_Hint hint = sort[nn];
- FT_Pos d = org_u - hint->org_pos;
-
-
- if ( d < threshold && -d < threshold )
- {
- psh_point_set_strong( point );
- point->flags2 |= PSH_POINT_EDGE_MIN;
- point->hint = hint;
- break;
- }
- }
- }
- else if ( point_dir == -major_dir )
- {
- FT_UInt nn;
-
-
- for ( nn = 0; nn < num_hints; nn++ )
- {
- PSH_Hint hint = sort[nn];
- FT_Pos d = org_u - hint->org_pos - hint->org_len;
-
-
- if ( d < threshold && -d < threshold )
- {
- psh_point_set_strong( point );
- point->flags2 |= PSH_POINT_EDGE_MAX;
- point->hint = hint;
- break;
- }
- }
- }
- }
-
-#if 1
- else if ( psh_point_is_extremum( point ) )
- {
- /* treat extrema as special cases for stem edge alignment */
- FT_UInt nn, min_flag, max_flag;
-
-
- if ( major_dir == PSH_DIR_HORIZONTAL )
- {
- min_flag = PSH_POINT_POSITIVE;
- max_flag = PSH_POINT_NEGATIVE;
- }
- else
- {
- min_flag = PSH_POINT_NEGATIVE;
- max_flag = PSH_POINT_POSITIVE;
- }
-
- if ( point->flags2 & min_flag )
- {
- for ( nn = 0; nn < num_hints; nn++ )
- {
- PSH_Hint hint = sort[nn];
- FT_Pos d = org_u - hint->org_pos;
-
-
- if ( d < threshold && -d < threshold )
- {
- point->flags2 |= PSH_POINT_EDGE_MIN;
- point->hint = hint;
- psh_point_set_strong( point );
- break;
- }
- }
- }
- else if ( point->flags2 & max_flag )
- {
- for ( nn = 0; nn < num_hints; nn++ )
- {
- PSH_Hint hint = sort[nn];
- FT_Pos d = org_u - hint->org_pos - hint->org_len;
-
-
- if ( d < threshold && -d < threshold )
- {
- point->flags2 |= PSH_POINT_EDGE_MAX;
- point->hint = hint;
- psh_point_set_strong( point );
- break;
- }
- }
- }
-
- if ( !point->hint )
- {
- for ( nn = 0; nn < num_hints; nn++ )
- {
- PSH_Hint hint = sort[nn];
-
-
- if ( org_u >= hint->org_pos &&
- org_u <= hint->org_pos + hint->org_len )
- {
- point->hint = hint;
- break;
- }
- }
- }
- }
-
-#endif /* 1 */
- }
- }
-
-
- /* the accepted shift for strong points in fractional pixels */
-#define PSH_STRONG_THRESHOLD 32
-
- /* the maximum shift value in font units */
-#define PSH_STRONG_THRESHOLD_MAXIMUM 30
-
-
- /* find strong points in a glyph */
- static void
- psh_glyph_find_strong_points( PSH_Glyph glyph,
- FT_Int dimension )
- {
- /* a point is `strong' if it is located on a stem edge and */
- /* has an `in' or `out' tangent parallel to the hint's direction */
-
- PSH_Hint_Table table = &glyph->hint_tables[dimension];
- PS_Mask mask = table->hint_masks->masks;
- FT_UInt num_masks = table->hint_masks->num_masks;
- FT_UInt first = 0;
- FT_Int major_dir = ( dimension == 0 ) ? PSH_DIR_VERTICAL
- : PSH_DIR_HORIZONTAL;
- PSH_Dimension dim = &glyph->globals->dimension[dimension];
- FT_Fixed scale = dim->scale_mult;
- FT_Int threshold;
-
-
- threshold = (FT_Int)FT_DivFix( PSH_STRONG_THRESHOLD, scale );
- if ( threshold > PSH_STRONG_THRESHOLD_MAXIMUM )
- threshold = PSH_STRONG_THRESHOLD_MAXIMUM;
-
- /* process secondary hints to `selected' points */
- if ( num_masks > 1 && glyph->num_points > 0 )
- {
- /* the `endchar' op can reduce the number of points */
- first = mask->end_point > glyph->num_points
- ? glyph->num_points
- : mask->end_point;
- mask++;
- for ( ; num_masks > 1; num_masks--, mask++ )
- {
- FT_UInt next = FT_MIN( mask->end_point, glyph->num_points );
-
-
- if ( next > first )
- {
- FT_UInt count = next - first;
- PSH_Point point = glyph->points + first;
-
-
- psh_hint_table_activate_mask( table, mask );
-
- psh_hint_table_find_strong_points( table, point, count,
- threshold, major_dir );
- }
- first = next;
- }
- }
-
- /* process primary hints for all points */
- if ( num_masks == 1 )
- {
- FT_UInt count = glyph->num_points;
- PSH_Point point = glyph->points;
-
-
- psh_hint_table_activate_mask( table, table->hint_masks->masks );
-
- psh_hint_table_find_strong_points( table, point, count,
- threshold, major_dir );
- }
-
- /* now, certain points may have been attached to a hint and */
- /* not marked as strong; update their flags then */
- {
- FT_UInt count = glyph->num_points;
- PSH_Point point = glyph->points;
-
-
- for ( ; count > 0; count--, point++ )
- if ( point->hint && !psh_point_is_strong( point ) )
- psh_point_set_strong( point );
- }
- }
-
-
- /* find points in a glyph which are in a blue zone and have `in' or */
- /* `out' tangents parallel to the horizontal axis */
- static void
- psh_glyph_find_blue_points( PSH_Blues blues,
- PSH_Glyph glyph )
- {
- PSH_Blue_Table table;
- PSH_Blue_Zone zone;
- FT_UInt glyph_count = glyph->num_points;
- FT_UInt blue_count;
- PSH_Point point = glyph->points;
-
-
- for ( ; glyph_count > 0; glyph_count--, point++ )
- {
- FT_Pos y;
-
-
- /* check tangents */
- if ( !PSH_DIR_COMPARE( point->dir_in, PSH_DIR_HORIZONTAL ) &&
- !PSH_DIR_COMPARE( point->dir_out, PSH_DIR_HORIZONTAL ) )
- continue;
-
- /* skip strong points */
- if ( psh_point_is_strong( point ) )
- continue;
-
- y = point->org_u;
-
- /* look up top zones */
- table = &blues->normal_top;
- blue_count = table->count;
- zone = table->zones;
-
- for ( ; blue_count > 0; blue_count--, zone++ )
- {
- FT_Pos delta = y - zone->org_bottom;
-
-
- if ( delta < -blues->blue_fuzz )
- break;
-
- if ( y <= zone->org_top + blues->blue_fuzz )
- if ( blues->no_overshoots || delta <= blues->blue_threshold )
- {
- point->cur_u = zone->cur_bottom;
- psh_point_set_strong( point );
- psh_point_set_fitted( point );
- }
- }
-
- /* look up bottom zones */
- table = &blues->normal_bottom;
- blue_count = table->count;
- zone = table->zones + blue_count - 1;
-
- for ( ; blue_count > 0; blue_count--, zone-- )
- {
- FT_Pos delta = zone->org_top - y;
-
-
- if ( delta < -blues->blue_fuzz )
- break;
-
- if ( y >= zone->org_bottom - blues->blue_fuzz )
- if ( blues->no_overshoots || delta < blues->blue_threshold )
- {
- point->cur_u = zone->cur_top;
- psh_point_set_strong( point );
- psh_point_set_fitted( point );
- }
- }
- }
- }
-
-
- /* interpolate strong points with the help of hinted coordinates */
- static void
- psh_glyph_interpolate_strong_points( PSH_Glyph glyph,
- FT_Int dimension )
- {
- PSH_Dimension dim = &glyph->globals->dimension[dimension];
- FT_Fixed scale = dim->scale_mult;
-
- FT_UInt count = glyph->num_points;
- PSH_Point point = glyph->points;
-
-
- for ( ; count > 0; count--, point++ )
- {
- PSH_Hint hint = point->hint;
-
-
- if ( hint )
- {
- FT_Pos delta;
-
-
- if ( psh_point_is_edge_min( point ) )
- point->cur_u = hint->cur_pos;
-
- else if ( psh_point_is_edge_max( point ) )
- point->cur_u = hint->cur_pos + hint->cur_len;
-
- else
- {
- delta = point->org_u - hint->org_pos;
-
- if ( delta <= 0 )
- point->cur_u = hint->cur_pos + FT_MulFix( delta, scale );
-
- else if ( delta >= hint->org_len )
- point->cur_u = hint->cur_pos + hint->cur_len +
- FT_MulFix( delta - hint->org_len, scale );
-
- else /* hint->org_len > 0 */
- point->cur_u = hint->cur_pos +
- FT_MulDiv( delta, hint->cur_len,
- hint->org_len );
- }
- psh_point_set_fitted( point );
- }
- }
- }
-
-
-#define PSH_MAX_STRONG_INTERNAL 16
-
- static void
- psh_glyph_interpolate_normal_points( PSH_Glyph glyph,
- FT_Int dimension )
- {
-
-#if 1
- /* first technique: a point is strong if it is a local extremum */
-
- PSH_Dimension dim = &glyph->globals->dimension[dimension];
- FT_Fixed scale = dim->scale_mult;
- FT_Memory memory = glyph->memory;
-
- PSH_Point* strongs = NULL;
- PSH_Point strongs_0[PSH_MAX_STRONG_INTERNAL];
- FT_UInt num_strongs = 0;
-
- PSH_Point points = glyph->points;
- PSH_Point points_end = points + glyph->num_points;
- PSH_Point point;
-
-
- /* first count the number of strong points */
- for ( point = points; point < points_end; point++ )
- {
- if ( psh_point_is_strong( point ) )
- num_strongs++;
- }
-
- if ( num_strongs == 0 ) /* nothing to do here */
- return;
-
- /* allocate an array to store a list of points, */
- /* stored in increasing org_u order */
- if ( num_strongs <= PSH_MAX_STRONG_INTERNAL )
- strongs = strongs_0;
- else
- {
- FT_Error error;
-
-
- if ( FT_NEW_ARRAY( strongs, num_strongs ) )
- return;
- }
-
- num_strongs = 0;
- for ( point = points; point < points_end; point++ )
- {
- PSH_Point* insert;
-
-
- if ( !psh_point_is_strong( point ) )
- continue;
-
- for ( insert = strongs + num_strongs; insert > strongs; insert-- )
- {
- if ( insert[-1]->org_u <= point->org_u )
- break;
-
- insert[0] = insert[-1];
- }
- insert[0] = point;
- num_strongs++;
- }
-
- /* now try to interpolate all normal points */
- for ( point = points; point < points_end; point++ )
- {
- if ( psh_point_is_strong( point ) )
- continue;
-
- /* sometimes, some local extrema are smooth points */
- if ( psh_point_is_smooth( point ) )
- {
- if ( point->dir_in == PSH_DIR_NONE ||
- point->dir_in != point->dir_out )
- continue;
-
- if ( !psh_point_is_extremum( point ) &&
- !psh_point_is_inflex( point ) )
- continue;
-
- point->flags &= ~PSH_POINT_SMOOTH;
- }
-
- /* find best enclosing point coordinates then interpolate */
- {
- PSH_Point before, after;
- FT_UInt nn;
-
-
- for ( nn = 0; nn < num_strongs; nn++ )
- if ( strongs[nn]->org_u > point->org_u )
- break;
-
- if ( nn == 0 ) /* point before the first strong point */
- {
- after = strongs[0];
-
- point->cur_u = after->cur_u +
- FT_MulFix( point->org_u - after->org_u,
- scale );
- }
- else
- {
- before = strongs[nn - 1];
-
- for ( nn = num_strongs; nn > 0; nn-- )
- if ( strongs[nn - 1]->org_u < point->org_u )
- break;
-
- if ( nn == num_strongs ) /* point is after last strong point */
- {
- before = strongs[nn - 1];
-
- point->cur_u = before->cur_u +
- FT_MulFix( point->org_u - before->org_u,
- scale );
- }
- else
- {
- FT_Pos u;
-
-
- after = strongs[nn];
-
- /* now interpolate point between before and after */
- u = point->org_u;
-
- if ( u == before->org_u )
- point->cur_u = before->cur_u;
-
- else if ( u == after->org_u )
- point->cur_u = after->cur_u;
-
- else
- point->cur_u = before->cur_u +
- FT_MulDiv( u - before->org_u,
- after->cur_u - before->cur_u,
- after->org_u - before->org_u );
- }
- }
- psh_point_set_fitted( point );
- }
- }
-
- if ( strongs != strongs_0 )
- FT_FREE( strongs );
-
-#endif /* 1 */
-
- }
-
-
- /* interpolate other points */
- static void
- psh_glyph_interpolate_other_points( PSH_Glyph glyph,
- FT_Int dimension )
- {
- PSH_Dimension dim = &glyph->globals->dimension[dimension];
- FT_Fixed scale = dim->scale_mult;
- FT_Fixed delta = dim->scale_delta;
- PSH_Contour contour = glyph->contours;
- FT_UInt num_contours = glyph->num_contours;
-
-
- for ( ; num_contours > 0; num_contours--, contour++ )
- {
- PSH_Point start = contour->start;
- PSH_Point first, next, point;
- FT_UInt fit_count;
-
-
- /* count the number of strong points in this contour */
- next = start + contour->count;
- fit_count = 0;
- first = NULL;
-
- for ( point = start; point < next; point++ )
- if ( psh_point_is_fitted( point ) )
- {
- if ( !first )
- first = point;
-
- fit_count++;
- }
-
- /* if there are less than 2 fitted points in the contour, we */
- /* simply scale and eventually translate the contour points */
- if ( fit_count < 2 )
- {
- if ( fit_count == 1 )
- delta = first->cur_u - FT_MulFix( first->org_u, scale );
-
- for ( point = start; point < next; point++ )
- if ( point != first )
- point->cur_u = FT_MulFix( point->org_u, scale ) + delta;
-
- goto Next_Contour;
- }
-
- /* there are more than 2 strong points in this contour; we */
- /* need to interpolate weak points between them */
- start = first;
- do
- {
- /* skip consecutive fitted points */
- for (;;)
- {
- next = first->next;
- if ( next == start )
- goto Next_Contour;
-
- if ( !psh_point_is_fitted( next ) )
- break;
-
- first = next;
- }
-
- /* find next fitted point after unfitted one */
- for (;;)
- {
- next = next->next;
- if ( psh_point_is_fitted( next ) )
- break;
- }
-
- /* now interpolate between them */
- {
- FT_Pos org_a, org_ab, cur_a, cur_ab;
- FT_Pos org_c, org_ac, cur_c;
- FT_Fixed scale_ab;
-
-
- if ( first->org_u <= next->org_u )
- {
- org_a = first->org_u;
- cur_a = first->cur_u;
- org_ab = next->org_u - org_a;
- cur_ab = next->cur_u - cur_a;
- }
- else
- {
- org_a = next->org_u;
- cur_a = next->cur_u;
- org_ab = first->org_u - org_a;
- cur_ab = first->cur_u - cur_a;
- }
-
- scale_ab = 0x10000L;
- if ( org_ab > 0 )
- scale_ab = FT_DivFix( cur_ab, org_ab );
-
- point = first->next;
- do
- {
- org_c = point->org_u;
- org_ac = org_c - org_a;
-
- if ( org_ac <= 0 )
- {
- /* on the left of the interpolation zone */
- cur_c = cur_a + FT_MulFix( org_ac, scale );
- }
- else if ( org_ac >= org_ab )
- {
- /* on the right on the interpolation zone */
- cur_c = cur_a + cur_ab + FT_MulFix( org_ac - org_ab, scale );
- }
- else
- {
- /* within the interpolation zone */
- cur_c = cur_a + FT_MulFix( org_ac, scale_ab );
- }
-
- point->cur_u = cur_c;
-
- point = point->next;
-
- } while ( point != next );
- }
-
- /* keep going until all points in the contours have been processed */
- first = next;
-
- } while ( first != start );
-
- Next_Contour:
- ;
- }
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** HIGH-LEVEL INTERFACE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_Error
- ps_hints_apply( PS_Hints ps_hints,
- FT_Outline* outline,
- PSH_Globals globals,
- FT_Render_Mode hint_mode )
- {
- PSH_GlyphRec glyphrec;
- PSH_Glyph glyph = &glyphrec;
- FT_Error error;
-#ifdef DEBUG_HINTER
- FT_Memory memory;
-#endif
- FT_Int dimension;
-
-
- /* something to do? */
- if ( outline->n_points == 0 || outline->n_contours == 0 )
- return FT_Err_Ok;
-
-#ifdef DEBUG_HINTER
-
- memory = globals->memory;
-
- if ( ps_debug_glyph )
- {
- psh_glyph_done( ps_debug_glyph );
- FT_FREE( ps_debug_glyph );
- }
-
- if ( FT_NEW( glyph ) )
- return error;
-
- ps_debug_glyph = glyph;
-
-#endif /* DEBUG_HINTER */
-
- error = psh_glyph_init( glyph, outline, ps_hints, globals );
- if ( error )
- goto Exit;
-
- /* try to optimize the y_scale so that the top of non-capital letters
- * is aligned on a pixel boundary whenever possible
- */
- {
- PSH_Dimension dim_x = &glyph->globals->dimension[0];
- PSH_Dimension dim_y = &glyph->globals->dimension[1];
-
- FT_Fixed x_scale = dim_x->scale_mult;
- FT_Fixed y_scale = dim_y->scale_mult;
-
- FT_Fixed old_x_scale = x_scale;
- FT_Fixed old_y_scale = y_scale;
-
- FT_Fixed scaled;
- FT_Fixed fitted;
-
- FT_Bool rescale = FALSE;
-
-
- scaled = FT_MulFix( globals->blues.normal_top.zones->org_ref, y_scale );
- fitted = FT_PIX_ROUND( scaled );
-
- if ( fitted != 0 && scaled != fitted )
- {
- rescale = TRUE;
-
- y_scale = FT_MulDiv( y_scale, fitted, scaled );
-
- if ( fitted < scaled )
- x_scale -= x_scale / 50;
-
- psh_globals_set_scale( glyph->globals, x_scale, y_scale, 0, 0 );
- }
-
- glyph->do_horz_hints = 1;
- glyph->do_vert_hints = 1;
-
- glyph->do_horz_snapping = FT_BOOL( hint_mode == FT_RENDER_MODE_MONO ||
- hint_mode == FT_RENDER_MODE_LCD );
-
- glyph->do_vert_snapping = FT_BOOL( hint_mode == FT_RENDER_MODE_MONO ||
- hint_mode == FT_RENDER_MODE_LCD_V );
-
- glyph->do_stem_adjust = FT_BOOL( hint_mode != FT_RENDER_MODE_LIGHT );
-
- for ( dimension = 0; dimension < 2; dimension++ )
- {
- /* load outline coordinates into glyph */
- psh_glyph_load_points( glyph, dimension );
-
- /* compute local extrema */
- psh_glyph_compute_extrema( glyph );
-
- /* compute aligned stem/hints positions */
- psh_hint_table_align_hints( &glyph->hint_tables[dimension],
- glyph->globals,
- dimension,
- glyph );
-
- /* find strong points, align them, then interpolate others */
- psh_glyph_find_strong_points( glyph, dimension );
- if ( dimension == 1 )
- psh_glyph_find_blue_points( &globals->blues, glyph );
- psh_glyph_interpolate_strong_points( glyph, dimension );
- psh_glyph_interpolate_normal_points( glyph, dimension );
- psh_glyph_interpolate_other_points( glyph, dimension );
-
- /* save hinted coordinates back to outline */
- psh_glyph_save_points( glyph, dimension );
-
- if ( rescale )
- psh_globals_set_scale( glyph->globals,
- old_x_scale, old_y_scale, 0, 0 );
- }
- }
-
- Exit:
-
-#ifndef DEBUG_HINTER
- psh_glyph_done( glyph );
-#endif
-
- return error;
- }
-
-
-/* END */
diff --git a/src/pshinter/pshalgo.h b/src/pshinter/pshalgo.h
deleted file mode 100644
index 62e97d152..000000000
--- a/src/pshinter/pshalgo.h
+++ /dev/null
@@ -1,241 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshalgo.h */
-/* */
-/* PostScript hinting algorithm (specification). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PSHALGO_H_
-#define PSHALGO_H_
-
-
-#include "pshrec.h"
-#include "pshglob.h"
-
-
-FT_BEGIN_HEADER
-
-
- /* handle to Hint structure */
- typedef struct PSH_HintRec_* PSH_Hint;
-
-
- /* hint bit-flags */
-#define PSH_HINT_GHOST PS_HINT_FLAG_GHOST
-#define PSH_HINT_BOTTOM PS_HINT_FLAG_BOTTOM
-#define PSH_HINT_ACTIVE 4U
-#define PSH_HINT_FITTED 8U
-
-
-#define psh_hint_is_active( x ) ( ( (x)->flags & PSH_HINT_ACTIVE ) != 0 )
-#define psh_hint_is_ghost( x ) ( ( (x)->flags & PSH_HINT_GHOST ) != 0 )
-#define psh_hint_is_fitted( x ) ( ( (x)->flags & PSH_HINT_FITTED ) != 0 )
-
-#define psh_hint_activate( x ) (x)->flags |= PSH_HINT_ACTIVE
-#define psh_hint_deactivate( x ) (x)->flags &= ~PSH_HINT_ACTIVE
-#define psh_hint_set_fitted( x ) (x)->flags |= PSH_HINT_FITTED
-
-
- /* hint structure */
- typedef struct PSH_HintRec_
- {
- FT_Int org_pos;
- FT_Int org_len;
- FT_Pos cur_pos;
- FT_Pos cur_len;
- FT_UInt flags;
- PSH_Hint parent;
- FT_Int order;
-
- } PSH_HintRec;
-
-
- /* this is an interpolation zone used for strong points; */
- /* weak points are interpolated according to their strong */
- /* neighbours */
- typedef struct PSH_ZoneRec_
- {
- FT_Fixed scale;
- FT_Fixed delta;
- FT_Pos min;
- FT_Pos max;
-
- } PSH_ZoneRec, *PSH_Zone;
-
-
- typedef struct PSH_Hint_TableRec_
- {
- FT_UInt max_hints;
- FT_UInt num_hints;
- PSH_Hint hints;
- PSH_Hint* sort;
- PSH_Hint* sort_global;
- FT_UInt num_zones;
- PSH_ZoneRec* zones;
- PSH_Zone zone;
- PS_Mask_Table hint_masks;
- PS_Mask_Table counter_masks;
-
- } PSH_Hint_TableRec, *PSH_Hint_Table;
-
-
- typedef struct PSH_PointRec_* PSH_Point;
- typedef struct PSH_ContourRec_* PSH_Contour;
-
- enum
- {
- PSH_DIR_NONE = 4,
- PSH_DIR_UP = -1,
- PSH_DIR_DOWN = 1,
- PSH_DIR_LEFT = -2,
- PSH_DIR_RIGHT = 2
- };
-
-#define PSH_DIR_HORIZONTAL 2
-#define PSH_DIR_VERTICAL 1
-
-#define PSH_DIR_COMPARE( d1, d2 ) ( (d1) == (d2) || (d1) == -(d2) )
-#define PSH_DIR_IS_HORIZONTAL( d ) PSH_DIR_COMPARE( d, PSH_DIR_HORIZONTAL )
-#define PSH_DIR_IS_VERTICAL( d ) PSH_DIR_COMPARE( d, PSH_DIR_VERTICAL )
-
-
- /* the following bit-flags are computed once by the glyph */
- /* analyzer, for both dimensions */
-#define PSH_POINT_OFF 1U /* point is off the curve */
-#define PSH_POINT_SMOOTH 2U /* point is smooth */
-#define PSH_POINT_INFLEX 4U /* point is inflection */
-
-
-#define psh_point_is_smooth( p ) ( (p)->flags & PSH_POINT_SMOOTH )
-#define psh_point_is_off( p ) ( (p)->flags & PSH_POINT_OFF )
-#define psh_point_is_inflex( p ) ( (p)->flags & PSH_POINT_INFLEX )
-
-#define psh_point_set_smooth( p ) (p)->flags |= PSH_POINT_SMOOTH
-#define psh_point_set_off( p ) (p)->flags |= PSH_POINT_OFF
-#define psh_point_set_inflex( p ) (p)->flags |= PSH_POINT_INFLEX
-
-
- /* the following bit-flags are re-computed for each dimension */
-#define PSH_POINT_STRONG 16U /* point is strong */
-#define PSH_POINT_FITTED 32U /* point is already fitted */
-#define PSH_POINT_EXTREMUM 64U /* point is local extremum */
-#define PSH_POINT_POSITIVE 128U /* extremum has positive contour flow */
-#define PSH_POINT_NEGATIVE 256U /* extremum has negative contour flow */
-#define PSH_POINT_EDGE_MIN 512U /* point is aligned to left/bottom stem edge */
-#define PSH_POINT_EDGE_MAX 1024U /* point is aligned to top/right stem edge */
-
-
-#define psh_point_is_strong( p ) ( (p)->flags2 & PSH_POINT_STRONG )
-#define psh_point_is_fitted( p ) ( (p)->flags2 & PSH_POINT_FITTED )
-#define psh_point_is_extremum( p ) ( (p)->flags2 & PSH_POINT_EXTREMUM )
-#define psh_point_is_positive( p ) ( (p)->flags2 & PSH_POINT_POSITIVE )
-#define psh_point_is_negative( p ) ( (p)->flags2 & PSH_POINT_NEGATIVE )
-#define psh_point_is_edge_min( p ) ( (p)->flags2 & PSH_POINT_EDGE_MIN )
-#define psh_point_is_edge_max( p ) ( (p)->flags2 & PSH_POINT_EDGE_MAX )
-
-#define psh_point_set_strong( p ) (p)->flags2 |= PSH_POINT_STRONG
-#define psh_point_set_fitted( p ) (p)->flags2 |= PSH_POINT_FITTED
-#define psh_point_set_extremum( p ) (p)->flags2 |= PSH_POINT_EXTREMUM
-#define psh_point_set_positive( p ) (p)->flags2 |= PSH_POINT_POSITIVE
-#define psh_point_set_negative( p ) (p)->flags2 |= PSH_POINT_NEGATIVE
-#define psh_point_set_edge_min( p ) (p)->flags2 |= PSH_POINT_EDGE_MIN
-#define psh_point_set_edge_max( p ) (p)->flags2 |= PSH_POINT_EDGE_MAX
-
-
- typedef struct PSH_PointRec_
- {
- PSH_Point prev;
- PSH_Point next;
- PSH_Contour contour;
- FT_UInt flags;
- FT_UInt flags2;
- FT_Char dir_in;
- FT_Char dir_out;
- PSH_Hint hint;
- FT_Pos org_u;
- FT_Pos org_v;
- FT_Pos cur_u;
-#ifdef DEBUG_HINTER
- FT_Pos org_x;
- FT_Pos cur_x;
- FT_Pos org_y;
- FT_Pos cur_y;
- FT_UInt flags_x;
- FT_UInt flags_y;
-#endif
-
- } PSH_PointRec;
-
-
- typedef struct PSH_ContourRec_
- {
- PSH_Point start;
- FT_UInt count;
-
- } PSH_ContourRec;
-
-
- typedef struct PSH_GlyphRec_
- {
- FT_UInt num_points;
- FT_UInt num_contours;
-
- PSH_Point points;
- PSH_Contour contours;
-
- FT_Memory memory;
- FT_Outline* outline;
- PSH_Globals globals;
- PSH_Hint_TableRec hint_tables[2];
-
- FT_Bool vertical;
- FT_Int major_dir;
- FT_Int minor_dir;
-
- FT_Bool do_horz_hints;
- FT_Bool do_vert_hints;
- FT_Bool do_horz_snapping;
- FT_Bool do_vert_snapping;
- FT_Bool do_stem_adjust;
-
- } PSH_GlyphRec, *PSH_Glyph;
-
-
-#ifdef DEBUG_HINTER
- extern PSH_Hint_Table ps_debug_hint_table;
-
- typedef void
- (*PSH_HintFunc)( PSH_Hint hint,
- FT_Bool vertical );
-
- extern PSH_HintFunc ps_debug_hint_func;
-
- extern PSH_Glyph ps_debug_glyph;
-#endif
-
-
- extern FT_Error
- ps_hints_apply( PS_Hints ps_hints,
- FT_Outline* outline,
- PSH_Globals globals,
- FT_Render_Mode hint_mode );
-
-
-FT_END_HEADER
-
-
-#endif /* PSHALGO_H_ */
-
-
-/* END */
diff --git a/src/pshinter/pshglob.c b/src/pshinter/pshglob.c
deleted file mode 100644
index c68770c73..000000000
--- a/src/pshinter/pshglob.c
+++ /dev/null
@@ -1,795 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshglob.c */
-/* */
-/* PostScript hinter global hinting management (body). */
-/* Inspired by the new auto-hinter module. */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used */
-/* modified and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "pshglob.h"
-
-#ifdef DEBUG_HINTER
- PSH_Globals ps_debug_globals = NULL;
-#endif
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** STANDARD WIDTHS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* scale the widths/heights table */
- static void
- psh_globals_scale_widths( PSH_Globals globals,
- FT_UInt direction )
- {
- PSH_Dimension dim = &globals->dimension[direction];
- PSH_Widths stdw = &dim->stdw;
- FT_UInt count = stdw->count;
- PSH_Width width = stdw->widths;
- PSH_Width stand = width; /* standard width/height */
- FT_Fixed scale = dim->scale_mult;
-
-
- if ( count > 0 )
- {
- width->cur = FT_MulFix( width->org, scale );
- width->fit = FT_PIX_ROUND( width->cur );
-
- width++;
- count--;
-
- for ( ; count > 0; count--, width++ )
- {
- FT_Pos w, dist;
-
-
- w = FT_MulFix( width->org, scale );
- dist = w - stand->cur;
-
- if ( dist < 0 )
- dist = -dist;
-
- if ( dist < 128 )
- w = stand->cur;
-
- width->cur = w;
- width->fit = FT_PIX_ROUND( w );
- }
- }
- }
-
-
-#if 0
-
- /* org_width is in font units, result in device pixels, 26.6 format */
- FT_LOCAL_DEF( FT_Pos )
- psh_dimension_snap_width( PSH_Dimension dimension,
- FT_Int org_width )
- {
- FT_UInt n;
- FT_Pos width = FT_MulFix( org_width, dimension->scale_mult );
- FT_Pos best = 64 + 32 + 2;
- FT_Pos reference = width;
-
-
- for ( n = 0; n < dimension->stdw.count; n++ )
- {
- FT_Pos w;
- FT_Pos dist;
-
-
- w = dimension->stdw.widths[n].cur;
- dist = width - w;
- if ( dist < 0 )
- dist = -dist;
- if ( dist < best )
- {
- best = dist;
- reference = w;
- }
- }
-
- if ( width >= reference )
- {
- width -= 0x21;
- if ( width < reference )
- width = reference;
- }
- else
- {
- width += 0x21;
- if ( width > reference )
- width = reference;
- }
-
- return width;
- }
-
-#endif /* 0 */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** BLUE ZONES *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- psh_blues_set_zones_0( PSH_Blues target,
- FT_Bool is_others,
- FT_UInt read_count,
- FT_Short* read,
- PSH_Blue_Table top_table,
- PSH_Blue_Table bot_table )
- {
- FT_UInt count_top = top_table->count;
- FT_UInt count_bot = bot_table->count;
- FT_Bool first = 1;
-
- FT_UNUSED( target );
-
-
- for ( ; read_count > 1; read_count -= 2 )
- {
- FT_Int reference, delta;
- FT_UInt count;
- PSH_Blue_Zone zones, zone;
- FT_Bool top;
-
-
- /* read blue zone entry, and select target top/bottom zone */
- top = 0;
- if ( first || is_others )
- {
- reference = read[1];
- delta = read[0] - reference;
-
- zones = bot_table->zones;
- count = count_bot;
- first = 0;
- }
- else
- {
- reference = read[0];
- delta = read[1] - reference;
-
- zones = top_table->zones;
- count = count_top;
- top = 1;
- }
-
- /* insert into sorted table */
- zone = zones;
- for ( ; count > 0; count--, zone++ )
- {
- if ( reference < zone->org_ref )
- break;
-
- if ( reference == zone->org_ref )
- {
- FT_Int delta0 = zone->org_delta;
-
-
- /* we have two zones on the same reference position -- */
- /* only keep the largest one */
- if ( delta < 0 )
- {
- if ( delta < delta0 )
- zone->org_delta = delta;
- }
- else
- {
- if ( delta > delta0 )
- zone->org_delta = delta;
- }
- goto Skip;
- }
- }
-
- for ( ; count > 0; count-- )
- zone[count] = zone[count-1];
-
- zone->org_ref = reference;
- zone->org_delta = delta;
-
- if ( top )
- count_top++;
- else
- count_bot++;
-
- Skip:
- read += 2;
- }
-
- top_table->count = count_top;
- bot_table->count = count_bot;
- }
-
-
- /* Re-read blue zones from the original fonts and store them into out */
- /* private structure. This function re-orders, sanitizes and */
- /* fuzz-expands the zones as well. */
- static void
- psh_blues_set_zones( PSH_Blues target,
- FT_UInt count,
- FT_Short* blues,
- FT_UInt count_others,
- FT_Short* other_blues,
- FT_Int fuzz,
- FT_Int family )
- {
- PSH_Blue_Table top_table, bot_table;
- FT_UInt count_top, count_bot;
-
-
- if ( family )
- {
- top_table = &target->family_top;
- bot_table = &target->family_bottom;
- }
- else
- {
- top_table = &target->normal_top;
- bot_table = &target->normal_bottom;
- }
-
- /* read the input blue zones, and build two sorted tables */
- /* (one for the top zones, the other for the bottom zones) */
- top_table->count = 0;
- bot_table->count = 0;
-
- /* first, the blues */
- psh_blues_set_zones_0( target, 0,
- count, blues, top_table, bot_table );
- psh_blues_set_zones_0( target, 1,
- count_others, other_blues, top_table, bot_table );
-
- count_top = top_table->count;
- count_bot = bot_table->count;
-
- /* sanitize top table */
- if ( count_top > 0 )
- {
- PSH_Blue_Zone zone = top_table->zones;
-
-
- for ( count = count_top; count > 0; count--, zone++ )
- {
- FT_Int delta;
-
-
- if ( count > 1 )
- {
- delta = zone[1].org_ref - zone[0].org_ref;
- if ( zone->org_delta > delta )
- zone->org_delta = delta;
- }
-
- zone->org_bottom = zone->org_ref;
- zone->org_top = zone->org_delta + zone->org_ref;
- }
- }
-
- /* sanitize bottom table */
- if ( count_bot > 0 )
- {
- PSH_Blue_Zone zone = bot_table->zones;
-
-
- for ( count = count_bot; count > 0; count--, zone++ )
- {
- FT_Int delta;
-
-
- if ( count > 1 )
- {
- delta = zone[0].org_ref - zone[1].org_ref;
- if ( zone->org_delta < delta )
- zone->org_delta = delta;
- }
-
- zone->org_top = zone->org_ref;
- zone->org_bottom = zone->org_delta + zone->org_ref;
- }
- }
-
- /* expand top and bottom tables with blue fuzz */
- {
- FT_Int dim, top, bot, delta;
- PSH_Blue_Zone zone;
-
-
- zone = top_table->zones;
- count = count_top;
-
- for ( dim = 1; dim >= 0; dim-- )
- {
- if ( count > 0 )
- {
- /* expand the bottom of the lowest zone normally */
- zone->org_bottom -= fuzz;
-
- /* expand the top and bottom of intermediate zones; */
- /* checking that the interval is smaller than the fuzz */
- top = zone->org_top;
-
- for ( count--; count > 0; count-- )
- {
- bot = zone[1].org_bottom;
- delta = bot - top;
-
- if ( delta / 2 < fuzz )
- zone[0].org_top = zone[1].org_bottom = top + delta / 2;
- else
- {
- zone[0].org_top = top + fuzz;
- zone[1].org_bottom = bot - fuzz;
- }
-
- zone++;
- top = zone->org_top;
- }
-
- /* expand the top of the highest zone normally */
- zone->org_top = top + fuzz;
- }
- zone = bot_table->zones;
- count = count_bot;
- }
- }
- }
-
-
- /* reset the blues table when the device transform changes */
- static void
- psh_blues_scale_zones( PSH_Blues blues,
- FT_Fixed scale,
- FT_Pos delta )
- {
- FT_UInt count;
- FT_UInt num;
- PSH_Blue_Table table = NULL;
-
- /* */
- /* Determine whether we need to suppress overshoots or */
- /* not. We simply need to compare the vertical scale */
- /* parameter to the raw bluescale value. Here is why: */
- /* */
- /* We need to suppress overshoots for all pointsizes. */
- /* At 300dpi that satisfies: */
- /* */
- /* pointsize < 240*bluescale + 0.49 */
- /* */
- /* This corresponds to: */
- /* */
- /* pixelsize < 1000*bluescale + 49/24 */
- /* */
- /* scale*EM_Size < 1000*bluescale + 49/24 */
- /* */
- /* However, for normal Type 1 fonts, EM_Size is 1000! */
- /* We thus only check: */
- /* */
- /* scale < bluescale + 49/24000 */
- /* */
- /* which we shorten to */
- /* */
- /* "scale < bluescale" */
- /* */
- /* Note that `blue_scale' is stored 1000 times its real */
- /* value, and that `scale' converts from font units to */
- /* fractional pixels. */
- /* */
-
- /* 1000 / 64 = 125 / 8 */
- if ( scale >= 0x20C49BAL )
- blues->no_overshoots = FT_BOOL( scale < blues->blue_scale * 8 / 125 );
- else
- blues->no_overshoots = FT_BOOL( scale * 125 < blues->blue_scale * 8 );
-
- /* */
- /* The blue threshold is the font units distance under */
- /* which overshoots are suppressed due to the BlueShift */
- /* even if the scale is greater than BlueScale. */
- /* */
- /* It is the smallest distance such that */
- /* */
- /* dist <= BlueShift && dist*scale <= 0.5 pixels */
- /* */
- {
- FT_Int threshold = blues->blue_shift;
-
-
- while ( threshold > 0 && FT_MulFix( threshold, scale ) > 32 )
- threshold--;
-
- blues->blue_threshold = threshold;
- }
-
- for ( num = 0; num < 4; num++ )
- {
- PSH_Blue_Zone zone;
-
-
- switch ( num )
- {
- case 0:
- table = &blues->normal_top;
- break;
- case 1:
- table = &blues->normal_bottom;
- break;
- case 2:
- table = &blues->family_top;
- break;
- default:
- table = &blues->family_bottom;
- break;
- }
-
- zone = table->zones;
- count = table->count;
- for ( ; count > 0; count--, zone++ )
- {
- zone->cur_top = FT_MulFix( zone->org_top, scale ) + delta;
- zone->cur_bottom = FT_MulFix( zone->org_bottom, scale ) + delta;
- zone->cur_ref = FT_MulFix( zone->org_ref, scale ) + delta;
- zone->cur_delta = FT_MulFix( zone->org_delta, scale );
-
- /* round scaled reference position */
- zone->cur_ref = FT_PIX_ROUND( zone->cur_ref );
-
-#if 0
- if ( zone->cur_ref > zone->cur_top )
- zone->cur_ref -= 64;
- else if ( zone->cur_ref < zone->cur_bottom )
- zone->cur_ref += 64;
-#endif
- }
- }
-
- /* process the families now */
-
- for ( num = 0; num < 2; num++ )
- {
- PSH_Blue_Zone zone1, zone2;
- FT_UInt count1, count2;
- PSH_Blue_Table normal, family;
-
-
- switch ( num )
- {
- case 0:
- normal = &blues->normal_top;
- family = &blues->family_top;
- break;
-
- default:
- normal = &blues->normal_bottom;
- family = &blues->family_bottom;
- }
-
- zone1 = normal->zones;
- count1 = normal->count;
-
- for ( ; count1 > 0; count1--, zone1++ )
- {
- /* try to find a family zone whose reference position is less */
- /* than 1 pixel far from the current zone */
- zone2 = family->zones;
- count2 = family->count;
-
- for ( ; count2 > 0; count2--, zone2++ )
- {
- FT_Pos Delta;
-
-
- Delta = zone1->org_ref - zone2->org_ref;
- if ( Delta < 0 )
- Delta = -Delta;
-
- if ( FT_MulFix( Delta, scale ) < 64 )
- {
- zone1->cur_top = zone2->cur_top;
- zone1->cur_bottom = zone2->cur_bottom;
- zone1->cur_ref = zone2->cur_ref;
- zone1->cur_delta = zone2->cur_delta;
- break;
- }
- }
- }
- }
- }
-
-
- /* calculate the maximum height of given blue zones */
- static FT_Short
- psh_calc_max_height( FT_UInt num,
- const FT_Short* values,
- FT_Short cur_max )
- {
- FT_UInt count;
-
-
- for ( count = 0; count < num; count += 2 )
- {
- FT_Short cur_height = values[count + 1] - values[count];
-
-
- if ( cur_height > cur_max )
- cur_max = cur_height;
- }
-
- return cur_max;
- }
-
-
- FT_LOCAL_DEF( void )
- psh_blues_snap_stem( PSH_Blues blues,
- FT_Int stem_top,
- FT_Int stem_bot,
- PSH_Alignment alignment )
- {
- PSH_Blue_Table table;
- FT_UInt count;
- FT_Pos delta;
- PSH_Blue_Zone zone;
- FT_Int no_shoots;
-
-
- alignment->align = PSH_BLUE_ALIGN_NONE;
-
- no_shoots = blues->no_overshoots;
-
- /* look up stem top in top zones table */
- table = &blues->normal_top;
- count = table->count;
- zone = table->zones;
-
- for ( ; count > 0; count--, zone++ )
- {
- delta = stem_top - zone->org_bottom;
- if ( delta < -blues->blue_fuzz )
- break;
-
- if ( stem_top <= zone->org_top + blues->blue_fuzz )
- {
- if ( no_shoots || delta <= blues->blue_threshold )
- {
- alignment->align |= PSH_BLUE_ALIGN_TOP;
- alignment->align_top = zone->cur_ref;
- }
- break;
- }
- }
-
- /* look up stem bottom in bottom zones table */
- table = &blues->normal_bottom;
- count = table->count;
- zone = table->zones + count-1;
-
- for ( ; count > 0; count--, zone-- )
- {
- delta = zone->org_top - stem_bot;
- if ( delta < -blues->blue_fuzz )
- break;
-
- if ( stem_bot >= zone->org_bottom - blues->blue_fuzz )
- {
- if ( no_shoots || delta < blues->blue_threshold )
- {
- alignment->align |= PSH_BLUE_ALIGN_BOT;
- alignment->align_bot = zone->cur_ref;
- }
- break;
- }
- }
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GLOBAL HINTS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- psh_globals_destroy( PSH_Globals globals )
- {
- if ( globals )
- {
- FT_Memory memory;
-
-
- memory = globals->memory;
- globals->dimension[0].stdw.count = 0;
- globals->dimension[1].stdw.count = 0;
-
- globals->blues.normal_top.count = 0;
- globals->blues.normal_bottom.count = 0;
- globals->blues.family_top.count = 0;
- globals->blues.family_bottom.count = 0;
-
- FT_FREE( globals );
-
-#ifdef DEBUG_HINTER
- ps_debug_globals = NULL;
-#endif
- }
- }
-
-
- static FT_Error
- psh_globals_new( FT_Memory memory,
- T1_Private* priv,
- PSH_Globals *aglobals )
- {
- PSH_Globals globals = NULL;
- FT_Error error;
-
-
- if ( !FT_NEW( globals ) )
- {
- FT_UInt count;
- FT_Short* read;
-
-
- globals->memory = memory;
-
- /* copy standard widths */
- {
- PSH_Dimension dim = &globals->dimension[1];
- PSH_Width write = dim->stdw.widths;
-
-
- write->org = priv->standard_width[0];
- write++;
-
- read = priv->snap_widths;
- for ( count = priv->num_snap_widths; count > 0; count-- )
- {
- write->org = *read;
- write++;
- read++;
- }
-
- dim->stdw.count = priv->num_snap_widths + 1;
- }
-
- /* copy standard heights */
- {
- PSH_Dimension dim = &globals->dimension[0];
- PSH_Width write = dim->stdw.widths;
-
-
- write->org = priv->standard_height[0];
- write++;
- read = priv->snap_heights;
- for ( count = priv->num_snap_heights; count > 0; count-- )
- {
- write->org = *read;
- write++;
- read++;
- }
-
- dim->stdw.count = priv->num_snap_heights + 1;
- }
-
- /* copy blue zones */
- psh_blues_set_zones( &globals->blues, priv->num_blue_values,
- priv->blue_values, priv->num_other_blues,
- priv->other_blues, priv->blue_fuzz, 0 );
-
- psh_blues_set_zones( &globals->blues, priv->num_family_blues,
- priv->family_blues, priv->num_family_other_blues,
- priv->family_other_blues, priv->blue_fuzz, 1 );
-
- /* limit the BlueScale value to `1 / max_of_blue_zone_heights' */
- {
- FT_Fixed max_scale;
- FT_Short max_height = 1;
-
-
- max_height = psh_calc_max_height( priv->num_blue_values,
- priv->blue_values,
- max_height );
- max_height = psh_calc_max_height( priv->num_other_blues,
- priv->other_blues,
- max_height );
- max_height = psh_calc_max_height( priv->num_family_blues,
- priv->family_blues,
- max_height );
- max_height = psh_calc_max_height( priv->num_family_other_blues,
- priv->family_other_blues,
- max_height );
-
- /* BlueScale is scaled 1000 times */
- max_scale = FT_DivFix( 1000, max_height );
- globals->blues.blue_scale = priv->blue_scale < max_scale
- ? priv->blue_scale
- : max_scale;
- }
-
- globals->blues.blue_shift = priv->blue_shift;
- globals->blues.blue_fuzz = priv->blue_fuzz;
-
- globals->dimension[0].scale_mult = 0;
- globals->dimension[0].scale_delta = 0;
- globals->dimension[1].scale_mult = 0;
- globals->dimension[1].scale_delta = 0;
-
-#ifdef DEBUG_HINTER
- ps_debug_globals = globals;
-#endif
- }
-
- *aglobals = globals;
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- psh_globals_set_scale( PSH_Globals globals,
- FT_Fixed x_scale,
- FT_Fixed y_scale,
- FT_Fixed x_delta,
- FT_Fixed y_delta )
- {
- PSH_Dimension dim;
-
-
- dim = &globals->dimension[0];
- if ( x_scale != dim->scale_mult ||
- x_delta != dim->scale_delta )
- {
- dim->scale_mult = x_scale;
- dim->scale_delta = x_delta;
-
- psh_globals_scale_widths( globals, 0 );
- }
-
- dim = &globals->dimension[1];
- if ( y_scale != dim->scale_mult ||
- y_delta != dim->scale_delta )
- {
- dim->scale_mult = y_scale;
- dim->scale_delta = y_delta;
-
- psh_globals_scale_widths( globals, 1 );
- psh_blues_scale_zones( &globals->blues, y_scale, y_delta );
- }
- }
-
-
- FT_LOCAL_DEF( void )
- psh_globals_funcs_init( PSH_Globals_FuncsRec* funcs )
- {
- funcs->create = psh_globals_new;
- funcs->set_scale = psh_globals_set_scale;
- funcs->destroy = psh_globals_destroy;
- }
-
-
-/* END */
diff --git a/src/pshinter/pshglob.h b/src/pshinter/pshglob.h
deleted file mode 100644
index 8801cbada..000000000
--- a/src/pshinter/pshglob.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshglob.h */
-/* */
-/* PostScript hinter global hinting management. */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PSHGLOB_H_
-#define PSHGLOB_H_
-
-
-#include FT_FREETYPE_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GLOBAL HINTS INTERNALS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* @constant: */
- /* PS_GLOBALS_MAX_BLUE_ZONES */
- /* */
- /* @description: */
- /* The maximum number of blue zones in a font global hints structure. */
- /* See @PS_Globals_BluesRec. */
- /* */
-#define PS_GLOBALS_MAX_BLUE_ZONES 16
-
-
- /*************************************************************************/
- /* */
- /* @constant: */
- /* PS_GLOBALS_MAX_STD_WIDTHS */
- /* */
- /* @description: */
- /* The maximum number of standard and snap widths in either the */
- /* horizontal or vertical direction. See @PS_Globals_WidthsRec. */
- /* */
-#define PS_GLOBALS_MAX_STD_WIDTHS 16
-
-
- /* standard and snap width */
- typedef struct PSH_WidthRec_
- {
- FT_Int org;
- FT_Pos cur;
- FT_Pos fit;
-
- } PSH_WidthRec, *PSH_Width;
-
-
- /* standard and snap widths table */
- typedef struct PSH_WidthsRec_
- {
- FT_UInt count;
- PSH_WidthRec widths[PS_GLOBALS_MAX_STD_WIDTHS];
-
- } PSH_WidthsRec, *PSH_Widths;
-
-
- typedef struct PSH_DimensionRec_
- {
- PSH_WidthsRec stdw;
- FT_Fixed scale_mult;
- FT_Fixed scale_delta;
-
- } PSH_DimensionRec, *PSH_Dimension;
-
-
- /* blue zone descriptor */
- typedef struct PSH_Blue_ZoneRec_
- {
- FT_Int org_ref;
- FT_Int org_delta;
- FT_Int org_top;
- FT_Int org_bottom;
-
- FT_Pos cur_ref;
- FT_Pos cur_delta;
- FT_Pos cur_bottom;
- FT_Pos cur_top;
-
- } PSH_Blue_ZoneRec, *PSH_Blue_Zone;
-
-
- typedef struct PSH_Blue_TableRec_
- {
- FT_UInt count;
- PSH_Blue_ZoneRec zones[PS_GLOBALS_MAX_BLUE_ZONES];
-
- } PSH_Blue_TableRec, *PSH_Blue_Table;
-
-
- /* blue zones table */
- typedef struct PSH_BluesRec_
- {
- PSH_Blue_TableRec normal_top;
- PSH_Blue_TableRec normal_bottom;
- PSH_Blue_TableRec family_top;
- PSH_Blue_TableRec family_bottom;
-
- FT_Fixed blue_scale;
- FT_Int blue_shift;
- FT_Int blue_threshold;
- FT_Int blue_fuzz;
- FT_Bool no_overshoots;
-
- } PSH_BluesRec, *PSH_Blues;
-
-
- /* font globals. */
- /* dimension 0 => X coordinates + vertical hints/stems */
- /* dimension 1 => Y coordinates + horizontal hints/stems */
- typedef struct PSH_GlobalsRec_
- {
- FT_Memory memory;
- PSH_DimensionRec dimension[2];
- PSH_BluesRec blues;
-
- } PSH_GlobalsRec;
-
-
-#define PSH_BLUE_ALIGN_NONE 0
-#define PSH_BLUE_ALIGN_TOP 1
-#define PSH_BLUE_ALIGN_BOT 2
-
-
- typedef struct PSH_AlignmentRec_
- {
- int align;
- FT_Pos align_top;
- FT_Pos align_bot;
-
- } PSH_AlignmentRec, *PSH_Alignment;
-
-
- FT_LOCAL( void )
- psh_globals_funcs_init( PSH_Globals_FuncsRec* funcs );
-
-
-#if 0
- /* snap a stem width to fitter coordinates. `org_width' is in font */
- /* units. The result is in device pixels (26.6 format). */
- FT_LOCAL( FT_Pos )
- psh_dimension_snap_width( PSH_Dimension dimension,
- FT_Int org_width );
-#endif
-
- FT_LOCAL( void )
- psh_globals_set_scale( PSH_Globals globals,
- FT_Fixed x_scale,
- FT_Fixed y_scale,
- FT_Fixed x_delta,
- FT_Fixed y_delta );
-
- /* snap a stem to one or two blue zones */
- FT_LOCAL( void )
- psh_blues_snap_stem( PSH_Blues blues,
- FT_Int stem_top,
- FT_Int stem_bot,
- PSH_Alignment alignment );
- /* */
-
-#ifdef DEBUG_HINTER
- extern PSH_Globals ps_debug_globals;
-#endif
-
-
-FT_END_HEADER
-
-
-#endif /* PSHGLOB_H_ */
-
-
-/* END */
diff --git a/src/pshinter/pshinter.c b/src/pshinter/pshinter.c
deleted file mode 100644
index 13e07e148..000000000
--- a/src/pshinter/pshinter.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshinter.c */
-/* */
-/* FreeType PostScript Hinting module */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "pshalgo.c"
-#include "pshglob.c"
-#include "pshmod.c"
-#include "pshpic.c"
-#include "pshrec.c"
-
-
-/* END */
diff --git a/src/pshinter/pshmod.c b/src/pshinter/pshmod.c
deleted file mode 100644
index 860dc0ae8..000000000
--- a/src/pshinter/pshmod.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshmod.c */
-/* */
-/* FreeType PostScript hinter module implementation (body). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include "pshrec.h"
-#include "pshalgo.h"
-#include "pshpic.h"
-
-
- /* the Postscript Hinter module structure */
- typedef struct PS_Hinter_Module_Rec_
- {
- FT_ModuleRec root;
- PS_HintsRec ps_hints;
-
- PSH_Globals_FuncsRec globals_funcs;
- T1_Hints_FuncsRec t1_funcs;
- T2_Hints_FuncsRec t2_funcs;
-
- } PS_Hinter_ModuleRec, *PS_Hinter_Module;
-
-
- /* finalize module */
- FT_CALLBACK_DEF( void )
- ps_hinter_done( PS_Hinter_Module module )
- {
- module->t1_funcs.hints = NULL;
- module->t2_funcs.hints = NULL;
-
- ps_hints_done( &module->ps_hints );
- }
-
-
- /* initialize module, create hints recorder and the interface */
- FT_CALLBACK_DEF( FT_Error )
- ps_hinter_init( PS_Hinter_Module module )
- {
- FT_Memory memory = module->root.memory;
- void* ph = &module->ps_hints;
-
-
- ps_hints_init( &module->ps_hints, memory );
-
- psh_globals_funcs_init( &module->globals_funcs );
-
- t1_hints_funcs_init( &module->t1_funcs );
- module->t1_funcs.hints = (T1_Hints)ph;
-
- t2_hints_funcs_init( &module->t2_funcs );
- module->t2_funcs.hints = (T2_Hints)ph;
-
- return 0;
- }
-
-
- /* returns global hints interface */
- FT_CALLBACK_DEF( PSH_Globals_Funcs )
- pshinter_get_globals_funcs( FT_Module module )
- {
- return &((PS_Hinter_Module)module)->globals_funcs;
- }
-
-
- /* return Type 1 hints interface */
- FT_CALLBACK_DEF( T1_Hints_Funcs )
- pshinter_get_t1_funcs( FT_Module module )
- {
- return &((PS_Hinter_Module)module)->t1_funcs;
- }
-
-
- /* return Type 2 hints interface */
- FT_CALLBACK_DEF( T2_Hints_Funcs )
- pshinter_get_t2_funcs( FT_Module module )
- {
- return &((PS_Hinter_Module)module)->t2_funcs;
- }
-
-
- FT_DEFINE_PSHINTER_INTERFACE(
- pshinter_interface,
-
- pshinter_get_globals_funcs,
- pshinter_get_t1_funcs,
- pshinter_get_t2_funcs
- )
-
-
- FT_DEFINE_MODULE(
- pshinter_module_class,
-
- 0,
- sizeof ( PS_Hinter_ModuleRec ),
- "pshinter",
- 0x10000L,
- 0x20000L,
-
- &PSHINTER_INTERFACE_GET, /* module-specific interface */
-
- (FT_Module_Constructor)ps_hinter_init, /* module_init */
- (FT_Module_Destructor) ps_hinter_done, /* module_done */
- (FT_Module_Requester) NULL /* get_interface */
- )
-
-/* END */
diff --git a/src/pshinter/pshmod.h b/src/pshinter/pshmod.h
deleted file mode 100644
index 1d2b40fa1..000000000
--- a/src/pshinter/pshmod.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshmod.h */
-/* */
-/* PostScript hinter module interface (specification). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PSHMOD_H_
-#define PSHMOD_H_
-
-
-#include <ft2build.h>
-#include FT_MODULE_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_DECLARE_MODULE( pshinter_module_class )
-
-
-FT_END_HEADER
-
-
-#endif /* PSHMOD_H_ */
-
-
-/* END */
diff --git a/src/pshinter/pshnterr.h b/src/pshinter/pshnterr.h
deleted file mode 100644
index 73d144e34..000000000
--- a/src/pshinter/pshnterr.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshnterr.h */
-/* */
-/* PS Hinter error codes (specification only). */
-/* */
-/* Copyright 2003-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the PSHinter error enumeration constants. */
- /* */
- /*************************************************************************/
-
-#ifndef PSHNTERR_H_
-#define PSHNTERR_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX PSH_Err_
-#define FT_ERR_BASE FT_Mod_Err_PShinter
-
-#include FT_ERRORS_H
-
-#endif /* PSHNTERR_H_ */
-
-
-/* END */
diff --git a/src/pshinter/pshpic.c b/src/pshinter/pshpic.c
deleted file mode 100644
index c0d3a64f2..000000000
--- a/src/pshinter/pshpic.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshpic.c */
-/* */
-/* The FreeType position independent code services for pshinter module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "pshpic.h"
-#include "pshnterr.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from pshmod.c */
- void
- FT_Init_Class_pshinter_interface( FT_Library library,
- PSHinter_Interface* clazz );
-
- void
- pshinter_module_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->pshinter )
- {
- FT_FREE( pic_container->pshinter );
- pic_container->pshinter = NULL;
- }
- }
-
-
- FT_Error
- pshinter_module_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- PSHinterPIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->pshinter = container;
-
- /* add call to initialization function when you add new scripts */
- FT_Init_Class_pshinter_interface(
- library, &container->pshinter_interface );
-
- if ( error )
- pshinter_module_class_pic_free( library );
-
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/pshinter/pshpic.h b/src/pshinter/pshpic.h
deleted file mode 100644
index 8d9a01c9c..000000000
--- a/src/pshinter/pshpic.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshpic.h */
-/* */
-/* The FreeType position independent code services for pshinter module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PSHPIC_H_
-#define PSHPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define PSHINTER_INTERFACE_GET pshinter_interface
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-
-FT_BEGIN_HEADER
-
- typedef struct PSHinterPIC_
- {
- PSHinter_Interface pshinter_interface;
-
- } PSHinterPIC;
-
-
-#define GET_PIC( lib ) ( (PSHinterPIC*)( (lib)->pic_container.pshinter ) )
-
-#define PSHINTER_INTERFACE_GET ( GET_PIC( library )->pshinter_interface )
-
- /* see pshpic.c for the implementation */
- void
- pshinter_module_class_pic_free( FT_Library library );
-
- FT_Error
- pshinter_module_class_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* PSHPIC_H_ */
-
-
-/* END */
diff --git a/src/pshinter/pshrec.c b/src/pshinter/pshrec.c
deleted file mode 100644
index fff6d3425..000000000
--- a/src/pshinter/pshrec.c
+++ /dev/null
@@ -1,1220 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshrec.c */
-/* */
-/* FreeType PostScript hints recorder (body). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-
-#include "pshrec.h"
-#include "pshalgo.h"
-
-#include "pshnterr.h"
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_pshrec
-
-#ifdef DEBUG_HINTER
- PS_Hints ps_debug_hints = NULL;
- int ps_debug_no_horz_hints = 0;
- int ps_debug_no_vert_hints = 0;
-#endif
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** PS_HINT MANAGEMENT *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* destroy hints table */
- static void
- ps_hint_table_done( PS_Hint_Table table,
- FT_Memory memory )
- {
- FT_FREE( table->hints );
- table->num_hints = 0;
- table->max_hints = 0;
- }
-
-
- /* ensure that a table can contain "count" elements */
- static FT_Error
- ps_hint_table_ensure( PS_Hint_Table table,
- FT_UInt count,
- FT_Memory memory )
- {
- FT_UInt old_max = table->max_hints;
- FT_UInt new_max = count;
- FT_Error error = FT_Err_Ok;
-
-
- if ( new_max > old_max )
- {
- /* try to grow the table */
- new_max = FT_PAD_CEIL( new_max, 8 );
- if ( !FT_RENEW_ARRAY( table->hints, old_max, new_max ) )
- table->max_hints = new_max;
- }
- return error;
- }
-
-
- static FT_Error
- ps_hint_table_alloc( PS_Hint_Table table,
- FT_Memory memory,
- PS_Hint *ahint )
- {
- FT_Error error = FT_Err_Ok;
- FT_UInt count;
- PS_Hint hint = NULL;
-
-
- count = table->num_hints;
- count++;
-
- if ( count >= table->max_hints )
- {
- error = ps_hint_table_ensure( table, count, memory );
- if ( error )
- goto Exit;
- }
-
- hint = table->hints + count - 1;
- hint->pos = 0;
- hint->len = 0;
- hint->flags = 0;
-
- table->num_hints = count;
-
- Exit:
- *ahint = hint;
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** PS_MASK MANAGEMENT *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* destroy mask */
- static void
- ps_mask_done( PS_Mask mask,
- FT_Memory memory )
- {
- FT_FREE( mask->bytes );
- mask->num_bits = 0;
- mask->max_bits = 0;
- mask->end_point = 0;
- }
-
-
- /* ensure that a mask can contain "count" bits */
- static FT_Error
- ps_mask_ensure( PS_Mask mask,
- FT_UInt count,
- FT_Memory memory )
- {
- FT_UInt old_max = ( mask->max_bits + 7 ) >> 3;
- FT_UInt new_max = ( count + 7 ) >> 3;
- FT_Error error = FT_Err_Ok;
-
-
- if ( new_max > old_max )
- {
- new_max = FT_PAD_CEIL( new_max, 8 );
- if ( !FT_RENEW_ARRAY( mask->bytes, old_max, new_max ) )
- mask->max_bits = new_max * 8;
- }
- return error;
- }
-
-
- /* test a bit value in a given mask */
- static FT_Int
- ps_mask_test_bit( PS_Mask mask,
- FT_Int idx )
- {
- if ( (FT_UInt)idx >= mask->num_bits )
- return 0;
-
- return mask->bytes[idx >> 3] & ( 0x80 >> ( idx & 7 ) );
- }
-
-
- /* clear a given bit */
- static void
- ps_mask_clear_bit( PS_Mask mask,
- FT_UInt idx )
- {
- FT_Byte* p;
-
-
- if ( idx >= mask->num_bits )
- return;
-
- p = mask->bytes + ( idx >> 3 );
- p[0] = (FT_Byte)( p[0] & ~( 0x80 >> ( idx & 7 ) ) );
- }
-
-
- /* set a given bit, possibly grow the mask */
- static FT_Error
- ps_mask_set_bit( PS_Mask mask,
- FT_UInt idx,
- FT_Memory memory )
- {
- FT_Error error = FT_Err_Ok;
- FT_Byte* p;
-
-
- if ( idx >= mask->num_bits )
- {
- error = ps_mask_ensure( mask, idx + 1, memory );
- if ( error )
- goto Exit;
-
- mask->num_bits = idx + 1;
- }
-
- p = mask->bytes + ( idx >> 3 );
- p[0] = (FT_Byte)( p[0] | ( 0x80 >> ( idx & 7 ) ) );
-
- Exit:
- return error;
- }
-
-
- /* destroy mask table */
- static void
- ps_mask_table_done( PS_Mask_Table table,
- FT_Memory memory )
- {
- FT_UInt count = table->max_masks;
- PS_Mask mask = table->masks;
-
-
- for ( ; count > 0; count--, mask++ )
- ps_mask_done( mask, memory );
-
- FT_FREE( table->masks );
- table->num_masks = 0;
- table->max_masks = 0;
- }
-
-
- /* ensure that a mask table can contain "count" masks */
- static FT_Error
- ps_mask_table_ensure( PS_Mask_Table table,
- FT_UInt count,
- FT_Memory memory )
- {
- FT_UInt old_max = table->max_masks;
- FT_UInt new_max = count;
- FT_Error error = FT_Err_Ok;
-
-
- if ( new_max > old_max )
- {
- new_max = FT_PAD_CEIL( new_max, 8 );
- if ( !FT_RENEW_ARRAY( table->masks, old_max, new_max ) )
- table->max_masks = new_max;
- }
- return error;
- }
-
-
- /* allocate a new mask in a table */
- static FT_Error
- ps_mask_table_alloc( PS_Mask_Table table,
- FT_Memory memory,
- PS_Mask *amask )
- {
- FT_UInt count;
- FT_Error error = FT_Err_Ok;
- PS_Mask mask = NULL;
-
-
- count = table->num_masks;
- count++;
-
- if ( count > table->max_masks )
- {
- error = ps_mask_table_ensure( table, count, memory );
- if ( error )
- goto Exit;
- }
-
- mask = table->masks + count - 1;
- mask->num_bits = 0;
- mask->end_point = 0;
- table->num_masks = count;
-
- Exit:
- *amask = mask;
- return error;
- }
-
-
- /* return last hint mask in a table, create one if the table is empty */
- static FT_Error
- ps_mask_table_last( PS_Mask_Table table,
- FT_Memory memory,
- PS_Mask *amask )
- {
- FT_Error error = FT_Err_Ok;
- FT_UInt count;
- PS_Mask mask;
-
-
- count = table->num_masks;
- if ( count == 0 )
- {
- error = ps_mask_table_alloc( table, memory, &mask );
- if ( error )
- goto Exit;
- }
- else
- mask = table->masks + count - 1;
-
- Exit:
- *amask = mask;
- return error;
- }
-
-
- /* set a new mask to a given bit range */
- static FT_Error
- ps_mask_table_set_bits( PS_Mask_Table table,
- const FT_Byte* source,
- FT_UInt bit_pos,
- FT_UInt bit_count,
- FT_Memory memory )
- {
- FT_Error error;
- PS_Mask mask;
-
-
- error = ps_mask_table_last( table, memory, &mask );
- if ( error )
- goto Exit;
-
- error = ps_mask_ensure( mask, bit_count, memory );
- if ( error )
- goto Exit;
-
- mask->num_bits = bit_count;
-
- /* now, copy bits */
- {
- FT_Byte* read = (FT_Byte*)source + ( bit_pos >> 3 );
- FT_Int rmask = 0x80 >> ( bit_pos & 7 );
- FT_Byte* write = mask->bytes;
- FT_Int wmask = 0x80;
- FT_Int val;
-
-
- for ( ; bit_count > 0; bit_count-- )
- {
- val = write[0] & ~wmask;
-
- if ( read[0] & rmask )
- val |= wmask;
-
- write[0] = (FT_Byte)val;
-
- rmask >>= 1;
- if ( rmask == 0 )
- {
- read++;
- rmask = 0x80;
- }
-
- wmask >>= 1;
- if ( wmask == 0 )
- {
- write++;
- wmask = 0x80;
- }
- }
- }
-
- Exit:
- return error;
- }
-
-
- /* test whether two masks in a table intersect */
- static FT_Int
- ps_mask_table_test_intersect( PS_Mask_Table table,
- FT_UInt index1,
- FT_UInt index2 )
- {
- PS_Mask mask1 = table->masks + index1;
- PS_Mask mask2 = table->masks + index2;
- FT_Byte* p1 = mask1->bytes;
- FT_Byte* p2 = mask2->bytes;
- FT_UInt count1 = mask1->num_bits;
- FT_UInt count2 = mask2->num_bits;
- FT_UInt count;
-
-
- count = FT_MIN( count1, count2 );
- for ( ; count >= 8; count -= 8 )
- {
- if ( p1[0] & p2[0] )
- return 1;
-
- p1++;
- p2++;
- }
-
- if ( count == 0 )
- return 0;
-
- return ( p1[0] & p2[0] ) & ~( 0xFF >> count );
- }
-
-
- /* merge two masks, used by ps_mask_table_merge_all */
- static FT_Error
- ps_mask_table_merge( PS_Mask_Table table,
- FT_UInt index1,
- FT_UInt index2,
- FT_Memory memory )
- {
- FT_Error error = FT_Err_Ok;
-
-
- /* swap index1 and index2 so that index1 < index2 */
- if ( index1 > index2 )
- {
- FT_UInt temp;
-
-
- temp = index1;
- index1 = index2;
- index2 = temp;
- }
-
- if ( index1 < index2 && index2 < table->num_masks )
- {
- /* we need to merge the bitsets of index1 and index2 with a */
- /* simple union */
- PS_Mask mask1 = table->masks + index1;
- PS_Mask mask2 = table->masks + index2;
- FT_UInt count1 = mask1->num_bits;
- FT_UInt count2 = mask2->num_bits;
- FT_Int delta;
-
-
- if ( count2 > 0 )
- {
- FT_UInt pos;
- FT_Byte* read;
- FT_Byte* write;
-
-
- /* if "count2" is greater than "count1", we need to grow the */
- /* first bitset, and clear the highest bits */
- if ( count2 > count1 )
- {
- error = ps_mask_ensure( mask1, count2, memory );
- if ( error )
- goto Exit;
-
- for ( pos = count1; pos < count2; pos++ )
- ps_mask_clear_bit( mask1, pos );
- }
-
- /* merge (unite) the bitsets */
- read = mask2->bytes;
- write = mask1->bytes;
- pos = ( count2 + 7 ) >> 3;
-
- for ( ; pos > 0; pos-- )
- {
- write[0] = (FT_Byte)( write[0] | read[0] );
- write++;
- read++;
- }
- }
-
- /* Now, remove "mask2" from the list. We need to keep the masks */
- /* sorted in order of importance, so move table elements. */
- mask2->num_bits = 0;
- mask2->end_point = 0;
-
- /* number of masks to move */
- delta = (FT_Int)( table->num_masks - 1 - index2 );
- if ( delta > 0 )
- {
- /* move to end of table for reuse */
- PS_MaskRec dummy = *mask2;
-
-
- ft_memmove( mask2,
- mask2 + 1,
- (FT_UInt)delta * sizeof ( PS_MaskRec ) );
-
- mask2[delta] = dummy;
- }
-
- table->num_masks--;
- }
- else
- FT_TRACE0(( "ps_mask_table_merge: ignoring invalid indices (%d,%d)\n",
- index1, index2 ));
-
- Exit:
- return error;
- }
-
-
- /* Try to merge all masks in a given table. This is used to merge */
- /* all counter masks into independent counter "paths". */
- /* */
- static FT_Error
- ps_mask_table_merge_all( PS_Mask_Table table,
- FT_Memory memory )
- {
- FT_Int index1, index2;
- FT_Error error = FT_Err_Ok;
-
-
- /* both loops go down to 0, thus FT_Int for index1 and index2 */
- for ( index1 = (FT_Int)table->num_masks - 1; index1 > 0; index1-- )
- {
- for ( index2 = index1 - 1; index2 >= 0; index2-- )
- {
- if ( ps_mask_table_test_intersect( table,
- (FT_UInt)index1,
- (FT_UInt)index2 ) )
- {
- error = ps_mask_table_merge( table,
- (FT_UInt)index2,
- (FT_UInt)index1,
- memory );
- if ( error )
- goto Exit;
-
- break;
- }
- }
- }
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** PS_DIMENSION MANAGEMENT *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* finalize a given dimension */
- static void
- ps_dimension_done( PS_Dimension dimension,
- FT_Memory memory )
- {
- ps_mask_table_done( &dimension->counters, memory );
- ps_mask_table_done( &dimension->masks, memory );
- ps_hint_table_done( &dimension->hints, memory );
- }
-
-
- /* initialize a given dimension */
- static void
- ps_dimension_init( PS_Dimension dimension )
- {
- dimension->hints.num_hints = 0;
- dimension->masks.num_masks = 0;
- dimension->counters.num_masks = 0;
- }
-
-
-#if 0
-
- /* set a bit at a given index in the current hint mask */
- static FT_Error
- ps_dimension_set_mask_bit( PS_Dimension dim,
- FT_UInt idx,
- FT_Memory memory )
- {
- PS_Mask mask;
- FT_Error error = FT_Err_Ok;
-
-
- /* get last hint mask */
- error = ps_mask_table_last( &dim->masks, memory, &mask );
- if ( error )
- goto Exit;
-
- error = ps_mask_set_bit( mask, idx, memory );
-
- Exit:
- return error;
- }
-
-#endif
-
- /* set the end point in a mask, called from "End" & "Reset" methods */
- static void
- ps_dimension_end_mask( PS_Dimension dim,
- FT_UInt end_point )
- {
- FT_UInt count = dim->masks.num_masks;
-
-
- if ( count > 0 )
- {
- PS_Mask mask = dim->masks.masks + count - 1;
-
-
- mask->end_point = end_point;
- }
- }
-
-
- /* set the end point in the current mask, then create a new empty one */
- /* (called by "Reset" method) */
- static FT_Error
- ps_dimension_reset_mask( PS_Dimension dim,
- FT_UInt end_point,
- FT_Memory memory )
- {
- PS_Mask mask;
-
-
- /* end current mask */
- ps_dimension_end_mask( dim, end_point );
-
- /* allocate new one */
- return ps_mask_table_alloc( &dim->masks, memory, &mask );
- }
-
-
- /* set a new mask, called from the "T2Stem" method */
- static FT_Error
- ps_dimension_set_mask_bits( PS_Dimension dim,
- const FT_Byte* source,
- FT_UInt source_pos,
- FT_UInt source_bits,
- FT_UInt end_point,
- FT_Memory memory )
- {
- FT_Error error;
-
-
- /* reset current mask, if any */
- error = ps_dimension_reset_mask( dim, end_point, memory );
- if ( error )
- goto Exit;
-
- /* set bits in new mask */
- error = ps_mask_table_set_bits( &dim->masks, source,
- source_pos, source_bits, memory );
-
- Exit:
- return error;
- }
-
-
- /* add a new single stem (called from "T1Stem" method) */
- static FT_Error
- ps_dimension_add_t1stem( PS_Dimension dim,
- FT_Int pos,
- FT_Int len,
- FT_Memory memory,
- FT_Int *aindex )
- {
- FT_Error error = FT_Err_Ok;
- FT_UInt flags = 0;
-
-
- /* detect ghost stem */
- if ( len < 0 )
- {
- flags |= PS_HINT_FLAG_GHOST;
- if ( len == -21 )
- {
- flags |= PS_HINT_FLAG_BOTTOM;
- pos += len;
- }
- len = 0;
- }
-
- if ( aindex )
- *aindex = -1;
-
- /* now, lookup stem in the current hints table */
- {
- PS_Mask mask;
- FT_UInt idx;
- FT_UInt max = dim->hints.num_hints;
- PS_Hint hint = dim->hints.hints;
-
-
- for ( idx = 0; idx < max; idx++, hint++ )
- {
- if ( hint->pos == pos && hint->len == len )
- break;
- }
-
- /* we need to create a new hint in the table */
- if ( idx >= max )
- {
- error = ps_hint_table_alloc( &dim->hints, memory, &hint );
- if ( error )
- goto Exit;
-
- hint->pos = pos;
- hint->len = len;
- hint->flags = flags;
- }
-
- /* now, store the hint in the current mask */
- error = ps_mask_table_last( &dim->masks, memory, &mask );
- if ( error )
- goto Exit;
-
- error = ps_mask_set_bit( mask, idx, memory );
- if ( error )
- goto Exit;
-
- if ( aindex )
- *aindex = (FT_Int)idx;
- }
-
- Exit:
- return error;
- }
-
-
- /* add a "hstem3/vstem3" counter to our dimension table */
- static FT_Error
- ps_dimension_add_counter( PS_Dimension dim,
- FT_Int hint1,
- FT_Int hint2,
- FT_Int hint3,
- FT_Memory memory )
- {
- FT_Error error = FT_Err_Ok;
- FT_UInt count = dim->counters.num_masks;
- PS_Mask counter = dim->counters.masks;
-
-
- /* try to find an existing counter mask that already uses */
- /* one of these stems here */
- for ( ; count > 0; count--, counter++ )
- {
- if ( ps_mask_test_bit( counter, hint1 ) ||
- ps_mask_test_bit( counter, hint2 ) ||
- ps_mask_test_bit( counter, hint3 ) )
- break;
- }
-
- /* create a new counter when needed */
- if ( count == 0 )
- {
- error = ps_mask_table_alloc( &dim->counters, memory, &counter );
- if ( error )
- goto Exit;
- }
-
- /* now, set the bits for our hints in the counter mask */
- if ( hint1 >= 0 )
- {
- error = ps_mask_set_bit( counter, (FT_UInt)hint1, memory );
- if ( error )
- goto Exit;
- }
-
- if ( hint2 >= 0 )
- {
- error = ps_mask_set_bit( counter, (FT_UInt)hint2, memory );
- if ( error )
- goto Exit;
- }
-
- if ( hint3 >= 0 )
- {
- error = ps_mask_set_bit( counter, (FT_UInt)hint3, memory );
- if ( error )
- goto Exit;
- }
-
- Exit:
- return error;
- }
-
-
- /* end of recording session for a given dimension */
- static FT_Error
- ps_dimension_end( PS_Dimension dim,
- FT_UInt end_point,
- FT_Memory memory )
- {
- /* end hint mask table */
- ps_dimension_end_mask( dim, end_point );
-
- /* merge all counter masks into independent "paths" */
- return ps_mask_table_merge_all( &dim->counters, memory );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** PS_RECORDER MANAGEMENT *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* destroy hints */
- FT_LOCAL( void )
- ps_hints_done( PS_Hints hints )
- {
- FT_Memory memory = hints->memory;
-
-
- ps_dimension_done( &hints->dimension[0], memory );
- ps_dimension_done( &hints->dimension[1], memory );
-
- hints->error = FT_Err_Ok;
- hints->memory = NULL;
- }
-
-
- FT_LOCAL( void )
- ps_hints_init( PS_Hints hints,
- FT_Memory memory )
- {
- FT_ZERO( hints );
- hints->memory = memory;
- }
-
-
- /* initialize a hints for a new session */
- static void
- ps_hints_open( PS_Hints hints,
- PS_Hint_Type hint_type )
- {
- hints->error = FT_Err_Ok;
- hints->hint_type = hint_type;
-
- ps_dimension_init( &hints->dimension[0] );
- ps_dimension_init( &hints->dimension[1] );
- }
-
-
- /* add one or more stems to the current hints table */
- static void
- ps_hints_stem( PS_Hints hints,
- FT_UInt dimension,
- FT_Int count,
- FT_Long* stems )
- {
- PS_Dimension dim;
-
-
- if ( hints->error )
- return;
-
- /* limit "dimension" to 0..1 */
- if ( dimension > 1 )
- {
- FT_TRACE0(( "ps_hints_stem: invalid dimension (%d) used\n",
- dimension ));
- dimension = ( dimension != 0 );
- }
-
- /* record the stems in the current hints/masks table */
- /* (Type 1 & 2's `hstem' or `vstem' operators) */
- dim = &hints->dimension[dimension];
-
- for ( ; count > 0; count--, stems += 2 )
- {
- FT_Error error;
- FT_Memory memory = hints->memory;
-
-
- error = ps_dimension_add_t1stem( dim,
- (FT_Int)stems[0],
- (FT_Int)stems[1],
- memory,
- NULL );
- if ( error )
- {
- FT_ERROR(( "ps_hints_stem: could not add stem"
- " (%d,%d) to hints table\n", stems[0], stems[1] ));
-
- hints->error = error;
- return;
- }
- }
- }
-
-
- /* add one Type1 counter stem to the current hints table */
- static void
- ps_hints_t1stem3( PS_Hints hints,
- FT_UInt dimension,
- FT_Fixed* stems )
- {
- FT_Error error = FT_Err_Ok;
-
-
- if ( !hints->error )
- {
- PS_Dimension dim;
- FT_Memory memory = hints->memory;
- FT_Int count;
- FT_Int idx[3];
-
-
- /* limit "dimension" to 0..1 */
- if ( dimension > 1 )
- {
- FT_TRACE0(( "ps_hints_t1stem3: invalid dimension (%d) used\n",
- dimension ));
- dimension = ( dimension != 0 );
- }
-
- dim = &hints->dimension[dimension];
-
- /* there must be 6 elements in the 'stem' array */
- if ( hints->hint_type == PS_HINT_TYPE_1 )
- {
- /* add the three stems to our hints/masks table */
- for ( count = 0; count < 3; count++, stems += 2 )
- {
- error = ps_dimension_add_t1stem( dim,
- (FT_Int)FIXED_TO_INT( stems[0] ),
- (FT_Int)FIXED_TO_INT( stems[1] ),
- memory, &idx[count] );
- if ( error )
- goto Fail;
- }
-
- /* now, add the hints to the counters table */
- error = ps_dimension_add_counter( dim, idx[0], idx[1], idx[2],
- memory );
- if ( error )
- goto Fail;
- }
- else
- {
- FT_ERROR(( "ps_hints_t1stem3: called with invalid hint type\n" ));
- error = FT_THROW( Invalid_Argument );
- goto Fail;
- }
- }
-
- return;
-
- Fail:
- FT_ERROR(( "ps_hints_t1stem3: could not add counter stems to table\n" ));
- hints->error = error;
- }
-
-
- /* reset hints (only with Type 1 hints) */
- static void
- ps_hints_t1reset( PS_Hints hints,
- FT_UInt end_point )
- {
- FT_Error error = FT_Err_Ok;
-
-
- if ( !hints->error )
- {
- FT_Memory memory = hints->memory;
-
-
- if ( hints->hint_type == PS_HINT_TYPE_1 )
- {
- error = ps_dimension_reset_mask( &hints->dimension[0],
- end_point, memory );
- if ( error )
- goto Fail;
-
- error = ps_dimension_reset_mask( &hints->dimension[1],
- end_point, memory );
- if ( error )
- goto Fail;
- }
- else
- {
- /* invalid hint type */
- error = FT_THROW( Invalid_Argument );
- goto Fail;
- }
- }
- return;
-
- Fail:
- hints->error = error;
- }
-
-
- /* Type2 "hintmask" operator, add a new hintmask to each direction */
- static void
- ps_hints_t2mask( PS_Hints hints,
- FT_UInt end_point,
- FT_UInt bit_count,
- const FT_Byte* bytes )
- {
- FT_Error error;
-
-
- if ( !hints->error )
- {
- PS_Dimension dim = hints->dimension;
- FT_Memory memory = hints->memory;
- FT_UInt count1 = dim[0].hints.num_hints;
- FT_UInt count2 = dim[1].hints.num_hints;
-
-
- /* check bit count; must be equal to current total hint count */
- if ( bit_count != count1 + count2 )
- {
- FT_TRACE0(( "ps_hints_t2mask:"
- " called with invalid bitcount %d (instead of %d)\n",
- bit_count, count1 + count2 ));
-
- /* simply ignore the operator */
- return;
- }
-
- /* set-up new horizontal and vertical hint mask now */
- error = ps_dimension_set_mask_bits( &dim[0], bytes, count2, count1,
- end_point, memory );
- if ( error )
- goto Fail;
-
- error = ps_dimension_set_mask_bits( &dim[1], bytes, 0, count2,
- end_point, memory );
- if ( error )
- goto Fail;
- }
- return;
-
- Fail:
- hints->error = error;
- }
-
-
- static void
- ps_hints_t2counter( PS_Hints hints,
- FT_UInt bit_count,
- const FT_Byte* bytes )
- {
- FT_Error error;
-
-
- if ( !hints->error )
- {
- PS_Dimension dim = hints->dimension;
- FT_Memory memory = hints->memory;
- FT_UInt count1 = dim[0].hints.num_hints;
- FT_UInt count2 = dim[1].hints.num_hints;
-
-
- /* check bit count, must be equal to current total hint count */
- if ( bit_count != count1 + count2 )
- {
- FT_TRACE0(( "ps_hints_t2counter:"
- " called with invalid bitcount %d (instead of %d)\n",
- bit_count, count1 + count2 ));
-
- /* simply ignore the operator */
- return;
- }
-
- /* set-up new horizontal and vertical hint mask now */
- error = ps_dimension_set_mask_bits( &dim[0], bytes, 0, count1,
- 0, memory );
- if ( error )
- goto Fail;
-
- error = ps_dimension_set_mask_bits( &dim[1], bytes, count1, count2,
- 0, memory );
- if ( error )
- goto Fail;
- }
- return;
-
- Fail:
- hints->error = error;
- }
-
-
- /* end recording session */
- static FT_Error
- ps_hints_close( PS_Hints hints,
- FT_UInt end_point )
- {
- FT_Error error;
-
-
- error = hints->error;
- if ( !error )
- {
- FT_Memory memory = hints->memory;
- PS_Dimension dim = hints->dimension;
-
-
- error = ps_dimension_end( &dim[0], end_point, memory );
- if ( !error )
- {
- error = ps_dimension_end( &dim[1], end_point, memory );
- }
- }
-
-#ifdef DEBUG_HINTER
- if ( !error )
- ps_debug_hints = hints;
-#endif
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** TYPE 1 HINTS RECORDING INTERFACE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- t1_hints_open( T1_Hints hints )
- {
- ps_hints_open( (PS_Hints)hints, PS_HINT_TYPE_1 );
- }
-
- static void
- t1_hints_stem( T1_Hints hints,
- FT_UInt dimension,
- FT_Fixed* coords )
- {
- FT_Pos stems[2];
-
-
- stems[0] = FIXED_TO_INT( coords[0] );
- stems[1] = FIXED_TO_INT( coords[1] );
-
- ps_hints_stem( (PS_Hints)hints, dimension, 1, stems );
- }
-
-
- FT_LOCAL_DEF( void )
- t1_hints_funcs_init( T1_Hints_FuncsRec* funcs )
- {
- FT_ZERO( funcs );
-
- funcs->open = (T1_Hints_OpenFunc) t1_hints_open;
- funcs->close = (T1_Hints_CloseFunc) ps_hints_close;
- funcs->stem = (T1_Hints_SetStemFunc) t1_hints_stem;
- funcs->stem3 = (T1_Hints_SetStem3Func)ps_hints_t1stem3;
- funcs->reset = (T1_Hints_ResetFunc) ps_hints_t1reset;
- funcs->apply = (T1_Hints_ApplyFunc) ps_hints_apply;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** TYPE 2 HINTS RECORDING INTERFACE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- t2_hints_open( T2_Hints hints )
- {
- ps_hints_open( (PS_Hints)hints, PS_HINT_TYPE_2 );
- }
-
-
- static void
- t2_hints_stems( T2_Hints hints,
- FT_UInt dimension,
- FT_Int count,
- FT_Fixed* coords )
- {
- FT_Pos stems[32], y;
- FT_Int total = count, n;
-
-
- y = 0;
- while ( total > 0 )
- {
- /* determine number of stems to write */
- count = total;
- if ( count > 16 )
- count = 16;
-
- /* compute integer stem positions in font units */
- for ( n = 0; n < count * 2; n++ )
- {
- y += coords[n];
- stems[n] = FIXED_TO_INT( y );
- }
-
- /* compute lengths */
- for ( n = 0; n < count * 2; n += 2 )
- stems[n + 1] = stems[n + 1] - stems[n];
-
- /* add them to the current dimension */
- ps_hints_stem( (PS_Hints)hints, dimension, count, stems );
-
- total -= count;
- }
- }
-
-
- FT_LOCAL_DEF( void )
- t2_hints_funcs_init( T2_Hints_FuncsRec* funcs )
- {
- FT_ZERO( funcs );
-
- funcs->open = (T2_Hints_OpenFunc) t2_hints_open;
- funcs->close = (T2_Hints_CloseFunc) ps_hints_close;
- funcs->stems = (T2_Hints_StemsFunc) t2_hints_stems;
- funcs->hintmask= (T2_Hints_MaskFunc) ps_hints_t2mask;
- funcs->counter = (T2_Hints_CounterFunc)ps_hints_t2counter;
- funcs->apply = (T2_Hints_ApplyFunc) ps_hints_apply;
- }
-
-
-/* END */
diff --git a/src/pshinter/pshrec.h b/src/pshinter/pshrec.h
deleted file mode 100644
index e10bc2b12..000000000
--- a/src/pshinter/pshrec.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshrec.h */
-/* */
-/* Postscript (Type1/Type2) hints recorder (specification). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /**************************************************************************/
- /* */
- /* The functions defined here are called from the Type 1, CID and CFF */
- /* font drivers to record the hints of a given character/glyph. */
- /* */
- /* The hints are recorded in a unified format, and are later processed */
- /* by the `optimizer' and `fitter' to adjust the outlines to the pixel */
- /* grid. */
- /* */
- /**************************************************************************/
-
-
-#ifndef PSHREC_H_
-#define PSHREC_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-#include "pshglob.h"
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GLYPH HINTS RECORDER INTERNALS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* handle to hint record */
- typedef struct PS_HintRec_* PS_Hint;
-
- /* hint types */
- typedef enum PS_Hint_Type_
- {
- PS_HINT_TYPE_1 = 1,
- PS_HINT_TYPE_2 = 2
-
- } PS_Hint_Type;
-
-
- /* hint flags */
-#define PS_HINT_FLAG_GHOST 1U
-#define PS_HINT_FLAG_BOTTOM 2U
-
-
- /* hint descriptor */
- typedef struct PS_HintRec_
- {
- FT_Int pos;
- FT_Int len;
- FT_UInt flags;
-
- } PS_HintRec;
-
-
-#define ps_hint_is_active( x ) ( (x)->flags & PS_HINT_FLAG_ACTIVE )
-#define ps_hint_is_ghost( x ) ( (x)->flags & PS_HINT_FLAG_GHOST )
-#define ps_hint_is_bottom( x ) ( (x)->flags & PS_HINT_FLAG_BOTTOM )
-
-
- /* hints table descriptor */
- typedef struct PS_Hint_TableRec_
- {
- FT_UInt num_hints;
- FT_UInt max_hints;
- PS_Hint hints;
-
- } PS_Hint_TableRec, *PS_Hint_Table;
-
-
- /* hint and counter mask descriptor */
- typedef struct PS_MaskRec_
- {
- FT_UInt num_bits;
- FT_UInt max_bits;
- FT_Byte* bytes;
- FT_UInt end_point;
-
- } PS_MaskRec, *PS_Mask;
-
-
- /* masks and counters table descriptor */
- typedef struct PS_Mask_TableRec_
- {
- FT_UInt num_masks;
- FT_UInt max_masks;
- PS_Mask masks;
-
- } PS_Mask_TableRec, *PS_Mask_Table;
-
-
- /* dimension-specific hints descriptor */
- typedef struct PS_DimensionRec_
- {
- PS_Hint_TableRec hints;
- PS_Mask_TableRec masks;
- PS_Mask_TableRec counters;
-
- } PS_DimensionRec, *PS_Dimension;
-
-
- /* glyph hints descriptor */
- /* dimension 0 => X coordinates + vertical hints/stems */
- /* dimension 1 => Y coordinates + horizontal hints/stems */
- typedef struct PS_HintsRec_
- {
- FT_Memory memory;
- FT_Error error;
- FT_UInt32 magic;
- PS_Hint_Type hint_type;
- PS_DimensionRec dimension[2];
-
- } PS_HintsRec, *PS_Hints;
-
- /* */
-
- /* initialize hints recorder */
- FT_LOCAL( void )
- ps_hints_init( PS_Hints hints,
- FT_Memory memory );
-
- /* finalize hints recorder */
- FT_LOCAL( void )
- ps_hints_done( PS_Hints hints );
-
- /* initialize Type1 hints recorder interface */
- FT_LOCAL( void )
- t1_hints_funcs_init( T1_Hints_FuncsRec* funcs );
-
- /* initialize Type2 hints recorder interface */
- FT_LOCAL( void )
- t2_hints_funcs_init( T2_Hints_FuncsRec* funcs );
-
-
-#ifdef DEBUG_HINTER
- extern PS_Hints ps_debug_hints;
- extern int ps_debug_no_horz_hints;
- extern int ps_debug_no_vert_hints;
-#endif
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* PSHREC_H_ */
-
-
-/* END */
diff --git a/src/pshinter/rules.mk b/src/pshinter/rules.mk
deleted file mode 100644
index 2be640438..000000000
--- a/src/pshinter/rules.mk
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# FreeType 2 PSHinter driver configuration rules
-#
-
-
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# PSHINTER driver directory
-#
-PSHINTER_DIR := $(SRC_DIR)/pshinter
-
-
-# compilation flags for the driver
-#
-PSHINTER_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(PSHINTER_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# PSHINTER driver sources (i.e., C files)
-#
-PSHINTER_DRV_SRC := $(PSHINTER_DIR)/pshalgo.c \
- $(PSHINTER_DIR)/pshglob.c \
- $(PSHINTER_DIR)/pshmod.c \
- $(PSHINTER_DIR)/pshpic.c \
- $(PSHINTER_DIR)/pshrec.c
-
-
-# PSHINTER driver headers
-#
-PSHINTER_DRV_H := $(PSHINTER_DRV_SRC:%c=%h) \
- $(PSHINTER_DIR)/pshnterr.h
-
-
-# PSHINTER driver object(s)
-#
-# PSHINTER_DRV_OBJ_M is used during `multi' builds.
-# PSHINTER_DRV_OBJ_S is used during `single' builds.
-#
-PSHINTER_DRV_OBJ_M := $(PSHINTER_DRV_SRC:$(PSHINTER_DIR)/%.c=$(OBJ_DIR)/%.$O)
-PSHINTER_DRV_OBJ_S := $(OBJ_DIR)/pshinter.$O
-
-# PSHINTER driver source file for single build
-#
-PSHINTER_DRV_SRC_S := $(PSHINTER_DIR)/pshinter.c
-
-
-# PSHINTER driver - single object
-#
-$(PSHINTER_DRV_OBJ_S): $(PSHINTER_DRV_SRC_S) $(PSHINTER_DRV_SRC) \
- $(FREETYPE_H) $(PSHINTER_DRV_H)
- $(PSHINTER_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(PSHINTER_DRV_SRC_S))
-
-
-# PSHINTER driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(PSHINTER_DIR)/%.c $(FREETYPE_H) $(PSHINTER_DRV_H)
- $(PSHINTER_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(PSHINTER_DRV_OBJ_S)
-DRV_OBJS_M += $(PSHINTER_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/psnames/Jamfile b/src/psnames/Jamfile
deleted file mode 100644
index 5a6e2c0bd..000000000
--- a/src/psnames/Jamfile
+++ /dev/null
@@ -1,31 +0,0 @@
-# FreeType 2 src/psnames Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) psnames ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = psmodule
- pspic
- ;
- }
- else
- {
- _sources = psnames ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/psnames Jamfile
diff --git a/src/psnames/module.mk b/src/psnames/module.mk
deleted file mode 100644
index ddd22960c..000000000
--- a/src/psnames/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 PSnames module definition
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += PSNAMES_MODULE
-
-define PSNAMES_MODULE
-$(OPEN_DRIVER) FT_Module_Class, psnames_module_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)psnames $(ECHO_DRIVER_DESC)Postscript & Unicode Glyph name handling$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/psnames/psmodule.c b/src/psnames/psmodule.c
deleted file mode 100644
index 3ff8cb911..000000000
--- a/src/psnames/psmodule.c
+++ /dev/null
@@ -1,619 +0,0 @@
-/***************************************************************************/
-/* */
-/* psmodule.c */
-/* */
-/* PSNames module implementation (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-
-#include "psmodule.h"
-
-#include "pstables.h"
-#define DEFINE_PS_TABLES
-#include "pstables.h"
-
-#include "psnamerr.h"
-#include "pspic.h"
-
-
-#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
-
-
-#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
-
-
-#define VARIANT_BIT 0x80000000UL
-#define BASE_GLYPH( code ) ( (FT_UInt32)( (code) & ~VARIANT_BIT ) )
-
-
- /* Return the Unicode value corresponding to a given glyph. Note that */
- /* we do deal with glyph variants by detecting a non-initial dot in */
- /* the name, as in `A.swash' or `e.final'; in this case, the */
- /* VARIANT_BIT is set in the return value. */
- /* */
- static FT_UInt32
- ps_unicode_value( const char* glyph_name )
- {
- /* If the name begins with `uni', then the glyph name may be a */
- /* hard-coded unicode character code. */
- if ( glyph_name[0] == 'u' &&
- glyph_name[1] == 'n' &&
- glyph_name[2] == 'i' )
- {
- /* determine whether the next four characters following are */
- /* hexadecimal. */
-
- /* XXX: Add code to deal with ligatures, i.e. glyph names like */
- /* `uniXXXXYYYYZZZZ'... */
-
- FT_Int count;
- FT_UInt32 value = 0;
- const char* p = glyph_name + 3;
-
-
- for ( count = 4; count > 0; count--, p++ )
- {
- char c = *p;
- unsigned int d;
-
-
- d = (unsigned char)c - '0';
- if ( d >= 10 )
- {
- d = (unsigned char)c - 'A';
- if ( d >= 6 )
- d = 16;
- else
- d += 10;
- }
-
- /* Exit if a non-uppercase hexadecimal character was found */
- /* -- this also catches character codes below `0' since such */
- /* negative numbers cast to `unsigned int' are far too big. */
- if ( d >= 16 )
- break;
-
- value = ( value << 4 ) + d;
- }
-
- /* there must be exactly four hex digits */
- if ( count == 0 )
- {
- if ( *p == '\0' )
- return value;
- if ( *p == '.' )
- return (FT_UInt32)( value | VARIANT_BIT );
- }
- }
-
- /* If the name begins with `u', followed by four to six uppercase */
- /* hexadecimal digits, it is a hard-coded unicode character code. */
- if ( glyph_name[0] == 'u' )
- {
- FT_Int count;
- FT_UInt32 value = 0;
- const char* p = glyph_name + 1;
-
-
- for ( count = 6; count > 0; count--, p++ )
- {
- char c = *p;
- unsigned int d;
-
-
- d = (unsigned char)c - '0';
- if ( d >= 10 )
- {
- d = (unsigned char)c - 'A';
- if ( d >= 6 )
- d = 16;
- else
- d += 10;
- }
-
- if ( d >= 16 )
- break;
-
- value = ( value << 4 ) + d;
- }
-
- if ( count <= 2 )
- {
- if ( *p == '\0' )
- return value;
- if ( *p == '.' )
- return (FT_UInt32)( value | VARIANT_BIT );
- }
- }
-
- /* Look for a non-initial dot in the glyph name in order to */
- /* find variants like `A.swash', `e.final', etc. */
- {
- const char* p = glyph_name;
- const char* dot = NULL;
-
-
- for ( ; *p; p++ )
- {
- if ( *p == '.' && p > glyph_name )
- {
- dot = p;
- break;
- }
- }
-
- /* now look up the glyph in the Adobe Glyph List */
- if ( !dot )
- return (FT_UInt32)ft_get_adobe_glyph_index( glyph_name, p );
- else
- return (FT_UInt32)( ft_get_adobe_glyph_index( glyph_name, dot ) |
- VARIANT_BIT );
- }
- }
-
-
- /* ft_qsort callback to sort the unicode map */
- FT_CALLBACK_DEF( int )
- compare_uni_maps( const void* a,
- const void* b )
- {
- PS_UniMap* map1 = (PS_UniMap*)a;
- PS_UniMap* map2 = (PS_UniMap*)b;
- FT_UInt32 unicode1 = BASE_GLYPH( map1->unicode );
- FT_UInt32 unicode2 = BASE_GLYPH( map2->unicode );
-
-
- /* sort base glyphs before glyph variants */
- if ( unicode1 == unicode2 )
- {
- if ( map1->unicode > map2->unicode )
- return 1;
- else if ( map1->unicode < map2->unicode )
- return -1;
- else
- return 0;
- }
- else
- {
- if ( unicode1 > unicode2 )
- return 1;
- else if ( unicode1 < unicode2 )
- return -1;
- else
- return 0;
- }
- }
-
-
- /* support for extra glyphs not handled (well) in AGL; */
- /* we add extra mappings for them if necessary */
-
-#define EXTRA_GLYPH_LIST_SIZE 10
-
- static const FT_UInt32 ft_extra_glyph_unicodes[EXTRA_GLYPH_LIST_SIZE] =
- {
- /* WGL 4 */
- 0x0394,
- 0x03A9,
- 0x2215,
- 0x00AD,
- 0x02C9,
- 0x03BC,
- 0x2219,
- 0x00A0,
- /* Romanian */
- 0x021A,
- 0x021B
- };
-
- static const char ft_extra_glyph_names[] =
- {
- 'D','e','l','t','a',0,
- 'O','m','e','g','a',0,
- 'f','r','a','c','t','i','o','n',0,
- 'h','y','p','h','e','n',0,
- 'm','a','c','r','o','n',0,
- 'm','u',0,
- 'p','e','r','i','o','d','c','e','n','t','e','r','e','d',0,
- 's','p','a','c','e',0,
- 'T','c','o','m','m','a','a','c','c','e','n','t',0,
- 't','c','o','m','m','a','a','c','c','e','n','t',0
- };
-
- static const FT_Int
- ft_extra_glyph_name_offsets[EXTRA_GLYPH_LIST_SIZE] =
- {
- 0,
- 6,
- 12,
- 21,
- 28,
- 35,
- 38,
- 53,
- 59,
- 72
- };
-
-
- static void
- ps_check_extra_glyph_name( const char* gname,
- FT_UInt glyph,
- FT_UInt* extra_glyphs,
- FT_UInt *states )
- {
- FT_UInt n;
-
-
- for ( n = 0; n < EXTRA_GLYPH_LIST_SIZE; n++ )
- {
- if ( ft_strcmp( ft_extra_glyph_names +
- ft_extra_glyph_name_offsets[n], gname ) == 0 )
- {
- if ( states[n] == 0 )
- {
- /* mark this extra glyph as a candidate for the cmap */
- states[n] = 1;
- extra_glyphs[n] = glyph;
- }
-
- return;
- }
- }
- }
-
-
- static void
- ps_check_extra_glyph_unicode( FT_UInt32 uni_char,
- FT_UInt *states )
- {
- FT_UInt n;
-
-
- for ( n = 0; n < EXTRA_GLYPH_LIST_SIZE; n++ )
- {
- if ( uni_char == ft_extra_glyph_unicodes[n] )
- {
- /* disable this extra glyph from being added to the cmap */
- states[n] = 2;
-
- return;
- }
- }
- }
-
-
- /* Build a table that maps Unicode values to glyph indices. */
- static FT_Error
- ps_unicodes_init( FT_Memory memory,
- PS_Unicodes table,
- FT_UInt num_glyphs,
- PS_GetGlyphNameFunc get_glyph_name,
- PS_FreeGlyphNameFunc free_glyph_name,
- FT_Pointer glyph_data )
- {
- FT_Error error;
-
- FT_UInt extra_glyph_list_states[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- FT_UInt extra_glyphs[EXTRA_GLYPH_LIST_SIZE];
-
-
- /* we first allocate the table */
- table->num_maps = 0;
- table->maps = NULL;
-
- if ( !FT_NEW_ARRAY( table->maps, num_glyphs + EXTRA_GLYPH_LIST_SIZE ) )
- {
- FT_UInt n;
- FT_UInt count;
- PS_UniMap* map;
- FT_UInt32 uni_char;
-
-
- map = table->maps;
-
- for ( n = 0; n < num_glyphs; n++ )
- {
- const char* gname = get_glyph_name( glyph_data, n );
-
-
- if ( gname )
- {
- ps_check_extra_glyph_name( gname, n,
- extra_glyphs, extra_glyph_list_states );
- uni_char = ps_unicode_value( gname );
-
- if ( BASE_GLYPH( uni_char ) != 0 )
- {
- ps_check_extra_glyph_unicode( uni_char,
- extra_glyph_list_states );
- map->unicode = uni_char;
- map->glyph_index = n;
- map++;
- }
-
- if ( free_glyph_name )
- free_glyph_name( glyph_data, gname );
- }
- }
-
- for ( n = 0; n < EXTRA_GLYPH_LIST_SIZE; n++ )
- {
- if ( extra_glyph_list_states[n] == 1 )
- {
- /* This glyph name has an additional representation. */
- /* Add it to the cmap. */
-
- map->unicode = ft_extra_glyph_unicodes[n];
- map->glyph_index = extra_glyphs[n];
- map++;
- }
- }
-
- /* now compress the table a bit */
- count = (FT_UInt)( map - table->maps );
-
- if ( count == 0 )
- {
- /* No unicode chars here! */
- FT_FREE( table->maps );
- if ( !error )
- error = FT_THROW( No_Unicode_Glyph_Name );
- }
- else
- {
- /* Reallocate if the number of used entries is much smaller. */
- if ( count < num_glyphs / 2 )
- {
- (void)FT_RENEW_ARRAY( table->maps, num_glyphs, count );
- error = FT_Err_Ok;
- }
-
- /* Sort the table in increasing order of unicode values, */
- /* taking care of glyph variants. */
- ft_qsort( table->maps, count, sizeof ( PS_UniMap ),
- compare_uni_maps );
- }
-
- table->num_maps = count;
- }
-
- return error;
- }
-
-
- static FT_UInt
- ps_unicodes_char_index( PS_Unicodes table,
- FT_UInt32 unicode )
- {
- PS_UniMap *min, *max, *mid, *result = NULL;
-
-
- /* Perform a binary search on the table. */
-
- min = table->maps;
- max = min + table->num_maps - 1;
-
- while ( min <= max )
- {
- FT_UInt32 base_glyph;
-
-
- mid = min + ( ( max - min ) >> 1 );
-
- if ( mid->unicode == unicode )
- {
- result = mid;
- break;
- }
-
- base_glyph = BASE_GLYPH( mid->unicode );
-
- if ( base_glyph == unicode )
- result = mid; /* remember match but continue search for base glyph */
-
- if ( min == max )
- break;
-
- if ( base_glyph < unicode )
- min = mid + 1;
- else
- max = mid - 1;
- }
-
- if ( result )
- return result->glyph_index;
- else
- return 0;
- }
-
-
- static FT_UInt32
- ps_unicodes_char_next( PS_Unicodes table,
- FT_UInt32 *unicode )
- {
- FT_UInt result = 0;
- FT_UInt32 char_code = *unicode + 1;
-
-
- {
- FT_UInt min = 0;
- FT_UInt max = table->num_maps;
- FT_UInt mid;
- PS_UniMap* map;
- FT_UInt32 base_glyph;
-
-
- while ( min < max )
- {
- mid = min + ( ( max - min ) >> 1 );
- map = table->maps + mid;
-
- if ( map->unicode == char_code )
- {
- result = map->glyph_index;
- goto Exit;
- }
-
- base_glyph = BASE_GLYPH( map->unicode );
-
- if ( base_glyph == char_code )
- result = map->glyph_index;
-
- if ( base_glyph < char_code )
- min = mid + 1;
- else
- max = mid;
- }
-
- if ( result )
- goto Exit; /* we have a variant glyph */
-
- /* we didn't find it; check whether we have a map just above it */
- char_code = 0;
-
- if ( min < table->num_maps )
- {
- map = table->maps + min;
- result = map->glyph_index;
- char_code = BASE_GLYPH( map->unicode );
- }
- }
-
- Exit:
- *unicode = char_code;
- return result;
- }
-
-
-#endif /* FT_CONFIG_OPTION_ADOBE_GLYPH_LIST */
-
-
- static const char*
- ps_get_macintosh_name( FT_UInt name_index )
- {
- if ( name_index >= FT_NUM_MAC_NAMES )
- name_index = 0;
-
- return ft_standard_glyph_names + ft_mac_names[name_index];
- }
-
-
- static const char*
- ps_get_standard_strings( FT_UInt sid )
- {
- if ( sid >= FT_NUM_SID_NAMES )
- return 0;
-
- return ft_standard_glyph_names + ft_sid_names[sid];
- }
-
-
-#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
-
- FT_DEFINE_SERVICE_PSCMAPSREC(
- pscmaps_interface,
-
- (PS_Unicode_ValueFunc) ps_unicode_value, /* unicode_value */
- (PS_Unicodes_InitFunc) ps_unicodes_init, /* unicodes_init */
- (PS_Unicodes_CharIndexFunc)ps_unicodes_char_index, /* unicodes_char_index */
- (PS_Unicodes_CharNextFunc) ps_unicodes_char_next, /* unicodes_char_next */
-
- (PS_Macintosh_NameFunc) ps_get_macintosh_name, /* macintosh_name */
- (PS_Adobe_Std_StringsFunc) ps_get_standard_strings, /* adobe_std_strings */
-
- t1_standard_encoding, /* adobe_std_encoding */
- t1_expert_encoding /* adobe_expert_encoding */
- )
-
-#else
-
- FT_DEFINE_SERVICE_PSCMAPSREC(
- pscmaps_interface,
-
- NULL, /* unicode_value */
- NULL, /* unicodes_init */
- NULL, /* unicodes_char_index */
- NULL, /* unicodes_char_next */
-
- (PS_Macintosh_NameFunc) ps_get_macintosh_name, /* macintosh_name */
- (PS_Adobe_Std_StringsFunc) ps_get_standard_strings, /* adobe_std_strings */
-
- t1_standard_encoding, /* adobe_std_encoding */
- t1_expert_encoding /* adobe_expert_encoding */
- )
-
-#endif /* FT_CONFIG_OPTION_ADOBE_GLYPH_LIST */
-
-
- FT_DEFINE_SERVICEDESCREC1(
- pscmaps_services,
-
- FT_SERVICE_ID_POSTSCRIPT_CMAPS, &PSCMAPS_INTERFACE_GET )
-
-
- static FT_Pointer
- psnames_get_service( FT_Module module,
- const char* service_id )
- {
- /* PSCMAPS_SERVICES_GET dereferences `library' in PIC mode */
-#ifdef FT_CONFIG_OPTION_PIC
- FT_Library library;
-
-
- if ( !module )
- return NULL;
- library = module->library;
- if ( !library )
- return NULL;
-#else
- FT_UNUSED( module );
-#endif
-
- return ft_service_list_lookup( PSCMAPS_SERVICES_GET, service_id );
- }
-
-#endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
-
-
-#ifndef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
-#define PUT_PS_NAMES_SERVICE( a ) NULL
-#else
-#define PUT_PS_NAMES_SERVICE( a ) a
-#endif
-
- FT_DEFINE_MODULE(
- psnames_module_class,
-
- 0, /* this is not a font driver, nor a renderer */
- sizeof ( FT_ModuleRec ),
-
- "psnames", /* driver name */
- 0x10000L, /* driver version */
- 0x20000L, /* driver requires FreeType 2 or above */
-
- PUT_PS_NAMES_SERVICE(
- (void*)&PSCMAPS_INTERFACE_GET ), /* module specific interface */
-
- (FT_Module_Constructor)NULL, /* module_init */
- (FT_Module_Destructor) NULL, /* module_done */
- (FT_Module_Requester) PUT_PS_NAMES_SERVICE( psnames_get_service ) /* get_interface */
- )
-
-
-/* END */
diff --git a/src/psnames/psmodule.h b/src/psnames/psmodule.h
deleted file mode 100644
index 6983b7923..000000000
--- a/src/psnames/psmodule.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/***************************************************************************/
-/* */
-/* psmodule.h */
-/* */
-/* High-level PSNames module interface (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PSMODULE_H_
-#define PSMODULE_H_
-
-
-#include <ft2build.h>
-#include FT_MODULE_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_DECLARE_MODULE( psnames_module_class )
-
-
-FT_END_HEADER
-
-#endif /* PSMODULE_H_ */
-
-
-/* END */
diff --git a/src/psnames/psnamerr.h b/src/psnames/psnamerr.h
deleted file mode 100644
index f90bf5ea4..000000000
--- a/src/psnames/psnamerr.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/***************************************************************************/
-/* */
-/* psnamerr.h */
-/* */
-/* PS names module error codes (specification only). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the PS names module error enumeration */
- /* constants. */
- /* */
- /*************************************************************************/
-
-#ifndef PSNAMERR_H_
-#define PSNAMERR_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX PSnames_Err_
-#define FT_ERR_BASE FT_Mod_Err_PSnames
-
-#include FT_ERRORS_H
-
-#endif /* PSNAMERR_H_ */
-
-
-/* END */
diff --git a/src/psnames/psnames.c b/src/psnames/psnames.c
deleted file mode 100644
index 22466d623..000000000
--- a/src/psnames/psnames.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/***************************************************************************/
-/* */
-/* psnames.c */
-/* */
-/* FreeType PSNames module component (body only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "psmodule.c"
-#include "pspic.c"
-
-
-/* END */
diff --git a/src/psnames/pspic.c b/src/psnames/pspic.c
deleted file mode 100644
index 8b9003439..000000000
--- a/src/psnames/pspic.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/***************************************************************************/
-/* */
-/* pspic.c */
-/* */
-/* The FreeType position independent code services for psnames module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "pspic.h"
-#include "psnamerr.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from psmodule.c */
- FT_Error
- FT_Create_Class_pscmaps_services( FT_Library library,
- FT_ServiceDescRec** output_class );
- void
- FT_Destroy_Class_pscmaps_services( FT_Library library,
- FT_ServiceDescRec* clazz );
-
- void
- FT_Init_Class_pscmaps_interface( FT_Library library,
- FT_Service_PsCMapsRec* clazz );
-
-
- void
- psnames_module_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->psnames )
- {
- PSModulePIC* container = (PSModulePIC*)pic_container->psnames;
-
-
- if ( container->pscmaps_services )
- FT_Destroy_Class_pscmaps_services( library,
- container->pscmaps_services );
- container->pscmaps_services = NULL;
- FT_FREE( container );
- pic_container->psnames = NULL;
- }
- }
-
-
- FT_Error
- psnames_module_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- PSModulePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->psnames = container;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- error = FT_Create_Class_pscmaps_services(
- library, &container->pscmaps_services );
- if ( error )
- goto Exit;
- FT_Init_Class_pscmaps_interface( library,
- &container->pscmaps_interface );
-
- Exit:
- if ( error )
- psnames_module_class_pic_free( library );
- return error;
- }
-
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/psnames/pspic.h b/src/psnames/pspic.h
deleted file mode 100644
index 14497e73f..000000000
--- a/src/psnames/pspic.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/***************************************************************************/
-/* */
-/* pspic.h */
-/* */
-/* The FreeType position independent code services for psnames module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PSPIC_H_
-#define PSPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define PSCMAPS_SERVICES_GET pscmaps_services
-#define PSCMAPS_INTERFACE_GET pscmaps_interface
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-
-
-FT_BEGIN_HEADER
-
- typedef struct PSModulePIC_
- {
- FT_ServiceDescRec* pscmaps_services;
- FT_Service_PsCMapsRec pscmaps_interface;
-
- } PSModulePIC;
-
-
-#define GET_PIC( lib ) \
- ( (PSModulePIC*)((lib)->pic_container.psnames) )
-#define PSCMAPS_SERVICES_GET ( GET_PIC( library )->pscmaps_services )
-#define PSCMAPS_INTERFACE_GET ( GET_PIC( library )->pscmaps_interface )
-
-
- /* see pspic.c for the implementation */
- void
- psnames_module_class_pic_free( FT_Library library );
-
- FT_Error
- psnames_module_class_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* PSPIC_H_ */
-
-
-/* END */
diff --git a/src/psnames/pstables.h b/src/psnames/pstables.h
deleted file mode 100644
index e0f5e3080..000000000
--- a/src/psnames/pstables.h
+++ /dev/null
@@ -1,4238 +0,0 @@
-/***************************************************************************/
-/* */
-/* pstables.h */
-/* */
-/* PostScript glyph names. */
-/* */
-/* Copyright 2005-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /* This file has been generated automatically -- do not edit! */
-
-
-#ifndef DEFINE_PS_TABLES
-#ifdef __cplusplus
- extern "C"
-#else
- extern
-#endif
-#endif
- const char ft_standard_glyph_names[3696]
-#ifdef DEFINE_PS_TABLES
- =
- {
- '.','n','u','l','l', 0,
- 'n','o','n','m','a','r','k','i','n','g','r','e','t','u','r','n', 0,
- 'n','o','t','e','q','u','a','l', 0,
- 'i','n','f','i','n','i','t','y', 0,
- 'l','e','s','s','e','q','u','a','l', 0,
- 'g','r','e','a','t','e','r','e','q','u','a','l', 0,
- 'p','a','r','t','i','a','l','d','i','f','f', 0,
- 's','u','m','m','a','t','i','o','n', 0,
- 'p','r','o','d','u','c','t', 0,
- 'p','i', 0,
- 'i','n','t','e','g','r','a','l', 0,
- 'O','m','e','g','a', 0,
- 'r','a','d','i','c','a','l', 0,
- 'a','p','p','r','o','x','e','q','u','a','l', 0,
- 'D','e','l','t','a', 0,
- 'n','o','n','b','r','e','a','k','i','n','g','s','p','a','c','e', 0,
- 'l','o','z','e','n','g','e', 0,
- 'a','p','p','l','e', 0,
- 'f','r','a','n','c', 0,
- 'G','b','r','e','v','e', 0,
- 'g','b','r','e','v','e', 0,
- 'I','d','o','t','a','c','c','e','n','t', 0,
- 'S','c','e','d','i','l','l','a', 0,
- 's','c','e','d','i','l','l','a', 0,
- 'C','a','c','u','t','e', 0,
- 'c','a','c','u','t','e', 0,
- 'C','c','a','r','o','n', 0,
- 'c','c','a','r','o','n', 0,
- 'd','c','r','o','a','t', 0,
- '.','n','o','t','d','e','f', 0,
- 's','p','a','c','e', 0,
- 'e','x','c','l','a','m', 0,
- 'q','u','o','t','e','d','b','l', 0,
- 'n','u','m','b','e','r','s','i','g','n', 0,
- 'd','o','l','l','a','r', 0,
- 'p','e','r','c','e','n','t', 0,
- 'a','m','p','e','r','s','a','n','d', 0,
- 'q','u','o','t','e','r','i','g','h','t', 0,
- 'p','a','r','e','n','l','e','f','t', 0,
- 'p','a','r','e','n','r','i','g','h','t', 0,
- 'a','s','t','e','r','i','s','k', 0,
- 'p','l','u','s', 0,
- 'c','o','m','m','a', 0,
- 'h','y','p','h','e','n', 0,
- 'p','e','r','i','o','d', 0,
- 's','l','a','s','h', 0,
- 'z','e','r','o', 0,
- 'o','n','e', 0,
- 't','w','o', 0,
- 't','h','r','e','e', 0,
- 'f','o','u','r', 0,
- 'f','i','v','e', 0,
- 's','i','x', 0,
- 's','e','v','e','n', 0,
- 'e','i','g','h','t', 0,
- 'n','i','n','e', 0,
- 'c','o','l','o','n', 0,
- 's','e','m','i','c','o','l','o','n', 0,
- 'l','e','s','s', 0,
- 'e','q','u','a','l', 0,
- 'g','r','e','a','t','e','r', 0,
- 'q','u','e','s','t','i','o','n', 0,
- 'a','t', 0,
- 'A', 0,
- 'B', 0,
- 'C', 0,
- 'D', 0,
- 'E', 0,
- 'F', 0,
- 'G', 0,
- 'H', 0,
- 'I', 0,
- 'J', 0,
- 'K', 0,
- 'L', 0,
- 'M', 0,
- 'N', 0,
- 'O', 0,
- 'P', 0,
- 'Q', 0,
- 'R', 0,
- 'S', 0,
- 'T', 0,
- 'U', 0,
- 'V', 0,
- 'W', 0,
- 'X', 0,
- 'Y', 0,
- 'Z', 0,
- 'b','r','a','c','k','e','t','l','e','f','t', 0,
- 'b','a','c','k','s','l','a','s','h', 0,
- 'b','r','a','c','k','e','t','r','i','g','h','t', 0,
- 'a','s','c','i','i','c','i','r','c','u','m', 0,
- 'u','n','d','e','r','s','c','o','r','e', 0,
- 'q','u','o','t','e','l','e','f','t', 0,
- 'a', 0,
- 'b', 0,
- 'c', 0,
- 'd', 0,
- 'e', 0,
- 'f', 0,
- 'g', 0,
- 'h', 0,
- 'i', 0,
- 'j', 0,
- 'k', 0,
- 'l', 0,
- 'm', 0,
- 'n', 0,
- 'o', 0,
- 'p', 0,
- 'q', 0,
- 'r', 0,
- 's', 0,
- 't', 0,
- 'u', 0,
- 'v', 0,
- 'w', 0,
- 'x', 0,
- 'y', 0,
- 'z', 0,
- 'b','r','a','c','e','l','e','f','t', 0,
- 'b','a','r', 0,
- 'b','r','a','c','e','r','i','g','h','t', 0,
- 'a','s','c','i','i','t','i','l','d','e', 0,
- 'e','x','c','l','a','m','d','o','w','n', 0,
- 'c','e','n','t', 0,
- 's','t','e','r','l','i','n','g', 0,
- 'f','r','a','c','t','i','o','n', 0,
- 'y','e','n', 0,
- 'f','l','o','r','i','n', 0,
- 's','e','c','t','i','o','n', 0,
- 'c','u','r','r','e','n','c','y', 0,
- 'q','u','o','t','e','s','i','n','g','l','e', 0,
- 'q','u','o','t','e','d','b','l','l','e','f','t', 0,
- 'g','u','i','l','l','e','m','o','t','l','e','f','t', 0,
- 'g','u','i','l','s','i','n','g','l','l','e','f','t', 0,
- 'g','u','i','l','s','i','n','g','l','r','i','g','h','t', 0,
- 'f','i', 0,
- 'f','l', 0,
- 'e','n','d','a','s','h', 0,
- 'd','a','g','g','e','r', 0,
- 'd','a','g','g','e','r','d','b','l', 0,
- 'p','e','r','i','o','d','c','e','n','t','e','r','e','d', 0,
- 'p','a','r','a','g','r','a','p','h', 0,
- 'b','u','l','l','e','t', 0,
- 'q','u','o','t','e','s','i','n','g','l','b','a','s','e', 0,
- 'q','u','o','t','e','d','b','l','b','a','s','e', 0,
- 'q','u','o','t','e','d','b','l','r','i','g','h','t', 0,
- 'g','u','i','l','l','e','m','o','t','r','i','g','h','t', 0,
- 'e','l','l','i','p','s','i','s', 0,
- 'p','e','r','t','h','o','u','s','a','n','d', 0,
- 'q','u','e','s','t','i','o','n','d','o','w','n', 0,
- 'g','r','a','v','e', 0,
- 'a','c','u','t','e', 0,
- 'c','i','r','c','u','m','f','l','e','x', 0,
- 't','i','l','d','e', 0,
- 'm','a','c','r','o','n', 0,
- 'b','r','e','v','e', 0,
- 'd','o','t','a','c','c','e','n','t', 0,
- 'd','i','e','r','e','s','i','s', 0,
- 'r','i','n','g', 0,
- 'c','e','d','i','l','l','a', 0,
- 'h','u','n','g','a','r','u','m','l','a','u','t', 0,
- 'o','g','o','n','e','k', 0,
- 'c','a','r','o','n', 0,
- 'e','m','d','a','s','h', 0,
- 'A','E', 0,
- 'o','r','d','f','e','m','i','n','i','n','e', 0,
- 'L','s','l','a','s','h', 0,
- 'O','s','l','a','s','h', 0,
- 'O','E', 0,
- 'o','r','d','m','a','s','c','u','l','i','n','e', 0,
- 'a','e', 0,
- 'd','o','t','l','e','s','s','i', 0,
- 'l','s','l','a','s','h', 0,
- 'o','s','l','a','s','h', 0,
- 'o','e', 0,
- 'g','e','r','m','a','n','d','b','l','s', 0,
- 'o','n','e','s','u','p','e','r','i','o','r', 0,
- 'l','o','g','i','c','a','l','n','o','t', 0,
- 'm','u', 0,
- 't','r','a','d','e','m','a','r','k', 0,
- 'E','t','h', 0,
- 'o','n','e','h','a','l','f', 0,
- 'p','l','u','s','m','i','n','u','s', 0,
- 'T','h','o','r','n', 0,
- 'o','n','e','q','u','a','r','t','e','r', 0,
- 'd','i','v','i','d','e', 0,
- 'b','r','o','k','e','n','b','a','r', 0,
- 'd','e','g','r','e','e', 0,
- 't','h','o','r','n', 0,
- 't','h','r','e','e','q','u','a','r','t','e','r','s', 0,
- 't','w','o','s','u','p','e','r','i','o','r', 0,
- 'r','e','g','i','s','t','e','r','e','d', 0,
- 'm','i','n','u','s', 0,
- 'e','t','h', 0,
- 'm','u','l','t','i','p','l','y', 0,
- 't','h','r','e','e','s','u','p','e','r','i','o','r', 0,
- 'c','o','p','y','r','i','g','h','t', 0,
- 'A','a','c','u','t','e', 0,
- 'A','c','i','r','c','u','m','f','l','e','x', 0,
- 'A','d','i','e','r','e','s','i','s', 0,
- 'A','g','r','a','v','e', 0,
- 'A','r','i','n','g', 0,
- 'A','t','i','l','d','e', 0,
- 'C','c','e','d','i','l','l','a', 0,
- 'E','a','c','u','t','e', 0,
- 'E','c','i','r','c','u','m','f','l','e','x', 0,
- 'E','d','i','e','r','e','s','i','s', 0,
- 'E','g','r','a','v','e', 0,
- 'I','a','c','u','t','e', 0,
- 'I','c','i','r','c','u','m','f','l','e','x', 0,
- 'I','d','i','e','r','e','s','i','s', 0,
- 'I','g','r','a','v','e', 0,
- 'N','t','i','l','d','e', 0,
- 'O','a','c','u','t','e', 0,
- 'O','c','i','r','c','u','m','f','l','e','x', 0,
- 'O','d','i','e','r','e','s','i','s', 0,
- 'O','g','r','a','v','e', 0,
- 'O','t','i','l','d','e', 0,
- 'S','c','a','r','o','n', 0,
- 'U','a','c','u','t','e', 0,
- 'U','c','i','r','c','u','m','f','l','e','x', 0,
- 'U','d','i','e','r','e','s','i','s', 0,
- 'U','g','r','a','v','e', 0,
- 'Y','a','c','u','t','e', 0,
- 'Y','d','i','e','r','e','s','i','s', 0,
- 'Z','c','a','r','o','n', 0,
- 'a','a','c','u','t','e', 0,
- 'a','c','i','r','c','u','m','f','l','e','x', 0,
- 'a','d','i','e','r','e','s','i','s', 0,
- 'a','g','r','a','v','e', 0,
- 'a','r','i','n','g', 0,
- 'a','t','i','l','d','e', 0,
- 'c','c','e','d','i','l','l','a', 0,
- 'e','a','c','u','t','e', 0,
- 'e','c','i','r','c','u','m','f','l','e','x', 0,
- 'e','d','i','e','r','e','s','i','s', 0,
- 'e','g','r','a','v','e', 0,
- 'i','a','c','u','t','e', 0,
- 'i','c','i','r','c','u','m','f','l','e','x', 0,
- 'i','d','i','e','r','e','s','i','s', 0,
- 'i','g','r','a','v','e', 0,
- 'n','t','i','l','d','e', 0,
- 'o','a','c','u','t','e', 0,
- 'o','c','i','r','c','u','m','f','l','e','x', 0,
- 'o','d','i','e','r','e','s','i','s', 0,
- 'o','g','r','a','v','e', 0,
- 'o','t','i','l','d','e', 0,
- 's','c','a','r','o','n', 0,
- 'u','a','c','u','t','e', 0,
- 'u','c','i','r','c','u','m','f','l','e','x', 0,
- 'u','d','i','e','r','e','s','i','s', 0,
- 'u','g','r','a','v','e', 0,
- 'y','a','c','u','t','e', 0,
- 'y','d','i','e','r','e','s','i','s', 0,
- 'z','c','a','r','o','n', 0,
- 'e','x','c','l','a','m','s','m','a','l','l', 0,
- 'H','u','n','g','a','r','u','m','l','a','u','t','s','m','a','l','l', 0,
- 'd','o','l','l','a','r','o','l','d','s','t','y','l','e', 0,
- 'd','o','l','l','a','r','s','u','p','e','r','i','o','r', 0,
- 'a','m','p','e','r','s','a','n','d','s','m','a','l','l', 0,
- 'A','c','u','t','e','s','m','a','l','l', 0,
- 'p','a','r','e','n','l','e','f','t','s','u','p','e','r','i','o','r', 0,
- 'p','a','r','e','n','r','i','g','h','t','s','u','p','e','r','i','o','r', 0,
- 't','w','o','d','o','t','e','n','l','e','a','d','e','r', 0,
- 'o','n','e','d','o','t','e','n','l','e','a','d','e','r', 0,
- 'z','e','r','o','o','l','d','s','t','y','l','e', 0,
- 'o','n','e','o','l','d','s','t','y','l','e', 0,
- 't','w','o','o','l','d','s','t','y','l','e', 0,
- 't','h','r','e','e','o','l','d','s','t','y','l','e', 0,
- 'f','o','u','r','o','l','d','s','t','y','l','e', 0,
- 'f','i','v','e','o','l','d','s','t','y','l','e', 0,
- 's','i','x','o','l','d','s','t','y','l','e', 0,
- 's','e','v','e','n','o','l','d','s','t','y','l','e', 0,
- 'e','i','g','h','t','o','l','d','s','t','y','l','e', 0,
- 'n','i','n','e','o','l','d','s','t','y','l','e', 0,
- 'c','o','m','m','a','s','u','p','e','r','i','o','r', 0,
- 't','h','r','e','e','q','u','a','r','t','e','r','s','e','m','d','a','s','h', 0,
- 'p','e','r','i','o','d','s','u','p','e','r','i','o','r', 0,
- 'q','u','e','s','t','i','o','n','s','m','a','l','l', 0,
- 'a','s','u','p','e','r','i','o','r', 0,
- 'b','s','u','p','e','r','i','o','r', 0,
- 'c','e','n','t','s','u','p','e','r','i','o','r', 0,
- 'd','s','u','p','e','r','i','o','r', 0,
- 'e','s','u','p','e','r','i','o','r', 0,
- 'i','s','u','p','e','r','i','o','r', 0,
- 'l','s','u','p','e','r','i','o','r', 0,
- 'm','s','u','p','e','r','i','o','r', 0,
- 'n','s','u','p','e','r','i','o','r', 0,
- 'o','s','u','p','e','r','i','o','r', 0,
- 'r','s','u','p','e','r','i','o','r', 0,
- 's','s','u','p','e','r','i','o','r', 0,
- 't','s','u','p','e','r','i','o','r', 0,
- 'f','f', 0,
- 'f','f','i', 0,
- 'f','f','l', 0,
- 'p','a','r','e','n','l','e','f','t','i','n','f','e','r','i','o','r', 0,
- 'p','a','r','e','n','r','i','g','h','t','i','n','f','e','r','i','o','r', 0,
- 'C','i','r','c','u','m','f','l','e','x','s','m','a','l','l', 0,
- 'h','y','p','h','e','n','s','u','p','e','r','i','o','r', 0,
- 'G','r','a','v','e','s','m','a','l','l', 0,
- 'A','s','m','a','l','l', 0,
- 'B','s','m','a','l','l', 0,
- 'C','s','m','a','l','l', 0,
- 'D','s','m','a','l','l', 0,
- 'E','s','m','a','l','l', 0,
- 'F','s','m','a','l','l', 0,
- 'G','s','m','a','l','l', 0,
- 'H','s','m','a','l','l', 0,
- 'I','s','m','a','l','l', 0,
- 'J','s','m','a','l','l', 0,
- 'K','s','m','a','l','l', 0,
- 'L','s','m','a','l','l', 0,
- 'M','s','m','a','l','l', 0,
- 'N','s','m','a','l','l', 0,
- 'O','s','m','a','l','l', 0,
- 'P','s','m','a','l','l', 0,
- 'Q','s','m','a','l','l', 0,
- 'R','s','m','a','l','l', 0,
- 'S','s','m','a','l','l', 0,
- 'T','s','m','a','l','l', 0,
- 'U','s','m','a','l','l', 0,
- 'V','s','m','a','l','l', 0,
- 'W','s','m','a','l','l', 0,
- 'X','s','m','a','l','l', 0,
- 'Y','s','m','a','l','l', 0,
- 'Z','s','m','a','l','l', 0,
- 'c','o','l','o','n','m','o','n','e','t','a','r','y', 0,
- 'o','n','e','f','i','t','t','e','d', 0,
- 'r','u','p','i','a','h', 0,
- 'T','i','l','d','e','s','m','a','l','l', 0,
- 'e','x','c','l','a','m','d','o','w','n','s','m','a','l','l', 0,
- 'c','e','n','t','o','l','d','s','t','y','l','e', 0,
- 'L','s','l','a','s','h','s','m','a','l','l', 0,
- 'S','c','a','r','o','n','s','m','a','l','l', 0,
- 'Z','c','a','r','o','n','s','m','a','l','l', 0,
- 'D','i','e','r','e','s','i','s','s','m','a','l','l', 0,
- 'B','r','e','v','e','s','m','a','l','l', 0,
- 'C','a','r','o','n','s','m','a','l','l', 0,
- 'D','o','t','a','c','c','e','n','t','s','m','a','l','l', 0,
- 'M','a','c','r','o','n','s','m','a','l','l', 0,
- 'f','i','g','u','r','e','d','a','s','h', 0,
- 'h','y','p','h','e','n','i','n','f','e','r','i','o','r', 0,
- 'O','g','o','n','e','k','s','m','a','l','l', 0,
- 'R','i','n','g','s','m','a','l','l', 0,
- 'C','e','d','i','l','l','a','s','m','a','l','l', 0,
- 'q','u','e','s','t','i','o','n','d','o','w','n','s','m','a','l','l', 0,
- 'o','n','e','e','i','g','h','t','h', 0,
- 't','h','r','e','e','e','i','g','h','t','h','s', 0,
- 'f','i','v','e','e','i','g','h','t','h','s', 0,
- 's','e','v','e','n','e','i','g','h','t','h','s', 0,
- 'o','n','e','t','h','i','r','d', 0,
- 't','w','o','t','h','i','r','d','s', 0,
- 'z','e','r','o','s','u','p','e','r','i','o','r', 0,
- 'f','o','u','r','s','u','p','e','r','i','o','r', 0,
- 'f','i','v','e','s','u','p','e','r','i','o','r', 0,
- 's','i','x','s','u','p','e','r','i','o','r', 0,
- 's','e','v','e','n','s','u','p','e','r','i','o','r', 0,
- 'e','i','g','h','t','s','u','p','e','r','i','o','r', 0,
- 'n','i','n','e','s','u','p','e','r','i','o','r', 0,
- 'z','e','r','o','i','n','f','e','r','i','o','r', 0,
- 'o','n','e','i','n','f','e','r','i','o','r', 0,
- 't','w','o','i','n','f','e','r','i','o','r', 0,
- 't','h','r','e','e','i','n','f','e','r','i','o','r', 0,
- 'f','o','u','r','i','n','f','e','r','i','o','r', 0,
- 'f','i','v','e','i','n','f','e','r','i','o','r', 0,
- 's','i','x','i','n','f','e','r','i','o','r', 0,
- 's','e','v','e','n','i','n','f','e','r','i','o','r', 0,
- 'e','i','g','h','t','i','n','f','e','r','i','o','r', 0,
- 'n','i','n','e','i','n','f','e','r','i','o','r', 0,
- 'c','e','n','t','i','n','f','e','r','i','o','r', 0,
- 'd','o','l','l','a','r','i','n','f','e','r','i','o','r', 0,
- 'p','e','r','i','o','d','i','n','f','e','r','i','o','r', 0,
- 'c','o','m','m','a','i','n','f','e','r','i','o','r', 0,
- 'A','g','r','a','v','e','s','m','a','l','l', 0,
- 'A','a','c','u','t','e','s','m','a','l','l', 0,
- 'A','c','i','r','c','u','m','f','l','e','x','s','m','a','l','l', 0,
- 'A','t','i','l','d','e','s','m','a','l','l', 0,
- 'A','d','i','e','r','e','s','i','s','s','m','a','l','l', 0,
- 'A','r','i','n','g','s','m','a','l','l', 0,
- 'A','E','s','m','a','l','l', 0,
- 'C','c','e','d','i','l','l','a','s','m','a','l','l', 0,
- 'E','g','r','a','v','e','s','m','a','l','l', 0,
- 'E','a','c','u','t','e','s','m','a','l','l', 0,
- 'E','c','i','r','c','u','m','f','l','e','x','s','m','a','l','l', 0,
- 'E','d','i','e','r','e','s','i','s','s','m','a','l','l', 0,
- 'I','g','r','a','v','e','s','m','a','l','l', 0,
- 'I','a','c','u','t','e','s','m','a','l','l', 0,
- 'I','c','i','r','c','u','m','f','l','e','x','s','m','a','l','l', 0,
- 'I','d','i','e','r','e','s','i','s','s','m','a','l','l', 0,
- 'E','t','h','s','m','a','l','l', 0,
- 'N','t','i','l','d','e','s','m','a','l','l', 0,
- 'O','g','r','a','v','e','s','m','a','l','l', 0,
- 'O','a','c','u','t','e','s','m','a','l','l', 0,
- 'O','c','i','r','c','u','m','f','l','e','x','s','m','a','l','l', 0,
- 'O','t','i','l','d','e','s','m','a','l','l', 0,
- 'O','d','i','e','r','e','s','i','s','s','m','a','l','l', 0,
- 'O','E','s','m','a','l','l', 0,
- 'O','s','l','a','s','h','s','m','a','l','l', 0,
- 'U','g','r','a','v','e','s','m','a','l','l', 0,
- 'U','a','c','u','t','e','s','m','a','l','l', 0,
- 'U','c','i','r','c','u','m','f','l','e','x','s','m','a','l','l', 0,
- 'U','d','i','e','r','e','s','i','s','s','m','a','l','l', 0,
- 'Y','a','c','u','t','e','s','m','a','l','l', 0,
- 'T','h','o','r','n','s','m','a','l','l', 0,
- 'Y','d','i','e','r','e','s','i','s','s','m','a','l','l', 0,
- '0','0','1','.','0','0','0', 0,
- '0','0','1','.','0','0','1', 0,
- '0','0','1','.','0','0','2', 0,
- '0','0','1','.','0','0','3', 0,
- 'B','l','a','c','k', 0,
- 'B','o','l','d', 0,
- 'B','o','o','k', 0,
- 'L','i','g','h','t', 0,
- 'M','e','d','i','u','m', 0,
- 'R','e','g','u','l','a','r', 0,
- 'R','o','m','a','n', 0,
- 'S','e','m','i','b','o','l','d', 0,
- }
-#endif /* DEFINE_PS_TABLES */
- ;
-
-
-#define FT_NUM_MAC_NAMES 258
-
- /* Values are offsets into the `ft_standard_glyph_names' table */
-
-#ifndef DEFINE_PS_TABLES
-#ifdef __cplusplus
- extern "C"
-#else
- extern
-#endif
-#endif
- const short ft_mac_names[FT_NUM_MAC_NAMES]
-#ifdef DEFINE_PS_TABLES
- =
- {
- 253, 0, 6, 261, 267, 274, 283, 294, 301, 309, 758, 330, 340, 351,
- 360, 365, 371, 378, 385, 391, 396, 400, 404, 410, 415, 420, 424, 430,
- 436, 441, 447, 457, 462, 468, 476, 485, 488, 490, 492, 494, 496, 498,
- 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526,
- 528, 530, 532, 534, 536, 538, 540, 552, 562, 575, 587, 979, 608, 610,
- 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638,
- 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 670, 674, 685,
- 1375,1392,1405,1414,1486,1512,1562,1603,1632,1610,1622,1645,1639,1652,
- 1661,1690,1668,1680,1697,1726,1704,1716,1733,1740,1769,1747,1759,1776,
- 1790,1819,1797,1809, 839,1263, 707, 712, 741, 881, 871,1160,1302,1346,
- 1197, 985,1031, 23,1086,1108, 32,1219, 41, 51, 730,1194, 64, 76,
- 86, 94, 97,1089,1118, 106,1131,1150, 966, 696,1183, 112, 734, 120,
- 132, 783, 930, 945, 138,1385,1398,1529,1115,1157, 832,1079, 770, 916,
- 598, 319,1246, 155,1833,1586, 721, 749, 797, 811, 826, 829, 846, 856,
- 888, 903, 954,1363,1421,1356,1433,1443,1450,1457,1469,1479,1493,1500,
- 163,1522,1543,1550,1572,1134, 991,1002,1008,1015,1021,1040,1045,1053,
- 1066,1073,1101,1143,1536,1783,1596,1843,1253,1207,1319,1579,1826,1229,
- 1270,1313,1323,1171,1290,1332,1211,1235,1276, 169, 175, 182, 189, 200,
- 209, 218, 225, 232, 239, 246
- }
-#endif /* DEFINE_PS_TABLES */
- ;
-
-
-#define FT_NUM_SID_NAMES 391
-
- /* Values are offsets into the `ft_standard_glyph_names' table */
-
-#ifndef DEFINE_PS_TABLES
-#ifdef __cplusplus
- extern "C"
-#else
- extern
-#endif
-#endif
- const short ft_sid_names[FT_NUM_SID_NAMES]
-#ifdef DEFINE_PS_TABLES
- =
- {
- 253, 261, 267, 274, 283, 294, 301, 309, 319, 330, 340, 351, 360, 365,
- 371, 378, 385, 391, 396, 400, 404, 410, 415, 420, 424, 430, 436, 441,
- 447, 457, 462, 468, 476, 485, 488, 490, 492, 494, 496, 498, 500, 502,
- 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530,
- 532, 534, 536, 538, 540, 552, 562, 575, 587, 598, 608, 610, 612, 614,
- 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642,
- 644, 646, 648, 650, 652, 654, 656, 658, 660, 670, 674, 685, 696, 707,
- 712, 721, 730, 734, 741, 749, 758, 770, 783, 797, 811, 826, 829, 832,
- 839, 846, 856, 871, 881, 888, 903, 916, 930, 945, 954, 966, 979, 985,
- 991,1002,1008,1015,1021,1031,1040,1045,1053,1066,1073,1079,1086,1089,
- 1101,1108,1115,1118,1131,1134,1143,1150,1157,1160,1171,1183,1194,1197,
- 1207,1211,1219,1229,1235,1246,1253,1263,1270,1276,1290,1302,1313,1319,
- 1323,1332,1346,1356,1363,1375,1385,1392,1398,1405,1414,1421,1433,1443,
- 1450,1457,1469,1479,1486,1493,1500,1512,1522,1529,1536,1543,1550,1562,
- 1572,1579,1586,1596,1603,1610,1622,1632,1639,1645,1652,1661,1668,1680,
- 1690,1697,1704,1716,1726,1733,1740,1747,1759,1769,1776,1783,1790,1797,
- 1809,1819,1826,1833,1843,1850,1862,1880,1895,1910,1925,1936,1954,1973,
- 1988,2003,2016,2028,2040,2054,2067,2080,2092,2106,2120,2133,2147,2167,
- 2182,2196,2206,2216,2229,2239,2249,2259,2269,2279,2289,2299,2309,2319,
- 2329,2332,2336,2340,2358,2377,2393,2408,2419,2426,2433,2440,2447,2454,
- 2461,2468,2475,2482,2489,2496,2503,2510,2517,2524,2531,2538,2545,2552,
- 2559,2566,2573,2580,2587,2594,2601,2615,2625,2632,2643,2659,2672,2684,
- 2696,2708,2722,2733,2744,2759,2771,2782,2797,2809,2819,2832,2850,2860,
- 2873,2885,2898,2907,2917,2930,2943,2956,2968,2982,2996,3009,3022,3034,
- 3046,3060,3073,3086,3098,3112,3126,3139,3152,3167,3182,3196,3208,3220,
- 3237,3249,3264,3275,3283,3297,3309,3321,3338,3353,3365,3377,3394,3409,
- 3418,3430,3442,3454,3471,3483,3498,3506,3518,3530,3542,3559,3574,3586,
- 3597,3612,3620,3628,3636,3644,3650,3655,3660,3666,3673,3681,3687
- }
-#endif /* DEFINE_PS_TABLES */
- ;
-
-
- /* the following are indices into the SID name table */
-#ifndef DEFINE_PS_TABLES
-#ifdef __cplusplus
- extern "C"
-#else
- extern
-#endif
-#endif
- const unsigned short t1_standard_encoding[256]
-#ifdef DEFINE_PS_TABLES
- =
- {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,
- 0,111,112,113,114, 0,115,116,117,118,119,120,121,122, 0,123,
- 0,124,125,126,127,128,129,130,131, 0,132,133, 0,134,135,136,
- 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,138, 0,139, 0, 0, 0, 0,140,141,142,143, 0, 0, 0, 0,
- 0,144, 0, 0, 0,145, 0, 0,146,147,148,149, 0, 0, 0, 0
- }
-#endif /* DEFINE_PS_TABLES */
- ;
-
-
- /* the following are indices into the SID name table */
-#ifndef DEFINE_PS_TABLES
-#ifdef __cplusplus
- extern "C"
-#else
- extern
-#endif
-#endif
- const unsigned short t1_expert_encoding[256]
-#ifdef DEFINE_PS_TABLES
- =
- {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1,229,230, 0,231,232,233,234,235,236,237,238, 13, 14, 15, 99,
- 239,240,241,242,243,244,245,246,247,248, 27, 28,249,250,251,252,
- 0,253,254,255,256,257, 0, 0, 0,258, 0, 0,259,260,261,262,
- 0, 0,263,264,265, 0,266,109,110,267,268,269, 0,270,271,272,
- 273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,
- 289,290,291,292,293,294,295,296,297,298,299,300,301,302,303, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,304,305,306, 0, 0,307,308,309,310,311, 0,312, 0, 0,313,
- 0, 0,314,315, 0, 0,316,317,318, 0, 0, 0,158,155,163,319,
- 320,321,322,323,324,325, 0, 0,326,150,164,169,327,328,329,330,
- 331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,
- 347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,
- 363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378
- }
-#endif /* DEFINE_PS_TABLES */
- ;
-
-
- /*
- * This table is a compressed version of the Adobe Glyph List (AGL),
- * optimized for efficient searching. It has been generated by the
- * `glnames.py' python script located in the `src/tools' directory.
- *
- * The lookup function to get the Unicode value for a given string
- * is defined below the table.
- */
-
-#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
-
-#ifndef DEFINE_PS_TABLES
-#ifdef __cplusplus
- extern "C"
-#else
- extern
-#endif
-#endif
- const unsigned char ft_adobe_glyph_list[55997L]
-#ifdef DEFINE_PS_TABLES
- =
- {
- 0, 52, 0,106, 2,167, 3, 63, 4,220, 6,125, 9,143, 10, 23,
- 11,137, 12,199, 14,246, 15, 87, 16,233, 17,219, 18,104, 19, 88,
- 22,110, 23, 32, 23, 71, 24, 77, 27,156, 29, 73, 31,247, 32,107,
- 32,222, 33, 55, 34,154, 35,218, 58, 10, 64,122, 72,188, 80,109,
- 88,104, 93, 61, 98,168,106, 91,114,111,115,237,122,180,127,255,
- 135,164,143,132,149,213,158,108,161,115,168,175,183,147,197,199,
- 202, 25,204,166,208,209,209, 81,215, 26, 65,143, 0, 65, 0,140,
- 0,175, 0,193, 1, 15, 1,147, 1,233, 1,251, 2, 7, 2, 40,
- 2, 57, 2, 82, 2, 91, 2,128, 2,136, 2,154, 69,131, 0,198,
- 0,150, 0,158, 0,167,225,227,245,244,101,128, 1,252,237,225,
- 227,242,239,110,128, 1,226,243,237,225,236,108,128,247,230,225,
- 227,245,244,101,129, 0,193, 0,185,243,237,225,236,108,128,247,
- 225,226,242,229,246,101,134, 1, 2, 0,213, 0,221, 0,232, 0,
- 243, 0,251, 1, 7,225,227,245,244,101,128, 30,174,227,249,242,
- 233,236,236,233, 99,128, 4,208,228,239,244,226,229,236,239,119,
- 128, 30,182,231,242,225,246,101,128, 30,176,232,239,239,235,225,
- 226,239,246,101,128, 30,178,244,233,236,228,101,128, 30,180, 99,
- 4, 1, 25, 1, 32, 1,121, 1,137,225,242,239,110,128, 1,205,
- 233,242, 99, 2, 1, 40, 1, 45,236,101,128, 36,182,245,237,230,
- 236,229,120,134, 0,194, 1, 66, 1, 74, 1, 85, 1, 93, 1,105,
- 1,113,225,227,245,244,101,128, 30,164,228,239,244,226,229,236,
- 239,119,128, 30,172,231,242,225,246,101,128, 30,166,232,239,239,
- 235,225,226,239,246,101,128, 30,168,243,237,225,236,108,128,247,
- 226,244,233,236,228,101,128, 30,170,245,244,101,129,246,201, 1,
- 129,243,237,225,236,108,128,247,180,249,242,233,236,236,233, 99,
- 128, 4, 16,100, 3, 1,155, 1,165, 1,209,226,236,231,242,225,
- 246,101,128, 2, 0,233,229,242,229,243,233,115,131, 0,196, 1,
- 181, 1,192, 1,201,227,249,242,233,236,236,233, 99,128, 4,210,
- 237,225,227,242,239,110,128, 1,222,243,237,225,236,108,128,247,
- 228,239,116, 2, 1,216, 1,224,226,229,236,239,119,128, 30,160,
- 237,225,227,242,239,110,128, 1,224,231,242,225,246,101,129, 0,
- 192, 1,243,243,237,225,236,108,128,247,224,232,239,239,235,225,
- 226,239,246,101,128, 30,162,105, 2, 2, 13, 2, 25,229,227,249,
- 242,233,236,236,233, 99,128, 4,212,238,246,229,242,244,229,228,
- 226,242,229,246,101,128, 2, 2,236,240,232, 97,129, 3,145, 2,
- 49,244,239,238,239,115,128, 3,134,109, 2, 2, 63, 2, 71,225,
- 227,242,239,110,128, 1, 0,239,238,239,243,240,225,227,101,128,
- 255, 33,239,231,239,238,229,107,128, 1, 4,242,233,238,103,131,
- 0,197, 2,104, 2,112, 2,120,225,227,245,244,101,128, 1,250,
- 226,229,236,239,119,128, 30, 0,243,237,225,236,108,128,247,229,
- 243,237,225,236,108,128,247, 97,244,233,236,228,101,129, 0,195,
- 2,146,243,237,225,236,108,128,247,227,249,226,225,242,237,229,
- 238,233,225,110,128, 5, 49, 66,137, 0, 66, 2,189, 2,198, 2,
- 223, 3, 3, 3, 10, 3, 22, 3, 34, 3, 46, 3, 54,227,233,242,
- 227,236,101,128, 36,183,228,239,116, 2, 2,206, 2,215,225,227,
- 227,229,238,116,128, 30, 2,226,229,236,239,119,128, 30, 4,101,
- 3, 2,231, 2,242, 2,254,227,249,242,233,236,236,233, 99,128,
- 4, 17,238,225,242,237,229,238,233,225,110,128, 5, 50,244, 97,
- 128, 3,146,232,239,239,107,128, 1,129,236,233,238,229,226,229,
- 236,239,119,128, 30, 6,237,239,238,239,243,240,225,227,101,128,
- 255, 34,242,229,246,229,243,237,225,236,108,128,246,244,243,237,
- 225,236,108,128,247, 98,244,239,240,226,225,114,128, 1,130, 67,
- 137, 0, 67, 3, 85, 3,127, 3,193, 3,210, 3,224, 4,171, 4,
- 188, 4,200, 4,212, 97, 3, 3, 93, 3,104, 3,111,225,242,237,
- 229,238,233,225,110,128, 5, 62,227,245,244,101,128, 1, 6,242,
- 239,110,129,246,202, 3,119,243,237,225,236,108,128,246,245, 99,
- 3, 3,135, 3,142, 3,171,225,242,239,110,128, 1, 12,229,228,
- 233,236,236, 97,130, 0,199, 3,155, 3,163,225,227,245,244,101,
- 128, 30, 8,243,237,225,236,108,128,247,231,233,242, 99, 2, 3,
- 179, 3,184,236,101,128, 36,184,245,237,230,236,229,120,128, 1,
- 8,228,239,116,129, 1, 10, 3,201,225,227,227,229,238,116,128,
- 1, 10,229,228,233,236,236,225,243,237,225,236,108,128,247,184,
- 104, 4, 3,234, 3,246, 4,161, 4,165,225,225,242,237,229,238,
- 233,225,110,128, 5, 73,101, 6, 4, 4, 4, 24, 4, 35, 4,103,
- 4,115, 4,136,225,226,235,232,225,243,233,225,238,227,249,242,
- 233,236,236,233, 99,128, 4,188,227,249,242,233,236,236,233, 99,
- 128, 4, 39,100, 2, 4, 41, 4, 85,229,243,227,229,238,228,229,
- 114, 2, 4, 54, 4, 74,225,226,235,232,225,243,233,225,238,227,
- 249,242,233,236,236,233, 99,128, 4,190,227,249,242,233,236,236,
- 233, 99,128, 4,182,233,229,242,229,243,233,243,227,249,242,233,
- 236,236,233, 99,128, 4,244,232,225,242,237,229,238,233,225,110,
- 128, 5, 67,235,232,225,235,225,243,243,233,225,238,227,249,242,
- 233,236,236,233, 99,128, 4,203,246,229,242,244,233,227,225,236,
- 243,244,242,239,235,229,227,249,242,233,236,236,233, 99,128, 4,
- 184,105,128, 3,167,239,239,107,128, 1,135,233,242,227,245,237,
- 230,236,229,248,243,237,225,236,108,128,246,246,237,239,238,239,
- 243,240,225,227,101,128,255, 35,239,225,242,237,229,238,233,225,
- 110,128, 5, 81,243,237,225,236,108,128,247, 99, 68,142, 0, 68,
- 4,252, 5, 10, 5, 36, 5, 96, 5,121, 5,166, 5,173, 5,231,
- 5,244, 6, 0, 6, 12, 6, 28, 6, 48, 6, 57, 90,129, 1,241,
- 5, 2,227,225,242,239,110,128, 1,196, 97, 2, 5, 16, 5, 27,
- 225,242,237,229,238,233,225,110,128, 5, 52,230,242,233,227,225,
- 110,128, 1,137, 99, 4, 5, 46, 5, 53, 5, 62, 5, 89,225,242,
- 239,110,128, 1, 14,229,228,233,236,236, 97,128, 30, 16,233,242,
- 99, 2, 5, 70, 5, 75,236,101,128, 36,185,245,237,230,236,229,
- 248,226,229,236,239,119,128, 30, 18,242,239,225,116,128, 1, 16,
- 228,239,116, 2, 5,104, 5,113,225,227,227,229,238,116,128, 30,
- 10,226,229,236,239,119,128, 30, 12,101, 3, 5,129, 5,140, 5,
- 150,227,249,242,233,236,236,233, 99,128, 4, 20,233,227,239,240,
- 244,233, 99,128, 3,238,236,244, 97,129, 34, 6, 5,158,231,242,
- 229,229,107,128, 3,148,232,239,239,107,128, 1,138,105, 2, 5,
- 179, 5,218,229,242,229,243,233,115,131,246,203, 5,194, 5,202,
- 5,210,193,227,245,244,101,128,246,204,199,242,225,246,101,128,
- 246,205,243,237,225,236,108,128,247,168,231,225,237,237,225,231,
- 242,229,229,107,128, 3,220,234,229,227,249,242,233,236,236,233,
- 99,128, 4, 2,236,233,238,229,226,229,236,239,119,128, 30, 14,
- 237,239,238,239,243,240,225,227,101,128,255, 36,239,244,225,227,
- 227,229,238,244,243,237,225,236,108,128,246,247,115, 2, 6, 34,
- 6, 41,236,225,243,104,128, 1, 16,237,225,236,108,128,247,100,
- 244,239,240,226,225,114,128, 1,139,122,131, 1,242, 6, 67, 6,
- 75, 6,112,227,225,242,239,110,128, 1,197,101, 2, 6, 81, 6,
- 101,225,226,235,232,225,243,233,225,238,227,249,242,233,236,236,
- 233, 99,128, 4,224,227,249,242,233,236,236,233, 99,128, 4, 5,
- 232,229,227,249,242,233,236,236,233, 99,128, 4, 15, 69,146, 0,
- 69, 6,165, 6,183, 6,191, 7, 89, 7,153, 7,165, 7,183, 7,
- 211, 8, 7, 8, 36, 8, 94, 8,169, 8,189, 8,208, 8,248, 9,
- 44, 9,109, 9,115,225,227,245,244,101,129, 0,201, 6,175,243,
- 237,225,236,108,128,247,233,226,242,229,246,101,128, 1, 20, 99,
- 5, 6,203, 6,210, 6,224, 6,236, 7, 79,225,242,239,110,128,
- 1, 26,229,228,233,236,236,225,226,242,229,246,101,128, 30, 28,
- 232,225,242,237,229,238,233,225,110,128, 5, 53,233,242, 99, 2,
- 6,244, 6,249,236,101,128, 36,186,245,237,230,236,229,120,135,
- 0,202, 7, 16, 7, 24, 7, 32, 7, 43, 7, 51, 7, 63, 7, 71,
- 225,227,245,244,101,128, 30,190,226,229,236,239,119,128, 30, 24,
- 228,239,244,226,229,236,239,119,128, 30,198,231,242,225,246,101,
- 128, 30,192,232,239,239,235,225,226,239,246,101,128, 30,194,243,
- 237,225,236,108,128,247,234,244,233,236,228,101,128, 30,196,249,
- 242,233,236,236,233, 99,128, 4, 4,100, 3, 7, 97, 7,107, 7,
- 127,226,236,231,242,225,246,101,128, 2, 4,233,229,242,229,243,
- 233,115,129, 0,203, 7,119,243,237,225,236,108,128,247,235,239,
- 116,130, 1, 22, 7,136, 7,145,225,227,227,229,238,116,128, 1,
- 22,226,229,236,239,119,128, 30,184,230,227,249,242,233,236,236,
- 233, 99,128, 4, 36,231,242,225,246,101,129, 0,200, 7,175,243,
- 237,225,236,108,128,247,232,104, 2, 7,189, 7,200,225,242,237,
- 229,238,233,225,110,128, 5, 55,239,239,235,225,226,239,246,101,
- 128, 30,186,105, 3, 7,219, 7,230, 7,245,231,232,244,242,239,
- 237,225,110,128, 33,103,238,246,229,242,244,229,228,226,242,229,
- 246,101,128, 2, 6,239,244,233,230,233,229,228,227,249,242,233,
- 236,236,233, 99,128, 4,100,108, 2, 8, 13, 8, 24,227,249,242,
- 233,236,236,233, 99,128, 4, 27,229,246,229,238,242,239,237,225,
- 110,128, 33,106,109, 3, 8, 44, 8, 72, 8, 83,225,227,242,239,
- 110,130, 1, 18, 8, 56, 8, 64,225,227,245,244,101,128, 30, 22,
- 231,242,225,246,101,128, 30, 20,227,249,242,233,236,236,233, 99,
- 128, 4, 28,239,238,239,243,240,225,227,101,128,255, 37,110, 4,
- 8,104, 8,115, 8,135, 8,154,227,249,242,233,236,236,233, 99,
- 128, 4, 29,228,229,243,227,229,238,228,229,242,227,249,242,233,
- 236,236,233, 99,128, 4,162,103,129, 1, 74, 8,141,232,229,227,
- 249,242,233,236,236,233, 99,128, 4,164,232,239,239,235,227,249,
- 242,233,236,236,233, 99,128, 4,199,111, 2, 8,175, 8,183,231,
- 239,238,229,107,128, 1, 24,240,229,110,128, 1,144,240,243,233,
- 236,239,110,129, 3,149, 8,200,244,239,238,239,115,128, 3,136,
- 114, 2, 8,214, 8,225,227,249,242,233,236,236,233, 99,128, 4,
- 32,229,246,229,242,243,229,100,129, 1,142, 8,237,227,249,242,
- 233,236,236,233, 99,128, 4, 45,115, 4, 9, 2, 9, 13, 9, 33,
- 9, 37,227,249,242,233,236,236,233, 99,128, 4, 33,228,229,243,
- 227,229,238,228,229,242,227,249,242,233,236,236,233, 99,128, 4,
- 170,104,128, 1,169,237,225,236,108,128,247,101,116, 3, 9, 52,
- 9, 78, 9, 92, 97,130, 3,151, 9, 60, 9, 70,242,237,229,238,
- 233,225,110,128, 5, 56,244,239,238,239,115,128, 3,137,104,129,
- 0,208, 9, 84,243,237,225,236,108,128,247,240,233,236,228,101,
- 129, 30,188, 9,101,226,229,236,239,119,128, 30, 26,245,242,111,
- 128, 32,172,250,104,130, 1,183, 9,124, 9,132,227,225,242,239,
- 110,128, 1,238,242,229,246,229,242,243,229,100,128, 1,184, 70,
- 136, 0, 70, 9,163, 9,172, 9,184, 9,212, 9,219, 9,248, 10,
- 4, 10, 15,227,233,242,227,236,101,128, 36,187,228,239,244,225,
- 227,227,229,238,116,128, 30, 30,101, 2, 9,190, 9,202,232,225,
- 242,237,229,238,233,225,110,128, 5, 86,233,227,239,240,244,233,
- 99,128, 3,228,232,239,239,107,128, 1,145,105, 2, 9,225, 9,
- 238,244,225,227,249,242,233,236,236,233, 99,128, 4,114,246,229,
- 242,239,237,225,110,128, 33,100,237,239,238,239,243,240,225,227,
- 101,128,255, 38,239,245,242,242,239,237,225,110,128, 33, 99,243,
- 237,225,236,108,128,247,102, 71,140, 0, 71, 10, 51, 10, 61, 10,
- 107, 10,115, 10,176, 10,193, 10,205, 11, 39, 11, 52, 11, 65, 11,
- 90, 11,107,194,243,241,245,225,242,101,128, 51,135, 97, 3, 10,
- 69, 10, 76, 10, 94,227,245,244,101,128, 1,244,237,237, 97,129,
- 3,147, 10, 84,225,230,242,233,227,225,110,128, 1,148,238,231,
- 233,225,227,239,240,244,233, 99,128, 3,234,226,242,229,246,101,
- 128, 1, 30, 99, 4, 10,125, 10,132, 10,141, 10,163,225,242,239,
- 110,128, 1,230,229,228,233,236,236, 97,128, 1, 34,233,242, 99,
- 2, 10,149, 10,154,236,101,128, 36,188,245,237,230,236,229,120,
- 128, 1, 28,239,237,237,225,225,227,227,229,238,116,128, 1, 34,
- 228,239,116,129, 1, 32, 10,184,225,227,227,229,238,116,128, 1,
- 32,229,227,249,242,233,236,236,233, 99,128, 4, 19,104, 3, 10,
- 213, 10,226, 11, 33,225,228,225,242,237,229,238,233,225,110,128,
- 5, 66,101, 3, 10,234, 10,255, 11, 16,237,233,228,228,236,229,
- 232,239,239,235,227,249,242,233,236,236,233, 99,128, 4,148,243,
- 244,242,239,235,229,227,249,242,233,236,236,233, 99,128, 4,146,
- 245,240,244,245,242,238,227,249,242,233,236,236,233, 99,128, 4,
- 144,239,239,107,128, 1,147,233,237,225,242,237,229,238,233,225,
- 110,128, 5, 51,234,229,227,249,242,233,236,236,233, 99,128, 4,
- 3,109, 2, 11, 71, 11, 79,225,227,242,239,110,128, 30, 32,239,
- 238,239,243,240,225,227,101,128,255, 39,242,225,246,101,129,246,
- 206, 11, 99,243,237,225,236,108,128,247, 96,115, 2, 11,113, 11,
- 129,237,225,236,108,129,247,103, 11,122,232,239,239,107,128, 2,
- 155,244,242,239,235,101,128, 1,228, 72,140, 0, 72, 11,165, 11,
- 190, 11,198, 11,208, 12, 17, 12, 40, 12, 77, 12,117, 12,129, 12,
- 157, 12,165, 12,189,177,184, 53, 3, 11,175, 11,180, 11,185,179,
- 51,128, 37,207,180, 51,128, 37,170,181, 49,128, 37,171,178,178,
- 176,183, 51,128, 37,161,208,243,241,245,225,242,101,128, 51,203,
- 97, 3, 11,216, 11,236, 12, 0,225,226,235,232,225,243,233,225,
- 238,227,249,242,233,236,236,233, 99,128, 4,168,228,229,243,227,
- 229,238,228,229,242,227,249,242,233,236,236,233, 99,128, 4,178,
- 242,228,243,233,231,238,227,249,242,233,236,236,233, 99,128, 4,
- 42, 98, 2, 12, 23, 12, 28,225,114,128, 1, 38,242,229,246,229,
- 226,229,236,239,119,128, 30, 42, 99, 2, 12, 46, 12, 55,229,228,
- 233,236,236, 97,128, 30, 40,233,242, 99, 2, 12, 63, 12, 68,236,
- 101,128, 36,189,245,237,230,236,229,120,128, 1, 36,100, 2, 12,
- 83, 12, 93,233,229,242,229,243,233,115,128, 30, 38,239,116, 2,
- 12,100, 12,109,225,227,227,229,238,116,128, 30, 34,226,229,236,
- 239,119,128, 30, 36,237,239,238,239,243,240,225,227,101,128,255,
- 40,111, 2, 12,135, 12,146,225,242,237,229,238,233,225,110,128,
- 5, 64,242,233,227,239,240,244,233, 99,128, 3,232,243,237,225,
- 236,108,128,247,104,245,238,231,225,242,245,237,236,225,245,116,
- 129,246,207, 12,181,243,237,225,236,108,128,246,248,250,243,241,
- 245,225,242,101,128, 51,144, 73,146, 0, 73, 12,239, 12,251, 12,
- 255, 13, 11, 13, 29, 13, 37, 13, 94, 13,181, 13,214, 13,224, 13,
- 242, 13,254, 14, 48, 14, 86, 14, 99, 14,166, 14,187, 14,205,193,
- 227,249,242,233,236,236,233, 99,128, 4, 47, 74,128, 1, 50,213,
- 227,249,242,233,236,236,233, 99,128, 4, 46,225,227,245,244,101,
- 129, 0,205, 13, 21,243,237,225,236,108,128,247,237,226,242,229,
- 246,101,128, 1, 44, 99, 3, 13, 45, 13, 52, 13, 84,225,242,239,
- 110,128, 1,207,233,242, 99, 2, 13, 60, 13, 65,236,101,128, 36,
- 190,245,237,230,236,229,120,129, 0,206, 13, 76,243,237,225,236,
- 108,128,247,238,249,242,233,236,236,233, 99,128, 4, 6,100, 3,
- 13,102, 13,112, 13,155,226,236,231,242,225,246,101,128, 2, 8,
- 233,229,242,229,243,233,115,131, 0,207, 13,128, 13,136, 13,147,
- 225,227,245,244,101,128, 30, 46,227,249,242,233,236,236,233, 99,
- 128, 4,228,243,237,225,236,108,128,247,239,239,116,130, 1, 48,
- 13,164, 13,173,225,227,227,229,238,116,128, 1, 48,226,229,236,
- 239,119,128, 30,202,101, 2, 13,187, 13,203,226,242,229,246,229,
- 227,249,242,233,236,236,233, 99,128, 4,214,227,249,242,233,236,
- 236,233, 99,128, 4, 21,230,242,225,235,244,245,114,128, 33, 17,
- 231,242,225,246,101,129, 0,204, 13,234,243,237,225,236,108,128,
- 247,236,232,239,239,235,225,226,239,246,101,128, 30,200,105, 3,
- 14, 6, 14, 17, 14, 32,227,249,242,233,236,236,233, 99,128, 4,
- 24,238,246,229,242,244,229,228,226,242,229,246,101,128, 2, 10,
- 243,232,239,242,244,227,249,242,233,236,236,233, 99,128, 4, 25,
- 109, 2, 14, 54, 14, 75,225,227,242,239,110,129, 1, 42, 14, 64,
- 227,249,242,233,236,236,233, 99,128, 4,226,239,238,239,243,240,
- 225,227,101,128,255, 41,238,233,225,242,237,229,238,233,225,110,
- 128, 5, 59,111, 3, 14,107, 14,118, 14,126,227,249,242,233,236,
- 236,233, 99,128, 4, 1,231,239,238,229,107,128, 1, 46,244, 97,
- 131, 3,153, 14,137, 14,147, 14,158,225,230,242,233,227,225,110,
- 128, 1,150,228,233,229,242,229,243,233,115,128, 3,170,244,239,
- 238,239,115,128, 3,138,115, 2, 14,172, 14,179,237,225,236,108,
- 128,247,105,244,242,239,235,101,128, 1,151,244,233,236,228,101,
- 129, 1, 40, 14,197,226,229,236,239,119,128, 30, 44,250,232,233,
- 244,243, 97, 2, 14,216, 14,227,227,249,242,233,236,236,233, 99,
- 128, 4,116,228,226,236,231,242,225,246,229,227,249,242,233,236,
- 236,233, 99,128, 4,118, 74,134, 0, 74, 15, 6, 15, 18, 15, 41,
- 15, 53, 15, 67, 15, 79,225,225,242,237,229,238,233,225,110,128,
- 5, 65,227,233,242, 99, 2, 15, 27, 15, 32,236,101,128, 36,191,
- 245,237,230,236,229,120,128, 1, 52,229,227,249,242,233,236,236,
- 233, 99,128, 4, 8,232,229,232,225,242,237,229,238,233,225,110,
- 128, 5, 75,237,239,238,239,243,240,225,227,101,128,255, 42,243,
- 237,225,236,108,128,247,106, 75,140, 0, 75, 15,115, 15,125, 15,
- 135, 16, 18, 16, 65, 16, 76, 16,106, 16,143, 16,156, 16,168, 16,
- 180, 16,208,194,243,241,245,225,242,101,128, 51,133,203,243,241,
- 245,225,242,101,128, 51,205, 97, 7, 15,151, 15,169, 15,191, 15,
- 211, 15,226, 15,232, 15,249,226,225,243,232,235,233,242,227,249,
- 242,233,236,236,233, 99,128, 4,160, 99, 2, 15,175, 15,181,245,
- 244,101,128, 30, 48,249,242,233,236,236,233, 99,128, 4, 26,228,
- 229,243,227,229,238,228,229,242,227,249,242,233,236,236,233, 99,
- 128, 4,154,232,239,239,235,227,249,242,233,236,236,233, 99,128,
- 4,195,240,240, 97,128, 3,154,243,244,242,239,235,229,227,249,
- 242,233,236,236,233, 99,128, 4,158,246,229,242,244,233,227,225,
- 236,243,244,242,239,235,229,227,249,242,233,236,236,233, 99,128,
- 4,156, 99, 4, 16, 28, 16, 35, 16, 44, 16, 52,225,242,239,110,
- 128, 1,232,229,228,233,236,236, 97,128, 1, 54,233,242,227,236,
- 101,128, 36,192,239,237,237,225,225,227,227,229,238,116,128, 1,
- 54,228,239,244,226,229,236,239,119,128, 30, 50,101, 2, 16, 82,
- 16, 94,232,225,242,237,229,238,233,225,110,128, 5, 84,238,225,
- 242,237,229,238,233,225,110,128, 5, 63,104, 3, 16,114, 16,126,
- 16,137,225,227,249,242,233,236,236,233, 99,128, 4, 37,229,233,
- 227,239,240,244,233, 99,128, 3,230,239,239,107,128, 1,152,234,
- 229,227,249,242,233,236,236,233, 99,128, 4, 12,236,233,238,229,
- 226,229,236,239,119,128, 30, 52,237,239,238,239,243,240,225,227,
- 101,128,255, 43,239,240,240, 97, 2, 16,189, 16,200,227,249,242,
- 233,236,236,233, 99,128, 4,128,231,242,229,229,107,128, 3,222,
- 115, 2, 16,214, 16,226,233,227,249,242,233,236,236,233, 99,128,
- 4,110,237,225,236,108,128,247,107, 76,138, 0, 76, 17, 1, 17,
- 5, 17, 9, 17, 29, 17, 95, 17,133, 17,147, 17,165, 17,177, 17,
- 189, 74,128, 1,199, 76,128,246,191, 97, 2, 17, 15, 17, 22,227,
- 245,244,101,128, 1, 57,237,226,228, 97,128, 3,155, 99, 4, 17,
- 39, 17, 46, 17, 55, 17, 82,225,242,239,110,128, 1, 61,229,228,
- 233,236,236, 97,128, 1, 59,233,242, 99, 2, 17, 63, 17, 68,236,
- 101,128, 36,193,245,237,230,236,229,248,226,229,236,239,119,128,
- 30, 60,239,237,237,225,225,227,227,229,238,116,128, 1, 59,228,
- 239,116,130, 1, 63, 17,105, 17,114,225,227,227,229,238,116,128,
- 1, 63,226,229,236,239,119,129, 30, 54, 17,124,237,225,227,242,
- 239,110,128, 30, 56,233,247,238,225,242,237,229,238,233,225,110,
- 128, 5, 60,106,129, 1,200, 17,153,229,227,249,242,233,236,236,
- 233, 99,128, 4, 9,236,233,238,229,226,229,236,239,119,128, 30,
- 58,237,239,238,239,243,240,225,227,101,128,255, 44,115, 2, 17,
- 195, 17,212,236,225,243,104,129, 1, 65, 17,204,243,237,225,236,
- 108,128,246,249,237,225,236,108,128,247,108, 77,137, 0, 77, 17,
- 241, 17,251, 18, 24, 18, 33, 18, 58, 18, 71, 18, 83, 18, 91, 18,
- 100,194,243,241,245,225,242,101,128, 51,134,225, 99, 2, 18, 2,
- 18, 18,242,239,110,129,246,208, 18, 10,243,237,225,236,108,128,
- 247,175,245,244,101,128, 30, 62,227,233,242,227,236,101,128, 36,
- 194,228,239,116, 2, 18, 41, 18, 50,225,227,227,229,238,116,128,
- 30, 64,226,229,236,239,119,128, 30, 66,229,238,225,242,237,229,
- 238,233,225,110,128, 5, 68,237,239,238,239,243,240,225,227,101,
- 128,255, 45,243,237,225,236,108,128,247,109,244,245,242,238,229,
- 100,128, 1,156,117,128, 3,156, 78,141, 0, 78, 18,134, 18,138,
- 18,146, 18,212, 18,237, 18,248, 19, 3, 19, 21, 19, 33, 19, 45,
- 19, 58, 19, 66, 19, 84, 74,128, 1,202,225,227,245,244,101,128,
- 1, 67, 99, 4, 18,156, 18,163, 18,172, 18,199,225,242,239,110,
- 128, 1, 71,229,228,233,236,236, 97,128, 1, 69,233,242, 99, 2,
- 18,180, 18,185,236,101,128, 36,195,245,237,230,236,229,248,226,
- 229,236,239,119,128, 30, 74,239,237,237,225,225,227,227,229,238,
- 116,128, 1, 69,228,239,116, 2, 18,220, 18,229,225,227,227,229,
- 238,116,128, 30, 68,226,229,236,239,119,128, 30, 70,232,239,239,
- 235,236,229,230,116,128, 1,157,233,238,229,242,239,237,225,110,
- 128, 33,104,106,129, 1,203, 19, 9,229,227,249,242,233,236,236,
- 233, 99,128, 4, 10,236,233,238,229,226,229,236,239,119,128, 30,
- 72,237,239,238,239,243,240,225,227,101,128,255, 46,239,247,225,
- 242,237,229,238,233,225,110,128, 5, 70,243,237,225,236,108,128,
- 247,110,244,233,236,228,101,129, 0,209, 19, 76,243,237,225,236,
- 108,128,247,241,117,128, 3,157, 79,141, 0, 79, 19,118, 19,132,
- 19,150, 19,203, 20, 78, 20,152, 20,187, 21, 48, 21, 69, 21,213,
- 21,223, 21,254, 22, 53, 69,129, 1, 82, 19,124,243,237,225,236,
- 108,128,246,250,225,227,245,244,101,129, 0,211, 19,142,243,237,
- 225,236,108,128,247,243, 98, 2, 19,156, 19,196,225,242,242,229,
- 100, 2, 19,166, 19,177,227,249,242,233,236,236,233, 99,128, 4,
- 232,228,233,229,242,229,243,233,243,227,249,242,233,236,236,233,
- 99,128, 4,234,242,229,246,101,128, 1, 78, 99, 4, 19,213, 19,
- 220, 19,235, 20, 68,225,242,239,110,128, 1,209,229,238,244,229,
- 242,229,228,244,233,236,228,101,128, 1,159,233,242, 99, 2, 19,
- 243, 19,248,236,101,128, 36,196,245,237,230,236,229,120,134, 0,
- 212, 20, 13, 20, 21, 20, 32, 20, 40, 20, 52, 20, 60,225,227,245,
- 244,101,128, 30,208,228,239,244,226,229,236,239,119,128, 30,216,
- 231,242,225,246,101,128, 30,210,232,239,239,235,225,226,239,246,
- 101,128, 30,212,243,237,225,236,108,128,247,244,244,233,236,228,
- 101,128, 30,214,249,242,233,236,236,233, 99,128, 4, 30,100, 3,
- 20, 86, 20,109, 20,142,226,108, 2, 20, 93, 20,101,225,227,245,
- 244,101,128, 1, 80,231,242,225,246,101,128, 2, 12,233,229,242,
- 229,243,233,115,130, 0,214, 20,123, 20,134,227,249,242,233,236,
- 236,233, 99,128, 4,230,243,237,225,236,108,128,247,246,239,244,
- 226,229,236,239,119,128, 30,204,103, 2, 20,158, 20,170,239,238,
- 229,235,243,237,225,236,108,128,246,251,242,225,246,101,129, 0,
- 210, 20,179,243,237,225,236,108,128,247,242,104, 4, 20,197, 20,
- 208, 20,212, 21, 34,225,242,237,229,238,233,225,110,128, 5, 85,
- 109,128, 33, 38,111, 2, 20,218, 20,228,239,235,225,226,239,246,
- 101,128, 30,206,242,110,133, 1,160, 20,243, 20,251, 21, 6, 21,
- 14, 21, 26,225,227,245,244,101,128, 30,218,228,239,244,226,229,
- 236,239,119,128, 30,226,231,242,225,246,101,128, 30,220,232,239,
- 239,235,225,226,239,246,101,128, 30,222,244,233,236,228,101,128,
- 30,224,245,238,231,225,242,245,237,236,225,245,116,128, 1, 80,
- 105,129, 1,162, 21, 54,238,246,229,242,244,229,228,226,242,229,
- 246,101,128, 2, 14,109, 4, 21, 79, 21,107, 21,184, 21,202,225,
- 227,242,239,110,130, 1, 76, 21, 91, 21, 99,225,227,245,244,101,
- 128, 30, 82,231,242,225,246,101,128, 30, 80,229,231, 97,132, 33,
- 38, 21,121, 21,132, 21,140, 21,156,227,249,242,233,236,236,233,
- 99,128, 4, 96,231,242,229,229,107,128, 3,169,242,239,245,238,
- 228,227,249,242,233,236,236,233, 99,128, 4,122,116, 2, 21,162,
- 21,177,233,244,236,239,227,249,242,233,236,236,233, 99,128, 4,
- 124,239,238,239,115,128, 3,143,233,227,242,239,110,129, 3,159,
- 21,194,244,239,238,239,115,128, 3,140,239,238,239,243,240,225,
- 227,101,128,255, 47,238,229,242,239,237,225,110,128, 33, 96,111,
- 2, 21,229, 21,248,231,239,238,229,107,129, 1,234, 21,239,237,
- 225,227,242,239,110,128, 1,236,240,229,110,128, 1,134,115, 3,
- 22, 6, 22, 33, 22, 40,236,225,243,104,130, 0,216, 22, 17, 22,
- 25,225,227,245,244,101,128, 1,254,243,237,225,236,108,128,247,
- 248,237,225,236,108,128,247,111,244,242,239,235,229,225,227,245,
- 244,101,128, 1,254,116, 2, 22, 59, 22, 70,227,249,242,233,236,
- 236,233, 99,128, 4,126,233,236,228,101,131, 0,213, 22, 83, 22,
- 91, 22,102,225,227,245,244,101,128, 30, 76,228,233,229,242,229,
- 243,233,115,128, 30, 78,243,237,225,236,108,128,247,245, 80,136,
- 0, 80, 22,130, 22,138, 22,147, 22,159, 22,211, 22,227, 22,246,
- 23, 2,225,227,245,244,101,128, 30, 84,227,233,242,227,236,101,
- 128, 36,197,228,239,244,225,227,227,229,238,116,128, 30, 86,101,
- 3, 22,167, 22,178, 22,190,227,249,242,233,236,236,233, 99,128,
- 4, 31,232,225,242,237,229,238,233,225,110,128, 5, 74,237,233,
- 228,228,236,229,232,239,239,235,227,249,242,233,236,236,233, 99,
- 128, 4,166,104, 2, 22,217, 22,221,105,128, 3,166,239,239,107,
- 128, 1,164,105,129, 3,160, 22,233,247,242,225,242,237,229,238,
- 233,225,110,128, 5, 83,237,239,238,239,243,240,225,227,101,128,
- 255, 48,115, 2, 23, 8, 23, 25,105,129, 3,168, 23, 14,227,249,
- 242,233,236,236,233, 99,128, 4,112,237,225,236,108,128,247,112,
- 81,131, 0, 81, 23, 42, 23, 51, 23, 63,227,233,242,227,236,101,
- 128, 36,198,237,239,238,239,243,240,225,227,101,128,255, 49,243,
- 237,225,236,108,128,247,113, 82,138, 0, 82, 23, 95, 23,119, 23,
- 166, 23,217, 23,230, 23,240, 23,245, 24, 19, 24, 31, 24, 43, 97,
- 2, 23,101, 23,112,225,242,237,229,238,233,225,110,128, 5, 76,
- 227,245,244,101,128, 1, 84, 99, 4, 23,129, 23,136, 23,145, 23,
- 153,225,242,239,110,128, 1, 88,229,228,233,236,236, 97,128, 1,
- 86,233,242,227,236,101,128, 36,199,239,237,237,225,225,227,227,
- 229,238,116,128, 1, 86,100, 2, 23,172, 23,182,226,236,231,242,
- 225,246,101,128, 2, 16,239,116, 2, 23,189, 23,198,225,227,227,
- 229,238,116,128, 30, 88,226,229,236,239,119,129, 30, 90, 23,208,
- 237,225,227,242,239,110,128, 30, 92,229,232,225,242,237,229,238,
- 233,225,110,128, 5, 80,230,242,225,235,244,245,114,128, 33, 28,
- 232,111,128, 3,161,233,110, 2, 23,252, 24, 5,231,243,237,225,
- 236,108,128,246,252,246,229,242,244,229,228,226,242,229,246,101,
- 128, 2, 18,236,233,238,229,226,229,236,239,119,128, 30, 94,237,
- 239,238,239,243,240,225,227,101,128,255, 50,243,237,225,236,108,
- 129,247,114, 24, 53,233,238,246,229,242,244,229,100,129, 2,129,
- 24, 66,243,245,240,229,242,233,239,114,128, 2,182, 83,139, 0,
- 83, 24,103, 26, 17, 26, 55, 26,182, 26,221, 26,250, 27, 84, 27,
- 105, 27,117, 27,135, 27,143, 70, 6, 24,117, 24,209, 24,241, 25,
- 77, 25,119, 25,221, 48, 9, 24,137, 24,145, 24,153, 24,161, 24,
- 169, 24,177, 24,185, 24,193, 24,201,177,176,176,176, 48,128, 37,
- 12,178,176,176,176, 48,128, 37, 20,179,176,176,176, 48,128, 37,
- 16,180,176,176,176, 48,128, 37, 24,181,176,176,176, 48,128, 37,
- 60,182,176,176,176, 48,128, 37, 44,183,176,176,176, 48,128, 37,
- 52,184,176,176,176, 48,128, 37, 28,185,176,176,176, 48,128, 37,
- 36, 49, 3, 24,217, 24,225, 24,233,176,176,176,176, 48,128, 37,
- 0,177,176,176,176, 48,128, 37, 2,185,176,176,176, 48,128, 37,
- 97, 50, 9, 25, 5, 25, 13, 25, 21, 25, 29, 25, 37, 25, 45, 25,
- 53, 25, 61, 25, 69,176,176,176,176, 48,128, 37, 98,177,176,176,
- 176, 48,128, 37, 86,178,176,176,176, 48,128, 37, 85,179,176,176,
- 176, 48,128, 37, 99,180,176,176,176, 48,128, 37, 81,181,176,176,
- 176, 48,128, 37, 87,182,176,176,176, 48,128, 37, 93,183,176,176,
- 176, 48,128, 37, 92,184,176,176,176, 48,128, 37, 91, 51, 4, 25,
- 87, 25, 95, 25,103, 25,111,182,176,176,176, 48,128, 37, 94,183,
- 176,176,176, 48,128, 37, 95,184,176,176,176, 48,128, 37, 90,185,
- 176,176,176, 48,128, 37, 84, 52, 10, 25,141, 25,149, 25,157, 25,
- 165, 25,173, 25,181, 25,189, 25,197, 25,205, 25,213,176,176,176,
- 176, 48,128, 37,105,177,176,176,176, 48,128, 37,102,178,176,176,
- 176, 48,128, 37, 96,179,176,176,176, 48,128, 37, 80,180,176,176,
- 176, 48,128, 37,108,181,176,176,176, 48,128, 37,103,182,176,176,
- 176, 48,128, 37,104,183,176,176,176, 48,128, 37,100,184,176,176,
- 176, 48,128, 37,101,185,176,176,176, 48,128, 37, 89, 53, 5, 25,
- 233, 25,241, 25,249, 26, 1, 26, 9,176,176,176,176, 48,128, 37,
- 88,177,176,176,176, 48,128, 37, 82,178,176,176,176, 48,128, 37,
- 83,179,176,176,176, 48,128, 37,107,180,176,176,176, 48,128, 37,
- 106, 97, 2, 26, 23, 26, 44,227,245,244,101,129, 1, 90, 26, 32,
- 228,239,244,225,227,227,229,238,116,128, 30,100,237,240,233,231,
- 242,229,229,107,128, 3,224, 99, 5, 26, 67, 26, 98, 26,107, 26,
- 147, 26,169,225,242,239,110,130, 1, 96, 26, 78, 26, 90,228,239,
- 244,225,227,227,229,238,116,128, 30,102,243,237,225,236,108,128,
- 246,253,229,228,233,236,236, 97,128, 1, 94,232,247, 97,130, 1,
- 143, 26,117, 26,128,227,249,242,233,236,236,233, 99,128, 4,216,
- 228,233,229,242,229,243,233,243,227,249,242,233,236,236,233, 99,
- 128, 4,218,233,242, 99, 2, 26,155, 26,160,236,101,128, 36,200,
- 245,237,230,236,229,120,128, 1, 92,239,237,237,225,225,227,227,
- 229,238,116,128, 2, 24,228,239,116, 2, 26,190, 26,199,225,227,
- 227,229,238,116,128, 30, 96,226,229,236,239,119,129, 30, 98, 26,
- 209,228,239,244,225,227,227,229,238,116,128, 30,104,101, 2, 26,
- 227, 26,239,232,225,242,237,229,238,233,225,110,128, 5, 77,246,
- 229,238,242,239,237,225,110,128, 33,102,104, 5, 27, 6, 27, 34,
- 27, 48, 27, 59, 27, 72, 97, 2, 27, 12, 27, 23,225,242,237,229,
- 238,233,225,110,128, 5, 71,227,249,242,233,236,236,233, 99,128,
- 4, 40,227,232,225,227,249,242,233,236,236,233, 99,128, 4, 41,
- 229,233,227,239,240,244,233, 99,128, 3,226,232,225,227,249,242,
- 233,236,236,233, 99,128, 4,186,233,237,225,227,239,240,244,233,
- 99,128, 3,236,105, 2, 27, 90, 27, 96,231,237, 97,128, 3,163,
- 248,242,239,237,225,110,128, 33,101,237,239,238,239,243,240,225,
- 227,101,128,255, 51,239,230,244,243,233,231,238,227,249,242,233,
- 236,236,233, 99,128, 4, 44,243,237,225,236,108,128,247,115,244,
- 233,231,237,225,231,242,229,229,107,128, 3,218, 84,141, 0, 84,
- 27,186, 27,191, 27,197, 28, 7, 28, 32, 28, 96, 28,147, 28,177,
- 28,189, 28,201, 28,246, 29, 6, 29, 46,225,117,128, 3,164,226,
- 225,114,128, 1,102, 99, 4, 27,207, 27,214, 27,223, 27,250,225,
- 242,239,110,128, 1,100,229,228,233,236,236, 97,128, 1, 98,233,
- 242, 99, 2, 27,231, 27,236,236,101,128, 36,201,245,237,230,236,
- 229,248,226,229,236,239,119,128, 30,112,239,237,237,225,225,227,
- 227,229,238,116,128, 1, 98,228,239,116, 2, 28, 15, 28, 24,225,
- 227,227,229,238,116,128, 30,106,226,229,236,239,119,128, 30,108,
- 101, 4, 28, 42, 28, 53, 28, 73, 28, 82,227,249,242,233,236,236,
- 233, 99,128, 4, 34,228,229,243,227,229,238,228,229,242,227,249,
- 242,233,236,236,233, 99,128, 4,172,238,242,239,237,225,110,128,
- 33,105,244,243,229,227,249,242,233,236,236,233, 99,128, 4,180,
- 104, 3, 28,104, 28,110, 28,136,229,244, 97,128, 3,152,111, 2,
- 28,116, 28,121,239,107,128, 1,172,242,110,129, 0,222, 28,128,
- 243,237,225,236,108,128,247,254,242,229,229,242,239,237,225,110,
- 128, 33, 98,105, 2, 28,153, 28,164,236,228,229,243,237,225,236,
- 108,128,246,254,247,238,225,242,237,229,238,233,225,110,128, 5,
- 79,236,233,238,229,226,229,236,239,119,128, 30,110,237,239,238,
- 239,243,240,225,227,101,128,255, 52,111, 2, 28,207, 28,218,225,
- 242,237,229,238,233,225,110,128, 5, 57,238,101, 3, 28,227, 28,
- 234, 28,240,230,233,246,101,128, 1,188,243,233,120,128, 1,132,
- 244,247,111,128, 1,167,242,229,244,242,239,230,236,229,248,232,
- 239,239,107,128, 1,174,115, 3, 29, 14, 29, 26, 29, 39,229,227,
- 249,242,233,236,236,233, 99,128, 4, 38,232,229,227,249,242,233,
- 236,236,233, 99,128, 4, 11,237,225,236,108,128,247,116,119, 2,
- 29, 52, 29, 64,229,236,246,229,242,239,237,225,110,128, 33,107,
- 239,242,239,237,225,110,128, 33, 97, 85,142, 0, 85, 29,105, 29,
- 123, 29,131, 29,198, 30, 69, 30, 87, 30,198, 30,214, 30,226, 31,
- 21, 31, 30, 31,142, 31,149, 31,219,225,227,245,244,101,129, 0,
- 218, 29,115,243,237,225,236,108,128,247,250,226,242,229,246,101,
- 128, 1,108, 99, 3, 29,139, 29,146, 29,188,225,242,239,110,128,
- 1,211,233,242, 99, 2, 29,154, 29,159,236,101,128, 36,202,245,
- 237,230,236,229,120,130, 0,219, 29,172, 29,180,226,229,236,239,
- 119,128, 30,118,243,237,225,236,108,128,247,251,249,242,233,236,
- 236,233, 99,128, 4, 35,100, 3, 29,206, 29,229, 30, 59,226,108,
- 2, 29,213, 29,221,225,227,245,244,101,128, 1,112,231,242,225,
- 246,101,128, 2, 20,233,229,242,229,243,233,115,134, 0,220, 29,
- 251, 30, 3, 30, 11, 30, 34, 30, 42, 30, 51,225,227,245,244,101,
- 128, 1,215,226,229,236,239,119,128, 30,114, 99, 2, 30, 17, 30,
- 24,225,242,239,110,128, 1,217,249,242,233,236,236,233, 99,128,
- 4,240,231,242,225,246,101,128, 1,219,237,225,227,242,239,110,
- 128, 1,213,243,237,225,236,108,128,247,252,239,244,226,229,236,
- 239,119,128, 30,228,231,242,225,246,101,129, 0,217, 30, 79,243,
- 237,225,236,108,128,247,249,104, 2, 30, 93, 30,171,111, 2, 30,
- 99, 30,109,239,235,225,226,239,246,101,128, 30,230,242,110,133,
- 1,175, 30,124, 30,132, 30,143, 30,151, 30,163,225,227,245,244,
- 101,128, 30,232,228,239,244,226,229,236,239,119,128, 30,240,231,
- 242,225,246,101,128, 30,234,232,239,239,235,225,226,239,246,101,
- 128, 30,236,244,233,236,228,101,128, 30,238,245,238,231,225,242,
- 245,237,236,225,245,116,129, 1,112, 30,187,227,249,242,233,236,
- 236,233, 99,128, 4,242,233,238,246,229,242,244,229,228,226,242,
- 229,246,101,128, 2, 22,235,227,249,242,233,236,236,233, 99,128,
- 4,120,109, 2, 30,232, 31, 10,225,227,242,239,110,130, 1,106,
- 30,244, 30,255,227,249,242,233,236,236,233, 99,128, 4,238,228,
- 233,229,242,229,243,233,115,128, 30,122,239,238,239,243,240,225,
- 227,101,128,255, 53,239,231,239,238,229,107,128, 1,114,240,243,
- 233,236,239,110,133, 3,165, 31, 49, 31, 53, 31, 90, 31,121, 31,
- 134, 49,128, 3,210, 97, 2, 31, 59, 31, 81,227,245,244,229,232,
- 239,239,235,243,249,237,226,239,236,231,242,229,229,107,128, 3,
- 211,230,242,233,227,225,110,128, 1,177,228,233,229,242,229,243,
- 233,115,129, 3,171, 31,103,232,239,239,235,243,249,237,226,239,
- 236,231,242,229,229,107,128, 3,212,232,239,239,235,243,249,237,
- 226,239,108,128, 3,210,244,239,238,239,115,128, 3,142,242,233,
- 238,103,128, 1,110,115, 3, 31,157, 31,172, 31,179,232,239,242,
- 244,227,249,242,233,236,236,233, 99,128, 4, 14,237,225,236,108,
- 128,247,117,244,242,225,233,231,232,116, 2, 31,191, 31,202,227,
- 249,242,233,236,236,233, 99,128, 4,174,243,244,242,239,235,229,
- 227,249,242,233,236,236,233, 99,128, 4,176,244,233,236,228,101,
- 130, 1,104, 31,231, 31,239,225,227,245,244,101,128, 30,120,226,
- 229,236,239,119,128, 30,116, 86,136, 0, 86, 32, 11, 32, 20, 32,
- 31, 32, 60, 32, 67, 32, 79, 32, 91, 32, 99,227,233,242,227,236,
- 101,128, 36,203,228,239,244,226,229,236,239,119,128, 30,126,101,
- 2, 32, 37, 32, 48,227,249,242,233,236,236,233, 99,128, 4, 18,
- 247,225,242,237,229,238,233,225,110,128, 5, 78,232,239,239,107,
- 128, 1,178,237,239,238,239,243,240,225,227,101,128,255, 54,239,
- 225,242,237,229,238,233,225,110,128, 5, 72,243,237,225,236,108,
- 128,247,118,244,233,236,228,101,128, 30,124, 87,134, 0, 87, 32,
- 123, 32,131, 32,154, 32,194, 32,202, 32,214,225,227,245,244,101,
- 128, 30,130,227,233,242, 99, 2, 32,140, 32,145,236,101,128, 36,
- 204,245,237,230,236,229,120,128, 1,116,100, 2, 32,160, 32,170,
- 233,229,242,229,243,233,115,128, 30,132,239,116, 2, 32,177, 32,
- 186,225,227,227,229,238,116,128, 30,134,226,229,236,239,119,128,
- 30,136,231,242,225,246,101,128, 30,128,237,239,238,239,243,240,
- 225,227,101,128,255, 55,243,237,225,236,108,128,247,119, 88,134,
- 0, 88, 32,238, 32,247, 33, 18, 33, 31, 33, 35, 33, 47,227,233,
- 242,227,236,101,128, 36,205,100, 2, 32,253, 33, 7,233,229,242,
- 229,243,233,115,128, 30,140,239,244,225,227,227,229,238,116,128,
- 30,138,229,232,225,242,237,229,238,233,225,110,128, 5, 61,105,
- 128, 3,158,237,239,238,239,243,240,225,227,101,128,255, 56,243,
- 237,225,236,108,128,247,120, 89,139, 0, 89, 33, 81, 33,116, 33,
- 139, 33,189, 33,228, 33,236, 33,253, 34, 40, 34, 52, 34, 60, 34,
- 68, 97, 2, 33, 87, 33,104,227,245,244,101,129, 0,221, 33, 96,
- 243,237,225,236,108,128,247,253,244,227,249,242,233,236,236,233,
- 99,128, 4, 98,227,233,242, 99, 2, 33,125, 33,130,236,101,128,
- 36,206,245,237,230,236,229,120,128, 1,118,100, 2, 33,145, 33,
- 165,233,229,242,229,243,233,115,129, 1,120, 33,157,243,237,225,
- 236,108,128,247,255,239,116, 2, 33,172, 33,181,225,227,227,229,
- 238,116,128, 30,142,226,229,236,239,119,128, 30,244,229,114, 2,
- 33,196, 33,208,233,227,249,242,233,236,236,233, 99,128, 4, 43,
- 245,228,233,229,242,229,243,233,243,227,249,242,233,236,236,233,
- 99,128, 4,248,231,242,225,246,101,128, 30,242,232,239,239,107,
- 129, 1,179, 33,245,225,226,239,246,101,128, 30,246,105, 3, 34,
- 5, 34, 16, 34, 27,225,242,237,229,238,233,225,110,128, 5, 69,
- 227,249,242,233,236,236,233, 99,128, 4, 7,247,238,225,242,237,
- 229,238,233,225,110,128, 5, 82,237,239,238,239,243,240,225,227,
- 101,128,255, 57,243,237,225,236,108,128,247,121,244,233,236,228,
- 101,128, 30,248,245,115, 2, 34, 75, 34,113,226,233,103, 2, 34,
- 83, 34, 94,227,249,242,233,236,236,233, 99,128, 4,106,233,239,
- 244,233,230,233,229,228,227,249,242,233,236,236,233, 99,128, 4,
- 108,236,233,244,244,236,101, 2, 34,124, 34,135,227,249,242,233,
- 236,236,233, 99,128, 4,102,233,239,244,233,230,233,229,228,227,
- 249,242,233,236,236,233, 99,128, 4,104, 90,136, 0, 90, 34,174,
- 34,198, 34,243, 35, 14, 35, 81, 35,173, 35,185, 35,197, 97, 2,
- 34,180, 34,191,225,242,237,229,238,233,225,110,128, 5, 54,227,
- 245,244,101,128, 1,121, 99, 2, 34,204, 34,221,225,242,239,110,
- 129, 1,125, 34,213,243,237,225,236,108,128,246,255,233,242, 99,
- 2, 34,229, 34,234,236,101,128, 36,207,245,237,230,236,229,120,
- 128, 30,144,228,239,116,130, 1,123, 34,253, 35, 6,225,227,227,
- 229,238,116,128, 1,123,226,229,236,239,119,128, 30,146,101, 3,
- 35, 22, 35, 33, 35, 76,227,249,242,233,236,236,233, 99,128, 4,
- 23,100, 2, 35, 39, 35, 58,229,243,227,229,238,228,229,242,227,
- 249,242,233,236,236,233, 99,128, 4,152,233,229,242,229,243,233,
- 243,227,249,242,233,236,236,233, 99,128, 4,222,244, 97,128, 3,
- 150,232,101, 4, 35, 92, 35,103, 35,119, 35,130,225,242,237,229,
- 238,233,225,110,128, 5, 58,226,242,229,246,229,227,249,242,233,
- 236,236,233, 99,128, 4,193,227,249,242,233,236,236,233, 99,128,
- 4, 22,100, 2, 35,136, 35,155,229,243,227,229,238,228,229,242,
- 227,249,242,233,236,236,233, 99,128, 4,150,233,229,242,229,243,
- 233,243,227,249,242,233,236,236,233, 99,128, 4,220,236,233,238,
- 229,226,229,236,239,119,128, 30,148,237,239,238,239,243,240,225,
- 227,101,128,255, 58,115, 2, 35,203, 35,210,237,225,236,108,128,
- 247,122,244,242,239,235,101,128, 1,181, 97,158, 0, 97, 36, 26,
- 38,154, 39, 4, 39, 68, 39,132, 39,196, 40, 4, 40, 68, 40,126,
- 40,190, 41, 70, 41,217, 42,137, 42,237, 43, 17, 49,192, 49,229,
- 50, 0, 50,225, 51, 7, 52, 96, 52,168, 53,123, 53,132, 54, 5,
- 56, 13, 57, 3, 57, 50, 57,201, 57,215, 49,138, 39, 1, 36, 50,
- 36,114, 36,154, 36,218, 37, 26, 37, 90, 37,154, 37,218, 38, 26,
- 38, 90, 48,138, 39, 33, 36, 74, 36, 78, 36, 82, 36, 86, 36, 90,
- 36, 94, 36, 98, 36,102, 36,106, 36,110, 48,128, 39, 94, 49,128,
- 39, 97, 50,128, 39, 98, 51,128, 39, 99, 52,128, 39,100, 53,128,
- 39, 16, 54,128, 39,101, 55,128, 39,102, 56,128, 39,103, 57,128,
- 38, 96, 49,134, 38, 27, 36,130, 36,134, 36,138, 36,142, 36,146,
- 36,150, 48,128, 38,101, 49,128, 38,102, 50,128, 38, 99, 55,128,
- 39, 9, 56,128, 39, 8, 57,128, 39, 7, 50,138, 38, 30, 36,178,
- 36,182, 36,186, 36,190, 36,194, 36,198, 36,202, 36,206, 36,210,
- 36,214, 48,128, 36, 96, 49,128, 36, 97, 50,128, 36, 98, 51,128,
- 36, 99, 52,128, 36,100, 53,128, 36,101, 54,128, 36,102, 55,128,
- 36,103, 56,128, 36,104, 57,128, 36,105, 51,138, 39, 12, 36,242,
- 36,246, 36,250, 36,254, 37, 2, 37, 6, 37, 10, 37, 14, 37, 18,
- 37, 22, 48,128, 39,118, 49,128, 39,119, 50,128, 39,120, 51,128,
- 39,121, 52,128, 39,122, 53,128, 39,123, 54,128, 39,124, 55,128,
- 39,125, 56,128, 39,126, 57,128, 39,127, 52,138, 39, 13, 37, 50,
- 37, 54, 37, 58, 37, 62, 37, 66, 37, 70, 37, 74, 37, 78, 37, 82,
- 37, 86, 48,128, 39,128, 49,128, 39,129, 50,128, 39,130, 51,128,
- 39,131, 52,128, 39,132, 53,128, 39,133, 54,128, 39,134, 55,128,
- 39,135, 56,128, 39,136, 57,128, 39,137, 53,138, 39, 14, 37,114,
- 37,118, 37,122, 37,126, 37,130, 37,134, 37,138, 37,142, 37,146,
- 37,150, 48,128, 39,138, 49,128, 39,139, 50,128, 39,140, 51,128,
- 39,141, 52,128, 39,142, 53,128, 39,143, 54,128, 39,144, 55,128,
- 39,145, 56,128, 39,146, 57,128, 39,147, 54,138, 39, 15, 37,178,
- 37,182, 37,186, 37,190, 37,194, 37,198, 37,202, 37,206, 37,210,
- 37,214, 48,128, 39,148, 49,128, 33,146, 50,128, 39,163, 51,128,
- 33,148, 52,128, 33,149, 53,128, 39,153, 54,128, 39,155, 55,128,
- 39,156, 56,128, 39,157, 57,128, 39,158, 55,138, 39, 17, 37,242,
- 37,246, 37,250, 37,254, 38, 2, 38, 6, 38, 10, 38, 14, 38, 18,
- 38, 22, 48,128, 39,159, 49,128, 39,160, 50,128, 39,161, 51,128,
- 39,162, 52,128, 39,164, 53,128, 39,165, 54,128, 39,166, 55,128,
- 39,167, 56,128, 39,168, 57,128, 39,169, 56,138, 39, 18, 38, 50,
- 38, 54, 38, 58, 38, 62, 38, 66, 38, 70, 38, 74, 38, 78, 38, 82,
- 38, 86, 48,128, 39,171, 49,128, 39,173, 50,128, 39,175, 51,128,
- 39,178, 52,128, 39,179, 53,128, 39,181, 54,128, 39,184, 55,128,
- 39,186, 56,128, 39,187, 57,128, 39,188, 57,138, 39, 19, 38,114,
- 38,118, 38,122, 38,126, 38,130, 38,134, 38,138, 38,142, 38,146,
- 38,150, 48,128, 39,189, 49,128, 39,190, 50,128, 39,154, 51,128,
- 39,170, 52,128, 39,182, 53,128, 39,185, 54,128, 39,152, 55,128,
- 39,180, 56,128, 39,183, 57,128, 39,172, 50,138, 39, 2, 38,178,
- 38,224, 38,228, 38,232, 38,236, 38,240, 38,244, 38,248, 38,252,
- 39, 0, 48,135, 39, 20, 38,196, 38,200, 38,204, 38,208, 38,212,
- 38,216, 38,220, 48,128, 39,174, 49,128, 39,177, 50,128, 39, 3,
- 51,128, 39, 80, 52,128, 39, 82, 53,128, 39,110, 54,128, 39,112,
- 49,128, 39, 21, 50,128, 39, 22, 51,128, 39, 23, 52,128, 39, 24,
- 53,128, 39, 25, 54,128, 39, 26, 55,128, 39, 27, 56,128, 39, 28,
- 57,128, 39, 34, 51,138, 39, 4, 39, 28, 39, 32, 39, 36, 39, 40,
- 39, 44, 39, 48, 39, 52, 39, 56, 39, 60, 39, 64, 48,128, 39, 35,
- 49,128, 39, 36, 50,128, 39, 37, 51,128, 39, 38, 52,128, 39, 39,
- 53,128, 38, 5, 54,128, 39, 41, 55,128, 39, 42, 56,128, 39, 43,
- 57,128, 39, 44, 52,138, 38, 14, 39, 92, 39, 96, 39,100, 39,104,
- 39,108, 39,112, 39,116, 39,120, 39,124, 39,128, 48,128, 39, 45,
- 49,128, 39, 46, 50,128, 39, 47, 51,128, 39, 48, 52,128, 39, 49,
- 53,128, 39, 50, 54,128, 39, 51, 55,128, 39, 52, 56,128, 39, 53,
- 57,128, 39, 54, 53,138, 39, 6, 39,156, 39,160, 39,164, 39,168,
- 39,172, 39,176, 39,180, 39,184, 39,188, 39,192, 48,128, 39, 55,
- 49,128, 39, 56, 50,128, 39, 57, 51,128, 39, 58, 52,128, 39, 59,
- 53,128, 39, 60, 54,128, 39, 61, 55,128, 39, 62, 56,128, 39, 63,
- 57,128, 39, 64, 54,138, 39, 29, 39,220, 39,224, 39,228, 39,232,
- 39,236, 39,240, 39,244, 39,248, 39,252, 40, 0, 48,128, 39, 65,
- 49,128, 39, 66, 50,128, 39, 67, 51,128, 39, 68, 52,128, 39, 69,
- 53,128, 39, 70, 54,128, 39, 71, 55,128, 39, 72, 56,128, 39, 73,
- 57,128, 39, 74, 55,138, 39, 30, 40, 28, 40, 32, 40, 36, 40, 40,
- 40, 44, 40, 48, 40, 52, 40, 56, 40, 60, 40, 64, 48,128, 39, 75,
- 49,128, 37,207, 50,128, 39, 77, 51,128, 37,160, 52,128, 39, 79,
- 53,128, 39, 81, 54,128, 37,178, 55,128, 37,188, 56,128, 37,198,
- 57,128, 39, 86, 56,137, 39, 31, 40, 90, 40, 94, 40, 98, 40,102,
- 40,106, 40,110, 40,114, 40,118, 40,122, 49,128, 37,215, 50,128,
- 39, 88, 51,128, 39, 89, 52,128, 39, 90, 53,128, 39,111, 54,128,
- 39,113, 55,128, 39,114, 56,128, 39,115, 57,128, 39,104, 57,138,
- 39, 32, 40,150, 40,154, 40,158, 40,162, 40,166, 40,170, 40,174,
- 40,178, 40,182, 40,186, 48,128, 39,105, 49,128, 39,108, 50,128,
- 39,109, 51,128, 39,106, 52,128, 39,107, 53,128, 39,116, 54,128,
- 39,117, 55,128, 39, 91, 56,128, 39, 92, 57,128, 39, 93, 97, 7,
- 40,206, 40,216, 40,223, 40,230, 40,255, 41, 15, 41, 26,226,229,
- 238,231,225,236,105,128, 9,134,227,245,244,101,128, 0,225,228,
- 229,246, 97,128, 9, 6,231,117, 2, 40,237, 40,246,234,225,242,
- 225,244,105,128, 10,134,242,237,245,235,232,105,128, 10, 6,237,
- 225,244,242,225,231,245,242,237,245,235,232,105,128, 10, 62,242,
- 245,243,241,245,225,242,101,128, 51, 3,246,239,247,229,236,243,
- 233,231,110, 3, 41, 42, 41, 52, 41, 59,226,229,238,231,225,236,
- 105,128, 9,190,228,229,246, 97,128, 9, 62,231,245,234,225,242,
- 225,244,105,128, 10,190, 98, 4, 41, 80, 41,121, 41,130, 41,140,
- 226,242,229,246,233,225,244,233,239,110, 2, 41, 95, 41,110,237,
- 225,242,235,225,242,237,229,238,233,225,110,128, 5, 95,243,233,
- 231,238,228,229,246, 97,128, 9,112,229,238,231,225,236,105,128,
- 9,133,239,240,239,237,239,230,111,128, 49, 26,242,229,246,101,
- 134, 1, 3, 41,159, 41,167, 41,178, 41,189, 41,197, 41,209,225,
- 227,245,244,101,128, 30,175,227,249,242,233,236,236,233, 99,128,
- 4,209,228,239,244,226,229,236,239,119,128, 30,183,231,242,225,
- 246,101,128, 30,177,232,239,239,235,225,226,239,246,101,128, 30,
- 179,244,233,236,228,101,128, 30,181, 99, 4, 41,227, 41,234, 42,
- 57, 42,127,225,242,239,110,128, 1,206,233,242, 99, 2, 41,242,
- 41,247,236,101,128, 36,208,245,237,230,236,229,120,133, 0,226,
- 42, 10, 42, 18, 42, 29, 42, 37, 42, 49,225,227,245,244,101,128,
- 30,165,228,239,244,226,229,236,239,119,128, 30,173,231,242,225,
- 246,101,128, 30,167,232,239,239,235,225,226,239,246,101,128, 30,
- 169,244,233,236,228,101,128, 30,171,245,244,101,133, 0,180, 42,
- 73, 42, 84, 42,101, 42,108, 42,117,226,229,236,239,247,227,237,
- 98,128, 3, 23, 99, 2, 42, 90, 42, 95,237, 98,128, 3, 1,239,
- 237, 98,128, 3, 1,228,229,246, 97,128, 9, 84,236,239,247,237,
- 239,100,128, 2,207,244,239,238,229,227,237, 98,128, 3, 65,249,
- 242,233,236,236,233, 99,128, 4, 48,100, 5, 42,149, 42,159, 42,
- 173, 42,179, 42,213,226,236,231,242,225,246,101,128, 2, 1,228,
- 225,235,231,245,242,237,245,235,232,105,128, 10,113,229,246, 97,
- 128, 9, 5,233,229,242,229,243,233,115,130, 0,228, 42,193, 42,
- 204,227,249,242,233,236,236,233, 99,128, 4,211,237,225,227,242,
- 239,110,128, 1,223,239,116, 2, 42,220, 42,228,226,229,236,239,
- 119,128, 30,161,237,225,227,242,239,110,128, 1,225,101,131, 0,
- 230, 42,247, 42,255, 43, 8,225,227,245,244,101,128, 1,253,235,
- 239,242,229,225,110,128, 49, 80,237,225,227,242,239,110,128, 1,
- 227,230,233,105, 6, 43, 33, 43, 53, 45,246, 45,252, 46, 11, 49,
- 111, 48, 2, 43, 39, 43, 46,176,178,176, 56,128, 32, 21,184,185,
- 180, 49,128, 32,164,177, 48, 3, 43, 62, 45, 86, 45,221, 48, 9,
- 43, 82, 43,102, 43,164, 43,226, 44, 32, 44, 94, 44,156, 44,218,
- 45, 24, 49, 3, 43, 90, 43, 94, 43, 98, 55,128, 4, 16, 56,128,
- 4, 17, 57,128, 4, 18, 50, 10, 43,124, 43,128, 43,132, 43,136,
- 43,140, 43,144, 43,148, 43,152, 43,156, 43,160, 48,128, 4, 19,
- 49,128, 4, 20, 50,128, 4, 21, 51,128, 4, 1, 52,128, 4, 22,
- 53,128, 4, 23, 54,128, 4, 24, 55,128, 4, 25, 56,128, 4, 26,
- 57,128, 4, 27, 51, 10, 43,186, 43,190, 43,194, 43,198, 43,202,
- 43,206, 43,210, 43,214, 43,218, 43,222, 48,128, 4, 28, 49,128,
- 4, 29, 50,128, 4, 30, 51,128, 4, 31, 52,128, 4, 32, 53,128,
- 4, 33, 54,128, 4, 34, 55,128, 4, 35, 56,128, 4, 36, 57,128,
- 4, 37, 52, 10, 43,248, 43,252, 44, 0, 44, 4, 44, 8, 44, 12,
- 44, 16, 44, 20, 44, 24, 44, 28, 48,128, 4, 38, 49,128, 4, 39,
- 50,128, 4, 40, 51,128, 4, 41, 52,128, 4, 42, 53,128, 4, 43,
- 54,128, 4, 44, 55,128, 4, 45, 56,128, 4, 46, 57,128, 4, 47,
- 53, 10, 44, 54, 44, 58, 44, 62, 44, 66, 44, 70, 44, 74, 44, 78,
- 44, 82, 44, 86, 44, 90, 48,128, 4,144, 49,128, 4, 2, 50,128,
- 4, 3, 51,128, 4, 4, 52,128, 4, 5, 53,128, 4, 6, 54,128,
- 4, 7, 55,128, 4, 8, 56,128, 4, 9, 57,128, 4, 10, 54, 10,
- 44,116, 44,120, 44,124, 44,128, 44,132, 44,136, 44,140, 44,144,
- 44,148, 44,152, 48,128, 4, 11, 49,128, 4, 12, 50,128, 4, 14,
- 51,128,246,196, 52,128,246,197, 53,128, 4, 48, 54,128, 4, 49,
- 55,128, 4, 50, 56,128, 4, 51, 57,128, 4, 52, 55, 10, 44,178,
- 44,182, 44,186, 44,190, 44,194, 44,198, 44,202, 44,206, 44,210,
- 44,214, 48,128, 4, 53, 49,128, 4, 81, 50,128, 4, 54, 51,128,
- 4, 55, 52,128, 4, 56, 53,128, 4, 57, 54,128, 4, 58, 55,128,
- 4, 59, 56,128, 4, 60, 57,128, 4, 61, 56, 10, 44,240, 44,244,
- 44,248, 44,252, 45, 0, 45, 4, 45, 8, 45, 12, 45, 16, 45, 20,
- 48,128, 4, 62, 49,128, 4, 63, 50,128, 4, 64, 51,128, 4, 65,
- 52,128, 4, 66, 53,128, 4, 67, 54,128, 4, 68, 55,128, 4, 69,
- 56,128, 4, 70, 57,128, 4, 71, 57, 10, 45, 46, 45, 50, 45, 54,
- 45, 58, 45, 62, 45, 66, 45, 70, 45, 74, 45, 78, 45, 82, 48,128,
- 4, 72, 49,128, 4, 73, 50,128, 4, 74, 51,128, 4, 75, 52,128,
- 4, 76, 53,128, 4, 77, 54,128, 4, 78, 55,128, 4, 79, 56,128,
- 4,145, 57,128, 4, 82, 49, 4, 45, 96, 45,158, 45,163, 45,189,
- 48, 10, 45,118, 45,122, 45,126, 45,130, 45,134, 45,138, 45,142,
- 45,146, 45,150, 45,154, 48,128, 4, 83, 49,128, 4, 84, 50,128,
- 4, 85, 51,128, 4, 86, 52,128, 4, 87, 53,128, 4, 88, 54,128,
- 4, 89, 55,128, 4, 90, 56,128, 4, 91, 57,128, 4, 92,177, 48,
- 128, 4, 94, 52, 4, 45,173, 45,177, 45,181, 45,185, 53,128, 4,
- 15, 54,128, 4, 98, 55,128, 4,114, 56,128, 4,116, 57, 5, 45,
- 201, 45,205, 45,209, 45,213, 45,217, 50,128,246,198, 51,128, 4,
- 95, 52,128, 4, 99, 53,128, 4,115, 54,128, 4,117, 56, 2, 45,
- 227, 45,241, 51, 2, 45,233, 45,237, 49,128,246,199, 50,128,246,
- 200,180, 54,128, 4,217,178,185, 57,128, 32, 14,179, 48, 2, 46,
- 3, 46, 7, 48,128, 32, 15, 49,128, 32, 13,181, 55, 7, 46, 28,
- 46, 98, 47,163, 47,240, 48,197, 49, 34, 49,105, 51, 2, 46, 34,
- 46, 48, 56, 2, 46, 40, 46, 44, 49,128, 6,106, 56,128, 6, 12,
- 57, 8, 46, 66, 46, 70, 46, 74, 46, 78, 46, 82, 46, 86, 46, 90,
- 46, 94, 50,128, 6, 96, 51,128, 6, 97, 52,128, 6, 98, 53,128,
- 6, 99, 54,128, 6,100, 55,128, 6,101, 56,128, 6,102, 57,128,
- 6,103, 52, 7, 46,114, 46,146, 46,208, 47, 14, 47, 46, 47,102,
- 47,158, 48, 5, 46,126, 46,130, 46,134, 46,138, 46,142, 48,128,
- 6,104, 49,128, 6,105, 51,128, 6, 27, 55,128, 6, 31, 57,128,
- 6, 33, 49, 10, 46,168, 46,172, 46,176, 46,180, 46,184, 46,188,
- 46,192, 46,196, 46,200, 46,204, 48,128, 6, 34, 49,128, 6, 35,
- 50,128, 6, 36, 51,128, 6, 37, 52,128, 6, 38, 53,128, 6, 39,
- 54,128, 6, 40, 55,128, 6, 41, 56,128, 6, 42, 57,128, 6, 43,
- 50, 10, 46,230, 46,234, 46,238, 46,242, 46,246, 46,250, 46,254,
- 47, 2, 47, 6, 47, 10, 48,128, 6, 44, 49,128, 6, 45, 50,128,
- 6, 46, 51,128, 6, 47, 52,128, 6, 48, 53,128, 6, 49, 54,128,
- 6, 50, 55,128, 6, 51, 56,128, 6, 52, 57,128, 6, 53, 51, 5,
- 47, 26, 47, 30, 47, 34, 47, 38, 47, 42, 48,128, 6, 54, 49,128,
- 6, 55, 50,128, 6, 56, 51,128, 6, 57, 52,128, 6, 58, 52, 9,
- 47, 66, 47, 70, 47, 74, 47, 78, 47, 82, 47, 86, 47, 90, 47, 94,
- 47, 98, 48,128, 6, 64, 49,128, 6, 65, 50,128, 6, 66, 51,128,
- 6, 67, 52,128, 6, 68, 53,128, 6, 69, 54,128, 6, 70, 56,128,
- 6, 72, 57,128, 6, 73, 53, 9, 47,122, 47,126, 47,130, 47,134,
- 47,138, 47,142, 47,146, 47,150, 47,154, 48,128, 6, 74, 49,128,
- 6, 75, 50,128, 6, 76, 51,128, 6, 77, 52,128, 6, 78, 53,128,
- 6, 79, 54,128, 6, 80, 55,128, 6, 81, 56,128, 6, 82,183, 48,
- 128, 6, 71, 53, 3, 47,171, 47,203, 47,235, 48, 5, 47,183, 47,
- 187, 47,191, 47,195, 47,199, 53,128, 6,164, 54,128, 6,126, 55,
- 128, 6,134, 56,128, 6,152, 57,128, 6,175, 49, 5, 47,215, 47,
- 219, 47,223, 47,227, 47,231, 49,128, 6,121, 50,128, 6,136, 51,
- 128, 6,145, 52,128, 6,186, 57,128, 6,210,179, 52,128, 6,213,
- 54, 7, 48, 0, 48, 5, 48, 10, 48, 15, 48, 53, 48,115, 48,177,
- 179, 54,128, 32,170,180, 53,128, 5,190,181, 56,128, 5,195, 54,
- 6, 48, 29, 48, 33, 48, 37, 48, 41, 48, 45, 48, 49, 52,128, 5,
- 208, 53,128, 5,209, 54,128, 5,210, 55,128, 5,211, 56,128, 5,
- 212, 57,128, 5,213, 55, 10, 48, 75, 48, 79, 48, 83, 48, 87, 48,
- 91, 48, 95, 48, 99, 48,103, 48,107, 48,111, 48,128, 5,214, 49,
- 128, 5,215, 50,128, 5,216, 51,128, 5,217, 52,128, 5,218, 53,
- 128, 5,219, 54,128, 5,220, 55,128, 5,221, 56,128, 5,222, 57,
- 128, 5,223, 56, 10, 48,137, 48,141, 48,145, 48,149, 48,153, 48,
- 157, 48,161, 48,165, 48,169, 48,173, 48,128, 5,224, 49,128, 5,
- 225, 50,128, 5,226, 51,128, 5,227, 52,128, 5,228, 53,128, 5,
- 229, 54,128, 5,230, 55,128, 5,231, 56,128, 5,232, 57,128, 5,
- 233, 57, 3, 48,185, 48,189, 48,193, 48,128, 5,234, 52,128,251,
- 42, 53,128,251, 43, 55, 4, 48,207, 48,221, 48,241, 48,246, 48,
- 2, 48,213, 48,217, 48,128,251, 75, 53,128,251, 31, 49, 3, 48,
- 229, 48,233, 48,237, 54,128, 5,240, 55,128, 5,241, 56,128, 5,
- 242,178, 51,128,251, 53, 57, 7, 49, 6, 49, 10, 49, 14, 49, 18,
- 49, 22, 49, 26, 49, 30, 51,128, 5,180, 52,128, 5,181, 53,128,
- 5,182, 54,128, 5,187, 55,128, 5,184, 56,128, 5,183, 57,128,
- 5,176, 56, 3, 49, 42, 49, 86, 49, 91, 48, 7, 49, 58, 49, 62,
- 49, 66, 49, 70, 49, 74, 49, 78, 49, 82, 48,128, 5,178, 49,128,
- 5,177, 50,128, 5,179, 51,128, 5,194, 52,128, 5,193, 54,128,
- 5,185, 55,128, 5,188,179, 57,128, 5,189, 52, 2, 49, 97, 49,
- 101, 49,128, 5,191, 50,128, 5,192,185,178, 57,128, 2,188, 54,
- 3, 49,119, 49,178, 49,185, 49, 4, 49,129, 49,145, 49,151, 49,
- 172, 50, 2, 49,135, 49,140,180, 56,128, 33, 5,184, 57,128, 33,
- 19,179,181, 50,128, 33, 22,181, 55, 3, 49,160, 49,164, 49,168,
- 51,128, 32, 44, 52,128, 32, 45, 53,128, 32, 46,182,182, 52,128,
- 32, 12,179,177,182, 55,128, 6,109,180,185,179, 55,128, 2,189,
- 103, 2, 49,198, 49,205,242,225,246,101,128, 0,224,117, 2, 49,
- 211, 49,220,234,225,242,225,244,105,128, 10,133,242,237,245,235,
- 232,105,128, 10, 5,104, 2, 49,235, 49,245,233,242,225,231,225,
- 238, 97,128, 48, 66,239,239,235,225,226,239,246,101,128, 30,163,
- 105, 7, 50, 16, 50, 41, 50, 48, 50, 60, 50, 85, 50,101, 50,181,
- 98, 2, 50, 22, 50, 31,229,238,231,225,236,105,128, 9,144,239,
- 240,239,237,239,230,111,128, 49, 30,228,229,246, 97,128, 9, 16,
- 229,227,249,242,233,236,236,233, 99,128, 4,213,231,117, 2, 50,
- 67, 50, 76,234,225,242,225,244,105,128, 10,144,242,237,245,235,
- 232,105,128, 10, 16,237,225,244,242,225,231,245,242,237,245,235,
- 232,105,128, 10, 72,110, 5, 50,113, 50,122, 50,136, 50,152, 50,
- 167,225,242,225,226,233, 99,128, 6, 57,230,233,238,225,236,225,
- 242,225,226,233, 99,128,254,202,233,238,233,244,233,225,236,225,
- 242,225,226,233, 99,128,254,203,237,229,228,233,225,236,225,242,
- 225,226,233, 99,128,254,204,246,229,242,244,229,228,226,242,229,
- 246,101,128, 2, 3,246,239,247,229,236,243,233,231,110, 3, 50,
- 197, 50,207, 50,214,226,229,238,231,225,236,105,128, 9,200,228,
- 229,246, 97,128, 9, 72,231,245,234,225,242,225,244,105,128, 10,
- 200,107, 2, 50,231, 50,255,225,244,225,235,225,238, 97,129, 48,
- 162, 50,243,232,225,236,230,247,233,228,244,104,128,255,113,239,
- 242,229,225,110,128, 49, 79,108, 3, 51, 15, 52, 71, 52, 80,101,
- 2, 51, 21, 52, 66,102,136, 5,208, 51, 41, 51, 50, 51, 65, 51,
- 79, 51,168, 51,182, 52, 37, 52, 51,225,242,225,226,233, 99,128,
- 6, 39,228,225,231,229,243,232,232,229,226,242,229,119,128,251,
- 48,230,233,238,225,236,225,242,225,226,233, 99,128,254,142,104,
- 2, 51, 85, 51,160,225,237,250, 97, 2, 51, 94, 51,127,225,226,
- 239,246,101, 2, 51,104, 51,113,225,242,225,226,233, 99,128, 6,
- 35,230,233,238,225,236,225,242,225,226,233, 99,128,254,132,226,
- 229,236,239,119, 2, 51,137, 51,146,225,242,225,226,233, 99,128,
- 6, 37,230,233,238,225,236,225,242,225,226,233, 99,128,254,136,
- 229,226,242,229,119,128, 5,208,236,225,237,229,228,232,229,226,
- 242,229,119,128,251, 79,237, 97, 2, 51,189, 51,225,228,228,225,
- 225,226,239,246,101, 2, 51,202, 51,211,225,242,225,226,233, 99,
- 128, 6, 34,230,233,238,225,236,225,242,225,226,233, 99,128,254,
- 130,235,243,245,242, 97, 4, 51,239, 51,248, 52, 6, 52, 22,225,
- 242,225,226,233, 99,128, 6, 73,230,233,238,225,236,225,242,225,
- 226,233, 99,128,254,240,233,238,233,244,233,225,236,225,242,225,
- 226,233, 99,128,254,243,237,229,228,233,225,236,225,242,225,226,
- 233, 99,128,254,244,240,225,244,225,232,232,229,226,242,229,119,
- 128,251, 46,241,225,237,225,244,243,232,229,226,242,229,119,128,
- 251, 47,240,104,128, 33, 53,236,229,241,245,225,108,128, 34, 76,
- 240,232, 97,129, 3,177, 52, 88,244,239,238,239,115,128, 3,172,
- 109, 4, 52,106, 52,114, 52,125, 52,159,225,227,242,239,110,128,
- 1, 1,239,238,239,243,240,225,227,101,128,255, 65,240,229,242,
- 243,225,238,100,130, 0, 38, 52,139, 52,151,237,239,238,239,243,
- 240,225,227,101,128,255, 6,243,237,225,236,108,128,247, 38,243,
- 241,245,225,242,101,128, 51,194,110, 4, 52,178, 52,189, 53, 55,
- 53, 65,226,239,240,239,237,239,230,111,128, 49, 34,103, 4, 52,
- 199, 52,210, 52,224, 53, 47,226,239,240,239,237,239,230,111,128,
- 49, 36,235,232,225,238,235,232,245,244,232,225,105,128, 14, 90,
- 236,101,131, 34, 32, 52,235, 53, 32, 53, 39,226,242,225,227,235,
- 229,116, 2, 52,247, 53, 11,236,229,230,116,129, 48, 8, 53, 0,
- 246,229,242,244,233,227,225,108,128,254, 63,242,233,231,232,116,
- 129, 48, 9, 53, 21,246,229,242,244,233,227,225,108,128,254, 64,
- 236,229,230,116,128, 35, 41,242,233,231,232,116,128, 35, 42,243,
- 244,242,239,109,128, 33, 43,239,244,229,236,229,233, 97,128, 3,
- 135,117, 2, 53, 71, 53, 83,228,225,244,244,225,228,229,246, 97,
- 128, 9, 82,243,246,225,242, 97, 3, 53, 95, 53,105, 53,112,226,
- 229,238,231,225,236,105,128, 9,130,228,229,246, 97,128, 9, 2,
- 231,245,234,225,242,225,244,105,128, 10,130,239,231,239,238,229,
- 107,128, 1, 5,112, 3, 53,140, 53,164, 53,194, 97, 2, 53,146,
- 53,158,225,244,239,243,241,245,225,242,101,128, 51, 0,242,229,
- 110,128, 36,156,239,243,244,242,239,240,232,101, 2, 53,177, 53,
- 188,225,242,237,229,238,233,225,110,128, 5, 90,237,239,100,128,
- 2,188,112, 2, 53,200, 53,205,236,101,128,248,255,242,111, 2,
- 53,212, 53,220,225,227,232,229,115,128, 34, 80,120, 2, 53,226,
- 53,246,229,241,245,225,108,129, 34, 72, 53,236,239,242,233,237,
- 225,231,101,128, 34, 82,233,237,225,244,229,236,249,229,241,245,
- 225,108,128, 34, 69,114, 4, 54, 15, 54, 42, 54, 46, 54, 91,225,
- 229, 97, 2, 54, 23, 54, 33,229,235,239,242,229,225,110,128, 49,
- 142,235,239,242,229,225,110,128, 49,141, 99,128, 35, 18,105, 2,
- 54, 52, 54, 66,231,232,244,232,225,236,230,242,233,238,103,128,
- 30,154,238,103,130, 0,229, 54, 75, 54, 83,225,227,245,244,101,
- 128, 1,251,226,229,236,239,119,128, 30, 1,242,239,119, 8, 54,
- 111, 54,118, 54,247, 55, 57, 55,107, 55,162, 55,185, 56, 4,226,
- 239,244,104,128, 33,148,100, 3, 54,126, 54,165, 54,212,225,243,
- 104, 4, 54,138, 54,145, 54,152, 54,160,228,239,247,110,128, 33,
- 227,236,229,230,116,128, 33,224,242,233,231,232,116,128, 33,226,
- 245,112,128, 33,225,226,108, 5, 54,178, 54,185, 54,192, 54,199,
- 54,207,226,239,244,104,128, 33,212,228,239,247,110,128, 33,211,
- 236,229,230,116,128, 33,208,242,233,231,232,116,128, 33,210,245,
- 112,128, 33,209,239,247,110,131, 33,147, 54,224, 54,231, 54,239,
- 236,229,230,116,128, 33,153,242,233,231,232,116,128, 33,152,247,
- 232,233,244,101,128, 33,233,104, 2, 54,253, 55, 48,229,225,100,
- 4, 55, 9, 55, 19, 55, 29, 55, 40,228,239,247,238,237,239,100,
- 128, 2,197,236,229,230,244,237,239,100,128, 2,194,242,233,231,
- 232,244,237,239,100,128, 2,195,245,240,237,239,100,128, 2,196,
- 239,242,233,250,229,120,128,248,231,236,229,230,116,131, 33,144,
- 55, 70, 55, 87, 55, 99,228,226,108,129, 33,208, 55, 78,243,244,
- 242,239,235,101,128, 33,205,239,246,229,242,242,233,231,232,116,
- 128, 33,198,247,232,233,244,101,128, 33,230,242,233,231,232,116,
- 132, 33,146, 55,123, 55,135, 55,143, 55,154,228,226,236,243,244,
- 242,239,235,101,128, 33,207,232,229,225,246,121,128, 39,158,239,
- 246,229,242,236,229,230,116,128, 33,196,247,232,233,244,101,128,
- 33,232,244,225, 98, 2, 55,170, 55,177,236,229,230,116,128, 33,
- 228,242,233,231,232,116,128, 33,229,245,112,132, 33,145, 55,198,
- 55,226, 55,244, 55,252,100, 2, 55,204, 55,216,110,129, 33,149,
- 55,210,226,243,101,128, 33,168,239,247,238,226,225,243,101,128,
- 33,168,236,229,230,116,129, 33,150, 55,235,239,230,228,239,247,
- 110,128, 33,197,242,233,231,232,116,128, 33,151,247,232,233,244,
- 101,128, 33,231,246,229,242,244,229,120,128,248,230,115, 5, 56,
- 25, 56,101, 56,146, 56,229, 56,239, 99, 2, 56, 31, 56, 83,233,
- 105, 2, 56, 38, 56, 61,227,233,242,227,245,109,129, 0, 94, 56,
- 49,237,239,238,239,243,240,225,227,101,128,255, 62,244,233,236,
- 228,101,129, 0,126, 56, 71,237,239,238,239,243,240,225,227,101,
- 128,255, 94,242,233,240,116,129, 2, 81, 56, 92,244,245,242,238,
- 229,100,128, 2, 82,237,225,236,108, 2, 56,110, 56,121,232,233,
- 242,225,231,225,238, 97,128, 48, 65,235,225,244,225,235,225,238,
- 97,129, 48,161, 56,134,232,225,236,230,247,233,228,244,104,128,
- 255,103,244,229,242,233,115, 2, 56,156, 56,225,107,131, 0, 42,
- 56,166, 56,194, 56,217, 97, 2, 56,172, 56,186,236,244,239,238,
- 229,225,242,225,226,233, 99,128, 6,109,242,225,226,233, 99,128,
- 6,109,109, 2, 56,200, 56,206,225,244,104,128, 34, 23,239,238,
- 239,243,240,225,227,101,128,255, 10,243,237,225,236,108,128,254,
- 97,109,128, 32, 66,245,240,229,242,233,239,114,128,246,233,249,
- 237,240,244,239,244,233,227,225,236,236,249,229,241,245,225,108,
- 128, 34, 67,116,132, 0, 64, 57, 15, 57, 22, 57, 34, 57, 42,233,
- 236,228,101,128, 0,227,237,239,238,239,243,240,225,227,101,128,
- 255, 32,243,237,225,236,108,128,254,107,245,242,238,229,100,128,
- 2, 80,117, 6, 57, 64, 57, 89, 57, 96, 57,121, 57,141, 57,157,
- 98, 2, 57, 70, 57, 79,229,238,231,225,236,105,128, 9,148,239,
- 240,239,237,239,230,111,128, 49, 32,228,229,246, 97,128, 9, 20,
- 231,117, 2, 57,103, 57,112,234,225,242,225,244,105,128, 10,148,
- 242,237,245,235,232,105,128, 10, 20,236,229,238,231,244,232,237,
- 225,242,235,226,229,238,231,225,236,105,128, 9,215,237,225,244,
- 242,225,231,245,242,237,245,235,232,105,128, 10, 76,246,239,247,
- 229,236,243,233,231,110, 3, 57,173, 57,183, 57,190,226,229,238,
- 231,225,236,105,128, 9,204,228,229,246, 97,128, 9, 76,231,245,
- 234,225,242,225,244,105,128, 10,204,246,225,231,242,225,232,225,
- 228,229,246, 97,128, 9, 61,121, 2, 57,221, 57,233,226,225,242,
- 237,229,238,233,225,110,128, 5, 97,233,110,130, 5,226, 57,242,
- 58, 1,225,236,244,239,238,229,232,229,226,242,229,119,128,251,
- 32,232,229,226,242,229,119,128, 5,226, 98,144, 0, 98, 58, 46,
- 58,181, 58,192, 58,201, 58,226, 60, 11, 60, 73, 60,146, 62, 72,
- 62, 84, 62,127, 62,135, 62,145, 64, 15, 64, 39, 64, 48, 97, 7,
- 58, 62, 58, 72, 58, 96, 58,103, 58,128, 58,152, 58,163,226,229,
- 238,231,225,236,105,128, 9,172,227,235,243,236,225,243,104,129,
- 0, 92, 58, 84,237,239,238,239,243,240,225,227,101,128,255, 60,
- 228,229,246, 97,128, 9, 44,231,117, 2, 58,110, 58,119,234,225,
- 242,225,244,105,128, 10,172,242,237,245,235,232,105,128, 10, 44,
- 104, 2, 58,134, 58,144,233,242,225,231,225,238, 97,128, 48,112,
- 244,244,232,225,105,128, 14, 63,235,225,244,225,235,225,238, 97,
- 128, 48,208,114,129, 0,124, 58,169,237,239,238,239,243,240,225,
- 227,101,128,255, 92,226,239,240,239,237,239,230,111,128, 49, 5,
- 227,233,242,227,236,101,128, 36,209,228,239,116, 2, 58,209, 58,
- 218,225,227,227,229,238,116,128, 30, 3,226,229,236,239,119,128,
- 30, 5,101, 6, 58,240, 59, 5, 59, 28, 59,170, 59,181, 59,193,
- 225,237,229,228,243,233,248,244,229,229,238,244,232,238,239,244,
- 229,115,128, 38,108, 99, 2, 59, 11, 59, 18,225,245,243,101,128,
- 34, 53,249,242,233,236,236,233, 99,128, 4, 49,104, 5, 59, 40,
- 59, 49, 59, 63, 59, 93, 59,152,225,242,225,226,233, 99,128, 6,
- 40,230,233,238,225,236,225,242,225,226,233, 99,128,254,144,105,
- 2, 59, 69, 59, 84,238,233,244,233,225,236,225,242,225,226,233,
- 99,128,254,145,242,225,231,225,238, 97,128, 48,121,237,101, 2,
- 59,100, 59,113,228,233,225,236,225,242,225,226,233, 99,128,254,
- 146,229,237,105, 2, 59,121, 59,136,238,233,244,233,225,236,225,
- 242,225,226,233, 99,128,252,159,243,239,236,225,244,229,228,225,
- 242,225,226,233, 99,128,252, 8,238,239,239,238,230,233,238,225,
- 236,225,242,225,226,233, 99,128,252,109,235,225,244,225,235,225,
- 238, 97,128, 48,217,238,225,242,237,229,238,233,225,110,128, 5,
- 98,116,132, 5,209, 59,205, 59,225, 59,245, 59,254, 97,129, 3,
- 178, 59,211,243,249,237,226,239,236,231,242,229,229,107,128, 3,
- 208,228,225,231,229,243,104,129,251, 49, 59,236,232,229,226,242,
- 229,119,128,251, 49,232,229,226,242,229,119,128, 5,209,242,225,
- 230,229,232,229,226,242,229,119,128,251, 76,104, 2, 60, 17, 60,
- 67, 97, 3, 60, 25, 60, 35, 60, 42,226,229,238,231,225,236,105,
- 128, 9,173,228,229,246, 97,128, 9, 45,231,117, 2, 60, 49, 60,
- 58,234,225,242,225,244,105,128, 10,173,242,237,245,235,232,105,
- 128, 10, 45,239,239,107,128, 2, 83,105, 5, 60, 85, 60, 96, 60,
- 107, 60,121, 60,135,232,233,242,225,231,225,238, 97,128, 48,115,
- 235,225,244,225,235,225,238, 97,128, 48,211,236,225,226,233,225,
- 236,227,236,233,227,107,128, 2,152,238,228,233,231,245,242,237,
- 245,235,232,105,128, 10, 2,242,245,243,241,245,225,242,101,128,
- 51, 49,108, 3, 60,154, 62, 55, 62, 66, 97, 2, 60,160, 62, 50,
- 227,107, 6, 60,175, 60,184, 60,221, 61,114, 61,169, 61,221,227,
- 233,242,227,236,101,128, 37,207,100, 2, 60,190, 60,199,233,225,
- 237,239,238,100,128, 37,198,239,247,238,240,239,233,238,244,233,
- 238,231,244,242,233,225,238,231,236,101,128, 37,188,108, 2, 60,
- 227, 61, 74,101, 2, 60,233, 61, 13,230,244,240,239,233,238,244,
- 233,238,103, 2, 60,248, 61, 2,240,239,233,238,244,229,114,128,
- 37,196,244,242,233,225,238,231,236,101,128, 37,192,238,244,233,
- 227,245,236,225,242,226,242,225,227,235,229,116, 2, 61, 33, 61,
- 53,236,229,230,116,129, 48, 16, 61, 42,246,229,242,244,233,227,
- 225,108,128,254, 59,242,233,231,232,116,129, 48, 17, 61, 63,246,
- 229,242,244,233,227,225,108,128,254, 60,239,247,229,114, 2, 61,
- 83, 61, 98,236,229,230,244,244,242,233,225,238,231,236,101,128,
- 37,227,242,233,231,232,244,244,242,233,225,238,231,236,101,128,
- 37,226,114, 2, 61,120, 61,131,229,227,244,225,238,231,236,101,
- 128, 37,172,233,231,232,244,240,239,233,238,244,233,238,103, 2,
- 61,148, 61,158,240,239,233,238,244,229,114,128, 37,186,244,242,
- 233,225,238,231,236,101,128, 37,182,115, 3, 61,177, 61,207, 61,
- 215,109, 2, 61,183, 61,195,225,236,236,243,241,245,225,242,101,
- 128, 37,170,233,236,233,238,231,230,225,227,101,128, 38, 59,241,
- 245,225,242,101,128, 37,160,244,225,114,128, 38, 5,245,240,112,
- 2, 61,229, 62, 11,229,114, 2, 61,236, 61,251,236,229,230,244,
- 244,242,233,225,238,231,236,101,128, 37,228,242,233,231,232,244,
- 244,242,233,225,238,231,236,101,128, 37,229,239,233,238,244,233,
- 238,103, 2, 62, 23, 62, 39,243,237,225,236,236,244,242,233,225,
- 238,231,236,101,128, 37,180,244,242,233,225,238,231,236,101,128,
- 37,178,238,107,128, 36, 35,233,238,229,226,229,236,239,119,128,
- 30, 7,239,227,107,128, 37,136,237,239,238,239,243,240,225,227,
- 101,128,255, 66,111, 3, 62, 92, 62,105, 62,116,226,225,233,237,
- 225,233,244,232,225,105,128, 14, 26,232,233,242,225,231,225,238,
- 97,128, 48,124,235,225,244,225,235,225,238, 97,128, 48,220,240,
- 225,242,229,110,128, 36,157,241,243,241,245,225,242,101,128, 51,
- 195,114, 4, 62,155, 63,149, 63,222, 64, 5,225, 99, 2, 62,162,
- 63, 56,101, 3, 62,170, 62,175, 62,243,229,120,128,248,244,236,
- 229,230,116,133, 0,123, 62,192, 62,197, 62,219, 62,227, 62,232,
- 226,116,128,248,243,109, 2, 62,203, 62,208,233,100,128,248,242,
- 239,238,239,243,240,225,227,101,128,255, 91,243,237,225,236,108,
- 128,254, 91,244,112,128,248,241,246,229,242,244,233,227,225,108,
- 128,254, 55,242,233,231,232,116,133, 0,125, 63, 5, 63, 10, 63,
- 32, 63, 40, 63, 45,226,116,128,248,254,109, 2, 63, 16, 63, 21,
- 233,100,128,248,253,239,238,239,243,240,225,227,101,128,255, 93,
- 243,237,225,236,108,128,254, 92,244,112,128,248,252,246,229,242,
- 244,233,227,225,108,128,254, 56,235,229,116, 2, 63, 64, 63,106,
- 236,229,230,116,132, 0, 91, 63, 79, 63, 84, 63, 89, 63,101,226,
- 116,128,248,240,229,120,128,248,239,237,239,238,239,243,240,225,
- 227,101,128,255, 59,244,112,128,248,238,242,233,231,232,116,132,
- 0, 93, 63,122, 63,127, 63,132, 63,144,226,116,128,248,251,229,
- 120,128,248,250,237,239,238,239,243,240,225,227,101,128,255, 61,
- 244,112,128,248,249,229,246,101,131, 2,216, 63,161, 63,172, 63,
- 178,226,229,236,239,247,227,237, 98,128, 3, 46,227,237, 98,128,
- 3, 6,233,238,246,229,242,244,229,100, 3, 63,193, 63,204, 63,
- 210,226,229,236,239,247,227,237, 98,128, 3, 47,227,237, 98,128,
- 3, 17,228,239,245,226,236,229,227,237, 98,128, 3, 97,233,228,
- 231,101, 2, 63,231, 63,242,226,229,236,239,247,227,237, 98,128,
- 3, 42,233,238,246,229,242,244,229,228,226,229,236,239,247,227,
- 237, 98,128, 3, 58,239,235,229,238,226,225,114,128, 0,166,115,
- 2, 64, 21, 64, 29,244,242,239,235,101,128, 1,128,245,240,229,
- 242,233,239,114,128,246,234,244,239,240,226,225,114,128, 1,131,
- 117, 3, 64, 56, 64, 67, 64, 78,232,233,242,225,231,225,238, 97,
- 128, 48,118,235,225,244,225,235,225,238, 97,128, 48,214,236,108,
- 2, 64, 85, 64,115,229,116,130, 32, 34, 64, 94, 64,104,233,238,
- 246,229,242,243,101,128, 37,216,239,240,229,242,225,244,239,114,
- 128, 34, 25,243,229,249,101,128, 37,206, 99,143, 0, 99, 64,156,
- 65,105, 65,116, 65,180, 65,211, 66, 48, 67,215, 68,199, 69, 43,
- 69, 92, 72, 84, 72, 92, 72,102, 72,114, 72,147, 97, 9, 64,176,
- 64,187, 64,197, 64,204, 64,211, 64,236, 64,246, 65, 42, 65, 51,
- 225,242,237,229,238,233,225,110,128, 5,110,226,229,238,231,225,
- 236,105,128, 9,154,227,245,244,101,128, 1, 7,228,229,246, 97,
- 128, 9, 26,231,117, 2, 64,218, 64,227,234,225,242,225,244,105,
- 128, 10,154,242,237,245,235,232,105,128, 10, 26,236,243,241,245,
- 225,242,101,128, 51,136,238,228,242,225,226,233,238,228,117, 4,
- 65, 8, 65, 18, 65, 24, 65, 31,226,229,238,231,225,236,105,128,
- 9,129,227,237, 98,128, 3, 16,228,229,246, 97,128, 9, 1,231,
- 245,234,225,242,225,244,105,128, 10,129,240,243,236,239,227,107,
- 128, 33,234,114, 3, 65, 59, 65, 65, 65, 91,229,239,102,128, 33,
- 5,239,110,130, 2,199, 65, 74, 65, 85,226,229,236,239,247,227,
- 237, 98,128, 3, 44,227,237, 98,128, 3, 12,242,233,225,231,229,
- 242,229,244,245,242,110,128, 33,181,226,239,240,239,237,239,230,
- 111,128, 49, 24, 99, 4, 65,126, 65,133, 65,152, 65,174,225,242,
- 239,110,128, 1, 13,229,228,233,236,236, 97,129, 0,231, 65,144,
- 225,227,245,244,101,128, 30, 9,233,242, 99, 2, 65,160, 65,165,
- 236,101,128, 36,210,245,237,230,236,229,120,128, 1, 9,245,242,
- 108,128, 2, 85,100, 2, 65,186, 65,202,239,116,129, 1, 11, 65,
- 193,225,227,227,229,238,116,128, 1, 11,243,241,245,225,242,101,
- 128, 51,197,101, 2, 65,217, 65,233,228,233,236,236, 97,129, 0,
- 184, 65,227,227,237, 98,128, 3, 39,238,116,132, 0,162, 65,246,
- 66, 14, 66, 26, 66, 37,105, 2, 65,252, 66, 4,231,242,225,228,
- 101,128, 33, 3,238,230,229,242,233,239,114,128,246,223,237,239,
- 238,239,243,240,225,227,101,128,255,224,239,236,228,243,244,249,
- 236,101,128,247,162,243,245,240,229,242,233,239,114,128,246,224,
- 104, 5, 66, 60, 66,123, 66,134, 67, 62, 67,154, 97, 4, 66, 70,
- 66, 81, 66, 91, 66, 98,225,242,237,229,238,233,225,110,128, 5,
- 121,226,229,238,231,225,236,105,128, 9,155,228,229,246, 97,128,
- 9, 27,231,117, 2, 66,105, 66,114,234,225,242,225,244,105,128,
- 10,155,242,237,245,235,232,105,128, 10, 27,226,239,240,239,237,
- 239,230,111,128, 49, 20,101, 6, 66,148, 66,168, 66,192, 67, 4,
- 67, 16, 67, 37,225,226,235,232,225,243,233,225,238,227,249,242,
- 233,236,236,233, 99,128, 4,189, 99, 2, 66,174, 66,182,235,237,
- 225,242,107,128, 39, 19,249,242,233,236,236,233, 99,128, 4, 71,
- 100, 2, 66,198, 66,242,229,243,227,229,238,228,229,114, 2, 66,
- 211, 66,231,225,226,235,232,225,243,233,225,238,227,249,242,233,
- 236,236,233, 99,128, 4,191,227,249,242,233,236,236,233, 99,128,
- 4,183,233,229,242,229,243,233,243,227,249,242,233,236,236,233,
- 99,128, 4,245,232,225,242,237,229,238,233,225,110,128, 5,115,
- 235,232,225,235,225,243,243,233,225,238,227,249,242,233,236,236,
- 233, 99,128, 4,204,246,229,242,244,233,227,225,236,243,244,242,
- 239,235,229,227,249,242,233,236,236,233, 99,128, 4,185,105,129,
- 3,199, 67, 68,229,245,227,104, 4, 67, 81, 67,116, 67,131, 67,
- 140, 97, 2, 67, 87, 67,102,227,233,242,227,236,229,235,239,242,
- 229,225,110,128, 50,119,240,225,242,229,238,235,239,242,229,225,
- 110,128, 50, 23,227,233,242,227,236,229,235,239,242,229,225,110,
- 128, 50,105,235,239,242,229,225,110,128, 49, 74,240,225,242,229,
- 238,235,239,242,229,225,110,128, 50, 9,111, 2, 67,160, 67,210,
- 227,104, 3, 67,169, 67,191, 67,201,225,110, 2, 67,176, 67,184,
- 231,244,232,225,105,128, 14, 10,244,232,225,105,128, 14, 8,233,
- 238,231,244,232,225,105,128, 14, 9,239,229,244,232,225,105,128,
- 14, 12,239,107,128, 1,136,105, 2, 67,221, 68, 67,229,245, 99,
- 5, 67,235, 68, 14, 68, 29, 68, 38, 68, 52, 97, 2, 67,241, 68,
- 0,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,118,
- 240,225,242,229,238,235,239,242,229,225,110,128, 50, 22,227,233,
- 242,227,236,229,235,239,242,229,225,110,128, 50,104,235,239,242,
- 229,225,110,128, 49, 72,240,225,242,229,238,235,239,242,229,225,
- 110,128, 50, 8,245,240,225,242,229,238,235,239,242,229,225,110,
- 128, 50, 28,242, 99, 2, 68, 74, 68,169,236,101,132, 37,203, 68,
- 87, 68, 98, 68,103, 68,127,237,245,236,244,233,240,236,121,128,
- 34,151,239,116,128, 34,153,112, 2, 68,109, 68,115,236,245,115,
- 128, 34,149,239,243,244,225,236,237,225,242,107,128, 48, 54,247,
- 233,244,104, 2, 68,136, 68,152,236,229,230,244,232,225,236,230,
- 226,236,225,227,107,128, 37,208,242,233,231,232,244,232,225,236,
- 230,226,236,225,227,107,128, 37,209,245,237,230,236,229,120,130,
- 2,198, 68,182, 68,193,226,229,236,239,247,227,237, 98,128, 3,
- 45,227,237, 98,128, 3, 2,108, 3, 68,207, 68,213, 69, 11,229,
- 225,114,128, 35, 39,233,227,107, 4, 68,225, 68,236, 68,245, 68,
- 255,225,236,246,229,239,236,225,114,128, 1,194,228,229,238,244,
- 225,108,128, 1,192,236,225,244,229,242,225,108,128, 1,193,242,
- 229,244,242,239,230,236,229,120,128, 1,195,245, 98,129, 38, 99,
- 69, 18,243,245,233,116, 2, 69, 27, 69, 35,226,236,225,227,107,
- 128, 38, 99,247,232,233,244,101,128, 38,103,109, 3, 69, 51, 69,
- 65, 69, 76,227,245,226,229,228,243,241,245,225,242,101,128, 51,
- 164,239,238,239,243,240,225,227,101,128,255, 67,243,241,245,225,
- 242,229,228,243,241,245,225,242,101,128, 51,160,111, 8, 69,110,
- 69,121, 69,208, 70,150, 71,179, 71,210, 72, 61, 72, 70,225,242,
- 237,229,238,233,225,110,128, 5,129,236,239,110,131, 0, 58, 69,
- 133, 69,158, 69,177,237,239,110, 2, 69,141, 69,149,229,244,225,
- 242,121,128, 32,161,239,243,240,225,227,101,128,255, 26,115, 2,
- 69,164, 69,170,233,231,110,128, 32,161,237,225,236,108,128,254,
- 85,244,242,233,225,238,231,245,236,225,114, 2, 69,192, 69,202,
- 232,225,236,230,237,239,100,128, 2,209,237,239,100,128, 2,208,
- 109, 2, 69,214, 70,143,237, 97,134, 0, 44, 69,231, 70, 39, 70,
- 50, 70, 62, 70, 92, 70,115, 97, 3, 69,239, 70, 9, 70, 17,226,
- 239,246,101, 2, 69,248, 69,254,227,237, 98,128, 3, 19,242,233,
- 231,232,244,227,237, 98,128, 3, 21,227,227,229,238,116,128,246,
- 195,114, 2, 70, 23, 70, 30,225,226,233, 99,128, 6, 12,237,229,
- 238,233,225,110,128, 5, 93,233,238,230,229,242,233,239,114,128,
- 246,225,237,239,238,239,243,240,225,227,101,128,255, 12,242,229,
- 246,229,242,243,229,100, 2, 70, 75, 70, 86,225,226,239,246,229,
- 227,237, 98,128, 3, 20,237,239,100,128, 2,189,115, 2, 70, 98,
- 70,105,237,225,236,108,128,254, 80,245,240,229,242,233,239,114,
- 128,246,226,244,245,242,238,229,100, 2, 70,126, 70,137,225,226,
- 239,246,229,227,237, 98,128, 3, 18,237,239,100,128, 2,187,240,
- 225,243,115,128, 38, 60,110, 2, 70,156, 70,165,231,242,245,229,
- 238,116,128, 34, 69,116, 2, 70,171, 70,185,239,245,242,233,238,
- 244,229,231,242,225,108,128, 34, 46,242,239,108,142, 35, 3, 70,
- 219, 70,225, 70,240, 70,255, 71, 43, 71, 88, 71,102, 71,107, 71,
- 112, 71,117, 71,123, 71,128, 71,169, 71,174,193,195, 75,128, 0,
- 6, 66, 2, 70,231, 70,236,197, 76,128, 0, 7, 83,128, 0, 8,
- 67, 2, 70,246, 70,251,193, 78,128, 0, 24, 82,128, 0, 13, 68,
- 3, 71, 7, 71, 33, 71, 38, 67, 4, 71, 17, 71, 21, 71, 25, 71,
- 29, 49,128, 0, 17, 50,128, 0, 18, 51,128, 0, 19, 52,128, 0,
- 20,197, 76,128, 0,127,204, 69,128, 0, 16, 69, 5, 71, 55, 71,
- 59, 71, 64, 71, 69, 71, 74, 77,128, 0, 25,206, 81,128, 0, 5,
- 207, 84,128, 0, 4,211, 67,128, 0, 27, 84, 2, 71, 80, 71, 84,
- 66,128, 0, 23, 88,128, 0, 3, 70, 2, 71, 94, 71, 98, 70,128,
- 0, 12, 83,128, 0, 28,199, 83,128, 0, 29,200, 84,128, 0, 9,
- 204, 70,128, 0, 10,206,193, 75,128, 0, 21,210, 83,128, 0, 30,
- 83, 5, 71,140, 71,144, 71,154, 71,159, 71,164, 73,128, 0, 15,
- 79,129, 0, 14, 71,150, 84,128, 0, 2,212, 88,128, 0, 1,213,
- 66,128, 0, 26,217, 78,128, 0, 22,213, 83,128, 0, 31,214, 84,
- 128, 0, 11,240,249,242,233,231,232,116,129, 0,169, 71,191,115,
- 2, 71,197, 71,203,225,238,115,128,248,233,229,242,233,102,128,
- 246,217,114, 2, 71,216, 72, 44,238,229,242,226,242,225,227,235,
- 229,116, 2, 71,231, 72, 9,236,229,230,116,130, 48, 12, 71,242,
- 71,254,232,225,236,230,247,233,228,244,104,128,255, 98,246,229,
- 242,244,233,227,225,108,128,254, 65,242,233,231,232,116,130, 48,
- 13, 72, 21, 72, 33,232,225,236,230,247,233,228,244,104,128,255,
- 99,246,229,242,244,233,227,225,108,128,254, 66,240,239,242,225,
- 244,233,239,238,243,241,245,225,242,101,128, 51,127,243,241,245,
- 225,242,101,128, 51,199,246,229,242,235,231,243,241,245,225,242,
- 101,128, 51,198,240,225,242,229,110,128, 36,158,242,245,250,229,
- 233,242,111,128, 32,162,243,244,242,229,244,227,232,229,100,128,
- 2,151,245,114, 2, 72,121, 72,139,236,121, 2, 72,128, 72,134,
- 225,238,100,128, 34,207,239,114,128, 34,206,242,229,238,227,121,
- 128, 0,164,249,114, 4, 72,158, 72,166, 72,173, 72,181,194,242,
- 229,246,101,128,246,209,198,236,229,120,128,246,210,226,242,229,
- 246,101,128,246,212,230,236,229,120,128,246,213,100,146, 0,100,
- 72,228, 74,110, 75,134, 75,194, 76,114, 77, 68, 77,130, 78, 59,
- 78, 72, 78, 81, 78,107, 78,132, 78,141, 79,208, 79,216, 79,227,
- 79,247, 80, 19, 97, 11, 72,252, 73, 7, 73, 17, 73, 89, 73,152,
- 73,163, 73,174, 73,243, 74, 49, 74, 55, 74, 85,225,242,237,229,
- 238,233,225,110,128, 5,100,226,229,238,231,225,236,105,128, 9,
- 166,100, 5, 73, 29, 73, 38, 73, 44, 73, 58, 73, 74,225,242,225,
- 226,233, 99,128, 6, 54,229,246, 97,128, 9, 38,230,233,238,225,
- 236,225,242,225,226,233, 99,128,254,190,233,238,233,244,233,225,
- 236,225,242,225,226,233, 99,128,254,191,237,229,228,233,225,236,
- 225,242,225,226,233, 99,128,254,192,103, 3, 73, 97, 73,114, 73,
- 128,229,243,104,129, 5,188, 73,105,232,229,226,242,229,119,128,
- 5,188,231,229,114,129, 32, 32, 73,122,228,226,108,128, 32, 33,
- 117, 2, 73,134, 73,143,234,225,242,225,244,105,128, 10,166,242,
- 237,245,235,232,105,128, 10, 38,232,233,242,225,231,225,238, 97,
- 128, 48, 96,235,225,244,225,235,225,238, 97,128, 48,192,108, 3,
- 73,182, 73,191, 73,229,225,242,225,226,233, 99,128, 6, 47,229,
- 116,130, 5,211, 73,200, 73,220,228,225,231,229,243,104,129,251,
- 51, 73,211,232,229,226,242,229,119,128,251, 51,232,229,226,242,
- 229,119,128, 5,211,230,233,238,225,236,225,242,225,226,233, 99,
- 128,254,170,237,237, 97, 3, 73,253, 74, 6, 74, 18,225,242,225,
- 226,233, 99,128, 6, 79,236,239,247,225,242,225,226,233, 99,128,
- 6, 79,244,225,238, 97, 2, 74, 27, 74, 41,236,244,239,238,229,
- 225,242,225,226,233, 99,128, 6, 76,242,225,226,233, 99,128, 6,
- 76,238,228, 97,128, 9,100,242,231, 97, 2, 74, 63, 74, 72,232,
- 229,226,242,229,119,128, 5,167,236,229,230,244,232,229,226,242,
- 229,119,128, 5,167,243,233,225,240,238,229,245,237,225,244,225,
- 227,249,242,233,236,236,233,227,227,237, 98,128, 4,133, 98, 3,
- 74,118, 75,115, 75,125,108, 9, 74,138, 74,146, 75, 3, 75, 11,
- 75, 27, 75, 38, 75, 56, 75, 70, 75, 81,199,242,225,246,101,128,
- 246,211, 97, 2, 74,152, 74,209,238,231,236,229,226,242,225,227,
- 235,229,116, 2, 74,168, 74,188,236,229,230,116,129, 48, 10, 74,
- 177,246,229,242,244,233,227,225,108,128,254, 61,242,233,231,232,
- 116,129, 48, 11, 74,198,246,229,242,244,233,227,225,108,128,254,
- 62,114, 2, 74,215, 74,236,227,232,233,238,246,229,242,244,229,
- 228,226,229,236,239,247,227,237, 98,128, 3, 43,242,239,119, 2,
- 74,244, 74,251,236,229,230,116,128, 33,212,242,233,231,232,116,
- 128, 33,210,228,225,238,228, 97,128, 9,101,231,242,225,246,101,
- 129,246,214, 75, 21,227,237, 98,128, 3, 15,233,238,244,229,231,
- 242,225,108,128, 34, 44,236,239,247,236,233,238,101,129, 32, 23,
- 75, 50,227,237, 98,128, 3, 51,239,246,229,242,236,233,238,229,
- 227,237, 98,128, 3, 63,240,242,233,237,229,237,239,100,128, 2,
- 186,246,229,242,244,233,227,225,108, 2, 75, 94, 75,100,226,225,
- 114,128, 32, 22,236,233,238,229,225,226,239,246,229,227,237, 98,
- 128, 3, 14,239,240,239,237,239,230,111,128, 49, 9,243,241,245,
- 225,242,101,128, 51,200, 99, 4, 75,144, 75,151, 75,160, 75,187,
- 225,242,239,110,128, 1, 15,229,228,233,236,236, 97,128, 30, 17,
- 233,242, 99, 2, 75,168, 75,173,236,101,128, 36,211,245,237,230,
- 236,229,248,226,229,236,239,119,128, 30, 19,242,239,225,116,128,
- 1, 17,100, 4, 75,204, 76, 29, 76, 39, 76, 90, 97, 4, 75,214,
- 75,224, 75,231, 76, 0,226,229,238,231,225,236,105,128, 9,161,
- 228,229,246, 97,128, 9, 33,231,117, 2, 75,238, 75,247,234,225,
- 242,225,244,105,128, 10,161,242,237,245,235,232,105,128, 10, 33,
- 108, 2, 76, 6, 76, 15,225,242,225,226,233, 99,128, 6,136,230,
- 233,238,225,236,225,242,225,226,233, 99,128,251,137,228,232,225,
- 228,229,246, 97,128, 9, 92,232, 97, 3, 76, 48, 76, 58, 76, 65,
- 226,229,238,231,225,236,105,128, 9,162,228,229,246, 97,128, 9,
- 34,231,117, 2, 76, 72, 76, 81,234,225,242,225,244,105,128, 10,
- 162,242,237,245,235,232,105,128, 10, 34,239,116, 2, 76, 97, 76,
- 106,225,227,227,229,238,116,128, 30, 11,226,229,236,239,119,128,
- 30, 13,101, 8, 76,132, 76,185, 76,192, 76,217, 76,227, 76,238,
- 77, 27, 77, 63, 99, 2, 76,138, 76,175,233,237,225,236,243,229,
- 240,225,242,225,244,239,114, 2, 76,156, 76,165,225,242,225,226,
- 233, 99,128, 6,107,240,229,242,243,233,225,110,128, 6,107,249,
- 242,233,236,236,233, 99,128, 4, 52,231,242,229,101,128, 0,176,
- 232,105, 2, 76,199, 76,208,232,229,226,242,229,119,128, 5,173,
- 242,225,231,225,238, 97,128, 48,103,233,227,239,240,244,233, 99,
- 128, 3,239,235,225,244,225,235,225,238, 97,128, 48,199,108, 2,
- 76,244, 77, 11,229,244,101, 2, 76,252, 77, 3,236,229,230,116,
- 128, 35, 43,242,233,231,232,116,128, 35, 38,244, 97,129, 3,180,
- 77, 18,244,245,242,238,229,100,128, 1,141,238,239,237,233,238,
- 225,244,239,242,237,233,238,245,243,239,238,229,238,245,237,229,
- 242,225,244,239,242,226,229,238,231,225,236,105,128, 9,248,250,
- 104,128, 2,164,104, 2, 77, 74, 77,124, 97, 3, 77, 82, 77, 92,
- 77, 99,226,229,238,231,225,236,105,128, 9,167,228,229,246, 97,
- 128, 9, 39,231,117, 2, 77,106, 77,115,234,225,242,225,244,105,
- 128, 10,167,242,237,245,235,232,105,128, 10, 39,239,239,107,128,
- 2, 87,105, 6, 77,144, 77,193, 77,253, 78, 8, 78, 19, 78, 29,
- 97, 2, 77,150, 77,172,236,249,244,233,235,225,244,239,238,239,
- 115,129, 3,133, 77,166,227,237, 98,128, 3, 68,237,239,238,100,
- 129, 38,102, 77,181,243,245,233,244,247,232,233,244,101,128, 38,
- 98,229,242,229,243,233,115,133, 0,168, 77,212, 77,220, 77,231,
- 77,237, 77,245,225,227,245,244,101,128,246,215,226,229,236,239,
- 247,227,237, 98,128, 3, 36,227,237, 98,128, 3, 8,231,242,225,
- 246,101,128,246,216,244,239,238,239,115,128, 3,133,232,233,242,
- 225,231,225,238, 97,128, 48, 98,235,225,244,225,235,225,238, 97,
- 128, 48,194,244,244,239,237,225,242,107,128, 48, 3,246,105, 2,
- 78, 36, 78, 47,228,101,129, 0,247, 78, 43,115,128, 34, 35,243,
- 233,239,238,243,236,225,243,104,128, 34, 21,234,229,227,249,242,
- 233,236,236,233, 99,128, 4, 82,235,243,232,225,228,101,128, 37,
- 147,108, 2, 78, 87, 78, 98,233,238,229,226,229,236,239,119,128,
- 30, 15,243,241,245,225,242,101,128, 51,151,109, 2, 78,113, 78,
- 121,225,227,242,239,110,128, 1, 17,239,238,239,243,240,225,227,
- 101,128,255, 68,238,226,236,239,227,107,128, 37,132,111, 10, 78,
- 163, 78,175, 78,185, 78,196, 78,207, 79, 23, 79, 28, 79, 39, 79,
- 154, 79,180,227,232,225,228,225,244,232,225,105,128, 14, 14,228,
- 229,235,244,232,225,105,128, 14, 20,232,233,242,225,231,225,238,
- 97,128, 48,105,235,225,244,225,235,225,238, 97,128, 48,201,236,
- 236,225,114,132, 0, 36, 78,222, 78,233, 78,245, 79, 0,233,238,
- 230,229,242,233,239,114,128,246,227,237,239,238,239,243,240,225,
- 227,101,128,255, 4,239,236,228,243,244,249,236,101,128,247, 36,
- 115, 2, 79, 6, 79, 13,237,225,236,108,128,254,105,245,240,229,
- 242,233,239,114,128,246,228,238,103,128, 32,171,242,245,243,241,
- 245,225,242,101,128, 51, 38,116, 6, 79, 53, 79, 70, 79, 92, 79,
- 103, 79,135, 79,142,225,227,227,229,238,116,129, 2,217, 79, 64,
- 227,237, 98,128, 3, 7,226,229,236,239,247, 99, 2, 79, 81, 79,
- 86,237, 98,128, 3, 35,239,237, 98,128, 3, 35,235,225,244,225,
- 235,225,238, 97,128, 48,251,236,229,243,115, 2, 79,112, 79,116,
- 105,128, 1, 49,106,129,246,190, 79,122,243,244,242,239,235,229,
- 232,239,239,107,128, 2,132,237,225,244,104,128, 34,197,244,229,
- 228,227,233,242,227,236,101,128, 37,204,245,226,236,229,249,239,
- 228,240,225,244,225,104,129,251, 31, 79,171,232,229,226,242,229,
- 119,128,251, 31,247,238,244,225,227,107, 2, 79,191, 79,202,226,
- 229,236,239,247,227,237, 98,128, 3, 30,237,239,100,128, 2,213,
- 240,225,242,229,110,128, 36,159,243,245,240,229,242,233,239,114,
- 128,246,235,116, 2, 79,233, 79,239,225,233,108,128, 2, 86,239,
- 240,226,225,114,128, 1,140,117, 2, 79,253, 80, 8,232,233,242,
- 225,231,225,238, 97,128, 48,101,235,225,244,225,235,225,238, 97,
- 128, 48,197,122,132, 1,243, 80, 31, 80, 40, 80, 59, 80, 96,225,
- 236,244,239,238,101,128, 2,163, 99, 2, 80, 46, 80, 53,225,242,
- 239,110,128, 1,198,245,242,108,128, 2,165,101, 2, 80, 65, 80,
- 85,225,226,235,232,225,243,233,225,238,227,249,242,233,236,236,
- 233, 99,128, 4,225,227,249,242,233,236,236,233, 99,128, 4, 85,
- 232,229,227,249,242,233,236,236,233, 99,128, 4, 95,101,151, 0,
- 101, 80,159, 80,178, 80,212, 81,186, 81,248, 82, 25, 82, 37, 82,
- 60, 82,113, 83,225, 84, 27, 84,129, 84,245, 85,124, 85,199, 85,
- 230, 86, 36, 86, 89, 87, 24, 87,157, 87,177, 87,221, 88, 56, 97,
- 2, 80,165, 80,172,227,245,244,101,128, 0,233,242,244,104,128,
- 38, 65, 98, 3, 80,186, 80,195, 80,205,229,238,231,225,236,105,
- 128, 9,143,239,240,239,237,239,230,111,128, 49, 28,242,229,246,
- 101,128, 1, 21, 99, 5, 80,224, 81, 41, 81, 55, 81, 87, 81,176,
- 97, 2, 80,230, 81, 35,238,228,242, 97, 3, 80,241, 80,248, 81,
- 3,228,229,246, 97,128, 9, 13,231,245,234,225,242,225,244,105,
- 128, 10,141,246,239,247,229,236,243,233,231,110, 2, 81, 17, 81,
- 24,228,229,246, 97,128, 9, 69,231,245,234,225,242,225,244,105,
- 128, 10,197,242,239,110,128, 1, 27,229,228,233,236,236,225,226,
- 242,229,246,101,128, 30, 29,104, 2, 81, 61, 81, 72,225,242,237,
- 229,238,233,225,110,128, 5,101,249,233,247,238,225,242,237,229,
- 238,233,225,110,128, 5,135,233,242, 99, 2, 81, 95, 81,100,236,
- 101,128, 36,212,245,237,230,236,229,120,134, 0,234, 81,121, 81,
- 129, 81,137, 81,148, 81,156, 81,168,225,227,245,244,101,128, 30,
- 191,226,229,236,239,119,128, 30, 25,228,239,244,226,229,236,239,
- 119,128, 30,199,231,242,225,246,101,128, 30,193,232,239,239,235,
- 225,226,239,246,101,128, 30,195,244,233,236,228,101,128, 30,197,
- 249,242,233,236,236,233, 99,128, 4, 84,100, 4, 81,196, 81,206,
- 81,212, 81,222,226,236,231,242,225,246,101,128, 2, 5,229,246,
- 97,128, 9, 15,233,229,242,229,243,233,115,128, 0,235,239,116,
- 130, 1, 23, 81,231, 81,240,225,227,227,229,238,116,128, 1, 23,
- 226,229,236,239,119,128, 30,185,101, 2, 81,254, 82, 9,231,245,
- 242,237,245,235,232,105,128, 10, 15,237,225,244,242,225,231,245,
- 242,237,245,235,232,105,128, 10, 71,230,227,249,242,233,236,236,
- 233, 99,128, 4, 68,103, 2, 82, 43, 82, 50,242,225,246,101,128,
- 0,232,245,234,225,242,225,244,105,128, 10,143,104, 4, 82, 70,
- 82, 81, 82, 92, 82,102,225,242,237,229,238,233,225,110,128, 5,
- 103,226,239,240,239,237,239,230,111,128, 49, 29,233,242,225,231,
- 225,238, 97,128, 48, 72,239,239,235,225,226,239,246,101,128, 30,
- 187,105, 4, 82,123, 82,134, 83,192, 83,207,226,239,240,239,237,
- 239,230,111,128, 49, 31,231,232,116,142, 0, 56, 82,168, 82,177,
- 82,187, 82,217, 82,224, 83, 6, 83, 31, 83, 76, 83,110, 83,122,
- 83,133, 83,166, 83,174, 83,185,225,242,225,226,233, 99,128, 6,
- 104,226,229,238,231,225,236,105,128, 9,238,227,233,242,227,236,
- 101,129, 36,103, 82,198,233,238,246,229,242,243,229,243,225,238,
- 243,243,229,242,233,102,128, 39,145,228,229,246, 97,128, 9,110,
- 229,229,110, 2, 82,232, 82,241,227,233,242,227,236,101,128, 36,
- 113,112, 2, 82,247, 82,254,225,242,229,110,128, 36,133,229,242,
- 233,239,100,128, 36,153,231,117, 2, 83, 13, 83, 22,234,225,242,
- 225,244,105,128, 10,238,242,237,245,235,232,105,128, 10,110,104,
- 2, 83, 37, 83, 63, 97, 2, 83, 43, 83, 54,227,235,225,242,225,
- 226,233, 99,128, 6,104,238,231,250,232,239,117,128, 48, 40,238,
- 239,244,229,226,229,225,237,229,100,128, 38,107,105, 2, 83, 82,
- 83,100,228,229,239,231,242,225,240,232,233,227,240,225,242,229,
- 110,128, 50, 39,238,230,229,242,233,239,114,128, 32,136,237,239,
- 238,239,243,240,225,227,101,128,255, 24,239,236,228,243,244,249,
- 236,101,128,247, 56,112, 2, 83,139, 83,146,225,242,229,110,128,
- 36,123,229,114, 2, 83,153, 83,159,233,239,100,128, 36,143,243,
- 233,225,110,128, 6,248,242,239,237,225,110,128, 33,119,243,245,
- 240,229,242,233,239,114,128, 32,120,244,232,225,105,128, 14, 88,
- 238,246,229,242,244,229,228,226,242,229,246,101,128, 2, 7,239,
- 244,233,230,233,229,228,227,249,242,233,236,236,233, 99,128, 4,
- 101,107, 2, 83,231, 83,255,225,244,225,235,225,238, 97,129, 48,
- 168, 83,243,232,225,236,230,247,233,228,244,104,128,255,116,111,
- 2, 84, 5, 84, 20,238,235,225,242,231,245,242,237,245,235,232,
- 105,128, 10,116,242,229,225,110,128, 49, 84,108, 3, 84, 35, 84,
- 46, 84,107,227,249,242,233,236,236,233, 99,128, 4, 59,101, 2,
- 84, 52, 84, 59,237,229,238,116,128, 34, 8,246,229,110, 3, 84,
- 69, 84, 78, 84, 99,227,233,242,227,236,101,128, 36,106,112, 2,
- 84, 84, 84, 91,225,242,229,110,128, 36,126,229,242,233,239,100,
- 128, 36,146,242,239,237,225,110,128, 33,122,236,233,240,243,233,
- 115,129, 32, 38, 84,118,246,229,242,244,233,227,225,108,128, 34,
- 238,109, 5, 84,141, 84,169, 84,180, 84,200, 84,211,225,227,242,
- 239,110,130, 1, 19, 84,153, 84,161,225,227,245,244,101,128, 30,
- 23,231,242,225,246,101,128, 30, 21,227,249,242,233,236,236,233,
- 99,128, 4, 60,228,225,243,104,129, 32, 20, 84,189,246,229,242,
- 244,233,227,225,108,128,254, 49,239,238,239,243,240,225,227,101,
- 128,255, 69,112, 2, 84,217, 84,237,232,225,243,233,243,237,225,
- 242,235,225,242,237,229,238,233,225,110,128, 5, 91,244,249,243,
- 229,116,128, 34, 5,110, 6, 85, 3, 85, 14, 85, 25, 85, 69, 85,
- 101, 85,116,226,239,240,239,237,239,230,111,128, 49, 35,227,249,
- 242,233,236,236,233, 99,128, 4, 61,100, 2, 85, 31, 85, 50,225,
- 243,104,129, 32, 19, 85, 39,246,229,242,244,233,227,225,108,128,
- 254, 50,229,243,227,229,238,228,229,242,227,249,242,233,236,236,
- 233, 99,128, 4,163,103,130, 1, 75, 85, 77, 85, 88,226,239,240,
- 239,237,239,230,111,128, 49, 37,232,229,227,249,242,233,236,236,
- 233, 99,128, 4,165,232,239,239,235,227,249,242,233,236,236,233,
- 99,128, 4,200,243,240,225,227,101,128, 32, 2,111, 3, 85,132,
- 85,140, 85,149,231,239,238,229,107,128, 1, 25,235,239,242,229,
- 225,110,128, 49, 83,240,229,110,130, 2, 91, 85,159, 85,168,227,
- 236,239,243,229,100,128, 2,154,242,229,246,229,242,243,229,100,
- 130, 2, 92, 85,183, 85,192,227,236,239,243,229,100,128, 2, 94,
- 232,239,239,107,128, 2, 93,112, 2, 85,205, 85,212,225,242,229,
- 110,128, 36,160,243,233,236,239,110,129, 3,181, 85,222,244,239,
- 238,239,115,128, 3,173,241,117, 2, 85,237, 86, 25,225,108,130,
- 0, 61, 85,246, 86, 2,237,239,238,239,243,240,225,227,101,128,
- 255, 29,115, 2, 86, 8, 86, 15,237,225,236,108,128,254,102,245,
- 240,229,242,233,239,114,128, 32,124,233,246,225,236,229,238,227,
- 101,128, 34, 97,114, 3, 86, 44, 86, 55, 86, 66,226,239,240,239,
- 237,239,230,111,128, 49, 38,227,249,242,233,236,236,233, 99,128,
- 4, 64,229,246,229,242,243,229,100,129, 2, 88, 86, 78,227,249,
- 242,233,236,236,233, 99,128, 4, 77,115, 6, 86,103, 86,114, 86,
- 134, 86,215, 87, 4, 87, 14,227,249,242,233,236,236,233, 99,128,
- 4, 65,228,229,243,227,229,238,228,229,242,227,249,242,233,236,
- 236,233, 99,128, 4,171,104,132, 2,131, 86,146, 86,153, 86,184,
- 86,199,227,245,242,108,128, 2,134,239,242,116, 2, 86,161, 86,
- 168,228,229,246, 97,128, 9, 14,246,239,247,229,236,243,233,231,
- 238,228,229,246, 97,128, 9, 70,242,229,246,229,242,243,229,228,
- 236,239,239,112,128, 1,170,243,241,245,225,244,242,229,246,229,
- 242,243,229,100,128, 2,133,237,225,236,108, 2, 86,224, 86,235,
- 232,233,242,225,231,225,238, 97,128, 48, 71,235,225,244,225,235,
- 225,238, 97,129, 48,167, 86,248,232,225,236,230,247,233,228,244,
- 104,128,255,106,244,233,237,225,244,229,100,128, 33, 46,245,240,
- 229,242,233,239,114,128,246,236,116, 5, 87, 36, 87, 62, 87, 66,
- 87, 83, 87,149, 97,130, 3,183, 87, 44, 87, 54,242,237,229,238,
- 233,225,110,128, 5,104,244,239,238,239,115,128, 3,174,104,128,
- 0,240,233,236,228,101,129, 30,189, 87, 75,226,229,236,239,119,
- 128, 30, 27,238,225,232,244, 97, 3, 87, 95, 87,127, 87,136,230,
- 239,245,235,104, 2, 87,105, 87,114,232,229,226,242,229,119,128,
- 5,145,236,229,230,244,232,229,226,242,229,119,128, 5,145,232,
- 229,226,242,229,119,128, 5,145,236,229,230,244,232,229,226,242,
- 229,119,128, 5,145,245,242,238,229,100,128, 1,221,117, 2, 87,
- 163, 87,172,235,239,242,229,225,110,128, 49, 97,242,111,128, 32,
- 172,246,239,247,229,236,243,233,231,110, 3, 87,193, 87,203, 87,
- 210,226,229,238,231,225,236,105,128, 9,199,228,229,246, 97,128,
- 9, 71,231,245,234,225,242,225,244,105,128, 10,199,120, 2, 87,
- 227, 88, 44,227,236,225,109,132, 0, 33, 87,242, 87,253, 88, 24,
- 88, 36,225,242,237,229,238,233,225,110,128, 5, 92,100, 2, 88,
- 3, 88, 8,226,108,128, 32, 60,239,247,110,129, 0,161, 88, 16,
- 243,237,225,236,108,128,247,161,237,239,238,239,243,240,225,227,
- 101,128,255, 1,243,237,225,236,108,128,247, 33,233,243,244,229,
- 238,244,233,225,108,128, 34, 3,250,104,131, 2,146, 88, 67, 88,
- 86, 88, 97, 99, 2, 88, 73, 88, 80,225,242,239,110,128, 1,239,
- 245,242,108,128, 2,147,242,229,246,229,242,243,229,100,128, 1,
- 185,244,225,233,108,128, 1,186,102,140, 0,102, 88,132, 88,214,
- 88,225, 88,234, 88,246, 89, 93, 89,109, 91,117, 91,130, 91,156,
- 93, 33, 93, 41, 97, 4, 88,142, 88,149, 88,160, 88,171,228,229,
- 246, 97,128, 9, 94,231,245,242,237,245,235,232,105,128, 10, 94,
- 232,242,229,238,232,229,233,116,128, 33, 9,244,232, 97, 3, 88,
- 181, 88,190, 88,202,225,242,225,226,233, 99,128, 6, 78,236,239,
- 247,225,242,225,226,233, 99,128, 6, 78,244,225,238,225,242,225,
- 226,233, 99,128, 6, 75,226,239,240,239,237,239,230,111,128, 49,
- 8,227,233,242,227,236,101,128, 36,213,228,239,244,225,227,227,
- 229,238,116,128, 30, 31,101, 3, 88,254, 89, 76, 89, 86,104, 4,
- 89, 8, 89, 31, 89, 45, 89, 61,225,114, 2, 89, 15, 89, 22,225,
- 226,233, 99,128, 6, 65,237,229,238,233,225,110,128, 5,134,230,
- 233,238,225,236,225,242,225,226,233, 99,128,254,210,233,238,233,
- 244,233,225,236,225,242,225,226,233, 99,128,254,211,237,229,228,
- 233,225,236,225,242,225,226,233, 99,128,254,212,233,227,239,240,
- 244,233, 99,128, 3,229,237,225,236,101,128, 38, 64,102,130,251,
- 0, 89,101, 89,105,105,128,251, 3,108,128,251, 4,105,136,251,
- 1, 89,129, 89,169, 89,180, 89,202, 90, 68, 90, 85, 90, 93, 90,
- 106,230,244,229,229,110, 2, 89,139, 89,148,227,233,242,227,236,
- 101,128, 36,110,112, 2, 89,154, 89,161,225,242,229,110,128, 36,
- 130,229,242,233,239,100,128, 36,150,231,245,242,229,228,225,243,
- 104,128, 32, 18,236,236,229,100, 2, 89,189, 89,195,226,239,120,
- 128, 37,160,242,229,227,116,128, 37,172,238,225,108, 5, 89,216,
- 89,255, 90, 16, 90, 33, 90, 49,235,225,102,130, 5,218, 89,226,
- 89,246,228,225,231,229,243,104,129,251, 58, 89,237,232,229,226,
- 242,229,119,128,251, 58,232,229,226,242,229,119,128, 5,218,237,
- 229,109,129, 5,221, 90, 7,232,229,226,242,229,119,128, 5,221,
- 238,245,110,129, 5,223, 90, 24,232,229,226,242,229,119,128, 5,
- 223,240,101,129, 5,227, 90, 40,232,229,226,242,229,119,128, 5,
- 227,244,243,225,228,105,129, 5,229, 90, 59,232,229,226,242,229,
- 119,128, 5,229,242,243,244,244,239,238,229,227,232,233,238,229,
- 243,101,128, 2,201,243,232,229,249,101,128, 37,201,244,225,227,
- 249,242,233,236,236,233, 99,128, 4,115,246,101,142, 0, 53, 90,
- 139, 90,148, 90,158, 90,188, 90,195, 90,205, 90,230, 91, 1, 91,
- 35, 91, 47, 91, 58, 91, 91, 91, 99, 91,110,225,242,225,226,233,
- 99,128, 6,101,226,229,238,231,225,236,105,128, 9,235,227,233,
- 242,227,236,101,129, 36,100, 90,169,233,238,246,229,242,243,229,
- 243,225,238,243,243,229,242,233,102,128, 39,142,228,229,246, 97,
- 128, 9,107,229,233,231,232,244,232,115,128, 33, 93,231,117, 2,
- 90,212, 90,221,234,225,242,225,244,105,128, 10,235,242,237,245,
- 235,232,105,128, 10,107,232, 97, 2, 90,237, 90,248,227,235,225,
- 242,225,226,233, 99,128, 6,101,238,231,250,232,239,117,128, 48,
- 37,105, 2, 91, 7, 91, 25,228,229,239,231,242,225,240,232,233,
- 227,240,225,242,229,110,128, 50, 36,238,230,229,242,233,239,114,
- 128, 32,133,237,239,238,239,243,240,225,227,101,128,255, 21,239,
- 236,228,243,244,249,236,101,128,247, 53,112, 2, 91, 64, 91, 71,
- 225,242,229,110,128, 36,120,229,114, 2, 91, 78, 91, 84,233,239,
- 100,128, 36,140,243,233,225,110,128, 6,245,242,239,237,225,110,
- 128, 33,116,243,245,240,229,242,233,239,114,128, 32,117,244,232,
- 225,105,128, 14, 85,108,129,251, 2, 91,123,239,242,233,110,128,
- 1,146,109, 2, 91,136, 91,147,239,238,239,243,240,225,227,101,
- 128,255, 70,243,241,245,225,242,101,128, 51,153,111, 4, 91,166,
- 91,188, 91,200, 91,207,230, 97, 2, 91,173, 91,181,238,244,232,
- 225,105,128, 14, 31,244,232,225,105,128, 14, 29,238,231,237,225,
- 238,244,232,225,105,128, 14, 79,242,225,236,108,128, 34, 0,245,
- 114,142, 0, 52, 91,240, 91,249, 92, 3, 92, 33, 92, 40, 92, 65,
- 92, 92, 92,126, 92,138, 92,157, 92,168, 92,201, 92,209, 92,220,
- 225,242,225,226,233, 99,128, 6,100,226,229,238,231,225,236,105,
- 128, 9,234,227,233,242,227,236,101,129, 36, 99, 92, 14,233,238,
- 246,229,242,243,229,243,225,238,243,243,229,242,233,102,128, 39,
- 141,228,229,246, 97,128, 9,106,231,117, 2, 92, 47, 92, 56,234,
- 225,242,225,244,105,128, 10,234,242,237,245,235,232,105,128, 10,
- 106,232, 97, 2, 92, 72, 92, 83,227,235,225,242,225,226,233, 99,
- 128, 6,100,238,231,250,232,239,117,128, 48, 36,105, 2, 92, 98,
- 92,116,228,229,239,231,242,225,240,232,233,227,240,225,242,229,
- 110,128, 50, 35,238,230,229,242,233,239,114,128, 32,132,237,239,
- 238,239,243,240,225,227,101,128,255, 20,238,245,237,229,242,225,
- 244,239,242,226,229,238,231,225,236,105,128, 9,247,239,236,228,
- 243,244,249,236,101,128,247, 52,112, 2, 92,174, 92,181,225,242,
- 229,110,128, 36,119,229,114, 2, 92,188, 92,194,233,239,100,128,
- 36,139,243,233,225,110,128, 6,244,242,239,237,225,110,128, 33,
- 115,243,245,240,229,242,233,239,114,128, 32,116,116, 2, 92,226,
- 93, 8,229,229,110, 2, 92,234, 92,243,227,233,242,227,236,101,
- 128, 36,109,112, 2, 92,249, 93, 0,225,242,229,110,128, 36,129,
- 229,242,233,239,100,128, 36,149,104, 2, 93, 14, 93, 19,225,105,
- 128, 14, 84,244,239,238,229,227,232,233,238,229,243,101,128, 2,
- 203,240,225,242,229,110,128, 36,161,242, 97, 2, 93, 48, 93, 56,
- 227,244,233,239,110,128, 32, 68,238, 99,128, 32,163,103,144, 0,
- 103, 93, 97, 94, 43, 94, 66, 94,127, 94,144, 95, 65, 96, 58, 96,
- 143, 96,156, 97, 14, 97, 39, 97, 67, 97, 89, 98, 34, 98, 56, 98,
- 158, 97, 9, 93,117, 93,127, 93,134, 93,141, 93,205, 93,230, 93,
- 241, 93,252, 94, 30,226,229,238,231,225,236,105,128, 9,151,227,
- 245,244,101,128, 1,245,228,229,246, 97,128, 9, 23,102, 4, 93,
- 151, 93,160, 93,174, 93,190,225,242,225,226,233, 99,128, 6,175,
- 230,233,238,225,236,225,242,225,226,233, 99,128,251,147,233,238,
- 233,244,233,225,236,225,242,225,226,233, 99,128,251,148,237,229,
- 228,233,225,236,225,242,225,226,233, 99,128,251,149,231,117, 2,
- 93,212, 93,221,234,225,242,225,244,105,128, 10,151,242,237,245,
- 235,232,105,128, 10, 23,232,233,242,225,231,225,238, 97,128, 48,
- 76,235,225,244,225,235,225,238, 97,128, 48,172,237,237, 97,130,
- 3,179, 94, 6, 94, 19,236,225,244,233,238,243,237,225,236,108,
- 128, 2, 99,243,245,240,229,242,233,239,114,128, 2,224,238,231,
- 233,225,227,239,240,244,233, 99,128, 3,235, 98, 2, 94, 49, 94,
- 59,239,240,239,237,239,230,111,128, 49, 13,242,229,246,101,128,
- 1, 31, 99, 4, 94, 76, 94, 83, 94, 92, 94,114,225,242,239,110,
- 128, 1,231,229,228,233,236,236, 97,128, 1, 35,233,242, 99, 2,
- 94,100, 94,105,236,101,128, 36,214,245,237,230,236,229,120,128,
- 1, 29,239,237,237,225,225,227,227,229,238,116,128, 1, 35,228,
- 239,116,129, 1, 33, 94,135,225,227,227,229,238,116,128, 1, 33,
- 101, 6, 94,158, 94,169, 94,180, 94,191, 94,210, 95, 56,227,249,
- 242,233,236,236,233, 99,128, 4, 51,232,233,242,225,231,225,238,
- 97,128, 48, 82,235,225,244,225,235,225,238, 97,128, 48,178,239,
- 237,229,244,242,233,227,225,236,236,249,229,241,245,225,108,128,
- 34, 81,114, 3, 94,218, 95, 11, 95, 21,229,243,104, 3, 94,228,
- 94,243, 94,252,225,227,227,229,238,244,232,229,226,242,229,119,
- 128, 5,156,232,229,226,242,229,119,128, 5,243,237,245,241,228,
- 225,237,232,229,226,242,229,119,128, 5,157,237,225,238,228,226,
- 236,115,128, 0,223,243,232,225,249,233,109, 2, 95, 32, 95, 47,
- 225,227,227,229,238,244,232,229,226,242,229,119,128, 5,158,232,
- 229,226,242,229,119,128, 5,244,244,225,237,225,242,107,128, 48,
- 19,104, 5, 95, 77, 95,210, 96, 17, 96, 42, 96, 48, 97, 4, 95,
- 87, 95, 97, 95,120, 95,145,226,229,238,231,225,236,105,128, 9,
- 152,100, 2, 95,103, 95,114,225,242,237,229,238,233,225,110,128,
- 5,114,229,246, 97,128, 9, 24,231,117, 2, 95,127, 95,136,234,
- 225,242,225,244,105,128, 10,152,242,237,245,235,232,105,128, 10,
- 24,233,110, 4, 95,156, 95,165, 95,179, 95,195,225,242,225,226,
- 233, 99,128, 6, 58,230,233,238,225,236,225,242,225,226,233, 99,
- 128,254,206,233,238,233,244,233,225,236,225,242,225,226,233, 99,
- 128,254,207,237,229,228,233,225,236,225,242,225,226,233, 99,128,
- 254,208,101, 3, 95,218, 95,239, 96, 0,237,233,228,228,236,229,
- 232,239,239,235,227,249,242,233,236,236,233, 99,128, 4,149,243,
- 244,242,239,235,229,227,249,242,233,236,236,233, 99,128, 4,147,
- 245,240,244,245,242,238,227,249,242,233,236,236,233, 99,128, 4,
- 145,232, 97, 2, 96, 24, 96, 31,228,229,246, 97,128, 9, 90,231,
- 245,242,237,245,235,232,105,128, 10, 90,239,239,107,128, 2, 96,
- 250,243,241,245,225,242,101,128, 51,147,105, 3, 96, 66, 96, 77,
- 96, 88,232,233,242,225,231,225,238, 97,128, 48, 78,235,225,244,
- 225,235,225,238, 97,128, 48,174,109, 2, 96, 94, 96,105,225,242,
- 237,229,238,233,225,110,128, 5, 99,229,108,130, 5,210, 96,114,
- 96,134,228,225,231,229,243,104,129,251, 50, 96,125,232,229,226,
- 242,229,119,128,251, 50,232,229,226,242,229,119,128, 5,210,234,
- 229,227,249,242,233,236,236,233, 99,128, 4, 83,236,239,244,244,
- 225,108, 2, 96,167, 96,184,233,238,246,229,242,244,229,228,243,
- 244,242,239,235,101,128, 1,190,243,244,239,112,132, 2,148, 96,
- 199, 96,210, 96,216, 96,248,233,238,246,229,242,244,229,100,128,
- 2,150,237,239,100,128, 2,192,242,229,246,229,242,243,229,100,
- 130, 2,149, 96,231, 96,237,237,239,100,128, 2,193,243,245,240,
- 229,242,233,239,114,128, 2,228,243,244,242,239,235,101,129, 2,
- 161, 97, 3,242,229,246,229,242,243,229,100,128, 2,162,109, 2,
- 97, 20, 97, 28,225,227,242,239,110,128, 30, 33,239,238,239,243,
- 240,225,227,101,128,255, 71,111, 2, 97, 45, 97, 56,232,233,242,
- 225,231,225,238, 97,128, 48, 84,235,225,244,225,235,225,238, 97,
- 128, 48,180,240, 97, 2, 97, 74, 97, 80,242,229,110,128, 36,162,
- 243,241,245,225,242,101,128, 51,172,114, 2, 97, 95, 97,192, 97,
- 2, 97,101, 97,109,228,233,229,238,116,128, 34, 7,246,101,134,
- 0, 96, 97,126, 97,137, 97,154, 97,161, 97,170, 97,182,226,229,
- 236,239,247,227,237, 98,128, 3, 22, 99, 2, 97,143, 97,148,237,
- 98,128, 3, 0,239,237, 98,128, 3, 0,228,229,246, 97,128, 9,
- 83,236,239,247,237,239,100,128, 2,206,237,239,238,239,243,240,
- 225,227,101,128,255, 64,244,239,238,229,227,237, 98,128, 3, 64,
- 229,225,244,229,114,132, 0, 62, 97,208, 97,227, 97,239, 98, 26,
- 229,241,245,225,108,129, 34,101, 97,218,239,242,236,229,243,115,
- 128, 34,219,237,239,238,239,243,240,225,227,101,128,255, 30,111,
- 2, 97,245, 98, 15,114, 2, 97,251, 98, 8,229,241,245,233,246,
- 225,236,229,238,116,128, 34,115,236,229,243,115,128, 34,119,246,
- 229,242,229,241,245,225,108,128, 34,103,243,237,225,236,108,128,
- 254,101,115, 2, 98, 40, 98, 48,227,242,233,240,116,128, 2, 97,
- 244,242,239,235,101,128, 1,229,117, 4, 98, 66, 98, 77, 98,134,
- 98,145,232,233,242,225,231,225,238, 97,128, 48, 80,233,108, 2,
- 98, 84, 98,109,236,229,237,239,116, 2, 98, 94, 98,101,236,229,
- 230,116,128, 0,171,242,233,231,232,116,128, 0,187,243,233,238,
- 231,108, 2, 98,119, 98,126,236,229,230,116,128, 32, 57,242,233,
- 231,232,116,128, 32, 58,235,225,244,225,235,225,238, 97,128, 48,
- 176,242,225,237,245,243,241,245,225,242,101,128, 51, 24,249,243,
- 241,245,225,242,101,128, 51,201,104,144, 0,104, 98,204,101, 90,
- 101,125,101,162,101,202,103, 90,103,110,104, 75,104, 87,104, 99,
- 105,167,105,175,105,186,105,195,106, 19,106, 23, 97, 13, 98,232,
- 99, 15, 99, 25, 99, 55, 99, 80, 99,158, 99,170, 99,195, 99,210,
- 99,239, 99,252,100, 54,100, 63, 97, 2, 98,238, 99, 1,226,235,
- 232,225,243,233,225,238,227,249,242,233,236,236,233, 99,128, 4,
- 169,236,244,239,238,229,225,242,225,226,233, 99,128, 6,193,226,
- 229,238,231,225,236,105,128, 9,185,228,101, 2, 99, 32, 99, 50,
- 243,227,229,238,228,229,242,227,249,242,233,236,236,233, 99,128,
- 4,179,246, 97,128, 9, 57,231,117, 2, 99, 62, 99, 71,234,225,
- 242,225,244,105,128, 10,185,242,237,245,235,232,105,128, 10, 57,
- 104, 4, 99, 90, 99, 99, 99,113, 99,143,225,242,225,226,233, 99,
- 128, 6, 45,230,233,238,225,236,225,242,225,226,233, 99,128,254,
- 162,105, 2, 99,119, 99,134,238,233,244,233,225,236,225,242,225,
- 226,233, 99,128,254,163,242,225,231,225,238, 97,128, 48,111,237,
- 229,228,233,225,236,225,242,225,226,233, 99,128,254,164,233,244,
- 245,243,241,245,225,242,101,128, 51, 42,235,225,244,225,235,225,
- 238, 97,129, 48,207, 99,183,232,225,236,230,247,233,228,244,104,
- 128,255,138,236,225,238,244,231,245,242,237,245,235,232,105,128,
- 10, 77,237,250, 97, 2, 99,218, 99,227,225,242,225,226,233, 99,
- 128, 6, 33,236,239,247,225,242,225,226,233, 99,128, 6, 33,238,
- 231,245,236,230,233,236,236,229,114,128, 49,100,114, 2,100, 2,
- 100, 18,228,243,233,231,238,227,249,242,233,236,236,233, 99,128,
- 4, 74,240,239,239,110, 2,100, 27,100, 40,236,229,230,244,226,
- 225,242,226,245,112,128, 33,188,242,233,231,232,244,226,225,242,
- 226,245,112,128, 33,192,243,241,245,225,242,101,128, 51,202,244,
- 225,102, 3,100, 73,100,165,101, 0,240,225,244,225,104,134, 5,
- 178,100, 93,100, 98,100,112,100,121,100,136,100,152,177, 54,128,
- 5,178, 50, 2,100,104,100,108, 51,128, 5,178,102,128, 5,178,
- 232,229,226,242,229,119,128, 5,178,238,225,242,242,239,247,232,
- 229,226,242,229,119,128, 5,178,241,245,225,242,244,229,242,232,
- 229,226,242,229,119,128, 5,178,247,233,228,229,232,229,226,242,
- 229,119,128, 5,178,241,225,237,225,244,115,135, 5,179,100,188,
- 100,193,100,198,100,203,100,212,100,227,100,243,177, 98,128, 5,
- 179,178, 56,128, 5,179,179, 52,128, 5,179,232,229,226,242,229,
- 119,128, 5,179,238,225,242,242,239,247,232,229,226,242,229,119,
- 128, 5,179,241,245,225,242,244,229,242,232,229,226,242,229,119,
- 128, 5,179,247,233,228,229,232,229,226,242,229,119,128, 5,179,
- 243,229,231,239,108,135, 5,177,101, 22,101, 27,101, 32,101, 37,
- 101, 46,101, 61,101, 77,177, 55,128, 5,177,178, 52,128, 5,177,
- 179, 48,128, 5,177,232,229,226,242,229,119,128, 5,177,238,225,
- 242,242,239,247,232,229,226,242,229,119,128, 5,177,241,245,225,
- 242,244,229,242,232,229,226,242,229,119,128, 5,177,247,233,228,
- 229,232,229,226,242,229,119,128, 5,177, 98, 3,101, 98,101,103,
- 101,113,225,114,128, 1, 39,239,240,239,237,239,230,111,128, 49,
- 15,242,229,246,229,226,229,236,239,119,128, 30, 43, 99, 2,101,
- 131,101,140,229,228,233,236,236, 97,128, 30, 41,233,242, 99, 2,
- 101,148,101,153,236,101,128, 36,215,245,237,230,236,229,120,128,
- 1, 37,100, 2,101,168,101,178,233,229,242,229,243,233,115,128,
- 30, 39,239,116, 2,101,185,101,194,225,227,227,229,238,116,128,
- 30, 35,226,229,236,239,119,128, 30, 37,101,136, 5,212,101,222,
- 101,255,102, 19,102,248,103, 8,103, 53,103, 62,103, 75,225,242,
- 116,129, 38,101,101,230,243,245,233,116, 2,101,239,101,247,226,
- 236,225,227,107,128, 38,101,247,232,233,244,101,128, 38, 97,228,
- 225,231,229,243,104,129,251, 52,102, 10,232,229,226,242,229,119,
- 128,251, 52,104, 6,102, 33,102, 61,102, 69,102,119,102,165,102,
- 214, 97, 2,102, 39,102, 53,236,244,239,238,229,225,242,225,226,
- 233, 99,128, 6,193,242,225,226,233, 99,128, 6, 71,229,226,242,
- 229,119,128, 5,212,230,233,238,225,236, 97, 2,102, 80,102,111,
- 236,116, 2,102, 87,102, 99,239,238,229,225,242,225,226,233, 99,
- 128,251,167,244,247,239,225,242,225,226,233, 99,128,254,234,242,
- 225,226,233, 99,128,254,234,232,225,237,250,225,225,226,239,246,
- 101, 2,102,134,102,148,230,233,238,225,236,225,242,225,226,233,
- 99,128,251,165,233,243,239,236,225,244,229,228,225,242,225,226,
- 233, 99,128,251,164,105, 2,102,171,102,205,238,233,244,233,225,
- 236, 97, 2,102,183,102,197,236,244,239,238,229,225,242,225,226,
- 233, 99,128,251,168,242,225,226,233, 99,128,254,235,242,225,231,
- 225,238, 97,128, 48,120,237,229,228,233,225,236, 97, 2,102,226,
- 102,240,236,244,239,238,229,225,242,225,226,233, 99,128,251,169,
- 242,225,226,233, 99,128,254,236,233,243,229,233,229,242,225,243,
- 241,245,225,242,101,128, 51,123,107, 2,103, 14,103, 38,225,244,
- 225,235,225,238, 97,129, 48,216,103, 26,232,225,236,230,247,233,
- 228,244,104,128,255,141,245,244,225,225,242,245,243,241,245,225,
- 242,101,128, 51, 54,238,231,232,239,239,107,128, 2,103,242,245,
- 244,245,243,241,245,225,242,101,128, 51, 57,116,129, 5,215,103,
- 81,232,229,226,242,229,119,128, 5,215,232,239,239,107,129, 2,
- 102,103, 99,243,245,240,229,242,233,239,114,128, 2,177,105, 4,
- 103,120,103,205,103,216,103,241,229,245,104, 4,103,132,103,167,
- 103,182,103,191, 97, 2,103,138,103,153,227,233,242,227,236,229,
- 235,239,242,229,225,110,128, 50,123,240,225,242,229,238,235,239,
- 242,229,225,110,128, 50, 27,227,233,242,227,236,229,235,239,242,
- 229,225,110,128, 50,109,235,239,242,229,225,110,128, 49, 78,240,
- 225,242,229,238,235,239,242,229,225,110,128, 50, 13,232,233,242,
- 225,231,225,238, 97,128, 48,114,235,225,244,225,235,225,238, 97,
- 129, 48,210,103,229,232,225,236,230,247,233,228,244,104,128,255,
- 139,242,233,113,134, 5,180,104, 3,104, 8,104, 22,104, 31,104,
- 46,104, 62,177, 52,128, 5,180, 50, 2,104, 14,104, 18, 49,128,
- 5,180,100,128, 5,180,232,229,226,242,229,119,128, 5,180,238,
- 225,242,242,239,247,232,229,226,242,229,119,128, 5,180,241,245,
- 225,242,244,229,242,232,229,226,242,229,119,128, 5,180,247,233,
- 228,229,232,229,226,242,229,119,128, 5,180,236,233,238,229,226,
- 229,236,239,119,128, 30,150,237,239,238,239,243,240,225,227,101,
- 128,255, 72,111, 9,104,119,104,130,104,154,104,179,105, 11,105,
- 24,105,110,105,150,105,161,225,242,237,229,238,233,225,110,128,
- 5,112,232,105, 2,104,137,104,145,240,244,232,225,105,128, 14,
- 43,242,225,231,225,238, 97,128, 48,123,235,225,244,225,235,225,
- 238, 97,129, 48,219,104,167,232,225,236,230,247,233,228,244,104,
- 128,255,142,236,225,109,135, 5,185,104,199,104,204,104,209,104,
- 214,104,223,104,238,104,254,177, 57,128, 5,185,178, 54,128, 5,
- 185,179, 50,128, 5,185,232,229,226,242,229,119,128, 5,185,238,
- 225,242,242,239,247,232,229,226,242,229,119,128, 5,185,241,245,
- 225,242,244,229,242,232,229,226,242,229,119,128, 5,185,247,233,
- 228,229,232,229,226,242,229,119,128, 5,185,238,239,235,232,245,
- 235,244,232,225,105,128, 14, 46,111, 2,105, 30,105,100,107, 4,
- 105, 40,105, 52,105, 58,105, 80,225,226,239,246,229,227,239,237,
- 98,128, 3, 9,227,237, 98,128, 3, 9,240,225,236,225,244,225,
- 236,233,250,229,228,226,229,236,239,247,227,237, 98,128, 3, 33,
- 242,229,244,242,239,230,236,229,248,226,229,236,239,247,227,237,
- 98,128, 3, 34,238,243,241,245,225,242,101,128, 51, 66,114, 2,
- 105,116,105,143,105, 2,105,122,105,131,227,239,240,244,233, 99,
- 128, 3,233,250,239,238,244,225,236,226,225,114,128, 32, 21,238,
- 227,237, 98,128, 3, 27,244,243,240,242,233,238,231,115,128, 38,
- 104,245,243,101,128, 35, 2,240,225,242,229,110,128, 36,163,243,
- 245,240,229,242,233,239,114,128, 2,176,244,245,242,238,229,100,
- 128, 2,101,117, 4,105,205,105,216,105,229,105,254,232,233,242,
- 225,231,225,238, 97,128, 48,117,233,233,244,239,243,241,245,225,
- 242,101,128, 51, 51,235,225,244,225,235,225,238, 97,129, 48,213,
- 105,242,232,225,236,230,247,233,228,244,104,128,255,140,238,231,
- 225,242,245,237,236,225,245,116,129, 2,221,106, 13,227,237, 98,
- 128, 3, 11,118,128, 1,149,249,240,232,229,110,132, 0, 45,106,
- 39,106, 50,106, 62,106, 85,233,238,230,229,242,233,239,114,128,
- 246,229,237,239,238,239,243,240,225,227,101,128,255, 13,115, 2,
- 106, 68,106, 75,237,225,236,108,128,254, 99,245,240,229,242,233,
- 239,114,128,246,230,244,247,111,128, 32, 16,105,149, 0,105,106,
- 137,106,160,106,194,106,241,110,123,110,243,111, 24,111, 51,111,
- 213,111,217,111,255,112, 21,112,105,113, 14,113, 89,113, 97,113,
- 110,113,197,113,254,114, 26,114, 70,225, 99, 2,106,144,106,150,
- 245,244,101,128, 0,237,249,242,233,236,236,233, 99,128, 4, 79,
- 98, 3,106,168,106,177,106,187,229,238,231,225,236,105,128, 9,
- 135,239,240,239,237,239,230,111,128, 49, 39,242,229,246,101,128,
- 1, 45, 99, 3,106,202,106,209,106,231,225,242,239,110,128, 1,
- 208,233,242, 99, 2,106,217,106,222,236,101,128, 36,216,245,237,
- 230,236,229,120,128, 0,238,249,242,233,236,236,233, 99,128, 4,
- 86,100, 4,106,251,107, 5,110, 80,110,113,226,236,231,242,225,
- 246,101,128, 2, 9,101, 2,107, 11,110, 75,239,231,242,225,240,
- 104, 7,107, 32,107, 46,107, 59,109,244,110, 19,110, 32,110, 44,
- 229,225,242,244,232,227,233,242,227,236,101,128, 50,143,230,233,
- 242,229,227,233,242,227,236,101,128, 50,139,233, 99, 14,107, 90,
- 107,106,107,205,108, 3,108, 69,108, 98,108,114,108,171,108,220,
- 108,232,109, 3,109, 70,109,208,109,237,225,236,236,233,225,238,
- 227,229,240,225,242,229,110,128, 50, 63, 99, 4,107,116,107,127,
- 107,141,107,148,225,236,236,240,225,242,229,110,128, 50, 58,229,
- 238,244,242,229,227,233,242,227,236,101,128, 50,165,236,239,243,
- 101,128, 48, 6,111, 3,107,156,107,171,107,191,237,237, 97,129,
- 48, 1,107,164,236,229,230,116,128,255,100,238,231,242,225,244,
- 245,236,225,244,233,239,238,240,225,242,229,110,128, 50, 55,242,
- 242,229,227,244,227,233,242,227,236,101,128, 50,163,101, 3,107,
- 213,107,225,107,242,225,242,244,232,240,225,242,229,110,128, 50,
- 47,238,244,229,242,240,242,233,243,229,240,225,242,229,110,128,
- 50, 61,248,227,229,236,236,229,238,244,227,233,242,227,236,101,
- 128, 50,157,102, 2,108, 9,108, 24,229,243,244,233,246,225,236,
- 240,225,242,229,110,128, 50, 64,105, 2,108, 30,108, 59,238,225,
- 238,227,233,225,108, 2,108, 42,108, 51,227,233,242,227,236,101,
- 128, 50,150,240,225,242,229,110,128, 50, 54,242,229,240,225,242,
- 229,110,128, 50, 43,104, 2,108, 75,108, 86,225,246,229,240,225,
- 242,229,110,128, 50, 50,233,231,232,227,233,242,227,236,101,128,
- 50,164,233,244,229,242,225,244,233,239,238,237,225,242,107,128,
- 48, 5,108, 3,108,122,108,148,108,160,225,226,239,114, 2,108,
- 131,108,140,227,233,242,227,236,101,128, 50,152,240,225,242,229,
- 110,128, 50, 56,229,230,244,227,233,242,227,236,101,128, 50,167,
- 239,247,227,233,242,227,236,101,128, 50,166,109, 2,108,177,108,
- 209,101, 2,108,183,108,198,228,233,227,233,238,229,227,233,242,
- 227,236,101,128, 50,169,244,225,236,240,225,242,229,110,128, 50,
- 46,239,239,238,240,225,242,229,110,128, 50, 42,238,225,237,229,
- 240,225,242,229,110,128, 50, 52,112, 2,108,238,108,246,229,242,
- 233,239,100,128, 48, 2,242,233,238,244,227,233,242,227,236,101,
- 128, 50,158,114, 2,109, 9,109, 57,101, 3,109, 17,109, 28,109,
- 43,225,227,232,240,225,242,229,110,128, 50, 67,240,242,229,243,
- 229,238,244,240,225,242,229,110,128, 50, 57,243,239,245,242,227,
- 229,240,225,242,229,110,128, 50, 62,233,231,232,244,227,233,242,
- 227,236,101,128, 50,168,115, 5,109, 82,109,111,109,125,109,150,
- 109,178,101, 2,109, 88,109,101,227,242,229,244,227,233,242,227,
- 236,101,128, 50,153,236,230,240,225,242,229,110,128, 50, 66,239,
- 227,233,229,244,249,240,225,242,229,110,128, 50, 51,112, 2,109,
- 131,109,137,225,227,101,128, 48, 0,229,227,233,225,236,240,225,
- 242,229,110,128, 50, 53,116, 2,109,156,109,167,239,227,235,240,
- 225,242,229,110,128, 50, 49,245,228,249,240,225,242,229,110,128,
- 50, 59,117, 2,109,184,109,193,238,240,225,242,229,110,128, 50,
- 48,240,229,242,246,233,243,229,240,225,242,229,110,128, 50, 60,
- 119, 2,109,214,109,226,225,244,229,242,240,225,242,229,110,128,
- 50, 44,239,239,228,240,225,242,229,110,128, 50, 45,250,229,242,
- 111,128, 48, 7,109, 2,109,250,110, 7,229,244,225,236,227,233,
- 242,227,236,101,128, 50,142,239,239,238,227,233,242,227,236,101,
- 128, 50,138,238,225,237,229,227,233,242,227,236,101,128, 50,148,
- 243,245,238,227,233,242,227,236,101,128, 50,144,119, 2,110, 50,
- 110, 63,225,244,229,242,227,233,242,227,236,101,128, 50,140,239,
- 239,228,227,233,242,227,236,101,128, 50,141,246, 97,128, 9, 7,
- 233,229,242,229,243,233,115,130, 0,239,110, 94,110,102,225,227,
- 245,244,101,128, 30, 47,227,249,242,233,236,236,233, 99,128, 4,
- 229,239,244,226,229,236,239,119,128, 30,203,101, 3,110,131,110,
- 147,110,158,226,242,229,246,229,227,249,242,233,236,236,233, 99,
- 128, 4,215,227,249,242,233,236,236,233, 99,128, 4, 53,245,238,
- 103, 4,110,170,110,205,110,220,110,229, 97, 2,110,176,110,191,
- 227,233,242,227,236,229,235,239,242,229,225,110,128, 50,117,240,
- 225,242,229,238,235,239,242,229,225,110,128, 50, 21,227,233,242,
- 227,236,229,235,239,242,229,225,110,128, 50,103,235,239,242,229,
- 225,110,128, 49, 71,240,225,242,229,238,235,239,242,229,225,110,
- 128, 50, 7,103, 2,110,249,111, 0,242,225,246,101,128, 0,236,
- 117, 2,111, 6,111, 15,234,225,242,225,244,105,128, 10,135,242,
- 237,245,235,232,105,128, 10, 7,104, 2,111, 30,111, 40,233,242,
- 225,231,225,238, 97,128, 48, 68,239,239,235,225,226,239,246,101,
- 128, 30,201,105, 8,111, 69,111, 79,111, 90,111, 97,111,122,111,
- 138,111,153,111,169,226,229,238,231,225,236,105,128, 9,136,227,
- 249,242,233,236,236,233, 99,128, 4, 56,228,229,246, 97,128, 9,
- 8,231,117, 2,111,104,111,113,234,225,242,225,244,105,128, 10,
- 136,242,237,245,235,232,105,128, 10, 8,237,225,244,242,225,231,
- 245,242,237,245,235,232,105,128, 10, 64,238,246,229,242,244,229,
- 228,226,242,229,246,101,128, 2, 11,243,232,239,242,244,227,249,
- 242,233,236,236,233, 99,128, 4, 57,246,239,247,229,236,243,233,
- 231,110, 3,111,185,111,195,111,202,226,229,238,231,225,236,105,
- 128, 9,192,228,229,246, 97,128, 9, 64,231,245,234,225,242,225,
- 244,105,128, 10,192,106,128, 1, 51,107, 2,111,223,111,247,225,
- 244,225,235,225,238, 97,129, 48,164,111,235,232,225,236,230,247,
- 233,228,244,104,128,255,114,239,242,229,225,110,128, 49, 99,108,
- 2,112, 5,112, 10,228,101,128, 2,220,245,249,232,229,226,242,
- 229,119,128, 5,172,109, 2,112, 27,112, 94, 97, 3,112, 35,112,
- 55,112, 80,227,242,239,110,129, 1, 43,112, 44,227,249,242,233,
- 236,236,233, 99,128, 4,227,231,229,239,242,225,240,240,242,239,
- 248,233,237,225,244,229,236,249,229,241,245,225,108,128, 34, 83,
- 244,242,225,231,245,242,237,245,235,232,105,128, 10, 63,239,238,
- 239,243,240,225,227,101,128,255, 73,110, 5,112,117,112,127,112,
- 136,112,148,112,232,227,242,229,237,229,238,116,128, 34, 6,230,
- 233,238,233,244,121,128, 34, 30,233,225,242,237,229,238,233,225,
- 110,128, 5,107,116, 2,112,154,112,222,101, 2,112,160,112,211,
- 231,242,225,108,131, 34, 43,112,173,112,191,112,196, 98, 2,112,
- 179,112,187,239,244,244,239,109,128, 35, 33,116,128, 35, 33,229,
- 120,128,248,245,116, 2,112,202,112,207,239,112,128, 35, 32,112,
- 128, 35, 32,242,243,229,227,244,233,239,110,128, 34, 41,233,243,
- 241,245,225,242,101,128, 51, 5,118, 3,112,240,112,249,113, 2,
- 226,245,236,236,229,116,128, 37,216,227,233,242,227,236,101,128,
- 37,217,243,237,233,236,229,230,225,227,101,128, 38, 59,111, 3,
- 113, 22,113, 33,113, 41,227,249,242,233,236,236,233, 99,128, 4,
- 81,231,239,238,229,107,128, 1, 47,244, 97,131, 3,185,113, 52,
- 113, 73,113, 81,228,233,229,242,229,243,233,115,129, 3,202,113,
- 65,244,239,238,239,115,128, 3,144,236,225,244,233,110,128, 2,
- 105,244,239,238,239,115,128, 3,175,240,225,242,229,110,128, 36,
- 164,242,233,231,245,242,237,245,235,232,105,128, 10,114,115, 4,
- 113,120,113,165,113,179,113,187,237,225,236,108, 2,113,129,113,
- 140,232,233,242,225,231,225,238, 97,128, 48, 67,235,225,244,225,
- 235,225,238, 97,129, 48,163,113,153,232,225,236,230,247,233,228,
- 244,104,128,255,104,243,232,225,242,226,229,238,231,225,236,105,
- 128, 9,250,244,242,239,235,101,128, 2,104,245,240,229,242,233,
- 239,114,128,246,237,116, 2,113,203,113,237,229,242,225,244,233,
- 239,110, 2,113,215,113,226,232,233,242,225,231,225,238, 97,128,
- 48,157,235,225,244,225,235,225,238, 97,128, 48,253,233,236,228,
- 101,129, 1, 41,113,246,226,229,236,239,119,128, 30, 45,117, 2,
- 114, 4,114, 15,226,239,240,239,237,239,230,111,128, 49, 41,227,
- 249,242,233,236,236,233, 99,128, 4, 78,246,239,247,229,236,243,
- 233,231,110, 3,114, 42,114, 52,114, 59,226,229,238,231,225,236,
- 105,128, 9,191,228,229,246, 97,128, 9, 63,231,245,234,225,242,
- 225,244,105,128, 10,191,250,232,233,244,243, 97, 2,114, 81,114,
- 92,227,249,242,233,236,236,233, 99,128, 4,117,228,226,236,231,
- 242,225,246,229,227,249,242,233,236,236,233, 99,128, 4,119,106,
- 138, 0,106,114,135,114,198,114,209,115, 3,115, 19,115,132,115,
- 201,115,206,115,218,115,226, 97, 4,114,145,114,156,114,166,114,
- 173,225,242,237,229,238,233,225,110,128, 5,113,226,229,238,231,
- 225,236,105,128, 9,156,228,229,246, 97,128, 9, 28,231,117, 2,
- 114,180,114,189,234,225,242,225,244,105,128, 10,156,242,237,245,
- 235,232,105,128, 10, 28,226,239,240,239,237,239,230,111,128, 49,
- 16, 99, 3,114,217,114,224,114,246,225,242,239,110,128, 1,240,
- 233,242, 99, 2,114,232,114,237,236,101,128, 36,217,245,237,230,
- 236,229,120,128, 1, 53,242,239,243,243,229,228,244,225,233,108,
- 128, 2,157,228,239,244,236,229,243,243,243,244,242,239,235,101,
- 128, 2, 95,101, 3,115, 27,115, 38,115,103,227,249,242,233,236,
- 236,233, 99,128, 4, 88,229,109, 4,115, 49,115, 58,115, 72,115,
- 88,225,242,225,226,233, 99,128, 6, 44,230,233,238,225,236,225,
- 242,225,226,233, 99,128,254,158,233,238,233,244,233,225,236,225,
- 242,225,226,233, 99,128,254,159,237,229,228,233,225,236,225,242,
- 225,226,233, 99,128,254,160,104, 2,115,109,115,118,225,242,225,
- 226,233, 99,128, 6,152,230,233,238,225,236,225,242,225,226,233,
- 99,128,251,139,104, 2,115,138,115,188, 97, 3,115,146,115,156,
- 115,163,226,229,238,231,225,236,105,128, 9,157,228,229,246, 97,
- 128, 9, 29,231,117, 2,115,170,115,179,234,225,242,225,244,105,
- 128, 10,157,242,237,245,235,232,105,128, 10, 29,229,232,225,242,
- 237,229,238,233,225,110,128, 5,123,233,115,128, 48, 4,237,239,
- 238,239,243,240,225,227,101,128,255, 74,240,225,242,229,110,128,
- 36,165,243,245,240,229,242,233,239,114,128, 2,178,107,146, 0,
- 107,116, 21,118,110,118,121,118,183,118,194,119, 28,119, 42,120,
- 150,121, 90,121,103,121,129,121,178,122, 60,122, 82,122, 95,122,
- 118,122,160,122,170, 97, 12,116, 47,116, 79,116,101,116,131,116,
- 245,117, 14,117, 44,117, 69,117,175,117,189,118, 56,118, 85, 98,
- 2,116, 53,116, 70,225,243,232,235,233,242,227,249,242,233,236,
- 236,233, 99,128, 4,161,229,238,231,225,236,105,128, 9,149, 99,
- 2,116, 85,116, 91,245,244,101,128, 30, 49,249,242,233,236,236,
- 233, 99,128, 4, 58,228,101, 2,116,108,116,126,243,227,229,238,
- 228,229,242,227,249,242,233,236,236,233, 99,128, 4,155,246, 97,
- 128, 9, 21,102,135, 5,219,116,149,116,158,116,178,116,192,116,
- 201,116,217,116,232,225,242,225,226,233, 99,128, 6, 67,228,225,
- 231,229,243,104,129,251, 59,116,169,232,229,226,242,229,119,128,
- 251, 59,230,233,238,225,236,225,242,225,226,233, 99,128,254,218,
- 232,229,226,242,229,119,128, 5,219,233,238,233,244,233,225,236,
- 225,242,225,226,233, 99,128,254,219,237,229,228,233,225,236,225,
- 242,225,226,233, 99,128,254,220,242,225,230,229,232,229,226,242,
- 229,119,128,251, 77,231,117, 2,116,252,117, 5,234,225,242,225,
- 244,105,128, 10,149,242,237,245,235,232,105,128, 10, 21,104, 2,
- 117, 20,117, 30,233,242,225,231,225,238, 97,128, 48, 75,239,239,
- 235,227,249,242,233,236,236,233, 99,128, 4,196,235,225,244,225,
- 235,225,238, 97,129, 48,171,117, 57,232,225,236,230,247,233,228,
- 244,104,128,255,118,112, 2,117, 75,117, 96,240, 97,129, 3,186,
- 117, 82,243,249,237,226,239,236,231,242,229,229,107,128, 3,240,
- 249,229,239,245,110, 3,117,108,117,122,117,156,237,233,229,245,
- 237,235,239,242,229,225,110,128, 49,113,112, 2,117,128,117,143,
- 232,233,229,245,240,232,235,239,242,229,225,110,128, 49,132,233,
- 229,245,240,235,239,242,229,225,110,128, 49,120,243,243,225,238,
- 231,240,233,229,245,240,235,239,242,229,225,110,128, 49,121,242,
- 239,242,233,233,243,241,245,225,242,101,128, 51, 13,115, 5,117,
- 201,117,245,118, 4,118, 12,118, 40,232,233,228,225,225,245,244,
- 111, 2,117,214,117,223,225,242,225,226,233, 99,128, 6, 64,238,
- 239,243,233,228,229,226,229,225,242,233,238,231,225,242,225,226,
- 233, 99,128, 6, 64,237,225,236,236,235,225,244,225,235,225,238,
- 97,128, 48,245,241,245,225,242,101,128, 51,132,242, 97, 2,118,
- 19,118, 28,225,242,225,226,233, 99,128, 6, 80,244,225,238,225,
- 242,225,226,233, 99,128, 6, 77,244,242,239,235,229,227,249,242,
- 233,236,236,233, 99,128, 4,159,244,225,232,233,242,225,240,242,
- 239,236,239,238,231,237,225,242,235,232,225,236,230,247,233,228,
- 244,104,128,255,112,246,229,242,244,233,227,225,236,243,244,242,
- 239,235,229,227,249,242,233,236,236,233, 99,128, 4,157,226,239,
- 240,239,237,239,230,111,128, 49, 14, 99, 4,118,131,118,153,118,
- 162,118,170, 97, 2,118,137,118,147,236,243,241,245,225,242,101,
- 128, 51,137,242,239,110,128, 1,233,229,228,233,236,236, 97,128,
- 1, 55,233,242,227,236,101,128, 36,218,239,237,237,225,225,227,
- 227,229,238,116,128, 1, 55,228,239,244,226,229,236,239,119,128,
- 30, 51,101, 4,118,204,118,231,119, 0,119, 12,104, 2,118,210,
- 118,221,225,242,237,229,238,233,225,110,128, 5,132,233,242,225,
- 231,225,238, 97,128, 48, 81,235,225,244,225,235,225,238, 97,129,
- 48,177,118,244,232,225,236,230,247,233,228,244,104,128,255,121,
- 238,225,242,237,229,238,233,225,110,128, 5,111,243,237,225,236,
- 236,235,225,244,225,235,225,238, 97,128, 48,246,231,242,229,229,
- 238,236,225,238,228,233, 99,128, 1, 56,104, 6,119, 56,119,185,
- 119,196,119,221,120, 52,120,140, 97, 5,119, 68,119, 78,119, 89,
- 119, 96,119,121,226,229,238,231,225,236,105,128, 9,150,227,249,
- 242,233,236,236,233, 99,128, 4, 69,228,229,246, 97,128, 9, 22,
- 231,117, 2,119,103,119,112,234,225,242,225,244,105,128, 10,150,
- 242,237,245,235,232,105,128, 10, 22,104, 4,119,131,119,140,119,
- 154,119,170,225,242,225,226,233, 99,128, 6, 46,230,233,238,225,
- 236,225,242,225,226,233, 99,128,254,166,233,238,233,244,233,225,
- 236,225,242,225,226,233, 99,128,254,167,237,229,228,233,225,236,
- 225,242,225,226,233, 99,128,254,168,229,233,227,239,240,244,233,
- 99,128, 3,231,232, 97, 2,119,203,119,210,228,229,246, 97,128,
- 9, 89,231,245,242,237,245,235,232,105,128, 10, 89,233,229,245,
- 235,104, 4,119,235,120, 14,120, 29,120, 38, 97, 2,119,241,120,
- 0,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,120,
- 240,225,242,229,238,235,239,242,229,225,110,128, 50, 24,227,233,
- 242,227,236,229,235,239,242,229,225,110,128, 50,106,235,239,242,
- 229,225,110,128, 49, 75,240,225,242,229,238,235,239,242,229,225,
- 110,128, 50, 10,111, 4,120, 62,120,111,120,121,120,126,235,104,
- 4,120, 73,120, 82,120, 91,120,101,225,233,244,232,225,105,128,
- 14, 2,239,238,244,232,225,105,128, 14, 5,245,225,244,244,232,
- 225,105,128, 14, 3,247,225,233,244,232,225,105,128, 14, 4,237,
- 245,244,244,232,225,105,128, 14, 91,239,107,128, 1,153,242,225,
- 235,232,225,238,231,244,232,225,105,128, 14, 6,250,243,241,245,
- 225,242,101,128, 51,145,105, 4,120,160,120,171,120,196,120,245,
- 232,233,242,225,231,225,238, 97,128, 48, 77,235,225,244,225,235,
- 225,238, 97,129, 48,173,120,184,232,225,236,230,247,233,228,244,
- 104,128,255,119,242,111, 3,120,205,120,220,120,236,231,245,242,
- 225,237,245,243,241,245,225,242,101,128, 51, 21,237,229,229,244,
- 239,242,245,243,241,245,225,242,101,128, 51, 22,243,241,245,225,
- 242,101,128, 51, 20,249,229,239,107, 5,121, 4,121, 39,121, 54,
- 121, 63,121, 77, 97, 2,121, 10,121, 25,227,233,242,227,236,229,
- 235,239,242,229,225,110,128, 50,110,240,225,242,229,238,235,239,
- 242,229,225,110,128, 50, 14,227,233,242,227,236,229,235,239,242,
- 229,225,110,128, 50, 96,235,239,242,229,225,110,128, 49, 49,240,
- 225,242,229,238,235,239,242,229,225,110,128, 50, 0,243,233,239,
- 243,235,239,242,229,225,110,128, 49, 51,234,229,227,249,242,233,
- 236,236,233, 99,128, 4, 92,108, 2,121,109,121,120,233,238,229,
- 226,229,236,239,119,128, 30, 53,243,241,245,225,242,101,128, 51,
- 152,109, 3,121,137,121,151,121,162,227,245,226,229,228,243,241,
- 245,225,242,101,128, 51,166,239,238,239,243,240,225,227,101,128,
- 255, 75,243,241,245,225,242,229,228,243,241,245,225,242,101,128,
- 51,162,111, 5,121,190,121,216,121,254,122, 10,122, 24,104, 2,
- 121,196,121,206,233,242,225,231,225,238, 97,128, 48, 83,237,243,
- 241,245,225,242,101,128, 51,192,235, 97, 2,121,223,121,231,233,
- 244,232,225,105,128, 14, 1,244,225,235,225,238, 97,129, 48,179,
- 121,242,232,225,236,230,247,233,228,244,104,128,255,122,239,240,
- 239,243,241,245,225,242,101,128, 51, 30,240,240,225,227,249,242,
- 233,236,236,233, 99,128, 4,129,114, 2,122, 30,122, 50,229,225,
- 238,243,244,225,238,228,225,242,228,243,249,237,226,239,108,128,
- 50,127,239,238,233,243,227,237, 98,128, 3, 67,240, 97, 2,122,
- 67,122, 73,242,229,110,128, 36,166,243,241,245,225,242,101,128,
- 51,170,243,233,227,249,242,233,236,236,233, 99,128, 4,111,116,
- 2,122,101,122,110,243,241,245,225,242,101,128, 51,207,245,242,
- 238,229,100,128, 2,158,117, 2,122,124,122,135,232,233,242,225,
- 231,225,238, 97,128, 48, 79,235,225,244,225,235,225,238, 97,129,
- 48,175,122,148,232,225,236,230,247,233,228,244,104,128,255,120,
- 246,243,241,245,225,242,101,128, 51,184,247,243,241,245,225,242,
- 101,128, 51,190,108,146, 0,108,122,220,124,247,125, 20,125, 86,
- 125,124,126, 20,126, 29,126, 45,126, 69,126, 87,126,205,126,246,
- 127,125,127,133,127,166,127,175,127,183,127,245, 97, 7,122,236,
- 122,246,122,253,123, 4,123, 29,123, 45,124,235,226,229,238,231,
- 225,236,105,128, 9,178,227,245,244,101,128, 1, 58,228,229,246,
- 97,128, 9, 50,231,117, 2,123, 11,123, 20,234,225,242,225,244,
- 105,128, 10,178,242,237,245,235,232,105,128, 10, 50,235,235,232,
- 225,238,231,249,225,239,244,232,225,105,128, 14, 69,109, 10,123,
- 67,124, 6,124, 23,124, 61,124, 75,124, 94,124,110,124,130,124,
- 150,124,173, 97, 2,123, 73,123,254,236,229,102, 4,123, 85,123,
- 99,123,191,123,208,230,233,238,225,236,225,242,225,226,233, 99,
- 128,254,252,232,225,237,250, 97, 2,123,109,123,150,225,226,239,
- 246,101, 2,123,119,123,133,230,233,238,225,236,225,242,225,226,
- 233, 99,128,254,248,233,243,239,236,225,244,229,228,225,242,225,
- 226,233, 99,128,254,247,226,229,236,239,119, 2,123,160,123,174,
- 230,233,238,225,236,225,242,225,226,233, 99,128,254,250,233,243,
- 239,236,225,244,229,228,225,242,225,226,233, 99,128,254,249,233,
- 243,239,236,225,244,229,228,225,242,225,226,233, 99,128,254,251,
- 237,225,228,228,225,225,226,239,246,101, 2,123,223,123,237,230,
- 233,238,225,236,225,242,225,226,233, 99,128,254,246,233,243,239,
- 236,225,244,229,228,225,242,225,226,233, 99,128,254,245,242,225,
- 226,233, 99,128, 6, 68,226,228, 97,129, 3,187,124, 14,243,244,
- 242,239,235,101,128, 1,155,229,100,130, 5,220,124, 32,124, 52,
- 228,225,231,229,243,104,129,251, 60,124, 43,232,229,226,242,229,
- 119,128,251, 60,232,229,226,242,229,119,128, 5,220,230,233,238,
- 225,236,225,242,225,226,233, 99,128,254,222,232,225,232,233,238,
- 233,244,233,225,236,225,242,225,226,233, 99,128,252,202,233,238,
- 233,244,233,225,236,225,242,225,226,233, 99,128,254,223,234,229,
- 229,237,233,238,233,244,233,225,236,225,242,225,226,233, 99,128,
- 252,201,235,232,225,232,233,238,233,244,233,225,236,225,242,225,
- 226,233, 99,128,252,203,236,225,237,232,229,232,233,243,239,236,
- 225,244,229,228,225,242,225,226,233, 99,128,253,242,237,101, 2,
- 124,180,124,193,228,233,225,236,225,242,225,226,233, 99,128,254,
- 224,229,109, 2,124,200,124,219,232,225,232,233,238,233,244,233,
- 225,236,225,242,225,226,233, 99,128,253,136,233,238,233,244,233,
- 225,236,225,242,225,226,233, 99,128,252,204,242,231,229,227,233,
- 242,227,236,101,128, 37,239, 98, 3,124,255,125, 4,125, 10,225,
- 114,128, 1,154,229,236,116,128, 2,108,239,240,239,237,239,230,
- 111,128, 49, 12, 99, 4,125, 30,125, 37,125, 46,125, 73,225,242,
- 239,110,128, 1, 62,229,228,233,236,236, 97,128, 1, 60,233,242,
- 99, 2,125, 54,125, 59,236,101,128, 36,219,245,237,230,236,229,
- 248,226,229,236,239,119,128, 30, 61,239,237,237,225,225,227,227,
- 229,238,116,128, 1, 60,228,239,116,130, 1, 64,125, 96,125,105,
- 225,227,227,229,238,116,128, 1, 64,226,229,236,239,119,129, 30,
- 55,125,115,237,225,227,242,239,110,128, 30, 57,101, 3,125,132,
- 125,170,126, 15,230,116, 2,125,139,125,155,225,238,231,236,229,
- 225,226,239,246,229,227,237, 98,128, 3, 26,244,225,227,235,226,
- 229,236,239,247,227,237, 98,128, 3, 24,243,115,132, 0, 60,125,
- 183,125,205,125,217,126, 7,229,241,245,225,108,129, 34,100,125,
- 193,239,242,231,242,229,225,244,229,114,128, 34,218,237,239,238,
- 239,243,240,225,227,101,128,255, 28,111, 2,125,223,125,252,114,
- 2,125,229,125,242,229,241,245,233,246,225,236,229,238,116,128,
- 34,114,231,242,229,225,244,229,114,128, 34,118,246,229,242,229,
- 241,245,225,108,128, 34,102,243,237,225,236,108,128,254,100,250,
- 104,128, 2,110,230,226,236,239,227,107,128, 37,140,232,239,239,
- 235,242,229,244,242,239,230,236,229,120,128, 2,109,105, 2,126,
- 51,126, 56,242, 97,128, 32,164,247,238,225,242,237,229,238,233,
- 225,110,128, 5,108,106,129, 1,201,126, 75,229,227,249,242,233,
- 236,236,233, 99,128, 4, 89,108,132,246,192,126, 99,126,123,126,
- 134,126,143, 97, 2,126,105,126,112,228,229,246, 97,128, 9, 51,
- 231,245,234,225,242,225,244,105,128, 10,179,233,238,229,226,229,
- 236,239,119,128, 30, 59,236,225,228,229,246, 97,128, 9, 52,246,
- 239,227,225,236,233, 99, 3,126,157,126,167,126,174,226,229,238,
- 231,225,236,105,128, 9,225,228,229,246, 97,128, 9, 97,246,239,
- 247,229,236,243,233,231,110, 2,126,188,126,198,226,229,238,231,
- 225,236,105,128, 9,227,228,229,246, 97,128, 9, 99,109, 3,126,
- 213,126,226,126,237,233,228,228,236,229,244,233,236,228,101,128,
- 2,107,239,238,239,243,240,225,227,101,128,255, 76,243,241,245,
- 225,242,101,128, 51,208,111, 6,127, 4,127, 16,127, 58,127, 69,
- 127, 75,127,117,227,232,245,236,225,244,232,225,105,128, 14, 44,
- 231,233,227,225,108, 3,127, 28,127, 34,127, 53,225,238,100,128,
- 34, 39,238,239,116,129, 0,172,127, 42,242,229,246,229,242,243,
- 229,100,128, 35, 16,239,114,128, 34, 40,236,233,238,231,244,232,
- 225,105,128, 14, 37,238,231,115,128, 1,127,247,236,233,238,101,
- 2,127, 85,127,108, 99, 2,127, 91,127,103,229,238,244,229,242,
- 236,233,238,101,128,254, 78,237, 98,128, 3, 50,228,225,243,232,
- 229,100,128,254, 77,250,229,238,231,101,128, 37,202,240,225,242,
- 229,110,128, 36,167,115, 3,127,141,127,148,127,156,236,225,243,
- 104,128, 1, 66,241,245,225,242,101,128, 33, 19,245,240,229,242,
- 233,239,114,128,246,238,244,243,232,225,228,101,128, 37,145,245,
- 244,232,225,105,128, 14, 38,246,239,227,225,236,233, 99, 3,127,
- 197,127,207,127,214,226,229,238,231,225,236,105,128, 9,140,228,
- 229,246, 97,128, 9, 12,246,239,247,229,236,243,233,231,110, 2,
- 127,228,127,238,226,229,238,231,225,236,105,128, 9,226,228,229,
- 246, 97,128, 9, 98,248,243,241,245,225,242,101,128, 51,211,109,
- 144, 0,109,128, 35,130,144,130,169,130,196,130,221,132, 18,132,
- 40,133, 95,133,125,133,174,134, 25,134, 47,134, 72,134, 81,135,
- 108,135,136, 97, 12,128, 61,128, 71,128,135,128,142,128,167,128,
- 215,130, 51,130, 76,130, 81,130, 95,130,107,130,112,226,229,238,
- 231,225,236,105,128, 9,174, 99, 2,128, 77,128,129,242,239,110,
- 132, 0,175,128, 91,128,102,128,108,128,117,226,229,236,239,247,
- 227,237, 98,128, 3, 49,227,237, 98,128, 3, 4,236,239,247,237,
- 239,100,128, 2,205,237,239,238,239,243,240,225,227,101,128,255,
- 227,245,244,101,128, 30, 63,228,229,246, 97,128, 9, 46,231,117,
- 2,128,149,128,158,234,225,242,225,244,105,128, 10,174,242,237,
- 245,235,232,105,128, 10, 46,104, 2,128,173,128,205,225,240,225,
- 235,104, 2,128,183,128,192,232,229,226,242,229,119,128, 5,164,
- 236,229,230,244,232,229,226,242,229,119,128, 5,164,233,242,225,
- 231,225,238, 97,128, 48,126,105, 5,128,227,129, 40,129,103,129,
- 133,130, 39,227,232,225,244,244,225,247, 97, 3,128,242,129, 17,
- 129, 24,236,239,119, 2,128,250,129, 5,236,229,230,244,244,232,
- 225,105,128,248,149,242,233,231,232,244,244,232,225,105,128,248,
- 148,244,232,225,105,128, 14, 75,245,240,240,229,242,236,229,230,
- 244,244,232,225,105,128,248,147,229,107, 3,129, 49,129, 80,129,
- 87,236,239,119, 2,129, 57,129, 68,236,229,230,244,244,232,225,
- 105,128,248,140,242,233,231,232,244,244,232,225,105,128,248,139,
- 244,232,225,105,128, 14, 72,245,240,240,229,242,236,229,230,244,
- 244,232,225,105,128,248,138,232,225,238,225,235,225,116, 2,129,
- 115,129,126,236,229,230,244,244,232,225,105,128,248,132,244,232,
- 225,105,128, 14, 49,116, 3,129,141,129,169,129,232,225,233,235,
- 232,117, 2,129,151,129,162,236,229,230,244,244,232,225,105,128,
- 248,137,244,232,225,105,128, 14, 71,232,111, 3,129,178,129,209,
- 129,216,236,239,119, 2,129,186,129,197,236,229,230,244,244,232,
- 225,105,128,248,143,242,233,231,232,244,244,232,225,105,128,248,
- 142,244,232,225,105,128, 14, 73,245,240,240,229,242,236,229,230,
- 244,244,232,225,105,128,248,141,242,105, 3,129,241,130, 16,130,
- 23,236,239,119, 2,129,249,130, 4,236,229,230,244,244,232,225,
- 105,128,248,146,242,233,231,232,244,244,232,225,105,128,248,145,
- 244,232,225,105,128, 14, 74,245,240,240,229,242,236,229,230,244,
- 244,232,225,105,128,248,144,249,225,237,239,235,244,232,225,105,
- 128, 14, 70,235,225,244,225,235,225,238, 97,129, 48,222,130, 64,
- 232,225,236,230,247,233,228,244,104,128,255,143,236,101,128, 38,
- 66,238,243,249,239,238,243,241,245,225,242,101,128, 51, 71,241,
- 225,230,232,229,226,242,229,119,128, 5,190,242,115,128, 38, 66,
- 115, 2,130,118,130,136,239,242,225,227,233,242,227,236,229,232,
- 229,226,242,229,119,128, 5,175,241,245,225,242,101,128, 51,131,
- 98, 2,130,150,130,160,239,240,239,237,239,230,111,128, 49, 7,
- 243,241,245,225,242,101,128, 51,212, 99, 2,130,175,130,183,233,
- 242,227,236,101,128, 36,220,245,226,229,228,243,241,245,225,242,
- 101,128, 51,165,228,239,116, 2,130,204,130,213,225,227,227,229,
- 238,116,128, 30, 65,226,229,236,239,119,128, 30, 67,101, 7,130,
- 237,131,108,131,119,131,134,131,159,131,196,131,208,101, 2,130,
- 243,131, 95,109, 4,130,253,131, 6,131, 20,131, 36,225,242,225,
- 226,233, 99,128, 6, 69,230,233,238,225,236,225,242,225,226,233,
- 99,128,254,226,233,238,233,244,233,225,236,225,242,225,226,233,
- 99,128,254,227,237,101, 2,131, 43,131, 56,228,233,225,236,225,
- 242,225,226,233, 99,128,254,228,229,237,105, 2,131, 64,131, 79,
- 238,233,244,233,225,236,225,242,225,226,233, 99,128,252,209,243,
- 239,236,225,244,229,228,225,242,225,226,233, 99,128,252, 72,244,
- 239,242,245,243,241,245,225,242,101,128, 51, 77,232,233,242,225,
- 231,225,238, 97,128, 48,129,233,250,233,229,242,225,243,241,245,
- 225,242,101,128, 51,126,235,225,244,225,235,225,238, 97,129, 48,
- 225,131,147,232,225,236,230,247,233,228,244,104,128,255,146,109,
- 130, 5,222,131,167,131,187,228,225,231,229,243,104,129,251, 62,
- 131,178,232,229,226,242,229,119,128,251, 62,232,229,226,242,229,
- 119,128, 5,222,238,225,242,237,229,238,233,225,110,128, 5,116,
- 242,235,232, 97, 3,131,219,131,228,132, 5,232,229,226,242,229,
- 119,128, 5,165,235,229,230,245,236, 97, 2,131,239,131,248,232,
- 229,226,242,229,119,128, 5,166,236,229,230,244,232,229,226,242,
- 229,119,128, 5,166,236,229,230,244,232,229,226,242,229,119,128,
- 5,165,104, 2,132, 24,132, 30,239,239,107,128, 2,113,250,243,
- 241,245,225,242,101,128, 51,146,105, 6,132, 54,132, 91,132,228,
- 132,239,133, 8,133, 65,228,100, 2,132, 61,132, 86,236,229,228,
- 239,244,235,225,244,225,235,225,238,225,232,225,236,230,247,233,
- 228,244,104,128,255,101,239,116,128, 0,183,229,245,109, 5,132,
- 105,132,140,132,155,132,164,132,215, 97, 2,132,111,132,126,227,
- 233,242,227,236,229,235,239,242,229,225,110,128, 50,114,240,225,
- 242,229,238,235,239,242,229,225,110,128, 50, 18,227,233,242,227,
- 236,229,235,239,242,229,225,110,128, 50,100,235,239,242,229,225,
- 110,128, 49, 65,112, 2,132,170,132,202, 97, 2,132,176,132,190,
- 238,243,233,239,243,235,239,242,229,225,110,128, 49,112,242,229,
- 238,235,239,242,229,225,110,128, 50, 4,233,229,245,240,235,239,
- 242,229,225,110,128, 49,110,243,233,239,243,235,239,242,229,225,
- 110,128, 49,111,232,233,242,225,231,225,238, 97,128, 48,127,235,
- 225,244,225,235,225,238, 97,129, 48,223,132,252,232,225,236,230,
- 247,233,228,244,104,128,255,144,238,117, 2,133, 15,133, 60,115,
- 132, 34, 18,133, 27,133, 38,133, 47,133, 53,226,229,236,239,247,
- 227,237, 98,128, 3, 32,227,233,242,227,236,101,128, 34,150,237,
- 239,100,128, 2,215,240,236,245,115,128, 34, 19,244,101,128, 32,
- 50,242,105, 2,133, 72,133, 86,226,225,225,242,245,243,241,245,
- 225,242,101,128, 51, 74,243,241,245,225,242,101,128, 51, 73,108,
- 2,133,101,133,116,239,238,231,236,229,231,244,245,242,238,229,
- 100,128, 2,112,243,241,245,225,242,101,128, 51,150,109, 3,133,
- 133,133,147,133,158,227,245,226,229,228,243,241,245,225,242,101,
- 128, 51,163,239,238,239,243,240,225,227,101,128,255, 77,243,241,
- 245,225,242,229,228,243,241,245,225,242,101,128, 51,159,111, 5,
- 133,186,133,212,133,237,133,247,134, 0,104, 2,133,192,133,202,
- 233,242,225,231,225,238, 97,128, 48,130,237,243,241,245,225,242,
- 101,128, 51,193,235,225,244,225,235,225,238, 97,129, 48,226,133,
- 225,232,225,236,230,247,233,228,244,104,128,255,147,236,243,241,
- 245,225,242,101,128, 51,214,237,225,244,232,225,105,128, 14, 33,
- 246,229,242,243,243,241,245,225,242,101,129, 51,167,134, 15,228,
- 243,241,245,225,242,101,128, 51,168,240, 97, 2,134, 32,134, 38,
- 242,229,110,128, 36,168,243,241,245,225,242,101,128, 51,171,115,
- 2,134, 53,134, 62,243,241,245,225,242,101,128, 51,179,245,240,
- 229,242,233,239,114,128,246,239,244,245,242,238,229,100,128, 2,
- 111,117,141, 0,181,134,111,134,115,134,125,134,149,134,159,134,
- 181,134,192,134,217,134,240,134,250,135, 24,135, 88,135, 98, 49,
- 128, 0,181,225,243,241,245,225,242,101,128, 51,130,227,104, 2,
- 134,132,134,142,231,242,229,225,244,229,114,128, 34,107,236,229,
- 243,115,128, 34,106,230,243,241,245,225,242,101,128, 51,140,103,
- 2,134,165,134,172,242,229,229,107,128, 3,188,243,241,245,225,
- 242,101,128, 51,141,232,233,242,225,231,225,238, 97,128, 48,128,
- 235,225,244,225,235,225,238, 97,129, 48,224,134,205,232,225,236,
- 230,247,233,228,244,104,128,255,145,108, 2,134,223,134,232,243,
- 241,245,225,242,101,128, 51,149,244,233,240,236,121,128, 0,215,
- 237,243,241,245,225,242,101,128, 51,155,238,225,104, 2,135, 2,
- 135, 11,232,229,226,242,229,119,128, 5,163,236,229,230,244,232,
- 229,226,242,229,119,128, 5,163,115, 2,135, 30,135, 79,233, 99,
- 3,135, 39,135, 56,135, 67,225,236,238,239,244,101,129, 38,106,
- 135, 50,228,226,108,128, 38,107,230,236,225,244,243,233,231,110,
- 128, 38,109,243,232,225,242,240,243,233,231,110,128, 38,111,243,
- 241,245,225,242,101,128, 51,178,246,243,241,245,225,242,101,128,
- 51,182,247,243,241,245,225,242,101,128, 51,188,118, 2,135,114,
- 135,127,237,229,231,225,243,241,245,225,242,101,128, 51,185,243,
- 241,245,225,242,101,128, 51,183,119, 2,135,142,135,155,237,229,
- 231,225,243,241,245,225,242,101,128, 51,191,243,241,245,225,242,
- 101,128, 51,189,110,150, 0,110,135,212,136, 90,136,114,136,180,
- 136,205,137, 7,137, 17,137, 84,137,127,139,161,139,179,139,204,
- 139,235,140, 5,140, 70,142, 52,142, 60,142, 85,142, 93,143, 61,
- 143, 71,143, 81, 97, 8,135,230,135,250,136, 1,136, 8,136, 33,
- 136, 44,136, 69,136, 81, 98, 2,135,236,135,245,229,238,231,225,
- 236,105,128, 9,168,236, 97,128, 34, 7,227,245,244,101,128, 1,
- 68,228,229,246, 97,128, 9, 40,231,117, 2,136, 15,136, 24,234,
- 225,242,225,244,105,128, 10,168,242,237,245,235,232,105,128, 10,
- 40,232,233,242,225,231,225,238, 97,128, 48,106,235,225,244,225,
- 235,225,238, 97,129, 48,202,136, 57,232,225,236,230,247,233,228,
- 244,104,128,255,133,240,239,243,244,242,239,240,232,101,128, 1,
- 73,243,241,245,225,242,101,128, 51,129, 98, 2,136, 96,136,106,
- 239,240,239,237,239,230,111,128, 49, 11,243,240,225,227,101,128,
- 0,160, 99, 4,136,124,136,131,136,140,136,167,225,242,239,110,
- 128, 1, 72,229,228,233,236,236, 97,128, 1, 70,233,242, 99, 2,
- 136,148,136,153,236,101,128, 36,221,245,237,230,236,229,248,226,
- 229,236,239,119,128, 30, 75,239,237,237,225,225,227,227,229,238,
- 116,128, 1, 70,228,239,116, 2,136,188,136,197,225,227,227,229,
- 238,116,128, 30, 69,226,229,236,239,119,128, 30, 71,101, 3,136,
- 213,136,224,136,249,232,233,242,225,231,225,238, 97,128, 48,109,
- 235,225,244,225,235,225,238, 97,129, 48,205,136,237,232,225,236,
- 230,247,233,228,244,104,128,255,136,247,243,232,229,241,229,236,
- 243,233,231,110,128, 32,170,230,243,241,245,225,242,101,128, 51,
- 139,103, 2,137, 23,137, 73, 97, 3,137, 31,137, 41,137, 48,226,
- 229,238,231,225,236,105,128, 9,153,228,229,246, 97,128, 9, 25,
- 231,117, 2,137, 55,137, 64,234,225,242,225,244,105,128, 10,153,
- 242,237,245,235,232,105,128, 10, 25,239,238,231,245,244,232,225,
- 105,128, 14, 7,104, 2,137, 90,137,100,233,242,225,231,225,238,
- 97,128, 48,147,239,239,107, 2,137,108,137,115,236,229,230,116,
- 128, 2,114,242,229,244,242,239,230,236,229,120,128, 2,115,105,
- 4,137,137,138, 50,138, 61,138,119,229,245,110, 7,137,155,137,
- 190,137,222,137,236,137,245,138, 22,138, 35, 97, 2,137,161,137,
- 176,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,111,
- 240,225,242,229,238,235,239,242,229,225,110,128, 50, 15,227,105,
- 2,137,197,137,209,229,245,227,235,239,242,229,225,110,128, 49,
- 53,242,227,236,229,235,239,242,229,225,110,128, 50, 97,232,233,
- 229,245,232,235,239,242,229,225,110,128, 49, 54,235,239,242,229,
- 225,110,128, 49, 52,240, 97, 2,137,252,138, 10,238,243,233,239,
- 243,235,239,242,229,225,110,128, 49,104,242,229,238,235,239,242,
- 229,225,110,128, 50, 1,243,233,239,243,235,239,242,229,225,110,
- 128, 49,103,244,233,235,229,245,244,235,239,242,229,225,110,128,
- 49,102,232,233,242,225,231,225,238, 97,128, 48,107,107, 2,138,
- 67,138, 91,225,244,225,235,225,238, 97,129, 48,203,138, 79,232,
- 225,236,230,247,233,228,244,104,128,255,134,232,225,232,233,116,
- 2,138,101,138,112,236,229,230,244,244,232,225,105,128,248,153,
- 244,232,225,105,128, 14, 77,238,101,141, 0, 57,138,150,138,159,
- 138,169,138,199,138,206,138,231,139, 2,139, 36,139, 48,139, 59,
- 139, 92,139,100,139,111,225,242,225,226,233, 99,128, 6,105,226,
- 229,238,231,225,236,105,128, 9,239,227,233,242,227,236,101,129,
- 36,104,138,180,233,238,246,229,242,243,229,243,225,238,243,243,
- 229,242,233,102,128, 39,146,228,229,246, 97,128, 9,111,231,117,
- 2,138,213,138,222,234,225,242,225,244,105,128, 10,239,242,237,
- 245,235,232,105,128, 10,111,232, 97, 2,138,238,138,249,227,235,
- 225,242,225,226,233, 99,128, 6,105,238,231,250,232,239,117,128,
- 48, 41,105, 2,139, 8,139, 26,228,229,239,231,242,225,240,232,
- 233,227,240,225,242,229,110,128, 50, 40,238,230,229,242,233,239,
- 114,128, 32,137,237,239,238,239,243,240,225,227,101,128,255, 25,
- 239,236,228,243,244,249,236,101,128,247, 57,112, 2,139, 65,139,
- 72,225,242,229,110,128, 36,124,229,114, 2,139, 79,139, 85,233,
- 239,100,128, 36,144,243,233,225,110,128, 6,249,242,239,237,225,
- 110,128, 33,120,243,245,240,229,242,233,239,114,128, 32,121,116,
- 2,139,117,139,155,229,229,110, 2,139,125,139,134,227,233,242,
- 227,236,101,128, 36,114,112, 2,139,140,139,147,225,242,229,110,
- 128, 36,134,229,242,233,239,100,128, 36,154,232,225,105,128, 14,
- 89,106,129, 1,204,139,167,229,227,249,242,233,236,236,233, 99,
- 128, 4, 90,235,225,244,225,235,225,238, 97,129, 48,243,139,192,
- 232,225,236,230,247,233,228,244,104,128,255,157,108, 2,139,210,
- 139,224,229,231,242,233,231,232,244,236,239,238,103,128, 1,158,
- 233,238,229,226,229,236,239,119,128, 30, 73,109, 2,139,241,139,
- 252,239,238,239,243,240,225,227,101,128,255, 78,243,241,245,225,
- 242,101,128, 51,154,110, 2,140, 11,140, 61, 97, 3,140, 19,140,
- 29,140, 36,226,229,238,231,225,236,105,128, 9,163,228,229,246,
- 97,128, 9, 35,231,117, 2,140, 43,140, 52,234,225,242,225,244,
- 105,128, 10,163,242,237,245,235,232,105,128, 10, 35,238,225,228,
- 229,246, 97,128, 9, 41,111, 6,140, 84,140, 95,140,120,140,161,
- 141,113,142, 40,232,233,242,225,231,225,238, 97,128, 48,110,235,
- 225,244,225,235,225,238, 97,129, 48,206,140,108,232,225,236,230,
- 247,233,228,244,104,128,255,137,110, 3,140,128,140,144,140,153,
- 226,242,229,225,235,233,238,231,243,240,225,227,101,128, 0,160,
- 229,238,244,232,225,105,128, 14, 19,245,244,232,225,105,128, 14,
- 25,239,110, 7,140,178,140,187,140,201,140,235,140,251,141, 36,
- 141, 95,225,242,225,226,233, 99,128, 6, 70,230,233,238,225,236,
- 225,242,225,226,233, 99,128,254,230,231,232,245,238,238, 97, 2,
- 140,212,140,221,225,242,225,226,233, 99,128, 6,186,230,233,238,
- 225,236,225,242,225,226,233, 99,128,251,159,233,238,233,244,233,
- 225,236,225,242,225,226,233, 99,128,254,231,234,229,229,237,105,
- 2,141, 5,141, 20,238,233,244,233,225,236,225,242,225,226,233,
- 99,128,252,210,243,239,236,225,244,229,228,225,242,225,226,233,
- 99,128,252, 75,237,101, 2,141, 43,141, 56,228,233,225,236,225,
- 242,225,226,233, 99,128,254,232,229,237,105, 2,141, 64,141, 79,
- 238,233,244,233,225,236,225,242,225,226,233, 99,128,252,213,243,
- 239,236,225,244,229,228,225,242,225,226,233, 99,128,252, 78,238,
- 239,239,238,230,233,238,225,236,225,242,225,226,233, 99,128,252,
- 141,116, 7,141,129,141,140,141,169,141,204,141,216,141,236,142,
- 6,227,239,238,244,225,233,238,115,128, 34, 12,101, 2,141,146,
- 141,162,236,229,237,229,238,116,129, 34, 9,141,157,239,102,128,
- 34, 9,241,245,225,108,128, 34, 96,231,242,229,225,244,229,114,
- 129, 34,111,141,181,238,239,114, 2,141,189,141,197,229,241,245,
- 225,108,128, 34,113,236,229,243,115,128, 34,121,233,228,229,238,
- 244,233,227,225,108,128, 34, 98,236,229,243,115,129, 34,110,141,
- 225,238,239,242,229,241,245,225,108,128, 34,112,112, 2,141,242,
- 141,252,225,242,225,236,236,229,108,128, 34, 38,242,229,227,229,
- 228,229,115,128, 34,128,243,117, 3,142, 15,142, 22,142, 31,226,
- 243,229,116,128, 34,132,227,227,229,229,228,115,128, 34,129,240,
- 229,242,243,229,116,128, 34,133,247,225,242,237,229,238,233,225,
- 110,128, 5,118,240,225,242,229,110,128, 36,169,115, 2,142, 66,
- 142, 75,243,241,245,225,242,101,128, 51,177,245,240,229,242,233,
- 239,114,128, 32,127,244,233,236,228,101,128, 0,241,117,132, 3,
- 189,142,105,142,116,142,197,143, 24,232,233,242,225,231,225,238,
- 97,128, 48,108,107, 2,142,122,142,146,225,244,225,235,225,238,
- 97,129, 48,204,142,134,232,225,236,230,247,233,228,244,104,128,
- 255,135,244, 97, 3,142,155,142,165,142,172,226,229,238,231,225,
- 236,105,128, 9,188,228,229,246, 97,128, 9, 60,231,117, 2,142,
- 179,142,188,234,225,242,225,244,105,128, 10,188,242,237,245,235,
- 232,105,128, 10, 60,109, 2,142,203,142,237,226,229,242,243,233,
- 231,110,130, 0, 35,142,217,142,229,237,239,238,239,243,240,225,
- 227,101,128,255, 3,243,237,225,236,108,128,254, 95,229,114, 2,
- 142,244,143, 20,225,236,243,233,231,110, 2,142,255,143, 7,231,
- 242,229,229,107,128, 3,116,236,239,247,229,242,231,242,229,229,
- 107,128, 3,117,111,128, 33, 22,110,130, 5,224,143, 32,143, 52,
- 228,225,231,229,243,104,129,251, 64,143, 43,232,229,226,242,229,
- 119,128,251, 64,232,229,226,242,229,119,128, 5,224,246,243,241,
- 245,225,242,101,128, 51,181,247,243,241,245,225,242,101,128, 51,
- 187,249, 97, 3,143, 90,143,100,143,107,226,229,238,231,225,236,
- 105,128, 9,158,228,229,246, 97,128, 9, 30,231,117, 2,143,114,
- 143,123,234,225,242,225,244,105,128, 10,158,242,237,245,235,232,
- 105,128, 10, 30,111,147, 0,111,143,174,143,196,144, 18,144,188,
- 145, 4,145, 19,145, 59,145,182,145,203,145,241,145,252,146,174,
- 148, 8,148, 72,148,105,148,151,149, 24,149, 71,149, 83, 97, 2,
- 143,180,143,187,227,245,244,101,128, 0,243,238,231,244,232,225,
- 105,128, 14, 45, 98, 4,143,206,143,248,144, 1,144, 11,225,242,
- 242,229,100,130, 2,117,143,218,143,229,227,249,242,233,236,236,
- 233, 99,128, 4,233,228,233,229,242,229,243,233,243,227,249,242,
- 233,236,236,233, 99,128, 4,235,229,238,231,225,236,105,128, 9,
- 147,239,240,239,237,239,230,111,128, 49, 27,242,229,246,101,128,
- 1, 79, 99, 3,144, 26,144, 99,144,178, 97, 2,144, 32,144, 93,
- 238,228,242, 97, 3,144, 43,144, 50,144, 61,228,229,246, 97,128,
- 9, 17,231,245,234,225,242,225,244,105,128, 10,145,246,239,247,
- 229,236,243,233,231,110, 2,144, 75,144, 82,228,229,246, 97,128,
- 9, 73,231,245,234,225,242,225,244,105,128, 10,201,242,239,110,
- 128, 1,210,233,242, 99, 2,144,107,144,112,236,101,128, 36,222,
- 245,237,230,236,229,120,133, 0,244,144,131,144,139,144,150,144,
- 158,144,170,225,227,245,244,101,128, 30,209,228,239,244,226,229,
- 236,239,119,128, 30,217,231,242,225,246,101,128, 30,211,232,239,
- 239,235,225,226,239,246,101,128, 30,213,244,233,236,228,101,128,
- 30,215,249,242,233,236,236,233, 99,128, 4, 62,100, 4,144,198,
- 144,221,144,227,144,250,226,108, 2,144,205,144,213,225,227,245,
- 244,101,128, 1, 81,231,242,225,246,101,128, 2, 13,229,246, 97,
- 128, 9, 19,233,229,242,229,243,233,115,129, 0,246,144,239,227,
- 249,242,233,236,236,233, 99,128, 4,231,239,244,226,229,236,239,
- 119,128, 30,205,101,129, 1, 83,145, 10,235,239,242,229,225,110,
- 128, 49, 90,103, 3,145, 27,145, 42,145, 49,239,238,229,107,129,
- 2,219,145, 36,227,237, 98,128, 3, 40,242,225,246,101,128, 0,
- 242,245,234,225,242,225,244,105,128, 10,147,104, 4,145, 69,145,
- 80,145, 90,145,168,225,242,237,229,238,233,225,110,128, 5,133,
- 233,242,225,231,225,238, 97,128, 48, 74,111, 2,145, 96,145,106,
- 239,235,225,226,239,246,101,128, 30,207,242,110,133, 1,161,145,
- 121,145,129,145,140,145,148,145,160,225,227,245,244,101,128, 30,
- 219,228,239,244,226,229,236,239,119,128, 30,227,231,242,225,246,
- 101,128, 30,221,232,239,239,235,225,226,239,246,101,128, 30,223,
- 244,233,236,228,101,128, 30,225,245,238,231,225,242,245,237,236,
- 225,245,116,128, 1, 81,105,129, 1,163,145,188,238,246,229,242,
- 244,229,228,226,242,229,246,101,128, 2, 15,107, 2,145,209,145,
- 233,225,244,225,235,225,238, 97,129, 48,170,145,221,232,225,236,
- 230,247,233,228,244,104,128,255,117,239,242,229,225,110,128, 49,
- 87,236,229,232,229,226,242,229,119,128, 5,171,109, 6,146, 10,
- 146, 38,146, 45,146,134,146,145,146,163,225,227,242,239,110,130,
- 1, 77,146, 22,146, 30,225,227,245,244,101,128, 30, 83,231,242,
- 225,246,101,128, 30, 81,228,229,246, 97,128, 9, 80,229,231, 97,
- 133, 3,201,146, 61,146, 65,146, 76,146, 90,146,106, 49,128, 3,
- 214,227,249,242,233,236,236,233, 99,128, 4, 97,236,225,244,233,
- 238,227,236,239,243,229,100,128, 2,119,242,239,245,238,228,227,
- 249,242,233,236,236,233, 99,128, 4,123,116, 2,146,112,146,127,
- 233,244,236,239,227,249,242,233,236,236,233, 99,128, 4,125,239,
- 238,239,115,128, 3,206,231,245,234,225,242,225,244,105,128, 10,
- 208,233,227,242,239,110,129, 3,191,146,155,244,239,238,239,115,
- 128, 3,204,239,238,239,243,240,225,227,101,128,255, 79,238,101,
- 145, 0, 49,146,213,146,222,146,232,147, 6,147, 31,147, 40,147,
- 49,147, 74,147,108,147,142,147,154,147,173,147,184,147,217,147,
- 227,147,235,147,246,225,242,225,226,233, 99,128, 6, 97,226,229,
- 238,231,225,236,105,128, 9,231,227,233,242,227,236,101,129, 36,
- 96,146,243,233,238,246,229,242,243,229,243,225,238,243,243,229,
- 242,233,102,128, 39,138,100, 2,147, 12,147, 18,229,246, 97,128,
- 9,103,239,244,229,238,236,229,225,228,229,114,128, 32, 36,229,
- 233,231,232,244,104,128, 33, 91,230,233,244,244,229,100,128,246,
- 220,231,117, 2,147, 56,147, 65,234,225,242,225,244,105,128, 10,
- 231,242,237,245,235,232,105,128, 10,103,232, 97, 3,147, 83,147,
- 94,147, 99,227,235,225,242,225,226,233, 99,128, 6, 97,236,102,
- 128, 0,189,238,231,250,232,239,117,128, 48, 33,105, 2,147,114,
- 147,132,228,229,239,231,242,225,240,232,233,227,240,225,242,229,
- 110,128, 50, 32,238,230,229,242,233,239,114,128, 32,129,237,239,
- 238,239,243,240,225,227,101,128,255, 17,238,245,237,229,242,225,
- 244,239,242,226,229,238,231,225,236,105,128, 9,244,239,236,228,
- 243,244,249,236,101,128,247, 49,112, 2,147,190,147,197,225,242,
- 229,110,128, 36,116,229,114, 2,147,204,147,210,233,239,100,128,
- 36,136,243,233,225,110,128, 6,241,241,245,225,242,244,229,114,
- 128, 0,188,242,239,237,225,110,128, 33,112,243,245,240,229,242,
- 233,239,114,128, 0,185,244,104, 2,147,253,148, 2,225,105,128,
- 14, 81,233,242,100,128, 33, 83,111, 3,148, 16,148, 50,148, 66,
- 103, 2,148, 22,148, 40,239,238,229,107,129, 1,235,148, 31,237,
- 225,227,242,239,110,128, 1,237,245,242,237,245,235,232,105,128,
- 10, 19,237,225,244,242,225,231,245,242,237,245,235,232,105,128,
- 10, 75,240,229,110,128, 2, 84,112, 3,148, 80,148, 87,148, 98,
- 225,242,229,110,128, 36,170,229,238,226,245,236,236,229,116,128,
- 37,230,244,233,239,110,128, 35, 37,114, 2,148,111,148,140,100,
- 2,148,117,148,128,230,229,237,233,238,233,238,101,128, 0,170,
- 237,225,243,227,245,236,233,238,101,128, 0,186,244,232,239,231,
- 239,238,225,108,128, 34, 31,115, 5,148,163,148,195,148,212,149,
- 1,149, 14,232,239,242,116, 2,148,172,148,179,228,229,246, 97,
- 128, 9, 18,246,239,247,229,236,243,233,231,238,228,229,246, 97,
- 128, 9, 74,236,225,243,104,129, 0,248,148,204,225,227,245,244,
- 101,128, 1,255,237,225,236,108, 2,148,221,148,232,232,233,242,
- 225,231,225,238, 97,128, 48, 73,235,225,244,225,235,225,238, 97,
- 129, 48,169,148,245,232,225,236,230,247,233,228,244,104,128,255,
- 107,244,242,239,235,229,225,227,245,244,101,128, 1,255,245,240,
- 229,242,233,239,114,128,246,240,116, 2,149, 30,149, 41,227,249,
- 242,233,236,236,233, 99,128, 4,127,233,236,228,101,130, 0,245,
- 149, 52,149, 60,225,227,245,244,101,128, 30, 77,228,233,229,242,
- 229,243,233,115,128, 30, 79,245,226,239,240,239,237,239,230,111,
- 128, 49, 33,118, 2,149, 89,149,170,229,114, 2,149, 96,149,162,
- 236,233,238,101,131, 32, 62,149,109,149,132,149,155, 99, 2,149,
- 115,149,127,229,238,244,229,242,236,233,238,101,128,254, 74,237,
- 98,128, 3, 5,100, 2,149,138,149,146,225,243,232,229,100,128,
- 254, 73,226,236,247,225,246,121,128,254, 76,247,225,246,121,128,
- 254, 75,243,227,239,242,101,128, 0,175,239,247,229,236,243,233,
- 231,110, 3,149,185,149,195,149,202,226,229,238,231,225,236,105,
- 128, 9,203,228,229,246, 97,128, 9, 75,231,245,234,225,242,225,
- 244,105,128, 10,203,112,145, 0,112,149,251,152,123,152,134,152,
- 143,152,155,154, 80,154, 90,155, 82,156,101,156,191,156,217,157,
- 92,157,100,158, 2,158, 60,158, 88,158, 98, 97, 14,150, 25,150,
- 57,150, 67,150, 74,150, 81,150,129,150,140,150,154,150,165,150,
- 212,150,226,151,238,152, 21,152,111, 97, 2,150, 31,150, 43,237,
- 240,243,243,241,245,225,242,101,128, 51,128,243,229,238,244,239,
- 243,241,245,225,242,101,128, 51, 43,226,229,238,231,225,236,105,
- 128, 9,170,227,245,244,101,128, 30, 85,228,229,246, 97,128, 9,
- 42,103, 2,150, 87,150,105,101, 2,150, 93,150,100,228,239,247,
- 110,128, 33,223,245,112,128, 33,222,117, 2,150,111,150,120,234,
- 225,242,225,244,105,128, 10,170,242,237,245,235,232,105,128, 10,
- 42,232,233,242,225,231,225,238, 97,128, 48,113,233,249,225,238,
- 238,239,233,244,232,225,105,128, 14, 47,235,225,244,225,235,225,
- 238, 97,128, 48,209,108, 2,150,171,150,196,225,244,225,236,233,
- 250,225,244,233,239,238,227,249,242,233,236,236,233,227,227,237,
- 98,128, 4,132,239,227,232,235,225,227,249,242,233,236,236,233,
- 99,128, 4,192,238,243,233,239,243,235,239,242,229,225,110,128,
- 49,127,114, 3,150,234,150,255,151,227, 97, 2,150,240,150,248,
- 231,242,225,240,104,128, 0,182,236,236,229,108,128, 34, 37,229,
- 110, 2,151, 6,151,116,236,229,230,116,136, 0, 40,151, 29,151,
- 44,151, 49,151, 54,151, 65,151, 77,151,100,151,105,225,236,244,
- 239,238,229,225,242,225,226,233, 99,128,253, 62,226,116,128,248,
- 237,229,120,128,248,236,233,238,230,229,242,233,239,114,128, 32,
- 141,237,239,238,239,243,240,225,227,101,128,255, 8,115, 2,151,
- 83,151, 90,237,225,236,108,128,254, 89,245,240,229,242,233,239,
- 114,128, 32,125,244,112,128,248,235,246,229,242,244,233,227,225,
- 108,128,254, 53,242,233,231,232,116,136, 0, 41,151,140,151,155,
- 151,160,151,165,151,176,151,188,151,211,151,216,225,236,244,239,
- 238,229,225,242,225,226,233, 99,128,253, 63,226,116,128,248,248,
- 229,120,128,248,247,233,238,230,229,242,233,239,114,128, 32,142,
- 237,239,238,239,243,240,225,227,101,128,255, 9,115, 2,151,194,
- 151,201,237,225,236,108,128,254, 90,245,240,229,242,233,239,114,
- 128, 32,126,244,112,128,248,246,246,229,242,244,233,227,225,108,
- 128,254, 54,244,233,225,236,228,233,230,102,128, 34, 2,115, 3,
- 151,246,152, 1,152, 13,229,241,232,229,226,242,229,119,128, 5,
- 192,232,244,225,232,229,226,242,229,119,128, 5,153,241,245,225,
- 242,101,128, 51,169,244,225,104,134, 5,183,152, 39,152, 53,152,
- 58,152, 67,152, 82,152, 98, 49, 2,152, 45,152, 49, 49,128, 5,
- 183,100,128, 5,183,178, 97,128, 5,183,232,229,226,242,229,119,
- 128, 5,183,238,225,242,242,239,247,232,229,226,242,229,119,128,
- 5,183,241,245,225,242,244,229,242,232,229,226,242,229,119,128,
- 5,183,247,233,228,229,232,229,226,242,229,119,128, 5,183,250,
- 229,242,232,229,226,242,229,119,128, 5,161,226,239,240,239,237,
- 239,230,111,128, 49, 6,227,233,242,227,236,101,128, 36,223,228,
- 239,244,225,227,227,229,238,116,128, 30, 87,101,137, 5,228,152,
- 177,152,188,152,208,152,220,152,240,153, 86,153, 97,153,118,154,
- 73,227,249,242,233,236,236,233, 99,128, 4, 63,228,225,231,229,
- 243,104,129,251, 68,152,199,232,229,226,242,229,119,128,251, 68,
- 229,250,233,243,241,245,225,242,101,128, 51, 59,230,233,238,225,
- 236,228,225,231,229,243,232,232,229,226,242,229,119,128,251, 67,
- 104, 5,152,252,153, 19,153, 27,153, 41,153, 71,225,114, 2,153,
- 3,153, 10,225,226,233, 99,128, 6,126,237,229,238,233,225,110,
- 128, 5,122,229,226,242,229,119,128, 5,228,230,233,238,225,236,
- 225,242,225,226,233, 99,128,251, 87,105, 2,153, 47,153, 62,238,
- 233,244,233,225,236,225,242,225,226,233, 99,128,251, 88,242,225,
- 231,225,238, 97,128, 48,122,237,229,228,233,225,236,225,242,225,
- 226,233, 99,128,251, 89,235,225,244,225,235,225,238, 97,128, 48,
- 218,237,233,228,228,236,229,232,239,239,235,227,249,242,233,236,
- 236,233, 99,128, 4,167,114, 5,153,130,153,142,153,184,154, 49,
- 154, 62,225,230,229,232,229,226,242,229,119,128,251, 78,227,229,
- 238,116,131, 0, 37,153,155,153,164,153,176,225,242,225,226,233,
- 99,128, 6,106,237,239,238,239,243,240,225,227,101,128,255, 5,
- 243,237,225,236,108,128,254,106,105, 2,153,190,154, 31,239,100,
- 134, 0, 46,153,207,153,218,153,229,153,241,153,252,154, 8,225,
- 242,237,229,238,233,225,110,128, 5,137,227,229,238,244,229,242,
- 229,100,128, 0,183,232,225,236,230,247,233,228,244,104,128,255,
- 97,233,238,230,229,242,233,239,114,128,246,231,237,239,238,239,
- 243,240,225,227,101,128,255, 14,115, 2,154, 14,154, 21,237,225,
- 236,108,128,254, 82,245,240,229,242,233,239,114,128,246,232,243,
- 240,239,237,229,238,233,231,242,229,229,235,227,237, 98,128, 3,
- 66,240,229,238,228,233,227,245,236,225,114,128, 34,165,244,232,
- 239,245,243,225,238,100,128, 32, 48,243,229,244, 97,128, 32,167,
- 230,243,241,245,225,242,101,128, 51,138,104, 3,154, 98,154,148,
- 155, 29, 97, 3,154,106,154,116,154,123,226,229,238,231,225,236,
- 105,128, 9,171,228,229,246, 97,128, 9, 43,231,117, 2,154,130,
- 154,139,234,225,242,225,244,105,128, 10,171,242,237,245,235,232,
- 105,128, 10, 43,105,133, 3,198,154,162,154,166,154,252,155, 4,
- 155, 15, 49,128, 3,213,229,245,240,104, 4,154,179,154,214,154,
- 229,154,238, 97, 2,154,185,154,200,227,233,242,227,236,229,235,
- 239,242,229,225,110,128, 50,122,240,225,242,229,238,235,239,242,
- 229,225,110,128, 50, 26,227,233,242,227,236,229,235,239,242,229,
- 225,110,128, 50,108,235,239,242,229,225,110,128, 49, 77,240,225,
- 242,229,238,235,239,242,229,225,110,128, 50, 12,236,225,244,233,
- 110,128, 2,120,238,244,232,245,244,232,225,105,128, 14, 58,243,
- 249,237,226,239,236,231,242,229,229,107,128, 3,213,111, 3,155,
- 37,155, 42,155, 68,239,107,128, 1,165,240,104, 2,155, 49,155,
- 58,225,238,244,232,225,105,128, 14, 30,245,238,231,244,232,225,
- 105,128, 14, 28,243,225,237,240,232,225,239,244,232,225,105,128,
- 14, 32,105,133, 3,192,155, 96,156, 52,156, 63,156, 74,156, 88,
- 229,245,112, 6,155,112,155,147,155,179,155,207,155,221,156, 17,
- 97, 2,155,118,155,133,227,233,242,227,236,229,235,239,242,229,
- 225,110,128, 50,115,240,225,242,229,238,235,239,242,229,225,110,
- 128, 50, 19,227,105, 2,155,154,155,166,229,245,227,235,239,242,
- 229,225,110,128, 49,118,242,227,236,229,235,239,242,229,225,110,
- 128, 50,101,107, 2,155,185,155,199,233,249,229,239,235,235,239,
- 242,229,225,110,128, 49,114,239,242,229,225,110,128, 49, 66,240,
- 225,242,229,238,235,239,242,229,225,110,128, 50, 5,243,233,239,
- 115, 2,155,230,156, 2,107, 2,155,236,155,250,233,249,229,239,
- 235,235,239,242,229,225,110,128, 49,116,239,242,229,225,110,128,
- 49, 68,244,233,235,229,245,244,235,239,242,229,225,110,128, 49,
- 117,116, 2,156, 23,156, 38,232,233,229,245,244,232,235,239,242,
- 229,225,110,128, 49,119,233,235,229,245,244,235,239,242,229,225,
- 110,128, 49,115,232,233,242,225,231,225,238, 97,128, 48,116,235,
- 225,244,225,235,225,238, 97,128, 48,212,243,249,237,226,239,236,
- 231,242,229,229,107,128, 3,214,247,242,225,242,237,229,238,233,
- 225,110,128, 5,131,236,245,115,132, 0, 43,156,115,156,126,156,
- 135,156,168,226,229,236,239,247,227,237, 98,128, 3, 31,227,233,
- 242,227,236,101,128, 34,149,109, 2,156,141,156,148,233,238,245,
- 115,128, 0,177,111, 2,156,154,156,158,100,128, 2,214,238,239,
- 243,240,225,227,101,128,255, 11,115, 2,156,174,156,181,237,225,
- 236,108,128,254, 98,245,240,229,242,233,239,114,128, 32,122,109,
- 2,156,197,156,208,239,238,239,243,240,225,227,101,128,255, 80,
- 243,241,245,225,242,101,128, 51,216,111, 5,156,229,156,240,157,
- 51,157, 62,157, 72,232,233,242,225,231,225,238, 97,128, 48,125,
- 233,238,244,233,238,231,233,238,228,229,120, 4,157, 4,157, 16,
- 157, 28,157, 41,228,239,247,238,247,232,233,244,101,128, 38, 31,
- 236,229,230,244,247,232,233,244,101,128, 38, 28,242,233,231,232,
- 244,247,232,233,244,101,128, 38, 30,245,240,247,232,233,244,101,
- 128, 38, 29,235,225,244,225,235,225,238, 97,128, 48,221,240,236,
- 225,244,232,225,105,128, 14, 27,243,244,225,236,237,225,242,107,
- 129, 48, 18,157, 85,230,225,227,101,128, 48, 32,240,225,242,229,
- 110,128, 36,171,114, 3,157,108,157,134,157,159,101, 2,157,114,
- 157,122,227,229,228,229,115,128, 34,122,243,227,242,233,240,244,
- 233,239,110,128, 33, 30,233,237,101, 2,157,142,157,148,237,239,
- 100,128, 2,185,242,229,246,229,242,243,229,100,128, 32, 53,111,
- 4,157,169,157,176,157,186,157,199,228,245,227,116,128, 34, 15,
- 234,229,227,244,233,246,101,128, 35, 5,236,239,238,231,229,228,
- 235,225,238, 97,128, 48,252,112, 2,157,205,157,242,101, 2,157,
- 211,157,218,236,236,239,114,128, 35, 24,242,243,117, 2,157,226,
- 157,233,226,243,229,116,128, 34,130,240,229,242,243,229,116,128,
- 34,131,239,242,244,233,239,110,129, 34, 55,157,253,225,108,128,
- 34, 29,115, 2,158, 8,158, 51,105,130, 3,200,158, 16,158, 27,
- 227,249,242,233,236,236,233, 99,128, 4,113,236,233,240,238,229,
- 245,237,225,244,225,227,249,242,233,236,236,233,227,227,237, 98,
- 128, 4,134,243,241,245,225,242,101,128, 51,176,117, 2,158, 66,
- 158, 77,232,233,242,225,231,225,238, 97,128, 48,119,235,225,244,
- 225,235,225,238, 97,128, 48,215,246,243,241,245,225,242,101,128,
- 51,180,247,243,241,245,225,242,101,128, 51,186,113,136, 0,113,
- 158,128,159,177,159,188,159,197,159,204,159,216,159,254,160, 6,
- 97, 4,158,138,158,161,158,225,159,160,100, 2,158,144,158,150,
- 229,246, 97,128, 9, 88,237,225,232,229,226,242,229,119,128, 5,
- 168,102, 4,158,171,158,180,158,194,158,210,225,242,225,226,233,
- 99,128, 6, 66,230,233,238,225,236,225,242,225,226,233, 99,128,
- 254,214,233,238,233,244,233,225,236,225,242,225,226,233, 99,128,
- 254,215,237,229,228,233,225,236,225,242,225,226,233, 99,128,254,
- 216,237,225,244,115,136, 5,184,158,248,159, 12,159, 26,159, 31,
- 159, 36,159, 45,159, 60,159,147, 49, 3,159, 0,159, 4,159, 8,
- 48,128, 5,184, 97,128, 5,184, 99,128, 5,184, 50, 2,159, 18,
- 159, 22, 55,128, 5,184, 57,128, 5,184,179, 51,128, 5,184,228,
- 101,128, 5,184,232,229,226,242,229,119,128, 5,184,238,225,242,
- 242,239,247,232,229,226,242,229,119,128, 5,184,113, 2,159, 66,
- 159,132,225,244,225,110, 4,159, 79,159, 88,159,103,159,119,232,
- 229,226,242,229,119,128, 5,184,238,225,242,242,239,247,232,229,
- 226,242,229,119,128, 5,184,241,245,225,242,244,229,242,232,229,
- 226,242,229,119,128, 5,184,247,233,228,229,232,229,226,242,229,
- 119,128, 5,184,245,225,242,244,229,242,232,229,226,242,229,119,
- 128, 5,184,247,233,228,229,232,229,226,242,229,119,128, 5,184,
- 242,238,229,249,240,225,242,225,232,229,226,242,229,119,128, 5,
- 159,226,239,240,239,237,239,230,111,128, 49, 17,227,233,242,227,
- 236,101,128, 36,224,232,239,239,107,128, 2,160,237,239,238,239,
- 243,240,225,227,101,128,255, 81,239,102,130, 5,231,159,225,159,
- 245,228,225,231,229,243,104,129,251, 71,159,236,232,229,226,242,
- 229,119,128,251, 71,232,229,226,242,229,119,128, 5,231,240,225,
- 242,229,110,128, 36,172,117, 4,160, 16,160, 28,160,117,160,204,
- 225,242,244,229,242,238,239,244,101,128, 38,105,226,245,244,115,
- 135, 5,187,160, 49,160, 54,160, 59,160, 64,160, 73,160, 88,160,
- 104,177, 56,128, 5,187,178, 53,128, 5,187,179, 49,128, 5,187,
- 232,229,226,242,229,119,128, 5,187,238,225,242,242,239,247,232,
- 229,226,242,229,119,128, 5,187,241,245,225,242,244,229,242,232,
- 229,226,242,229,119,128, 5,187,247,233,228,229,232,229,226,242,
- 229,119,128, 5,187,229,243,244,233,239,110,133, 0, 63,160,136,
- 160,159,160,176,160,184,160,196,225,114, 2,160,143,160,150,225,
- 226,233, 99,128, 6, 31,237,229,238,233,225,110,128, 5, 94,228,
- 239,247,110,129, 0,191,160,168,243,237,225,236,108,128,247,191,
- 231,242,229,229,107,128, 3,126,237,239,238,239,243,240,225,227,
- 101,128,255, 31,243,237,225,236,108,128,247, 63,239,244,101, 4,
- 160,216,161, 31,161, 51,161, 80,228,226,108,133, 0, 34,160,232,
- 160,239,160,246,161, 2,161, 23,226,225,243,101,128, 32, 30,236,
- 229,230,116,128, 32, 28,237,239,238,239,243,240,225,227,101,128,
- 255, 2,240,242,233,237,101,129, 48, 30,161, 12,242,229,246,229,
- 242,243,229,100,128, 48, 29,242,233,231,232,116,128, 32, 29,236,
- 229,230,116,129, 32, 24,161, 40,242,229,246,229,242,243,229,100,
- 128, 32, 27,114, 2,161, 57,161, 67,229,246,229,242,243,229,100,
- 128, 32, 27,233,231,232,116,129, 32, 25,161, 76,110,128, 1, 73,
- 243,233,238,231,108, 2,161, 90,161, 97,226,225,243,101,128, 32,
- 26,101,129, 0, 39,161,103,237,239,238,239,243,240,225,227,101,
- 128,255, 7,114,145, 0,114,161,153,162,157,162,168,162,215,163,
- 10,164, 27,164, 51,164,146,166,180,166,217,166,229,167, 27,167,
- 35,167,197,167,208,167,243,168, 87, 97, 11,161,177,161,188,161,
- 198,161,205,162, 14,162, 30,162, 55,162, 66,162, 91,162,114,162,
- 151,225,242,237,229,238,233,225,110,128, 5,124,226,229,238,231,
- 225,236,105,128, 9,176,227,245,244,101,128, 1, 85,100, 4,161,
- 215,161,221,161,235,162, 5,229,246, 97,128, 9, 48,233,227,225,
- 108,129, 34, 26,161,230,229,120,128,248,229,239,246,229,242,243,
- 243,241,245,225,242,101,129, 51,174,161,251,228,243,241,245,225,
- 242,101,128, 51,175,243,241,245,225,242,101,128, 51,173,230,101,
- 129, 5,191,162, 21,232,229,226,242,229,119,128, 5,191,231,117,
- 2,162, 37,162, 46,234,225,242,225,244,105,128, 10,176,242,237,
- 245,235,232,105,128, 10, 48,232,233,242,225,231,225,238, 97,128,
- 48,137,235,225,244,225,235,225,238, 97,129, 48,233,162, 79,232,
- 225,236,230,247,233,228,244,104,128,255,151,236,239,247,229,242,
- 228,233,225,231,239,238,225,236,226,229,238,231,225,236,105,128,
- 9,241,109, 2,162,120,162,143,233,228,228,236,229,228,233,225,
- 231,239,238,225,236,226,229,238,231,225,236,105,128, 9,240,243,
- 232,239,242,110,128, 2,100,244,233,111,128, 34, 54,226,239,240,
- 239,237,239,230,111,128, 49, 22, 99, 4,162,178,162,185,162,194,
- 162,202,225,242,239,110,128, 1, 89,229,228,233,236,236, 97,128,
- 1, 87,233,242,227,236,101,128, 36,225,239,237,237,225,225,227,
- 227,229,238,116,128, 1, 87,100, 2,162,221,162,231,226,236,231,
- 242,225,246,101,128, 2, 17,239,116, 2,162,238,162,247,225,227,
- 227,229,238,116,128, 30, 89,226,229,236,239,119,129, 30, 91,163,
- 1,237,225,227,242,239,110,128, 30, 93,101, 6,163, 24,163, 69,
- 163,104,163,159,163,184,163,217,102, 2,163, 30,163, 43,229,242,
- 229,238,227,229,237,225,242,107,128, 32, 59,236,229,248,243,117,
- 2,163, 53,163, 60,226,243,229,116,128, 34,134,240,229,242,243,
- 229,116,128, 34,135,231,233,243,244,229,114, 2,163, 80,163, 85,
- 229,100,128, 0,174,115, 2,163, 91,163, 97,225,238,115,128,248,
- 232,229,242,233,102,128,246,218,104, 3,163,112,163,135,163,149,
- 225,114, 2,163,119,163,126,225,226,233, 99,128, 6, 49,237,229,
- 238,233,225,110,128, 5,128,230,233,238,225,236,225,242,225,226,
- 233, 99,128,254,174,233,242,225,231,225,238, 97,128, 48,140,235,
- 225,244,225,235,225,238, 97,129, 48,236,163,172,232,225,236,230,
- 247,233,228,244,104,128,255,154,243,104,130, 5,232,163,193,163,
- 208,228,225,231,229,243,232,232,229,226,242,229,119,128,251, 72,
- 232,229,226,242,229,119,128, 5,232,118, 3,163,225,163,238,164,
- 14,229,242,243,229,228,244,233,236,228,101,128, 34, 61,233, 97,
- 2,163,245,163,254,232,229,226,242,229,119,128, 5,151,237,245,
- 231,242,225,243,232,232,229,226,242,229,119,128, 5,151,236,239,
- 231,233,227,225,236,238,239,116,128, 35, 16,230,233,243,232,232,
- 239,239,107,129, 2,126,164, 40,242,229,246,229,242,243,229,100,
- 128, 2,127,104, 2,164, 57,164, 80, 97, 2,164, 63,164, 73,226,
- 229,238,231,225,236,105,128, 9,221,228,229,246, 97,128, 9, 93,
- 111,131, 3,193,164, 90,164,119,164,133,239,107,129, 2,125,164,
- 97,244,245,242,238,229,100,129, 2,123,164,108,243,245,240,229,
- 242,233,239,114,128, 2,181,243,249,237,226,239,236,231,242,229,
- 229,107,128, 3,241,244,233,227,232,239,239,235,237,239,100,128,
- 2,222,105, 6,164,160,165,204,165,250,166, 5,166, 30,166,166,
- 229,245,108, 9,164,182,164,217,164,232,164,246,165, 36,165, 50,
- 165,136,165,149,165,184, 97, 2,164,188,164,203,227,233,242,227,
- 236,229,235,239,242,229,225,110,128, 50,113,240,225,242,229,238,
- 235,239,242,229,225,110,128, 50, 17,227,233,242,227,236,229,235,
- 239,242,229,225,110,128, 50, 99,232,233,229,245,232,235,239,242,
- 229,225,110,128, 49, 64,107, 2,164,252,165, 28,233,249,229,239,
- 107, 2,165, 6,165, 15,235,239,242,229,225,110,128, 49, 58,243,
- 233,239,243,235,239,242,229,225,110,128, 49,105,239,242,229,225,
- 110,128, 49, 57,237,233,229,245,237,235,239,242,229,225,110,128,
- 49, 59,112, 3,165, 58,165, 90,165,105, 97, 2,165, 64,165, 78,
- 238,243,233,239,243,235,239,242,229,225,110,128, 49,108,242,229,
- 238,235,239,242,229,225,110,128, 50, 3,232,233,229,245,240,232,
- 235,239,242,229,225,110,128, 49, 63,233,229,245,112, 2,165,114,
- 165,123,235,239,242,229,225,110,128, 49, 60,243,233,239,243,235,
- 239,242,229,225,110,128, 49,107,243,233,239,243,235,239,242,229,
- 225,110,128, 49, 61,116, 2,165,155,165,170,232,233,229,245,244,
- 232,235,239,242,229,225,110,128, 49, 62,233,235,229,245,244,235,
- 239,242,229,225,110,128, 49,106,249,229,239,242,233,238,232,233,
- 229,245,232,235,239,242,229,225,110,128, 49,109,231,232,116, 2,
- 165,212,165,220,225,238,231,236,101,128, 34, 31,116, 2,165,226,
- 165,240,225,227,235,226,229,236,239,247,227,237, 98,128, 3, 25,
- 242,233,225,238,231,236,101,128, 34,191,232,233,242,225,231,225,
- 238, 97,128, 48,138,235,225,244,225,235,225,238, 97,129, 48,234,
- 166, 18,232,225,236,230,247,233,228,244,104,128,255,152,110, 2,
- 166, 36,166,152,103,131, 2,218,166, 46,166, 57,166, 63,226,229,
- 236,239,247,227,237, 98,128, 3, 37,227,237, 98,128, 3, 10,232,
- 225,236,102, 2,166, 72,166,118,236,229,230,116,131, 2,191,166,
- 85,166, 96,166,107,225,242,237,229,238,233,225,110,128, 5, 89,
- 226,229,236,239,247,227,237, 98,128, 3, 28,227,229,238,244,229,
- 242,229,100,128, 2,211,242,233,231,232,116,130, 2,190,166,130,
- 166,141,226,229,236,239,247,227,237, 98,128, 3, 57,227,229,238,
- 244,229,242,229,100,128, 2,210,246,229,242,244,229,228,226,242,
- 229,246,101,128, 2, 19,244,244,239,242,245,243,241,245,225,242,
- 101,128, 51, 81,108, 2,166,186,166,197,233,238,229,226,229,236,
- 239,119,128, 30, 95,239,238,231,236,229,103,129, 2,124,166,208,
- 244,245,242,238,229,100,128, 2,122,237,239,238,239,243,240,225,
- 227,101,128,255, 82,111, 3,166,237,166,248,167, 17,232,233,242,
- 225,231,225,238, 97,128, 48,141,235,225,244,225,235,225,238, 97,
- 129, 48,237,167, 5,232,225,236,230,247,233,228,244,104,128,255,
- 155,242,245,225,244,232,225,105,128, 14, 35,240,225,242,229,110,
- 128, 36,173,114, 3,167, 43,167, 79,167,109, 97, 3,167, 51,167,
- 61,167, 68,226,229,238,231,225,236,105,128, 9,220,228,229,246,
- 97,128, 9, 49,231,245,242,237,245,235,232,105,128, 10, 92,229,
- 104, 2,167, 86,167, 95,225,242,225,226,233, 99,128, 6,145,230,
- 233,238,225,236,225,242,225,226,233, 99,128,251,141,246,239,227,
- 225,236,233, 99, 4,167,125,167,135,167,142,167,153,226,229,238,
- 231,225,236,105,128, 9,224,228,229,246, 97,128, 9, 96,231,245,
- 234,225,242,225,244,105,128, 10,224,246,239,247,229,236,243,233,
- 231,110, 3,167,169,167,179,167,186,226,229,238,231,225,236,105,
- 128, 9,196,228,229,246, 97,128, 9, 68,231,245,234,225,242,225,
- 244,105,128, 10,196,243,245,240,229,242,233,239,114,128,246,241,
- 116, 2,167,214,167,222,226,236,239,227,107,128, 37,144,245,242,
- 238,229,100,129, 2,121,167,232,243,245,240,229,242,233,239,114,
- 128, 2,180,117, 4,167,253,168, 8,168, 33,168, 80,232,233,242,
- 225,231,225,238, 97,128, 48,139,235,225,244,225,235,225,238, 97,
- 129, 48,235,168, 21,232,225,236,230,247,233,228,244,104,128,255,
- 153,112, 2,168, 39,168, 74,229,101, 2,168, 46,168, 60,237,225,
- 242,235,226,229,238,231,225,236,105,128, 9,242,243,233,231,238,
- 226,229,238,231,225,236,105,128, 9,243,233,225,104,128,246,221,
- 244,232,225,105,128, 14, 36,246,239,227,225,236,233, 99, 4,168,
- 103,168,113,168,120,168,131,226,229,238,231,225,236,105,128, 9,
- 139,228,229,246, 97,128, 9, 11,231,245,234,225,242,225,244,105,
- 128, 10,139,246,239,247,229,236,243,233,231,110, 3,168,147,168,
- 157,168,164,226,229,238,231,225,236,105,128, 9,195,228,229,246,
- 97,128, 9, 67,231,245,234,225,242,225,244,105,128, 10,195,115,
- 147, 0,115,168,217,170,187,170,198,171, 68,171,107,174, 49,174,
- 60,176,203,179, 85,179,131,179,158,180, 93,180,160,181,193,181,
- 203,182,133,182,206,183,120,183,130, 97, 9,168,237,168,247,169,
- 12,169, 84,169,109,169,120,169,145,169,177,169,217,226,229,238,
- 231,225,236,105,128, 9,184,227,245,244,101,129, 1, 91,169, 0,
- 228,239,244,225,227,227,229,238,116,128, 30,101,100, 5,169, 24,
- 169, 33,169, 39,169, 53,169, 69,225,242,225,226,233, 99,128, 6,
- 53,229,246, 97,128, 9, 56,230,233,238,225,236,225,242,225,226,
- 233, 99,128,254,186,233,238,233,244,233,225,236,225,242,225,226,
- 233, 99,128,254,187,237,229,228,233,225,236,225,242,225,226,233,
- 99,128,254,188,231,117, 2,169, 91,169,100,234,225,242,225,244,
- 105,128, 10,184,242,237,245,235,232,105,128, 10, 56,232,233,242,
- 225,231,225,238, 97,128, 48, 85,235,225,244,225,235,225,238, 97,
- 129, 48,181,169,133,232,225,236,230,247,233,228,244,104,128,255,
- 123,236,236,225,236,236,225,232,239,245,225,236,225,249,232,229,
- 247,225,243,225,236,236,225,237,225,242,225,226,233, 99,128,253,
- 250,237,229,235,104,130, 5,225,169,188,169,208,228,225,231,229,
- 243,104,129,251, 65,169,199,232,229,226,242,229,119,128,251, 65,
- 232,229,226,242,229,119,128, 5,225,242, 97, 5,169,230,170, 48,
- 170, 56,170,106,170,114, 97, 5,169,242,169,250,170, 2,170, 33,
- 170, 41,225,244,232,225,105,128, 14, 50,229,244,232,225,105,128,
- 14, 65,233,237,225,233,109, 2,170, 12,170, 23,225,236,225,233,
- 244,232,225,105,128, 14, 68,245,225,238,244,232,225,105,128, 14,
- 67,237,244,232,225,105,128, 14, 51,244,232,225,105,128, 14, 48,
- 229,244,232,225,105,128, 14, 64,105, 3,170, 64,170, 88,170, 99,
- 105, 2,170, 70,170, 81,236,229,230,244,244,232,225,105,128,248,
- 134,244,232,225,105,128, 14, 53,236,229,230,244,244,232,225,105,
- 128,248,133,244,232,225,105,128, 14, 52,239,244,232,225,105,128,
- 14, 66,117, 3,170,122,170,172,170,179,101, 3,170,130,170,154,
- 170,165,101, 2,170,136,170,147,236,229,230,244,244,232,225,105,
- 128,248,136,244,232,225,105,128, 14, 55,236,229,230,244,244,232,
- 225,105,128,248,135,244,232,225,105,128, 14, 54,244,232,225,105,
- 128, 14, 56,245,244,232,225,105,128, 14, 57,226,239,240,239,237,
- 239,230,111,128, 49, 25, 99, 5,170,210,170,231,170,240,171, 33,
- 171, 55,225,242,239,110,129, 1, 97,170,219,228,239,244,225,227,
- 227,229,238,116,128, 30,103,229,228,233,236,236, 97,128, 1, 95,
- 232,247, 97,131, 2, 89,170,252,171, 7,171, 26,227,249,242,233,
- 236,236,233, 99,128, 4,217,228,233,229,242,229,243,233,243,227,
- 249,242,233,236,236,233, 99,128, 4,219,232,239,239,107,128, 2,
- 90,233,242, 99, 2,171, 41,171, 46,236,101,128, 36,226,245,237,
- 230,236,229,120,128, 1, 93,239,237,237,225,225,227,227,229,238,
- 116,128, 2, 25,228,239,116, 2,171, 76,171, 85,225,227,227,229,
- 238,116,128, 30, 97,226,229,236,239,119,129, 30, 99,171, 95,228,
- 239,244,225,227,227,229,238,116,128, 30,105,101, 9,171,127,171,
- 143,171,178,171,243,172, 90,172,117,172,142,172,223,172,250,225,
- 231,245,236,236,226,229,236,239,247,227,237, 98,128, 3, 60, 99,
- 2,171,149,171,171,239,238,100,129, 32, 51,171,157,244,239,238,
- 229,227,232,233,238,229,243,101,128, 2,202,244,233,239,110,128,
- 0,167,229,110, 4,171,189,171,198,171,212,171,228,225,242,225,
- 226,233, 99,128, 6, 51,230,233,238,225,236,225,242,225,226,233,
- 99,128,254,178,233,238,233,244,233,225,236,225,242,225,226,233,
- 99,128,254,179,237,229,228,233,225,236,225,242,225,226,233, 99,
- 128,254,180,231,239,108,135, 5,182,172, 7,172, 21,172, 26,172,
- 35,172, 50,172, 66,172, 77, 49, 2,172, 13,172, 17, 51,128, 5,
- 182,102,128, 5,182,178, 99,128, 5,182,232,229,226,242,229,119,
- 128, 5,182,238,225,242,242,239,247,232,229,226,242,229,119,128,
- 5,182,241,245,225,242,244,229,242,232,229,226,242,229,119,128,
- 5,182,244,225,232,229,226,242,229,119,128, 5,146,247,233,228,
- 229,232,229,226,242,229,119,128, 5,182,104, 2,172, 96,172,107,
- 225,242,237,229,238,233,225,110,128, 5,125,233,242,225,231,225,
- 238, 97,128, 48, 91,235,225,244,225,235,225,238, 97,129, 48,187,
- 172,130,232,225,236,230,247,233,228,244,104,128,255,126,237,105,
- 2,172,149,172,192,227,239,236,239,110,131, 0, 59,172,163,172,
- 172,172,184,225,242,225,226,233, 99,128, 6, 27,237,239,238,239,
- 243,240,225,227,101,128,255, 27,243,237,225,236,108,128,254, 84,
- 246,239,233,227,229,228,237,225,242,235,235,225,238, 97,129, 48,
- 156,172,211,232,225,236,230,247,233,228,244,104,128,255,159,238,
- 116, 2,172,230,172,240,233,243,241,245,225,242,101,128, 51, 34,
- 239,243,241,245,225,242,101,128, 51, 35,246,229,110,142, 0, 55,
- 173, 28,173, 37,173, 47,173, 77,173, 84,173, 94,173,119,173,146,
- 173,180,173,192,173,203,173,236,173,244,173,255,225,242,225,226,
- 233, 99,128, 6,103,226,229,238,231,225,236,105,128, 9,237,227,
- 233,242,227,236,101,129, 36,102,173, 58,233,238,246,229,242,243,
- 229,243,225,238,243,243,229,242,233,102,128, 39,144,228,229,246,
- 97,128, 9,109,229,233,231,232,244,232,115,128, 33, 94,231,117,
- 2,173,101,173,110,234,225,242,225,244,105,128, 10,237,242,237,
- 245,235,232,105,128, 10,109,232, 97, 2,173,126,173,137,227,235,
- 225,242,225,226,233, 99,128, 6,103,238,231,250,232,239,117,128,
- 48, 39,105, 2,173,152,173,170,228,229,239,231,242,225,240,232,
- 233,227,240,225,242,229,110,128, 50, 38,238,230,229,242,233,239,
- 114,128, 32,135,237,239,238,239,243,240,225,227,101,128,255, 23,
- 239,236,228,243,244,249,236,101,128,247, 55,112, 2,173,209,173,
- 216,225,242,229,110,128, 36,122,229,114, 2,173,223,173,229,233,
- 239,100,128, 36,142,243,233,225,110,128, 6,247,242,239,237,225,
- 110,128, 33,118,243,245,240,229,242,233,239,114,128, 32,119,116,
- 2,174, 5,174, 43,229,229,110, 2,174, 13,174, 22,227,233,242,
- 227,236,101,128, 36,112,112, 2,174, 28,174, 35,225,242,229,110,
- 128, 36,132,229,242,233,239,100,128, 36,152,232,225,105,128, 14,
- 87,230,244,232,249,240,232,229,110,128, 0,173,104, 7,174, 76,
- 175, 50,175, 61,175, 75,176, 20,176, 33,176,197, 97, 6,174, 90,
- 174,101,174,111,174,122,175, 9,175, 34,225,242,237,229,238,233,
- 225,110,128, 5,119,226,229,238,231,225,236,105,128, 9,182,227,
- 249,242,233,236,236,233, 99,128, 4, 72,100, 2,174,128,174,224,
- 228, 97, 4,174,139,174,148,174,179,174,193,225,242,225,226,233,
- 99,128, 6, 81,228,225,237,237, 97, 2,174,158,174,167,225,242,
- 225,226,233, 99,128,252, 97,244,225,238,225,242,225,226,233, 99,
- 128,252, 94,230,225,244,232,225,225,242,225,226,233, 99,128,252,
- 96,235,225,243,242, 97, 2,174,203,174,212,225,242,225,226,233,
- 99,128,252, 98,244,225,238,225,242,225,226,233, 99,128,252, 95,
- 101,132, 37,146,174,236,174,243,174,251,175, 4,228,225,242,107,
- 128, 37,147,236,233,231,232,116,128, 37,145,237,229,228,233,245,
- 109,128, 37,146,246, 97,128, 9, 54,231,117, 2,175, 16,175, 25,
- 234,225,242,225,244,105,128, 10,182,242,237,245,235,232,105,128,
- 10, 54,236,243,232,229,236,229,244,232,229,226,242,229,119,128,
- 5,147,226,239,240,239,237,239,230,111,128, 49, 21,227,232,225,
- 227,249,242,233,236,236,233, 99,128, 4, 73,101, 4,175, 85,175,
- 150,175,160,175,177,229,110, 4,175, 96,175,105,175,119,175,135,
- 225,242,225,226,233, 99,128, 6, 52,230,233,238,225,236,225,242,
- 225,226,233, 99,128,254,182,233,238,233,244,233,225,236,225,242,
- 225,226,233, 99,128,254,183,237,229,228,233,225,236,225,242,225,
- 226,233, 99,128,254,184,233,227,239,240,244,233, 99,128, 3,227,
- 241,229,108,129, 32,170,175,168,232,229,226,242,229,119,128, 32,
- 170,246, 97,134, 5,176,175,194,175,209,175,223,175,232,175,247,
- 176, 7, 49, 2,175,200,175,205,177, 53,128, 5,176, 53,128, 5,
- 176, 50, 2,175,215,175,219, 50,128, 5,176,101,128, 5,176,232,
- 229,226,242,229,119,128, 5,176,238,225,242,242,239,247,232,229,
- 226,242,229,119,128, 5,176,241,245,225,242,244,229,242,232,229,
- 226,242,229,119,128, 5,176,247,233,228,229,232,229,226,242,229,
- 119,128, 5,176,232,225,227,249,242,233,236,236,233, 99,128, 4,
- 187,105, 2,176, 39,176, 50,237,225,227,239,240,244,233, 99,128,
- 3,237,110,131, 5,233,176, 60,176,143,176,152,100, 2,176, 66,
- 176,132,225,231,229,243,104,130,251, 73,176, 78,176, 87,232,229,
- 226,242,229,119,128,251, 73,115, 2,176, 93,176,113,232,233,238,
- 228,239,116,129,251, 44,176,104,232,229,226,242,229,119,128,251,
- 44,233,238,228,239,116,129,251, 45,176,123,232,229,226,242,229,
- 119,128,251, 45,239,244,232,229,226,242,229,119,128, 5,193,232,
- 229,226,242,229,119,128, 5,233,115, 2,176,158,176,178,232,233,
- 238,228,239,116,129,251, 42,176,169,232,229,226,242,229,119,128,
- 251, 42,233,238,228,239,116,129,251, 43,176,188,232,229,226,242,
- 229,119,128,251, 43,239,239,107,128, 2,130,105, 8,176,221,177,
- 9,177, 20,177, 45,177, 75,177, 83,177, 96,178, 11,231,237, 97,
- 131, 3,195,176,233,176,237,176,245, 49,128, 3,194,230,233,238,
- 225,108,128, 3,194,236,245,238,225,244,229,243,249,237,226,239,
- 236,231,242,229,229,107,128, 3,242,232,233,242,225,231,225,238,
- 97,128, 48, 87,235,225,244,225,235,225,238, 97,129, 48,183,177,
- 33,232,225,236,230,247,233,228,244,104,128,255,124,236,245,113,
- 2,177, 53,177, 62,232,229,226,242,229,119,128, 5,189,236,229,
- 230,244,232,229,226,242,229,119,128, 5,189,237,233,236,225,114,
- 128, 34, 60,238,228,239,244,232,229,226,242,229,119,128, 5,194,
- 239,115, 6,177,111,177,146,177,178,177,206,177,220,177,252, 97,
- 2,177,117,177,132,227,233,242,227,236,229,235,239,242,229,225,
- 110,128, 50,116,240,225,242,229,238,235,239,242,229,225,110,128,
- 50, 20,227,105, 2,177,153,177,165,229,245,227,235,239,242,229,
- 225,110,128, 49,126,242,227,236,229,235,239,242,229,225,110,128,
- 50,102,107, 2,177,184,177,198,233,249,229,239,235,235,239,242,
- 229,225,110,128, 49,122,239,242,229,225,110,128, 49, 69,238,233,
- 229,245,238,235,239,242,229,225,110,128, 49,123,112, 2,177,226,
- 177,239,225,242,229,238,235,239,242,229,225,110,128, 50, 6,233,
- 229,245,240,235,239,242,229,225,110,128, 49,125,244,233,235,229,
- 245,244,235,239,242,229,225,110,128, 49,124,120,141, 0, 54,178,
- 41,178, 50,178, 60,178, 90,178, 97,178,122,178,149,178,183,178,
- 195,178,206,178,239,178,247,179, 2,225,242,225,226,233, 99,128,
- 6,102,226,229,238,231,225,236,105,128, 9,236,227,233,242,227,
- 236,101,129, 36,101,178, 71,233,238,246,229,242,243,229,243,225,
- 238,243,243,229,242,233,102,128, 39,143,228,229,246, 97,128, 9,
- 108,231,117, 2,178,104,178,113,234,225,242,225,244,105,128, 10,
- 236,242,237,245,235,232,105,128, 10,108,232, 97, 2,178,129,178,
- 140,227,235,225,242,225,226,233, 99,128, 6,102,238,231,250,232,
- 239,117,128, 48, 38,105, 2,178,155,178,173,228,229,239,231,242,
- 225,240,232,233,227,240,225,242,229,110,128, 50, 37,238,230,229,
- 242,233,239,114,128, 32,134,237,239,238,239,243,240,225,227,101,
- 128,255, 22,239,236,228,243,244,249,236,101,128,247, 54,112, 2,
- 178,212,178,219,225,242,229,110,128, 36,121,229,114, 2,178,226,
- 178,232,233,239,100,128, 36,141,243,233,225,110,128, 6,246,242,
- 239,237,225,110,128, 33,117,243,245,240,229,242,233,239,114,128,
- 32,118,116, 2,179, 8,179, 79,229,229,110, 2,179, 16,179, 58,
- 99, 2,179, 22,179, 30,233,242,227,236,101,128, 36,111,245,242,
- 242,229,238,227,249,228,229,238,239,237,233,238,225,244,239,242,
- 226,229,238,231,225,236,105,128, 9,249,112, 2,179, 64,179, 71,
- 225,242,229,110,128, 36,131,229,242,233,239,100,128, 36,151,232,
- 225,105,128, 14, 86,108, 2,179, 91,179,111,225,243,104,129, 0,
- 47,179, 99,237,239,238,239,243,240,225,227,101,128,255, 15,239,
- 238,103,129, 1,127,179,119,228,239,244,225,227,227,229,238,116,
- 128, 30,155,109, 2,179,137,179,147,233,236,229,230,225,227,101,
- 128, 38, 58,239,238,239,243,240,225,227,101,128,255, 83,111, 6,
- 179,172,179,222,179,233,180, 2,180, 47,180, 58,102, 2,179,178,
- 179,192,240,225,243,245,241,232,229,226,242,229,119,128, 5,195,
- 116, 2,179,198,179,207,232,249,240,232,229,110,128, 0,173,243,
- 233,231,238,227,249,242,233,236,236,233, 99,128, 4, 76,232,233,
- 242,225,231,225,238, 97,128, 48, 93,235,225,244,225,235,225,238,
- 97,129, 48,189,179,246,232,225,236,230,247,233,228,244,104,128,
- 255,127,236,233,228,245,115, 2,180, 12,180, 29,236,239,238,231,
- 239,246,229,242,236,225,249,227,237, 98,128, 3, 56,243,232,239,
- 242,244,239,246,229,242,236,225,249,227,237, 98,128, 3, 55,242,
- 245,243,233,244,232,225,105,128, 14, 41,115, 3,180, 66,180, 76,
- 180, 84,225,236,225,244,232,225,105,128, 14, 40,239,244,232,225,
- 105,128, 14, 11,245,225,244,232,225,105,128, 14, 42,240, 97, 3,
- 180,102,180,122,180,154,227,101,129, 0, 32,180,109,232,225,227,
- 235,225,242,225,226,233, 99,128, 0, 32,228,101,129, 38, 96,180,
- 129,243,245,233,116, 2,180,138,180,146,226,236,225,227,107,128,
- 38, 96,247,232,233,244,101,128, 38,100,242,229,110,128, 36,174,
- 241,245,225,242,101, 11,180,188,180,199,180,213,180,238,180,255,
- 181, 25,181, 40,181, 73,181,100,181,156,181,171,226,229,236,239,
- 247,227,237, 98,128, 3, 59, 99, 2,180,205,180,209, 99,128, 51,
- 196,109,128, 51,157,228,233,225,231,239,238,225,236,227,242,239,
- 243,243,232,225,244,227,232,230,233,236,108,128, 37,169,232,239,
- 242,233,250,239,238,244,225,236,230,233,236,108,128, 37,164,107,
- 2,181, 5,181, 9,103,128, 51,143,109,129, 51,158,181, 15,227,
- 225,240,233,244,225,108,128, 51,206,108, 2,181, 31,181, 35,110,
- 128, 51,209,239,103,128, 51,210,109, 4,181, 50,181, 54,181, 59,
- 181, 63,103,128, 51,142,233,108,128, 51,213,109,128, 51,156,243,
- 241,245,225,242,229,100,128, 51,161,239,242,244,232,239,231,239,
- 238,225,236,227,242,239,243,243,232,225,244,227,232,230,233,236,
- 108,128, 37,166,245,240,240,229,114, 2,181,110,181,133,236,229,
- 230,244,244,239,236,239,247,229,242,242,233,231,232,244,230,233,
- 236,108,128, 37,167,242,233,231,232,244,244,239,236,239,247,229,
- 242,236,229,230,244,230,233,236,108,128, 37,168,246,229,242,244,
- 233,227,225,236,230,233,236,108,128, 37,165,247,232,233,244,229,
- 247,233,244,232,243,237,225,236,236,226,236,225,227,107,128, 37,
- 163,242,243,241,245,225,242,101,128, 51,219,115, 2,181,209,182,
- 123, 97, 4,181,219,181,229,181,236,181,247,226,229,238,231,225,
- 236,105,128, 9,183,228,229,246, 97,128, 9, 55,231,245,234,225,
- 242,225,244,105,128, 10,183,238,103, 8,182, 10,182, 24,182, 38,
- 182, 52,182, 67,182, 81,182, 95,182,108,227,233,229,245,227,235,
- 239,242,229,225,110,128, 49, 73,232,233,229,245,232,235,239,242,
- 229,225,110,128, 49,133,233,229,245,238,231,235,239,242,229,225,
- 110,128, 49,128,235,233,249,229,239,235,235,239,242,229,225,110,
- 128, 49, 50,238,233,229,245,238,235,239,242,229,225,110,128, 49,
- 101,240,233,229,245,240,235,239,242,229,225,110,128, 49, 67,243,
- 233,239,243,235,239,242,229,225,110,128, 49, 70,244,233,235,229,
- 245,244,235,239,242,229,225,110,128, 49, 56,245,240,229,242,233,
- 239,114,128,246,242,116, 2,182,139,182,162,229,242,236,233,238,
- 103,129, 0,163,182,150,237,239,238,239,243,240,225,227,101,128,
- 255,225,242,239,235,101, 2,182,171,182,188,236,239,238,231,239,
- 246,229,242,236,225,249,227,237, 98,128, 3, 54,243,232,239,242,
- 244,239,246,229,242,236,225,249,227,237, 98,128, 3, 53,117, 7,
- 182,222,182,254,183, 20,183, 31,183, 72,183, 82,183, 86,226,243,
- 229,116,130, 34,130,182,233,182,244,238,239,244,229,241,245,225,
- 108,128, 34,138,239,242,229,241,245,225,108,128, 34,134, 99, 2,
- 183, 4,183, 12,227,229,229,228,115,128, 34,123,232,244,232,225,
- 116,128, 34, 11,232,233,242,225,231,225,238, 97,128, 48, 89,107,
- 2,183, 37,183, 61,225,244,225,235,225,238, 97,129, 48,185,183,
- 49,232,225,236,230,247,233,228,244,104,128,255,125,245,238,225,
- 242,225,226,233, 99,128, 6, 82,237,237,225,244,233,239,110,128,
- 34, 17,110,128, 38, 60,240,229,242,243,229,116,130, 34,131,183,
- 99,183,110,238,239,244,229,241,245,225,108,128, 34,139,239,242,
- 229,241,245,225,108,128, 34,135,246,243,241,245,225,242,101,128,
- 51,220,249,239,245,247,225,229,242,225,243,241,245,225,242,101,
- 128, 51,124,116,144, 0,116,183,183,184,192,184,213,185,100,185,
- 140,187,188,191, 70,192,145,192,157,192,169,193,202,193,227,194,
- 57,194,237,195,165,195,255, 97, 10,183,205,183,215,183,236,183,
- 243,184, 12,184, 90,184,107,184,132,184,146,184,150,226,229,238,
- 231,225,236,105,128, 9,164,227,107, 2,183,222,183,229,228,239,
- 247,110,128, 34,164,236,229,230,116,128, 34,163,228,229,246, 97,
- 128, 9, 36,231,117, 2,183,250,184, 3,234,225,242,225,244,105,
- 128, 10,164,242,237,245,235,232,105,128, 10, 36,104, 4,184, 22,
- 184, 31,184, 45,184, 75,225,242,225,226,233, 99,128, 6, 55,230,
- 233,238,225,236,225,242,225,226,233, 99,128,254,194,105, 2,184,
- 51,184, 66,238,233,244,233,225,236,225,242,225,226,233, 99,128,
- 254,195,242,225,231,225,238, 97,128, 48, 95,237,229,228,233,225,
- 236,225,242,225,226,233, 99,128,254,196,233,243,249,239,245,229,
- 242,225,243,241,245,225,242,101,128, 51,125,235,225,244,225,235,
- 225,238, 97,129, 48,191,184,120,232,225,236,230,247,233,228,244,
- 104,128,255,128,244,247,229,229,236,225,242,225,226,233, 99,128,
- 6, 64,117,128, 3,196,118,130, 5,234,184,158,184,183,228,225,
- 231,229,115,129,251, 74,184,168,104,129,251, 74,184,174,232,229,
- 226,242,229,119,128,251, 74,232,229,226,242,229,119,128, 5,234,
- 98, 2,184,198,184,203,225,114,128, 1,103,239,240,239,237,239,
- 230,111,128, 49, 10, 99, 6,184,227,184,234,184,241,184,250,185,
- 60,185, 87,225,242,239,110,128, 1,101,227,245,242,108,128, 2,
- 168,229,228,233,236,236, 97,128, 1, 99,232,229,104, 4,185, 6,
- 185, 15,185, 29,185, 45,225,242,225,226,233, 99,128, 6,134,230,
- 233,238,225,236,225,242,225,226,233, 99,128,251,123,233,238,233,
- 244,233,225,236,225,242,225,226,233, 99,128,251,124,237,229,228,
- 233,225,236,225,242,225,226,233, 99,128,251,125,233,242, 99, 2,
- 185, 68,185, 73,236,101,128, 36,227,245,237,230,236,229,248,226,
- 229,236,239,119,128, 30,113,239,237,237,225,225,227,227,229,238,
- 116,128, 1, 99,100, 2,185,106,185,116,233,229,242,229,243,233,
- 115,128, 30,151,239,116, 2,185,123,185,132,225,227,227,229,238,
- 116,128, 30,107,226,229,236,239,119,128, 30,109,101, 9,185,160,
- 185,171,185,191,186,201,186,226,187, 34,187,101,187,106,187,158,
- 227,249,242,233,236,236,233, 99,128, 4, 66,228,229,243,227,229,
- 238,228,229,242,227,249,242,233,236,236,233, 99,128, 4,173,104,
- 7,185,207,185,216,185,230,186, 14,186, 44,186, 85,186,183,225,
- 242,225,226,233, 99,128, 6, 42,230,233,238,225,236,225,242,225,
- 226,233, 99,128,254,150,232,225,232,105, 2,185,239,185,254,238,
- 233,244,233,225,236,225,242,225,226,233, 99,128,252,162,243,239,
- 236,225,244,229,228,225,242,225,226,233, 99,128,252, 12,105, 2,
- 186, 20,186, 35,238,233,244,233,225,236,225,242,225,226,233, 99,
- 128,254,151,242,225,231,225,238, 97,128, 48,102,234,229,229,237,
- 105, 2,186, 54,186, 69,238,233,244,233,225,236,225,242,225,226,
- 233, 99,128,252,161,243,239,236,225,244,229,228,225,242,225,226,
- 233, 99,128,252, 11,109, 2,186, 91,186,125,225,242,226,245,244,
- 97, 2,186,102,186,111,225,242,225,226,233, 99,128, 6, 41,230,
- 233,238,225,236,225,242,225,226,233, 99,128,254,148,101, 2,186,
- 131,186,144,228,233,225,236,225,242,225,226,233, 99,128,254,152,
- 229,237,105, 2,186,152,186,167,238,233,244,233,225,236,225,242,
- 225,226,233, 99,128,252,164,243,239,236,225,244,229,228,225,242,
- 225,226,233, 99,128,252, 14,238,239,239,238,230,233,238,225,236,
- 225,242,225,226,233, 99,128,252,115,235,225,244,225,235,225,238,
- 97,129, 48,198,186,214,232,225,236,230,247,233,228,244,104,128,
- 255,131,108, 2,186,232,186,251,229,240,232,239,238,101,129, 33,
- 33,186,243,226,236,225,227,107,128, 38, 14,233,243,232, 97, 2,
- 187, 4,187, 19,231,229,228,239,236,225,232,229,226,242,229,119,
- 128, 5,160,241,229,244,225,238,225,232,229,226,242,229,119,128,
- 5,169,110, 4,187, 44,187, 53,187, 72,187, 93,227,233,242,227,
- 236,101,128, 36,105,233,228,229,239,231,242,225,240,232,233,227,
- 240,225,242,229,110,128, 50, 41,112, 2,187, 78,187, 85,225,242,
- 229,110,128, 36,125,229,242,233,239,100,128, 36,145,242,239,237,
- 225,110,128, 33,121,243,104,128, 2,167,116,131, 5,216,187,116,
- 187,136,187,145,228,225,231,229,243,104,129,251, 56,187,127,232,
- 229,226,242,229,119,128,251, 56,232,229,226,242,229,119,128, 5,
- 216,243,229,227,249,242,233,236,236,233, 99,128, 4,181,246,233,
- 114, 2,187,166,187,175,232,229,226,242,229,119,128, 5,155,236,
- 229,230,244,232,229,226,242,229,119,128, 5,155,104, 6,187,202,
- 188, 98,188,220,189, 96,190, 3,191, 60, 97, 5,187,214,187,224,
- 187,231,188, 0,188, 29,226,229,238,231,225,236,105,128, 9,165,
- 228,229,246, 97,128, 9, 37,231,117, 2,187,238,187,247,234,225,
- 242,225,244,105,128, 10,165,242,237,245,235,232,105,128, 10, 37,
- 108, 2,188, 6,188, 15,225,242,225,226,233, 99,128, 6, 48,230,
- 233,238,225,236,225,242,225,226,233, 99,128,254,172,238,244,232,
- 225,235,232,225,116, 3,188, 44,188, 75,188, 82,236,239,119, 2,
- 188, 52,188, 63,236,229,230,244,244,232,225,105,128,248,152,242,
- 233,231,232,244,244,232,225,105,128,248,151,244,232,225,105,128,
- 14, 76,245,240,240,229,242,236,229,230,244,244,232,225,105,128,
- 248,150,101, 3,188,106,188,170,188,193,104, 4,188,116,188,125,
- 188,139,188,155,225,242,225,226,233, 99,128, 6, 43,230,233,238,
- 225,236,225,242,225,226,233, 99,128,254,154,233,238,233,244,233,
- 225,236,225,242,225,226,233, 99,128,254,155,237,229,228,233,225,
- 236,225,242,225,226,233, 99,128,254,156,242,101, 2,188,177,188,
- 186,229,248,233,243,244,115,128, 34, 3,230,239,242,101,128, 34,
- 52,244, 97,130, 3,184,188,202,188,206, 49,128, 3,209,243,249,
- 237,226,239,236,231,242,229,229,107,128, 3,209,105, 2,188,226,
- 189, 56,229,245,244,104, 4,188,239,189, 18,189, 33,189, 42, 97,
- 2,188,245,189, 4,227,233,242,227,236,229,235,239,242,229,225,
- 110,128, 50,121,240,225,242,229,238,235,239,242,229,225,110,128,
- 50, 25,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,
- 107,235,239,242,229,225,110,128, 49, 76,240,225,242,229,238,235,
- 239,242,229,225,110,128, 50, 11,242,244,229,229,110, 2,189, 66,
- 189, 75,227,233,242,227,236,101,128, 36,108,112, 2,189, 81,189,
- 88,225,242,229,110,128, 36,128,229,242,233,239,100,128, 36,148,
- 111, 6,189,110,189,127,189,132,189,146,189,151,189,204,238,225,
- 238,231,237,239,238,244,232,239,244,232,225,105,128, 14, 17,239,
- 107,128, 1,173,240,232,245,244,232,225,239,244,232,225,105,128,
- 14, 18,242,110,128, 0,254,244,104, 3,189,160,189,184,189,194,
- 97, 2,189,166,189,176,232,225,238,244,232,225,105,128, 14, 23,
- 238,244,232,225,105,128, 14, 16,239,238,231,244,232,225,105,128,
- 14, 24,245,238,231,244,232,225,105,128, 14, 22,245,243,225,238,
- 100, 2,189,214,189,225,227,249,242,233,236,236,233, 99,128, 4,
- 130,243,243,229,240,225,242,225,244,239,114, 2,189,240,189,249,
- 225,242,225,226,233, 99,128, 6,108,240,229,242,243,233,225,110,
- 128, 6,108,242,229,101,144, 0, 51,190, 41,190, 50,190, 60,190,
- 90,190, 97,190,107,190,132,190,159,190,193,190,205,190,224,190,
- 235,191, 12,191, 34,191, 42,191, 53,225,242,225,226,233, 99,128,
- 6, 99,226,229,238,231,225,236,105,128, 9,233,227,233,242,227,
- 236,101,129, 36, 98,190, 71,233,238,246,229,242,243,229,243,225,
- 238,243,243,229,242,233,102,128, 39,140,228,229,246, 97,128, 9,
- 105,229,233,231,232,244,232,115,128, 33, 92,231,117, 2,190,114,
- 190,123,234,225,242,225,244,105,128, 10,233,242,237,245,235,232,
- 105,128, 10,105,232, 97, 2,190,139,190,150,227,235,225,242,225,
- 226,233, 99,128, 6, 99,238,231,250,232,239,117,128, 48, 35,105,
- 2,190,165,190,183,228,229,239,231,242,225,240,232,233,227,240,
- 225,242,229,110,128, 50, 34,238,230,229,242,233,239,114,128, 32,
- 131,237,239,238,239,243,240,225,227,101,128,255, 19,238,245,237,
- 229,242,225,244,239,242,226,229,238,231,225,236,105,128, 9,246,
- 239,236,228,243,244,249,236,101,128,247, 51,112, 2,190,241,190,
- 248,225,242,229,110,128, 36,118,229,114, 2,190,255,191, 5,233,
- 239,100,128, 36,138,243,233,225,110,128, 6,243,241,245,225,242,
- 244,229,242,115,129, 0,190,191, 25,229,237,228,225,243,104,128,
- 246,222,242,239,237,225,110,128, 33,114,243,245,240,229,242,233,
- 239,114,128, 0,179,244,232,225,105,128, 14, 83,250,243,241,245,
- 225,242,101,128, 51,148,105, 7,191, 86,191, 97,191,212,192, 54,
- 192, 66,192,115,192,132,232,233,242,225,231,225,238, 97,128, 48,
- 97,107, 2,191,103,191,127,225,244,225,235,225,238, 97,129, 48,
- 193,191,115,232,225,236,230,247,233,228,244,104,128,255,129,229,
- 245,116, 4,191,139,191,174,191,189,191,198, 97, 2,191,145,191,
- 160,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,112,
- 240,225,242,229,238,235,239,242,229,225,110,128, 50, 16,227,233,
- 242,227,236,229,235,239,242,229,225,110,128, 50, 98,235,239,242,
- 229,225,110,128, 49, 55,240,225,242,229,238,235,239,242,229,225,
- 110,128, 50, 2,236,228,101,133, 2,220,191,228,191,239,192, 0,
- 192, 12,192, 40,226,229,236,239,247,227,237, 98,128, 3, 48, 99,
- 2,191,245,191,250,237, 98,128, 3, 3,239,237, 98,128, 3, 3,
- 228,239,245,226,236,229,227,237, 98,128, 3, 96,111, 2,192, 18,
- 192, 28,240,229,242,225,244,239,114,128, 34, 60,246,229,242,236,
- 225,249,227,237, 98,128, 3, 52,246,229,242,244,233,227,225,236,
- 227,237, 98,128, 3, 62,237,229,243,227,233,242,227,236,101,128,
- 34,151,112, 2,192, 72,192,102,229,232, 97, 2,192, 80,192, 89,
- 232,229,226,242,229,119,128, 5,150,236,229,230,244,232,229,226,
- 242,229,119,128, 5,150,240,233,231,245,242,237,245,235,232,105,
- 128, 10,112,244,236,239,227,249,242,233,236,236,233,227,227,237,
- 98,128, 4,131,247,238,225,242,237,229,238,233,225,110,128, 5,
- 127,236,233,238,229,226,229,236,239,119,128, 30,111,237,239,238,
- 239,243,240,225,227,101,128,255, 84,111, 7,192,185,192,196,192,
- 207,192,232,193, 96,193,108,193,192,225,242,237,229,238,233,225,
- 110,128, 5,105,232,233,242,225,231,225,238, 97,128, 48,104,235,
- 225,244,225,235,225,238, 97,129, 48,200,192,220,232,225,236,230,
- 247,233,228,244,104,128,255,132,110, 3,192,240,193, 82,193, 87,
- 101, 4,192,250,193, 63,193, 70,193, 76,226,225,114, 4,193, 6,
- 193, 35,193, 45,193, 54,229,248,244,242, 97, 2,193, 16,193, 26,
- 232,233,231,232,237,239,100,128, 2,229,236,239,247,237,239,100,
- 128, 2,233,232,233,231,232,237,239,100,128, 2,230,236,239,247,
- 237,239,100,128, 2,232,237,233,228,237,239,100,128, 2,231,230,
- 233,246,101,128, 1,189,243,233,120,128, 1,133,244,247,111,128,
- 1,168,239,115,128, 3,132,243,241,245,225,242,101,128, 51, 39,
- 240,225,244,225,235,244,232,225,105,128, 14, 15,242,244,239,233,
- 243,229,243,232,229,236,236,226,242,225,227,235,229,116, 2,193,
- 131,193,161,236,229,230,116,130, 48, 20,193,142,193,150,243,237,
- 225,236,108,128,254, 93,246,229,242,244,233,227,225,108,128,254,
- 57,242,233,231,232,116,130, 48, 21,193,173,193,181,243,237,225,
- 236,108,128,254, 94,246,229,242,244,233,227,225,108,128,254, 58,
- 244,225,239,244,232,225,105,128, 14, 21,240, 97, 2,193,209,193,
- 221,236,225,244,225,236,232,239,239,107,128, 1,171,242,229,110,
- 128, 36,175,114, 3,193,235,194, 10,194, 25,225,228,229,237,225,
- 242,107,129, 33, 34,193,247,115, 2,193,253,194, 3,225,238,115,
- 128,248,234,229,242,233,102,128,246,219,229,244,242,239,230,236,
- 229,248,232,239,239,107,128, 2,136,233,225,103, 4,194, 37,194,
- 42,194, 47,194, 52,228,110,128, 37,188,236,102,128, 37,196,242,
- 116,128, 37,186,245,112,128, 37,178,115,132, 2,166,194, 69,194,
- 108,194,214,194,227,225,228,105,130, 5,230,194, 79,194, 99,228,
- 225,231,229,243,104,129,251, 70,194, 90,232,229,226,242,229,119,
- 128,251, 70,232,229,226,242,229,119,128, 5,230,101, 2,194,114,
- 194,125,227,249,242,233,236,236,233, 99,128, 4, 70,242,101,134,
- 5,181,194,142,194,156,194,161,194,170,194,185,194,201, 49, 2,
- 194,148,194,152, 50,128, 5,181,101,128, 5,181,178, 98,128, 5,
- 181,232,229,226,242,229,119,128, 5,181,238,225,242,242,239,247,
- 232,229,226,242,229,119,128, 5,181,241,245,225,242,244,229,242,
- 232,229,226,242,229,119,128, 5,181,247,233,228,229,232,229,226,
- 242,229,119,128, 5,181,232,229,227,249,242,233,236,236,233, 99,
- 128, 4, 91,245,240,229,242,233,239,114,128,246,243,116, 4,194,
- 247,195, 41,195,106,195,157, 97, 3,194,255,195, 9,195, 16,226,
- 229,238,231,225,236,105,128, 9,159,228,229,246, 97,128, 9, 31,
- 231,117, 2,195, 23,195, 32,234,225,242,225,244,105,128, 10,159,
- 242,237,245,235,232,105,128, 10, 31,229,104, 4,195, 52,195, 61,
- 195, 75,195, 91,225,242,225,226,233, 99,128, 6,121,230,233,238,
- 225,236,225,242,225,226,233, 99,128,251,103,233,238,233,244,233,
- 225,236,225,242,225,226,233, 99,128,251,104,237,229,228,233,225,
- 236,225,242,225,226,233, 99,128,251,105,232, 97, 3,195,115,195,
- 125,195,132,226,229,238,231,225,236,105,128, 9,160,228,229,246,
- 97,128, 9, 32,231,117, 2,195,139,195,148,234,225,242,225,244,
- 105,128, 10,160,242,237,245,235,232,105,128, 10, 32,245,242,238,
- 229,100,128, 2,135,117, 3,195,173,195,184,195,209,232,233,242,
- 225,231,225,238, 97,128, 48,100,235,225,244,225,235,225,238, 97,
- 129, 48,196,195,197,232,225,236,230,247,233,228,244,104,128,255,
- 130,243,237,225,236,108, 2,195,219,195,230,232,233,242,225,231,
- 225,238, 97,128, 48, 99,235,225,244,225,235,225,238, 97,129, 48,
- 195,195,243,232,225,236,230,247,233,228,244,104,128,255,111,119,
- 2,196, 5,196,110,101, 2,196, 11,196, 59,236,246,101, 3,196,
- 21,196, 30,196, 51,227,233,242,227,236,101,128, 36,107,112, 2,
- 196, 36,196, 43,225,242,229,110,128, 36,127,229,242,233,239,100,
- 128, 36,147,242,239,237,225,110,128, 33,123,238,244,121, 3,196,
- 69,196, 78,196, 89,227,233,242,227,236,101,128, 36,115,232,225,
- 238,231,250,232,239,117,128, 83, 68,112, 2,196, 95,196,102,225,
- 242,229,110,128, 36,135,229,242,233,239,100,128, 36,155,111,142,
- 0, 50,196,142,196,151,196,161,196,191,196,243,197, 12,197, 39,
- 197, 73,197, 85,197,104,197,115,197,148,197,156,197,180,225,242,
- 225,226,233, 99,128, 6, 98,226,229,238,231,225,236,105,128, 9,
- 232,227,233,242,227,236,101,129, 36, 97,196,172,233,238,246,229,
- 242,243,229,243,225,238,243,243,229,242,233,102,128, 39,139,100,
- 2,196,197,196,203,229,246, 97,128, 9,104,239,116, 2,196,210,
- 196,221,229,238,236,229,225,228,229,114,128, 32, 37,236,229,225,
- 228,229,114,129, 32, 37,196,232,246,229,242,244,233,227,225,108,
- 128,254, 48,231,117, 2,196,250,197, 3,234,225,242,225,244,105,
- 128, 10,232,242,237,245,235,232,105,128, 10,104,232, 97, 2,197,
- 19,197, 30,227,235,225,242,225,226,233, 99,128, 6, 98,238,231,
- 250,232,239,117,128, 48, 34,105, 2,197, 45,197, 63,228,229,239,
- 231,242,225,240,232,233,227,240,225,242,229,110,128, 50, 33,238,
- 230,229,242,233,239,114,128, 32,130,237,239,238,239,243,240,225,
- 227,101,128,255, 18,238,245,237,229,242,225,244,239,242,226,229,
- 238,231,225,236,105,128, 9,245,239,236,228,243,244,249,236,101,
- 128,247, 50,112, 2,197,121,197,128,225,242,229,110,128, 36,117,
- 229,114, 2,197,135,197,141,233,239,100,128, 36,137,243,233,225,
- 110,128, 6,242,242,239,237,225,110,128, 33,113,115, 2,197,162,
- 197,170,244,242,239,235,101,128, 1,187,245,240,229,242,233,239,
- 114,128, 0,178,244,104, 2,197,187,197,192,225,105,128, 14, 82,
- 233,242,228,115,128, 33, 84,117,145, 0,117,197,237,197,245,198,
- 30,198, 87,198,225,199, 6,199,129,199,145,199,196,200, 10,200,
- 91,200,100,200,219,200,243,201, 95,201,123,201,237,225,227,245,
- 244,101,128, 0,250, 98, 4,197,255,198, 4,198, 13,198, 23,225,
- 114,128, 2,137,229,238,231,225,236,105,128, 9,137,239,240,239,
- 237,239,230,111,128, 49, 40,242,229,246,101,128, 1,109, 99, 3,
- 198, 38,198, 45,198, 77,225,242,239,110,128, 1,212,233,242, 99,
- 2,198, 53,198, 58,236,101,128, 36,228,245,237,230,236,229,120,
- 129, 0,251,198, 69,226,229,236,239,119,128, 30,119,249,242,233,
- 236,236,233, 99,128, 4, 67,100, 5,198, 99,198,110,198,133,198,
- 139,198,215,225,244,244,225,228,229,246, 97,128, 9, 81,226,108,
- 2,198,117,198,125,225,227,245,244,101,128, 1,113,231,242,225,
- 246,101,128, 2, 21,229,246, 97,128, 9, 9,233,229,242,229,243,
- 233,115,133, 0,252,198,159,198,167,198,175,198,198,198,206,225,
- 227,245,244,101,128, 1,216,226,229,236,239,119,128, 30,115, 99,
- 2,198,181,198,188,225,242,239,110,128, 1,218,249,242,233,236,
- 236,233, 99,128, 4,241,231,242,225,246,101,128, 1,220,237,225,
- 227,242,239,110,128, 1,214,239,244,226,229,236,239,119,128, 30,
- 229,103, 2,198,231,198,238,242,225,246,101,128, 0,249,117, 2,
- 198,244,198,253,234,225,242,225,244,105,128, 10,137,242,237,245,
- 235,232,105,128, 10, 9,104, 3,199, 14,199, 24,199,102,233,242,
- 225,231,225,238, 97,128, 48, 70,111, 2,199, 30,199, 40,239,235,
- 225,226,239,246,101,128, 30,231,242,110,133, 1,176,199, 55,199,
- 63,199, 74,199, 82,199, 94,225,227,245,244,101,128, 30,233,228,
- 239,244,226,229,236,239,119,128, 30,241,231,242,225,246,101,128,
- 30,235,232,239,239,235,225,226,239,246,101,128, 30,237,244,233,
- 236,228,101,128, 30,239,245,238,231,225,242,245,237,236,225,245,
- 116,129, 1,113,199,118,227,249,242,233,236,236,233, 99,128, 4,
- 243,233,238,246,229,242,244,229,228,226,242,229,246,101,128, 2,
- 23,107, 3,199,153,199,177,199,188,225,244,225,235,225,238, 97,
- 129, 48,166,199,165,232,225,236,230,247,233,228,244,104,128,255,
- 115,227,249,242,233,236,236,233, 99,128, 4,121,239,242,229,225,
- 110,128, 49, 92,109, 2,199,202,199,255, 97, 2,199,208,199,241,
- 227,242,239,110,130, 1,107,199,219,199,230,227,249,242,233,236,
- 236,233, 99,128, 4,239,228,233,229,242,229,243,233,115,128, 30,
- 123,244,242,225,231,245,242,237,245,235,232,105,128, 10, 65,239,
- 238,239,243,240,225,227,101,128,255, 85,110, 2,200, 16,200, 71,
- 228,229,242,243,227,239,242,101,132, 0, 95,200, 35,200, 41,200,
- 53,200, 64,228,226,108,128, 32, 23,237,239,238,239,243,240,225,
- 227,101,128,255, 63,246,229,242,244,233,227,225,108,128,254, 51,
- 247,225,246,121,128,254, 79,105, 2,200, 77,200, 82,239,110,128,
- 34, 42,246,229,242,243,225,108,128, 34, 0,239,231,239,238,229,
- 107,128, 1,115,112, 5,200,112,200,119,200,127,200,142,200,193,
- 225,242,229,110,128, 36,176,226,236,239,227,107,128, 37,128,240,
- 229,242,228,239,244,232,229,226,242,229,119,128, 5,196,243,233,
- 236,239,110,131, 3,197,200,156,200,177,200,185,228,233,229,242,
- 229,243,233,115,129, 3,203,200,169,244,239,238,239,115,128, 3,
- 176,236,225,244,233,110,128, 2,138,244,239,238,239,115,128, 3,
- 205,244,225,227,107, 2,200,202,200,213,226,229,236,239,247,227,
- 237, 98,128, 3, 29,237,239,100,128, 2,212,114, 2,200,225,200,
- 237,225,231,245,242,237,245,235,232,105,128, 10,115,233,238,103,
- 128, 1,111,115, 3,200,251,201, 10,201, 55,232,239,242,244,227,
- 249,242,233,236,236,233, 99,128, 4, 94,237,225,236,108, 2,201,
- 19,201, 30,232,233,242,225,231,225,238, 97,128, 48, 69,235,225,
- 244,225,235,225,238, 97,129, 48,165,201, 43,232,225,236,230,247,
- 233,228,244,104,128,255,105,244,242,225,233,231,232,116, 2,201,
- 67,201, 78,227,249,242,233,236,236,233, 99,128, 4,175,243,244,
- 242,239,235,229,227,249,242,233,236,236,233, 99,128, 4,177,244,
- 233,236,228,101,130, 1,105,201,107,201,115,225,227,245,244,101,
- 128, 30,121,226,229,236,239,119,128, 30,117,117, 5,201,135,201,
- 145,201,152,201,177,201,193,226,229,238,231,225,236,105,128, 9,
- 138,228,229,246, 97,128, 9, 10,231,117, 2,201,159,201,168,234,
- 225,242,225,244,105,128, 10,138,242,237,245,235,232,105,128, 10,
- 10,237,225,244,242,225,231,245,242,237,245,235,232,105,128, 10,
- 66,246,239,247,229,236,243,233,231,110, 3,201,209,201,219,201,
- 226,226,229,238,231,225,236,105,128, 9,194,228,229,246, 97,128,
- 9, 66,231,245,234,225,242,225,244,105,128, 10,194,246,239,247,
- 229,236,243,233,231,110, 3,201,253,202, 7,202, 14,226,229,238,
- 231,225,236,105,128, 9,193,228,229,246, 97,128, 9, 65,231,245,
- 234,225,242,225,244,105,128, 10,193,118,139, 0,118,202, 51,202,
- 199,202,208,202,219,203,148,203,155,203,253,204, 9,204,109,204,
- 117,204,138, 97, 4,202, 61,202, 68,202, 93,202,104,228,229,246,
- 97,128, 9, 53,231,117, 2,202, 75,202, 84,234,225,242,225,244,
- 105,128, 10,181,242,237,245,235,232,105,128, 10, 53,235,225,244,
- 225,235,225,238, 97,128, 48,247,118,132, 5,213,202,116,202,143,
- 202,175,202,187,228,225,231,229,243,104,130,251, 53,202,129,202,
- 134,182, 53,128,251, 53,232,229,226,242,229,119,128,251, 53,104,
- 2,202,149,202,157,229,226,242,229,119,128, 5,213,239,236,225,
- 109,129,251, 75,202,166,232,229,226,242,229,119,128,251, 75,246,
- 225,246,232,229,226,242,229,119,128, 5,240,249,239,228,232,229,
- 226,242,229,119,128, 5,241,227,233,242,227,236,101,128, 36,229,
- 228,239,244,226,229,236,239,119,128, 30,127,101, 6,202,233,202,
- 244,203, 52,203, 63,203, 69,203,136,227,249,242,233,236,236,233,
- 99,128, 4, 50,104, 4,202,254,203, 7,203, 21,203, 37,225,242,
- 225,226,233, 99,128, 6,164,230,233,238,225,236,225,242,225,226,
- 233, 99,128,251,107,233,238,233,244,233,225,236,225,242,225,226,
- 233, 99,128,251,108,237,229,228,233,225,236,225,242,225,226,233,
- 99,128,251,109,235,225,244,225,235,225,238, 97,128, 48,249,238,
- 245,115,128, 38, 64,242,244,233,227,225,108, 2,203, 80,203, 86,
- 226,225,114,128, 0,124,236,233,238,101, 4,203, 99,203,110,203,
- 121,203,130,225,226,239,246,229,227,237, 98,128, 3, 13,226,229,
- 236,239,247,227,237, 98,128, 3, 41,236,239,247,237,239,100,128,
- 2,204,237,239,100,128, 2,200,247,225,242,237,229,238,233,225,
- 110,128, 5,126,232,239,239,107,128, 2,139,105, 3,203,163,203,
- 174,203,213,235,225,244,225,235,225,238, 97,128, 48,248,242,225,
- 237, 97, 3,203,185,203,195,203,202,226,229,238,231,225,236,105,
- 128, 9,205,228,229,246, 97,128, 9, 77,231,245,234,225,242,225,
- 244,105,128, 10,205,243,225,242,231, 97, 3,203,225,203,235,203,
- 242,226,229,238,231,225,236,105,128, 9,131,228,229,246, 97,128,
- 9, 3,231,245,234,225,242,225,244,105,128, 10,131,237,239,238,
- 239,243,240,225,227,101,128,255, 86,111, 3,204, 17,204, 28,204,
- 98,225,242,237,229,238,233,225,110,128, 5,120,233,227,229,100,
- 2,204, 37,204, 73,233,244,229,242,225,244,233,239,110, 2,204,
- 51,204, 62,232,233,242,225,231,225,238, 97,128, 48,158,235,225,
- 244,225,235,225,238, 97,128, 48,254,237,225,242,235,235,225,238,
- 97,129, 48,155,204, 86,232,225,236,230,247,233,228,244,104,128,
- 255,158,235,225,244,225,235,225,238, 97,128, 48,250,240,225,242,
- 229,110,128, 36,177,116, 2,204,123,204,130,233,236,228,101,128,
- 30,125,245,242,238,229,100,128, 2,140,117, 2,204,144,204,155,
- 232,233,242,225,231,225,238, 97,128, 48,148,235,225,244,225,235,
- 225,238, 97,128, 48,244,119,143, 0,119,204,200,205,177,205,187,
- 205,210,205,250,206, 61,206, 69,208, 40,208, 81,208, 93,208,168,
- 208,176,208,183,208,194,208,203, 97, 8,204,218,204,225,204,235,
- 204,246,205, 28,205, 60,205, 72,205,108,227,245,244,101,128, 30,
- 131,229,235,239,242,229,225,110,128, 49, 89,232,233,242,225,231,
- 225,238, 97,128, 48,143,107, 2,204,252,205, 20,225,244,225,235,
- 225,238, 97,129, 48,239,205, 8,232,225,236,230,247,233,228,244,
- 104,128,255,156,239,242,229,225,110,128, 49, 88,243,237,225,236,
- 108, 2,205, 38,205, 49,232,233,242,225,231,225,238, 97,128, 48,
- 142,235,225,244,225,235,225,238, 97,128, 48,238,244,244,239,243,
- 241,245,225,242,101,128, 51, 87,118, 2,205, 78,205, 86,229,228,
- 225,243,104,128, 48, 28,249,245,238,228,229,242,243,227,239,242,
- 229,246,229,242,244,233,227,225,108,128,254, 52,119, 3,205,116,
- 205,125,205,139,225,242,225,226,233, 99,128, 6, 72,230,233,238,
- 225,236,225,242,225,226,233, 99,128,254,238,232,225,237,250,225,
- 225,226,239,246,101, 2,205,154,205,163,225,242,225,226,233, 99,
- 128, 6, 36,230,233,238,225,236,225,242,225,226,233, 99,128,254,
- 134,226,243,241,245,225,242,101,128, 51,221,227,233,242, 99, 2,
- 205,196,205,201,236,101,128, 36,230,245,237,230,236,229,120,128,
- 1,117,100, 2,205,216,205,226,233,229,242,229,243,233,115,128,
- 30,133,239,116, 2,205,233,205,242,225,227,227,229,238,116,128,
- 30,135,226,229,236,239,119,128, 30,137,101, 4,206, 4,206, 15,
- 206, 27,206, 51,232,233,242,225,231,225,238, 97,128, 48,145,233,
- 229,242,243,244,242,225,243,115,128, 33, 24,107, 2,206, 33,206,
- 43,225,244,225,235,225,238, 97,128, 48,241,239,242,229,225,110,
- 128, 49, 94,239,235,239,242,229,225,110,128, 49, 93,231,242,225,
- 246,101,128, 30,129,232,233,244,101, 8,206, 90,206, 99,206,183,
- 207, 17,207,101,207,146,207,198,207,254,226,245,236,236,229,116,
- 128, 37,230, 99, 2,206,105,206,125,233,242,227,236,101,129, 37,
- 203,206,115,233,238,246,229,242,243,101,128, 37,217,239,242,238,
- 229,242,226,242,225,227,235,229,116, 2,206,142,206,162,236,229,
- 230,116,129, 48, 14,206,151,246,229,242,244,233,227,225,108,128,
- 254, 67,242,233,231,232,116,129, 48, 15,206,172,246,229,242,244,
- 233,227,225,108,128,254, 68,100, 2,206,189,206,230,233,225,237,
- 239,238,100,129, 37,199,206,200,227,239,238,244,225,233,238,233,
- 238,231,226,236,225,227,235,243,237,225,236,236,228,233,225,237,
- 239,238,100,128, 37,200,239,247,238,240,239,233,238,244,233,238,
- 103, 2,206,246,207, 6,243,237,225,236,236,244,242,233,225,238,
- 231,236,101,128, 37,191,244,242,233,225,238,231,236,101,128, 37,
- 189,236,101, 2,207, 24,207, 66,230,244,240,239,233,238,244,233,
- 238,103, 2,207, 39,207, 55,243,237,225,236,236,244,242,233,225,
- 238,231,236,101,128, 37,195,244,242,233,225,238,231,236,101,128,
- 37,193,238,244,233,227,245,236,225,242,226,242,225,227,235,229,
- 116, 2,207, 86,207, 93,236,229,230,116,128, 48, 22,242,233,231,
- 232,116,128, 48, 23,242,233,231,232,244,240,239,233,238,244,233,
- 238,103, 2,207,119,207,135,243,237,225,236,236,244,242,233,225,
- 238,231,236,101,128, 37,185,244,242,233,225,238,231,236,101,128,
- 37,183,115, 3,207,154,207,184,207,192,109, 2,207,160,207,172,
- 225,236,236,243,241,245,225,242,101,128, 37,171,233,236,233,238,
- 231,230,225,227,101,128, 38, 58,241,245,225,242,101,128, 37,161,
- 244,225,114,128, 38, 6,116, 2,207,204,207,215,229,236,229,240,
- 232,239,238,101,128, 38, 15,239,242,244,239,233,243,229,243,232,
- 229,236,236,226,242,225,227,235,229,116, 2,207,239,207,246,236,
- 229,230,116,128, 48, 24,242,233,231,232,116,128, 48, 25,245,240,
- 240,239,233,238,244,233,238,103, 2,208, 13,208, 29,243,237,225,
- 236,236,244,242,233,225,238,231,236,101,128, 37,181,244,242,233,
- 225,238,231,236,101,128, 37,179,105, 2,208, 46,208, 57,232,233,
- 242,225,231,225,238, 97,128, 48,144,107, 2,208, 63,208, 73,225,
- 244,225,235,225,238, 97,128, 48,240,239,242,229,225,110,128, 49,
- 95,237,239,238,239,243,240,225,227,101,128,255, 87,111, 4,208,
- 103,208,114,208,139,208,157,232,233,242,225,231,225,238, 97,128,
- 48,146,235,225,244,225,235,225,238, 97,129, 48,242,208,127,232,
- 225,236,230,247,233,228,244,104,128,255,102,110,129, 32,169,208,
- 145,237,239,238,239,243,240,225,227,101,128,255,230,247,225,229,
- 238,244,232,225,105,128, 14, 39,240,225,242,229,110,128, 36,178,
- 242,233,238,103,128, 30,152,243,245,240,229,242,233,239,114,128,
- 2,183,244,245,242,238,229,100,128, 2,141,249,238,110,128, 1,
- 191,120,137, 0,120,208,231,208,242,208,253,209, 6,209, 33,209,
- 46,209, 50,209, 62,209, 70,225,226,239,246,229,227,237, 98,128,
- 3, 61,226,239,240,239,237,239,230,111,128, 49, 18,227,233,242,
- 227,236,101,128, 36,231,100, 2,209, 12,209, 22,233,229,242,229,
- 243,233,115,128, 30,141,239,244,225,227,227,229,238,116,128, 30,
- 139,229,232,225,242,237,229,238,233,225,110,128, 5,109,105,128,
- 3,190,237,239,238,239,243,240,225,227,101,128,255, 88,240,225,
- 242,229,110,128, 36,179,243,245,240,229,242,233,239,114,128, 2,
- 227,121,143, 0,121,209,115,210, 74,210, 97,210,137,212,103,212,
- 111,212,128,212,192,212,204,213,201,213,241,213,253,214, 8,214,
- 29,215, 2, 97, 11,209,139,209,151,209,161,209,168,209,175,209,
- 185,209,210,209,221,210, 3,210, 16,210, 62,225,228,239,243,241,
- 245,225,242,101,128, 51, 78,226,229,238,231,225,236,105,128, 9,
- 175,227,245,244,101,128, 0,253,228,229,246, 97,128, 9, 47,229,
- 235,239,242,229,225,110,128, 49, 82,231,117, 2,209,192,209,201,
- 234,225,242,225,244,105,128, 10,175,242,237,245,235,232,105,128,
- 10, 47,232,233,242,225,231,225,238, 97,128, 48,132,107, 2,209,
- 227,209,251,225,244,225,235,225,238, 97,129, 48,228,209,239,232,
- 225,236,230,247,233,228,244,104,128,255,148,239,242,229,225,110,
- 128, 49, 81,237,225,235,235,225,238,244,232,225,105,128, 14, 78,
- 243,237,225,236,108, 2,210, 26,210, 37,232,233,242,225,231,225,
- 238, 97,128, 48,131,235,225,244,225,235,225,238, 97,129, 48,227,
- 210, 50,232,225,236,230,247,233,228,244,104,128,255,108,244,227,
- 249,242,233,236,236,233, 99,128, 4, 99,227,233,242, 99, 2,210,
- 83,210, 88,236,101,128, 36,232,245,237,230,236,229,120,128, 1,
- 119,100, 2,210,103,210,113,233,229,242,229,243,233,115,128, 0,
- 255,239,116, 2,210,120,210,129,225,227,227,229,238,116,128, 30,
- 143,226,229,236,239,119,128, 30,245,101, 7,210,153,211,161,211,
- 170,211,188,211,220,212, 40,212, 91,104, 8,210,171,210,180,210,
- 214,210,228,211, 45,211, 61,211,120,211,138,225,242,225,226,233,
- 99,128, 6, 74,226,225,242,242,229,101, 2,210,191,210,200,225,
- 242,225,226,233, 99,128, 6,210,230,233,238,225,236,225,242,225,
- 226,233, 99,128,251,175,230,233,238,225,236,225,242,225,226,233,
- 99,128,254,242,232,225,237,250,225,225,226,239,246,101, 4,210,
- 247,211, 0,211, 14,211, 30,225,242,225,226,233, 99,128, 6, 38,
- 230,233,238,225,236,225,242,225,226,233, 99,128,254,138,233,238,
- 233,244,233,225,236,225,242,225,226,233, 99,128,254,139,237,229,
- 228,233,225,236,225,242,225,226,233, 99,128,254,140,233,238,233,
- 244,233,225,236,225,242,225,226,233, 99,128,254,243,237,101, 2,
- 211, 68,211, 81,228,233,225,236,225,242,225,226,233, 99,128,254,
- 244,229,237,105, 2,211, 89,211,104,238,233,244,233,225,236,225,
- 242,225,226,233, 99,128,252,221,243,239,236,225,244,229,228,225,
- 242,225,226,233, 99,128,252, 88,238,239,239,238,230,233,238,225,
- 236,225,242,225,226,233, 99,128,252,148,244,232,242,229,229,228,
- 239,244,243,226,229,236,239,247,225,242,225,226,233, 99,128, 6,
- 209,235,239,242,229,225,110,128, 49, 86,110,129, 0,165,211,176,
- 237,239,238,239,243,240,225,227,101,128,255,229,111, 2,211,194,
- 211,203,235,239,242,229,225,110,128, 49, 85,242,233,238,232,233,
- 229,245,232,235,239,242,229,225,110,128, 49,134,114, 3,211,228,
- 212, 8,212, 20,225,232,226,229,238,249,239,237,111, 2,211,242,
- 211,251,232,229,226,242,229,119,128, 5,170,236,229,230,244,232,
- 229,226,242,229,119,128, 5,170,233,227,249,242,233,236,236,233,
- 99,128, 4, 75,245,228,233,229,242,229,243,233,243,227,249,242,
- 233,236,236,233, 99,128, 4,249,243,233,229,245,238,103, 3,212,
- 53,212, 62,212, 78,235,239,242,229,225,110,128, 49,129,240,225,
- 238,243,233,239,243,235,239,242,229,225,110,128, 49,131,243,233,
- 239,243,235,239,242,229,225,110,128, 49,130,244,233,246,232,229,
- 226,242,229,119,128, 5,154,231,242,225,246,101,128, 30,243,232,
- 239,239,107,129, 1,180,212,120,225,226,239,246,101,128, 30,247,
- 105, 5,212,140,212,151,212,162,212,171,212,179,225,242,237,229,
- 238,233,225,110,128, 5,117,227,249,242,233,236,236,233, 99,128,
- 4, 87,235,239,242,229,225,110,128, 49, 98,238,249,225,238,103,
- 128, 38, 47,247,238,225,242,237,229,238,233,225,110,128, 5,130,
- 237,239,238,239,243,240,225,227,101,128,255, 89,111, 7,212,220,
- 213, 34,213, 45,213, 55,213, 93,213,139,213,148,100,131, 5,217,
- 212,230,212,250,213, 3,228,225,231,229,243,104,129,251, 57,212,
- 241,232,229,226,242,229,119,128,251, 57,232,229,226,242,229,119,
- 128, 5,217,249,239,100, 2,213, 11,213, 20,232,229,226,242,229,
- 119,128, 5,242,240,225,244,225,232,232,229,226,242,229,119,128,
- 251, 31,232,233,242,225,231,225,238, 97,128, 48,136,233,235,239,
- 242,229,225,110,128, 49,137,107, 2,213, 61,213, 85,225,244,225,
- 235,225,238, 97,129, 48,232,213, 73,232,225,236,230,247,233,228,
- 244,104,128,255,150,239,242,229,225,110,128, 49, 91,243,237,225,
- 236,108, 2,213,103,213,114,232,233,242,225,231,225,238, 97,128,
- 48,135,235,225,244,225,235,225,238, 97,129, 48,231,213,127,232,
- 225,236,230,247,233,228,244,104,128,255,110,244,231,242,229,229,
- 107,128, 3,243,121, 2,213,154,213,191, 97, 2,213,160,213,170,
- 229,235,239,242,229,225,110,128, 49,136,107, 2,213,176,213,184,
- 239,242,229,225,110,128, 49,135,244,232,225,105,128, 14, 34,233,
- 238,231,244,232,225,105,128, 14, 13,112, 2,213,207,213,214,225,
- 242,229,110,128, 36,180,239,231,229,231,242,225,237,237,229,238,
- 105,129, 3,122,213,230,231,242,229,229,235,227,237, 98,128, 3,
- 69,114,129, 1,166,213,247,233,238,103,128, 30,153,243,245,240,
- 229,242,233,239,114,128, 2,184,116, 2,214, 14,214, 21,233,236,
- 228,101,128, 30,249,245,242,238,229,100,128, 2,142,117, 5,214,
- 41,214, 52,214, 62,214,100,214,232,232,233,242,225,231,225,238,
- 97,128, 48,134,233,235,239,242,229,225,110,128, 49,140,107, 2,
- 214, 68,214, 92,225,244,225,235,225,238, 97,129, 48,230,214, 80,
- 232,225,236,230,247,233,228,244,104,128,255,149,239,242,229,225,
- 110,128, 49, 96,115, 3,214,108,214,146,214,187,226,233,103, 2,
- 214,116,214,127,227,249,242,233,236,236,233, 99,128, 4,107,233,
- 239,244,233,230,233,229,228,227,249,242,233,236,236,233, 99,128,
- 4,109,236,233,244,244,236,101, 2,214,157,214,168,227,249,242,
- 233,236,236,233, 99,128, 4,103,233,239,244,233,230,233,229,228,
- 227,249,242,233,236,236,233, 99,128, 4,105,237,225,236,108, 2,
- 214,196,214,207,232,233,242,225,231,225,238, 97,128, 48,133,235,
- 225,244,225,235,225,238, 97,129, 48,229,214,220,232,225,236,230,
- 247,233,228,244,104,128,255,109,249,101, 2,214,239,214,248,235,
- 239,242,229,225,110,128, 49,139,239,235,239,242,229,225,110,128,
- 49,138,249, 97, 2,215, 9,215, 19,226,229,238,231,225,236,105,
- 128, 9,223,228,229,246, 97,128, 9, 95,122,142, 0,122,215, 58,
- 216, 66,216, 77,216,120,216,147,217,182,218, 34,218, 76,218, 88,
- 218,100,218,128,218,136,218,152,218,161, 97, 10,215, 80,215, 91,
- 215, 98,215,105,215,116,215,194,215,224,215,235,216, 15,216, 27,
- 225,242,237,229,238,233,225,110,128, 5,102,227,245,244,101,128,
- 1,122,228,229,246, 97,128, 9, 91,231,245,242,237,245,235,232,
- 105,128, 10, 91,104, 4,215,126,215,135,215,149,215,179,225,242,
- 225,226,233, 99,128, 6, 56,230,233,238,225,236,225,242,225,226,
- 233, 99,128,254,198,105, 2,215,155,215,170,238,233,244,233,225,
- 236,225,242,225,226,233, 99,128,254,199,242,225,231,225,238, 97,
- 128, 48, 86,237,229,228,233,225,236,225,242,225,226,233, 99,128,
- 254,200,233,110, 2,215,201,215,210,225,242,225,226,233, 99,128,
- 6, 50,230,233,238,225,236,225,242,225,226,233, 99,128,254,176,
- 235,225,244,225,235,225,238, 97,128, 48,182,241,229,102, 2,215,
- 243,216, 1,231,225,228,239,236,232,229,226,242,229,119,128, 5,
- 149,241,225,244,225,238,232,229,226,242,229,119,128, 5,148,242,
- 241,225,232,229,226,242,229,119,128, 5,152,249,233,110,130, 5,
- 214,216, 37,216, 57,228,225,231,229,243,104,129,251, 54,216, 48,
- 232,229,226,242,229,119,128,251, 54,232,229,226,242,229,119,128,
- 5,214,226,239,240,239,237,239,230,111,128, 49, 23, 99, 3,216,
- 85,216, 92,216,114,225,242,239,110,128, 1,126,233,242, 99, 2,
- 216,100,216,105,236,101,128, 36,233,245,237,230,236,229,120,128,
- 30,145,245,242,108,128, 2,145,228,239,116,130, 1,124,216,130,
- 216,139,225,227,227,229,238,116,128, 1,124,226,229,236,239,119,
- 128, 30,147,101, 6,216,161,216,172,216,215,216,226,216,237,217,
- 177,227,249,242,233,236,236,233, 99,128, 4, 55,100, 2,216,178,
- 216,197,229,243,227,229,238,228,229,242,227,249,242,233,236,236,
- 233, 99,128, 4,153,233,229,242,229,243,233,243,227,249,242,233,
- 236,236,233, 99,128, 4,223,232,233,242,225,231,225,238, 97,128,
- 48, 92,235,225,244,225,235,225,238, 97,128, 48,188,242,111,140,
- 0, 48,217, 10,217, 19,217, 29,217, 36,217, 61,217, 74,217, 85,
- 217, 97,217,108,217,118,217,129,217,136,225,242,225,226,233, 99,
- 128, 6, 96,226,229,238,231,225,236,105,128, 9,230,228,229,246,
- 97,128, 9,102,231,117, 2,217, 43,217, 52,234,225,242,225,244,
- 105,128, 10,230,242,237,245,235,232,105,128, 10,102,232,225,227,
- 235,225,242,225,226,233, 99,128, 6, 96,233,238,230,229,242,233,
- 239,114,128, 32,128,237,239,238,239,243,240,225,227,101,128,255,
- 16,239,236,228,243,244,249,236,101,128,247, 48,240,229,242,243,
- 233,225,110,128, 6,240,243,245,240,229,242,233,239,114,128, 32,
- 112,244,232,225,105,128, 14, 80,247,233,228,244,104, 3,217,148,
- 217,157,217,169,234,239,233,238,229,114,128,254,255,238,239,238,
- 234,239,233,238,229,114,128, 32, 12,243,240,225,227,101,128, 32,
- 11,244, 97,128, 3,182,104, 2,217,188,217,199,226,239,240,239,
- 237,239,230,111,128, 49, 19,101, 4,217,209,217,220,217,236,217,
- 247,225,242,237,229,238,233,225,110,128, 5,106,226,242,229,246,
- 229,227,249,242,233,236,236,233, 99,128, 4,194,227,249,242,233,
- 236,236,233, 99,128, 4, 54,100, 2,217,253,218, 16,229,243,227,
- 229,238,228,229,242,227,249,242,233,236,236,233, 99,128, 4,151,
- 233,229,242,229,243,233,243,227,249,242,233,236,236,233, 99,128,
- 4,221,105, 3,218, 42,218, 53,218, 64,232,233,242,225,231,225,
- 238, 97,128, 48, 88,235,225,244,225,235,225,238, 97,128, 48,184,
- 238,239,242,232,229,226,242,229,119,128, 5,174,236,233,238,229,
- 226,229,236,239,119,128, 30,149,237,239,238,239,243,240,225,227,
- 101,128,255, 90,111, 2,218,106,218,117,232,233,242,225,231,225,
- 238, 97,128, 48, 94,235,225,244,225,235,225,238, 97,128, 48,190,
- 240,225,242,229,110,128, 36,181,242,229,244,242,239,230,236,229,
- 248,232,239,239,107,128, 2,144,243,244,242,239,235,101,128, 1,
- 182,117, 2,218,167,218,178,232,233,242,225,231,225,238, 97,128,
- 48, 90,235,225,244,225,235,225,238, 97,128, 48,186
- }
-#endif /* DEFINE_PS_TABLES */
- ;
-
-
-#ifdef DEFINE_PS_TABLES
- /*
- * This function searches the compressed table efficiently.
- */
- static unsigned long
- ft_get_adobe_glyph_index( const char* name,
- const char* limit )
- {
- int c = 0;
- int count, min, max;
- const unsigned char* p = ft_adobe_glyph_list;
-
-
- if ( name == 0 || name >= limit )
- goto NotFound;
-
- c = *name++;
- count = p[1];
- p += 2;
-
- min = 0;
- max = count;
-
- while ( min < max )
- {
- int mid = ( min + max ) >> 1;
- const unsigned char* q = p + mid * 2;
- int c2;
-
-
- q = ft_adobe_glyph_list + ( ( (int)q[0] << 8 ) | q[1] );
-
- c2 = q[0] & 127;
- if ( c2 == c )
- {
- p = q;
- goto Found;
- }
- if ( c2 < c )
- min = mid + 1;
- else
- max = mid;
- }
- goto NotFound;
-
- Found:
- for (;;)
- {
- /* assert (*p & 127) == c */
-
- if ( name >= limit )
- {
- if ( (p[0] & 128) == 0 &&
- (p[1] & 128) != 0 )
- return (unsigned long)( ( (int)p[2] << 8 ) | p[3] );
-
- goto NotFound;
- }
- c = *name++;
- if ( p[0] & 128 )
- {
- p++;
- if ( c != (p[0] & 127) )
- goto NotFound;
-
- continue;
- }
-
- p++;
- count = p[0] & 127;
- if ( p[0] & 128 )
- p += 2;
-
- p++;
-
- for ( ; count > 0; count--, p += 2 )
- {
- int offset = ( (int)p[0] << 8 ) | p[1];
- const unsigned char* q = ft_adobe_glyph_list + offset;
-
- if ( c == ( q[0] & 127 ) )
- {
- p = q;
- goto NextIter;
- }
- }
- goto NotFound;
-
- NextIter:
- ;
- }
-
- NotFound:
- return 0;
- }
-#endif /* DEFINE_PS_TABLES */
-
-#endif /* FT_CONFIG_OPTION_ADOBE_GLYPH_LIST */
-
-
-/* END */
diff --git a/src/psnames/rules.mk b/src/psnames/rules.mk
deleted file mode 100644
index 69fa73220..000000000
--- a/src/psnames/rules.mk
+++ /dev/null
@@ -1,74 +0,0 @@
-#
-# FreeType 2 PSNames driver configuration rules
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# PSNames driver directory
-#
-PSNAMES_DIR := $(SRC_DIR)/psnames
-
-
-# compilation flags for the driver
-#
-PSNAMES_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(PSNAMES_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# PSNames driver sources (i.e., C files)
-#
-PSNAMES_DRV_SRC := $(PSNAMES_DIR)/psmodule.c \
- $(PSNAMES_DIR)/pspic.c
-
-
-# PSNames driver headers
-#
-PSNAMES_DRV_H := $(PSNAMES_DRV_SRC:%.c=%.h) \
- $(PSNAMES_DIR)/psnamerr.h \
- $(PSNAMES_DIR)/pstables.h
-
-
-# PSNames driver object(s)
-#
-# PSNAMES_DRV_OBJ_M is used during `multi' builds
-# PSNAMES_DRV_OBJ_S is used during `single' builds
-#
-PSNAMES_DRV_OBJ_M := $(PSNAMES_DRV_SRC:$(PSNAMES_DIR)/%.c=$(OBJ_DIR)/%.$O)
-PSNAMES_DRV_OBJ_S := $(OBJ_DIR)/psnames.$O
-
-# PSNames driver source file for single build
-#
-PSNAMES_DRV_SRC_S := $(PSNAMES_DIR)/psnames.c
-
-
-# PSNames driver - single object
-#
-$(PSNAMES_DRV_OBJ_S): $(PSNAMES_DRV_SRC_S) $(PSNAMES_DRV_SRC) \
- $(FREETYPE_H) $(PSNAMES_DRV_H)
- $(PSNAMES_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(PSNAMES_DRV_SRC_S))
-
-
-# PSNames driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(PSNAMES_DIR)/%.c $(FREETYPE_H) $(PSNAMES_DRV_H)
- $(PSNAMES_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(PSNAMES_DRV_OBJ_S)
-DRV_OBJS_M += $(PSNAMES_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/raster/Jamfile b/src/raster/Jamfile
deleted file mode 100644
index c9f3d6c63..000000000
--- a/src/raster/Jamfile
+++ /dev/null
@@ -1,32 +0,0 @@
-# FreeType 2 src/raster Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) raster ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = ftraster
- ftrend1
- rastpic
- ;
- }
- else
- {
- _sources = raster ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/raster Jamfile
diff --git a/src/raster/ftmisc.h b/src/raster/ftmisc.h
deleted file mode 100644
index d1e6627ab..000000000
--- a/src/raster/ftmisc.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmisc.h */
-/* */
-/* Miscellaneous macros for stand-alone rasterizer (specification */
-/* only). */
-/* */
-/* Copyright 2005-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used */
-/* modified and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /***************************************************/
- /* */
- /* This file is *not* portable! You have to adapt */
- /* its definitions to your platform. */
- /* */
- /***************************************************/
-
-#ifndef FTMISC_H_
-#define FTMISC_H_
-
-
- /* memset */
-#include FT_CONFIG_STANDARD_LIBRARY_H
-
-#define FT_BEGIN_HEADER
-#define FT_END_HEADER
-
-#define FT_LOCAL_DEF( x ) static x
-
-
- /* from include/freetype/fttypes.h */
-
- typedef unsigned char FT_Byte;
- typedef signed int FT_Int;
- typedef unsigned int FT_UInt;
- typedef signed long FT_Long;
- typedef unsigned long FT_ULong;
- typedef signed long FT_F26Dot6;
- typedef int FT_Error;
-
-#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
- ( ( (FT_ULong)_x1 << 24 ) | \
- ( (FT_ULong)_x2 << 16 ) | \
- ( (FT_ULong)_x3 << 8 ) | \
- (FT_ULong)_x4 )
-
-
- /* from include/freetype/ftsystem.h */
-
- typedef struct FT_MemoryRec_* FT_Memory;
-
- typedef void* (*FT_Alloc_Func)( FT_Memory memory,
- long size );
-
- typedef void (*FT_Free_Func)( FT_Memory memory,
- void* block );
-
- typedef void* (*FT_Realloc_Func)( FT_Memory memory,
- long cur_size,
- long new_size,
- void* block );
-
- typedef struct FT_MemoryRec_
- {
- void* user;
-
- FT_Alloc_Func alloc;
- FT_Free_Func free;
- FT_Realloc_Func realloc;
-
- } FT_MemoryRec;
-
-
- /* from src/ftcalc.c */
-
-#if ( defined _WIN32 || defined _WIN64 )
-
- typedef __int64 FT_Int64;
-
-#else
-
-#include "inttypes.h"
-
- typedef int64_t FT_Int64;
-
-#endif
-
-
- static FT_Long
- FT_MulDiv( FT_Long a,
- FT_Long b,
- FT_Long c )
- {
- FT_Int s;
- FT_Long d;
-
-
- s = 1;
- if ( a < 0 ) { a = -a; s = -1; }
- if ( b < 0 ) { b = -b; s = -s; }
- if ( c < 0 ) { c = -c; s = -s; }
-
- d = (FT_Long)( c > 0 ? ( (FT_Int64)a * b + ( c >> 1 ) ) / c
- : 0x7FFFFFFFL );
-
- return ( s > 0 ) ? d : -d;
- }
-
-
- static FT_Long
- FT_MulDiv_No_Round( FT_Long a,
- FT_Long b,
- FT_Long c )
- {
- FT_Int s;
- FT_Long d;
-
-
- s = 1;
- if ( a < 0 ) { a = -a; s = -1; }
- if ( b < 0 ) { b = -b; s = -s; }
- if ( c < 0 ) { c = -c; s = -s; }
-
- d = (FT_Long)( c > 0 ? (FT_Int64)a * b / c
- : 0x7FFFFFFFL );
-
- return ( s > 0 ) ? d : -d;
- }
-
-#endif /* FTMISC_H_ */
-
-
-/* END */
diff --git a/src/raster/ftraster.c b/src/raster/ftraster.c
deleted file mode 100644
index c5643f633..000000000
--- a/src/raster/ftraster.c
+++ /dev/null
@@ -1,3225 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftraster.c */
-/* */
-/* The FreeType glyph rasterizer (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* This file can be compiled without the rest of the FreeType engine, by */
- /* defining the STANDALONE_ macro when compiling it. You also need to */
- /* put the files `ftimage.h' and `ftmisc.h' into the $(incdir) */
- /* directory. Typically, you should do something like */
- /* */
- /* - copy `src/raster/ftraster.c' (this file) to your current directory */
- /* */
- /* - copy `include/freetype/ftimage.h' and `src/raster/ftmisc.h' to your */
- /* current directory */
- /* */
- /* - compile `ftraster' with the STANDALONE_ macro defined, as in */
- /* */
- /* cc -c -DSTANDALONE_ ftraster.c */
- /* */
- /* The renderer can be initialized with a call to */
- /* `ft_standard_raster.raster_new'; a bitmap can be generated */
- /* with a call to `ft_standard_raster.raster_render'. */
- /* */
- /* See the comments and documentation in the file `ftimage.h' for more */
- /* details on how the raster works. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This is a rewrite of the FreeType 1.x scan-line converter */
- /* */
- /*************************************************************************/
-
-#ifdef STANDALONE_
-
- /* The size in bytes of the render pool used by the scan-line converter */
- /* to do all of its work. */
-#define FT_RENDER_POOL_SIZE 16384L
-
-#define FT_CONFIG_STANDARD_LIBRARY_H <stdlib.h>
-
-#include <string.h> /* for memset */
-
-#include "ftmisc.h"
-#include "ftimage.h"
-
-#else /* !STANDALONE_ */
-
-#include <ft2build.h>
-#include "ftraster.h"
-#include FT_INTERNAL_CALC_H /* for FT_MulDiv and FT_MulDiv_No_Round */
-
-#include "rastpic.h"
-
-#endif /* !STANDALONE_ */
-
-
- /*************************************************************************/
- /* */
- /* A simple technical note on how the raster works */
- /* ----------------------------------------------- */
- /* */
- /* Converting an outline into a bitmap is achieved in several steps: */
- /* */
- /* 1 - Decomposing the outline into successive `profiles'. Each */
- /* profile is simply an array of scanline intersections on a given */
- /* dimension. A profile's main attributes are */
- /* */
- /* o its scanline position boundaries, i.e. `Ymin' and `Ymax' */
- /* */
- /* o an array of intersection coordinates for each scanline */
- /* between `Ymin' and `Ymax' */
- /* */
- /* o a direction, indicating whether it was built going `up' or */
- /* `down', as this is very important for filling rules */
- /* */
- /* o its drop-out mode */
- /* */
- /* 2 - Sweeping the target map's scanlines in order to compute segment */
- /* `spans' which are then filled. Additionally, this pass */
- /* performs drop-out control. */
- /* */
- /* The outline data is parsed during step 1 only. The profiles are */
- /* built from the bottom of the render pool, used as a stack. The */
- /* following graphics shows the profile list under construction: */
- /* */
- /* __________________________________________________________ _ _ */
- /* | | | | | */
- /* | profile | coordinates for | profile | coordinates for |--> */
- /* | 1 | profile 1 | 2 | profile 2 |--> */
- /* |_________|_________________|_________|_________________|__ _ _ */
- /* */
- /* ^ ^ */
- /* | | */
- /* start of render pool top */
- /* */
- /* The top of the profile stack is kept in the `top' variable. */
- /* */
- /* As you can see, a profile record is pushed on top of the render */
- /* pool, which is then followed by its coordinates/intersections. If */
- /* a change of direction is detected in the outline, a new profile is */
- /* generated until the end of the outline. */
- /* */
- /* Note that when all profiles have been generated, the function */
- /* Finalize_Profile_Table() is used to record, for each profile, its */
- /* bottom-most scanline as well as the scanline above its upmost */
- /* boundary. These positions are called `y-turns' because they (sort */
- /* of) correspond to local extrema. They are stored in a sorted list */
- /* built from the top of the render pool as a downwards stack: */
- /* */
- /* _ _ _______________________________________ */
- /* | | */
- /* <--| sorted list of | */
- /* <--| extrema scanlines | */
- /* _ _ __________________|____________________| */
- /* */
- /* ^ ^ */
- /* | | */
- /* maxBuff sizeBuff = end of pool */
- /* */
- /* This list is later used during the sweep phase in order to */
- /* optimize performance (see technical note on the sweep below). */
- /* */
- /* Of course, the raster detects whether the two stacks collide and */
- /* handles the situation properly. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /*************************************************************************/
- /** **/
- /** CONFIGURATION MACROS **/
- /** **/
- /*************************************************************************/
- /*************************************************************************/
-
- /* define DEBUG_RASTER if you want to compile a debugging version */
-/* #define DEBUG_RASTER */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /** **/
- /** OTHER MACROS (do not change) **/
- /** **/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_raster
-
-
-#ifdef STANDALONE_
-
- /* Auxiliary macros for token concatenation. */
-#define FT_ERR_XCAT( x, y ) x ## y
-#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y )
-
- /* This macro is used to indicate that a function parameter is unused. */
- /* Its purpose is simply to reduce compiler warnings. Note also that */
- /* simply defining it as `(void)x' doesn't avoid warnings with certain */
- /* ANSI compilers (e.g. LCC). */
-#define FT_UNUSED( x ) (x) = (x)
-
- /* Disable the tracing mechanism for simplicity -- developers can */
- /* activate it easily by redefining these macros. */
-#ifndef FT_ERROR
-#define FT_ERROR( x ) do { } while ( 0 ) /* nothing */
-#endif
-
-#ifndef FT_TRACE
-#define FT_TRACE( x ) do { } while ( 0 ) /* nothing */
-#define FT_TRACE1( x ) do { } while ( 0 ) /* nothing */
-#define FT_TRACE6( x ) do { } while ( 0 ) /* nothing */
-#define FT_TRACE7( x ) do { } while ( 0 ) /* nothing */
-#endif
-
-#ifndef FT_THROW
-#define FT_THROW( e ) FT_ERR_CAT( Raster_Err_, e )
-#endif
-
-#define Raster_Err_None 0
-#define Raster_Err_Not_Ini -1
-#define Raster_Err_Overflow -2
-#define Raster_Err_Neg_Height -3
-#define Raster_Err_Invalid -4
-#define Raster_Err_Unsupported -5
-
-#define ft_memset memset
-
-#define FT_DEFINE_RASTER_FUNCS( class_, glyph_format_, raster_new_, \
- raster_reset_, raster_set_mode_, \
- raster_render_, raster_done_ ) \
- const FT_Raster_Funcs class_ = \
- { \
- glyph_format_, \
- raster_new_, \
- raster_reset_, \
- raster_set_mode_, \
- raster_render_, \
- raster_done_ \
- };
-
-#else /* !STANDALONE_ */
-
-
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H /* for FT_TRACE, FT_ERROR, and FT_THROW */
-
-#include "rasterrs.h"
-
-#define Raster_Err_None FT_Err_Ok
-#define Raster_Err_Not_Ini Raster_Err_Raster_Uninitialized
-#define Raster_Err_Overflow Raster_Err_Raster_Overflow
-#define Raster_Err_Neg_Height Raster_Err_Raster_Negative_Height
-#define Raster_Err_Invalid Raster_Err_Invalid_Outline
-#define Raster_Err_Unsupported Raster_Err_Cannot_Render_Glyph
-
-
-#endif /* !STANDALONE_ */
-
-
-#ifndef FT_MEM_SET
-#define FT_MEM_SET( d, s, c ) ft_memset( d, s, c )
-#endif
-
-#ifndef FT_MEM_ZERO
-#define FT_MEM_ZERO( dest, count ) FT_MEM_SET( dest, 0, count )
-#endif
-
-#ifndef FT_ZERO
-#define FT_ZERO( p ) FT_MEM_ZERO( p, sizeof ( *(p) ) )
-#endif
-
- /* FMulDiv means `Fast MulDiv'; it is used in case where `b' is */
- /* typically a small value and the result of a*b is known to fit into */
- /* 32 bits. */
-#define FMulDiv( a, b, c ) ( (a) * (b) / (c) )
-
- /* On the other hand, SMulDiv means `Slow MulDiv', and is used typically */
- /* for clipping computations. It simply uses the FT_MulDiv() function */
- /* defined in `ftcalc.h'. */
-#define SMulDiv FT_MulDiv
-#define SMulDiv_No_Round FT_MulDiv_No_Round
-
- /* The rasterizer is a very general purpose component; please leave */
- /* the following redefinitions there (you never know your target */
- /* environment). */
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#ifndef NULL
-#define NULL (void*)0
-#endif
-
-#ifndef SUCCESS
-#define SUCCESS 0
-#endif
-
-#ifndef FAILURE
-#define FAILURE 1
-#endif
-
-
-#define MaxBezier 32 /* The maximum number of stacked Bezier curves. */
- /* Setting this constant to more than 32 is a */
- /* pure waste of space. */
-
-#define Pixel_Bits 6 /* fractional bits of *input* coordinates */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /** **/
- /** SIMPLE TYPE DECLARATIONS **/
- /** **/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef int Int;
- typedef unsigned int UInt;
- typedef short Short;
- typedef unsigned short UShort, *PUShort;
- typedef long Long, *PLong;
- typedef unsigned long ULong;
-
- typedef unsigned char Byte, *PByte;
- typedef char Bool;
-
-
- typedef union Alignment_
- {
- Long l;
- void* p;
- void (*f)(void);
-
- } Alignment, *PAlignment;
-
-
- typedef struct TPoint_
- {
- Long x;
- Long y;
-
- } TPoint;
-
-
- /* values for the `flags' bit field */
-#define Flow_Up 0x08U
-#define Overshoot_Top 0x10U
-#define Overshoot_Bottom 0x20U
-
-
- /* States of each line, arc, and profile */
- typedef enum TStates_
- {
- Unknown_State,
- Ascending_State,
- Descending_State,
- Flat_State
-
- } TStates;
-
-
- typedef struct TProfile_ TProfile;
- typedef TProfile* PProfile;
-
- struct TProfile_
- {
- FT_F26Dot6 X; /* current coordinate during sweep */
- PProfile link; /* link to next profile (various purposes) */
- PLong offset; /* start of profile's data in render pool */
- UShort flags; /* Bit 0-2: drop-out mode */
- /* Bit 3: profile orientation (up/down) */
- /* Bit 4: is top profile? */
- /* Bit 5: is bottom profile? */
- Long height; /* profile's height in scanlines */
- Long start; /* profile's starting scanline */
-
- Int countL; /* number of lines to step before this */
- /* profile becomes drawable */
-
- PProfile next; /* next profile in same contour, used */
- /* during drop-out control */
- };
-
- typedef PProfile TProfileList;
- typedef PProfile* PProfileList;
-
-
- /* Simple record used to implement a stack of bands, required */
- /* by the sub-banding mechanism */
- typedef struct black_TBand_
- {
- Short y_min; /* band's minimum */
- Short y_max; /* band's maximum */
-
- } black_TBand;
-
-
-#define AlignProfileSize \
- ( ( sizeof ( TProfile ) + sizeof ( Alignment ) - 1 ) / sizeof ( Long ) )
-
-
-#undef RAS_ARG
-#undef RAS_ARGS
-#undef RAS_VAR
-#undef RAS_VARS
-
-#ifdef FT_STATIC_RASTER
-
-
-#define RAS_ARGS /* void */
-#define RAS_ARG /* void */
-
-#define RAS_VARS /* void */
-#define RAS_VAR /* void */
-
-#define FT_UNUSED_RASTER do { } while ( 0 )
-
-
-#else /* !FT_STATIC_RASTER */
-
-
-#define RAS_ARGS black_PWorker worker,
-#define RAS_ARG black_PWorker worker
-
-#define RAS_VARS worker,
-#define RAS_VAR worker
-
-#define FT_UNUSED_RASTER FT_UNUSED( worker )
-
-
-#endif /* !FT_STATIC_RASTER */
-
-
- typedef struct black_TWorker_ black_TWorker, *black_PWorker;
-
-
- /* prototypes used for sweep function dispatch */
- typedef void
- Function_Sweep_Init( RAS_ARGS Short* min,
- Short* max );
-
- typedef void
- Function_Sweep_Span( RAS_ARGS Short y,
- FT_F26Dot6 x1,
- FT_F26Dot6 x2,
- PProfile left,
- PProfile right );
-
- typedef void
- Function_Sweep_Step( RAS_ARG );
-
-
- /* NOTE: These operations are only valid on 2's complement processors */
-#undef FLOOR
-#undef CEILING
-#undef TRUNC
-#undef SCALED
-
-#define FLOOR( x ) ( (x) & -ras.precision )
-#define CEILING( x ) ( ( (x) + ras.precision - 1 ) & -ras.precision )
-#define TRUNC( x ) ( (Long)(x) >> ras.precision_bits )
-#define FRAC( x ) ( (x) & ( ras.precision - 1 ) )
-#define SCALED( x ) ( ( (x) < 0 ? -( -(x) << ras.scale_shift ) \
- : ( (x) << ras.scale_shift ) ) \
- - ras.precision_half )
-
-#define IS_BOTTOM_OVERSHOOT( x ) \
- (Bool)( CEILING( x ) - x >= ras.precision_half )
-#define IS_TOP_OVERSHOOT( x ) \
- (Bool)( x - FLOOR( x ) >= ras.precision_half )
-
-#if FT_RENDER_POOL_SIZE > 2048
-#define FT_MAX_BLACK_POOL ( FT_RENDER_POOL_SIZE / sizeof ( Long ) )
-#else
-#define FT_MAX_BLACK_POOL ( 2048 / sizeof ( Long ) )
-#endif
-
- /* The most used variables are positioned at the top of the structure. */
- /* Thus, their offset can be coded with less opcodes, resulting in a */
- /* smaller executable. */
-
- struct black_TWorker_
- {
- Int precision_bits; /* precision related variables */
- Int precision;
- Int precision_half;
- Int precision_shift;
- Int precision_step;
- Int precision_jitter;
-
- Int scale_shift; /* == precision_shift for bitmaps */
- /* == precision_shift+1 for pixmaps */
-
- PLong buff; /* The profiles buffer */
- PLong sizeBuff; /* Render pool size */
- PLong maxBuff; /* Profiles buffer size */
- PLong top; /* Current cursor in buffer */
-
- FT_Error error;
-
- Int numTurns; /* number of Y-turns in outline */
-
- TPoint* arc; /* current Bezier arc pointer */
-
- UShort bWidth; /* target bitmap width */
- PByte bTarget; /* target bitmap buffer */
- PByte gTarget; /* target pixmap buffer */
-
- Long lastX, lastY;
- Long minY, maxY;
-
- UShort num_Profs; /* current number of profiles */
-
- Bool fresh; /* signals a fresh new profile which */
- /* `start' field must be completed */
- Bool joint; /* signals that the last arc ended */
- /* exactly on a scanline. Allows */
- /* removal of doublets */
- PProfile cProfile; /* current profile */
- PProfile fProfile; /* head of linked list of profiles */
- PProfile gProfile; /* contour's first profile in case */
- /* of impact */
-
- TStates state; /* rendering state */
-
- FT_Bitmap target; /* description of target bit/pixmap */
- FT_Outline outline;
-
- Long traceOfs; /* current offset in target bitmap */
- Long traceG; /* current offset in target pixmap */
-
- Short traceIncr; /* sweep's increment in target bitmap */
-
- /* dispatch variables */
-
- Function_Sweep_Init* Proc_Sweep_Init;
- Function_Sweep_Span* Proc_Sweep_Span;
- Function_Sweep_Span* Proc_Sweep_Drop;
- Function_Sweep_Step* Proc_Sweep_Step;
-
- Byte dropOutControl; /* current drop_out control method */
-
- Bool second_pass; /* indicates whether a horizontal pass */
- /* should be performed to control */
- /* drop-out accurately when calling */
- /* Render_Glyph. */
-
- TPoint arcs[3 * MaxBezier + 1]; /* The Bezier stack */
-
- black_TBand band_stack[16]; /* band stack used for sub-banding */
- Int band_top; /* band stack top */
-
- };
-
-
- typedef struct black_TRaster_
- {
- void* memory;
-
- } black_TRaster, *black_PRaster;
-
-#ifdef FT_STATIC_RASTER
-
- static black_TWorker cur_ras;
-#define ras cur_ras
-
-#else /* !FT_STATIC_RASTER */
-
-#define ras (*worker)
-
-#endif /* !FT_STATIC_RASTER */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /** **/
- /** PROFILES COMPUTATION **/
- /** **/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Set_High_Precision */
- /* */
- /* <Description> */
- /* Set precision variables according to param flag. */
- /* */
- /* <Input> */
- /* High :: Set to True for high precision (typically for ppem < 24), */
- /* false otherwise. */
- /* */
- static void
- Set_High_Precision( RAS_ARGS Int High )
- {
- /*
- * `precision_step' is used in `Bezier_Up' to decide when to split a
- * given y-monotonous Bezier arc that crosses a scanline before
- * approximating it as a straight segment. The default value of 32 (for
- * low accuracy) corresponds to
- *
- * 32 / 64 == 0.5 pixels,
- *
- * while for the high accuracy case we have
- *
- * 256 / (1 << 12) = 0.0625 pixels.
- *
- * `precision_jitter' is an epsilon threshold used in
- * `Vertical_Sweep_Span' to deal with small imperfections in the Bezier
- * decomposition (after all, we are working with approximations only);
- * it avoids switching on additional pixels which would cause artifacts
- * otherwise.
- *
- * The value of `precision_jitter' has been determined heuristically.
- *
- */
-
- if ( High )
- {
- ras.precision_bits = 12;
- ras.precision_step = 256;
- ras.precision_jitter = 30;
- }
- else
- {
- ras.precision_bits = 6;
- ras.precision_step = 32;
- ras.precision_jitter = 2;
- }
-
- FT_TRACE6(( "Set_High_Precision(%s)\n", High ? "true" : "false" ));
-
- ras.precision = 1 << ras.precision_bits;
- ras.precision_half = ras.precision / 2;
- ras.precision_shift = ras.precision_bits - Pixel_Bits;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* New_Profile */
- /* */
- /* <Description> */
- /* Create a new profile in the render pool. */
- /* */
- /* <Input> */
- /* aState :: The state/orientation of the new profile. */
- /* */
- /* overshoot :: Whether the profile's unrounded start position */
- /* differs by at least a half pixel. */
- /* */
- /* <Return> */
- /* SUCCESS on success. FAILURE in case of overflow or of incoherent */
- /* profile. */
- /* */
- static Bool
- New_Profile( RAS_ARGS TStates aState,
- Bool overshoot )
- {
- if ( !ras.fProfile )
- {
- ras.cProfile = (PProfile)ras.top;
- ras.fProfile = ras.cProfile;
- ras.top += AlignProfileSize;
- }
-
- if ( ras.top >= ras.maxBuff )
- {
- ras.error = FT_THROW( Overflow );
- return FAILURE;
- }
-
- ras.cProfile->flags = 0;
- ras.cProfile->start = 0;
- ras.cProfile->height = 0;
- ras.cProfile->offset = ras.top;
- ras.cProfile->link = (PProfile)0;
- ras.cProfile->next = (PProfile)0;
- ras.cProfile->flags = ras.dropOutControl;
-
- switch ( aState )
- {
- case Ascending_State:
- ras.cProfile->flags |= Flow_Up;
- if ( overshoot )
- ras.cProfile->flags |= Overshoot_Bottom;
-
- FT_TRACE6(( " new ascending profile = %p\n", ras.cProfile ));
- break;
-
- case Descending_State:
- if ( overshoot )
- ras.cProfile->flags |= Overshoot_Top;
- FT_TRACE6(( " new descending profile = %p\n", ras.cProfile ));
- break;
-
- default:
- FT_ERROR(( "New_Profile: invalid profile direction\n" ));
- ras.error = FT_THROW( Invalid );
- return FAILURE;
- }
-
- if ( !ras.gProfile )
- ras.gProfile = ras.cProfile;
-
- ras.state = aState;
- ras.fresh = TRUE;
- ras.joint = FALSE;
-
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* End_Profile */
- /* */
- /* <Description> */
- /* Finalize the current profile. */
- /* */
- /* <Input> */
- /* overshoot :: Whether the profile's unrounded end position differs */
- /* by at least a half pixel. */
- /* */
- /* <Return> */
- /* SUCCESS on success. FAILURE in case of overflow or incoherency. */
- /* */
- static Bool
- End_Profile( RAS_ARGS Bool overshoot )
- {
- Long h;
-
-
- h = (Long)( ras.top - ras.cProfile->offset );
-
- if ( h < 0 )
- {
- FT_ERROR(( "End_Profile: negative height encountered\n" ));
- ras.error = FT_THROW( Neg_Height );
- return FAILURE;
- }
-
- if ( h > 0 )
- {
- PProfile oldProfile;
-
-
- FT_TRACE6(( " ending profile %p, start = %ld, height = %ld\n",
- ras.cProfile, ras.cProfile->start, h ));
-
- ras.cProfile->height = h;
- if ( overshoot )
- {
- if ( ras.cProfile->flags & Flow_Up )
- ras.cProfile->flags |= Overshoot_Top;
- else
- ras.cProfile->flags |= Overshoot_Bottom;
- }
-
- oldProfile = ras.cProfile;
- ras.cProfile = (PProfile)ras.top;
-
- ras.top += AlignProfileSize;
-
- ras.cProfile->height = 0;
- ras.cProfile->offset = ras.top;
-
- oldProfile->next = ras.cProfile;
- ras.num_Profs++;
- }
-
- if ( ras.top >= ras.maxBuff )
- {
- FT_TRACE1(( "overflow in End_Profile\n" ));
- ras.error = FT_THROW( Overflow );
- return FAILURE;
- }
-
- ras.joint = FALSE;
-
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Insert_Y_Turn */
- /* */
- /* <Description> */
- /* Insert a salient into the sorted list placed on top of the render */
- /* pool. */
- /* */
- /* <Input> */
- /* New y scanline position. */
- /* */
- /* <Return> */
- /* SUCCESS on success. FAILURE in case of overflow. */
- /* */
- static Bool
- Insert_Y_Turn( RAS_ARGS Int y )
- {
- PLong y_turns;
- Int n;
-
-
- n = ras.numTurns - 1;
- y_turns = ras.sizeBuff - ras.numTurns;
-
- /* look for first y value that is <= */
- while ( n >= 0 && y < y_turns[n] )
- n--;
-
- /* if it is <, simply insert it, ignore if == */
- if ( n >= 0 && y > y_turns[n] )
- do
- {
- Int y2 = (Int)y_turns[n];
-
-
- y_turns[n] = y;
- y = y2;
- } while ( --n >= 0 );
-
- if ( n < 0 )
- {
- ras.maxBuff--;
- if ( ras.maxBuff <= ras.top )
- {
- ras.error = FT_THROW( Overflow );
- return FAILURE;
- }
- ras.numTurns++;
- ras.sizeBuff[-ras.numTurns] = y;
- }
-
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Finalize_Profile_Table */
- /* */
- /* <Description> */
- /* Adjust all links in the profiles list. */
- /* */
- /* <Return> */
- /* SUCCESS on success. FAILURE in case of overflow. */
- /* */
- static Bool
- Finalize_Profile_Table( RAS_ARG )
- {
- UShort n;
- PProfile p;
-
-
- n = ras.num_Profs;
- p = ras.fProfile;
-
- if ( n > 1 && p )
- {
- do
- {
- Int bottom, top;
-
-
- if ( n > 1 )
- p->link = (PProfile)( p->offset + p->height );
- else
- p->link = NULL;
-
- if ( p->flags & Flow_Up )
- {
- bottom = (Int)p->start;
- top = (Int)( p->start + p->height - 1 );
- }
- else
- {
- bottom = (Int)( p->start - p->height + 1 );
- top = (Int)p->start;
- p->start = bottom;
- p->offset += p->height - 1;
- }
-
- if ( Insert_Y_Turn( RAS_VARS bottom ) ||
- Insert_Y_Turn( RAS_VARS top + 1 ) )
- return FAILURE;
-
- p = p->link;
- } while ( --n );
- }
- else
- ras.fProfile = NULL;
-
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Split_Conic */
- /* */
- /* <Description> */
- /* Subdivide one conic Bezier into two joint sub-arcs in the Bezier */
- /* stack. */
- /* */
- /* <Input> */
- /* None (subdivided Bezier is taken from the top of the stack). */
- /* */
- /* <Note> */
- /* This routine is the `beef' of this component. It is _the_ inner */
- /* loop that should be optimized to hell to get the best performance. */
- /* */
- static void
- Split_Conic( TPoint* base )
- {
- Long a, b;
-
-
- base[4].x = base[2].x;
- b = base[1].x;
- a = base[3].x = ( base[2].x + b ) / 2;
- b = base[1].x = ( base[0].x + b ) / 2;
- base[2].x = ( a + b ) / 2;
-
- base[4].y = base[2].y;
- b = base[1].y;
- a = base[3].y = ( base[2].y + b ) / 2;
- b = base[1].y = ( base[0].y + b ) / 2;
- base[2].y = ( a + b ) / 2;
-
- /* hand optimized. gcc doesn't seem to be too good at common */
- /* expression substitution and instruction scheduling ;-) */
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Split_Cubic */
- /* */
- /* <Description> */
- /* Subdivide a third-order Bezier arc into two joint sub-arcs in the */
- /* Bezier stack. */
- /* */
- /* <Note> */
- /* This routine is the `beef' of the component. It is one of _the_ */
- /* inner loops that should be optimized like hell to get the best */
- /* performance. */
- /* */
- static void
- Split_Cubic( TPoint* base )
- {
- Long a, b, c, d;
-
-
- base[6].x = base[3].x;
- c = base[1].x;
- d = base[2].x;
- base[1].x = a = ( base[0].x + c + 1 ) >> 1;
- base[5].x = b = ( base[3].x + d + 1 ) >> 1;
- c = ( c + d + 1 ) >> 1;
- base[2].x = a = ( a + c + 1 ) >> 1;
- base[4].x = b = ( b + c + 1 ) >> 1;
- base[3].x = ( a + b + 1 ) >> 1;
-
- base[6].y = base[3].y;
- c = base[1].y;
- d = base[2].y;
- base[1].y = a = ( base[0].y + c + 1 ) >> 1;
- base[5].y = b = ( base[3].y + d + 1 ) >> 1;
- c = ( c + d + 1 ) >> 1;
- base[2].y = a = ( a + c + 1 ) >> 1;
- base[4].y = b = ( b + c + 1 ) >> 1;
- base[3].y = ( a + b + 1 ) >> 1;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Line_Up */
- /* */
- /* <Description> */
- /* Compute the x-coordinates of an ascending line segment and store */
- /* them in the render pool. */
- /* */
- /* <Input> */
- /* x1 :: The x-coordinate of the segment's start point. */
- /* */
- /* y1 :: The y-coordinate of the segment's start point. */
- /* */
- /* x2 :: The x-coordinate of the segment's end point. */
- /* */
- /* y2 :: The y-coordinate of the segment's end point. */
- /* */
- /* miny :: A lower vertical clipping bound value. */
- /* */
- /* maxy :: An upper vertical clipping bound value. */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on render pool overflow. */
- /* */
- static Bool
- Line_Up( RAS_ARGS Long x1,
- Long y1,
- Long x2,
- Long y2,
- Long miny,
- Long maxy )
- {
- Long Dx, Dy;
- Int e1, e2, f1, f2, size; /* XXX: is `Short' sufficient? */
- Long Ix, Rx, Ax;
-
- PLong top;
-
-
- Dx = x2 - x1;
- Dy = y2 - y1;
-
- if ( Dy <= 0 || y2 < miny || y1 > maxy )
- return SUCCESS;
-
- if ( y1 < miny )
- {
- /* Take care: miny-y1 can be a very large value; we use */
- /* a slow MulDiv function to avoid clipping bugs */
- x1 += SMulDiv( Dx, miny - y1, Dy );
- e1 = (Int)TRUNC( miny );
- f1 = 0;
- }
- else
- {
- e1 = (Int)TRUNC( y1 );
- f1 = (Int)FRAC( y1 );
- }
-
- if ( y2 > maxy )
- {
- /* x2 += FMulDiv( Dx, maxy - y2, Dy ); UNNECESSARY */
- e2 = (Int)TRUNC( maxy );
- f2 = 0;
- }
- else
- {
- e2 = (Int)TRUNC( y2 );
- f2 = (Int)FRAC( y2 );
- }
-
- if ( f1 > 0 )
- {
- if ( e1 == e2 )
- return SUCCESS;
- else
- {
- x1 += SMulDiv( Dx, ras.precision - f1, Dy );
- e1 += 1;
- }
- }
- else
- if ( ras.joint )
- {
- ras.top--;
- ras.joint = FALSE;
- }
-
- ras.joint = (char)( f2 == 0 );
-
- if ( ras.fresh )
- {
- ras.cProfile->start = e1;
- ras.fresh = FALSE;
- }
-
- size = e2 - e1 + 1;
- if ( ras.top + size >= ras.maxBuff )
- {
- ras.error = FT_THROW( Overflow );
- return FAILURE;
- }
-
- if ( Dx > 0 )
- {
- Ix = SMulDiv_No_Round( ras.precision, Dx, Dy );
- Rx = ( ras.precision * Dx ) % Dy;
- Dx = 1;
- }
- else
- {
- Ix = -SMulDiv_No_Round( ras.precision, -Dx, Dy );
- Rx = ( ras.precision * -Dx ) % Dy;
- Dx = -1;
- }
-
- Ax = -Dy;
- top = ras.top;
-
- while ( size > 0 )
- {
- *top++ = x1;
-
- x1 += Ix;
- Ax += Rx;
- if ( Ax >= 0 )
- {
- Ax -= Dy;
- x1 += Dx;
- }
- size--;
- }
-
- ras.top = top;
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Line_Down */
- /* */
- /* <Description> */
- /* Compute the x-coordinates of an descending line segment and store */
- /* them in the render pool. */
- /* */
- /* <Input> */
- /* x1 :: The x-coordinate of the segment's start point. */
- /* */
- /* y1 :: The y-coordinate of the segment's start point. */
- /* */
- /* x2 :: The x-coordinate of the segment's end point. */
- /* */
- /* y2 :: The y-coordinate of the segment's end point. */
- /* */
- /* miny :: A lower vertical clipping bound value. */
- /* */
- /* maxy :: An upper vertical clipping bound value. */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on render pool overflow. */
- /* */
- static Bool
- Line_Down( RAS_ARGS Long x1,
- Long y1,
- Long x2,
- Long y2,
- Long miny,
- Long maxy )
- {
- Bool result, fresh;
-
-
- fresh = ras.fresh;
-
- result = Line_Up( RAS_VARS x1, -y1, x2, -y2, -maxy, -miny );
-
- if ( fresh && !ras.fresh )
- ras.cProfile->start = -ras.cProfile->start;
-
- return result;
- }
-
-
- /* A function type describing the functions used to split Bezier arcs */
- typedef void (*TSplitter)( TPoint* base );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Bezier_Up */
- /* */
- /* <Description> */
- /* Compute the x-coordinates of an ascending Bezier arc and store */
- /* them in the render pool. */
- /* */
- /* <Input> */
- /* degree :: The degree of the Bezier arc (either 2 or 3). */
- /* */
- /* splitter :: The function to split Bezier arcs. */
- /* */
- /* miny :: A lower vertical clipping bound value. */
- /* */
- /* maxy :: An upper vertical clipping bound value. */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on render pool overflow. */
- /* */
- static Bool
- Bezier_Up( RAS_ARGS Int degree,
- TSplitter splitter,
- Long miny,
- Long maxy )
- {
- Long y1, y2, e, e2, e0;
- Short f1;
-
- TPoint* arc;
- TPoint* start_arc;
-
- PLong top;
-
-
- arc = ras.arc;
- y1 = arc[degree].y;
- y2 = arc[0].y;
- top = ras.top;
-
- if ( y2 < miny || y1 > maxy )
- goto Fin;
-
- e2 = FLOOR( y2 );
-
- if ( e2 > maxy )
- e2 = maxy;
-
- e0 = miny;
-
- if ( y1 < miny )
- e = miny;
- else
- {
- e = CEILING( y1 );
- f1 = (Short)( FRAC( y1 ) );
- e0 = e;
-
- if ( f1 == 0 )
- {
- if ( ras.joint )
- {
- top--;
- ras.joint = FALSE;
- }
-
- *top++ = arc[degree].x;
-
- e += ras.precision;
- }
- }
-
- if ( ras.fresh )
- {
- ras.cProfile->start = TRUNC( e0 );
- ras.fresh = FALSE;
- }
-
- if ( e2 < e )
- goto Fin;
-
- if ( ( top + TRUNC( e2 - e ) + 1 ) >= ras.maxBuff )
- {
- ras.top = top;
- ras.error = FT_THROW( Overflow );
- return FAILURE;
- }
-
- start_arc = arc;
-
- do
- {
- ras.joint = FALSE;
-
- y2 = arc[0].y;
-
- if ( y2 > e )
- {
- y1 = arc[degree].y;
- if ( y2 - y1 >= ras.precision_step )
- {
- splitter( arc );
- arc += degree;
- }
- else
- {
- *top++ = arc[degree].x + FMulDiv( arc[0].x - arc[degree].x,
- e - y1, y2 - y1 );
- arc -= degree;
- e += ras.precision;
- }
- }
- else
- {
- if ( y2 == e )
- {
- ras.joint = TRUE;
- *top++ = arc[0].x;
-
- e += ras.precision;
- }
- arc -= degree;
- }
- } while ( arc >= start_arc && e <= e2 );
-
- Fin:
- ras.top = top;
- ras.arc -= degree;
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Bezier_Down */
- /* */
- /* <Description> */
- /* Compute the x-coordinates of an descending Bezier arc and store */
- /* them in the render pool. */
- /* */
- /* <Input> */
- /* degree :: The degree of the Bezier arc (either 2 or 3). */
- /* */
- /* splitter :: The function to split Bezier arcs. */
- /* */
- /* miny :: A lower vertical clipping bound value. */
- /* */
- /* maxy :: An upper vertical clipping bound value. */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on render pool overflow. */
- /* */
- static Bool
- Bezier_Down( RAS_ARGS Int degree,
- TSplitter splitter,
- Long miny,
- Long maxy )
- {
- TPoint* arc = ras.arc;
- Bool result, fresh;
-
-
- arc[0].y = -arc[0].y;
- arc[1].y = -arc[1].y;
- arc[2].y = -arc[2].y;
- if ( degree > 2 )
- arc[3].y = -arc[3].y;
-
- fresh = ras.fresh;
-
- result = Bezier_Up( RAS_VARS degree, splitter, -maxy, -miny );
-
- if ( fresh && !ras.fresh )
- ras.cProfile->start = -ras.cProfile->start;
-
- arc[0].y = -arc[0].y;
- return result;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Line_To */
- /* */
- /* <Description> */
- /* Inject a new line segment and adjust the Profiles list. */
- /* */
- /* <Input> */
- /* x :: The x-coordinate of the segment's end point (its start point */
- /* is stored in `lastX'). */
- /* */
- /* y :: The y-coordinate of the segment's end point (its start point */
- /* is stored in `lastY'). */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on render pool overflow or incorrect */
- /* profile. */
- /* */
- static Bool
- Line_To( RAS_ARGS Long x,
- Long y )
- {
- /* First, detect a change of direction */
-
- switch ( ras.state )
- {
- case Unknown_State:
- if ( y > ras.lastY )
- {
- if ( New_Profile( RAS_VARS Ascending_State,
- IS_BOTTOM_OVERSHOOT( ras.lastY ) ) )
- return FAILURE;
- }
- else
- {
- if ( y < ras.lastY )
- if ( New_Profile( RAS_VARS Descending_State,
- IS_TOP_OVERSHOOT( ras.lastY ) ) )
- return FAILURE;
- }
- break;
-
- case Ascending_State:
- if ( y < ras.lastY )
- {
- if ( End_Profile( RAS_VARS IS_TOP_OVERSHOOT( ras.lastY ) ) ||
- New_Profile( RAS_VARS Descending_State,
- IS_TOP_OVERSHOOT( ras.lastY ) ) )
- return FAILURE;
- }
- break;
-
- case Descending_State:
- if ( y > ras.lastY )
- {
- if ( End_Profile( RAS_VARS IS_BOTTOM_OVERSHOOT( ras.lastY ) ) ||
- New_Profile( RAS_VARS Ascending_State,
- IS_BOTTOM_OVERSHOOT( ras.lastY ) ) )
- return FAILURE;
- }
- break;
-
- default:
- ;
- }
-
- /* Then compute the lines */
-
- switch ( ras.state )
- {
- case Ascending_State:
- if ( Line_Up( RAS_VARS ras.lastX, ras.lastY,
- x, y, ras.minY, ras.maxY ) )
- return FAILURE;
- break;
-
- case Descending_State:
- if ( Line_Down( RAS_VARS ras.lastX, ras.lastY,
- x, y, ras.minY, ras.maxY ) )
- return FAILURE;
- break;
-
- default:
- ;
- }
-
- ras.lastX = x;
- ras.lastY = y;
-
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Conic_To */
- /* */
- /* <Description> */
- /* Inject a new conic arc and adjust the profile list. */
- /* */
- /* <Input> */
- /* cx :: The x-coordinate of the arc's new control point. */
- /* */
- /* cy :: The y-coordinate of the arc's new control point. */
- /* */
- /* x :: The x-coordinate of the arc's end point (its start point is */
- /* stored in `lastX'). */
- /* */
- /* y :: The y-coordinate of the arc's end point (its start point is */
- /* stored in `lastY'). */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on render pool overflow or incorrect */
- /* profile. */
- /* */
- static Bool
- Conic_To( RAS_ARGS Long cx,
- Long cy,
- Long x,
- Long y )
- {
- Long y1, y2, y3, x3, ymin, ymax;
- TStates state_bez;
-
-
- ras.arc = ras.arcs;
- ras.arc[2].x = ras.lastX;
- ras.arc[2].y = ras.lastY;
- ras.arc[1].x = cx;
- ras.arc[1].y = cy;
- ras.arc[0].x = x;
- ras.arc[0].y = y;
-
- do
- {
- y1 = ras.arc[2].y;
- y2 = ras.arc[1].y;
- y3 = ras.arc[0].y;
- x3 = ras.arc[0].x;
-
- /* first, categorize the Bezier arc */
-
- if ( y1 <= y3 )
- {
- ymin = y1;
- ymax = y3;
- }
- else
- {
- ymin = y3;
- ymax = y1;
- }
-
- if ( y2 < ymin || y2 > ymax )
- {
- /* this arc has no given direction, split it! */
- Split_Conic( ras.arc );
- ras.arc += 2;
- }
- else if ( y1 == y3 )
- {
- /* this arc is flat, ignore it and pop it from the Bezier stack */
- ras.arc -= 2;
- }
- else
- {
- /* the arc is y-monotonous, either ascending or descending */
- /* detect a change of direction */
- state_bez = y1 < y3 ? Ascending_State : Descending_State;
- if ( ras.state != state_bez )
- {
- Bool o = ( state_bez == Ascending_State )
- ? IS_BOTTOM_OVERSHOOT( y1 )
- : IS_TOP_OVERSHOOT( y1 );
-
-
- /* finalize current profile if any */
- if ( ras.state != Unknown_State &&
- End_Profile( RAS_VARS o ) )
- goto Fail;
-
- /* create a new profile */
- if ( New_Profile( RAS_VARS state_bez, o ) )
- goto Fail;
- }
-
- /* now call the appropriate routine */
- if ( state_bez == Ascending_State )
- {
- if ( Bezier_Up( RAS_VARS 2, Split_Conic, ras.minY, ras.maxY ) )
- goto Fail;
- }
- else
- if ( Bezier_Down( RAS_VARS 2, Split_Conic, ras.minY, ras.maxY ) )
- goto Fail;
- }
-
- } while ( ras.arc >= ras.arcs );
-
- ras.lastX = x3;
- ras.lastY = y3;
-
- return SUCCESS;
-
- Fail:
- return FAILURE;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Cubic_To */
- /* */
- /* <Description> */
- /* Inject a new cubic arc and adjust the profile list. */
- /* */
- /* <Input> */
- /* cx1 :: The x-coordinate of the arc's first new control point. */
- /* */
- /* cy1 :: The y-coordinate of the arc's first new control point. */
- /* */
- /* cx2 :: The x-coordinate of the arc's second new control point. */
- /* */
- /* cy2 :: The y-coordinate of the arc's second new control point. */
- /* */
- /* x :: The x-coordinate of the arc's end point (its start point is */
- /* stored in `lastX'). */
- /* */
- /* y :: The y-coordinate of the arc's end point (its start point is */
- /* stored in `lastY'). */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on render pool overflow or incorrect */
- /* profile. */
- /* */
- static Bool
- Cubic_To( RAS_ARGS Long cx1,
- Long cy1,
- Long cx2,
- Long cy2,
- Long x,
- Long y )
- {
- Long y1, y2, y3, y4, x4, ymin1, ymax1, ymin2, ymax2;
- TStates state_bez;
-
-
- ras.arc = ras.arcs;
- ras.arc[3].x = ras.lastX;
- ras.arc[3].y = ras.lastY;
- ras.arc[2].x = cx1;
- ras.arc[2].y = cy1;
- ras.arc[1].x = cx2;
- ras.arc[1].y = cy2;
- ras.arc[0].x = x;
- ras.arc[0].y = y;
-
- do
- {
- y1 = ras.arc[3].y;
- y2 = ras.arc[2].y;
- y3 = ras.arc[1].y;
- y4 = ras.arc[0].y;
- x4 = ras.arc[0].x;
-
- /* first, categorize the Bezier arc */
-
- if ( y1 <= y4 )
- {
- ymin1 = y1;
- ymax1 = y4;
- }
- else
- {
- ymin1 = y4;
- ymax1 = y1;
- }
-
- if ( y2 <= y3 )
- {
- ymin2 = y2;
- ymax2 = y3;
- }
- else
- {
- ymin2 = y3;
- ymax2 = y2;
- }
-
- if ( ymin2 < ymin1 || ymax2 > ymax1 )
- {
- /* this arc has no given direction, split it! */
- Split_Cubic( ras.arc );
- ras.arc += 3;
- }
- else if ( y1 == y4 )
- {
- /* this arc is flat, ignore it and pop it from the Bezier stack */
- ras.arc -= 3;
- }
- else
- {
- state_bez = ( y1 <= y4 ) ? Ascending_State : Descending_State;
-
- /* detect a change of direction */
- if ( ras.state != state_bez )
- {
- Bool o = ( state_bez == Ascending_State )
- ? IS_BOTTOM_OVERSHOOT( y1 )
- : IS_TOP_OVERSHOOT( y1 );
-
-
- /* finalize current profile if any */
- if ( ras.state != Unknown_State &&
- End_Profile( RAS_VARS o ) )
- goto Fail;
-
- if ( New_Profile( RAS_VARS state_bez, o ) )
- goto Fail;
- }
-
- /* compute intersections */
- if ( state_bez == Ascending_State )
- {
- if ( Bezier_Up( RAS_VARS 3, Split_Cubic, ras.minY, ras.maxY ) )
- goto Fail;
- }
- else
- if ( Bezier_Down( RAS_VARS 3, Split_Cubic, ras.minY, ras.maxY ) )
- goto Fail;
- }
-
- } while ( ras.arc >= ras.arcs );
-
- ras.lastX = x4;
- ras.lastY = y4;
-
- return SUCCESS;
-
- Fail:
- return FAILURE;
- }
-
-
-#undef SWAP_
-#define SWAP_( x, y ) do \
- { \
- Long swap = x; \
- \
- \
- x = y; \
- y = swap; \
- } while ( 0 )
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Decompose_Curve */
- /* */
- /* <Description> */
- /* Scan the outline arrays in order to emit individual segments and */
- /* Beziers by calling Line_To() and Bezier_To(). It handles all */
- /* weird cases, like when the first point is off the curve, or when */
- /* there are simply no `on' points in the contour! */
- /* */
- /* <Input> */
- /* first :: The index of the first point in the contour. */
- /* */
- /* last :: The index of the last point in the contour. */
- /* */
- /* flipped :: If set, flip the direction of the curve. */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE on error. */
- /* */
- static Bool
- Decompose_Curve( RAS_ARGS UShort first,
- UShort last,
- Int flipped )
- {
- FT_Vector v_last;
- FT_Vector v_control;
- FT_Vector v_start;
-
- FT_Vector* points;
- FT_Vector* point;
- FT_Vector* limit;
- char* tags;
-
- UInt tag; /* current point's state */
-
-
- points = ras.outline.points;
- limit = points + last;
-
- v_start.x = SCALED( points[first].x );
- v_start.y = SCALED( points[first].y );
- v_last.x = SCALED( points[last].x );
- v_last.y = SCALED( points[last].y );
-
- if ( flipped )
- {
- SWAP_( v_start.x, v_start.y );
- SWAP_( v_last.x, v_last.y );
- }
-
- v_control = v_start;
-
- point = points + first;
- tags = ras.outline.tags + first;
-
- /* set scan mode if necessary */
- if ( tags[0] & FT_CURVE_TAG_HAS_SCANMODE )
- ras.dropOutControl = (Byte)tags[0] >> 5;
-
- tag = FT_CURVE_TAG( tags[0] );
-
- /* A contour cannot start with a cubic control point! */
- if ( tag == FT_CURVE_TAG_CUBIC )
- goto Invalid_Outline;
-
- /* check first point to determine origin */
- if ( tag == FT_CURVE_TAG_CONIC )
- {
- /* first point is conic control. Yes, this happens. */
- if ( FT_CURVE_TAG( ras.outline.tags[last] ) == FT_CURVE_TAG_ON )
- {
- /* start at last point if it is on the curve */
- v_start = v_last;
- limit--;
- }
- else
- {
- /* if both first and last points are conic, */
- /* start at their middle and record its position */
- /* for closure */
- v_start.x = ( v_start.x + v_last.x ) / 2;
- v_start.y = ( v_start.y + v_last.y ) / 2;
-
- /* v_last = v_start; */
- }
- point--;
- tags--;
- }
-
- ras.lastX = v_start.x;
- ras.lastY = v_start.y;
-
- while ( point < limit )
- {
- point++;
- tags++;
-
- tag = FT_CURVE_TAG( tags[0] );
-
- switch ( tag )
- {
- case FT_CURVE_TAG_ON: /* emit a single line_to */
- {
- Long x, y;
-
-
- x = SCALED( point->x );
- y = SCALED( point->y );
- if ( flipped )
- SWAP_( x, y );
-
- if ( Line_To( RAS_VARS x, y ) )
- goto Fail;
- continue;
- }
-
- case FT_CURVE_TAG_CONIC: /* consume conic arcs */
- v_control.x = SCALED( point[0].x );
- v_control.y = SCALED( point[0].y );
-
- if ( flipped )
- SWAP_( v_control.x, v_control.y );
-
- Do_Conic:
- if ( point < limit )
- {
- FT_Vector v_middle;
- Long x, y;
-
-
- point++;
- tags++;
- tag = FT_CURVE_TAG( tags[0] );
-
- x = SCALED( point[0].x );
- y = SCALED( point[0].y );
-
- if ( flipped )
- SWAP_( x, y );
-
- if ( tag == FT_CURVE_TAG_ON )
- {
- if ( Conic_To( RAS_VARS v_control.x, v_control.y, x, y ) )
- goto Fail;
- continue;
- }
-
- if ( tag != FT_CURVE_TAG_CONIC )
- goto Invalid_Outline;
-
- v_middle.x = ( v_control.x + x ) / 2;
- v_middle.y = ( v_control.y + y ) / 2;
-
- if ( Conic_To( RAS_VARS v_control.x, v_control.y,
- v_middle.x, v_middle.y ) )
- goto Fail;
-
- v_control.x = x;
- v_control.y = y;
-
- goto Do_Conic;
- }
-
- if ( Conic_To( RAS_VARS v_control.x, v_control.y,
- v_start.x, v_start.y ) )
- goto Fail;
-
- goto Close;
-
- default: /* FT_CURVE_TAG_CUBIC */
- {
- Long x1, y1, x2, y2, x3, y3;
-
-
- if ( point + 1 > limit ||
- FT_CURVE_TAG( tags[1] ) != FT_CURVE_TAG_CUBIC )
- goto Invalid_Outline;
-
- point += 2;
- tags += 2;
-
- x1 = SCALED( point[-2].x );
- y1 = SCALED( point[-2].y );
- x2 = SCALED( point[-1].x );
- y2 = SCALED( point[-1].y );
-
- if ( flipped )
- {
- SWAP_( x1, y1 );
- SWAP_( x2, y2 );
- }
-
- if ( point <= limit )
- {
- x3 = SCALED( point[0].x );
- y3 = SCALED( point[0].y );
-
- if ( flipped )
- SWAP_( x3, y3 );
-
- if ( Cubic_To( RAS_VARS x1, y1, x2, y2, x3, y3 ) )
- goto Fail;
- continue;
- }
-
- if ( Cubic_To( RAS_VARS x1, y1, x2, y2, v_start.x, v_start.y ) )
- goto Fail;
- goto Close;
- }
- }
- }
-
- /* close the contour with a line segment */
- if ( Line_To( RAS_VARS v_start.x, v_start.y ) )
- goto Fail;
-
- Close:
- return SUCCESS;
-
- Invalid_Outline:
- ras.error = FT_THROW( Invalid );
-
- Fail:
- return FAILURE;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Convert_Glyph */
- /* */
- /* <Description> */
- /* Convert a glyph into a series of segments and arcs and make a */
- /* profiles list with them. */
- /* */
- /* <Input> */
- /* flipped :: If set, flip the direction of curve. */
- /* */
- /* <Return> */
- /* SUCCESS on success, FAILURE if any error was encountered during */
- /* rendering. */
- /* */
- static Bool
- Convert_Glyph( RAS_ARGS Int flipped )
- {
- Int i;
- UInt start;
-
-
- ras.fProfile = NULL;
- ras.joint = FALSE;
- ras.fresh = FALSE;
-
- ras.maxBuff = ras.sizeBuff - AlignProfileSize;
-
- ras.numTurns = 0;
-
- ras.cProfile = (PProfile)ras.top;
- ras.cProfile->offset = ras.top;
- ras.num_Profs = 0;
-
- start = 0;
-
- for ( i = 0; i < ras.outline.n_contours; i++ )
- {
- PProfile lastProfile;
- Bool o;
-
-
- ras.state = Unknown_State;
- ras.gProfile = NULL;
-
- if ( Decompose_Curve( RAS_VARS (UShort)start,
- (UShort)ras.outline.contours[i],
- flipped ) )
- return FAILURE;
-
- start = (UShort)ras.outline.contours[i] + 1;
-
- /* we must now check whether the extreme arcs join or not */
- if ( FRAC( ras.lastY ) == 0 &&
- ras.lastY >= ras.minY &&
- ras.lastY <= ras.maxY )
- if ( ras.gProfile &&
- ( ras.gProfile->flags & Flow_Up ) ==
- ( ras.cProfile->flags & Flow_Up ) )
- ras.top--;
- /* Note that ras.gProfile can be nil if the contour was too small */
- /* to be drawn. */
-
- lastProfile = ras.cProfile;
- if ( ras.top != ras.cProfile->offset &&
- ( ras.cProfile->flags & Flow_Up ) )
- o = IS_TOP_OVERSHOOT( ras.lastY );
- else
- o = IS_BOTTOM_OVERSHOOT( ras.lastY );
- if ( End_Profile( RAS_VARS o ) )
- return FAILURE;
-
- /* close the `next profile in contour' linked list */
- if ( ras.gProfile )
- lastProfile->next = ras.gProfile;
- }
-
- if ( Finalize_Profile_Table( RAS_VAR ) )
- return FAILURE;
-
- return (Bool)( ras.top < ras.maxBuff ? SUCCESS : FAILURE );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /** **/
- /** SCAN-LINE SWEEPS AND DRAWING **/
- /** **/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Init_Linked */
- /* */
- /* Initializes an empty linked list. */
- /* */
- static void
- Init_Linked( TProfileList* l )
- {
- *l = NULL;
- }
-
-
- /*************************************************************************/
- /* */
- /* InsNew */
- /* */
- /* Inserts a new profile in a linked list. */
- /* */
- static void
- InsNew( PProfileList list,
- PProfile profile )
- {
- PProfile *old, current;
- Long x;
-
-
- old = list;
- current = *old;
- x = profile->X;
-
- while ( current )
- {
- if ( x < current->X )
- break;
- old = &current->link;
- current = *old;
- }
-
- profile->link = current;
- *old = profile;
- }
-
-
- /*************************************************************************/
- /* */
- /* DelOld */
- /* */
- /* Removes an old profile from a linked list. */
- /* */
- static void
- DelOld( PProfileList list,
- PProfile profile )
- {
- PProfile *old, current;
-
-
- old = list;
- current = *old;
-
- while ( current )
- {
- if ( current == profile )
- {
- *old = current->link;
- return;
- }
-
- old = &current->link;
- current = *old;
- }
-
- /* we should never get there, unless the profile was not part of */
- /* the list. */
- }
-
-
- /*************************************************************************/
- /* */
- /* Sort */
- /* */
- /* Sorts a trace list. In 95%, the list is already sorted. We need */
- /* an algorithm which is fast in this case. Bubble sort is enough */
- /* and simple. */
- /* */
- static void
- Sort( PProfileList list )
- {
- PProfile *old, current, next;
-
-
- /* First, set the new X coordinate of each profile */
- current = *list;
- while ( current )
- {
- current->X = *current->offset;
- current->offset += ( current->flags & Flow_Up ) ? 1 : -1;
- current->height--;
- current = current->link;
- }
-
- /* Then sort them */
- old = list;
- current = *old;
-
- if ( !current )
- return;
-
- next = current->link;
-
- while ( next )
- {
- if ( current->X <= next->X )
- {
- old = &current->link;
- current = *old;
-
- if ( !current )
- return;
- }
- else
- {
- *old = next;
- current->link = next->link;
- next->link = current;
-
- old = list;
- current = *old;
- }
-
- next = current->link;
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* Vertical Sweep Procedure Set */
- /* */
- /* These four routines are used during the vertical black/white sweep */
- /* phase by the generic Draw_Sweep() function. */
- /* */
- /*************************************************************************/
-
- static void
- Vertical_Sweep_Init( RAS_ARGS Short* min,
- Short* max )
- {
- Long pitch = ras.target.pitch;
-
- FT_UNUSED( max );
-
-
- ras.traceIncr = (Short)-pitch;
- ras.traceOfs = -*min * pitch;
- if ( pitch > 0 )
- ras.traceOfs += (Long)( ras.target.rows - 1 ) * pitch;
- }
-
-
- static void
- Vertical_Sweep_Span( RAS_ARGS Short y,
- FT_F26Dot6 x1,
- FT_F26Dot6 x2,
- PProfile left,
- PProfile right )
- {
- Long e1, e2;
- Byte* target;
-
- Int dropOutControl = left->flags & 7;
-
- FT_UNUSED( y );
- FT_UNUSED( left );
- FT_UNUSED( right );
-
-
- /* in high-precision mode, we need 12 digits after the comma to */
- /* represent multiples of 1/(1<<12) = 1/4096 */
- FT_TRACE7(( " y=%d x=[%.12f;%.12f], drop-out=%d",
- y,
- x1 / (double)ras.precision,
- x2 / (double)ras.precision,
- dropOutControl ));
-
- /* Drop-out control */
-
- e1 = TRUNC( CEILING( x1 ) );
-
- if ( dropOutControl != 2 &&
- x2 - x1 - ras.precision <= ras.precision_jitter )
- e2 = e1;
- else
- e2 = TRUNC( FLOOR( x2 ) );
-
- if ( e2 >= 0 && e1 < ras.bWidth )
- {
- Int c1, c2;
- Byte f1, f2;
-
-
- if ( e1 < 0 )
- e1 = 0;
- if ( e2 >= ras.bWidth )
- e2 = ras.bWidth - 1;
-
- FT_TRACE7(( " -> x=[%d;%d]", e1, e2 ));
-
- c1 = (Short)( e1 >> 3 );
- c2 = (Short)( e2 >> 3 );
-
- f1 = (Byte) ( 0xFF >> ( e1 & 7 ) );
- f2 = (Byte) ~( 0x7F >> ( e2 & 7 ) );
-
- target = ras.bTarget + ras.traceOfs + c1;
- c2 -= c1;
-
- if ( c2 > 0 )
- {
- target[0] |= f1;
-
- /* memset() is slower than the following code on many platforms. */
- /* This is due to the fact that, in the vast majority of cases, */
- /* the span length in bytes is relatively small. */
- c2--;
- while ( c2 > 0 )
- {
- *(++target) = 0xFF;
- c2--;
- }
- target[1] |= f2;
- }
- else
- *target |= ( f1 & f2 );
- }
-
- FT_TRACE7(( "\n" ));
- }
-
-
- static void
- Vertical_Sweep_Drop( RAS_ARGS Short y,
- FT_F26Dot6 x1,
- FT_F26Dot6 x2,
- PProfile left,
- PProfile right )
- {
- Long e1, e2, pxl;
- Short c1, f1;
-
-
- FT_TRACE7(( " y=%d x=[%.12f;%.12f]",
- y,
- x1 / (double)ras.precision,
- x2 / (double)ras.precision ));
-
- /* Drop-out control */
-
- /* e2 x2 x1 e1 */
- /* */
- /* ^ | */
- /* | | */
- /* +-------------+---------------------+------------+ */
- /* | | */
- /* | v */
- /* */
- /* pixel contour contour pixel */
- /* center center */
-
- /* drop-out mode scan conversion rules (as defined in OpenType) */
- /* --------------------------------------------------------------- */
- /* 0 1, 2, 3 */
- /* 1 1, 2, 4 */
- /* 2 1, 2 */
- /* 3 same as mode 2 */
- /* 4 1, 2, 5 */
- /* 5 1, 2, 6 */
- /* 6, 7 same as mode 2 */
-
- e1 = CEILING( x1 );
- e2 = FLOOR ( x2 );
- pxl = e1;
-
- if ( e1 > e2 )
- {
- Int dropOutControl = left->flags & 7;
-
-
- FT_TRACE7(( ", drop-out=%d", dropOutControl ));
-
- if ( e1 == e2 + ras.precision )
- {
- switch ( dropOutControl )
- {
- case 0: /* simple drop-outs including stubs */
- pxl = e2;
- break;
-
- case 4: /* smart drop-outs including stubs */
- pxl = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half );
- break;
-
- case 1: /* simple drop-outs excluding stubs */
- case 5: /* smart drop-outs excluding stubs */
-
- /* Drop-out Control Rules #4 and #6 */
-
- /* The specification neither provides an exact definition */
- /* of a `stub' nor gives exact rules to exclude them. */
- /* */
- /* Here the constraints we use to recognize a stub. */
- /* */
- /* upper stub: */
- /* */
- /* - P_Left and P_Right are in the same contour */
- /* - P_Right is the successor of P_Left in that contour */
- /* - y is the top of P_Left and P_Right */
- /* */
- /* lower stub: */
- /* */
- /* - P_Left and P_Right are in the same contour */
- /* - P_Left is the successor of P_Right in that contour */
- /* - y is the bottom of P_Left */
- /* */
- /* We draw a stub if the following constraints are met. */
- /* */
- /* - for an upper or lower stub, there is top or bottom */
- /* overshoot, respectively */
- /* - the covered interval is greater or equal to a half */
- /* pixel */
-
- /* upper stub test */
- if ( left->next == right &&
- left->height <= 0 &&
- !( left->flags & Overshoot_Top &&
- x2 - x1 >= ras.precision_half ) )
- goto Exit;
-
- /* lower stub test */
- if ( right->next == left &&
- left->start == y &&
- !( left->flags & Overshoot_Bottom &&
- x2 - x1 >= ras.precision_half ) )
- goto Exit;
-
- if ( dropOutControl == 1 )
- pxl = e2;
- else
- pxl = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half );
- break;
-
- default: /* modes 2, 3, 6, 7 */
- goto Exit; /* no drop-out control */
- }
-
- /* undocumented but confirmed: If the drop-out would result in a */
- /* pixel outside of the bounding box, use the pixel inside of the */
- /* bounding box instead */
- if ( pxl < 0 )
- pxl = e1;
- else if ( TRUNC( pxl ) >= ras.bWidth )
- pxl = e2;
-
- /* check that the other pixel isn't set */
- e1 = ( pxl == e1 ) ? e2 : e1;
-
- e1 = TRUNC( e1 );
-
- c1 = (Short)( e1 >> 3 );
- f1 = (Short)( e1 & 7 );
-
- if ( e1 >= 0 && e1 < ras.bWidth &&
- ras.bTarget[ras.traceOfs + c1] & ( 0x80 >> f1 ) )
- goto Exit;
- }
- else
- goto Exit;
- }
-
- e1 = TRUNC( pxl );
-
- if ( e1 >= 0 && e1 < ras.bWidth )
- {
- FT_TRACE7(( " -> x=%d (drop-out)", e1 ));
-
- c1 = (Short)( e1 >> 3 );
- f1 = (Short)( e1 & 7 );
-
- ras.bTarget[ras.traceOfs + c1] |= (char)( 0x80 >> f1 );
- }
-
- Exit:
- FT_TRACE7(( "\n" ));
- }
-
-
- static void
- Vertical_Sweep_Step( RAS_ARG )
- {
- ras.traceOfs += ras.traceIncr;
- }
-
-
- /***********************************************************************/
- /* */
- /* Horizontal Sweep Procedure Set */
- /* */
- /* These four routines are used during the horizontal black/white */
- /* sweep phase by the generic Draw_Sweep() function. */
- /* */
- /***********************************************************************/
-
- static void
- Horizontal_Sweep_Init( RAS_ARGS Short* min,
- Short* max )
- {
- /* nothing, really */
- FT_UNUSED_RASTER;
- FT_UNUSED( min );
- FT_UNUSED( max );
- }
-
-
- static void
- Horizontal_Sweep_Span( RAS_ARGS Short y,
- FT_F26Dot6 x1,
- FT_F26Dot6 x2,
- PProfile left,
- PProfile right )
- {
- FT_UNUSED( left );
- FT_UNUSED( right );
-
-
- if ( x2 - x1 < ras.precision )
- {
- Long e1, e2;
-
-
- FT_TRACE7(( " x=%d y=[%.12f;%.12f]",
- y,
- x1 / (double)ras.precision,
- x2 / (double)ras.precision ));
-
- e1 = CEILING( x1 );
- e2 = FLOOR ( x2 );
-
- if ( e1 == e2 )
- {
- e1 = TRUNC( e1 );
-
- if ( e1 >= 0 && (ULong)e1 < ras.target.rows )
- {
- Byte f1;
- PByte bits;
- PByte p;
-
-
- FT_TRACE7(( " -> y=%d (drop-out)", e1 ));
-
- bits = ras.bTarget + ( y >> 3 );
- f1 = (Byte)( 0x80 >> ( y & 7 ) );
- p = bits - e1 * ras.target.pitch;
-
- if ( ras.target.pitch > 0 )
- p += (Long)( ras.target.rows - 1 ) * ras.target.pitch;
-
- p[0] |= f1;
- }
- }
-
- FT_TRACE7(( "\n" ));
- }
- }
-
-
- static void
- Horizontal_Sweep_Drop( RAS_ARGS Short y,
- FT_F26Dot6 x1,
- FT_F26Dot6 x2,
- PProfile left,
- PProfile right )
- {
- Long e1, e2, pxl;
- PByte bits;
- Byte f1;
-
-
- FT_TRACE7(( " x=%d y=[%.12f;%.12f]",
- y,
- x1 / (double)ras.precision,
- x2 / (double)ras.precision ));
-
- /* During the horizontal sweep, we only take care of drop-outs */
-
- /* e1 + <-- pixel center */
- /* | */
- /* x1 ---+--> <-- contour */
- /* | */
- /* | */
- /* x2 <--+--- <-- contour */
- /* | */
- /* | */
- /* e2 + <-- pixel center */
-
- e1 = CEILING( x1 );
- e2 = FLOOR ( x2 );
- pxl = e1;
-
- if ( e1 > e2 )
- {
- Int dropOutControl = left->flags & 7;
-
-
- FT_TRACE7(( ", dropout=%d", dropOutControl ));
-
- if ( e1 == e2 + ras.precision )
- {
- switch ( dropOutControl )
- {
- case 0: /* simple drop-outs including stubs */
- pxl = e2;
- break;
-
- case 4: /* smart drop-outs including stubs */
- pxl = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half );
- break;
-
- case 1: /* simple drop-outs excluding stubs */
- case 5: /* smart drop-outs excluding stubs */
- /* see Vertical_Sweep_Drop for details */
-
- /* rightmost stub test */
- if ( left->next == right &&
- left->height <= 0 &&
- !( left->flags & Overshoot_Top &&
- x2 - x1 >= ras.precision_half ) )
- goto Exit;
-
- /* leftmost stub test */
- if ( right->next == left &&
- left->start == y &&
- !( left->flags & Overshoot_Bottom &&
- x2 - x1 >= ras.precision_half ) )
- goto Exit;
-
- if ( dropOutControl == 1 )
- pxl = e2;
- else
- pxl = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half );
- break;
-
- default: /* modes 2, 3, 6, 7 */
- goto Exit; /* no drop-out control */
- }
-
- /* undocumented but confirmed: If the drop-out would result in a */
- /* pixel outside of the bounding box, use the pixel inside of the */
- /* bounding box instead */
- if ( pxl < 0 )
- pxl = e1;
- else if ( (ULong)( TRUNC( pxl ) ) >= ras.target.rows )
- pxl = e2;
-
- /* check that the other pixel isn't set */
- e1 = ( pxl == e1 ) ? e2 : e1;
-
- e1 = TRUNC( e1 );
-
- bits = ras.bTarget + ( y >> 3 );
- f1 = (Byte)( 0x80 >> ( y & 7 ) );
-
- bits -= e1 * ras.target.pitch;
- if ( ras.target.pitch > 0 )
- bits += (Long)( ras.target.rows - 1 ) * ras.target.pitch;
-
- if ( e1 >= 0 &&
- (ULong)e1 < ras.target.rows &&
- *bits & f1 )
- goto Exit;
- }
- else
- goto Exit;
- }
-
- e1 = TRUNC( pxl );
-
- if ( e1 >= 0 && (ULong)e1 < ras.target.rows )
- {
- FT_TRACE7(( " -> y=%d (drop-out)", e1 ));
-
- bits = ras.bTarget + ( y >> 3 );
- f1 = (Byte)( 0x80 >> ( y & 7 ) );
- bits -= e1 * ras.target.pitch;
-
- if ( ras.target.pitch > 0 )
- bits += (Long)( ras.target.rows - 1 ) * ras.target.pitch;
-
- bits[0] |= f1;
- }
-
- Exit:
- FT_TRACE7(( "\n" ));
- }
-
-
- static void
- Horizontal_Sweep_Step( RAS_ARG )
- {
- /* Nothing, really */
- FT_UNUSED_RASTER;
- }
-
-
- /*************************************************************************/
- /* */
- /* Generic Sweep Drawing routine */
- /* */
- /*************************************************************************/
-
- static Bool
- Draw_Sweep( RAS_ARG )
- {
- Short y, y_change, y_height;
-
- PProfile P, Q, P_Left, P_Right;
-
- Short min_Y, max_Y, top, bottom, dropouts;
-
- Long x1, x2, xs, e1, e2;
-
- TProfileList waiting;
- TProfileList draw_left, draw_right;
-
-
- /* initialize empty linked lists */
-
- Init_Linked( &waiting );
-
- Init_Linked( &draw_left );
- Init_Linked( &draw_right );
-
- /* first, compute min and max Y */
-
- P = ras.fProfile;
- max_Y = (Short)TRUNC( ras.minY );
- min_Y = (Short)TRUNC( ras.maxY );
-
- while ( P )
- {
- Q = P->link;
-
- bottom = (Short)P->start;
- top = (Short)( P->start + P->height - 1 );
-
- if ( min_Y > bottom )
- min_Y = bottom;
- if ( max_Y < top )
- max_Y = top;
-
- P->X = 0;
- InsNew( &waiting, P );
-
- P = Q;
- }
-
- /* check the Y-turns */
- if ( ras.numTurns == 0 )
- {
- ras.error = FT_THROW( Invalid );
- return FAILURE;
- }
-
- /* now initialize the sweep */
-
- ras.Proc_Sweep_Init( RAS_VARS &min_Y, &max_Y );
-
- /* then compute the distance of each profile from min_Y */
-
- P = waiting;
-
- while ( P )
- {
- P->countL = P->start - min_Y;
- P = P->link;
- }
-
- /* let's go */
-
- y = min_Y;
- y_height = 0;
-
- if ( ras.numTurns > 0 &&
- ras.sizeBuff[-ras.numTurns] == min_Y )
- ras.numTurns--;
-
- while ( ras.numTurns > 0 )
- {
- /* check waiting list for new activations */
-
- P = waiting;
-
- while ( P )
- {
- Q = P->link;
- P->countL -= y_height;
- if ( P->countL == 0 )
- {
- DelOld( &waiting, P );
-
- if ( P->flags & Flow_Up )
- InsNew( &draw_left, P );
- else
- InsNew( &draw_right, P );
- }
-
- P = Q;
- }
-
- /* sort the drawing lists */
-
- Sort( &draw_left );
- Sort( &draw_right );
-
- y_change = (Short)ras.sizeBuff[-ras.numTurns--];
- y_height = (Short)( y_change - y );
-
- while ( y < y_change )
- {
- /* let's trace */
-
- dropouts = 0;
-
- P_Left = draw_left;
- P_Right = draw_right;
-
- while ( P_Left )
- {
- x1 = P_Left ->X;
- x2 = P_Right->X;
-
- if ( x1 > x2 )
- {
- xs = x1;
- x1 = x2;
- x2 = xs;
- }
-
- e1 = FLOOR( x1 );
- e2 = CEILING( x2 );
-
- if ( x2 - x1 <= ras.precision &&
- e1 != x1 && e2 != x2 )
- {
- if ( e1 > e2 || e2 == e1 + ras.precision )
- {
- Int dropOutControl = P_Left->flags & 7;
-
-
- if ( dropOutControl != 2 )
- {
- /* a drop-out was detected */
-
- P_Left ->X = x1;
- P_Right->X = x2;
-
- /* mark profile for drop-out processing */
- P_Left->countL = 1;
- dropouts++;
- }
-
- goto Skip_To_Next;
- }
- }
-
- ras.Proc_Sweep_Span( RAS_VARS y, x1, x2, P_Left, P_Right );
-
- Skip_To_Next:
-
- P_Left = P_Left->link;
- P_Right = P_Right->link;
- }
-
- /* handle drop-outs _after_ the span drawing -- */
- /* drop-out processing has been moved out of the loop */
- /* for performance tuning */
- if ( dropouts > 0 )
- goto Scan_DropOuts;
-
- Next_Line:
-
- ras.Proc_Sweep_Step( RAS_VAR );
-
- y++;
-
- if ( y < y_change )
- {
- Sort( &draw_left );
- Sort( &draw_right );
- }
- }
-
- /* now finalize the profiles that need it */
-
- P = draw_left;
- while ( P )
- {
- Q = P->link;
- if ( P->height == 0 )
- DelOld( &draw_left, P );
- P = Q;
- }
-
- P = draw_right;
- while ( P )
- {
- Q = P->link;
- if ( P->height == 0 )
- DelOld( &draw_right, P );
- P = Q;
- }
- }
-
- /* for gray-scaling, flush the bitmap scanline cache */
- while ( y <= max_Y )
- {
- ras.Proc_Sweep_Step( RAS_VAR );
- y++;
- }
-
- return SUCCESS;
-
- Scan_DropOuts:
-
- P_Left = draw_left;
- P_Right = draw_right;
-
- while ( P_Left )
- {
- if ( P_Left->countL )
- {
- P_Left->countL = 0;
-#if 0
- dropouts--; /* -- this is useful when debugging only */
-#endif
- ras.Proc_Sweep_Drop( RAS_VARS y,
- P_Left->X,
- P_Right->X,
- P_Left,
- P_Right );
- }
-
- P_Left = P_Left->link;
- P_Right = P_Right->link;
- }
-
- goto Next_Line;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Render_Single_Pass */
- /* */
- /* <Description> */
- /* Perform one sweep with sub-banding. */
- /* */
- /* <Input> */
- /* flipped :: If set, flip the direction of the outline. */
- /* */
- /* <Return> */
- /* Renderer error code. */
- /* */
- static int
- Render_Single_Pass( RAS_ARGS Bool flipped )
- {
- Short i, j, k;
-
-
- while ( ras.band_top >= 0 )
- {
- ras.maxY = (Long)ras.band_stack[ras.band_top].y_max * ras.precision;
- ras.minY = (Long)ras.band_stack[ras.band_top].y_min * ras.precision;
-
- ras.top = ras.buff;
-
- ras.error = Raster_Err_None;
-
- if ( Convert_Glyph( RAS_VARS flipped ) )
- {
- if ( ras.error != Raster_Err_Overflow )
- return FAILURE;
-
- ras.error = Raster_Err_None;
-
- /* sub-banding */
-
-#ifdef DEBUG_RASTER
- ClearBand( RAS_VARS TRUNC( ras.minY ), TRUNC( ras.maxY ) );
-#endif
-
- i = ras.band_stack[ras.band_top].y_min;
- j = ras.band_stack[ras.band_top].y_max;
-
- k = (Short)( ( i + j ) / 2 );
-
- if ( ras.band_top >= 7 || k < i )
- {
- ras.band_top = 0;
- ras.error = FT_THROW( Invalid );
-
- return ras.error;
- }
-
- ras.band_stack[ras.band_top + 1].y_min = k;
- ras.band_stack[ras.band_top + 1].y_max = j;
-
- ras.band_stack[ras.band_top].y_max = (Short)( k - 1 );
-
- ras.band_top++;
- }
- else
- {
- if ( ras.fProfile )
- if ( Draw_Sweep( RAS_VAR ) )
- return ras.error;
- ras.band_top--;
- }
- }
-
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Render_Glyph */
- /* */
- /* <Description> */
- /* Render a glyph in a bitmap. Sub-banding if needed. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- static FT_Error
- Render_Glyph( RAS_ARG )
- {
- FT_Error error;
-
-
- Set_High_Precision( RAS_VARS ras.outline.flags &
- FT_OUTLINE_HIGH_PRECISION );
- ras.scale_shift = ras.precision_shift;
-
- if ( ras.outline.flags & FT_OUTLINE_IGNORE_DROPOUTS )
- ras.dropOutControl = 2;
- else
- {
- if ( ras.outline.flags & FT_OUTLINE_SMART_DROPOUTS )
- ras.dropOutControl = 4;
- else
- ras.dropOutControl = 0;
-
- if ( !( ras.outline.flags & FT_OUTLINE_INCLUDE_STUBS ) )
- ras.dropOutControl += 1;
- }
-
- ras.second_pass = (Bool)( !( ras.outline.flags &
- FT_OUTLINE_SINGLE_PASS ) );
-
- /* Vertical Sweep */
- FT_TRACE7(( "Vertical pass (ftraster)\n" ));
-
- ras.Proc_Sweep_Init = Vertical_Sweep_Init;
- ras.Proc_Sweep_Span = Vertical_Sweep_Span;
- ras.Proc_Sweep_Drop = Vertical_Sweep_Drop;
- ras.Proc_Sweep_Step = Vertical_Sweep_Step;
-
- ras.band_top = 0;
- ras.band_stack[0].y_min = 0;
- ras.band_stack[0].y_max = (Short)( ras.target.rows - 1 );
-
- ras.bWidth = (UShort)ras.target.width;
- ras.bTarget = (Byte*)ras.target.buffer;
-
- if ( ( error = Render_Single_Pass( RAS_VARS 0 ) ) != 0 )
- return error;
-
- /* Horizontal Sweep */
- if ( ras.second_pass && ras.dropOutControl != 2 )
- {
- FT_TRACE7(( "Horizontal pass (ftraster)\n" ));
-
- ras.Proc_Sweep_Init = Horizontal_Sweep_Init;
- ras.Proc_Sweep_Span = Horizontal_Sweep_Span;
- ras.Proc_Sweep_Drop = Horizontal_Sweep_Drop;
- ras.Proc_Sweep_Step = Horizontal_Sweep_Step;
-
- ras.band_top = 0;
- ras.band_stack[0].y_min = 0;
- ras.band_stack[0].y_max = (Short)( ras.target.width - 1 );
-
- if ( ( error = Render_Single_Pass( RAS_VARS 1 ) ) != 0 )
- return error;
- }
-
- return Raster_Err_None;
- }
-
-
- static void
- ft_black_init( black_PRaster raster )
- {
- FT_UNUSED( raster );
- }
-
-
- /**** RASTER OBJECT CREATION: In standalone mode, we simply use *****/
- /**** a static object. *****/
-
-
-#ifdef STANDALONE_
-
-
- static int
- ft_black_new( void* memory,
- FT_Raster *araster )
- {
- static black_TRaster the_raster;
- FT_UNUSED( memory );
-
-
- *araster = (FT_Raster)&the_raster;
- FT_ZERO( &the_raster );
- ft_black_init( &the_raster );
-
- return 0;
- }
-
-
- static void
- ft_black_done( FT_Raster raster )
- {
- /* nothing */
- FT_UNUSED( raster );
- }
-
-
-#else /* !STANDALONE_ */
-
-
- static int
- ft_black_new( FT_Memory memory,
- black_PRaster *araster )
- {
- FT_Error error;
- black_PRaster raster = NULL;
-
-
- *araster = 0;
- if ( !FT_NEW( raster ) )
- {
- raster->memory = memory;
- ft_black_init( raster );
-
- *araster = raster;
- }
-
- return error;
- }
-
-
- static void
- ft_black_done( black_PRaster raster )
- {
- FT_Memory memory = (FT_Memory)raster->memory;
-
-
- FT_FREE( raster );
- }
-
-
-#endif /* !STANDALONE_ */
-
-
- static void
- ft_black_reset( FT_Raster raster,
- PByte pool_base,
- ULong pool_size )
- {
- FT_UNUSED( raster );
- FT_UNUSED( pool_base );
- FT_UNUSED( pool_size );
- }
-
-
- static int
- ft_black_set_mode( FT_Raster raster,
- ULong mode,
- void* args )
- {
- FT_UNUSED( raster );
- FT_UNUSED( mode );
- FT_UNUSED( args );
-
- return 0;
- }
-
-
- static int
- ft_black_render( FT_Raster raster,
- const FT_Raster_Params* params )
- {
- const FT_Outline* outline = (const FT_Outline*)params->source;
- const FT_Bitmap* target_map = params->target;
-
- black_TWorker worker[1];
-
- Long buffer[FT_MAX_BLACK_POOL];
-
-
- if ( !raster )
- return FT_THROW( Not_Ini );
-
- if ( !outline )
- return FT_THROW( Invalid );
-
- /* return immediately if the outline is empty */
- if ( outline->n_points == 0 || outline->n_contours <= 0 )
- return Raster_Err_None;
-
- if ( !outline->contours || !outline->points )
- return FT_THROW( Invalid );
-
- if ( outline->n_points !=
- outline->contours[outline->n_contours - 1] + 1 )
- return FT_THROW( Invalid );
-
- /* this version of the raster does not support direct rendering, sorry */
- if ( params->flags & FT_RASTER_FLAG_DIRECT )
- return FT_THROW( Unsupported );
-
- if ( params->flags & FT_RASTER_FLAG_AA )
- return FT_THROW( Unsupported );
-
- if ( !target_map )
- return FT_THROW( Invalid );
-
- /* nothing to do */
- if ( !target_map->width || !target_map->rows )
- return Raster_Err_None;
-
- if ( !target_map->buffer )
- return FT_THROW( Invalid );
-
- /* reject too large outline coordinates */
- {
- FT_Vector* vec = outline->points;
- FT_Vector* limit = vec + outline->n_points;
-
-
- for ( ; vec < limit; vec++ )
- {
- if ( vec->x < -0x1000000L || vec->x > 0x1000000L ||
- vec->y < -0x1000000L || vec->y > 0x1000000L )
- return FT_THROW( Invalid );
- }
- }
-
- ras.outline = *outline;
- ras.target = *target_map;
-
- worker->buff = buffer;
- worker->sizeBuff = (&buffer)[1]; /* Points to right after buffer. */
-
- return Render_Glyph( RAS_VAR );
- }
-
-
- FT_DEFINE_RASTER_FUNCS(
- ft_standard_raster,
-
- FT_GLYPH_FORMAT_OUTLINE,
-
- (FT_Raster_New_Func) ft_black_new, /* raster_new */
- (FT_Raster_Reset_Func) ft_black_reset, /* raster_reset */
- (FT_Raster_Set_Mode_Func)ft_black_set_mode, /* raster_set_mode */
- (FT_Raster_Render_Func) ft_black_render, /* raster_render */
- (FT_Raster_Done_Func) ft_black_done /* raster_done */
- )
-
-
-/* END */
diff --git a/src/raster/ftraster.h b/src/raster/ftraster.h
deleted file mode 100644
index 6b3050cb3..000000000
--- a/src/raster/ftraster.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftraster.h */
-/* */
-/* The FreeType glyph rasterizer (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used */
-/* modified and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTRASTER_H_
-#define FTRASTER_H_
-
-
-#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H
-#include FT_IMAGE_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* Uncomment the following line if you are using ftraster.c as a */
- /* standalone module, fully independent of FreeType. */
- /* */
-/* #define STANDALONE_ */
-
- FT_EXPORT_VAR( const FT_Raster_Funcs ) ft_standard_raster;
-
-
-FT_END_HEADER
-
-#endif /* FTRASTER_H_ */
-
-
-/* END */
diff --git a/src/raster/ftrend1.c b/src/raster/ftrend1.c
deleted file mode 100644
index e52ca1db5..000000000
--- a/src/raster/ftrend1.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftrend1.c */
-/* */
-/* The FreeType glyph rasterizer interface (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_OUTLINE_H
-#include "ftrend1.h"
-#include "ftraster.h"
-#include "rastpic.h"
-
-#include "rasterrs.h"
-
-
- /* initialize renderer -- init its raster */
- static FT_Error
- ft_raster1_init( FT_Renderer render )
- {
- render->clazz->raster_class->raster_reset( render->raster, NULL, 0 );
-
- return FT_Err_Ok;
- }
-
-
- /* set render-specific mode */
- static FT_Error
- ft_raster1_set_mode( FT_Renderer render,
- FT_ULong mode_tag,
- FT_Pointer data )
- {
- /* we simply pass it to the raster */
- return render->clazz->raster_class->raster_set_mode( render->raster,
- mode_tag,
- data );
- }
-
-
- /* transform a given glyph image */
- static FT_Error
- ft_raster1_transform( FT_Renderer render,
- FT_GlyphSlot slot,
- const FT_Matrix* matrix,
- const FT_Vector* delta )
- {
- FT_Error error = FT_Err_Ok;
-
-
- if ( slot->format != render->glyph_format )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- if ( matrix )
- FT_Outline_Transform( &slot->outline, matrix );
-
- if ( delta )
- FT_Outline_Translate( &slot->outline, delta->x, delta->y );
-
- Exit:
- return error;
- }
-
-
- /* return the glyph's control box */
- static void
- ft_raster1_get_cbox( FT_Renderer render,
- FT_GlyphSlot slot,
- FT_BBox* cbox )
- {
- FT_ZERO( cbox );
-
- if ( slot->format == render->glyph_format )
- FT_Outline_Get_CBox( &slot->outline, cbox );
- }
-
-
- /* convert a slot's glyph image into a bitmap */
- static FT_Error
- ft_raster1_render( FT_Renderer render,
- FT_GlyphSlot slot,
- FT_Render_Mode mode,
- const FT_Vector* origin )
- {
- FT_Error error;
- FT_Outline* outline;
- FT_BBox cbox, cbox0;
- FT_UInt width, height, pitch;
- FT_Bitmap* bitmap;
- FT_Memory memory;
-
- FT_Raster_Params params;
-
-
- /* check glyph image format */
- if ( slot->format != render->glyph_format )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- /* check rendering mode */
- if ( mode != FT_RENDER_MODE_MONO )
- {
- /* raster1 is only capable of producing monochrome bitmaps */
- return FT_THROW( Cannot_Render_Glyph );
- }
-
- outline = &slot->outline;
-
- /* translate the outline to the new origin if needed */
- if ( origin )
- FT_Outline_Translate( outline, origin->x, origin->y );
-
- /* compute the control box, and grid fit it */
- FT_Outline_Get_CBox( outline, &cbox0 );
-
- /* undocumented but confirmed: bbox values get rounded */
-#if 1
- cbox.xMin = FT_PIX_ROUND( cbox0.xMin );
- cbox.yMin = FT_PIX_ROUND( cbox0.yMin );
- cbox.xMax = FT_PIX_ROUND( cbox0.xMax );
- cbox.yMax = FT_PIX_ROUND( cbox0.yMax );
-#else
- cbox.xMin = FT_PIX_FLOOR( cbox.xMin );
- cbox.yMin = FT_PIX_FLOOR( cbox.yMin );
- cbox.xMax = FT_PIX_CEIL( cbox.xMax );
- cbox.yMax = FT_PIX_CEIL( cbox.yMax );
-#endif
-
- /* If either `width' or `height' round to 0, try */
- /* explicitly rounding up/down. In the case of */
- /* glyphs containing only one very narrow feature, */
- /* this gives the drop-out compensation in the scan */
- /* conversion code a chance to do its stuff. */
- width = (FT_UInt)( ( cbox.xMax - cbox.xMin ) >> 6 );
- if ( width == 0 )
- {
- cbox.xMin = FT_PIX_FLOOR( cbox0.xMin );
- cbox.xMax = FT_PIX_CEIL( cbox0.xMax );
-
- width = (FT_UInt)( ( cbox.xMax - cbox.xMin ) >> 6 );
- }
-
- height = (FT_UInt)( ( cbox.yMax - cbox.yMin ) >> 6 );
- if ( height == 0 )
- {
- cbox.yMin = FT_PIX_FLOOR( cbox0.yMin );
- cbox.yMax = FT_PIX_CEIL( cbox0.yMax );
-
- height = (FT_UInt)( ( cbox.yMax - cbox.yMin ) >> 6 );
- }
-
- if ( width > FT_USHORT_MAX || height > FT_USHORT_MAX )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- bitmap = &slot->bitmap;
- memory = render->root.memory;
-
- /* release old bitmap buffer */
- if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
- {
- FT_FREE( bitmap->buffer );
- slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
- }
-
- pitch = ( ( width + 15 ) >> 4 ) << 1;
- bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
-
- bitmap->width = width;
- bitmap->rows = height;
- bitmap->pitch = (int)pitch;
-
- if ( FT_ALLOC_MULT( bitmap->buffer, pitch, height ) )
- goto Exit;
-
- slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
-
- /* translate outline to render it into the bitmap */
- FT_Outline_Translate( outline, -cbox.xMin, -cbox.yMin );
-
- /* set up parameters */
- params.target = bitmap;
- params.source = outline;
- params.flags = 0;
-
- /* render outline into the bitmap */
- error = render->raster_render( render->raster, &params );
-
- FT_Outline_Translate( outline, cbox.xMin, cbox.yMin );
-
- if ( error )
- goto Exit;
-
- slot->format = FT_GLYPH_FORMAT_BITMAP;
- slot->bitmap_left = (FT_Int)( cbox.xMin >> 6 );
- slot->bitmap_top = (FT_Int)( cbox.yMax >> 6 );
-
- Exit:
- return error;
- }
-
-
- FT_DEFINE_RENDERER(
- ft_raster1_renderer_class,
-
- FT_MODULE_RENDERER,
- sizeof ( FT_RendererRec ),
-
- "raster1",
- 0x10000L,
- 0x20000L,
-
- NULL, /* module specific interface */
-
- (FT_Module_Constructor)ft_raster1_init, /* module_init */
- (FT_Module_Destructor) NULL, /* module_done */
- (FT_Module_Requester) NULL, /* get_interface */
-
- FT_GLYPH_FORMAT_OUTLINE,
-
- (FT_Renderer_RenderFunc) ft_raster1_render, /* render_glyph */
- (FT_Renderer_TransformFunc)ft_raster1_transform, /* transform_glyph */
- (FT_Renderer_GetCBoxFunc) ft_raster1_get_cbox, /* get_glyph_cbox */
- (FT_Renderer_SetModeFunc) ft_raster1_set_mode, /* set_mode */
-
- (FT_Raster_Funcs*)&FT_STANDARD_RASTER_GET /* raster_class */
- )
-
-
-/* END */
diff --git a/src/raster/ftrend1.h b/src/raster/ftrend1.h
deleted file mode 100644
index cff702d14..000000000
--- a/src/raster/ftrend1.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftrend1.h */
-/* */
-/* The FreeType glyph rasterizer interface (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTREND1_H_
-#define FTREND1_H_
-
-
-#include <ft2build.h>
-#include FT_RENDER_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_DECLARE_RENDERER( ft_raster1_renderer_class )
-
-
-FT_END_HEADER
-
-#endif /* FTREND1_H_ */
-
-
-/* END */
diff --git a/src/raster/module.mk b/src/raster/module.mk
deleted file mode 100644
index aad39cb56..000000000
--- a/src/raster/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 renderer module definition
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += RASTER_MODULE
-
-define RASTER_MODULE
-$(OPEN_DRIVER) FT_Renderer_Class, ft_raster1_renderer_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)raster $(ECHO_DRIVER_DESC)monochrome bitmap renderer$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/raster/raster.c b/src/raster/raster.c
deleted file mode 100644
index 46a6690b1..000000000
--- a/src/raster/raster.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/***************************************************************************/
-/* */
-/* raster.c */
-/* */
-/* FreeType monochrome rasterer module component (body only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "ftraster.c"
-#include "ftrend1.c"
-#include "rastpic.c"
-
-
-/* END */
diff --git a/src/raster/rasterrs.h b/src/raster/rasterrs.h
deleted file mode 100644
index 0d646908a..000000000
--- a/src/raster/rasterrs.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/***************************************************************************/
-/* */
-/* rasterrs.h */
-/* */
-/* monochrome renderer error codes (specification only). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the monochrome renderer error enumeration */
- /* constants. */
- /* */
- /*************************************************************************/
-
-#ifndef RASTERRS_H_
-#define RASTERRS_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX Raster_Err_
-#define FT_ERR_BASE FT_Mod_Err_Raster
-
-#include FT_ERRORS_H
-
-#endif /* RASTERRS_H_ */
-
-
-/* END */
diff --git a/src/raster/rastpic.c b/src/raster/rastpic.c
deleted file mode 100644
index 7085339b7..000000000
--- a/src/raster/rastpic.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/***************************************************************************/
-/* */
-/* rastpic.c */
-/* */
-/* The FreeType position independent code services for raster module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "rastpic.h"
-#include "rasterrs.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from ftraster.c */
- void
- FT_Init_Class_ft_standard_raster( FT_Raster_Funcs* funcs );
-
-
- void
- ft_raster1_renderer_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->raster )
- {
- RasterPIC* container = (RasterPIC*)pic_container->raster;
-
-
- if ( --container->ref_count )
- return;
- FT_FREE( container );
- pic_container->raster = NULL;
- }
- }
-
-
- FT_Error
- ft_raster1_renderer_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- RasterPIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* XXX: since this function also served the no longer available */
- /* raster5 renderer it uses reference counting, which could */
- /* be removed now */
- if ( pic_container->raster )
- {
- ((RasterPIC*)pic_container->raster)->ref_count++;
- return error;
- }
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->raster = container;
-
- container->ref_count = 1;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- FT_Init_Class_ft_standard_raster( &container->ft_standard_raster );
-
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/raster/rastpic.h b/src/raster/rastpic.h
deleted file mode 100644
index dcd691310..000000000
--- a/src/raster/rastpic.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************/
-/* */
-/* rastpic.h */
-/* */
-/* The FreeType position independent code services for raster module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef RASTPIC_H_
-#define RASTPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-FT_BEGIN_HEADER
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_STANDARD_RASTER_GET ft_standard_raster
-
-#else /* FT_CONFIG_OPTION_PIC */
-
- typedef struct RasterPIC_
- {
- int ref_count;
- FT_Raster_Funcs ft_standard_raster;
-
- } RasterPIC;
-
-
-#define GET_PIC( lib ) \
- ( (RasterPIC*)( (lib)->pic_container.raster ) )
-#define FT_STANDARD_RASTER_GET ( GET_PIC( library )->ft_standard_raster )
-
-
- /* see rastpic.c for the implementation */
- void
- ft_raster1_renderer_class_pic_free( FT_Library library );
-
- FT_Error
- ft_raster1_renderer_class_pic_init( FT_Library library );
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-FT_END_HEADER
-
-#endif /* RASTPIC_H_ */
-
-
-/* END */
diff --git a/src/raster/rules.mk b/src/raster/rules.mk
deleted file mode 100644
index 0462c9317..000000000
--- a/src/raster/rules.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-#
-# FreeType 2 renderer module build rules
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# raster driver directory
-#
-RASTER_DIR := $(SRC_DIR)/raster
-
-# compilation flags for the driver
-#
-RASTER_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(RASTER_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# raster driver sources (i.e., C files)
-#
-RASTER_DRV_SRC := $(RASTER_DIR)/ftraster.c \
- $(RASTER_DIR)/ftrend1.c \
- $(RASTER_DIR)/rastpic.c
-
-
-# raster driver headers
-#
-RASTER_DRV_H := $(RASTER_DRV_SRC:%.c=%.h) \
- $(RASTER_DIR)/rasterrs.h
-
-
-# raster driver object(s)
-#
-# RASTER_DRV_OBJ_M is used during `multi' builds.
-# RASTER_DRV_OBJ_S is used during `single' builds.
-#
-RASTER_DRV_OBJ_M := $(RASTER_DRV_SRC:$(RASTER_DIR)/%.c=$(OBJ_DIR)/%.$O)
-RASTER_DRV_OBJ_S := $(OBJ_DIR)/raster.$O
-
-# raster driver source file for single build
-#
-RASTER_DRV_SRC_S := $(RASTER_DIR)/raster.c
-
-
-# raster driver - single object
-#
-$(RASTER_DRV_OBJ_S): $(RASTER_DRV_SRC_S) $(RASTER_DRV_SRC) \
- $(FREETYPE_H) $(RASTER_DRV_H)
- $(RASTER_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(RASTER_DRV_SRC_S))
-
-
-# raster driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(RASTER_DIR)/%.c $(FREETYPE_H) $(RASTER_DRV_H)
- $(RASTER_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(RASTER_DRV_OBJ_S)
-DRV_OBJS_M += $(RASTER_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/sfnt/Jamfile b/src/sfnt/Jamfile
deleted file mode 100644
index 5971b251c..000000000
--- a/src/sfnt/Jamfile
+++ /dev/null
@@ -1,40 +0,0 @@
-# FreeType 2 src/sfnt Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) sfnt ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = pngshim
- sfdriver
- sfntpic
- sfobjs
- ttbdf
- ttcmap
- ttkern
- ttload
- ttmtx
- ttpost
- ttsbit
- ;
- }
- else
- {
- _sources = sfnt ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/sfnt Jamfile
diff --git a/src/sfnt/module.mk b/src/sfnt/module.mk
deleted file mode 100644
index 81dea17de..000000000
--- a/src/sfnt/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 SFNT module definition
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += SFNT_MODULE
-
-define SFNT_MODULE
-$(OPEN_DRIVER) FT_Module_Class, sfnt_module_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)sfnt $(ECHO_DRIVER_DESC)helper module for TrueType & OpenType formats$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/sfnt/pngshim.c b/src/sfnt/pngshim.c
deleted file mode 100644
index b9b296ea5..000000000
--- a/src/sfnt/pngshim.c
+++ /dev/null
@@ -1,389 +0,0 @@
-/***************************************************************************/
-/* */
-/* pngshim.c */
-/* */
-/* PNG Bitmap glyph support. */
-/* */
-/* Copyright 2013-2017 by */
-/* Google, Inc. */
-/* Written by Stuart Gill and Behdad Esfahbod. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_CONFIG_STANDARD_LIBRARY_H
-
-
-#if defined( TT_CONFIG_OPTION_EMBEDDED_BITMAPS ) && \
- defined( FT_CONFIG_OPTION_USE_PNG )
-
- /* We always include <setjmp.h>, so make libpng shut up! */
-#define PNG_SKIP_SETJMP_CHECK 1
-#include <png.h>
-#include "pngshim.h"
-
-#include "sferrors.h"
-
-
- /* This code is freely based on cairo-png.c. There's so many ways */
- /* to call libpng, and the way cairo does it is defacto standard. */
-
- static unsigned int
- multiply_alpha( unsigned int alpha,
- unsigned int color )
- {
- unsigned int temp = alpha * color + 0x80;
-
-
- return ( temp + ( temp >> 8 ) ) >> 8;
- }
-
-
- /* Premultiplies data and converts RGBA bytes => native endian. */
- static void
- premultiply_data( png_structp png,
- png_row_infop row_info,
- png_bytep data )
- {
- unsigned int i;
-
- FT_UNUSED( png );
-
-
- for ( i = 0; i < row_info->rowbytes; i += 4 )
- {
- unsigned char* base = &data[i];
- unsigned int alpha = base[3];
-
-
- if ( alpha == 0 )
- base[0] = base[1] = base[2] = base[3] = 0;
-
- else
- {
- unsigned int red = base[0];
- unsigned int green = base[1];
- unsigned int blue = base[2];
-
-
- if ( alpha != 0xFF )
- {
- red = multiply_alpha( alpha, red );
- green = multiply_alpha( alpha, green );
- blue = multiply_alpha( alpha, blue );
- }
-
- base[0] = (unsigned char)blue;
- base[1] = (unsigned char)green;
- base[2] = (unsigned char)red;
- base[3] = (unsigned char)alpha;
- }
- }
- }
-
-
- /* Converts RGBx bytes to BGRA. */
- static void
- convert_bytes_to_data( png_structp png,
- png_row_infop row_info,
- png_bytep data )
- {
- unsigned int i;
-
- FT_UNUSED( png );
-
-
- for ( i = 0; i < row_info->rowbytes; i += 4 )
- {
- unsigned char* base = &data[i];
- unsigned int red = base[0];
- unsigned int green = base[1];
- unsigned int blue = base[2];
-
-
- base[0] = (unsigned char)blue;
- base[1] = (unsigned char)green;
- base[2] = (unsigned char)red;
- base[3] = 0xFF;
- }
- }
-
-
- /* Use error callback to avoid png writing to stderr. */
- static void
- error_callback( png_structp png,
- png_const_charp error_msg )
- {
- FT_Error* error = (FT_Error*)png_get_error_ptr( png );
-
- FT_UNUSED( error_msg );
-
-
- *error = FT_THROW( Out_Of_Memory );
-#ifdef PNG_SETJMP_SUPPORTED
- ft_longjmp( png_jmpbuf( png ), 1 );
-#endif
- /* if we get here, then we have no choice but to abort ... */
- }
-
-
- /* Use warning callback to avoid png writing to stderr. */
- static void
- warning_callback( png_structp png,
- png_const_charp error_msg )
- {
- FT_UNUSED( png );
- FT_UNUSED( error_msg );
-
- /* Just ignore warnings. */
- }
-
-
- static void
- read_data_from_FT_Stream( png_structp png,
- png_bytep data,
- png_size_t length )
- {
- FT_Error error;
- png_voidp p = png_get_io_ptr( png );
- FT_Stream stream = (FT_Stream)p;
-
-
- if ( FT_FRAME_ENTER( length ) )
- {
- FT_Error* e = (FT_Error*)png_get_error_ptr( png );
-
-
- *e = FT_THROW( Invalid_Stream_Read );
- png_error( png, NULL );
-
- return;
- }
-
- memcpy( data, stream->cursor, length );
-
- FT_FRAME_EXIT();
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- Load_SBit_Png( FT_GlyphSlot slot,
- FT_Int x_offset,
- FT_Int y_offset,
- FT_Int pix_bits,
- TT_SBit_Metrics metrics,
- FT_Memory memory,
- FT_Byte* data,
- FT_UInt png_len,
- FT_Bool populate_map_and_metrics,
- FT_Bool metrics_only )
- {
- FT_Bitmap *map = &slot->bitmap;
- FT_Error error = FT_Err_Ok;
- FT_StreamRec stream;
-
- png_structp png;
- png_infop info;
- png_uint_32 imgWidth, imgHeight;
-
- int bitdepth, color_type, interlace;
- FT_Int i;
- png_byte* *rows = NULL; /* pacify compiler */
-
-
- if ( x_offset < 0 ||
- y_offset < 0 )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- if ( !populate_map_and_metrics &&
- ( (FT_UInt)x_offset + metrics->width > map->width ||
- (FT_UInt)y_offset + metrics->height > map->rows ||
- pix_bits != 32 ||
- map->pixel_mode != FT_PIXEL_MODE_BGRA ) )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- FT_Stream_OpenMemory( &stream, data, png_len );
-
- png = png_create_read_struct( PNG_LIBPNG_VER_STRING,
- &error,
- error_callback,
- warning_callback );
- if ( !png )
- {
- error = FT_THROW( Out_Of_Memory );
- goto Exit;
- }
-
- info = png_create_info_struct( png );
- if ( !info )
- {
- error = FT_THROW( Out_Of_Memory );
- png_destroy_read_struct( &png, NULL, NULL );
- goto Exit;
- }
-
- if ( ft_setjmp( png_jmpbuf( png ) ) )
- {
- error = FT_THROW( Invalid_File_Format );
- goto DestroyExit;
- }
-
- png_set_read_fn( png, &stream, read_data_from_FT_Stream );
-
- png_read_info( png, info );
- png_get_IHDR( png, info,
- &imgWidth, &imgHeight,
- &bitdepth, &color_type, &interlace,
- NULL, NULL );
-
- if ( error ||
- ( !populate_map_and_metrics &&
- ( (FT_Int)imgWidth != metrics->width ||
- (FT_Int)imgHeight != metrics->height ) ) )
- goto DestroyExit;
-
- if ( populate_map_and_metrics )
- {
- metrics->width = (FT_UShort)imgWidth;
- metrics->height = (FT_UShort)imgHeight;
-
- map->width = metrics->width;
- map->rows = metrics->height;
- map->pixel_mode = FT_PIXEL_MODE_BGRA;
- map->pitch = (int)( map->width * 4 );
- map->num_grays = 256;
-
- /* reject too large bitmaps similarly to the rasterizer */
- if ( map->rows > 0x7FFF || map->width > 0x7FFF )
- {
- error = FT_THROW( Array_Too_Large );
- goto DestroyExit;
- }
- }
-
- /* convert palette/gray image to rgb */
- if ( color_type == PNG_COLOR_TYPE_PALETTE )
- png_set_palette_to_rgb( png );
-
- /* expand gray bit depth if needed */
- if ( color_type == PNG_COLOR_TYPE_GRAY )
- {
-#if PNG_LIBPNG_VER >= 10209
- png_set_expand_gray_1_2_4_to_8( png );
-#else
- png_set_gray_1_2_4_to_8( png );
-#endif
- }
-
- /* transform transparency to alpha */
- if ( png_get_valid(png, info, PNG_INFO_tRNS ) )
- png_set_tRNS_to_alpha( png );
-
- if ( bitdepth == 16 )
- png_set_strip_16( png );
-
- if ( bitdepth < 8 )
- png_set_packing( png );
-
- /* convert grayscale to RGB */
- if ( color_type == PNG_COLOR_TYPE_GRAY ||
- color_type == PNG_COLOR_TYPE_GRAY_ALPHA )
- png_set_gray_to_rgb( png );
-
- if ( interlace != PNG_INTERLACE_NONE )
- png_set_interlace_handling( png );
-
- png_set_filler( png, 0xFF, PNG_FILLER_AFTER );
-
- /* recheck header after setting EXPAND options */
- png_read_update_info(png, info );
- png_get_IHDR( png, info,
- &imgWidth, &imgHeight,
- &bitdepth, &color_type, &interlace,
- NULL, NULL );
-
- if ( bitdepth != 8 ||
- !( color_type == PNG_COLOR_TYPE_RGB ||
- color_type == PNG_COLOR_TYPE_RGB_ALPHA ) )
- {
- error = FT_THROW( Invalid_File_Format );
- goto DestroyExit;
- }
-
- if ( metrics_only )
- goto DestroyExit;
-
- switch ( color_type )
- {
- default:
- /* Shouldn't happen, but fall through. */
-
- case PNG_COLOR_TYPE_RGB_ALPHA:
- png_set_read_user_transform_fn( png, premultiply_data );
- break;
-
- case PNG_COLOR_TYPE_RGB:
- /* Humm, this smells. Carry on though. */
- png_set_read_user_transform_fn( png, convert_bytes_to_data );
- break;
- }
-
- if ( populate_map_and_metrics )
- {
- /* this doesn't overflow: 0x7FFF * 0x7FFF * 4 < 2^32 */
- FT_ULong size = map->rows * (FT_ULong)map->pitch;
-
-
- error = ft_glyphslot_alloc_bitmap( slot, size );
- if ( error )
- goto DestroyExit;
- }
-
- if ( FT_NEW_ARRAY( rows, imgHeight ) )
- {
- error = FT_THROW( Out_Of_Memory );
- goto DestroyExit;
- }
-
- for ( i = 0; i < (FT_Int)imgHeight; i++ )
- rows[i] = map->buffer + ( y_offset + i ) * map->pitch + x_offset * 4;
-
- png_read_image( png, rows );
-
- FT_FREE( rows );
-
- png_read_end( png, info );
-
- DestroyExit:
- png_destroy_read_struct( &png, &info, NULL );
- FT_Stream_Close( &stream );
-
- Exit:
- return error;
- }
-
-#else /* !(TT_CONFIG_OPTION_EMBEDDED_BITMAPS && FT_CONFIG_OPTION_USE_PNG) */
-
- /* ANSI C doesn't like empty source files */
- typedef int _pngshim_dummy;
-
-#endif /* !(TT_CONFIG_OPTION_EMBEDDED_BITMAPS && FT_CONFIG_OPTION_USE_PNG) */
-
-
-/* END */
diff --git a/src/sfnt/pngshim.h b/src/sfnt/pngshim.h
deleted file mode 100644
index 344eceac1..000000000
--- a/src/sfnt/pngshim.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/***************************************************************************/
-/* */
-/* pngshim.h */
-/* */
-/* PNG Bitmap glyph support. */
-/* */
-/* Copyright 2013-2017 by */
-/* Google, Inc. */
-/* Written by Stuart Gill and Behdad Esfahbod. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PNGSHIM_H_
-#define PNGSHIM_H_
-
-
-#include <ft2build.h>
-#include "ttload.h"
-
-
-FT_BEGIN_HEADER
-
-#ifdef FT_CONFIG_OPTION_USE_PNG
-
- FT_LOCAL( FT_Error )
- Load_SBit_Png( FT_GlyphSlot slot,
- FT_Int x_offset,
- FT_Int y_offset,
- FT_Int pix_bits,
- TT_SBit_Metrics metrics,
- FT_Memory memory,
- FT_Byte* data,
- FT_UInt png_len,
- FT_Bool populate_map_and_metrics,
- FT_Bool metrics_only );
-
-#endif
-
-FT_END_HEADER
-
-#endif /* PNGSHIM_H_ */
-
-
-/* END */
diff --git a/src/sfnt/rules.mk b/src/sfnt/rules.mk
deleted file mode 100644
index 230d56c94..000000000
--- a/src/sfnt/rules.mk
+++ /dev/null
@@ -1,81 +0,0 @@
-#
-# FreeType 2 SFNT driver configuration rules
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# SFNT driver directory
-#
-SFNT_DIR := $(SRC_DIR)/sfnt
-
-
-# compilation flags for the driver
-#
-SFNT_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(SFNT_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# SFNT driver sources (i.e., C files)
-#
-SFNT_DRV_SRC := $(SFNT_DIR)/ttload.c \
- $(SFNT_DIR)/ttmtx.c \
- $(SFNT_DIR)/ttcmap.c \
- $(SFNT_DIR)/ttsbit.c \
- $(SFNT_DIR)/ttpost.c \
- $(SFNT_DIR)/ttkern.c \
- $(SFNT_DIR)/ttbdf.c \
- $(SFNT_DIR)/sfobjs.c \
- $(SFNT_DIR)/sfdriver.c \
- $(SFNT_DIR)/sfntpic.c \
- $(SFNT_DIR)/pngshim.c
-
-# SFNT driver headers
-#
-SFNT_DRV_H := $(SFNT_DRV_SRC:%c=%h) \
- $(SFNT_DIR)/sferrors.h
-
-
-# SFNT driver object(s)
-#
-# SFNT_DRV_OBJ_M is used during `multi' builds.
-# SFNT_DRV_OBJ_S is used during `single' builds.
-#
-SFNT_DRV_OBJ_M := $(SFNT_DRV_SRC:$(SFNT_DIR)/%.c=$(OBJ_DIR)/%.$O)
-SFNT_DRV_OBJ_S := $(OBJ_DIR)/sfnt.$O
-
-# SFNT driver source file for single build
-#
-SFNT_DRV_SRC_S := $(SFNT_DIR)/sfnt.c
-
-
-# SFNT driver - single object
-#
-$(SFNT_DRV_OBJ_S): $(SFNT_DRV_SRC_S) $(SFNT_DRV_SRC) \
- $(FREETYPE_H) $(SFNT_DRV_H)
- $(SFNT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(SFNT_DRV_SRC_S))
-
-
-# SFNT driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(SFNT_DIR)/%.c $(FREETYPE_H) $(SFNT_DRV_H)
- $(SFNT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(SFNT_DRV_OBJ_S)
-DRV_OBJS_M += $(SFNT_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/sfnt/sfdriver.c b/src/sfnt/sfdriver.c
deleted file mode 100644
index 991433ee4..000000000
--- a/src/sfnt/sfdriver.c
+++ /dev/null
@@ -1,1285 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfdriver.c */
-/* */
-/* High-level SFNT driver interface (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_SFNT_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_TRUETYPE_IDS_H
-
-#include "sfdriver.h"
-#include "ttload.h"
-#include "sfobjs.h"
-#include "sfntpic.h"
-
-#include "sferrors.h"
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-#include "ttsbit.h"
-#endif
-
-#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
-#include "ttpost.h"
-#endif
-
-#ifdef TT_CONFIG_OPTION_BDF
-#include "ttbdf.h"
-#include FT_SERVICE_BDF_H
-#endif
-
-#include "ttcmap.h"
-#include "ttkern.h"
-#include "ttmtx.h"
-
-#include FT_SERVICE_GLYPH_DICT_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_SFNT_H
-#include FT_SERVICE_TT_CMAP_H
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include FT_MULTIPLE_MASTERS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#endif
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_sfdriver
-
-
- /*
- * SFNT TABLE SERVICE
- *
- */
-
- static void*
- get_sfnt_table( TT_Face face,
- FT_Sfnt_Tag tag )
- {
- void* table;
-
-
- switch ( tag )
- {
- case FT_SFNT_HEAD:
- table = &face->header;
- break;
-
- case FT_SFNT_HHEA:
- table = &face->horizontal;
- break;
-
- case FT_SFNT_VHEA:
- table = face->vertical_info ? &face->vertical : NULL;
- break;
-
- case FT_SFNT_OS2:
- table = ( face->os2.version == 0xFFFFU ) ? NULL : &face->os2;
- break;
-
- case FT_SFNT_POST:
- table = &face->postscript;
- break;
-
- case FT_SFNT_MAXP:
- table = &face->max_profile;
- break;
-
- case FT_SFNT_PCLT:
- table = face->pclt.Version ? &face->pclt : NULL;
- break;
-
- default:
- table = NULL;
- }
-
- return table;
- }
-
-
- static FT_Error
- sfnt_table_info( TT_Face face,
- FT_UInt idx,
- FT_ULong *tag,
- FT_ULong *offset,
- FT_ULong *length )
- {
- if ( !offset || !length )
- return FT_THROW( Invalid_Argument );
-
- if ( !tag )
- *length = face->num_tables;
- else
- {
- if ( idx >= face->num_tables )
- return FT_THROW( Table_Missing );
-
- *tag = face->dir_tables[idx].Tag;
- *offset = face->dir_tables[idx].Offset;
- *length = face->dir_tables[idx].Length;
- }
-
- return FT_Err_Ok;
- }
-
-
- FT_DEFINE_SERVICE_SFNT_TABLEREC(
- sfnt_service_sfnt_table,
-
- (FT_SFNT_TableLoadFunc)tt_face_load_any, /* load_table */
- (FT_SFNT_TableGetFunc) get_sfnt_table, /* get_table */
- (FT_SFNT_TableInfoFunc)sfnt_table_info /* table_info */
- )
-
-
-#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
-
- /*
- * GLYPH DICT SERVICE
- *
- */
-
- static FT_Error
- sfnt_get_glyph_name( FT_Face face,
- FT_UInt glyph_index,
- FT_Pointer buffer,
- FT_UInt buffer_max )
- {
- FT_String* gname;
- FT_Error error;
-
-
- error = tt_face_get_ps_name( (TT_Face)face, glyph_index, &gname );
- if ( !error )
- FT_STRCPYN( buffer, gname, buffer_max );
-
- return error;
- }
-
-
- static FT_UInt
- sfnt_get_name_index( FT_Face face,
- FT_String* glyph_name )
- {
- TT_Face ttface = (TT_Face)face;
-
- FT_UInt i, max_gid = FT_UINT_MAX;
-
-
- if ( face->num_glyphs < 0 )
- return 0;
- else if ( (FT_ULong)face->num_glyphs < FT_UINT_MAX )
- max_gid = (FT_UInt)face->num_glyphs;
- else
- FT_TRACE0(( "Ignore glyph names for invalid GID 0x%08x - 0x%08x\n",
- FT_UINT_MAX, face->num_glyphs ));
-
- for ( i = 0; i < max_gid; i++ )
- {
- FT_String* gname;
- FT_Error error = tt_face_get_ps_name( ttface, i, &gname );
-
-
- if ( error )
- continue;
-
- if ( !ft_strcmp( glyph_name, gname ) )
- return i;
- }
-
- return 0;
- }
-
-
- FT_DEFINE_SERVICE_GLYPHDICTREC(
- sfnt_service_glyph_dict,
-
- (FT_GlyphDict_GetNameFunc) sfnt_get_glyph_name, /* get_name */
- (FT_GlyphDict_NameIndexFunc)sfnt_get_name_index /* name_index */
- )
-
-#endif /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */
-
-
- /*
- * POSTSCRIPT NAME SERVICE
- *
- */
-
- /* an array representing allowed ASCII characters in a PS string */
- static const unsigned char sfnt_ps_map[16] =
- {
- /* 4 0 C 8 */
- 0x00, 0x00, /* 0x00: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 */
- 0x00, 0x00, /* 0x10: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 */
- 0xDE, 0x7C, /* 0x20: 1 1 0 1 1 1 1 0 0 1 1 1 1 1 0 0 */
- 0xFF, 0xAF, /* 0x30: 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 */
- 0xFF, 0xFF, /* 0x40: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 */
- 0xFF, 0xD7, /* 0x50: 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 */
- 0xFF, 0xFF, /* 0x60: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 */
- 0xFF, 0x57 /* 0x70: 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1 1 */
- };
-
-
- static int
- sfnt_is_postscript( int c )
- {
- unsigned int cc;
-
-
- if ( c < 0 || c >= 0x80 )
- return 0;
-
- cc = (unsigned int)c;
-
- return sfnt_ps_map[cc >> 3] & ( 1 << ( cc & 0x07 ) );
- }
-
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-
- /* Only ASCII letters and digits are taken for a variation font */
- /* instance's PostScript name. */
- /* */
- /* `ft_isalnum' is a macro, but we need a function here, thus */
- /* this definition. */
- static int
- sfnt_is_alphanumeric( int c )
- {
- return ft_isalnum( c );
- }
-
-
- /* the implementation of MurmurHash3 is taken and adapted from */
- /* https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp */
-
-#define ROTL32( x, r ) ( x << r ) | ( x >> ( 32 - r ) )
-
-
- static FT_UInt32
- fmix32( FT_UInt32 h )
- {
- h ^= h >> 16;
- h *= 0x85ebca6b;
- h ^= h >> 13;
- h *= 0xc2b2ae35;
- h ^= h >> 16;
-
- return h;
- }
-
-
- static void
- murmur_hash_3_128( const void* key,
- const unsigned int len,
- FT_UInt32 seed,
- void* out )
- {
- const FT_Byte* data = (const FT_Byte*)key;
- const int nblocks = (int)len / 16;
-
- FT_UInt32 h1 = seed;
- FT_UInt32 h2 = seed;
- FT_UInt32 h3 = seed;
- FT_UInt32 h4 = seed;
-
- const FT_UInt32 c1 = 0x239b961b;
- const FT_UInt32 c2 = 0xab0e9789;
- const FT_UInt32 c3 = 0x38b34ae5;
- const FT_UInt32 c4 = 0xa1e38b93;
-
- const FT_UInt32* blocks = (const FT_UInt32*)( data + nblocks * 16 );
-
- int i;
-
-
- for( i = -nblocks; i; i++ )
- {
- FT_UInt32 k1 = blocks[i * 4 + 0];
- FT_UInt32 k2 = blocks[i * 4 + 1];
- FT_UInt32 k3 = blocks[i * 4 + 2];
- FT_UInt32 k4 = blocks[i * 4 + 3];
-
-
- k1 *= c1;
- k1 = ROTL32( k1, 15 );
- k1 *= c2;
- h1 ^= k1;
-
- h1 = ROTL32( h1, 19 );
- h1 += h2;
- h1 = h1 * 5 + 0x561ccd1b;
-
- k2 *= c2;
- k2 = ROTL32( k2, 16 );
- k2 *= c3;
- h2 ^= k2;
-
- h2 = ROTL32( h2, 17 );
- h2 += h3;
- h2 = h2 * 5 + 0x0bcaa747;
-
- k3 *= c3;
- k3 = ROTL32( k3, 17 );
- k3 *= c4;
- h3 ^= k3;
-
- h3 = ROTL32( h3, 15 );
- h3 += h4;
- h3 = h3 * 5 + 0x96cd1c35;
-
- k4 *= c4;
- k4 = ROTL32( k4, 18 );
- k4 *= c1;
- h4 ^= k4;
-
- h4 = ROTL32( h4, 13 );
- h4 += h1;
- h4 = h4 * 5 + 0x32ac3b17;
- }
-
- {
- const FT_Byte* tail = (const FT_Byte*)( data + nblocks * 16 );
-
- FT_UInt32 k1 = 0;
- FT_UInt32 k2 = 0;
- FT_UInt32 k3 = 0;
- FT_UInt32 k4 = 0;
-
-
- switch ( len & 15 )
- {
- case 15:
- k4 ^= (FT_UInt32)tail[14] << 16;
- case 14:
- k4 ^= (FT_UInt32)tail[13] << 8;
- case 13:
- k4 ^= (FT_UInt32)tail[12];
- k4 *= c4;
- k4 = ROTL32( k4, 18 );
- k4 *= c1;
- h4 ^= k4;
-
- case 12:
- k3 ^= (FT_UInt32)tail[11] << 24;
- case 11:
- k3 ^= (FT_UInt32)tail[10] << 16;
- case 10:
- k3 ^= (FT_UInt32)tail[9] << 8;
- case 9:
- k3 ^= (FT_UInt32)tail[8];
- k3 *= c3;
- k3 = ROTL32( k3, 17 );
- k3 *= c4;
- h3 ^= k3;
-
- case 8:
- k2 ^= (FT_UInt32)tail[7] << 24;
- case 7:
- k2 ^= (FT_UInt32)tail[6] << 16;
- case 6:
- k2 ^= (FT_UInt32)tail[5] << 8;
- case 5:
- k2 ^= (FT_UInt32)tail[4];
- k2 *= c2;
- k2 = ROTL32( k2, 16 );
- k2 *= c3;
- h2 ^= k2;
-
- case 4:
- k1 ^= (FT_UInt32)tail[3] << 24;
- case 3:
- k1 ^= (FT_UInt32)tail[2] << 16;
- case 2:
- k1 ^= (FT_UInt32)tail[1] << 8;
- case 1:
- k1 ^= (FT_UInt32)tail[0];
- k1 *= c1;
- k1 = ROTL32( k1, 15 );
- k1 *= c2;
- h1 ^= k1;
- }
- }
-
- h1 ^= len;
- h2 ^= len;
- h3 ^= len;
- h4 ^= len;
-
- h1 += h2;
- h1 += h3;
- h1 += h4;
-
- h2 += h1;
- h3 += h1;
- h4 += h1;
-
- h1 = fmix32( h1 );
- h2 = fmix32( h2 );
- h3 = fmix32( h3 );
- h4 = fmix32( h4 );
-
- h1 += h2;
- h1 += h3;
- h1 += h4;
-
- h2 += h1;
- h3 += h1;
- h4 += h1;
-
- ((FT_UInt32*)out)[0] = h1;
- ((FT_UInt32*)out)[1] = h2;
- ((FT_UInt32*)out)[2] = h3;
- ((FT_UInt32*)out)[3] = h4;
- }
-
-
-#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
-
-
- typedef int (*char_type_func)( int c );
-
-
- /* handling of PID/EID 3/0 and 3/1 is the same */
-#define IS_WIN( n ) ( (n)->platformID == 3 && \
- ( (n)->encodingID == 1 || (n)->encodingID == 0 ) && \
- (n)->languageID == 0x409 )
-
-#define IS_APPLE( n ) ( (n)->platformID == 1 && \
- (n)->encodingID == 0 && \
- (n)->languageID == 0 )
-
- static char*
- get_win_string( FT_Memory memory,
- FT_Stream stream,
- TT_Name entry,
- char_type_func char_type,
- FT_Bool report_invalid_characters )
- {
- FT_Error error = FT_Err_Ok;
-
- char* result = NULL;
- FT_String* r;
- FT_Char* p;
- FT_UInt len;
-
- FT_UNUSED( error );
-
-
- if ( FT_ALLOC( result, entry->stringLength / 2 + 1 ) )
- return NULL;
-
- if ( FT_STREAM_SEEK( entry->stringOffset ) ||
- FT_FRAME_ENTER( entry->stringLength ) )
- {
- FT_FREE( result );
- entry->stringLength = 0;
- entry->stringOffset = 0;
- FT_FREE( entry->string );
-
- return NULL;
- }
-
- r = (FT_String*)result;
- p = (FT_Char*)stream->cursor;
-
- for ( len = entry->stringLength / 2; len > 0; len--, p += 2 )
- {
- if ( p[0] == 0 )
- {
- if ( char_type( p[1] ) )
- *r++ = p[1];
- else
- {
- if ( report_invalid_characters )
- {
- FT_TRACE0(( "get_win_string:"
- " Character `%c' (0x%X) invalid in PS name string\n",
- p[1], p[1] ));
- /* it's not the job of FreeType to correct PS names... */
- *r++ = p[1];
- }
- }
- }
- }
- *r = '\0';
-
- FT_FRAME_EXIT();
-
- return result;
- }
-
-
- static char*
- get_apple_string( FT_Memory memory,
- FT_Stream stream,
- TT_Name entry,
- char_type_func char_type,
- FT_Bool report_invalid_characters )
- {
- FT_Error error = FT_Err_Ok;
-
- char* result = NULL;
- FT_String* r;
- FT_Char* p;
- FT_UInt len;
-
- FT_UNUSED( error );
-
-
- if ( FT_ALLOC( result, entry->stringLength + 1 ) )
- return NULL;
-
- if ( FT_STREAM_SEEK( entry->stringOffset ) ||
- FT_FRAME_ENTER( entry->stringLength ) )
- {
- FT_FREE( result );
- entry->stringOffset = 0;
- entry->stringLength = 0;
- FT_FREE( entry->string );
-
- return NULL;
- }
-
- r = (FT_String*)result;
- p = (FT_Char*)stream->cursor;
-
- for ( len = entry->stringLength; len > 0; len--, p++ )
- {
- if ( char_type( *p ) )
- *r++ = *p;
- else
- {
- if ( report_invalid_characters )
- {
- FT_TRACE0(( "get_apple_string:"
- " Character `%c' (0x%X) invalid in PS name string\n",
- *p, *p ));
- /* it's not the job of FreeType to correct PS names... */
- *r++ = *p;
- }
- }
- }
- *r = '\0';
-
- FT_FRAME_EXIT();
-
- return result;
- }
-
-
- static FT_Bool
- sfnt_get_name_id( TT_Face face,
- FT_UShort id,
- FT_Int *win,
- FT_Int *apple )
- {
- FT_Int n;
-
-
- *win = -1;
- *apple = -1;
-
- for ( n = 0; n < face->num_names; n++ )
- {
- TT_Name name = face->name_table.names + n;
-
-
- if ( name->nameID == id && name->stringLength > 0 )
- {
- if ( IS_WIN( name ) )
- *win = n;
-
- if ( IS_APPLE( name ) )
- *apple = n;
- }
- }
-
- return ( *win >= 0 ) || ( *apple >= 0 );
- }
-
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-
- /*
- The maximum length of an axis value descriptor.
-
- We need 65536 different values for the decimal fraction; this fits
- nicely into five decimal places. Consequently, it consists of
-
- . the minus sign if the number is negative,
- . up to five characters for the digits before the decimal point,
- . the decimal point if there is a fractional part, and
- . up to five characters for the digits after the decimal point.
-
- We also need one byte for the leading `_' character and up to four
- bytes for the axis tag.
- */
-#define MAX_VALUE_DESCRIPTOR_LEN ( 1 + 5 + 1 + 5 + 1 + 4 )
-
-
- /* the maximum length of PostScript font names */
-#define MAX_PS_NAME_LEN 127
-
-
- /*
- * Find the shortest decimal representation of a 16.16 fixed point
- * number. The function fills `buf' with the result, returning a pointer
- * to the position after the representation's last byte.
- */
-
- static char*
- fixed2float( FT_Int fixed,
- char* buf )
- {
- char* p;
- char* q;
- char tmp[5];
-
- FT_Int int_part;
- FT_Int frac_part;
-
- FT_Int i;
-
-
- p = buf;
-
- if ( fixed == 0 )
- {
- *p++ = '0';
- return p;
- }
-
- if ( fixed < 0 )
- {
- *p++ = '-';
- fixed = -fixed;
- }
-
- int_part = ( fixed >> 16 ) & 0xFFFF;
- frac_part = fixed & 0xFFFF;
-
- /* get digits of integer part (in reverse order) */
- q = tmp;
- while ( int_part > 0 )
- {
- *q++ = '0' + int_part % 10;
- int_part /= 10;
- }
-
- /* copy digits in correct order to buffer */
- while ( q > tmp )
- *p++ = *--q;
-
- if ( !frac_part )
- return p;
-
- /* save position of point */
- q = p;
- *p++ = '.';
-
- /* apply rounding */
- frac_part = frac_part * 10 + 5;
-
- /* get digits of fractional part */
- for ( i = 0; i < 5; i++ )
- {
- *p++ = '0' + (char)( frac_part / 0x10000L );
-
- frac_part %= 0x10000L;
- if ( !frac_part )
- break;
-
- frac_part *= 10;
- }
-
- /*
- If the remainder stored in `frac_part' (after the last FOR loop) is
- smaller than 34480*10, the resulting decimal value minus 0.00001 is
- an equivalent representation of `fixed'.
-
- The above FOR loop always finds the larger of the two values; I
- verified this by iterating over all possible fixed point numbers.
-
- If the remainder is 17232*10, both values are equally good, and we
- take the next even number (following IEEE 754's `round to nearest,
- ties to even' rounding rule).
-
- If the remainder is smaller than 17232*10, the lower of the two
- numbers is nearer to the exact result (values 17232 and 34480 were
- also found by testing all possible fixed point values).
-
- We use this to find a shorter decimal representation. If not ending
- with digit zero, we take the representation with less error.
- */
- p--;
- if ( p - q == 5 ) /* five digits? */
- {
- /* take the representation that has zero as the last digit */
- if ( frac_part < 34480 * 10 &&
- *p == '1' )
- *p = '0';
-
- /* otherwise use the one with less error */
- else if ( frac_part == 17232 * 10 &&
- *p & 1 )
- *p -= 1;
-
- else if ( frac_part < 17232 * 10 &&
- *p != '0' )
- *p -= 1;
- }
-
- /* remove trailing zeros */
- while ( *p == '0' )
- *p-- = '\0';
-
- return p + 1;
- }
-
-
- static const char hexdigits[16] =
- {
- '0', '1', '2', '3', '4', '5', '6', '7',
- '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
- };
-
-
- static const char*
- sfnt_get_var_ps_name( TT_Face face )
- {
- FT_Error error;
- FT_Memory memory = face->root.memory;
-
- FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
-
- FT_UInt num_coords;
- FT_Fixed* coords;
- FT_MM_Var* mm_var;
-
- FT_Int found, win, apple;
- FT_UInt i, j;
-
- char* result = NULL;
- char* p;
-
-
- if ( !face->var_postscript_prefix )
- {
- FT_UInt len;
-
-
- /* check whether we have a Variations PostScript Name Prefix */
- found = sfnt_get_name_id( face,
- TT_NAME_ID_VARIATIONS_PREFIX,
- &win,
- &apple );
- if ( !found )
- {
- /* otherwise use the typographic family name */
- found = sfnt_get_name_id( face,
- TT_NAME_ID_TYPOGRAPHIC_FAMILY,
- &win,
- &apple );
- }
-
- if ( !found )
- {
- /* as a last resort we try the family name; note that this is */
- /* not in the Adobe TechNote, but GX fonts (which predate the */
- /* TechNote) benefit from this behaviour */
- found = sfnt_get_name_id( face,
- TT_NAME_ID_FONT_FAMILY,
- &win,
- &apple );
- }
-
- if ( !found )
- {
- FT_TRACE0(( "sfnt_get_var_ps_name:"
- " Can't construct PS name prefix for font instances\n" ));
- return NULL;
- }
-
- /* prefer Windows entries over Apple */
- if ( win != -1 )
- result = get_win_string( face->root.memory,
- face->name_table.stream,
- face->name_table.names + win,
- sfnt_is_alphanumeric,
- 0 );
- else
- result = get_apple_string( face->root.memory,
- face->name_table.stream,
- face->name_table.names + apple,
- sfnt_is_alphanumeric,
- 0 );
-
- len = ft_strlen( result );
-
- /* sanitize if necessary; we reserve space for 36 bytes (a 128bit */
- /* checksum as a hex number, preceded by `-' and followed by three */
- /* ASCII dots, to be used if the constructed PS name would be too */
- /* long); this is also sufficient for a single instance */
- if ( len > MAX_PS_NAME_LEN - ( 1 + 32 + 3 ) )
- {
- len = MAX_PS_NAME_LEN - ( 1 + 32 + 3 );
- result[len] = '\0';
-
- FT_TRACE0(( "sfnt_get_var_ps_name:"
- " Shortening variation PS name prefix\n"
- " "
- " to %d characters\n", len ));
- }
-
- face->var_postscript_prefix = result;
- face->var_postscript_prefix_len = len;
- }
-
- mm->get_var_blend( FT_FACE( face ),
- &num_coords,
- &coords,
- NULL,
- &mm_var );
-
- if ( FT_IS_NAMED_INSTANCE( FT_FACE( face ) ) )
- {
- SFNT_Service sfnt = (SFNT_Service)face->sfnt;
-
- FT_Long instance = ( ( face->root.face_index & 0x7FFF0000L ) >> 16 ) - 1;
- FT_UInt psid = mm_var->namedstyle[instance].psid;
-
- char* ps_name = NULL;
-
-
- /* try first to load the name string with index `postScriptNameID' */
- if ( psid == 6 ||
- ( psid > 255 && psid < 32768 ) )
- (void)sfnt->get_name( face, (FT_UShort)psid, &ps_name );
-
- if ( ps_name )
- {
- result = ps_name;
- p = result + ft_strlen( result ) + 1;
-
- goto check_length;
- }
- else
- {
- /* otherwise construct a name using `subfamilyNameID' */
- FT_UInt strid = mm_var->namedstyle[instance].strid;
-
- char* subfamily_name;
- char* s;
-
-
- (void)sfnt->get_name( face, (FT_UShort)strid, &subfamily_name );
-
- if ( !subfamily_name )
- {
- FT_TRACE1(( "sfnt_get_var_ps_name:"
- " can't construct named instance PS name;\n"
- " "
- " trying to construct normal instance PS name\n" ));
- goto construct_instance_name;
- }
-
- /* after the prefix we have character `-' followed by the */
- /* subfamily name (using only characters a-z, A-Z, and 0-9) */
- if ( FT_ALLOC( result, face->var_postscript_prefix_len +
- 1 + ft_strlen( subfamily_name ) + 1 ) )
- return NULL;
-
- ft_strcpy( result, face->var_postscript_prefix );
-
- p = result + face->var_postscript_prefix_len;
- *p++ = '-';
-
- s = subfamily_name;
- while ( *s )
- {
- if ( ft_isalnum( *s ) )
- *p++ = *s;
- s++;
- }
- *p++ = '\0';
-
- FT_FREE( subfamily_name );
- }
- }
- else
- {
- FT_Var_Axis* axis;
-
-
- construct_instance_name:
- axis = mm_var->axis;
-
- if ( FT_ALLOC( result,
- face->var_postscript_prefix_len +
- num_coords * MAX_VALUE_DESCRIPTOR_LEN + 1 ) )
- return NULL;
-
- p = result;
-
- ft_strcpy( p, face->var_postscript_prefix );
- p += face->var_postscript_prefix_len;
-
- for ( i = 0; i < num_coords; i++, coords++, axis++ )
- {
- char t;
-
-
- /* omit axis value descriptor if it is identical */
- /* to the default axis value */
- if ( *coords == axis->def )
- continue;
-
- *p++ = '_';
- p = fixed2float( *coords, p );
-
- t = (char)( axis->tag >> 24 );
- if ( t != ' ' && ft_isalnum( t ) )
- *p++ = t;
- t = (char)( axis->tag >> 16 );
- if ( t != ' ' && ft_isalnum( t ) )
- *p++ = t;
- t = (char)( axis->tag >> 8 );
- if ( t != ' ' && ft_isalnum( t ) )
- *p++ = t;
- t = (char)axis->tag;
- if ( t != ' ' && ft_isalnum( t ) )
- *p++ = t;
- }
- }
-
- check_length:
- if ( p - result > MAX_PS_NAME_LEN )
- {
- /* the PS name is too long; replace the part after the prefix with */
- /* a checksum; we use MurmurHash 3 with a hash length of 128 bit */
-
- FT_UInt32 seed = 123456789;
-
- FT_UInt32 hash[4];
- FT_UInt32* h;
-
-
- murmur_hash_3_128( result, p - result, seed, hash );
-
- p = result + face->var_postscript_prefix_len;
- *p++ = '-';
-
- /* we convert the hash value to hex digits from back to front */
- p += 32 + 3;
- h = hash + 3;
-
- *p-- = '\0';
- *p-- = '.';
- *p-- = '.';
- *p-- = '.';
-
- for ( i = 0; i < 4; i++, h-- )
- {
- FT_UInt32 v = *h;
-
-
- for ( j = 0; j < 8; j++ )
- {
- *p-- = hexdigits[v & 0xF];
- v >>= 4;
- }
- }
- }
-
- return result;
- }
-
-#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
-
-
- static const char*
- sfnt_get_ps_name( TT_Face face )
- {
- FT_Int found, win, apple;
- const char* result = NULL;
-
-
- if ( face->postscript_name )
- return face->postscript_name;
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- if ( face->blend )
- {
- face->postscript_name = sfnt_get_var_ps_name( face );
- return face->postscript_name;
- }
-#endif
-
- /* scan the name table to see whether we have a Postscript name here, */
- /* either in Macintosh or Windows platform encodings */
- found = sfnt_get_name_id( face, TT_NAME_ID_PS_NAME, &win, &apple );
- if ( !found )
- return NULL;
-
- /* prefer Windows entries over Apple */
- if ( win != -1 )
- result = get_win_string( face->root.memory,
- face->name_table.stream,
- face->name_table.names + win,
- sfnt_is_postscript,
- 1 );
- else
- result = get_apple_string( face->root.memory,
- face->name_table.stream,
- face->name_table.names + apple,
- sfnt_is_postscript,
- 1 );
-
- face->postscript_name = result;
-
- return result;
- }
-
-
- FT_DEFINE_SERVICE_PSFONTNAMEREC(
- sfnt_service_ps_name,
-
- (FT_PsName_GetFunc)sfnt_get_ps_name /* get_ps_font_name */
- )
-
-
- /*
- * TT CMAP INFO
- */
- FT_DEFINE_SERVICE_TTCMAPSREC(
- tt_service_get_cmap_info,
-
- (TT_CMap_Info_GetFunc)tt_get_cmap_info /* get_cmap_info */
- )
-
-
-#ifdef TT_CONFIG_OPTION_BDF
-
- static FT_Error
- sfnt_get_charset_id( TT_Face face,
- const char* *acharset_encoding,
- const char* *acharset_registry )
- {
- BDF_PropertyRec encoding, registry;
- FT_Error error;
-
-
- /* XXX: I don't know whether this is correct, since
- * tt_face_find_bdf_prop only returns something correct if we have
- * previously selected a size that is listed in the BDF table.
- * Should we change the BDF table format to include single offsets
- * for `CHARSET_REGISTRY' and `CHARSET_ENCODING'?
- */
- error = tt_face_find_bdf_prop( face, "CHARSET_REGISTRY", &registry );
- if ( !error )
- {
- error = tt_face_find_bdf_prop( face, "CHARSET_ENCODING", &encoding );
- if ( !error )
- {
- if ( registry.type == BDF_PROPERTY_TYPE_ATOM &&
- encoding.type == BDF_PROPERTY_TYPE_ATOM )
- {
- *acharset_encoding = encoding.u.atom;
- *acharset_registry = registry.u.atom;
- }
- else
- error = FT_THROW( Invalid_Argument );
- }
- }
-
- return error;
- }
-
-
- FT_DEFINE_SERVICE_BDFRec(
- sfnt_service_bdf,
-
- (FT_BDF_GetCharsetIdFunc)sfnt_get_charset_id, /* get_charset_id */
- (FT_BDF_GetPropertyFunc) tt_face_find_bdf_prop /* get_property */
- )
-
-
-#endif /* TT_CONFIG_OPTION_BDF */
-
-
- /*
- * SERVICE LIST
- */
-
-#if defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES && defined TT_CONFIG_OPTION_BDF
- FT_DEFINE_SERVICEDESCREC5(
- sfnt_services,
-
- FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_GLYPH_DICT, &SFNT_SERVICE_GLYPH_DICT_GET,
- FT_SERVICE_ID_BDF, &SFNT_SERVICE_BDF_GET,
- FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET )
-#elif defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES
- FT_DEFINE_SERVICEDESCREC4(
- sfnt_services,
-
- FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_GLYPH_DICT, &SFNT_SERVICE_GLYPH_DICT_GET,
- FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET )
-#elif defined TT_CONFIG_OPTION_BDF
- FT_DEFINE_SERVICEDESCREC4(
- sfnt_services,
-
- FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_BDF, &SFNT_SERVICE_BDF_GET,
- FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET )
-#else
- FT_DEFINE_SERVICEDESCREC3(
- sfnt_services,
-
- FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
- FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET )
-#endif
-
-
- FT_CALLBACK_DEF( FT_Module_Interface )
- sfnt_get_interface( FT_Module module,
- const char* module_interface )
- {
- /* SFNT_SERVICES_GET dereferences `library' in PIC mode */
-#ifdef FT_CONFIG_OPTION_PIC
- FT_Library library;
-
-
- if ( !module )
- return NULL;
- library = module->library;
- if ( !library )
- return NULL;
-#else
- FT_UNUSED( module );
-#endif
-
- return ft_service_list_lookup( SFNT_SERVICES_GET, module_interface );
- }
-
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-#define PUT_EMBEDDED_BITMAPS( a ) a
-#else
-#define PUT_EMBEDDED_BITMAPS( a ) NULL
-#endif
-
-#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
-#define PUT_PS_NAMES( a ) a
-#else
-#define PUT_PS_NAMES( a ) NULL
-#endif
-
- FT_DEFINE_SFNT_INTERFACE(
- sfnt_interface,
-
- tt_face_goto_table, /* TT_Loader_GotoTableFunc goto_table */
-
- sfnt_init_face, /* TT_Init_Face_Func init_face */
- sfnt_load_face, /* TT_Load_Face_Func load_face */
- sfnt_done_face, /* TT_Done_Face_Func done_face */
- sfnt_get_interface, /* FT_Module_Requester get_interface */
-
- tt_face_load_any, /* TT_Load_Any_Func load_any */
-
- tt_face_load_head, /* TT_Load_Table_Func load_head */
- tt_face_load_hhea, /* TT_Load_Metrics_Func load_hhea */
- tt_face_load_cmap, /* TT_Load_Table_Func load_cmap */
- tt_face_load_maxp, /* TT_Load_Table_Func load_maxp */
- tt_face_load_os2, /* TT_Load_Table_Func load_os2 */
- tt_face_load_post, /* TT_Load_Table_Func load_post */
-
- tt_face_load_name, /* TT_Load_Table_Func load_name */
- tt_face_free_name, /* TT_Free_Table_Func free_name */
-
- tt_face_load_kern, /* TT_Load_Table_Func load_kern */
- tt_face_load_gasp, /* TT_Load_Table_Func load_gasp */
- tt_face_load_pclt, /* TT_Load_Table_Func load_init */
-
- /* see `ttload.h' */
- PUT_EMBEDDED_BITMAPS( tt_face_load_bhed ),
- /* TT_Load_Table_Func load_bhed */
- PUT_EMBEDDED_BITMAPS( tt_face_load_sbit_image ),
- /* TT_Load_SBit_Image_Func load_sbit_image */
-
- /* see `ttpost.h' */
- PUT_PS_NAMES( tt_face_get_ps_name ),
- /* TT_Get_PS_Name_Func get_psname */
- PUT_PS_NAMES( tt_face_free_ps_names ),
- /* TT_Free_Table_Func free_psnames */
-
- /* since version 2.1.8 */
- tt_face_get_kerning, /* TT_Face_GetKerningFunc get_kerning */
-
- /* since version 2.2 */
- tt_face_load_font_dir, /* TT_Load_Table_Func load_font_dir */
- tt_face_load_hmtx, /* TT_Load_Metrics_Func load_hmtx */
-
- /* see `ttsbit.h' and `sfnt.h' */
- PUT_EMBEDDED_BITMAPS( tt_face_load_sbit ),
- /* TT_Load_Table_Func load_eblc */
- PUT_EMBEDDED_BITMAPS( tt_face_free_sbit ),
- /* TT_Free_Table_Func free_eblc */
-
- PUT_EMBEDDED_BITMAPS( tt_face_set_sbit_strike ),
- /* TT_Set_SBit_Strike_Func set_sbit_strike */
- PUT_EMBEDDED_BITMAPS( tt_face_load_strike_metrics ),
- /* TT_Load_Strike_Metrics_Func load_strike_metrics */
-
- tt_face_get_metrics, /* TT_Get_Metrics_Func get_metrics */
-
- tt_face_get_name, /* TT_Get_Name_Func get_name */
- sfnt_get_name_id /* TT_Get_Name_ID_Func get_name_id */
- )
-
-
- FT_DEFINE_MODULE(
- sfnt_module_class,
-
- 0, /* not a font driver or renderer */
- sizeof ( FT_ModuleRec ),
-
- "sfnt", /* driver name */
- 0x10000L, /* driver version 1.0 */
- 0x20000L, /* driver requires FreeType 2.0 or higher */
-
- (const void*)&SFNT_INTERFACE_GET, /* module specific interface */
-
- (FT_Module_Constructor)NULL, /* module_init */
- (FT_Module_Destructor) NULL, /* module_done */
- (FT_Module_Requester) sfnt_get_interface /* get_interface */
- )
-
-
-/* END */
diff --git a/src/sfnt/sfdriver.h b/src/sfnt/sfdriver.h
deleted file mode 100644
index 38710b60f..000000000
--- a/src/sfnt/sfdriver.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfdriver.h */
-/* */
-/* High-level SFNT driver interface (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SFDRIVER_H_
-#define SFDRIVER_H_
-
-
-#include <ft2build.h>
-#include FT_MODULE_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_DECLARE_MODULE( sfnt_module_class )
-
-
-FT_END_HEADER
-
-#endif /* SFDRIVER_H_ */
-
-
-/* END */
diff --git a/src/sfnt/sferrors.h b/src/sfnt/sferrors.h
deleted file mode 100644
index 3cf73d725..000000000
--- a/src/sfnt/sferrors.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* sferrors.h */
-/* */
-/* SFNT error codes (specification only). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the SFNT error enumeration constants. */
- /* */
- /*************************************************************************/
-
-#ifndef SFERRORS_H_
-#define SFERRORS_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX SFNT_Err_
-#define FT_ERR_BASE FT_Mod_Err_SFNT
-
-#include FT_ERRORS_H
-
-#endif /* SFERRORS_H_ */
-
-
-/* END */
diff --git a/src/sfnt/sfnt.c b/src/sfnt/sfnt.c
deleted file mode 100644
index 6cf8c9ef3..000000000
--- a/src/sfnt/sfnt.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfnt.c */
-/* */
-/* Single object library component. */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "pngshim.c"
-#include "sfdriver.c"
-#include "sfntpic.c"
-#include "sfobjs.c"
-#include "ttbdf.c"
-#include "ttcmap.c"
-#include "ttkern.c"
-#include "ttload.c"
-#include "ttmtx.c"
-#include "ttpost.c"
-#include "ttsbit.c"
-
-
-/* END */
diff --git a/src/sfnt/sfntpic.c b/src/sfnt/sfntpic.c
deleted file mode 100644
index 8eadd601f..000000000
--- a/src/sfnt/sfntpic.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfntpic.c */
-/* */
-/* The FreeType position independent code services for sfnt module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "sfntpic.h"
-#include "sferrors.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from sfdriver.c */
- FT_Error
- FT_Create_Class_sfnt_services( FT_Library library,
- FT_ServiceDescRec** output_class );
- void
- FT_Destroy_Class_sfnt_services( FT_Library library,
- FT_ServiceDescRec* clazz );
- void
- FT_Init_Class_sfnt_service_bdf( FT_Service_BDFRec* clazz );
- void
- FT_Init_Class_sfnt_interface( FT_Library library,
- SFNT_Interface* clazz );
- void
- FT_Init_Class_sfnt_service_glyph_dict(
- FT_Library library,
- FT_Service_GlyphDictRec* clazz );
- void
- FT_Init_Class_sfnt_service_ps_name(
- FT_Library library,
- FT_Service_PsFontNameRec* clazz );
- void
- FT_Init_Class_tt_service_get_cmap_info(
- FT_Library library,
- FT_Service_TTCMapsRec* clazz );
- void
- FT_Init_Class_sfnt_service_sfnt_table(
- FT_Service_SFNT_TableRec* clazz );
-
-
- /* forward declaration of PIC init functions from ttcmap.c */
- FT_Error
- FT_Create_Class_tt_cmap_classes( FT_Library library,
- TT_CMap_Class** output_class );
- void
- FT_Destroy_Class_tt_cmap_classes( FT_Library library,
- TT_CMap_Class* clazz );
-
-
- void
- sfnt_module_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->sfnt )
- {
- sfntModulePIC* container = (sfntModulePIC*)pic_container->sfnt;
-
-
- if ( container->sfnt_services )
- FT_Destroy_Class_sfnt_services( library,
- container->sfnt_services );
- container->sfnt_services = NULL;
-
- if ( container->tt_cmap_classes )
- FT_Destroy_Class_tt_cmap_classes( library,
- container->tt_cmap_classes );
- container->tt_cmap_classes = NULL;
-
- FT_FREE( container );
- pic_container->sfnt = NULL;
- }
- }
-
-
- FT_Error
- sfnt_module_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- sfntModulePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->sfnt = container;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- error = FT_Create_Class_sfnt_services( library,
- &container->sfnt_services );
- if ( error )
- goto Exit;
-
- error = FT_Create_Class_tt_cmap_classes( library,
- &container->tt_cmap_classes );
- if ( error )
- goto Exit;
-
- FT_Init_Class_sfnt_service_glyph_dict(
- library, &container->sfnt_service_glyph_dict );
- FT_Init_Class_sfnt_service_ps_name(
- library, &container->sfnt_service_ps_name );
- FT_Init_Class_tt_service_get_cmap_info(
- library, &container->tt_service_get_cmap_info );
- FT_Init_Class_sfnt_service_sfnt_table(
- &container->sfnt_service_sfnt_table );
-#ifdef TT_CONFIG_OPTION_BDF
- FT_Init_Class_sfnt_service_bdf( &container->sfnt_service_bdf );
-#endif
- FT_Init_Class_sfnt_interface( library, &container->sfnt_interface );
-
- Exit:
- if ( error )
- sfnt_module_class_pic_free( library );
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/sfnt/sfntpic.h b/src/sfnt/sfntpic.h
deleted file mode 100644
index 3afb668db..000000000
--- a/src/sfnt/sfntpic.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfntpic.h */
-/* */
-/* The FreeType position independent code services for sfnt module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SFNTPIC_H_
-#define SFNTPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define SFNT_SERVICES_GET sfnt_services
-#define SFNT_SERVICE_GLYPH_DICT_GET sfnt_service_glyph_dict
-#define SFNT_SERVICE_PS_NAME_GET sfnt_service_ps_name
-#define TT_SERVICE_CMAP_INFO_GET tt_service_get_cmap_info
-#define TT_CMAP_CLASSES_GET tt_cmap_classes
-#define SFNT_SERVICE_SFNT_TABLE_GET sfnt_service_sfnt_table
-#define SFNT_SERVICE_BDF_GET sfnt_service_bdf
-#define SFNT_INTERFACE_GET sfnt_interface
-
-#else /* FT_CONFIG_OPTION_PIC */
-
- /* some include files required for members of sfntModulePIC */
-#include FT_SERVICE_GLYPH_DICT_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_SFNT_H
-#include FT_SERVICE_TT_CMAP_H
-
-#ifdef TT_CONFIG_OPTION_BDF
-#include "ttbdf.h"
-#include FT_SERVICE_BDF_H
-#endif
-
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H
-#include "ttcmap.h"
-
-
-FT_BEGIN_HEADER
-
- typedef struct sfntModulePIC_
- {
- FT_ServiceDescRec* sfnt_services;
- FT_Service_GlyphDictRec sfnt_service_glyph_dict;
- FT_Service_PsFontNameRec sfnt_service_ps_name;
- FT_Service_TTCMapsRec tt_service_get_cmap_info;
- TT_CMap_Class* tt_cmap_classes;
- FT_Service_SFNT_TableRec sfnt_service_sfnt_table;
-#ifdef TT_CONFIG_OPTION_BDF
- FT_Service_BDFRec sfnt_service_bdf;
-#endif
- SFNT_Interface sfnt_interface;
-
- } sfntModulePIC;
-
-
-#define GET_PIC( lib ) \
- ( (sfntModulePIC*)( (lib)->pic_container.sfnt ) )
-
-#define SFNT_SERVICES_GET \
- ( GET_PIC( library )->sfnt_services )
-#define SFNT_SERVICE_GLYPH_DICT_GET \
- ( GET_PIC( library )->sfnt_service_glyph_dict )
-#define SFNT_SERVICE_PS_NAME_GET \
- ( GET_PIC( library )->sfnt_service_ps_name )
-#define TT_SERVICE_CMAP_INFO_GET \
- ( GET_PIC( library )->tt_service_get_cmap_info )
-#define TT_CMAP_CLASSES_GET \
- ( GET_PIC( library )->tt_cmap_classes )
-#define SFNT_SERVICE_SFNT_TABLE_GET \
- ( GET_PIC( library )->sfnt_service_sfnt_table )
-#define SFNT_SERVICE_BDF_GET \
- ( GET_PIC( library )->sfnt_service_bdf )
-#define SFNT_INTERFACE_GET \
- ( GET_PIC( library )->sfnt_interface )
-
-
- /* see sfntpic.c for the implementation */
- void
- sfnt_module_class_pic_free( FT_Library library );
-
- FT_Error
- sfnt_module_class_pic_init( FT_Library library );
-
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* SFNTPIC_H_ */
-
-
-/* END */
diff --git a/src/sfnt/sfobjs.c b/src/sfnt/sfobjs.c
deleted file mode 100644
index 3f54d5d5c..000000000
--- a/src/sfnt/sfobjs.c
+++ /dev/null
@@ -1,1759 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfobjs.c */
-/* */
-/* SFNT object management (base). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include "sfobjs.h"
-#include "ttload.h"
-#include "ttcmap.h"
-#include "ttkern.h"
-#include FT_INTERNAL_SFNT_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_TRUETYPE_IDS_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_SFNT_NAMES_H
-#include FT_GZIP_H
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_METRICS_VARIATIONS_H
-#endif
-
-#include "sferrors.h"
-
-#ifdef TT_CONFIG_OPTION_BDF
-#include "ttbdf.h"
-#endif
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_sfobjs
-
-
-
- /* convert a UTF-16 name entry to ASCII */
- static FT_String*
- tt_name_ascii_from_utf16( TT_Name entry,
- FT_Memory memory )
- {
- FT_String* string = NULL;
- FT_UInt len, code, n;
- FT_Byte* read = (FT_Byte*)entry->string;
- FT_Error error;
-
-
- len = (FT_UInt)entry->stringLength / 2;
-
- if ( FT_NEW_ARRAY( string, len + 1 ) )
- return NULL;
-
- for ( n = 0; n < len; n++ )
- {
- code = FT_NEXT_USHORT( read );
-
- if ( code == 0 )
- break;
-
- if ( code < 32 || code > 127 )
- code = '?';
-
- string[n] = (char)code;
- }
-
- string[n] = 0;
-
- return string;
- }
-
-
- /* convert an Apple Roman or symbol name entry to ASCII */
- static FT_String*
- tt_name_ascii_from_other( TT_Name entry,
- FT_Memory memory )
- {
- FT_String* string = NULL;
- FT_UInt len, code, n;
- FT_Byte* read = (FT_Byte*)entry->string;
- FT_Error error;
-
-
- len = (FT_UInt)entry->stringLength;
-
- if ( FT_NEW_ARRAY( string, len + 1 ) )
- return NULL;
-
- for ( n = 0; n < len; n++ )
- {
- code = *read++;
-
- if ( code == 0 )
- break;
-
- if ( code < 32 || code > 127 )
- code = '?';
-
- string[n] = (char)code;
- }
-
- string[n] = 0;
-
- return string;
- }
-
-
- typedef FT_String* (*TT_Name_ConvertFunc)( TT_Name entry,
- FT_Memory memory );
-
-
- /* documentation is in sfnt.h */
-
- FT_LOCAL_DEF( FT_Error )
- tt_face_get_name( TT_Face face,
- FT_UShort nameid,
- FT_String** name )
- {
- FT_Memory memory = face->root.memory;
- FT_Error error = FT_Err_Ok;
- FT_String* result = NULL;
- FT_UShort n;
- TT_Name rec;
-
- FT_Int found_apple = -1;
- FT_Int found_apple_roman = -1;
- FT_Int found_apple_english = -1;
- FT_Int found_win = -1;
- FT_Int found_unicode = -1;
-
- FT_Bool is_english = 0;
-
- TT_Name_ConvertFunc convert;
-
-
- FT_ASSERT( name );
-
- rec = face->name_table.names;
- for ( n = 0; n < face->num_names; n++, rec++ )
- {
- /* According to the OpenType 1.3 specification, only Microsoft or */
- /* Apple platform IDs might be used in the `name' table. The */
- /* `Unicode' platform is reserved for the `cmap' table, and the */
- /* `ISO' one is deprecated. */
- /* */
- /* However, the Apple TrueType specification doesn't say the same */
- /* thing and goes to suggest that all Unicode `name' table entries */
- /* should be coded in UTF-16 (in big-endian format I suppose). */
- /* */
- if ( rec->nameID == nameid && rec->stringLength > 0 )
- {
- switch ( rec->platformID )
- {
- case TT_PLATFORM_APPLE_UNICODE:
- case TT_PLATFORM_ISO:
- /* there is `languageID' to check there. We should use this */
- /* field only as a last solution when nothing else is */
- /* available. */
- /* */
- found_unicode = n;
- break;
-
- case TT_PLATFORM_MACINTOSH:
- /* This is a bit special because some fonts will use either */
- /* an English language id, or a Roman encoding id, to indicate */
- /* the English version of its font name. */
- /* */
- if ( rec->languageID == TT_MAC_LANGID_ENGLISH )
- found_apple_english = n;
- else if ( rec->encodingID == TT_MAC_ID_ROMAN )
- found_apple_roman = n;
- break;
-
- case TT_PLATFORM_MICROSOFT:
- /* we only take a non-English name when there is nothing */
- /* else available in the font */
- /* */
- if ( found_win == -1 || ( rec->languageID & 0x3FF ) == 0x009 )
- {
- switch ( rec->encodingID )
- {
- case TT_MS_ID_SYMBOL_CS:
- case TT_MS_ID_UNICODE_CS:
- case TT_MS_ID_UCS_4:
- is_english = FT_BOOL( ( rec->languageID & 0x3FF ) == 0x009 );
- found_win = n;
- break;
-
- default:
- ;
- }
- }
- break;
-
- default:
- ;
- }
- }
- }
-
- found_apple = found_apple_roman;
- if ( found_apple_english >= 0 )
- found_apple = found_apple_english;
-
- /* some fonts contain invalid Unicode or Macintosh formatted entries; */
- /* we will thus favor names encoded in Windows formats if available */
- /* (provided it is an English name) */
- /* */
- convert = NULL;
- if ( found_win >= 0 && !( found_apple >= 0 && !is_english ) )
- {
- rec = face->name_table.names + found_win;
- switch ( rec->encodingID )
- {
- /* all Unicode strings are encoded using UTF-16BE */
- case TT_MS_ID_UNICODE_CS:
- case TT_MS_ID_SYMBOL_CS:
- convert = tt_name_ascii_from_utf16;
- break;
-
- case TT_MS_ID_UCS_4:
- /* Apparently, if this value is found in a name table entry, it is */
- /* documented as `full Unicode repertoire'. Experience with the */
- /* MsGothic font shipped with Windows Vista shows that this really */
- /* means UTF-16 encoded names (UCS-4 values are only used within */
- /* charmaps). */
- convert = tt_name_ascii_from_utf16;
- break;
-
- default:
- ;
- }
- }
- else if ( found_apple >= 0 )
- {
- rec = face->name_table.names + found_apple;
- convert = tt_name_ascii_from_other;
- }
- else if ( found_unicode >= 0 )
- {
- rec = face->name_table.names + found_unicode;
- convert = tt_name_ascii_from_utf16;
- }
-
- if ( rec && convert )
- {
- if ( !rec->string )
- {
- FT_Stream stream = face->name_table.stream;
-
-
- if ( FT_QNEW_ARRAY ( rec->string, rec->stringLength ) ||
- FT_STREAM_SEEK( rec->stringOffset ) ||
- FT_STREAM_READ( rec->string, rec->stringLength ) )
- {
- FT_FREE( rec->string );
- rec->stringLength = 0;
- result = NULL;
- goto Exit;
- }
- }
-
- result = convert( rec, memory );
- }
-
- Exit:
- *name = result;
- return error;
- }
-
-
- static FT_Encoding
- sfnt_find_encoding( int platform_id,
- int encoding_id )
- {
- typedef struct TEncoding_
- {
- int platform_id;
- int encoding_id;
- FT_Encoding encoding;
-
- } TEncoding;
-
- static
- const TEncoding tt_encodings[] =
- {
- { TT_PLATFORM_ISO, -1, FT_ENCODING_UNICODE },
-
- { TT_PLATFORM_APPLE_UNICODE, -1, FT_ENCODING_UNICODE },
-
- { TT_PLATFORM_MACINTOSH, TT_MAC_ID_ROMAN, FT_ENCODING_APPLE_ROMAN },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_SYMBOL_CS, FT_ENCODING_MS_SYMBOL },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_UCS_4, FT_ENCODING_UNICODE },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_UNICODE_CS, FT_ENCODING_UNICODE },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_SJIS, FT_ENCODING_SJIS },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_PRC, FT_ENCODING_PRC },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_BIG_5, FT_ENCODING_BIG5 },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_WANSUNG, FT_ENCODING_WANSUNG },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_JOHAB, FT_ENCODING_JOHAB }
- };
-
- const TEncoding *cur, *limit;
-
-
- cur = tt_encodings;
- limit = cur + sizeof ( tt_encodings ) / sizeof ( tt_encodings[0] );
-
- for ( ; cur < limit; cur++ )
- {
- if ( cur->platform_id == platform_id )
- {
- if ( cur->encoding_id == encoding_id ||
- cur->encoding_id == -1 )
- return cur->encoding;
- }
- }
-
- return FT_ENCODING_NONE;
- }
-
-
-#define WRITE_USHORT( p, v ) \
- do \
- { \
- *(p)++ = (FT_Byte)( (v) >> 8 ); \
- *(p)++ = (FT_Byte)( (v) >> 0 ); \
- \
- } while ( 0 )
-
-#define WRITE_ULONG( p, v ) \
- do \
- { \
- *(p)++ = (FT_Byte)( (v) >> 24 ); \
- *(p)++ = (FT_Byte)( (v) >> 16 ); \
- *(p)++ = (FT_Byte)( (v) >> 8 ); \
- *(p)++ = (FT_Byte)( (v) >> 0 ); \
- \
- } while ( 0 )
-
-
- static void
- sfnt_stream_close( FT_Stream stream )
- {
- FT_Memory memory = stream->memory;
-
-
- FT_FREE( stream->base );
-
- stream->size = 0;
- stream->base = NULL;
- stream->close = NULL;
- }
-
-
- FT_CALLBACK_DEF( int )
- compare_offsets( const void* a,
- const void* b )
- {
- WOFF_Table table1 = *(WOFF_Table*)a;
- WOFF_Table table2 = *(WOFF_Table*)b;
-
- FT_ULong offset1 = table1->Offset;
- FT_ULong offset2 = table2->Offset;
-
-
- if ( offset1 > offset2 )
- return 1;
- else if ( offset1 < offset2 )
- return -1;
- else
- return 0;
- }
-
-
- /* Replace `face->root.stream' with a stream containing the extracted */
- /* SFNT of a WOFF font. */
-
- static FT_Error
- woff_open_font( FT_Stream stream,
- TT_Face face )
- {
- FT_Memory memory = stream->memory;
- FT_Error error = FT_Err_Ok;
-
- WOFF_HeaderRec woff;
- WOFF_Table tables = NULL;
- WOFF_Table* indices = NULL;
-
- FT_ULong woff_offset;
-
- FT_Byte* sfnt = NULL;
- FT_Stream sfnt_stream = NULL;
-
- FT_Byte* sfnt_header;
- FT_ULong sfnt_offset;
-
- FT_Int nn;
- FT_ULong old_tag = 0;
-
- static const FT_Frame_Field woff_header_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE WOFF_HeaderRec
-
- FT_FRAME_START( 44 ),
- FT_FRAME_ULONG ( signature ),
- FT_FRAME_ULONG ( flavor ),
- FT_FRAME_ULONG ( length ),
- FT_FRAME_USHORT( num_tables ),
- FT_FRAME_USHORT( reserved ),
- FT_FRAME_ULONG ( totalSfntSize ),
- FT_FRAME_USHORT( majorVersion ),
- FT_FRAME_USHORT( minorVersion ),
- FT_FRAME_ULONG ( metaOffset ),
- FT_FRAME_ULONG ( metaLength ),
- FT_FRAME_ULONG ( metaOrigLength ),
- FT_FRAME_ULONG ( privOffset ),
- FT_FRAME_ULONG ( privLength ),
- FT_FRAME_END
- };
-
-
- FT_ASSERT( stream == face->root.stream );
- FT_ASSERT( FT_STREAM_POS() == 0 );
-
- if ( FT_STREAM_READ_FIELDS( woff_header_fields, &woff ) )
- return error;
-
- /* Make sure we don't recurse back here or hit TTC code. */
- if ( woff.flavor == TTAG_wOFF || woff.flavor == TTAG_ttcf )
- return FT_THROW( Invalid_Table );
-
- /* Miscellaneous checks. */
- if ( woff.length != stream->size ||
- woff.num_tables == 0 ||
- 44 + woff.num_tables * 20UL >= woff.length ||
- 12 + woff.num_tables * 16UL >= woff.totalSfntSize ||
- ( woff.totalSfntSize & 3 ) != 0 ||
- ( woff.metaOffset == 0 && ( woff.metaLength != 0 ||
- woff.metaOrigLength != 0 ) ) ||
- ( woff.metaLength != 0 && woff.metaOrigLength == 0 ) ||
- ( woff.privOffset == 0 && woff.privLength != 0 ) )
- {
- FT_ERROR(( "woff_font_open: invalid WOFF header\n" ));
- return FT_THROW( Invalid_Table );
- }
-
- /* Don't trust `totalSfntSize' before thorough checks. */
- if ( FT_ALLOC( sfnt, 12 + woff.num_tables * 16UL ) ||
- FT_NEW( sfnt_stream ) )
- goto Exit;
-
- sfnt_header = sfnt;
-
- /* Write sfnt header. */
- {
- FT_UInt searchRange, entrySelector, rangeShift, x;
-
-
- x = woff.num_tables;
- entrySelector = 0;
- while ( x )
- {
- x >>= 1;
- entrySelector += 1;
- }
- entrySelector--;
-
- searchRange = ( 1 << entrySelector ) * 16;
- rangeShift = woff.num_tables * 16 - searchRange;
-
- WRITE_ULONG ( sfnt_header, woff.flavor );
- WRITE_USHORT( sfnt_header, woff.num_tables );
- WRITE_USHORT( sfnt_header, searchRange );
- WRITE_USHORT( sfnt_header, entrySelector );
- WRITE_USHORT( sfnt_header, rangeShift );
- }
-
- /* While the entries in the sfnt header must be sorted by the */
- /* tag value, the tables themselves are not. We thus have to */
- /* sort them by offset and check that they don't overlap. */
-
- if ( FT_NEW_ARRAY( tables, woff.num_tables ) ||
- FT_NEW_ARRAY( indices, woff.num_tables ) )
- goto Exit;
-
- FT_TRACE2(( "\n"
- " tag offset compLen origLen checksum\n"
- " -------------------------------------------\n" ));
-
- if ( FT_FRAME_ENTER( 20L * woff.num_tables ) )
- goto Exit;
-
- for ( nn = 0; nn < woff.num_tables; nn++ )
- {
- WOFF_Table table = tables + nn;
-
- table->Tag = FT_GET_TAG4();
- table->Offset = FT_GET_ULONG();
- table->CompLength = FT_GET_ULONG();
- table->OrigLength = FT_GET_ULONG();
- table->CheckSum = FT_GET_ULONG();
-
- FT_TRACE2(( " %c%c%c%c %08lx %08lx %08lx %08lx\n",
- (FT_Char)( table->Tag >> 24 ),
- (FT_Char)( table->Tag >> 16 ),
- (FT_Char)( table->Tag >> 8 ),
- (FT_Char)( table->Tag ),
- table->Offset,
- table->CompLength,
- table->OrigLength,
- table->CheckSum ));
-
- if ( table->Tag <= old_tag )
- {
- FT_FRAME_EXIT();
-
- FT_ERROR(( "woff_font_open: table tags are not sorted\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- old_tag = table->Tag;
- indices[nn] = table;
- }
-
- FT_FRAME_EXIT();
-
- /* Sort by offset. */
-
- ft_qsort( indices,
- woff.num_tables,
- sizeof ( WOFF_Table ),
- compare_offsets );
-
- /* Check offsets and lengths. */
-
- woff_offset = 44 + woff.num_tables * 20L;
- sfnt_offset = 12 + woff.num_tables * 16L;
-
- for ( nn = 0; nn < woff.num_tables; nn++ )
- {
- WOFF_Table table = indices[nn];
-
-
- if ( table->Offset != woff_offset ||
- table->CompLength > woff.length ||
- table->Offset > woff.length - table->CompLength ||
- table->OrigLength > woff.totalSfntSize ||
- sfnt_offset > woff.totalSfntSize - table->OrigLength ||
- table->CompLength > table->OrigLength )
- {
- FT_ERROR(( "woff_font_open: invalid table offsets\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- table->OrigOffset = sfnt_offset;
-
- /* The offsets must be multiples of 4. */
- woff_offset += ( table->CompLength + 3 ) & ~3U;
- sfnt_offset += ( table->OrigLength + 3 ) & ~3U;
- }
-
- /*
- * Final checks!
- *
- * We don't decode and check the metadata block.
- * We don't check table checksums either.
- * But other than those, I think we implement all
- * `MUST' checks from the spec.
- */
-
- if ( woff.metaOffset )
- {
- if ( woff.metaOffset != woff_offset ||
- woff.metaOffset + woff.metaLength > woff.length )
- {
- FT_ERROR(( "woff_font_open:"
- " invalid `metadata' offset or length\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- /* We have padding only ... */
- woff_offset += woff.metaLength;
- }
-
- if ( woff.privOffset )
- {
- /* ... if it isn't the last block. */
- woff_offset = ( woff_offset + 3 ) & ~3U;
-
- if ( woff.privOffset != woff_offset ||
- woff.privOffset + woff.privLength > woff.length )
- {
- FT_ERROR(( "woff_font_open: invalid `private' offset or length\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- /* No padding for the last block. */
- woff_offset += woff.privLength;
- }
-
- if ( sfnt_offset != woff.totalSfntSize ||
- woff_offset != woff.length )
- {
- FT_ERROR(( "woff_font_open: invalid `sfnt' table structure\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- /* Now use `totalSfntSize'. */
- if ( FT_REALLOC( sfnt,
- 12 + woff.num_tables * 16UL,
- woff.totalSfntSize ) )
- goto Exit;
-
- sfnt_header = sfnt + 12;
-
- /* Write the tables. */
-
- for ( nn = 0; nn < woff.num_tables; nn++ )
- {
- WOFF_Table table = tables + nn;
-
-
- /* Write SFNT table entry. */
- WRITE_ULONG( sfnt_header, table->Tag );
- WRITE_ULONG( sfnt_header, table->CheckSum );
- WRITE_ULONG( sfnt_header, table->OrigOffset );
- WRITE_ULONG( sfnt_header, table->OrigLength );
-
- /* Write table data. */
- if ( FT_STREAM_SEEK( table->Offset ) ||
- FT_FRAME_ENTER( table->CompLength ) )
- goto Exit;
-
- if ( table->CompLength == table->OrigLength )
- {
- /* Uncompressed data; just copy. */
- ft_memcpy( sfnt + table->OrigOffset,
- stream->cursor,
- table->OrigLength );
- }
- else
- {
-#ifdef FT_CONFIG_OPTION_USE_ZLIB
-
- /* Uncompress with zlib. */
- FT_ULong output_len = table->OrigLength;
-
-
- error = FT_Gzip_Uncompress( memory,
- sfnt + table->OrigOffset, &output_len,
- stream->cursor, table->CompLength );
- if ( error )
- goto Exit;
- if ( output_len != table->OrigLength )
- {
- FT_ERROR(( "woff_font_open: compressed table length mismatch\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
-#else /* !FT_CONFIG_OPTION_USE_ZLIB */
-
- error = FT_THROW( Unimplemented_Feature );
- goto Exit;
-
-#endif /* !FT_CONFIG_OPTION_USE_ZLIB */
- }
-
- FT_FRAME_EXIT();
-
- /* We don't check whether the padding bytes in the WOFF file are */
- /* actually '\0'. For the output, however, we do set them properly. */
- sfnt_offset = table->OrigOffset + table->OrigLength;
- while ( sfnt_offset & 3 )
- {
- sfnt[sfnt_offset] = '\0';
- sfnt_offset++;
- }
- }
-
- /* Ok! Finally ready. Swap out stream and return. */
- FT_Stream_OpenMemory( sfnt_stream, sfnt, woff.totalSfntSize );
- sfnt_stream->memory = stream->memory;
- sfnt_stream->close = sfnt_stream_close;
-
- FT_Stream_Free(
- face->root.stream,
- ( face->root.face_flags & FT_FACE_FLAG_EXTERNAL_STREAM ) != 0 );
-
- face->root.stream = sfnt_stream;
-
- face->root.face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM;
-
- Exit:
- FT_FREE( tables );
- FT_FREE( indices );
-
- if ( error )
- {
- FT_FREE( sfnt );
- FT_Stream_Close( sfnt_stream );
- FT_FREE( sfnt_stream );
- }
-
- return error;
- }
-
-
-#undef WRITE_USHORT
-#undef WRITE_ULONG
-
-
- /* Fill in face->ttc_header. If the font is not a TTC, it is */
- /* synthesized into a TTC with one offset table. */
- static FT_Error
- sfnt_open_font( FT_Stream stream,
- TT_Face face )
- {
- FT_Memory memory = stream->memory;
- FT_Error error;
- FT_ULong tag, offset;
-
- static const FT_Frame_Field ttc_header_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TTC_HeaderRec
-
- FT_FRAME_START( 8 ),
- FT_FRAME_LONG( version ),
- FT_FRAME_LONG( count ), /* this is ULong in the specs */
- FT_FRAME_END
- };
-
-
- face->ttc_header.tag = 0;
- face->ttc_header.version = 0;
- face->ttc_header.count = 0;
-
- retry:
- offset = FT_STREAM_POS();
-
- if ( FT_READ_ULONG( tag ) )
- return error;
-
- if ( tag == TTAG_wOFF )
- {
- FT_TRACE2(( "sfnt_open_font: file is a WOFF; synthesizing SFNT\n" ));
-
- if ( FT_STREAM_SEEK( offset ) )
- return error;
-
- error = woff_open_font( stream, face );
- if ( error )
- return error;
-
- /* Swap out stream and retry! */
- stream = face->root.stream;
- goto retry;
- }
-
- if ( tag != 0x00010000UL &&
- tag != TTAG_ttcf &&
- tag != TTAG_OTTO &&
- tag != TTAG_true &&
- tag != TTAG_typ1 &&
- tag != 0x00020000UL )
- {
- FT_TRACE2(( " not a font using the SFNT container format\n" ));
- return FT_THROW( Unknown_File_Format );
- }
-
- face->ttc_header.tag = TTAG_ttcf;
-
- if ( tag == TTAG_ttcf )
- {
- FT_Int n;
-
-
- FT_TRACE3(( "sfnt_open_font: file is a collection\n" ));
-
- if ( FT_STREAM_READ_FIELDS( ttc_header_fields, &face->ttc_header ) )
- return error;
-
- FT_TRACE3(( " with %ld subfonts\n",
- face->ttc_header.count ));
-
- if ( face->ttc_header.count == 0 )
- return FT_THROW( Invalid_Table );
-
- /* a rough size estimate: let's conservatively assume that there */
- /* is just a single table info in each subfont header (12 + 16*1 = */
- /* 28 bytes), thus we have (at least) `12 + 4*count' bytes for the */
- /* size of the TTC header plus `28*count' bytes for all subfont */
- /* headers */
- if ( (FT_ULong)face->ttc_header.count > stream->size / ( 28 + 4 ) )
- return FT_THROW( Array_Too_Large );
-
- /* now read the offsets of each font in the file */
- if ( FT_NEW_ARRAY( face->ttc_header.offsets, face->ttc_header.count ) )
- return error;
-
- if ( FT_FRAME_ENTER( face->ttc_header.count * 4L ) )
- return error;
-
- for ( n = 0; n < face->ttc_header.count; n++ )
- face->ttc_header.offsets[n] = FT_GET_ULONG();
-
- FT_FRAME_EXIT();
- }
- else
- {
- FT_TRACE3(( "sfnt_open_font: synthesize TTC\n" ));
-
- face->ttc_header.version = 1 << 16;
- face->ttc_header.count = 1;
-
- if ( FT_NEW( face->ttc_header.offsets ) )
- return error;
-
- face->ttc_header.offsets[0] = offset;
- }
-
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- sfnt_init_face( FT_Stream stream,
- TT_Face face,
- FT_Int face_instance_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- FT_Error error;
- FT_Library library = face->root.driver->root.library;
- SFNT_Service sfnt;
- FT_Int face_index;
-
-
- /* for now, parameters are unused */
- FT_UNUSED( num_params );
- FT_UNUSED( params );
-
-
- sfnt = (SFNT_Service)face->sfnt;
- if ( !sfnt )
- {
- sfnt = (SFNT_Service)FT_Get_Module_Interface( library, "sfnt" );
- if ( !sfnt )
- {
- FT_ERROR(( "sfnt_init_face: cannot access `sfnt' module\n" ));
- return FT_THROW( Missing_Module );
- }
-
- face->sfnt = sfnt;
- face->goto_table = sfnt->goto_table;
- }
-
- FT_FACE_FIND_GLOBAL_SERVICE( face, face->psnames, POSTSCRIPT_CMAPS );
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- if ( !face->mm )
- {
- /* we want the MM interface from the `truetype' module only */
- FT_Module tt_module = FT_Get_Module( library, "truetype" );
-
-
- face->mm = ft_module_get_service( tt_module,
- FT_SERVICE_ID_MULTI_MASTERS,
- 0 );
- }
-
- if ( !face->var )
- {
- /* we want the metrics variations interface */
- /* from the `truetype' module only */
- FT_Module tt_module = FT_Get_Module( library, "truetype" );
-
-
- face->var = ft_module_get_service( tt_module,
- FT_SERVICE_ID_METRICS_VARIATIONS,
- 0 );
- }
-#endif
-
- FT_TRACE2(( "SFNT driver\n" ));
-
- error = sfnt_open_font( stream, face );
- if ( error )
- return error;
-
- /* Stream may have changed in sfnt_open_font. */
- stream = face->root.stream;
-
- FT_TRACE2(( "sfnt_init_face: %08p, %d\n", face, face_instance_index ));
-
- face_index = FT_ABS( face_instance_index ) & 0xFFFF;
-
- /* value -(N+1) requests information on index N */
- if ( face_instance_index < 0 )
- face_index--;
-
- if ( face_index >= face->ttc_header.count )
- {
- if ( face_instance_index >= 0 )
- return FT_THROW( Invalid_Argument );
- else
- face_index = 0;
- }
-
- if ( FT_STREAM_SEEK( face->ttc_header.offsets[face_index] ) )
- return error;
-
- /* check whether we have a valid TrueType file */
- error = sfnt->load_font_dir( face, stream );
- if ( error )
- return error;
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- {
- FT_Memory memory = face->root.memory;
-
- FT_ULong fvar_len;
-
- FT_ULong version;
- FT_ULong offset;
-
- FT_UShort num_axes;
- FT_UShort axis_size;
- FT_UShort num_instances;
- FT_UShort instance_size;
-
- FT_Int instance_index;
-
- FT_Byte* default_values = NULL;
- FT_Byte* instance_values = NULL;
-
-
- face->is_default_instance = 1;
-
- instance_index = FT_ABS( face_instance_index ) >> 16;
-
- /* test whether current face is a GX font with named instances */
- if ( face->goto_table( face, TTAG_fvar, stream, &fvar_len ) ||
- fvar_len < 20 ||
- FT_READ_ULONG( version ) ||
- FT_READ_USHORT( offset ) ||
- FT_STREAM_SKIP( 2 ) /* reserved */ ||
- FT_READ_USHORT( num_axes ) ||
- FT_READ_USHORT( axis_size ) ||
- FT_READ_USHORT( num_instances ) ||
- FT_READ_USHORT( instance_size ) )
- {
- version = 0;
- offset = 0;
- num_axes = 0;
- axis_size = 0;
- num_instances = 0;
- instance_size = 0;
- }
-
- /* check that the data is bound by the table length */
- if ( version != 0x00010000UL ||
- axis_size != 20 ||
- num_axes == 0 ||
- /* `num_axes' limit implied by 16-bit `instance_size' */
- num_axes > 0x3FFE ||
- !( instance_size == 4 + 4 * num_axes ||
- instance_size == 6 + 4 * num_axes ) ||
- /* `num_instances' limit implied by limited range of name IDs */
- num_instances > 0x7EFF ||
- offset +
- axis_size * num_axes +
- instance_size * num_instances > fvar_len )
- num_instances = 0;
- else
- face->variation_support |= TT_FACE_FLAG_VAR_FVAR;
-
- /*
- * As documented in the OpenType specification, an entry for the
- * default instance may be omitted in the named instance table. In
- * particular this means that even if there is no named instance
- * table in the font we actually do have a named instance, namely the
- * default instance.
- *
- * For consistency, we always want the default instance in our list
- * of named instances. If it is missing, we try to synthesize it
- * later on. Here, we have to adjust `num_instances' accordingly.
- */
-
- if ( ( face->variation_support & TT_FACE_FLAG_VAR_FVAR ) &&
- !( FT_ALLOC( default_values, num_axes * 4 ) ||
- FT_ALLOC( instance_values, num_axes * 4 ) ) )
- {
- /* the current stream position is 16 bytes after the table start */
- FT_ULong array_start = FT_STREAM_POS() - 16 + offset;
- FT_ULong default_value_offset, instance_offset;
-
- FT_Byte* p;
- FT_UInt i;
-
-
- default_value_offset = array_start + 8;
- p = default_values;
-
- for ( i = 0; i < num_axes; i++ )
- {
- (void)FT_STREAM_READ_AT( default_value_offset, p, 4 );
-
- default_value_offset += axis_size;
- p += 4;
- }
-
- instance_offset = array_start + axis_size * num_axes + 4;
-
- for ( i = 0; i < num_instances; i++ )
- {
- (void)FT_STREAM_READ_AT( instance_offset,
- instance_values,
- num_axes * 4 );
-
- if ( !ft_memcmp( default_values, instance_values, num_axes * 4 ) )
- break;
-
- instance_offset += instance_size;
- }
-
- if ( i == num_instances )
- {
- /* no default instance in named instance table; */
- /* we thus have to synthesize it */
- num_instances++;
- }
- }
-
- FT_FREE( default_values );
- FT_FREE( instance_values );
-
- /* we don't support Multiple Master CFFs yet; */
- /* note that `glyf' or `CFF2' have precedence */
- if ( face->goto_table( face, TTAG_glyf, stream, 0 ) &&
- face->goto_table( face, TTAG_CFF2, stream, 0 ) &&
- !face->goto_table( face, TTAG_CFF, stream, 0 ) )
- num_instances = 0;
-
- /* instance indices in `face_instance_index' start with index 1, */
- /* thus `>' and not `>=' */
- if ( instance_index > num_instances )
- {
- if ( face_instance_index >= 0 )
- return FT_THROW( Invalid_Argument );
- else
- num_instances = 0;
- }
-
- face->root.style_flags = (FT_Long)num_instances << 16;
- }
-#endif
-
- face->root.num_faces = face->ttc_header.count;
- face->root.face_index = face_instance_index;
-
- return error;
- }
-
-
-#define LOAD_( x ) \
- do \
- { \
- FT_TRACE2(( "`" #x "' " )); \
- FT_TRACE3(( "-->\n" )); \
- \
- error = sfnt->load_ ## x( face, stream ); \
- \
- FT_TRACE2(( "%s\n", ( !error ) \
- ? "loaded" \
- : FT_ERR_EQ( error, Table_Missing ) \
- ? "missing" \
- : "failed to load" )); \
- FT_TRACE3(( "\n" )); \
- } while ( 0 )
-
-#define LOADM_( x, vertical ) \
- do \
- { \
- FT_TRACE2(( "`%s" #x "' ", \
- vertical ? "vertical " : "" )); \
- FT_TRACE3(( "-->\n" )); \
- \
- error = sfnt->load_ ## x( face, stream, vertical ); \
- \
- FT_TRACE2(( "%s\n", ( !error ) \
- ? "loaded" \
- : FT_ERR_EQ( error, Table_Missing ) \
- ? "missing" \
- : "failed to load" )); \
- FT_TRACE3(( "\n" )); \
- } while ( 0 )
-
-#define GET_NAME( id, field ) \
- do \
- { \
- error = tt_face_get_name( face, TT_NAME_ID_ ## id, field ); \
- if ( error ) \
- goto Exit; \
- } while ( 0 )
-
-
- FT_LOCAL_DEF( FT_Error )
- sfnt_load_face( FT_Stream stream,
- TT_Face face,
- FT_Int face_instance_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- FT_Error error;
-#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
- FT_Error psnames_error;
-#endif
- FT_Bool has_outline;
- FT_Bool is_apple_sbit;
- FT_Bool is_apple_sbix;
- FT_Bool ignore_typographic_family = FALSE;
- FT_Bool ignore_typographic_subfamily = FALSE;
-
- SFNT_Service sfnt = (SFNT_Service)face->sfnt;
-
- FT_UNUSED( face_instance_index );
-
-
- /* Check parameters */
-
- {
- FT_Int i;
-
-
- for ( i = 0; i < num_params; i++ )
- {
- if ( params[i].tag == FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY )
- ignore_typographic_family = TRUE;
- else if ( params[i].tag == FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY )
- ignore_typographic_subfamily = TRUE;
- }
- }
-
- /* Load tables */
-
- /* We now support two SFNT-based bitmapped font formats. They */
- /* are recognized easily as they do not include a `glyf' */
- /* table. */
- /* */
- /* The first format comes from Apple, and uses a table named */
- /* `bhed' instead of `head' to store the font header (using */
- /* the same format). It also doesn't include horizontal and */
- /* vertical metrics tables (i.e. `hhea' and `vhea' tables are */
- /* missing). */
- /* */
- /* The other format comes from Microsoft, and is used with */
- /* WinCE/PocketPC. It looks like a standard TTF, except that */
- /* it doesn't contain outlines. */
- /* */
-
- FT_TRACE2(( "sfnt_load_face: %08p\n\n", face ));
-
- /* do we have outlines in there? */
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- has_outline = FT_BOOL( face->root.internal->incremental_interface ||
- tt_face_lookup_table( face, TTAG_glyf ) ||
- tt_face_lookup_table( face, TTAG_CFF ) ||
- tt_face_lookup_table( face, TTAG_CFF2 ) );
-#else
- has_outline = FT_BOOL( tt_face_lookup_table( face, TTAG_glyf ) ||
- tt_face_lookup_table( face, TTAG_CFF ) ||
- tt_face_lookup_table( face, TTAG_CFF2 ) );
-#endif
-
- is_apple_sbit = 0;
- is_apple_sbix = !face->goto_table( face, TTAG_sbix, stream, 0 );
-
- /* Apple 'sbix' color bitmaps are rendered scaled and then the 'glyf'
- * outline rendered on top. We don't support that yet, so just ignore
- * the 'glyf' outline and advertise it as a bitmap-only font. */
- if ( is_apple_sbix )
- has_outline = FALSE;
-
- /* if this font doesn't contain outlines, we try to load */
- /* a `bhed' table */
- if ( !has_outline && sfnt->load_bhed )
- {
- LOAD_( bhed );
- is_apple_sbit = FT_BOOL( !error );
- }
-
- /* load the font header (`head' table) if this isn't an Apple */
- /* sbit font file */
- if ( !is_apple_sbit || is_apple_sbix )
- {
- LOAD_( head );
- if ( error )
- goto Exit;
- }
-
- if ( face->header.Units_Per_EM == 0 )
- {
- error = FT_THROW( Invalid_Table );
-
- goto Exit;
- }
-
- /* the following tables are often not present in embedded TrueType */
- /* fonts within PDF documents, so don't check for them. */
- LOAD_( maxp );
- LOAD_( cmap );
-
- /* the following tables are optional in PCL fonts -- */
- /* don't check for errors */
- LOAD_( name );
- LOAD_( post );
-
-#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
- psnames_error = error;
-#endif
-
- /* do not load the metrics headers and tables if this is an Apple */
- /* sbit font file */
- if ( !is_apple_sbit )
- {
- /* load the `hhea' and `hmtx' tables */
- LOADM_( hhea, 0 );
- if ( !error )
- {
- LOADM_( hmtx, 0 );
- if ( FT_ERR_EQ( error, Table_Missing ) )
- {
- error = FT_THROW( Hmtx_Table_Missing );
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- /* If this is an incrementally loaded font and there are */
- /* overriding metrics, tolerate a missing `hmtx' table. */
- if ( face->root.internal->incremental_interface &&
- face->root.internal->incremental_interface->funcs->
- get_glyph_metrics )
- {
- face->horizontal.number_Of_HMetrics = 0;
- error = FT_Err_Ok;
- }
-#endif
- }
- }
- else if ( FT_ERR_EQ( error, Table_Missing ) )
- {
- /* No `hhea' table necessary for SFNT Mac fonts. */
- if ( face->format_tag == TTAG_true )
- {
- FT_TRACE2(( "This is an SFNT Mac font.\n" ));
-
- has_outline = 0;
- error = FT_Err_Ok;
- }
- else
- {
- error = FT_THROW( Horiz_Header_Missing );
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- /* If this is an incrementally loaded font and there are */
- /* overriding metrics, tolerate a missing `hhea' table. */
- if ( face->root.internal->incremental_interface &&
- face->root.internal->incremental_interface->funcs->
- get_glyph_metrics )
- {
- face->horizontal.number_Of_HMetrics = 0;
- error = FT_Err_Ok;
- }
-#endif
-
- }
- }
-
- if ( error )
- goto Exit;
-
- /* try to load the `vhea' and `vmtx' tables */
- LOADM_( hhea, 1 );
- if ( !error )
- {
- LOADM_( hmtx, 1 );
- if ( !error )
- face->vertical_info = 1;
- }
-
- if ( error && FT_ERR_NEQ( error, Table_Missing ) )
- goto Exit;
-
- LOAD_( os2 );
- if ( error )
- {
- /* we treat the table as missing if there are any errors */
- face->os2.version = 0xFFFFU;
- }
- }
-
- /* the optional tables */
-
- /* embedded bitmap support */
- if ( sfnt->load_eblc )
- LOAD_( eblc );
-
- /* consider the pclt, kerning, and gasp tables as optional */
- LOAD_( pclt );
- LOAD_( gasp );
- LOAD_( kern );
-
- face->root.num_glyphs = face->max_profile.numGlyphs;
-
- /* Bit 8 of the `fsSelection' field in the `OS/2' table denotes */
- /* a WWS-only font face. `WWS' stands for `weight', width', and */
- /* `slope', a term used by Microsoft's Windows Presentation */
- /* Foundation (WPF). This flag has been introduced in version */
- /* 1.5 of the OpenType specification (May 2008). */
-
- face->root.family_name = NULL;
- face->root.style_name = NULL;
- if ( face->os2.version != 0xFFFFU && face->os2.fsSelection & 256 )
- {
- if ( !ignore_typographic_family )
- GET_NAME( TYPOGRAPHIC_FAMILY, &face->root.family_name );
- if ( !face->root.family_name )
- GET_NAME( FONT_FAMILY, &face->root.family_name );
-
- if ( !ignore_typographic_subfamily )
- GET_NAME( TYPOGRAPHIC_SUBFAMILY, &face->root.style_name );
- if ( !face->root.style_name )
- GET_NAME( FONT_SUBFAMILY, &face->root.style_name );
- }
- else
- {
- GET_NAME( WWS_FAMILY, &face->root.family_name );
- if ( !face->root.family_name && !ignore_typographic_family )
- GET_NAME( TYPOGRAPHIC_FAMILY, &face->root.family_name );
- if ( !face->root.family_name )
- GET_NAME( FONT_FAMILY, &face->root.family_name );
-
- GET_NAME( WWS_SUBFAMILY, &face->root.style_name );
- if ( !face->root.style_name && !ignore_typographic_subfamily )
- GET_NAME( TYPOGRAPHIC_SUBFAMILY, &face->root.style_name );
- if ( !face->root.style_name )
- GET_NAME( FONT_SUBFAMILY, &face->root.style_name );
- }
-
- /* now set up root fields */
- {
- FT_Face root = &face->root;
- FT_Long flags = root->face_flags;
-
-
- /*********************************************************************/
- /* */
- /* Compute face flags. */
- /* */
- if ( face->sbit_table_type == TT_SBIT_TABLE_TYPE_CBLC ||
- face->sbit_table_type == TT_SBIT_TABLE_TYPE_SBIX )
- flags |= FT_FACE_FLAG_COLOR; /* color glyphs */
-
- if ( has_outline == TRUE )
- flags |= FT_FACE_FLAG_SCALABLE; /* scalable outlines */
-
- /* The sfnt driver only supports bitmap fonts natively, thus we */
- /* don't set FT_FACE_FLAG_HINTER. */
- flags |= FT_FACE_FLAG_SFNT | /* SFNT file format */
- FT_FACE_FLAG_HORIZONTAL; /* horizontal data */
-
-#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
- if ( !psnames_error &&
- face->postscript.FormatType != 0x00030000L )
- flags |= FT_FACE_FLAG_GLYPH_NAMES;
-#endif
-
- /* fixed width font? */
- if ( face->postscript.isFixedPitch )
- flags |= FT_FACE_FLAG_FIXED_WIDTH;
-
- /* vertical information? */
- if ( face->vertical_info )
- flags |= FT_FACE_FLAG_VERTICAL;
-
- /* kerning available ? */
- if ( TT_FACE_HAS_KERNING( face ) )
- flags |= FT_FACE_FLAG_KERNING;
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- /* Don't bother to load the tables unless somebody asks for them. */
- /* No need to do work which will (probably) not be used. */
- if ( face->variation_support & TT_FACE_FLAG_VAR_FVAR )
- {
- if ( tt_face_lookup_table( face, TTAG_glyf ) != 0 &&
- tt_face_lookup_table( face, TTAG_gvar ) != 0 )
- flags |= FT_FACE_FLAG_MULTIPLE_MASTERS;
- if ( tt_face_lookup_table( face, TTAG_CFF2 ) != 0 )
- flags |= FT_FACE_FLAG_MULTIPLE_MASTERS;
- }
-#endif
-
- root->face_flags = flags;
-
- /*********************************************************************/
- /* */
- /* Compute style flags. */
- /* */
-
- flags = 0;
- if ( has_outline == TRUE && face->os2.version != 0xFFFFU )
- {
- /* We have an OS/2 table; use the `fsSelection' field. Bit 9 */
- /* indicates an oblique font face. This flag has been */
- /* introduced in version 1.5 of the OpenType specification. */
-
- if ( face->os2.fsSelection & 512 ) /* bit 9 */
- flags |= FT_STYLE_FLAG_ITALIC;
- else if ( face->os2.fsSelection & 1 ) /* bit 0 */
- flags |= FT_STYLE_FLAG_ITALIC;
-
- if ( face->os2.fsSelection & 32 ) /* bit 5 */
- flags |= FT_STYLE_FLAG_BOLD;
- }
- else
- {
- /* this is an old Mac font, use the header field */
-
- if ( face->header.Mac_Style & 1 )
- flags |= FT_STYLE_FLAG_BOLD;
-
- if ( face->header.Mac_Style & 2 )
- flags |= FT_STYLE_FLAG_ITALIC;
- }
-
- root->style_flags |= flags;
-
- /*********************************************************************/
- /* */
- /* Polish the charmaps. */
- /* */
- /* Try to set the charmap encoding according to the platform & */
- /* encoding ID of each charmap. */
- /* */
-
- tt_face_build_cmaps( face ); /* ignore errors */
-
-
- /* set the encoding fields */
- {
- FT_Int m;
-
-
- for ( m = 0; m < root->num_charmaps; m++ )
- {
- FT_CharMap charmap = root->charmaps[m];
-
-
- charmap->encoding = sfnt_find_encoding( charmap->platform_id,
- charmap->encoding_id );
- }
- }
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-
- /*
- * Now allocate the root array of FT_Bitmap_Size records and
- * populate them. Unfortunately, it isn't possible to indicate bit
- * depths in the FT_Bitmap_Size record. This is a design error.
- */
- {
- FT_UInt count;
-
-
- count = face->sbit_num_strikes;
-
- if ( count > 0 )
- {
- FT_Memory memory = face->root.stream->memory;
- FT_UShort em_size = face->header.Units_Per_EM;
- FT_Short avgwidth = face->os2.xAvgCharWidth;
- FT_Size_Metrics metrics;
-
- FT_UInt* sbit_strike_map = NULL;
- FT_UInt strike_idx, bsize_idx;
-
-
- if ( em_size == 0 || face->os2.version == 0xFFFFU )
- {
- avgwidth = 1;
- em_size = 1;
- }
-
- /* to avoid invalid strike data in the `available_sizes' field */
- /* of `FT_Face', we map `available_sizes' indices to strike */
- /* indices */
- if ( FT_NEW_ARRAY( root->available_sizes, count ) ||
- FT_NEW_ARRAY( sbit_strike_map, count ) )
- goto Exit;
-
- bsize_idx = 0;
- for ( strike_idx = 0; strike_idx < count; strike_idx++ )
- {
- FT_Bitmap_Size* bsize = root->available_sizes + bsize_idx;
-
-
- error = sfnt->load_strike_metrics( face, strike_idx, &metrics );
- if ( error )
- continue;
-
- bsize->height = (FT_Short)( metrics.height >> 6 );
- bsize->width = (FT_Short)(
- ( avgwidth * metrics.x_ppem + em_size / 2 ) / em_size );
-
- bsize->x_ppem = metrics.x_ppem << 6;
- bsize->y_ppem = metrics.y_ppem << 6;
-
- /* assume 72dpi */
- bsize->size = metrics.y_ppem << 6;
-
- /* only use strikes with valid PPEM values */
- if ( bsize->x_ppem && bsize->y_ppem )
- sbit_strike_map[bsize_idx++] = strike_idx;
- }
-
- /* reduce array size to the actually used elements */
- (void)FT_RENEW_ARRAY( sbit_strike_map, count, bsize_idx );
-
- /* from now on, all strike indices are mapped */
- /* using `sbit_strike_map' */
- if ( bsize_idx )
- {
- face->sbit_strike_map = sbit_strike_map;
-
- root->face_flags |= FT_FACE_FLAG_FIXED_SIZES;
- root->num_fixed_sizes = (FT_Int)bsize_idx;
- }
- }
- }
-
-#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
-
- /* a font with no bitmaps and no outlines is scalable; */
- /* it has only empty glyphs then */
- if ( !FT_HAS_FIXED_SIZES( root ) && !FT_IS_SCALABLE( root ) )
- root->face_flags |= FT_FACE_FLAG_SCALABLE;
-
-
- /*********************************************************************/
- /* */
- /* Set up metrics. */
- /* */
- if ( FT_IS_SCALABLE( root ) )
- {
- /* XXX What about if outline header is missing */
- /* (e.g. sfnt wrapped bitmap)? */
- root->bbox.xMin = face->header.xMin;
- root->bbox.yMin = face->header.yMin;
- root->bbox.xMax = face->header.xMax;
- root->bbox.yMax = face->header.yMax;
- root->units_per_EM = face->header.Units_Per_EM;
-
-
- /* XXX: Computing the ascender/descender/height is very different */
- /* from what the specification tells you. Apparently, we */
- /* must be careful because */
- /* */
- /* - not all fonts have an OS/2 table; in this case, we take */
- /* the values in the horizontal header. However, these */
- /* values very often are not reliable. */
- /* */
- /* - otherwise, the correct typographic values are in the */
- /* sTypoAscender, sTypoDescender & sTypoLineGap fields. */
- /* */
- /* However, certain fonts have these fields set to 0. */
- /* Rather, they have usWinAscent & usWinDescent correctly */
- /* set (but with different values). */
- /* */
- /* As an example, Arial Narrow is implemented through four */
- /* files ARIALN.TTF, ARIALNI.TTF, ARIALNB.TTF & ARIALNBI.TTF */
- /* */
- /* Strangely, all fonts have the same values in their */
- /* sTypoXXX fields, except ARIALNB which sets them to 0. */
- /* */
- /* On the other hand, they all have different */
- /* usWinAscent/Descent values -- as a conclusion, the OS/2 */
- /* table cannot be used to compute the text height reliably! */
- /* */
-
- /* The ascender and descender are taken from the `hhea' table. */
- /* If zero, they are taken from the `OS/2' table. */
-
- root->ascender = face->horizontal.Ascender;
- root->descender = face->horizontal.Descender;
-
- root->height = root->ascender - root->descender +
- face->horizontal.Line_Gap;
-
- if ( !( root->ascender || root->descender ) )
- {
- if ( face->os2.version != 0xFFFFU )
- {
- if ( face->os2.sTypoAscender || face->os2.sTypoDescender )
- {
- root->ascender = face->os2.sTypoAscender;
- root->descender = face->os2.sTypoDescender;
-
- root->height = root->ascender - root->descender +
- face->os2.sTypoLineGap;
- }
- else
- {
- root->ascender = (FT_Short)face->os2.usWinAscent;
- root->descender = -(FT_Short)face->os2.usWinDescent;
-
- root->height = root->ascender - root->descender;
- }
- }
- }
-
- root->max_advance_width =
- (FT_Short)face->horizontal.advance_Width_Max;
- root->max_advance_height =
- (FT_Short)( face->vertical_info ? face->vertical.advance_Height_Max
- : root->height );
-
- /* See http://www.microsoft.com/OpenType/OTSpec/post.htm -- */
- /* Adjust underline position from top edge to centre of */
- /* stroke to convert TrueType meaning to FreeType meaning. */
- root->underline_position = face->postscript.underlinePosition -
- face->postscript.underlineThickness / 2;
- root->underline_thickness = face->postscript.underlineThickness;
- }
-
- }
-
- Exit:
- FT_TRACE2(( "sfnt_load_face: done\n" ));
-
- return error;
- }
-
-
-#undef LOAD_
-#undef LOADM_
-#undef GET_NAME
-
-
- FT_LOCAL_DEF( void )
- sfnt_done_face( TT_Face face )
- {
- FT_Memory memory;
- SFNT_Service sfnt;
-
-
- if ( !face )
- return;
-
- memory = face->root.memory;
- sfnt = (SFNT_Service)face->sfnt;
-
- if ( sfnt )
- {
- /* destroy the postscript names table if it is loaded */
- if ( sfnt->free_psnames )
- sfnt->free_psnames( face );
-
- /* destroy the embedded bitmaps table if it is loaded */
- if ( sfnt->free_eblc )
- sfnt->free_eblc( face );
- }
-
-#ifdef TT_CONFIG_OPTION_BDF
- /* freeing the embedded BDF properties */
- tt_face_free_bdf_props( face );
-#endif
-
- /* freeing the kerning table */
- tt_face_done_kern( face );
-
- /* freeing the collection table */
- FT_FREE( face->ttc_header.offsets );
- face->ttc_header.count = 0;
-
- /* freeing table directory */
- FT_FREE( face->dir_tables );
- face->num_tables = 0;
-
- {
- FT_Stream stream = FT_FACE_STREAM( face );
-
-
- /* simply release the 'cmap' table frame */
- FT_FRAME_RELEASE( face->cmap_table );
- face->cmap_size = 0;
- }
-
- face->horz_metrics_size = 0;
- face->vert_metrics_size = 0;
-
- /* freeing vertical metrics, if any */
- if ( face->vertical_info )
- {
- FT_FREE( face->vertical.long_metrics );
- FT_FREE( face->vertical.short_metrics );
- face->vertical_info = 0;
- }
-
- /* freeing the gasp table */
- FT_FREE( face->gasp.gaspRanges );
- face->gasp.numRanges = 0;
-
- /* freeing the name table */
- if ( sfnt )
- sfnt->free_name( face );
-
- /* freeing family and style name */
- FT_FREE( face->root.family_name );
- FT_FREE( face->root.style_name );
-
- /* freeing sbit size table */
- FT_FREE( face->root.available_sizes );
- FT_FREE( face->sbit_strike_map );
- face->root.num_fixed_sizes = 0;
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_FREE( face->postscript_name );
- FT_FREE( face->var_postscript_prefix );
-#endif
-
- face->sfnt = NULL;
- }
-
-
-/* END */
diff --git a/src/sfnt/sfobjs.h b/src/sfnt/sfobjs.h
deleted file mode 100644
index 705381459..000000000
--- a/src/sfnt/sfobjs.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfobjs.h */
-/* */
-/* SFNT object management (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SFOBJS_H_
-#define SFOBJS_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_SFNT_H
-#include FT_INTERNAL_OBJECTS_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( FT_Error )
- sfnt_init_face( FT_Stream stream,
- TT_Face face,
- FT_Int face_instance_index,
- FT_Int num_params,
- FT_Parameter* params );
-
- FT_LOCAL( FT_Error )
- sfnt_load_face( FT_Stream stream,
- TT_Face face,
- FT_Int face_instance_index,
- FT_Int num_params,
- FT_Parameter* params );
-
- FT_LOCAL( void )
- sfnt_done_face( TT_Face face );
-
- FT_LOCAL( FT_Error )
- tt_face_get_name( TT_Face face,
- FT_UShort nameid,
- FT_String** name );
-
-
-FT_END_HEADER
-
-#endif /* SFDRIVER_H_ */
-
-
-/* END */
diff --git a/src/sfnt/ttbdf.c b/src/sfnt/ttbdf.c
deleted file mode 100644
index 2196e3791..000000000
--- a/src/sfnt/ttbdf.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttbdf.c */
-/* */
-/* TrueType and OpenType embedded BDF properties (body). */
-/* */
-/* Copyright 2005-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-#include "ttbdf.h"
-
-#include "sferrors.h"
-
-
-#ifdef TT_CONFIG_OPTION_BDF
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttbdf
-
-
- FT_LOCAL_DEF( void )
- tt_face_free_bdf_props( TT_Face face )
- {
- TT_BDF bdf = &face->bdf;
-
-
- if ( bdf->loaded )
- {
- FT_Stream stream = FT_FACE(face)->stream;
-
-
- if ( bdf->table )
- FT_FRAME_RELEASE( bdf->table );
-
- bdf->table_end = NULL;
- bdf->strings = NULL;
- bdf->strings_size = 0;
- }
- }
-
-
- static FT_Error
- tt_face_load_bdf_props( TT_Face face,
- FT_Stream stream )
- {
- TT_BDF bdf = &face->bdf;
- FT_ULong length;
- FT_Error error;
-
-
- FT_ZERO( bdf );
-
- error = tt_face_goto_table( face, TTAG_BDF, stream, &length );
- if ( error ||
- length < 8 ||
- FT_FRAME_EXTRACT( length, bdf->table ) )
- {
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- bdf->table_end = bdf->table + length;
-
- {
- FT_Byte* p = bdf->table;
- FT_UInt version = FT_NEXT_USHORT( p );
- FT_UInt num_strikes = FT_NEXT_USHORT( p );
- FT_ULong strings = FT_NEXT_ULONG ( p );
- FT_UInt count;
- FT_Byte* strike;
-
-
- if ( version != 0x0001 ||
- strings < 8 ||
- ( strings - 8 ) / 4 < num_strikes ||
- strings + 1 > length )
- {
- goto BadTable;
- }
-
- bdf->num_strikes = num_strikes;
- bdf->strings = bdf->table + strings;
- bdf->strings_size = length - strings;
-
- count = bdf->num_strikes;
- p = bdf->table + 8;
- strike = p + count * 4;
-
-
- for ( ; count > 0; count-- )
- {
- FT_UInt num_items = FT_PEEK_USHORT( p + 2 );
-
- /*
- * We don't need to check the value sets themselves, since this
- * is done later.
- */
- strike += 10 * num_items;
-
- p += 4;
- }
-
- if ( strike > bdf->strings )
- goto BadTable;
- }
-
- bdf->loaded = 1;
-
- Exit:
- return error;
-
- BadTable:
- FT_FRAME_RELEASE( bdf->table );
- FT_ZERO( bdf );
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- tt_face_find_bdf_prop( TT_Face face,
- const char* property_name,
- BDF_PropertyRec *aprop )
- {
- TT_BDF bdf = &face->bdf;
- FT_Size size = FT_FACE(face)->size;
- FT_Error error = FT_Err_Ok;
- FT_Byte* p;
- FT_UInt count;
- FT_Byte* strike;
- FT_Offset property_len;
-
-
- aprop->type = BDF_PROPERTY_TYPE_NONE;
-
- if ( bdf->loaded == 0 )
- {
- error = tt_face_load_bdf_props( face, FT_FACE( face )->stream );
- if ( error )
- goto Exit;
- }
-
- count = bdf->num_strikes;
- p = bdf->table + 8;
- strike = p + 4 * count;
-
- error = FT_ERR( Invalid_Argument );
-
- if ( !size || !property_name )
- goto Exit;
-
- property_len = ft_strlen( property_name );
- if ( property_len == 0 )
- goto Exit;
-
- for ( ; count > 0; count-- )
- {
- FT_UInt _ppem = FT_NEXT_USHORT( p );
- FT_UInt _count = FT_NEXT_USHORT( p );
-
-
- if ( _ppem == size->metrics.y_ppem )
- {
- count = _count;
- goto FoundStrike;
- }
-
- strike += 10 * _count;
- }
- goto Exit;
-
- FoundStrike:
- p = strike;
- for ( ; count > 0; count-- )
- {
- FT_UInt type = FT_PEEK_USHORT( p + 4 );
-
-
- if ( ( type & 0x10 ) != 0 )
- {
- FT_UInt32 name_offset = FT_PEEK_ULONG( p );
- FT_UInt32 value = FT_PEEK_ULONG( p + 6 );
-
- /* be a bit paranoid for invalid entries here */
- if ( name_offset < bdf->strings_size &&
- property_len < bdf->strings_size - name_offset &&
- ft_strncmp( property_name,
- (const char*)bdf->strings + name_offset,
- bdf->strings_size - name_offset ) == 0 )
- {
- switch ( type & 0x0F )
- {
- case 0x00: /* string */
- case 0x01: /* atoms */
- /* check that the content is really 0-terminated */
- if ( value < bdf->strings_size &&
- ft_memchr( bdf->strings + value, 0, bdf->strings_size ) )
- {
- aprop->type = BDF_PROPERTY_TYPE_ATOM;
- aprop->u.atom = (const char*)bdf->strings + value;
- error = FT_Err_Ok;
- goto Exit;
- }
- break;
-
- case 0x02:
- aprop->type = BDF_PROPERTY_TYPE_INTEGER;
- aprop->u.integer = (FT_Int32)value;
- error = FT_Err_Ok;
- goto Exit;
-
- case 0x03:
- aprop->type = BDF_PROPERTY_TYPE_CARDINAL;
- aprop->u.cardinal = value;
- error = FT_Err_Ok;
- goto Exit;
-
- default:
- ;
- }
- }
- }
- p += 10;
- }
-
- Exit:
- return error;
- }
-
-#else /* !TT_CONFIG_OPTION_BDF */
-
- /* ANSI C doesn't like empty source files */
- typedef int _tt_bdf_dummy;
-
-#endif /* !TT_CONFIG_OPTION_BDF */
-
-
-/* END */
diff --git a/src/sfnt/ttbdf.h b/src/sfnt/ttbdf.h
deleted file mode 100644
index 398b62060..000000000
--- a/src/sfnt/ttbdf.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttbdf.h */
-/* */
-/* TrueType and OpenType embedded BDF properties (specification). */
-/* */
-/* Copyright 2005-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTBDF_H_
-#define TTBDF_H_
-
-
-#include <ft2build.h>
-#include "ttload.h"
-#include FT_BDF_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( void )
- tt_face_free_bdf_props( TT_Face face );
-
-
- FT_LOCAL( FT_Error )
- tt_face_find_bdf_prop( TT_Face face,
- const char* property_name,
- BDF_PropertyRec *aprop );
-
-
-FT_END_HEADER
-
-#endif /* TTBDF_H_ */
-
-
-/* END */
diff --git a/src/sfnt/ttcmap.c b/src/sfnt/ttcmap.c
deleted file mode 100644
index 5afa6ae4b..000000000
--- a/src/sfnt/ttcmap.c
+++ /dev/null
@@ -1,3809 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttcmap.c */
-/* */
-/* TrueType character mapping table (cmap) support (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-
-#include "sferrors.h" /* must come before FT_INTERNAL_VALIDATE_H */
-
-#include FT_INTERNAL_VALIDATE_H
-#include FT_INTERNAL_STREAM_H
-#include "ttload.h"
-#include "ttcmap.h"
-#include "sfntpic.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttcmap
-
-
-#define TT_PEEK_SHORT FT_PEEK_SHORT
-#define TT_PEEK_USHORT FT_PEEK_USHORT
-#define TT_PEEK_UINT24 FT_PEEK_UOFF3
-#define TT_PEEK_LONG FT_PEEK_LONG
-#define TT_PEEK_ULONG FT_PEEK_ULONG
-
-#define TT_NEXT_SHORT FT_NEXT_SHORT
-#define TT_NEXT_USHORT FT_NEXT_USHORT
-#define TT_NEXT_UINT24 FT_NEXT_UOFF3
-#define TT_NEXT_LONG FT_NEXT_LONG
-#define TT_NEXT_ULONG FT_NEXT_ULONG
-
-
- /* Too large glyph index return values are caught in `FT_Get_Char_Index' */
- /* and `FT_Get_Next_Char' (the latter calls the internal `next' function */
- /* again in this case). To mark character code return values as invalid */
- /* it is sufficient to set the corresponding glyph index return value to */
- /* zero. */
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap_init( TT_CMap cmap,
- FT_Byte* table )
- {
- cmap->data = table;
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FORMAT 0 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* TABLE OVERVIEW */
- /* -------------- */
- /* */
- /* NAME OFFSET TYPE DESCRIPTION */
- /* */
- /* format 0 USHORT must be 0 */
- /* length 2 USHORT table length in bytes */
- /* language 4 USHORT Mac language code */
- /* glyph_ids 6 BYTE[256] array of glyph indices */
- /* 262 */
- /* */
-
-#ifdef TT_CONFIG_CMAP_FORMAT_0
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap0_validate( FT_Byte* table,
- FT_Validator valid )
- {
- FT_Byte* p;
- FT_UInt length;
-
-
- if ( table + 2 + 2 > valid->limit )
- FT_INVALID_TOO_SHORT;
-
- p = table + 2; /* skip format */
- length = TT_NEXT_USHORT( p );
-
- if ( table + length > valid->limit || length < 262 )
- FT_INVALID_TOO_SHORT;
-
- /* check glyph indices whenever necessary */
- if ( valid->level >= FT_VALIDATE_TIGHT )
- {
- FT_UInt n, idx;
-
-
- p = table + 6;
- for ( n = 0; n < 256; n++ )
- {
- idx = *p++;
- if ( idx >= TT_VALID_GLYPH_COUNT( valid ) )
- FT_INVALID_GLYPH_ID;
- }
- }
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- tt_cmap0_char_index( TT_CMap cmap,
- FT_UInt32 char_code )
- {
- FT_Byte* table = cmap->data;
-
-
- return char_code < 256 ? table[6 + char_code] : 0;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 )
- tt_cmap0_char_next( TT_CMap cmap,
- FT_UInt32 *pchar_code )
- {
- FT_Byte* table = cmap->data;
- FT_UInt32 charcode = *pchar_code;
- FT_UInt32 result = 0;
- FT_UInt gindex = 0;
-
-
- table += 6; /* go to glyph IDs */
- while ( ++charcode < 256 )
- {
- gindex = table[charcode];
- if ( gindex != 0 )
- {
- result = charcode;
- break;
- }
- }
-
- *pchar_code = result;
- return gindex;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap0_get_info( TT_CMap cmap,
- TT_CMapInfo *cmap_info )
- {
- FT_Byte* p = cmap->data + 4;
-
-
- cmap_info->format = 0;
- cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p );
-
- return FT_Err_Ok;
- }
-
-
- FT_DEFINE_TT_CMAP(
- tt_cmap0_class_rec,
-
- sizeof ( TT_CMapRec ),
-
- (FT_CMap_InitFunc) tt_cmap_init, /* init */
- (FT_CMap_DoneFunc) NULL, /* done */
- (FT_CMap_CharIndexFunc)tt_cmap0_char_index, /* char_index */
- (FT_CMap_CharNextFunc) tt_cmap0_char_next, /* char_next */
-
- (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
- (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
- (FT_CMap_VariantListFunc) NULL, /* variant_list */
- (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
- (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
-
- 0,
- (TT_CMap_ValidateFunc)tt_cmap0_validate, /* validate */
- (TT_CMap_Info_GetFunc)tt_cmap0_get_info /* get_cmap_info */
- )
-
-#endif /* TT_CONFIG_CMAP_FORMAT_0 */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FORMAT 2 *****/
- /***** *****/
- /***** This is used for certain CJK encodings that encode text in a *****/
- /***** mixed 8/16 bits encoding along the following lines. *****/
- /***** *****/
- /***** * Certain byte values correspond to an 8-bit character code *****/
- /***** (typically in the range 0..127 for ASCII compatibility). *****/
- /***** *****/
- /***** * Certain byte values signal the first byte of a 2-byte *****/
- /***** character code (but these values are also valid as the *****/
- /***** second byte of a 2-byte character). *****/
- /***** *****/
- /***** The following charmap lookup and iteration functions all *****/
- /***** assume that the value `charcode' fulfills the following. *****/
- /***** *****/
- /***** - For one byte characters, `charcode' is simply the *****/
- /***** character code. *****/
- /***** *****/
- /***** - For two byte characters, `charcode' is the 2-byte *****/
- /***** character code in big endian format. More precisely: *****/
- /***** *****/
- /***** (charcode >> 8) is the first byte value *****/
- /***** (charcode & 0xFF) is the second byte value *****/
- /***** *****/
- /***** Note that not all values of `charcode' are valid according *****/
- /***** to these rules, and the function moderately checks the *****/
- /***** arguments. *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* TABLE OVERVIEW */
- /* -------------- */
- /* */
- /* NAME OFFSET TYPE DESCRIPTION */
- /* */
- /* format 0 USHORT must be 2 */
- /* length 2 USHORT table length in bytes */
- /* language 4 USHORT Mac language code */
- /* keys 6 USHORT[256] sub-header keys */
- /* subs 518 SUBHEAD[NSUBS] sub-headers array */
- /* glyph_ids 518+NSUB*8 USHORT[] glyph ID array */
- /* */
- /* The `keys' table is used to map charcode high-bytes to sub-headers. */
- /* The value of `NSUBS' is the number of sub-headers defined in the */
- /* table and is computed by finding the maximum of the `keys' table. */
- /* */
- /* Note that for any n, `keys[n]' is a byte offset within the `subs' */
- /* table, i.e., it is the corresponding sub-header index multiplied */
- /* by 8. */
- /* */
- /* Each sub-header has the following format. */
- /* */
- /* NAME OFFSET TYPE DESCRIPTION */
- /* */
- /* first 0 USHORT first valid low-byte */
- /* count 2 USHORT number of valid low-bytes */
- /* delta 4 SHORT see below */
- /* offset 6 USHORT see below */
- /* */
- /* A sub-header defines, for each high-byte, the range of valid */
- /* low-bytes within the charmap. Note that the range defined by `first' */
- /* and `count' must be completely included in the interval [0..255] */
- /* according to the specification. */
- /* */
- /* If a character code is contained within a given sub-header, then */
- /* mapping it to a glyph index is done as follows. */
- /* */
- /* * The value of `offset' is read. This is a _byte_ distance from the */
- /* location of the `offset' field itself into a slice of the */
- /* `glyph_ids' table. Let's call it `slice' (it is a USHORT[], too). */
- /* */
- /* * The value `slice[char.lo - first]' is read. If it is 0, there is */
- /* no glyph for the charcode. Otherwise, the value of `delta' is */
- /* added to it (modulo 65536) to form a new glyph index. */
- /* */
- /* It is up to the validation routine to check that all offsets fall */
- /* within the glyph IDs table (and not within the `subs' table itself or */
- /* outside of the CMap). */
- /* */
-
-#ifdef TT_CONFIG_CMAP_FORMAT_2
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap2_validate( FT_Byte* table,
- FT_Validator valid )
- {
- FT_Byte* p;
- FT_UInt length;
-
- FT_UInt n, max_subs;
- FT_Byte* keys; /* keys table */
- FT_Byte* subs; /* sub-headers */
- FT_Byte* glyph_ids; /* glyph ID array */
-
-
- if ( table + 2 + 2 > valid->limit )
- FT_INVALID_TOO_SHORT;
-
- p = table + 2; /* skip format */
- length = TT_NEXT_USHORT( p );
-
- if ( table + length > valid->limit || length < 6 + 512 )
- FT_INVALID_TOO_SHORT;
-
- keys = table + 6;
-
- /* parse keys to compute sub-headers count */
- p = keys;
- max_subs = 0;
- for ( n = 0; n < 256; n++ )
- {
- FT_UInt idx = TT_NEXT_USHORT( p );
-
-
- /* value must be multiple of 8 */
- if ( valid->level >= FT_VALIDATE_PARANOID && ( idx & 7 ) != 0 )
- FT_INVALID_DATA;
-
- idx >>= 3;
-
- if ( idx > max_subs )
- max_subs = idx;
- }
-
- FT_ASSERT( p == table + 518 );
-
- subs = p;
- glyph_ids = subs + ( max_subs + 1 ) * 8;
- if ( glyph_ids > valid->limit )
- FT_INVALID_TOO_SHORT;
-
- /* parse sub-headers */
- for ( n = 0; n <= max_subs; n++ )
- {
- FT_UInt first_code, code_count, offset;
- FT_Int delta;
-
-
- first_code = TT_NEXT_USHORT( p );
- code_count = TT_NEXT_USHORT( p );
- delta = TT_NEXT_SHORT( p );
- offset = TT_NEXT_USHORT( p );
-
- /* many Dynalab fonts have empty sub-headers */
- if ( code_count == 0 )
- continue;
-
- /* check range within 0..255 */
- if ( valid->level >= FT_VALIDATE_PARANOID )
- {
- if ( first_code >= 256 || first_code + code_count > 256 )
- FT_INVALID_DATA;
- }
-
- /* check offset */
- if ( offset != 0 )
- {
- FT_Byte* ids;
-
-
- ids = p - 2 + offset;
- if ( ids < glyph_ids || ids + code_count * 2 > table + length )
- FT_INVALID_OFFSET;
-
- /* check glyph IDs */
- if ( valid->level >= FT_VALIDATE_TIGHT )
- {
- FT_Byte* limit = p + code_count * 2;
- FT_UInt idx;
-
-
- for ( ; p < limit; )
- {
- idx = TT_NEXT_USHORT( p );
- if ( idx != 0 )
- {
- idx = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU;
- if ( idx >= TT_VALID_GLYPH_COUNT( valid ) )
- FT_INVALID_GLYPH_ID;
- }
- }
- }
- }
- }
-
- return FT_Err_Ok;
- }
-
-
- /* return sub header corresponding to a given character code */
- /* NULL on invalid charcode */
- static FT_Byte*
- tt_cmap2_get_subheader( FT_Byte* table,
- FT_UInt32 char_code )
- {
- FT_Byte* result = NULL;
-
-
- if ( char_code < 0x10000UL )
- {
- FT_UInt char_lo = (FT_UInt)( char_code & 0xFF );
- FT_UInt char_hi = (FT_UInt)( char_code >> 8 );
- FT_Byte* p = table + 6; /* keys table */
- FT_Byte* subs = table + 518; /* subheaders table */
- FT_Byte* sub;
-
-
- if ( char_hi == 0 )
- {
- /* an 8-bit character code -- we use subHeader 0 in this case */
- /* to test whether the character code is in the charmap */
- /* */
- sub = subs; /* jump to first sub-header */
-
- /* check that the sub-header for this byte is 0, which */
- /* indicates that it is really a valid one-byte value */
- /* Otherwise, return 0 */
- /* */
- p += char_lo * 2;
- if ( TT_PEEK_USHORT( p ) != 0 )
- goto Exit;
- }
- else
- {
- /* a 16-bit character code */
-
- /* jump to key entry */
- p += char_hi * 2;
- /* jump to sub-header */
- sub = subs + ( FT_PAD_FLOOR( TT_PEEK_USHORT( p ), 8 ) );
-
- /* check that the high byte isn't a valid one-byte value */
- if ( sub == subs )
- goto Exit;
- }
- result = sub;
- }
-
- Exit:
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- tt_cmap2_char_index( TT_CMap cmap,
- FT_UInt32 char_code )
- {
- FT_Byte* table = cmap->data;
- FT_UInt result = 0;
- FT_Byte* subheader;
-
-
- subheader = tt_cmap2_get_subheader( table, char_code );
- if ( subheader )
- {
- FT_Byte* p = subheader;
- FT_UInt idx = (FT_UInt)(char_code & 0xFF);
- FT_UInt start, count;
- FT_Int delta;
- FT_UInt offset;
-
-
- start = TT_NEXT_USHORT( p );
- count = TT_NEXT_USHORT( p );
- delta = TT_NEXT_SHORT ( p );
- offset = TT_PEEK_USHORT( p );
-
- idx -= start;
- if ( idx < count && offset != 0 )
- {
- p += offset + 2 * idx;
- idx = TT_PEEK_USHORT( p );
-
- if ( idx != 0 )
- result = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU;
- }
- }
-
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 )
- tt_cmap2_char_next( TT_CMap cmap,
- FT_UInt32 *pcharcode )
- {
- FT_Byte* table = cmap->data;
- FT_UInt gindex = 0;
- FT_UInt32 result = 0;
- FT_UInt32 charcode = *pcharcode + 1;
- FT_Byte* subheader;
-
-
- while ( charcode < 0x10000UL )
- {
- subheader = tt_cmap2_get_subheader( table, charcode );
- if ( subheader )
- {
- FT_Byte* p = subheader;
- FT_UInt start = TT_NEXT_USHORT( p );
- FT_UInt count = TT_NEXT_USHORT( p );
- FT_Int delta = TT_NEXT_SHORT ( p );
- FT_UInt offset = TT_PEEK_USHORT( p );
- FT_UInt char_lo = (FT_UInt)( charcode & 0xFF );
- FT_UInt pos, idx;
-
-
- if ( offset == 0 )
- goto Next_SubHeader;
-
- if ( char_lo < start )
- {
- char_lo = start;
- pos = 0;
- }
- else
- pos = (FT_UInt)( char_lo - start );
-
- p += offset + pos * 2;
- charcode = FT_PAD_FLOOR( charcode, 256 ) + char_lo;
-
- for ( ; pos < count; pos++, charcode++ )
- {
- idx = TT_NEXT_USHORT( p );
-
- if ( idx != 0 )
- {
- gindex = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU;
- if ( gindex != 0 )
- {
- result = charcode;
- goto Exit;
- }
- }
- }
- }
-
- /* jump to next sub-header, i.e. higher byte value */
- Next_SubHeader:
- charcode = FT_PAD_FLOOR( charcode, 256 ) + 256;
- }
-
- Exit:
- *pcharcode = result;
-
- return gindex;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap2_get_info( TT_CMap cmap,
- TT_CMapInfo *cmap_info )
- {
- FT_Byte* p = cmap->data + 4;
-
-
- cmap_info->format = 2;
- cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p );
-
- return FT_Err_Ok;
- }
-
-
- FT_DEFINE_TT_CMAP(
- tt_cmap2_class_rec,
-
- sizeof ( TT_CMapRec ),
-
- (FT_CMap_InitFunc) tt_cmap_init, /* init */
- (FT_CMap_DoneFunc) NULL, /* done */
- (FT_CMap_CharIndexFunc)tt_cmap2_char_index, /* char_index */
- (FT_CMap_CharNextFunc) tt_cmap2_char_next, /* char_next */
-
- (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
- (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
- (FT_CMap_VariantListFunc) NULL, /* variant_list */
- (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
- (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
-
- 2,
- (TT_CMap_ValidateFunc)tt_cmap2_validate, /* validate */
- (TT_CMap_Info_GetFunc)tt_cmap2_get_info /* get_cmap_info */
- )
-
-#endif /* TT_CONFIG_CMAP_FORMAT_2 */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FORMAT 4 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* TABLE OVERVIEW */
- /* -------------- */
- /* */
- /* NAME OFFSET TYPE DESCRIPTION */
- /* */
- /* format 0 USHORT must be 4 */
- /* length 2 USHORT table length */
- /* in bytes */
- /* language 4 USHORT Mac language code */
- /* */
- /* segCountX2 6 USHORT 2*NUM_SEGS */
- /* searchRange 8 USHORT 2*(1 << LOG_SEGS) */
- /* entrySelector 10 USHORT LOG_SEGS */
- /* rangeShift 12 USHORT segCountX2 - */
- /* searchRange */
- /* */
- /* endCount 14 USHORT[NUM_SEGS] end charcode for */
- /* each segment; last */
- /* is 0xFFFF */
- /* */
- /* pad 14+NUM_SEGS*2 USHORT padding */
- /* */
- /* startCount 16+NUM_SEGS*2 USHORT[NUM_SEGS] first charcode for */
- /* each segment */
- /* */
- /* idDelta 16+NUM_SEGS*4 SHORT[NUM_SEGS] delta for each */
- /* segment */
- /* idOffset 16+NUM_SEGS*6 SHORT[NUM_SEGS] range offset for */
- /* each segment; can be */
- /* zero */
- /* */
- /* glyphIds 16+NUM_SEGS*8 USHORT[] array of glyph ID */
- /* ranges */
- /* */
- /* Character codes are modelled by a series of ordered (increasing) */
- /* intervals called segments. Each segment has start and end codes, */
- /* provided by the `startCount' and `endCount' arrays. Segments must */
- /* not overlap, and the last segment should always contain the value */
- /* 0xFFFF for `endCount'. */
- /* */
- /* The fields `searchRange', `entrySelector' and `rangeShift' are better */
- /* ignored (they are traces of over-engineering in the TrueType */
- /* specification). */
- /* */
- /* Each segment also has a signed `delta', as well as an optional offset */
- /* within the `glyphIds' table. */
- /* */
- /* If a segment's idOffset is 0, the glyph index corresponding to any */
- /* charcode within the segment is obtained by adding the value of */
- /* `idDelta' directly to the charcode, modulo 65536. */
- /* */
- /* Otherwise, a glyph index is taken from the glyph IDs sub-array for */
- /* the segment, and the value of `idDelta' is added to it. */
- /* */
- /* */
- /* Finally, note that a lot of fonts contain an invalid last segment, */
- /* where `start' and `end' are correctly set to 0xFFFF but both `delta' */
- /* and `offset' are incorrect (e.g., `opens___.ttf' which comes with */
- /* OpenOffice.org). We need special code to deal with them correctly. */
- /* */
-
-#ifdef TT_CONFIG_CMAP_FORMAT_4
-
- typedef struct TT_CMap4Rec_
- {
- TT_CMapRec cmap;
- FT_UInt32 cur_charcode; /* current charcode */
- FT_UInt cur_gindex; /* current glyph index */
-
- FT_UInt num_ranges;
- FT_UInt cur_range;
- FT_UInt cur_start;
- FT_UInt cur_end;
- FT_Int cur_delta;
- FT_Byte* cur_values;
-
- } TT_CMap4Rec, *TT_CMap4;
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap4_init( TT_CMap4 cmap,
- FT_Byte* table )
- {
- FT_Byte* p;
-
-
- cmap->cmap.data = table;
-
- p = table + 6;
- cmap->num_ranges = FT_PEEK_USHORT( p ) >> 1;
- cmap->cur_charcode = (FT_UInt32)0xFFFFFFFFUL;
- cmap->cur_gindex = 0;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Int
- tt_cmap4_set_range( TT_CMap4 cmap,
- FT_UInt range_index )
- {
- FT_Byte* table = cmap->cmap.data;
- FT_Byte* p;
- FT_UInt num_ranges = cmap->num_ranges;
-
-
- while ( range_index < num_ranges )
- {
- FT_UInt offset;
-
-
- p = table + 14 + range_index * 2;
- cmap->cur_end = FT_PEEK_USHORT( p );
-
- p += 2 + num_ranges * 2;
- cmap->cur_start = FT_PEEK_USHORT( p );
-
- p += num_ranges * 2;
- cmap->cur_delta = FT_PEEK_SHORT( p );
-
- p += num_ranges * 2;
- offset = FT_PEEK_USHORT( p );
-
- /* some fonts have an incorrect last segment; */
- /* we have to catch it */
- if ( range_index >= num_ranges - 1 &&
- cmap->cur_start == 0xFFFFU &&
- cmap->cur_end == 0xFFFFU )
- {
- TT_Face face = (TT_Face)cmap->cmap.cmap.charmap.face;
- FT_Byte* limit = face->cmap_table + face->cmap_size;
-
-
- if ( offset && p + offset + 2 > limit )
- {
- cmap->cur_delta = 1;
- offset = 0;
- }
- }
-
- if ( offset != 0xFFFFU )
- {
- cmap->cur_values = offset ? p + offset : NULL;
- cmap->cur_range = range_index;
- return 0;
- }
-
- /* we skip empty segments */
- range_index++;
- }
-
- return -1;
- }
-
-
- /* search the index of the charcode next to cmap->cur_charcode; */
- /* caller should call tt_cmap4_set_range with proper range */
- /* before calling this function */
- /* */
- static void
- tt_cmap4_next( TT_CMap4 cmap )
- {
- TT_Face face = (TT_Face)cmap->cmap.cmap.charmap.face;
- FT_Byte* limit = face->cmap_table + face->cmap_size;
-
- FT_UInt charcode;
-
-
- if ( cmap->cur_charcode >= 0xFFFFUL )
- goto Fail;
-
- charcode = (FT_UInt)cmap->cur_charcode + 1;
-
- if ( charcode < cmap->cur_start )
- charcode = cmap->cur_start;
-
- for (;;)
- {
- FT_Byte* values = cmap->cur_values;
- FT_UInt end = cmap->cur_end;
- FT_Int delta = cmap->cur_delta;
-
-
- if ( charcode <= end )
- {
- if ( values )
- {
- FT_Byte* p = values + 2 * ( charcode - cmap->cur_start );
-
-
- /* if p > limit, the whole segment is invalid */
- if ( p > limit )
- goto Next_Segment;
-
- do
- {
- FT_UInt gindex = FT_NEXT_USHORT( p );
-
-
- if ( gindex )
- {
- gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU;
- if ( gindex )
- {
- cmap->cur_charcode = charcode;
- cmap->cur_gindex = gindex;
- return;
- }
- }
- } while ( ++charcode <= end );
- }
- else
- {
- do
- {
- FT_UInt gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU;
-
-
- if ( gindex >= (FT_UInt)face->root.num_glyphs )
- {
- /* we have an invalid glyph index; if there is an overflow, */
- /* we can adjust `charcode', otherwise the whole segment is */
- /* invalid */
- gindex = 0;
-
- if ( (FT_Int)charcode + delta < 0 &&
- (FT_Int)end + delta >= 0 )
- charcode = (FT_UInt)( -delta );
-
- else if ( (FT_Int)charcode + delta < 0x10000L &&
- (FT_Int)end + delta >= 0x10000L )
- charcode = (FT_UInt)( 0x10000L - delta );
-
- else
- goto Next_Segment;
- }
-
- if ( gindex )
- {
- cmap->cur_charcode = charcode;
- cmap->cur_gindex = gindex;
- return;
- }
- } while ( ++charcode <= end );
- }
- }
-
- Next_Segment:
- /* we need to find another range */
- if ( tt_cmap4_set_range( cmap, cmap->cur_range + 1 ) < 0 )
- break;
-
- if ( charcode < cmap->cur_start )
- charcode = cmap->cur_start;
- }
-
- Fail:
- cmap->cur_charcode = (FT_UInt32)0xFFFFFFFFUL;
- cmap->cur_gindex = 0;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap4_validate( FT_Byte* table,
- FT_Validator valid )
- {
- FT_Byte* p;
- FT_UInt length;
-
- FT_Byte *ends, *starts, *offsets, *deltas, *glyph_ids;
- FT_UInt num_segs;
- FT_Error error = FT_Err_Ok;
-
-
- if ( table + 2 + 2 > valid->limit )
- FT_INVALID_TOO_SHORT;
-
- p = table + 2; /* skip format */
- length = TT_NEXT_USHORT( p );
-
- /* in certain fonts, the `length' field is invalid and goes */
- /* out of bound. We try to correct this here... */
- if ( table + length > valid->limit )
- {
- if ( valid->level >= FT_VALIDATE_TIGHT )
- FT_INVALID_TOO_SHORT;
-
- length = (FT_UInt)( valid->limit - table );
- }
-
- if ( length < 16 )
- FT_INVALID_TOO_SHORT;
-
- p = table + 6;
- num_segs = TT_NEXT_USHORT( p ); /* read segCountX2 */
-
- if ( valid->level >= FT_VALIDATE_PARANOID )
- {
- /* check that we have an even value here */
- if ( num_segs & 1 )
- FT_INVALID_DATA;
- }
-
- num_segs /= 2;
-
- if ( length < 16 + num_segs * 2 * 4 )
- FT_INVALID_TOO_SHORT;
-
- /* check the search parameters - even though we never use them */
- /* */
- if ( valid->level >= FT_VALIDATE_PARANOID )
- {
- /* check the values of `searchRange', `entrySelector', `rangeShift' */
- FT_UInt search_range = TT_NEXT_USHORT( p );
- FT_UInt entry_selector = TT_NEXT_USHORT( p );
- FT_UInt range_shift = TT_NEXT_USHORT( p );
-
-
- if ( ( search_range | range_shift ) & 1 ) /* must be even values */
- FT_INVALID_DATA;
-
- search_range /= 2;
- range_shift /= 2;
-
- /* `search range' is the greatest power of 2 that is <= num_segs */
-
- if ( search_range > num_segs ||
- search_range * 2 < num_segs ||
- search_range + range_shift != num_segs ||
- search_range != ( 1U << entry_selector ) )
- FT_INVALID_DATA;
- }
-
- ends = table + 14;
- starts = table + 16 + num_segs * 2;
- deltas = starts + num_segs * 2;
- offsets = deltas + num_segs * 2;
- glyph_ids = offsets + num_segs * 2;
-
- /* check last segment; its end count value must be 0xFFFF */
- if ( valid->level >= FT_VALIDATE_PARANOID )
- {
- p = ends + ( num_segs - 1 ) * 2;
- if ( TT_PEEK_USHORT( p ) != 0xFFFFU )
- FT_INVALID_DATA;
- }
-
- {
- FT_UInt start, end, offset, n;
- FT_UInt last_start = 0, last_end = 0;
- FT_Int delta;
- FT_Byte* p_start = starts;
- FT_Byte* p_end = ends;
- FT_Byte* p_delta = deltas;
- FT_Byte* p_offset = offsets;
-
-
- for ( n = 0; n < num_segs; n++ )
- {
- p = p_offset;
- start = TT_NEXT_USHORT( p_start );
- end = TT_NEXT_USHORT( p_end );
- delta = TT_NEXT_SHORT( p_delta );
- offset = TT_NEXT_USHORT( p_offset );
-
- if ( start > end )
- FT_INVALID_DATA;
-
- /* this test should be performed at default validation level; */
- /* unfortunately, some popular Asian fonts have overlapping */
- /* ranges in their charmaps */
- /* */
- if ( start <= last_end && n > 0 )
- {
- if ( valid->level >= FT_VALIDATE_TIGHT )
- FT_INVALID_DATA;
- else
- {
- /* allow overlapping segments, provided their start points */
- /* and end points, respectively, are in ascending order */
- /* */
- if ( last_start > start || last_end > end )
- error |= TT_CMAP_FLAG_UNSORTED;
- else
- error |= TT_CMAP_FLAG_OVERLAPPING;
- }
- }
-
- if ( offset && offset != 0xFFFFU )
- {
- p += offset; /* start of glyph ID array */
-
- /* check that we point within the glyph IDs table only */
- if ( valid->level >= FT_VALIDATE_TIGHT )
- {
- if ( p < glyph_ids ||
- p + ( end - start + 1 ) * 2 > table + length )
- FT_INVALID_DATA;
- }
- /* Some fonts handle the last segment incorrectly. In */
- /* theory, 0xFFFF might point to an ordinary glyph -- */
- /* a cmap 4 is versatile and could be used for any */
- /* encoding, not only Unicode. However, reality shows */
- /* that far too many fonts are sloppy and incorrectly */
- /* set all fields but `start' and `end' for the last */
- /* segment if it contains only a single character. */
- /* */
- /* We thus omit the test here, delaying it to the */
- /* routines that actually access the cmap. */
- else if ( n != num_segs - 1 ||
- !( start == 0xFFFFU && end == 0xFFFFU ) )
- {
- if ( p < glyph_ids ||
- p + ( end - start + 1 ) * 2 > valid->limit )
- FT_INVALID_DATA;
- }
-
- /* check glyph indices within the segment range */
- if ( valid->level >= FT_VALIDATE_TIGHT )
- {
- FT_UInt i, idx;
-
-
- for ( i = start; i < end; i++ )
- {
- idx = FT_NEXT_USHORT( p );
- if ( idx != 0 )
- {
- idx = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU;
-
- if ( idx >= TT_VALID_GLYPH_COUNT( valid ) )
- FT_INVALID_GLYPH_ID;
- }
- }
- }
- }
- else if ( offset == 0xFFFFU )
- {
- /* some fonts (erroneously?) use a range offset of 0xFFFF */
- /* to mean missing glyph in cmap table */
- /* */
- if ( valid->level >= FT_VALIDATE_PARANOID ||
- n != num_segs - 1 ||
- !( start == 0xFFFFU && end == 0xFFFFU ) )
- FT_INVALID_DATA;
- }
-
- last_start = start;
- last_end = end;
- }
- }
-
- return error;
- }
-
-
- static FT_UInt
- tt_cmap4_char_map_linear( TT_CMap cmap,
- FT_UInt32* pcharcode,
- FT_Bool next )
- {
- TT_Face face = (TT_Face)cmap->cmap.charmap.face;
- FT_Byte* limit = face->cmap_table + face->cmap_size;
-
-
- FT_UInt num_segs2, start, end, offset;
- FT_Int delta;
- FT_UInt i, num_segs;
- FT_UInt32 charcode = *pcharcode;
- FT_UInt gindex = 0;
- FT_Byte* p;
- FT_Byte* q;
-
-
- p = cmap->data + 6;
- num_segs2 = FT_PAD_FLOOR( TT_PEEK_USHORT( p ), 2 );
-
- num_segs = num_segs2 >> 1;
-
- if ( !num_segs )
- return 0;
-
- if ( next )
- charcode++;
-
- if ( charcode > 0xFFFFU )
- return 0;
-
- /* linear search */
- p = cmap->data + 14; /* ends table */
- q = cmap->data + 16 + num_segs2; /* starts table */
-
- for ( i = 0; i < num_segs; i++ )
- {
- end = TT_NEXT_USHORT( p );
- start = TT_NEXT_USHORT( q );
-
- if ( charcode < start )
- {
- if ( next )
- charcode = start;
- else
- break;
- }
-
- Again:
- if ( charcode <= end )
- {
- FT_Byte* r;
-
-
- r = q - 2 + num_segs2;
- delta = TT_PEEK_SHORT( r );
- r += num_segs2;
- offset = TT_PEEK_USHORT( r );
-
- /* some fonts have an incorrect last segment; */
- /* we have to catch it */
- if ( i >= num_segs - 1 &&
- start == 0xFFFFU && end == 0xFFFFU )
- {
- if ( offset && r + offset + 2 > limit )
- {
- delta = 1;
- offset = 0;
- }
- }
-
- if ( offset == 0xFFFFU )
- continue;
-
- if ( offset )
- {
- r += offset + ( charcode - start ) * 2;
-
- /* if r > limit, the whole segment is invalid */
- if ( next && r > limit )
- continue;
-
- gindex = TT_PEEK_USHORT( r );
- if ( gindex )
- {
- gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU;
- if ( gindex >= (FT_UInt)face->root.num_glyphs )
- gindex = 0;
- }
- }
- else
- {
- gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU;
-
- if ( next && gindex >= (FT_UInt)face->root.num_glyphs )
- {
- /* we have an invalid glyph index; if there is an overflow, */
- /* we can adjust `charcode', otherwise the whole segment is */
- /* invalid */
- gindex = 0;
-
- if ( (FT_Int)charcode + delta < 0 &&
- (FT_Int)end + delta >= 0 )
- charcode = (FT_UInt)( -delta );
-
- else if ( (FT_Int)charcode + delta < 0x10000L &&
- (FT_Int)end + delta >= 0x10000L )
- charcode = (FT_UInt)( 0x10000L - delta );
-
- else
- continue;
- }
- }
-
- if ( next && !gindex )
- {
- if ( charcode >= 0xFFFFU )
- break;
-
- charcode++;
- goto Again;
- }
-
- break;
- }
- }
-
- if ( next )
- *pcharcode = charcode;
-
- return gindex;
- }
-
-
- static FT_UInt
- tt_cmap4_char_map_binary( TT_CMap cmap,
- FT_UInt32* pcharcode,
- FT_Bool next )
- {
- TT_Face face = (TT_Face)cmap->cmap.charmap.face;
- FT_Byte* limit = face->cmap_table + face->cmap_size;
-
- FT_UInt num_segs2, start, end, offset;
- FT_Int delta;
- FT_UInt max, min, mid, num_segs;
- FT_UInt charcode = (FT_UInt)*pcharcode;
- FT_UInt gindex = 0;
- FT_Byte* p;
-
-
- p = cmap->data + 6;
- num_segs2 = FT_PAD_FLOOR( TT_PEEK_USHORT( p ), 2 );
-
- if ( !num_segs2 )
- return 0;
-
- num_segs = num_segs2 >> 1;
-
- /* make compiler happy */
- mid = num_segs;
- end = 0xFFFFU;
-
- if ( next )
- charcode++;
-
- min = 0;
- max = num_segs;
-
- /* binary search */
- while ( min < max )
- {
- mid = ( min + max ) >> 1;
- p = cmap->data + 14 + mid * 2;
- end = TT_PEEK_USHORT( p );
- p += 2 + num_segs2;
- start = TT_PEEK_USHORT( p );
-
- if ( charcode < start )
- max = mid;
- else if ( charcode > end )
- min = mid + 1;
- else
- {
- p += num_segs2;
- delta = TT_PEEK_SHORT( p );
- p += num_segs2;
- offset = TT_PEEK_USHORT( p );
-
- /* some fonts have an incorrect last segment; */
- /* we have to catch it */
- if ( mid >= num_segs - 1 &&
- start == 0xFFFFU && end == 0xFFFFU )
- {
- if ( offset && p + offset + 2 > limit )
- {
- delta = 1;
- offset = 0;
- }
- }
-
- /* search the first segment containing `charcode' */
- if ( cmap->flags & TT_CMAP_FLAG_OVERLAPPING )
- {
- FT_UInt i;
-
-
- /* call the current segment `max' */
- max = mid;
-
- if ( offset == 0xFFFFU )
- mid = max + 1;
-
- /* search in segments before the current segment */
- for ( i = max; i > 0; i-- )
- {
- FT_UInt prev_end;
- FT_Byte* old_p;
-
-
- old_p = p;
- p = cmap->data + 14 + ( i - 1 ) * 2;
- prev_end = TT_PEEK_USHORT( p );
-
- if ( charcode > prev_end )
- {
- p = old_p;
- break;
- }
-
- end = prev_end;
- p += 2 + num_segs2;
- start = TT_PEEK_USHORT( p );
- p += num_segs2;
- delta = TT_PEEK_SHORT( p );
- p += num_segs2;
- offset = TT_PEEK_USHORT( p );
-
- if ( offset != 0xFFFFU )
- mid = i - 1;
- }
-
- /* no luck */
- if ( mid == max + 1 )
- {
- if ( i != max )
- {
- p = cmap->data + 14 + max * 2;
- end = TT_PEEK_USHORT( p );
- p += 2 + num_segs2;
- start = TT_PEEK_USHORT( p );
- p += num_segs2;
- delta = TT_PEEK_SHORT( p );
- p += num_segs2;
- offset = TT_PEEK_USHORT( p );
- }
-
- mid = max;
-
- /* search in segments after the current segment */
- for ( i = max + 1; i < num_segs; i++ )
- {
- FT_UInt next_end, next_start;
-
-
- p = cmap->data + 14 + i * 2;
- next_end = TT_PEEK_USHORT( p );
- p += 2 + num_segs2;
- next_start = TT_PEEK_USHORT( p );
-
- if ( charcode < next_start )
- break;
-
- end = next_end;
- start = next_start;
- p += num_segs2;
- delta = TT_PEEK_SHORT( p );
- p += num_segs2;
- offset = TT_PEEK_USHORT( p );
-
- if ( offset != 0xFFFFU )
- mid = i;
- }
- i--;
-
- /* still no luck */
- if ( mid == max )
- {
- mid = i;
-
- break;
- }
- }
-
- /* end, start, delta, and offset are for the i'th segment */
- if ( mid != i )
- {
- p = cmap->data + 14 + mid * 2;
- end = TT_PEEK_USHORT( p );
- p += 2 + num_segs2;
- start = TT_PEEK_USHORT( p );
- p += num_segs2;
- delta = TT_PEEK_SHORT( p );
- p += num_segs2;
- offset = TT_PEEK_USHORT( p );
- }
- }
- else
- {
- if ( offset == 0xFFFFU )
- break;
- }
-
- if ( offset )
- {
- p += offset + ( charcode - start ) * 2;
-
- /* if p > limit, the whole segment is invalid */
- if ( next && p > limit )
- break;
-
- gindex = TT_PEEK_USHORT( p );
- if ( gindex )
- {
- gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU;
- if ( gindex >= (FT_UInt)face->root.num_glyphs )
- gindex = 0;
- }
- }
- else
- {
- gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU;
-
- if ( next && gindex >= (FT_UInt)face->root.num_glyphs )
- {
- /* we have an invalid glyph index; if there is an overflow, */
- /* we can adjust `charcode', otherwise the whole segment is */
- /* invalid */
- gindex = 0;
-
- if ( (FT_Int)charcode + delta < 0 &&
- (FT_Int)end + delta >= 0 )
- charcode = (FT_UInt)( -delta );
-
- else if ( (FT_Int)charcode + delta < 0x10000L &&
- (FT_Int)end + delta >= 0x10000L )
- charcode = (FT_UInt)( 0x10000L - delta );
- }
- }
-
- break;
- }
- }
-
- if ( next )
- {
- TT_CMap4 cmap4 = (TT_CMap4)cmap;
-
-
- /* if `charcode' is not in any segment, then `mid' is */
- /* the segment nearest to `charcode' */
-
- if ( charcode > end )
- {
- mid++;
- if ( mid == num_segs )
- return 0;
- }
-
- if ( tt_cmap4_set_range( cmap4, mid ) )
- {
- if ( gindex )
- *pcharcode = charcode;
- }
- else
- {
- cmap4->cur_charcode = charcode;
-
- if ( gindex )
- cmap4->cur_gindex = gindex;
- else
- {
- cmap4->cur_charcode = charcode;
- tt_cmap4_next( cmap4 );
- gindex = cmap4->cur_gindex;
- }
-
- if ( gindex )
- *pcharcode = cmap4->cur_charcode;
- }
- }
-
- return gindex;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- tt_cmap4_char_index( TT_CMap cmap,
- FT_UInt32 char_code )
- {
- if ( char_code >= 0x10000UL )
- return 0;
-
- if ( cmap->flags & TT_CMAP_FLAG_UNSORTED )
- return tt_cmap4_char_map_linear( cmap, &char_code, 0 );
- else
- return tt_cmap4_char_map_binary( cmap, &char_code, 0 );
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 )
- tt_cmap4_char_next( TT_CMap cmap,
- FT_UInt32 *pchar_code )
- {
- FT_UInt gindex;
-
-
- if ( *pchar_code >= 0xFFFFU )
- return 0;
-
- if ( cmap->flags & TT_CMAP_FLAG_UNSORTED )
- gindex = tt_cmap4_char_map_linear( cmap, pchar_code, 1 );
- else
- {
- TT_CMap4 cmap4 = (TT_CMap4)cmap;
-
-
- /* no need to search */
- if ( *pchar_code == cmap4->cur_charcode )
- {
- tt_cmap4_next( cmap4 );
- gindex = cmap4->cur_gindex;
- if ( gindex )
- *pchar_code = cmap4->cur_charcode;
- }
- else
- gindex = tt_cmap4_char_map_binary( cmap, pchar_code, 1 );
- }
-
- return gindex;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap4_get_info( TT_CMap cmap,
- TT_CMapInfo *cmap_info )
- {
- FT_Byte* p = cmap->data + 4;
-
-
- cmap_info->format = 4;
- cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p );
-
- return FT_Err_Ok;
- }
-
-
- FT_DEFINE_TT_CMAP(
- tt_cmap4_class_rec,
-
- sizeof ( TT_CMap4Rec ),
-
- (FT_CMap_InitFunc) tt_cmap4_init, /* init */
- (FT_CMap_DoneFunc) NULL, /* done */
- (FT_CMap_CharIndexFunc)tt_cmap4_char_index, /* char_index */
- (FT_CMap_CharNextFunc) tt_cmap4_char_next, /* char_next */
-
- (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
- (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
- (FT_CMap_VariantListFunc) NULL, /* variant_list */
- (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
- (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
-
- 4,
- (TT_CMap_ValidateFunc)tt_cmap4_validate, /* validate */
- (TT_CMap_Info_GetFunc)tt_cmap4_get_info /* get_cmap_info */
- )
-
-#endif /* TT_CONFIG_CMAP_FORMAT_4 */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FORMAT 6 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* TABLE OVERVIEW */
- /* -------------- */
- /* */
- /* NAME OFFSET TYPE DESCRIPTION */
- /* */
- /* format 0 USHORT must be 6 */
- /* length 2 USHORT table length in bytes */
- /* language 4 USHORT Mac language code */
- /* */
- /* first 6 USHORT first segment code */
- /* count 8 USHORT segment size in chars */
- /* glyphIds 10 USHORT[count] glyph IDs */
- /* */
- /* A very simplified segment mapping. */
- /* */
-
-#ifdef TT_CONFIG_CMAP_FORMAT_6
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap6_validate( FT_Byte* table,
- FT_Validator valid )
- {
- FT_Byte* p;
- FT_UInt length, count;
-
-
- if ( table + 10 > valid->limit )
- FT_INVALID_TOO_SHORT;
-
- p = table + 2;
- length = TT_NEXT_USHORT( p );
-
- p = table + 8; /* skip language and start index */
- count = TT_NEXT_USHORT( p );
-
- if ( table + length > valid->limit || length < 10 + count * 2 )
- FT_INVALID_TOO_SHORT;
-
- /* check glyph indices */
- if ( valid->level >= FT_VALIDATE_TIGHT )
- {
- FT_UInt gindex;
-
-
- for ( ; count > 0; count-- )
- {
- gindex = TT_NEXT_USHORT( p );
- if ( gindex >= TT_VALID_GLYPH_COUNT( valid ) )
- FT_INVALID_GLYPH_ID;
- }
- }
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- tt_cmap6_char_index( TT_CMap cmap,
- FT_UInt32 char_code )
- {
- FT_Byte* table = cmap->data;
- FT_UInt result = 0;
- FT_Byte* p = table + 6;
- FT_UInt start = TT_NEXT_USHORT( p );
- FT_UInt count = TT_NEXT_USHORT( p );
- FT_UInt idx = (FT_UInt)( char_code - start );
-
-
- if ( idx < count )
- {
- p += 2 * idx;
- result = TT_PEEK_USHORT( p );
- }
-
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 )
- tt_cmap6_char_next( TT_CMap cmap,
- FT_UInt32 *pchar_code )
- {
- FT_Byte* table = cmap->data;
- FT_UInt32 result = 0;
- FT_UInt32 char_code = *pchar_code + 1;
- FT_UInt gindex = 0;
-
- FT_Byte* p = table + 6;
- FT_UInt start = TT_NEXT_USHORT( p );
- FT_UInt count = TT_NEXT_USHORT( p );
- FT_UInt idx;
-
-
- if ( char_code >= 0x10000UL )
- return 0;
-
- if ( char_code < start )
- char_code = start;
-
- idx = (FT_UInt)( char_code - start );
- p += 2 * idx;
-
- for ( ; idx < count; idx++ )
- {
- gindex = TT_NEXT_USHORT( p );
- if ( gindex != 0 )
- {
- result = char_code;
- break;
- }
-
- if ( char_code >= 0xFFFFU )
- return 0;
-
- char_code++;
- }
-
- *pchar_code = result;
- return gindex;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap6_get_info( TT_CMap cmap,
- TT_CMapInfo *cmap_info )
- {
- FT_Byte* p = cmap->data + 4;
-
-
- cmap_info->format = 6;
- cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p );
-
- return FT_Err_Ok;
- }
-
-
- FT_DEFINE_TT_CMAP(
- tt_cmap6_class_rec,
-
- sizeof ( TT_CMapRec ),
-
- (FT_CMap_InitFunc) tt_cmap_init, /* init */
- (FT_CMap_DoneFunc) NULL, /* done */
- (FT_CMap_CharIndexFunc)tt_cmap6_char_index, /* char_index */
- (FT_CMap_CharNextFunc) tt_cmap6_char_next, /* char_next */
-
- (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
- (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
- (FT_CMap_VariantListFunc) NULL, /* variant_list */
- (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
- (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
-
- 6,
- (TT_CMap_ValidateFunc)tt_cmap6_validate, /* validate */
- (TT_CMap_Info_GetFunc)tt_cmap6_get_info /* get_cmap_info */
- )
-
-#endif /* TT_CONFIG_CMAP_FORMAT_6 */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FORMAT 8 *****/
- /***** *****/
- /***** It is hard to completely understand what the OpenType spec *****/
- /***** says about this format, but here is my conclusion. *****/
- /***** *****/
- /***** The purpose of this format is to easily map UTF-16 text to *****/
- /***** glyph indices. Basically, the `char_code' must be in one of *****/
- /***** the following formats. *****/
- /***** *****/
- /***** - A 16-bit value that isn't part of the Unicode Surrogates *****/
- /***** Area (i.e. U+D800-U+DFFF). *****/
- /***** *****/
- /***** - A 32-bit value, made of two surrogate values, i.e.. if *****/
- /***** `char_code = (char_hi << 16) | char_lo', then both *****/
- /***** `char_hi' and `char_lo' must be in the Surrogates Area. *****/
- /***** Area. *****/
- /***** *****/
- /***** The `is32' table embedded in the charmap indicates whether a *****/
- /***** given 16-bit value is in the surrogates area or not. *****/
- /***** *****/
- /***** So, for any given `char_code', we can assert the following. *****/
- /***** *****/
- /***** If `char_hi == 0' then we must have `is32[char_lo] == 0'. *****/
- /***** *****/
- /***** If `char_hi != 0' then we must have both *****/
- /***** `is32[char_hi] != 0' and `is32[char_lo] != 0'. *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* TABLE OVERVIEW */
- /* -------------- */
- /* */
- /* NAME OFFSET TYPE DESCRIPTION */
- /* */
- /* format 0 USHORT must be 8 */
- /* reserved 2 USHORT reserved */
- /* length 4 ULONG length in bytes */
- /* language 8 ULONG Mac language code */
- /* is32 12 BYTE[8192] 32-bitness bitmap */
- /* count 8204 ULONG number of groups */
- /* */
- /* This header is followed by `count' groups of the following format: */
- /* */
- /* start 0 ULONG first charcode */
- /* end 4 ULONG last charcode */
- /* startId 8 ULONG start glyph ID for the group */
- /* */
-
-#ifdef TT_CONFIG_CMAP_FORMAT_8
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap8_validate( FT_Byte* table,
- FT_Validator valid )
- {
- FT_Byte* p = table + 4;
- FT_Byte* is32;
- FT_UInt32 length;
- FT_UInt32 num_groups;
-
-
- if ( table + 16 + 8192 > valid->limit )
- FT_INVALID_TOO_SHORT;
-
- length = TT_NEXT_ULONG( p );
- if ( length > (FT_UInt32)( valid->limit - table ) || length < 8192 + 16 )
- FT_INVALID_TOO_SHORT;
-
- is32 = table + 12;
- p = is32 + 8192; /* skip `is32' array */
- num_groups = TT_NEXT_ULONG( p );
-
- /* p + num_groups * 12 > valid->limit ? */
- if ( num_groups > (FT_UInt32)( valid->limit - p ) / 12 )
- FT_INVALID_TOO_SHORT;
-
- /* check groups, they must be in increasing order */
- {
- FT_UInt32 n, start, end, start_id, count, last = 0;
-
-
- for ( n = 0; n < num_groups; n++ )
- {
- FT_UInt hi, lo;
-
-
- start = TT_NEXT_ULONG( p );
- end = TT_NEXT_ULONG( p );
- start_id = TT_NEXT_ULONG( p );
-
- if ( start > end )
- FT_INVALID_DATA;
-
- if ( n > 0 && start <= last )
- FT_INVALID_DATA;
-
- if ( valid->level >= FT_VALIDATE_TIGHT )
- {
- FT_UInt32 d = end - start;
-
-
- /* start_id + end - start >= TT_VALID_GLYPH_COUNT( valid ) ? */
- if ( d > TT_VALID_GLYPH_COUNT( valid ) ||
- start_id >= TT_VALID_GLYPH_COUNT( valid ) - d )
- FT_INVALID_GLYPH_ID;
-
- count = (FT_UInt32)( end - start + 1 );
-
- if ( start & ~0xFFFFU )
- {
- /* start_hi != 0; check that is32[i] is 1 for each i in */
- /* the `hi' and `lo' of the range [start..end] */
- for ( ; count > 0; count--, start++ )
- {
- hi = (FT_UInt)( start >> 16 );
- lo = (FT_UInt)( start & 0xFFFFU );
-
- if ( (is32[hi >> 3] & ( 0x80 >> ( hi & 7 ) ) ) == 0 )
- FT_INVALID_DATA;
-
- if ( (is32[lo >> 3] & ( 0x80 >> ( lo & 7 ) ) ) == 0 )
- FT_INVALID_DATA;
- }
- }
- else
- {
- /* start_hi == 0; check that is32[i] is 0 for each i in */
- /* the range [start..end] */
-
- /* end_hi cannot be != 0! */
- if ( end & ~0xFFFFU )
- FT_INVALID_DATA;
-
- for ( ; count > 0; count--, start++ )
- {
- lo = (FT_UInt)( start & 0xFFFFU );
-
- if ( (is32[lo >> 3] & ( 0x80 >> ( lo & 7 ) ) ) != 0 )
- FT_INVALID_DATA;
- }
- }
- }
-
- last = end;
- }
- }
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- tt_cmap8_char_index( TT_CMap cmap,
- FT_UInt32 char_code )
- {
- FT_Byte* table = cmap->data;
- FT_UInt result = 0;
- FT_Byte* p = table + 8204;
- FT_UInt32 num_groups = TT_NEXT_ULONG( p );
- FT_UInt32 start, end, start_id;
-
-
- for ( ; num_groups > 0; num_groups-- )
- {
- start = TT_NEXT_ULONG( p );
- end = TT_NEXT_ULONG( p );
- start_id = TT_NEXT_ULONG( p );
-
- if ( char_code < start )
- break;
-
- if ( char_code <= end )
- {
- if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) )
- return 0;
-
- result = (FT_UInt)( start_id + ( char_code - start ) );
- break;
- }
- }
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 )
- tt_cmap8_char_next( TT_CMap cmap,
- FT_UInt32 *pchar_code )
- {
- FT_Face face = cmap->cmap.charmap.face;
- FT_UInt32 result = 0;
- FT_UInt32 char_code;
- FT_UInt gindex = 0;
- FT_Byte* table = cmap->data;
- FT_Byte* p = table + 8204;
- FT_UInt32 num_groups = TT_NEXT_ULONG( p );
- FT_UInt32 start, end, start_id;
-
-
- if ( *pchar_code >= 0xFFFFFFFFUL )
- return 0;
-
- char_code = *pchar_code + 1;
-
- p = table + 8208;
-
- for ( ; num_groups > 0; num_groups-- )
- {
- start = TT_NEXT_ULONG( p );
- end = TT_NEXT_ULONG( p );
- start_id = TT_NEXT_ULONG( p );
-
- if ( char_code < start )
- char_code = start;
-
- Again:
- if ( char_code <= end )
- {
- /* ignore invalid group */
- if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) )
- continue;
-
- gindex = (FT_UInt)( start_id + ( char_code - start ) );
-
- /* does first element of group point to `.notdef' glyph? */
- if ( gindex == 0 )
- {
- if ( char_code >= 0xFFFFFFFFUL )
- break;
-
- char_code++;
- goto Again;
- }
-
- /* if `gindex' is invalid, the remaining values */
- /* in this group are invalid, too */
- if ( gindex >= (FT_UInt)face->num_glyphs )
- {
- gindex = 0;
- continue;
- }
-
- result = char_code;
- break;
- }
- }
-
- *pchar_code = result;
- return gindex;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap8_get_info( TT_CMap cmap,
- TT_CMapInfo *cmap_info )
- {
- FT_Byte* p = cmap->data + 8;
-
-
- cmap_info->format = 8;
- cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p );
-
- return FT_Err_Ok;
- }
-
-
- FT_DEFINE_TT_CMAP(
- tt_cmap8_class_rec,
-
- sizeof ( TT_CMapRec ),
-
- (FT_CMap_InitFunc) tt_cmap_init, /* init */
- (FT_CMap_DoneFunc) NULL, /* done */
- (FT_CMap_CharIndexFunc)tt_cmap8_char_index, /* char_index */
- (FT_CMap_CharNextFunc) tt_cmap8_char_next, /* char_next */
-
- (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
- (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
- (FT_CMap_VariantListFunc) NULL, /* variant_list */
- (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
- (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
-
- 8,
- (TT_CMap_ValidateFunc)tt_cmap8_validate, /* validate */
- (TT_CMap_Info_GetFunc)tt_cmap8_get_info /* get_cmap_info */
- )
-
-#endif /* TT_CONFIG_CMAP_FORMAT_8 */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FORMAT 10 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* TABLE OVERVIEW */
- /* -------------- */
- /* */
- /* NAME OFFSET TYPE DESCRIPTION */
- /* */
- /* format 0 USHORT must be 10 */
- /* reserved 2 USHORT reserved */
- /* length 4 ULONG length in bytes */
- /* language 8 ULONG Mac language code */
- /* */
- /* start 12 ULONG first char in range */
- /* count 16 ULONG number of chars in range */
- /* glyphIds 20 USHORT[count] glyph indices covered */
- /* */
-
-#ifdef TT_CONFIG_CMAP_FORMAT_10
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap10_validate( FT_Byte* table,
- FT_Validator valid )
- {
- FT_Byte* p = table + 4;
- FT_ULong length, count;
-
-
- if ( table + 20 > valid->limit )
- FT_INVALID_TOO_SHORT;
-
- length = TT_NEXT_ULONG( p );
- p = table + 16;
- count = TT_NEXT_ULONG( p );
-
- if ( length > (FT_ULong)( valid->limit - table ) ||
- /* length < 20 + count * 2 ? */
- length < 20 ||
- ( length - 20 ) / 2 < count )
- FT_INVALID_TOO_SHORT;
-
- /* check glyph indices */
- if ( valid->level >= FT_VALIDATE_TIGHT )
- {
- FT_UInt gindex;
-
-
- for ( ; count > 0; count-- )
- {
- gindex = TT_NEXT_USHORT( p );
- if ( gindex >= TT_VALID_GLYPH_COUNT( valid ) )
- FT_INVALID_GLYPH_ID;
- }
- }
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- tt_cmap10_char_index( TT_CMap cmap,
- FT_UInt32 char_code )
- {
- FT_Byte* table = cmap->data;
- FT_UInt result = 0;
- FT_Byte* p = table + 12;
- FT_UInt32 start = TT_NEXT_ULONG( p );
- FT_UInt32 count = TT_NEXT_ULONG( p );
- FT_UInt32 idx;
-
-
- if ( char_code < start )
- return 0;
-
- idx = char_code - start;
-
- if ( idx < count )
- {
- p += 2 * idx;
- result = TT_PEEK_USHORT( p );
- }
-
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 )
- tt_cmap10_char_next( TT_CMap cmap,
- FT_UInt32 *pchar_code )
- {
- FT_Byte* table = cmap->data;
- FT_UInt32 char_code;
- FT_UInt gindex = 0;
- FT_Byte* p = table + 12;
- FT_UInt32 start = TT_NEXT_ULONG( p );
- FT_UInt32 count = TT_NEXT_ULONG( p );
- FT_UInt32 idx;
-
-
- if ( *pchar_code >= 0xFFFFFFFFUL )
- return 0;
-
- char_code = *pchar_code + 1;
-
- if ( char_code < start )
- char_code = start;
-
- idx = char_code - start;
- p += 2 * idx;
-
- for ( ; idx < count; idx++ )
- {
- gindex = TT_NEXT_USHORT( p );
- if ( gindex != 0 )
- break;
-
- if ( char_code >= 0xFFFFFFFFUL )
- return 0;
-
- char_code++;
- }
-
- *pchar_code = char_code;
- return gindex;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap10_get_info( TT_CMap cmap,
- TT_CMapInfo *cmap_info )
- {
- FT_Byte* p = cmap->data + 8;
-
-
- cmap_info->format = 10;
- cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p );
-
- return FT_Err_Ok;
- }
-
-
- FT_DEFINE_TT_CMAP(
- tt_cmap10_class_rec,
-
- sizeof ( TT_CMapRec ),
-
- (FT_CMap_InitFunc) tt_cmap_init, /* init */
- (FT_CMap_DoneFunc) NULL, /* done */
- (FT_CMap_CharIndexFunc)tt_cmap10_char_index, /* char_index */
- (FT_CMap_CharNextFunc) tt_cmap10_char_next, /* char_next */
-
- (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
- (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
- (FT_CMap_VariantListFunc) NULL, /* variant_list */
- (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
- (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
-
- 10,
- (TT_CMap_ValidateFunc)tt_cmap10_validate, /* validate */
- (TT_CMap_Info_GetFunc)tt_cmap10_get_info /* get_cmap_info */
- )
-
-#endif /* TT_CONFIG_CMAP_FORMAT_10 */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FORMAT 12 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* TABLE OVERVIEW */
- /* -------------- */
- /* */
- /* NAME OFFSET TYPE DESCRIPTION */
- /* */
- /* format 0 USHORT must be 12 */
- /* reserved 2 USHORT reserved */
- /* length 4 ULONG length in bytes */
- /* language 8 ULONG Mac language code */
- /* count 12 ULONG number of groups */
- /* 16 */
- /* */
- /* This header is followed by `count' groups of the following format: */
- /* */
- /* start 0 ULONG first charcode */
- /* end 4 ULONG last charcode */
- /* startId 8 ULONG start glyph ID for the group */
- /* */
-
-#ifdef TT_CONFIG_CMAP_FORMAT_12
-
- typedef struct TT_CMap12Rec_
- {
- TT_CMapRec cmap;
- FT_Bool valid;
- FT_ULong cur_charcode;
- FT_UInt cur_gindex;
- FT_ULong cur_group;
- FT_ULong num_groups;
-
- } TT_CMap12Rec, *TT_CMap12;
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap12_init( TT_CMap12 cmap,
- FT_Byte* table )
- {
- cmap->cmap.data = table;
-
- table += 12;
- cmap->num_groups = FT_PEEK_ULONG( table );
-
- cmap->valid = 0;
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap12_validate( FT_Byte* table,
- FT_Validator valid )
- {
- FT_Byte* p;
- FT_ULong length;
- FT_ULong num_groups;
-
-
- if ( table + 16 > valid->limit )
- FT_INVALID_TOO_SHORT;
-
- p = table + 4;
- length = TT_NEXT_ULONG( p );
-
- p = table + 12;
- num_groups = TT_NEXT_ULONG( p );
-
- if ( length > (FT_ULong)( valid->limit - table ) ||
- /* length < 16 + 12 * num_groups ? */
- length < 16 ||
- ( length - 16 ) / 12 < num_groups )
- FT_INVALID_TOO_SHORT;
-
- /* check groups, they must be in increasing order */
- {
- FT_ULong n, start, end, start_id, last = 0;
-
-
- for ( n = 0; n < num_groups; n++ )
- {
- start = TT_NEXT_ULONG( p );
- end = TT_NEXT_ULONG( p );
- start_id = TT_NEXT_ULONG( p );
-
- if ( start > end )
- FT_INVALID_DATA;
-
- if ( n > 0 && start <= last )
- FT_INVALID_DATA;
-
- if ( valid->level >= FT_VALIDATE_TIGHT )
- {
- FT_UInt32 d = end - start;
-
-
- /* start_id + end - start >= TT_VALID_GLYPH_COUNT( valid ) ? */
- if ( d > TT_VALID_GLYPH_COUNT( valid ) ||
- start_id >= TT_VALID_GLYPH_COUNT( valid ) - d )
- FT_INVALID_GLYPH_ID;
- }
-
- last = end;
- }
- }
-
- return FT_Err_Ok;
- }
-
-
- /* search the index of the charcode next to cmap->cur_charcode */
- /* cmap->cur_group should be set up properly by caller */
- /* */
- static void
- tt_cmap12_next( TT_CMap12 cmap )
- {
- FT_Face face = cmap->cmap.cmap.charmap.face;
- FT_Byte* p;
- FT_ULong start, end, start_id, char_code;
- FT_ULong n;
- FT_UInt gindex;
-
-
- if ( cmap->cur_charcode >= 0xFFFFFFFFUL )
- goto Fail;
-
- char_code = cmap->cur_charcode + 1;
-
- for ( n = cmap->cur_group; n < cmap->num_groups; n++ )
- {
- p = cmap->cmap.data + 16 + 12 * n;
- start = TT_NEXT_ULONG( p );
- end = TT_NEXT_ULONG( p );
- start_id = TT_PEEK_ULONG( p );
-
- if ( char_code < start )
- char_code = start;
-
- Again:
- if ( char_code <= end )
- {
- /* ignore invalid group */
- if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) )
- continue;
-
- gindex = (FT_UInt)( start_id + ( char_code - start ) );
-
- /* does first element of group point to `.notdef' glyph? */
- if ( gindex == 0 )
- {
- if ( char_code >= 0xFFFFFFFFUL )
- goto Fail;
-
- char_code++;
- goto Again;
- }
-
- /* if `gindex' is invalid, the remaining values */
- /* in this group are invalid, too */
- if ( gindex >= (FT_UInt)face->num_glyphs )
- {
- gindex = 0;
- continue;
- }
-
- cmap->cur_charcode = char_code;
- cmap->cur_gindex = gindex;
- cmap->cur_group = n;
-
- return;
- }
- }
-
- Fail:
- cmap->valid = 0;
- }
-
-
- static FT_UInt
- tt_cmap12_char_map_binary( TT_CMap cmap,
- FT_UInt32* pchar_code,
- FT_Bool next )
- {
- FT_UInt gindex = 0;
- FT_Byte* p = cmap->data + 12;
- FT_UInt32 num_groups = TT_PEEK_ULONG( p );
- FT_UInt32 char_code = *pchar_code;
- FT_UInt32 start, end, start_id;
- FT_UInt32 max, min, mid;
-
-
- if ( !num_groups )
- return 0;
-
- /* make compiler happy */
- mid = num_groups;
- end = 0xFFFFFFFFUL;
-
- if ( next )
- {
- if ( char_code >= 0xFFFFFFFFUL )
- return 0;
-
- char_code++;
- }
-
- min = 0;
- max = num_groups;
-
- /* binary search */
- while ( min < max )
- {
- mid = ( min + max ) >> 1;
- p = cmap->data + 16 + 12 * mid;
-
- start = TT_NEXT_ULONG( p );
- end = TT_NEXT_ULONG( p );
-
- if ( char_code < start )
- max = mid;
- else if ( char_code > end )
- min = mid + 1;
- else
- {
- start_id = TT_PEEK_ULONG( p );
-
- /* reject invalid glyph index */
- if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) )
- gindex = 0;
- else
- gindex = (FT_UInt)( start_id + ( char_code - start ) );
- break;
- }
- }
-
- if ( next )
- {
- FT_Face face = cmap->cmap.charmap.face;
- TT_CMap12 cmap12 = (TT_CMap12)cmap;
-
-
- /* if `char_code' is not in any group, then `mid' is */
- /* the group nearest to `char_code' */
-
- if ( char_code > end )
- {
- mid++;
- if ( mid == num_groups )
- return 0;
- }
-
- cmap12->valid = 1;
- cmap12->cur_charcode = char_code;
- cmap12->cur_group = mid;
-
- if ( gindex >= (FT_UInt)face->num_glyphs )
- gindex = 0;
-
- if ( !gindex )
- {
- tt_cmap12_next( cmap12 );
-
- if ( cmap12->valid )
- gindex = cmap12->cur_gindex;
- }
- else
- cmap12->cur_gindex = gindex;
-
- *pchar_code = cmap12->cur_charcode;
- }
-
- return gindex;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- tt_cmap12_char_index( TT_CMap cmap,
- FT_UInt32 char_code )
- {
- return tt_cmap12_char_map_binary( cmap, &char_code, 0 );
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 )
- tt_cmap12_char_next( TT_CMap cmap,
- FT_UInt32 *pchar_code )
- {
- TT_CMap12 cmap12 = (TT_CMap12)cmap;
- FT_UInt gindex;
-
-
- /* no need to search */
- if ( cmap12->valid && cmap12->cur_charcode == *pchar_code )
- {
- tt_cmap12_next( cmap12 );
- if ( cmap12->valid )
- {
- gindex = cmap12->cur_gindex;
- *pchar_code = (FT_UInt32)cmap12->cur_charcode;
- }
- else
- gindex = 0;
- }
- else
- gindex = tt_cmap12_char_map_binary( cmap, pchar_code, 1 );
-
- return gindex;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap12_get_info( TT_CMap cmap,
- TT_CMapInfo *cmap_info )
- {
- FT_Byte* p = cmap->data + 8;
-
-
- cmap_info->format = 12;
- cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p );
-
- return FT_Err_Ok;
- }
-
-
- FT_DEFINE_TT_CMAP(
- tt_cmap12_class_rec,
-
- sizeof ( TT_CMap12Rec ),
-
- (FT_CMap_InitFunc) tt_cmap12_init, /* init */
- (FT_CMap_DoneFunc) NULL, /* done */
- (FT_CMap_CharIndexFunc)tt_cmap12_char_index, /* char_index */
- (FT_CMap_CharNextFunc) tt_cmap12_char_next, /* char_next */
-
- (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
- (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
- (FT_CMap_VariantListFunc) NULL, /* variant_list */
- (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
- (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
-
- 12,
- (TT_CMap_ValidateFunc)tt_cmap12_validate, /* validate */
- (TT_CMap_Info_GetFunc)tt_cmap12_get_info /* get_cmap_info */
- )
-
-#endif /* TT_CONFIG_CMAP_FORMAT_12 */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FORMAT 13 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* TABLE OVERVIEW */
- /* -------------- */
- /* */
- /* NAME OFFSET TYPE DESCRIPTION */
- /* */
- /* format 0 USHORT must be 13 */
- /* reserved 2 USHORT reserved */
- /* length 4 ULONG length in bytes */
- /* language 8 ULONG Mac language code */
- /* count 12 ULONG number of groups */
- /* 16 */
- /* */
- /* This header is followed by `count' groups of the following format: */
- /* */
- /* start 0 ULONG first charcode */
- /* end 4 ULONG last charcode */
- /* glyphId 8 ULONG glyph ID for the whole group */
- /* */
-
-#ifdef TT_CONFIG_CMAP_FORMAT_13
-
- typedef struct TT_CMap13Rec_
- {
- TT_CMapRec cmap;
- FT_Bool valid;
- FT_ULong cur_charcode;
- FT_UInt cur_gindex;
- FT_ULong cur_group;
- FT_ULong num_groups;
-
- } TT_CMap13Rec, *TT_CMap13;
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap13_init( TT_CMap13 cmap,
- FT_Byte* table )
- {
- cmap->cmap.data = table;
-
- table += 12;
- cmap->num_groups = FT_PEEK_ULONG( table );
-
- cmap->valid = 0;
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap13_validate( FT_Byte* table,
- FT_Validator valid )
- {
- FT_Byte* p;
- FT_ULong length;
- FT_ULong num_groups;
-
-
- if ( table + 16 > valid->limit )
- FT_INVALID_TOO_SHORT;
-
- p = table + 4;
- length = TT_NEXT_ULONG( p );
-
- p = table + 12;
- num_groups = TT_NEXT_ULONG( p );
-
- if ( length > (FT_ULong)( valid->limit - table ) ||
- /* length < 16 + 12 * num_groups ? */
- length < 16 ||
- ( length - 16 ) / 12 < num_groups )
- FT_INVALID_TOO_SHORT;
-
- /* check groups, they must be in increasing order */
- {
- FT_ULong n, start, end, glyph_id, last = 0;
-
-
- for ( n = 0; n < num_groups; n++ )
- {
- start = TT_NEXT_ULONG( p );
- end = TT_NEXT_ULONG( p );
- glyph_id = TT_NEXT_ULONG( p );
-
- if ( start > end )
- FT_INVALID_DATA;
-
- if ( n > 0 && start <= last )
- FT_INVALID_DATA;
-
- if ( valid->level >= FT_VALIDATE_TIGHT )
- {
- if ( glyph_id >= TT_VALID_GLYPH_COUNT( valid ) )
- FT_INVALID_GLYPH_ID;
- }
-
- last = end;
- }
- }
-
- return FT_Err_Ok;
- }
-
-
- /* search the index of the charcode next to cmap->cur_charcode */
- /* cmap->cur_group should be set up properly by caller */
- /* */
- static void
- tt_cmap13_next( TT_CMap13 cmap )
- {
- FT_Face face = cmap->cmap.cmap.charmap.face;
- FT_Byte* p;
- FT_ULong start, end, glyph_id, char_code;
- FT_ULong n;
- FT_UInt gindex;
-
-
- if ( cmap->cur_charcode >= 0xFFFFFFFFUL )
- goto Fail;
-
- char_code = cmap->cur_charcode + 1;
-
- for ( n = cmap->cur_group; n < cmap->num_groups; n++ )
- {
- p = cmap->cmap.data + 16 + 12 * n;
- start = TT_NEXT_ULONG( p );
- end = TT_NEXT_ULONG( p );
- glyph_id = TT_PEEK_ULONG( p );
-
- if ( char_code < start )
- char_code = start;
-
- if ( char_code <= end )
- {
- gindex = (FT_UInt)glyph_id;
-
- if ( gindex && gindex < (FT_UInt)face->num_glyphs )
- {
- cmap->cur_charcode = char_code;
- cmap->cur_gindex = gindex;
- cmap->cur_group = n;
-
- return;
- }
- }
- }
-
- Fail:
- cmap->valid = 0;
- }
-
-
- static FT_UInt
- tt_cmap13_char_map_binary( TT_CMap cmap,
- FT_UInt32* pchar_code,
- FT_Bool next )
- {
- FT_UInt gindex = 0;
- FT_Byte* p = cmap->data + 12;
- FT_UInt32 num_groups = TT_PEEK_ULONG( p );
- FT_UInt32 char_code = *pchar_code;
- FT_UInt32 start, end;
- FT_UInt32 max, min, mid;
-
-
- if ( !num_groups )
- return 0;
-
- /* make compiler happy */
- mid = num_groups;
- end = 0xFFFFFFFFUL;
-
- if ( next )
- {
- if ( char_code >= 0xFFFFFFFFUL )
- return 0;
-
- char_code++;
- }
-
- min = 0;
- max = num_groups;
-
- /* binary search */
- while ( min < max )
- {
- mid = ( min + max ) >> 1;
- p = cmap->data + 16 + 12 * mid;
-
- start = TT_NEXT_ULONG( p );
- end = TT_NEXT_ULONG( p );
-
- if ( char_code < start )
- max = mid;
- else if ( char_code > end )
- min = mid + 1;
- else
- {
- gindex = (FT_UInt)TT_PEEK_ULONG( p );
-
- break;
- }
- }
-
- if ( next )
- {
- FT_Face face = cmap->cmap.charmap.face;
- TT_CMap13 cmap13 = (TT_CMap13)cmap;
-
-
- /* if `char_code' is not in any group, then `mid' is */
- /* the group nearest to `char_code' */
-
- if ( char_code > end )
- {
- mid++;
- if ( mid == num_groups )
- return 0;
- }
-
- cmap13->valid = 1;
- cmap13->cur_charcode = char_code;
- cmap13->cur_group = mid;
-
- if ( gindex >= (FT_UInt)face->num_glyphs )
- gindex = 0;
-
- if ( !gindex )
- {
- tt_cmap13_next( cmap13 );
-
- if ( cmap13->valid )
- gindex = cmap13->cur_gindex;
- }
- else
- cmap13->cur_gindex = gindex;
-
- *pchar_code = cmap13->cur_charcode;
- }
-
- return gindex;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- tt_cmap13_char_index( TT_CMap cmap,
- FT_UInt32 char_code )
- {
- return tt_cmap13_char_map_binary( cmap, &char_code, 0 );
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 )
- tt_cmap13_char_next( TT_CMap cmap,
- FT_UInt32 *pchar_code )
- {
- TT_CMap13 cmap13 = (TT_CMap13)cmap;
- FT_UInt gindex;
-
-
- /* no need to search */
- if ( cmap13->valid && cmap13->cur_charcode == *pchar_code )
- {
- tt_cmap13_next( cmap13 );
- if ( cmap13->valid )
- {
- gindex = cmap13->cur_gindex;
- *pchar_code = cmap13->cur_charcode;
- }
- else
- gindex = 0;
- }
- else
- gindex = tt_cmap13_char_map_binary( cmap, pchar_code, 1 );
-
- return gindex;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap13_get_info( TT_CMap cmap,
- TT_CMapInfo *cmap_info )
- {
- FT_Byte* p = cmap->data + 8;
-
-
- cmap_info->format = 13;
- cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p );
-
- return FT_Err_Ok;
- }
-
-
- FT_DEFINE_TT_CMAP(
- tt_cmap13_class_rec,
-
- sizeof ( TT_CMap13Rec ),
-
- (FT_CMap_InitFunc) tt_cmap13_init, /* init */
- (FT_CMap_DoneFunc) NULL, /* done */
- (FT_CMap_CharIndexFunc)tt_cmap13_char_index, /* char_index */
- (FT_CMap_CharNextFunc) tt_cmap13_char_next, /* char_next */
-
- (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
- (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
- (FT_CMap_VariantListFunc) NULL, /* variant_list */
- (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
- (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
-
- 13,
- (TT_CMap_ValidateFunc)tt_cmap13_validate, /* validate */
- (TT_CMap_Info_GetFunc)tt_cmap13_get_info /* get_cmap_info */
- )
-
-#endif /* TT_CONFIG_CMAP_FORMAT_13 */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FORMAT 14 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* TABLE OVERVIEW */
- /* -------------- */
- /* */
- /* NAME OFFSET TYPE DESCRIPTION */
- /* */
- /* format 0 USHORT must be 14 */
- /* length 2 ULONG table length in bytes */
- /* numSelector 6 ULONG number of variation sel. records */
- /* */
- /* Followed by numSelector records, each of which looks like */
- /* */
- /* varSelector 0 UINT24 Unicode codepoint of sel. */
- /* defaultOff 3 ULONG offset to a default UVS table */
- /* describing any variants to be found in */
- /* the normal Unicode subtable. */
- /* nonDefOff 7 ULONG offset to a non-default UVS table */
- /* describing any variants not in the */
- /* standard cmap, with GIDs here */
- /* (either offset may be 0 NULL) */
- /* */
- /* Selectors are sorted by code point. */
- /* */
- /* A default Unicode Variation Selector (UVS) subtable is just a list of */
- /* ranges of code points which are to be found in the standard cmap. No */
- /* glyph IDs (GIDs) here. */
- /* */
- /* numRanges 0 ULONG number of ranges following */
- /* */
- /* A range looks like */
- /* */
- /* uniStart 0 UINT24 code point of the first character in */
- /* this range */
- /* additionalCnt 3 UBYTE count of additional characters in this */
- /* range (zero means a range of a single */
- /* character) */
- /* */
- /* Ranges are sorted by `uniStart'. */
- /* */
- /* A non-default Unicode Variation Selector (UVS) subtable is a list of */
- /* mappings from codepoint to GID. */
- /* */
- /* numMappings 0 ULONG number of mappings */
- /* */
- /* A range looks like */
- /* */
- /* uniStart 0 UINT24 code point of the first character in */
- /* this range */
- /* GID 3 USHORT and its GID */
- /* */
- /* Ranges are sorted by `uniStart'. */
-
-#ifdef TT_CONFIG_CMAP_FORMAT_14
-
- typedef struct TT_CMap14Rec_
- {
- TT_CMapRec cmap;
- FT_ULong num_selectors;
-
- /* This array is used to store the results of various
- * cmap 14 query functions. The data is overwritten
- * on each call to these functions.
- */
- FT_UInt32 max_results;
- FT_UInt32* results;
- FT_Memory memory;
-
- } TT_CMap14Rec, *TT_CMap14;
-
-
- FT_CALLBACK_DEF( void )
- tt_cmap14_done( TT_CMap14 cmap )
- {
- FT_Memory memory = cmap->memory;
-
-
- cmap->max_results = 0;
- if ( memory && cmap->results )
- FT_FREE( cmap->results );
- }
-
-
- static FT_Error
- tt_cmap14_ensure( TT_CMap14 cmap,
- FT_UInt32 num_results,
- FT_Memory memory )
- {
- FT_UInt32 old_max = cmap->max_results;
- FT_Error error = FT_Err_Ok;
-
-
- if ( num_results > cmap->max_results )
- {
- cmap->memory = memory;
-
- if ( FT_QRENEW_ARRAY( cmap->results, old_max, num_results ) )
- return error;
-
- cmap->max_results = num_results;
- }
-
- return error;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap14_init( TT_CMap14 cmap,
- FT_Byte* table )
- {
- cmap->cmap.data = table;
-
- table += 6;
- cmap->num_selectors = FT_PEEK_ULONG( table );
- cmap->max_results = 0;
- cmap->results = NULL;
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap14_validate( FT_Byte* table,
- FT_Validator valid )
- {
- FT_Byte* p;
- FT_ULong length;
- FT_ULong num_selectors;
-
-
- if ( table + 2 + 4 + 4 > valid->limit )
- FT_INVALID_TOO_SHORT;
-
- p = table + 2;
- length = TT_NEXT_ULONG( p );
- num_selectors = TT_NEXT_ULONG( p );
-
- if ( length > (FT_ULong)( valid->limit - table ) ||
- /* length < 10 + 11 * num_selectors ? */
- length < 10 ||
- ( length - 10 ) / 11 < num_selectors )
- FT_INVALID_TOO_SHORT;
-
- /* check selectors, they must be in increasing order */
- {
- /* we start lastVarSel at 1 because a variant selector value of 0
- * isn't valid.
- */
- FT_ULong n, lastVarSel = 1;
-
-
- for ( n = 0; n < num_selectors; n++ )
- {
- FT_ULong varSel = TT_NEXT_UINT24( p );
- FT_ULong defOff = TT_NEXT_ULONG( p );
- FT_ULong nondefOff = TT_NEXT_ULONG( p );
-
-
- if ( defOff >= length || nondefOff >= length )
- FT_INVALID_TOO_SHORT;
-
- if ( varSel < lastVarSel )
- FT_INVALID_DATA;
-
- lastVarSel = varSel + 1;
-
- /* check the default table (these glyphs should be reached */
- /* through the normal Unicode cmap, no GIDs, just check order) */
- if ( defOff != 0 )
- {
- FT_Byte* defp = table + defOff;
- FT_ULong numRanges;
- FT_ULong i;
- FT_ULong lastBase = 0;
-
-
- if ( defp + 4 > valid->limit )
- FT_INVALID_TOO_SHORT;
-
- numRanges = TT_NEXT_ULONG( defp );
-
- /* defp + numRanges * 4 > valid->limit ? */
- if ( numRanges > (FT_ULong)( valid->limit - defp ) / 4 )
- FT_INVALID_TOO_SHORT;
-
- for ( i = 0; i < numRanges; i++ )
- {
- FT_ULong base = TT_NEXT_UINT24( defp );
- FT_ULong cnt = FT_NEXT_BYTE( defp );
-
-
- if ( base + cnt >= 0x110000UL ) /* end of Unicode */
- FT_INVALID_DATA;
-
- if ( base < lastBase )
- FT_INVALID_DATA;
-
- lastBase = base + cnt + 1U;
- }
- }
-
- /* and the non-default table (these glyphs are specified here) */
- if ( nondefOff != 0 )
- {
- FT_Byte* ndp = table + nondefOff;
- FT_ULong numMappings;
- FT_ULong i, lastUni = 0;
-
-
- if ( ndp + 4 > valid->limit )
- FT_INVALID_TOO_SHORT;
-
- numMappings = TT_NEXT_ULONG( ndp );
-
- /* numMappings * 5 > (FT_ULong)( valid->limit - ndp ) ? */
- if ( numMappings > ( (FT_ULong)( valid->limit - ndp ) ) / 5 )
- FT_INVALID_TOO_SHORT;
-
- for ( i = 0; i < numMappings; i++ )
- {
- FT_ULong uni = TT_NEXT_UINT24( ndp );
- FT_ULong gid = TT_NEXT_USHORT( ndp );
-
-
- if ( uni >= 0x110000UL ) /* end of Unicode */
- FT_INVALID_DATA;
-
- if ( uni < lastUni )
- FT_INVALID_DATA;
-
- lastUni = uni + 1U;
-
- if ( valid->level >= FT_VALIDATE_TIGHT &&
- gid >= TT_VALID_GLYPH_COUNT( valid ) )
- FT_INVALID_GLYPH_ID;
- }
- }
- }
- }
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- tt_cmap14_char_index( TT_CMap cmap,
- FT_UInt32 char_code )
- {
- FT_UNUSED( cmap );
- FT_UNUSED( char_code );
-
- /* This can't happen */
- return 0;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 )
- tt_cmap14_char_next( TT_CMap cmap,
- FT_UInt32 *pchar_code )
- {
- FT_UNUSED( cmap );
-
- /* This can't happen */
- *pchar_code = 0;
- return 0;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap14_get_info( TT_CMap cmap,
- TT_CMapInfo *cmap_info )
- {
- FT_UNUSED( cmap );
-
- cmap_info->format = 14;
- /* subtable 14 does not define a language field */
- cmap_info->language = 0xFFFFFFFFUL;
-
- return FT_Err_Ok;
- }
-
-
- static FT_UInt
- tt_cmap14_char_map_def_binary( FT_Byte *base,
- FT_UInt32 char_code )
- {
- FT_UInt32 numRanges = TT_PEEK_ULONG( base );
- FT_UInt32 max, min;
-
-
- min = 0;
- max = numRanges;
-
- base += 4;
-
- /* binary search */
- while ( min < max )
- {
- FT_UInt32 mid = ( min + max ) >> 1;
- FT_Byte* p = base + 4 * mid;
- FT_ULong start = TT_NEXT_UINT24( p );
- FT_UInt cnt = FT_NEXT_BYTE( p );
-
-
- if ( char_code < start )
- max = mid;
- else if ( char_code > start + cnt )
- min = mid + 1;
- else
- return TRUE;
- }
-
- return FALSE;
- }
-
-
- static FT_UInt
- tt_cmap14_char_map_nondef_binary( FT_Byte *base,
- FT_UInt32 char_code )
- {
- FT_UInt32 numMappings = TT_PEEK_ULONG( base );
- FT_UInt32 max, min;
-
-
- min = 0;
- max = numMappings;
-
- base += 4;
-
- /* binary search */
- while ( min < max )
- {
- FT_UInt32 mid = ( min + max ) >> 1;
- FT_Byte* p = base + 5 * mid;
- FT_UInt32 uni = (FT_UInt32)TT_NEXT_UINT24( p );
-
-
- if ( char_code < uni )
- max = mid;
- else if ( char_code > uni )
- min = mid + 1;
- else
- return TT_PEEK_USHORT( p );
- }
-
- return 0;
- }
-
-
- static FT_Byte*
- tt_cmap14_find_variant( FT_Byte *base,
- FT_UInt32 variantCode )
- {
- FT_UInt32 numVar = TT_PEEK_ULONG( base );
- FT_UInt32 max, min;
-
-
- min = 0;
- max = numVar;
-
- base += 4;
-
- /* binary search */
- while ( min < max )
- {
- FT_UInt32 mid = ( min + max ) >> 1;
- FT_Byte* p = base + 11 * mid;
- FT_ULong varSel = TT_NEXT_UINT24( p );
-
-
- if ( variantCode < varSel )
- max = mid;
- else if ( variantCode > varSel )
- min = mid + 1;
- else
- return p;
- }
-
- return NULL;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- tt_cmap14_char_var_index( TT_CMap cmap,
- TT_CMap ucmap,
- FT_UInt32 charcode,
- FT_UInt32 variantSelector )
- {
- FT_Byte* p = tt_cmap14_find_variant( cmap->data + 6, variantSelector );
- FT_ULong defOff;
- FT_ULong nondefOff;
-
-
- if ( !p )
- return 0;
-
- defOff = TT_NEXT_ULONG( p );
- nondefOff = TT_PEEK_ULONG( p );
-
- if ( defOff != 0 &&
- tt_cmap14_char_map_def_binary( cmap->data + defOff, charcode ) )
- {
- /* This is the default variant of this charcode. GID not stored */
- /* here; stored in the normal Unicode charmap instead. */
- return ucmap->cmap.clazz->char_index( &ucmap->cmap, charcode );
- }
-
- if ( nondefOff != 0 )
- return tt_cmap14_char_map_nondef_binary( cmap->data + nondefOff,
- charcode );
-
- return 0;
- }
-
-
- FT_CALLBACK_DEF( FT_Int )
- tt_cmap14_char_var_isdefault( TT_CMap cmap,
- FT_UInt32 charcode,
- FT_UInt32 variantSelector )
- {
- FT_Byte* p = tt_cmap14_find_variant( cmap->data + 6, variantSelector );
- FT_ULong defOff;
- FT_ULong nondefOff;
-
-
- if ( !p )
- return -1;
-
- defOff = TT_NEXT_ULONG( p );
- nondefOff = TT_NEXT_ULONG( p );
-
- if ( defOff != 0 &&
- tt_cmap14_char_map_def_binary( cmap->data + defOff, charcode ) )
- return 1;
-
- if ( nondefOff != 0 &&
- tt_cmap14_char_map_nondef_binary( cmap->data + nondefOff,
- charcode ) != 0 )
- return 0;
-
- return -1;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32* )
- tt_cmap14_variants( TT_CMap cmap,
- FT_Memory memory )
- {
- TT_CMap14 cmap14 = (TT_CMap14)cmap;
- FT_UInt32 count = cmap14->num_selectors;
- FT_Byte* p = cmap->data + 10;
- FT_UInt32* result;
- FT_UInt32 i;
-
-
- if ( tt_cmap14_ensure( cmap14, ( count + 1 ), memory ) )
- return NULL;
-
- result = cmap14->results;
- for ( i = 0; i < count; i++ )
- {
- result[i] = (FT_UInt32)TT_NEXT_UINT24( p );
- p += 8;
- }
- result[i] = 0;
-
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 * )
- tt_cmap14_char_variants( TT_CMap cmap,
- FT_Memory memory,
- FT_UInt32 charCode )
- {
- TT_CMap14 cmap14 = (TT_CMap14) cmap;
- FT_UInt32 count = cmap14->num_selectors;
- FT_Byte* p = cmap->data + 10;
- FT_UInt32* q;
-
-
- if ( tt_cmap14_ensure( cmap14, ( count + 1 ), memory ) )
- return NULL;
-
- for ( q = cmap14->results; count > 0; count-- )
- {
- FT_UInt32 varSel = TT_NEXT_UINT24( p );
- FT_ULong defOff = TT_NEXT_ULONG( p );
- FT_ULong nondefOff = TT_NEXT_ULONG( p );
-
-
- if ( ( defOff != 0 &&
- tt_cmap14_char_map_def_binary( cmap->data + defOff,
- charCode ) ) ||
- ( nondefOff != 0 &&
- tt_cmap14_char_map_nondef_binary( cmap->data + nondefOff,
- charCode ) != 0 ) )
- {
- q[0] = varSel;
- q++;
- }
- }
- q[0] = 0;
-
- return cmap14->results;
- }
-
-
- static FT_UInt
- tt_cmap14_def_char_count( FT_Byte *p )
- {
- FT_UInt32 numRanges = (FT_UInt32)TT_NEXT_ULONG( p );
- FT_UInt tot = 0;
-
-
- p += 3; /* point to the first `cnt' field */
- for ( ; numRanges > 0; numRanges-- )
- {
- tot += 1 + p[0];
- p += 4;
- }
-
- return tot;
- }
-
-
- static FT_UInt32*
- tt_cmap14_get_def_chars( TT_CMap cmap,
- FT_Byte* p,
- FT_Memory memory )
- {
- TT_CMap14 cmap14 = (TT_CMap14) cmap;
- FT_UInt32 numRanges;
- FT_UInt cnt;
- FT_UInt32* q;
-
-
- cnt = tt_cmap14_def_char_count( p );
- numRanges = (FT_UInt32)TT_NEXT_ULONG( p );
-
- if ( tt_cmap14_ensure( cmap14, ( cnt + 1 ), memory ) )
- return NULL;
-
- for ( q = cmap14->results; numRanges > 0; numRanges-- )
- {
- FT_UInt32 uni = (FT_UInt32)TT_NEXT_UINT24( p );
-
-
- cnt = FT_NEXT_BYTE( p ) + 1;
- do
- {
- q[0] = uni;
- uni += 1;
- q += 1;
-
- } while ( --cnt != 0 );
- }
- q[0] = 0;
-
- return cmap14->results;
- }
-
-
- static FT_UInt32*
- tt_cmap14_get_nondef_chars( TT_CMap cmap,
- FT_Byte *p,
- FT_Memory memory )
- {
- TT_CMap14 cmap14 = (TT_CMap14) cmap;
- FT_UInt32 numMappings;
- FT_UInt i;
- FT_UInt32 *ret;
-
-
- numMappings = (FT_UInt32)TT_NEXT_ULONG( p );
-
- if ( tt_cmap14_ensure( cmap14, ( numMappings + 1 ), memory ) )
- return NULL;
-
- ret = cmap14->results;
- for ( i = 0; i < numMappings; i++ )
- {
- ret[i] = (FT_UInt32)TT_NEXT_UINT24( p );
- p += 2;
- }
- ret[i] = 0;
-
- return ret;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt32 * )
- tt_cmap14_variant_chars( TT_CMap cmap,
- FT_Memory memory,
- FT_UInt32 variantSelector )
- {
- FT_Byte *p = tt_cmap14_find_variant( cmap->data + 6,
- variantSelector );
- FT_Int i;
- FT_ULong defOff;
- FT_ULong nondefOff;
-
-
- if ( !p )
- return NULL;
-
- defOff = TT_NEXT_ULONG( p );
- nondefOff = TT_NEXT_ULONG( p );
-
- if ( defOff == 0 && nondefOff == 0 )
- return NULL;
-
- if ( defOff == 0 )
- return tt_cmap14_get_nondef_chars( cmap, cmap->data + nondefOff,
- memory );
- else if ( nondefOff == 0 )
- return tt_cmap14_get_def_chars( cmap, cmap->data + defOff,
- memory );
- else
- {
- /* Both a default and a non-default glyph set? That's probably not */
- /* good font design, but the spec allows for it... */
- TT_CMap14 cmap14 = (TT_CMap14) cmap;
- FT_UInt32 numRanges;
- FT_UInt32 numMappings;
- FT_UInt32 duni;
- FT_UInt32 dcnt;
- FT_UInt32 nuni;
- FT_Byte* dp;
- FT_UInt di, ni, k;
-
- FT_UInt32 *ret;
-
-
- p = cmap->data + nondefOff;
- dp = cmap->data + defOff;
-
- numMappings = (FT_UInt32)TT_NEXT_ULONG( p );
- dcnt = tt_cmap14_def_char_count( dp );
- numRanges = (FT_UInt32)TT_NEXT_ULONG( dp );
-
- if ( numMappings == 0 )
- return tt_cmap14_get_def_chars( cmap, cmap->data + defOff,
- memory );
- if ( dcnt == 0 )
- return tt_cmap14_get_nondef_chars( cmap, cmap->data + nondefOff,
- memory );
-
- if ( tt_cmap14_ensure( cmap14, ( dcnt + numMappings + 1 ), memory ) )
- return NULL;
-
- ret = cmap14->results;
- duni = (FT_UInt32)TT_NEXT_UINT24( dp );
- dcnt = FT_NEXT_BYTE( dp );
- di = 1;
- nuni = (FT_UInt32)TT_NEXT_UINT24( p );
- p += 2;
- ni = 1;
- i = 0;
-
- for (;;)
- {
- if ( nuni > duni + dcnt )
- {
- for ( k = 0; k <= dcnt; k++ )
- ret[i++] = duni + k;
-
- di++;
-
- if ( di > numRanges )
- break;
-
- duni = (FT_UInt32)TT_NEXT_UINT24( dp );
- dcnt = FT_NEXT_BYTE( dp );
- }
- else
- {
- if ( nuni < duni )
- ret[i++] = nuni;
- /* If it is within the default range then ignore it -- */
- /* that should not have happened */
- ni++;
- if ( ni > numMappings )
- break;
-
- nuni = (FT_UInt32)TT_NEXT_UINT24( p );
- p += 2;
- }
- }
-
- if ( ni <= numMappings )
- {
- /* If we get here then we have run out of all default ranges. */
- /* We have read one non-default mapping which we haven't stored */
- /* and there may be others that need to be read. */
- ret[i++] = nuni;
- while ( ni < numMappings )
- {
- ret[i++] = (FT_UInt32)TT_NEXT_UINT24( p );
- p += 2;
- ni++;
- }
- }
- else if ( di <= numRanges )
- {
- /* If we get here then we have run out of all non-default */
- /* mappings. We have read one default range which we haven't */
- /* stored and there may be others that need to be read. */
- for ( k = 0; k <= dcnt; k++ )
- ret[i++] = duni + k;
-
- while ( di < numRanges )
- {
- duni = (FT_UInt32)TT_NEXT_UINT24( dp );
- dcnt = FT_NEXT_BYTE( dp );
-
- for ( k = 0; k <= dcnt; k++ )
- ret[i++] = duni + k;
- di++;
- }
- }
-
- ret[i] = 0;
-
- return ret;
- }
- }
-
-
- FT_DEFINE_TT_CMAP(
- tt_cmap14_class_rec,
-
- sizeof ( TT_CMap14Rec ),
-
- (FT_CMap_InitFunc) tt_cmap14_init, /* init */
- (FT_CMap_DoneFunc) tt_cmap14_done, /* done */
- (FT_CMap_CharIndexFunc)tt_cmap14_char_index, /* char_index */
- (FT_CMap_CharNextFunc) tt_cmap14_char_next, /* char_next */
-
- /* Format 14 extension functions */
- (FT_CMap_CharVarIndexFunc) tt_cmap14_char_var_index,
- (FT_CMap_CharVarIsDefaultFunc)tt_cmap14_char_var_isdefault,
- (FT_CMap_VariantListFunc) tt_cmap14_variants,
- (FT_CMap_CharVariantListFunc) tt_cmap14_char_variants,
- (FT_CMap_VariantCharListFunc) tt_cmap14_variant_chars,
-
- 14,
- (TT_CMap_ValidateFunc)tt_cmap14_validate, /* validate */
- (TT_CMap_Info_GetFunc)tt_cmap14_get_info /* get_cmap_info */
- )
-
-#endif /* TT_CONFIG_CMAP_FORMAT_14 */
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
- static const TT_CMap_Class tt_cmap_classes[] =
- {
-#define TTCMAPCITEM( a ) &a,
-#include "ttcmapc.h"
- NULL,
- };
-
-#else /*FT_CONFIG_OPTION_PIC*/
-
- void
- FT_Destroy_Class_tt_cmap_classes( FT_Library library,
- TT_CMap_Class* clazz )
- {
- FT_Memory memory = library->memory;
-
-
- if ( clazz )
- FT_FREE( clazz );
- }
-
-
- FT_Error
- FT_Create_Class_tt_cmap_classes( FT_Library library,
- TT_CMap_Class** output_class )
- {
- TT_CMap_Class* clazz = NULL;
- TT_CMap_ClassRec* recs;
- FT_Error error;
- FT_Memory memory = library->memory;
-
- int i = 0;
-
-
-#define TTCMAPCITEM( a ) i++;
-#include "ttcmapc.h"
-
- /* allocate enough space for both the pointers */
- /* plus terminator and the class instances */
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) * ( i + 1 ) +
- sizeof ( TT_CMap_ClassRec ) * i ) )
- return error;
-
- /* the location of the class instances follows the array of pointers */
- recs = (TT_CMap_ClassRec*)( (char*)clazz +
- sizeof ( *clazz ) * ( i + 1 ) );
- i = 0;
-
-#undef TTCMAPCITEM
-#define TTCMAPCITEM( a ) \
- FT_Init_Class_ ## a( &recs[i] ); \
- clazz[i] = &recs[i]; \
- i++;
-#include "ttcmapc.h"
-
- clazz[i] = NULL;
-
- *output_class = clazz;
- return FT_Err_Ok;
- }
-
-#endif /*FT_CONFIG_OPTION_PIC*/
-
-
- /* parse the `cmap' table and build the corresponding TT_CMap objects */
- /* in the current face */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_build_cmaps( TT_Face face )
- {
- FT_Byte* table = face->cmap_table;
- FT_Byte* limit = table + face->cmap_size;
- FT_UInt volatile num_cmaps;
- FT_Byte* volatile p = table;
- FT_Library library = FT_FACE_LIBRARY( face );
-
- FT_UNUSED( library );
-
-
- if ( !p || p + 4 > limit )
- return FT_THROW( Invalid_Table );
-
- /* only recognize format 0 */
- if ( TT_NEXT_USHORT( p ) != 0 )
- {
- FT_ERROR(( "tt_face_build_cmaps:"
- " unsupported `cmap' table format = %d\n",
- TT_PEEK_USHORT( p - 2 ) ));
- return FT_THROW( Invalid_Table );
- }
-
- num_cmaps = TT_NEXT_USHORT( p );
-
- for ( ; num_cmaps > 0 && p + 8 <= limit; num_cmaps-- )
- {
- FT_CharMapRec charmap;
- FT_UInt32 offset;
-
-
- charmap.platform_id = TT_NEXT_USHORT( p );
- charmap.encoding_id = TT_NEXT_USHORT( p );
- charmap.face = FT_FACE( face );
- charmap.encoding = FT_ENCODING_NONE; /* will be filled later */
- offset = TT_NEXT_ULONG( p );
-
- if ( offset && offset <= face->cmap_size - 2 )
- {
- FT_Byte* volatile cmap = table + offset;
- volatile FT_UInt format = TT_PEEK_USHORT( cmap );
- const TT_CMap_Class* volatile pclazz = TT_CMAP_CLASSES_GET;
- TT_CMap_Class volatile clazz;
-
-
- for ( ; *pclazz; pclazz++ )
- {
- clazz = *pclazz;
- if ( clazz->format == format )
- {
- volatile TT_ValidatorRec valid;
- volatile FT_Error error = FT_Err_Ok;
-
-
- ft_validator_init( FT_VALIDATOR( &valid ), cmap, limit,
- FT_VALIDATE_DEFAULT );
-
- valid.num_glyphs = (FT_UInt)face->max_profile.numGlyphs;
-
- if ( ft_setjmp( FT_VALIDATOR( &valid )->jump_buffer) == 0 )
- {
- /* validate this cmap sub-table */
- error = clazz->validate( cmap, FT_VALIDATOR( &valid ) );
- }
-
- if ( !valid.validator.error )
- {
- FT_CMap ttcmap;
-
-
- /* It might make sense to store the single variation */
- /* selector cmap somewhere special. But it would have to be */
- /* in the public FT_FaceRec, and we can't change that. */
-
- if ( !FT_CMap_New( (FT_CMap_Class)clazz,
- cmap, &charmap, &ttcmap ) )
- {
- /* it is simpler to directly set `flags' than adding */
- /* a parameter to FT_CMap_New */
- ((TT_CMap)ttcmap)->flags = (FT_Int)error;
- }
- }
- else
- {
- FT_TRACE0(( "tt_face_build_cmaps:"
- " broken cmap sub-table ignored\n" ));
- }
- break;
- }
- }
-
- if ( !*pclazz )
- {
- FT_TRACE0(( "tt_face_build_cmaps:"
- " unsupported cmap sub-table ignored\n" ));
- }
- }
- }
-
- return FT_Err_Ok;
- }
-
-
- FT_LOCAL( FT_Error )
- tt_get_cmap_info( FT_CharMap charmap,
- TT_CMapInfo *cmap_info )
- {
- FT_CMap cmap = (FT_CMap)charmap;
- TT_CMap_Class clazz = (TT_CMap_Class)cmap->clazz;
-
-
- return clazz->get_cmap_info( charmap, cmap_info );
- }
-
-
-/* END */
diff --git a/src/sfnt/ttcmap.h b/src/sfnt/ttcmap.h
deleted file mode 100644
index 83f12df24..000000000
--- a/src/sfnt/ttcmap.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttcmap.h */
-/* */
-/* TrueType character mapping table (cmap) support (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTCMAP_H_
-#define TTCMAP_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-#include FT_INTERNAL_VALIDATE_H
-#include FT_SERVICE_TT_CMAP_H
-
-FT_BEGIN_HEADER
-
-
-#define TT_CMAP_FLAG_UNSORTED 1
-#define TT_CMAP_FLAG_OVERLAPPING 2
-
- typedef struct TT_CMapRec_
- {
- FT_CMapRec cmap;
- FT_Byte* data; /* pointer to in-memory cmap table */
- FT_Int flags; /* for format 4 only */
-
- } TT_CMapRec, *TT_CMap;
-
- typedef const struct TT_CMap_ClassRec_* TT_CMap_Class;
-
-
- typedef FT_Error
- (*TT_CMap_ValidateFunc)( FT_Byte* data,
- FT_Validator valid );
-
- typedef struct TT_CMap_ClassRec_
- {
- FT_CMap_ClassRec clazz;
- FT_UInt format;
- TT_CMap_ValidateFunc validate;
- TT_CMap_Info_GetFunc get_cmap_info;
-
- } TT_CMap_ClassRec;
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_TT_CMAP( class_, \
- size_, \
- init_, \
- done_, \
- char_index_, \
- char_next_, \
- char_var_index_, \
- char_var_default_, \
- variant_list_, \
- charvariant_list_, \
- variantchar_list_, \
- format_, \
- validate_, \
- get_cmap_info_ ) \
- FT_CALLBACK_TABLE_DEF \
- const TT_CMap_ClassRec class_ = \
- { \
- { size_, \
- init_, \
- done_, \
- char_index_, \
- char_next_, \
- char_var_index_, \
- char_var_default_, \
- variant_list_, \
- charvariant_list_, \
- variantchar_list_ \
- }, \
- \
- format_, \
- validate_, \
- get_cmap_info_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_TT_CMAP( class_, \
- size_, \
- init_, \
- done_, \
- char_index_, \
- char_next_, \
- char_var_index_, \
- char_var_default_, \
- variant_list_, \
- charvariant_list_, \
- variantchar_list_, \
- format_, \
- validate_, \
- get_cmap_info_ ) \
- void \
- FT_Init_Class_ ## class_( TT_CMap_ClassRec* clazz ) \
- { \
- clazz->clazz.size = size_; \
- clazz->clazz.init = init_; \
- clazz->clazz.done = done_; \
- clazz->clazz.char_index = char_index_; \
- clazz->clazz.char_next = char_next_; \
- clazz->clazz.char_var_index = char_var_index_; \
- clazz->clazz.char_var_default = char_var_default_; \
- clazz->clazz.variant_list = variant_list_; \
- clazz->clazz.charvariant_list = charvariant_list_; \
- clazz->clazz.variantchar_list = variantchar_list_; \
- clazz->format = format_; \
- clazz->validate = validate_; \
- clazz->get_cmap_info = get_cmap_info_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
- typedef struct TT_ValidatorRec_
- {
- FT_ValidatorRec validator;
- FT_UInt num_glyphs;
-
- } TT_ValidatorRec, *TT_Validator;
-
-
-#define TT_VALIDATOR( x ) ( (TT_Validator)( x ) )
-#define TT_VALID_GLYPH_COUNT( x ) TT_VALIDATOR( x )->num_glyphs
-
-
- FT_LOCAL( FT_Error )
- tt_face_build_cmaps( TT_Face face );
-
- /* used in tt-cmaps service */
- FT_LOCAL( FT_Error )
- tt_get_cmap_info( FT_CharMap charmap,
- TT_CMapInfo *cmap_info );
-
-
-FT_END_HEADER
-
-#endif /* TTCMAP_H_ */
-
-
-/* END */
diff --git a/src/sfnt/ttcmapc.h b/src/sfnt/ttcmapc.h
deleted file mode 100644
index 9a5e70825..000000000
--- a/src/sfnt/ttcmapc.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttcmapc.h */
-/* */
-/* TT CMAP classes definitions (specification only). */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifdef TT_CONFIG_CMAP_FORMAT_0
- TTCMAPCITEM( tt_cmap0_class_rec )
-#endif
-
-#ifdef TT_CONFIG_CMAP_FORMAT_2
- TTCMAPCITEM( tt_cmap2_class_rec )
-#endif
-
-#ifdef TT_CONFIG_CMAP_FORMAT_4
- TTCMAPCITEM( tt_cmap4_class_rec )
-#endif
-
-#ifdef TT_CONFIG_CMAP_FORMAT_6
- TTCMAPCITEM( tt_cmap6_class_rec )
-#endif
-
-#ifdef TT_CONFIG_CMAP_FORMAT_8
- TTCMAPCITEM( tt_cmap8_class_rec )
-#endif
-
-#ifdef TT_CONFIG_CMAP_FORMAT_10
- TTCMAPCITEM( tt_cmap10_class_rec )
-#endif
-
-#ifdef TT_CONFIG_CMAP_FORMAT_12
- TTCMAPCITEM( tt_cmap12_class_rec )
-#endif
-
-#ifdef TT_CONFIG_CMAP_FORMAT_13
- TTCMAPCITEM( tt_cmap13_class_rec )
-#endif
-
-#ifdef TT_CONFIG_CMAP_FORMAT_14
- TTCMAPCITEM( tt_cmap14_class_rec )
-#endif
-
-
- /* END */
diff --git a/src/sfnt/ttkern.c b/src/sfnt/ttkern.c
deleted file mode 100644
index c97e5789a..000000000
--- a/src/sfnt/ttkern.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttkern.c */
-/* */
-/* Load the basic TrueType kerning table. This doesn't handle */
-/* kerning data within the GPOS table at the moment. */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-#include "ttkern.h"
-
-#include "sferrors.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttkern
-
-
-#undef TT_KERN_INDEX
-#define TT_KERN_INDEX( g1, g2 ) ( ( (FT_ULong)(g1) << 16 ) | (g2) )
-
-
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_kern( TT_Face face,
- FT_Stream stream )
- {
- FT_Error error;
- FT_ULong table_size;
- FT_Byte* p;
- FT_Byte* p_limit;
- FT_UInt nn, num_tables;
- FT_UInt32 avail = 0, ordered = 0;
-
-
- /* the kern table is optional; exit silently if it is missing */
- error = face->goto_table( face, TTAG_kern, stream, &table_size );
- if ( error )
- goto Exit;
-
- if ( table_size < 4 ) /* the case of a malformed table */
- {
- FT_ERROR(( "tt_face_load_kern:"
- " kerning table is too small - ignored\n" ));
- error = FT_THROW( Table_Missing );
- goto Exit;
- }
-
- if ( FT_FRAME_EXTRACT( table_size, face->kern_table ) )
- {
- FT_ERROR(( "tt_face_load_kern:"
- " could not extract kerning table\n" ));
- goto Exit;
- }
-
- face->kern_table_size = table_size;
-
- p = face->kern_table;
- p_limit = p + table_size;
-
- p += 2; /* skip version */
- num_tables = FT_NEXT_USHORT( p );
-
- if ( num_tables > 32 ) /* we only support up to 32 sub-tables */
- num_tables = 32;
-
- for ( nn = 0; nn < num_tables; nn++ )
- {
- FT_UInt num_pairs, length, coverage;
- FT_Byte* p_next;
- FT_UInt32 mask = (FT_UInt32)1UL << nn;
-
-
- if ( p + 6 > p_limit )
- break;
-
- p_next = p;
-
- p += 2; /* skip version */
- length = FT_NEXT_USHORT( p );
- coverage = FT_NEXT_USHORT( p );
-
- if ( length <= 6 + 8 )
- break;
-
- p_next += length;
-
- if ( p_next > p_limit ) /* handle broken table */
- p_next = p_limit;
-
- /* only use horizontal kerning tables */
- if ( ( coverage & 3U ) != 0x0001 ||
- p + 8 > p_next )
- goto NextTable;
-
- num_pairs = FT_NEXT_USHORT( p );
- p += 6;
-
- if ( ( p_next - p ) < 6 * (int)num_pairs ) /* handle broken count */
- num_pairs = (FT_UInt)( ( p_next - p ) / 6 );
-
- avail |= mask;
-
- /*
- * Now check whether the pairs in this table are ordered.
- * We then can use binary search.
- */
- if ( num_pairs > 0 )
- {
- FT_ULong count;
- FT_ULong old_pair;
-
-
- old_pair = FT_NEXT_ULONG( p );
- p += 2;
-
- for ( count = num_pairs - 1; count > 0; count-- )
- {
- FT_UInt32 cur_pair;
-
-
- cur_pair = FT_NEXT_ULONG( p );
- if ( cur_pair <= old_pair )
- break;
-
- p += 2;
- old_pair = cur_pair;
- }
-
- if ( count == 0 )
- ordered |= mask;
- }
-
- NextTable:
- p = p_next;
- }
-
- face->num_kern_tables = nn;
- face->kern_avail_bits = avail;
- face->kern_order_bits = ordered;
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- tt_face_done_kern( TT_Face face )
- {
- FT_Stream stream = face->root.stream;
-
-
- FT_FRAME_RELEASE( face->kern_table );
- face->kern_table_size = 0;
- face->num_kern_tables = 0;
- face->kern_avail_bits = 0;
- face->kern_order_bits = 0;
- }
-
-
- FT_LOCAL_DEF( FT_Int )
- tt_face_get_kerning( TT_Face face,
- FT_UInt left_glyph,
- FT_UInt right_glyph )
- {
- FT_Int result = 0;
- FT_UInt count, mask;
- FT_Byte* p = face->kern_table;
- FT_Byte* p_limit = p + face->kern_table_size;
-
-
- p += 4;
- mask = 0x0001;
-
- for ( count = face->num_kern_tables;
- count > 0 && p + 6 <= p_limit;
- count--, mask <<= 1 )
- {
- FT_Byte* base = p;
- FT_Byte* next;
- FT_UInt version = FT_NEXT_USHORT( p );
- FT_UInt length = FT_NEXT_USHORT( p );
- FT_UInt coverage = FT_NEXT_USHORT( p );
- FT_UInt num_pairs;
- FT_Int value = 0;
-
- FT_UNUSED( version );
-
-
- next = base + length;
-
- if ( next > p_limit ) /* handle broken table */
- next = p_limit;
-
- if ( ( face->kern_avail_bits & mask ) == 0 )
- goto NextTable;
-
- FT_ASSERT( p + 8 <= next ); /* tested in tt_face_load_kern */
-
- num_pairs = FT_NEXT_USHORT( p );
- p += 6;
-
- if ( ( next - p ) < 6 * (int)num_pairs ) /* handle broken count */
- num_pairs = (FT_UInt)( ( next - p ) / 6 );
-
- switch ( coverage >> 8 )
- {
- case 0:
- {
- FT_ULong key0 = TT_KERN_INDEX( left_glyph, right_glyph );
-
-
- if ( face->kern_order_bits & mask ) /* binary search */
- {
- FT_UInt min = 0;
- FT_UInt max = num_pairs;
-
-
- while ( min < max )
- {
- FT_UInt mid = ( min + max ) >> 1;
- FT_Byte* q = p + 6 * mid;
- FT_ULong key;
-
-
- key = FT_NEXT_ULONG( q );
-
- if ( key == key0 )
- {
- value = FT_PEEK_SHORT( q );
- goto Found;
- }
- if ( key < key0 )
- min = mid + 1;
- else
- max = mid;
- }
- }
- else /* linear search */
- {
- FT_UInt count2;
-
-
- for ( count2 = num_pairs; count2 > 0; count2-- )
- {
- FT_ULong key = FT_NEXT_ULONG( p );
-
-
- if ( key == key0 )
- {
- value = FT_PEEK_SHORT( p );
- goto Found;
- }
- p += 2;
- }
- }
- }
- break;
-
- /*
- * We don't support format 2 because we haven't seen a single font
- * using it in real life...
- */
-
- default:
- ;
- }
-
- goto NextTable;
-
- Found:
- if ( coverage & 8 ) /* override or add */
- result = value;
- else
- result += value;
-
- NextTable:
- p = next;
- }
-
- return result;
- }
-
-#undef TT_KERN_INDEX
-
-/* END */
diff --git a/src/sfnt/ttkern.h b/src/sfnt/ttkern.h
deleted file mode 100644
index db1a30bdb..000000000
--- a/src/sfnt/ttkern.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttkern.h */
-/* */
-/* Load the basic TrueType kerning table. This doesn't handle */
-/* kerning data within the GPOS table at the moment. */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTKERN_H_
-#define TTKERN_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_kern( TT_Face face,
- FT_Stream stream );
-
- FT_LOCAL( void )
- tt_face_done_kern( TT_Face face );
-
- FT_LOCAL( FT_Int )
- tt_face_get_kerning( TT_Face face,
- FT_UInt left_glyph,
- FT_UInt right_glyph );
-
-#define TT_FACE_HAS_KERNING( face ) ( (face)->kern_avail_bits != 0 )
-
-
-FT_END_HEADER
-
-#endif /* TTKERN_H_ */
-
-
-/* END */
diff --git a/src/sfnt/ttload.c b/src/sfnt/ttload.c
deleted file mode 100644
index df99baa53..000000000
--- a/src/sfnt/ttload.c
+++ /dev/null
@@ -1,1427 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttload.c */
-/* */
-/* Load the basic TrueType tables, i.e., tables that can be either in */
-/* TTF or OTF fonts (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-#include "ttload.h"
-
-#include "sferrors.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttload
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_lookup_table */
- /* */
- /* <Description> */
- /* Looks for a TrueType table by name. */
- /* */
- /* <Input> */
- /* face :: A face object handle. */
- /* */
- /* tag :: The searched tag. */
- /* */
- /* <Return> */
- /* A pointer to the table directory entry. 0 if not found. */
- /* */
- FT_LOCAL_DEF( TT_Table )
- tt_face_lookup_table( TT_Face face,
- FT_ULong tag )
- {
- TT_Table entry;
- TT_Table limit;
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_Bool zero_length = FALSE;
-#endif
-
-
- FT_TRACE4(( "tt_face_lookup_table: %08p, `%c%c%c%c' -- ",
- face,
- (FT_Char)( tag >> 24 ),
- (FT_Char)( tag >> 16 ),
- (FT_Char)( tag >> 8 ),
- (FT_Char)( tag ) ));
-
- entry = face->dir_tables;
- limit = entry + face->num_tables;
-
- for ( ; entry < limit; entry++ )
- {
- /* For compatibility with Windows, we consider */
- /* zero-length tables the same as missing tables. */
- if ( entry->Tag == tag )
- {
- if ( entry->Length != 0 )
- {
- FT_TRACE4(( "found table.\n" ));
- return entry;
- }
-#ifdef FT_DEBUG_LEVEL_TRACE
- zero_length = TRUE;
-#endif
- }
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( zero_length )
- FT_TRACE4(( "ignoring empty table\n" ));
- else
- FT_TRACE4(( "could not find table\n" ));
-#endif
-
- return NULL;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_goto_table */
- /* */
- /* <Description> */
- /* Looks for a TrueType table by name, then seek a stream to it. */
- /* */
- /* <Input> */
- /* face :: A face object handle. */
- /* */
- /* tag :: The searched tag. */
- /* */
- /* stream :: The stream to seek when the table is found. */
- /* */
- /* <Output> */
- /* length :: The length of the table if found, undefined otherwise. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_goto_table( TT_Face face,
- FT_ULong tag,
- FT_Stream stream,
- FT_ULong* length )
- {
- TT_Table table;
- FT_Error error;
-
-
- table = tt_face_lookup_table( face, tag );
- if ( table )
- {
- if ( length )
- *length = table->Length;
-
- if ( FT_STREAM_SEEK( table->Offset ) )
- goto Exit;
- }
- else
- error = FT_THROW( Table_Missing );
-
- Exit:
- return error;
- }
-
-
- /* Here, we */
- /* */
- /* - check that `num_tables' is valid (and adjust it if necessary); */
- /* also return the number of valid table entries */
- /* */
- /* - look for a `head' table, check its size, and parse it to check */
- /* whether its `magic' field is correctly set */
- /* */
- /* - errors (except errors returned by stream handling) */
- /* */
- /* SFNT_Err_Unknown_File_Format: */
- /* no table is defined in directory, it is not sfnt-wrapped */
- /* data */
- /* SFNT_Err_Table_Missing: */
- /* table directory is valid, but essential tables */
- /* (head/bhed/SING) are missing */
- /* */
- static FT_Error
- check_table_dir( SFNT_Header sfnt,
- FT_Stream stream,
- FT_UShort* valid )
- {
- FT_Error error;
- FT_UShort nn, valid_entries = 0;
- FT_UInt has_head = 0, has_sing = 0, has_meta = 0;
- FT_ULong offset = sfnt->offset + 12;
-
- static const FT_Frame_Field table_dir_entry_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_TableRec
-
- FT_FRAME_START( 16 ),
- FT_FRAME_ULONG( Tag ),
- FT_FRAME_ULONG( CheckSum ),
- FT_FRAME_ULONG( Offset ),
- FT_FRAME_ULONG( Length ),
- FT_FRAME_END
- };
-
-
- if ( FT_STREAM_SEEK( offset ) )
- goto Exit;
-
- for ( nn = 0; nn < sfnt->num_tables; nn++ )
- {
- TT_TableRec table;
-
-
- if ( FT_STREAM_READ_FIELDS( table_dir_entry_fields, &table ) )
- {
- nn--;
- FT_TRACE2(( "check_table_dir:"
- " can read only %d table%s in font (instead of %d)\n",
- nn, nn == 1 ? "" : "s", sfnt->num_tables ));
- sfnt->num_tables = nn;
- break;
- }
-
- /* we ignore invalid tables */
-
- if ( table.Offset > stream->size )
- {
- FT_TRACE2(( "check_table_dir: table entry %d invalid\n", nn ));
- continue;
- }
- else if ( table.Length > stream->size - table.Offset )
- {
- /* Some tables have such a simple structure that clipping its */
- /* contents is harmless. This also makes FreeType less sensitive */
- /* to invalid table lengths (which programs like Acroread seem to */
- /* ignore in general). */
-
- if ( table.Tag == TTAG_hmtx ||
- table.Tag == TTAG_vmtx )
- valid_entries++;
- else
- {
- FT_TRACE2(( "check_table_dir: table entry %d invalid\n", nn ));
- continue;
- }
- }
- else
- valid_entries++;
-
- if ( table.Tag == TTAG_head || table.Tag == TTAG_bhed )
- {
- FT_UInt32 magic;
-
-
-#ifndef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
- if ( table.Tag == TTAG_head )
-#endif
- has_head = 1;
-
- /*
- * The table length should be 0x36, but certain font tools make it
- * 0x38, so we will just check that it is greater.
- *
- * Note that according to the specification, the table must be
- * padded to 32-bit lengths, but this doesn't apply to the value of
- * its `Length' field!
- *
- */
- if ( table.Length < 0x36 )
- {
- FT_TRACE2(( "check_table_dir:"
- " `head' or `bhed' table too small\n" ));
- error = FT_THROW( Table_Missing );
- goto Exit;
- }
-
- if ( FT_STREAM_SEEK( table.Offset + 12 ) ||
- FT_READ_ULONG( magic ) )
- goto Exit;
-
- if ( magic != 0x5F0F3CF5UL )
- FT_TRACE2(( "check_table_dir:"
- " invalid magic number in `head' or `bhed' table\n"));
-
- if ( FT_STREAM_SEEK( offset + ( nn + 1 ) * 16 ) )
- goto Exit;
- }
- else if ( table.Tag == TTAG_SING )
- has_sing = 1;
- else if ( table.Tag == TTAG_META )
- has_meta = 1;
- }
-
- *valid = valid_entries;
-
- if ( !valid_entries )
- {
- FT_TRACE2(( "check_table_dir: no valid tables found\n" ));
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
-
- /* if `sing' and `meta' tables are present, there is no `head' table */
- if ( has_head || ( has_sing && has_meta ) )
- {
- error = FT_Err_Ok;
- goto Exit;
- }
- else
- {
- FT_TRACE2(( "check_table_dir:" ));
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
- FT_TRACE2(( " neither `head', `bhed', nor `sing' table found\n" ));
-#else
- FT_TRACE2(( " neither `head' nor `sing' table found\n" ));
-#endif
- error = FT_THROW( Table_Missing );
- }
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_font_dir */
- /* */
- /* <Description> */
- /* Loads the header of a SFNT font file. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* <Output> */
- /* sfnt :: The SFNT header. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* The stream cursor must be at the beginning of the font directory. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_font_dir( TT_Face face,
- FT_Stream stream )
- {
- SFNT_HeaderRec sfnt;
- FT_Error error;
- FT_Memory memory = stream->memory;
- FT_UShort nn, valid_entries;
-
- static const FT_Frame_Field offset_table_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE SFNT_HeaderRec
-
- FT_FRAME_START( 8 ),
- FT_FRAME_USHORT( num_tables ),
- FT_FRAME_USHORT( search_range ),
- FT_FRAME_USHORT( entry_selector ),
- FT_FRAME_USHORT( range_shift ),
- FT_FRAME_END
- };
-
-
- FT_TRACE2(( "tt_face_load_font_dir: %08p\n", face ));
-
- /* read the offset table */
-
- sfnt.offset = FT_STREAM_POS();
-
- if ( FT_READ_ULONG( sfnt.format_tag ) ||
- FT_STREAM_READ_FIELDS( offset_table_fields, &sfnt ) )
- goto Exit;
-
- /* many fonts don't have these fields set correctly */
-#if 0
- if ( sfnt.search_range != 1 << ( sfnt.entry_selector + 4 ) ||
- sfnt.search_range + sfnt.range_shift != sfnt.num_tables << 4 )
- return FT_THROW( Unknown_File_Format );
-#endif
-
- /* load the table directory */
-
- FT_TRACE2(( "-- Number of tables: %10u\n", sfnt.num_tables ));
- FT_TRACE2(( "-- Format version: 0x%08lx\n", sfnt.format_tag ));
-
- if ( sfnt.format_tag != TTAG_OTTO )
- {
- /* check first */
- error = check_table_dir( &sfnt, stream, &valid_entries );
- if ( error )
- {
- FT_TRACE2(( "tt_face_load_font_dir:"
- " invalid table directory for TrueType\n" ));
- goto Exit;
- }
- }
- else
- valid_entries = sfnt.num_tables;
-
- face->num_tables = valid_entries;
- face->format_tag = sfnt.format_tag;
-
- if ( FT_QNEW_ARRAY( face->dir_tables, face->num_tables ) )
- goto Exit;
-
- if ( FT_STREAM_SEEK( sfnt.offset + 12 ) ||
- FT_FRAME_ENTER( sfnt.num_tables * 16L ) )
- goto Exit;
-
- FT_TRACE2(( "\n"
- " tag offset length checksum\n"
- " ----------------------------------\n" ));
-
- valid_entries = 0;
- for ( nn = 0; nn < sfnt.num_tables; nn++ )
- {
- TT_TableRec entry;
- FT_UShort i;
- FT_Bool duplicate;
-
-
- entry.Tag = FT_GET_TAG4();
- entry.CheckSum = FT_GET_ULONG();
- entry.Offset = FT_GET_ULONG();
- entry.Length = FT_GET_ULONG();
-
- /* ignore invalid tables that can't be sanitized */
-
- if ( entry.Offset > stream->size )
- continue;
- else if ( entry.Length > stream->size - entry.Offset )
- {
- if ( entry.Tag == TTAG_hmtx ||
- entry.Tag == TTAG_vmtx )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_ULong old_length = entry.Length;
-#endif
-
-
- /* make metrics table length a multiple of 4 */
- entry.Length = ( stream->size - entry.Offset ) & ~3U;
-
- FT_TRACE2(( " %c%c%c%c %08lx %08lx %08lx"
- " (sanitized; original length %08lx)",
- (FT_Char)( entry.Tag >> 24 ),
- (FT_Char)( entry.Tag >> 16 ),
- (FT_Char)( entry.Tag >> 8 ),
- (FT_Char)( entry.Tag ),
- entry.Offset,
- entry.Length,
- entry.CheckSum,
- old_length ));
- }
- else
- continue;
- }
-#ifdef FT_DEBUG_LEVEL_TRACE
- else
- FT_TRACE2(( " %c%c%c%c %08lx %08lx %08lx",
- (FT_Char)( entry.Tag >> 24 ),
- (FT_Char)( entry.Tag >> 16 ),
- (FT_Char)( entry.Tag >> 8 ),
- (FT_Char)( entry.Tag ),
- entry.Offset,
- entry.Length,
- entry.CheckSum ));
-#endif
-
- /* ignore duplicate tables – the first one wins */
- duplicate = 0;
- for ( i = 0; i < valid_entries; i++ )
- {
- if ( face->dir_tables[i].Tag == entry.Tag )
- {
- duplicate = 1;
- break;
- }
- }
- if ( duplicate )
- {
- FT_TRACE2(( " (duplicate, ignored)\n" ));
- continue;
- }
- else
- {
- FT_TRACE2(( "\n" ));
-
- /* we finally have a valid entry */
- face->dir_tables[valid_entries++] = entry;
- }
- }
-
- /* final adjustment to number of tables */
- face->num_tables = valid_entries;
-
- FT_FRAME_EXIT();
-
- FT_TRACE2(( "table directory loaded\n\n" ));
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_any */
- /* */
- /* <Description> */
- /* Loads any font table into client memory. */
- /* */
- /* <Input> */
- /* face :: The face object to look for. */
- /* */
- /* tag :: The tag of table to load. Use the value 0 if you want */
- /* to access the whole font file, else set this parameter */
- /* to a valid TrueType table tag that you can forge with */
- /* the MAKE_TT_TAG macro. */
- /* */
- /* offset :: The starting offset in the table (or the file if */
- /* tag == 0). */
- /* */
- /* length :: The address of the decision variable: */
- /* */
- /* If length == NULL: */
- /* Loads the whole table. Returns an error if */
- /* `offset' == 0! */
- /* */
- /* If *length == 0: */
- /* Exits immediately; returning the length of the given */
- /* table or of the font file, depending on the value of */
- /* `tag'. */
- /* */
- /* If *length != 0: */
- /* Loads the next `length' bytes of table or font, */
- /* starting at offset `offset' (in table or font too). */
- /* */
- /* <Output> */
- /* buffer :: The address of target buffer. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_any( TT_Face face,
- FT_ULong tag,
- FT_Long offset,
- FT_Byte* buffer,
- FT_ULong* length )
- {
- FT_Error error;
- FT_Stream stream;
- TT_Table table;
- FT_ULong size;
-
-
- if ( tag != 0 )
- {
- /* look for tag in font directory */
- table = tt_face_lookup_table( face, tag );
- if ( !table )
- {
- error = FT_THROW( Table_Missing );
- goto Exit;
- }
-
- offset += table->Offset;
- size = table->Length;
- }
- else
- /* tag == 0 -- the user wants to access the font file directly */
- size = face->root.stream->size;
-
- if ( length && *length == 0 )
- {
- *length = size;
-
- return FT_Err_Ok;
- }
-
- if ( length )
- size = *length;
-
- stream = face->root.stream;
- /* the `if' is syntactic sugar for picky compilers */
- if ( FT_STREAM_READ_AT( offset, buffer, size ) )
- goto Exit;
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_generic_header */
- /* */
- /* <Description> */
- /* Loads the TrueType table `head' or `bhed'. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- static FT_Error
- tt_face_load_generic_header( TT_Face face,
- FT_Stream stream,
- FT_ULong tag )
- {
- FT_Error error;
- TT_Header* header;
-
- static const FT_Frame_Field header_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_Header
-
- FT_FRAME_START( 54 ),
- FT_FRAME_ULONG ( Table_Version ),
- FT_FRAME_ULONG ( Font_Revision ),
- FT_FRAME_LONG ( CheckSum_Adjust ),
- FT_FRAME_LONG ( Magic_Number ),
- FT_FRAME_USHORT( Flags ),
- FT_FRAME_USHORT( Units_Per_EM ),
- FT_FRAME_LONG ( Created[0] ),
- FT_FRAME_LONG ( Created[1] ),
- FT_FRAME_LONG ( Modified[0] ),
- FT_FRAME_LONG ( Modified[1] ),
- FT_FRAME_SHORT ( xMin ),
- FT_FRAME_SHORT ( yMin ),
- FT_FRAME_SHORT ( xMax ),
- FT_FRAME_SHORT ( yMax ),
- FT_FRAME_USHORT( Mac_Style ),
- FT_FRAME_USHORT( Lowest_Rec_PPEM ),
- FT_FRAME_SHORT ( Font_Direction ),
- FT_FRAME_SHORT ( Index_To_Loc_Format ),
- FT_FRAME_SHORT ( Glyph_Data_Format ),
- FT_FRAME_END
- };
-
-
- error = face->goto_table( face, tag, stream, 0 );
- if ( error )
- goto Exit;
-
- header = &face->header;
-
- if ( FT_STREAM_READ_FIELDS( header_fields, header ) )
- goto Exit;
-
- FT_TRACE3(( "Units per EM: %4u\n", header->Units_Per_EM ));
- FT_TRACE3(( "IndexToLoc: %4d\n", header->Index_To_Loc_Format ));
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_head( TT_Face face,
- FT_Stream stream )
- {
- return tt_face_load_generic_header( face, stream, TTAG_head );
- }
-
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_bhed( TT_Face face,
- FT_Stream stream )
- {
- return tt_face_load_generic_header( face, stream, TTAG_bhed );
- }
-
-#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_maxp */
- /* */
- /* <Description> */
- /* Loads the maximum profile into a face object. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_maxp( TT_Face face,
- FT_Stream stream )
- {
- FT_Error error;
- TT_MaxProfile* maxProfile = &face->max_profile;
-
- static const FT_Frame_Field maxp_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_MaxProfile
-
- FT_FRAME_START( 6 ),
- FT_FRAME_LONG ( version ),
- FT_FRAME_USHORT( numGlyphs ),
- FT_FRAME_END
- };
-
- static const FT_Frame_Field maxp_fields_extra[] =
- {
- FT_FRAME_START( 26 ),
- FT_FRAME_USHORT( maxPoints ),
- FT_FRAME_USHORT( maxContours ),
- FT_FRAME_USHORT( maxCompositePoints ),
- FT_FRAME_USHORT( maxCompositeContours ),
- FT_FRAME_USHORT( maxZones ),
- FT_FRAME_USHORT( maxTwilightPoints ),
- FT_FRAME_USHORT( maxStorage ),
- FT_FRAME_USHORT( maxFunctionDefs ),
- FT_FRAME_USHORT( maxInstructionDefs ),
- FT_FRAME_USHORT( maxStackElements ),
- FT_FRAME_USHORT( maxSizeOfInstructions ),
- FT_FRAME_USHORT( maxComponentElements ),
- FT_FRAME_USHORT( maxComponentDepth ),
- FT_FRAME_END
- };
-
-
- error = face->goto_table( face, TTAG_maxp, stream, 0 );
- if ( error )
- goto Exit;
-
- if ( FT_STREAM_READ_FIELDS( maxp_fields, maxProfile ) )
- goto Exit;
-
- maxProfile->maxPoints = 0;
- maxProfile->maxContours = 0;
- maxProfile->maxCompositePoints = 0;
- maxProfile->maxCompositeContours = 0;
- maxProfile->maxZones = 0;
- maxProfile->maxTwilightPoints = 0;
- maxProfile->maxStorage = 0;
- maxProfile->maxFunctionDefs = 0;
- maxProfile->maxInstructionDefs = 0;
- maxProfile->maxStackElements = 0;
- maxProfile->maxSizeOfInstructions = 0;
- maxProfile->maxComponentElements = 0;
- maxProfile->maxComponentDepth = 0;
-
- if ( maxProfile->version >= 0x10000L )
- {
- if ( FT_STREAM_READ_FIELDS( maxp_fields_extra, maxProfile ) )
- goto Exit;
-
- /* XXX: an adjustment that is necessary to load certain */
- /* broken fonts like `Keystrokes MT' :-( */
- /* */
- /* We allocate 64 function entries by default when */
- /* the maxFunctionDefs value is smaller. */
-
- if ( maxProfile->maxFunctionDefs < 64 )
- maxProfile->maxFunctionDefs = 64;
-
- /* we add 4 phantom points later */
- if ( maxProfile->maxTwilightPoints > ( 0xFFFFU - 4 ) )
- {
- FT_TRACE0(( "tt_face_load_maxp:"
- " too much twilight points in `maxp' table;\n"
- " "
- " some glyphs might be rendered incorrectly\n" ));
-
- maxProfile->maxTwilightPoints = 0xFFFFU - 4;
- }
- }
-
- FT_TRACE3(( "numGlyphs: %u\n", maxProfile->numGlyphs ));
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_name */
- /* */
- /* <Description> */
- /* Loads the name records. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_name( TT_Face face,
- FT_Stream stream )
- {
- FT_Error error;
- FT_Memory memory = stream->memory;
- FT_ULong table_pos, table_len;
- FT_ULong storage_start, storage_limit;
- TT_NameTable table;
-
- static const FT_Frame_Field name_table_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_NameTableRec
-
- FT_FRAME_START( 6 ),
- FT_FRAME_USHORT( format ),
- FT_FRAME_USHORT( numNameRecords ),
- FT_FRAME_USHORT( storageOffset ),
- FT_FRAME_END
- };
-
- static const FT_Frame_Field name_record_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_NameRec
-
- /* no FT_FRAME_START */
- FT_FRAME_USHORT( platformID ),
- FT_FRAME_USHORT( encodingID ),
- FT_FRAME_USHORT( languageID ),
- FT_FRAME_USHORT( nameID ),
- FT_FRAME_USHORT( stringLength ),
- FT_FRAME_USHORT( stringOffset ),
- FT_FRAME_END
- };
-
- static const FT_Frame_Field langTag_record_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_LangTagRec
-
- /* no FT_FRAME_START */
- FT_FRAME_USHORT( stringLength ),
- FT_FRAME_USHORT( stringOffset ),
- FT_FRAME_END
- };
-
-
- table = &face->name_table;
- table->stream = stream;
-
- error = face->goto_table( face, TTAG_name, stream, &table_len );
- if ( error )
- goto Exit;
-
- table_pos = FT_STREAM_POS();
-
- if ( FT_STREAM_READ_FIELDS( name_table_fields, table ) )
- goto Exit;
-
- /* Some popular Asian fonts have an invalid `storageOffset' value (it */
- /* should be at least `6 + 12*numNameRecords'). However, the string */
- /* offsets, computed as `storageOffset + entry->stringOffset', are */
- /* valid pointers within the name table... */
- /* */
- /* We thus can't check `storageOffset' right now. */
- /* */
- storage_start = table_pos + 6 + 12 * table->numNameRecords;
- storage_limit = table_pos + table_len;
-
- if ( storage_start > storage_limit )
- {
- FT_ERROR(( "tt_face_load_name: invalid `name' table\n" ));
- error = FT_THROW( Name_Table_Missing );
- goto Exit;
- }
-
- /* `name' format 1 contains additional language tag records, */
- /* which we load first */
- if ( table->format == 1 )
- {
- if ( FT_STREAM_SEEK( storage_start ) ||
- FT_READ_USHORT( table->numLangTagRecords ) )
- goto Exit;
-
- storage_start += 2 + 4 * table->numLangTagRecords;
-
- /* allocate language tag records array */
- if ( FT_NEW_ARRAY( table->langTags, table->numLangTagRecords ) ||
- FT_FRAME_ENTER( table->numLangTagRecords * 4 ) )
- goto Exit;
-
- /* load language tags */
- {
- TT_LangTag entry = table->langTags;
- TT_LangTag limit = entry + table->numLangTagRecords;
-
-
- for ( ; entry < limit; entry++ )
- {
- (void)FT_STREAM_READ_FIELDS( langTag_record_fields, entry );
-
- /* check that the langTag string is within the table */
- entry->stringOffset += table_pos + table->storageOffset;
- if ( entry->stringOffset < storage_start ||
- entry->stringOffset + entry->stringLength > storage_limit )
- {
- /* invalid entry; ignore it */
- entry->stringLength = 0;
- }
- }
- }
-
- FT_FRAME_EXIT();
-
- (void)FT_STREAM_SEEK( table_pos + 6 );
- }
-
- /* allocate name records array */
- if ( FT_NEW_ARRAY( table->names, table->numNameRecords ) ||
- FT_FRAME_ENTER( table->numNameRecords * 12 ) )
- goto Exit;
-
- /* load name records */
- {
- TT_Name entry = table->names;
- FT_UInt count = table->numNameRecords;
-
-
- for ( ; count > 0; count-- )
- {
- if ( FT_STREAM_READ_FIELDS( name_record_fields, entry ) )
- continue;
-
- /* check that the name is not empty */
- if ( entry->stringLength == 0 )
- continue;
-
- /* check that the name string is within the table */
- entry->stringOffset += table_pos + table->storageOffset;
- if ( entry->stringOffset < storage_start ||
- entry->stringOffset + entry->stringLength > storage_limit )
- {
- /* invalid entry; ignore it */
- continue;
- }
-
- /* assure that we have a valid language tag ID, and */
- /* that the corresponding langTag entry is valid, too */
- if ( table->format == 1 && entry->languageID >= 0x8000U )
- {
- if ( entry->languageID - 0x8000U >= table->numLangTagRecords ||
- !table->langTags[entry->languageID - 0x8000U].stringLength )
- {
- /* invalid entry; ignore it */
- continue;
- }
- }
-
- entry++;
- }
-
- /* reduce array size to the actually used elements */
- count = (FT_UInt)( entry - table->names );
- (void)FT_RENEW_ARRAY( table->names,
- table->numNameRecords,
- count );
- table->numNameRecords = count;
- }
-
- FT_FRAME_EXIT();
-
- /* everything went well, update face->num_names */
- face->num_names = (FT_UShort)table->numNameRecords;
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_free_name */
- /* */
- /* <Description> */
- /* Frees the name records. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- FT_LOCAL_DEF( void )
- tt_face_free_name( TT_Face face )
- {
- FT_Memory memory = face->root.driver->root.memory;
- TT_NameTable table = &face->name_table;
-
-
- if ( table->names )
- {
- TT_Name entry = table->names;
- TT_Name limit = entry + table->numNameRecords;
-
-
- for ( ; entry < limit; entry++ )
- FT_FREE( entry->string );
-
- FT_FREE( table->names );
- }
-
- if ( table->langTags )
- {
- TT_LangTag entry = table->langTags;
- TT_LangTag limit = entry + table->numLangTagRecords;
-
-
- for ( ; entry < limit; entry++ )
- FT_FREE( entry->string );
-
- FT_FREE( table->langTags );
- }
-
- table->numNameRecords = 0;
- table->numLangTagRecords = 0;
- table->format = 0;
- table->storageOffset = 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_cmap */
- /* */
- /* <Description> */
- /* Loads the cmap directory in a face object. The cmaps themselves */
- /* are loaded on demand in the `ttcmap.c' module. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: A handle to the input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
-
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_cmap( TT_Face face,
- FT_Stream stream )
- {
- FT_Error error;
-
-
- error = face->goto_table( face, TTAG_cmap, stream, &face->cmap_size );
- if ( error )
- goto Exit;
-
- if ( FT_FRAME_EXTRACT( face->cmap_size, face->cmap_table ) )
- face->cmap_size = 0;
-
- Exit:
- return error;
- }
-
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_os2 */
- /* */
- /* <Description> */
- /* Loads the OS2 table. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: A handle to the input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_os2( TT_Face face,
- FT_Stream stream )
- {
- FT_Error error;
- TT_OS2* os2;
-
- static const FT_Frame_Field os2_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_OS2
-
- FT_FRAME_START( 78 ),
- FT_FRAME_USHORT( version ),
- FT_FRAME_SHORT ( xAvgCharWidth ),
- FT_FRAME_USHORT( usWeightClass ),
- FT_FRAME_USHORT( usWidthClass ),
- FT_FRAME_SHORT ( fsType ),
- FT_FRAME_SHORT ( ySubscriptXSize ),
- FT_FRAME_SHORT ( ySubscriptYSize ),
- FT_FRAME_SHORT ( ySubscriptXOffset ),
- FT_FRAME_SHORT ( ySubscriptYOffset ),
- FT_FRAME_SHORT ( ySuperscriptXSize ),
- FT_FRAME_SHORT ( ySuperscriptYSize ),
- FT_FRAME_SHORT ( ySuperscriptXOffset ),
- FT_FRAME_SHORT ( ySuperscriptYOffset ),
- FT_FRAME_SHORT ( yStrikeoutSize ),
- FT_FRAME_SHORT ( yStrikeoutPosition ),
- FT_FRAME_SHORT ( sFamilyClass ),
- FT_FRAME_BYTE ( panose[0] ),
- FT_FRAME_BYTE ( panose[1] ),
- FT_FRAME_BYTE ( panose[2] ),
- FT_FRAME_BYTE ( panose[3] ),
- FT_FRAME_BYTE ( panose[4] ),
- FT_FRAME_BYTE ( panose[5] ),
- FT_FRAME_BYTE ( panose[6] ),
- FT_FRAME_BYTE ( panose[7] ),
- FT_FRAME_BYTE ( panose[8] ),
- FT_FRAME_BYTE ( panose[9] ),
- FT_FRAME_ULONG ( ulUnicodeRange1 ),
- FT_FRAME_ULONG ( ulUnicodeRange2 ),
- FT_FRAME_ULONG ( ulUnicodeRange3 ),
- FT_FRAME_ULONG ( ulUnicodeRange4 ),
- FT_FRAME_BYTE ( achVendID[0] ),
- FT_FRAME_BYTE ( achVendID[1] ),
- FT_FRAME_BYTE ( achVendID[2] ),
- FT_FRAME_BYTE ( achVendID[3] ),
-
- FT_FRAME_USHORT( fsSelection ),
- FT_FRAME_USHORT( usFirstCharIndex ),
- FT_FRAME_USHORT( usLastCharIndex ),
- FT_FRAME_SHORT ( sTypoAscender ),
- FT_FRAME_SHORT ( sTypoDescender ),
- FT_FRAME_SHORT ( sTypoLineGap ),
- FT_FRAME_USHORT( usWinAscent ),
- FT_FRAME_USHORT( usWinDescent ),
- FT_FRAME_END
- };
-
- /* `OS/2' version 1 and newer */
- static const FT_Frame_Field os2_fields_extra1[] =
- {
- FT_FRAME_START( 8 ),
- FT_FRAME_ULONG( ulCodePageRange1 ),
- FT_FRAME_ULONG( ulCodePageRange2 ),
- FT_FRAME_END
- };
-
- /* `OS/2' version 2 and newer */
- static const FT_Frame_Field os2_fields_extra2[] =
- {
- FT_FRAME_START( 10 ),
- FT_FRAME_SHORT ( sxHeight ),
- FT_FRAME_SHORT ( sCapHeight ),
- FT_FRAME_USHORT( usDefaultChar ),
- FT_FRAME_USHORT( usBreakChar ),
- FT_FRAME_USHORT( usMaxContext ),
- FT_FRAME_END
- };
-
- /* `OS/2' version 5 and newer */
- static const FT_Frame_Field os2_fields_extra5[] =
- {
- FT_FRAME_START( 4 ),
- FT_FRAME_USHORT( usLowerOpticalPointSize ),
- FT_FRAME_USHORT( usUpperOpticalPointSize ),
- FT_FRAME_END
- };
-
-
- /* We now support old Mac fonts where the OS/2 table doesn't */
- /* exist. Simply put, we set the `version' field to 0xFFFF */
- /* and test this value each time we need to access the table. */
- error = face->goto_table( face, TTAG_OS2, stream, 0 );
- if ( error )
- goto Exit;
-
- os2 = &face->os2;
-
- if ( FT_STREAM_READ_FIELDS( os2_fields, os2 ) )
- goto Exit;
-
- os2->ulCodePageRange1 = 0;
- os2->ulCodePageRange2 = 0;
- os2->sxHeight = 0;
- os2->sCapHeight = 0;
- os2->usDefaultChar = 0;
- os2->usBreakChar = 0;
- os2->usMaxContext = 0;
- os2->usLowerOpticalPointSize = 0;
- os2->usUpperOpticalPointSize = 0xFFFF;
-
- if ( os2->version >= 0x0001 )
- {
- /* only version 1 tables */
- if ( FT_STREAM_READ_FIELDS( os2_fields_extra1, os2 ) )
- goto Exit;
-
- if ( os2->version >= 0x0002 )
- {
- /* only version 2 tables */
- if ( FT_STREAM_READ_FIELDS( os2_fields_extra2, os2 ) )
- goto Exit;
-
- if ( os2->version >= 0x0005 )
- {
- /* only version 5 tables */
- if ( FT_STREAM_READ_FIELDS( os2_fields_extra5, os2 ) )
- goto Exit;
- }
- }
- }
-
- FT_TRACE3(( "sTypoAscender: %4d\n", os2->sTypoAscender ));
- FT_TRACE3(( "sTypoDescender: %4d\n", os2->sTypoDescender ));
- FT_TRACE3(( "usWinAscent: %4u\n", os2->usWinAscent ));
- FT_TRACE3(( "usWinDescent: %4u\n", os2->usWinDescent ));
- FT_TRACE3(( "fsSelection: 0x%2x\n", os2->fsSelection ));
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_postscript */
- /* */
- /* <Description> */
- /* Loads the Postscript table. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: A handle to the input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_post( TT_Face face,
- FT_Stream stream )
- {
- FT_Error error;
- TT_Postscript* post = &face->postscript;
-
- static const FT_Frame_Field post_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_Postscript
-
- FT_FRAME_START( 32 ),
- FT_FRAME_LONG ( FormatType ),
- FT_FRAME_LONG ( italicAngle ),
- FT_FRAME_SHORT( underlinePosition ),
- FT_FRAME_SHORT( underlineThickness ),
- FT_FRAME_ULONG( isFixedPitch ),
- FT_FRAME_ULONG( minMemType42 ),
- FT_FRAME_ULONG( maxMemType42 ),
- FT_FRAME_ULONG( minMemType1 ),
- FT_FRAME_ULONG( maxMemType1 ),
- FT_FRAME_END
- };
-
-
- error = face->goto_table( face, TTAG_post, stream, 0 );
- if ( error )
- return error;
-
- if ( FT_STREAM_READ_FIELDS( post_fields, post ) )
- return error;
-
- /* we don't load the glyph names, we do that in another */
- /* module (ttpost). */
-
- FT_TRACE3(( "FormatType: 0x%x\n", post->FormatType ));
- FT_TRACE3(( "isFixedPitch: %s\n", post->isFixedPitch
- ? " yes" : " no" ));
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_pclt */
- /* */
- /* <Description> */
- /* Loads the PCL 5 Table. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: A handle to the input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_pclt( TT_Face face,
- FT_Stream stream )
- {
- static const FT_Frame_Field pclt_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_PCLT
-
- FT_FRAME_START( 54 ),
- FT_FRAME_ULONG ( Version ),
- FT_FRAME_ULONG ( FontNumber ),
- FT_FRAME_USHORT( Pitch ),
- FT_FRAME_USHORT( xHeight ),
- FT_FRAME_USHORT( Style ),
- FT_FRAME_USHORT( TypeFamily ),
- FT_FRAME_USHORT( CapHeight ),
- FT_FRAME_USHORT( SymbolSet ),
- FT_FRAME_BYTES ( TypeFace, 16 ),
- FT_FRAME_BYTES ( CharacterComplement, 8 ),
- FT_FRAME_BYTES ( FileName, 6 ),
- FT_FRAME_CHAR ( StrokeWeight ),
- FT_FRAME_CHAR ( WidthType ),
- FT_FRAME_BYTE ( SerifStyle ),
- FT_FRAME_BYTE ( Reserved ),
- FT_FRAME_END
- };
-
- FT_Error error;
- TT_PCLT* pclt = &face->pclt;
-
-
- /* optional table */
- error = face->goto_table( face, TTAG_PCLT, stream, 0 );
- if ( error )
- goto Exit;
-
- if ( FT_STREAM_READ_FIELDS( pclt_fields, pclt ) )
- goto Exit;
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_gasp */
- /* */
- /* <Description> */
- /* Loads the `gasp' table into a face object. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_gasp( TT_Face face,
- FT_Stream stream )
- {
- FT_Error error;
- FT_Memory memory = stream->memory;
-
- FT_UInt j,num_ranges;
- TT_GaspRange gaspranges = NULL;
-
-
- /* the gasp table is optional */
- error = face->goto_table( face, TTAG_gasp, stream, 0 );
- if ( error )
- goto Exit;
-
- if ( FT_FRAME_ENTER( 4L ) )
- goto Exit;
-
- face->gasp.version = FT_GET_USHORT();
- face->gasp.numRanges = FT_GET_USHORT();
-
- FT_FRAME_EXIT();
-
- /* only support versions 0 and 1 of the table */
- if ( face->gasp.version >= 2 )
- {
- face->gasp.numRanges = 0;
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- num_ranges = face->gasp.numRanges;
- FT_TRACE3(( "numRanges: %u\n", num_ranges ));
-
- if ( FT_QNEW_ARRAY( face->gasp.gaspRanges, num_ranges ) ||
- FT_FRAME_ENTER( num_ranges * 4L ) )
- goto Exit;
-
- gaspranges = face->gasp.gaspRanges;
-
- for ( j = 0; j < num_ranges; j++ )
- {
- gaspranges[j].maxPPEM = FT_GET_USHORT();
- gaspranges[j].gaspFlag = FT_GET_USHORT();
-
- FT_TRACE3(( "gaspRange %d: rangeMaxPPEM %5d, rangeGaspBehavior 0x%x\n",
- j,
- gaspranges[j].maxPPEM,
- gaspranges[j].gaspFlag ));
- }
-
- FT_FRAME_EXIT();
-
- Exit:
- return error;
- }
-
-
-/* END */
diff --git a/src/sfnt/ttload.h b/src/sfnt/ttload.h
deleted file mode 100644
index 296da86ed..000000000
--- a/src/sfnt/ttload.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttload.h */
-/* */
-/* Load the basic TrueType tables, i.e., tables that can be either in */
-/* TTF or OTF fonts (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTLOAD_H_
-#define TTLOAD_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( TT_Table )
- tt_face_lookup_table( TT_Face face,
- FT_ULong tag );
-
- FT_LOCAL( FT_Error )
- tt_face_goto_table( TT_Face face,
- FT_ULong tag,
- FT_Stream stream,
- FT_ULong* length );
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_font_dir( TT_Face face,
- FT_Stream stream );
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_any( TT_Face face,
- FT_ULong tag,
- FT_Long offset,
- FT_Byte* buffer,
- FT_ULong* length );
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_head( TT_Face face,
- FT_Stream stream );
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_cmap( TT_Face face,
- FT_Stream stream );
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_maxp( TT_Face face,
- FT_Stream stream );
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_name( TT_Face face,
- FT_Stream stream );
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_os2( TT_Face face,
- FT_Stream stream );
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_post( TT_Face face,
- FT_Stream stream );
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_pclt( TT_Face face,
- FT_Stream stream );
-
- FT_LOCAL( void )
- tt_face_free_name( TT_Face face );
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_gasp( TT_Face face,
- FT_Stream stream );
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-
- FT_LOCAL( FT_Error )
- tt_face_load_bhed( TT_Face face,
- FT_Stream stream );
-
-#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
-
-
-FT_END_HEADER
-
-#endif /* TTLOAD_H_ */
-
-
-/* END */
diff --git a/src/sfnt/ttmtx.c b/src/sfnt/ttmtx.c
deleted file mode 100644
index 394c6db85..000000000
--- a/src/sfnt/ttmtx.c
+++ /dev/null
@@ -1,326 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttmtx.c */
-/* */
-/* Load the metrics tables common to TTF and OTF fonts (body). */
-/* */
-/* Copyright 2006-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include FT_SERVICE_METRICS_VARIATIONS_H
-#endif
-
-#include "ttmtx.h"
-
-#include "sferrors.h"
-
-
- /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */
- /* be identical except for the names of their fields, */
- /* which are different. */
- /* */
- /* This ensures that `tt_face_load_hmtx' is able to read */
- /* both the horizontal and vertical headers. */
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttmtx
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_hmtx */
- /* */
- /* <Description> */
- /* Load the `hmtx' or `vmtx' table into a face object. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* vertical :: A boolean flag. If set, load `vmtx'. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_hmtx( TT_Face face,
- FT_Stream stream,
- FT_Bool vertical )
- {
- FT_Error error;
- FT_ULong tag, table_size;
- FT_ULong* ptable_offset;
- FT_ULong* ptable_size;
-
-
- if ( vertical )
- {
- tag = TTAG_vmtx;
- ptable_offset = &face->vert_metrics_offset;
- ptable_size = &face->vert_metrics_size;
- }
- else
- {
- tag = TTAG_hmtx;
- ptable_offset = &face->horz_metrics_offset;
- ptable_size = &face->horz_metrics_size;
- }
-
- error = face->goto_table( face, tag, stream, &table_size );
- if ( error )
- goto Fail;
-
- *ptable_size = table_size;
- *ptable_offset = FT_STREAM_POS();
-
- Fail:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_hhea */
- /* */
- /* <Description> */
- /* Load the `hhea' or 'vhea' table into a face object. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* vertical :: A boolean flag. If set, load `vhea'. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_hhea( TT_Face face,
- FT_Stream stream,
- FT_Bool vertical )
- {
- FT_Error error;
- TT_HoriHeader* header;
-
- static const FT_Frame_Field metrics_header_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_HoriHeader
-
- FT_FRAME_START( 36 ),
- FT_FRAME_ULONG ( Version ),
- FT_FRAME_SHORT ( Ascender ),
- FT_FRAME_SHORT ( Descender ),
- FT_FRAME_SHORT ( Line_Gap ),
- FT_FRAME_USHORT( advance_Width_Max ),
- FT_FRAME_SHORT ( min_Left_Side_Bearing ),
- FT_FRAME_SHORT ( min_Right_Side_Bearing ),
- FT_FRAME_SHORT ( xMax_Extent ),
- FT_FRAME_SHORT ( caret_Slope_Rise ),
- FT_FRAME_SHORT ( caret_Slope_Run ),
- FT_FRAME_SHORT ( caret_Offset ),
- FT_FRAME_SHORT ( Reserved[0] ),
- FT_FRAME_SHORT ( Reserved[1] ),
- FT_FRAME_SHORT ( Reserved[2] ),
- FT_FRAME_SHORT ( Reserved[3] ),
- FT_FRAME_SHORT ( metric_Data_Format ),
- FT_FRAME_USHORT( number_Of_HMetrics ),
- FT_FRAME_END
- };
-
-
- if ( vertical )
- {
- void *v = &face->vertical;
-
-
- error = face->goto_table( face, TTAG_vhea, stream, 0 );
- if ( error )
- goto Fail;
-
- header = (TT_HoriHeader*)v;
- }
- else
- {
- error = face->goto_table( face, TTAG_hhea, stream, 0 );
- if ( error )
- goto Fail;
-
- header = &face->horizontal;
- }
-
- if ( FT_STREAM_READ_FIELDS( metrics_header_fields, header ) )
- goto Fail;
-
- FT_TRACE3(( "Ascender: %5d\n", header->Ascender ));
- FT_TRACE3(( "Descender: %5d\n", header->Descender ));
- FT_TRACE3(( "number_Of_Metrics: %5u\n", header->number_Of_HMetrics ));
-
- header->long_metrics = NULL;
- header->short_metrics = NULL;
-
- Fail:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_get_metrics */
- /* */
- /* <Description> */
- /* Return the horizontal or vertical metrics in font units for a */
- /* given glyph. The values are the left side bearing (top side */
- /* bearing for vertical metrics) and advance width (advance height */
- /* for vertical metrics). */
- /* */
- /* <Input> */
- /* face :: A pointer to the TrueType face structure. */
- /* */
- /* vertical :: If set to TRUE, get vertical metrics. */
- /* */
- /* gindex :: The glyph index. */
- /* */
- /* <Output> */
- /* abearing :: The bearing, either left side or top side. */
- /* */
- /* aadvance :: The advance width or advance height, depending on */
- /* the `vertical' flag. */
- /* */
- FT_LOCAL_DEF( void )
- tt_face_get_metrics( TT_Face face,
- FT_Bool vertical,
- FT_UInt gindex,
- FT_Short *abearing,
- FT_UShort *aadvance )
- {
- FT_Error error;
- FT_Stream stream = face->root.stream;
- TT_HoriHeader* header;
- FT_ULong table_pos, table_size, table_end;
- FT_UShort k;
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_Service_MetricsVariations var =
- (FT_Service_MetricsVariations)face->var;
-#endif
-
-
- if ( vertical )
- {
- void* v = &face->vertical;
-
-
- header = (TT_HoriHeader*)v;
- table_pos = face->vert_metrics_offset;
- table_size = face->vert_metrics_size;
- }
- else
- {
- header = &face->horizontal;
- table_pos = face->horz_metrics_offset;
- table_size = face->horz_metrics_size;
- }
-
- table_end = table_pos + table_size;
-
- k = header->number_Of_HMetrics;
-
- if ( k > 0 )
- {
- if ( gindex < (FT_UInt)k )
- {
- table_pos += 4 * gindex;
- if ( table_pos + 4 > table_end )
- goto NoData;
-
- if ( FT_STREAM_SEEK( table_pos ) ||
- FT_READ_USHORT( *aadvance ) ||
- FT_READ_SHORT( *abearing ) )
- goto NoData;
- }
- else
- {
- table_pos += 4 * ( k - 1 );
- if ( table_pos + 4 > table_end )
- goto NoData;
-
- if ( FT_STREAM_SEEK( table_pos ) ||
- FT_READ_USHORT( *aadvance ) )
- goto NoData;
-
- table_pos += 4 + 2 * ( gindex - k );
- if ( table_pos + 2 > table_end )
- *abearing = 0;
- else
- {
- if ( !FT_STREAM_SEEK( table_pos ) )
- (void)FT_READ_SHORT( *abearing );
- }
- }
- }
- else
- {
- NoData:
- *abearing = 0;
- *aadvance = 0;
- }
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- if ( var )
- {
- FT_Face f = FT_FACE( face );
- FT_Int a = (FT_Int)*aadvance;
- FT_Int b = (FT_Int)*abearing;
-
-
- if ( vertical )
- {
- if ( var->vadvance_adjust )
- var->vadvance_adjust( f, gindex, &a );
- if ( var->tsb_adjust )
- var->tsb_adjust( f, gindex, &b );
- }
- else
- {
- if ( var->hadvance_adjust )
- var->hadvance_adjust( f, gindex, &a );
- if ( var->lsb_adjust )
- var->lsb_adjust( f, gindex, &b );
- }
-
- *aadvance = (FT_UShort)a;
- *abearing = (FT_Short)b;
- }
-#endif
- }
-
-
-/* END */
diff --git a/src/sfnt/ttmtx.h b/src/sfnt/ttmtx.h
deleted file mode 100644
index 2b93ab2f0..000000000
--- a/src/sfnt/ttmtx.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttmtx.h */
-/* */
-/* Load the metrics tables common to TTF and OTF fonts (specification). */
-/* */
-/* Copyright 2006-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTMTX_H_
-#define TTMTX_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_hhea( TT_Face face,
- FT_Stream stream,
- FT_Bool vertical );
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_hmtx( TT_Face face,
- FT_Stream stream,
- FT_Bool vertical );
-
-
- FT_LOCAL( void )
- tt_face_get_metrics( TT_Face face,
- FT_Bool vertical,
- FT_UInt gindex,
- FT_Short* abearing,
- FT_UShort* aadvance );
-
-FT_END_HEADER
-
-#endif /* TTMTX_H_ */
-
-
-/* END */
diff --git a/src/sfnt/ttpost.c b/src/sfnt/ttpost.c
deleted file mode 100644
index a47ece0ec..000000000
--- a/src/sfnt/ttpost.c
+++ /dev/null
@@ -1,575 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttpost.c */
-/* */
-/* PostScript name table processing for TrueType and OpenType fonts */
-/* (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* The post table is not completely loaded by the core engine. This */
- /* file loads the missing PS glyph names and implements an API to access */
- /* them. */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-
-
-#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
-
-#include "ttpost.h"
-
-#include "sferrors.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttpost
-
-
- /* If this configuration macro is defined, we rely on the `PSNames' */
- /* module to grab the glyph names. */
-
-#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
-
-
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-
-#define MAC_NAME( x ) (FT_String*)psnames->macintosh_name( (FT_UInt)(x) )
-
-
-#else /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
-
-
- /* Otherwise, we ignore the `PSNames' module, and provide our own */
- /* table of Mac names. Thus, it is possible to build a version of */
- /* FreeType without the Type 1 driver & PSNames module. */
-
-#define MAC_NAME( x ) (FT_String*)tt_post_default_names[x]
-
- /* the 258 default Mac PS glyph names; see file `tools/glnames.py' */
-
- static const FT_String* const tt_post_default_names[258] =
- {
- /* 0 */
- ".notdef", ".null", "nonmarkingreturn", "space", "exclam",
- "quotedbl", "numbersign", "dollar", "percent", "ampersand",
- /* 10 */
- "quotesingle", "parenleft", "parenright", "asterisk", "plus",
- "comma", "hyphen", "period", "slash", "zero",
- /* 20 */
- "one", "two", "three", "four", "five",
- "six", "seven", "eight", "nine", "colon",
- /* 30 */
- "semicolon", "less", "equal", "greater", "question",
- "at", "A", "B", "C", "D",
- /* 40 */
- "E", "F", "G", "H", "I",
- "J", "K", "L", "M", "N",
- /* 50 */
- "O", "P", "Q", "R", "S",
- "T", "U", "V", "W", "X",
- /* 60 */
- "Y", "Z", "bracketleft", "backslash", "bracketright",
- "asciicircum", "underscore", "grave", "a", "b",
- /* 70 */
- "c", "d", "e", "f", "g",
- "h", "i", "j", "k", "l",
- /* 80 */
- "m", "n", "o", "p", "q",
- "r", "s", "t", "u", "v",
- /* 90 */
- "w", "x", "y", "z", "braceleft",
- "bar", "braceright", "asciitilde", "Adieresis", "Aring",
- /* 100 */
- "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis",
- "aacute", "agrave", "acircumflex", "adieresis", "atilde",
- /* 110 */
- "aring", "ccedilla", "eacute", "egrave", "ecircumflex",
- "edieresis", "iacute", "igrave", "icircumflex", "idieresis",
- /* 120 */
- "ntilde", "oacute", "ograve", "ocircumflex", "odieresis",
- "otilde", "uacute", "ugrave", "ucircumflex", "udieresis",
- /* 130 */
- "dagger", "degree", "cent", "sterling", "section",
- "bullet", "paragraph", "germandbls", "registered", "copyright",
- /* 140 */
- "trademark", "acute", "dieresis", "notequal", "AE",
- "Oslash", "infinity", "plusminus", "lessequal", "greaterequal",
- /* 150 */
- "yen", "mu", "partialdiff", "summation", "product",
- "pi", "integral", "ordfeminine", "ordmasculine", "Omega",
- /* 160 */
- "ae", "oslash", "questiondown", "exclamdown", "logicalnot",
- "radical", "florin", "approxequal", "Delta", "guillemotleft",
- /* 170 */
- "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde",
- "Otilde", "OE", "oe", "endash", "emdash",
- /* 180 */
- "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide",
- "lozenge", "ydieresis", "Ydieresis", "fraction", "currency",
- /* 190 */
- "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl",
- "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex",
- /* 200 */
- "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute",
- "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex",
- /* 210 */
- "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave",
- "dotlessi", "circumflex", "tilde", "macron", "breve",
- /* 220 */
- "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek",
- "caron", "Lslash", "lslash", "Scaron", "scaron",
- /* 230 */
- "Zcaron", "zcaron", "brokenbar", "Eth", "eth",
- "Yacute", "yacute", "Thorn", "thorn", "minus",
- /* 240 */
- "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf",
- "onequarter", "threequarters", "franc", "Gbreve", "gbreve",
- /* 250 */
- "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute",
- "Ccaron", "ccaron", "dcroat",
- };
-
-
-#endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
-
-
- static FT_Error
- load_format_20( TT_Face face,
- FT_Stream stream,
- FT_ULong post_limit )
- {
- FT_Memory memory = stream->memory;
- FT_Error error;
-
- FT_Int num_glyphs;
- FT_UShort num_names;
-
- FT_UShort* glyph_indices = NULL;
- FT_Char** name_strings = NULL;
-
-
- if ( FT_READ_USHORT( num_glyphs ) )
- goto Exit;
-
- /* UNDOCUMENTED! The number of glyphs in this table can be smaller */
- /* than the value in the maxp table (cf. cyberbit.ttf). */
-
- /* There already exist fonts which have more than 32768 glyph names */
- /* in this table, so the test for this threshold has been dropped. */
-
- if ( num_glyphs > face->max_profile.numGlyphs )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* load the indices */
- {
- FT_Int n;
-
-
- if ( FT_NEW_ARRAY ( glyph_indices, num_glyphs ) ||
- FT_FRAME_ENTER( num_glyphs * 2L ) )
- goto Fail;
-
- for ( n = 0; n < num_glyphs; n++ )
- glyph_indices[n] = FT_GET_USHORT();
-
- FT_FRAME_EXIT();
- }
-
- /* compute number of names stored in table */
- {
- FT_Int n;
-
-
- num_names = 0;
-
- for ( n = 0; n < num_glyphs; n++ )
- {
- FT_Int idx;
-
-
- idx = glyph_indices[n];
- if ( idx >= 258 )
- {
- idx -= 257;
- if ( idx > num_names )
- num_names = (FT_UShort)idx;
- }
- }
- }
-
- /* now load the name strings */
- {
- FT_UShort n;
-
-
- if ( FT_NEW_ARRAY( name_strings, num_names ) )
- goto Fail;
-
- for ( n = 0; n < num_names; n++ )
- {
- FT_UInt len;
-
-
- if ( FT_STREAM_POS() >= post_limit )
- break;
- else
- {
- FT_TRACE6(( "load_format_20: %d byte left in post table\n",
- post_limit - FT_STREAM_POS() ));
-
- if ( FT_READ_BYTE( len ) )
- goto Fail1;
- }
-
- if ( len > post_limit ||
- FT_STREAM_POS() > post_limit - len )
- {
- FT_Int d = (FT_Int)post_limit - (FT_Int)FT_STREAM_POS();
-
-
- FT_ERROR(( "load_format_20:"
- " exceeding string length (%d),"
- " truncating at end of post table (%d byte left)\n",
- len, d ));
- len = (FT_UInt)FT_MAX( 0, d );
- }
-
- if ( FT_NEW_ARRAY( name_strings[n], len + 1 ) ||
- FT_STREAM_READ( name_strings[n], len ) )
- goto Fail1;
-
- name_strings[n][len] = '\0';
- }
-
- if ( n < num_names )
- {
- FT_ERROR(( "load_format_20:"
- " all entries in post table are already parsed,"
- " using NULL names for gid %d - %d\n",
- n, num_names - 1 ));
- for ( ; n < num_names; n++ )
- if ( FT_NEW_ARRAY( name_strings[n], 1 ) )
- goto Fail1;
- else
- name_strings[n][0] = '\0';
- }
- }
-
- /* all right, set table fields and exit successfully */
- {
- TT_Post_20 table = &face->postscript_names.names.format_20;
-
-
- table->num_glyphs = (FT_UShort)num_glyphs;
- table->num_names = (FT_UShort)num_names;
- table->glyph_indices = glyph_indices;
- table->glyph_names = name_strings;
- }
- return FT_Err_Ok;
-
- Fail1:
- {
- FT_UShort n;
-
-
- for ( n = 0; n < num_names; n++ )
- FT_FREE( name_strings[n] );
- }
-
- Fail:
- FT_FREE( name_strings );
- FT_FREE( glyph_indices );
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- load_format_25( TT_Face face,
- FT_Stream stream,
- FT_ULong post_limit )
- {
- FT_Memory memory = stream->memory;
- FT_Error error;
-
- FT_Int num_glyphs;
- FT_Char* offset_table = NULL;
-
- FT_UNUSED( post_limit );
-
-
- if ( FT_READ_USHORT( num_glyphs ) )
- goto Exit;
-
- /* check the number of glyphs */
- if ( num_glyphs > face->max_profile.numGlyphs ||
- num_glyphs > 258 ||
- num_glyphs < 1 )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- if ( FT_NEW_ARRAY( offset_table, num_glyphs ) ||
- FT_STREAM_READ( offset_table, num_glyphs ) )
- goto Fail;
-
- /* now check the offset table */
- {
- FT_Int n;
-
-
- for ( n = 0; n < num_glyphs; n++ )
- {
- FT_Long idx = (FT_Long)n + offset_table[n];
-
-
- if ( idx < 0 || idx > num_glyphs )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
- }
- }
-
- /* OK, set table fields and exit successfully */
- {
- TT_Post_25 table = &face->postscript_names.names.format_25;
-
-
- table->num_glyphs = (FT_UShort)num_glyphs;
- table->offsets = offset_table;
- }
-
- return FT_Err_Ok;
-
- Fail:
- FT_FREE( offset_table );
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- load_post_names( TT_Face face )
- {
- FT_Stream stream;
- FT_Error error;
- FT_Fixed format;
- FT_ULong post_len;
- FT_ULong post_limit;
-
-
- /* get a stream for the face's resource */
- stream = face->root.stream;
-
- /* seek to the beginning of the PS names table */
- error = face->goto_table( face, TTAG_post, stream, &post_len );
- if ( error )
- goto Exit;
-
- post_limit = FT_STREAM_POS() + post_len;
-
- format = face->postscript.FormatType;
-
- /* go to beginning of subtable */
- if ( FT_STREAM_SKIP( 32 ) )
- goto Exit;
-
- /* now read postscript table */
- if ( format == 0x00020000L )
- error = load_format_20( face, stream, post_limit );
- else if ( format == 0x00028000L )
- error = load_format_25( face, stream, post_limit );
- else
- error = FT_THROW( Invalid_File_Format );
-
- face->postscript_names.loaded = 1;
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- tt_face_free_ps_names( TT_Face face )
- {
- FT_Memory memory = face->root.memory;
- TT_Post_Names names = &face->postscript_names;
- FT_Fixed format;
-
-
- if ( names->loaded )
- {
- format = face->postscript.FormatType;
-
- if ( format == 0x00020000L )
- {
- TT_Post_20 table = &names->names.format_20;
- FT_UShort n;
-
-
- FT_FREE( table->glyph_indices );
- table->num_glyphs = 0;
-
- for ( n = 0; n < table->num_names; n++ )
- FT_FREE( table->glyph_names[n] );
-
- FT_FREE( table->glyph_names );
- table->num_names = 0;
- }
- else if ( format == 0x00028000L )
- {
- TT_Post_25 table = &names->names.format_25;
-
-
- FT_FREE( table->offsets );
- table->num_glyphs = 0;
- }
- }
- names->loaded = 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_get_ps_name */
- /* */
- /* <Description> */
- /* Get the PostScript glyph name of a glyph. */
- /* */
- /* <Input> */
- /* face :: A handle to the parent face. */
- /* */
- /* idx :: The glyph index. */
- /* */
- /* <InOut> */
- /* PSname :: The address of a string pointer. Will be NULL in case */
- /* of error, otherwise it is a pointer to the glyph name. */
- /* */
- /* You must not modify the returned string! */
- /* */
- /* <Output> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_get_ps_name( TT_Face face,
- FT_UInt idx,
- FT_String** PSname )
- {
- FT_Error error;
- TT_Post_Names names;
- FT_Fixed format;
-
-#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
- FT_Service_PsCMaps psnames;
-#endif
-
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
- if ( idx >= (FT_UInt)face->max_profile.numGlyphs )
- return FT_THROW( Invalid_Glyph_Index );
-
-#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
- psnames = (FT_Service_PsCMaps)face->psnames;
- if ( !psnames )
- return FT_THROW( Unimplemented_Feature );
-#endif
-
- names = &face->postscript_names;
-
- /* `.notdef' by default */
- *PSname = MAC_NAME( 0 );
-
- format = face->postscript.FormatType;
-
- if ( format == 0x00010000L )
- {
- if ( idx < 258 ) /* paranoid checking */
- *PSname = MAC_NAME( idx );
- }
- else if ( format == 0x00020000L )
- {
- TT_Post_20 table = &names->names.format_20;
-
-
- if ( !names->loaded )
- {
- error = load_post_names( face );
- if ( error )
- goto End;
- }
-
- if ( idx < (FT_UInt)table->num_glyphs )
- {
- FT_UShort name_index = table->glyph_indices[idx];
-
-
- if ( name_index < 258 )
- *PSname = MAC_NAME( name_index );
- else
- *PSname = (FT_String*)table->glyph_names[name_index - 258];
- }
- }
- else if ( format == 0x00028000L )
- {
- TT_Post_25 table = &names->names.format_25;
-
-
- if ( !names->loaded )
- {
- error = load_post_names( face );
- if ( error )
- goto End;
- }
-
- if ( idx < (FT_UInt)table->num_glyphs ) /* paranoid checking */
- *PSname = MAC_NAME( (FT_Int)idx + table->offsets[idx] );
- }
-
- /* nothing to do for format == 0x00030000L */
-
- End:
- return FT_Err_Ok;
- }
-
-#else /* !TT_CONFIG_OPTION_POSTSCRIPT_NAMES */
-
- /* ANSI C doesn't like empty source files */
- typedef int _tt_post_dummy;
-
-#endif /* !TT_CONFIG_OPTION_POSTSCRIPT_NAMES */
-
-
-/* END */
diff --git a/src/sfnt/ttpost.h b/src/sfnt/ttpost.h
deleted file mode 100644
index 722485e32..000000000
--- a/src/sfnt/ttpost.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttpost.h */
-/* */
-/* PostScript name table processing for TrueType and OpenType fonts */
-/* (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTPOST_H_
-#define TTPOST_H_
-
-
-#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( FT_Error )
- tt_face_get_ps_name( TT_Face face,
- FT_UInt idx,
- FT_String** PSname );
-
- FT_LOCAL( void )
- tt_face_free_ps_names( TT_Face face );
-
-
-FT_END_HEADER
-
-#endif /* TTPOST_H_ */
-
-
-/* END */
diff --git a/src/sfnt/ttsbit.c b/src/sfnt/ttsbit.c
deleted file mode 100644
index 59b2168bb..000000000
--- a/src/sfnt/ttsbit.c
+++ /dev/null
@@ -1,1674 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttsbit.c */
-/* */
-/* TrueType and OpenType embedded bitmap support (body). */
-/* */
-/* Copyright 2005-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* Copyright 2013 by Google, Inc. */
-/* Google Author(s): Behdad Esfahbod. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_BITMAP_H
-
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-
-#include "ttsbit.h"
-
-#include "sferrors.h"
-
-#include "ttmtx.h"
-#include "pngshim.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttsbit
-
-
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_sbit( TT_Face face,
- FT_Stream stream )
- {
- FT_Error error;
- FT_ULong table_size;
- FT_ULong table_start;
-
-
- face->sbit_table = NULL;
- face->sbit_table_size = 0;
- face->sbit_table_type = TT_SBIT_TABLE_TYPE_NONE;
- face->sbit_num_strikes = 0;
-
- error = face->goto_table( face, TTAG_CBLC, stream, &table_size );
- if ( !error )
- face->sbit_table_type = TT_SBIT_TABLE_TYPE_CBLC;
- else
- {
- error = face->goto_table( face, TTAG_EBLC, stream, &table_size );
- if ( error )
- error = face->goto_table( face, TTAG_bloc, stream, &table_size );
- if ( !error )
- face->sbit_table_type = TT_SBIT_TABLE_TYPE_EBLC;
- }
-
- if ( error )
- {
- error = face->goto_table( face, TTAG_sbix, stream, &table_size );
- if ( !error )
- face->sbit_table_type = TT_SBIT_TABLE_TYPE_SBIX;
- }
- if ( error )
- goto Exit;
-
- if ( table_size < 8 )
- {
- FT_ERROR(( "tt_face_load_sbit_strikes: table too short\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- table_start = FT_STREAM_POS();
-
- switch ( (FT_UInt)face->sbit_table_type )
- {
- case TT_SBIT_TABLE_TYPE_EBLC:
- case TT_SBIT_TABLE_TYPE_CBLC:
- {
- FT_Byte* p;
- FT_Fixed version;
- FT_ULong num_strikes;
- FT_UInt count;
-
-
- if ( FT_FRAME_EXTRACT( table_size, face->sbit_table ) )
- goto Exit;
-
- face->sbit_table_size = table_size;
-
- p = face->sbit_table;
-
- version = FT_NEXT_LONG( p );
- num_strikes = FT_NEXT_ULONG( p );
-
- /* there's at least one font (FZShuSong-Z01, version 3) */
- /* that uses the wrong byte order for the `version' field */
- if ( ( (FT_ULong)version & 0xFFFF0000UL ) != 0x00020000UL &&
- ( (FT_ULong)version & 0x0000FFFFUL ) != 0x00000200UL &&
- ( (FT_ULong)version & 0xFFFF0000UL ) != 0x00030000UL &&
- ( (FT_ULong)version & 0x0000FFFFUL ) != 0x00000300UL )
- {
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
-
- if ( num_strikes >= 0x10000UL )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /*
- * Count the number of strikes available in the table. We are a bit
- * paranoid there and don't trust the data.
- */
- count = (FT_UInt)num_strikes;
- if ( 8 + 48UL * count > table_size )
- count = (FT_UInt)( ( table_size - 8 ) / 48 );
-
- face->sbit_num_strikes = count;
- }
- break;
-
- case TT_SBIT_TABLE_TYPE_SBIX:
- {
- FT_UShort version;
- FT_UShort flags;
- FT_ULong num_strikes;
- FT_UInt count;
-
-
- if ( FT_FRAME_ENTER( 8 ) )
- goto Exit;
-
- version = FT_GET_USHORT();
- flags = FT_GET_USHORT();
- num_strikes = FT_GET_ULONG();
-
- FT_FRAME_EXIT();
-
- if ( version < 1 )
- {
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
-
- /* Bit 0 must always be `1'. */
- /* Bit 1 controls the overlay of bitmaps with outlines. */
- /* All other bits should be zero. */
- if ( !( flags == 1 || flags == 3 ) ||
- num_strikes >= 0x10000UL )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* we currently don't support bit 1; however, it is better to */
- /* draw at least something... */
- if ( flags == 3 )
- FT_TRACE1(( "tt_face_load_sbit_strikes:"
- " sbix overlay not supported yet\n"
- " "
- " expect bad rendering results\n" ));
-
- /*
- * Count the number of strikes available in the table. We are a bit
- * paranoid there and don't trust the data.
- */
- count = (FT_UInt)num_strikes;
- if ( 8 + 4UL * count > table_size )
- count = (FT_UInt)( ( table_size - 8 ) / 4 );
-
- if ( FT_STREAM_SEEK( FT_STREAM_POS() - 8 ) )
- goto Exit;
-
- face->sbit_table_size = 8 + count * 4;
- if ( FT_FRAME_EXTRACT( face->sbit_table_size, face->sbit_table ) )
- goto Exit;
-
- face->sbit_num_strikes = count;
- }
- break;
-
- default:
- /* we ignore unknown table formats */
- error = FT_THROW( Unknown_File_Format );
- break;
- }
-
- if ( !error )
- FT_TRACE3(( "tt_face_load_sbit_strikes: found %u strikes\n",
- face->sbit_num_strikes ));
-
- face->ebdt_start = 0;
- face->ebdt_size = 0;
-
- if ( face->sbit_table_type == TT_SBIT_TABLE_TYPE_SBIX )
- {
- /* the `sbix' table is self-contained; */
- /* it has no associated data table */
- face->ebdt_start = table_start;
- face->ebdt_size = table_size;
- }
- else if ( face->sbit_table_type != TT_SBIT_TABLE_TYPE_NONE )
- {
- FT_ULong ebdt_size;
-
-
- error = face->goto_table( face, TTAG_CBDT, stream, &ebdt_size );
- if ( error )
- error = face->goto_table( face, TTAG_EBDT, stream, &ebdt_size );
- if ( error )
- error = face->goto_table( face, TTAG_bdat, stream, &ebdt_size );
-
- if ( !error )
- {
- face->ebdt_start = FT_STREAM_POS();
- face->ebdt_size = ebdt_size;
- }
- }
-
- if ( !face->ebdt_size )
- {
- FT_TRACE2(( "tt_face_load_sbit_strikes:"
- " no embedded bitmap data table found;\n"
- " "
- " resetting number of strikes to zero\n" ));
- face->sbit_num_strikes = 0;
- }
-
- return FT_Err_Ok;
-
- Exit:
- if ( error )
- {
- if ( face->sbit_table )
- FT_FRAME_RELEASE( face->sbit_table );
- face->sbit_table_size = 0;
- face->sbit_table_type = TT_SBIT_TABLE_TYPE_NONE;
- }
-
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- tt_face_free_sbit( TT_Face face )
- {
- FT_Stream stream = face->root.stream;
-
-
- FT_FRAME_RELEASE( face->sbit_table );
- face->sbit_table_size = 0;
- face->sbit_table_type = TT_SBIT_TABLE_TYPE_NONE;
- face->sbit_num_strikes = 0;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- tt_face_set_sbit_strike( TT_Face face,
- FT_Size_Request req,
- FT_ULong* astrike_index )
- {
- return FT_Match_Size( (FT_Face)face, req, 0, astrike_index );
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_strike_metrics( TT_Face face,
- FT_ULong strike_index,
- FT_Size_Metrics* metrics )
- {
- /* we have to test for the existence of `sbit_strike_map' */
- /* because the function gets also used at the very beginning */
- /* to construct `sbit_strike_map' itself */
- if ( face->sbit_strike_map )
- {
- if ( strike_index >= (FT_ULong)face->root.num_fixed_sizes )
- return FT_THROW( Invalid_Argument );
-
- /* map to real index */
- strike_index = face->sbit_strike_map[strike_index];
- }
- else
- {
- if ( strike_index >= (FT_ULong)face->sbit_num_strikes )
- return FT_THROW( Invalid_Argument );
- }
-
- switch ( (FT_UInt)face->sbit_table_type )
- {
- case TT_SBIT_TABLE_TYPE_EBLC:
- case TT_SBIT_TABLE_TYPE_CBLC:
- {
- FT_Byte* strike;
- FT_Char max_before_bl;
- FT_Char min_after_bl;
-
-
- strike = face->sbit_table + 8 + strike_index * 48;
-
- metrics->x_ppem = (FT_UShort)strike[44];
- metrics->y_ppem = (FT_UShort)strike[45];
-
- metrics->ascender = (FT_Char)strike[16] * 64; /* hori.ascender */
- metrics->descender = (FT_Char)strike[17] * 64; /* hori.descender */
-
- /* Due to fuzzy wording in the EBLC documentation, we find both */
- /* positive and negative values for `descender'. Additionally, */
- /* many fonts have both `ascender' and `descender' set to zero */
- /* (which is definitely wrong). MS Windows simply ignores all */
- /* those values... For these reasons we apply some heuristics */
- /* to get a reasonable, non-zero value for the height. */
-
- max_before_bl = (FT_Char)strike[24];
- min_after_bl = (FT_Char)strike[25];
-
- if ( metrics->descender > 0 )
- {
- /* compare sign of descender with `min_after_bl' */
- if ( min_after_bl < 0 )
- metrics->descender = -metrics->descender;
- }
-
- else if ( metrics->descender == 0 )
- {
- if ( metrics->ascender == 0 )
- {
- FT_TRACE2(( "tt_face_load_strike_metrics:"
- " sanitizing invalid ascender and descender\n"
- " "
- " values for strike %d (%dppem, %dppem)\n",
- strike_index,
- metrics->x_ppem, metrics->y_ppem ));
-
- /* sanitize buggy ascender and descender values */
- if ( max_before_bl || min_after_bl )
- {
- metrics->ascender = max_before_bl * 64;
- metrics->descender = min_after_bl * 64;
- }
- else
- {
- metrics->ascender = metrics->y_ppem * 64;
- metrics->descender = 0;
- }
- }
- }
-
-#if 0
- else
- ; /* if we have a negative descender, simply use it */
-#endif
-
- metrics->height = metrics->ascender - metrics->descender;
- if ( metrics->height == 0 )
- {
- FT_TRACE2(( "tt_face_load_strike_metrics:"
- " sanitizing invalid height value\n"
- " "
- " for strike (%d, %d)\n",
- metrics->x_ppem, metrics->y_ppem ));
- metrics->height = metrics->y_ppem * 64;
- metrics->descender = metrics->ascender - metrics->height;
- }
-
- /* Is this correct? */
- metrics->max_advance = ( (FT_Char)strike[22] + /* min_origin_SB */
- strike[18] + /* max_width */
- (FT_Char)strike[23] /* min_advance_SB */
- ) * 64;
-
- /* set the scale values (in 16.16 units) so advances */
- /* from the hmtx and vmtx table are scaled correctly */
- metrics->x_scale = FT_MulDiv( metrics->x_ppem,
- 64 * 0x10000,
- face->header.Units_Per_EM );
- metrics->y_scale = FT_MulDiv( metrics->y_ppem,
- 64 * 0x10000,
- face->header.Units_Per_EM );
-
- return FT_Err_Ok;
- }
-
- case TT_SBIT_TABLE_TYPE_SBIX:
- {
- FT_Stream stream = face->root.stream;
- FT_UInt offset;
- FT_UShort upem, ppem, resolution;
- TT_HoriHeader *hori;
- FT_Pos ppem_; /* to reduce casts */
-
- FT_Error error;
- FT_Byte* p;
-
-
- p = face->sbit_table + 8 + 4 * strike_index;
- offset = FT_NEXT_ULONG( p );
-
- if ( offset + 4 > face->ebdt_size )
- return FT_THROW( Invalid_File_Format );
-
- if ( FT_STREAM_SEEK( face->ebdt_start + offset ) ||
- FT_FRAME_ENTER( 4 ) )
- return error;
-
- ppem = FT_GET_USHORT();
- resolution = FT_GET_USHORT();
-
- FT_UNUSED( resolution ); /* What to do with this? */
-
- FT_FRAME_EXIT();
-
- upem = face->header.Units_Per_EM;
- hori = &face->horizontal;
-
- metrics->x_ppem = ppem;
- metrics->y_ppem = ppem;
-
- ppem_ = (FT_Pos)ppem;
-
- metrics->ascender =
- FT_MulDiv( hori->Ascender, ppem_ * 64, upem );
- metrics->descender =
- FT_MulDiv( hori->Descender, ppem_ * 64, upem );
- metrics->height =
- FT_MulDiv( hori->Ascender - hori->Descender + hori->Line_Gap,
- ppem_ * 64, upem );
- metrics->max_advance =
- FT_MulDiv( hori->advance_Width_Max, ppem_ * 64, upem );
-
- /* set the scale values (in 16.16 units) so advances */
- /* from the hmtx and vmtx table are scaled correctly */
- metrics->x_scale = FT_MulDiv( metrics->x_ppem,
- 64 * 0x10000,
- face->header.Units_Per_EM );
- metrics->y_scale = FT_MulDiv( metrics->y_ppem,
- 64 * 0x10000,
- face->header.Units_Per_EM );
-
- return error;
- }
-
- default:
- return FT_THROW( Unknown_File_Format );
- }
- }
-
-
- typedef struct TT_SBitDecoderRec_
- {
- TT_Face face;
- FT_Stream stream;
- FT_Bitmap* bitmap;
- TT_SBit_Metrics metrics;
- FT_Bool metrics_loaded;
- FT_Bool bitmap_allocated;
- FT_Byte bit_depth;
-
- FT_ULong ebdt_start;
- FT_ULong ebdt_size;
-
- FT_ULong strike_index_array;
- FT_ULong strike_index_count;
- FT_Byte* eblc_base;
- FT_Byte* eblc_limit;
-
- } TT_SBitDecoderRec, *TT_SBitDecoder;
-
-
- static FT_Error
- tt_sbit_decoder_init( TT_SBitDecoder decoder,
- TT_Face face,
- FT_ULong strike_index,
- TT_SBit_MetricsRec* metrics )
- {
- FT_Error error = FT_ERR( Table_Missing );
- FT_Stream stream = face->root.stream;
-
-
- strike_index = face->sbit_strike_map[strike_index];
-
- if ( !face->ebdt_size )
- goto Exit;
- if ( FT_STREAM_SEEK( face->ebdt_start ) )
- goto Exit;
-
- decoder->face = face;
- decoder->stream = stream;
- decoder->bitmap = &face->root.glyph->bitmap;
- decoder->metrics = metrics;
-
- decoder->metrics_loaded = 0;
- decoder->bitmap_allocated = 0;
-
- decoder->ebdt_start = face->ebdt_start;
- decoder->ebdt_size = face->ebdt_size;
-
- decoder->eblc_base = face->sbit_table;
- decoder->eblc_limit = face->sbit_table + face->sbit_table_size;
-
- /* now find the strike corresponding to the index */
- {
- FT_Byte* p;
-
-
- if ( 8 + 48 * strike_index + 3 * 4 + 34 + 1 > face->sbit_table_size )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- p = decoder->eblc_base + 8 + 48 * strike_index;
-
- decoder->strike_index_array = FT_NEXT_ULONG( p );
- p += 4;
- decoder->strike_index_count = FT_NEXT_ULONG( p );
- p += 34;
- decoder->bit_depth = *p;
-
- /* decoder->strike_index_array + */
- /* 8 * decoder->strike_index_count > face->sbit_table_size ? */
- if ( decoder->strike_index_array > face->sbit_table_size ||
- decoder->strike_index_count >
- ( face->sbit_table_size - decoder->strike_index_array ) / 8 )
- error = FT_THROW( Invalid_File_Format );
- }
-
- Exit:
- return error;
- }
-
-
- static void
- tt_sbit_decoder_done( TT_SBitDecoder decoder )
- {
- FT_UNUSED( decoder );
- }
-
-
- static FT_Error
- tt_sbit_decoder_alloc_bitmap( TT_SBitDecoder decoder,
- FT_Bool metrics_only )
- {
- FT_Error error = FT_Err_Ok;
- FT_UInt width, height;
- FT_Bitmap* map = decoder->bitmap;
- FT_ULong size;
-
-
- if ( !decoder->metrics_loaded )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- width = decoder->metrics->width;
- height = decoder->metrics->height;
-
- map->width = width;
- map->rows = height;
-
- switch ( decoder->bit_depth )
- {
- case 1:
- map->pixel_mode = FT_PIXEL_MODE_MONO;
- map->pitch = (int)( ( map->width + 7 ) >> 3 );
- map->num_grays = 2;
- break;
-
- case 2:
- map->pixel_mode = FT_PIXEL_MODE_GRAY2;
- map->pitch = (int)( ( map->width + 3 ) >> 2 );
- map->num_grays = 4;
- break;
-
- case 4:
- map->pixel_mode = FT_PIXEL_MODE_GRAY4;
- map->pitch = (int)( ( map->width + 1 ) >> 1 );
- map->num_grays = 16;
- break;
-
- case 8:
- map->pixel_mode = FT_PIXEL_MODE_GRAY;
- map->pitch = (int)( map->width );
- map->num_grays = 256;
- break;
-
- case 32:
- map->pixel_mode = FT_PIXEL_MODE_BGRA;
- map->pitch = (int)( map->width * 4 );
- map->num_grays = 256;
- break;
-
- default:
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- size = map->rows * (FT_ULong)map->pitch;
-
- /* check that there is no empty image */
- if ( size == 0 )
- goto Exit; /* exit successfully! */
-
- if ( metrics_only )
- goto Exit; /* only metrics are requested */
-
- error = ft_glyphslot_alloc_bitmap( decoder->face->root.glyph, size );
- if ( error )
- goto Exit;
-
- decoder->bitmap_allocated = 1;
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- tt_sbit_decoder_load_metrics( TT_SBitDecoder decoder,
- FT_Byte* *pp,
- FT_Byte* limit,
- FT_Bool big )
- {
- FT_Byte* p = *pp;
- TT_SBit_Metrics metrics = decoder->metrics;
-
-
- if ( p + 5 > limit )
- goto Fail;
-
- metrics->height = p[0];
- metrics->width = p[1];
- metrics->horiBearingX = (FT_Char)p[2];
- metrics->horiBearingY = (FT_Char)p[3];
- metrics->horiAdvance = p[4];
-
- p += 5;
- if ( big )
- {
- if ( p + 3 > limit )
- goto Fail;
-
- metrics->vertBearingX = (FT_Char)p[0];
- metrics->vertBearingY = (FT_Char)p[1];
- metrics->vertAdvance = p[2];
-
- p += 3;
- }
- else
- {
- /* avoid uninitialized data in case there is no vertical info -- */
- metrics->vertBearingX = 0;
- metrics->vertBearingY = 0;
- metrics->vertAdvance = 0;
- }
-
- decoder->metrics_loaded = 1;
- *pp = p;
- return FT_Err_Ok;
-
- Fail:
- FT_TRACE1(( "tt_sbit_decoder_load_metrics: broken table\n" ));
- return FT_THROW( Invalid_Argument );
- }
-
-
- /* forward declaration */
- static FT_Error
- tt_sbit_decoder_load_image( TT_SBitDecoder decoder,
- FT_UInt glyph_index,
- FT_Int x_pos,
- FT_Int y_pos,
- FT_UInt recurse_count,
- FT_Bool metrics_only );
-
- typedef FT_Error (*TT_SBitDecoder_LoadFunc)(
- TT_SBitDecoder decoder,
- FT_Byte* p,
- FT_Byte* plimit,
- FT_Int x_pos,
- FT_Int y_pos,
- FT_UInt recurse_count );
-
-
- static FT_Error
- tt_sbit_decoder_load_byte_aligned( TT_SBitDecoder decoder,
- FT_Byte* p,
- FT_Byte* limit,
- FT_Int x_pos,
- FT_Int y_pos,
- FT_UInt recurse_count )
- {
- FT_Error error = FT_Err_Ok;
- FT_Byte* line;
- FT_Int pitch, width, height, line_bits, h;
- FT_UInt bit_height, bit_width;
- FT_Bitmap* bitmap;
-
- FT_UNUSED( recurse_count );
-
-
- /* check that we can write the glyph into the bitmap */
- bitmap = decoder->bitmap;
- bit_width = bitmap->width;
- bit_height = bitmap->rows;
- pitch = bitmap->pitch;
- line = bitmap->buffer;
-
- width = decoder->metrics->width;
- height = decoder->metrics->height;
-
- line_bits = width * decoder->bit_depth;
-
- if ( x_pos < 0 || (FT_UInt)( x_pos + width ) > bit_width ||
- y_pos < 0 || (FT_UInt)( y_pos + height ) > bit_height )
- {
- FT_TRACE1(( "tt_sbit_decoder_load_byte_aligned:"
- " invalid bitmap dimensions\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- if ( p + ( ( line_bits + 7 ) >> 3 ) * height > limit )
- {
- FT_TRACE1(( "tt_sbit_decoder_load_byte_aligned: broken bitmap\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* now do the blit */
- line += y_pos * pitch + ( x_pos >> 3 );
- x_pos &= 7;
-
- if ( x_pos == 0 ) /* the easy one */
- {
- for ( h = height; h > 0; h--, line += pitch )
- {
- FT_Byte* pwrite = line;
- FT_Int w;
-
-
- for ( w = line_bits; w >= 8; w -= 8 )
- {
- pwrite[0] = (FT_Byte)( pwrite[0] | *p++ );
- pwrite += 1;
- }
-
- if ( w > 0 )
- pwrite[0] = (FT_Byte)( pwrite[0] | ( *p++ & ( 0xFF00U >> w ) ) );
- }
- }
- else /* x_pos > 0 */
- {
- for ( h = height; h > 0; h--, line += pitch )
- {
- FT_Byte* pwrite = line;
- FT_Int w;
- FT_UInt wval = 0;
-
-
- for ( w = line_bits; w >= 8; w -= 8 )
- {
- wval = (FT_UInt)( wval | *p++ );
- pwrite[0] = (FT_Byte)( pwrite[0] | ( wval >> x_pos ) );
- pwrite += 1;
- wval <<= 8;
- }
-
- if ( w > 0 )
- wval = (FT_UInt)( wval | ( *p++ & ( 0xFF00U >> w ) ) );
-
- /* all bits read and there are `x_pos + w' bits to be written */
-
- pwrite[0] = (FT_Byte)( pwrite[0] | ( wval >> x_pos ) );
-
- if ( x_pos + w > 8 )
- {
- pwrite++;
- wval <<= 8;
- pwrite[0] = (FT_Byte)( pwrite[0] | ( wval >> x_pos ) );
- }
- }
- }
-
- Exit:
- if ( !error )
- FT_TRACE3(( "tt_sbit_decoder_load_byte_aligned: loaded\n" ));
- return error;
- }
-
-
- /*
- * Load a bit-aligned bitmap (with pointer `p') into a line-aligned bitmap
- * (with pointer `pwrite'). In the example below, the width is 3 pixel,
- * and `x_pos' is 1 pixel.
- *
- * p p+1
- * | | |
- * | 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 |...
- * | | |
- * +-------+ +-------+ +-------+ ...
- * . . .
- * . . .
- * v . .
- * +-------+ . .
- * | | .
- * | 7 6 5 4 3 2 1 0 | .
- * | | .
- * pwrite . .
- * . .
- * v .
- * +-------+ .
- * | |
- * | 7 6 5 4 3 2 1 0 |
- * | |
- * pwrite+1 .
- * .
- * v
- * +-------+
- * | |
- * | 7 6 5 4 3 2 1 0 |
- * | |
- * pwrite+2
- *
- */
-
- static FT_Error
- tt_sbit_decoder_load_bit_aligned( TT_SBitDecoder decoder,
- FT_Byte* p,
- FT_Byte* limit,
- FT_Int x_pos,
- FT_Int y_pos,
- FT_UInt recurse_count )
- {
- FT_Error error = FT_Err_Ok;
- FT_Byte* line;
- FT_Int pitch, width, height, line_bits, h, nbits;
- FT_UInt bit_height, bit_width;
- FT_Bitmap* bitmap;
- FT_UShort rval;
-
- FT_UNUSED( recurse_count );
-
-
- /* check that we can write the glyph into the bitmap */
- bitmap = decoder->bitmap;
- bit_width = bitmap->width;
- bit_height = bitmap->rows;
- pitch = bitmap->pitch;
- line = bitmap->buffer;
-
- width = decoder->metrics->width;
- height = decoder->metrics->height;
-
- line_bits = width * decoder->bit_depth;
-
- if ( x_pos < 0 || (FT_UInt)( x_pos + width ) > bit_width ||
- y_pos < 0 || (FT_UInt)( y_pos + height ) > bit_height )
- {
- FT_TRACE1(( "tt_sbit_decoder_load_bit_aligned:"
- " invalid bitmap dimensions\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- if ( p + ( ( line_bits * height + 7 ) >> 3 ) > limit )
- {
- FT_TRACE1(( "tt_sbit_decoder_load_bit_aligned: broken bitmap\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- if ( !line_bits || !height )
- {
- /* nothing to do */
- goto Exit;
- }
-
- /* now do the blit */
-
- /* adjust `line' to point to the first byte of the bitmap */
- line += y_pos * pitch + ( x_pos >> 3 );
- x_pos &= 7;
-
- /* the higher byte of `rval' is used as a buffer */
- rval = 0;
- nbits = 0;
-
- for ( h = height; h > 0; h--, line += pitch )
- {
- FT_Byte* pwrite = line;
- FT_Int w = line_bits;
-
-
- /* handle initial byte (in target bitmap) specially if necessary */
- if ( x_pos )
- {
- w = ( line_bits < 8 - x_pos ) ? line_bits : 8 - x_pos;
-
- if ( h == height )
- {
- rval = *p++;
- nbits = x_pos;
- }
- else if ( nbits < w )
- {
- if ( p < limit )
- rval |= *p++;
- nbits += 8 - w;
- }
- else
- {
- rval >>= 8;
- nbits -= w;
- }
-
- *pwrite++ |= ( ( rval >> nbits ) & 0xFF ) &
- ( ~( 0xFFU << w ) << ( 8 - w - x_pos ) );
- rval <<= 8;
-
- w = line_bits - w;
- }
-
- /* handle medial bytes */
- for ( ; w >= 8; w -= 8 )
- {
- rval |= *p++;
- *pwrite++ |= ( rval >> nbits ) & 0xFF;
-
- rval <<= 8;
- }
-
- /* handle final byte if necessary */
- if ( w > 0 )
- {
- if ( nbits < w )
- {
- if ( p < limit )
- rval |= *p++;
- *pwrite |= ( ( rval >> nbits ) & 0xFF ) & ( 0xFF00U >> w );
- nbits += 8 - w;
-
- rval <<= 8;
- }
- else
- {
- *pwrite |= ( ( rval >> nbits ) & 0xFF ) & ( 0xFF00U >> w );
- nbits -= w;
- }
- }
- }
-
- Exit:
- if ( !error )
- FT_TRACE3(( "tt_sbit_decoder_load_bit_aligned: loaded\n" ));
- return error;
- }
-
-
- static FT_Error
- tt_sbit_decoder_load_compound( TT_SBitDecoder decoder,
- FT_Byte* p,
- FT_Byte* limit,
- FT_Int x_pos,
- FT_Int y_pos,
- FT_UInt recurse_count )
- {
- FT_Error error = FT_Err_Ok;
- FT_UInt num_components, nn;
-
- FT_Char horiBearingX = (FT_Char)decoder->metrics->horiBearingX;
- FT_Char horiBearingY = (FT_Char)decoder->metrics->horiBearingY;
- FT_Byte horiAdvance = (FT_Byte)decoder->metrics->horiAdvance;
- FT_Char vertBearingX = (FT_Char)decoder->metrics->vertBearingX;
- FT_Char vertBearingY = (FT_Char)decoder->metrics->vertBearingY;
- FT_Byte vertAdvance = (FT_Byte)decoder->metrics->vertAdvance;
-
-
- if ( p + 2 > limit )
- goto Fail;
-
- num_components = FT_NEXT_USHORT( p );
- if ( p + 4 * num_components > limit )
- {
- FT_TRACE1(( "tt_sbit_decoder_load_compound: broken table\n" ));
- goto Fail;
- }
-
- FT_TRACE3(( "tt_sbit_decoder_load_compound: loading %d components\n",
- num_components ));
-
- for ( nn = 0; nn < num_components; nn++ )
- {
- FT_UInt gindex = FT_NEXT_USHORT( p );
- FT_Byte dx = FT_NEXT_BYTE( p );
- FT_Byte dy = FT_NEXT_BYTE( p );
-
-
- /* NB: a recursive call */
- error = tt_sbit_decoder_load_image( decoder,
- gindex,
- x_pos + dx,
- y_pos + dy,
- recurse_count + 1,
- /* request full bitmap image */
- FALSE );
- if ( error )
- break;
- }
-
- FT_TRACE3(( "tt_sbit_decoder_load_compound: done\n" ));
-
- decoder->metrics->horiBearingX = horiBearingX;
- decoder->metrics->horiBearingY = horiBearingY;
- decoder->metrics->horiAdvance = horiAdvance;
- decoder->metrics->vertBearingX = vertBearingX;
- decoder->metrics->vertBearingY = vertBearingY;
- decoder->metrics->vertAdvance = vertAdvance;
- decoder->metrics->width = (FT_Byte)decoder->bitmap->width;
- decoder->metrics->height = (FT_Byte)decoder->bitmap->rows;
-
- Exit:
- return error;
-
- Fail:
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
-
-#ifdef FT_CONFIG_OPTION_USE_PNG
-
- static FT_Error
- tt_sbit_decoder_load_png( TT_SBitDecoder decoder,
- FT_Byte* p,
- FT_Byte* limit,
- FT_Int x_pos,
- FT_Int y_pos,
- FT_UInt recurse_count )
- {
- FT_Error error = FT_Err_Ok;
- FT_ULong png_len;
-
- FT_UNUSED( recurse_count );
-
-
- if ( limit - p < 4 )
- {
- FT_TRACE1(( "tt_sbit_decoder_load_png: broken bitmap\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- png_len = FT_NEXT_ULONG( p );
- if ( (FT_ULong)( limit - p ) < png_len )
- {
- FT_TRACE1(( "tt_sbit_decoder_load_png: broken bitmap\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- error = Load_SBit_Png( decoder->face->root.glyph,
- x_pos,
- y_pos,
- decoder->bit_depth,
- decoder->metrics,
- decoder->stream->memory,
- p,
- png_len,
- FALSE,
- FALSE );
-
- Exit:
- if ( !error )
- FT_TRACE3(( "tt_sbit_decoder_load_png: loaded\n" ));
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_USE_PNG */
-
-
- static FT_Error
- tt_sbit_decoder_load_bitmap( TT_SBitDecoder decoder,
- FT_UInt glyph_format,
- FT_ULong glyph_start,
- FT_ULong glyph_size,
- FT_Int x_pos,
- FT_Int y_pos,
- FT_UInt recurse_count,
- FT_Bool metrics_only )
- {
- FT_Error error;
- FT_Stream stream = decoder->stream;
- FT_Byte* p;
- FT_Byte* p_limit;
- FT_Byte* data;
-
-
- /* seek into the EBDT table now */
- if ( !glyph_size ||
- glyph_start + glyph_size > decoder->ebdt_size )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- if ( FT_STREAM_SEEK( decoder->ebdt_start + glyph_start ) ||
- FT_FRAME_EXTRACT( glyph_size, data ) )
- goto Exit;
-
- p = data;
- p_limit = p + glyph_size;
-
- /* read the data, depending on the glyph format */
- switch ( glyph_format )
- {
- case 1:
- case 2:
- case 8:
- case 17:
- error = tt_sbit_decoder_load_metrics( decoder, &p, p_limit, 0 );
- break;
-
- case 6:
- case 7:
- case 9:
- case 18:
- error = tt_sbit_decoder_load_metrics( decoder, &p, p_limit, 1 );
- break;
-
- default:
- error = FT_Err_Ok;
- }
-
- if ( error )
- goto Fail;
-
- {
- TT_SBitDecoder_LoadFunc loader;
-
-
- switch ( glyph_format )
- {
- case 1:
- case 6:
- loader = tt_sbit_decoder_load_byte_aligned;
- break;
-
- case 2:
- case 7:
- {
- /* Don't trust `glyph_format'. For example, Apple's main Korean */
- /* system font, `AppleMyungJo.ttf' (version 7.0d2e6), uses glyph */
- /* format 7, but the data is format 6. We check whether we have */
- /* an excessive number of bytes in the image: If it is equal to */
- /* the value for a byte-aligned glyph, use the other loading */
- /* routine. */
- /* */
- /* Note that for some (width,height) combinations, where the */
- /* width is not a multiple of 8, the sizes for bit- and */
- /* byte-aligned data are equal, for example (7,7) or (15,6). We */
- /* then prefer what `glyph_format' specifies. */
-
- FT_UInt width = decoder->metrics->width;
- FT_UInt height = decoder->metrics->height;
-
- FT_UInt bit_size = ( width * height + 7 ) >> 3;
- FT_UInt byte_size = height * ( ( width + 7 ) >> 3 );
-
-
- if ( bit_size < byte_size &&
- byte_size == (FT_UInt)( p_limit - p ) )
- loader = tt_sbit_decoder_load_byte_aligned;
- else
- loader = tt_sbit_decoder_load_bit_aligned;
- }
- break;
-
- case 5:
- loader = tt_sbit_decoder_load_bit_aligned;
- break;
-
- case 8:
- if ( p + 1 > p_limit )
- goto Fail;
-
- p += 1; /* skip padding */
- /* fall-through */
-
- case 9:
- loader = tt_sbit_decoder_load_compound;
- break;
-
- case 17: /* small metrics, PNG image data */
- case 18: /* big metrics, PNG image data */
- case 19: /* metrics in EBLC, PNG image data */
-#ifdef FT_CONFIG_OPTION_USE_PNG
- loader = tt_sbit_decoder_load_png;
- break;
-#else
- error = FT_THROW( Unimplemented_Feature );
- goto Fail;
-#endif /* FT_CONFIG_OPTION_USE_PNG */
-
- default:
- error = FT_THROW( Invalid_Table );
- goto Fail;
- }
-
- if ( !decoder->bitmap_allocated )
- {
- error = tt_sbit_decoder_alloc_bitmap( decoder, metrics_only );
-
- if ( error )
- goto Fail;
- }
-
- if ( metrics_only )
- goto Fail; /* this is not an error */
-
- error = loader( decoder, p, p_limit, x_pos, y_pos, recurse_count );
- }
-
- Fail:
- FT_FRAME_RELEASE( data );
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- tt_sbit_decoder_load_image( TT_SBitDecoder decoder,
- FT_UInt glyph_index,
- FT_Int x_pos,
- FT_Int y_pos,
- FT_UInt recurse_count,
- FT_Bool metrics_only )
- {
- FT_Byte* p = decoder->eblc_base + decoder->strike_index_array;
- FT_Byte* p_limit = decoder->eblc_limit;
- FT_ULong num_ranges = decoder->strike_index_count;
- FT_UInt start, end, index_format, image_format;
- FT_ULong image_start = 0, image_end = 0, image_offset;
-
-
- /* arbitrary recursion limit */
- if ( recurse_count > 100 )
- {
- FT_TRACE4(( "tt_sbit_decoder_load_image:"
- " recursion depth exceeded\n" ));
- goto Failure;
- }
-
-
- /* First, we find the correct strike range that applies to this */
- /* glyph index. */
- for ( ; num_ranges > 0; num_ranges-- )
- {
- start = FT_NEXT_USHORT( p );
- end = FT_NEXT_USHORT( p );
-
- if ( glyph_index >= start && glyph_index <= end )
- goto FoundRange;
-
- p += 4; /* ignore index offset */
- }
- goto NoBitmap;
-
- FoundRange:
- image_offset = FT_NEXT_ULONG( p );
-
- /* overflow check */
- p = decoder->eblc_base + decoder->strike_index_array;
- if ( image_offset > (FT_ULong)( p_limit - p ) )
- goto Failure;
-
- p += image_offset;
- if ( p + 8 > p_limit )
- goto NoBitmap;
-
- /* now find the glyph's location and extend within the ebdt table */
- index_format = FT_NEXT_USHORT( p );
- image_format = FT_NEXT_USHORT( p );
- image_offset = FT_NEXT_ULONG ( p );
-
- switch ( index_format )
- {
- case 1: /* 4-byte offsets relative to `image_offset' */
- p += 4 * ( glyph_index - start );
- if ( p + 8 > p_limit )
- goto NoBitmap;
-
- image_start = FT_NEXT_ULONG( p );
- image_end = FT_NEXT_ULONG( p );
-
- if ( image_start == image_end ) /* missing glyph */
- goto NoBitmap;
- break;
-
- case 2: /* big metrics, constant image size */
- {
- FT_ULong image_size;
-
-
- if ( p + 12 > p_limit )
- goto NoBitmap;
-
- image_size = FT_NEXT_ULONG( p );
-
- if ( tt_sbit_decoder_load_metrics( decoder, &p, p_limit, 1 ) )
- goto NoBitmap;
-
- image_start = image_size * ( glyph_index - start );
- image_end = image_start + image_size;
- }
- break;
-
- case 3: /* 2-byte offsets relative to 'image_offset' */
- p += 2 * ( glyph_index - start );
- if ( p + 4 > p_limit )
- goto NoBitmap;
-
- image_start = FT_NEXT_USHORT( p );
- image_end = FT_NEXT_USHORT( p );
-
- if ( image_start == image_end ) /* missing glyph */
- goto NoBitmap;
- break;
-
- case 4: /* sparse glyph array with (glyph,offset) pairs */
- {
- FT_ULong mm, num_glyphs;
-
-
- if ( p + 4 > p_limit )
- goto NoBitmap;
-
- num_glyphs = FT_NEXT_ULONG( p );
-
- /* overflow check for p + ( num_glyphs + 1 ) * 4 */
- if ( p + 4 > p_limit ||
- num_glyphs > (FT_ULong)( ( ( p_limit - p ) >> 2 ) - 1 ) )
- goto NoBitmap;
-
- for ( mm = 0; mm < num_glyphs; mm++ )
- {
- FT_UInt gindex = FT_NEXT_USHORT( p );
-
-
- if ( gindex == glyph_index )
- {
- image_start = FT_NEXT_USHORT( p );
- p += 2;
- image_end = FT_PEEK_USHORT( p );
- break;
- }
- p += 2;
- }
-
- if ( mm >= num_glyphs )
- goto NoBitmap;
- }
- break;
-
- case 5: /* constant metrics with sparse glyph codes */
- case 19:
- {
- FT_ULong image_size, mm, num_glyphs;
-
-
- if ( p + 16 > p_limit )
- goto NoBitmap;
-
- image_size = FT_NEXT_ULONG( p );
-
- if ( tt_sbit_decoder_load_metrics( decoder, &p, p_limit, 1 ) )
- goto NoBitmap;
-
- num_glyphs = FT_NEXT_ULONG( p );
-
- /* overflow check for p + 2 * num_glyphs */
- if ( num_glyphs > (FT_ULong)( ( p_limit - p ) >> 1 ) )
- goto NoBitmap;
-
- for ( mm = 0; mm < num_glyphs; mm++ )
- {
- FT_UInt gindex = FT_NEXT_USHORT( p );
-
-
- if ( gindex == glyph_index )
- break;
- }
-
- if ( mm >= num_glyphs )
- goto NoBitmap;
-
- image_start = image_size * mm;
- image_end = image_start + image_size;
- }
- break;
-
- default:
- goto NoBitmap;
- }
-
- if ( image_start > image_end )
- goto NoBitmap;
-
- image_end -= image_start;
- image_start = image_offset + image_start;
-
- FT_TRACE3(( "tt_sbit_decoder_load_image:"
- " found sbit (format %d) for glyph index %d\n",
- image_format, glyph_index ));
-
- return tt_sbit_decoder_load_bitmap( decoder,
- image_format,
- image_start,
- image_end,
- x_pos,
- y_pos,
- recurse_count,
- metrics_only );
-
- Failure:
- return FT_THROW( Invalid_Table );
-
- NoBitmap:
- FT_TRACE4(( "tt_sbit_decoder_load_image:"
- " no sbit found for glyph index %d\n", glyph_index ));
-
- return FT_THROW( Invalid_Argument );
- }
-
-
- static FT_Error
- tt_face_load_sbix_image( TT_Face face,
- FT_ULong strike_index,
- FT_UInt glyph_index,
- FT_Stream stream,
- FT_Bitmap *map,
- TT_SBit_MetricsRec *metrics,
- FT_Bool metrics_only )
- {
- FT_UInt strike_offset, glyph_start, glyph_end;
- FT_Int originOffsetX, originOffsetY;
- FT_Tag graphicType;
- FT_Int recurse_depth = 0;
-
- FT_Error error;
- FT_Byte* p;
-
- FT_UNUSED( map );
-#ifndef FT_CONFIG_OPTION_USE_PNG
- FT_UNUSED( metrics_only );
-#endif
-
-
- strike_index = face->sbit_strike_map[strike_index];
-
- metrics->width = 0;
- metrics->height = 0;
-
- p = face->sbit_table + 8 + 4 * strike_index;
- strike_offset = FT_NEXT_ULONG( p );
-
- retry:
- if ( glyph_index > (FT_UInt)face->root.num_glyphs )
- return FT_THROW( Invalid_Argument );
-
- if ( strike_offset >= face->ebdt_size ||
- face->ebdt_size - strike_offset < 4 + glyph_index * 4 + 8 )
- return FT_THROW( Invalid_File_Format );
-
- if ( FT_STREAM_SEEK( face->ebdt_start +
- strike_offset + 4 +
- glyph_index * 4 ) ||
- FT_FRAME_ENTER( 8 ) )
- return error;
-
- glyph_start = FT_GET_ULONG();
- glyph_end = FT_GET_ULONG();
-
- FT_FRAME_EXIT();
-
- if ( glyph_start == glyph_end )
- return FT_THROW( Invalid_Argument );
- if ( glyph_start > glyph_end ||
- glyph_end - glyph_start < 8 ||
- face->ebdt_size - strike_offset < glyph_end )
- return FT_THROW( Invalid_File_Format );
-
- if ( FT_STREAM_SEEK( face->ebdt_start + strike_offset + glyph_start ) ||
- FT_FRAME_ENTER( glyph_end - glyph_start ) )
- return error;
-
- originOffsetX = FT_GET_SHORT();
- originOffsetY = FT_GET_SHORT();
-
- graphicType = FT_GET_TAG4();
-
- switch ( graphicType )
- {
- case FT_MAKE_TAG( 'd', 'u', 'p', 'e' ):
- if ( recurse_depth < 4 )
- {
- glyph_index = FT_GET_USHORT();
- FT_FRAME_EXIT();
- recurse_depth++;
- goto retry;
- }
- error = FT_THROW( Invalid_File_Format );
- break;
-
- case FT_MAKE_TAG( 'p', 'n', 'g', ' ' ):
-#ifdef FT_CONFIG_OPTION_USE_PNG
- error = Load_SBit_Png( face->root.glyph,
- 0,
- 0,
- 32,
- metrics,
- stream->memory,
- stream->cursor,
- glyph_end - glyph_start - 8,
- TRUE,
- metrics_only );
-#else
- error = FT_THROW( Unimplemented_Feature );
-#endif
- break;
-
- case FT_MAKE_TAG( 'j', 'p', 'g', ' ' ):
- case FT_MAKE_TAG( 't', 'i', 'f', 'f' ):
- case FT_MAKE_TAG( 'r', 'g', 'b', 'l' ): /* used on iOS 7.1 */
- error = FT_THROW( Unknown_File_Format );
- break;
-
- default:
- error = FT_THROW( Unimplemented_Feature );
- break;
- }
-
- FT_FRAME_EXIT();
-
- if ( !error )
- {
- FT_Short abearing;
- FT_UShort aadvance;
-
-
- tt_face_get_metrics( face, FALSE, glyph_index, &abearing, &aadvance );
-
- metrics->horiBearingX = (FT_Short)originOffsetX;
- metrics->horiBearingY = (FT_Short)( -originOffsetY + metrics->height );
- metrics->horiAdvance = (FT_UShort)( aadvance *
- face->root.size->metrics.x_ppem /
- face->header.Units_Per_EM );
- }
-
- return error;
- }
-
- FT_LOCAL( FT_Error )
- tt_face_load_sbit_image( TT_Face face,
- FT_ULong strike_index,
- FT_UInt glyph_index,
- FT_UInt load_flags,
- FT_Stream stream,
- FT_Bitmap *map,
- TT_SBit_MetricsRec *metrics )
- {
- FT_Error error = FT_Err_Ok;
-
-
- switch ( (FT_UInt)face->sbit_table_type )
- {
- case TT_SBIT_TABLE_TYPE_EBLC:
- case TT_SBIT_TABLE_TYPE_CBLC:
- {
- TT_SBitDecoderRec decoder[1];
-
-
- error = tt_sbit_decoder_init( decoder, face, strike_index, metrics );
- if ( !error )
- {
- error = tt_sbit_decoder_load_image(
- decoder,
- glyph_index,
- 0,
- 0,
- 0,
- ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY ) != 0 );
- tt_sbit_decoder_done( decoder );
- }
- }
- break;
-
- case TT_SBIT_TABLE_TYPE_SBIX:
- error = tt_face_load_sbix_image(
- face,
- strike_index,
- glyph_index,
- stream,
- map,
- metrics,
- ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY ) != 0 );
- break;
-
- default:
- error = FT_THROW( Unknown_File_Format );
- break;
- }
-
- /* Flatten color bitmaps if color was not requested. */
- if ( !error &&
- !( load_flags & FT_LOAD_COLOR ) &&
- !( load_flags & FT_LOAD_BITMAP_METRICS_ONLY ) &&
- map->pixel_mode == FT_PIXEL_MODE_BGRA )
- {
- FT_Bitmap new_map;
- FT_Library library = face->root.glyph->library;
-
-
- FT_Bitmap_Init( &new_map );
-
- /* Convert to 8bit grayscale. */
- error = FT_Bitmap_Convert( library, map, &new_map, 1 );
- if ( error )
- FT_Bitmap_Done( library, &new_map );
- else
- {
- map->pixel_mode = new_map.pixel_mode;
- map->pitch = new_map.pitch;
- map->num_grays = new_map.num_grays;
-
- ft_glyphslot_set_bitmap( face->root.glyph, new_map.buffer );
- face->root.glyph->internal->flags |= FT_GLYPH_OWN_BITMAP;
- }
- }
-
- return error;
- }
-
-#else /* !TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
-
- /* ANSI C doesn't like empty source files */
- typedef int _tt_sbit_dummy;
-
-#endif /* !TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
-
-
-/* END */
diff --git a/src/sfnt/ttsbit.h b/src/sfnt/ttsbit.h
deleted file mode 100644
index e859ddda4..000000000
--- a/src/sfnt/ttsbit.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttsbit.h */
-/* */
-/* TrueType and OpenType embedded bitmap support (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTSBIT_H_
-#define TTSBIT_H_
-
-
-#include <ft2build.h>
-#include "ttload.h"
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_sbit( TT_Face face,
- FT_Stream stream );
-
- FT_LOCAL( void )
- tt_face_free_sbit( TT_Face face );
-
-
- FT_LOCAL( FT_Error )
- tt_face_set_sbit_strike( TT_Face face,
- FT_Size_Request req,
- FT_ULong* astrike_index );
-
- FT_LOCAL( FT_Error )
- tt_face_load_strike_metrics( TT_Face face,
- FT_ULong strike_index,
- FT_Size_Metrics* metrics );
-
- FT_LOCAL( FT_Error )
- tt_face_load_sbit_image( TT_Face face,
- FT_ULong strike_index,
- FT_UInt glyph_index,
- FT_UInt load_flags,
- FT_Stream stream,
- FT_Bitmap *map,
- TT_SBit_MetricsRec *metrics );
-
-
-FT_END_HEADER
-
-#endif /* TTSBIT_H_ */
-
-
-/* END */
diff --git a/src/smooth/Jamfile b/src/smooth/Jamfile
deleted file mode 100644
index 4cd0769ee..000000000
--- a/src/smooth/Jamfile
+++ /dev/null
@@ -1,32 +0,0 @@
-# FreeType 2 src/smooth Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) smooth ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = ftgrays
- ftsmooth
- ftspic
- ;
- }
- else
- {
- _sources = smooth ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/smooth Jamfile
diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c
deleted file mode 100644
index df645e66c..000000000
--- a/src/smooth/ftgrays.c
+++ /dev/null
@@ -1,2051 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgrays.c */
-/* */
-/* A new `perfect' anti-aliasing renderer (body). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* This file can be compiled without the rest of the FreeType engine, by */
- /* defining the STANDALONE_ macro when compiling it. You also need to */
- /* put the files `ftgrays.h' and `ftimage.h' into the current */
- /* compilation directory. Typically, you could do something like */
- /* */
- /* - copy `src/smooth/ftgrays.c' (this file) to your current directory */
- /* */
- /* - copy `include/freetype/ftimage.h' and `src/smooth/ftgrays.h' to the */
- /* same directory */
- /* */
- /* - compile `ftgrays' with the STANDALONE_ macro defined, as in */
- /* */
- /* cc -c -DSTANDALONE_ ftgrays.c */
- /* */
- /* The renderer can be initialized with a call to */
- /* `ft_gray_raster.raster_new'; an anti-aliased bitmap can be generated */
- /* with a call to `ft_gray_raster.raster_render'. */
- /* */
- /* See the comments and documentation in the file `ftimage.h' for more */
- /* details on how the raster works. */
- /* */
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* This is a new anti-aliasing scan-converter for FreeType 2. The */
- /* algorithm used here is _very_ different from the one in the standard */
- /* `ftraster' module. Actually, `ftgrays' computes the _exact_ */
- /* coverage of the outline on each pixel cell. */
- /* */
- /* It is based on ideas that I initially found in Raph Levien's */
- /* excellent LibArt graphics library (see http://www.levien.com/libart */
- /* for more information, though the web pages do not tell anything */
- /* about the renderer; you'll have to dive into the source code to */
- /* understand how it works). */
- /* */
- /* Note, however, that this is a _very_ different implementation */
- /* compared to Raph's. Coverage information is stored in a very */
- /* different way, and I don't use sorted vector paths. Also, it doesn't */
- /* use floating point values. */
- /* */
- /* This renderer has the following advantages: */
- /* */
- /* - It doesn't need an intermediate bitmap. Instead, one can supply a */
- /* callback function that will be called by the renderer to draw gray */
- /* spans on any target surface. You can thus do direct composition on */
- /* any kind of bitmap, provided that you give the renderer the right */
- /* callback. */
- /* */
- /* - A perfect anti-aliaser, i.e., it computes the _exact_ coverage on */
- /* each pixel cell. */
- /* */
- /* - It performs a single pass on the outline (the `standard' FT2 */
- /* renderer makes two passes). */
- /* */
- /* - It can easily be modified to render to _any_ number of gray levels */
- /* cheaply. */
- /* */
- /* - For small (< 20) pixel sizes, it is faster than the standard */
- /* renderer. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_smooth
-
-
-#ifdef STANDALONE_
-
-
- /* The size in bytes of the render pool used by the scan-line converter */
- /* to do all of its work. */
-#define FT_RENDER_POOL_SIZE 16384L
-
-
- /* Auxiliary macros for token concatenation. */
-#define FT_ERR_XCAT( x, y ) x ## y
-#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y )
-
-#define FT_BEGIN_STMNT do {
-#define FT_END_STMNT } while ( 0 )
-
-#define FT_MIN( a, b ) ( (a) < (b) ? (a) : (b) )
-#define FT_MAX( a, b ) ( (a) > (b) ? (a) : (b) )
-#define FT_ABS( a ) ( (a) < 0 ? -(a) : (a) )
-
-
- /*
- * Approximate sqrt(x*x+y*y) using the `alpha max plus beta min'
- * algorithm. We use alpha = 1, beta = 3/8, giving us results with a
- * largest error less than 7% compared to the exact value.
- */
-#define FT_HYPOT( x, y ) \
- ( x = FT_ABS( x ), \
- y = FT_ABS( y ), \
- x > y ? x + ( 3 * y >> 3 ) \
- : y + ( 3 * x >> 3 ) )
-
-
- /* define this to dump debugging information */
-/* #define FT_DEBUG_LEVEL_TRACE */
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-#include <stdio.h>
-#include <stdarg.h>
-#endif
-
-#include <stddef.h>
-#include <string.h>
-#include <setjmp.h>
-#include <limits.h>
-#define FT_CHAR_BIT CHAR_BIT
-#define FT_UINT_MAX UINT_MAX
-#define FT_INT_MAX INT_MAX
-#define FT_ULONG_MAX ULONG_MAX
-
-#define ADD_LONG( a, b ) \
- (long)( (unsigned long)(a) + (unsigned long)(b) )
-#define SUB_LONG( a, b ) \
- (long)( (unsigned long)(a) - (unsigned long)(b) )
-#define MUL_LONG( a, b ) \
- (long)( (unsigned long)(a) * (unsigned long)(b) )
-#define NEG_LONG( a ) \
- (long)( -(unsigned long)(a) )
-
-
-#define ft_memset memset
-
-#define ft_setjmp setjmp
-#define ft_longjmp longjmp
-#define ft_jmp_buf jmp_buf
-
-typedef ptrdiff_t FT_PtrDist;
-
-
-#define ErrRaster_Invalid_Mode -2
-#define ErrRaster_Invalid_Outline -1
-#define ErrRaster_Invalid_Argument -3
-#define ErrRaster_Memory_Overflow -4
-
-#define FT_BEGIN_HEADER
-#define FT_END_HEADER
-
-#include "ftimage.h"
-#include "ftgrays.h"
-
-
- /* This macro is used to indicate that a function parameter is unused. */
- /* Its purpose is simply to reduce compiler warnings. Note also that */
- /* simply defining it as `(void)x' doesn't avoid warnings with certain */
- /* ANSI compilers (e.g. LCC). */
-#define FT_UNUSED( x ) (x) = (x)
-
-
- /* we only use level 5 & 7 tracing messages; cf. ftdebug.h */
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
- void
- FT_Message( const char* fmt,
- ... )
- {
- va_list ap;
-
-
- va_start( ap, fmt );
- vfprintf( stderr, fmt, ap );
- va_end( ap );
- }
-
-
- /* empty function useful for setting a breakpoint to catch errors */
- int
- FT_Throw( int error,
- int line,
- const char* file )
- {
- FT_UNUSED( error );
- FT_UNUSED( line );
- FT_UNUSED( file );
-
- return 0;
- }
-
-
- /* we don't handle tracing levels in stand-alone mode; */
-#ifndef FT_TRACE5
-#define FT_TRACE5( varformat ) FT_Message varformat
-#endif
-#ifndef FT_TRACE7
-#define FT_TRACE7( varformat ) FT_Message varformat
-#endif
-#ifndef FT_ERROR
-#define FT_ERROR( varformat ) FT_Message varformat
-#endif
-
-#define FT_THROW( e ) \
- ( FT_Throw( FT_ERR_CAT( ErrRaster, e ), \
- __LINE__, \
- __FILE__ ) | \
- FT_ERR_CAT( ErrRaster, e ) )
-
-#else /* !FT_DEBUG_LEVEL_TRACE */
-
-#define FT_TRACE5( x ) do { } while ( 0 ) /* nothing */
-#define FT_TRACE7( x ) do { } while ( 0 ) /* nothing */
-#define FT_ERROR( x ) do { } while ( 0 ) /* nothing */
-#define FT_THROW( e ) FT_ERR_CAT( ErrRaster_, e )
-
-
-#endif /* !FT_DEBUG_LEVEL_TRACE */
-
-
-#define FT_DEFINE_OUTLINE_FUNCS( class_, \
- move_to_, line_to_, \
- conic_to_, cubic_to_, \
- shift_, delta_ ) \
- static const FT_Outline_Funcs class_ = \
- { \
- move_to_, \
- line_to_, \
- conic_to_, \
- cubic_to_, \
- shift_, \
- delta_ \
- };
-
-#define FT_DEFINE_RASTER_FUNCS( class_, glyph_format_, \
- raster_new_, raster_reset_, \
- raster_set_mode_, raster_render_, \
- raster_done_ ) \
- const FT_Raster_Funcs class_ = \
- { \
- glyph_format_, \
- raster_new_, \
- raster_reset_, \
- raster_set_mode_, \
- raster_render_, \
- raster_done_ \
- };
-
-
-#else /* !STANDALONE_ */
-
-
-#include <ft2build.h>
-#include "ftgrays.h"
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-#include FT_OUTLINE_H
-
-#include "ftsmerrs.h"
-
-#include "ftspic.h"
-
-#define Smooth_Err_Invalid_Mode Smooth_Err_Cannot_Render_Glyph
-#define Smooth_Err_Memory_Overflow Smooth_Err_Out_Of_Memory
-#define ErrRaster_Memory_Overflow Smooth_Err_Out_Of_Memory
-
-
-#endif /* !STANDALONE_ */
-
-
-#ifndef FT_MEM_SET
-#define FT_MEM_SET( d, s, c ) ft_memset( d, s, c )
-#endif
-
-#ifndef FT_MEM_ZERO
-#define FT_MEM_ZERO( dest, count ) FT_MEM_SET( dest, 0, count )
-#endif
-
-#ifndef FT_ZERO
-#define FT_ZERO( p ) FT_MEM_ZERO( p, sizeof ( *(p) ) )
-#endif
-
- /* as usual, for the speed hungry :-) */
-
-#undef RAS_ARG
-#undef RAS_ARG_
-#undef RAS_VAR
-#undef RAS_VAR_
-
-#ifndef FT_STATIC_RASTER
-
-#define RAS_ARG gray_PWorker worker
-#define RAS_ARG_ gray_PWorker worker,
-
-#define RAS_VAR worker
-#define RAS_VAR_ worker,
-
-#else /* FT_STATIC_RASTER */
-
-#define RAS_ARG void
-#define RAS_ARG_ /* empty */
-#define RAS_VAR /* empty */
-#define RAS_VAR_ /* empty */
-
-#endif /* FT_STATIC_RASTER */
-
-
- /* must be at least 6 bits! */
-#define PIXEL_BITS 8
-
-#undef FLOOR
-#undef CEILING
-#undef TRUNC
-#undef SCALED
-
-#define ONE_PIXEL ( 1 << PIXEL_BITS )
-#define TRUNC( x ) ( (TCoord)( (x) >> PIXEL_BITS ) )
-#define SUBPIXELS( x ) ( (TPos)(x) * ONE_PIXEL )
-#define FLOOR( x ) ( (x) & -ONE_PIXEL )
-#define CEILING( x ) ( ( (x) + ONE_PIXEL - 1 ) & -ONE_PIXEL )
-#define ROUND( x ) ( ( (x) + ONE_PIXEL / 2 ) & -ONE_PIXEL )
-
-#if PIXEL_BITS >= 6
-#define UPSCALE( x ) ( (x) * ( ONE_PIXEL >> 6 ) )
-#define DOWNSCALE( x ) ( (x) >> ( PIXEL_BITS - 6 ) )
-#else
-#define UPSCALE( x ) ( (x) >> ( 6 - PIXEL_BITS ) )
-#define DOWNSCALE( x ) ( (x) * ( 64 >> PIXEL_BITS ) )
-#endif
-
-
- /* Compute `dividend / divisor' and return both its quotient and */
- /* remainder, cast to a specific type. This macro also ensures that */
- /* the remainder is always positive. We use the remainder to keep */
- /* track of accumulating errors and compensate for them. */
-#define FT_DIV_MOD( type, dividend, divisor, quotient, remainder ) \
- FT_BEGIN_STMNT \
- (quotient) = (type)( (dividend) / (divisor) ); \
- (remainder) = (type)( (dividend) % (divisor) ); \
- if ( (remainder) < 0 ) \
- { \
- (quotient)--; \
- (remainder) += (type)(divisor); \
- } \
- FT_END_STMNT
-
-#ifdef __arm__
- /* Work around a bug specific to GCC which make the compiler fail to */
- /* optimize a division and modulo operation on the same parameters */
- /* into a single call to `__aeabi_idivmod'. See */
- /* */
- /* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43721 */
-#undef FT_DIV_MOD
-#define FT_DIV_MOD( type, dividend, divisor, quotient, remainder ) \
- FT_BEGIN_STMNT \
- (quotient) = (type)( (dividend) / (divisor) ); \
- (remainder) = (type)( (dividend) - (quotient) * (divisor) ); \
- if ( (remainder) < 0 ) \
- { \
- (quotient)--; \
- (remainder) += (type)(divisor); \
- } \
- FT_END_STMNT
-#endif /* __arm__ */
-
-
- /* These macros speed up repetitive divisions by replacing them */
- /* with multiplications and right shifts. */
-#define FT_UDIVPREP( c, b ) \
- long b ## _r = c ? (long)( FT_ULONG_MAX >> PIXEL_BITS ) / ( b ) \
- : 0
-#define FT_UDIV( a, b ) \
- ( ( (unsigned long)( a ) * (unsigned long)( b ## _r ) ) >> \
- ( sizeof( long ) * FT_CHAR_BIT - PIXEL_BITS ) )
-
-
- /*************************************************************************/
- /* */
- /* TYPE DEFINITIONS */
- /* */
-
- /* don't change the following types to FT_Int or FT_Pos, since we might */
- /* need to define them to "float" or "double" when experimenting with */
- /* new algorithms */
-
- typedef long TPos; /* sub-pixel coordinate */
- typedef int TCoord; /* integer scanline/pixel coordinate */
- typedef int TArea; /* cell areas, coordinate products */
-
-
- typedef struct TCell_* PCell;
-
- typedef struct TCell_
- {
- TCoord x; /* same with gray_TWorker.ex */
- TCoord cover; /* same with gray_TWorker.cover */
- TArea area;
- PCell next;
-
- } TCell;
-
- typedef struct TPixmap_
- {
- unsigned char* origin; /* pixmap origin at the bottom-left */
- int pitch; /* pitch to go down one row */
-
- } TPixmap;
-
- /* maximum number of gray cells in the buffer */
-#if FT_RENDER_POOL_SIZE > 2048
-#define FT_MAX_GRAY_POOL ( FT_RENDER_POOL_SIZE / sizeof ( TCell ) )
-#else
-#define FT_MAX_GRAY_POOL ( 2048 / sizeof ( TCell ) )
-#endif
-
-
-#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */
- /* We disable the warning `structure was padded due to */
- /* __declspec(align())' in order to compile cleanly with */
- /* the maximum level of warnings. */
-#pragma warning( push )
-#pragma warning( disable : 4324 )
-#endif /* _MSC_VER */
-
- typedef struct gray_TWorker_
- {
- ft_jmp_buf jump_buffer;
-
- TCoord ex, ey;
- TCoord min_ex, max_ex;
- TCoord min_ey, max_ey;
-
- TArea area;
- TCoord cover;
- int invalid;
-
- PCell* ycells;
- PCell cells;
- FT_PtrDist max_cells;
- FT_PtrDist num_cells;
-
- TPos x, y;
-
- FT_Outline outline;
- TPixmap target;
-
- FT_Raster_Span_Func render_span;
- void* render_span_data;
-
- } gray_TWorker, *gray_PWorker;
-
-#if defined( _MSC_VER )
-#pragma warning( pop )
-#endif
-
-
-#ifndef FT_STATIC_RASTER
-#define ras (*worker)
-#else
- static gray_TWorker ras;
-#endif
-
-
- typedef struct gray_TRaster_
- {
- void* memory;
-
- } gray_TRaster, *gray_PRaster;
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
- /* to be called while in the debugger -- */
- /* this function causes a compiler warning since it is unused otherwise */
- static void
- gray_dump_cells( RAS_ARG )
- {
- int y;
-
-
- for ( y = ras.min_ey; y < ras.max_ey; y++ )
- {
- PCell cell = ras.ycells[y - ras.min_ey];
-
-
- printf( "%3d:", y );
-
- for ( ; cell != NULL; cell = cell->next )
- printf( " (%3d, c:%4d, a:%6d)",
- cell->x, cell->cover, cell->area );
- printf( "\n" );
- }
- }
-
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
-
- /*************************************************************************/
- /* */
- /* Record the current cell in the table. */
- /* */
- static void
- gray_record_cell( RAS_ARG )
- {
- PCell *pcell, cell;
- TCoord x = ras.ex;
-
-
- pcell = &ras.ycells[ras.ey - ras.min_ey];
- for (;;)
- {
- cell = *pcell;
- if ( !cell || cell->x > x )
- break;
-
- if ( cell->x == x )
- goto Found;
-
- pcell = &cell->next;
- }
-
- if ( ras.num_cells >= ras.max_cells )
- ft_longjmp( ras.jump_buffer, 1 );
-
- /* insert new cell */
- cell = ras.cells + ras.num_cells++;
- cell->x = x;
- cell->area = ras.area;
- cell->cover = ras.cover;
-
- cell->next = *pcell;
- *pcell = cell;
-
- return;
-
- Found:
- /* update old cell */
- cell->area += ras.area;
- cell->cover += ras.cover;
- }
-
-
- /*************************************************************************/
- /* */
- /* Set the current cell to a new position. */
- /* */
- static void
- gray_set_cell( RAS_ARG_ TCoord ex,
- TCoord ey )
- {
- /* Move the cell pointer to a new position. We set the `invalid' */
- /* flag to indicate that the cell isn't part of those we're interested */
- /* in during the render phase. This means that: */
- /* */
- /* . the new vertical position must be within min_ey..max_ey-1. */
- /* . the new horizontal position must be strictly less than max_ex */
- /* */
- /* Note that if a cell is to the left of the clipping region, it is */
- /* actually set to the (min_ex-1) horizontal position. */
-
- if ( ex < ras.min_ex )
- ex = ras.min_ex - 1;
-
- /* record the current one if it is valid */
- if ( !ras.invalid )
- gray_record_cell( RAS_VAR );
-
- ras.area = 0;
- ras.cover = 0;
- ras.ex = ex;
- ras.ey = ey;
-
- ras.invalid = ( ey >= ras.max_ey || ey < ras.min_ey ||
- ex >= ras.max_ex );
- }
-
-
-#ifndef FT_LONG64
-
- /*************************************************************************/
- /* */
- /* Render a scanline as one or more cells. */
- /* */
- static void
- gray_render_scanline( RAS_ARG_ TCoord ey,
- TPos x1,
- TCoord y1,
- TPos x2,
- TCoord y2 )
- {
- TCoord ex1, ex2, fx1, fx2, first, dy, delta, mod;
- TPos p, dx;
- int incr;
-
-
- ex1 = TRUNC( x1 );
- ex2 = TRUNC( x2 );
-
- /* trivial case. Happens often */
- if ( y1 == y2 )
- {
- gray_set_cell( RAS_VAR_ ex2, ey );
- return;
- }
-
- fx1 = (TCoord)( x1 - SUBPIXELS( ex1 ) );
- fx2 = (TCoord)( x2 - SUBPIXELS( ex2 ) );
-
- /* everything is located in a single cell. That is easy! */
- /* */
- if ( ex1 == ex2 )
- goto End;
-
- /* ok, we'll have to render a run of adjacent cells on the same */
- /* scanline... */
- /* */
- dx = x2 - x1;
- dy = y2 - y1;
-
- if ( dx > 0 )
- {
- p = ( ONE_PIXEL - fx1 ) * dy;
- first = ONE_PIXEL;
- incr = 1;
- }
- else
- {
- p = fx1 * dy;
- first = 0;
- incr = -1;
- dx = -dx;
- }
-
- FT_DIV_MOD( TCoord, p, dx, delta, mod );
-
- ras.area += (TArea)( ( fx1 + first ) * delta );
- ras.cover += delta;
- y1 += delta;
- ex1 += incr;
- gray_set_cell( RAS_VAR_ ex1, ey );
-
- if ( ex1 != ex2 )
- {
- TCoord lift, rem;
-
-
- p = ONE_PIXEL * dy;
- FT_DIV_MOD( TCoord, p, dx, lift, rem );
-
- do
- {
- delta = lift;
- mod += rem;
- if ( mod >= (TCoord)dx )
- {
- mod -= (TCoord)dx;
- delta++;
- }
-
- ras.area += (TArea)( ONE_PIXEL * delta );
- ras.cover += delta;
- y1 += delta;
- ex1 += incr;
- gray_set_cell( RAS_VAR_ ex1, ey );
- } while ( ex1 != ex2 );
- }
-
- fx1 = ONE_PIXEL - first;
-
- End:
- dy = y2 - y1;
-
- ras.area += (TArea)( ( fx1 + fx2 ) * dy );
- ras.cover += dy;
- }
-
-
- /*************************************************************************/
- /* */
- /* Render a given line as a series of scanlines. */
- /* */
- static void
- gray_render_line( RAS_ARG_ TPos to_x,
- TPos to_y )
- {
- TCoord ey1, ey2, fy1, fy2, first, delta, mod;
- TPos p, dx, dy, x, x2;
- int incr;
-
-
- ey1 = TRUNC( ras.y );
- ey2 = TRUNC( to_y ); /* if (ey2 >= ras.max_ey) ey2 = ras.max_ey-1; */
-
- /* perform vertical clipping */
- if ( ( ey1 >= ras.max_ey && ey2 >= ras.max_ey ) ||
- ( ey1 < ras.min_ey && ey2 < ras.min_ey ) )
- goto End;
-
- fy1 = (TCoord)( ras.y - SUBPIXELS( ey1 ) );
- fy2 = (TCoord)( to_y - SUBPIXELS( ey2 ) );
-
- /* everything is on a single scanline */
- if ( ey1 == ey2 )
- {
- gray_render_scanline( RAS_VAR_ ey1, ras.x, fy1, to_x, fy2 );
- goto End;
- }
-
- dx = to_x - ras.x;
- dy = to_y - ras.y;
-
- /* vertical line - avoid calling gray_render_scanline */
- if ( dx == 0 )
- {
- TCoord ex = TRUNC( ras.x );
- TCoord two_fx = (TCoord)( ( ras.x - SUBPIXELS( ex ) ) << 1 );
- TArea area;
-
-
- if ( dy > 0)
- {
- first = ONE_PIXEL;
- incr = 1;
- }
- else
- {
- first = 0;
- incr = -1;
- }
-
- delta = first - fy1;
- ras.area += (TArea)two_fx * delta;
- ras.cover += delta;
- ey1 += incr;
-
- gray_set_cell( RAS_VAR_ ex, ey1 );
-
- delta = first + first - ONE_PIXEL;
- area = (TArea)two_fx * delta;
- while ( ey1 != ey2 )
- {
- ras.area += area;
- ras.cover += delta;
- ey1 += incr;
-
- gray_set_cell( RAS_VAR_ ex, ey1 );
- }
-
- delta = fy2 - ONE_PIXEL + first;
- ras.area += (TArea)two_fx * delta;
- ras.cover += delta;
-
- goto End;
- }
-
- /* ok, we have to render several scanlines */
- if ( dy > 0)
- {
- p = ( ONE_PIXEL - fy1 ) * dx;
- first = ONE_PIXEL;
- incr = 1;
- }
- else
- {
- p = fy1 * dx;
- first = 0;
- incr = -1;
- dy = -dy;
- }
-
- FT_DIV_MOD( TCoord, p, dy, delta, mod );
-
- x = ras.x + delta;
- gray_render_scanline( RAS_VAR_ ey1, ras.x, fy1, x, first );
-
- ey1 += incr;
- gray_set_cell( RAS_VAR_ TRUNC( x ), ey1 );
-
- if ( ey1 != ey2 )
- {
- TCoord lift, rem;
-
-
- p = ONE_PIXEL * dx;
- FT_DIV_MOD( TCoord, p, dy, lift, rem );
-
- do
- {
- delta = lift;
- mod += rem;
- if ( mod >= (TCoord)dy )
- {
- mod -= (TCoord)dy;
- delta++;
- }
-
- x2 = x + delta;
- gray_render_scanline( RAS_VAR_ ey1,
- x, ONE_PIXEL - first,
- x2, first );
- x = x2;
-
- ey1 += incr;
- gray_set_cell( RAS_VAR_ TRUNC( x ), ey1 );
- } while ( ey1 != ey2 );
- }
-
- gray_render_scanline( RAS_VAR_ ey1,
- x, ONE_PIXEL - first,
- to_x, fy2 );
-
- End:
- ras.x = to_x;
- ras.y = to_y;
- }
-
-#else
-
- /*************************************************************************/
- /* */
- /* Render a straight line across multiple cells in any direction. */
- /* */
- static void
- gray_render_line( RAS_ARG_ TPos to_x,
- TPos to_y )
- {
- TPos dx, dy, fx1, fy1, fx2, fy2;
- TCoord ex1, ex2, ey1, ey2;
-
-
- ey1 = TRUNC( ras.y );
- ey2 = TRUNC( to_y );
-
- /* perform vertical clipping */
- if ( ( ey1 >= ras.max_ey && ey2 >= ras.max_ey ) ||
- ( ey1 < ras.min_ey && ey2 < ras.min_ey ) )
- goto End;
-
- ex1 = TRUNC( ras.x );
- ex2 = TRUNC( to_x );
-
- fx1 = ras.x - SUBPIXELS( ex1 );
- fy1 = ras.y - SUBPIXELS( ey1 );
-
- dx = to_x - ras.x;
- dy = to_y - ras.y;
-
- if ( ex1 == ex2 && ey1 == ey2 ) /* inside one cell */
- ;
- else if ( dy == 0 ) /* ex1 != ex2 */ /* any horizontal line */
- {
- ex1 = ex2;
- gray_set_cell( RAS_VAR_ ex1, ey1 );
- }
- else if ( dx == 0 )
- {
- if ( dy > 0 ) /* vertical line up */
- do
- {
- fy2 = ONE_PIXEL;
- ras.cover += ( fy2 - fy1 );
- ras.area += ( fy2 - fy1 ) * fx1 * 2;
- fy1 = 0;
- ey1++;
- gray_set_cell( RAS_VAR_ ex1, ey1 );
- } while ( ey1 != ey2 );
- else /* vertical line down */
- do
- {
- fy2 = 0;
- ras.cover += ( fy2 - fy1 );
- ras.area += ( fy2 - fy1 ) * fx1 * 2;
- fy1 = ONE_PIXEL;
- ey1--;
- gray_set_cell( RAS_VAR_ ex1, ey1 );
- } while ( ey1 != ey2 );
- }
- else /* any other line */
- {
- TPos prod = dx * fy1 - dy * fx1;
- FT_UDIVPREP( ex1 != ex2, dx );
- FT_UDIVPREP( ey1 != ey2, dy );
-
-
- /* The fundamental value `prod' determines which side and the */
- /* exact coordinate where the line exits current cell. It is */
- /* also easily updated when moving from one cell to the next. */
- do
- {
- if ( prod <= 0 &&
- prod - dx * ONE_PIXEL > 0 ) /* left */
- {
- fx2 = 0;
- fy2 = (TPos)FT_UDIV( -prod, -dx );
- prod -= dy * ONE_PIXEL;
- ras.cover += ( fy2 - fy1 );
- ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
- fx1 = ONE_PIXEL;
- fy1 = fy2;
- ex1--;
- }
- else if ( prod - dx * ONE_PIXEL <= 0 &&
- prod - dx * ONE_PIXEL + dy * ONE_PIXEL > 0 ) /* up */
- {
- prod -= dx * ONE_PIXEL;
- fx2 = (TPos)FT_UDIV( -prod, dy );
- fy2 = ONE_PIXEL;
- ras.cover += ( fy2 - fy1 );
- ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
- fx1 = fx2;
- fy1 = 0;
- ey1++;
- }
- else if ( prod - dx * ONE_PIXEL + dy * ONE_PIXEL <= 0 &&
- prod + dy * ONE_PIXEL >= 0 ) /* right */
- {
- prod += dy * ONE_PIXEL;
- fx2 = ONE_PIXEL;
- fy2 = (TPos)FT_UDIV( prod, dx );
- ras.cover += ( fy2 - fy1 );
- ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
- fx1 = 0;
- fy1 = fy2;
- ex1++;
- }
- else /* ( prod + dy * ONE_PIXEL < 0 &&
- prod > 0 ) down */
- {
- fx2 = (TPos)FT_UDIV( prod, -dy );
- fy2 = 0;
- prod += dx * ONE_PIXEL;
- ras.cover += ( fy2 - fy1 );
- ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
- fx1 = fx2;
- fy1 = ONE_PIXEL;
- ey1--;
- }
-
- gray_set_cell( RAS_VAR_ ex1, ey1 );
- } while ( ex1 != ex2 || ey1 != ey2 );
- }
-
- fx2 = to_x - SUBPIXELS( ex2 );
- fy2 = to_y - SUBPIXELS( ey2 );
-
- ras.cover += ( fy2 - fy1 );
- ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
-
- End:
- ras.x = to_x;
- ras.y = to_y;
- }
-
-#endif
-
- static void
- gray_split_conic( FT_Vector* base )
- {
- TPos a, b;
-
-
- base[4].x = base[2].x;
- b = base[1].x;
- a = base[3].x = ( base[2].x + b ) / 2;
- b = base[1].x = ( base[0].x + b ) / 2;
- base[2].x = ( a + b ) / 2;
-
- base[4].y = base[2].y;
- b = base[1].y;
- a = base[3].y = ( base[2].y + b ) / 2;
- b = base[1].y = ( base[0].y + b ) / 2;
- base[2].y = ( a + b ) / 2;
- }
-
-
- static void
- gray_render_conic( RAS_ARG_ const FT_Vector* control,
- const FT_Vector* to )
- {
- FT_Vector bez_stack[16 * 2 + 1]; /* enough to accommodate bisections */
- FT_Vector* arc = bez_stack;
- TPos dx, dy;
- int draw, split;
-
-
- arc[0].x = UPSCALE( to->x );
- arc[0].y = UPSCALE( to->y );
- arc[1].x = UPSCALE( control->x );
- arc[1].y = UPSCALE( control->y );
- arc[2].x = ras.x;
- arc[2].y = ras.y;
-
- /* short-cut the arc that crosses the current band */
- if ( ( TRUNC( arc[0].y ) >= ras.max_ey &&
- TRUNC( arc[1].y ) >= ras.max_ey &&
- TRUNC( arc[2].y ) >= ras.max_ey ) ||
- ( TRUNC( arc[0].y ) < ras.min_ey &&
- TRUNC( arc[1].y ) < ras.min_ey &&
- TRUNC( arc[2].y ) < ras.min_ey ) )
- {
- ras.x = arc[0].x;
- ras.y = arc[0].y;
- return;
- }
-
- dx = FT_ABS( arc[2].x + arc[0].x - 2 * arc[1].x );
- dy = FT_ABS( arc[2].y + arc[0].y - 2 * arc[1].y );
- if ( dx < dy )
- dx = dy;
-
- /* We can calculate the number of necessary bisections because */
- /* each bisection predictably reduces deviation exactly 4-fold. */
- /* Even 32-bit deviation would vanish after 16 bisections. */
- draw = 1;
- while ( dx > ONE_PIXEL / 4 )
- {
- dx >>= 2;
- draw <<= 1;
- }
-
- /* We use decrement counter to count the total number of segments */
- /* to draw starting from 2^level. Before each draw we split as */
- /* many times as there are trailing zeros in the counter. */
- do
- {
- split = 1;
- while ( ( draw & split ) == 0 )
- {
- gray_split_conic( arc );
- arc += 2;
- split <<= 1;
- }
-
- gray_render_line( RAS_VAR_ arc[0].x, arc[0].y );
- arc -= 2;
-
- } while ( --draw );
- }
-
-
- static void
- gray_split_cubic( FT_Vector* base )
- {
- TPos a, b, c, d;
-
-
- base[6].x = base[3].x;
- c = base[1].x;
- d = base[2].x;
- base[1].x = a = ( base[0].x + c ) / 2;
- base[5].x = b = ( base[3].x + d ) / 2;
- c = ( c + d ) / 2;
- base[2].x = a = ( a + c ) / 2;
- base[4].x = b = ( b + c ) / 2;
- base[3].x = ( a + b ) / 2;
-
- base[6].y = base[3].y;
- c = base[1].y;
- d = base[2].y;
- base[1].y = a = ( base[0].y + c ) / 2;
- base[5].y = b = ( base[3].y + d ) / 2;
- c = ( c + d ) / 2;
- base[2].y = a = ( a + c ) / 2;
- base[4].y = b = ( b + c ) / 2;
- base[3].y = ( a + b ) / 2;
- }
-
-
- static void
- gray_render_cubic( RAS_ARG_ const FT_Vector* control1,
- const FT_Vector* control2,
- const FT_Vector* to )
- {
- FT_Vector bez_stack[16 * 3 + 1]; /* enough to accommodate bisections */
- FT_Vector* arc = bez_stack;
- TPos dx, dy, dx_, dy_;
- TPos dx1, dy1, dx2, dy2;
- TPos L, s, s_limit;
-
-
- arc[0].x = UPSCALE( to->x );
- arc[0].y = UPSCALE( to->y );
- arc[1].x = UPSCALE( control2->x );
- arc[1].y = UPSCALE( control2->y );
- arc[2].x = UPSCALE( control1->x );
- arc[2].y = UPSCALE( control1->y );
- arc[3].x = ras.x;
- arc[3].y = ras.y;
-
- /* short-cut the arc that crosses the current band */
- if ( ( TRUNC( arc[0].y ) >= ras.max_ey &&
- TRUNC( arc[1].y ) >= ras.max_ey &&
- TRUNC( arc[2].y ) >= ras.max_ey &&
- TRUNC( arc[3].y ) >= ras.max_ey ) ||
- ( TRUNC( arc[0].y ) < ras.min_ey &&
- TRUNC( arc[1].y ) < ras.min_ey &&
- TRUNC( arc[2].y ) < ras.min_ey &&
- TRUNC( arc[3].y ) < ras.min_ey ) )
- {
- ras.x = arc[0].x;
- ras.y = arc[0].y;
- return;
- }
-
- for (;;)
- {
- /* Decide whether to split or draw. See `Rapid Termination */
- /* Evaluation for Recursive Subdivision of Bezier Curves' by Thomas */
- /* F. Hain, at */
- /* http://www.cis.southalabama.edu/~hain/general/Publications/Bezier/Camera-ready%20CISST02%202.pdf */
-
- /* dx and dy are x and y components of the P0-P3 chord vector. */
- dx = dx_ = arc[3].x - arc[0].x;
- dy = dy_ = arc[3].y - arc[0].y;
-
- L = FT_HYPOT( dx_, dy_ );
-
- /* Avoid possible arithmetic overflow below by splitting. */
- if ( L > 32767 )
- goto Split;
-
- /* Max deviation may be as much as (s/L) * 3/4 (if Hain's v = 1). */
- s_limit = L * (TPos)( ONE_PIXEL / 6 );
-
- /* s is L * the perpendicular distance from P1 to the line P0-P3. */
- dx1 = arc[1].x - arc[0].x;
- dy1 = arc[1].y - arc[0].y;
- s = FT_ABS( SUB_LONG( MUL_LONG( dy, dx1 ), MUL_LONG( dx, dy1 ) ) );
-
- if ( s > s_limit )
- goto Split;
-
- /* s is L * the perpendicular distance from P2 to the line P0-P3. */
- dx2 = arc[2].x - arc[0].x;
- dy2 = arc[2].y - arc[0].y;
- s = FT_ABS( SUB_LONG( MUL_LONG( dy, dx2 ), MUL_LONG( dx, dy2 ) ) );
-
- if ( s > s_limit )
- goto Split;
-
- /* Split super curvy segments where the off points are so far
- from the chord that the angles P0-P1-P3 or P0-P2-P3 become
- acute as detected by appropriate dot products. */
- if ( dx1 * ( dx1 - dx ) + dy1 * ( dy1 - dy ) > 0 ||
- dx2 * ( dx2 - dx ) + dy2 * ( dy2 - dy ) > 0 )
- goto Split;
-
- gray_render_line( RAS_VAR_ arc[0].x, arc[0].y );
-
- if ( arc == bez_stack )
- return;
-
- arc -= 3;
- continue;
-
- Split:
- gray_split_cubic( arc );
- arc += 3;
- }
- }
-
-
- static int
- gray_move_to( const FT_Vector* to,
- gray_PWorker worker )
- {
- TPos x, y;
-
-
- /* start to a new position */
- x = UPSCALE( to->x );
- y = UPSCALE( to->y );
-
- gray_set_cell( RAS_VAR_ TRUNC( x ), TRUNC( y ) );
-
- ras.x = x;
- ras.y = y;
- return 0;
- }
-
-
- static int
- gray_line_to( const FT_Vector* to,
- gray_PWorker worker )
- {
- gray_render_line( RAS_VAR_ UPSCALE( to->x ), UPSCALE( to->y ) );
- return 0;
- }
-
-
- static int
- gray_conic_to( const FT_Vector* control,
- const FT_Vector* to,
- gray_PWorker worker )
- {
- gray_render_conic( RAS_VAR_ control, to );
- return 0;
- }
-
-
- static int
- gray_cubic_to( const FT_Vector* control1,
- const FT_Vector* control2,
- const FT_Vector* to,
- gray_PWorker worker )
- {
- gray_render_cubic( RAS_VAR_ control1, control2, to );
- return 0;
- }
-
-
- static void
- gray_hline( RAS_ARG_ TCoord x,
- TCoord y,
- TArea coverage,
- TCoord acount )
- {
- /* scale the coverage from 0..(ONE_PIXEL*ONE_PIXEL*2) to 0..256 */
- coverage >>= PIXEL_BITS * 2 + 1 - 8;
- if ( coverage < 0 )
- coverage = -coverage - 1;
-
- /* compute the line's coverage depending on the outline fill rule */
- if ( ras.outline.flags & FT_OUTLINE_EVEN_ODD_FILL )
- {
- coverage &= 511;
-
- if ( coverage >= 256 )
- coverage = 511 - coverage;
- }
- else
- {
- /* normal non-zero winding rule */
- if ( coverage >= 256 )
- coverage = 255;
- }
-
- if ( ras.render_span ) /* for FT_RASTER_FLAG_DIRECT only */
- {
- FT_Span span;
-
-
- span.x = (short)x;
- span.len = (unsigned short)acount;
- span.coverage = (unsigned char)coverage;
-
- ras.render_span( y, 1, &span, ras.render_span_data );
- }
- else
- {
- unsigned char* q = ras.target.origin - ras.target.pitch * y + x;
- unsigned char c = (unsigned char)coverage;
-
-
- /* For small-spans it is faster to do it by ourselves than
- * calling `memset'. This is mainly due to the cost of the
- * function call.
- */
- switch ( acount )
- {
- case 7: *q++ = c;
- case 6: *q++ = c;
- case 5: *q++ = c;
- case 4: *q++ = c;
- case 3: *q++ = c;
- case 2: *q++ = c;
- case 1: *q = c;
- case 0: break;
- default:
- FT_MEM_SET( q, c, acount );
- }
- }
- }
-
-
- static void
- gray_sweep( RAS_ARG )
- {
- int y;
-
-
- FT_TRACE7(( "gray_sweep: start\n" ));
-
- for ( y = ras.min_ey; y < ras.max_ey; y++ )
- {
- PCell cell = ras.ycells[y - ras.min_ey];
- TCoord x = ras.min_ex;
- TArea cover = 0;
- TArea area;
-
-
- for ( ; cell != NULL; cell = cell->next )
- {
- if ( cover != 0 && cell->x > x )
- gray_hline( RAS_VAR_ x, y, cover, cell->x - x );
-
- cover += (TArea)cell->cover * ( ONE_PIXEL * 2 );
- area = cover - cell->area;
-
- if ( area != 0 && cell->x >= ras.min_ex )
- gray_hline( RAS_VAR_ cell->x, y, area, 1 );
-
- x = cell->x + 1;
- }
-
- if ( cover != 0 )
- gray_hline( RAS_VAR_ x, y, cover, ras.max_ex - x );
- }
-
- FT_TRACE7(( "gray_sweep: end\n" ));
- }
-
-
-#ifdef STANDALONE_
-
- /*************************************************************************/
- /* */
- /* The following functions should only compile in stand-alone mode, */
- /* i.e., when building this component without the rest of FreeType. */
- /* */
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Decompose */
- /* */
- /* <Description> */
- /* Walk over an outline's structure to decompose it into individual */
- /* segments and Bézier arcs. This function is also able to emit */
- /* `move to' and `close to' operations to indicate the start and end */
- /* of new contours in the outline. */
- /* */
- /* <Input> */
- /* outline :: A pointer to the source target. */
- /* */
- /* func_interface :: A table of `emitters', i.e., function pointers */
- /* called during decomposition to indicate path */
- /* operations. */
- /* */
- /* <InOut> */
- /* user :: A typeless pointer which is passed to each */
- /* emitter during the decomposition. It can be */
- /* used to store the state during the */
- /* decomposition. */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- static int
- FT_Outline_Decompose( const FT_Outline* outline,
- const FT_Outline_Funcs* func_interface,
- void* user )
- {
-#undef SCALED
-#define SCALED( x ) ( ( (x) << shift ) - delta )
-
- FT_Vector v_last;
- FT_Vector v_control;
- FT_Vector v_start;
-
- FT_Vector* point;
- FT_Vector* limit;
- char* tags;
-
- int error;
-
- int n; /* index of contour in outline */
- int first; /* index of first point in contour */
- char tag; /* current point's state */
-
- int shift;
- TPos delta;
-
-
- if ( !outline )
- return FT_THROW( Invalid_Outline );
-
- if ( !func_interface )
- return FT_THROW( Invalid_Argument );
-
- shift = func_interface->shift;
- delta = func_interface->delta;
- first = 0;
-
- for ( n = 0; n < outline->n_contours; n++ )
- {
- int last; /* index of last point in contour */
-
-
- FT_TRACE5(( "FT_Outline_Decompose: Outline %d\n", n ));
-
- last = outline->contours[n];
- if ( last < 0 )
- goto Invalid_Outline;
- limit = outline->points + last;
-
- v_start = outline->points[first];
- v_start.x = SCALED( v_start.x );
- v_start.y = SCALED( v_start.y );
-
- v_last = outline->points[last];
- v_last.x = SCALED( v_last.x );
- v_last.y = SCALED( v_last.y );
-
- v_control = v_start;
-
- point = outline->points + first;
- tags = outline->tags + first;
- tag = FT_CURVE_TAG( tags[0] );
-
- /* A contour cannot start with a cubic control point! */
- if ( tag == FT_CURVE_TAG_CUBIC )
- goto Invalid_Outline;
-
- /* check first point to determine origin */
- if ( tag == FT_CURVE_TAG_CONIC )
- {
- /* first point is conic control. Yes, this happens. */
- if ( FT_CURVE_TAG( outline->tags[last] ) == FT_CURVE_TAG_ON )
- {
- /* start at last point if it is on the curve */
- v_start = v_last;
- limit--;
- }
- else
- {
- /* if both first and last points are conic, */
- /* start at their middle and record its position */
- /* for closure */
- v_start.x = ( v_start.x + v_last.x ) / 2;
- v_start.y = ( v_start.y + v_last.y ) / 2;
-
- v_last = v_start;
- }
- point--;
- tags--;
- }
-
- FT_TRACE5(( " move to (%.2f, %.2f)\n",
- v_start.x / 64.0, v_start.y / 64.0 ));
- error = func_interface->move_to( &v_start, user );
- if ( error )
- goto Exit;
-
- while ( point < limit )
- {
- point++;
- tags++;
-
- tag = FT_CURVE_TAG( tags[0] );
- switch ( tag )
- {
- case FT_CURVE_TAG_ON: /* emit a single line_to */
- {
- FT_Vector vec;
-
-
- vec.x = SCALED( point->x );
- vec.y = SCALED( point->y );
-
- FT_TRACE5(( " line to (%.2f, %.2f)\n",
- vec.x / 64.0, vec.y / 64.0 ));
- error = func_interface->line_to( &vec, user );
- if ( error )
- goto Exit;
- continue;
- }
-
- case FT_CURVE_TAG_CONIC: /* consume conic arcs */
- v_control.x = SCALED( point->x );
- v_control.y = SCALED( point->y );
-
- Do_Conic:
- if ( point < limit )
- {
- FT_Vector vec;
- FT_Vector v_middle;
-
-
- point++;
- tags++;
- tag = FT_CURVE_TAG( tags[0] );
-
- vec.x = SCALED( point->x );
- vec.y = SCALED( point->y );
-
- if ( tag == FT_CURVE_TAG_ON )
- {
- FT_TRACE5(( " conic to (%.2f, %.2f)"
- " with control (%.2f, %.2f)\n",
- vec.x / 64.0, vec.y / 64.0,
- v_control.x / 64.0, v_control.y / 64.0 ));
- error = func_interface->conic_to( &v_control, &vec, user );
- if ( error )
- goto Exit;
- continue;
- }
-
- if ( tag != FT_CURVE_TAG_CONIC )
- goto Invalid_Outline;
-
- v_middle.x = ( v_control.x + vec.x ) / 2;
- v_middle.y = ( v_control.y + vec.y ) / 2;
-
- FT_TRACE5(( " conic to (%.2f, %.2f)"
- " with control (%.2f, %.2f)\n",
- v_middle.x / 64.0, v_middle.y / 64.0,
- v_control.x / 64.0, v_control.y / 64.0 ));
- error = func_interface->conic_to( &v_control, &v_middle, user );
- if ( error )
- goto Exit;
-
- v_control = vec;
- goto Do_Conic;
- }
-
- FT_TRACE5(( " conic to (%.2f, %.2f)"
- " with control (%.2f, %.2f)\n",
- v_start.x / 64.0, v_start.y / 64.0,
- v_control.x / 64.0, v_control.y / 64.0 ));
- error = func_interface->conic_to( &v_control, &v_start, user );
- goto Close;
-
- default: /* FT_CURVE_TAG_CUBIC */
- {
- FT_Vector vec1, vec2;
-
-
- if ( point + 1 > limit ||
- FT_CURVE_TAG( tags[1] ) != FT_CURVE_TAG_CUBIC )
- goto Invalid_Outline;
-
- point += 2;
- tags += 2;
-
- vec1.x = SCALED( point[-2].x );
- vec1.y = SCALED( point[-2].y );
-
- vec2.x = SCALED( point[-1].x );
- vec2.y = SCALED( point[-1].y );
-
- if ( point <= limit )
- {
- FT_Vector vec;
-
-
- vec.x = SCALED( point->x );
- vec.y = SCALED( point->y );
-
- FT_TRACE5(( " cubic to (%.2f, %.2f)"
- " with controls (%.2f, %.2f) and (%.2f, %.2f)\n",
- vec.x / 64.0, vec.y / 64.0,
- vec1.x / 64.0, vec1.y / 64.0,
- vec2.x / 64.0, vec2.y / 64.0 ));
- error = func_interface->cubic_to( &vec1, &vec2, &vec, user );
- if ( error )
- goto Exit;
- continue;
- }
-
- FT_TRACE5(( " cubic to (%.2f, %.2f)"
- " with controls (%.2f, %.2f) and (%.2f, %.2f)\n",
- v_start.x / 64.0, v_start.y / 64.0,
- vec1.x / 64.0, vec1.y / 64.0,
- vec2.x / 64.0, vec2.y / 64.0 ));
- error = func_interface->cubic_to( &vec1, &vec2, &v_start, user );
- goto Close;
- }
- }
- }
-
- /* close the contour with a line segment */
- FT_TRACE5(( " line to (%.2f, %.2f)\n",
- v_start.x / 64.0, v_start.y / 64.0 ));
- error = func_interface->line_to( &v_start, user );
-
- Close:
- if ( error )
- goto Exit;
-
- first = last + 1;
- }
-
- FT_TRACE5(( "FT_Outline_Decompose: Done\n", n ));
- return 0;
-
- Exit:
- FT_TRACE5(( "FT_Outline_Decompose: Error 0x%x\n", error ));
- return error;
-
- Invalid_Outline:
- return FT_THROW( Invalid_Outline );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Get_CBox */
- /* */
- /* <Description> */
- /* Return an outline's `control box'. The control box encloses all */
- /* the outline's points, including Bézier control points. Though it */
- /* coincides with the exact bounding box for most glyphs, it can be */
- /* slightly larger in some situations (like when rotating an outline */
- /* that contains Bézier outside arcs). */
- /* */
- /* Computing the control box is very fast, while getting the bounding */
- /* box can take much more time as it needs to walk over all segments */
- /* and arcs in the outline. To get the latter, you can use the */
- /* `ftbbox' component, which is dedicated to this single task. */
- /* */
- /* <Input> */
- /* outline :: A pointer to the source outline descriptor. */
- /* */
- /* <Output> */
- /* acbox :: The outline's control box. */
- /* */
- /* <Note> */
- /* See @FT_Glyph_Get_CBox for a discussion of tricky fonts. */
- /* */
-
- static void
- FT_Outline_Get_CBox( const FT_Outline* outline,
- FT_BBox *acbox )
- {
- TPos xMin, yMin, xMax, yMax;
-
-
- if ( outline && acbox )
- {
- if ( outline->n_points == 0 )
- {
- xMin = 0;
- yMin = 0;
- xMax = 0;
- yMax = 0;
- }
- else
- {
- FT_Vector* vec = outline->points;
- FT_Vector* limit = vec + outline->n_points;
-
-
- xMin = xMax = vec->x;
- yMin = yMax = vec->y;
- vec++;
-
- for ( ; vec < limit; vec++ )
- {
- TPos x, y;
-
-
- x = vec->x;
- if ( x < xMin ) xMin = x;
- if ( x > xMax ) xMax = x;
-
- y = vec->y;
- if ( y < yMin ) yMin = y;
- if ( y > yMax ) yMax = y;
- }
- }
- acbox->xMin = xMin;
- acbox->xMax = xMax;
- acbox->yMin = yMin;
- acbox->yMax = yMax;
- }
- }
-
-#endif /* STANDALONE_ */
-
-
- FT_DEFINE_OUTLINE_FUNCS(
- func_interface,
-
- (FT_Outline_MoveTo_Func) gray_move_to, /* move_to */
- (FT_Outline_LineTo_Func) gray_line_to, /* line_to */
- (FT_Outline_ConicTo_Func)gray_conic_to, /* conic_to */
- (FT_Outline_CubicTo_Func)gray_cubic_to, /* cubic_to */
-
- 0, /* shift */
- 0 /* delta */
- )
-
-
- static int
- gray_convert_glyph_inner( RAS_ARG )
- {
-
- volatile int error = 0;
-
-#ifdef FT_CONFIG_OPTION_PIC
- FT_Outline_Funcs func_interface;
- Init_Class_func_interface(&func_interface);
-#endif
-
- if ( ft_setjmp( ras.jump_buffer ) == 0 )
- {
- error = FT_Outline_Decompose( &ras.outline, &func_interface, &ras );
- if ( !ras.invalid )
- gray_record_cell( RAS_VAR );
-
- FT_TRACE7(( "band [%d..%d]: %d cells\n",
- ras.min_ey, ras.max_ey, ras.num_cells ));
- }
- else
- {
- error = FT_THROW( Memory_Overflow );
-
- FT_TRACE7(( "band [%d..%d]: to be bisected\n",
- ras.min_ey, ras.max_ey ));
- }
-
- return error;
- }
-
-
- static int
- gray_convert_glyph( RAS_ARG )
- {
- TCell buffer[FT_MAX_GRAY_POOL];
- TCoord band_size = FT_MAX_GRAY_POOL / 8;
- TCoord count = ras.max_ey - ras.min_ey;
- int num_bands;
- TCoord min, max, max_y;
- TCoord bands[32]; /* enough to accommodate bisections */
- TCoord* band;
-
-
- /* set up vertical bands */
- if ( count > band_size )
- {
- /* two divisions rounded up */
- num_bands = (int)( ( count + band_size - 1) / band_size );
- band_size = ( count + num_bands - 1 ) / num_bands;
- }
-
- min = ras.min_ey;
- max_y = ras.max_ey;
-
- for ( ; min < max_y; min = max )
- {
- max = min + band_size;
- if ( max > max_y )
- max = max_y;
-
- band = bands;
- band[1] = min;
- band[0] = max;
-
- do
- {
- TCoord width = band[0] - band[1];
- int error;
-
-
- /* memory management */
- {
- size_t ycount = (size_t)width;
- size_t cell_start;
-
-
- cell_start = ( ycount * sizeof ( PCell ) + sizeof ( TCell ) - 1 ) /
- sizeof ( TCell );
-
- ras.cells = buffer + cell_start;
- ras.max_cells = (FT_PtrDist)( FT_MAX_GRAY_POOL - cell_start );
- ras.num_cells = 0;
-
- ras.ycells = (PCell*)buffer;
- while ( ycount )
- ras.ycells[--ycount] = NULL;
- }
-
- ras.invalid = 1;
- ras.min_ey = band[1];
- ras.max_ey = band[0];
-
- error = gray_convert_glyph_inner( RAS_VAR );
-
- if ( !error )
- {
- gray_sweep( RAS_VAR );
- band--;
- continue;
- }
- else if ( error != ErrRaster_Memory_Overflow )
- return 1;
-
- /* render pool overflow; we will reduce the render band by half */
- width >>= 1;
-
- /* This is too complex for a single scanline; there must */
- /* be some problems. */
- if ( width == 0 )
- {
- FT_TRACE7(( "gray_convert_glyph: rotten glyph\n" ));
- return 1;
- }
-
- band++;
- band[1] = band[0];
- band[0] += width;
- } while ( band >= bands );
- }
-
- return 0;
- }
-
-
- static int
- gray_raster_render( FT_Raster raster,
- const FT_Raster_Params* params )
- {
- const FT_Outline* outline = (const FT_Outline*)params->source;
- const FT_Bitmap* target_map = params->target;
- FT_BBox cbox, clip;
-
-#ifndef FT_STATIC_RASTER
- gray_TWorker worker[1];
-#endif
-
-
- if ( !raster )
- return FT_THROW( Invalid_Argument );
-
- /* this version does not support monochrome rendering */
- if ( !( params->flags & FT_RASTER_FLAG_AA ) )
- return FT_THROW( Invalid_Mode );
-
- if ( !outline )
- return FT_THROW( Invalid_Outline );
-
- /* return immediately if the outline is empty */
- if ( outline->n_points == 0 || outline->n_contours <= 0 )
- return 0;
-
- if ( !outline->contours || !outline->points )
- return FT_THROW( Invalid_Outline );
-
- if ( outline->n_points !=
- outline->contours[outline->n_contours - 1] + 1 )
- return FT_THROW( Invalid_Outline );
-
- ras.outline = *outline;
-
- if ( params->flags & FT_RASTER_FLAG_DIRECT )
- {
- if ( !params->gray_spans )
- return 0;
-
- ras.render_span = (FT_Raster_Span_Func)params->gray_spans;
- ras.render_span_data = params->user;
- }
- else
- {
- /* if direct mode is not set, we must have a target bitmap */
- if ( !target_map )
- return FT_THROW( Invalid_Argument );
-
- /* nothing to do */
- if ( !target_map->width || !target_map->rows )
- return 0;
-
- if ( !target_map->buffer )
- return FT_THROW( Invalid_Argument );
-
- if ( target_map->pitch < 0 )
- ras.target.origin = target_map->buffer;
- else
- ras.target.origin = target_map->buffer
- + ( target_map->rows - 1 ) * (unsigned int)target_map->pitch;
-
- ras.target.pitch = target_map->pitch;
-
- ras.render_span = (FT_Raster_Span_Func)NULL;
- ras.render_span_data = NULL;
- }
-
- FT_Outline_Get_CBox( outline, &cbox );
-
- /* reject too large outline coordinates */
- if ( cbox.xMin < -0x1000000L || cbox.xMax > 0x1000000L ||
- cbox.yMin < -0x1000000L || cbox.yMax > 0x1000000L )
- return FT_THROW( Invalid_Outline );
-
- /* truncate the bounding box to integer pixels */
- cbox.xMin = cbox.xMin >> 6;
- cbox.yMin = cbox.yMin >> 6;
- cbox.xMax = ( cbox.xMax + 63 ) >> 6;
- cbox.yMax = ( cbox.yMax + 63 ) >> 6;
-
- /* compute clipping box */
- if ( !( params->flags & FT_RASTER_FLAG_DIRECT ) )
- {
- /* compute clip box from target pixmap */
- clip.xMin = 0;
- clip.yMin = 0;
- clip.xMax = (FT_Pos)target_map->width;
- clip.yMax = (FT_Pos)target_map->rows;
- }
- else if ( params->flags & FT_RASTER_FLAG_CLIP )
- clip = params->clip_box;
- else
- {
- clip.xMin = -32768L;
- clip.yMin = -32768L;
- clip.xMax = 32767L;
- clip.yMax = 32767L;
- }
-
- /* clip to target bitmap, exit if nothing to do */
- ras.min_ex = FT_MAX( cbox.xMin, clip.xMin );
- ras.min_ey = FT_MAX( cbox.yMin, clip.yMin );
- ras.max_ex = FT_MIN( cbox.xMax, clip.xMax );
- ras.max_ey = FT_MIN( cbox.yMax, clip.yMax );
-
- if ( ras.max_ex <= ras.min_ex || ras.max_ey <= ras.min_ey )
- return 0;
-
- return gray_convert_glyph( RAS_VAR );
- }
-
-
- /**** RASTER OBJECT CREATION: In stand-alone mode, we simply use *****/
- /**** a static object. *****/
-
-#ifdef STANDALONE_
-
- static int
- gray_raster_new( void* memory,
- FT_Raster* araster )
- {
- static gray_TRaster the_raster;
-
- FT_UNUSED( memory );
-
-
- *araster = (FT_Raster)&the_raster;
- FT_ZERO( &the_raster );
-
- return 0;
- }
-
-
- static void
- gray_raster_done( FT_Raster raster )
- {
- /* nothing */
- FT_UNUSED( raster );
- }
-
-#else /* !STANDALONE_ */
-
- static int
- gray_raster_new( FT_Memory memory,
- FT_Raster* araster )
- {
- FT_Error error;
- gray_PRaster raster = NULL;
-
-
- *araster = 0;
- if ( !FT_ALLOC( raster, sizeof ( gray_TRaster ) ) )
- {
- raster->memory = memory;
- *araster = (FT_Raster)raster;
- }
-
- return error;
- }
-
-
- static void
- gray_raster_done( FT_Raster raster )
- {
- FT_Memory memory = (FT_Memory)((gray_PRaster)raster)->memory;
-
-
- FT_FREE( raster );
- }
-
-#endif /* !STANDALONE_ */
-
-
- static void
- gray_raster_reset( FT_Raster raster,
- unsigned char* pool_base,
- unsigned long pool_size )
- {
- FT_UNUSED( raster );
- FT_UNUSED( pool_base );
- FT_UNUSED( pool_size );
- }
-
-
- static int
- gray_raster_set_mode( FT_Raster raster,
- unsigned long mode,
- void* args )
- {
- FT_UNUSED( raster );
- FT_UNUSED( mode );
- FT_UNUSED( args );
-
-
- return 0; /* nothing to do */
- }
-
-
- FT_DEFINE_RASTER_FUNCS(
- ft_grays_raster,
-
- FT_GLYPH_FORMAT_OUTLINE,
-
- (FT_Raster_New_Func) gray_raster_new, /* raster_new */
- (FT_Raster_Reset_Func) gray_raster_reset, /* raster_reset */
- (FT_Raster_Set_Mode_Func)gray_raster_set_mode, /* raster_set_mode */
- (FT_Raster_Render_Func) gray_raster_render, /* raster_render */
- (FT_Raster_Done_Func) gray_raster_done /* raster_done */
- )
-
-
-/* END */
-
-
-/* Local Variables: */
-/* coding: utf-8 */
-/* End: */
diff --git a/src/smooth/ftgrays.h b/src/smooth/ftgrays.h
deleted file mode 100644
index a5447da1a..000000000
--- a/src/smooth/ftgrays.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgrays.h */
-/* */
-/* FreeType smooth renderer declaration */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTGRAYS_H_
-#define FTGRAYS_H_
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-#ifdef STANDALONE_
-#include "ftimage.h"
-#else
-#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H /* for FT_CONFIG_OPTION_PIC */
-#include FT_IMAGE_H
-#endif
-
-
- /*************************************************************************/
- /* */
- /* To make ftgrays.h independent from configuration files we check */
- /* whether FT_EXPORT_VAR has been defined already. */
- /* */
- /* On some systems and compilers (Win32 mostly), an extra keyword is */
- /* necessary to compile the library as a DLL. */
- /* */
-#ifndef FT_EXPORT_VAR
-#define FT_EXPORT_VAR( x ) extern x
-#endif
-
- FT_EXPORT_VAR( const FT_Raster_Funcs ) ft_grays_raster;
-
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* FTGRAYS_H_ */
-
-
-/* END */
diff --git a/src/smooth/ftsmerrs.h b/src/smooth/ftsmerrs.h
deleted file mode 100644
index a528c6183..000000000
--- a/src/smooth/ftsmerrs.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsmerrs.h */
-/* */
-/* smooth renderer error codes (specification only). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the smooth renderer error enumeration */
- /* constants. */
- /* */
- /*************************************************************************/
-
-#ifndef FTSMERRS_H_
-#define FTSMERRS_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX Smooth_Err_
-#define FT_ERR_BASE FT_Mod_Err_Smooth
-
-#include FT_ERRORS_H
-
-#endif /* FTSMERRS_H_ */
-
-
-/* END */
diff --git a/src/smooth/ftsmooth.c b/src/smooth/ftsmooth.c
deleted file mode 100644
index fd12e666a..000000000
--- a/src/smooth/ftsmooth.c
+++ /dev/null
@@ -1,555 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsmooth.c */
-/* */
-/* Anti-aliasing renderer interface (body). */
-/* */
-/* Copyright 2000-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_OUTLINE_H
-#include "ftsmooth.h"
-#include "ftgrays.h"
-#include "ftspic.h"
-
-#include "ftsmerrs.h"
-
-
- /* initialize renderer -- init its raster */
- static FT_Error
- ft_smooth_init( FT_Renderer render )
- {
- render->clazz->raster_class->raster_reset( render->raster, NULL, 0 );
-
- return 0;
- }
-
-
- /* sets render-specific mode */
- static FT_Error
- ft_smooth_set_mode( FT_Renderer render,
- FT_ULong mode_tag,
- FT_Pointer data )
- {
- /* we simply pass it to the raster */
- return render->clazz->raster_class->raster_set_mode( render->raster,
- mode_tag,
- data );
- }
-
- /* transform a given glyph image */
- static FT_Error
- ft_smooth_transform( FT_Renderer render,
- FT_GlyphSlot slot,
- const FT_Matrix* matrix,
- const FT_Vector* delta )
- {
- FT_Error error = FT_Err_Ok;
-
-
- if ( slot->format != render->glyph_format )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- if ( matrix )
- FT_Outline_Transform( &slot->outline, matrix );
-
- if ( delta )
- FT_Outline_Translate( &slot->outline, delta->x, delta->y );
-
- Exit:
- return error;
- }
-
-
- /* return the glyph's control box */
- static void
- ft_smooth_get_cbox( FT_Renderer render,
- FT_GlyphSlot slot,
- FT_BBox* cbox )
- {
- FT_ZERO( cbox );
-
- if ( slot->format == render->glyph_format )
- FT_Outline_Get_CBox( &slot->outline, cbox );
- }
-
-
- /* convert a slot's glyph image into a bitmap */
- static FT_Error
- ft_smooth_render_generic( FT_Renderer render,
- FT_GlyphSlot slot,
- FT_Render_Mode mode,
- const FT_Vector* origin,
- FT_Render_Mode required_mode )
- {
- FT_Error error;
- FT_Outline* outline = &slot->outline;
- FT_Bitmap* bitmap = &slot->bitmap;
- FT_Memory memory = render->root.memory;
- FT_BBox cbox;
- FT_Pos x_shift = 0;
- FT_Pos y_shift = 0;
- FT_Pos x_left, y_top;
- FT_Pos width, height, pitch;
-#ifndef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
- FT_Pos height_org, width_org;
-#endif
- FT_Int hmul = ( mode == FT_RENDER_MODE_LCD );
- FT_Int vmul = ( mode == FT_RENDER_MODE_LCD_V );
-
- FT_Raster_Params params;
-
- FT_Bool have_outline_shifted = FALSE;
- FT_Bool have_buffer = FALSE;
-
-#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
-
- FT_LcdFiveTapFilter lcd_weights = { 0 };
- FT_Bool have_custom_weight = FALSE;
- FT_Bitmap_LcdFilterFunc lcd_filter_func = NULL;
-
-
- if ( slot->face )
- {
- FT_Char i;
-
-
- for ( i = 0; i < FT_LCD_FILTER_FIVE_TAPS; i++ )
- if ( slot->face->internal->lcd_weights[i] != 0 )
- {
- have_custom_weight = TRUE;
- break;
- }
- }
-
- /*
- * The LCD filter can be set library-wide and per-face. Face overrides
- * library. If the face filter weights are all zero (the default), it
- * means that the library default should be used.
- */
- if ( have_custom_weight )
- {
- /*
- * A per-font filter is set. It always uses the default 5-tap
- * in-place FIR filter.
- */
- ft_memcpy( lcd_weights,
- slot->face->internal->lcd_weights,
- FT_LCD_FILTER_FIVE_TAPS );
- lcd_filter_func = ft_lcd_filter_fir;
- }
- else
- {
- /*
- * The face's lcd_weights is {0, 0, 0, 0, 0}, meaning `use library
- * default'. If the library is set to use no LCD filtering
- * (lcd_filter_func == NULL), `lcd_filter_func' here is also set to
- * NULL and the tests further below pass over the filtering process.
- */
- ft_memcpy( lcd_weights,
- slot->library->lcd_weights,
- FT_LCD_FILTER_FIVE_TAPS );
- lcd_filter_func = slot->library->lcd_filter_func;
- }
-
-#endif /*FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
-
- /* check glyph image format */
- if ( slot->format != render->glyph_format )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- /* check mode */
- if ( mode != required_mode )
- {
- error = FT_THROW( Cannot_Render_Glyph );
- goto Exit;
- }
-
- if ( origin )
- {
- x_shift = origin->x;
- y_shift = origin->y;
- }
-
- /* compute the control box, and grid fit it */
- /* taking into account the origin shift */
- FT_Outline_Get_CBox( outline, &cbox );
-
-#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
- /* add minimal padding for LCD filter depending on specific weights */
- if ( lcd_filter_func)
- {
- if ( hmul )
- {
- cbox.xMax += lcd_weights[4] ? 43
- : lcd_weights[3] ? 22 : 0;
- cbox.xMin -= lcd_weights[0] ? 43
- : lcd_weights[1] ? 22 : 0;
- }
-
- if ( vmul )
- {
- cbox.yMax += lcd_weights[4] ? 43
- : lcd_weights[3] ? 22 : 0;
- cbox.yMin -= lcd_weights[0] ? 43
- : lcd_weights[1] ? 22 : 0;
- }
- }
-#endif
-
- cbox.xMin = FT_PIX_FLOOR( cbox.xMin + x_shift );
- cbox.yMin = FT_PIX_FLOOR( cbox.yMin + y_shift );
- cbox.xMax = FT_PIX_CEIL( cbox.xMax + x_shift );
- cbox.yMax = FT_PIX_CEIL( cbox.yMax + y_shift );
-
- x_shift -= cbox.xMin;
- y_shift -= cbox.yMin;
-
- x_left = cbox.xMin >> 6;
- y_top = cbox.yMax >> 6;
-
- width = (FT_ULong)( cbox.xMax - cbox.xMin ) >> 6;
- height = (FT_ULong)( cbox.yMax - cbox.yMin ) >> 6;
-
-#ifndef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
- width_org = width;
- height_org = height;
-#endif
-
- pitch = width;
- if ( hmul )
- {
- width *= 3;
- pitch = FT_PAD_CEIL( width, 4 );
- }
-
- if ( vmul )
- height *= 3;
-
- /*
- * XXX: on 16bit system, we return an error for huge bitmap
- * to prevent an overflow.
- */
- if ( x_left > FT_INT_MAX || y_top > FT_INT_MAX ||
- x_left < FT_INT_MIN || y_top < FT_INT_MIN )
- {
- error = FT_THROW( Invalid_Pixel_Size );
- goto Exit;
- }
-
- /* Required check is (pitch * height < FT_ULONG_MAX), */
- /* but we care realistic cases only. Always pitch <= width. */
- if ( width > 0x7FFF || height > 0x7FFF )
- {
- FT_ERROR(( "ft_smooth_render_generic: glyph too large: %u x %u\n",
- width, height ));
- error = FT_THROW( Raster_Overflow );
- goto Exit;
- }
-
- /* release old bitmap buffer */
- if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
- {
- FT_FREE( bitmap->buffer );
- slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
- }
-
- /* allocate new one */
- if ( FT_ALLOC( bitmap->buffer, (FT_ULong)( pitch * height ) ) )
- goto Exit;
- else
- have_buffer = TRUE;
-
- slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
-
- slot->format = FT_GLYPH_FORMAT_BITMAP;
- slot->bitmap_left = (FT_Int)x_left;
- slot->bitmap_top = (FT_Int)y_top;
-
- bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
- bitmap->num_grays = 256;
- bitmap->width = (unsigned int)width;
- bitmap->rows = (unsigned int)height;
- bitmap->pitch = pitch;
-
- /* translate outline to render it into the bitmap */
- if ( x_shift || y_shift )
- {
- FT_Outline_Translate( outline, x_shift, y_shift );
- have_outline_shifted = TRUE;
- }
-
- /* set up parameters */
- params.target = bitmap;
- params.source = outline;
- params.flags = FT_RASTER_FLAG_AA;
-
-#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
-
- /* implode outline if needed */
- {
- FT_Vector* points = outline->points;
- FT_Vector* points_end = points + outline->n_points;
- FT_Vector* vec;
-
-
- if ( hmul )
- for ( vec = points; vec < points_end; vec++ )
- vec->x *= 3;
-
- if ( vmul )
- for ( vec = points; vec < points_end; vec++ )
- vec->y *= 3;
- }
-
- /* render outline into the bitmap */
- error = render->raster_render( render->raster, &params );
-
- /* deflate outline if needed */
- {
- FT_Vector* points = outline->points;
- FT_Vector* points_end = points + outline->n_points;
- FT_Vector* vec;
-
-
- if ( hmul )
- for ( vec = points; vec < points_end; vec++ )
- vec->x /= 3;
-
- if ( vmul )
- for ( vec = points; vec < points_end; vec++ )
- vec->y /= 3;
- }
-
- if ( error )
- goto Exit;
-
- if ( lcd_filter_func )
- lcd_filter_func( bitmap, mode, lcd_weights );
-
-#else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
-
- /* render outline into bitmap */
- error = render->raster_render( render->raster, &params );
- if ( error )
- goto Exit;
-
- /* expand it horizontally */
- if ( hmul )
- {
- FT_Byte* line = bitmap->buffer;
- FT_UInt hh;
-
-
- for ( hh = height_org; hh > 0; hh--, line += pitch )
- {
- FT_UInt xx;
- FT_Byte* end = line + width;
-
-
- for ( xx = width_org; xx > 0; xx-- )
- {
- FT_UInt pixel = line[xx-1];
-
-
- end[-3] = (FT_Byte)pixel;
- end[-2] = (FT_Byte)pixel;
- end[-1] = (FT_Byte)pixel;
- end -= 3;
- }
- }
- }
-
- /* expand it vertically */
- if ( vmul )
- {
- FT_Byte* read = bitmap->buffer + ( height - height_org ) * pitch;
- FT_Byte* write = bitmap->buffer;
- FT_UInt hh;
-
-
- for ( hh = height_org; hh > 0; hh-- )
- {
- ft_memcpy( write, read, pitch );
- write += pitch;
-
- ft_memcpy( write, read, pitch );
- write += pitch;
-
- ft_memcpy( write, read, pitch );
- write += pitch;
- read += pitch;
- }
- }
-
-#endif /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
-
- /* everything is fine; don't deallocate buffer */
- have_buffer = FALSE;
-
- error = FT_Err_Ok;
-
- Exit:
- if ( have_outline_shifted )
- FT_Outline_Translate( outline, -x_shift, -y_shift );
- if ( have_buffer )
- {
- FT_FREE( bitmap->buffer );
- slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
- }
-
- return error;
- }
-
-
- /* convert a slot's glyph image into a bitmap */
- static FT_Error
- ft_smooth_render( FT_Renderer render,
- FT_GlyphSlot slot,
- FT_Render_Mode mode,
- const FT_Vector* origin )
- {
- if ( mode == FT_RENDER_MODE_LIGHT )
- mode = FT_RENDER_MODE_NORMAL;
-
- return ft_smooth_render_generic( render, slot, mode, origin,
- FT_RENDER_MODE_NORMAL );
- }
-
-
- /* convert a slot's glyph image into a horizontal LCD bitmap */
- static FT_Error
- ft_smooth_render_lcd( FT_Renderer render,
- FT_GlyphSlot slot,
- FT_Render_Mode mode,
- const FT_Vector* origin )
- {
- FT_Error error;
-
- error = ft_smooth_render_generic( render, slot, mode, origin,
- FT_RENDER_MODE_LCD );
- if ( !error )
- slot->bitmap.pixel_mode = FT_PIXEL_MODE_LCD;
-
- return error;
- }
-
-
- /* convert a slot's glyph image into a vertical LCD bitmap */
- static FT_Error
- ft_smooth_render_lcd_v( FT_Renderer render,
- FT_GlyphSlot slot,
- FT_Render_Mode mode,
- const FT_Vector* origin )
- {
- FT_Error error;
-
- error = ft_smooth_render_generic( render, slot, mode, origin,
- FT_RENDER_MODE_LCD_V );
- if ( !error )
- slot->bitmap.pixel_mode = FT_PIXEL_MODE_LCD_V;
-
- return error;
- }
-
-
- FT_DEFINE_RENDERER(
- ft_smooth_renderer_class,
-
- FT_MODULE_RENDERER,
- sizeof ( FT_RendererRec ),
-
- "smooth",
- 0x10000L,
- 0x20000L,
-
- NULL, /* module specific interface */
-
- (FT_Module_Constructor)ft_smooth_init, /* module_init */
- (FT_Module_Destructor) NULL, /* module_done */
- (FT_Module_Requester) NULL, /* get_interface */
-
- FT_GLYPH_FORMAT_OUTLINE,
-
- (FT_Renderer_RenderFunc) ft_smooth_render, /* render_glyph */
- (FT_Renderer_TransformFunc)ft_smooth_transform, /* transform_glyph */
- (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox, /* get_glyph_cbox */
- (FT_Renderer_SetModeFunc) ft_smooth_set_mode, /* set_mode */
-
- (FT_Raster_Funcs*)&FT_GRAYS_RASTER_GET /* raster_class */
- )
-
-
- FT_DEFINE_RENDERER(
- ft_smooth_lcd_renderer_class,
-
- FT_MODULE_RENDERER,
- sizeof ( FT_RendererRec ),
-
- "smooth-lcd",
- 0x10000L,
- 0x20000L,
-
- NULL, /* module specific interface */
-
- (FT_Module_Constructor)ft_smooth_init, /* module_init */
- (FT_Module_Destructor) NULL, /* module_done */
- (FT_Module_Requester) NULL, /* get_interface */
-
- FT_GLYPH_FORMAT_OUTLINE,
-
- (FT_Renderer_RenderFunc) ft_smooth_render_lcd, /* render_glyph */
- (FT_Renderer_TransformFunc)ft_smooth_transform, /* transform_glyph */
- (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox, /* get_glyph_cbox */
- (FT_Renderer_SetModeFunc) ft_smooth_set_mode, /* set_mode */
-
- (FT_Raster_Funcs*)&FT_GRAYS_RASTER_GET /* raster_class */
- )
-
-
- FT_DEFINE_RENDERER(
- ft_smooth_lcdv_renderer_class,
-
- FT_MODULE_RENDERER,
- sizeof ( FT_RendererRec ),
-
- "smooth-lcdv",
- 0x10000L,
- 0x20000L,
-
- NULL, /* module specific interface */
-
- (FT_Module_Constructor)ft_smooth_init, /* module_init */
- (FT_Module_Destructor) NULL, /* module_done */
- (FT_Module_Requester) NULL, /* get_interface */
-
- FT_GLYPH_FORMAT_OUTLINE,
-
- (FT_Renderer_RenderFunc) ft_smooth_render_lcd_v, /* render_glyph */
- (FT_Renderer_TransformFunc)ft_smooth_transform, /* transform_glyph */
- (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox, /* get_glyph_cbox */
- (FT_Renderer_SetModeFunc) ft_smooth_set_mode, /* set_mode */
-
- (FT_Raster_Funcs*)&FT_GRAYS_RASTER_GET /* raster_class */
- )
-
-
-/* END */
diff --git a/src/smooth/ftsmooth.h b/src/smooth/ftsmooth.h
deleted file mode 100644
index 6dfd65726..000000000
--- a/src/smooth/ftsmooth.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsmooth.h */
-/* */
-/* Anti-aliasing renderer interface (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTSMOOTH_H_
-#define FTSMOOTH_H_
-
-
-#include <ft2build.h>
-#include FT_RENDER_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_DECLARE_RENDERER( ft_smooth_renderer_class )
-
- FT_DECLARE_RENDERER( ft_smooth_lcd_renderer_class )
-
- FT_DECLARE_RENDERER( ft_smooth_lcdv_renderer_class )
-
-
-FT_END_HEADER
-
-#endif /* FTSMOOTH_H_ */
-
-
-/* END */
diff --git a/src/smooth/ftspic.c b/src/smooth/ftspic.c
deleted file mode 100644
index fb89be348..000000000
--- a/src/smooth/ftspic.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftspic.c */
-/* */
-/* The FreeType position independent code services for smooth module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "ftspic.h"
-#include "ftsmerrs.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from ftgrays.c */
- void
- FT_Init_Class_ft_grays_raster( FT_Raster_Funcs* funcs );
-
-
- void
- ft_smooth_renderer_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->smooth )
- {
- SmoothPIC* container = (SmoothPIC*)pic_container->smooth;
-
-
- if ( --container->ref_count )
- return;
-
- FT_FREE( container );
- pic_container->smooth = NULL;
- }
- }
-
-
- FT_Error
- ft_smooth_renderer_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- SmoothPIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* since this function also serve smooth_lcd and smooth_lcdv renderers,
- it implements reference counting */
- if ( pic_container->smooth )
- {
- ((SmoothPIC*)pic_container->smooth)->ref_count++;
- return error;
- }
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->smooth = container;
-
- container->ref_count = 1;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- FT_Init_Class_ft_grays_raster( &container->ft_grays_raster );
-
- return error;
- }
-
-
- /* re-route these init and free functions to the above functions */
- FT_Error
- ft_smooth_lcd_renderer_class_pic_init( FT_Library library )
- {
- return ft_smooth_renderer_class_pic_init( library );
- }
-
-
- void
- ft_smooth_lcd_renderer_class_pic_free( FT_Library library )
- {
- ft_smooth_renderer_class_pic_free( library );
- }
-
-
- FT_Error
- ft_smooth_lcdv_renderer_class_pic_init( FT_Library library )
- {
- return ft_smooth_renderer_class_pic_init( library );
- }
-
-
- void
- ft_smooth_lcdv_renderer_class_pic_free( FT_Library library )
- {
- ft_smooth_renderer_class_pic_free( library );
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/smooth/ftspic.h b/src/smooth/ftspic.h
deleted file mode 100644
index 9ddd1c790..000000000
--- a/src/smooth/ftspic.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftspic.h */
-/* */
-/* The FreeType position independent code services for smooth module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTSPIC_H_
-#define FTSPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-FT_BEGIN_HEADER
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_GRAYS_RASTER_GET ft_grays_raster
-
-#else /* FT_CONFIG_OPTION_PIC */
-
- typedef struct SmoothPIC_
- {
- int ref_count;
- FT_Raster_Funcs ft_grays_raster;
-
- } SmoothPIC;
-
-
-#define GET_PIC( lib ) \
- ( (SmoothPIC*)( (lib)->pic_container.smooth ) )
-#define FT_GRAYS_RASTER_GET ( GET_PIC( library )->ft_grays_raster )
-
-
- /* see ftspic.c for the implementation */
- void
- ft_smooth_renderer_class_pic_free( FT_Library library );
-
- void
- ft_smooth_lcd_renderer_class_pic_free( FT_Library library );
-
- void
- ft_smooth_lcdv_renderer_class_pic_free( FT_Library library );
-
- FT_Error
- ft_smooth_renderer_class_pic_init( FT_Library library );
-
- FT_Error
- ft_smooth_lcd_renderer_class_pic_init( FT_Library library );
-
- FT_Error
- ft_smooth_lcdv_renderer_class_pic_init( FT_Library library );
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-FT_END_HEADER
-
-#endif /* FTSPIC_H_ */
-
-
-/* END */
diff --git a/src/smooth/module.mk b/src/smooth/module.mk
deleted file mode 100644
index 804e9b138..000000000
--- a/src/smooth/module.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# FreeType 2 smooth renderer module definition
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += SMOOTH_RENDERER
-
-define SMOOTH_RENDERER
-$(OPEN_DRIVER) FT_Renderer_Class, ft_smooth_renderer_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)smooth $(ECHO_DRIVER_DESC)anti-aliased bitmap renderer$(ECHO_DRIVER_DONE)
-$(OPEN_DRIVER) FT_Renderer_Class, ft_smooth_lcd_renderer_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)smooth $(ECHO_DRIVER_DESC)anti-aliased bitmap renderer for LCDs$(ECHO_DRIVER_DONE)
-$(OPEN_DRIVER) FT_Renderer_Class, ft_smooth_lcdv_renderer_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)smooth $(ECHO_DRIVER_DESC)anti-aliased bitmap renderer for vertical LCDs$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/smooth/rules.mk b/src/smooth/rules.mk
deleted file mode 100644
index dfdc9bc30..000000000
--- a/src/smooth/rules.mk
+++ /dev/null
@@ -1,74 +0,0 @@
-#
-# FreeType 2 smooth renderer module build rules
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# smooth driver directory
-#
-SMOOTH_DIR := $(SRC_DIR)/smooth
-
-
-# compilation flags for the driver
-#
-SMOOTH_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(SMOOTH_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# smooth driver sources (i.e., C files)
-#
-SMOOTH_DRV_SRC := $(SMOOTH_DIR)/ftgrays.c \
- $(SMOOTH_DIR)/ftsmooth.c \
- $(SMOOTH_DIR)/ftspic.c
-
-
-# smooth driver headers
-#
-SMOOTH_DRV_H := $(SMOOTH_DRV_SRC:%c=%h) \
- $(SMOOTH_DIR)/ftsmerrs.h
-
-
-# smooth driver object(s)
-#
-# SMOOTH_DRV_OBJ_M is used during `multi' builds.
-# SMOOTH_DRV_OBJ_S is used during `single' builds.
-#
-SMOOTH_DRV_OBJ_M := $(SMOOTH_DRV_SRC:$(SMOOTH_DIR)/%.c=$(OBJ_DIR)/%.$O)
-SMOOTH_DRV_OBJ_S := $(OBJ_DIR)/smooth.$O
-
-# smooth driver source file for single build
-#
-SMOOTH_DRV_SRC_S := $(SMOOTH_DIR)/smooth.c
-
-
-# smooth driver - single object
-#
-$(SMOOTH_DRV_OBJ_S): $(SMOOTH_DRV_SRC_S) $(SMOOTH_DRV_SRC) \
- $(FREETYPE_H) $(SMOOTH_DRV_H)
- $(SMOOTH_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(SMOOTH_DRV_SRC_S))
-
-
-# smooth driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(SMOOTH_DIR)/%.c $(FREETYPE_H) $(SMOOTH_DRV_H)
- $(SMOOTH_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(SMOOTH_DRV_OBJ_S)
-DRV_OBJS_M += $(SMOOTH_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/smooth/smooth.c b/src/smooth/smooth.c
deleted file mode 100644
index e0460d9d4..000000000
--- a/src/smooth/smooth.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/***************************************************************************/
-/* */
-/* smooth.c */
-/* */
-/* FreeType anti-aliasing rasterer module component (body only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "ftgrays.c"
-#include "ftsmooth.c"
-#include "ftspic.c"
-
-
-/* END */
diff --git a/src/tools/Jamfile b/src/tools/Jamfile
deleted file mode 100644
index 475161e07..000000000
--- a/src/tools/Jamfile
+++ /dev/null
@@ -1,5 +0,0 @@
-# Jamfile for src/tools
-#
-SubDir FT2_TOP src tools ;
-
-Main apinames : apinames.c ;
diff --git a/src/tools/afblue.pl b/src/tools/afblue.pl
deleted file mode 100644
index 027b63041..000000000
--- a/src/tools/afblue.pl
+++ /dev/null
@@ -1,551 +0,0 @@
-#! /usr/bin/perl -w
-# -*- Perl -*-
-#
-# afblue.pl
-#
-# Process a blue zone character data file.
-#
-# Copyright 2013-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-use strict;
-use warnings;
-use English '-no_match_vars';
-use open ':std', ':encoding(UTF-8)';
-
-
-my $prog = $PROGRAM_NAME;
-$prog =~ s| .* / ||x; # Remove path.
-
-die "usage: $prog datafile < infile > outfile\n" if $#ARGV != 0;
-
-
-my $datafile = $ARGV[0];
-
-my %diversions; # The extracted and massaged data from `datafile'.
-my @else_stack; # Booleans to track else-clauses.
-my @name_stack; # Stack of integers used for names of aux. variables.
-
-my $curr_enum; # Name of the current enumeration.
-my $curr_array; # Name of the current array.
-my $curr_max; # Name of the current maximum value.
-
-my $curr_enum_element; # Name of the current enumeration element.
-my $curr_offset; # The offset relative to current aux. variable.
-my $curr_elem_size; # The number of non-space characters in the current string or
- # the number of elements in the current block.
-
-my $have_sections = 0; # Boolean; set if start of a section has been seen.
-my $have_strings; # Boolean; set if current section contains strings.
-my $have_blocks; # Boolean; set if current section contains blocks.
-
-my $have_enum_element; # Boolean; set if we have an enumeration element.
-my $in_string; # Boolean; set if a string has been parsed.
-
-my $num_sections = 0; # Number of sections seen so far.
-
-my $last_aux; # Name of last auxiliary variable.
-
-
-# Regular expressions.
-
-# [<ws>] <enum_name> <ws> <array_name> <ws> <max_name> [<ws>] ':' [<ws>] '\n'
-my $section_re = qr/ ^ \s* (\S+) \s+ (\S+) \s+ (\S+) \s* : \s* $ /x;
-
-# [<ws>] <enum_element_name> [<ws>] '\n'
-my $enum_element_re = qr/ ^ \s* ( [A-Za-z0-9_]+ ) \s* $ /x;
-
-# '#' <preprocessor directive> '\n'
-my $preprocessor_re = qr/ ^ \# /x;
-
-# [<ws>] '/' '/' <comment> '\n'
-my $comment_re = qr| ^ \s* // |x;
-
-# empty line
-my $whitespace_only_re = qr/ ^ \s* $ /x;
-
-# [<ws>] '"' <string> '"' [<ws>] '\n' (<string> doesn't contain newlines)
-my $string_re = qr/ ^ \s*
- " ( (?> (?: (?> [^"\\]+ ) | \\. )* ) ) "
- \s* $ /x;
-
-# [<ws>] '{' <block> '}' [<ws>] '\n' (<block> can contain newlines)
-my $block_start_re = qr/ ^ \s* \{ /x;
-
-# We need the capturing group for `split' to make it return the separator
-# tokens (i.e., the opening and closing brace) also.
-my $brace_re = qr/ ( [{}] ) /x;
-
-
-sub Warn
-{
- my $message = shift;
- warn "$datafile:$INPUT_LINE_NUMBER: warning: $message\n";
-}
-
-
-sub Die
-{
- my $message = shift;
- die "$datafile:$INPUT_LINE_NUMBER: error: $message\n";
-}
-
-
-my $warned_before = 0;
-
-sub warn_before
-{
- Warn("data before first section gets ignored") unless $warned_before;
- $warned_before = 1;
-}
-
-
-sub strip_newline
-{
- chomp;
- s/ \x0D $ //x;
-}
-
-
-sub end_curr_string
-{
- # Append final null byte to string.
- if ($have_strings)
- {
- push @{$diversions{$curr_array}}, " '\\0',\n" if $in_string;
-
- $curr_offset++;
- $in_string = 0;
- }
-}
-
-
-sub update_max_elem_size
-{
- if ($curr_elem_size)
- {
- my $max = pop @{$diversions{$curr_max}};
- $max = $curr_elem_size if $curr_elem_size > $max;
- push @{$diversions{$curr_max}}, $max;
- }
-}
-
-
-sub convert_non_ascii_char
-{
- # A UTF-8 character outside of the printable ASCII range, with possibly a
- # leading backslash character.
- my $s = shift;
-
- # Here we count characters, not bytes.
- $curr_elem_size += length $s;
-
- utf8::encode($s);
- $s = uc unpack 'H*', $s;
-
- $curr_offset += $s =~ s/\G(..)/'\\x$1', /sg;
-
- return $s;
-}
-
-
-sub convert_ascii_chars
-{
- # A series of ASCII characters in the printable range.
- my $s = shift;
-
- # We reduce multiple space characters to a single one.
- $s =~ s/ +/ /g;
-
- # Count all non-space characters. Note that `()' applies a list context
- # to the capture that is used to count the elements.
- $curr_elem_size += () = $s =~ /[^ ]/g;
-
- $curr_offset += $s =~ s/\G(.)/'$1', /g;
-
- return $s;
-}
-
-
-sub convert_literal
-{
- my $s = shift;
- my $orig = $s;
-
- # ASCII printables and space
- my $safe_re = '\x20-\x7E';
- # ASCII printables and space, no backslash
- my $safe_no_backslash_re = '\x20-\x5B\x5D-\x7E';
-
- $s =~ s{
- (?: \\? ( [^$safe_re] )
- | ( (?: [$safe_no_backslash_re]
- | \\ [$safe_re] )+ ) )
- }
- {
- defined($1) ? convert_non_ascii_char($1)
- : convert_ascii_chars($2)
- }egx;
-
- # We assume that `$orig' doesn't contain `*/'
- return $s . " /* $orig */";
-}
-
-
-sub aux_name
-{
- return "af_blue_" . $num_sections. "_" . join('_', @name_stack);
-}
-
-
-sub aux_name_next
-{
- $name_stack[$#name_stack]++;
- my $name = aux_name();
- $name_stack[$#name_stack]--;
-
- return $name;
-}
-
-
-sub enum_val_string
-{
- # Build string that holds code to save the current offset in an
- # enumeration element.
- my $aux = shift;
-
- my $add = ($last_aux eq "af_blue_" . $num_sections . "_0" )
- ? ""
- : "$last_aux + ";
-
- return " $aux = $add$curr_offset,\n";
-}
-
-
-
-# Process data file.
-
-open(DATA, $datafile) || die "$prog: can't open \`$datafile': $OS_ERROR\n";
-
-while (<DATA>)
-{
- strip_newline();
-
- next if /$comment_re/;
- next if /$whitespace_only_re/;
-
- if (/$section_re/)
- {
- Warn("previous section is empty") if ($have_sections
- && !$have_strings
- && !$have_blocks);
-
- end_curr_string();
- update_max_elem_size();
-
- # Save captured groups from `section_re'.
- $curr_enum = $1;
- $curr_array = $2;
- $curr_max = $3;
-
- $curr_enum_element = "";
- $curr_offset = 0;
-
- Warn("overwriting already defined enumeration \`$curr_enum'")
- if exists($diversions{$curr_enum});
- Warn("overwriting already defined array \`$curr_array'")
- if exists($diversions{$curr_array});
- Warn("overwriting already defined maximum value \`$curr_max'")
- if exists($diversions{$curr_max});
-
- $diversions{$curr_enum} = [];
- $diversions{$curr_array} = [];
- $diversions{$curr_max} = [];
-
- push @{$diversions{$curr_max}}, 0;
-
- @name_stack = ();
- push @name_stack, 0;
-
- $have_sections = 1;
- $have_strings = 0;
- $have_blocks = 0;
-
- $have_enum_element = 0;
- $in_string = 0;
-
- $num_sections++;
- $curr_elem_size = 0;
-
- $last_aux = aux_name();
-
- next;
- }
-
- if (/$preprocessor_re/)
- {
- if ($have_sections)
- {
- # Having preprocessor conditionals complicates the computation of
- # correct offset values. We have to introduce auxiliary enumeration
- # elements with the name `af_blue_<s>_<n1>_<n2>_...' that store
- # offsets to be used in conditional clauses. `<s>' is the number of
- # sections seen so far, `<n1>' is the number of `#if' and `#endif'
- # conditionals seen so far in the topmost level, `<n2>' the number of
- # `#if' and `#endif' conditionals seen so far one level deeper, etc.
- # As a consequence, uneven values are used within a clause, and even
- # values after a clause, since the C standard doesn't allow the
- # redefinition of an enumeration value. For example, the name
- # `af_blue_5_1_6' is used to construct enumeration values in the fifth
- # section after the third (second-level) if-clause within the first
- # (top-level) if-clause. After the first top-level clause has
- # finished, `af_blue_5_2' is used. The current offset is then
- # relative to the value stored in the current auxiliary element.
-
- if (/ ^ \# \s* if /x)
- {
- push @else_stack, 0;
-
- $name_stack[$#name_stack]++;
-
- push @{$diversions{$curr_enum}}, enum_val_string(aux_name());
- $last_aux = aux_name();
-
- push @name_stack, 0;
-
- $curr_offset = 0;
- }
- elsif (/ ^ \# \s* elif /x)
- {
- Die("unbalanced #elif") unless @else_stack;
-
- pop @name_stack;
-
- push @{$diversions{$curr_enum}}, enum_val_string(aux_name_next());
- $last_aux = aux_name();
-
- push @name_stack, 0;
-
- $curr_offset = 0;
- }
- elsif (/ ^ \# \s* else /x)
- {
- my $prev_else = pop @else_stack;
- Die("unbalanced #else") unless defined($prev_else);
- Die("#else already seen") if $prev_else;
- push @else_stack, 1;
-
- pop @name_stack;
-
- push @{$diversions{$curr_enum}}, enum_val_string(aux_name_next());
- $last_aux = aux_name();
-
- push @name_stack, 0;
-
- $curr_offset = 0;
- }
- elsif (/ ^ (\# \s*) endif /x)
- {
- my $prev_else = pop @else_stack;
- Die("unbalanced #endif") unless defined($prev_else);
-
- pop @name_stack;
-
- # If there is no else-clause for an if-clause, we add one. This is
- # necessary to have correct offsets.
- if (!$prev_else)
- {
- # Use amount of whitespace from `endif'.
- push @{$diversions{$curr_enum}}, enum_val_string(aux_name_next())
- . $1 . "else\n";
- $last_aux = aux_name();
-
- $curr_offset = 0;
- }
-
- $name_stack[$#name_stack]++;
-
- push @{$diversions{$curr_enum}}, enum_val_string(aux_name());
- $last_aux = aux_name();
-
- $curr_offset = 0;
- }
-
- # Handle (probably continued) preprocessor lines.
- CONTINUED_LOOP:
- {
- do
- {
- strip_newline();
-
- push @{$diversions{$curr_enum}}, $ARG . "\n";
- push @{$diversions{$curr_array}}, $ARG . "\n";
-
- last CONTINUED_LOOP unless / \\ $ /x;
-
- } while (<DATA>);
- }
- }
- else
- {
- warn_before();
- }
-
- next;
- }
-
- if (/$enum_element_re/)
- {
- end_curr_string();
- update_max_elem_size();
-
- $curr_enum_element = $1;
- $have_enum_element = 1;
- $curr_elem_size = 0;
-
- next;
- }
-
- if (/$string_re/)
- {
- if ($have_sections)
- {
- Die("strings and blocks can't be mixed in a section") if $have_blocks;
-
- # Save captured group from `string_re'.
- my $string = $1;
-
- if ($have_enum_element)
- {
- push @{$diversions{$curr_enum}}, enum_val_string($curr_enum_element);
- $have_enum_element = 0;
- }
-
- $string = convert_literal($string);
-
- push @{$diversions{$curr_array}}, " $string\n";
-
- $have_strings = 1;
- $in_string = 1;
- }
- else
- {
- warn_before();
- }
-
- next;
- }
-
- if (/$block_start_re/)
- {
- if ($have_sections)
- {
- Die("strings and blocks can't be mixed in a section") if $have_strings;
-
- my $depth = 0;
- my $block = "";
- my $block_end = 0;
-
- # Count braces while getting the block.
- BRACE_LOOP:
- {
- do
- {
- strip_newline();
-
- foreach my $substring (split(/$brace_re/))
- {
- if ($block_end)
- {
- Die("invalid data after last matching closing brace")
- if $substring !~ /$whitespace_only_re/;
- }
-
- $block .= $substring;
-
- if ($substring eq '{')
- {
- $depth++;
- }
- elsif ($substring eq '}')
- {
- $depth--;
-
- $block_end = 1 if $depth == 0;
- }
- }
-
- # If we are here, we have run out of substrings, so get next line
- # or exit.
- last BRACE_LOOP if $block_end;
-
- $block .= "\n";
-
- } while (<DATA>);
- }
-
- if ($have_enum_element)
- {
- push @{$diversions{$curr_enum}}, enum_val_string($curr_enum_element);
- $have_enum_element = 0;
- }
-
- push @{$diversions{$curr_array}}, $block . ",\n";
-
- $curr_offset++;
- $curr_elem_size++;
-
- $have_blocks = 1;
- }
- else
- {
- warn_before();
- }
-
- next;
- }
-
- # Garbage. We weren't able to parse the data.
- Die("syntax error");
-}
-
-# Finalize data.
-end_curr_string();
-update_max_elem_size();
-
-
-# Filter stdin to stdout, replacing `@...@' templates.
-
-sub emit_diversion
-{
- my $diversion_name = shift;
- return (exists($diversions{$1})) ? "@{$diversions{$1}}"
- : "@" . $diversion_name . "@";
-}
-
-
-$LIST_SEPARATOR = '';
-
-my $s1 = "This file has been generated by the Perl script \`$prog',";
-my $s1len = length $s1;
-my $s2 = "using data from file \`$datafile'.";
-my $s2len = length $s2;
-my $slen = ($s1len > $s2len) ? $s1len : $s2len;
-
-print "/* " . $s1 . " " x ($slen - $s1len) . " */\n"
- . "/* " . $s2 . " " x ($slen - $s2len) . " */\n"
- . "\n";
-
-while (<STDIN>)
-{
- s/ @ ( [A-Za-z0-9_]+? ) @ / emit_diversion($1) /egx;
- print;
-}
-
-# EOF
diff --git a/src/tools/apinames.c b/src/tools/apinames.c
deleted file mode 100644
index 73bc99de5..000000000
--- a/src/tools/apinames.c
+++ /dev/null
@@ -1,466 +0,0 @@
-/*
- * This little program is used to parse the FreeType headers and
- * find the declaration of all public APIs. This is easy, because
- * they all look like the following:
- *
- * FT_EXPORT( return_type )
- * function_name( function arguments );
- *
- * You must pass the list of header files as arguments. Wildcards are
- * accepted if you are using GCC for compilation (and probably by
- * other compilers too).
- *
- * Author: David Turner, 2005, 2006, 2008-2013, 2015
- *
- * This code is explicitly placed into the public domain.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#define PROGRAM_NAME "apinames"
-#define PROGRAM_VERSION "0.2"
-
-#define LINEBUFF_SIZE 1024
-
-typedef enum OutputFormat_
-{
- OUTPUT_LIST = 0, /* output the list of names, one per line */
- OUTPUT_WINDOWS_DEF, /* output a Windows .DEF file for Visual C++ or Mingw */
- OUTPUT_BORLAND_DEF, /* output a Windows .DEF file for Borland C++ */
- OUTPUT_WATCOM_LBC, /* output a Watcom Linker Command File */
- OUTPUT_NETWARE_IMP /* output a NetWare ImportFile */
-
-} OutputFormat;
-
-
-static void
-panic( const char* message )
-{
- fprintf( stderr, "PANIC: %s\n", message );
- exit(2);
-}
-
-
-typedef struct NameRec_
-{
- char* name;
- unsigned int hash;
-
-} NameRec, *Name;
-
-static Name the_names;
-static int num_names;
-static int max_names;
-
-static void
-names_add( const char* name,
- const char* end )
-{
- unsigned int h;
- int nn, len;
- Name nm;
-
- if ( end <= name )
- return;
-
- /* compute hash value */
- len = (int)(end - name);
- h = 0;
- for ( nn = 0; nn < len; nn++ )
- h = h*33 + name[nn];
-
- /* check for an pre-existing name */
- for ( nn = 0; nn < num_names; nn++ )
- {
- nm = the_names + nn;
-
- if ( (int)nm->hash == h &&
- memcmp( name, nm->name, len ) == 0 &&
- nm->name[len] == 0 )
- return;
- }
-
- /* add new name */
- if ( num_names >= max_names )
- {
- max_names += (max_names >> 1) + 4;
- the_names = (NameRec*)realloc( the_names,
- sizeof ( the_names[0] ) * max_names );
- if ( !the_names )
- panic( "not enough memory" );
- }
- nm = &the_names[num_names++];
-
- nm->hash = h;
- nm->name = (char*)malloc( len+1 );
- if ( !nm->name )
- panic( "not enough memory" );
-
- memcpy( nm->name, name, len );
- nm->name[len] = 0;
-}
-
-
-static int
-name_compare( const void* name1,
- const void* name2 )
-{
- Name n1 = (Name)name1;
- Name n2 = (Name)name2;
-
- return strcmp( n1->name, n2->name );
-}
-
-static void
-names_sort( void )
-{
- qsort( the_names, (size_t)num_names,
- sizeof ( the_names[0] ), name_compare );
-}
-
-
-static void
-names_dump( FILE* out,
- OutputFormat format,
- const char* dll_name )
-{
- int nn;
-
-
- switch ( format )
- {
- case OUTPUT_WINDOWS_DEF:
- if ( dll_name )
- fprintf( out, "LIBRARY %s\n", dll_name );
-
- fprintf( out, "DESCRIPTION FreeType 2 DLL\n" );
- fprintf( out, "EXPORTS\n" );
- for ( nn = 0; nn < num_names; nn++ )
- fprintf( out, " %s\n", the_names[nn].name );
- break;
-
- case OUTPUT_BORLAND_DEF:
- if ( dll_name )
- fprintf( out, "LIBRARY %s\n", dll_name );
-
- fprintf( out, "DESCRIPTION FreeType 2 DLL\n" );
- fprintf( out, "EXPORTS\n" );
- for ( nn = 0; nn < num_names; nn++ )
- fprintf( out, " _%s\n", the_names[nn].name );
- break;
-
- case OUTPUT_WATCOM_LBC:
- {
- const char* dot;
- char temp[512];
-
-
- if ( !dll_name )
- {
- fprintf( stderr,
- "you must provide a DLL name with the -d option!\n" );
- exit( 4 );
- }
-
- /* we must omit the .dll suffix from the library name */
- dot = strchr( dll_name, '.' );
- if ( dot )
- {
- int len = dot - dll_name;
-
-
- if ( len > (int)( sizeof ( temp ) - 1 ) )
- len = sizeof ( temp ) - 1;
-
- memcpy( temp, dll_name, len );
- temp[len] = 0;
-
- dll_name = (const char*)temp;
- }
-
- for ( nn = 0; nn < num_names; nn++ )
- fprintf( out, "++_%s.%s.%s\n", the_names[nn].name, dll_name,
- the_names[nn].name );
- }
- break;
-
- case OUTPUT_NETWARE_IMP:
- {
- if ( dll_name )
- fprintf( out, " (%s)\n", dll_name );
- for ( nn = 0; nn < num_names - 1; nn++ )
- fprintf( out, " %s,\n", the_names[nn].name );
- fprintf( out, " %s\n", the_names[num_names - 1].name );
- }
- break;
-
- default: /* LIST */
- for ( nn = 0; nn < num_names; nn++ )
- fprintf( out, "%s\n", the_names[nn].name );
- }
-}
-
-
-
-
-/* states of the line parser */
-
-typedef enum State_
-{
- STATE_START = 0, /* waiting for FT_EXPORT keyword and return type */
- STATE_TYPE /* type was read, waiting for function name */
-
-} State;
-
-static int
-read_header_file( FILE* file, int verbose )
-{
- static char buff[LINEBUFF_SIZE + 1];
- State state = STATE_START;
-
- while ( !feof( file ) )
- {
- char* p;
-
- if ( !fgets( buff, LINEBUFF_SIZE, file ) )
- break;
-
- p = buff;
-
- while ( *p && (*p == ' ' || *p == '\\') ) /* skip leading whitespace */
- p++;
-
- if ( *p == '\n' || *p == '\r' ) /* skip empty lines */
- continue;
-
- switch ( state )
- {
- case STATE_START:
- {
- if ( memcmp( p, "FT_EXPORT(", 10 ) != 0 )
- break;
-
- p += 10;
- for (;;)
- {
- if ( *p == 0 || *p == '\n' || *p == '\r' )
- goto NextLine;
-
- if ( *p == ')' )
- {
- p++;
- break;
- }
-
- p++;
- }
-
- state = STATE_TYPE;
-
- /* sometimes, the name is just after the FT_EXPORT(...), so
- * skip whitespace, and fall-through if we find an alphanumeric
- * character
- */
- while ( *p == ' ' || *p == '\t' )
- p++;
-
- if ( !isalpha(*p) )
- break;
- }
- /* fall-through */
-
- case STATE_TYPE:
- {
- char* name = p;
-
- while ( isalnum(*p) || *p == '_' )
- p++;
-
- if ( p > name )
- {
- if ( verbose )
- fprintf( stderr, ">>> %.*s\n", (int)(p - name), name );
-
- names_add( name, p );
- }
-
- state = STATE_START;
- }
- break;
-
- default:
- ;
- }
-
- NextLine:
- ;
- }
-
- return 0;
-}
-
-
-static void
-usage( void )
-{
- static const char* const format =
- "%s %s: extract FreeType API names from header files\n\n"
- "this program is used to extract the list of public FreeType API\n"
- "functions. It receives the list of header files as argument and\n"
- "generates a sorted list of unique identifiers\n\n"
-
- "usage: %s header1 [options] [header2 ...]\n\n"
-
- "options: - : parse the content of stdin, ignore arguments\n"
- " -v : verbose mode, output sent to standard error\n"
- " -oFILE : write output to FILE instead of standard output\n"
- " -dNAME : indicate DLL file name, 'freetype.dll' by default\n"
- " -w : output .DEF file for Visual C++ and Mingw\n"
- " -wB : output .DEF file for Borland C++\n"
- " -wW : output Watcom Linker Response File\n"
- " -wN : output NetWare Import File\n"
- "\n";
-
- fprintf( stderr,
- format,
- PROGRAM_NAME,
- PROGRAM_VERSION,
- PROGRAM_NAME
- );
- exit(1);
-}
-
-
-int main( int argc, const char* const* argv )
-{
- int from_stdin = 0;
- int verbose = 0;
- OutputFormat format = OUTPUT_LIST; /* the default */
- FILE* out = stdout;
- const char* library_name = NULL;
-
- if ( argc < 2 )
- usage();
-
- /* '-' used as a single argument means read source file from stdin */
- while ( argc > 1 && argv[1][0] == '-' )
- {
- const char* arg = argv[1];
-
- switch ( arg[1] )
- {
- case 'v':
- verbose = 1;
- break;
-
- case 'o':
- if ( arg[2] == 0 )
- {
- if ( argc < 2 )
- usage();
-
- arg = argv[2];
- argv++;
- argc--;
- }
- else
- arg += 2;
-
- out = fopen( arg, "wt" );
- if ( !out )
- {
- fprintf( stderr, "could not open '%s' for writing\n", argv[2] );
- exit(3);
- }
- break;
-
- case 'd':
- if ( arg[2] == 0 )
- {
- if ( argc < 2 )
- usage();
-
- arg = argv[2];
- argv++;
- argc--;
- }
- else
- arg += 2;
-
- library_name = arg;
- break;
-
- case 'w':
- format = OUTPUT_WINDOWS_DEF;
- switch ( arg[2] )
- {
- case 'B':
- format = OUTPUT_BORLAND_DEF;
- break;
-
- case 'W':
- format = OUTPUT_WATCOM_LBC;
- break;
-
- case 'N':
- format = OUTPUT_NETWARE_IMP;
- break;
-
- case 0:
- break;
-
- default:
- usage();
- }
- break;
-
- case 0:
- from_stdin = 1;
- break;
-
- default:
- usage();
- }
-
- argc--;
- argv++;
- }
-
- if ( from_stdin )
- {
- read_header_file( stdin, verbose );
- }
- else
- {
- for ( --argc, argv++; argc > 0; argc--, argv++ )
- {
- FILE* file = fopen( argv[0], "rb" );
-
- if ( !file )
- fprintf( stderr, "unable to open '%s'\n", argv[0] );
- else
- {
- if ( verbose )
- fprintf( stderr, "opening '%s'\n", argv[0] );
-
- read_header_file( file, verbose );
- fclose( file );
- }
- }
- }
-
- if ( num_names == 0 )
- panic( "could not find exported functions !!\n" );
-
- names_sort();
- names_dump( out, format, library_name );
-
- if ( out != stdout )
- fclose( out );
-
- return 0;
-}
diff --git a/src/tools/chktrcmp.py b/src/tools/chktrcmp.py
deleted file mode 100755
index 4c40bdafd..000000000
--- a/src/tools/chktrcmp.py
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/env python
-#
-# Check trace components in FreeType 2 source.
-# Author: suzuki toshiya, 2009, 2013
-#
-# This code is explicitly into the public domain.
-
-
-import sys
-import os
-import re
-
-SRC_FILE_LIST = []
-USED_COMPONENT = {}
-KNOWN_COMPONENT = {}
-
-SRC_FILE_DIRS = [ "src" ]
-TRACE_DEF_FILES = [ "include/freetype/internal/fttrace.h" ]
-
-
-# --------------------------------------------------------------
-# Parse command line options
-#
-
-for i in range( 1, len( sys.argv ) ):
- if sys.argv[i].startswith( "--help" ):
- print "Usage: %s [option]" % sys.argv[0]
- print "Search used-but-defined and defined-but-not-used trace_XXX macros"
- print ""
- print " --help:"
- print " Show this help"
- print ""
- print " --src-dirs=dir1:dir2:..."
- print " Specify the directories of C source files to be checked"
- print " Default is %s" % ":".join( SRC_FILE_DIRS )
- print ""
- print " --def-files=file1:file2:..."
- print " Specify the header files including FT_TRACE_DEF()"
- print " Default is %s" % ":".join( TRACE_DEF_FILES )
- print ""
- exit(0)
- if sys.argv[i].startswith( "--src-dirs=" ):
- SRC_FILE_DIRS = sys.argv[i].replace( "--src-dirs=", "", 1 ).split( ":" )
- elif sys.argv[i].startswith( "--def-files=" ):
- TRACE_DEF_FILES = sys.argv[i].replace( "--def-files=", "", 1 ).split( ":" )
-
-
-# --------------------------------------------------------------
-# Scan C source and header files using trace macros.
-#
-
-c_pathname_pat = re.compile( '^.*\.[ch]$', re.IGNORECASE )
-trace_use_pat = re.compile( '^[ \t]*#define[ \t]+FT_COMPONENT[ \t]+trace_' )
-
-for d in SRC_FILE_DIRS:
- for ( p, dlst, flst ) in os.walk( d ):
- for f in flst:
- if c_pathname_pat.match( f ) != None:
- src_pathname = os.path.join( p, f )
-
- line_num = 0
- for src_line in open( src_pathname, 'r' ):
- line_num = line_num + 1
- src_line = src_line.strip()
- if trace_use_pat.match( src_line ) != None:
- component_name = trace_use_pat.sub( '', src_line )
- if component_name in USED_COMPONENT:
- USED_COMPONENT[component_name].append( "%s:%d" % ( src_pathname, line_num ) )
- else:
- USED_COMPONENT[component_name] = [ "%s:%d" % ( src_pathname, line_num ) ]
-
-
-# --------------------------------------------------------------
-# Scan header file(s) defining trace macros.
-#
-
-trace_def_pat_opn = re.compile( '^.*FT_TRACE_DEF[ \t]*\([ \t]*' )
-trace_def_pat_cls = re.compile( '[ \t\)].*$' )
-
-for f in TRACE_DEF_FILES:
- line_num = 0
- for hdr_line in open( f, 'r' ):
- line_num = line_num + 1
- hdr_line = hdr_line.strip()
- if trace_def_pat_opn.match( hdr_line ) != None:
- component_name = trace_def_pat_opn.sub( '', hdr_line )
- component_name = trace_def_pat_cls.sub( '', component_name )
- if component_name in KNOWN_COMPONENT:
- print "trace component %s is defined twice, see %s and fttrace.h:%d" % \
- ( component_name, KNOWN_COMPONENT[component_name], line_num )
- else:
- KNOWN_COMPONENT[component_name] = "%s:%d" % \
- ( os.path.basename( f ), line_num )
-
-
-# --------------------------------------------------------------
-# Compare the used and defined trace macros.
-#
-
-print "# Trace component used in the implementations but not defined in fttrace.h."
-cmpnt = USED_COMPONENT.keys()
-cmpnt.sort()
-for c in cmpnt:
- if c not in KNOWN_COMPONENT:
- print "Trace component %s (used in %s) is not defined." % ( c, ", ".join( USED_COMPONENT[c] ) )
-
-print "# Trace component is defined but not used in the implementations."
-cmpnt = KNOWN_COMPONENT.keys()
-cmpnt.sort()
-for c in cmpnt:
- if c not in USED_COMPONENT:
- if c != "any":
- print "Trace component %s (defined in %s) is not used." % ( c, KNOWN_COMPONENT[c] )
-
diff --git a/src/tools/cordic.py b/src/tools/cordic.py
deleted file mode 100644
index 6742c90df..000000000
--- a/src/tools/cordic.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# compute arctangent table for CORDIC computations in fttrigon.c
-import sys, math
-
-#units = 64*65536.0 # don't change !!
-units = 180 * 2**16
-scale = units/math.pi
-shrink = 1.0
-comma = ""
-
-print ""
-print "table of arctan( 1/2^n ) for PI = " + repr(units/65536.0) + " units"
-
-for n in range(1,32):
-
- x = 0.5**n # tangent value
-
- angle = math.atan(x) # arctangent
- angle2 = round(angle*scale) # arctangent in FT_Angle units
-
- if angle2 <= 0:
- break
-
- sys.stdout.write( comma + repr( int(angle2) ) )
- comma = ", "
-
- shrink /= math.sqrt( 1 + x*x )
-
-print
-print "shrink factor = " + repr( shrink )
-print "shrink factor 2 = " + repr( int( shrink * (2**32) ) )
-print "expansion factor = " + repr( 1/shrink )
-print ""
-
diff --git a/src/tools/docmaker/.gitignore b/src/tools/docmaker/.gitignore
deleted file mode 100644
index 0d20b6487..000000000
--- a/src/tools/docmaker/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.pyc
diff --git a/src/tools/docmaker/content.py b/src/tools/docmaker/content.py
deleted file mode 100644
index 283d81518..000000000
--- a/src/tools/docmaker/content.py
+++ /dev/null
@@ -1,655 +0,0 @@
-#
-# content.py
-#
-# Parse comment blocks to build content blocks (library file).
-#
-# Copyright 2002-2017 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-#
-# This file contains routines to parse documentation comment blocks,
-# building more structured objects out of them.
-#
-
-
-from sources import *
-from utils import *
-
-import string, re
-
-
-#
-# Regular expressions to detect code sequences. `Code sequences' are simply
-# code fragments embedded in '{' and '}', as demonstrated in the following
-# example.
-#
-# {
-# x = y + z;
-# if ( zookoo == 2 )
-# {
-# foobar();
-# }
-# }
-#
-# Note that the indentation of the first opening brace and the last closing
-# brace must be exactly the same. The code sequence itself should have a
-# larger indentation than the surrounding braces.
-#
-re_code_start = re.compile( r"(\s*){\s*$" )
-re_code_end = re.compile( r"(\s*)}\s*$" )
-
-
-#
-# A regular expression to isolate identifiers from other text. Two syntax
-# forms are supported:
-#
-# <name>
-# <name>[<id>]
-#
-# where both `<name>' and `<id>' consist of alphanumeric characters, `_',
-# and `-'. Use `<id>' if there are multiple, valid `<name>' entries; in the
-# index, `<id>' will be appended in parentheses.
-#
-# For example,
-#
-# stem_darkening[autofit]
-#
-# becomes `stem_darkening (autofit)' in the index.
-#
-re_identifier = re.compile( r"""
- ((?:\w|-)+
- (?:\[(?:\w|-)+\])?)
- """, re.VERBOSE )
-
-
-#
-# We collect macro names ending in `_H' (group 1), as defined in
-# `freetype/config/ftheader.h'. While outputting the object data, we use
-# this info together with the object's file location (group 2) to emit the
-# appropriate header file macro and its associated file name before the
-# object itself.
-#
-# Example:
-#
-# #define FT_FREETYPE_H <freetype.h>
-#
-re_header_macro = re.compile( r'^#define\s{1,}(\w{1,}_H)\s{1,}<(.*)>' )
-
-
-################################################################
-##
-## DOC CODE CLASS
-##
-## The `DocCode' class is used to store source code lines.
-##
-## `self.lines' contains a set of source code lines that will be dumped as
-## HTML in a <PRE> tag.
-##
-## The object is filled line by line by the parser; it strips the leading
-## `margin' space from each input line before storing it in `self.lines'.
-##
-class DocCode:
-
- def __init__( self, margin, lines ):
- self.lines = []
- self.words = None
-
- # remove margin spaces
- for l in lines:
- if string.strip( l[:margin] ) == "":
- l = l[margin:]
- self.lines.append( l )
-
- def dump( self, prefix = "", width = 60 ):
- lines = self.dump_lines( 0, width )
- for l in lines:
- print prefix + l
-
- def dump_lines( self, margin = 0, width = 60 ):
- result = []
- for l in self.lines:
- result.append( " " * margin + l )
- return result
-
-
-
-################################################################
-##
-## DOC PARA CLASS
-##
-## `Normal' text paragraphs are stored in the `DocPara' class.
-##
-## `self.words' contains the list of words that make up the paragraph.
-##
-class DocPara:
-
- def __init__( self, lines ):
- self.lines = None
- self.words = []
- for l in lines:
- l = string.strip( l )
- self.words.extend( string.split( l ) )
-
- def dump( self, prefix = "", width = 60 ):
- lines = self.dump_lines( 0, width )
- for l in lines:
- print prefix + l
-
- def dump_lines( self, margin = 0, width = 60 ):
- cur = "" # current line
- col = 0 # current width
- result = []
-
- for word in self.words:
- ln = len( word )
- if col > 0:
- ln = ln + 1
-
- if col + ln > width:
- result.append( " " * margin + cur )
- cur = word
- col = len( word )
- else:
- if col > 0:
- cur = cur + " "
- cur = cur + word
- col = col + ln
-
- if col > 0:
- result.append( " " * margin + cur )
-
- return result
-
-
-################################################################
-##
-## DOC FIELD CLASS
-##
-## The `DocField' class stores a list containing either `DocPara' or
-## `DocCode' objects. Each DocField object also has an optional `name'
-## that is used when the object corresponds to a field or value definition.
-##
-class DocField:
-
- def __init__( self, name, lines ):
- self.name = name # can be `None' for normal paragraphs/sources
- self.items = [] # list of items
-
- mode_none = 0 # start parsing mode
- mode_code = 1 # parsing code sequences
- mode_para = 3 # parsing normal paragraph
-
- margin = -1 # current code sequence indentation
- cur_lines = []
-
- # analyze the markup lines to check whether they contain paragraphs,
- # code sequences, or fields definitions
- #
- start = 0
- mode = mode_none
-
- for l in lines:
- # are we parsing a code sequence?
- if mode == mode_code:
- m = re_code_end.match( l )
- if m and len( m.group( 1 ) ) <= margin:
- # that's it, we finished the code sequence
- code = DocCode( 0, cur_lines )
- self.items.append( code )
- margin = -1
- cur_lines = []
- mode = mode_none
- else:
- # otherwise continue the code sequence
- cur_lines.append( l[margin:] )
- else:
- # start of code sequence?
- m = re_code_start.match( l )
- if m:
- # save current lines
- if cur_lines:
- para = DocPara( cur_lines )
- self.items.append( para )
- cur_lines = []
-
- # switch to code extraction mode
- margin = len( m.group( 1 ) )
- mode = mode_code
- else:
- if not string.split( l ) and cur_lines:
- # if the line is empty, we end the current paragraph,
- # if any
- para = DocPara( cur_lines )
- self.items.append( para )
- cur_lines = []
- else:
- # otherwise, simply add the line to the current
- # paragraph
- cur_lines.append( l )
-
- if mode == mode_code:
- # unexpected end of code sequence
- code = DocCode( margin, cur_lines )
- self.items.append( code )
- elif cur_lines:
- para = DocPara( cur_lines )
- self.items.append( para )
-
- def dump( self, prefix = "" ):
- if self.field:
- print prefix + self.field + " ::"
- prefix = prefix + "----"
-
- first = 1
- for p in self.items:
- if not first:
- print ""
- p.dump( prefix )
- first = 0
-
- def dump_lines( self, margin = 0, width = 60 ):
- result = []
- nl = None
-
- for p in self.items:
- if nl:
- result.append( "" )
-
- result.extend( p.dump_lines( margin, width ) )
- nl = 1
-
- return result
-
-
-#
-# A regular expression to detect field definitions.
-#
-# Examples:
-#
-# foo ::
-# foo.bar ::
-#
-re_field = re.compile( r"""
- \s*
- (
- \w*
- |
- \w (\w | \.)* \w
- )
- \s* ::
- """, re.VERBOSE )
-
-
-################################################################
-##
-## DOC MARKUP CLASS
-##
-class DocMarkup:
-
- def __init__( self, tag, lines ):
- self.tag = string.lower( tag )
- self.fields = []
-
- cur_lines = []
- field = None
- mode = 0
-
- for l in lines:
- m = re_field.match( l )
- if m:
- # We detected the start of a new field definition.
-
- # first, save the current one
- if cur_lines:
- f = DocField( field, cur_lines )
- self.fields.append( f )
- cur_lines = []
- field = None
-
- field = m.group( 1 ) # record field name
- ln = len( m.group( 0 ) )
- l = " " * ln + l[ln:]
- cur_lines = [l]
- else:
- cur_lines.append( l )
-
- if field or cur_lines:
- f = DocField( field, cur_lines )
- self.fields.append( f )
-
- def get_name( self ):
- try:
- return self.fields[0].items[0].words[0]
- except:
- return None
-
- def dump( self, margin ):
- print " " * margin + "<" + self.tag + ">"
- for f in self.fields:
- f.dump( " " )
- print " " * margin + "</" + self.tag + ">"
-
-
-################################################################
-##
-## DOC CHAPTER CLASS
-##
-class DocChapter:
-
- def __init__( self, block ):
- self.block = block
- self.sections = []
- if block:
- self.name = block.name
- self.title = block.get_markup_words( "title" )
- self.order = block.get_markup_words( "sections" )
- else:
- self.name = "Other"
- self.title = string.split( "Miscellaneous" )
- self.order = []
-
-
-################################################################
-##
-## DOC SECTION CLASS
-##
-class DocSection:
-
- def __init__( self, name = "Other" ):
- self.name = name
- self.blocks = {}
- self.block_names = [] # ordered block names in section
- self.defs = []
- self.abstract = ""
- self.description = ""
- self.order = []
- self.title = "ERROR"
- self.chapter = None
-
- def add_def( self, block ):
- self.defs.append( block )
-
- def add_block( self, block ):
- self.block_names.append( block.name )
- self.blocks[block.name] = block
-
- def process( self ):
- # look up one block that contains a valid section description
- for block in self.defs:
- title = block.get_markup_text( "title" )
- if title:
- self.title = title
- self.abstract = block.get_markup_words( "abstract" )
- self.description = block.get_markup_items( "description" )
- self.order = block.get_markup_words_all( "order" )
- return
-
- def reorder( self ):
- self.block_names = sort_order_list( self.block_names, self.order )
-
-
-################################################################
-##
-## CONTENT PROCESSOR CLASS
-##
-class ContentProcessor:
-
- def __init__( self ):
- """Initialize a block content processor."""
- self.reset()
-
- self.sections = {} # dictionary of documentation sections
- self.section = None # current documentation section
-
- self.chapters = [] # list of chapters
-
- self.headers = {} # dictionary of header macros
-
- def set_section( self, section_name ):
- """Set current section during parsing."""
- if not section_name in self.sections:
- section = DocSection( section_name )
- self.sections[section_name] = section
- self.section = section
- else:
- self.section = self.sections[section_name]
-
- def add_chapter( self, block ):
- chapter = DocChapter( block )
- self.chapters.append( chapter )
-
- def reset( self ):
- """Reset the content processor for a new block."""
- self.markups = []
- self.markup = None
- self.markup_lines = []
-
- def add_markup( self ):
- """Add a new markup section."""
- if self.markup and self.markup_lines:
-
- # get rid of last line of markup if it's empty
- marks = self.markup_lines
- if len( marks ) > 0 and not string.strip( marks[-1] ):
- self.markup_lines = marks[:-1]
-
- m = DocMarkup( self.markup, self.markup_lines )
-
- self.markups.append( m )
-
- self.markup = None
- self.markup_lines = []
-
- def process_content( self, content ):
- """Process a block content and return a list of DocMarkup objects
- corresponding to it."""
- markup = None
- markup_lines = []
- first = 1
-
- for line in content:
- found = None
- for t in re_markup_tags:
- m = t.match( line )
- if m:
- found = string.lower( m.group( 1 ) )
- prefix = len( m.group( 0 ) )
- line = " " * prefix + line[prefix:] # remove markup from line
- break
-
- # is it the start of a new markup section ?
- if found:
- first = 0
- self.add_markup() # add current markup content
- self.markup = found
- if len( string.strip( line ) ) > 0:
- self.markup_lines.append( line )
- elif first == 0:
- self.markup_lines.append( line )
-
- self.add_markup()
-
- return self.markups
-
- def parse_sources( self, source_processor ):
- blocks = source_processor.blocks
- count = len( blocks )
-
- for n in range( count ):
- source = blocks[n]
- if source.content:
- # this is a documentation comment, we need to catch
- # all following normal blocks in the "follow" list
- #
- follow = []
- m = n + 1
- while m < count and not blocks[m].content:
- follow.append( blocks[m] )
- m = m + 1
-
- doc_block = DocBlock( source, follow, self )
-
- def finish( self ):
- # process all sections to extract their abstract, description
- # and ordered list of items
- #
- for sec in self.sections.values():
- sec.process()
-
- # process chapters to check that all sections are correctly
- # listed there
- for chap in self.chapters:
- for sec in chap.order:
- if sec in self.sections:
- section = self.sections[sec]
- section.chapter = chap
- section.reorder()
- chap.sections.append( section )
- else:
- sys.stderr.write( "WARNING: chapter '" + \
- chap.name + "' in " + chap.block.location() + \
- " lists unknown section '" + sec + "'\n" )
-
- # check that all sections are in a chapter
- #
- others = []
- for sec in self.sections.values():
- if not sec.chapter:
- sec.reorder()
- others.append( sec )
-
- # create a new special chapter for all remaining sections
- # when necessary
- #
- if others:
- chap = DocChapter( None )
- chap.sections = others
- self.chapters.append( chap )
-
-
-################################################################
-##
-## DOC BLOCK CLASS
-##
-class DocBlock:
-
- def __init__( self, source, follow, processor ):
- processor.reset()
-
- self.source = source
- self.code = []
- self.type = "ERRTYPE"
- self.name = "ERRNAME"
- self.section = processor.section
- self.markups = processor.process_content( source.content )
-
- # compute block type from first markup tag
- try:
- self.type = self.markups[0].tag
- except:
- pass
-
- # compute block name from first markup paragraph
- try:
- markup = self.markups[0]
- para = markup.fields[0].items[0]
- name = para.words[0]
- m = re_identifier.match( name )
- if m:
- name = m.group( 1 )
- self.name = name
- except:
- pass
-
- if self.type == "section":
- # detect new section starts
- processor.set_section( self.name )
- processor.section.add_def( self )
- elif self.type == "chapter":
- # detect new chapter
- processor.add_chapter( self )
- else:
- processor.section.add_block( self )
-
- # now, compute the source lines relevant to this documentation
- # block. We keep normal comments in for obvious reasons (??)
- source = []
- for b in follow:
- if b.format:
- break
- for l in b.lines:
- # collect header macro definitions
- m = re_header_macro.match( l )
- if m:
- processor.headers[m.group( 2 )] = m.group( 1 );
-
- # we use "/* */" as a separator
- if re_source_sep.match( l ):
- break
- source.append( l )
-
- # now strip the leading and trailing empty lines from the sources
- start = 0
- end = len( source ) - 1
-
- while start < end and not string.strip( source[start] ):
- start = start + 1
-
- while start < end and not string.strip( source[end] ):
- end = end - 1
-
- if start == end and not string.strip( source[start] ):
- self.code = []
- else:
- self.code = source[start:end + 1]
-
- def location( self ):
- return self.source.location()
-
- def get_markup( self, tag_name ):
- """Return the DocMarkup corresponding to a given tag in a block."""
- for m in self.markups:
- if m.tag == string.lower( tag_name ):
- return m
- return None
-
- def get_markup_words( self, tag_name ):
- try:
- m = self.get_markup( tag_name )
- return m.fields[0].items[0].words
- except:
- return []
-
- def get_markup_words_all( self, tag_name ):
- try:
- m = self.get_markup( tag_name )
- words = []
- for item in m.fields[0].items:
- # We honour empty lines in an `<Order>' section element by
- # adding the sentinel `/empty/'. The formatter should then
- # convert it to an appropriate representation in the
- # `section_enter' function.
- words += item.words
- words.append( "/empty/" )
- return words
- except:
- return []
-
- def get_markup_text( self, tag_name ):
- result = self.get_markup_words( tag_name )
- return string.join( result )
-
- def get_markup_items( self, tag_name ):
- try:
- m = self.get_markup( tag_name )
- return m.fields[0].items
- except:
- return None
-
-# eof
diff --git a/src/tools/docmaker/docbeauty.py b/src/tools/docmaker/docbeauty.py
deleted file mode 100644
index 3ddf4a94a..000000000
--- a/src/tools/docmaker/docbeauty.py
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/usr/bin/env python
-#
-# DocBeauty (c) 2003, 2004, 2008 David Turner <david@freetype.org>
-#
-# This program is used to beautify the documentation comments used
-# in the FreeType 2 public headers.
-#
-
-from sources import *
-from content import *
-from utils import *
-
-import utils
-
-import sys, os, time, string, getopt
-
-
-content_processor = ContentProcessor()
-
-
-def beautify_block( block ):
- if block.content:
- content_processor.reset()
-
- markups = content_processor.process_content( block.content )
- text = []
- first = 1
-
- for markup in markups:
- text.extend( markup.beautify( first ) )
- first = 0
-
- # now beautify the documentation "borders" themselves
- lines = [" /*************************************************************************"]
- for l in text:
- lines.append( " *" + l )
- lines.append( " */" )
-
- block.lines = lines
-
-
-def usage():
- print "\nDocBeauty 0.1 Usage information\n"
- print " docbeauty [options] file1 [file2 ...]\n"
- print "using the following options:\n"
- print " -h : print this page"
- print " -b : backup original files with the 'orig' extension"
- print ""
- print " --backup : same as -b"
-
-
-def main( argv ):
- """main program loop"""
-
- global output_dir
-
- try:
- opts, args = getopt.getopt( sys.argv[1:], \
- "hb", \
- ["help", "backup"] )
- except getopt.GetoptError:
- usage()
- sys.exit( 2 )
-
- if args == []:
- usage()
- sys.exit( 1 )
-
- # process options
- #
- output_dir = None
- do_backup = None
-
- for opt in opts:
- if opt[0] in ( "-h", "--help" ):
- usage()
- sys.exit( 0 )
-
- if opt[0] in ( "-b", "--backup" ):
- do_backup = 1
-
- # create context and processor
- source_processor = SourceProcessor()
-
- # retrieve the list of files to process
- file_list = make_file_list( args )
- for filename in file_list:
- source_processor.parse_file( filename )
-
- for block in source_processor.blocks:
- beautify_block( block )
-
- new_name = filename + ".new"
- ok = None
-
- try:
- file = open( new_name, "wt" )
- for block in source_processor.blocks:
- for line in block.lines:
- file.write( line )
- file.write( "\n" )
- file.close()
- except:
- ok = 0
-
-
-# if called from the command line
-#
-if __name__ == '__main__':
- main( sys.argv )
-
-
-# eof
diff --git a/src/tools/docmaker/docmaker.py b/src/tools/docmaker/docmaker.py
deleted file mode 100644
index 4e25ff0f8..000000000
--- a/src/tools/docmaker/docmaker.py
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/usr/bin/env python
-#
-# docmaker.py
-#
-# Convert source code markup to HTML documentation.
-#
-# Copyright 2002-2017 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-#
-# This program is a re-write of the original DocMaker tool used to generate
-# the API Reference of the FreeType font rendering engine by converting
-# in-source comments into structured HTML.
-#
-# This new version is capable of outputting XML data as well as accepting
-# more liberal formatting options. It also uses regular expression matching
-# and substitution to speed up operation significantly.
-#
-
-from sources import *
-from content import *
-from utils import *
-from formatter import *
-from tohtml import *
-
-import utils
-
-import sys, os, time, string, glob, getopt
-
-
-def usage():
- print "\nDocMaker Usage information\n"
- print " docmaker [options] file1 [file2 ...]\n"
- print "using the following options:\n"
- print " -h : print this page"
- print " -t : set project title, as in '-t \"My Project\"'"
- print " -o : set output directory, as in '-o mydir'"
- print " -p : set documentation prefix, as in '-p ft2'"
- print ""
- print " --title : same as -t, as in '--title=\"My Project\"'"
- print " --output : same as -o, as in '--output=mydir'"
- print " --prefix : same as -p, as in '--prefix=ft2'"
-
-
-def main( argv ):
- """Main program loop."""
-
- global output_dir
-
- try:
- opts, args = getopt.getopt( sys.argv[1:],
- "ht:o:p:",
- ["help", "title=", "output=", "prefix="] )
- except getopt.GetoptError:
- usage()
- sys.exit( 2 )
-
- if args == []:
- usage()
- sys.exit( 1 )
-
- # process options
- project_title = "Project"
- project_prefix = None
- output_dir = None
-
- for opt in opts:
- if opt[0] in ( "-h", "--help" ):
- usage()
- sys.exit( 0 )
-
- if opt[0] in ( "-t", "--title" ):
- project_title = opt[1]
-
- if opt[0] in ( "-o", "--output" ):
- utils.output_dir = opt[1]
-
- if opt[0] in ( "-p", "--prefix" ):
- project_prefix = opt[1]
-
- check_output()
-
- # create context and processor
- source_processor = SourceProcessor()
- content_processor = ContentProcessor()
-
- # retrieve the list of files to process
- file_list = make_file_list( args )
- for filename in file_list:
- source_processor.parse_file( filename )
- content_processor.parse_sources( source_processor )
-
- # process sections
- content_processor.finish()
-
- formatter = HtmlFormatter( content_processor,
- project_title,
- project_prefix )
-
- formatter.toc_dump()
- formatter.index_dump()
- formatter.section_dump_all()
-
-
-# if called from the command line
-if __name__ == '__main__':
- main( sys.argv )
-
-# eof
diff --git a/src/tools/docmaker/formatter.py b/src/tools/docmaker/formatter.py
deleted file mode 100644
index 2745754f3..000000000
--- a/src/tools/docmaker/formatter.py
+++ /dev/null
@@ -1,228 +0,0 @@
-#
-# formatter.py
-#
-# Convert parsed content blocks to a structured document (library file).
-#
-# Copyright 2002-2017 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-#
-# This is the base Formatter class. Its purpose is to convert a content
-# processor's data into specific documents (i.e., table of contents, global
-# index, and individual API reference indices).
-#
-# You need to sub-class it to output anything sensible. For example, the
-# file `tohtml.py' contains the definition of the `HtmlFormatter' sub-class
-# to output HTML.
-#
-
-
-from sources import *
-from content import *
-from utils import *
-
-
-################################################################
-##
-## FORMATTER CLASS
-##
-class Formatter:
-
- def __init__( self, processor ):
- self.processor = processor
- self.identifiers = {}
- self.chapters = processor.chapters
- self.sections = processor.sections.values()
- self.block_index = []
-
- # store all blocks in a dictionary
- self.blocks = []
- for section in self.sections:
- for block in section.blocks.values():
- self.add_identifier( block.name, block )
-
- # add enumeration values to the index, since this is useful
- for markup in block.markups:
- if markup.tag == 'values':
- for field in markup.fields:
- self.add_identifier( field.name, block )
-
- self.block_index = self.identifiers.keys()
- self.block_index.sort( key = index_key )
-
- # also add section names to dictionary (without making them appear
- # in the index)
- for section in self.sections:
- self.add_identifier( section.name, section )
-
- def add_identifier( self, name, block ):
- if name in self.identifiers:
- # duplicate name!
- sys.stderr.write( "WARNING: duplicate definition for"
- + " '" + name + "' "
- + "in " + block.location() + ", "
- + "previous definition in "
- + self.identifiers[name].location()
- + "\n" )
- else:
- self.identifiers[name] = block
-
- #
- # formatting the table of contents
- #
- def toc_enter( self ):
- pass
-
- def toc_chapter_enter( self, chapter ):
- pass
-
- def toc_section_enter( self, section ):
- pass
-
- def toc_section_exit( self, section ):
- pass
-
- def toc_chapter_exit( self, chapter ):
- pass
-
- def toc_index( self, index_filename ):
- pass
-
- def toc_exit( self ):
- pass
-
- def toc_dump( self, toc_filename = None, index_filename = None ):
- output = None
- if toc_filename:
- output = open_output( toc_filename )
-
- self.toc_enter()
-
- for chap in self.processor.chapters:
-
- self.toc_chapter_enter( chap )
-
- for section in chap.sections:
- self.toc_section_enter( section )
- self.toc_section_exit( section )
-
- self.toc_chapter_exit( chap )
-
- self.toc_index( index_filename )
-
- self.toc_exit()
-
- if output:
- close_output( output )
-
- #
- # formatting the index
- #
- def index_enter( self ):
- pass
-
- def index_name_enter( self, name ):
- pass
-
- def index_name_exit( self, name ):
- pass
-
- def index_exit( self ):
- pass
-
- def index_dump( self, index_filename = None ):
- output = None
- if index_filename:
- output = open_output( index_filename )
-
- self.index_enter()
-
- for name in self.block_index:
- self.index_name_enter( name )
- self.index_name_exit( name )
-
- self.index_exit()
-
- if output:
- close_output( output )
-
- #
- # formatting a section
- #
- def section_enter( self, section ):
- pass
-
- def block_enter( self, block ):
- pass
-
- def markup_enter( self, markup, block = None ):
- pass
-
- def field_enter( self, field, markup = None, block = None ):
- pass
-
- def field_exit( self, field, markup = None, block = None ):
- pass
-
- def markup_exit( self, markup, block = None ):
- pass
-
- def block_exit( self, block ):
- pass
-
- def section_exit( self, section ):
- pass
-
- def section_dump( self, section, section_filename = None ):
- output = None
- if section_filename:
- output = open_output( section_filename )
-
- self.section_enter( section )
-
- for name in section.block_names:
- skip_entry = 0
- try:
- block = self.identifiers[name]
- # `block_names' can contain field names also,
- # which we filter out
- for markup in block.markups:
- if markup.tag == 'values':
- for field in markup.fields:
- if field.name == name:
- skip_entry = 1
- except:
- skip_entry = 1 # this happens e.g. for `/empty/' entries
-
- if skip_entry:
- continue
-
- self.block_enter( block )
-
- for markup in block.markups[1:]: # always ignore first markup!
- self.markup_enter( markup, block )
-
- for field in markup.fields:
- self.field_enter( field, markup, block )
- self.field_exit( field, markup, block )
-
- self.markup_exit( markup, block )
-
- self.block_exit( block )
-
- self.section_exit( section )
-
- if output:
- close_output( output )
-
- def section_dump_all( self ):
- for section in self.sections:
- self.section_dump( section )
-
-# eof
diff --git a/src/tools/docmaker/sources.py b/src/tools/docmaker/sources.py
deleted file mode 100644
index 06407e164..000000000
--- a/src/tools/docmaker/sources.py
+++ /dev/null
@@ -1,410 +0,0 @@
-#
-# sources.py
-#
-# Convert source code comments to multi-line blocks (library file).
-#
-# Copyright 2002-2017 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-#
-# This library file contains definitions of classes needed to decompose C
-# source code files into a series of multi-line `blocks'. There are two
-# kinds of blocks.
-#
-# - Normal blocks, which contain source code or ordinary comments.
-#
-# - Documentation blocks, which have restricted formatting, and whose text
-# always start with a documentation markup tag like `<Function>',
-# `<Type>', etc.
-#
-# The routines to process the content of documentation blocks are contained
-# in file `content.py'; the classes and methods found here only deal with
-# text parsing and basic documentation block extraction.
-#
-
-
-import fileinput, re, sys, os, string
-
-
-################################################################
-##
-## SOURCE BLOCK FORMAT CLASS
-##
-## A simple class containing compiled regular expressions to detect
-## potential documentation format block comments within C source code.
-##
-## The `column' pattern must contain a group to `unbox' the content of
-## documentation comment blocks.
-##
-## Later on, paragraphs are converted to long lines, which simplifies the
-## regular expressions that act upon the text.
-##
-class SourceBlockFormat:
-
- def __init__( self, id, start, column, end ):
- """Create a block pattern, used to recognize special documentation
- blocks."""
- self.id = id
- self.start = re.compile( start, re.VERBOSE )
- self.column = re.compile( column, re.VERBOSE )
- self.end = re.compile( end, re.VERBOSE )
-
-
-#
-# Format 1 documentation comment blocks.
-#
-# /************************************/ (at least 2 asterisks)
-# /* */
-# /* */
-# /* */
-# /************************************/ (at least 2 asterisks)
-#
-start = r'''
- \s* # any number of whitespace
- /\*{2,}/ # followed by '/' and at least two asterisks then '/'
- \s*$ # probably followed by whitespace
-'''
-
-column = r'''
- \s* # any number of whitespace
- /\*{1} # followed by '/' and precisely one asterisk
- ([^*].*) # followed by anything (group 1)
- \*{1}/ # followed by one asterisk and a '/'
- \s*$ # probably followed by whitespace
-'''
-
-re_source_block_format1 = SourceBlockFormat( 1, start, column, start )
-
-
-#
-# Format 2 documentation comment blocks.
-#
-# /************************************ (at least 2 asterisks)
-# *
-# * (1 asterisk)
-# *
-# */ (1 or more asterisks)
-#
-start = r'''
- \s* # any number of whitespace
- /\*{2,} # followed by '/' and at least two asterisks
- \s*$ # probably followed by whitespace
-'''
-
-column = r'''
- \s* # any number of whitespace
- \*{1}(?![*/]) # followed by precisely one asterisk not followed by `/'
- (.*) # then anything (group1)
-'''
-
-end = r'''
- \s* # any number of whitespace
- \*+/ # followed by at least one asterisk, then '/'
-'''
-
-re_source_block_format2 = SourceBlockFormat( 2, start, column, end )
-
-
-#
-# The list of supported documentation block formats. We could add new ones
-# quite easily.
-#
-re_source_block_formats = [re_source_block_format1, re_source_block_format2]
-
-
-#
-# The following regular expressions correspond to markup tags within the
-# documentation comment blocks. They are equivalent despite their different
-# syntax.
-#
-# A markup tag consists of letters or character `-', to be found in group 1.
-#
-# Notice that a markup tag _must_ begin a new paragraph.
-#
-re_markup_tag1 = re.compile( r'''\s*<((?:\w|-)*)>''' ) # <xxxx> format
-re_markup_tag2 = re.compile( r'''\s*@((?:\w|-)*):''' ) # @xxxx: format
-
-#
-# The list of supported markup tags. We could add new ones quite easily.
-#
-re_markup_tags = [re_markup_tag1, re_markup_tag2]
-
-
-#
-# A regular expression to detect a cross reference, after markup tags have
-# been stripped off.
-#
-# Two syntax forms are supported:
-#
-# @<name>
-# @<name>[<id>]
-#
-# where both `<name>' and `<id>' consist of alphanumeric characters, `_',
-# and `-'. Use `<id>' if there are multiple, valid `<name>' entries.
-#
-# Example: @foo[bar]
-#
-re_crossref = re.compile( r"""
- @
- (?P<name>(?:\w|-)+
- (?:\[(?:\w|-)+\])?)
- (?P<rest>.*)
- """, re.VERBOSE )
-
-#
-# Two regular expressions to detect italic and bold markup, respectively.
-# Group 1 is the markup, group 2 the rest of the line.
-#
-# Note that the markup is limited to words consisting of letters, digits,
-# the characters `_' and `-', or an apostrophe (but not as the first
-# character).
-#
-re_italic = re.compile( r"_((?:\w|-)(?:\w|'|-)*)_(.*)" ) # _italic_
-re_bold = re.compile( r"\*((?:\w|-)(?:\w|'|-)*)\*(.*)" ) # *bold*
-
-#
-# This regular expression code to identify an URL has been taken from
-#
-# http://mail.python.org/pipermail/tutor/2002-September/017228.html
-#
-# (with slight modifications).
-#
-urls = r'(?:https?|telnet|gopher|file|wais|ftp)'
-ltrs = r'\w'
-gunk = r'/#~:.?+=&%@!\-'
-punc = r'.:?\-'
-any = "%(ltrs)s%(gunk)s%(punc)s" % { 'ltrs' : ltrs,
- 'gunk' : gunk,
- 'punc' : punc }
-url = r"""
- (
- \b # start at word boundary
- %(urls)s : # need resource and a colon
- [%(any)s] +? # followed by one or more of any valid
- # character, but be conservative and
- # take only what you need to...
- (?= # [look-ahead non-consumptive assertion]
- [%(punc)s]* # either 0 or more punctuation
- (?: # [non-grouping parentheses]
- [^%(any)s] | $ # followed by a non-url char
- # or end of the string
- )
- )
- )
- """ % {'urls' : urls,
- 'any' : any,
- 'punc' : punc }
-
-re_url = re.compile( url, re.VERBOSE | re.MULTILINE )
-
-#
-# A regular expression that stops collection of comments for the current
-# block.
-#
-re_source_sep = re.compile( r'\s*/\*\s*\*/' ) # /* */
-
-#
-# A regular expression to find possible C identifiers while outputting
-# source code verbatim, covering things like `*foo' or `(bar'. Group 1 is
-# the prefix, group 2 the identifier -- since we scan lines from left to
-# right, sequentially splitting the source code into prefix and identifier
-# is fully sufficient for our purposes.
-#
-re_source_crossref = re.compile( r'(\W*)(\w*)' )
-
-#
-# A regular expression that matches a list of reserved C source keywords.
-#
-re_source_keywords = re.compile( '''\\b ( typedef |
- struct |
- enum |
- union |
- const |
- char |
- int |
- short |
- long |
- void |
- signed |
- unsigned |
- \#include |
- \#define |
- \#undef |
- \#if |
- \#ifdef |
- \#ifndef |
- \#else |
- \#endif ) \\b''', re.VERBOSE )
-
-
-################################################################
-##
-## SOURCE BLOCK CLASS
-##
-## There are two important fields in a `SourceBlock' object.
-##
-## self.lines
-## A list of text lines for the corresponding block.
-##
-## self.content
-## For documentation comment blocks only, this is the block content
-## that has been `unboxed' from its decoration. This is `None' for all
-## other blocks (i.e., sources or ordinary comments with no starting
-## markup tag)
-##
-class SourceBlock:
-
- def __init__( self, processor, filename, lineno, lines ):
- self.processor = processor
- self.filename = filename
- self.lineno = lineno
- self.lines = lines[:]
- self.format = processor.format
- self.content = []
-
- if self.format == None:
- return
-
- words = []
-
- # extract comment lines
- lines = []
-
- for line0 in self.lines:
- m = self.format.column.match( line0 )
- if m:
- lines.append( m.group( 1 ) )
-
- # now, look for a markup tag
- for l in lines:
- l = string.strip( l )
- if len( l ) > 0:
- for tag in re_markup_tags:
- if tag.match( l ):
- self.content = lines
- return
-
- def location( self ):
- return "(" + self.filename + ":" + repr( self.lineno ) + ")"
-
- # debugging only -- not used in normal operations
- def dump( self ):
- if self.content:
- print "{{{content start---"
- for l in self.content:
- print l
- print "---content end}}}"
- return
-
- fmt = ""
- if self.format:
- fmt = repr( self.format.id ) + " "
-
- for line in self.lines:
- print line
-
-
-################################################################
-##
-## SOURCE PROCESSOR CLASS
-##
-## The `SourceProcessor' is in charge of reading a C source file and
-## decomposing it into a series of different `SourceBlock' objects.
-##
-## A SourceBlock object consists of the following data.
-##
-## - A documentation comment block using one of the layouts above. Its
-## exact format will be discussed later.
-##
-## - Normal sources lines, including comments.
-##
-##
-class SourceProcessor:
-
- def __init__( self ):
- """Initialize a source processor."""
- self.blocks = []
- self.filename = None
- self.format = None
- self.lines = []
-
- def reset( self ):
- """Reset a block processor and clean up all its blocks."""
- self.blocks = []
- self.format = None
-
- def parse_file( self, filename ):
- """Parse a C source file and add its blocks to the processor's
- list."""
- self.reset()
-
- self.filename = filename
-
- fileinput.close()
- self.format = None
- self.lineno = 0
- self.lines = []
-
- for line in fileinput.input( filename ):
- # strip trailing newlines, important on Windows machines!
- if line[-1] == '\012':
- line = line[0:-1]
-
- if self.format == None:
- self.process_normal_line( line )
- else:
- if self.format.end.match( line ):
- # A normal block end. Add it to `lines' and create a
- # new block
- self.lines.append( line )
- self.add_block_lines()
- elif self.format.column.match( line ):
- # A normal column line. Add it to `lines'.
- self.lines.append( line )
- else:
- # An unexpected block end. Create a new block, but
- # don't process the line.
- self.add_block_lines()
-
- # we need to process the line again
- self.process_normal_line( line )
-
- # record the last lines
- self.add_block_lines()
-
- def process_normal_line( self, line ):
- """Process a normal line and check whether it is the start of a new
- block."""
- for f in re_source_block_formats:
- if f.start.match( line ):
- self.add_block_lines()
- self.format = f
- self.lineno = fileinput.filelineno()
-
- self.lines.append( line )
-
- def add_block_lines( self ):
- """Add the current accumulated lines and create a new block."""
- if self.lines != []:
- block = SourceBlock( self,
- self.filename,
- self.lineno,
- self.lines )
-
- self.blocks.append( block )
- self.format = None
- self.lines = []
-
- # debugging only, not used in normal operations
- def dump( self ):
- """Print all blocks in a processor."""
- for b in self.blocks:
- b.dump()
-
-# eof
diff --git a/src/tools/docmaker/tohtml.py b/src/tools/docmaker/tohtml.py
deleted file mode 100644
index 012b55e49..000000000
--- a/src/tools/docmaker/tohtml.py
+++ /dev/null
@@ -1,725 +0,0 @@
-#
-# tohtml.py
-#
-# A sub-class container of the `Formatter' class to produce HTML.
-#
-# Copyright 2002-2017 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-# The parent class is contained in file `formatter.py'.
-
-
-from sources import *
-from content import *
-from formatter import *
-
-import time
-
-
-# The following strings define the HTML header used by all generated pages.
-html_header_1 = """\
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>\
-"""
-
-html_header_2 = """\
- API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-"""
-
-html_header_3l = """
-<table class="index-toc-link"><tr><td class="left">[<a href="\
-"""
-
-html_header_3r = """
-<table class="index-toc-link"><tr><td class="right">[<a href="\
-"""
-
-html_header_4 = """\
-">Index</a>]</td><td class="right">[<a href="\
-"""
-
-html_header_5t = """\
-">TOC</a>]</td></tr></table>
-<h1>\
-"""
-
-html_header_5i = """\
-">Index</a>]</td></tr></table>
-<h1>\
-"""
-
-html_header_6 = """\
- API Reference</h1>
-"""
-
-
-# The HTML footer used by all generated pages.
-html_footer = """\
-</body>
-</html>\
-"""
-
-# The header and footer used for each section.
-section_title_header1 = '<h1 id="'
-section_title_header2 = '">'
-section_title_footer = "</h1>"
-
-# The header and footer used for code segments.
-code_header = '<pre class="colored">'
-code_footer = '</pre>'
-
-# Paragraph header and footer.
-para_header = "<p>"
-para_footer = "</p>"
-
-# Block header and footer.
-block_header = '<div class="section">'
-block_footer_start = """\
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="\
-"""
-block_footer_middle = """\
-">Index</a>]</td>\
-<td class="middle">[<a href="#">Top</a>]</td>\
-<td class="right">[<a href="\
-"""
-block_footer_end = """\
-">TOC</a>]</td></tr></table></div>
-"""
-
-# Description header/footer.
-description_header = ""
-description_footer = ""
-
-# Marker header/inter/footer combination.
-marker_header = "<h4>"
-marker_inter = "</h4>"
-marker_footer = ""
-
-# Header location header/footer.
-header_location_header = "<p>"
-header_location_footer = "</p>"
-
-# Source code extracts header/footer.
-source_header = "<pre>"
-source_footer = "</pre>"
-
-# Chapter header/inter/footer.
-chapter_header = """\
-<div class="section">
-<h2>\
-"""
-chapter_inter = '</h2>'
-chapter_footer = '</div>'
-
-# Index footer.
-index_footer_start = """\
-<hr>
-<table class="index-toc-link"><tr><td class="right">[<a href="\
-"""
-index_footer_end = """\
-">TOC</a>]</td></tr></table>
-"""
-
-# TOC footer.
-toc_footer_start = """\
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="\
-"""
-toc_footer_end = """\
-">Index</a>]</td></tr></table>
-"""
-
-
-# Source language keyword coloration and styling.
-keyword_prefix = '<span class="keyword">'
-keyword_suffix = '</span>'
-
-section_synopsis_header = '<h2>Synopsis</h2>'
-section_synopsis_footer = ''
-
-
-# Translate a single line of source to HTML. This converts `<', `>', and
-# `&' into `&lt;',`&gt;', and `&amp;'.
-#
-def html_quote( line ):
- result = string.replace( line, "&", "&amp;" )
- result = string.replace( result, "<", "&lt;" )
- result = string.replace( result, ">", "&gt;" )
- return result
-
-
-################################################################
-##
-## HTML FORMATTER CLASS
-##
-class HtmlFormatter( Formatter ):
-
- def __init__( self, processor, project_title, file_prefix ):
- Formatter.__init__( self, processor )
-
- global html_header_1
- global html_header_2
- global html_header_3l, html_header_3r
- global html_header_4
- global html_header_5t, html_header_5i
- global html_header_6
- global html_footer
-
- if file_prefix:
- file_prefix = file_prefix + "-"
- else:
- file_prefix = ""
-
- self.headers = processor.headers
- self.project_title = project_title
- self.file_prefix = file_prefix
- self.html_header = (
- html_header_1 + project_title
- + html_header_2
- + html_header_3l + file_prefix + "index.html"
- + html_header_4 + file_prefix + "toc.html"
- + html_header_5t + project_title
- + html_header_6 )
- self.html_index_header = (
- html_header_1 + project_title
- + html_header_2
- + html_header_3r + file_prefix + "toc.html"
- + html_header_5t + project_title
- + html_header_6 )
- self.html_toc_header = (
- html_header_1 + project_title
- + html_header_2
- + html_header_3l + file_prefix + "index.html"
- + html_header_5i + project_title
- + html_header_6 )
- self.html_footer = (
- '<div class="timestamp">generated on '
- + time.asctime( time.localtime( time.time() ) )
- + "</div>" + html_footer )
-
- self.columns = 3
-
- def make_section_url( self, section ):
- return self.file_prefix + section.name + ".html"
-
- def make_block_url( self, block, name = None ):
- if name == None:
- name = block.name
-
- try:
- section_url = self.make_section_url( block.section )
- except:
- # we already have a section
- section_url = self.make_section_url( block )
-
- return section_url + "#" + name
-
- def make_html_word( self, word ):
- """Analyze a simple word to detect cross-references and markup."""
- # handle cross-references
- m = re_crossref.match( word )
- if m:
- try:
- name = m.group( 'name' )
- rest = m.group( 'rest' )
- block = self.identifiers[name]
- url = self.make_block_url( block )
- # display `foo[bar]' as `foo'
- name = re.sub( r'\[.*\]', '', name )
- # normalize url, following RFC 3986
- url = string.replace( url, "[", "(" )
- url = string.replace( url, "]", ")" )
-
- try:
- # for sections, display title
- url = ( '&lsquo;<a href="' + url + '">'
- + block.title + '</a>&rsquo;'
- + rest )
- except:
- url = ( '<a href="' + url + '">'
- + name + '</a>'
- + rest )
-
- return url
- except:
- # we detected a cross-reference to an unknown item
- sys.stderr.write( "WARNING: undefined cross reference"
- + " '" + name + "'.\n" )
- return '?' + name + '?' + rest
-
- # handle markup for italic and bold
- m = re_italic.match( word )
- if m:
- name = m.group( 1 )
- rest = m.group( 2 )
- return '<i>' + name + '</i>' + rest
-
- m = re_bold.match( word )
- if m:
- name = m.group( 1 )
- rest = m.group( 2 )
- return '<b>' + name + '</b>' + rest
-
- return html_quote( word )
-
- def make_html_para( self, words ):
- """Convert words of a paragraph into tagged HTML text. Also handle
- cross references."""
- line = ""
- if words:
- line = self.make_html_word( words[0] )
- for word in words[1:]:
- line = line + " " + self.make_html_word( word )
- # handle hyperlinks
- line = re_url.sub( r'<a href="\1">\1</a>', line )
- # convert `...' quotations into real left and right single quotes
- line = re.sub( r"(^|\W)`(.*?)'(\W|$)",
- r'\1&lsquo;\2&rsquo;\3',
- line )
- # convert tilde into non-breakable space
- line = string.replace( line, "~", "&nbsp;" )
-
- return para_header + line + para_footer
-
- def make_html_code( self, lines ):
- """Convert a code sequence to HTML."""
- line = code_header + '\n'
- for l in lines:
- line = line + html_quote( l ).rstrip() + '\n'
-
- return line + code_footer
-
- def make_html_items( self, items ):
- """Convert a field's content into HTML."""
- lines = []
- for item in items:
- if item.lines:
- lines.append( self.make_html_code( item.lines ) )
- else:
- lines.append( self.make_html_para( item.words ) )
-
- return string.join( lines, '\n' )
-
- def print_html_items( self, items ):
- print self.make_html_items( items )
-
- def print_html_field( self, field ):
- if field.name:
- print( '<table><tr valign="top"><td><b>'
- + field.name
- + "</b></td><td>" )
-
- print self.make_html_items( field.items )
-
- if field.name:
- print "</td></tr></table>"
-
- def html_source_quote( self, line, block_name = None ):
- result = ""
- while line:
- m = re_source_crossref.match( line )
- if m:
- name = m.group( 2 )
- prefix = html_quote( m.group( 1 ) )
- length = len( m.group( 0 ) )
-
- if name == block_name:
- # this is the current block name, if any
- result = result + prefix + '<b>' + name + '</b>'
- elif re_source_keywords.match( name ):
- # this is a C keyword
- result = ( result + prefix
- + keyword_prefix + name + keyword_suffix )
- elif name in self.identifiers:
- # this is a known identifier
- block = self.identifiers[name]
- id = block.name
-
- # link to a field ID if possible
- try:
- for markup in block.markups:
- if markup.tag == 'values':
- for field in markup.fields:
- if field.name:
- id = name
-
- result = ( result + prefix
- + '<a href="'
- + self.make_block_url( block, id )
- + '">' + name + '</a>' )
- except:
- # sections don't have `markups'; however, we don't
- # want references to sections here anyway
- result = result + html_quote( line[:length] )
-
- else:
- result = result + html_quote( line[:length] )
-
- line = line[length:]
- else:
- result = result + html_quote( line )
- line = []
-
- return result
-
- def print_html_field_list( self, fields ):
- print '<table class="fields">'
- for field in fields:
- print ( '<tr><td class="val" id="' + field.name + '">'
- + field.name
- + '</td><td class="desc">' )
- self.print_html_items( field.items )
- print "</td></tr>"
- print "</table>"
-
- def print_html_markup( self, markup ):
- table_fields = []
- for field in markup.fields:
- if field.name:
- # We begin a new series of field or value definitions. We
- # record them in the `table_fields' list before outputting
- # all of them as a single table.
- table_fields.append( field )
- else:
- if table_fields:
- self.print_html_field_list( table_fields )
- table_fields = []
-
- self.print_html_items( field.items )
-
- if table_fields:
- self.print_html_field_list( table_fields )
-
- #
- # formatting the index
- #
- def index_enter( self ):
- print self.html_index_header
- self.index_items = {}
-
- def index_name_enter( self, name ):
- block = self.identifiers[name]
- url = self.make_block_url( block )
- self.index_items[name] = url
-
- def index_exit( self ):
- # `block_index' already contains the sorted list of index names
- count = len( self.block_index )
- rows = ( count + self.columns - 1 ) // self.columns
-
- print '<table class="index">'
- for r in range( rows ):
- line = "<tr>"
- for c in range( self.columns ):
- i = r + c * rows
- if i < count:
- bname = self.block_index[r + c * rows]
- url = self.index_items[bname]
- # display `foo[bar]' as `foo (bar)'
- bname = string.replace( bname, "[", " (" )
- bname = string.replace( bname, "]", ")" )
- # normalize url, following RFC 3986
- url = string.replace( url, "[", "(" )
- url = string.replace( url, "]", ")" )
- line = ( line + '<td><a href="' + url + '">'
- + bname + '</a></td>' )
- else:
- line = line + '<td></td>'
- line = line + "</tr>"
- print line
-
- print "</table>"
-
- print( index_footer_start
- + self.file_prefix + "toc.html"
- + index_footer_end )
-
- print self.html_footer
-
- self.index_items = {}
-
- def index_dump( self, index_filename = None ):
- if index_filename == None:
- index_filename = self.file_prefix + "index.html"
-
- Formatter.index_dump( self, index_filename )
-
- #
- # formatting the table of contents
- #
- def toc_enter( self ):
- print self.html_toc_header
- print "<h1>Table of Contents</h1>"
-
- def toc_chapter_enter( self, chapter ):
- print chapter_header + string.join( chapter.title ) + chapter_inter
- print '<table class="toc">'
-
- def toc_section_enter( self, section ):
- print ( '<tr><td class="link">'
- + '<a href="' + self.make_section_url( section ) + '">'
- + section.title + '</a></td><td class="desc">' )
- print self.make_html_para( section.abstract )
-
- def toc_section_exit( self, section ):
- print "</td></tr>"
-
- def toc_chapter_exit( self, chapter ):
- print "</table>"
- print chapter_footer
-
- def toc_index( self, index_filename ):
- print( chapter_header
- + '<a href="' + index_filename + '">Global Index</a>'
- + chapter_inter + chapter_footer )
-
- def toc_exit( self ):
- print( toc_footer_start
- + self.file_prefix + "index.html"
- + toc_footer_end )
-
- print self.html_footer
-
- def toc_dump( self, toc_filename = None, index_filename = None ):
- if toc_filename == None:
- toc_filename = self.file_prefix + "toc.html"
-
- if index_filename == None:
- index_filename = self.file_prefix + "index.html"
-
- Formatter.toc_dump( self, toc_filename, index_filename )
-
- #
- # formatting sections
- #
- def section_enter( self, section ):
- print self.html_header
-
- print ( section_title_header1 + section.name + section_title_header2
- + section.title
- + section_title_footer )
-
- maxwidth = 0
- for b in section.blocks.values():
- if len( b.name ) > maxwidth:
- maxwidth = len( b.name )
-
- width = 70 # XXX magic number
- if maxwidth > 0:
- # print section synopsis
- print section_synopsis_header
- print '<table class="synopsis">'
-
- columns = width // maxwidth
- if columns < 1:
- columns = 1
-
- count = len( section.block_names )
- # don't handle last entry if it is empty
- if section.block_names[-1] == "/empty/":
- count -= 1
- rows = ( count + columns - 1 ) // columns
-
- for r in range( rows ):
- line = "<tr>"
- for c in range( columns ):
- i = r + c * rows
- line = line + '<td>'
- if i < count:
- name = section.block_names[i]
- if name == "/empty/":
- # it can happen that a complete row is empty, and
- # without a proper `filler' the browser might
- # collapse the row to a much smaller height (or
- # even omit it completely)
- line = line + "&nbsp;"
- else:
- url = name
- # display `foo[bar]' as `foo'
- name = re.sub( r'\[.*\]', '', name )
- # normalize url, following RFC 3986
- url = string.replace( url, "[", "(" )
- url = string.replace( url, "]", ")" )
- line = ( line + '<a href="#' + url + '">'
- + name + '</a>' )
-
- line = line + '</td>'
- line = line + "</tr>"
- print line
-
- print "</table>"
- print section_synopsis_footer
-
- print description_header
- print self.make_html_items( section.description )
- print description_footer
-
- def block_enter( self, block ):
- print block_header
-
- # place html anchor if needed
- if block.name:
- url = block.name
- # display `foo[bar]' as `foo'
- name = re.sub( r'\[.*\]', '', block.name )
- # normalize url, following RFC 3986
- url = string.replace( url, "[", "(" )
- url = string.replace( url, "]", ")" )
- print( '<h3 id="' + url + '">' + name + '</h3>' )
-
- # dump the block C source lines now
- if block.code:
- header = ''
- for f in self.headers.keys():
- if block.source.filename.find( f ) >= 0:
- header = self.headers[f] + ' (' + f + ')'
- break
-
-# if not header:
-# sys.stderr.write(
-# "WARNING: No header macro for"
-# + " '" + block.source.filename + "'.\n" )
-
- if header:
- print ( header_location_header
- + 'Defined in ' + header + '.'
- + header_location_footer )
-
- print source_header
- for l in block.code:
- print self.html_source_quote( l, block.name )
- print source_footer
-
- def markup_enter( self, markup, block ):
- if markup.tag == "description":
- print description_header
- else:
- print marker_header + markup.tag + marker_inter
-
- self.print_html_markup( markup )
-
- def markup_exit( self, markup, block ):
- if markup.tag == "description":
- print description_footer
- else:
- print marker_footer
-
- def block_exit( self, block ):
- print( block_footer_start + self.file_prefix + "index.html"
- + block_footer_middle + self.file_prefix + "toc.html"
- + block_footer_end )
-
- def section_exit( self, section ):
- print html_footer
-
- def section_dump_all( self ):
- for section in self.sections:
- self.section_dump( section,
- self.file_prefix + section.name + '.html' )
-
-# eof
diff --git a/src/tools/docmaker/utils.py b/src/tools/docmaker/utils.py
deleted file mode 100644
index ba5b2e759..000000000
--- a/src/tools/docmaker/utils.py
+++ /dev/null
@@ -1,127 +0,0 @@
-#
-# utils.py
-#
-# Auxiliary functions for the `docmaker' tool (library file).
-#
-# Copyright 2002-2017 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-
-import string, sys, os, glob, itertools
-
-
-# current output directory
-#
-output_dir = None
-
-
-# A function that generates a sorting key. We want lexicographical order
-# (primary key) except that capital letters are sorted before lowercase
-# ones (secondary key).
-#
-# The primary key is implemented by lowercasing the input. The secondary
-# key is simply the original data appended, character by character. For
-# example, the sort key for `FT_x' is `fFtT__xx', while the sort key for
-# `ft_X' is `fftt__xX'. Since ASCII codes of uppercase letters are
-# numerically smaller than the codes of lowercase letters, `fFtT__xx' gets
-# sorted before `fftt__xX'.
-#
-def index_key( s ):
- return string.join( itertools.chain( *zip( s.lower(), s ) ) )
-
-
-# Sort `input_list', placing the elements of `order_list' in front.
-#
-def sort_order_list( input_list, order_list ):
- new_list = order_list[:]
- for id in input_list:
- if not id in order_list:
- new_list.append( id )
- return new_list
-
-
-# Divert standard output to a given project documentation file. Use
-# `output_dir' to determine the filename location if necessary and save the
-# old stdout handle in a tuple that is returned by this function.
-#
-def open_output( filename ):
- global output_dir
-
- if output_dir and output_dir != "":
- filename = output_dir + os.sep + filename
-
- old_stdout = sys.stdout
- new_file = open( filename, "w" )
- sys.stdout = new_file
-
- return ( new_file, old_stdout )
-
-
-# Close the output that was returned by `open_output'.
-#
-def close_output( output ):
- output[0].close()
- sys.stdout = output[1]
-
-
-# Check output directory.
-#
-def check_output():
- global output_dir
- if output_dir:
- if output_dir != "":
- if not os.path.isdir( output_dir ):
- sys.stderr.write( "argument"
- + " '" + output_dir + "' "
- + "is not a valid directory\n" )
- sys.exit( 2 )
- else:
- output_dir = None
-
-
-def file_exists( pathname ):
- """Check that a given file exists."""
- result = 1
- try:
- file = open( pathname, "r" )
- file.close()
- except:
- result = None
- sys.stderr.write( pathname + " couldn't be accessed\n" )
-
- return result
-
-
-def make_file_list( args = None ):
- """Build a list of input files from command-line arguments."""
- file_list = []
- # sys.stderr.write( repr( sys.argv[1 :] ) + '\n' )
-
- if not args:
- args = sys.argv[1:]
-
- for pathname in args:
- if string.find( pathname, '*' ) >= 0:
- newpath = glob.glob( pathname )
- newpath.sort() # sort files -- this is important because
- # of the order of files
- else:
- newpath = [pathname]
-
- file_list.extend( newpath )
-
- if len( file_list ) == 0:
- file_list = None
- else:
- # now filter the file list to remove non-existing ones
- file_list = filter( file_exists, file_list )
-
- return file_list
-
-# eof
diff --git a/src/tools/ftfuzzer/README b/src/tools/ftfuzzer/README
deleted file mode 100644
index 53f907177..000000000
--- a/src/tools/ftfuzzer/README
+++ /dev/null
@@ -1,77 +0,0 @@
-ftfuzzer
-========
-
-
-ftfuzzer.cc
------------
-
-This file contains a target function for FreeType fuzzing. It can be
-used with libFuzzer (http://llvm.org/docs/LibFuzzer.html) or
-potentially any other similar fuzzer.
-
-Usage:
-
- 1. Build `libfreetype.a' and `ftfuzzer.cc' using the most recent
- clang compiler with these flags:
-
- # for fuzzer coverage feedback
- -fsanitize-coverage=edge,8bit-counters
- # for bug checking
- -fsanitize=address,signed-integer-overflow,shift
-
- You also need the header files from the `libarchive' library
- (http://www.libarchive.org/) for handling tar files (see file
- `ftmutator.cc' below for more).
-
- 2. Link with `libFuzzer' (it contains `main') and `libarchive'.
-
- 3. Run the fuzzer on some test corpus.
-
-The exact flags and commands may vary.
-
-
-There is a continuous fuzzing bot that runs ftfuzzer.
-
- https://github.com/google/libfuzzer-bot/tree/master/freetype
-
-Check the bot configuration for the most current settings.
-
-
-ftmutator.cc
-------------
-
-FreeType has the ability to `attach' auxiliary files to a font file,
-providing additional information. The main usage is to load AFM files
-for PostScript Type 1 fonts.
-
-However, libFuzzer currently only supports mutation of a single input
-file. For this reason, `ftmutator.cc' contains a custom fuzzer
-mutator that uses an uncompressed tar file archive as the input. The
-first file in such a tarball gets opened by FreeType as a font, all
-other files are treated as input for `FT_Attach_Stream'.
-
-Compilation is similar to `ftfuzzer.c'.
-
-
-runinput.cc
------------
-
-To run the target function on a set of input files, this file contains
-a convenience `main' function. Link it with `ftfuzzer.cc',
-`libfreetype.a', and `libarchive' and run like
-
- ./a.out my_tests_inputs/*
-
-----------------------------------------------------------------------
-
-Copyright 2015-2017 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute
-this file you indicate that you have read the license and understand
-and accept it fully.
-
-
---- end of README ---
diff --git a/src/tools/ftfuzzer/ftfuzzer.cc b/src/tools/ftfuzzer/ftfuzzer.cc
deleted file mode 100644
index 4da0c2bf2..000000000
--- a/src/tools/ftfuzzer/ftfuzzer.cc
+++ /dev/null
@@ -1,429 +0,0 @@
-// ftfuzzer.cc
-//
-// A fuzzing function to test FreeType with libFuzzer.
-//
-// Copyright 2015-2017 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used,
-// modified, and distributed under the terms of the FreeType project
-// license, LICENSE.TXT. By continuing to use, modify, or distribute
-// this file you indicate that you have read the license and
-// understand and accept it fully.
-
-
-// we use `unique_ptr', `decltype', and other gimmicks defined since C++11
-#if __cplusplus < 201103L
-# error "a C++11 compiler is needed"
-#endif
-
-#include <archive.h>
-#include <archive_entry.h>
-
-#include <assert.h>
-#include <stdint.h>
-
-#include <memory>
-#include <vector>
-
-
- using namespace std;
-
-
-#include <ft2build.h>
-
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-#include FT_CACHE_H
-#include FT_CACHE_CHARMAP_H
-#include FT_CACHE_IMAGE_H
-#include FT_CACHE_SMALL_BITMAPS_H
-#include FT_SYNTHESIS_H
-#include FT_ADVANCES_H
-#include FT_OUTLINE_H
-#include FT_BBOX_H
-#include FT_MODULE_H
-#include FT_CFF_DRIVER_H
-#include FT_TRUETYPE_DRIVER_H
-#include FT_MULTIPLE_MASTERS_H
-
-
- static FT_Library library;
- static int InitResult;
-
-
- struct FT_Global
- {
- FT_Global()
- {
- InitResult = FT_Init_FreeType( &library );
- if ( InitResult )
- return;
-
- // try to activate Adobe's CFF engine; it might not be the default
- unsigned int cff_hinting_engine = FT_CFF_HINTING_ADOBE;
- FT_Property_Set( library,
- "cff",
- "hinting-engine", &cff_hinting_engine );
- }
-
- ~FT_Global()
- {
- FT_Done_FreeType( library );
- }
- };
-
- FT_Global global_ft;
-
-
- // We want to select n values at random (without repetition),
- // with 0 < n <= N. The algorithm is taken from TAoCP, Vol. 2
- // (Algorithm S, selection sampling technique)
- struct Random
- {
- int n;
- int N;
-
- int t; // total number of values so far
- int m; // number of selected values so far
-
- uint32_t r; // the current pseudo-random number
-
- Random( int n_,
- int N_ )
- : n( n_ ),
- N( N_ )
- {
- t = 0;
- m = 0;
-
- // Ideally, this should depend on the input file,
- // for example, taking the sha256 as input;
- // however, this is overkill for fuzzying tests.
- r = 12345;
- }
-
- int get()
- {
- if ( m >= n )
- return -1;
-
- Redo:
- // We can't use `rand': different C libraries might provide
- // different implementations of this function. As a replacement,
- // we use a 32bit version of the `xorshift' algorithm.
- r ^= r << 13;
- r ^= r >> 17;
- r ^= r << 5;
-
- double U = double( r ) / UINT32_MAX;
-
- if ( ( N - t ) * U >= ( n - m ) )
- {
- t++;
- goto Redo;
- }
-
- t++;
- m++;
-
- return t;
- }
- };
-
-
- static int
- archive_read_entry_data( struct archive *ar,
- vector<FT_Byte> *vw )
- {
- int r;
- const FT_Byte* buff;
- size_t size;
- int64_t offset;
-
- for (;;)
- {
- r = archive_read_data_block( ar,
- reinterpret_cast<const void**>( &buff ),
- &size,
- &offset );
- if ( r == ARCHIVE_EOF )
- return ARCHIVE_OK;
- if ( r != ARCHIVE_OK )
- return r;
-
- vw->insert( vw->end(), buff, buff + size );
- }
- }
-
-
- static vector<vector<FT_Byte>>
- parse_data( const uint8_t* data,
- size_t size )
- {
- struct archive_entry* entry;
- int r;
- vector<vector<FT_Byte>> files;
-
- unique_ptr<struct archive,
- decltype ( archive_read_free )*> a( archive_read_new(),
- archive_read_free );
-
- // activate reading of uncompressed tar archives
- archive_read_support_format_tar( a.get() );
-
- // the need for `const_cast' was removed with libarchive commit be4d4dd
- if ( !( r = archive_read_open_memory(
- a.get(),
- const_cast<void*>(static_cast<const void*>( data ) ),
- size ) ) )
- {
- unique_ptr<struct archive,
- decltype ( archive_read_close )*> a_open( a.get(),
- archive_read_close );
-
- // read files contained in archive
- for (;;)
- {
- r = archive_read_next_header( a_open.get(), &entry );
- if ( r == ARCHIVE_EOF )
- break;
- if ( r != ARCHIVE_OK )
- break;
-
- vector<FT_Byte> entry_data;
- r = archive_read_entry_data( a.get(), &entry_data );
- if ( r != ARCHIVE_OK )
- break;
-
- files.push_back( move( entry_data ) );
- }
- }
-
- if ( files.size() == 0 )
- files.emplace_back( data, data + size );
-
- return files;
- }
-
-
- static void
- setIntermediateAxis( FT_Face face )
- {
- // only handle Multiple Masters and GX variation fonts
- if ( !FT_HAS_MULTIPLE_MASTERS( face ) )
- return;
-
- // get variation data for current instance
- FT_MM_Var* variations_ptr = nullptr;
- if ( FT_Get_MM_Var( face, &variations_ptr ) )
- return;
-
- unique_ptr<FT_MM_Var,
- decltype ( free )*> variations( variations_ptr, free );
- vector<FT_Fixed> coords( variations->num_axis );
-
- // select an arbitrary instance
- for ( unsigned int i = 0; i < variations->num_axis; i++ )
- coords[i] = ( variations->axis[i].minimum +
- variations->axis[i].def ) / 2;
-
- if ( FT_Set_Var_Design_Coordinates( face,
- FT_UInt( coords.size() ),
- coords.data() ) )
- return;
- }
-
-
- // the interface function to the libFuzzer library
- extern "C" int
- LLVMFuzzerTestOneInput( const uint8_t* data,
- size_t size_ )
- {
- assert( !InitResult );
-
- if ( size_ < 1 )
- return 0;
-
- const vector<vector<FT_Byte>>& files = parse_data( data, size_ );
-
- FT_Face face;
- FT_Int32 load_flags = FT_LOAD_DEFAULT;
-#if 0
- FT_Render_Mode render_mode = FT_RENDER_MODE_NORMAL;
-#endif
-
- // We use a conservative approach here, at the cost of calling
- // `FT_New_Face' quite often. The idea is that the fuzzer should be
- // able to try all faces and named instances of a font, expecting that
- // some faces don't work for various reasons, e.g., a broken subfont, or
- // an unsupported NFNT bitmap font in a Mac dfont resource that holds
- // more than a single font.
-
- // get number of faces
- if ( FT_New_Memory_Face( library,
- files[0].data(),
- (FT_Long)files[0].size(),
- -1,
- &face ) )
- return 0;
- long num_faces = face->num_faces;
- FT_Done_Face( face );
-
- // loop over up to 20 arbitrarily selected faces
- // from index range [0;num-faces-1]
- long max_face_cnt = num_faces < 20
- ? num_faces
- : 20;
-
- Random faces_pool( (int)max_face_cnt, (int)num_faces );
-
- for ( long face_cnt = 0;
- face_cnt < max_face_cnt;
- face_cnt++ )
- {
- long face_index = faces_pool.get() - 1;
-
- // get number of instances
- if ( FT_New_Memory_Face( library,
- files[0].data(),
- (FT_Long)files[0].size(),
- -( face_index + 1 ),
- &face ) )
- continue;
- long num_instances = face->style_flags >> 16;
- FT_Done_Face( face );
-
- // loop over the face without instance (index 0)
- // and up to 20 arbitrarily selected instances
- // from index range [1;num_instances]
- long max_instance_cnt = num_instances < 20
- ? num_instances
- : 20;
-
- Random instances_pool( (int)max_instance_cnt, (int)num_instances );
-
- for ( long instance_cnt = 0;
- instance_cnt <= max_instance_cnt;
- instance_cnt++ )
- {
- long instance_index = 0;
-
- if ( !instance_cnt )
- {
- if ( FT_New_Memory_Face( library,
- files[0].data(),
- (FT_Long)files[0].size(),
- face_index,
- &face ) )
- continue;
- }
- else
- {
- instance_index = instances_pool.get();
-
- if ( FT_New_Memory_Face( library,
- files[0].data(),
- (FT_Long)files[0].size(),
- ( instance_index << 16 ) + face_index,
- &face ) )
- continue;
- }
-
- // if we have more than a single input file coming from an archive,
- // attach them (starting with the second file) using the order given
- // in the archive
- for ( size_t files_index = 1;
- files_index < files.size();
- files_index++ )
- {
- FT_Open_Args open_args = {};
- open_args.flags = FT_OPEN_MEMORY;
- open_args.memory_base = files[files_index].data();
- open_args.memory_size = (FT_Long)files[files_index].size();
-
- // the last archive element will be eventually used as the
- // attachment
- FT_Attach_Stream( face, &open_args );
- }
-
- // loop over an arbitrary size for outlines
- // and up to ten arbitrarily selected bitmap strike sizes
- // from the range [0;num_fixed_sizes - 1]
- int max_size_cnt = face->num_fixed_sizes < 10
- ? face->num_fixed_sizes
- : 10;
-
- Random sizes_pool( max_size_cnt, face->num_fixed_sizes );
-
- for ( int size_cnt = 0;
- size_cnt <= max_size_cnt;
- size_cnt++ )
- {
- FT_Int32 flags = load_flags;
-
- int size_index = 0;
-
- if ( !size_cnt )
- {
- // set up 20pt at 72dpi as an arbitrary size
- if ( FT_Set_Char_Size( face, 20 * 64, 20 * 64, 72, 72 ) )
- continue;
- flags |= FT_LOAD_NO_BITMAP;
- }
- else
- {
- // bitmap strikes are not active for font variations
- if ( instance_index )
- continue;
-
- size_index = sizes_pool.get() - 1;
-
- if ( FT_Select_Size( face, size_index ) )
- continue;
- flags |= FT_LOAD_COLOR;
- }
-
- // test MM interface only for a face without a selected instance
- // and without a selected bitmap strike
- if ( !instance_index && !size_cnt )
- setIntermediateAxis( face );
-
- // loop over all glyphs
- for ( unsigned int glyph_index = 0;
- glyph_index < (unsigned int)face->num_glyphs;
- glyph_index++ )
- {
- if ( FT_Load_Glyph( face, glyph_index, flags ) )
- continue;
-
- // Rendering is the most expensive and the least interesting part.
- //
- // if ( FT_Render_Glyph( face->glyph, render_mode) )
- // continue;
- // FT_GlyphSlot_Embolden( face->glyph );
-
-#if 0
- FT_Glyph glyph;
- if ( !FT_Get_Glyph( face->glyph, &glyph ) )
- FT_Done_Glyph( glyph );
-
- FT_Outline* outline = &face->glyph->outline;
- FT_Matrix rot30 = { 0xDDB4, -0x8000, 0x8000, 0xDDB4 };
-
- FT_Outline_Transform( outline, &rot30 );
-
- FT_BBox bbox;
- FT_Outline_Get_BBox( outline, &bbox );
-#endif
- }
- }
- FT_Done_Face( face );
- }
- }
-
- return 0;
- }
-
-
-// END
diff --git a/src/tools/ftfuzzer/ftmutator.cc b/src/tools/ftfuzzer/ftmutator.cc
deleted file mode 100644
index 22aa5a777..000000000
--- a/src/tools/ftfuzzer/ftmutator.cc
+++ /dev/null
@@ -1,314 +0,0 @@
-// ftmutator.cc
-//
-// A custom fuzzer mutator to test for FreeType with libFuzzer.
-//
-// Copyright 2015-2017 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used,
-// modified, and distributed under the terms of the FreeType project
-// license, LICENSE.TXT. By continuing to use, modify, or distribute
-// this file you indicate that you have read the license and
-// understand and accept it fully.
-
-
-// Since `tar' is not a valid format for input to FreeType, treat any input
-// that looks like `tar' as multiple files and mutate them separately.
-//
-// In the future, a variation of this may be used to guide mutation on a
-// logically higher level.
-
-
-// we use `unique_ptr', `decltype', and other gimmicks defined since C++11
-#if __cplusplus < 201103L
-# error "a C++11 compiler is needed"
-#endif
-
-#include <cstdint>
-#include <cassert>
-#include <cstdio>
-#include <cstdlib>
-#include <cstddef>
-#include <cstring>
-#include <iostream>
-
-#include <memory>
-#include <vector>
-
-#include <archive.h>
-#include <archive_entry.h>
-
-#include "FuzzerInterface.h"
-
-
- using namespace std;
-
-
- // This function should be defined by `ftfuzzer.cc'.
- extern "C" int
- LLVMFuzzerTestOneInput( const uint8_t* Data,
- size_t Size );
-
-
- static void
- check_result( struct archive* a,
- int r )
- {
- if ( r == ARCHIVE_OK )
- return;
-
- const char* m = archive_error_string( a );
- write( 1, m, strlen( m ) );
- exit( 1 );
- }
-
-
- static int
- archive_read_entry_data( struct archive *ar,
- vector<uint8_t> *vw )
- {
- int r;
- const uint8_t* buff;
- size_t size;
- int64_t offset;
-
- for (;;)
- {
- r = archive_read_data_block( ar,
- reinterpret_cast<const void**>( &buff ),
- &size,
- &offset );
- if ( r == ARCHIVE_EOF )
- return ARCHIVE_OK;
- if ( r != ARCHIVE_OK )
- return r;
-
- vw->insert( vw->end(), buff, buff + size );
- }
- }
-
-
- static vector<vector<uint8_t>>
- parse_data( const uint8_t* data,
- size_t size )
- {
- struct archive_entry* entry;
- int r;
- vector<vector<uint8_t>> files;
-
- unique_ptr<struct archive,
- decltype ( archive_read_free )*> a( archive_read_new(),
- archive_read_free );
-
- // activate reading of uncompressed tar archives
- archive_read_support_format_tar( a.get() );
-
- // the need for `const_cast' was removed with libarchive commit be4d4dd
- if ( !( r = archive_read_open_memory(
- a.get(),
- const_cast<void*>(static_cast<const void*>( data ) ),
- size ) ) )
- {
- unique_ptr<struct archive,
- decltype ( archive_read_close )*> a_open( a.get(),
- archive_read_close );
-
- // read files contained in archive
- for (;;)
- {
- r = archive_read_next_header( a_open.get(), &entry );
- if ( r == ARCHIVE_EOF )
- break;
- if ( r != ARCHIVE_OK )
- break;
-
- vector<uint8_t> entry_data;
- r = archive_read_entry_data( a.get(), &entry_data );
- if ( entry_data.size() == 0 )
- continue;
-
- files.push_back( move( entry_data ) );
- if ( r != ARCHIVE_OK )
- break;
- }
- }
-
- return files;
- }
-
-
- class FTFuzzer
- : public fuzzer::UserSuppliedFuzzer
- {
-
- public:
- FTFuzzer( fuzzer::FuzzerRandomBase* Rand )
- : fuzzer::UserSuppliedFuzzer( Rand ) {}
-
-
- int
- TargetFunction( const uint8_t* Data,
- size_t Size )
- {
- return LLVMFuzzerTestOneInput( Data, Size );
- }
-
-
- // Custom mutator.
- virtual size_t
- Mutate( uint8_t* Data,
- size_t Size,
- size_t MaxSize )
- {
- vector<vector<uint8_t>> files = parse_data( Data, Size );
-
- // If the file was not recognized as a tar file, treat it as non-tar.
- if ( files.size() == 0 )
- return fuzzer::UserSuppliedFuzzer::Mutate( Data, Size, MaxSize );
-
- // This is somewhat `white box' on tar. The tar format uses 512 byte
- // blocks. One block as header for each file, two empty blocks of 0's
- // at the end. File data is padded to fill its last block.
- size_t used_blocks = files.size() + 2;
- for ( const auto& file : files )
- used_blocks += ( file.size() + 511 ) / 512;
-
- size_t max_blocks = MaxSize / 512;
-
- // If the input is big, it will need to be downsized. If the original
- // tar file was too big, it may have been clipped to fit. In this
- // case it may not be possible to properly write out the data, as
- // there may not be enough space for the trailing two blocks. Start
- // dropping file data or files from the end.
- for ( size_t i = files.size();
- i-- > 1 && used_blocks > max_blocks; )
- {
- size_t blocks_to_free = used_blocks - max_blocks;
- size_t blocks_currently_used_by_file_data =
- ( files[i].size() + 511 ) / 512;
-
- if ( blocks_currently_used_by_file_data >= blocks_to_free )
- {
- files[i].resize( ( blocks_currently_used_by_file_data -
- blocks_to_free ) * 512 );
- used_blocks -= blocks_to_free;
- continue;
- }
-
- files.pop_back();
- used_blocks -= blocks_currently_used_by_file_data + 1;
- }
-
- // If we get down to one file, don't use tar.
- if ( files.size() == 1 )
- {
- memcpy( Data, files[0].data(), files[0].size() );
- return fuzzer::UserSuppliedFuzzer::Mutate( Data,
- files[0].size(),
- MaxSize );
- }
-
- size_t free_blocks = max_blocks - used_blocks;
-
- // Allow each file to use up as much of the currently available space
- // it can. If it uses or gives up blocks, add them or remove them
- // from the pool.
- for ( auto&& file : files )
- {
- size_t blocks_currently_used_by_file = ( file.size() + 511 ) / 512;
- size_t blocks_available = blocks_currently_used_by_file +
- free_blocks;
- size_t max_size = blocks_available * 512;
- size_t data_size = file.size();
-
- file.resize( max_size );
- file.resize( fuzzer::UserSuppliedFuzzer::Mutate( file.data(),
- data_size,
- max_size ) );
-
- size_t blocks_now_used_by_file = ( file.size() + 511 ) / 512;
- free_blocks = free_blocks +
- blocks_currently_used_by_file -
- blocks_now_used_by_file;
- }
-
- unique_ptr<struct archive,
- decltype ( archive_write_free )*> a( archive_write_new(),
- archive_write_free );
-
- check_result( a.get(), archive_write_add_filter_none( a.get() ) );
- check_result( a.get(), archive_write_set_format_ustar( a.get() ) );
-
- // `used' may not be correct until after the archive is closed.
- size_t used = 0xbadbeef;
- check_result( a.get(), archive_write_open_memory( a.get(),
- Data,
- MaxSize,
- &used ) );
-
- {
- unique_ptr<struct archive,
- decltype ( archive_write_close )*> a_open( a.get(),
- archive_write_close );
-
- int file_index = 0;
- for ( const auto& file : files )
- {
- unique_ptr<struct archive_entry,
- decltype ( archive_entry_free )*>
- e( archive_entry_new2( a_open.get() ),
- archive_entry_free );
-
- char name_buffer[100];
- snprintf( name_buffer, 100, "file%d", file_index++ );
-
- archive_entry_set_pathname( e.get(), name_buffer );
- archive_entry_set_size( e.get(), file.size() );
- archive_entry_set_filetype( e.get(), AE_IFREG );
- archive_entry_set_perm( e.get(), 0644 );
-
- check_result( a_open.get(),
- archive_write_header( a_open.get(), e.get() ) );
- archive_write_data( a_open.get(), file.data(), file.size() );
- check_result( a_open.get(),
- archive_write_finish_entry( a_open.get() ) );
- }
- }
-
- return used;
- }
-
-
- // Cross `Data1' and `Data2', write up to `MaxOutSize' bytes into `Out',
- // return the number of bytes written, which should be positive.
- virtual size_t
- CrossOver( const uint8_t* Data1,
- size_t Size1,
- const uint8_t* Data2,
- size_t Size2,
- uint8_t* Out,
- size_t MaxOutSize )
- {
- return fuzzer::UserSuppliedFuzzer::CrossOver( Data1,
- Size1,
- Data2,
- Size2,
- Out,
- MaxOutSize );
- }
-
- }; // end of FTFuzzer class
-
-
- int
- main( int argc,
- char* *argv )
- {
- fuzzer::FuzzerRandomLibc Rand( 0 );
- FTFuzzer F( &Rand );
-
- fuzzer::FuzzerDriver( argc, argv, F );
- }
-
-
-// END
diff --git a/src/tools/ftfuzzer/rasterfuzzer.cc b/src/tools/ftfuzzer/rasterfuzzer.cc
deleted file mode 100644
index ae9b1a56d..000000000
--- a/src/tools/ftfuzzer/rasterfuzzer.cc
+++ /dev/null
@@ -1,129 +0,0 @@
-// rasterfuzzer.cc
-//
-// A fuzzing function to test FreeType's rasterizers with libFuzzer.
-//
-// Copyright 2016-2017 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used,
-// modified, and distributed under the terms of the FreeType project
-// license, LICENSE.TXT. By continuing to use, modify, or distribute
-// this file you indicate that you have read the license and
-// understand and accept it fully.
-
-
-#include <stdint.h>
-
-#include <vector>
-
-
- using namespace std;
-
-
-#include <ft2build.h>
-
-#include FT_FREETYPE_H
-#include FT_IMAGE_H
-#include FT_OUTLINE_H
-
-
- static FT_Library library;
- static int InitResult;
-
-
- struct FT_Global {
- FT_Global() {
- InitResult = FT_Init_FreeType( &library );
- }
- ~FT_Global() {
- FT_Done_FreeType( library );
- }
- };
-
- FT_Global global_ft;
-
-
- extern "C" int
- LLVMFuzzerTestOneInput( const uint8_t* data,
- size_t size_ )
- {
- unsigned char pixels[4];
-
- FT_Bitmap bitmap_mono = {
- 1, // rows
- 1, // width
- 4, // pitch
- pixels, // buffer
- 2, // num_grays
- FT_PIXEL_MODE_MONO, // pixel_mode
- 0, // palette_mode
- NULL // palette
- };
-
- FT_Bitmap bitmap_gray = {
- 1, // rows
- 1, // width
- 4, // pitch
- pixels, // buffer
- 256, // num_grays
- FT_PIXEL_MODE_GRAY, // pixel_mode
- 0, // palette_mode
- NULL // palette
- };
-
- const size_t vsize = sizeof ( FT_Vector );
- const size_t tsize = sizeof ( char );
-
- // we use the input data for both points and tags
- short n_points = short( size_ / ( vsize + tsize ) );
- if ( n_points <= 2 )
- return 0;
-
- FT_Vector* points = reinterpret_cast<FT_Vector*>(
- const_cast<uint8_t*>(
- data ) );
- char* tags = reinterpret_cast<char*>(
- const_cast<uint8_t*>(
- data + size_t( n_points ) * vsize ) );
-
- // to reduce the number of invalid outlines that are immediately
- // rejected in `FT_Outline_Render', limit values to 2^18 pixels
- // (i.e., 2^24 bits)
- for ( short i = 0; i < n_points; i++ )
- {
- if ( points[i].x == LONG_MIN )
- points[i].x = 0;
- else if ( points[i].x < 0 )
- points[i].x = -( -points[i].x & 0xFFFFFF ) - 1;
- else
- points[i].x = ( points[i].x & 0xFFFFFF ) + 1;
-
- if ( points[i].y == LONG_MIN )
- points[i].y = 0;
- else if ( points[i].y < 0 )
- points[i].y = -( -points[i].y & 0xFFFFFF ) - 1;
- else
- points[i].y = ( points[i].y & 0xFFFFFF ) + 1;
- }
-
- short contours[1];
- contours[0] = n_points - 1;
-
- FT_Outline outline =
- {
- 1, // n_contours
- n_points, // n_points
- points, // points
- tags, // tags
- contours, // contours
- FT_OUTLINE_NONE // flags
- };
-
- FT_Outline_Get_Bitmap( library, &outline, &bitmap_mono );
- FT_Outline_Get_Bitmap( library, &outline, &bitmap_gray );
-
- return 0;
- }
-
-
-// END
diff --git a/src/tools/ftfuzzer/runinput.cc b/src/tools/ftfuzzer/runinput.cc
deleted file mode 100644
index 15261207e..000000000
--- a/src/tools/ftfuzzer/runinput.cc
+++ /dev/null
@@ -1,58 +0,0 @@
-// runinput.cc
-//
-// A `main' function for fuzzers like `ftfuzzer.cc'.
-//
-// Copyright 2015-2017 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used,
-// modified, and distributed under the terms of the FreeType project
-// license, LICENSE.TXT. By continuing to use, modify, or distribute
-// this file you indicate that you have read the license and
-// understand and accept it fully.
-
-
-#include <assert.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdint.h>
-
-
- extern "C" void
- LLVMFuzzerTestOneInput( const uint8_t* data,
- size_t size );
-
-
- unsigned char a[1 << 24];
-
-
- int
- main( int argc,
- char* *argv )
- {
- assert( argc >= 2 );
-
- for ( int i = 1; i < argc; i++ )
- {
- fprintf( stderr, "%s\n", argv[i] );
-
- FILE* f = fopen( argv[i], "r" );
- assert( f );
-
- size_t n = fread( a, 1, sizeof ( a ), f );
- fclose( f );
- if ( !n )
- continue;
-
- unsigned char* b = (unsigned char*)malloc( n );
- memcpy( b, a, n );
-
- LLVMFuzzerTestOneInput( b, n );
-
- free( b );
- }
- }
-
-
-// END
diff --git a/src/tools/ftrandom/Makefile b/src/tools/ftrandom/Makefile
deleted file mode 100644
index 24dc49c56..000000000
--- a/src/tools/ftrandom/Makefile
+++ /dev/null
@@ -1,45 +0,0 @@
-# TOP_DIR and OBJ_DIR should be set by the user to the right directories,
-# if necessary.
-
-TOP_DIR ?= ../../..
-OBJ_DIR ?= $(TOP_DIR)/objs
-
-
-# The setup below is for gcc on a Unix-like platform,
-# where FreeType has been set up to create a static library
-# (which is the default).
-
-VPATH = $(OBJ_DIR) \
- $(OBJ_DIR)/.libs
-
-SRC_DIR = $(TOP_DIR)/src/tools/ftrandom
-
-CC = gcc
-WFLAGS = -Wmissing-prototypes \
- -Wunused \
- -Wimplicit \
- -Wreturn-type \
- -Wparentheses \
- -pedantic \
- -Wformat \
- -Wchar-subscripts \
- -Wsequence-point
-CFLAGS = $(WFLAGS) \
- -g
-INCLUDES = -I $(TOP_DIR)/include
-LDFLAGS =
-LIBS = -lm \
- -lz \
- -lpng \
- -lbz2 \
- -lharfbuzz
-
-all: $(OBJ_DIR)/ftrandom
-
-$(OBJ_DIR)/ftrandom.o: $(SRC_DIR)/ftrandom.c
- $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $<
-
-$(OBJ_DIR)/ftrandom: $(OBJ_DIR)/ftrandom.o libfreetype.a
- $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
-
-# EOF
diff --git a/src/tools/ftrandom/README b/src/tools/ftrandom/README
deleted file mode 100644
index 7c610864b..000000000
--- a/src/tools/ftrandom/README
+++ /dev/null
@@ -1,69 +0,0 @@
-ftrandom
-========
-
-This program expects a set of directories containing good fonts, and a set
-of extensions of fonts to be tested. It will randomly pick a font, copy it,
-introduce an error and then test it.
-
-The FreeType tests are quite basic; for each erroneous font ftrandom
-
- . forks off a new tester,
- . initializes the library,
- . opens each font in the file,
- . loads each glyph,
- . optionally reviews the contours of the glyph,
- . optionally rasterizes the glyph, and
- . closes the face.
-
-If a tester takes longer than 20 seconds, ftrandom saves the erroneous font
-and continues. If the tester exits normally or with an error, then the
-superstructure removes the test font and continues.
-
-
-Command line options
---------------------
-
- --all Test every font in the directory(ies) no matter
- what its extension.
- --check-outlines Call `FT_Outline_Decompose' on each glyph.
- --dir <dir> Append <dir> to the list of directories to search
- for good fonts. No recursive search.
- --error-count <cnt> Introduce <cnt> single-byte errors into the
- erroneous fonts (default: 1).
- --error-fraction <frac> Multiply the file size of the font by <frac> and
- introduce that many errors into the erroneous
- font file. <frac> should be in the range [0;1]
- (default: 0.0).
- --ext <ext> Add <ext> to the set of font types tested.
- --help Print out this list of options.
- --nohints Specify FT_LOAD_NO_HINTING when loading glyphs.
- --rasterize Call `FT_Render_Glyph' as well as loading it.
- --result <dir> This is the directory in which test files are
- placed.
- --test <file> Run a single test on a pre-generated testcase.
- This is done in the current process so it can be
- debugged more easily.
-
-The default font extensions tested by ftrandom are
-
- .ttf .otf .ttc .cid .pfb .pfa .bdf .pcf .pfr .fon .otb .cff
-
-The default font directory is controlled by the macro `GOOD_FONTS_DIR' in
-the source code (and can be thus specified during compilation); its default
-value is
-
- /usr/local/share/fonts
-
-The default result directory is `results' (in the current directory).
-
-
-Compilation
------------
-
-Two possible solutions.
-
-. Run ftrandom within a debugging tool like `valgrind' to catch various
- memory issues.
-
-. Compile FreeType with sanitizer flags as provided by gcc or clang, for
- example, then link it with ftrandom.
diff --git a/src/tools/ftrandom/ftrandom.c b/src/tools/ftrandom/ftrandom.c
deleted file mode 100644
index ab5cfc98b..000000000
--- a/src/tools/ftrandom/ftrandom.c
+++ /dev/null
@@ -1,720 +0,0 @@
-/* Copyright (C) 2005, 2007, 2008, 2013 by George Williams */
-/*
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
-
- * The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
-
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/* modified by Werner Lemberg <wl@gnu.org> */
-/* This file is now part of the FreeType library */
-
-
-#define _XOPEN_SOURCE 500 /* for `kill', `strdup', `random', and `srandom' */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <strings.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <unistd.h>
-#include <dirent.h>
-#include <signal.h>
-#include <time.h>
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_OUTLINE_H
-
-#define true 1
-#define false 0
-#define forever for (;;)
-
-
- static int check_outlines = false;
- static int nohints = false;
- static int rasterize = false;
- static char* results_dir = "results";
-
-#define GOOD_FONTS_DIR "/usr/local/share/fonts"
-
- static char* default_dir_list[] =
- {
- GOOD_FONTS_DIR,
- NULL
- };
-
- static char* default_ext_list[] =
- {
- "ttf",
- "otf",
- "ttc",
- "cid",
- "pfb",
- "pfa",
- "bdf",
- "pcf",
- "pfr",
- "fon",
- "otb",
- "cff",
- NULL
- };
-
- static unsigned int error_count = 1;
- static double error_fraction = 0.0;
-
- static FT_F26Dot6 font_size = 12 * 64;
-
- static struct fontlist
- {
- char* name;
- long len;
- unsigned int isbinary: 1;
- unsigned int isascii: 1;
- unsigned int ishex: 1;
-
- } *fontlist;
-
- static unsigned int fcnt;
-
-
- static int
- FT_MoveTo( const FT_Vector *to,
- void *user )
- {
- FT_UNUSED( to );
- FT_UNUSED( user );
-
- return 0;
- }
-
-
- static int
- FT_LineTo( const FT_Vector *to,
- void *user )
- {
- FT_UNUSED( to );
- FT_UNUSED( user );
-
- return 0;
- }
-
-
- static int
- FT_ConicTo( const FT_Vector *_cp,
- const FT_Vector *to,
- void *user )
- {
- FT_UNUSED( _cp );
- FT_UNUSED( to );
- FT_UNUSED( user );
-
- return 0;
- }
-
-
- static int
- FT_CubicTo( const FT_Vector *cp1,
- const FT_Vector *cp2,
- const FT_Vector *to,
- void *user )
- {
- FT_UNUSED( cp1 );
- FT_UNUSED( cp2 );
- FT_UNUSED( to );
- FT_UNUSED( user );
-
- return 0;
- }
-
-
- static FT_Outline_Funcs outlinefuncs =
- {
- FT_MoveTo,
- FT_LineTo,
- FT_ConicTo,
- FT_CubicTo,
- 0, 0 /* No shift, no delta */
- };
-
-
- static void
- TestFace( FT_Face face )
- {
- unsigned int gid;
- int load_flags = FT_LOAD_DEFAULT;
-
-
- if ( check_outlines &&
- FT_IS_SCALABLE( face ) )
- load_flags = FT_LOAD_NO_BITMAP;
-
- if ( nohints )
- load_flags |= FT_LOAD_NO_HINTING;
-
- FT_Set_Char_Size( face, 0, font_size, 72, 72 );
-
- for ( gid = 0; gid < face->num_glyphs; gid++ )
- {
- if ( check_outlines &&
- FT_IS_SCALABLE( face ) )
- {
- if ( !FT_Load_Glyph( face, gid, load_flags ) )
- FT_Outline_Decompose( &face->glyph->outline, &outlinefuncs, NULL );
- }
- else
- FT_Load_Glyph( face, gid, load_flags );
-
- if ( rasterize )
- FT_Render_Glyph( face->glyph, ft_render_mode_normal );
- }
-
- FT_Done_Face( face );
- }
-
-
- static void
- ExecuteTest( char* testfont )
- {
- FT_Library context;
- FT_Face face;
-
-
- if ( FT_Init_FreeType( &context ) )
- {
- fprintf( stderr, "Can't initialize FreeType.\n" );
- exit( 1 );
- }
-
- if ( FT_New_Face( context, testfont, 0, &face ) )
- {
- /* The font is erroneous, so if this fails that's ok. */
- exit( 0 );
- }
-
- if ( face->num_faces == 1 )
- TestFace( face );
- else
- {
- long i, num;
-
-
- num = face->num_faces;
- FT_Done_Face( face );
-
- for ( i = 0; i < num; i++ )
- {
- if ( !FT_New_Face( context, testfont, i, &face ) )
- TestFace( face );
- }
- }
-
- FT_Done_FreeType( context );
-
- exit( 0 );
- }
-
-
- static int
- extmatch( char* filename,
- char** extensions )
- {
- int i;
- char* pt;
-
-
- if ( !extensions )
- return true;
-
- pt = strrchr( filename, '.' );
- if ( !pt )
- return false;
- if ( pt < strrchr( filename, '/' ) )
- return false;
-
- for ( i = 0; extensions[i] != NULL; i++ )
- if ( strcasecmp( pt + 1, extensions[i] ) == 0 ||
- strcasecmp( pt, extensions[i] ) == 0 )
- return true;
-
- return false;
- }
-
-
- static void
- figurefiletype( struct fontlist* item )
- {
- FILE* foo;
-
-
- item->isbinary = item->isascii = item->ishex = false;
-
- foo = fopen( item->name, "rb" );
- if ( foo )
- {
- /* Try to guess the file type from the first few characters... */
- int ch1 = getc( foo );
- int ch2 = getc( foo );
- int ch3 = getc( foo );
- int ch4 = getc( foo );
-
-
- fclose( foo );
-
- if ( ( ch1 == 0 && ch2 == 1 && ch3 == 0 && ch4 == 0 ) ||
- ( ch1 == 'O' && ch2 == 'T' && ch3 == 'T' && ch4 == 'O' ) ||
- ( ch1 == 't' && ch2 == 'r' && ch3 == 'u' && ch4 == 'e' ) ||
- ( ch1 == 't' && ch2 == 't' && ch3 == 'c' && ch4 == 'f' ) )
- {
- /* ttf, otf, ttc files */
- item->isbinary = true;
- }
- else if ( ch1 == 0x80 && ch2 == '\01' )
- {
- /* PFB header */
- item->isbinary = true;
- }
- else if ( ch1 == '%' && ch2 == '!' )
- {
- /* Random PostScript */
- if ( strstr( item->name, ".pfa" ) ||
- strstr( item->name, ".PFA" ) )
- item->ishex = true;
- else
- item->isascii = true;
- }
- else if ( ch1 == 1 && ch2 == 0 && ch3 == 4 )
- {
- /* Bare CFF */
- item->isbinary = true;
- }
- else if ( ch1 == 'S' && ch2 == 'T' && ch3 == 'A' && ch4 == 'R' )
- {
- /* BDF */
- item->ishex = true;
- }
- else if ( ch1 == 'P' && ch2 == 'F' && ch3 == 'R' && ch4 == '0' )
- {
- /* PFR */
- item->isbinary = true;
- }
- else if ( ( ch1 == '\1' && ch2 == 'f' && ch3 == 'c' && ch4 == 'p' ) ||
- ( ch1 == 'M' && ch2 == 'Z' ) )
- {
- /* Windows FON */
- item->isbinary = true;
- }
- else
- {
- fprintf( stderr,
- "Can't recognize file type of `%s', assuming binary\n",
- item->name );
- item->isbinary = true;
- }
- }
- else
- {
- fprintf( stderr, "Can't open `%s' for typing the file.\n",
- item->name );
- item->isbinary = true;
- }
- }
-
-
- static void
- FindFonts( char** fontdirs,
- char** extensions )
- {
- int i;
- unsigned int max;
- char buffer[1025];
- struct stat statb;
-
-
- max = 0;
- fcnt = 0;
-
- for ( i = 0; fontdirs[i] != NULL; i++ )
- {
- DIR* examples;
- struct dirent* ent;
-
-
- examples = opendir( fontdirs[i] );
- if ( !examples )
- {
- fprintf( stderr,
- "Can't open example font directory `%s'\n",
- fontdirs[i] );
- exit( 1 );
- }
-
- while ( ( ent = readdir( examples ) ) != NULL )
- {
- snprintf( buffer, sizeof ( buffer ),
- "%s/%s", fontdirs[i], ent->d_name );
- if ( stat( buffer, &statb ) == -1 || S_ISDIR( statb.st_mode ) )
- continue;
- if ( !extensions || extmatch( buffer, extensions ) )
- {
- if ( fcnt >= max )
- {
- max += 100;
- fontlist = realloc( fontlist, max * sizeof ( struct fontlist ) );
- if ( !fontlist )
- {
- fprintf( stderr, "Can't allocate memory\n" );
- exit( 1 );
- }
- }
-
- fontlist[fcnt].name = strdup( buffer );
- fontlist[fcnt].len = statb.st_size;
-
- figurefiletype( &fontlist[fcnt] );
- fcnt++;
- }
- }
-
- closedir( examples );
- }
-
- if ( fcnt == 0 )
- {
- fprintf( stderr, "Can't find matching font files.\n" );
- exit( 1 );
- }
-
- fontlist[fcnt].name = NULL;
- }
-
-
- static unsigned int
- getErrorCnt( struct fontlist* item )
- {
- if ( error_count == 0 && error_fraction == 0.0 )
- return 0;
-
- return error_count + (unsigned int)( error_fraction * item->len );
- }
-
-
- static int
- getRandom( int low,
- int high )
- {
- if ( low - high < 0x10000L )
- return low + ( ( random() >> 8 ) % ( high + 1 - low ) );
-
- return low + ( random() % ( high + 1 - low ) );
- }
-
-
- static int
- copyfont( struct fontlist* item,
- char* newfont )
- {
- static char buffer[8096];
- FILE *good, *newf;
- size_t len;
- unsigned int i, err_cnt;
-
-
- good = fopen( item->name, "r" );
- if ( !good )
- {
- fprintf( stderr, "Can't open `%s'\n", item->name );
- return false;
- }
-
- newf = fopen( newfont, "w+" );
- if ( !newf )
- {
- fprintf( stderr, "Can't create temporary output file `%s'\n",
- newfont );
- exit( 1 );
- }
-
- while ( ( len = fread( buffer, 1, sizeof ( buffer ), good ) ) > 0 )
- fwrite( buffer, 1, len, newf );
-
- fclose( good );
-
- err_cnt = getErrorCnt( item );
- for ( i = 0; i < err_cnt; i++ )
- {
- fseek( newf, getRandom( 0, (int)( item->len - 1 ) ), SEEK_SET );
-
- if ( item->isbinary )
- putc( getRandom( 0, 0xFF ), newf );
- else if ( item->isascii )
- putc( getRandom( 0x20, 0x7E ), newf );
- else
- {
- int hex = getRandom( 0, 15 );
-
-
- if ( hex < 10 )
- hex += '0';
- else
- hex += 'A' - 10;
-
- putc( hex, newf );
- }
- }
-
- if ( ferror( newf ) )
- {
- fclose( newf );
- unlink( newfont );
- return false;
- }
-
- fclose( newf );
-
- return true;
- }
-
-
- static int child_pid;
-
- static void
- abort_test( int sig )
- {
- FT_UNUSED( sig );
-
- /* If a time-out happens, then kill the child */
- kill( child_pid, SIGFPE );
- write( 2, "Timeout... ", 11 );
- }
-
-
- static void
- do_test( void )
- {
- int i = getRandom( 0, (int)( fcnt - 1 ) );
- static int test_num = 0;
- char buffer[1024];
-
-
- sprintf( buffer, "%s/test%d", results_dir, test_num++ );
-
- if ( copyfont ( &fontlist[i], buffer ) )
- {
- signal( SIGALRM, abort_test );
- /* Anything that takes more than 20 seconds */
- /* to parse and/or rasterize is an error. */
- alarm( 20 );
- if ( ( child_pid = fork() ) == 0 )
- ExecuteTest( buffer );
- else if ( child_pid != -1 )
- {
- int status;
-
-
- waitpid( child_pid, &status, 0 );
- alarm( 0 );
- if ( WIFSIGNALED ( status ) )
- printf( "Error found in file `%s'\n", buffer );
- else
- unlink( buffer );
- }
- else
- {
- fprintf( stderr, "Can't fork test case.\n" );
- exit( 1 );
- }
- alarm( 0 );
- }
- }
-
-
- static void
- usage( FILE* out,
- char* name )
- {
- char** d = default_dir_list;
- char** e = default_ext_list;
-
-
- fprintf( out, "%s [options] -- Generate random erroneous fonts\n"
- " and attempt to parse them with FreeType.\n\n", name );
-
- fprintf( out, " --all All non-directory files are assumed to be fonts.\n" );
- fprintf( out, " --check-outlines Make sure we can parse the outlines of each glyph.\n" );
- fprintf( out, " --dir <path> Append <path> to list of font search directories\n"
- " (no recursive search).\n" );
- fprintf( out, " --error-count <cnt> Introduce <cnt> single byte errors into each font\n"
- " (default: 1)\n" );
- fprintf( out, " --error-fraction <frac> Introduce <frac>*filesize single byte errors\n"
- " into each font (default: 0.0).\n" );
- fprintf( out, " --ext <ext> Add <ext> to list of extensions indicating fonts.\n" );
- fprintf( out, " --help Print this.\n" );
- fprintf( out, " --nohints Turn off hinting.\n" );
- fprintf( out, " --rasterize Attempt to rasterize each glyph.\n" );
- fprintf( out, " --results <path> Place the created test fonts into <path>\n"
- " (default: `results')\n" );
- fprintf( out, " --size <float> Use the given font size for the tests.\n" );
- fprintf( out, " --test <file> Run a single test on an already existing file.\n" );
- fprintf( out, "\n" );
-
- fprintf( out, "Default font extensions:\n" );
- fprintf( out, " " );
- while ( *e )
- fprintf( out, " .%s", *e++ );
- fprintf( out, "\n" );
-
- fprintf( out, "Default font directories:\n" );
- fprintf( out, " " );
- while ( *d )
- fprintf( out, " %s", *d++ );
- fprintf( out, "\n" );
- }
-
-
- int
- main( int argc,
- char** argv )
- {
- char **dirs, **exts;
- int dcnt = 0, ecnt = 0, rset = false, allexts = false;
- int i;
- time_t now;
- char* testfile = NULL;
-
-
- dirs = calloc( (size_t)( argc + 1 ), sizeof ( char ** ) );
- exts = calloc( (size_t)( argc + 1 ), sizeof ( char ** ) );
-
- for ( i = 1; i < argc; i++ )
- {
- char* pt = argv[i];
- char* end;
-
-
- if ( pt[0] == '-' && pt[1] == '-' )
- pt++;
-
- if ( strcmp( pt, "-all" ) == 0 )
- allexts = true;
- else if ( strcmp( pt, "-check-outlines" ) == 0 )
- check_outlines = true;
- else if ( strcmp( pt, "-dir" ) == 0 )
- dirs[dcnt++] = argv[++i];
- else if ( strcmp( pt, "-error-count" ) == 0 )
- {
- if ( !rset )
- error_fraction = 0.0;
- rset = true;
- error_count = (unsigned int)strtoul( argv[++i], &end, 10 );
- if ( *end != '\0' )
- {
- fprintf( stderr, "Bad value for error-count: %s\n", argv[i] );
- exit( 1 );
- }
- }
- else if ( strcmp( pt, "-error-fraction" ) == 0 )
- {
- if ( !rset )
- error_count = 0;
- rset = true;
- error_fraction = strtod( argv[++i], &end );
- if ( *end != '\0' )
- {
- fprintf( stderr, "Bad value for error-fraction: %s\n", argv[i] );
- exit( 1 );
- }
- if ( error_fraction < 0.0 || error_fraction > 1.0 )
- {
- fprintf( stderr, "error-fraction must be in the range [0;1]\n" );
- exit( 1 );
- }
- }
- else if ( strcmp( pt, "-ext" ) == 0 )
- exts[ecnt++] = argv[++i];
- else if ( strcmp( pt, "-help" ) == 0 )
- {
- usage( stdout, argv[0] );
- exit( 0 );
- }
- else if ( strcmp( pt, "-nohints" ) == 0 )
- nohints = true;
- else if ( strcmp( pt, "-rasterize" ) == 0 )
- rasterize = true;
- else if ( strcmp( pt, "-results" ) == 0 )
- results_dir = argv[++i];
- else if ( strcmp( pt, "-size" ) == 0 )
- {
- font_size = (FT_F26Dot6)( strtod( argv[++i], &end ) * 64 );
- if ( *end != '\0' || font_size < 64 )
- {
- fprintf( stderr, "Bad value for size: %s\n", argv[i] );
- exit( 1 );
- }
- }
- else if ( strcmp( pt, "-test" ) == 0 )
- testfile = argv[++i];
- else
- {
- usage( stderr, argv[0] );
- exit( 1 );
- }
- }
-
- if ( allexts )
- {
- free( exts );
- exts = NULL;
- }
- else if ( ecnt == 0 )
- {
- free( exts );
- exts = default_ext_list;
- }
-
- if ( dcnt == 0 )
- {
- free( dirs );
- dirs = default_dir_list;
- }
-
- if ( testfile )
- ExecuteTest( testfile ); /* This should never return */
-
- time( &now );
- srandom( (unsigned int)now );
-
- FindFonts( dirs, exts );
- mkdir( results_dir, 0755 );
-
- forever
- do_test();
-
- return 0;
- }
-
-
-/* EOF */
diff --git a/src/tools/glnames.py b/src/tools/glnames.py
deleted file mode 100644
index 9ed158862..000000000
--- a/src/tools/glnames.py
+++ /dev/null
@@ -1,5540 +0,0 @@
-#!/usr/bin/env python
-#
-
-#
-# FreeType 2 glyph name builder
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-"""\
-
-usage: %s <output-file>
-
- This python script generates the glyph names tables defined in the
- `psnames' module.
-
- Its single argument is the name of the header file to be created.
-"""
-
-
-import sys, string, struct, re, os.path
-
-
-# This table lists the glyphs according to the Macintosh specification.
-# It is used by the TrueType Postscript names table.
-#
-# See
-#
-# https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html
-#
-# for the official list.
-#
-mac_standard_names = \
-[
- # 0
- ".notdef", ".null", "nonmarkingreturn", "space", "exclam",
- "quotedbl", "numbersign", "dollar", "percent", "ampersand",
-
- # 10
- "quotesingle", "parenleft", "parenright", "asterisk", "plus",
- "comma", "hyphen", "period", "slash", "zero",
-
- # 20
- "one", "two", "three", "four", "five",
- "six", "seven", "eight", "nine", "colon",
-
- # 30
- "semicolon", "less", "equal", "greater", "question",
- "at", "A", "B", "C", "D",
-
- # 40
- "E", "F", "G", "H", "I",
- "J", "K", "L", "M", "N",
-
- # 50
- "O", "P", "Q", "R", "S",
- "T", "U", "V", "W", "X",
-
- # 60
- "Y", "Z", "bracketleft", "backslash", "bracketright",
- "asciicircum", "underscore", "grave", "a", "b",
-
- # 70
- "c", "d", "e", "f", "g",
- "h", "i", "j", "k", "l",
-
- # 80
- "m", "n", "o", "p", "q",
- "r", "s", "t", "u", "v",
-
- # 90
- "w", "x", "y", "z", "braceleft",
- "bar", "braceright", "asciitilde", "Adieresis", "Aring",
-
- # 100
- "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis",
- "aacute", "agrave", "acircumflex", "adieresis", "atilde",
-
- # 110
- "aring", "ccedilla", "eacute", "egrave", "ecircumflex",
- "edieresis", "iacute", "igrave", "icircumflex", "idieresis",
-
- # 120
- "ntilde", "oacute", "ograve", "ocircumflex", "odieresis",
- "otilde", "uacute", "ugrave", "ucircumflex", "udieresis",
-
- # 130
- "dagger", "degree", "cent", "sterling", "section",
- "bullet", "paragraph", "germandbls", "registered", "copyright",
-
- # 140
- "trademark", "acute", "dieresis", "notequal", "AE",
- "Oslash", "infinity", "plusminus", "lessequal", "greaterequal",
-
- # 150
- "yen", "mu", "partialdiff", "summation", "product",
- "pi", "integral", "ordfeminine", "ordmasculine", "Omega",
-
- # 160
- "ae", "oslash", "questiondown", "exclamdown", "logicalnot",
- "radical", "florin", "approxequal", "Delta", "guillemotleft",
-
- # 170
- "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde",
- "Otilde", "OE", "oe", "endash", "emdash",
-
- # 180
- "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide",
- "lozenge", "ydieresis", "Ydieresis", "fraction", "currency",
-
- # 190
- "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl",
- "periodcentered", "quotesinglbase", "quotedblbase", "perthousand",
- "Acircumflex",
-
- # 200
- "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute",
- "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex",
-
- # 210
- "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave",
- "dotlessi", "circumflex", "tilde", "macron", "breve",
-
- # 220
- "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek",
- "caron", "Lslash", "lslash", "Scaron", "scaron",
-
- # 230
- "Zcaron", "zcaron", "brokenbar", "Eth", "eth",
- "Yacute", "yacute", "Thorn", "thorn", "minus",
-
- # 240
- "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf",
- "onequarter", "threequarters", "franc", "Gbreve", "gbreve",
-
- # 250
- "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute",
- "Ccaron", "ccaron", "dcroat"
-]
-
-
-# The list of standard `SID' glyph names. For the official list,
-# see Annex A of document at
-#
-# http://partners.adobe.com/public/developer/en/font/5176.CFF.pdf .
-#
-sid_standard_names = \
-[
- # 0
- ".notdef", "space", "exclam", "quotedbl", "numbersign",
- "dollar", "percent", "ampersand", "quoteright", "parenleft",
-
- # 10
- "parenright", "asterisk", "plus", "comma", "hyphen",
- "period", "slash", "zero", "one", "two",
-
- # 20
- "three", "four", "five", "six", "seven",
- "eight", "nine", "colon", "semicolon", "less",
-
- # 30
- "equal", "greater", "question", "at", "A",
- "B", "C", "D", "E", "F",
-
- # 40
- "G", "H", "I", "J", "K",
- "L", "M", "N", "O", "P",
-
- # 50
- "Q", "R", "S", "T", "U",
- "V", "W", "X", "Y", "Z",
-
- # 60
- "bracketleft", "backslash", "bracketright", "asciicircum", "underscore",
- "quoteleft", "a", "b", "c", "d",
-
- # 70
- "e", "f", "g", "h", "i",
- "j", "k", "l", "m", "n",
-
- # 80
- "o", "p", "q", "r", "s",
- "t", "u", "v", "w", "x",
-
- # 90
- "y", "z", "braceleft", "bar", "braceright",
- "asciitilde", "exclamdown", "cent", "sterling", "fraction",
-
- # 100
- "yen", "florin", "section", "currency", "quotesingle",
- "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi",
-
- # 110
- "fl", "endash", "dagger", "daggerdbl", "periodcentered",
- "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright",
-
- # 120
- "guillemotright", "ellipsis", "perthousand", "questiondown", "grave",
- "acute", "circumflex", "tilde", "macron", "breve",
-
- # 130
- "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut",
- "ogonek", "caron", "emdash", "AE", "ordfeminine",
-
- # 140
- "Lslash", "Oslash", "OE", "ordmasculine", "ae",
- "dotlessi", "lslash", "oslash", "oe", "germandbls",
-
- # 150
- "onesuperior", "logicalnot", "mu", "trademark", "Eth",
- "onehalf", "plusminus", "Thorn", "onequarter", "divide",
-
- # 160
- "brokenbar", "degree", "thorn", "threequarters", "twosuperior",
- "registered", "minus", "eth", "multiply", "threesuperior",
-
- # 170
- "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave",
- "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex",
-
- # 180
- "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis",
- "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis",
-
- # 190
- "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex",
- "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron",
-
- # 200
- "aacute", "acircumflex", "adieresis", "agrave", "aring",
- "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis",
-
- # 210
- "egrave", "iacute", "icircumflex", "idieresis", "igrave",
- "ntilde", "oacute", "ocircumflex", "odieresis", "ograve",
-
- # 220
- "otilde", "scaron", "uacute", "ucircumflex", "udieresis",
- "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall",
-
- # 230
- "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall",
- "Acutesmall",
- "parenleftsuperior", "parenrightsuperior", "twodotenleader",
- "onedotenleader", "zerooldstyle",
-
- # 240
- "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle",
- "fiveoldstyle",
- "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle",
- "commasuperior",
-
- # 250
- "threequartersemdash", "periodsuperior", "questionsmall", "asuperior",
- "bsuperior",
- "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior",
-
- # 260
- "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior",
- "tsuperior", "ff", "ffi", "ffl", "parenleftinferior",
-
- # 270
- "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall",
- "Asmall",
- "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall",
-
- # 280
- "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall",
- "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall",
-
- # 290
- "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall",
- "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall",
-
- # 300
- "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall",
- "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall",
- "Dieresissmall",
-
- # 310
- "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash",
- "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall",
- "questiondownsmall",
-
- # 320
- "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird",
- "twothirds", "zerosuperior", "foursuperior", "fivesuperior",
- "sixsuperior",
-
- # 330
- "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior",
- "oneinferior",
- "twoinferior", "threeinferior", "fourinferior", "fiveinferior",
- "sixinferior",
-
- # 340
- "seveninferior", "eightinferior", "nineinferior", "centinferior",
- "dollarinferior",
- "periodinferior", "commainferior", "Agravesmall", "Aacutesmall",
- "Acircumflexsmall",
-
- # 350
- "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall",
- "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall",
- "Igravesmall",
-
- # 360
- "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall",
- "Ntildesmall",
- "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall",
- "Odieresissmall",
-
- # 370
- "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall",
- "Ucircumflexsmall",
- "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall",
- "001.000",
-
- # 380
- "001.001", "001.002", "001.003", "Black", "Bold",
- "Book", "Light", "Medium", "Regular", "Roman",
-
- # 390
- "Semibold"
-]
-
-
-# This table maps character codes of the Adobe Standard Type 1
-# encoding to glyph indices in the sid_standard_names table.
-#
-t1_standard_encoding = \
-[
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 2, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
-
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
-
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 0, 111, 112, 113,
- 114, 0, 115, 116, 117, 118, 119, 120, 121, 122,
- 0, 123, 0, 124, 125, 126, 127, 128, 129, 130,
-
- 131, 0, 132, 133, 0, 134, 135, 136, 137, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 138, 0, 139, 0, 0,
- 0, 0, 140, 141, 142, 143, 0, 0, 0, 0,
- 0, 144, 0, 0, 0, 145, 0, 0, 146, 147,
-
- 148, 149, 0, 0, 0, 0
-]
-
-
-# This table maps character codes of the Adobe Expert Type 1
-# encoding to glyph indices in the sid_standard_names table.
-#
-t1_expert_encoding = \
-[
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 229, 230, 0, 231, 232, 233, 234,
- 235, 236, 237, 238, 13, 14, 15, 99, 239, 240,
-
- 241, 242, 243, 244, 245, 246, 247, 248, 27, 28,
- 249, 250, 251, 252, 0, 253, 254, 255, 256, 257,
- 0, 0, 0, 258, 0, 0, 259, 260, 261, 262,
- 0, 0, 263, 264, 265, 0, 266, 109, 110, 267,
- 268, 269, 0, 270, 271, 272, 273, 274, 275, 276,
-
- 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, 300, 301, 302, 303, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 304, 305, 306, 0, 0, 307, 308, 309, 310,
- 311, 0, 312, 0, 0, 313, 0, 0, 314, 315,
- 0, 0, 316, 317, 318, 0, 0, 0, 158, 155,
- 163, 319, 320, 321, 322, 323, 324, 325, 0, 0,
-
- 326, 150, 164, 169, 327, 328, 329, 330, 331, 332,
- 333, 334, 335, 336, 337, 338, 339, 340, 341, 342,
- 343, 344, 345, 346, 347, 348, 349, 350, 351, 352,
- 353, 354, 355, 356, 357, 358, 359, 360, 361, 362,
- 363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
-
- 373, 374, 375, 376, 377, 378
-]
-
-
-# This data has been taken literally from the files `glyphlist.txt'
-# and `zapfdingbats.txt' version 2.0, Sept 2002. It is available from
-#
-# https://github.com/adobe-type-tools/agl-aglfn
-#
-adobe_glyph_list = """\
-A;0041
-AE;00C6
-AEacute;01FC
-AEmacron;01E2
-AEsmall;F7E6
-Aacute;00C1
-Aacutesmall;F7E1
-Abreve;0102
-Abreveacute;1EAE
-Abrevecyrillic;04D0
-Abrevedotbelow;1EB6
-Abrevegrave;1EB0
-Abrevehookabove;1EB2
-Abrevetilde;1EB4
-Acaron;01CD
-Acircle;24B6
-Acircumflex;00C2
-Acircumflexacute;1EA4
-Acircumflexdotbelow;1EAC
-Acircumflexgrave;1EA6
-Acircumflexhookabove;1EA8
-Acircumflexsmall;F7E2
-Acircumflextilde;1EAA
-Acute;F6C9
-Acutesmall;F7B4
-Acyrillic;0410
-Adblgrave;0200
-Adieresis;00C4
-Adieresiscyrillic;04D2
-Adieresismacron;01DE
-Adieresissmall;F7E4
-Adotbelow;1EA0
-Adotmacron;01E0
-Agrave;00C0
-Agravesmall;F7E0
-Ahookabove;1EA2
-Aiecyrillic;04D4
-Ainvertedbreve;0202
-Alpha;0391
-Alphatonos;0386
-Amacron;0100
-Amonospace;FF21
-Aogonek;0104
-Aring;00C5
-Aringacute;01FA
-Aringbelow;1E00
-Aringsmall;F7E5
-Asmall;F761
-Atilde;00C3
-Atildesmall;F7E3
-Aybarmenian;0531
-B;0042
-Bcircle;24B7
-Bdotaccent;1E02
-Bdotbelow;1E04
-Becyrillic;0411
-Benarmenian;0532
-Beta;0392
-Bhook;0181
-Blinebelow;1E06
-Bmonospace;FF22
-Brevesmall;F6F4
-Bsmall;F762
-Btopbar;0182
-C;0043
-Caarmenian;053E
-Cacute;0106
-Caron;F6CA
-Caronsmall;F6F5
-Ccaron;010C
-Ccedilla;00C7
-Ccedillaacute;1E08
-Ccedillasmall;F7E7
-Ccircle;24B8
-Ccircumflex;0108
-Cdot;010A
-Cdotaccent;010A
-Cedillasmall;F7B8
-Chaarmenian;0549
-Cheabkhasiancyrillic;04BC
-Checyrillic;0427
-Chedescenderabkhasiancyrillic;04BE
-Chedescendercyrillic;04B6
-Chedieresiscyrillic;04F4
-Cheharmenian;0543
-Chekhakassiancyrillic;04CB
-Cheverticalstrokecyrillic;04B8
-Chi;03A7
-Chook;0187
-Circumflexsmall;F6F6
-Cmonospace;FF23
-Coarmenian;0551
-Csmall;F763
-D;0044
-DZ;01F1
-DZcaron;01C4
-Daarmenian;0534
-Dafrican;0189
-Dcaron;010E
-Dcedilla;1E10
-Dcircle;24B9
-Dcircumflexbelow;1E12
-Dcroat;0110
-Ddotaccent;1E0A
-Ddotbelow;1E0C
-Decyrillic;0414
-Deicoptic;03EE
-Delta;2206
-Deltagreek;0394
-Dhook;018A
-Dieresis;F6CB
-DieresisAcute;F6CC
-DieresisGrave;F6CD
-Dieresissmall;F7A8
-Digammagreek;03DC
-Djecyrillic;0402
-Dlinebelow;1E0E
-Dmonospace;FF24
-Dotaccentsmall;F6F7
-Dslash;0110
-Dsmall;F764
-Dtopbar;018B
-Dz;01F2
-Dzcaron;01C5
-Dzeabkhasiancyrillic;04E0
-Dzecyrillic;0405
-Dzhecyrillic;040F
-E;0045
-Eacute;00C9
-Eacutesmall;F7E9
-Ebreve;0114
-Ecaron;011A
-Ecedillabreve;1E1C
-Echarmenian;0535
-Ecircle;24BA
-Ecircumflex;00CA
-Ecircumflexacute;1EBE
-Ecircumflexbelow;1E18
-Ecircumflexdotbelow;1EC6
-Ecircumflexgrave;1EC0
-Ecircumflexhookabove;1EC2
-Ecircumflexsmall;F7EA
-Ecircumflextilde;1EC4
-Ecyrillic;0404
-Edblgrave;0204
-Edieresis;00CB
-Edieresissmall;F7EB
-Edot;0116
-Edotaccent;0116
-Edotbelow;1EB8
-Efcyrillic;0424
-Egrave;00C8
-Egravesmall;F7E8
-Eharmenian;0537
-Ehookabove;1EBA
-Eightroman;2167
-Einvertedbreve;0206
-Eiotifiedcyrillic;0464
-Elcyrillic;041B
-Elevenroman;216A
-Emacron;0112
-Emacronacute;1E16
-Emacrongrave;1E14
-Emcyrillic;041C
-Emonospace;FF25
-Encyrillic;041D
-Endescendercyrillic;04A2
-Eng;014A
-Enghecyrillic;04A4
-Enhookcyrillic;04C7
-Eogonek;0118
-Eopen;0190
-Epsilon;0395
-Epsilontonos;0388
-Ercyrillic;0420
-Ereversed;018E
-Ereversedcyrillic;042D
-Escyrillic;0421
-Esdescendercyrillic;04AA
-Esh;01A9
-Esmall;F765
-Eta;0397
-Etarmenian;0538
-Etatonos;0389
-Eth;00D0
-Ethsmall;F7F0
-Etilde;1EBC
-Etildebelow;1E1A
-Euro;20AC
-Ezh;01B7
-Ezhcaron;01EE
-Ezhreversed;01B8
-F;0046
-Fcircle;24BB
-Fdotaccent;1E1E
-Feharmenian;0556
-Feicoptic;03E4
-Fhook;0191
-Fitacyrillic;0472
-Fiveroman;2164
-Fmonospace;FF26
-Fourroman;2163
-Fsmall;F766
-G;0047
-GBsquare;3387
-Gacute;01F4
-Gamma;0393
-Gammaafrican;0194
-Gangiacoptic;03EA
-Gbreve;011E
-Gcaron;01E6
-Gcedilla;0122
-Gcircle;24BC
-Gcircumflex;011C
-Gcommaaccent;0122
-Gdot;0120
-Gdotaccent;0120
-Gecyrillic;0413
-Ghadarmenian;0542
-Ghemiddlehookcyrillic;0494
-Ghestrokecyrillic;0492
-Gheupturncyrillic;0490
-Ghook;0193
-Gimarmenian;0533
-Gjecyrillic;0403
-Gmacron;1E20
-Gmonospace;FF27
-Grave;F6CE
-Gravesmall;F760
-Gsmall;F767
-Gsmallhook;029B
-Gstroke;01E4
-H;0048
-H18533;25CF
-H18543;25AA
-H18551;25AB
-H22073;25A1
-HPsquare;33CB
-Haabkhasiancyrillic;04A8
-Hadescendercyrillic;04B2
-Hardsigncyrillic;042A
-Hbar;0126
-Hbrevebelow;1E2A
-Hcedilla;1E28
-Hcircle;24BD
-Hcircumflex;0124
-Hdieresis;1E26
-Hdotaccent;1E22
-Hdotbelow;1E24
-Hmonospace;FF28
-Hoarmenian;0540
-Horicoptic;03E8
-Hsmall;F768
-Hungarumlaut;F6CF
-Hungarumlautsmall;F6F8
-Hzsquare;3390
-I;0049
-IAcyrillic;042F
-IJ;0132
-IUcyrillic;042E
-Iacute;00CD
-Iacutesmall;F7ED
-Ibreve;012C
-Icaron;01CF
-Icircle;24BE
-Icircumflex;00CE
-Icircumflexsmall;F7EE
-Icyrillic;0406
-Idblgrave;0208
-Idieresis;00CF
-Idieresisacute;1E2E
-Idieresiscyrillic;04E4
-Idieresissmall;F7EF
-Idot;0130
-Idotaccent;0130
-Idotbelow;1ECA
-Iebrevecyrillic;04D6
-Iecyrillic;0415
-Ifraktur;2111
-Igrave;00CC
-Igravesmall;F7EC
-Ihookabove;1EC8
-Iicyrillic;0418
-Iinvertedbreve;020A
-Iishortcyrillic;0419
-Imacron;012A
-Imacroncyrillic;04E2
-Imonospace;FF29
-Iniarmenian;053B
-Iocyrillic;0401
-Iogonek;012E
-Iota;0399
-Iotaafrican;0196
-Iotadieresis;03AA
-Iotatonos;038A
-Ismall;F769
-Istroke;0197
-Itilde;0128
-Itildebelow;1E2C
-Izhitsacyrillic;0474
-Izhitsadblgravecyrillic;0476
-J;004A
-Jaarmenian;0541
-Jcircle;24BF
-Jcircumflex;0134
-Jecyrillic;0408
-Jheharmenian;054B
-Jmonospace;FF2A
-Jsmall;F76A
-K;004B
-KBsquare;3385
-KKsquare;33CD
-Kabashkircyrillic;04A0
-Kacute;1E30
-Kacyrillic;041A
-Kadescendercyrillic;049A
-Kahookcyrillic;04C3
-Kappa;039A
-Kastrokecyrillic;049E
-Kaverticalstrokecyrillic;049C
-Kcaron;01E8
-Kcedilla;0136
-Kcircle;24C0
-Kcommaaccent;0136
-Kdotbelow;1E32
-Keharmenian;0554
-Kenarmenian;053F
-Khacyrillic;0425
-Kheicoptic;03E6
-Khook;0198
-Kjecyrillic;040C
-Klinebelow;1E34
-Kmonospace;FF2B
-Koppacyrillic;0480
-Koppagreek;03DE
-Ksicyrillic;046E
-Ksmall;F76B
-L;004C
-LJ;01C7
-LL;F6BF
-Lacute;0139
-Lambda;039B
-Lcaron;013D
-Lcedilla;013B
-Lcircle;24C1
-Lcircumflexbelow;1E3C
-Lcommaaccent;013B
-Ldot;013F
-Ldotaccent;013F
-Ldotbelow;1E36
-Ldotbelowmacron;1E38
-Liwnarmenian;053C
-Lj;01C8
-Ljecyrillic;0409
-Llinebelow;1E3A
-Lmonospace;FF2C
-Lslash;0141
-Lslashsmall;F6F9
-Lsmall;F76C
-M;004D
-MBsquare;3386
-Macron;F6D0
-Macronsmall;F7AF
-Macute;1E3E
-Mcircle;24C2
-Mdotaccent;1E40
-Mdotbelow;1E42
-Menarmenian;0544
-Mmonospace;FF2D
-Msmall;F76D
-Mturned;019C
-Mu;039C
-N;004E
-NJ;01CA
-Nacute;0143
-Ncaron;0147
-Ncedilla;0145
-Ncircle;24C3
-Ncircumflexbelow;1E4A
-Ncommaaccent;0145
-Ndotaccent;1E44
-Ndotbelow;1E46
-Nhookleft;019D
-Nineroman;2168
-Nj;01CB
-Njecyrillic;040A
-Nlinebelow;1E48
-Nmonospace;FF2E
-Nowarmenian;0546
-Nsmall;F76E
-Ntilde;00D1
-Ntildesmall;F7F1
-Nu;039D
-O;004F
-OE;0152
-OEsmall;F6FA
-Oacute;00D3
-Oacutesmall;F7F3
-Obarredcyrillic;04E8
-Obarreddieresiscyrillic;04EA
-Obreve;014E
-Ocaron;01D1
-Ocenteredtilde;019F
-Ocircle;24C4
-Ocircumflex;00D4
-Ocircumflexacute;1ED0
-Ocircumflexdotbelow;1ED8
-Ocircumflexgrave;1ED2
-Ocircumflexhookabove;1ED4
-Ocircumflexsmall;F7F4
-Ocircumflextilde;1ED6
-Ocyrillic;041E
-Odblacute;0150
-Odblgrave;020C
-Odieresis;00D6
-Odieresiscyrillic;04E6
-Odieresissmall;F7F6
-Odotbelow;1ECC
-Ogoneksmall;F6FB
-Ograve;00D2
-Ogravesmall;F7F2
-Oharmenian;0555
-Ohm;2126
-Ohookabove;1ECE
-Ohorn;01A0
-Ohornacute;1EDA
-Ohorndotbelow;1EE2
-Ohorngrave;1EDC
-Ohornhookabove;1EDE
-Ohorntilde;1EE0
-Ohungarumlaut;0150
-Oi;01A2
-Oinvertedbreve;020E
-Omacron;014C
-Omacronacute;1E52
-Omacrongrave;1E50
-Omega;2126
-Omegacyrillic;0460
-Omegagreek;03A9
-Omegaroundcyrillic;047A
-Omegatitlocyrillic;047C
-Omegatonos;038F
-Omicron;039F
-Omicrontonos;038C
-Omonospace;FF2F
-Oneroman;2160
-Oogonek;01EA
-Oogonekmacron;01EC
-Oopen;0186
-Oslash;00D8
-Oslashacute;01FE
-Oslashsmall;F7F8
-Osmall;F76F
-Ostrokeacute;01FE
-Otcyrillic;047E
-Otilde;00D5
-Otildeacute;1E4C
-Otildedieresis;1E4E
-Otildesmall;F7F5
-P;0050
-Pacute;1E54
-Pcircle;24C5
-Pdotaccent;1E56
-Pecyrillic;041F
-Peharmenian;054A
-Pemiddlehookcyrillic;04A6
-Phi;03A6
-Phook;01A4
-Pi;03A0
-Piwrarmenian;0553
-Pmonospace;FF30
-Psi;03A8
-Psicyrillic;0470
-Psmall;F770
-Q;0051
-Qcircle;24C6
-Qmonospace;FF31
-Qsmall;F771
-R;0052
-Raarmenian;054C
-Racute;0154
-Rcaron;0158
-Rcedilla;0156
-Rcircle;24C7
-Rcommaaccent;0156
-Rdblgrave;0210
-Rdotaccent;1E58
-Rdotbelow;1E5A
-Rdotbelowmacron;1E5C
-Reharmenian;0550
-Rfraktur;211C
-Rho;03A1
-Ringsmall;F6FC
-Rinvertedbreve;0212
-Rlinebelow;1E5E
-Rmonospace;FF32
-Rsmall;F772
-Rsmallinverted;0281
-Rsmallinvertedsuperior;02B6
-S;0053
-SF010000;250C
-SF020000;2514
-SF030000;2510
-SF040000;2518
-SF050000;253C
-SF060000;252C
-SF070000;2534
-SF080000;251C
-SF090000;2524
-SF100000;2500
-SF110000;2502
-SF190000;2561
-SF200000;2562
-SF210000;2556
-SF220000;2555
-SF230000;2563
-SF240000;2551
-SF250000;2557
-SF260000;255D
-SF270000;255C
-SF280000;255B
-SF360000;255E
-SF370000;255F
-SF380000;255A
-SF390000;2554
-SF400000;2569
-SF410000;2566
-SF420000;2560
-SF430000;2550
-SF440000;256C
-SF450000;2567
-SF460000;2568
-SF470000;2564
-SF480000;2565
-SF490000;2559
-SF500000;2558
-SF510000;2552
-SF520000;2553
-SF530000;256B
-SF540000;256A
-Sacute;015A
-Sacutedotaccent;1E64
-Sampigreek;03E0
-Scaron;0160
-Scarondotaccent;1E66
-Scaronsmall;F6FD
-Scedilla;015E
-Schwa;018F
-Schwacyrillic;04D8
-Schwadieresiscyrillic;04DA
-Scircle;24C8
-Scircumflex;015C
-Scommaaccent;0218
-Sdotaccent;1E60
-Sdotbelow;1E62
-Sdotbelowdotaccent;1E68
-Seharmenian;054D
-Sevenroman;2166
-Shaarmenian;0547
-Shacyrillic;0428
-Shchacyrillic;0429
-Sheicoptic;03E2
-Shhacyrillic;04BA
-Shimacoptic;03EC
-Sigma;03A3
-Sixroman;2165
-Smonospace;FF33
-Softsigncyrillic;042C
-Ssmall;F773
-Stigmagreek;03DA
-T;0054
-Tau;03A4
-Tbar;0166
-Tcaron;0164
-Tcedilla;0162
-Tcircle;24C9
-Tcircumflexbelow;1E70
-Tcommaaccent;0162
-Tdotaccent;1E6A
-Tdotbelow;1E6C
-Tecyrillic;0422
-Tedescendercyrillic;04AC
-Tenroman;2169
-Tetsecyrillic;04B4
-Theta;0398
-Thook;01AC
-Thorn;00DE
-Thornsmall;F7FE
-Threeroman;2162
-Tildesmall;F6FE
-Tiwnarmenian;054F
-Tlinebelow;1E6E
-Tmonospace;FF34
-Toarmenian;0539
-Tonefive;01BC
-Tonesix;0184
-Tonetwo;01A7
-Tretroflexhook;01AE
-Tsecyrillic;0426
-Tshecyrillic;040B
-Tsmall;F774
-Twelveroman;216B
-Tworoman;2161
-U;0055
-Uacute;00DA
-Uacutesmall;F7FA
-Ubreve;016C
-Ucaron;01D3
-Ucircle;24CA
-Ucircumflex;00DB
-Ucircumflexbelow;1E76
-Ucircumflexsmall;F7FB
-Ucyrillic;0423
-Udblacute;0170
-Udblgrave;0214
-Udieresis;00DC
-Udieresisacute;01D7
-Udieresisbelow;1E72
-Udieresiscaron;01D9
-Udieresiscyrillic;04F0
-Udieresisgrave;01DB
-Udieresismacron;01D5
-Udieresissmall;F7FC
-Udotbelow;1EE4
-Ugrave;00D9
-Ugravesmall;F7F9
-Uhookabove;1EE6
-Uhorn;01AF
-Uhornacute;1EE8
-Uhorndotbelow;1EF0
-Uhorngrave;1EEA
-Uhornhookabove;1EEC
-Uhorntilde;1EEE
-Uhungarumlaut;0170
-Uhungarumlautcyrillic;04F2
-Uinvertedbreve;0216
-Ukcyrillic;0478
-Umacron;016A
-Umacroncyrillic;04EE
-Umacrondieresis;1E7A
-Umonospace;FF35
-Uogonek;0172
-Upsilon;03A5
-Upsilon1;03D2
-Upsilonacutehooksymbolgreek;03D3
-Upsilonafrican;01B1
-Upsilondieresis;03AB
-Upsilondieresishooksymbolgreek;03D4
-Upsilonhooksymbol;03D2
-Upsilontonos;038E
-Uring;016E
-Ushortcyrillic;040E
-Usmall;F775
-Ustraightcyrillic;04AE
-Ustraightstrokecyrillic;04B0
-Utilde;0168
-Utildeacute;1E78
-Utildebelow;1E74
-V;0056
-Vcircle;24CB
-Vdotbelow;1E7E
-Vecyrillic;0412
-Vewarmenian;054E
-Vhook;01B2
-Vmonospace;FF36
-Voarmenian;0548
-Vsmall;F776
-Vtilde;1E7C
-W;0057
-Wacute;1E82
-Wcircle;24CC
-Wcircumflex;0174
-Wdieresis;1E84
-Wdotaccent;1E86
-Wdotbelow;1E88
-Wgrave;1E80
-Wmonospace;FF37
-Wsmall;F777
-X;0058
-Xcircle;24CD
-Xdieresis;1E8C
-Xdotaccent;1E8A
-Xeharmenian;053D
-Xi;039E
-Xmonospace;FF38
-Xsmall;F778
-Y;0059
-Yacute;00DD
-Yacutesmall;F7FD
-Yatcyrillic;0462
-Ycircle;24CE
-Ycircumflex;0176
-Ydieresis;0178
-Ydieresissmall;F7FF
-Ydotaccent;1E8E
-Ydotbelow;1EF4
-Yericyrillic;042B
-Yerudieresiscyrillic;04F8
-Ygrave;1EF2
-Yhook;01B3
-Yhookabove;1EF6
-Yiarmenian;0545
-Yicyrillic;0407
-Yiwnarmenian;0552
-Ymonospace;FF39
-Ysmall;F779
-Ytilde;1EF8
-Yusbigcyrillic;046A
-Yusbigiotifiedcyrillic;046C
-Yuslittlecyrillic;0466
-Yuslittleiotifiedcyrillic;0468
-Z;005A
-Zaarmenian;0536
-Zacute;0179
-Zcaron;017D
-Zcaronsmall;F6FF
-Zcircle;24CF
-Zcircumflex;1E90
-Zdot;017B
-Zdotaccent;017B
-Zdotbelow;1E92
-Zecyrillic;0417
-Zedescendercyrillic;0498
-Zedieresiscyrillic;04DE
-Zeta;0396
-Zhearmenian;053A
-Zhebrevecyrillic;04C1
-Zhecyrillic;0416
-Zhedescendercyrillic;0496
-Zhedieresiscyrillic;04DC
-Zlinebelow;1E94
-Zmonospace;FF3A
-Zsmall;F77A
-Zstroke;01B5
-a;0061
-aabengali;0986
-aacute;00E1
-aadeva;0906
-aagujarati;0A86
-aagurmukhi;0A06
-aamatragurmukhi;0A3E
-aarusquare;3303
-aavowelsignbengali;09BE
-aavowelsigndeva;093E
-aavowelsigngujarati;0ABE
-abbreviationmarkarmenian;055F
-abbreviationsigndeva;0970
-abengali;0985
-abopomofo;311A
-abreve;0103
-abreveacute;1EAF
-abrevecyrillic;04D1
-abrevedotbelow;1EB7
-abrevegrave;1EB1
-abrevehookabove;1EB3
-abrevetilde;1EB5
-acaron;01CE
-acircle;24D0
-acircumflex;00E2
-acircumflexacute;1EA5
-acircumflexdotbelow;1EAD
-acircumflexgrave;1EA7
-acircumflexhookabove;1EA9
-acircumflextilde;1EAB
-acute;00B4
-acutebelowcmb;0317
-acutecmb;0301
-acutecomb;0301
-acutedeva;0954
-acutelowmod;02CF
-acutetonecmb;0341
-acyrillic;0430
-adblgrave;0201
-addakgurmukhi;0A71
-adeva;0905
-adieresis;00E4
-adieresiscyrillic;04D3
-adieresismacron;01DF
-adotbelow;1EA1
-adotmacron;01E1
-ae;00E6
-aeacute;01FD
-aekorean;3150
-aemacron;01E3
-afii00208;2015
-afii08941;20A4
-afii10017;0410
-afii10018;0411
-afii10019;0412
-afii10020;0413
-afii10021;0414
-afii10022;0415
-afii10023;0401
-afii10024;0416
-afii10025;0417
-afii10026;0418
-afii10027;0419
-afii10028;041A
-afii10029;041B
-afii10030;041C
-afii10031;041D
-afii10032;041E
-afii10033;041F
-afii10034;0420
-afii10035;0421
-afii10036;0422
-afii10037;0423
-afii10038;0424
-afii10039;0425
-afii10040;0426
-afii10041;0427
-afii10042;0428
-afii10043;0429
-afii10044;042A
-afii10045;042B
-afii10046;042C
-afii10047;042D
-afii10048;042E
-afii10049;042F
-afii10050;0490
-afii10051;0402
-afii10052;0403
-afii10053;0404
-afii10054;0405
-afii10055;0406
-afii10056;0407
-afii10057;0408
-afii10058;0409
-afii10059;040A
-afii10060;040B
-afii10061;040C
-afii10062;040E
-afii10063;F6C4
-afii10064;F6C5
-afii10065;0430
-afii10066;0431
-afii10067;0432
-afii10068;0433
-afii10069;0434
-afii10070;0435
-afii10071;0451
-afii10072;0436
-afii10073;0437
-afii10074;0438
-afii10075;0439
-afii10076;043A
-afii10077;043B
-afii10078;043C
-afii10079;043D
-afii10080;043E
-afii10081;043F
-afii10082;0440
-afii10083;0441
-afii10084;0442
-afii10085;0443
-afii10086;0444
-afii10087;0445
-afii10088;0446
-afii10089;0447
-afii10090;0448
-afii10091;0449
-afii10092;044A
-afii10093;044B
-afii10094;044C
-afii10095;044D
-afii10096;044E
-afii10097;044F
-afii10098;0491
-afii10099;0452
-afii10100;0453
-afii10101;0454
-afii10102;0455
-afii10103;0456
-afii10104;0457
-afii10105;0458
-afii10106;0459
-afii10107;045A
-afii10108;045B
-afii10109;045C
-afii10110;045E
-afii10145;040F
-afii10146;0462
-afii10147;0472
-afii10148;0474
-afii10192;F6C6
-afii10193;045F
-afii10194;0463
-afii10195;0473
-afii10196;0475
-afii10831;F6C7
-afii10832;F6C8
-afii10846;04D9
-afii299;200E
-afii300;200F
-afii301;200D
-afii57381;066A
-afii57388;060C
-afii57392;0660
-afii57393;0661
-afii57394;0662
-afii57395;0663
-afii57396;0664
-afii57397;0665
-afii57398;0666
-afii57399;0667
-afii57400;0668
-afii57401;0669
-afii57403;061B
-afii57407;061F
-afii57409;0621
-afii57410;0622
-afii57411;0623
-afii57412;0624
-afii57413;0625
-afii57414;0626
-afii57415;0627
-afii57416;0628
-afii57417;0629
-afii57418;062A
-afii57419;062B
-afii57420;062C
-afii57421;062D
-afii57422;062E
-afii57423;062F
-afii57424;0630
-afii57425;0631
-afii57426;0632
-afii57427;0633
-afii57428;0634
-afii57429;0635
-afii57430;0636
-afii57431;0637
-afii57432;0638
-afii57433;0639
-afii57434;063A
-afii57440;0640
-afii57441;0641
-afii57442;0642
-afii57443;0643
-afii57444;0644
-afii57445;0645
-afii57446;0646
-afii57448;0648
-afii57449;0649
-afii57450;064A
-afii57451;064B
-afii57452;064C
-afii57453;064D
-afii57454;064E
-afii57455;064F
-afii57456;0650
-afii57457;0651
-afii57458;0652
-afii57470;0647
-afii57505;06A4
-afii57506;067E
-afii57507;0686
-afii57508;0698
-afii57509;06AF
-afii57511;0679
-afii57512;0688
-afii57513;0691
-afii57514;06BA
-afii57519;06D2
-afii57534;06D5
-afii57636;20AA
-afii57645;05BE
-afii57658;05C3
-afii57664;05D0
-afii57665;05D1
-afii57666;05D2
-afii57667;05D3
-afii57668;05D4
-afii57669;05D5
-afii57670;05D6
-afii57671;05D7
-afii57672;05D8
-afii57673;05D9
-afii57674;05DA
-afii57675;05DB
-afii57676;05DC
-afii57677;05DD
-afii57678;05DE
-afii57679;05DF
-afii57680;05E0
-afii57681;05E1
-afii57682;05E2
-afii57683;05E3
-afii57684;05E4
-afii57685;05E5
-afii57686;05E6
-afii57687;05E7
-afii57688;05E8
-afii57689;05E9
-afii57690;05EA
-afii57694;FB2A
-afii57695;FB2B
-afii57700;FB4B
-afii57705;FB1F
-afii57716;05F0
-afii57717;05F1
-afii57718;05F2
-afii57723;FB35
-afii57793;05B4
-afii57794;05B5
-afii57795;05B6
-afii57796;05BB
-afii57797;05B8
-afii57798;05B7
-afii57799;05B0
-afii57800;05B2
-afii57801;05B1
-afii57802;05B3
-afii57803;05C2
-afii57804;05C1
-afii57806;05B9
-afii57807;05BC
-afii57839;05BD
-afii57841;05BF
-afii57842;05C0
-afii57929;02BC
-afii61248;2105
-afii61289;2113
-afii61352;2116
-afii61573;202C
-afii61574;202D
-afii61575;202E
-afii61664;200C
-afii63167;066D
-afii64937;02BD
-agrave;00E0
-agujarati;0A85
-agurmukhi;0A05
-ahiragana;3042
-ahookabove;1EA3
-aibengali;0990
-aibopomofo;311E
-aideva;0910
-aiecyrillic;04D5
-aigujarati;0A90
-aigurmukhi;0A10
-aimatragurmukhi;0A48
-ainarabic;0639
-ainfinalarabic;FECA
-aininitialarabic;FECB
-ainmedialarabic;FECC
-ainvertedbreve;0203
-aivowelsignbengali;09C8
-aivowelsigndeva;0948
-aivowelsigngujarati;0AC8
-akatakana;30A2
-akatakanahalfwidth;FF71
-akorean;314F
-alef;05D0
-alefarabic;0627
-alefdageshhebrew;FB30
-aleffinalarabic;FE8E
-alefhamzaabovearabic;0623
-alefhamzaabovefinalarabic;FE84
-alefhamzabelowarabic;0625
-alefhamzabelowfinalarabic;FE88
-alefhebrew;05D0
-aleflamedhebrew;FB4F
-alefmaddaabovearabic;0622
-alefmaddaabovefinalarabic;FE82
-alefmaksuraarabic;0649
-alefmaksurafinalarabic;FEF0
-alefmaksurainitialarabic;FEF3
-alefmaksuramedialarabic;FEF4
-alefpatahhebrew;FB2E
-alefqamatshebrew;FB2F
-aleph;2135
-allequal;224C
-alpha;03B1
-alphatonos;03AC
-amacron;0101
-amonospace;FF41
-ampersand;0026
-ampersandmonospace;FF06
-ampersandsmall;F726
-amsquare;33C2
-anbopomofo;3122
-angbopomofo;3124
-angkhankhuthai;0E5A
-angle;2220
-anglebracketleft;3008
-anglebracketleftvertical;FE3F
-anglebracketright;3009
-anglebracketrightvertical;FE40
-angleleft;2329
-angleright;232A
-angstrom;212B
-anoteleia;0387
-anudattadeva;0952
-anusvarabengali;0982
-anusvaradeva;0902
-anusvaragujarati;0A82
-aogonek;0105
-apaatosquare;3300
-aparen;249C
-apostrophearmenian;055A
-apostrophemod;02BC
-apple;F8FF
-approaches;2250
-approxequal;2248
-approxequalorimage;2252
-approximatelyequal;2245
-araeaekorean;318E
-araeakorean;318D
-arc;2312
-arighthalfring;1E9A
-aring;00E5
-aringacute;01FB
-aringbelow;1E01
-arrowboth;2194
-arrowdashdown;21E3
-arrowdashleft;21E0
-arrowdashright;21E2
-arrowdashup;21E1
-arrowdblboth;21D4
-arrowdbldown;21D3
-arrowdblleft;21D0
-arrowdblright;21D2
-arrowdblup;21D1
-arrowdown;2193
-arrowdownleft;2199
-arrowdownright;2198
-arrowdownwhite;21E9
-arrowheaddownmod;02C5
-arrowheadleftmod;02C2
-arrowheadrightmod;02C3
-arrowheadupmod;02C4
-arrowhorizex;F8E7
-arrowleft;2190
-arrowleftdbl;21D0
-arrowleftdblstroke;21CD
-arrowleftoverright;21C6
-arrowleftwhite;21E6
-arrowright;2192
-arrowrightdblstroke;21CF
-arrowrightheavy;279E
-arrowrightoverleft;21C4
-arrowrightwhite;21E8
-arrowtableft;21E4
-arrowtabright;21E5
-arrowup;2191
-arrowupdn;2195
-arrowupdnbse;21A8
-arrowupdownbase;21A8
-arrowupleft;2196
-arrowupleftofdown;21C5
-arrowupright;2197
-arrowupwhite;21E7
-arrowvertex;F8E6
-asciicircum;005E
-asciicircummonospace;FF3E
-asciitilde;007E
-asciitildemonospace;FF5E
-ascript;0251
-ascriptturned;0252
-asmallhiragana;3041
-asmallkatakana;30A1
-asmallkatakanahalfwidth;FF67
-asterisk;002A
-asteriskaltonearabic;066D
-asteriskarabic;066D
-asteriskmath;2217
-asteriskmonospace;FF0A
-asterisksmall;FE61
-asterism;2042
-asuperior;F6E9
-asymptoticallyequal;2243
-at;0040
-atilde;00E3
-atmonospace;FF20
-atsmall;FE6B
-aturned;0250
-aubengali;0994
-aubopomofo;3120
-audeva;0914
-augujarati;0A94
-augurmukhi;0A14
-aulengthmarkbengali;09D7
-aumatragurmukhi;0A4C
-auvowelsignbengali;09CC
-auvowelsigndeva;094C
-auvowelsigngujarati;0ACC
-avagrahadeva;093D
-aybarmenian;0561
-ayin;05E2
-ayinaltonehebrew;FB20
-ayinhebrew;05E2
-b;0062
-babengali;09AC
-backslash;005C
-backslashmonospace;FF3C
-badeva;092C
-bagujarati;0AAC
-bagurmukhi;0A2C
-bahiragana;3070
-bahtthai;0E3F
-bakatakana;30D0
-bar;007C
-barmonospace;FF5C
-bbopomofo;3105
-bcircle;24D1
-bdotaccent;1E03
-bdotbelow;1E05
-beamedsixteenthnotes;266C
-because;2235
-becyrillic;0431
-beharabic;0628
-behfinalarabic;FE90
-behinitialarabic;FE91
-behiragana;3079
-behmedialarabic;FE92
-behmeeminitialarabic;FC9F
-behmeemisolatedarabic;FC08
-behnoonfinalarabic;FC6D
-bekatakana;30D9
-benarmenian;0562
-bet;05D1
-beta;03B2
-betasymbolgreek;03D0
-betdagesh;FB31
-betdageshhebrew;FB31
-bethebrew;05D1
-betrafehebrew;FB4C
-bhabengali;09AD
-bhadeva;092D
-bhagujarati;0AAD
-bhagurmukhi;0A2D
-bhook;0253
-bihiragana;3073
-bikatakana;30D3
-bilabialclick;0298
-bindigurmukhi;0A02
-birusquare;3331
-blackcircle;25CF
-blackdiamond;25C6
-blackdownpointingtriangle;25BC
-blackleftpointingpointer;25C4
-blackleftpointingtriangle;25C0
-blacklenticularbracketleft;3010
-blacklenticularbracketleftvertical;FE3B
-blacklenticularbracketright;3011
-blacklenticularbracketrightvertical;FE3C
-blacklowerlefttriangle;25E3
-blacklowerrighttriangle;25E2
-blackrectangle;25AC
-blackrightpointingpointer;25BA
-blackrightpointingtriangle;25B6
-blacksmallsquare;25AA
-blacksmilingface;263B
-blacksquare;25A0
-blackstar;2605
-blackupperlefttriangle;25E4
-blackupperrighttriangle;25E5
-blackuppointingsmalltriangle;25B4
-blackuppointingtriangle;25B2
-blank;2423
-blinebelow;1E07
-block;2588
-bmonospace;FF42
-bobaimaithai;0E1A
-bohiragana;307C
-bokatakana;30DC
-bparen;249D
-bqsquare;33C3
-braceex;F8F4
-braceleft;007B
-braceleftbt;F8F3
-braceleftmid;F8F2
-braceleftmonospace;FF5B
-braceleftsmall;FE5B
-bracelefttp;F8F1
-braceleftvertical;FE37
-braceright;007D
-bracerightbt;F8FE
-bracerightmid;F8FD
-bracerightmonospace;FF5D
-bracerightsmall;FE5C
-bracerighttp;F8FC
-bracerightvertical;FE38
-bracketleft;005B
-bracketleftbt;F8F0
-bracketleftex;F8EF
-bracketleftmonospace;FF3B
-bracketlefttp;F8EE
-bracketright;005D
-bracketrightbt;F8FB
-bracketrightex;F8FA
-bracketrightmonospace;FF3D
-bracketrighttp;F8F9
-breve;02D8
-brevebelowcmb;032E
-brevecmb;0306
-breveinvertedbelowcmb;032F
-breveinvertedcmb;0311
-breveinverteddoublecmb;0361
-bridgebelowcmb;032A
-bridgeinvertedbelowcmb;033A
-brokenbar;00A6
-bstroke;0180
-bsuperior;F6EA
-btopbar;0183
-buhiragana;3076
-bukatakana;30D6
-bullet;2022
-bulletinverse;25D8
-bulletoperator;2219
-bullseye;25CE
-c;0063
-caarmenian;056E
-cabengali;099A
-cacute;0107
-cadeva;091A
-cagujarati;0A9A
-cagurmukhi;0A1A
-calsquare;3388
-candrabindubengali;0981
-candrabinducmb;0310
-candrabindudeva;0901
-candrabindugujarati;0A81
-capslock;21EA
-careof;2105
-caron;02C7
-caronbelowcmb;032C
-caroncmb;030C
-carriagereturn;21B5
-cbopomofo;3118
-ccaron;010D
-ccedilla;00E7
-ccedillaacute;1E09
-ccircle;24D2
-ccircumflex;0109
-ccurl;0255
-cdot;010B
-cdotaccent;010B
-cdsquare;33C5
-cedilla;00B8
-cedillacmb;0327
-cent;00A2
-centigrade;2103
-centinferior;F6DF
-centmonospace;FFE0
-centoldstyle;F7A2
-centsuperior;F6E0
-chaarmenian;0579
-chabengali;099B
-chadeva;091B
-chagujarati;0A9B
-chagurmukhi;0A1B
-chbopomofo;3114
-cheabkhasiancyrillic;04BD
-checkmark;2713
-checyrillic;0447
-chedescenderabkhasiancyrillic;04BF
-chedescendercyrillic;04B7
-chedieresiscyrillic;04F5
-cheharmenian;0573
-chekhakassiancyrillic;04CC
-cheverticalstrokecyrillic;04B9
-chi;03C7
-chieuchacirclekorean;3277
-chieuchaparenkorean;3217
-chieuchcirclekorean;3269
-chieuchkorean;314A
-chieuchparenkorean;3209
-chochangthai;0E0A
-chochanthai;0E08
-chochingthai;0E09
-chochoethai;0E0C
-chook;0188
-cieucacirclekorean;3276
-cieucaparenkorean;3216
-cieuccirclekorean;3268
-cieuckorean;3148
-cieucparenkorean;3208
-cieucuparenkorean;321C
-circle;25CB
-circlemultiply;2297
-circleot;2299
-circleplus;2295
-circlepostalmark;3036
-circlewithlefthalfblack;25D0
-circlewithrighthalfblack;25D1
-circumflex;02C6
-circumflexbelowcmb;032D
-circumflexcmb;0302
-clear;2327
-clickalveolar;01C2
-clickdental;01C0
-clicklateral;01C1
-clickretroflex;01C3
-club;2663
-clubsuitblack;2663
-clubsuitwhite;2667
-cmcubedsquare;33A4
-cmonospace;FF43
-cmsquaredsquare;33A0
-coarmenian;0581
-colon;003A
-colonmonetary;20A1
-colonmonospace;FF1A
-colonsign;20A1
-colonsmall;FE55
-colontriangularhalfmod;02D1
-colontriangularmod;02D0
-comma;002C
-commaabovecmb;0313
-commaaboverightcmb;0315
-commaaccent;F6C3
-commaarabic;060C
-commaarmenian;055D
-commainferior;F6E1
-commamonospace;FF0C
-commareversedabovecmb;0314
-commareversedmod;02BD
-commasmall;FE50
-commasuperior;F6E2
-commaturnedabovecmb;0312
-commaturnedmod;02BB
-compass;263C
-congruent;2245
-contourintegral;222E
-control;2303
-controlACK;0006
-controlBEL;0007
-controlBS;0008
-controlCAN;0018
-controlCR;000D
-controlDC1;0011
-controlDC2;0012
-controlDC3;0013
-controlDC4;0014
-controlDEL;007F
-controlDLE;0010
-controlEM;0019
-controlENQ;0005
-controlEOT;0004
-controlESC;001B
-controlETB;0017
-controlETX;0003
-controlFF;000C
-controlFS;001C
-controlGS;001D
-controlHT;0009
-controlLF;000A
-controlNAK;0015
-controlRS;001E
-controlSI;000F
-controlSO;000E
-controlSOT;0002
-controlSTX;0001
-controlSUB;001A
-controlSYN;0016
-controlUS;001F
-controlVT;000B
-copyright;00A9
-copyrightsans;F8E9
-copyrightserif;F6D9
-cornerbracketleft;300C
-cornerbracketlefthalfwidth;FF62
-cornerbracketleftvertical;FE41
-cornerbracketright;300D
-cornerbracketrighthalfwidth;FF63
-cornerbracketrightvertical;FE42
-corporationsquare;337F
-cosquare;33C7
-coverkgsquare;33C6
-cparen;249E
-cruzeiro;20A2
-cstretched;0297
-curlyand;22CF
-curlyor;22CE
-currency;00A4
-cyrBreve;F6D1
-cyrFlex;F6D2
-cyrbreve;F6D4
-cyrflex;F6D5
-d;0064
-daarmenian;0564
-dabengali;09A6
-dadarabic;0636
-dadeva;0926
-dadfinalarabic;FEBE
-dadinitialarabic;FEBF
-dadmedialarabic;FEC0
-dagesh;05BC
-dageshhebrew;05BC
-dagger;2020
-daggerdbl;2021
-dagujarati;0AA6
-dagurmukhi;0A26
-dahiragana;3060
-dakatakana;30C0
-dalarabic;062F
-dalet;05D3
-daletdagesh;FB33
-daletdageshhebrew;FB33
-dalethatafpatah;05D3 05B2
-dalethatafpatahhebrew;05D3 05B2
-dalethatafsegol;05D3 05B1
-dalethatafsegolhebrew;05D3 05B1
-dalethebrew;05D3
-dalethiriq;05D3 05B4
-dalethiriqhebrew;05D3 05B4
-daletholam;05D3 05B9
-daletholamhebrew;05D3 05B9
-daletpatah;05D3 05B7
-daletpatahhebrew;05D3 05B7
-daletqamats;05D3 05B8
-daletqamatshebrew;05D3 05B8
-daletqubuts;05D3 05BB
-daletqubutshebrew;05D3 05BB
-daletsegol;05D3 05B6
-daletsegolhebrew;05D3 05B6
-daletsheva;05D3 05B0
-daletshevahebrew;05D3 05B0
-dalettsere;05D3 05B5
-dalettserehebrew;05D3 05B5
-dalfinalarabic;FEAA
-dammaarabic;064F
-dammalowarabic;064F
-dammatanaltonearabic;064C
-dammatanarabic;064C
-danda;0964
-dargahebrew;05A7
-dargalefthebrew;05A7
-dasiapneumatacyrilliccmb;0485
-dblGrave;F6D3
-dblanglebracketleft;300A
-dblanglebracketleftvertical;FE3D
-dblanglebracketright;300B
-dblanglebracketrightvertical;FE3E
-dblarchinvertedbelowcmb;032B
-dblarrowleft;21D4
-dblarrowright;21D2
-dbldanda;0965
-dblgrave;F6D6
-dblgravecmb;030F
-dblintegral;222C
-dbllowline;2017
-dbllowlinecmb;0333
-dbloverlinecmb;033F
-dblprimemod;02BA
-dblverticalbar;2016
-dblverticallineabovecmb;030E
-dbopomofo;3109
-dbsquare;33C8
-dcaron;010F
-dcedilla;1E11
-dcircle;24D3
-dcircumflexbelow;1E13
-dcroat;0111
-ddabengali;09A1
-ddadeva;0921
-ddagujarati;0AA1
-ddagurmukhi;0A21
-ddalarabic;0688
-ddalfinalarabic;FB89
-dddhadeva;095C
-ddhabengali;09A2
-ddhadeva;0922
-ddhagujarati;0AA2
-ddhagurmukhi;0A22
-ddotaccent;1E0B
-ddotbelow;1E0D
-decimalseparatorarabic;066B
-decimalseparatorpersian;066B
-decyrillic;0434
-degree;00B0
-dehihebrew;05AD
-dehiragana;3067
-deicoptic;03EF
-dekatakana;30C7
-deleteleft;232B
-deleteright;2326
-delta;03B4
-deltaturned;018D
-denominatorminusonenumeratorbengali;09F8
-dezh;02A4
-dhabengali;09A7
-dhadeva;0927
-dhagujarati;0AA7
-dhagurmukhi;0A27
-dhook;0257
-dialytikatonos;0385
-dialytikatonoscmb;0344
-diamond;2666
-diamondsuitwhite;2662
-dieresis;00A8
-dieresisacute;F6D7
-dieresisbelowcmb;0324
-dieresiscmb;0308
-dieresisgrave;F6D8
-dieresistonos;0385
-dihiragana;3062
-dikatakana;30C2
-dittomark;3003
-divide;00F7
-divides;2223
-divisionslash;2215
-djecyrillic;0452
-dkshade;2593
-dlinebelow;1E0F
-dlsquare;3397
-dmacron;0111
-dmonospace;FF44
-dnblock;2584
-dochadathai;0E0E
-dodekthai;0E14
-dohiragana;3069
-dokatakana;30C9
-dollar;0024
-dollarinferior;F6E3
-dollarmonospace;FF04
-dollaroldstyle;F724
-dollarsmall;FE69
-dollarsuperior;F6E4
-dong;20AB
-dorusquare;3326
-dotaccent;02D9
-dotaccentcmb;0307
-dotbelowcmb;0323
-dotbelowcomb;0323
-dotkatakana;30FB
-dotlessi;0131
-dotlessj;F6BE
-dotlessjstrokehook;0284
-dotmath;22C5
-dottedcircle;25CC
-doubleyodpatah;FB1F
-doubleyodpatahhebrew;FB1F
-downtackbelowcmb;031E
-downtackmod;02D5
-dparen;249F
-dsuperior;F6EB
-dtail;0256
-dtopbar;018C
-duhiragana;3065
-dukatakana;30C5
-dz;01F3
-dzaltone;02A3
-dzcaron;01C6
-dzcurl;02A5
-dzeabkhasiancyrillic;04E1
-dzecyrillic;0455
-dzhecyrillic;045F
-e;0065
-eacute;00E9
-earth;2641
-ebengali;098F
-ebopomofo;311C
-ebreve;0115
-ecandradeva;090D
-ecandragujarati;0A8D
-ecandravowelsigndeva;0945
-ecandravowelsigngujarati;0AC5
-ecaron;011B
-ecedillabreve;1E1D
-echarmenian;0565
-echyiwnarmenian;0587
-ecircle;24D4
-ecircumflex;00EA
-ecircumflexacute;1EBF
-ecircumflexbelow;1E19
-ecircumflexdotbelow;1EC7
-ecircumflexgrave;1EC1
-ecircumflexhookabove;1EC3
-ecircumflextilde;1EC5
-ecyrillic;0454
-edblgrave;0205
-edeva;090F
-edieresis;00EB
-edot;0117
-edotaccent;0117
-edotbelow;1EB9
-eegurmukhi;0A0F
-eematragurmukhi;0A47
-efcyrillic;0444
-egrave;00E8
-egujarati;0A8F
-eharmenian;0567
-ehbopomofo;311D
-ehiragana;3048
-ehookabove;1EBB
-eibopomofo;311F
-eight;0038
-eightarabic;0668
-eightbengali;09EE
-eightcircle;2467
-eightcircleinversesansserif;2791
-eightdeva;096E
-eighteencircle;2471
-eighteenparen;2485
-eighteenperiod;2499
-eightgujarati;0AEE
-eightgurmukhi;0A6E
-eighthackarabic;0668
-eighthangzhou;3028
-eighthnotebeamed;266B
-eightideographicparen;3227
-eightinferior;2088
-eightmonospace;FF18
-eightoldstyle;F738
-eightparen;247B
-eightperiod;248F
-eightpersian;06F8
-eightroman;2177
-eightsuperior;2078
-eightthai;0E58
-einvertedbreve;0207
-eiotifiedcyrillic;0465
-ekatakana;30A8
-ekatakanahalfwidth;FF74
-ekonkargurmukhi;0A74
-ekorean;3154
-elcyrillic;043B
-element;2208
-elevencircle;246A
-elevenparen;247E
-elevenperiod;2492
-elevenroman;217A
-ellipsis;2026
-ellipsisvertical;22EE
-emacron;0113
-emacronacute;1E17
-emacrongrave;1E15
-emcyrillic;043C
-emdash;2014
-emdashvertical;FE31
-emonospace;FF45
-emphasismarkarmenian;055B
-emptyset;2205
-enbopomofo;3123
-encyrillic;043D
-endash;2013
-endashvertical;FE32
-endescendercyrillic;04A3
-eng;014B
-engbopomofo;3125
-enghecyrillic;04A5
-enhookcyrillic;04C8
-enspace;2002
-eogonek;0119
-eokorean;3153
-eopen;025B
-eopenclosed;029A
-eopenreversed;025C
-eopenreversedclosed;025E
-eopenreversedhook;025D
-eparen;24A0
-epsilon;03B5
-epsilontonos;03AD
-equal;003D
-equalmonospace;FF1D
-equalsmall;FE66
-equalsuperior;207C
-equivalence;2261
-erbopomofo;3126
-ercyrillic;0440
-ereversed;0258
-ereversedcyrillic;044D
-escyrillic;0441
-esdescendercyrillic;04AB
-esh;0283
-eshcurl;0286
-eshortdeva;090E
-eshortvowelsigndeva;0946
-eshreversedloop;01AA
-eshsquatreversed;0285
-esmallhiragana;3047
-esmallkatakana;30A7
-esmallkatakanahalfwidth;FF6A
-estimated;212E
-esuperior;F6EC
-eta;03B7
-etarmenian;0568
-etatonos;03AE
-eth;00F0
-etilde;1EBD
-etildebelow;1E1B
-etnahtafoukhhebrew;0591
-etnahtafoukhlefthebrew;0591
-etnahtahebrew;0591
-etnahtalefthebrew;0591
-eturned;01DD
-eukorean;3161
-euro;20AC
-evowelsignbengali;09C7
-evowelsigndeva;0947
-evowelsigngujarati;0AC7
-exclam;0021
-exclamarmenian;055C
-exclamdbl;203C
-exclamdown;00A1
-exclamdownsmall;F7A1
-exclammonospace;FF01
-exclamsmall;F721
-existential;2203
-ezh;0292
-ezhcaron;01EF
-ezhcurl;0293
-ezhreversed;01B9
-ezhtail;01BA
-f;0066
-fadeva;095E
-fagurmukhi;0A5E
-fahrenheit;2109
-fathaarabic;064E
-fathalowarabic;064E
-fathatanarabic;064B
-fbopomofo;3108
-fcircle;24D5
-fdotaccent;1E1F
-feharabic;0641
-feharmenian;0586
-fehfinalarabic;FED2
-fehinitialarabic;FED3
-fehmedialarabic;FED4
-feicoptic;03E5
-female;2640
-ff;FB00
-ffi;FB03
-ffl;FB04
-fi;FB01
-fifteencircle;246E
-fifteenparen;2482
-fifteenperiod;2496
-figuredash;2012
-filledbox;25A0
-filledrect;25AC
-finalkaf;05DA
-finalkafdagesh;FB3A
-finalkafdageshhebrew;FB3A
-finalkafhebrew;05DA
-finalkafqamats;05DA 05B8
-finalkafqamatshebrew;05DA 05B8
-finalkafsheva;05DA 05B0
-finalkafshevahebrew;05DA 05B0
-finalmem;05DD
-finalmemhebrew;05DD
-finalnun;05DF
-finalnunhebrew;05DF
-finalpe;05E3
-finalpehebrew;05E3
-finaltsadi;05E5
-finaltsadihebrew;05E5
-firsttonechinese;02C9
-fisheye;25C9
-fitacyrillic;0473
-five;0035
-fivearabic;0665
-fivebengali;09EB
-fivecircle;2464
-fivecircleinversesansserif;278E
-fivedeva;096B
-fiveeighths;215D
-fivegujarati;0AEB
-fivegurmukhi;0A6B
-fivehackarabic;0665
-fivehangzhou;3025
-fiveideographicparen;3224
-fiveinferior;2085
-fivemonospace;FF15
-fiveoldstyle;F735
-fiveparen;2478
-fiveperiod;248C
-fivepersian;06F5
-fiveroman;2174
-fivesuperior;2075
-fivethai;0E55
-fl;FB02
-florin;0192
-fmonospace;FF46
-fmsquare;3399
-fofanthai;0E1F
-fofathai;0E1D
-fongmanthai;0E4F
-forall;2200
-four;0034
-fourarabic;0664
-fourbengali;09EA
-fourcircle;2463
-fourcircleinversesansserif;278D
-fourdeva;096A
-fourgujarati;0AEA
-fourgurmukhi;0A6A
-fourhackarabic;0664
-fourhangzhou;3024
-fourideographicparen;3223
-fourinferior;2084
-fourmonospace;FF14
-fournumeratorbengali;09F7
-fouroldstyle;F734
-fourparen;2477
-fourperiod;248B
-fourpersian;06F4
-fourroman;2173
-foursuperior;2074
-fourteencircle;246D
-fourteenparen;2481
-fourteenperiod;2495
-fourthai;0E54
-fourthtonechinese;02CB
-fparen;24A1
-fraction;2044
-franc;20A3
-g;0067
-gabengali;0997
-gacute;01F5
-gadeva;0917
-gafarabic;06AF
-gaffinalarabic;FB93
-gafinitialarabic;FB94
-gafmedialarabic;FB95
-gagujarati;0A97
-gagurmukhi;0A17
-gahiragana;304C
-gakatakana;30AC
-gamma;03B3
-gammalatinsmall;0263
-gammasuperior;02E0
-gangiacoptic;03EB
-gbopomofo;310D
-gbreve;011F
-gcaron;01E7
-gcedilla;0123
-gcircle;24D6
-gcircumflex;011D
-gcommaaccent;0123
-gdot;0121
-gdotaccent;0121
-gecyrillic;0433
-gehiragana;3052
-gekatakana;30B2
-geometricallyequal;2251
-gereshaccenthebrew;059C
-gereshhebrew;05F3
-gereshmuqdamhebrew;059D
-germandbls;00DF
-gershayimaccenthebrew;059E
-gershayimhebrew;05F4
-getamark;3013
-ghabengali;0998
-ghadarmenian;0572
-ghadeva;0918
-ghagujarati;0A98
-ghagurmukhi;0A18
-ghainarabic;063A
-ghainfinalarabic;FECE
-ghaininitialarabic;FECF
-ghainmedialarabic;FED0
-ghemiddlehookcyrillic;0495
-ghestrokecyrillic;0493
-gheupturncyrillic;0491
-ghhadeva;095A
-ghhagurmukhi;0A5A
-ghook;0260
-ghzsquare;3393
-gihiragana;304E
-gikatakana;30AE
-gimarmenian;0563
-gimel;05D2
-gimeldagesh;FB32
-gimeldageshhebrew;FB32
-gimelhebrew;05D2
-gjecyrillic;0453
-glottalinvertedstroke;01BE
-glottalstop;0294
-glottalstopinverted;0296
-glottalstopmod;02C0
-glottalstopreversed;0295
-glottalstopreversedmod;02C1
-glottalstopreversedsuperior;02E4
-glottalstopstroke;02A1
-glottalstopstrokereversed;02A2
-gmacron;1E21
-gmonospace;FF47
-gohiragana;3054
-gokatakana;30B4
-gparen;24A2
-gpasquare;33AC
-gradient;2207
-grave;0060
-gravebelowcmb;0316
-gravecmb;0300
-gravecomb;0300
-gravedeva;0953
-gravelowmod;02CE
-gravemonospace;FF40
-gravetonecmb;0340
-greater;003E
-greaterequal;2265
-greaterequalorless;22DB
-greatermonospace;FF1E
-greaterorequivalent;2273
-greaterorless;2277
-greateroverequal;2267
-greatersmall;FE65
-gscript;0261
-gstroke;01E5
-guhiragana;3050
-guillemotleft;00AB
-guillemotright;00BB
-guilsinglleft;2039
-guilsinglright;203A
-gukatakana;30B0
-guramusquare;3318
-gysquare;33C9
-h;0068
-haabkhasiancyrillic;04A9
-haaltonearabic;06C1
-habengali;09B9
-hadescendercyrillic;04B3
-hadeva;0939
-hagujarati;0AB9
-hagurmukhi;0A39
-haharabic;062D
-hahfinalarabic;FEA2
-hahinitialarabic;FEA3
-hahiragana;306F
-hahmedialarabic;FEA4
-haitusquare;332A
-hakatakana;30CF
-hakatakanahalfwidth;FF8A
-halantgurmukhi;0A4D
-hamzaarabic;0621
-hamzadammaarabic;0621 064F
-hamzadammatanarabic;0621 064C
-hamzafathaarabic;0621 064E
-hamzafathatanarabic;0621 064B
-hamzalowarabic;0621
-hamzalowkasraarabic;0621 0650
-hamzalowkasratanarabic;0621 064D
-hamzasukunarabic;0621 0652
-hangulfiller;3164
-hardsigncyrillic;044A
-harpoonleftbarbup;21BC
-harpoonrightbarbup;21C0
-hasquare;33CA
-hatafpatah;05B2
-hatafpatah16;05B2
-hatafpatah23;05B2
-hatafpatah2f;05B2
-hatafpatahhebrew;05B2
-hatafpatahnarrowhebrew;05B2
-hatafpatahquarterhebrew;05B2
-hatafpatahwidehebrew;05B2
-hatafqamats;05B3
-hatafqamats1b;05B3
-hatafqamats28;05B3
-hatafqamats34;05B3
-hatafqamatshebrew;05B3
-hatafqamatsnarrowhebrew;05B3
-hatafqamatsquarterhebrew;05B3
-hatafqamatswidehebrew;05B3
-hatafsegol;05B1
-hatafsegol17;05B1
-hatafsegol24;05B1
-hatafsegol30;05B1
-hatafsegolhebrew;05B1
-hatafsegolnarrowhebrew;05B1
-hatafsegolquarterhebrew;05B1
-hatafsegolwidehebrew;05B1
-hbar;0127
-hbopomofo;310F
-hbrevebelow;1E2B
-hcedilla;1E29
-hcircle;24D7
-hcircumflex;0125
-hdieresis;1E27
-hdotaccent;1E23
-hdotbelow;1E25
-he;05D4
-heart;2665
-heartsuitblack;2665
-heartsuitwhite;2661
-hedagesh;FB34
-hedageshhebrew;FB34
-hehaltonearabic;06C1
-heharabic;0647
-hehebrew;05D4
-hehfinalaltonearabic;FBA7
-hehfinalalttwoarabic;FEEA
-hehfinalarabic;FEEA
-hehhamzaabovefinalarabic;FBA5
-hehhamzaaboveisolatedarabic;FBA4
-hehinitialaltonearabic;FBA8
-hehinitialarabic;FEEB
-hehiragana;3078
-hehmedialaltonearabic;FBA9
-hehmedialarabic;FEEC
-heiseierasquare;337B
-hekatakana;30D8
-hekatakanahalfwidth;FF8D
-hekutaarusquare;3336
-henghook;0267
-herutusquare;3339
-het;05D7
-hethebrew;05D7
-hhook;0266
-hhooksuperior;02B1
-hieuhacirclekorean;327B
-hieuhaparenkorean;321B
-hieuhcirclekorean;326D
-hieuhkorean;314E
-hieuhparenkorean;320D
-hihiragana;3072
-hikatakana;30D2
-hikatakanahalfwidth;FF8B
-hiriq;05B4
-hiriq14;05B4
-hiriq21;05B4
-hiriq2d;05B4
-hiriqhebrew;05B4
-hiriqnarrowhebrew;05B4
-hiriqquarterhebrew;05B4
-hiriqwidehebrew;05B4
-hlinebelow;1E96
-hmonospace;FF48
-hoarmenian;0570
-hohipthai;0E2B
-hohiragana;307B
-hokatakana;30DB
-hokatakanahalfwidth;FF8E
-holam;05B9
-holam19;05B9
-holam26;05B9
-holam32;05B9
-holamhebrew;05B9
-holamnarrowhebrew;05B9
-holamquarterhebrew;05B9
-holamwidehebrew;05B9
-honokhukthai;0E2E
-hookabovecomb;0309
-hookcmb;0309
-hookpalatalizedbelowcmb;0321
-hookretroflexbelowcmb;0322
-hoonsquare;3342
-horicoptic;03E9
-horizontalbar;2015
-horncmb;031B
-hotsprings;2668
-house;2302
-hparen;24A3
-hsuperior;02B0
-hturned;0265
-huhiragana;3075
-huiitosquare;3333
-hukatakana;30D5
-hukatakanahalfwidth;FF8C
-hungarumlaut;02DD
-hungarumlautcmb;030B
-hv;0195
-hyphen;002D
-hypheninferior;F6E5
-hyphenmonospace;FF0D
-hyphensmall;FE63
-hyphensuperior;F6E6
-hyphentwo;2010
-i;0069
-iacute;00ED
-iacyrillic;044F
-ibengali;0987
-ibopomofo;3127
-ibreve;012D
-icaron;01D0
-icircle;24D8
-icircumflex;00EE
-icyrillic;0456
-idblgrave;0209
-ideographearthcircle;328F
-ideographfirecircle;328B
-ideographicallianceparen;323F
-ideographiccallparen;323A
-ideographiccentrecircle;32A5
-ideographicclose;3006
-ideographiccomma;3001
-ideographiccommaleft;FF64
-ideographiccongratulationparen;3237
-ideographiccorrectcircle;32A3
-ideographicearthparen;322F
-ideographicenterpriseparen;323D
-ideographicexcellentcircle;329D
-ideographicfestivalparen;3240
-ideographicfinancialcircle;3296
-ideographicfinancialparen;3236
-ideographicfireparen;322B
-ideographichaveparen;3232
-ideographichighcircle;32A4
-ideographiciterationmark;3005
-ideographiclaborcircle;3298
-ideographiclaborparen;3238
-ideographicleftcircle;32A7
-ideographiclowcircle;32A6
-ideographicmedicinecircle;32A9
-ideographicmetalparen;322E
-ideographicmoonparen;322A
-ideographicnameparen;3234
-ideographicperiod;3002
-ideographicprintcircle;329E
-ideographicreachparen;3243
-ideographicrepresentparen;3239
-ideographicresourceparen;323E
-ideographicrightcircle;32A8
-ideographicsecretcircle;3299
-ideographicselfparen;3242
-ideographicsocietyparen;3233
-ideographicspace;3000
-ideographicspecialparen;3235
-ideographicstockparen;3231
-ideographicstudyparen;323B
-ideographicsunparen;3230
-ideographicsuperviseparen;323C
-ideographicwaterparen;322C
-ideographicwoodparen;322D
-ideographiczero;3007
-ideographmetalcircle;328E
-ideographmooncircle;328A
-ideographnamecircle;3294
-ideographsuncircle;3290
-ideographwatercircle;328C
-ideographwoodcircle;328D
-ideva;0907
-idieresis;00EF
-idieresisacute;1E2F
-idieresiscyrillic;04E5
-idotbelow;1ECB
-iebrevecyrillic;04D7
-iecyrillic;0435
-ieungacirclekorean;3275
-ieungaparenkorean;3215
-ieungcirclekorean;3267
-ieungkorean;3147
-ieungparenkorean;3207
-igrave;00EC
-igujarati;0A87
-igurmukhi;0A07
-ihiragana;3044
-ihookabove;1EC9
-iibengali;0988
-iicyrillic;0438
-iideva;0908
-iigujarati;0A88
-iigurmukhi;0A08
-iimatragurmukhi;0A40
-iinvertedbreve;020B
-iishortcyrillic;0439
-iivowelsignbengali;09C0
-iivowelsigndeva;0940
-iivowelsigngujarati;0AC0
-ij;0133
-ikatakana;30A4
-ikatakanahalfwidth;FF72
-ikorean;3163
-ilde;02DC
-iluyhebrew;05AC
-imacron;012B
-imacroncyrillic;04E3
-imageorapproximatelyequal;2253
-imatragurmukhi;0A3F
-imonospace;FF49
-increment;2206
-infinity;221E
-iniarmenian;056B
-integral;222B
-integralbottom;2321
-integralbt;2321
-integralex;F8F5
-integraltop;2320
-integraltp;2320
-intersection;2229
-intisquare;3305
-invbullet;25D8
-invcircle;25D9
-invsmileface;263B
-iocyrillic;0451
-iogonek;012F
-iota;03B9
-iotadieresis;03CA
-iotadieresistonos;0390
-iotalatin;0269
-iotatonos;03AF
-iparen;24A4
-irigurmukhi;0A72
-ismallhiragana;3043
-ismallkatakana;30A3
-ismallkatakanahalfwidth;FF68
-issharbengali;09FA
-istroke;0268
-isuperior;F6ED
-iterationhiragana;309D
-iterationkatakana;30FD
-itilde;0129
-itildebelow;1E2D
-iubopomofo;3129
-iucyrillic;044E
-ivowelsignbengali;09BF
-ivowelsigndeva;093F
-ivowelsigngujarati;0ABF
-izhitsacyrillic;0475
-izhitsadblgravecyrillic;0477
-j;006A
-jaarmenian;0571
-jabengali;099C
-jadeva;091C
-jagujarati;0A9C
-jagurmukhi;0A1C
-jbopomofo;3110
-jcaron;01F0
-jcircle;24D9
-jcircumflex;0135
-jcrossedtail;029D
-jdotlessstroke;025F
-jecyrillic;0458
-jeemarabic;062C
-jeemfinalarabic;FE9E
-jeeminitialarabic;FE9F
-jeemmedialarabic;FEA0
-jeharabic;0698
-jehfinalarabic;FB8B
-jhabengali;099D
-jhadeva;091D
-jhagujarati;0A9D
-jhagurmukhi;0A1D
-jheharmenian;057B
-jis;3004
-jmonospace;FF4A
-jparen;24A5
-jsuperior;02B2
-k;006B
-kabashkircyrillic;04A1
-kabengali;0995
-kacute;1E31
-kacyrillic;043A
-kadescendercyrillic;049B
-kadeva;0915
-kaf;05DB
-kafarabic;0643
-kafdagesh;FB3B
-kafdageshhebrew;FB3B
-kaffinalarabic;FEDA
-kafhebrew;05DB
-kafinitialarabic;FEDB
-kafmedialarabic;FEDC
-kafrafehebrew;FB4D
-kagujarati;0A95
-kagurmukhi;0A15
-kahiragana;304B
-kahookcyrillic;04C4
-kakatakana;30AB
-kakatakanahalfwidth;FF76
-kappa;03BA
-kappasymbolgreek;03F0
-kapyeounmieumkorean;3171
-kapyeounphieuphkorean;3184
-kapyeounpieupkorean;3178
-kapyeounssangpieupkorean;3179
-karoriisquare;330D
-kashidaautoarabic;0640
-kashidaautonosidebearingarabic;0640
-kasmallkatakana;30F5
-kasquare;3384
-kasraarabic;0650
-kasratanarabic;064D
-kastrokecyrillic;049F
-katahiraprolongmarkhalfwidth;FF70
-kaverticalstrokecyrillic;049D
-kbopomofo;310E
-kcalsquare;3389
-kcaron;01E9
-kcedilla;0137
-kcircle;24DA
-kcommaaccent;0137
-kdotbelow;1E33
-keharmenian;0584
-kehiragana;3051
-kekatakana;30B1
-kekatakanahalfwidth;FF79
-kenarmenian;056F
-kesmallkatakana;30F6
-kgreenlandic;0138
-khabengali;0996
-khacyrillic;0445
-khadeva;0916
-khagujarati;0A96
-khagurmukhi;0A16
-khaharabic;062E
-khahfinalarabic;FEA6
-khahinitialarabic;FEA7
-khahmedialarabic;FEA8
-kheicoptic;03E7
-khhadeva;0959
-khhagurmukhi;0A59
-khieukhacirclekorean;3278
-khieukhaparenkorean;3218
-khieukhcirclekorean;326A
-khieukhkorean;314B
-khieukhparenkorean;320A
-khokhaithai;0E02
-khokhonthai;0E05
-khokhuatthai;0E03
-khokhwaithai;0E04
-khomutthai;0E5B
-khook;0199
-khorakhangthai;0E06
-khzsquare;3391
-kihiragana;304D
-kikatakana;30AD
-kikatakanahalfwidth;FF77
-kiroguramusquare;3315
-kiromeetorusquare;3316
-kirosquare;3314
-kiyeokacirclekorean;326E
-kiyeokaparenkorean;320E
-kiyeokcirclekorean;3260
-kiyeokkorean;3131
-kiyeokparenkorean;3200
-kiyeoksioskorean;3133
-kjecyrillic;045C
-klinebelow;1E35
-klsquare;3398
-kmcubedsquare;33A6
-kmonospace;FF4B
-kmsquaredsquare;33A2
-kohiragana;3053
-kohmsquare;33C0
-kokaithai;0E01
-kokatakana;30B3
-kokatakanahalfwidth;FF7A
-kooposquare;331E
-koppacyrillic;0481
-koreanstandardsymbol;327F
-koroniscmb;0343
-kparen;24A6
-kpasquare;33AA
-ksicyrillic;046F
-ktsquare;33CF
-kturned;029E
-kuhiragana;304F
-kukatakana;30AF
-kukatakanahalfwidth;FF78
-kvsquare;33B8
-kwsquare;33BE
-l;006C
-labengali;09B2
-lacute;013A
-ladeva;0932
-lagujarati;0AB2
-lagurmukhi;0A32
-lakkhangyaothai;0E45
-lamaleffinalarabic;FEFC
-lamalefhamzaabovefinalarabic;FEF8
-lamalefhamzaaboveisolatedarabic;FEF7
-lamalefhamzabelowfinalarabic;FEFA
-lamalefhamzabelowisolatedarabic;FEF9
-lamalefisolatedarabic;FEFB
-lamalefmaddaabovefinalarabic;FEF6
-lamalefmaddaaboveisolatedarabic;FEF5
-lamarabic;0644
-lambda;03BB
-lambdastroke;019B
-lamed;05DC
-lameddagesh;FB3C
-lameddageshhebrew;FB3C
-lamedhebrew;05DC
-lamedholam;05DC 05B9
-lamedholamdagesh;05DC 05B9 05BC
-lamedholamdageshhebrew;05DC 05B9 05BC
-lamedholamhebrew;05DC 05B9
-lamfinalarabic;FEDE
-lamhahinitialarabic;FCCA
-laminitialarabic;FEDF
-lamjeeminitialarabic;FCC9
-lamkhahinitialarabic;FCCB
-lamlamhehisolatedarabic;FDF2
-lammedialarabic;FEE0
-lammeemhahinitialarabic;FD88
-lammeeminitialarabic;FCCC
-lammeemjeeminitialarabic;FEDF FEE4 FEA0
-lammeemkhahinitialarabic;FEDF FEE4 FEA8
-largecircle;25EF
-lbar;019A
-lbelt;026C
-lbopomofo;310C
-lcaron;013E
-lcedilla;013C
-lcircle;24DB
-lcircumflexbelow;1E3D
-lcommaaccent;013C
-ldot;0140
-ldotaccent;0140
-ldotbelow;1E37
-ldotbelowmacron;1E39
-leftangleabovecmb;031A
-lefttackbelowcmb;0318
-less;003C
-lessequal;2264
-lessequalorgreater;22DA
-lessmonospace;FF1C
-lessorequivalent;2272
-lessorgreater;2276
-lessoverequal;2266
-lesssmall;FE64
-lezh;026E
-lfblock;258C
-lhookretroflex;026D
-lira;20A4
-liwnarmenian;056C
-lj;01C9
-ljecyrillic;0459
-ll;F6C0
-lladeva;0933
-llagujarati;0AB3
-llinebelow;1E3B
-llladeva;0934
-llvocalicbengali;09E1
-llvocalicdeva;0961
-llvocalicvowelsignbengali;09E3
-llvocalicvowelsigndeva;0963
-lmiddletilde;026B
-lmonospace;FF4C
-lmsquare;33D0
-lochulathai;0E2C
-logicaland;2227
-logicalnot;00AC
-logicalnotreversed;2310
-logicalor;2228
-lolingthai;0E25
-longs;017F
-lowlinecenterline;FE4E
-lowlinecmb;0332
-lowlinedashed;FE4D
-lozenge;25CA
-lparen;24A7
-lslash;0142
-lsquare;2113
-lsuperior;F6EE
-ltshade;2591
-luthai;0E26
-lvocalicbengali;098C
-lvocalicdeva;090C
-lvocalicvowelsignbengali;09E2
-lvocalicvowelsigndeva;0962
-lxsquare;33D3
-m;006D
-mabengali;09AE
-macron;00AF
-macronbelowcmb;0331
-macroncmb;0304
-macronlowmod;02CD
-macronmonospace;FFE3
-macute;1E3F
-madeva;092E
-magujarati;0AAE
-magurmukhi;0A2E
-mahapakhhebrew;05A4
-mahapakhlefthebrew;05A4
-mahiragana;307E
-maichattawalowleftthai;F895
-maichattawalowrightthai;F894
-maichattawathai;0E4B
-maichattawaupperleftthai;F893
-maieklowleftthai;F88C
-maieklowrightthai;F88B
-maiekthai;0E48
-maiekupperleftthai;F88A
-maihanakatleftthai;F884
-maihanakatthai;0E31
-maitaikhuleftthai;F889
-maitaikhuthai;0E47
-maitholowleftthai;F88F
-maitholowrightthai;F88E
-maithothai;0E49
-maithoupperleftthai;F88D
-maitrilowleftthai;F892
-maitrilowrightthai;F891
-maitrithai;0E4A
-maitriupperleftthai;F890
-maiyamokthai;0E46
-makatakana;30DE
-makatakanahalfwidth;FF8F
-male;2642
-mansyonsquare;3347
-maqafhebrew;05BE
-mars;2642
-masoracirclehebrew;05AF
-masquare;3383
-mbopomofo;3107
-mbsquare;33D4
-mcircle;24DC
-mcubedsquare;33A5
-mdotaccent;1E41
-mdotbelow;1E43
-meemarabic;0645
-meemfinalarabic;FEE2
-meeminitialarabic;FEE3
-meemmedialarabic;FEE4
-meemmeeminitialarabic;FCD1
-meemmeemisolatedarabic;FC48
-meetorusquare;334D
-mehiragana;3081
-meizierasquare;337E
-mekatakana;30E1
-mekatakanahalfwidth;FF92
-mem;05DE
-memdagesh;FB3E
-memdageshhebrew;FB3E
-memhebrew;05DE
-menarmenian;0574
-merkhahebrew;05A5
-merkhakefulahebrew;05A6
-merkhakefulalefthebrew;05A6
-merkhalefthebrew;05A5
-mhook;0271
-mhzsquare;3392
-middledotkatakanahalfwidth;FF65
-middot;00B7
-mieumacirclekorean;3272
-mieumaparenkorean;3212
-mieumcirclekorean;3264
-mieumkorean;3141
-mieumpansioskorean;3170
-mieumparenkorean;3204
-mieumpieupkorean;316E
-mieumsioskorean;316F
-mihiragana;307F
-mikatakana;30DF
-mikatakanahalfwidth;FF90
-minus;2212
-minusbelowcmb;0320
-minuscircle;2296
-minusmod;02D7
-minusplus;2213
-minute;2032
-miribaarusquare;334A
-mirisquare;3349
-mlonglegturned;0270
-mlsquare;3396
-mmcubedsquare;33A3
-mmonospace;FF4D
-mmsquaredsquare;339F
-mohiragana;3082
-mohmsquare;33C1
-mokatakana;30E2
-mokatakanahalfwidth;FF93
-molsquare;33D6
-momathai;0E21
-moverssquare;33A7
-moverssquaredsquare;33A8
-mparen;24A8
-mpasquare;33AB
-mssquare;33B3
-msuperior;F6EF
-mturned;026F
-mu;00B5
-mu1;00B5
-muasquare;3382
-muchgreater;226B
-muchless;226A
-mufsquare;338C
-mugreek;03BC
-mugsquare;338D
-muhiragana;3080
-mukatakana;30E0
-mukatakanahalfwidth;FF91
-mulsquare;3395
-multiply;00D7
-mumsquare;339B
-munahhebrew;05A3
-munahlefthebrew;05A3
-musicalnote;266A
-musicalnotedbl;266B
-musicflatsign;266D
-musicsharpsign;266F
-mussquare;33B2
-muvsquare;33B6
-muwsquare;33BC
-mvmegasquare;33B9
-mvsquare;33B7
-mwmegasquare;33BF
-mwsquare;33BD
-n;006E
-nabengali;09A8
-nabla;2207
-nacute;0144
-nadeva;0928
-nagujarati;0AA8
-nagurmukhi;0A28
-nahiragana;306A
-nakatakana;30CA
-nakatakanahalfwidth;FF85
-napostrophe;0149
-nasquare;3381
-nbopomofo;310B
-nbspace;00A0
-ncaron;0148
-ncedilla;0146
-ncircle;24DD
-ncircumflexbelow;1E4B
-ncommaaccent;0146
-ndotaccent;1E45
-ndotbelow;1E47
-nehiragana;306D
-nekatakana;30CD
-nekatakanahalfwidth;FF88
-newsheqelsign;20AA
-nfsquare;338B
-ngabengali;0999
-ngadeva;0919
-ngagujarati;0A99
-ngagurmukhi;0A19
-ngonguthai;0E07
-nhiragana;3093
-nhookleft;0272
-nhookretroflex;0273
-nieunacirclekorean;326F
-nieunaparenkorean;320F
-nieuncieuckorean;3135
-nieuncirclekorean;3261
-nieunhieuhkorean;3136
-nieunkorean;3134
-nieunpansioskorean;3168
-nieunparenkorean;3201
-nieunsioskorean;3167
-nieuntikeutkorean;3166
-nihiragana;306B
-nikatakana;30CB
-nikatakanahalfwidth;FF86
-nikhahitleftthai;F899
-nikhahitthai;0E4D
-nine;0039
-ninearabic;0669
-ninebengali;09EF
-ninecircle;2468
-ninecircleinversesansserif;2792
-ninedeva;096F
-ninegujarati;0AEF
-ninegurmukhi;0A6F
-ninehackarabic;0669
-ninehangzhou;3029
-nineideographicparen;3228
-nineinferior;2089
-ninemonospace;FF19
-nineoldstyle;F739
-nineparen;247C
-nineperiod;2490
-ninepersian;06F9
-nineroman;2178
-ninesuperior;2079
-nineteencircle;2472
-nineteenparen;2486
-nineteenperiod;249A
-ninethai;0E59
-nj;01CC
-njecyrillic;045A
-nkatakana;30F3
-nkatakanahalfwidth;FF9D
-nlegrightlong;019E
-nlinebelow;1E49
-nmonospace;FF4E
-nmsquare;339A
-nnabengali;09A3
-nnadeva;0923
-nnagujarati;0AA3
-nnagurmukhi;0A23
-nnnadeva;0929
-nohiragana;306E
-nokatakana;30CE
-nokatakanahalfwidth;FF89
-nonbreakingspace;00A0
-nonenthai;0E13
-nonuthai;0E19
-noonarabic;0646
-noonfinalarabic;FEE6
-noonghunnaarabic;06BA
-noonghunnafinalarabic;FB9F
-noonhehinitialarabic;FEE7 FEEC
-nooninitialarabic;FEE7
-noonjeeminitialarabic;FCD2
-noonjeemisolatedarabic;FC4B
-noonmedialarabic;FEE8
-noonmeeminitialarabic;FCD5
-noonmeemisolatedarabic;FC4E
-noonnoonfinalarabic;FC8D
-notcontains;220C
-notelement;2209
-notelementof;2209
-notequal;2260
-notgreater;226F
-notgreaternorequal;2271
-notgreaternorless;2279
-notidentical;2262
-notless;226E
-notlessnorequal;2270
-notparallel;2226
-notprecedes;2280
-notsubset;2284
-notsucceeds;2281
-notsuperset;2285
-nowarmenian;0576
-nparen;24A9
-nssquare;33B1
-nsuperior;207F
-ntilde;00F1
-nu;03BD
-nuhiragana;306C
-nukatakana;30CC
-nukatakanahalfwidth;FF87
-nuktabengali;09BC
-nuktadeva;093C
-nuktagujarati;0ABC
-nuktagurmukhi;0A3C
-numbersign;0023
-numbersignmonospace;FF03
-numbersignsmall;FE5F
-numeralsigngreek;0374
-numeralsignlowergreek;0375
-numero;2116
-nun;05E0
-nundagesh;FB40
-nundageshhebrew;FB40
-nunhebrew;05E0
-nvsquare;33B5
-nwsquare;33BB
-nyabengali;099E
-nyadeva;091E
-nyagujarati;0A9E
-nyagurmukhi;0A1E
-o;006F
-oacute;00F3
-oangthai;0E2D
-obarred;0275
-obarredcyrillic;04E9
-obarreddieresiscyrillic;04EB
-obengali;0993
-obopomofo;311B
-obreve;014F
-ocandradeva;0911
-ocandragujarati;0A91
-ocandravowelsigndeva;0949
-ocandravowelsigngujarati;0AC9
-ocaron;01D2
-ocircle;24DE
-ocircumflex;00F4
-ocircumflexacute;1ED1
-ocircumflexdotbelow;1ED9
-ocircumflexgrave;1ED3
-ocircumflexhookabove;1ED5
-ocircumflextilde;1ED7
-ocyrillic;043E
-odblacute;0151
-odblgrave;020D
-odeva;0913
-odieresis;00F6
-odieresiscyrillic;04E7
-odotbelow;1ECD
-oe;0153
-oekorean;315A
-ogonek;02DB
-ogonekcmb;0328
-ograve;00F2
-ogujarati;0A93
-oharmenian;0585
-ohiragana;304A
-ohookabove;1ECF
-ohorn;01A1
-ohornacute;1EDB
-ohorndotbelow;1EE3
-ohorngrave;1EDD
-ohornhookabove;1EDF
-ohorntilde;1EE1
-ohungarumlaut;0151
-oi;01A3
-oinvertedbreve;020F
-okatakana;30AA
-okatakanahalfwidth;FF75
-okorean;3157
-olehebrew;05AB
-omacron;014D
-omacronacute;1E53
-omacrongrave;1E51
-omdeva;0950
-omega;03C9
-omega1;03D6
-omegacyrillic;0461
-omegalatinclosed;0277
-omegaroundcyrillic;047B
-omegatitlocyrillic;047D
-omegatonos;03CE
-omgujarati;0AD0
-omicron;03BF
-omicrontonos;03CC
-omonospace;FF4F
-one;0031
-onearabic;0661
-onebengali;09E7
-onecircle;2460
-onecircleinversesansserif;278A
-onedeva;0967
-onedotenleader;2024
-oneeighth;215B
-onefitted;F6DC
-onegujarati;0AE7
-onegurmukhi;0A67
-onehackarabic;0661
-onehalf;00BD
-onehangzhou;3021
-oneideographicparen;3220
-oneinferior;2081
-onemonospace;FF11
-onenumeratorbengali;09F4
-oneoldstyle;F731
-oneparen;2474
-oneperiod;2488
-onepersian;06F1
-onequarter;00BC
-oneroman;2170
-onesuperior;00B9
-onethai;0E51
-onethird;2153
-oogonek;01EB
-oogonekmacron;01ED
-oogurmukhi;0A13
-oomatragurmukhi;0A4B
-oopen;0254
-oparen;24AA
-openbullet;25E6
-option;2325
-ordfeminine;00AA
-ordmasculine;00BA
-orthogonal;221F
-oshortdeva;0912
-oshortvowelsigndeva;094A
-oslash;00F8
-oslashacute;01FF
-osmallhiragana;3049
-osmallkatakana;30A9
-osmallkatakanahalfwidth;FF6B
-ostrokeacute;01FF
-osuperior;F6F0
-otcyrillic;047F
-otilde;00F5
-otildeacute;1E4D
-otildedieresis;1E4F
-oubopomofo;3121
-overline;203E
-overlinecenterline;FE4A
-overlinecmb;0305
-overlinedashed;FE49
-overlinedblwavy;FE4C
-overlinewavy;FE4B
-overscore;00AF
-ovowelsignbengali;09CB
-ovowelsigndeva;094B
-ovowelsigngujarati;0ACB
-p;0070
-paampssquare;3380
-paasentosquare;332B
-pabengali;09AA
-pacute;1E55
-padeva;092A
-pagedown;21DF
-pageup;21DE
-pagujarati;0AAA
-pagurmukhi;0A2A
-pahiragana;3071
-paiyannoithai;0E2F
-pakatakana;30D1
-palatalizationcyrilliccmb;0484
-palochkacyrillic;04C0
-pansioskorean;317F
-paragraph;00B6
-parallel;2225
-parenleft;0028
-parenleftaltonearabic;FD3E
-parenleftbt;F8ED
-parenleftex;F8EC
-parenleftinferior;208D
-parenleftmonospace;FF08
-parenleftsmall;FE59
-parenleftsuperior;207D
-parenlefttp;F8EB
-parenleftvertical;FE35
-parenright;0029
-parenrightaltonearabic;FD3F
-parenrightbt;F8F8
-parenrightex;F8F7
-parenrightinferior;208E
-parenrightmonospace;FF09
-parenrightsmall;FE5A
-parenrightsuperior;207E
-parenrighttp;F8F6
-parenrightvertical;FE36
-partialdiff;2202
-paseqhebrew;05C0
-pashtahebrew;0599
-pasquare;33A9
-patah;05B7
-patah11;05B7
-patah1d;05B7
-patah2a;05B7
-patahhebrew;05B7
-patahnarrowhebrew;05B7
-patahquarterhebrew;05B7
-patahwidehebrew;05B7
-pazerhebrew;05A1
-pbopomofo;3106
-pcircle;24DF
-pdotaccent;1E57
-pe;05E4
-pecyrillic;043F
-pedagesh;FB44
-pedageshhebrew;FB44
-peezisquare;333B
-pefinaldageshhebrew;FB43
-peharabic;067E
-peharmenian;057A
-pehebrew;05E4
-pehfinalarabic;FB57
-pehinitialarabic;FB58
-pehiragana;307A
-pehmedialarabic;FB59
-pekatakana;30DA
-pemiddlehookcyrillic;04A7
-perafehebrew;FB4E
-percent;0025
-percentarabic;066A
-percentmonospace;FF05
-percentsmall;FE6A
-period;002E
-periodarmenian;0589
-periodcentered;00B7
-periodhalfwidth;FF61
-periodinferior;F6E7
-periodmonospace;FF0E
-periodsmall;FE52
-periodsuperior;F6E8
-perispomenigreekcmb;0342
-perpendicular;22A5
-perthousand;2030
-peseta;20A7
-pfsquare;338A
-phabengali;09AB
-phadeva;092B
-phagujarati;0AAB
-phagurmukhi;0A2B
-phi;03C6
-phi1;03D5
-phieuphacirclekorean;327A
-phieuphaparenkorean;321A
-phieuphcirclekorean;326C
-phieuphkorean;314D
-phieuphparenkorean;320C
-philatin;0278
-phinthuthai;0E3A
-phisymbolgreek;03D5
-phook;01A5
-phophanthai;0E1E
-phophungthai;0E1C
-phosamphaothai;0E20
-pi;03C0
-pieupacirclekorean;3273
-pieupaparenkorean;3213
-pieupcieuckorean;3176
-pieupcirclekorean;3265
-pieupkiyeokkorean;3172
-pieupkorean;3142
-pieupparenkorean;3205
-pieupsioskiyeokkorean;3174
-pieupsioskorean;3144
-pieupsiostikeutkorean;3175
-pieupthieuthkorean;3177
-pieuptikeutkorean;3173
-pihiragana;3074
-pikatakana;30D4
-pisymbolgreek;03D6
-piwrarmenian;0583
-plus;002B
-plusbelowcmb;031F
-pluscircle;2295
-plusminus;00B1
-plusmod;02D6
-plusmonospace;FF0B
-plussmall;FE62
-plussuperior;207A
-pmonospace;FF50
-pmsquare;33D8
-pohiragana;307D
-pointingindexdownwhite;261F
-pointingindexleftwhite;261C
-pointingindexrightwhite;261E
-pointingindexupwhite;261D
-pokatakana;30DD
-poplathai;0E1B
-postalmark;3012
-postalmarkface;3020
-pparen;24AB
-precedes;227A
-prescription;211E
-primemod;02B9
-primereversed;2035
-product;220F
-projective;2305
-prolongedkana;30FC
-propellor;2318
-propersubset;2282
-propersuperset;2283
-proportion;2237
-proportional;221D
-psi;03C8
-psicyrillic;0471
-psilipneumatacyrilliccmb;0486
-pssquare;33B0
-puhiragana;3077
-pukatakana;30D7
-pvsquare;33B4
-pwsquare;33BA
-q;0071
-qadeva;0958
-qadmahebrew;05A8
-qafarabic;0642
-qaffinalarabic;FED6
-qafinitialarabic;FED7
-qafmedialarabic;FED8
-qamats;05B8
-qamats10;05B8
-qamats1a;05B8
-qamats1c;05B8
-qamats27;05B8
-qamats29;05B8
-qamats33;05B8
-qamatsde;05B8
-qamatshebrew;05B8
-qamatsnarrowhebrew;05B8
-qamatsqatanhebrew;05B8
-qamatsqatannarrowhebrew;05B8
-qamatsqatanquarterhebrew;05B8
-qamatsqatanwidehebrew;05B8
-qamatsquarterhebrew;05B8
-qamatswidehebrew;05B8
-qarneyparahebrew;059F
-qbopomofo;3111
-qcircle;24E0
-qhook;02A0
-qmonospace;FF51
-qof;05E7
-qofdagesh;FB47
-qofdageshhebrew;FB47
-qofhatafpatah;05E7 05B2
-qofhatafpatahhebrew;05E7 05B2
-qofhatafsegol;05E7 05B1
-qofhatafsegolhebrew;05E7 05B1
-qofhebrew;05E7
-qofhiriq;05E7 05B4
-qofhiriqhebrew;05E7 05B4
-qofholam;05E7 05B9
-qofholamhebrew;05E7 05B9
-qofpatah;05E7 05B7
-qofpatahhebrew;05E7 05B7
-qofqamats;05E7 05B8
-qofqamatshebrew;05E7 05B8
-qofqubuts;05E7 05BB
-qofqubutshebrew;05E7 05BB
-qofsegol;05E7 05B6
-qofsegolhebrew;05E7 05B6
-qofsheva;05E7 05B0
-qofshevahebrew;05E7 05B0
-qoftsere;05E7 05B5
-qoftserehebrew;05E7 05B5
-qparen;24AC
-quarternote;2669
-qubuts;05BB
-qubuts18;05BB
-qubuts25;05BB
-qubuts31;05BB
-qubutshebrew;05BB
-qubutsnarrowhebrew;05BB
-qubutsquarterhebrew;05BB
-qubutswidehebrew;05BB
-question;003F
-questionarabic;061F
-questionarmenian;055E
-questiondown;00BF
-questiondownsmall;F7BF
-questiongreek;037E
-questionmonospace;FF1F
-questionsmall;F73F
-quotedbl;0022
-quotedblbase;201E
-quotedblleft;201C
-quotedblmonospace;FF02
-quotedblprime;301E
-quotedblprimereversed;301D
-quotedblright;201D
-quoteleft;2018
-quoteleftreversed;201B
-quotereversed;201B
-quoteright;2019
-quoterightn;0149
-quotesinglbase;201A
-quotesingle;0027
-quotesinglemonospace;FF07
-r;0072
-raarmenian;057C
-rabengali;09B0
-racute;0155
-radeva;0930
-radical;221A
-radicalex;F8E5
-radoverssquare;33AE
-radoverssquaredsquare;33AF
-radsquare;33AD
-rafe;05BF
-rafehebrew;05BF
-ragujarati;0AB0
-ragurmukhi;0A30
-rahiragana;3089
-rakatakana;30E9
-rakatakanahalfwidth;FF97
-ralowerdiagonalbengali;09F1
-ramiddlediagonalbengali;09F0
-ramshorn;0264
-ratio;2236
-rbopomofo;3116
-rcaron;0159
-rcedilla;0157
-rcircle;24E1
-rcommaaccent;0157
-rdblgrave;0211
-rdotaccent;1E59
-rdotbelow;1E5B
-rdotbelowmacron;1E5D
-referencemark;203B
-reflexsubset;2286
-reflexsuperset;2287
-registered;00AE
-registersans;F8E8
-registerserif;F6DA
-reharabic;0631
-reharmenian;0580
-rehfinalarabic;FEAE
-rehiragana;308C
-rehyehaleflamarabic;0631 FEF3 FE8E 0644
-rekatakana;30EC
-rekatakanahalfwidth;FF9A
-resh;05E8
-reshdageshhebrew;FB48
-reshhatafpatah;05E8 05B2
-reshhatafpatahhebrew;05E8 05B2
-reshhatafsegol;05E8 05B1
-reshhatafsegolhebrew;05E8 05B1
-reshhebrew;05E8
-reshhiriq;05E8 05B4
-reshhiriqhebrew;05E8 05B4
-reshholam;05E8 05B9
-reshholamhebrew;05E8 05B9
-reshpatah;05E8 05B7
-reshpatahhebrew;05E8 05B7
-reshqamats;05E8 05B8
-reshqamatshebrew;05E8 05B8
-reshqubuts;05E8 05BB
-reshqubutshebrew;05E8 05BB
-reshsegol;05E8 05B6
-reshsegolhebrew;05E8 05B6
-reshsheva;05E8 05B0
-reshshevahebrew;05E8 05B0
-reshtsere;05E8 05B5
-reshtserehebrew;05E8 05B5
-reversedtilde;223D
-reviahebrew;0597
-reviamugrashhebrew;0597
-revlogicalnot;2310
-rfishhook;027E
-rfishhookreversed;027F
-rhabengali;09DD
-rhadeva;095D
-rho;03C1
-rhook;027D
-rhookturned;027B
-rhookturnedsuperior;02B5
-rhosymbolgreek;03F1
-rhotichookmod;02DE
-rieulacirclekorean;3271
-rieulaparenkorean;3211
-rieulcirclekorean;3263
-rieulhieuhkorean;3140
-rieulkiyeokkorean;313A
-rieulkiyeoksioskorean;3169
-rieulkorean;3139
-rieulmieumkorean;313B
-rieulpansioskorean;316C
-rieulparenkorean;3203
-rieulphieuphkorean;313F
-rieulpieupkorean;313C
-rieulpieupsioskorean;316B
-rieulsioskorean;313D
-rieulthieuthkorean;313E
-rieultikeutkorean;316A
-rieulyeorinhieuhkorean;316D
-rightangle;221F
-righttackbelowcmb;0319
-righttriangle;22BF
-rihiragana;308A
-rikatakana;30EA
-rikatakanahalfwidth;FF98
-ring;02DA
-ringbelowcmb;0325
-ringcmb;030A
-ringhalfleft;02BF
-ringhalfleftarmenian;0559
-ringhalfleftbelowcmb;031C
-ringhalfleftcentered;02D3
-ringhalfright;02BE
-ringhalfrightbelowcmb;0339
-ringhalfrightcentered;02D2
-rinvertedbreve;0213
-rittorusquare;3351
-rlinebelow;1E5F
-rlongleg;027C
-rlonglegturned;027A
-rmonospace;FF52
-rohiragana;308D
-rokatakana;30ED
-rokatakanahalfwidth;FF9B
-roruathai;0E23
-rparen;24AD
-rrabengali;09DC
-rradeva;0931
-rragurmukhi;0A5C
-rreharabic;0691
-rrehfinalarabic;FB8D
-rrvocalicbengali;09E0
-rrvocalicdeva;0960
-rrvocalicgujarati;0AE0
-rrvocalicvowelsignbengali;09C4
-rrvocalicvowelsigndeva;0944
-rrvocalicvowelsigngujarati;0AC4
-rsuperior;F6F1
-rtblock;2590
-rturned;0279
-rturnedsuperior;02B4
-ruhiragana;308B
-rukatakana;30EB
-rukatakanahalfwidth;FF99
-rupeemarkbengali;09F2
-rupeesignbengali;09F3
-rupiah;F6DD
-ruthai;0E24
-rvocalicbengali;098B
-rvocalicdeva;090B
-rvocalicgujarati;0A8B
-rvocalicvowelsignbengali;09C3
-rvocalicvowelsigndeva;0943
-rvocalicvowelsigngujarati;0AC3
-s;0073
-sabengali;09B8
-sacute;015B
-sacutedotaccent;1E65
-sadarabic;0635
-sadeva;0938
-sadfinalarabic;FEBA
-sadinitialarabic;FEBB
-sadmedialarabic;FEBC
-sagujarati;0AB8
-sagurmukhi;0A38
-sahiragana;3055
-sakatakana;30B5
-sakatakanahalfwidth;FF7B
-sallallahoualayhewasallamarabic;FDFA
-samekh;05E1
-samekhdagesh;FB41
-samekhdageshhebrew;FB41
-samekhhebrew;05E1
-saraaathai;0E32
-saraaethai;0E41
-saraaimaimalaithai;0E44
-saraaimaimuanthai;0E43
-saraamthai;0E33
-saraathai;0E30
-saraethai;0E40
-saraiileftthai;F886
-saraiithai;0E35
-saraileftthai;F885
-saraithai;0E34
-saraothai;0E42
-saraueeleftthai;F888
-saraueethai;0E37
-saraueleftthai;F887
-sarauethai;0E36
-sarauthai;0E38
-sarauuthai;0E39
-sbopomofo;3119
-scaron;0161
-scarondotaccent;1E67
-scedilla;015F
-schwa;0259
-schwacyrillic;04D9
-schwadieresiscyrillic;04DB
-schwahook;025A
-scircle;24E2
-scircumflex;015D
-scommaaccent;0219
-sdotaccent;1E61
-sdotbelow;1E63
-sdotbelowdotaccent;1E69
-seagullbelowcmb;033C
-second;2033
-secondtonechinese;02CA
-section;00A7
-seenarabic;0633
-seenfinalarabic;FEB2
-seeninitialarabic;FEB3
-seenmedialarabic;FEB4
-segol;05B6
-segol13;05B6
-segol1f;05B6
-segol2c;05B6
-segolhebrew;05B6
-segolnarrowhebrew;05B6
-segolquarterhebrew;05B6
-segoltahebrew;0592
-segolwidehebrew;05B6
-seharmenian;057D
-sehiragana;305B
-sekatakana;30BB
-sekatakanahalfwidth;FF7E
-semicolon;003B
-semicolonarabic;061B
-semicolonmonospace;FF1B
-semicolonsmall;FE54
-semivoicedmarkkana;309C
-semivoicedmarkkanahalfwidth;FF9F
-sentisquare;3322
-sentosquare;3323
-seven;0037
-sevenarabic;0667
-sevenbengali;09ED
-sevencircle;2466
-sevencircleinversesansserif;2790
-sevendeva;096D
-seveneighths;215E
-sevengujarati;0AED
-sevengurmukhi;0A6D
-sevenhackarabic;0667
-sevenhangzhou;3027
-sevenideographicparen;3226
-seveninferior;2087
-sevenmonospace;FF17
-sevenoldstyle;F737
-sevenparen;247A
-sevenperiod;248E
-sevenpersian;06F7
-sevenroman;2176
-sevensuperior;2077
-seventeencircle;2470
-seventeenparen;2484
-seventeenperiod;2498
-seventhai;0E57
-sfthyphen;00AD
-shaarmenian;0577
-shabengali;09B6
-shacyrillic;0448
-shaddaarabic;0651
-shaddadammaarabic;FC61
-shaddadammatanarabic;FC5E
-shaddafathaarabic;FC60
-shaddafathatanarabic;0651 064B
-shaddakasraarabic;FC62
-shaddakasratanarabic;FC5F
-shade;2592
-shadedark;2593
-shadelight;2591
-shademedium;2592
-shadeva;0936
-shagujarati;0AB6
-shagurmukhi;0A36
-shalshelethebrew;0593
-shbopomofo;3115
-shchacyrillic;0449
-sheenarabic;0634
-sheenfinalarabic;FEB6
-sheeninitialarabic;FEB7
-sheenmedialarabic;FEB8
-sheicoptic;03E3
-sheqel;20AA
-sheqelhebrew;20AA
-sheva;05B0
-sheva115;05B0
-sheva15;05B0
-sheva22;05B0
-sheva2e;05B0
-shevahebrew;05B0
-shevanarrowhebrew;05B0
-shevaquarterhebrew;05B0
-shevawidehebrew;05B0
-shhacyrillic;04BB
-shimacoptic;03ED
-shin;05E9
-shindagesh;FB49
-shindageshhebrew;FB49
-shindageshshindot;FB2C
-shindageshshindothebrew;FB2C
-shindageshsindot;FB2D
-shindageshsindothebrew;FB2D
-shindothebrew;05C1
-shinhebrew;05E9
-shinshindot;FB2A
-shinshindothebrew;FB2A
-shinsindot;FB2B
-shinsindothebrew;FB2B
-shook;0282
-sigma;03C3
-sigma1;03C2
-sigmafinal;03C2
-sigmalunatesymbolgreek;03F2
-sihiragana;3057
-sikatakana;30B7
-sikatakanahalfwidth;FF7C
-siluqhebrew;05BD
-siluqlefthebrew;05BD
-similar;223C
-sindothebrew;05C2
-siosacirclekorean;3274
-siosaparenkorean;3214
-sioscieuckorean;317E
-sioscirclekorean;3266
-sioskiyeokkorean;317A
-sioskorean;3145
-siosnieunkorean;317B
-siosparenkorean;3206
-siospieupkorean;317D
-siostikeutkorean;317C
-six;0036
-sixarabic;0666
-sixbengali;09EC
-sixcircle;2465
-sixcircleinversesansserif;278F
-sixdeva;096C
-sixgujarati;0AEC
-sixgurmukhi;0A6C
-sixhackarabic;0666
-sixhangzhou;3026
-sixideographicparen;3225
-sixinferior;2086
-sixmonospace;FF16
-sixoldstyle;F736
-sixparen;2479
-sixperiod;248D
-sixpersian;06F6
-sixroman;2175
-sixsuperior;2076
-sixteencircle;246F
-sixteencurrencydenominatorbengali;09F9
-sixteenparen;2483
-sixteenperiod;2497
-sixthai;0E56
-slash;002F
-slashmonospace;FF0F
-slong;017F
-slongdotaccent;1E9B
-smileface;263A
-smonospace;FF53
-sofpasuqhebrew;05C3
-softhyphen;00AD
-softsigncyrillic;044C
-sohiragana;305D
-sokatakana;30BD
-sokatakanahalfwidth;FF7F
-soliduslongoverlaycmb;0338
-solidusshortoverlaycmb;0337
-sorusithai;0E29
-sosalathai;0E28
-sosothai;0E0B
-sosuathai;0E2A
-space;0020
-spacehackarabic;0020
-spade;2660
-spadesuitblack;2660
-spadesuitwhite;2664
-sparen;24AE
-squarebelowcmb;033B
-squarecc;33C4
-squarecm;339D
-squarediagonalcrosshatchfill;25A9
-squarehorizontalfill;25A4
-squarekg;338F
-squarekm;339E
-squarekmcapital;33CE
-squareln;33D1
-squarelog;33D2
-squaremg;338E
-squaremil;33D5
-squaremm;339C
-squaremsquared;33A1
-squareorthogonalcrosshatchfill;25A6
-squareupperlefttolowerrightfill;25A7
-squareupperrighttolowerleftfill;25A8
-squareverticalfill;25A5
-squarewhitewithsmallblack;25A3
-srsquare;33DB
-ssabengali;09B7
-ssadeva;0937
-ssagujarati;0AB7
-ssangcieuckorean;3149
-ssanghieuhkorean;3185
-ssangieungkorean;3180
-ssangkiyeokkorean;3132
-ssangnieunkorean;3165
-ssangpieupkorean;3143
-ssangsioskorean;3146
-ssangtikeutkorean;3138
-ssuperior;F6F2
-sterling;00A3
-sterlingmonospace;FFE1
-strokelongoverlaycmb;0336
-strokeshortoverlaycmb;0335
-subset;2282
-subsetnotequal;228A
-subsetorequal;2286
-succeeds;227B
-suchthat;220B
-suhiragana;3059
-sukatakana;30B9
-sukatakanahalfwidth;FF7D
-sukunarabic;0652
-summation;2211
-sun;263C
-superset;2283
-supersetnotequal;228B
-supersetorequal;2287
-svsquare;33DC
-syouwaerasquare;337C
-t;0074
-tabengali;09A4
-tackdown;22A4
-tackleft;22A3
-tadeva;0924
-tagujarati;0AA4
-tagurmukhi;0A24
-taharabic;0637
-tahfinalarabic;FEC2
-tahinitialarabic;FEC3
-tahiragana;305F
-tahmedialarabic;FEC4
-taisyouerasquare;337D
-takatakana;30BF
-takatakanahalfwidth;FF80
-tatweelarabic;0640
-tau;03C4
-tav;05EA
-tavdages;FB4A
-tavdagesh;FB4A
-tavdageshhebrew;FB4A
-tavhebrew;05EA
-tbar;0167
-tbopomofo;310A
-tcaron;0165
-tccurl;02A8
-tcedilla;0163
-tcheharabic;0686
-tchehfinalarabic;FB7B
-tchehinitialarabic;FB7C
-tchehmedialarabic;FB7D
-tchehmeeminitialarabic;FB7C FEE4
-tcircle;24E3
-tcircumflexbelow;1E71
-tcommaaccent;0163
-tdieresis;1E97
-tdotaccent;1E6B
-tdotbelow;1E6D
-tecyrillic;0442
-tedescendercyrillic;04AD
-teharabic;062A
-tehfinalarabic;FE96
-tehhahinitialarabic;FCA2
-tehhahisolatedarabic;FC0C
-tehinitialarabic;FE97
-tehiragana;3066
-tehjeeminitialarabic;FCA1
-tehjeemisolatedarabic;FC0B
-tehmarbutaarabic;0629
-tehmarbutafinalarabic;FE94
-tehmedialarabic;FE98
-tehmeeminitialarabic;FCA4
-tehmeemisolatedarabic;FC0E
-tehnoonfinalarabic;FC73
-tekatakana;30C6
-tekatakanahalfwidth;FF83
-telephone;2121
-telephoneblack;260E
-telishagedolahebrew;05A0
-telishaqetanahebrew;05A9
-tencircle;2469
-tenideographicparen;3229
-tenparen;247D
-tenperiod;2491
-tenroman;2179
-tesh;02A7
-tet;05D8
-tetdagesh;FB38
-tetdageshhebrew;FB38
-tethebrew;05D8
-tetsecyrillic;04B5
-tevirhebrew;059B
-tevirlefthebrew;059B
-thabengali;09A5
-thadeva;0925
-thagujarati;0AA5
-thagurmukhi;0A25
-thalarabic;0630
-thalfinalarabic;FEAC
-thanthakhatlowleftthai;F898
-thanthakhatlowrightthai;F897
-thanthakhatthai;0E4C
-thanthakhatupperleftthai;F896
-theharabic;062B
-thehfinalarabic;FE9A
-thehinitialarabic;FE9B
-thehmedialarabic;FE9C
-thereexists;2203
-therefore;2234
-theta;03B8
-theta1;03D1
-thetasymbolgreek;03D1
-thieuthacirclekorean;3279
-thieuthaparenkorean;3219
-thieuthcirclekorean;326B
-thieuthkorean;314C
-thieuthparenkorean;320B
-thirteencircle;246C
-thirteenparen;2480
-thirteenperiod;2494
-thonangmonthothai;0E11
-thook;01AD
-thophuthaothai;0E12
-thorn;00FE
-thothahanthai;0E17
-thothanthai;0E10
-thothongthai;0E18
-thothungthai;0E16
-thousandcyrillic;0482
-thousandsseparatorarabic;066C
-thousandsseparatorpersian;066C
-three;0033
-threearabic;0663
-threebengali;09E9
-threecircle;2462
-threecircleinversesansserif;278C
-threedeva;0969
-threeeighths;215C
-threegujarati;0AE9
-threegurmukhi;0A69
-threehackarabic;0663
-threehangzhou;3023
-threeideographicparen;3222
-threeinferior;2083
-threemonospace;FF13
-threenumeratorbengali;09F6
-threeoldstyle;F733
-threeparen;2476
-threeperiod;248A
-threepersian;06F3
-threequarters;00BE
-threequartersemdash;F6DE
-threeroman;2172
-threesuperior;00B3
-threethai;0E53
-thzsquare;3394
-tihiragana;3061
-tikatakana;30C1
-tikatakanahalfwidth;FF81
-tikeutacirclekorean;3270
-tikeutaparenkorean;3210
-tikeutcirclekorean;3262
-tikeutkorean;3137
-tikeutparenkorean;3202
-tilde;02DC
-tildebelowcmb;0330
-tildecmb;0303
-tildecomb;0303
-tildedoublecmb;0360
-tildeoperator;223C
-tildeoverlaycmb;0334
-tildeverticalcmb;033E
-timescircle;2297
-tipehahebrew;0596
-tipehalefthebrew;0596
-tippigurmukhi;0A70
-titlocyrilliccmb;0483
-tiwnarmenian;057F
-tlinebelow;1E6F
-tmonospace;FF54
-toarmenian;0569
-tohiragana;3068
-tokatakana;30C8
-tokatakanahalfwidth;FF84
-tonebarextrahighmod;02E5
-tonebarextralowmod;02E9
-tonebarhighmod;02E6
-tonebarlowmod;02E8
-tonebarmidmod;02E7
-tonefive;01BD
-tonesix;0185
-tonetwo;01A8
-tonos;0384
-tonsquare;3327
-topatakthai;0E0F
-tortoiseshellbracketleft;3014
-tortoiseshellbracketleftsmall;FE5D
-tortoiseshellbracketleftvertical;FE39
-tortoiseshellbracketright;3015
-tortoiseshellbracketrightsmall;FE5E
-tortoiseshellbracketrightvertical;FE3A
-totaothai;0E15
-tpalatalhook;01AB
-tparen;24AF
-trademark;2122
-trademarksans;F8EA
-trademarkserif;F6DB
-tretroflexhook;0288
-triagdn;25BC
-triaglf;25C4
-triagrt;25BA
-triagup;25B2
-ts;02A6
-tsadi;05E6
-tsadidagesh;FB46
-tsadidageshhebrew;FB46
-tsadihebrew;05E6
-tsecyrillic;0446
-tsere;05B5
-tsere12;05B5
-tsere1e;05B5
-tsere2b;05B5
-tserehebrew;05B5
-tserenarrowhebrew;05B5
-tserequarterhebrew;05B5
-tserewidehebrew;05B5
-tshecyrillic;045B
-tsuperior;F6F3
-ttabengali;099F
-ttadeva;091F
-ttagujarati;0A9F
-ttagurmukhi;0A1F
-tteharabic;0679
-ttehfinalarabic;FB67
-ttehinitialarabic;FB68
-ttehmedialarabic;FB69
-tthabengali;09A0
-tthadeva;0920
-tthagujarati;0AA0
-tthagurmukhi;0A20
-tturned;0287
-tuhiragana;3064
-tukatakana;30C4
-tukatakanahalfwidth;FF82
-tusmallhiragana;3063
-tusmallkatakana;30C3
-tusmallkatakanahalfwidth;FF6F
-twelvecircle;246B
-twelveparen;247F
-twelveperiod;2493
-twelveroman;217B
-twentycircle;2473
-twentyhangzhou;5344
-twentyparen;2487
-twentyperiod;249B
-two;0032
-twoarabic;0662
-twobengali;09E8
-twocircle;2461
-twocircleinversesansserif;278B
-twodeva;0968
-twodotenleader;2025
-twodotleader;2025
-twodotleadervertical;FE30
-twogujarati;0AE8
-twogurmukhi;0A68
-twohackarabic;0662
-twohangzhou;3022
-twoideographicparen;3221
-twoinferior;2082
-twomonospace;FF12
-twonumeratorbengali;09F5
-twooldstyle;F732
-twoparen;2475
-twoperiod;2489
-twopersian;06F2
-tworoman;2171
-twostroke;01BB
-twosuperior;00B2
-twothai;0E52
-twothirds;2154
-u;0075
-uacute;00FA
-ubar;0289
-ubengali;0989
-ubopomofo;3128
-ubreve;016D
-ucaron;01D4
-ucircle;24E4
-ucircumflex;00FB
-ucircumflexbelow;1E77
-ucyrillic;0443
-udattadeva;0951
-udblacute;0171
-udblgrave;0215
-udeva;0909
-udieresis;00FC
-udieresisacute;01D8
-udieresisbelow;1E73
-udieresiscaron;01DA
-udieresiscyrillic;04F1
-udieresisgrave;01DC
-udieresismacron;01D6
-udotbelow;1EE5
-ugrave;00F9
-ugujarati;0A89
-ugurmukhi;0A09
-uhiragana;3046
-uhookabove;1EE7
-uhorn;01B0
-uhornacute;1EE9
-uhorndotbelow;1EF1
-uhorngrave;1EEB
-uhornhookabove;1EED
-uhorntilde;1EEF
-uhungarumlaut;0171
-uhungarumlautcyrillic;04F3
-uinvertedbreve;0217
-ukatakana;30A6
-ukatakanahalfwidth;FF73
-ukcyrillic;0479
-ukorean;315C
-umacron;016B
-umacroncyrillic;04EF
-umacrondieresis;1E7B
-umatragurmukhi;0A41
-umonospace;FF55
-underscore;005F
-underscoredbl;2017
-underscoremonospace;FF3F
-underscorevertical;FE33
-underscorewavy;FE4F
-union;222A
-universal;2200
-uogonek;0173
-uparen;24B0
-upblock;2580
-upperdothebrew;05C4
-upsilon;03C5
-upsilondieresis;03CB
-upsilondieresistonos;03B0
-upsilonlatin;028A
-upsilontonos;03CD
-uptackbelowcmb;031D
-uptackmod;02D4
-uragurmukhi;0A73
-uring;016F
-ushortcyrillic;045E
-usmallhiragana;3045
-usmallkatakana;30A5
-usmallkatakanahalfwidth;FF69
-ustraightcyrillic;04AF
-ustraightstrokecyrillic;04B1
-utilde;0169
-utildeacute;1E79
-utildebelow;1E75
-uubengali;098A
-uudeva;090A
-uugujarati;0A8A
-uugurmukhi;0A0A
-uumatragurmukhi;0A42
-uuvowelsignbengali;09C2
-uuvowelsigndeva;0942
-uuvowelsigngujarati;0AC2
-uvowelsignbengali;09C1
-uvowelsigndeva;0941
-uvowelsigngujarati;0AC1
-v;0076
-vadeva;0935
-vagujarati;0AB5
-vagurmukhi;0A35
-vakatakana;30F7
-vav;05D5
-vavdagesh;FB35
-vavdagesh65;FB35
-vavdageshhebrew;FB35
-vavhebrew;05D5
-vavholam;FB4B
-vavholamhebrew;FB4B
-vavvavhebrew;05F0
-vavyodhebrew;05F1
-vcircle;24E5
-vdotbelow;1E7F
-vecyrillic;0432
-veharabic;06A4
-vehfinalarabic;FB6B
-vehinitialarabic;FB6C
-vehmedialarabic;FB6D
-vekatakana;30F9
-venus;2640
-verticalbar;007C
-verticallineabovecmb;030D
-verticallinebelowcmb;0329
-verticallinelowmod;02CC
-verticallinemod;02C8
-vewarmenian;057E
-vhook;028B
-vikatakana;30F8
-viramabengali;09CD
-viramadeva;094D
-viramagujarati;0ACD
-visargabengali;0983
-visargadeva;0903
-visargagujarati;0A83
-vmonospace;FF56
-voarmenian;0578
-voicediterationhiragana;309E
-voicediterationkatakana;30FE
-voicedmarkkana;309B
-voicedmarkkanahalfwidth;FF9E
-vokatakana;30FA
-vparen;24B1
-vtilde;1E7D
-vturned;028C
-vuhiragana;3094
-vukatakana;30F4
-w;0077
-wacute;1E83
-waekorean;3159
-wahiragana;308F
-wakatakana;30EF
-wakatakanahalfwidth;FF9C
-wakorean;3158
-wasmallhiragana;308E
-wasmallkatakana;30EE
-wattosquare;3357
-wavedash;301C
-wavyunderscorevertical;FE34
-wawarabic;0648
-wawfinalarabic;FEEE
-wawhamzaabovearabic;0624
-wawhamzaabovefinalarabic;FE86
-wbsquare;33DD
-wcircle;24E6
-wcircumflex;0175
-wdieresis;1E85
-wdotaccent;1E87
-wdotbelow;1E89
-wehiragana;3091
-weierstrass;2118
-wekatakana;30F1
-wekorean;315E
-weokorean;315D
-wgrave;1E81
-whitebullet;25E6
-whitecircle;25CB
-whitecircleinverse;25D9
-whitecornerbracketleft;300E
-whitecornerbracketleftvertical;FE43
-whitecornerbracketright;300F
-whitecornerbracketrightvertical;FE44
-whitediamond;25C7
-whitediamondcontainingblacksmalldiamond;25C8
-whitedownpointingsmalltriangle;25BF
-whitedownpointingtriangle;25BD
-whiteleftpointingsmalltriangle;25C3
-whiteleftpointingtriangle;25C1
-whitelenticularbracketleft;3016
-whitelenticularbracketright;3017
-whiterightpointingsmalltriangle;25B9
-whiterightpointingtriangle;25B7
-whitesmallsquare;25AB
-whitesmilingface;263A
-whitesquare;25A1
-whitestar;2606
-whitetelephone;260F
-whitetortoiseshellbracketleft;3018
-whitetortoiseshellbracketright;3019
-whiteuppointingsmalltriangle;25B5
-whiteuppointingtriangle;25B3
-wihiragana;3090
-wikatakana;30F0
-wikorean;315F
-wmonospace;FF57
-wohiragana;3092
-wokatakana;30F2
-wokatakanahalfwidth;FF66
-won;20A9
-wonmonospace;FFE6
-wowaenthai;0E27
-wparen;24B2
-wring;1E98
-wsuperior;02B7
-wturned;028D
-wynn;01BF
-x;0078
-xabovecmb;033D
-xbopomofo;3112
-xcircle;24E7
-xdieresis;1E8D
-xdotaccent;1E8B
-xeharmenian;056D
-xi;03BE
-xmonospace;FF58
-xparen;24B3
-xsuperior;02E3
-y;0079
-yaadosquare;334E
-yabengali;09AF
-yacute;00FD
-yadeva;092F
-yaekorean;3152
-yagujarati;0AAF
-yagurmukhi;0A2F
-yahiragana;3084
-yakatakana;30E4
-yakatakanahalfwidth;FF94
-yakorean;3151
-yamakkanthai;0E4E
-yasmallhiragana;3083
-yasmallkatakana;30E3
-yasmallkatakanahalfwidth;FF6C
-yatcyrillic;0463
-ycircle;24E8
-ycircumflex;0177
-ydieresis;00FF
-ydotaccent;1E8F
-ydotbelow;1EF5
-yeharabic;064A
-yehbarreearabic;06D2
-yehbarreefinalarabic;FBAF
-yehfinalarabic;FEF2
-yehhamzaabovearabic;0626
-yehhamzaabovefinalarabic;FE8A
-yehhamzaaboveinitialarabic;FE8B
-yehhamzaabovemedialarabic;FE8C
-yehinitialarabic;FEF3
-yehmedialarabic;FEF4
-yehmeeminitialarabic;FCDD
-yehmeemisolatedarabic;FC58
-yehnoonfinalarabic;FC94
-yehthreedotsbelowarabic;06D1
-yekorean;3156
-yen;00A5
-yenmonospace;FFE5
-yeokorean;3155
-yeorinhieuhkorean;3186
-yerahbenyomohebrew;05AA
-yerahbenyomolefthebrew;05AA
-yericyrillic;044B
-yerudieresiscyrillic;04F9
-yesieungkorean;3181
-yesieungpansioskorean;3183
-yesieungsioskorean;3182
-yetivhebrew;059A
-ygrave;1EF3
-yhook;01B4
-yhookabove;1EF7
-yiarmenian;0575
-yicyrillic;0457
-yikorean;3162
-yinyang;262F
-yiwnarmenian;0582
-ymonospace;FF59
-yod;05D9
-yoddagesh;FB39
-yoddageshhebrew;FB39
-yodhebrew;05D9
-yodyodhebrew;05F2
-yodyodpatahhebrew;FB1F
-yohiragana;3088
-yoikorean;3189
-yokatakana;30E8
-yokatakanahalfwidth;FF96
-yokorean;315B
-yosmallhiragana;3087
-yosmallkatakana;30E7
-yosmallkatakanahalfwidth;FF6E
-yotgreek;03F3
-yoyaekorean;3188
-yoyakorean;3187
-yoyakthai;0E22
-yoyingthai;0E0D
-yparen;24B4
-ypogegrammeni;037A
-ypogegrammenigreekcmb;0345
-yr;01A6
-yring;1E99
-ysuperior;02B8
-ytilde;1EF9
-yturned;028E
-yuhiragana;3086
-yuikorean;318C
-yukatakana;30E6
-yukatakanahalfwidth;FF95
-yukorean;3160
-yusbigcyrillic;046B
-yusbigiotifiedcyrillic;046D
-yuslittlecyrillic;0467
-yuslittleiotifiedcyrillic;0469
-yusmallhiragana;3085
-yusmallkatakana;30E5
-yusmallkatakanahalfwidth;FF6D
-yuyekorean;318B
-yuyeokorean;318A
-yyabengali;09DF
-yyadeva;095F
-z;007A
-zaarmenian;0566
-zacute;017A
-zadeva;095B
-zagurmukhi;0A5B
-zaharabic;0638
-zahfinalarabic;FEC6
-zahinitialarabic;FEC7
-zahiragana;3056
-zahmedialarabic;FEC8
-zainarabic;0632
-zainfinalarabic;FEB0
-zakatakana;30B6
-zaqefgadolhebrew;0595
-zaqefqatanhebrew;0594
-zarqahebrew;0598
-zayin;05D6
-zayindagesh;FB36
-zayindageshhebrew;FB36
-zayinhebrew;05D6
-zbopomofo;3117
-zcaron;017E
-zcircle;24E9
-zcircumflex;1E91
-zcurl;0291
-zdot;017C
-zdotaccent;017C
-zdotbelow;1E93
-zecyrillic;0437
-zedescendercyrillic;0499
-zedieresiscyrillic;04DF
-zehiragana;305C
-zekatakana;30BC
-zero;0030
-zeroarabic;0660
-zerobengali;09E6
-zerodeva;0966
-zerogujarati;0AE6
-zerogurmukhi;0A66
-zerohackarabic;0660
-zeroinferior;2080
-zeromonospace;FF10
-zerooldstyle;F730
-zeropersian;06F0
-zerosuperior;2070
-zerothai;0E50
-zerowidthjoiner;FEFF
-zerowidthnonjoiner;200C
-zerowidthspace;200B
-zeta;03B6
-zhbopomofo;3113
-zhearmenian;056A
-zhebrevecyrillic;04C2
-zhecyrillic;0436
-zhedescendercyrillic;0497
-zhedieresiscyrillic;04DD
-zihiragana;3058
-zikatakana;30B8
-zinorhebrew;05AE
-zlinebelow;1E95
-zmonospace;FF5A
-zohiragana;305E
-zokatakana;30BE
-zparen;24B5
-zretroflexhook;0290
-zstroke;01B6
-zuhiragana;305A
-zukatakana;30BA
-a100;275E
-a101;2761
-a102;2762
-a103;2763
-a104;2764
-a105;2710
-a106;2765
-a107;2766
-a108;2767
-a109;2660
-a10;2721
-a110;2665
-a111;2666
-a112;2663
-a117;2709
-a118;2708
-a119;2707
-a11;261B
-a120;2460
-a121;2461
-a122;2462
-a123;2463
-a124;2464
-a125;2465
-a126;2466
-a127;2467
-a128;2468
-a129;2469
-a12;261E
-a130;2776
-a131;2777
-a132;2778
-a133;2779
-a134;277A
-a135;277B
-a136;277C
-a137;277D
-a138;277E
-a139;277F
-a13;270C
-a140;2780
-a141;2781
-a142;2782
-a143;2783
-a144;2784
-a145;2785
-a146;2786
-a147;2787
-a148;2788
-a149;2789
-a14;270D
-a150;278A
-a151;278B
-a152;278C
-a153;278D
-a154;278E
-a155;278F
-a156;2790
-a157;2791
-a158;2792
-a159;2793
-a15;270E
-a160;2794
-a161;2192
-a162;27A3
-a163;2194
-a164;2195
-a165;2799
-a166;279B
-a167;279C
-a168;279D
-a169;279E
-a16;270F
-a170;279F
-a171;27A0
-a172;27A1
-a173;27A2
-a174;27A4
-a175;27A5
-a176;27A6
-a177;27A7
-a178;27A8
-a179;27A9
-a17;2711
-a180;27AB
-a181;27AD
-a182;27AF
-a183;27B2
-a184;27B3
-a185;27B5
-a186;27B8
-a187;27BA
-a188;27BB
-a189;27BC
-a18;2712
-a190;27BD
-a191;27BE
-a192;279A
-a193;27AA
-a194;27B6
-a195;27B9
-a196;2798
-a197;27B4
-a198;27B7
-a199;27AC
-a19;2713
-a1;2701
-a200;27AE
-a201;27B1
-a202;2703
-a203;2750
-a204;2752
-a205;276E
-a206;2770
-a20;2714
-a21;2715
-a22;2716
-a23;2717
-a24;2718
-a25;2719
-a26;271A
-a27;271B
-a28;271C
-a29;2722
-a2;2702
-a30;2723
-a31;2724
-a32;2725
-a33;2726
-a34;2727
-a35;2605
-a36;2729
-a37;272A
-a38;272B
-a39;272C
-a3;2704
-a40;272D
-a41;272E
-a42;272F
-a43;2730
-a44;2731
-a45;2732
-a46;2733
-a47;2734
-a48;2735
-a49;2736
-a4;260E
-a50;2737
-a51;2738
-a52;2739
-a53;273A
-a54;273B
-a55;273C
-a56;273D
-a57;273E
-a58;273F
-a59;2740
-a5;2706
-a60;2741
-a61;2742
-a62;2743
-a63;2744
-a64;2745
-a65;2746
-a66;2747
-a67;2748
-a68;2749
-a69;274A
-a6;271D
-a70;274B
-a71;25CF
-a72;274D
-a73;25A0
-a74;274F
-a75;2751
-a76;25B2
-a77;25BC
-a78;25C6
-a79;2756
-a7;271E
-a81;25D7
-a82;2758
-a83;2759
-a84;275A
-a85;276F
-a86;2771
-a87;2772
-a88;2773
-a89;2768
-a8;271F
-a90;2769
-a91;276C
-a92;276D
-a93;276A
-a94;276B
-a95;2774
-a96;2775
-a97;275B
-a98;275C
-a99;275D
-a9;2720
-"""
-
-
-# string table management
-#
-class StringTable:
- def __init__( self, name_list, master_table_name ):
- self.names = name_list
- self.master_table = master_table_name
- self.indices = {}
- index = 0
-
- for name in name_list:
- self.indices[name] = index
- index += len( name ) + 1
-
- self.total = index
-
- def dump( self, file ):
- write = file.write
- write( "#ifndef DEFINE_PS_TABLES\n" )
- write( "#ifdef __cplusplus\n" )
- write( ' extern "C"\n' )
- write( "#else\n" )
- write( " extern\n" )
- write( "#endif\n" )
- write( "#endif\n" )
- write( " const char " + self.master_table +
- "[" + repr( self.total ) + "]\n" )
- write( "#ifdef DEFINE_PS_TABLES\n" )
- write( " =\n" )
- write( " {\n" )
-
- line = ""
- for name in self.names:
- line += " '"
- line += string.join( ( re.findall( ".", name ) ), "','" )
- line += "', 0,\n"
-
- write( line )
- write( " }\n" )
- write( "#endif /* DEFINE_PS_TABLES */\n" )
- write( " ;\n\n\n" )
-
- def dump_sublist( self, file, table_name, macro_name, sublist ):
- write = file.write
- write( "#define " + macro_name + " " + repr( len( sublist ) ) + "\n\n" )
-
- write( " /* Values are offsets into the `" +
- self.master_table + "' table */\n\n" )
- write( "#ifndef DEFINE_PS_TABLES\n" )
- write( "#ifdef __cplusplus\n" )
- write( ' extern "C"\n' )
- write( "#else\n" )
- write( " extern\n" )
- write( "#endif\n" )
- write( "#endif\n" )
- write( " const short " + table_name +
- "[" + macro_name + "]\n" )
- write( "#ifdef DEFINE_PS_TABLES\n" )
- write( " =\n" )
- write( " {\n" )
-
- line = " "
- comma = ""
- col = 0
-
- for name in sublist:
- line += comma
- line += "%4d" % self.indices[name]
- col += 1
- comma = ","
- if col == 14:
- col = 0
- comma = ",\n "
-
- write( line )
- write( "\n" )
- write( " }\n" )
- write( "#endif /* DEFINE_PS_TABLES */\n" )
- write( " ;\n\n\n" )
-
-
-# We now store the Adobe Glyph List in compressed form. The list is put
-# into a data structure called `trie' (because it has a tree-like
-# appearance). Consider, for example, that you want to store the
-# following name mapping:
-#
-# A => 1
-# Aacute => 6
-# Abalon => 2
-# Abstract => 4
-#
-# It is possible to store the entries as follows.
-#
-# A => 1
-# |
-# +-acute => 6
-# |
-# +-b
-# |
-# +-alon => 2
-# |
-# +-stract => 4
-#
-# We see that each node in the trie has:
-#
-# - one or more `letters'
-# - an optional value
-# - zero or more child nodes
-#
-# The first step is to call
-#
-# root = StringNode( "", 0 )
-# for word in map.values():
-# root.add( word, map[word] )
-#
-# which creates a large trie where each node has only one children.
-#
-# Executing
-#
-# root = root.optimize()
-#
-# optimizes the trie by merging the letters of successive nodes whenever
-# possible.
-#
-# Each node of the trie is stored as follows.
-#
-# - First the node's letter, according to the following scheme. We
-# use the fact that in the AGL no name contains character codes > 127.
-#
-# name bitsize description
-# ----------------------------------------------------------------
-# notlast 1 Set to 1 if this is not the last letter
-# in the word.
-# ascii 7 The letter's ASCII value.
-#
-# - The letter is followed by a children count and the value of the
-# current key (if any). Again we can do some optimization because all
-# AGL entries are from the BMP; this means that 16 bits are sufficient
-# to store its Unicode values. Additionally, no node has more than
-# 127 children.
-#
-# name bitsize description
-# -----------------------------------------
-# hasvalue 1 Set to 1 if a 16-bit Unicode value follows.
-# num_children 7 Number of children. Can be 0 only if
-# `hasvalue' is set to 1.
-# value 16 Optional Unicode value.
-#
-# - A node is finished by a list of 16bit absolute offsets to the
-# children, which must be sorted in increasing order of their first
-# letter.
-#
-# For simplicity, all 16bit quantities are stored in big-endian order.
-#
-# The root node has first letter = 0, and no value.
-#
-class StringNode:
- def __init__( self, letter, value ):
- self.letter = letter
- self.value = value
- self.children = {}
-
- def __cmp__( self, other ):
- return ord( self.letter[0] ) - ord( other.letter[0] )
-
- def add( self, word, value ):
- if len( word ) == 0:
- self.value = value
- return
-
- letter = word[0]
- word = word[1:]
-
- if self.children.has_key( letter ):
- child = self.children[letter]
- else:
- child = StringNode( letter, 0 )
- self.children[letter] = child
-
- child.add( word, value )
-
- def optimize( self ):
- # optimize all children first
- children = self.children.values()
- self.children = {}
-
- for child in children:
- self.children[child.letter[0]] = child.optimize()
-
- # don't optimize if there's a value,
- # if we don't have any child or if we
- # have more than one child
- if ( self.value != 0 ) or ( not children ) or len( children ) > 1:
- return self
-
- child = children[0]
-
- self.letter += child.letter
- self.value = child.value
- self.children = child.children
-
- return self
-
- def dump_debug( self, write, margin ):
- # this is used during debugging
- line = margin + "+-"
- if len( self.letter ) == 0:
- line += "<NOLETTER>"
- else:
- line += self.letter
-
- if self.value:
- line += " => " + repr( self.value )
-
- write( line + "\n" )
-
- if self.children:
- margin += "| "
- for child in self.children.values():
- child.dump_debug( write, margin )
-
- def locate( self, index ):
- self.index = index
- if len( self.letter ) > 0:
- index += len( self.letter ) + 1
- else:
- index += 2
-
- if self.value != 0:
- index += 2
-
- children = self.children.values()
- children.sort()
-
- index += 2 * len( children )
- for child in children:
- index = child.locate( index )
-
- return index
-
- def store( self, storage ):
- # write the letters
- l = len( self.letter )
- if l == 0:
- storage += struct.pack( "B", 0 )
- else:
- for n in range( l ):
- val = ord( self.letter[n] )
- if n < l - 1:
- val += 128
- storage += struct.pack( "B", val )
-
- # write the count
- children = self.children.values()
- children.sort()
-
- count = len( children )
-
- if self.value != 0:
- storage += struct.pack( "!BH", count + 128, self.value )
- else:
- storage += struct.pack( "B", count )
-
- for child in children:
- storage += struct.pack( "!H", child.index )
-
- for child in children:
- storage = child.store( storage )
-
- return storage
-
-
-def adobe_glyph_values():
- """return the list of glyph names and their unicode values"""
-
- lines = string.split( adobe_glyph_list, '\n' )
- glyphs = []
- values = []
-
- for line in lines:
- if line:
- fields = string.split( line, ';' )
-# print fields[1] + ' - ' + fields[0]
- subfields = string.split( fields[1], ' ' )
- if len( subfields ) == 1:
- glyphs.append( fields[0] )
- values.append( fields[1] )
-
- return glyphs, values
-
-
-def filter_glyph_names( alist, filter ):
- """filter `alist' by taking _out_ all glyph names that are in `filter'"""
-
- count = 0
- extras = []
-
- for name in alist:
- try:
- filtered_index = filter.index( name )
- except:
- extras.append( name )
-
- return extras
-
-
-def dump_encoding( file, encoding_name, encoding_list ):
- """dump a given encoding"""
-
- write = file.write
- write( " /* the following are indices into the SID name table */\n" )
- write( "#ifndef DEFINE_PS_TABLES\n" )
- write( "#ifdef __cplusplus\n" )
- write( ' extern "C"\n' )
- write( "#else\n" )
- write( " extern\n" )
- write( "#endif\n" )
- write( "#endif\n" )
- write( " const unsigned short " + encoding_name +
- "[" + repr( len( encoding_list ) ) + "]\n" )
- write( "#ifdef DEFINE_PS_TABLES\n" )
- write( " =\n" )
- write( " {\n" )
-
- line = " "
- comma = ""
- col = 0
- for value in encoding_list:
- line += comma
- line += "%3d" % value
- comma = ","
- col += 1
- if col == 16:
- col = 0
- comma = ",\n "
-
- write( line )
- write( "\n" )
- write( " }\n" )
- write( "#endif /* DEFINE_PS_TABLES */\n" )
- write( " ;\n\n\n" )
-
-
-def dump_array( the_array, write, array_name ):
- """dumps a given encoding"""
-
- write( "#ifndef DEFINE_PS_TABLES\n" )
- write( "#ifdef __cplusplus\n" )
- write( ' extern "C"\n' )
- write( "#else\n" )
- write( " extern\n" )
- write( "#endif\n" )
- write( "#endif\n" )
- write( " const unsigned char " + array_name +
- "[" + repr( len( the_array ) ) + "L]\n" )
- write( "#ifdef DEFINE_PS_TABLES\n" )
- write( " =\n" )
- write( " {\n" )
-
- line = ""
- comma = " "
- col = 0
-
- for value in the_array:
- line += comma
- line += "%3d" % ord( value )
- comma = ","
- col += 1
-
- if col == 16:
- col = 0
- comma = ",\n "
-
- if len( line ) > 1024:
- write( line )
- line = ""
-
- write( line )
- write( "\n" )
- write( " }\n" )
- write( "#endif /* DEFINE_PS_TABLES */\n" )
- write( " ;\n\n\n" )
-
-
-def main():
- """main program body"""
-
- if len( sys.argv ) != 2:
- print __doc__ % sys.argv[0]
- sys.exit( 1 )
-
- file = open( sys.argv[1], "w\n" )
- write = file.write
-
- count_sid = len( sid_standard_names )
-
- # `mac_extras' contains the list of glyph names in the Macintosh standard
- # encoding which are not in the SID Standard Names.
- #
- mac_extras = filter_glyph_names( mac_standard_names, sid_standard_names )
-
- # `base_list' contains the names of our final glyph names table.
- # It consists of the `mac_extras' glyph names, followed by the SID
- # standard names.
- #
- mac_extras_count = len( mac_extras )
- base_list = mac_extras + sid_standard_names
-
- write( "/***************************************************************************/\n" )
- write( "/* */\n" )
-
- write( "/* %-71s*/\n" % os.path.basename( sys.argv[1] ) )
-
- write( "/* */\n" )
- write( "/* PostScript glyph names. */\n" )
- write( "/* */\n" )
- write( "/* Copyright 2005-2017 by */\n" )
- write( "/* David Turner, Robert Wilhelm, and Werner Lemberg. */\n" )
- write( "/* */\n" )
- write( "/* This file is part of the FreeType project, and may only be used, */\n" )
- write( "/* modified, and distributed under the terms of the FreeType project */\n" )
- write( "/* license, LICENSE.TXT. By continuing to use, modify, or distribute */\n" )
- write( "/* this file you indicate that you have read the license and */\n" )
- write( "/* understand and accept it fully. */\n" )
- write( "/* */\n" )
- write( "/***************************************************************************/\n" )
- write( "\n" )
- write( "\n" )
- write( " /* This file has been generated automatically -- do not edit! */\n" )
- write( "\n" )
- write( "\n" )
-
- # dump final glyph list (mac extras + sid standard names)
- #
- st = StringTable( base_list, "ft_standard_glyph_names" )
-
- st.dump( file )
- st.dump_sublist( file, "ft_mac_names",
- "FT_NUM_MAC_NAMES", mac_standard_names )
- st.dump_sublist( file, "ft_sid_names",
- "FT_NUM_SID_NAMES", sid_standard_names )
-
- dump_encoding( file, "t1_standard_encoding", t1_standard_encoding )
- dump_encoding( file, "t1_expert_encoding", t1_expert_encoding )
-
- # dump the AGL in its compressed form
- #
- agl_glyphs, agl_values = adobe_glyph_values()
- dict = StringNode( "", 0 )
-
- for g in range( len( agl_glyphs ) ):
- dict.add( agl_glyphs[g], eval( "0x" + agl_values[g] ) )
-
- dict = dict.optimize()
- dict_len = dict.locate( 0 )
- dict_array = dict.store( "" )
-
- write( """\
- /*
- * This table is a compressed version of the Adobe Glyph List (AGL),
- * optimized for efficient searching. It has been generated by the
- * `glnames.py' python script located in the `src/tools' directory.
- *
- * The lookup function to get the Unicode value for a given string
- * is defined below the table.
- */
-
-#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
-
-""" )
-
- dump_array( dict_array, write, "ft_adobe_glyph_list" )
-
- # write the lookup routine now
- #
- write( """\
-#ifdef DEFINE_PS_TABLES
- /*
- * This function searches the compressed table efficiently.
- */
- static unsigned long
- ft_get_adobe_glyph_index( const char* name,
- const char* limit )
- {
- int c = 0;
- int count, min, max;
- const unsigned char* p = ft_adobe_glyph_list;
-
-
- if ( name == 0 || name >= limit )
- goto NotFound;
-
- c = *name++;
- count = p[1];
- p += 2;
-
- min = 0;
- max = count;
-
- while ( min < max )
- {
- int mid = ( min + max ) >> 1;
- const unsigned char* q = p + mid * 2;
- int c2;
-
-
- q = ft_adobe_glyph_list + ( ( (int)q[0] << 8 ) | q[1] );
-
- c2 = q[0] & 127;
- if ( c2 == c )
- {
- p = q;
- goto Found;
- }
- if ( c2 < c )
- min = mid + 1;
- else
- max = mid;
- }
- goto NotFound;
-
- Found:
- for (;;)
- {
- /* assert (*p & 127) == c */
-
- if ( name >= limit )
- {
- if ( (p[0] & 128) == 0 &&
- (p[1] & 128) != 0 )
- return (unsigned long)( ( (int)p[2] << 8 ) | p[3] );
-
- goto NotFound;
- }
- c = *name++;
- if ( p[0] & 128 )
- {
- p++;
- if ( c != (p[0] & 127) )
- goto NotFound;
-
- continue;
- }
-
- p++;
- count = p[0] & 127;
- if ( p[0] & 128 )
- p += 2;
-
- p++;
-
- for ( ; count > 0; count--, p += 2 )
- {
- int offset = ( (int)p[0] << 8 ) | p[1];
- const unsigned char* q = ft_adobe_glyph_list + offset;
-
- if ( c == ( q[0] & 127 ) )
- {
- p = q;
- goto NextIter;
- }
- }
- goto NotFound;
-
- NextIter:
- ;
- }
-
- NotFound:
- return 0;
- }
-#endif /* DEFINE_PS_TABLES */
-
-#endif /* FT_CONFIG_OPTION_ADOBE_GLYPH_LIST */
-
-""" )
-
- if 0: # generate unit test, or don't
- #
- # now write the unit test to check that everything works OK
- #
- write( "#ifdef TEST\n\n" )
-
- write( "static const char* const the_names[] = {\n" )
- for name in agl_glyphs:
- write( ' "' + name + '",\n' )
- write( " 0\n};\n" )
-
- write( "static const unsigned long the_values[] = {\n" )
- for val in agl_values:
- write( ' 0x' + val + ',\n' )
- write( " 0\n};\n" )
-
- write( """
-#include <stdlib.h>
-#include <stdio.h>
-
- int
- main( void )
- {
- int result = 0;
- const char* const* names = the_names;
- const unsigned long* values = the_values;
-
-
- for ( ; *names; names++, values++ )
- {
- const char* name = *names;
- unsigned long reference = *values;
- unsigned long value;
-
-
- value = ft_get_adobe_glyph_index( name, name + strlen( name ) );
- if ( value != reference )
- {
- result = 1;
- fprintf( stderr, "name '%s' => %04x instead of %04x\\n",
- name, value, reference );
- }
- }
-
- return result;
- }
-""" )
-
- write( "#endif /* TEST */\n" )
-
- write("\n/* END */\n")
-
-
-# Now run the main routine
-#
-main()
-
-
-# END
diff --git a/src/tools/no-copyright b/src/tools/no-copyright
deleted file mode 100644
index d639aa4a8..000000000
--- a/src/tools/no-copyright
+++ /dev/null
@@ -1,65 +0,0 @@
-# Files that don't get a copyright, or which are taken from elsewhere.
-#
-# All lines in this file are patterns, including the comment lines; this
-# means that e.g. `FTL.TXT' matches all files that have this string in
-# the file name (including the path relative to the current directory,
-# always starting with `./').
-#
-# Don't put empty lines into this file!
-#
-.gitignore
-#
-builds/unix/pkg.m4
-#
-docs/FTL.TXT
-docs/GPLv2.TXT
-#
-include/freetype/internal/fthash.h
-#
-src/base/fthash.c
-src/base/md5.c
-src/base/md5.h
-#
-src/bdf/bdf.c
-src/bdf/bdf.h
-src/bdf/bdfdrivr.c
-src/bdf/bdfdrivr.h
-src/bdf/bdferror.h
-src/bdf/bdflib.c
-src/bdf/module.mk
-src/bdf/README
-src/bdf/rules.mk
-#
-src/pcf/module.mk
-src/pcf/pcf.c
-src/pcf/pcf.h
-src/pcf/pcfdrivr.c
-src/pcf/pcfdrivr.h
-src/pcf/pcferror.h
-src/pcf/pcfread.c
-src/pcf/pcfread.h
-src/pcf/pcfutil.c
-src/pcf/pcfutil.h
-src/pcf/README
-src/pcf/rules.mk
-#
-src/gzip/adler32.c
-src/gzip/infblock.c
-src/gzip/infblock.h
-src/gzip/infcodes.c
-src/gzip/infcodes.h
-src/gzip/inffixed.h
-src/gzip/inflate.c
-src/gzip/inftrees.c
-src/gzip/inftrees.h
-src/gzip/infutil.c
-src/gzip/infutil.h
-src/gzip/zconf.h
-src/gzip/zlib.h
-src/gzip/zutil.c
-src/gzip/zutil.h
-#
-src/tools/apinames.c
-src/tools/ftrandom/ftrandom.c
-#
-# EOF
diff --git a/src/tools/test_afm.c b/src/tools/test_afm.c
deleted file mode 100644
index 8de619bb0..000000000
--- a/src/tools/test_afm.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * gcc -DFT2_BUILD_LIBRARY -I../../include -o test_afm test_afm.c \
- * -L../../objs/.libs -lfreetype -lz -static
- */
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-
- void dump_fontinfo( AFM_FontInfo fi )
- {
- FT_UInt i;
-
-
- printf( "This AFM is for %sCID font.\n\n",
- ( fi->IsCIDFont ) ? "" : "non-" );
-
- printf( "FontBBox: %.2f %.2f %.2f %.2f\n", fi->FontBBox.xMin / 65536.,
- fi->FontBBox.yMin / 65536.,
- fi->FontBBox.xMax / 65536.,
- fi->FontBBox.yMax / 65536. );
- printf( "Ascender: %.2f\n", fi->Ascender / 65536. );
- printf( "Descender: %.2f\n\n", fi->Descender / 65536. );
-
- if ( fi->NumTrackKern )
- printf( "There are %d sets of track kernings:\n",
- fi->NumTrackKern );
- else
- printf( "There is no track kerning.\n" );
-
- for ( i = 0; i < fi->NumTrackKern; i++ )
- {
- AFM_TrackKern tk = fi->TrackKerns + i;
-
-
- printf( "\t%2d: %5.2f %5.2f %5.2f %5.2f\n", tk->degree,
- tk->min_ptsize / 65536.,
- tk->min_kern / 65536.,
- tk->max_ptsize / 65536.,
- tk->max_kern / 65536. );
- }
-
- printf( "\n" );
-
- if ( fi->NumKernPair )
- printf( "There are %d kerning pairs:\n",
- fi->NumKernPair );
- else
- printf( "There is no kerning pair.\n" );
-
- for ( i = 0; i < fi->NumKernPair; i++ )
- {
- AFM_KernPair kp = fi->KernPairs + i;
-
-
- printf( "\t%3d + %3d => (%4d, %4d)\n", kp->index1,
- kp->index2,
- kp->x,
- kp->y );
- }
-
- }
-
- int
- dummy_get_index( const char* name,
- FT_Offset len,
- void* user_data )
- {
- if ( len )
- return name[0];
- else
- return 0;
- }
-
- FT_Error
- parse_afm( FT_Library library,
- FT_Stream stream,
- AFM_FontInfo fi )
- {
- PSAux_Service psaux;
- AFM_ParserRec parser;
- FT_Error error = FT_Err_Ok;
-
-
- psaux = (PSAux_Service)FT_Get_Module_Interface( library, "psaux" );
- if ( !psaux || !psaux->afm_parser_funcs )
- return -1;
-
- error = FT_Stream_EnterFrame( stream, stream->size );
- if ( error )
- return error;
-
- error = psaux->afm_parser_funcs->init( &parser,
- library->memory,
- stream->cursor,
- stream->limit );
- if ( error )
- return error;
-
- parser.FontInfo = fi;
- parser.get_index = dummy_get_index;
-
- error = psaux->afm_parser_funcs->parse( &parser );
-
- psaux->afm_parser_funcs->done( &parser );
-
- return error;
- }
-
-
- int main( int argc,
- char** argv )
- {
- FT_Library library;
- FT_StreamRec stream;
- FT_Error error = FT_Err_Ok;
- AFM_FontInfoRec fi;
-
-
- if ( argc < 2 )
- return FT_ERR( Invalid_Argument );
-
- error = FT_Init_FreeType( &library );
- if ( error )
- return error;
-
- FT_ZERO( &stream );
- error = FT_Stream_Open( &stream, argv[1] );
- if ( error )
- goto Exit;
- stream.memory = library->memory;
-
- FT_ZERO( &fi );
- error = parse_afm( library, &stream, &fi );
-
- if ( !error )
- {
- FT_Memory memory = library->memory;
-
-
- dump_fontinfo( &fi );
-
- if ( fi.KernPairs )
- FT_FREE( fi.KernPairs );
- if ( fi.TrackKerns )
- FT_FREE( fi.TrackKerns );
- }
- else
- printf( "parse error\n" );
-
- FT_Stream_Close( &stream );
-
- Exit:
- FT_Done_FreeType( library );
-
- return error;
- }
diff --git a/src/tools/test_bbox.c b/src/tools/test_bbox.c
deleted file mode 100644
index 64b82c384..000000000
--- a/src/tools/test_bbox.c
+++ /dev/null
@@ -1,188 +0,0 @@
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_BBOX_H
-
-
-#include <time.h> /* for clock() */
-
-/* SunOS 4.1.* does not define CLOCKS_PER_SEC, so include <sys/param.h> */
-/* to get the HZ macro which is the equivalent. */
-#if defined(__sun__) && !defined(SVR4) && !defined(__SVR4)
-#include <sys/param.h>
-#define CLOCKS_PER_SEC HZ
-#endif
-
- static long
- get_time( void )
- {
- return clock() * 10000L / CLOCKS_PER_SEC;
- }
-
-
-
-
- /* test bbox computations */
-
-#define XSCALE 65536
-#define XX(x) ((FT_Pos)(x*XSCALE))
-#define XVEC(x,y) { XX(x), XX(y) }
-#define XVAL(x) ((x)/(1.0*XSCALE))
-
- /* dummy outline #1 */
- static FT_Vector dummy_vec_1[4] =
- {
-#if 1
- XVEC( 408.9111, 535.3164 ),
- XVEC( 455.8887, 634.396 ),
- XVEC( -37.8765, 786.2207 ),
- XVEC( 164.6074, 535.3164 )
-#else
- { (FT_Int32)0x0198E93DL , (FT_Int32)0x021750FFL }, /* 408.9111, 535.3164 */
- { (FT_Int32)0x01C7E312L , (FT_Int32)0x027A6560L }, /* 455.8887, 634.3960 */
- { (FT_Int32)0xFFDA1F9EL , (FT_Int32)0x0312387FL }, /* -37.8765, 786.2207 */
- { (FT_Int32)0x00A49B7EL , (FT_Int32)0x021750FFL } /* 164.6074, 535.3164 */
-#endif
- };
-
- static char dummy_tag_1[4] =
- {
- FT_CURVE_TAG_ON,
- FT_CURVE_TAG_CUBIC,
- FT_CURVE_TAG_CUBIC,
- FT_CURVE_TAG_ON
- };
-
- static short dummy_contour_1[1] =
- {
- 3
- };
-
- static FT_Outline dummy_outline_1 =
- {
- 1,
- 4,
- dummy_vec_1,
- dummy_tag_1,
- dummy_contour_1,
- 0
- };
-
-
- /* dummy outline #2 */
- static FT_Vector dummy_vec_2[4] =
- {
- XVEC( 100.0, 100.0 ),
- XVEC( 100.0, 200.0 ),
- XVEC( 200.0, 200.0 ),
- XVEC( 200.0, 133.0 )
- };
-
- static FT_Outline dummy_outline_2 =
- {
- 1,
- 4,
- dummy_vec_2,
- dummy_tag_1,
- dummy_contour_1,
- 0
- };
-
-
- /* dummy outline #3 with bbox of [0 100 128 128] precisely */
- static FT_Vector dummy_vec_3[4] =
- {
- XVEC( 100.0, 127.0 ),
- XVEC( 200.0, 127.0 ),
- XVEC( 0.0, 136.0 ),
- XVEC( 0.0, 100.0 )
- };
-
- static FT_Outline dummy_outline_3 =
- {
- 1,
- 4,
- dummy_vec_3,
- dummy_tag_1,
- dummy_contour_1,
- 0
- };
-
-
- static void
- dump_outline( FT_Outline* outline )
- {
- FT_BBox bbox;
-
- /* compute and display cbox */
- FT_Outline_Get_CBox( outline, &bbox );
- printf( "cbox = [%.2f %.2f %.2f %.2f]\n",
- XVAL( bbox.xMin ),
- XVAL( bbox.yMin ),
- XVAL( bbox.xMax ),
- XVAL( bbox.yMax ) );
-
- /* compute and display bbox */
- FT_Outline_Get_BBox( outline, &bbox );
- printf( "bbox = [%.2f %.2f %.2f %.2f]\n",
- XVAL( bbox.xMin ),
- XVAL( bbox.yMin ),
- XVAL( bbox.xMax ),
- XVAL( bbox.yMax ) );
- }
-
-
-
- static void
- profile_outline( FT_Outline* outline,
- long repeat )
- {
- FT_BBox bbox;
- long count;
- long time0;
-
- time0 = get_time();
- for ( count = repeat; count > 0; count-- )
- FT_Outline_Get_CBox( outline, &bbox );
-
- time0 = get_time() - time0;
- printf( "time = %6.3f cbox = [%8.4f %8.4f %8.4f %8.4f]\n",
- ((double)time0/10000.0),
- XVAL( bbox.xMin ),
- XVAL( bbox.yMin ),
- XVAL( bbox.xMax ),
- XVAL( bbox.yMax ) );
- printf( "cbox_hex = [%08X %08X %08X %08X]\n",
- bbox.xMin, bbox.yMin, bbox.xMax, bbox.yMax );
-
-
- time0 = get_time();
- for ( count = repeat; count > 0; count-- )
- FT_Outline_Get_BBox( outline, &bbox );
-
- time0 = get_time() - time0;
- printf( "time = %6.3f bbox = [%8.4f %8.4f %8.4f %8.4f]\n",
- ((double)time0/10000.0),
- XVAL( bbox.xMin ),
- XVAL( bbox.yMin ),
- XVAL( bbox.xMax ),
- XVAL( bbox.yMax ) );
- printf( "bbox_hex = [%08X %08X %08X %08X]\n",
- bbox.xMin, bbox.yMin, bbox.xMax, bbox.yMax );
- }
-
-#define REPEAT 1000000L
-
- int main( int argc, char** argv )
- {
- printf( "outline #1\n" );
- profile_outline( &dummy_outline_1, REPEAT );
-
- printf( "outline #2\n" );
- profile_outline( &dummy_outline_2, REPEAT );
-
- printf( "outline #3\n" );
- profile_outline( &dummy_outline_3, REPEAT );
-
- return 0;
- }
-
diff --git a/src/tools/test_trig.c b/src/tools/test_trig.c
deleted file mode 100644
index 99ac1cf17..000000000
--- a/src/tools/test_trig.c
+++ /dev/null
@@ -1,258 +0,0 @@
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TRIGONOMETRY_H
-
-#include <math.h>
-#include <stdio.h>
-
-#define PI 3.14159265358979323846
-#define SPI (PI/FT_ANGLE_PI)
-
-/* the precision in 16.16 fixed-point checks. Expect between 2 and 5 */
-/* noise LSB bits during operations, due to rounding errors.. */
-#define THRESHOLD 64
-
- static error = 0;
-
- static void
- test_cos( void )
- {
- int i;
-
-
- for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000L )
- {
- FT_Fixed f1, f2;
- double d2;
-
-
- f1 = FT_Cos(i);
- d2 = cos( i*SPI );
- f2 = (FT_Fixed)(d2*65536.0);
-
- if ( abs( f2-f1 ) > THRESHOLD )
- {
- error = 1;
- printf( "FT_Cos[%3d] = %.7f cos[%3d] = %.7f\n",
- (i >> 16), f1/65536.0, (i >> 16), d2 );
- }
- }
- }
-
-
- static void
- test_sin( void )
- {
- int i;
-
-
- for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000L )
- {
- FT_Fixed f1, f2;
- double d2;
-
-
- f1 = FT_Sin(i);
- d2 = sin( i*SPI );
- f2 = (FT_Fixed)(d2*65536.0);
-
- if ( abs( f2-f1 ) > THRESHOLD )
- {
- error = 1;
- printf( "FT_Sin[%3d] = %.7f sin[%3d] = %.7f\n",
- (i >> 16), f1/65536.0, (i >> 16), d2 );
- }
- }
- }
-
-
- static void
- test_tan( void )
- {
- int i;
-
-
- for ( i = 0; i < FT_ANGLE_PI2 - 0x2000000L; i += 0x10000L )
- {
- FT_Fixed f1, f2;
- double d2;
-
-
- f1 = FT_Tan(i);
- d2 = tan( i*SPI );
- f2 = (FT_Fixed)(d2*65536.0);
-
- if ( abs( f2-f1 ) > THRESHOLD )
- {
- error = 1;
- printf( "FT_Tan[%3d] = %.7f tan[%3d] = %.7f\n",
- (i >> 16), f1/65536.0, (i >> 16), d2 );
- }
- }
- }
-
-
- static void
- test_atan2( void )
- {
- int i;
-
-
- for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000L )
- {
- FT_Fixed c2, s2;
- double l, a, c1, s1;
- int j;
-
-
- l = 5.0;
- a = i*SPI;
-
- c1 = l * cos(a);
- s1 = l * sin(a);
-
- c2 = (FT_Fixed)(c1*65536.0);
- s2 = (FT_Fixed)(s1*65536.0);
-
- j = FT_Atan2( c2, s2 );
- if ( j < 0 )
- j += FT_ANGLE_2PI;
-
- if ( abs( i - j ) > 1 )
- {
- printf( "FT_Atan2( %.7f, %.7f ) = %.5f, atan = %.5f\n",
- c2/65536.0, s2/65536.0, j/65536.0, i/65536.0 );
- }
- }
- }
-
-
- static void
- test_unit( void )
- {
- int i;
-
-
- for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000L )
- {
- FT_Vector v;
- double a, c1, s1;
- FT_Fixed c2, s2;
-
-
- FT_Vector_Unit( &v, i );
- a = ( i*SPI );
- c1 = cos(a);
- s1 = sin(a);
- c2 = (FT_Fixed)(c1*65536.0);
- s2 = (FT_Fixed)(s1*65536.0);
-
- if ( abs( v.x-c2 ) > THRESHOLD ||
- abs( v.y-s2 ) > THRESHOLD )
- {
- error = 1;
- printf( "FT_Vector_Unit[%3d] = ( %.7f, %.7f ) vec = ( %.7f, %.7f )\n",
- (i >> 16),
- v.x/65536.0, v.y/65536.0,
- c1, s1 );
- }
- }
- }
-
-
- static void
- test_length( void )
- {
- int i;
-
-
- for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000L )
- {
- FT_Vector v;
- FT_Fixed l, l2;
-
-
- l = (FT_Fixed)(500.0*65536.0);
- v.x = (FT_Fixed)( l * cos( i*SPI ) );
- v.y = (FT_Fixed)( l * sin( i*SPI ) );
- l2 = FT_Vector_Length( &v );
-
- if ( abs( l2-l ) > THRESHOLD )
- {
- error = 1;
- printf( "FT_Length( %.7f, %.7f ) = %.5f, length = %.5f\n",
- v.x/65536.0, v.y/65536.0, l2/65536.0, l/65536.0 );
- }
- }
- }
-
-
- static void
- test_rotate( void )
- {
- int rotate;
-
-
- for ( rotate = 0; rotate < FT_ANGLE_2PI; rotate += 0x10000L )
- {
- double ra, cra, sra;
- int i;
-
-
- ra = rotate*SPI;
- cra = cos( ra );
- sra = sin( ra );
-
- for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000L )
- {
- FT_Fixed c2, s2, c4, s4;
- FT_Vector v;
- double l, a, c1, s1, c3, s3;
-
-
- l = 500.0;
- a = i*SPI;
-
- c1 = l * cos(a);
- s1 = l * sin(a);
-
- v.x = c2 = (FT_Fixed)(c1*65536.0);
- v.y = s2 = (FT_Fixed)(s1*65536.0);
-
- FT_Vector_Rotate( &v, rotate );
-
- c3 = c1 * cra - s1 * sra;
- s3 = c1 * sra + s1 * cra;
-
- c4 = (FT_Fixed)(c3*65536.0);
- s4 = (FT_Fixed)(s3*65536.0);
-
- if ( abs( c4 - v.x ) > THRESHOLD ||
- abs( s4 - v.y ) > THRESHOLD )
- {
- error = 1;
- printf( "FT_Rotate( (%.7f,%.7f), %.5f ) = ( %.7f, %.7f ), rot = ( %.7f, %.7f )\n",
- c1, s1, ra,
- c2/65536.0, s2/65536.0,
- c4/65536.0, s4/65536.0 );
- }
- }
- }
- }
-
-
- int main( void )
- {
- test_cos();
- test_sin();
- test_tan();
- test_atan2();
- test_unit();
- test_length();
- test_rotate();
-
- if (!error)
- printf( "trigonometry test ok !\n" );
-
- return !error;
- }
diff --git a/src/tools/update-copyright b/src/tools/update-copyright
deleted file mode 100755
index 4a8bf9b0e..000000000
--- a/src/tools/update-copyright
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-# Run the `update-copyright-year' script on all files in the git repository,
-# taking care of exceptions stored in file `no-copyright'.
-
-topdir=`git rev-parse --show-toplevel`
-toolsdir=$topdir/src/tools
-
-git ls-files --full-name $topdir \
-| sed 's|^|../../|' \
-| grep -vFf $toolsdir/no-copyright \
-| xargs $toolsdir/update-copyright-year
-
-# EOF
diff --git a/src/tools/update-copyright-year b/src/tools/update-copyright-year
deleted file mode 100755
index 4b04bfc99..000000000
--- a/src/tools/update-copyright-year
+++ /dev/null
@@ -1,135 +0,0 @@
-eval '(exit $?0)' && eval 'exec perl -wS -i "$0" ${1+"$@"}'
- & eval 'exec perl -wS -i "$0" $argv:q'
- if 0;
-
-# Copyright 2015-2017 by
-# Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-# [Note: This script is expected to be called by the shell, which in turn
-# calls perl automatically. The nifty start-up code above is based on
-# gnulib's `update-copyright' script; it is a more portable replacement for
-# the shebang, using the first `perl' program in the shell's path instead.]
-
-# Usage:
-#
-# update-copyright-year file1 [file2 ...]
-
-
-# This script handles copyright entries like
-#
-# Copyright 2000 by
-# foobar
-#
-# or
-#
-# /* Copyright 2000, 2001, 2004-2007 by */
-# /* foobar */
-#
-# and replaces them uniformly with
-#
-# Copyright 2000-2015
-# foobar
-#
-# and
-#
-# /* Copyright 2000-2015 by */
-# /* foobar */
-#
-# (assuming that the current year is 2015). As can be seen, the line length
-# is retained if there is non-whitespace after the word `by' on the same
-# line.
-
-use strict;
-
-
-my (undef, undef, undef,
- undef, undef, $year,
- undef, undef, undef) = localtime(time);
-$year += 1900;
-
-my $replaced = 0;
-
-
-# Loop over all input files; option `-i' (issued at the very beginning of
-# this script) makes perl edit them in-place.
-while (<>)
-{
- # Only handle the first copyright notice in a file.
- if (!$replaced)
- {
- # First try: Search multiple copyright years.
- s {
- (?<begin>.*)
- Copyright
- (?<space1>\ +)
- (?<first>[12][0-9][0-9][0-9])
- (?<middle>.+)
- (?<last>[12][0-9][0-9][0-9])
- (?<space2>\ +)
- by
- (?<space3>\ *)
- (?<end>.*)
- }
- {
- # Fill line to the same length (if appropriate); we skip the middle
- # part but insert two spaces and `-'.
- my $space = length($+{space1}) - 1
- + length($+{middle}) - 1
- + length($+{space2}) - 1
- + length($+{space3});
-
- print "$+{begin}";
- print "Copyright\ $+{first}-$year\ by";
- print ' ' x $space if length($+{end});
- print "$+{end}\n";
- $replaced = 1;
- }ex
- ||
- # Second try: Search a single copyright year.
- s {
- (?<begin>.*)
- Copyright
- (?<space1>\ +)
- (?<first>[12][0-9][0-9][0-9])
- (?<space2>\ +)
- by
- (?<space3>\ *)
- (?<end>.*)
- }
- {
- # Fill line to the same length (if appropriate); we insert two
- # spaces, a `-', and the current year.
- my $space = length($+{space1}) - 1
- + length($+{space2}) - 1
- + length($+{space3})
- - (length($year) + 1);
-
- print "$+{begin}";
- print "Copyright $+{first}-$year by";
- # If $space is negative this inserts nothing.
- print ' ' x $space if length($+{end});
- print "$+{end}\n";
- $replaced = 1;
- }ex
- ||
- # Otherwise print line unaltered.
- print;
- }
- else
- {
- print;
- }
-}
-continue
-{
- # Reset $replaced before processing the next file.
- $replaced = 0 if eof;
-}
-
-# EOF
diff --git a/src/truetype/Jamfile b/src/truetype/Jamfile
deleted file mode 100644
index 22d406cd7..000000000
--- a/src/truetype/Jamfile
+++ /dev/null
@@ -1,37 +0,0 @@
-# FreeType 2 src/truetype Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) truetype ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = ttdriver
- ttgload
- ttgxvar
- ttinterp
- ttobjs
- ttpic
- ttpload
- ttsubpix
- ;
- }
- else
- {
- _sources = truetype ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/truetype Jamfile
diff --git a/src/truetype/module.mk b/src/truetype/module.mk
deleted file mode 100644
index 563c584e2..000000000
--- a/src/truetype/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 TrueType module definition
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += TRUETYPE_DRIVER
-
-define TRUETYPE_DRIVER
-$(OPEN_DRIVER) FT_Driver_ClassRec, tt_driver_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)truetype $(ECHO_DRIVER_DESC)Windows/Mac font files with extension *.ttf or *.ttc$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/truetype/rules.mk b/src/truetype/rules.mk
deleted file mode 100644
index ad3d00745..000000000
--- a/src/truetype/rules.mk
+++ /dev/null
@@ -1,77 +0,0 @@
-#
-# FreeType 2 TrueType driver configuration rules
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# TrueType driver directory
-#
-TT_DIR := $(SRC_DIR)/truetype
-
-
-# compilation flags for the driver
-#
-TT_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(TT_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# TrueType driver sources (i.e., C files)
-#
-TT_DRV_SRC := $(TT_DIR)/ttdriver.c \
- $(TT_DIR)/ttgload.c \
- $(TT_DIR)/ttgxvar.c \
- $(TT_DIR)/ttinterp.c \
- $(TT_DIR)/ttobjs.c \
- $(TT_DIR)/ttpic.c \
- $(TT_DIR)/ttpload.c \
- $(TT_DIR)/ttsubpix.c
-
-# TrueType driver headers
-#
-TT_DRV_H := $(TT_DRV_SRC:%.c=%.h) \
- $(TT_DIR)/tterrors.h
-
-
-# TrueType driver object(s)
-#
-# TT_DRV_OBJ_M is used during `multi' builds
-# TT_DRV_OBJ_S is used during `single' builds
-#
-TT_DRV_OBJ_M := $(TT_DRV_SRC:$(TT_DIR)/%.c=$(OBJ_DIR)/%.$O)
-TT_DRV_OBJ_S := $(OBJ_DIR)/truetype.$O
-
-# TrueType driver source file for single build
-#
-TT_DRV_SRC_S := $(TT_DIR)/truetype.c
-
-
-# TrueType driver - single object
-#
-$(TT_DRV_OBJ_S): $(TT_DRV_SRC_S) $(TT_DRV_SRC) $(FREETYPE_H) $(TT_DRV_H)
- $(TT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(TT_DRV_SRC_S))
-
-
-# driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(TT_DIR)/%.c $(FREETYPE_H) $(TT_DRV_H)
- $(TT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(TT_DRV_OBJ_S)
-DRV_OBJS_M += $(TT_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/truetype/truetype.c b/src/truetype/truetype.c
deleted file mode 100644
index 301b82ad1..000000000
--- a/src/truetype/truetype.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/***************************************************************************/
-/* */
-/* truetype.c */
-/* */
-/* FreeType TrueType driver component (body only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "ttdriver.c" /* driver interface */
-#include "ttgload.c" /* glyph loader */
-#include "ttgxvar.c" /* gx distortable font */
-#include "ttinterp.c"
-#include "ttobjs.c" /* object manager */
-#include "ttpic.c"
-#include "ttpload.c" /* tables loader */
-#include "ttsubpix.c"
-
-
-/* END */
diff --git a/src/truetype/ttdriver.c b/src/truetype/ttdriver.c
deleted file mode 100644
index a1653b241..000000000
--- a/src/truetype/ttdriver.c
+++ /dev/null
@@ -1,665 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttdriver.c */
-/* */
-/* TrueType font driver implementation (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H
-#include FT_SERVICE_FONT_FORMAT_H
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include FT_MULTIPLE_MASTERS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_METRICS_VARIATIONS_H
-#endif
-
-#include FT_SERVICE_TRUETYPE_ENGINE_H
-#include FT_SERVICE_TRUETYPE_GLYF_H
-#include FT_SERVICE_PROPERTIES_H
-#include FT_TRUETYPE_DRIVER_H
-
-#include "ttdriver.h"
-#include "ttgload.h"
-#include "ttpload.h"
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include "ttgxvar.h"
-#endif
-
-#include "tterrors.h"
-
-#include "ttpic.h"
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttdriver
-
-
- /*
- * PROPERTY SERVICE
- *
- */
- static FT_Error
- tt_property_set( FT_Module module, /* TT_Driver */
- const char* property_name,
- const void* value,
- FT_Bool value_is_string )
- {
- FT_Error error = FT_Err_Ok;
- TT_Driver driver = (TT_Driver)module;
-
-#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- FT_UNUSED( value_is_string );
-#endif
-
-
- if ( !ft_strcmp( property_name, "interpreter-version" ) )
- {
- FT_UInt interpreter_version;
-
-
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
- if ( value_is_string )
- {
- const char* s = (const char*)value;
-
-
- interpreter_version = (FT_UInt)ft_strtol( s, NULL, 10 );
- }
- else
-#endif
- {
- FT_UInt* iv = (FT_UInt*)value;
-
-
- interpreter_version = *iv;
- }
-
- if ( interpreter_version == TT_INTERPRETER_VERSION_35
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- || interpreter_version == TT_INTERPRETER_VERSION_38
-#endif
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- || interpreter_version == TT_INTERPRETER_VERSION_40
-#endif
- )
- driver->interpreter_version = interpreter_version;
- else
- error = FT_ERR( Unimplemented_Feature );
-
- return error;
- }
-
- FT_TRACE0(( "tt_property_set: missing property `%s'\n",
- property_name ));
- return FT_THROW( Missing_Property );
- }
-
-
- static FT_Error
- tt_property_get( FT_Module module, /* TT_Driver */
- const char* property_name,
- const void* value )
- {
- FT_Error error = FT_Err_Ok;
- TT_Driver driver = (TT_Driver)module;
-
- FT_UInt interpreter_version = driver->interpreter_version;
-
-
- if ( !ft_strcmp( property_name, "interpreter-version" ) )
- {
- FT_UInt* val = (FT_UInt*)value;
-
-
- *val = interpreter_version;
-
- return error;
- }
-
- FT_TRACE0(( "tt_property_get: missing property `%s'\n",
- property_name ));
- return FT_THROW( Missing_Property );
- }
-
-
- FT_DEFINE_SERVICE_PROPERTIESREC(
- tt_service_properties,
-
- (FT_Properties_SetFunc)tt_property_set, /* set_property */
- (FT_Properties_GetFunc)tt_property_get /* get_property */
- )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** F A C E S ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_get_kerning */
- /* */
- /* <Description> */
- /* A driver method used to return the kerning vector between two */
- /* glyphs of the same face. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* left_glyph :: The index of the left glyph in the kern pair. */
- /* */
- /* right_glyph :: The index of the right glyph in the kern pair. */
- /* */
- /* <Output> */
- /* kerning :: The kerning vector. This is in font units for */
- /* scalable formats, and in pixels for fixed-sizes */
- /* formats. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* Only horizontal layouts (left-to-right & right-to-left) are */
- /* supported by this function. Other layouts, or more sophisticated */
- /* kernings, are out of scope of this method (the basic driver */
- /* interface is meant to be simple). */
- /* */
- /* They can be implemented by format-specific interfaces. */
- /* */
- static FT_Error
- tt_get_kerning( FT_Face ttface, /* TT_Face */
- FT_UInt left_glyph,
- FT_UInt right_glyph,
- FT_Vector* kerning )
- {
- TT_Face face = (TT_Face)ttface;
- SFNT_Service sfnt = (SFNT_Service)face->sfnt;
-
-
- kerning->x = 0;
- kerning->y = 0;
-
- if ( sfnt )
- kerning->x = sfnt->get_kerning( face, left_glyph, right_glyph );
-
- return 0;
- }
-
-
- static FT_Error
- tt_get_advances( FT_Face ttface,
- FT_UInt start,
- FT_UInt count,
- FT_Int32 flags,
- FT_Fixed *advances )
- {
- FT_UInt nn;
- TT_Face face = (TT_Face)ttface;
-
-
- /* XXX: TODO: check for sbits */
-
- if ( flags & FT_LOAD_VERTICAL_LAYOUT )
- {
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- /* no fast retrieval for blended MM fonts without VVAR table */
- if ( !face->is_default_instance &&
- !( face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
- return FT_THROW( Unimplemented_Feature );
-#endif
-
- for ( nn = 0; nn < count; nn++ )
- {
- FT_Short tsb;
- FT_UShort ah;
-
-
- /* since we don't need `tsb', we use zero for `yMax' parameter */
- TT_Get_VMetrics( face, start + nn, 0, &tsb, &ah );
- advances[nn] = ah;
- }
- }
- else
- {
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- /* no fast retrieval for blended MM fonts without HVAR table */
- if ( !face->is_default_instance &&
- !( face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
- return FT_THROW( Unimplemented_Feature );
-#endif
-
- for ( nn = 0; nn < count; nn++ )
- {
- FT_Short lsb;
- FT_UShort aw;
-
-
- TT_Get_HMetrics( face, start + nn, &lsb, &aw );
- advances[nn] = aw;
- }
- }
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** S I Z E S ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-
- static FT_Error
- tt_size_select( FT_Size size,
- FT_ULong strike_index )
- {
- TT_Face ttface = (TT_Face)size->face;
- TT_Size ttsize = (TT_Size)size;
- FT_Error error = FT_Err_Ok;
-
-
- ttsize->strike_index = strike_index;
-
- if ( FT_IS_SCALABLE( size->face ) )
- {
- /* use the scaled metrics, even when tt_size_reset fails */
- FT_Select_Metrics( size->face, strike_index );
-
- tt_size_reset( ttsize, 0 ); /* ignore return value */
- }
- else
- {
- SFNT_Service sfnt = (SFNT_Service)ttface->sfnt;
- FT_Size_Metrics* size_metrics = &size->metrics;
-
-
- error = sfnt->load_strike_metrics( ttface,
- strike_index,
- size_metrics );
- if ( error )
- ttsize->strike_index = 0xFFFFFFFFUL;
- }
-
- return error;
- }
-
-#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
-
-
- static FT_Error
- tt_size_request( FT_Size size,
- FT_Size_Request req )
- {
- TT_Size ttsize = (TT_Size)size;
- FT_Error error = FT_Err_Ok;
-
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-
- if ( FT_HAS_FIXED_SIZES( size->face ) )
- {
- TT_Face ttface = (TT_Face)size->face;
- SFNT_Service sfnt = (SFNT_Service)ttface->sfnt;
- FT_ULong strike_index;
-
-
- error = sfnt->set_sbit_strike( ttface, req, &strike_index );
-
- if ( error )
- ttsize->strike_index = 0xFFFFFFFFUL;
- else
- return tt_size_select( size, strike_index );
- }
-
-#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
-
- FT_Request_Metrics( size->face, req );
-
- if ( FT_IS_SCALABLE( size->face ) )
- {
- error = tt_size_reset( ttsize, 0 );
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- /* for the `MPS' bytecode instruction we need the point size */
- if ( !error )
- {
- FT_UInt resolution =
- ttsize->metrics->x_ppem > ttsize->metrics->y_ppem
- ? req->horiResolution
- : req->vertResolution;
-
-
- /* if we don't have a resolution value, assume 72dpi */
- if ( req->type == FT_SIZE_REQUEST_TYPE_SCALES ||
- !resolution )
- resolution = 72;
-
- ttsize->point_size = FT_MulDiv( ttsize->ttmetrics.ppem,
- 64 * 72,
- resolution );
- }
-#endif
- }
-
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_glyph_load */
- /* */
- /* <Description> */
- /* A driver method used to load a glyph within a given glyph slot. */
- /* */
- /* <Input> */
- /* slot :: A handle to the target slot object where the glyph */
- /* will be loaded. */
- /* */
- /* size :: A handle to the source face size at which the glyph */
- /* must be scaled, loaded, etc. */
- /* */
- /* glyph_index :: The index of the glyph in the font file. */
- /* */
- /* load_flags :: A flag indicating what to load for this glyph. The */
- /* FT_LOAD_XXX constants can be used to control the */
- /* glyph loading process (e.g., whether the outline */
- /* should be scaled, whether to load bitmaps or not, */
- /* whether to hint the outline, etc). */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- static FT_Error
- tt_glyph_load( FT_GlyphSlot ttslot, /* TT_GlyphSlot */
- FT_Size ttsize, /* TT_Size */
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- TT_GlyphSlot slot = (TT_GlyphSlot)ttslot;
- TT_Size size = (TT_Size)ttsize;
- FT_Face face = ttslot->face;
- FT_Error error;
-
-
- if ( !slot )
- return FT_THROW( Invalid_Slot_Handle );
-
- if ( !size )
- return FT_THROW( Invalid_Size_Handle );
-
- if ( !face )
- return FT_THROW( Invalid_Face_Handle );
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- if ( glyph_index >= (FT_UInt)face->num_glyphs &&
- !face->internal->incremental_interface )
-#else
- if ( glyph_index >= (FT_UInt)face->num_glyphs )
-#endif
- return FT_THROW( Invalid_Argument );
-
- if ( load_flags & FT_LOAD_NO_HINTING )
- {
- /* both FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT */
- /* are necessary to disable hinting for tricky fonts */
-
- if ( FT_IS_TRICKY( face ) )
- load_flags &= ~FT_LOAD_NO_HINTING;
-
- if ( load_flags & FT_LOAD_NO_AUTOHINT )
- load_flags |= FT_LOAD_NO_HINTING;
- }
-
- if ( load_flags & ( FT_LOAD_NO_RECURSE | FT_LOAD_NO_SCALE ) )
- {
- load_flags |= FT_LOAD_NO_BITMAP | FT_LOAD_NO_SCALE;
-
- if ( !FT_IS_TRICKY( face ) )
- load_flags |= FT_LOAD_NO_HINTING;
- }
-
- /* use hinted metrics only if we load a glyph with hinting */
- size->metrics = ( load_flags & FT_LOAD_NO_HINTING )
- ? &ttsize->metrics
- : &size->hinted_metrics;
-
- /* now load the glyph outline if necessary */
- error = TT_Load_Glyph( size, slot, glyph_index, load_flags );
-
- /* force drop-out mode to 2 - irrelevant now */
- /* slot->outline.dropout_mode = 2; */
-
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** D R I V E R I N T E R F A C E ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-
- FT_DEFINE_SERVICE_MULTIMASTERSREC(
- tt_service_gx_multi_masters,
-
- (FT_Get_MM_Func) NULL, /* get_mm */
- (FT_Set_MM_Design_Func) NULL, /* set_mm_design */
- (FT_Set_MM_Blend_Func) TT_Set_MM_Blend, /* set_mm_blend */
- (FT_Get_MM_Blend_Func) TT_Get_MM_Blend, /* get_mm_blend */
- (FT_Get_MM_Var_Func) TT_Get_MM_Var, /* get_mm_var */
- (FT_Set_Var_Design_Func)TT_Set_Var_Design, /* set_var_design */
- (FT_Get_Var_Design_Func)TT_Get_Var_Design, /* get_var_design */
-
- (FT_Get_Var_Blend_Func) tt_get_var_blend, /* get_var_blend */
- (FT_Done_Blend_Func) tt_done_blend /* done_blend */
- )
-
- FT_DEFINE_SERVICE_METRICSVARIATIONSREC(
- tt_service_metrics_variations,
-
- (FT_HAdvance_Adjust_Func)tt_hadvance_adjust, /* hadvance_adjust */
- (FT_LSB_Adjust_Func) NULL, /* lsb_adjust */
- (FT_RSB_Adjust_Func) NULL, /* rsb_adjust */
-
- (FT_VAdvance_Adjust_Func)tt_vadvance_adjust, /* vadvance_adjust */
- (FT_TSB_Adjust_Func) NULL, /* tsb_adjust */
- (FT_BSB_Adjust_Func) NULL, /* bsb_adjust */
- (FT_VOrg_Adjust_Func) NULL, /* vorg_adjust */
-
- (FT_Metrics_Adjust_Func) tt_apply_mvar /* metrics_adjust */
- )
-
-#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
-
-
- static const FT_Service_TrueTypeEngineRec tt_service_truetype_engine =
- {
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- FT_TRUETYPE_ENGINE_TYPE_PATENTED
-
-#else /* !TT_USE_BYTECODE_INTERPRETER */
-
- FT_TRUETYPE_ENGINE_TYPE_NONE
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
- };
-
-
- FT_DEFINE_SERVICE_TTGLYFREC(
- tt_service_truetype_glyf,
-
- (TT_Glyf_GetLocationFunc)tt_face_get_location /* get_location */
- )
-
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_DEFINE_SERVICEDESCREC6(
- tt_services,
-
- FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TRUETYPE,
- FT_SERVICE_ID_MULTI_MASTERS, &TT_SERVICE_GX_MULTI_MASTERS_GET,
- FT_SERVICE_ID_METRICS_VARIATIONS, &TT_SERVICE_METRICS_VARIATIONS_GET,
- FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine,
- FT_SERVICE_ID_TT_GLYF, &TT_SERVICE_TRUETYPE_GLYF_GET,
- FT_SERVICE_ID_PROPERTIES, &TT_SERVICE_PROPERTIES_GET )
-#else
- FT_DEFINE_SERVICEDESCREC4(
- tt_services,
-
- FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TRUETYPE,
- FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine,
- FT_SERVICE_ID_TT_GLYF, &TT_SERVICE_TRUETYPE_GLYF_GET,
- FT_SERVICE_ID_PROPERTIES, &TT_SERVICE_PROPERTIES_GET )
-#endif
-
-
- FT_CALLBACK_DEF( FT_Module_Interface )
- tt_get_interface( FT_Module driver, /* TT_Driver */
- const char* tt_interface )
- {
- FT_Library library;
- FT_Module_Interface result;
- FT_Module sfntd;
- SFNT_Service sfnt;
-
-
- /* TT_SERVICES_GET dereferences `library' in PIC mode */
-#ifdef FT_CONFIG_OPTION_PIC
- if ( !driver )
- return NULL;
- library = driver->library;
- if ( !library )
- return NULL;
-#endif
-
- result = ft_service_list_lookup( TT_SERVICES_GET, tt_interface );
- if ( result )
- return result;
-
-#ifndef FT_CONFIG_OPTION_PIC
- if ( !driver )
- return NULL;
- library = driver->library;
- if ( !library )
- return NULL;
-#endif
-
- /* only return the default interface from the SFNT module */
- sfntd = FT_Get_Module( library, "sfnt" );
- if ( sfntd )
- {
- sfnt = (SFNT_Service)( sfntd->clazz->module_interface );
- if ( sfnt )
- return sfnt->get_interface( driver, tt_interface );
- }
-
- return 0;
- }
-
-
- /* The FT_DriverInterface structure is defined in ftdriver.h. */
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-#define TT_HINTER_FLAG FT_MODULE_DRIVER_HAS_HINTER
-#else
-#define TT_HINTER_FLAG 0
-#endif
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-#define TT_SIZE_SELECT tt_size_select
-#else
-#define TT_SIZE_SELECT 0
-#endif
-
- FT_DEFINE_DRIVER(
- tt_driver_class,
-
- FT_MODULE_FONT_DRIVER |
- FT_MODULE_DRIVER_SCALABLE |
- TT_HINTER_FLAG,
-
- sizeof ( TT_DriverRec ),
-
- "truetype", /* driver name */
- 0x10000L, /* driver version == 1.0 */
- 0x20000L, /* driver requires FreeType 2.0 or above */
-
- NULL, /* module-specific interface */
-
- tt_driver_init, /* FT_Module_Constructor module_init */
- tt_driver_done, /* FT_Module_Destructor module_done */
- tt_get_interface, /* FT_Module_Requester get_interface */
-
- sizeof ( TT_FaceRec ),
- sizeof ( TT_SizeRec ),
- sizeof ( FT_GlyphSlotRec ),
-
- tt_face_init, /* FT_Face_InitFunc init_face */
- tt_face_done, /* FT_Face_DoneFunc done_face */
- tt_size_init, /* FT_Size_InitFunc init_size */
- tt_size_done, /* FT_Size_DoneFunc done_size */
- tt_slot_init, /* FT_Slot_InitFunc init_slot */
- NULL, /* FT_Slot_DoneFunc done_slot */
-
- tt_glyph_load, /* FT_Slot_LoadFunc load_glyph */
-
- tt_get_kerning, /* FT_Face_GetKerningFunc get_kerning */
- NULL, /* FT_Face_AttachFunc attach_file */
- tt_get_advances, /* FT_Face_GetAdvancesFunc get_advances */
-
- tt_size_request, /* FT_Size_RequestFunc request_size */
- TT_SIZE_SELECT /* FT_Size_SelectFunc select_size */
- )
-
-
-/* END */
diff --git a/src/truetype/ttdriver.h b/src/truetype/ttdriver.h
deleted file mode 100644
index 3bcba7f74..000000000
--- a/src/truetype/ttdriver.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttdriver.h */
-/* */
-/* High-level TrueType driver interface (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTDRIVER_H_
-#define TTDRIVER_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_DECLARE_DRIVER( tt_driver_class )
-
-
-FT_END_HEADER
-
-#endif /* TTDRIVER_H_ */
-
-
-/* END */
diff --git a/src/truetype/tterrors.h b/src/truetype/tterrors.h
deleted file mode 100644
index a49f20515..000000000
--- a/src/truetype/tterrors.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/***************************************************************************/
-/* */
-/* tterrors.h */
-/* */
-/* TrueType error codes (specification only). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the TrueType error enumeration */
- /* constants. */
- /* */
- /*************************************************************************/
-
-#ifndef TTERRORS_H_
-#define TTERRORS_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX TT_Err_
-#define FT_ERR_BASE FT_Mod_Err_TrueType
-
-#include FT_ERRORS_H
-
-#endif /* TTERRORS_H_ */
-
-
-/* END */
diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c
deleted file mode 100644
index d1351e795..000000000
--- a/src/truetype/ttgload.c
+++ /dev/null
@@ -1,2767 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttgload.c */
-/* */
-/* TrueType Glyph Loader (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_OUTLINE_H
-#include FT_TRUETYPE_DRIVER_H
-#include FT_LIST_H
-
-#include "ttgload.h"
-#include "ttpload.h"
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include "ttgxvar.h"
-#endif
-
-#include "tterrors.h"
-#include "ttsubpix.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttgload
-
-
- /*************************************************************************/
- /* */
- /* Composite glyph flags. */
- /* */
-#define ARGS_ARE_WORDS 0x0001
-#define ARGS_ARE_XY_VALUES 0x0002
-#define ROUND_XY_TO_GRID 0x0004
-#define WE_HAVE_A_SCALE 0x0008
-/* reserved 0x0010 */
-#define MORE_COMPONENTS 0x0020
-#define WE_HAVE_AN_XY_SCALE 0x0040
-#define WE_HAVE_A_2X2 0x0080
-#define WE_HAVE_INSTR 0x0100
-#define USE_MY_METRICS 0x0200
-#define OVERLAP_COMPOUND 0x0400
-#define SCALED_COMPONENT_OFFSET 0x0800
-#define UNSCALED_COMPONENT_OFFSET 0x1000
-
-
- /*************************************************************************/
- /* */
- /* Return the horizontal metrics in font units for a given glyph. */
- /* */
- FT_LOCAL_DEF( void )
- TT_Get_HMetrics( TT_Face face,
- FT_UInt idx,
- FT_Short* lsb,
- FT_UShort* aw )
- {
- ( (SFNT_Service)face->sfnt )->get_metrics( face, 0, idx, lsb, aw );
-
- FT_TRACE5(( " advance width (font units): %d\n", *aw ));
- FT_TRACE5(( " left side bearing (font units): %d\n", *lsb ));
- }
-
-
- /*************************************************************************/
- /* */
- /* Return the vertical metrics in font units for a given glyph. */
- /* See macro `TT_LOADER_SET_PP' below for explanations. */
- /* */
- FT_LOCAL_DEF( void )
- TT_Get_VMetrics( TT_Face face,
- FT_UInt idx,
- FT_Pos yMax,
- FT_Short* tsb,
- FT_UShort* ah )
- {
- if ( face->vertical_info )
- ( (SFNT_Service)face->sfnt )->get_metrics( face, 1, idx, tsb, ah );
-
- else if ( face->os2.version != 0xFFFFU )
- {
- *tsb = (FT_Short)( face->os2.sTypoAscender - yMax );
- *ah = (FT_UShort)FT_ABS( face->os2.sTypoAscender -
- face->os2.sTypoDescender );
- }
-
- else
- {
- *tsb = (FT_Short)( face->horizontal.Ascender - yMax );
- *ah = (FT_UShort)FT_ABS( face->horizontal.Ascender -
- face->horizontal.Descender );
- }
-
- FT_TRACE5(( " advance height (font units): %d\n", *ah ));
- FT_TRACE5(( " top side bearing (font units): %d\n", *tsb ));
- }
-
-
- static FT_Error
- tt_get_metrics( TT_Loader loader,
- FT_UInt glyph_index )
- {
- TT_Face face = loader->face;
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face );
-#endif
-
- FT_Error error;
- FT_Stream stream = loader->stream;
-
- FT_Short left_bearing = 0, top_bearing = 0;
- FT_UShort advance_width = 0, advance_height = 0;
-
- /* we must preserve the stream position */
- /* (which gets altered by the metrics functions) */
- FT_ULong pos = FT_STREAM_POS();
-
-
- TT_Get_HMetrics( face, glyph_index,
- &left_bearing,
- &advance_width );
- TT_Get_VMetrics( face, glyph_index,
- loader->bbox.yMax,
- &top_bearing,
- &advance_height );
-
- if ( FT_STREAM_SEEK( pos ) )
- return error;
-
- loader->left_bearing = left_bearing;
- loader->advance = advance_width;
- loader->top_bearing = top_bearing;
- loader->vadvance = advance_height;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 &&
- loader->exec )
- {
- loader->exec->sph_tweak_flags = 0;
-
- /* This may not be the right place for this, but it works... */
- /* Note that we have to unconditionally load the tweaks since */
- /* it is possible that glyphs individually switch ClearType's */
- /* backward compatibility mode on and off. */
- sph_set_tweaks( loader, glyph_index );
- }
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- if ( !loader->linear_def )
- {
- loader->linear_def = 1;
- loader->linear = advance_width;
- }
-
- return FT_Err_Ok;
- }
-
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
-
- static void
- tt_get_metrics_incr_overrides( TT_Loader loader,
- FT_UInt glyph_index )
- {
- TT_Face face = loader->face;
-
- FT_Short left_bearing = 0, top_bearing = 0;
- FT_UShort advance_width = 0, advance_height = 0;
-
-
- /* If this is an incrementally loaded font check whether there are */
- /* overriding metrics for this glyph. */
- if ( face->root.internal->incremental_interface &&
- face->root.internal->incremental_interface->funcs->get_glyph_metrics )
- {
- FT_Incremental_MetricsRec incr_metrics;
- FT_Error error;
-
-
- incr_metrics.bearing_x = loader->left_bearing;
- incr_metrics.bearing_y = 0;
- incr_metrics.advance = loader->advance;
- incr_metrics.advance_v = 0;
-
- error = face->root.internal->incremental_interface->funcs->get_glyph_metrics(
- face->root.internal->incremental_interface->object,
- glyph_index, FALSE, &incr_metrics );
- if ( error )
- goto Exit;
-
- left_bearing = (FT_Short)incr_metrics.bearing_x;
- advance_width = (FT_UShort)incr_metrics.advance;
-
-#if 0
-
- /* GWW: Do I do the same for vertical metrics? */
- incr_metrics.bearing_x = 0;
- incr_metrics.bearing_y = loader->top_bearing;
- incr_metrics.advance = loader->vadvance;
-
- error = face->root.internal->incremental_interface->funcs->get_glyph_metrics(
- face->root.internal->incremental_interface->object,
- glyph_index, TRUE, &incr_metrics );
- if ( error )
- goto Exit;
-
- top_bearing = (FT_Short)incr_metrics.bearing_y;
- advance_height = (FT_UShort)incr_metrics.advance;
-
-#endif /* 0 */
-
- loader->left_bearing = left_bearing;
- loader->advance = advance_width;
- loader->top_bearing = top_bearing;
- loader->vadvance = advance_height;
-
- if ( !loader->linear_def )
- {
- loader->linear_def = 1;
- loader->linear = advance_width;
- }
- }
-
- Exit:
- return;
- }
-
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
-
-
- /*************************************************************************/
- /* */
- /* The following functions are used by default with TrueType fonts. */
- /* However, they can be replaced by alternatives if we need to support */
- /* TrueType-compressed formats (like MicroType) in the future. */
- /* */
- /*************************************************************************/
-
- FT_CALLBACK_DEF( FT_Error )
- TT_Access_Glyph_Frame( TT_Loader loader,
- FT_UInt glyph_index,
- FT_ULong offset,
- FT_UInt byte_count )
- {
- FT_Error error;
- FT_Stream stream = loader->stream;
-
- /* for non-debug mode */
- FT_UNUSED( glyph_index );
-
-
- FT_TRACE4(( "Glyph %ld\n", glyph_index ));
-
- /* the following line sets the `error' variable through macros! */
- if ( FT_STREAM_SEEK( offset ) || FT_FRAME_ENTER( byte_count ) )
- return error;
-
- loader->cursor = stream->cursor;
- loader->limit = stream->limit;
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( void )
- TT_Forget_Glyph_Frame( TT_Loader loader )
- {
- FT_Stream stream = loader->stream;
-
-
- FT_FRAME_EXIT();
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- TT_Load_Glyph_Header( TT_Loader loader )
- {
- FT_Byte* p = loader->cursor;
- FT_Byte* limit = loader->limit;
-
-
- if ( p + 10 > limit )
- return FT_THROW( Invalid_Outline );
-
- loader->n_contours = FT_NEXT_SHORT( p );
-
- loader->bbox.xMin = FT_NEXT_SHORT( p );
- loader->bbox.yMin = FT_NEXT_SHORT( p );
- loader->bbox.xMax = FT_NEXT_SHORT( p );
- loader->bbox.yMax = FT_NEXT_SHORT( p );
-
- FT_TRACE5(( " # of contours: %d\n", loader->n_contours ));
- FT_TRACE5(( " xMin: %4d xMax: %4d\n", loader->bbox.xMin,
- loader->bbox.xMax ));
- FT_TRACE5(( " yMin: %4d yMax: %4d\n", loader->bbox.yMin,
- loader->bbox.yMax ));
- loader->cursor = p;
-
- return FT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- TT_Load_Simple_Glyph( TT_Loader load )
- {
- FT_Error error;
- FT_Byte* p = load->cursor;
- FT_Byte* limit = load->limit;
- FT_GlyphLoader gloader = load->gloader;
- FT_Int n_contours = load->n_contours;
- FT_Outline* outline;
- FT_UShort n_ins;
- FT_Int n_points;
-
- FT_Byte *flag, *flag_limit;
- FT_Byte c, count;
- FT_Vector *vec, *vec_limit;
- FT_Pos x;
- FT_Short *cont, *cont_limit, prev_cont;
- FT_Int xy_size = 0;
-
-
- /* check that we can add the contours to the glyph */
- error = FT_GLYPHLOADER_CHECK_POINTS( gloader, 0, n_contours );
- if ( error )
- goto Fail;
-
- /* reading the contours' endpoints & number of points */
- cont = gloader->current.outline.contours;
- cont_limit = cont + n_contours;
-
- /* check space for contours array + instructions count */
- if ( n_contours >= 0xFFF || p + ( n_contours + 1 ) * 2 > limit )
- goto Invalid_Outline;
-
- prev_cont = FT_NEXT_SHORT( p );
-
- if ( n_contours > 0 )
- cont[0] = prev_cont;
-
- if ( prev_cont < 0 )
- goto Invalid_Outline;
-
- for ( cont++; cont < cont_limit; cont++ )
- {
- cont[0] = FT_NEXT_SHORT( p );
- if ( cont[0] <= prev_cont )
- {
- /* unordered contours: this is invalid */
- goto Invalid_Outline;
- }
- prev_cont = cont[0];
- }
-
- n_points = 0;
- if ( n_contours > 0 )
- {
- n_points = cont[-1] + 1;
- if ( n_points < 0 )
- goto Invalid_Outline;
- }
-
- /* note that we will add four phantom points later */
- error = FT_GLYPHLOADER_CHECK_POINTS( gloader, n_points + 4, 0 );
- if ( error )
- goto Fail;
-
- /* reading the bytecode instructions */
- load->glyph->control_len = 0;
- load->glyph->control_data = NULL;
-
- if ( p + 2 > limit )
- goto Invalid_Outline;
-
- n_ins = FT_NEXT_USHORT( p );
-
- FT_TRACE5(( " Instructions size: %u\n", n_ins ));
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- if ( IS_HINTED( load->load_flags ) )
- {
- FT_ULong tmp;
-
-
- /* check instructions size */
- if ( ( limit - p ) < n_ins )
- {
- FT_TRACE1(( "TT_Load_Simple_Glyph: instruction count mismatch\n" ));
- error = FT_THROW( Too_Many_Hints );
- goto Fail;
- }
-
- /* we don't trust `maxSizeOfInstructions' in the `maxp' table */
- /* and thus update the bytecode array size by ourselves */
-
- tmp = load->exec->glyphSize;
- error = Update_Max( load->exec->memory,
- &tmp,
- sizeof ( FT_Byte ),
- (void*)&load->exec->glyphIns,
- n_ins );
-
- load->exec->glyphSize = (FT_UShort)tmp;
- if ( error )
- return error;
-
- load->glyph->control_len = n_ins;
- load->glyph->control_data = load->exec->glyphIns;
-
- if ( n_ins )
- FT_MEM_COPY( load->exec->glyphIns, p, (FT_Long)n_ins );
- }
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
- p += n_ins;
-
- outline = &gloader->current.outline;
-
- /* reading the point tags */
- flag = (FT_Byte*)outline->tags;
- flag_limit = flag + n_points;
-
- FT_ASSERT( flag );
-
- while ( flag < flag_limit )
- {
- if ( p + 1 > limit )
- goto Invalid_Outline;
-
- *flag++ = c = FT_NEXT_BYTE( p );
- if ( c & 8 )
- {
- if ( p + 1 > limit )
- goto Invalid_Outline;
-
- count = FT_NEXT_BYTE( p );
- if ( flag + (FT_Int)count > flag_limit )
- goto Invalid_Outline;
-
- for ( ; count > 0; count-- )
- *flag++ = c;
- }
- }
-
- /* reading the X coordinates */
-
- vec = outline->points;
- vec_limit = vec + n_points;
- flag = (FT_Byte*)outline->tags;
- x = 0;
-
- if ( p + xy_size > limit )
- goto Invalid_Outline;
-
- for ( ; vec < vec_limit; vec++, flag++ )
- {
- FT_Pos y = 0;
- FT_Byte f = *flag;
-
-
- if ( f & 2 )
- {
- if ( p + 1 > limit )
- goto Invalid_Outline;
-
- y = (FT_Pos)FT_NEXT_BYTE( p );
- if ( ( f & 16 ) == 0 )
- y = -y;
- }
- else if ( ( f & 16 ) == 0 )
- {
- if ( p + 2 > limit )
- goto Invalid_Outline;
-
- y = (FT_Pos)FT_NEXT_SHORT( p );
- }
-
- x += y;
- vec->x = x;
- /* the cast is for stupid compilers */
- *flag = (FT_Byte)( f & ~( 2 | 16 ) );
- }
-
- /* reading the Y coordinates */
-
- vec = gloader->current.outline.points;
- vec_limit = vec + n_points;
- flag = (FT_Byte*)outline->tags;
- x = 0;
-
- for ( ; vec < vec_limit; vec++, flag++ )
- {
- FT_Pos y = 0;
- FT_Byte f = *flag;
-
-
- if ( f & 4 )
- {
- if ( p + 1 > limit )
- goto Invalid_Outline;
-
- y = (FT_Pos)FT_NEXT_BYTE( p );
- if ( ( f & 32 ) == 0 )
- y = -y;
- }
- else if ( ( f & 32 ) == 0 )
- {
- if ( p + 2 > limit )
- goto Invalid_Outline;
-
- y = (FT_Pos)FT_NEXT_SHORT( p );
- }
-
- x += y;
- vec->y = x;
- /* the cast is for stupid compilers */
- *flag = (FT_Byte)( f & FT_CURVE_TAG_ON );
- }
-
- outline->n_points = (FT_Short)n_points;
- outline->n_contours = (FT_Short)n_contours;
-
- load->cursor = p;
-
- Fail:
- return error;
-
- Invalid_Outline:
- error = FT_THROW( Invalid_Outline );
- goto Fail;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- TT_Load_Composite_Glyph( TT_Loader loader )
- {
- FT_Error error;
- FT_Byte* p = loader->cursor;
- FT_Byte* limit = loader->limit;
- FT_GlyphLoader gloader = loader->gloader;
- FT_SubGlyph subglyph;
- FT_UInt num_subglyphs;
-
-
- num_subglyphs = 0;
-
- do
- {
- FT_Fixed xx, xy, yy, yx;
- FT_UInt count;
-
-
- /* check that we can load a new subglyph */
- error = FT_GlyphLoader_CheckSubGlyphs( gloader, num_subglyphs + 1 );
- if ( error )
- goto Fail;
-
- /* check space */
- if ( p + 4 > limit )
- goto Invalid_Composite;
-
- subglyph = gloader->current.subglyphs + num_subglyphs;
-
- subglyph->arg1 = subglyph->arg2 = 0;
-
- subglyph->flags = FT_NEXT_USHORT( p );
- subglyph->index = FT_NEXT_USHORT( p );
-
- /* check space */
- count = 2;
- if ( subglyph->flags & ARGS_ARE_WORDS )
- count += 2;
- if ( subglyph->flags & WE_HAVE_A_SCALE )
- count += 2;
- else if ( subglyph->flags & WE_HAVE_AN_XY_SCALE )
- count += 4;
- else if ( subglyph->flags & WE_HAVE_A_2X2 )
- count += 8;
-
- if ( p + count > limit )
- goto Invalid_Composite;
-
- /* read arguments */
- if ( subglyph->flags & ARGS_ARE_XY_VALUES )
- {
- if ( subglyph->flags & ARGS_ARE_WORDS )
- {
- subglyph->arg1 = FT_NEXT_SHORT( p );
- subglyph->arg2 = FT_NEXT_SHORT( p );
- }
- else
- {
- subglyph->arg1 = FT_NEXT_CHAR( p );
- subglyph->arg2 = FT_NEXT_CHAR( p );
- }
- }
- else
- {
- if ( subglyph->flags & ARGS_ARE_WORDS )
- {
- subglyph->arg1 = (FT_Int)FT_NEXT_USHORT( p );
- subglyph->arg2 = (FT_Int)FT_NEXT_USHORT( p );
- }
- else
- {
- subglyph->arg1 = (FT_Int)FT_NEXT_BYTE( p );
- subglyph->arg2 = (FT_Int)FT_NEXT_BYTE( p );
- }
- }
-
- /* read transform */
- xx = yy = 0x10000L;
- xy = yx = 0;
-
- if ( subglyph->flags & WE_HAVE_A_SCALE )
- {
- xx = (FT_Fixed)FT_NEXT_SHORT( p ) * 4;
- yy = xx;
- }
- else if ( subglyph->flags & WE_HAVE_AN_XY_SCALE )
- {
- xx = (FT_Fixed)FT_NEXT_SHORT( p ) * 4;
- yy = (FT_Fixed)FT_NEXT_SHORT( p ) * 4;
- }
- else if ( subglyph->flags & WE_HAVE_A_2X2 )
- {
- xx = (FT_Fixed)FT_NEXT_SHORT( p ) * 4;
- yx = (FT_Fixed)FT_NEXT_SHORT( p ) * 4;
- xy = (FT_Fixed)FT_NEXT_SHORT( p ) * 4;
- yy = (FT_Fixed)FT_NEXT_SHORT( p ) * 4;
- }
-
- subglyph->transform.xx = xx;
- subglyph->transform.xy = xy;
- subglyph->transform.yx = yx;
- subglyph->transform.yy = yy;
-
- num_subglyphs++;
-
- } while ( subglyph->flags & MORE_COMPONENTS );
-
- gloader->current.num_subglyphs = num_subglyphs;
- FT_TRACE5(( " %d components\n", num_subglyphs ));
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- {
- FT_Stream stream = loader->stream;
-
-
- /* we must undo the FT_FRAME_ENTER in order to point */
- /* to the composite instructions, if we find some. */
- /* We will process them later. */
- /* */
- loader->ins_pos = (FT_ULong)( FT_STREAM_POS() +
- p - limit );
- }
-
-#endif
-
- loader->cursor = p;
-
- Fail:
- return error;
-
- Invalid_Composite:
- error = FT_THROW( Invalid_Composite );
- goto Fail;
- }
-
-
- FT_LOCAL_DEF( void )
- TT_Init_Glyph_Loading( TT_Face face )
- {
- face->access_glyph_frame = TT_Access_Glyph_Frame;
- face->read_glyph_header = TT_Load_Glyph_Header;
- face->read_simple_glyph = TT_Load_Simple_Glyph;
- face->read_composite_glyph = TT_Load_Composite_Glyph;
- face->forget_glyph_frame = TT_Forget_Glyph_Frame;
- }
-
-
- static void
- tt_prepare_zone( TT_GlyphZone zone,
- FT_GlyphLoad load,
- FT_UInt start_point,
- FT_UInt start_contour )
- {
- zone->n_points = (FT_UShort)load->outline.n_points -
- (FT_UShort)start_point;
- zone->n_contours = load->outline.n_contours -
- (FT_Short)start_contour;
- zone->org = load->extra_points + start_point;
- zone->cur = load->outline.points + start_point;
- zone->orus = load->extra_points2 + start_point;
- zone->tags = (FT_Byte*)load->outline.tags + start_point;
- zone->contours = (FT_UShort*)load->outline.contours + start_contour;
- zone->first_point = (FT_UShort)start_point;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Hint_Glyph */
- /* */
- /* <Description> */
- /* Hint the glyph using the zone prepared by the caller. Note that */
- /* the zone is supposed to include four phantom points. */
- /* */
- static FT_Error
- TT_Hint_Glyph( TT_Loader loader,
- FT_Bool is_composite )
- {
-#if defined TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY || \
- defined TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- TT_Face face = loader->face;
- TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face );
-#endif
-
- TT_GlyphZone zone = &loader->zone;
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- FT_Long n_ins;
-#else
- FT_UNUSED( is_composite );
-#endif
-
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- if ( loader->glyph->control_len > 0xFFFFL )
- {
- FT_TRACE1(( "TT_Hint_Glyph: too long instructions" ));
- FT_TRACE1(( " (0x%lx byte) is truncated\n",
- loader->glyph->control_len ));
- }
- n_ins = loader->glyph->control_len;
-
- /* save original point position in org */
- if ( n_ins > 0 )
- FT_ARRAY_COPY( zone->org, zone->cur, zone->n_points );
-
- /* Reset graphics state. */
- loader->exec->GS = loader->size->GS;
-
- /* XXX: UNDOCUMENTED! Hinting instructions of a composite glyph */
- /* completely refer to the (already) hinted subglyphs. */
- if ( is_composite )
- {
- loader->exec->metrics.x_scale = 1 << 16;
- loader->exec->metrics.y_scale = 1 << 16;
-
- FT_ARRAY_COPY( zone->orus, zone->cur, zone->n_points );
- }
- else
- {
- loader->exec->metrics.x_scale = loader->size->metrics->x_scale;
- loader->exec->metrics.y_scale = loader->size->metrics->y_scale;
- }
-#endif
-
- /* round phantom points */
- zone->cur[zone->n_points - 4].x =
- FT_PIX_ROUND( zone->cur[zone->n_points - 4].x );
- zone->cur[zone->n_points - 3].x =
- FT_PIX_ROUND( zone->cur[zone->n_points - 3].x );
- zone->cur[zone->n_points - 2].y =
- FT_PIX_ROUND( zone->cur[zone->n_points - 2].y );
- zone->cur[zone->n_points - 1].y =
- FT_PIX_ROUND( zone->cur[zone->n_points - 1].y );
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- if ( n_ins > 0 )
- {
- FT_Error error;
-
- FT_GlyphLoader gloader = loader->gloader;
- FT_Outline current_outline = gloader->current.outline;
-
-
- TT_Set_CodeRange( loader->exec, tt_coderange_glyph,
- loader->exec->glyphIns, n_ins );
-
- loader->exec->is_composite = is_composite;
- loader->exec->pts = *zone;
-
- error = TT_Run_Context( loader->exec );
- if ( error && loader->exec->pedantic_hinting )
- return error;
-
- /* store drop-out mode in bits 5-7; set bit 2 also as a marker */
- current_outline.tags[0] |=
- ( loader->exec->GS.scan_type << 5 ) | FT_CURVE_TAG_HAS_SCANMODE;
- }
-
-#endif
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- /* Save possibly modified glyph phantom points unless in v40 backward */
- /* compatibility mode, where no movement on the x axis means no reason */
- /* to change bearings or advance widths. */
- if ( !( driver->interpreter_version == TT_INTERPRETER_VERSION_40 &&
- !loader->exec->backward_compatibility ) )
- {
-#endif
- loader->pp1 = zone->cur[zone->n_points - 4];
- loader->pp2 = zone->cur[zone->n_points - 3];
- loader->pp3 = zone->cur[zone->n_points - 2];
- loader->pp4 = zone->cur[zone->n_points - 1];
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- }
-#endif
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
- {
- if ( loader->exec->sph_tweak_flags & SPH_TWEAK_DEEMBOLDEN )
- FT_Outline_EmboldenXY( &loader->gloader->current.outline, -24, 0 );
-
- else if ( loader->exec->sph_tweak_flags & SPH_TWEAK_EMBOLDEN )
- FT_Outline_EmboldenXY( &loader->gloader->current.outline, 24, 0 );
- }
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Process_Simple_Glyph */
- /* */
- /* <Description> */
- /* Once a simple glyph has been loaded, it needs to be processed. */
- /* Usually, this means scaling and hinting through bytecode */
- /* interpretation. */
- /* */
- static FT_Error
- TT_Process_Simple_Glyph( TT_Loader loader )
- {
- FT_GlyphLoader gloader = loader->gloader;
- FT_Error error = FT_Err_Ok;
- FT_Outline* outline;
- FT_Int n_points;
-
-
- outline = &gloader->current.outline;
- n_points = outline->n_points;
-
- /* set phantom points */
-
- outline->points[n_points ] = loader->pp1;
- outline->points[n_points + 1] = loader->pp2;
- outline->points[n_points + 2] = loader->pp3;
- outline->points[n_points + 3] = loader->pp4;
-
- outline->tags[n_points ] = 0;
- outline->tags[n_points + 1] = 0;
- outline->tags[n_points + 2] = 0;
- outline->tags[n_points + 3] = 0;
-
- n_points += 4;
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-
- if ( !loader->face->is_default_instance )
- {
- /* Deltas apply to the unscaled data. */
- error = TT_Vary_Apply_Glyph_Deltas( loader->face,
- loader->glyph_index,
- outline,
- (FT_UInt)n_points );
-
- /* recalculate linear horizontal and vertical advances */
- /* if we don't have HVAR and VVAR, respectively */
- if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
- loader->linear = outline->points[n_points - 3].x -
- outline->points[n_points - 4].x;
- if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
- loader->vadvance = outline->points[n_points - 1].x -
- outline->points[n_points - 2].x;
-
- if ( error )
- return error;
- }
-
-#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
-
- if ( IS_HINTED( loader->load_flags ) )
- {
- tt_prepare_zone( &loader->zone, &gloader->current, 0, 0 );
-
- FT_ARRAY_COPY( loader->zone.orus, loader->zone.cur,
- loader->zone.n_points + 4 );
- }
-
- {
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- TT_Face face = loader->face;
- TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face );
-
- FT_String* family = face->root.family_name;
- FT_UInt ppem = loader->size->metrics->x_ppem;
- FT_String* style = face->root.style_name;
- FT_UInt x_scale_factor = 1000;
-#endif
-
- FT_Vector* vec = outline->points;
- FT_Vector* limit = outline->points + n_points;
-
- FT_Fixed x_scale = 0; /* pacify compiler */
- FT_Fixed y_scale = 0;
-
- FT_Bool do_scale = FALSE;
-
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-
- if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
- {
- /* scale, but only if enabled and only if TT hinting is being used */
- if ( IS_HINTED( loader->load_flags ) )
- x_scale_factor = sph_test_tweak_x_scaling( face,
- family,
- ppem,
- style,
- loader->glyph_index );
- /* scale the glyph */
- if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 ||
- x_scale_factor != 1000 )
- {
- x_scale = FT_MulDiv( loader->size->metrics->x_scale,
- (FT_Long)x_scale_factor, 1000 );
- y_scale = loader->size->metrics->y_scale;
-
- /* compensate for any scaling by de/emboldening; */
- /* the amount was determined via experimentation */
- if ( x_scale_factor != 1000 && ppem > 11 )
- FT_Outline_EmboldenXY( outline,
- FT_MulFix( 1280 * ppem,
- 1000 - x_scale_factor ),
- 0 );
- do_scale = TRUE;
- }
- }
- else
-
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- {
- /* scale the glyph */
- if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
- {
- x_scale = loader->size->metrics->x_scale;
- y_scale = loader->size->metrics->y_scale;
-
- do_scale = TRUE;
- }
- }
-
- if ( do_scale )
- {
- for ( ; vec < limit; vec++ )
- {
- vec->x = FT_MulFix( vec->x, x_scale );
- vec->y = FT_MulFix( vec->y, y_scale );
- }
-
- loader->pp1 = outline->points[n_points - 4];
- loader->pp2 = outline->points[n_points - 3];
- loader->pp3 = outline->points[n_points - 2];
- loader->pp4 = outline->points[n_points - 1];
- }
- }
-
- if ( IS_HINTED( loader->load_flags ) )
- {
- loader->zone.n_points += 4;
-
- error = TT_Hint_Glyph( loader, 0 );
- }
-
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Process_Composite_Component */
- /* */
- /* <Description> */
- /* Once a composite component has been loaded, it needs to be */
- /* processed. Usually, this means transforming and translating. */
- /* */
- static FT_Error
- TT_Process_Composite_Component( TT_Loader loader,
- FT_SubGlyph subglyph,
- FT_UInt start_point,
- FT_UInt num_base_points )
- {
- FT_GlyphLoader gloader = loader->gloader;
- FT_Outline current;
- FT_Bool have_scale;
- FT_Pos x, y;
-
-
- current.points = gloader->base.outline.points +
- num_base_points;
- current.n_points = gloader->base.outline.n_points -
- (short)num_base_points;
-
- have_scale = FT_BOOL( subglyph->flags & ( WE_HAVE_A_SCALE |
- WE_HAVE_AN_XY_SCALE |
- WE_HAVE_A_2X2 ) );
-
- /* perform the transform required for this subglyph */
- if ( have_scale )
- FT_Outline_Transform( &current, &subglyph->transform );
-
- /* get offset */
- if ( !( subglyph->flags & ARGS_ARE_XY_VALUES ) )
- {
- FT_UInt num_points = (FT_UInt)gloader->base.outline.n_points;
- FT_UInt k = (FT_UInt)subglyph->arg1;
- FT_UInt l = (FT_UInt)subglyph->arg2;
- FT_Vector* p1;
- FT_Vector* p2;
-
-
- /* match l-th point of the newly loaded component to the k-th point */
- /* of the previously loaded components. */
-
- /* change to the point numbers used by our outline */
- k += start_point;
- l += num_base_points;
- if ( k >= num_base_points ||
- l >= num_points )
- return FT_THROW( Invalid_Composite );
-
- p1 = gloader->base.outline.points + k;
- p2 = gloader->base.outline.points + l;
-
- x = p1->x - p2->x;
- y = p1->y - p2->y;
- }
- else
- {
- x = subglyph->arg1;
- y = subglyph->arg2;
-
- if ( !x && !y )
- return FT_Err_Ok;
-
- /* Use a default value dependent on */
- /* TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED. This is useful for old */
- /* TT fonts which don't set the xxx_COMPONENT_OFFSET bit. */
-
- if ( have_scale &&
-#ifdef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
- !( subglyph->flags & UNSCALED_COMPONENT_OFFSET ) )
-#else
- ( subglyph->flags & SCALED_COMPONENT_OFFSET ) )
-#endif
- {
-
-#if 0
-
- /*******************************************************************/
- /* */
- /* This algorithm is what Apple documents. But it doesn't work. */
- /* */
- int a = subglyph->transform.xx > 0 ? subglyph->transform.xx
- : -subglyph->transform.xx;
- int b = subglyph->transform.yx > 0 ? subglyph->transform.yx
- : -subglyph->transform.yx;
- int c = subglyph->transform.xy > 0 ? subglyph->transform.xy
- : -subglyph->transform.xy;
- int d = subglyph->transform.yy > 0 ? subglyph->transform.yy
- : -subglyph->transform.yy;
- int m = a > b ? a : b;
- int n = c > d ? c : d;
-
-
- if ( a - b <= 33 && a - b >= -33 )
- m *= 2;
- if ( c - d <= 33 && c - d >= -33 )
- n *= 2;
- x = FT_MulFix( x, m );
- y = FT_MulFix( y, n );
-
-#else /* 1 */
-
- /*******************************************************************/
- /* */
- /* This algorithm is a guess and works much better than the above. */
- /* */
- FT_Fixed mac_xscale = FT_Hypot( subglyph->transform.xx,
- subglyph->transform.xy );
- FT_Fixed mac_yscale = FT_Hypot( subglyph->transform.yy,
- subglyph->transform.yx );
-
-
- x = FT_MulFix( x, mac_xscale );
- y = FT_MulFix( y, mac_yscale );
-
-#endif /* 1 */
-
- }
-
- if ( !( loader->load_flags & FT_LOAD_NO_SCALE ) )
- {
- FT_Fixed x_scale = loader->size->metrics->x_scale;
- FT_Fixed y_scale = loader->size->metrics->y_scale;
-
-
- x = FT_MulFix( x, x_scale );
- y = FT_MulFix( y, y_scale );
-
- if ( subglyph->flags & ROUND_XY_TO_GRID )
- {
- x = FT_PIX_ROUND( x );
- y = FT_PIX_ROUND( y );
- }
- }
- }
-
- if ( x || y )
- FT_Outline_Translate( &current, x, y );
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Process_Composite_Glyph */
- /* */
- /* <Description> */
- /* This is slightly different from TT_Process_Simple_Glyph, in that */
- /* its sole purpose is to hint the glyph. Thus this function is */
- /* only available when bytecode interpreter is enabled. */
- /* */
- static FT_Error
- TT_Process_Composite_Glyph( TT_Loader loader,
- FT_UInt start_point,
- FT_UInt start_contour )
- {
- FT_Error error;
- FT_Outline* outline;
- FT_UInt i;
-
-
- outline = &loader->gloader->base.outline;
-
- /* make room for phantom points */
- error = FT_GLYPHLOADER_CHECK_POINTS( loader->gloader,
- outline->n_points + 4,
- 0 );
- if ( error )
- return error;
-
- outline->points[outline->n_points ] = loader->pp1;
- outline->points[outline->n_points + 1] = loader->pp2;
- outline->points[outline->n_points + 2] = loader->pp3;
- outline->points[outline->n_points + 3] = loader->pp4;
-
- outline->tags[outline->n_points ] = 0;
- outline->tags[outline->n_points + 1] = 0;
- outline->tags[outline->n_points + 2] = 0;
- outline->tags[outline->n_points + 3] = 0;
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- {
- FT_Stream stream = loader->stream;
- FT_UShort n_ins, max_ins;
- FT_ULong tmp;
-
-
- /* TT_Load_Composite_Glyph only gives us the offset of instructions */
- /* so we read them here */
- if ( FT_STREAM_SEEK( loader->ins_pos ) ||
- FT_READ_USHORT( n_ins ) )
- return error;
-
- FT_TRACE5(( " Instructions size = %d\n", n_ins ));
-
- /* check it */
- max_ins = loader->face->max_profile.maxSizeOfInstructions;
- if ( n_ins > max_ins )
- {
- /* don't trust `maxSizeOfInstructions'; */
- /* only do a rough safety check */
- if ( (FT_Int)n_ins > loader->byte_len )
- {
- FT_TRACE1(( "TT_Process_Composite_Glyph:"
- " too many instructions (%d) for glyph with length %d\n",
- n_ins, loader->byte_len ));
- return FT_THROW( Too_Many_Hints );
- }
-
- tmp = loader->exec->glyphSize;
- error = Update_Max( loader->exec->memory,
- &tmp,
- sizeof ( FT_Byte ),
- (void*)&loader->exec->glyphIns,
- n_ins );
-
- loader->exec->glyphSize = (FT_UShort)tmp;
- if ( error )
- return error;
- }
- else if ( n_ins == 0 )
- return FT_Err_Ok;
-
- if ( FT_STREAM_READ( loader->exec->glyphIns, n_ins ) )
- return error;
-
- loader->glyph->control_data = loader->exec->glyphIns;
- loader->glyph->control_len = n_ins;
- }
-
-#endif
-
- tt_prepare_zone( &loader->zone, &loader->gloader->base,
- start_point, start_contour );
-
- /* Some points are likely touched during execution of */
- /* instructions on components. So let's untouch them. */
- for ( i = 0; i < loader->zone.n_points; i++ )
- loader->zone.tags[i] &= ~FT_CURVE_TAG_TOUCH_BOTH;
-
- loader->zone.n_points += 4;
-
- return TT_Hint_Glyph( loader, 1 );
- }
-
-
- /*
- * Calculate the phantom points
- *
- * Defining the right side bearing (rsb) as
- *
- * rsb = aw - (lsb + xmax - xmin)
- *
- * (with `aw' the advance width, `lsb' the left side bearing, and `xmin'
- * and `xmax' the glyph's minimum and maximum x value), the OpenType
- * specification defines the initial position of horizontal phantom points
- * as
- *
- * pp1 = (round(xmin - lsb), 0) ,
- * pp2 = (round(pp1 + aw), 0) .
- *
- * Note that the rounding to the grid (in the device space) is not
- * documented currently in the specification.
- *
- * However, the specification lacks the precise definition of vertical
- * phantom points. Greg Hitchcock provided the following explanation.
- *
- * - a `vmtx' table is present
- *
- * For any glyph, the minimum and maximum y values (`ymin' and `ymax')
- * are given in the `glyf' table, the top side bearing (tsb) and advance
- * height (ah) are given in the `vmtx' table. The bottom side bearing
- * (bsb) is then calculated as
- *
- * bsb = ah - (tsb + ymax - ymin) ,
- *
- * and the initial position of vertical phantom points is
- *
- * pp3 = (x, round(ymax + tsb)) ,
- * pp4 = (x, round(pp3 - ah)) .
- *
- * See below for value `x'.
- *
- * - no `vmtx' table in the font
- *
- * If there is an `OS/2' table, we set
- *
- * DefaultAscender = sTypoAscender ,
- * DefaultDescender = sTypoDescender ,
- *
- * otherwise we use data from the `hhea' table:
- *
- * DefaultAscender = Ascender ,
- * DefaultDescender = Descender .
- *
- * With these two variables we can now set
- *
- * ah = DefaultAscender - sDefaultDescender ,
- * tsb = DefaultAscender - yMax ,
- *
- * and proceed as if a `vmtx' table was present.
- *
- * Usually we have
- *
- * x = aw / 2 , (1)
- *
- * but there is one compatibility case where it can be set to
- *
- * x = -DefaultDescender -
- * ((DefaultAscender - DefaultDescender - aw) / 2) . (2)
- *
- * and another one with
- *
- * x = 0 . (3)
- *
- * In Windows, the history of those values is quite complicated,
- * depending on the hinting engine (that is, the graphics framework).
- *
- * framework from to formula
- * ----------------------------------------------------------
- * GDI Windows 98 current (1)
- * (Windows 2000 for NT)
- * GDI+ Windows XP Windows 7 (2)
- * GDI+ Windows 8 current (3)
- * DWrite Windows 7 current (3)
- *
- * For simplicity, FreeType uses (1) for grayscale subpixel hinting and
- * (3) for everything else.
- *
- */
- static void
- tt_loader_set_pp( TT_Loader loader )
- {
- FT_Bool subpixel_hinting = 0;
- FT_Bool grayscale = 0;
- FT_Bool use_aw_2 = 0;
-
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( loader->face );
-#endif
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
- {
- subpixel_hinting = loader->exec ? loader->exec->subpixel_hinting
- : 0;
- grayscale = loader->exec ? loader->exec->grayscale
- : 0;
- }
-#endif
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- if ( driver->interpreter_version == TT_INTERPRETER_VERSION_40 )
- {
- subpixel_hinting = loader->exec ? loader->exec->subpixel_hinting_lean
- : 0;
- grayscale = loader->exec ? loader->exec->grayscale_cleartype
- : 0;
- }
-#endif
-
- use_aw_2 = (FT_Bool)( subpixel_hinting && grayscale );
-
- loader->pp1.x = loader->bbox.xMin - loader->left_bearing;
- loader->pp1.y = 0;
- loader->pp2.x = loader->pp1.x + loader->advance;
- loader->pp2.y = 0;
-
- loader->pp3.x = use_aw_2 ? loader->advance / 2 : 0;
- loader->pp3.y = loader->bbox.yMax + loader->top_bearing;
- loader->pp4.x = use_aw_2 ? loader->advance / 2 : 0;
- loader->pp4.y = loader->pp3.y - loader->vadvance;
- }
-
-
- /* a utility function to retrieve i-th node from given FT_List */
- static FT_ListNode
- ft_list_get_node_at( FT_List list,
- FT_UInt idx )
- {
- FT_ListNode cur;
-
-
- if ( !list )
- return NULL;
-
- for ( cur = list->head; cur; cur = cur->next )
- {
- if ( !idx )
- return cur;
-
- idx--;
- }
-
- return NULL;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* load_truetype_glyph */
- /* */
- /* <Description> */
- /* Loads a given truetype glyph. Handles composites and uses a */
- /* TT_Loader object. */
- /* */
- static FT_Error
- load_truetype_glyph( TT_Loader loader,
- FT_UInt glyph_index,
- FT_UInt recurse_count,
- FT_Bool header_only )
- {
- FT_Error error = FT_Err_Ok;
- FT_Fixed x_scale, y_scale;
- FT_ULong offset;
- TT_Face face = loader->face;
- FT_GlyphLoader gloader = loader->gloader;
- FT_Bool opened_frame = 0;
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- FT_StreamRec inc_stream;
- FT_Data glyph_data;
- FT_Bool glyph_data_loaded = 0;
-#endif
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( recurse_count )
- FT_TRACE5(( " nesting level: %d\n", recurse_count ));
-#endif
-
- /* some fonts have an incorrect value of `maxComponentDepth' */
- if ( recurse_count > face->max_profile.maxComponentDepth )
- {
- FT_TRACE1(( "load_truetype_glyph: maxComponentDepth set to %d\n",
- recurse_count ));
- face->max_profile.maxComponentDepth = (FT_UShort)recurse_count;
- }
-
-#ifndef FT_CONFIG_OPTION_INCREMENTAL
- /* check glyph index */
- if ( glyph_index >= (FT_UInt)face->root.num_glyphs )
- {
- error = FT_THROW( Invalid_Glyph_Index );
- goto Exit;
- }
-#endif
-
- loader->glyph_index = glyph_index;
-
- if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
- {
- x_scale = loader->size->metrics->x_scale;
- y_scale = loader->size->metrics->y_scale;
- }
- else
- {
- x_scale = 0x10000L;
- y_scale = 0x10000L;
- }
-
- /* Set `offset' to the start of the glyph relative to the start of */
- /* the `glyf' table, and `byte_len' to the length of the glyph in */
- /* bytes. */
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
-
- /* If we are loading glyph data via the incremental interface, set */
- /* the loader stream to a memory stream reading the data returned */
- /* by the interface. */
- if ( face->root.internal->incremental_interface )
- {
- error = face->root.internal->incremental_interface->funcs->get_glyph_data(
- face->root.internal->incremental_interface->object,
- glyph_index, &glyph_data );
- if ( error )
- goto Exit;
-
- glyph_data_loaded = 1;
- offset = 0;
- loader->byte_len = glyph_data.length;
-
- FT_ZERO( &inc_stream );
- FT_Stream_OpenMemory( &inc_stream,
- glyph_data.pointer,
- (FT_ULong)glyph_data.length );
-
- loader->stream = &inc_stream;
- }
- else
-
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
-
- offset = tt_face_get_location( face, glyph_index,
- (FT_UInt*)&loader->byte_len );
-
- if ( loader->byte_len > 0 )
- {
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- /* for the incremental interface, `glyf_offset' is always zero */
- if ( !face->glyf_offset &&
- !face->root.internal->incremental_interface )
-#else
- if ( !face->glyf_offset )
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
- {
- FT_TRACE2(( "no `glyf' table but non-zero `loca' entry\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- error = face->access_glyph_frame( loader, glyph_index,
- face->glyf_offset + offset,
- (FT_UInt)loader->byte_len );
- if ( error )
- goto Exit;
-
- opened_frame = 1;
-
- /* read glyph header first */
- error = face->read_glyph_header( loader );
- if ( error )
- goto Exit;
-
- /* the metrics must be computed after loading the glyph header */
- /* since we need the glyph's `yMax' value in case the vertical */
- /* metrics must be emulated */
- error = tt_get_metrics( loader, glyph_index );
- if ( error )
- goto Exit;
-
- if ( header_only )
- goto Exit;
- }
-
- if ( loader->byte_len == 0 || loader->n_contours == 0 )
- {
- loader->bbox.xMin = 0;
- loader->bbox.xMax = 0;
- loader->bbox.yMin = 0;
- loader->bbox.yMax = 0;
-
- error = tt_get_metrics( loader, glyph_index );
- if ( error )
- goto Exit;
-
- if ( header_only )
- goto Exit;
-
- /* must initialize points before (possibly) overriding */
- /* glyph metrics from the incremental interface */
- tt_loader_set_pp( loader );
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- tt_get_metrics_incr_overrides( loader, glyph_index );
-#endif
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-
- if ( !loader->face->is_default_instance )
- {
- /* a small outline structure with four elements for */
- /* communication with `TT_Vary_Apply_Glyph_Deltas' */
- FT_Vector points[4];
- char tags[4] = { 1, 1, 1, 1 };
- short contours[4] = { 0, 1, 2, 3 };
- FT_Outline outline;
-
-
- points[0].x = loader->pp1.x;
- points[0].y = loader->pp1.y;
- points[1].x = loader->pp2.x;
- points[1].y = loader->pp2.y;
-
- points[2].x = loader->pp3.x;
- points[2].y = loader->pp3.y;
- points[3].x = loader->pp4.x;
- points[3].y = loader->pp4.y;
-
- outline.n_points = 4;
- outline.n_contours = 4;
- outline.points = points;
- outline.tags = tags;
- outline.contours = contours;
-
- /* this must be done before scaling */
- error = TT_Vary_Apply_Glyph_Deltas( loader->face,
- glyph_index,
- &outline,
- (FT_UInt)outline.n_points );
- if ( error )
- goto Exit;
-
- loader->pp1.x = points[0].x;
- loader->pp1.y = points[0].y;
- loader->pp2.x = points[1].x;
- loader->pp2.y = points[1].y;
-
- loader->pp3.x = points[2].x;
- loader->pp3.y = points[2].y;
- loader->pp4.x = points[3].x;
- loader->pp4.y = points[3].y;
-
-
- /* recalculate linear horizontal and vertical advances */
- /* if we don't have HVAR and VVAR, respectively */
- if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
- loader->linear = loader->pp2.x - loader->pp1.x;
- if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
- loader->vadvance = loader->pp4.x - loader->pp3.x;
- }
-
-#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
-
- /* scale phantom points, if necessary; */
- /* they get rounded in `TT_Hint_Glyph' */
- if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
- {
- loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale );
- loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale );
- /* pp1.y and pp2.y are always zero */
-
- loader->pp3.x = FT_MulFix( loader->pp3.x, x_scale );
- loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale );
- loader->pp4.x = FT_MulFix( loader->pp4.x, x_scale );
- loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale );
- }
-
- error = FT_Err_Ok;
- goto Exit;
- }
-
- /* must initialize phantom points before (possibly) overriding */
- /* glyph metrics from the incremental interface */
- tt_loader_set_pp( loader );
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- tt_get_metrics_incr_overrides( loader, glyph_index );
-#endif
-
- /***********************************************************************/
- /***********************************************************************/
- /***********************************************************************/
-
- /* if it is a simple glyph, load it */
-
- if ( loader->n_contours > 0 )
- {
- error = face->read_simple_glyph( loader );
- if ( error )
- goto Exit;
-
- /* all data have been read */
- face->forget_glyph_frame( loader );
- opened_frame = 0;
-
- error = TT_Process_Simple_Glyph( loader );
- if ( error )
- goto Exit;
-
- FT_GlyphLoader_Add( gloader );
- }
-
- /***********************************************************************/
- /***********************************************************************/
- /***********************************************************************/
-
- /* otherwise, load a composite! */
- else if ( loader->n_contours == -1 )
- {
- FT_Memory memory = face->root.memory;
-
- FT_UInt start_point;
- FT_UInt start_contour;
- FT_ULong ins_pos; /* position of composite instructions, if any */
-
- FT_ListNode node, node2;
-
-
- /*
- * We store the glyph index directly in the `node->data' pointer,
- * following the glib solution (cf. macro `GUINT_TO_POINTER') with a
- * double cast to make this portable. Note, however, that this needs
- * pointers with a width of at least 32 bits.
- */
-
-
- /* clear the nodes filled by sibling chains */
- node = ft_list_get_node_at( &loader->composites, recurse_count );
- for ( node2 = node; node2; node2 = node2->next )
- node2->data = (void*)ULONG_MAX;
-
- /* check whether we already have a composite glyph with this index */
- if ( FT_List_Find( &loader->composites,
- FT_UINT_TO_POINTER( glyph_index ) ) )
- {
- FT_TRACE1(( "TT_Load_Composite_Glyph:"
- " infinite recursion detected\n" ));
- error = FT_THROW( Invalid_Composite );
- goto Exit;
- }
-
- else if ( node )
- node->data = FT_UINT_TO_POINTER( glyph_index );
-
- else
- {
- if ( FT_NEW( node ) )
- goto Exit;
- node->data = FT_UINT_TO_POINTER( glyph_index );
- FT_List_Add( &loader->composites, node );
- }
-
- start_point = (FT_UInt)gloader->base.outline.n_points;
- start_contour = (FT_UInt)gloader->base.outline.n_contours;
-
- /* for each subglyph, read composite header */
- error = face->read_composite_glyph( loader );
- if ( error )
- goto Exit;
-
- /* store the offset of instructions */
- ins_pos = loader->ins_pos;
-
- /* all data we need are read */
- face->forget_glyph_frame( loader );
- opened_frame = 0;
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-
- if ( !face->is_default_instance )
- {
- short i, limit;
- FT_SubGlyph subglyph;
-
- FT_Outline outline;
- FT_Vector* points = NULL;
- char* tags = NULL;
- short* contours = NULL;
-
-
- limit = (short)gloader->current.num_subglyphs;
-
- /* construct an outline structure for */
- /* communication with `TT_Vary_Apply_Glyph_Deltas' */
- outline.n_points = (short)( gloader->current.num_subglyphs + 4 );
- outline.n_contours = outline.n_points;
-
- outline.points = NULL;
- outline.tags = NULL;
- outline.contours = NULL;
-
- if ( FT_NEW_ARRAY( points, outline.n_points ) ||
- FT_NEW_ARRAY( tags, outline.n_points ) ||
- FT_NEW_ARRAY( contours, outline.n_points ) )
- goto Exit1;
-
- subglyph = gloader->current.subglyphs;
-
- for ( i = 0; i < limit; i++, subglyph++ )
- {
- /* applying deltas for anchor points doesn't make sense, */
- /* but we don't have to specially check this since */
- /* unused delta values are zero anyways */
- points[i].x = subglyph->arg1;
- points[i].y = subglyph->arg2;
- tags[i] = 1;
- contours[i] = i;
- }
-
- points[i].x = loader->pp1.x;
- points[i].y = loader->pp1.y;
- tags[i] = 1;
- contours[i] = i;
-
- i++;
- points[i].x = loader->pp2.x;
- points[i].y = loader->pp2.y;
- tags[i] = 1;
- contours[i] = i;
-
- i++;
- points[i].x = loader->pp3.x;
- points[i].y = loader->pp3.y;
- tags[i] = 1;
- contours[i] = i;
-
- i++;
- points[i].x = loader->pp4.x;
- points[i].y = loader->pp4.y;
- tags[i] = 1;
- contours[i] = i;
-
- outline.points = points;
- outline.tags = tags;
- outline.contours = contours;
-
- /* this call provides additional offsets */
- /* for each component's translation */
- if ( FT_SET_ERROR( TT_Vary_Apply_Glyph_Deltas(
- face,
- glyph_index,
- &outline,
- (FT_UInt)outline.n_points ) ) )
- goto Exit1;
-
- subglyph = gloader->current.subglyphs;
-
- for ( i = 0; i < limit; i++, subglyph++ )
- {
- if ( subglyph->flags & ARGS_ARE_XY_VALUES )
- {
- subglyph->arg1 = (FT_Int16)points[i].x;
- subglyph->arg2 = (FT_Int16)points[i].y;
- }
- }
-
- loader->pp1.x = points[i + 0].x;
- loader->pp1.y = points[i + 0].y;
- loader->pp2.x = points[i + 1].x;
- loader->pp2.y = points[i + 1].y;
-
- loader->pp3.x = points[i + 2].x;
- loader->pp3.y = points[i + 2].y;
- loader->pp4.x = points[i + 3].x;
- loader->pp4.y = points[i + 3].y;
-
- /* recalculate linear horizontal and vertical advances */
- /* if we don't have HVAR and VVAR, respectively */
- if ( !( face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
- loader->linear = loader->pp2.x - loader->pp1.x;
- if ( !( face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
- loader->vadvance = loader->pp4.x - loader->pp3.x;
-
- Exit1:
- FT_FREE( outline.points );
- FT_FREE( outline.tags );
- FT_FREE( outline.contours );
-
- if ( error )
- goto Exit;
- }
-
-#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
-
- /* scale phantom points, if necessary; */
- /* they get rounded in `TT_Hint_Glyph' */
- if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
- {
- loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale );
- loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale );
- /* pp1.y and pp2.y are always zero */
-
- loader->pp3.x = FT_MulFix( loader->pp3.x, x_scale );
- loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale );
- loader->pp4.x = FT_MulFix( loader->pp4.x, x_scale );
- loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale );
- }
-
- /* if the flag FT_LOAD_NO_RECURSE is set, we return the subglyph */
- /* `as is' in the glyph slot (the client application will be */
- /* responsible for interpreting these data)... */
- if ( loader->load_flags & FT_LOAD_NO_RECURSE )
- {
- FT_GlyphLoader_Add( gloader );
- loader->glyph->format = FT_GLYPH_FORMAT_COMPOSITE;
-
- goto Exit;
- }
-
- /*********************************************************************/
- /*********************************************************************/
- /*********************************************************************/
-
- {
- FT_UInt n, num_base_points;
- FT_SubGlyph subglyph = NULL;
-
- FT_UInt num_points = start_point;
- FT_UInt num_subglyphs = gloader->current.num_subglyphs;
- FT_UInt num_base_subgs = gloader->base.num_subglyphs;
-
- FT_Stream old_stream = loader->stream;
- FT_Int old_byte_len = loader->byte_len;
-
-
- FT_GlyphLoader_Add( gloader );
-
- /* read each subglyph independently */
- for ( n = 0; n < num_subglyphs; n++ )
- {
- FT_Vector pp[4];
-
- FT_Int linear_hadvance;
- FT_Int linear_vadvance;
-
-
- /* Each time we call load_truetype_glyph in this loop, the */
- /* value of `gloader.base.subglyphs' can change due to table */
- /* reallocations. We thus need to recompute the subglyph */
- /* pointer on each iteration. */
- subglyph = gloader->base.subglyphs + num_base_subgs + n;
-
- pp[0] = loader->pp1;
- pp[1] = loader->pp2;
- pp[2] = loader->pp3;
- pp[3] = loader->pp4;
-
- linear_hadvance = loader->linear;
- linear_vadvance = loader->vadvance;
-
- num_base_points = (FT_UInt)gloader->base.outline.n_points;
-
- error = load_truetype_glyph( loader,
- (FT_UInt)subglyph->index,
- recurse_count + 1,
- FALSE );
- if ( error )
- goto Exit;
-
- /* restore subglyph pointer */
- subglyph = gloader->base.subglyphs + num_base_subgs + n;
-
- /* restore phantom points if necessary */
- if ( !( subglyph->flags & USE_MY_METRICS ) )
- {
- loader->pp1 = pp[0];
- loader->pp2 = pp[1];
- loader->pp3 = pp[2];
- loader->pp4 = pp[3];
-
- loader->linear = linear_hadvance;
- loader->vadvance = linear_vadvance;
- }
-
- num_points = (FT_UInt)gloader->base.outline.n_points;
-
- if ( num_points == num_base_points )
- continue;
-
- /* gloader->base.outline consists of three parts: */
- /* 0 -(1)-> start_point -(2)-> num_base_points -(3)-> n_points. */
- /* */
- /* (1): exists from the beginning */
- /* (2): components that have been loaded so far */
- /* (3): the newly loaded component */
- error = TT_Process_Composite_Component( loader,
- subglyph,
- start_point,
- num_base_points );
- if ( error )
- goto Exit;
- }
-
- loader->stream = old_stream;
- loader->byte_len = old_byte_len;
-
- /* process the glyph */
- loader->ins_pos = ins_pos;
- if ( IS_HINTED( loader->load_flags ) &&
-#ifdef TT_USE_BYTECODE_INTERPRETER
- subglyph->flags & WE_HAVE_INSTR &&
-#endif
- num_points > start_point )
- {
- error = TT_Process_Composite_Glyph( loader,
- start_point,
- start_contour );
- if ( error )
- goto Exit;
- }
- }
- }
- else
- {
- /* invalid composite count (negative but not -1) */
- error = FT_THROW( Invalid_Outline );
- goto Exit;
- }
-
- /***********************************************************************/
- /***********************************************************************/
- /***********************************************************************/
-
- Exit:
-
- if ( opened_frame )
- face->forget_glyph_frame( loader );
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
-
- if ( glyph_data_loaded )
- face->root.internal->incremental_interface->funcs->free_glyph_data(
- face->root.internal->incremental_interface->object,
- &glyph_data );
-
-#endif
-
- return error;
- }
-
-
- static FT_Error
- compute_glyph_metrics( TT_Loader loader,
- FT_UInt glyph_index )
- {
- TT_Face face = loader->face;
-#if defined TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY || \
- defined TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face );
-#endif
-
- FT_BBox bbox;
- FT_Fixed y_scale;
- TT_GlyphSlot glyph = loader->glyph;
- TT_Size size = loader->size;
-
-
- y_scale = 0x10000L;
- if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
- y_scale = size->metrics->y_scale;
-
- if ( glyph->format != FT_GLYPH_FORMAT_COMPOSITE )
- FT_Outline_Get_CBox( &glyph->outline, &bbox );
- else
- bbox = loader->bbox;
-
- /* get the device-independent horizontal advance; it is scaled later */
- /* by the base layer. */
- glyph->linearHoriAdvance = loader->linear;
-
- glyph->metrics.horiBearingX = bbox.xMin;
- glyph->metrics.horiBearingY = bbox.yMax;
- glyph->metrics.horiAdvance = loader->pp2.x - loader->pp1.x;
-
- /* Adjust advance width to the value contained in the hdmx table */
- /* unless FT_LOAD_COMPUTE_METRICS is set or backward compatibility */
- /* mode of the v40 interpreter is active. See `ttinterp.h' for */
- /* details on backward compatibility mode. */
- if (
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- !( driver->interpreter_version == TT_INTERPRETER_VERSION_40 &&
- ( loader->exec && loader->exec->backward_compatibility ) ) &&
-#endif
- !face->postscript.isFixedPitch &&
- IS_HINTED( loader->load_flags ) &&
- !( loader->load_flags & FT_LOAD_COMPUTE_METRICS ) )
- {
- FT_Byte* widthp;
-
-
- widthp = tt_face_get_device_metrics( face,
- size->metrics->x_ppem,
- glyph_index );
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-
- if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
- {
- FT_Bool ignore_x_mode;
-
-
- ignore_x_mode = FT_BOOL( FT_LOAD_TARGET_MODE( loader->load_flags ) !=
- FT_RENDER_MODE_MONO );
-
- if ( widthp &&
- ( ( ignore_x_mode && loader->exec->compatible_widths ) ||
- !ignore_x_mode ||
- SPH_OPTION_BITMAP_WIDTHS ) )
- glyph->metrics.horiAdvance = *widthp * 64;
- }
- else
-
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- {
- if ( widthp )
- glyph->metrics.horiAdvance = *widthp * 64;
- }
- }
-
- /* set glyph dimensions */
- glyph->metrics.width = SUB_LONG( bbox.xMax, bbox.xMin );
- glyph->metrics.height = SUB_LONG( bbox.yMax, bbox.yMin );
-
- /* Now take care of vertical metrics. In the case where there is */
- /* no vertical information within the font (relatively common), */
- /* create some metrics manually */
- {
- FT_Pos top; /* scaled vertical top side bearing */
- FT_Pos advance; /* scaled vertical advance height */
-
-
- /* Get the unscaled top bearing and advance height. */
- if ( face->vertical_info &&
- face->vertical.number_Of_VMetrics > 0 )
- {
- top = (FT_Short)FT_DivFix( loader->pp3.y - bbox.yMax,
- y_scale );
-
- if ( loader->pp3.y <= loader->pp4.y )
- advance = 0;
- else
- advance = (FT_UShort)FT_DivFix( loader->pp3.y - loader->pp4.y,
- y_scale );
- }
- else
- {
- FT_Pos height;
-
-
- /* XXX Compute top side bearing and advance height in */
- /* Get_VMetrics instead of here. */
-
- /* NOTE: The OS/2 values are the only `portable' ones, */
- /* which is why we use them, if there is an OS/2 */
- /* table in the font. Otherwise, we use the */
- /* values defined in the horizontal header. */
-
- height = (FT_Short)FT_DivFix( SUB_LONG( bbox.yMax,
- bbox.yMin ),
- y_scale );
- if ( face->os2.version != 0xFFFFU )
- advance = (FT_Pos)( face->os2.sTypoAscender -
- face->os2.sTypoDescender );
- else
- advance = (FT_Pos)( face->horizontal.Ascender -
- face->horizontal.Descender );
-
- top = ( advance - height ) / 2;
- }
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- {
- FT_Incremental_InterfaceRec* incr;
- FT_Incremental_MetricsRec incr_metrics;
- FT_Error error;
-
-
- incr = face->root.internal->incremental_interface;
-
- /* If this is an incrementally loaded font see if there are */
- /* overriding metrics for this glyph. */
- if ( incr && incr->funcs->get_glyph_metrics )
- {
- incr_metrics.bearing_x = 0;
- incr_metrics.bearing_y = top;
- incr_metrics.advance = advance;
-
- error = incr->funcs->get_glyph_metrics( incr->object,
- glyph_index,
- TRUE,
- &incr_metrics );
- if ( error )
- return error;
-
- top = incr_metrics.bearing_y;
- advance = incr_metrics.advance;
- }
- }
-
- /* GWW: Do vertical metrics get loaded incrementally too? */
-
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
-
- glyph->linearVertAdvance = advance;
-
- /* scale the metrics */
- if ( !( loader->load_flags & FT_LOAD_NO_SCALE ) )
- {
- top = FT_MulFix( top, y_scale );
- advance = FT_MulFix( advance, y_scale );
- }
-
- /* XXX: for now, we have no better algorithm for the lsb, but it */
- /* should work fine. */
- /* */
- glyph->metrics.vertBearingX = glyph->metrics.horiBearingX -
- glyph->metrics.horiAdvance / 2;
- glyph->metrics.vertBearingY = top;
- glyph->metrics.vertAdvance = advance;
- }
-
- return 0;
- }
-
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-
- static FT_Error
- load_sbit_image( TT_Size size,
- TT_GlyphSlot glyph,
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- TT_Face face;
- SFNT_Service sfnt;
- FT_Stream stream;
- FT_Error error;
- TT_SBit_MetricsRec sbit_metrics;
-
-
- face = (TT_Face)glyph->face;
- sfnt = (SFNT_Service)face->sfnt;
- stream = face->root.stream;
-
- error = sfnt->load_sbit_image( face,
- size->strike_index,
- glyph_index,
- (FT_UInt)load_flags,
- stream,
- &glyph->bitmap,
- &sbit_metrics );
- if ( !error )
- {
- glyph->outline.n_points = 0;
- glyph->outline.n_contours = 0;
-
- glyph->metrics.width = (FT_Pos)sbit_metrics.width * 64;
- glyph->metrics.height = (FT_Pos)sbit_metrics.height * 64;
-
- glyph->metrics.horiBearingX = (FT_Pos)sbit_metrics.horiBearingX * 64;
- glyph->metrics.horiBearingY = (FT_Pos)sbit_metrics.horiBearingY * 64;
- glyph->metrics.horiAdvance = (FT_Pos)sbit_metrics.horiAdvance * 64;
-
- glyph->metrics.vertBearingX = (FT_Pos)sbit_metrics.vertBearingX * 64;
- glyph->metrics.vertBearingY = (FT_Pos)sbit_metrics.vertBearingY * 64;
- glyph->metrics.vertAdvance = (FT_Pos)sbit_metrics.vertAdvance * 64;
-
- glyph->format = FT_GLYPH_FORMAT_BITMAP;
-
- if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
- {
- glyph->bitmap_left = sbit_metrics.vertBearingX;
- glyph->bitmap_top = sbit_metrics.vertBearingY;
- }
- else
- {
- glyph->bitmap_left = sbit_metrics.horiBearingX;
- glyph->bitmap_top = sbit_metrics.horiBearingY;
- }
- }
-
- return error;
- }
-
-#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
-
-
- static FT_Error
- tt_loader_init( TT_Loader loader,
- TT_Size size,
- TT_GlyphSlot glyph,
- FT_Int32 load_flags,
- FT_Bool glyf_table_only )
- {
- TT_Face face;
- FT_Stream stream;
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- FT_Error error;
- FT_Bool pedantic = FT_BOOL( load_flags & FT_LOAD_PEDANTIC );
-#if defined TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY || \
- defined TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( (TT_Face)glyph->face );
-#endif
-#endif
-
-
- face = (TT_Face)glyph->face;
- stream = face->root.stream;
-
- FT_ZERO( loader );
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- /* load execution context */
- if ( IS_HINTED( load_flags ) && !glyf_table_only )
- {
- TT_ExecContext exec;
- FT_Bool grayscale = TRUE;
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- FT_Bool subpixel_hinting_lean;
- FT_Bool grayscale_cleartype;
-#endif
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- FT_Bool subpixel_hinting = FALSE;
-
-#if 0
- /* not used yet */
- FT_Bool compatible_widths;
- FT_Bool symmetrical_smoothing;
- FT_Bool bgr;
- FT_Bool vertical_lcd;
- FT_Bool subpixel_positioned;
- FT_Bool gray_cleartype;
-#endif
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- FT_Bool reexecute = FALSE;
-
-
- if ( size->bytecode_ready < 0 || size->cvt_ready < 0 )
- {
- error = tt_size_ready_bytecode( size, pedantic );
- if ( error )
- return error;
- }
- else if ( size->bytecode_ready )
- return size->bytecode_ready;
- else if ( size->cvt_ready )
- return size->cvt_ready;
-
- /* query new execution context */
- exec = size->context;
- if ( !exec )
- return FT_THROW( Could_Not_Find_Context );
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- if ( driver->interpreter_version == TT_INTERPRETER_VERSION_40 )
- {
- subpixel_hinting_lean =
- FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) !=
- FT_RENDER_MODE_MONO );
- grayscale_cleartype =
- FT_BOOL( subpixel_hinting_lean &&
- !( ( load_flags &
- FT_LOAD_TARGET_LCD ) ||
- ( load_flags &
- FT_LOAD_TARGET_LCD_V ) ) );
- exec->vertical_lcd_lean =
- FT_BOOL( subpixel_hinting_lean &&
- ( load_flags &
- FT_LOAD_TARGET_LCD_V ) );
- }
- else
- {
- subpixel_hinting_lean = FALSE;
- grayscale_cleartype = FALSE;
- exec->vertical_lcd_lean = FALSE;
- }
-#endif
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-
- if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
- {
- subpixel_hinting = FT_BOOL( ( FT_LOAD_TARGET_MODE( load_flags ) !=
- FT_RENDER_MODE_MONO ) &&
- SPH_OPTION_SET_SUBPIXEL );
-
- if ( subpixel_hinting )
- grayscale = FALSE;
- else if ( SPH_OPTION_SET_GRAYSCALE )
- {
- grayscale = TRUE;
- subpixel_hinting = FALSE;
- }
- else
- grayscale = FALSE;
-
- if ( FT_IS_TRICKY( glyph->face ) )
- subpixel_hinting = FALSE;
-
- exec->ignore_x_mode = subpixel_hinting || grayscale;
- exec->rasterizer_version = SPH_OPTION_SET_RASTERIZER_VERSION;
- if ( exec->sph_tweak_flags & SPH_TWEAK_RASTERIZER_35 )
- exec->rasterizer_version = TT_INTERPRETER_VERSION_35;
-
-#if 1
- exec->compatible_widths = SPH_OPTION_SET_COMPATIBLE_WIDTHS;
- exec->symmetrical_smoothing = TRUE;
- exec->bgr = FALSE;
- exec->vertical_lcd = FALSE;
- exec->subpixel_positioned = TRUE;
- exec->gray_cleartype = FALSE;
-#else /* 0 */
- exec->compatible_widths =
- FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) !=
- TT_LOAD_COMPATIBLE_WIDTHS );
- exec->symmetrical_smoothing =
- FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) !=
- TT_LOAD_SYMMETRICAL_SMOOTHING );
- exec->bgr =
- FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) !=
- TT_LOAD_BGR );
- exec->vertical_lcd =
- FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) !=
- TT_LOAD_VERTICAL_LCD );
- exec->subpixel_positioned =
- FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) !=
- TT_LOAD_SUBPIXEL_POSITIONED );
- exec->gray_cleartype =
- FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) !=
- TT_LOAD_GRAY_CLEARTYPE );
-#endif /* 0 */
-
- }
- else
-
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- if ( driver->interpreter_version == TT_INTERPRETER_VERSION_40 )
- grayscale = FT_BOOL( !subpixel_hinting_lean &&
- FT_LOAD_TARGET_MODE( load_flags ) !=
- FT_RENDER_MODE_MONO );
- else
-#endif
- grayscale = FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) !=
- FT_RENDER_MODE_MONO );
-
- error = TT_Load_Context( exec, face, size );
- if ( error )
- return error;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-
- if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
- {
- /* a change from mono to subpixel rendering (and vice versa) */
- /* requires a re-execution of the CVT program */
- if ( subpixel_hinting != exec->subpixel_hinting )
- {
- FT_TRACE4(( "tt_loader_init: subpixel hinting change,"
- " re-executing `prep' table\n" ));
-
- exec->subpixel_hinting = subpixel_hinting;
- reexecute = TRUE;
- }
-
- /* a change from mono to grayscale rendering (and vice versa) */
- /* requires a re-execution of the CVT program */
- if ( grayscale != exec->grayscale )
- {
- FT_TRACE4(( "tt_loader_init: grayscale hinting change,"
- " re-executing `prep' table\n" ));
-
- exec->grayscale = grayscale;
- reexecute = TRUE;
- }
- }
- else
-
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- {
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- if ( driver->interpreter_version == TT_INTERPRETER_VERSION_40 )
- {
- /* a change from mono to subpixel rendering (and vice versa) */
- /* requires a re-execution of the CVT program */
- if ( subpixel_hinting_lean != exec->subpixel_hinting_lean )
- {
- FT_TRACE4(( "tt_loader_init: subpixel hinting change,"
- " re-executing `prep' table\n" ));
-
- exec->subpixel_hinting_lean = subpixel_hinting_lean;
- reexecute = TRUE;
- }
-
- /* a change from colored to grayscale subpixel rendering (and */
- /* vice versa) requires a re-execution of the CVT program */
- if ( grayscale_cleartype != exec->grayscale_cleartype )
- {
- FT_TRACE4(( "tt_loader_init: grayscale subpixel hinting change,"
- " re-executing `prep' table\n" ));
-
- exec->grayscale_cleartype = grayscale_cleartype;
- reexecute = TRUE;
- }
- }
-#endif
-
- /* a change from mono to grayscale rendering (and vice versa) */
- /* requires a re-execution of the CVT program */
- if ( grayscale != exec->grayscale )
- {
- FT_TRACE4(( "tt_loader_init: grayscale hinting change,"
- " re-executing `prep' table\n" ));
-
- exec->grayscale = grayscale;
- reexecute = TRUE;
- }
- }
-
- if ( reexecute )
- {
- FT_UInt i;
-
-
- for ( i = 0; i < size->cvt_size; i++ )
- size->cvt[i] = FT_MulFix( face->cvt[i], size->ttmetrics.scale );
- error = tt_size_run_prep( size, pedantic );
- if ( error )
- return error;
- }
-
- /* check whether the cvt program has disabled hinting */
- if ( exec->GS.instruct_control & 1 )
- load_flags |= FT_LOAD_NO_HINTING;
-
- /* load default graphics state -- if needed */
- if ( exec->GS.instruct_control & 2 )
- exec->GS = tt_default_graphics_state;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- /* check whether we have a font hinted for ClearType -- */
- /* note that this flag can also be modified in a glyph's bytecode */
- if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 &&
- exec->GS.instruct_control & 4 )
- exec->ignore_x_mode = 0;
-#endif
-
- exec->pedantic_hinting = FT_BOOL( load_flags & FT_LOAD_PEDANTIC );
- loader->exec = exec;
- loader->instructions = exec->glyphIns;
- }
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
- /* get face's glyph loader */
- if ( !glyf_table_only )
- {
- FT_GlyphLoader gloader = glyph->internal->loader;
-
-
- FT_GlyphLoader_Rewind( gloader );
- loader->gloader = gloader;
- }
-
- loader->load_flags = (FT_ULong)load_flags;
-
- loader->face = face;
- loader->size = size;
- loader->glyph = (FT_GlyphSlot)glyph;
- loader->stream = stream;
-
- loader->composites.head = NULL;
- loader->composites.tail = NULL;
-
- return FT_Err_Ok;
- }
-
-
- static void
- tt_loader_done( TT_Loader loader )
- {
- FT_List_Finalize( &loader->composites,
- NULL,
- loader->face->root.memory,
- NULL );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Load_Glyph */
- /* */
- /* <Description> */
- /* A function used to load a single glyph within a given glyph slot, */
- /* for a given size. */
- /* */
- /* <Input> */
- /* glyph :: A handle to a target slot object where the glyph */
- /* will be loaded. */
- /* */
- /* size :: A handle to the source face size at which the glyph */
- /* must be scaled/loaded. */
- /* */
- /* glyph_index :: The index of the glyph in the font file. */
- /* */
- /* load_flags :: A flag indicating what to load for this glyph. The */
- /* FT_LOAD_XXX constants can be used to control the */
- /* glyph loading process (e.g., whether the outline */
- /* should be scaled, whether to load bitmaps or not, */
- /* whether to hint the outline, etc). */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- TT_Load_Glyph( TT_Size size,
- TT_GlyphSlot glyph,
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- FT_Error error;
- TT_LoaderRec loader;
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#define IS_DEFAULT_INSTANCE ( ( (TT_Face)glyph->face )->is_default_instance )
-#else
-#define IS_DEFAULT_INSTANCE 1
-#endif
-
-
- FT_TRACE1(( "TT_Load_Glyph: glyph index %d\n", glyph_index ));
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-
- /* try to load embedded bitmap (if any) */
- if ( size->strike_index != 0xFFFFFFFFUL &&
- ( load_flags & FT_LOAD_NO_BITMAP ) == 0 &&
- IS_DEFAULT_INSTANCE )
- {
- error = load_sbit_image( size, glyph, glyph_index, load_flags );
- if ( error )
- {
- /* return error if font is not scalable */
- if ( !FT_IS_SCALABLE( glyph->face ) )
- return error;
- }
- else
- {
- if ( FT_IS_SCALABLE( glyph->face ) )
- {
- /* for the bbox we need the header only */
- (void)tt_loader_init( &loader, size, glyph, load_flags, TRUE );
- (void)load_truetype_glyph( &loader, glyph_index, 0, TRUE );
- tt_loader_done( &loader );
- glyph->linearHoriAdvance = loader.linear;
- glyph->linearVertAdvance = loader.vadvance;
-
- /* sanity checks: if `xxxAdvance' in the sbit metric */
- /* structure isn't set, use `linearXXXAdvance' */
- if ( !glyph->metrics.horiAdvance && glyph->linearHoriAdvance )
- glyph->metrics.horiAdvance =
- FT_MulFix( glyph->linearHoriAdvance,
- size->metrics->x_scale );
- if ( !glyph->metrics.vertAdvance && glyph->linearVertAdvance )
- glyph->metrics.vertAdvance =
- FT_MulFix( glyph->linearVertAdvance,
- size->metrics->y_scale );
- }
-
- return FT_Err_Ok;
- }
- }
-
-#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
-
- /* if FT_LOAD_NO_SCALE is not set, `ttmetrics' must be valid */
- if ( !( load_flags & FT_LOAD_NO_SCALE ) && !size->ttmetrics.valid )
- {
- error = FT_THROW( Invalid_Size_Handle );
- goto Exit;
- }
-
- if ( load_flags & FT_LOAD_SBITS_ONLY )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- error = tt_loader_init( &loader, size, glyph, load_flags, FALSE );
- if ( error )
- goto Exit;
-
- glyph->format = FT_GLYPH_FORMAT_OUTLINE;
- glyph->num_subglyphs = 0;
- glyph->outline.flags = 0;
-
- /* main loading loop */
- error = load_truetype_glyph( &loader, glyph_index, 0, FALSE );
- if ( !error )
- {
- if ( glyph->format == FT_GLYPH_FORMAT_COMPOSITE )
- {
- glyph->num_subglyphs = loader.gloader->base.num_subglyphs;
- glyph->subglyphs = loader.gloader->base.subglyphs;
- }
- else
- {
- glyph->outline = loader.gloader->base.outline;
- glyph->outline.flags &= ~FT_OUTLINE_SINGLE_PASS;
-
- /* Translate array so that (0,0) is the glyph's origin. Note */
- /* that this behaviour is independent on the value of bit 1 of */
- /* the `flags' field in the `head' table -- at least major */
- /* applications like Acroread indicate that. */
- if ( loader.pp1.x )
- FT_Outline_Translate( &glyph->outline, -loader.pp1.x, 0 );
- }
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- if ( IS_HINTED( load_flags ) )
- {
- if ( loader.exec->GS.scan_control )
- {
- /* convert scan conversion mode to FT_OUTLINE_XXX flags */
- switch ( loader.exec->GS.scan_type )
- {
- case 0: /* simple drop-outs including stubs */
- glyph->outline.flags |= FT_OUTLINE_INCLUDE_STUBS;
- break;
- case 1: /* simple drop-outs excluding stubs */
- /* nothing; it's the default rendering mode */
- break;
- case 4: /* smart drop-outs including stubs */
- glyph->outline.flags |= FT_OUTLINE_SMART_DROPOUTS |
- FT_OUTLINE_INCLUDE_STUBS;
- break;
- case 5: /* smart drop-outs excluding stubs */
- glyph->outline.flags |= FT_OUTLINE_SMART_DROPOUTS;
- break;
-
- default: /* no drop-out control */
- glyph->outline.flags |= FT_OUTLINE_IGNORE_DROPOUTS;
- break;
- }
- }
- else
- glyph->outline.flags |= FT_OUTLINE_IGNORE_DROPOUTS;
- }
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
- error = compute_glyph_metrics( &loader, glyph_index );
- }
-
- tt_loader_done( &loader );
-
- /* Set the `high precision' bit flag. */
- /* This is _critical_ to get correct output for monochrome */
- /* TrueType glyphs at all sizes using the bytecode interpreter. */
- /* */
- if ( !( load_flags & FT_LOAD_NO_SCALE ) &&
- size->metrics->y_ppem < 24 )
- glyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION;
-
- Exit:
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( error )
- FT_TRACE1(( " failed (error code 0x%x)\n",
- error ));
-#endif
-
- return error;
- }
-
-
-/* END */
diff --git a/src/truetype/ttgload.h b/src/truetype/ttgload.h
deleted file mode 100644
index 1dd6c841d..000000000
--- a/src/truetype/ttgload.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttgload.h */
-/* */
-/* TrueType Glyph Loader (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTGLOAD_H_
-#define TTGLOAD_H_
-
-
-#include <ft2build.h>
-#include "ttobjs.h"
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-#include "ttinterp.h"
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( void )
- TT_Init_Glyph_Loading( TT_Face face );
-
- FT_LOCAL( void )
- TT_Get_HMetrics( TT_Face face,
- FT_UInt idx,
- FT_Short* lsb,
- FT_UShort* aw );
-
- FT_LOCAL( void )
- TT_Get_VMetrics( TT_Face face,
- FT_UInt idx,
- FT_Pos yMax,
- FT_Short* tsb,
- FT_UShort* ah );
-
- FT_LOCAL( FT_Error )
- TT_Load_Glyph( TT_Size size,
- TT_GlyphSlot glyph,
- FT_UInt glyph_index,
- FT_Int32 load_flags );
-
-
-FT_END_HEADER
-
-#endif /* TTGLOAD_H_ */
-
-
-/* END */
diff --git a/src/truetype/ttgxvar.c b/src/truetype/ttgxvar.c
deleted file mode 100644
index f2049796d..000000000
--- a/src/truetype/ttgxvar.c
+++ /dev/null
@@ -1,3741 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttgxvar.c */
-/* */
-/* TrueType GX Font Variation loader */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, Werner Lemberg, and George Williams. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Apple documents the `fvar', `gvar', `cvar', and `avar' tables at */
- /* */
- /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6[fgca]var.html */
- /* */
- /* The documentation for `gvar' is not intelligible; `cvar' refers you */
- /* to `gvar' and is thus also incomprehensible. */
- /* */
- /* The documentation for `avar' appears correct, but Apple has no fonts */
- /* with an `avar' table, so it is hard to test. */
- /* */
- /* Many thanks to John Jenkins (at Apple) in figuring this out. */
- /* */
- /* */
- /* Apple's `kern' table has some references to tuple indices, but as */
- /* there is no indication where these indices are defined, nor how to */
- /* interpolate the kerning values (different tuples have different */
- /* classes) this issue is ignored. */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_TRUETYPE_IDS_H
-#include FT_MULTIPLE_MASTERS_H
-#include FT_LIST_H
-
-#include "ttpload.h"
-#include "ttgxvar.h"
-
-#include "tterrors.h"
-
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-
-
-#define FT_Stream_FTell( stream ) \
- (FT_ULong)( (stream)->cursor - (stream)->base )
-#define FT_Stream_SeekSet( stream, off ) \
- ( (stream)->cursor = (stream)->base + (off) )
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttgxvar
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Internal Routines *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* The macro ALL_POINTS is used in `ft_var_readpackedpoints'. It */
- /* indicates that there is a delta for every point without needing to */
- /* enumerate all of them. */
- /* */
-
- /* ensure that value `0' has the same width as a pointer */
-#define ALL_POINTS (FT_UShort*)~(FT_PtrDist)0
-
-
-#define GX_PT_POINTS_ARE_WORDS 0x80U
-#define GX_PT_POINT_RUN_COUNT_MASK 0x7FU
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_var_readpackedpoints */
- /* */
- /* <Description> */
- /* Read a set of points to which the following deltas will apply. */
- /* Points are packed with a run length encoding. */
- /* */
- /* <Input> */
- /* stream :: The data stream. */
- /* */
- /* size :: The size of the table holding the data. */
- /* */
- /* <Output> */
- /* point_cnt :: The number of points read. A zero value means that */
- /* all points in the glyph will be affected, without */
- /* enumerating them individually. */
- /* */
- /* <Return> */
- /* An array of FT_UShort containing the affected points or the */
- /* special value ALL_POINTS. */
- /* */
- static FT_UShort*
- ft_var_readpackedpoints( FT_Stream stream,
- FT_ULong size,
- FT_UInt *point_cnt )
- {
- FT_UShort *points = NULL;
- FT_UInt n;
- FT_UInt runcnt;
- FT_UInt i, j;
- FT_UShort first;
- FT_Memory memory = stream->memory;
- FT_Error error = FT_Err_Ok;
-
- FT_UNUSED( error );
-
-
- *point_cnt = 0;
-
- n = FT_GET_BYTE();
- if ( n == 0 )
- return ALL_POINTS;
-
- if ( n & GX_PT_POINTS_ARE_WORDS )
- {
- n &= GX_PT_POINT_RUN_COUNT_MASK;
- n <<= 8;
- n |= FT_GET_BYTE();
- }
-
- if ( n > size )
- {
- FT_TRACE1(( "ft_var_readpackedpoints: number of points too large\n" ));
- return NULL;
- }
-
- /* in the nested loops below we increase `i' twice; */
- /* it is faster to simply allocate one more slot */
- /* than to add another test within the loop */
- if ( FT_NEW_ARRAY( points, n + 1 ) )
- return NULL;
-
- *point_cnt = n;
-
- first = 0;
- i = 0;
- while ( i < n )
- {
- runcnt = FT_GET_BYTE();
- if ( runcnt & GX_PT_POINTS_ARE_WORDS )
- {
- runcnt &= GX_PT_POINT_RUN_COUNT_MASK;
- first += FT_GET_USHORT();
- points[i++] = first;
-
- /* first point not included in run count */
- for ( j = 0; j < runcnt; j++ )
- {
- first += FT_GET_USHORT();
- points[i++] = first;
- if ( i >= n )
- break;
- }
- }
- else
- {
- first += FT_GET_BYTE();
- points[i++] = first;
-
- for ( j = 0; j < runcnt; j++ )
- {
- first += FT_GET_BYTE();
- points[i++] = first;
- if ( i >= n )
- break;
- }
- }
- }
-
- return points;
- }
-
-
-#define GX_DT_DELTAS_ARE_ZERO 0x80U
-#define GX_DT_DELTAS_ARE_WORDS 0x40U
-#define GX_DT_DELTA_RUN_COUNT_MASK 0x3FU
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_var_readpackeddeltas */
- /* */
- /* <Description> */
- /* Read a set of deltas. These are packed slightly differently than */
- /* points. In particular there is no overall count. */
- /* */
- /* <Input> */
- /* stream :: The data stream. */
- /* */
- /* size :: The size of the table holding the data. */
- /* */
- /* delta_cnt :: The number of deltas to be read. */
- /* */
- /* <Return> */
- /* An array of FT_Short containing the deltas for the affected */
- /* points. (This only gets the deltas for one dimension. It will */
- /* generally be called twice, once for x, once for y. When used in */
- /* cvt table, it will only be called once.) */
- /* */
- static FT_Short*
- ft_var_readpackeddeltas( FT_Stream stream,
- FT_ULong size,
- FT_UInt delta_cnt )
- {
- FT_Short *deltas = NULL;
- FT_UInt runcnt, cnt;
- FT_UInt i, j;
- FT_Memory memory = stream->memory;
- FT_Error error = FT_Err_Ok;
-
- FT_UNUSED( error );
-
-
- if ( delta_cnt > size )
- {
- FT_TRACE1(( "ft_var_readpackeddeltas: number of points too large\n" ));
- return NULL;
- }
-
- if ( FT_NEW_ARRAY( deltas, delta_cnt ) )
- return NULL;
-
- i = 0;
- while ( i < delta_cnt )
- {
- runcnt = FT_GET_BYTE();
- cnt = runcnt & GX_DT_DELTA_RUN_COUNT_MASK;
-
- if ( runcnt & GX_DT_DELTAS_ARE_ZERO )
- {
- /* `runcnt' zeroes get added */
- for ( j = 0; j <= cnt && i < delta_cnt; j++ )
- deltas[i++] = 0;
- }
- else if ( runcnt & GX_DT_DELTAS_ARE_WORDS )
- {
- /* `runcnt' shorts from the stack */
- for ( j = 0; j <= cnt && i < delta_cnt; j++ )
- deltas[i++] = FT_GET_SHORT();
- }
- else
- {
- /* `runcnt' signed bytes from the stack */
- for ( j = 0; j <= cnt && i < delta_cnt; j++ )
- deltas[i++] = FT_GET_CHAR();
- }
-
- if ( j <= cnt )
- {
- /* bad format */
- FT_FREE( deltas );
- return NULL;
- }
- }
-
- return deltas;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_var_load_avar */
- /* */
- /* <Description> */
- /* Parse the `avar' table if present. It need not be, so we return */
- /* nothing. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* */
- static void
- ft_var_load_avar( TT_Face face )
- {
- FT_Stream stream = FT_FACE_STREAM( face );
- FT_Memory memory = stream->memory;
- GX_Blend blend = face->blend;
- GX_AVarSegment segment;
- FT_Error error = FT_Err_Ok;
- FT_Long version;
- FT_Long axisCount;
- FT_Int i, j;
- FT_ULong table_len;
-
- FT_UNUSED( error );
-
-
- FT_TRACE2(( "AVAR " ));
-
- blend->avar_loaded = TRUE;
- error = face->goto_table( face, TTAG_avar, stream, &table_len );
- if ( error )
- {
- FT_TRACE2(( "is missing\n" ));
- return;
- }
-
- if ( FT_FRAME_ENTER( table_len ) )
- return;
-
- version = FT_GET_LONG();
- axisCount = FT_GET_LONG();
-
- if ( version != 0x00010000L )
- {
- FT_TRACE2(( "bad table version\n" ));
- goto Exit;
- }
-
- FT_TRACE2(( "loaded\n" ));
-
- if ( axisCount != (FT_Long)blend->mmvar->num_axis )
- {
- FT_TRACE2(( "ft_var_load_avar: number of axes in `avar' and `fvar'\n"
- " table are different\n" ));
- goto Exit;
- }
-
- if ( FT_NEW_ARRAY( blend->avar_segment, axisCount ) )
- goto Exit;
-
- segment = &blend->avar_segment[0];
- for ( i = 0; i < axisCount; i++, segment++ )
- {
- FT_TRACE5(( " axis %d:\n", i ));
-
- segment->pairCount = FT_GET_USHORT();
- if ( (FT_ULong)segment->pairCount * 4 > table_len ||
- FT_NEW_ARRAY( segment->correspondence, segment->pairCount ) )
- {
- /* Failure. Free everything we have done so far. We must do */
- /* it right now since loading the `avar' table is optional. */
-
- for ( j = i - 1; j >= 0; j-- )
- FT_FREE( blend->avar_segment[j].correspondence );
-
- FT_FREE( blend->avar_segment );
- blend->avar_segment = NULL;
- goto Exit;
- }
-
- for ( j = 0; j < segment->pairCount; j++ )
- {
- /* convert to Fixed */
- segment->correspondence[j].fromCoord = FT_GET_SHORT() * 4;
- segment->correspondence[j].toCoord = FT_GET_SHORT() * 4;
-
- FT_TRACE5(( " mapping %.5f to %.5f\n",
- segment->correspondence[j].fromCoord / 65536.0,
- segment->correspondence[j].toCoord / 65536.0 ));
- }
-
- FT_TRACE5(( "\n" ));
- }
-
- Exit:
- FT_FRAME_EXIT();
- }
-
-
- /* some macros we need */
- #define FT_FIXED_ONE ( (FT_Fixed)0x10000 )
-
- #define FT_fdot14ToFixed( x ) \
- ( (FT_Fixed)( (FT_ULong)(x) << 2 ) )
- #define FT_intToFixed( i ) \
- ( (FT_Fixed)( (FT_ULong)(i) << 16 ) )
- #define FT_fixedToInt( x ) \
- ( (FT_Short)( ( (FT_UInt32)(x) + 0x8000U ) >> 16 ) )
-
-
- static FT_Error
- ft_var_load_item_variation_store( TT_Face face,
- FT_ULong offset,
- GX_ItemVarStore itemStore )
- {
- FT_Stream stream = FT_FACE_STREAM( face );
- FT_Memory memory = stream->memory;
-
- FT_Error error;
- FT_UShort format;
- FT_ULong region_offset;
- FT_UInt i, j, k;
- FT_UInt shortDeltaCount;
-
- GX_Blend blend = face->blend;
- GX_ItemVarData varData;
-
- FT_ULong* dataOffsetArray = NULL;
-
-
- if ( FT_STREAM_SEEK( offset ) ||
- FT_READ_USHORT( format ) )
- goto Exit;
-
- if ( format != 1 )
- {
- FT_TRACE2(( "ft_var_load_item_variation_store: bad store format %d\n",
- format ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- /* read top level fields */
- if ( FT_READ_ULONG( region_offset ) ||
- FT_READ_USHORT( itemStore->dataCount ) )
- goto Exit;
-
- /* we need at least one entry in `itemStore->varData' */
- if ( !itemStore->dataCount )
- {
- FT_TRACE2(( "ft_var_load_item_variation_store: missing varData\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- /* make temporary copy of item variation data offsets; */
- /* we will parse region list first, then come back */
- if ( FT_NEW_ARRAY( dataOffsetArray, itemStore->dataCount ) )
- goto Exit;
-
- for ( i = 0; i < itemStore->dataCount; i++ )
- {
- if ( FT_READ_ULONG( dataOffsetArray[i] ) )
- goto Exit;
- }
-
- /* parse array of region records (region list) */
- if ( FT_STREAM_SEEK( offset + region_offset ) )
- goto Exit;
-
- if ( FT_READ_USHORT( itemStore->axisCount ) ||
- FT_READ_USHORT( itemStore->regionCount ) )
- goto Exit;
-
- if ( itemStore->axisCount != (FT_Long)blend->mmvar->num_axis )
- {
- FT_TRACE2(( "ft_var_load_item_variation_store:"
- " number of axes in item variation store\n"
- " "
- " and `fvar' table are different\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- if ( FT_NEW_ARRAY( itemStore->varRegionList, itemStore->regionCount ) )
- goto Exit;
-
- for ( i = 0; i < itemStore->regionCount; i++ )
- {
- GX_AxisCoords axisCoords;
-
-
- if ( FT_NEW_ARRAY( itemStore->varRegionList[i].axisList,
- itemStore->axisCount ) )
- goto Exit;
-
- axisCoords = itemStore->varRegionList[i].axisList;
-
- for ( j = 0; j < itemStore->axisCount; j++ )
- {
- FT_Short start, peak, end;
-
-
- if ( FT_READ_SHORT( start ) ||
- FT_READ_SHORT( peak ) ||
- FT_READ_SHORT( end ) )
- goto Exit;
-
- axisCoords[j].startCoord = FT_fdot14ToFixed( start );
- axisCoords[j].peakCoord = FT_fdot14ToFixed( peak );
- axisCoords[j].endCoord = FT_fdot14ToFixed( end );
- }
- }
-
- /* end of region list parse */
-
- /* use dataOffsetArray now to parse varData items */
- if ( FT_NEW_ARRAY( itemStore->varData, itemStore->dataCount ) )
- goto Exit;
-
- for ( i = 0; i < itemStore->dataCount; i++ )
- {
- varData = &itemStore->varData[i];
-
- if ( FT_STREAM_SEEK( offset + dataOffsetArray[i] ) )
- goto Exit;
-
- if ( FT_READ_USHORT( varData->itemCount ) ||
- FT_READ_USHORT( shortDeltaCount ) ||
- FT_READ_USHORT( varData->regionIdxCount ) )
- goto Exit;
-
- /* check some data consistency */
- if ( shortDeltaCount > varData->regionIdxCount )
- {
- FT_TRACE2(( "bad short count %d or region count %d\n",
- shortDeltaCount,
- varData->regionIdxCount ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- if ( varData->regionIdxCount > itemStore->regionCount )
- {
- FT_TRACE2(( "inconsistent regionCount %d in varData[%d]\n",
- varData->regionIdxCount,
- i ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- /* parse region indices */
- if ( FT_NEW_ARRAY( varData->regionIndices,
- varData->regionIdxCount ) )
- goto Exit;
-
- for ( j = 0; j < varData->regionIdxCount; j++ )
- {
- if ( FT_READ_USHORT( varData->regionIndices[j] ) )
- goto Exit;
-
- if ( varData->regionIndices[j] >= itemStore->regionCount )
- {
- FT_TRACE2(( "bad region index %d\n",
- varData->regionIndices[j] ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
- }
-
- /* Parse delta set. */
- /* */
- /* On input, deltas are (shortDeltaCount + regionIdxCount) bytes */
- /* each; on output, deltas are expanded to `regionIdxCount' shorts */
- /* each. */
- if ( FT_NEW_ARRAY( varData->deltaSet,
- varData->regionIdxCount * varData->itemCount ) )
- goto Exit;
-
- /* the delta set is stored as a 2-dimensional array of shorts; */
- /* sign-extend signed bytes to signed shorts */
- for ( j = 0; j < varData->itemCount * varData->regionIdxCount; )
- {
- for ( k = 0; k < shortDeltaCount; k++, j++ )
- {
- /* read the short deltas */
- FT_Short delta;
-
-
- if ( FT_READ_SHORT( delta ) )
- goto Exit;
-
- varData->deltaSet[j] = delta;
- }
-
- for ( ; k < varData->regionIdxCount; k++, j++ )
- {
- /* read the (signed) byte deltas */
- FT_Char delta;
-
-
- if ( FT_READ_CHAR( delta ) )
- goto Exit;
-
- varData->deltaSet[j] = delta;
- }
- }
- }
-
- Exit:
- FT_FREE( dataOffsetArray );
-
- return error;
- }
-
-
- static FT_Error
- ft_var_load_delta_set_index_mapping( TT_Face face,
- FT_ULong offset,
- GX_DeltaSetIdxMap map,
- GX_ItemVarStore itemStore )
- {
- FT_Stream stream = FT_FACE_STREAM( face );
- FT_Memory memory = stream->memory;
-
- FT_Error error;
-
- FT_UShort format;
- FT_UInt entrySize;
- FT_UInt innerBitCount;
- FT_UInt innerIndexMask;
- FT_UInt i, j;
-
-
- if ( FT_STREAM_SEEK( offset ) ||
- FT_READ_USHORT( format ) ||
- FT_READ_USHORT( map->mapCount ) )
- goto Exit;
-
- if ( format & 0xFFC0 )
- {
- FT_TRACE2(( "bad map format %d\n", format ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- /* bytes per entry: 1, 2, 3, or 4 */
- entrySize = ( ( format & 0x0030 ) >> 4 ) + 1;
- innerBitCount = ( format & 0x000F ) + 1;
- innerIndexMask = ( 1 << innerBitCount ) - 1;
-
- if ( FT_NEW_ARRAY( map->innerIndex, map->mapCount ) )
- goto Exit;
-
- if ( FT_NEW_ARRAY( map->outerIndex, map->mapCount ) )
- goto Exit;
-
- for ( i = 0; i < map->mapCount; i++ )
- {
- FT_UInt mapData = 0;
- FT_UInt outerIndex, innerIndex;
-
-
- /* read map data one unsigned byte at a time, big endian */
- for ( j = 0; j < entrySize; j++ )
- {
- FT_Byte data;
-
-
- if ( FT_READ_BYTE( data ) )
- goto Exit;
-
- mapData = ( mapData << 8 ) | data;
- }
-
- outerIndex = mapData >> innerBitCount;
-
- if ( outerIndex >= itemStore->dataCount )
- {
- FT_TRACE2(( "outerIndex[%d] == %d out of range\n",
- i,
- outerIndex ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- map->outerIndex[i] = outerIndex;
-
- innerIndex = mapData & innerIndexMask;
-
- if ( innerIndex >= itemStore->varData[outerIndex].itemCount )
- {
- FT_TRACE2(( "innerIndex[%d] == %d out of range\n",
- i,
- innerIndex ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- map->innerIndex[i] = innerIndex;
- }
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_var_load_hvvar */
- /* */
- /* <Description> */
- /* If `vertical' is zero, parse the `HVAR' table and set */
- /* `blend->hvar_loaded' to TRUE. On success, `blend->hvar_checked' */
- /* is set to TRUE. */
- /* */
- /* If `vertical' is not zero, parse the `VVAR' table and set */
- /* `blend->vvar_loaded' to TRUE. On success, `blend->vvar_checked' */
- /* is set to TRUE. */
- /* */
- /* Some memory may remain allocated on error; it is always freed in */
- /* `tt_done_blend', however. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- static FT_Error
- ft_var_load_hvvar( TT_Face face,
- FT_Bool vertical )
- {
- FT_Stream stream = FT_FACE_STREAM( face );
- FT_Memory memory = stream->memory;
-
- GX_Blend blend = face->blend;
-
- GX_HVVarTable table;
-
- FT_Error error;
- FT_UShort majorVersion;
- FT_ULong table_len;
- FT_ULong table_offset;
- FT_ULong store_offset;
- FT_ULong widthMap_offset;
-
-
- if ( vertical )
- {
- blend->vvar_loaded = TRUE;
-
- FT_TRACE2(( "VVAR " ));
-
- error = face->goto_table( face, TTAG_VVAR, stream, &table_len );
- }
- else
- {
- blend->hvar_loaded = TRUE;
-
- FT_TRACE2(( "HVAR " ));
-
- error = face->goto_table( face, TTAG_HVAR, stream, &table_len );
- }
-
- if ( error )
- {
- FT_TRACE2(( "is missing\n" ));
- goto Exit;
- }
-
- table_offset = FT_STREAM_POS();
-
- /* skip minor version */
- if ( FT_READ_USHORT( majorVersion ) ||
- FT_STREAM_SKIP( 2 ) )
- goto Exit;
-
- if ( majorVersion != 1 )
- {
- FT_TRACE2(( "bad table version %d\n", majorVersion ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- if ( FT_READ_ULONG( store_offset ) ||
- FT_READ_ULONG( widthMap_offset ) )
- goto Exit;
-
- if ( vertical )
- {
- if ( FT_NEW( blend->vvar_table ) )
- goto Exit;
- table = blend->vvar_table;
- }
- else
- {
- if ( FT_NEW( blend->hvar_table ) )
- goto Exit;
- table = blend->hvar_table;
- }
-
- error = ft_var_load_item_variation_store(
- face,
- table_offset + store_offset,
- &table->itemStore );
- if ( error )
- goto Exit;
-
- if ( widthMap_offset )
- {
- error = ft_var_load_delta_set_index_mapping(
- face,
- table_offset + widthMap_offset,
- &table->widthMap,
- &table->itemStore );
- if ( error )
- goto Exit;
- }
-
- FT_TRACE2(( "loaded\n" ));
- error = FT_Err_Ok;
-
- Exit:
- if ( !error )
- {
- if ( vertical )
- {
- blend->vvar_checked = TRUE;
-
- /* FreeType doesn't provide functions to quickly retrieve */
- /* TSB, BSB, or VORG values; we thus don't have to implement */
- /* support for those three item variation stores. */
-
- face->variation_support |= TT_FACE_FLAG_VAR_VADVANCE;
- }
- else
- {
- blend->hvar_checked = TRUE;
-
- /* FreeType doesn't provide functions to quickly retrieve */
- /* LSB or RSB values; we thus don't have to implement */
- /* support for those two item variation stores. */
-
- face->variation_support |= TT_FACE_FLAG_VAR_HADVANCE;
- }
- }
-
- return error;
- }
-
-
- static FT_Int
- ft_var_get_item_delta( TT_Face face,
- GX_ItemVarStore itemStore,
- FT_UInt outerIndex,
- FT_UInt innerIndex )
- {
- GX_ItemVarData varData;
- FT_Short* deltaSet;
-
- FT_UInt master, j;
- FT_Fixed netAdjustment = 0; /* accumulated adjustment */
- FT_Fixed scaledDelta;
- FT_Fixed delta;
-
-
- /* See pseudo code from `Font Variations Overview' */
- /* in the OpenType specification. */
-
- varData = &itemStore->varData[outerIndex];
- deltaSet = &varData->deltaSet[varData->regionIdxCount * innerIndex];
-
- /* outer loop steps through master designs to be blended */
- for ( master = 0; master < varData->regionIdxCount; master++ )
- {
- FT_Fixed scalar = FT_FIXED_ONE;
- FT_UInt regionIndex = varData->regionIndices[master];
-
- GX_AxisCoords axis = itemStore->varRegionList[regionIndex].axisList;
-
-
- /* inner loop steps through axes in this region */
- for ( j = 0; j < itemStore->axisCount; j++, axis++ )
- {
- FT_Fixed axisScalar;
-
-
- /* compute the scalar contribution of this axis; */
- /* ignore invalid ranges */
- if ( axis->startCoord > axis->peakCoord ||
- axis->peakCoord > axis->endCoord )
- axisScalar = FT_FIXED_ONE;
-
- else if ( axis->startCoord < 0 &&
- axis->endCoord > 0 &&
- axis->peakCoord != 0 )
- axisScalar = FT_FIXED_ONE;
-
- /* peak of 0 means ignore this axis */
- else if ( axis->peakCoord == 0 )
- axisScalar = FT_FIXED_ONE;
-
- /* ignore this region if coords are out of range */
- else if ( face->blend->normalizedcoords[j] < axis->startCoord ||
- face->blend->normalizedcoords[j] > axis->endCoord )
- axisScalar = 0;
-
- /* calculate a proportional factor */
- else
- {
- if ( face->blend->normalizedcoords[j] == axis->peakCoord )
- axisScalar = FT_FIXED_ONE;
- else if ( face->blend->normalizedcoords[j] < axis->peakCoord )
- axisScalar =
- FT_DivFix( face->blend->normalizedcoords[j] - axis->startCoord,
- axis->peakCoord - axis->startCoord );
- else
- axisScalar =
- FT_DivFix( axis->endCoord - face->blend->normalizedcoords[j],
- axis->endCoord - axis->peakCoord );
- }
-
- /* take product of all the axis scalars */
- scalar = FT_MulFix( scalar, axisScalar );
-
- } /* per-axis loop */
-
- /* get the scaled delta for this region */
- delta = FT_intToFixed( deltaSet[master] );
- scaledDelta = FT_MulFix( scalar, delta );
-
- /* accumulate the adjustments from each region */
- netAdjustment = netAdjustment + scaledDelta;
-
- } /* per-region loop */
-
- return FT_fixedToInt( netAdjustment );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_hvadvance_adjust */
- /* */
- /* <Description> */
- /* Apply `HVAR' advance width or `VVAR' advance height adjustment of */
- /* a given glyph. */
- /* */
- /* <Input> */
- /* gindex :: The glyph index. */
- /* */
- /* vertical :: If set, handle `VVAR' table. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* */
- /* adelta :: Points to width or height value that gets modified. */
- /* */
- static FT_Error
- tt_hvadvance_adjust( TT_Face face,
- FT_UInt gindex,
- FT_Int *avalue,
- FT_Bool vertical )
- {
- FT_Error error = FT_Err_Ok;
- FT_UInt innerIndex, outerIndex;
- FT_Int delta;
-
- GX_HVVarTable table;
-
-
- if ( !face->doblend || !face->blend )
- goto Exit;
-
- if ( vertical )
- {
- if ( !face->blend->vvar_loaded )
- {
- /* initialize vvar table */
- face->blend->vvar_error = ft_var_load_hvvar( face, 1 );
- }
-
- if ( !face->blend->vvar_checked )
- {
- error = face->blend->vvar_error;
- goto Exit;
- }
-
- table = face->blend->vvar_table;
- }
- else
- {
- if ( !face->blend->hvar_loaded )
- {
- /* initialize hvar table */
- face->blend->hvar_error = ft_var_load_hvvar( face, 0 );
- }
-
- if ( !face->blend->hvar_checked )
- {
- error = face->blend->hvar_error;
- goto Exit;
- }
-
- table = face->blend->hvar_table;
- }
-
- /* advance width or height adjustments are always present in an */
- /* `HVAR' or `VVAR' table; no need to test for this capability */
-
- if ( table->widthMap.innerIndex )
- {
- FT_UInt idx = gindex;
-
-
- if ( idx >= table->widthMap.mapCount )
- idx = table->widthMap.mapCount - 1;
-
- /* trust that HVAR parser has checked indices */
- outerIndex = table->widthMap.outerIndex[idx];
- innerIndex = table->widthMap.innerIndex[idx];
- }
- else
- {
- GX_ItemVarData varData;
-
-
- /* no widthMap data */
- outerIndex = 0;
- innerIndex = gindex;
-
- varData = &table->itemStore.varData[outerIndex];
- if ( gindex >= varData->itemCount )
- {
- FT_TRACE2(( "gindex %d out of range\n", gindex ));
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
- }
-
- delta = ft_var_get_item_delta( face,
- &table->itemStore,
- outerIndex,
- innerIndex );
-
- FT_TRACE5(( "%s value %d adjusted by %d units (%s)\n",
- vertical ? "vertical height" : "horizontal width",
- *avalue,
- delta,
- vertical ? "VVAR" : "HVAR" ));
-
- *avalue += delta;
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- tt_hadvance_adjust( TT_Face face,
- FT_UInt gindex,
- FT_Int *avalue )
- {
- return tt_hvadvance_adjust( face, gindex, avalue, 0 );
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- tt_vadvance_adjust( TT_Face face,
- FT_UInt gindex,
- FT_Int *avalue )
- {
- return tt_hvadvance_adjust( face, gindex, avalue, 1 );
- }
-
-
-#define GX_VALUE_SIZE 8
-
- /* all values are FT_Short or FT_UShort entities; */
- /* we treat them consistently as FT_Short */
-#define GX_VALUE_CASE( tag, dflt ) \
- case MVAR_TAG_ ## tag : \
- p = (FT_Short*)&face->dflt; \
- break
-
-#define GX_GASP_CASE( idx ) \
- case MVAR_TAG_GASP_ ## idx : \
- if ( idx < face->gasp.numRanges - 1 ) \
- p = (FT_Short*)&face->gasp.gaspRanges[idx].maxPPEM; \
- else \
- p = NULL; \
- break
-
-
- static FT_Short*
- ft_var_get_value_pointer( TT_Face face,
- FT_ULong mvar_tag )
- {
- FT_Short* p;
-
-
- switch ( mvar_tag )
- {
- GX_GASP_CASE( 0 );
- GX_GASP_CASE( 1 );
- GX_GASP_CASE( 2 );
- GX_GASP_CASE( 3 );
- GX_GASP_CASE( 4 );
- GX_GASP_CASE( 5 );
- GX_GASP_CASE( 6 );
- GX_GASP_CASE( 7 );
- GX_GASP_CASE( 8 );
- GX_GASP_CASE( 9 );
-
- GX_VALUE_CASE( CPHT, os2.sCapHeight );
- GX_VALUE_CASE( HASC, os2.sTypoAscender );
- GX_VALUE_CASE( HCLA, os2.usWinAscent );
- GX_VALUE_CASE( HCLD, os2.usWinDescent );
- GX_VALUE_CASE( HCOF, horizontal.caret_Offset );
- GX_VALUE_CASE( HCRN, horizontal.caret_Slope_Run );
- GX_VALUE_CASE( HCRS, horizontal.caret_Slope_Rise );
- GX_VALUE_CASE( HDSC, os2.sTypoDescender );
- GX_VALUE_CASE( HLGP, os2.sTypoLineGap );
- GX_VALUE_CASE( SBXO, os2.ySubscriptXOffset);
- GX_VALUE_CASE( SBXS, os2.ySubscriptXSize );
- GX_VALUE_CASE( SBYO, os2.ySubscriptYOffset );
- GX_VALUE_CASE( SBYS, os2.ySubscriptYSize );
- GX_VALUE_CASE( SPXO, os2.ySuperscriptXOffset );
- GX_VALUE_CASE( SPXS, os2.ySuperscriptXSize );
- GX_VALUE_CASE( SPYO, os2.ySuperscriptYOffset );
- GX_VALUE_CASE( SPYS, os2.ySuperscriptYSize );
- GX_VALUE_CASE( STRO, os2.yStrikeoutPosition );
- GX_VALUE_CASE( STRS, os2.yStrikeoutSize );
- GX_VALUE_CASE( UNDO, postscript.underlinePosition );
- GX_VALUE_CASE( UNDS, postscript.underlineThickness );
- GX_VALUE_CASE( VASC, vertical.Ascender );
- GX_VALUE_CASE( VCOF, vertical.caret_Offset );
- GX_VALUE_CASE( VCRN, vertical.caret_Slope_Run );
- GX_VALUE_CASE( VCRS, vertical.caret_Slope_Rise );
- GX_VALUE_CASE( VDSC, vertical.Descender );
- GX_VALUE_CASE( VLGP, vertical.Line_Gap );
- GX_VALUE_CASE( XHGT, os2.sxHeight );
-
- default:
- /* ignore unknown tag */
- p = NULL;
- }
-
- return p;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_var_load_mvar */
- /* */
- /* <Description> */
- /* Parse the `MVAR' table. */
- /* */
- /* Some memory may remain allocated on error; it is always freed in */
- /* `tt_done_blend', however. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* */
- static void
- ft_var_load_mvar( TT_Face face )
- {
- FT_Stream stream = FT_FACE_STREAM( face );
- FT_Memory memory = stream->memory;
-
- GX_Blend blend = face->blend;
- GX_ItemVarStore itemStore;
- GX_Value value, limit;
-
- FT_Error error;
- FT_UShort majorVersion;
- FT_ULong table_len;
- FT_ULong table_offset;
- FT_UShort store_offset;
- FT_ULong records_offset;
-
-
- FT_TRACE2(( "MVAR " ));
-
- error = face->goto_table( face, TTAG_MVAR, stream, &table_len );
- if ( error )
- {
- FT_TRACE2(( "is missing\n" ));
- return;
- }
-
- table_offset = FT_STREAM_POS();
-
- /* skip minor version */
- if ( FT_READ_USHORT( majorVersion ) ||
- FT_STREAM_SKIP( 2 ) )
- return;
-
- if ( majorVersion != 1 )
- {
- FT_TRACE2(( "bad table version %d\n", majorVersion ));
- return;
- }
-
- if ( FT_NEW( blend->mvar_table ) )
- return;
-
- /* skip reserved entry and value record size */
- if ( FT_STREAM_SKIP( 4 ) ||
- FT_READ_USHORT( blend->mvar_table->valueCount ) ||
- FT_READ_USHORT( store_offset ) )
- return;
-
- records_offset = FT_STREAM_POS();
-
- error = ft_var_load_item_variation_store(
- face,
- table_offset + store_offset,
- &blend->mvar_table->itemStore );
- if ( error )
- return;
-
- if ( FT_NEW_ARRAY( blend->mvar_table->values,
- blend->mvar_table->valueCount ) )
- return;
-
- if ( FT_STREAM_SEEK( records_offset ) ||
- FT_FRAME_ENTER( blend->mvar_table->valueCount * GX_VALUE_SIZE ) )
- return;
-
- value = blend->mvar_table->values;
- limit = value + blend->mvar_table->valueCount;
- itemStore = &blend->mvar_table->itemStore;
-
- for ( ; value < limit; value++ )
- {
- value->tag = FT_GET_ULONG();
- value->outerIndex = FT_GET_USHORT();
- value->innerIndex = FT_GET_USHORT();
-
- if ( value->outerIndex >= itemStore->dataCount ||
- value->innerIndex >= itemStore->varData[value->outerIndex]
- .itemCount )
- {
- error = FT_THROW( Invalid_Table );
- break;
- }
- }
-
- FT_FRAME_EXIT();
-
- if ( error )
- return;
-
- FT_TRACE2(( "loaded\n" ));
-
- value = blend->mvar_table->values;
- limit = value + blend->mvar_table->valueCount;
-
- /* save original values of the data MVAR is going to modify */
- for ( ; value < limit; value++ )
- {
- FT_Short* p = ft_var_get_value_pointer( face, value->tag );
-
-
- if ( p )
- value->unmodified = *p;
-#ifdef FT_DEBUG_LEVEL_TRACE
- else
- FT_TRACE1(( "ft_var_load_mvar: Ignoring unknown tag `%c%c%c%c'\n",
- (FT_Char)( value->tag >> 24 ),
- (FT_Char)( value->tag >> 16 ),
- (FT_Char)( value->tag >> 8 ),
- (FT_Char)( value->tag ) ));
-#endif
- }
-
- face->variation_support |= TT_FACE_FLAG_VAR_MVAR;
- }
-
-
- static FT_Error
- tt_size_reset_iterator( FT_ListNode node,
- void* user )
- {
- TT_Size size = (TT_Size)node->data;
-
- FT_UNUSED( user );
-
-
- tt_size_reset( size, 1 );
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_apply_mvar */
- /* */
- /* <Description> */
- /* Apply `MVAR' table adjustments. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* */
- FT_LOCAL_DEF( void )
- tt_apply_mvar( TT_Face face )
- {
- GX_Blend blend = face->blend;
- GX_Value value, limit;
-
-
- if ( !( face->variation_support & TT_FACE_FLAG_VAR_MVAR ) )
- return;
-
- value = blend->mvar_table->values;
- limit = value + blend->mvar_table->valueCount;
-
- for ( ; value < limit; value++ )
- {
- FT_Short* p = ft_var_get_value_pointer( face, value->tag );
- FT_Int delta;
-
-
- delta = ft_var_get_item_delta( face,
- &blend->mvar_table->itemStore,
- value->outerIndex,
- value->innerIndex );
-
- if ( p )
- {
- FT_TRACE5(( "value %c%c%c%c (%d units) adjusted by %d units (MVAR)\n",
- (FT_Char)( value->tag >> 24 ),
- (FT_Char)( value->tag >> 16 ),
- (FT_Char)( value->tag >> 8 ),
- (FT_Char)( value->tag ),
- value->unmodified,
- delta ));
-
- /* since we handle both signed and unsigned values as FT_Short, */
- /* ensure proper overflow arithmetic */
- *p = (FT_Short)( value->unmodified + (FT_Short)delta );
- }
- }
-
- /* adjust all derived values */
- {
- FT_Face root = &face->root;
-
-
- if ( face->os2.version != 0xFFFFU )
- {
- if ( face->os2.sTypoAscender || face->os2.sTypoDescender )
- {
- root->ascender = face->os2.sTypoAscender;
- root->descender = face->os2.sTypoDescender;
-
- root->height = root->ascender - root->descender +
- face->os2.sTypoLineGap;
- }
- else
- {
- root->ascender = (FT_Short)face->os2.usWinAscent;
- root->descender = -(FT_Short)face->os2.usWinDescent;
-
- root->height = root->ascender - root->descender;
- }
- }
-
- root->underline_position = face->postscript.underlinePosition -
- face->postscript.underlineThickness / 2;
- root->underline_thickness = face->postscript.underlineThickness;
-
- /* iterate over all FT_Size objects and call `tt_size_reset' */
- /* to propagate the metrics changes */
- FT_List_Iterate( &root->sizes_list,
- tt_size_reset_iterator,
- NULL );
- }
- }
-
-
- typedef struct GX_GVar_Head_
- {
- FT_Long version;
- FT_UShort axisCount;
- FT_UShort globalCoordCount;
- FT_ULong offsetToCoord;
- FT_UShort glyphCount;
- FT_UShort flags;
- FT_ULong offsetToData;
-
- } GX_GVar_Head;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_var_load_gvar */
- /* */
- /* <Description> */
- /* Parse the `gvar' table if present. If `fvar' is there, `gvar' had */
- /* better be there too. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- static FT_Error
- ft_var_load_gvar( TT_Face face )
- {
- FT_Stream stream = FT_FACE_STREAM( face );
- FT_Memory memory = stream->memory;
- GX_Blend blend = face->blend;
- FT_Error error;
- FT_UInt i, j;
- FT_ULong table_len;
- FT_ULong gvar_start;
- FT_ULong offsetToData;
- GX_GVar_Head gvar_head;
-
- static const FT_Frame_Field gvar_fields[] =
- {
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE GX_GVar_Head
-
- FT_FRAME_START( 20 ),
- FT_FRAME_LONG ( version ),
- FT_FRAME_USHORT( axisCount ),
- FT_FRAME_USHORT( globalCoordCount ),
- FT_FRAME_ULONG ( offsetToCoord ),
- FT_FRAME_USHORT( glyphCount ),
- FT_FRAME_USHORT( flags ),
- FT_FRAME_ULONG ( offsetToData ),
- FT_FRAME_END
- };
-
-
- FT_TRACE2(( "GVAR " ));
-
- if ( FT_SET_ERROR( face->goto_table( face,
- TTAG_gvar,
- stream,
- &table_len ) ) )
- {
- FT_TRACE2(( "is missing\n" ));
- goto Exit;
- }
-
- gvar_start = FT_STREAM_POS( );
- if ( FT_STREAM_READ_FIELDS( gvar_fields, &gvar_head ) )
- goto Exit;
-
- if ( gvar_head.version != 0x00010000L )
- {
- FT_TRACE1(( "bad table version\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- if ( gvar_head.axisCount != (FT_UShort)blend->mmvar->num_axis )
- {
- FT_TRACE1(( "ft_var_load_gvar: number of axes in `gvar' and `cvar'\n"
- " table are different\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- /* rough sanity check, ignoring offsets */
- if ( (FT_ULong)gvar_head.globalCoordCount * gvar_head.axisCount >
- table_len / 2 )
- {
- FT_TRACE1(( "ft_var_load_gvar:"
- " invalid number of global coordinates\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- /* rough sanity check: offsets can be either 2 or 4 bytes */
- if ( (FT_ULong)gvar_head.glyphCount *
- ( ( gvar_head.flags & 1 ) ? 4 : 2 ) > table_len )
- {
- FT_TRACE1(( "ft_var_load_gvar: invalid number of glyphs\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
-
- FT_TRACE2(( "loaded\n" ));
-
- blend->gvar_size = table_len;
- blend->tuplecount = gvar_head.globalCoordCount;
- blend->gv_glyphcnt = gvar_head.glyphCount;
- offsetToData = gvar_start + gvar_head.offsetToData;
-
- FT_TRACE5(( "gvar: there are %d shared coordinates:\n",
- blend->tuplecount ));
-
- if ( FT_NEW_ARRAY( blend->glyphoffsets, blend->gv_glyphcnt + 1 ) )
- goto Exit;
-
- if ( gvar_head.flags & 1 )
- {
- /* long offsets (one more offset than glyphs, to mark size of last) */
- if ( FT_FRAME_ENTER( ( blend->gv_glyphcnt + 1 ) * 4L ) )
- goto Exit;
-
- for ( i = 0; i <= blend->gv_glyphcnt; i++ )
- blend->glyphoffsets[i] = offsetToData + FT_GET_ULONG();
-
- FT_FRAME_EXIT();
- }
- else
- {
- /* short offsets (one more offset than glyphs, to mark size of last) */
- if ( FT_FRAME_ENTER( ( blend->gv_glyphcnt + 1 ) * 2L ) )
- goto Exit;
-
- for ( i = 0; i <= blend->gv_glyphcnt; i++ )
- blend->glyphoffsets[i] = offsetToData + FT_GET_USHORT() * 2;
- /* XXX: Undocumented: `*2'! */
-
- FT_FRAME_EXIT();
- }
-
- if ( blend->tuplecount != 0 )
- {
- if ( FT_NEW_ARRAY( blend->tuplecoords,
- gvar_head.axisCount * blend->tuplecount ) )
- goto Exit;
-
- if ( FT_STREAM_SEEK( gvar_start + gvar_head.offsetToCoord ) ||
- FT_FRAME_ENTER( blend->tuplecount * gvar_head.axisCount * 2L ) )
- goto Exit;
-
- for ( i = 0; i < blend->tuplecount; i++ )
- {
- FT_TRACE5(( " [ " ));
- for ( j = 0; j < (FT_UInt)gvar_head.axisCount; j++ )
- {
- blend->tuplecoords[i * gvar_head.axisCount + j] =
- FT_GET_SHORT() * 4; /* convert to FT_Fixed */
- FT_TRACE5(( "%.5f ",
- blend->tuplecoords[i * gvar_head.axisCount + j] / 65536.0 ));
- }
- FT_TRACE5(( "]\n" ));
- }
-
- FT_TRACE5(( "\n" ));
-
- FT_FRAME_EXIT();
- }
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* ft_var_apply_tuple */
- /* */
- /* <Description> */
- /* Figure out whether a given tuple (design) applies to the current */
- /* blend, and if so, what is the scaling factor. */
- /* */
- /* <Input> */
- /* blend :: The current blend of the font. */
- /* */
- /* tupleIndex :: A flag saying whether this is an intermediate */
- /* tuple or not. */
- /* */
- /* tuple_coords :: The coordinates of the tuple in normalized axis */
- /* units. */
- /* */
- /* im_start_coords :: The initial coordinates where this tuple starts */
- /* to apply (for intermediate coordinates). */
- /* */
- /* im_end_coords :: The final coordinates after which this tuple no */
- /* longer applies (for intermediate coordinates). */
- /* */
- /* <Return> */
- /* An FT_Fixed value containing the scaling factor. */
- /* */
- static FT_Fixed
- ft_var_apply_tuple( GX_Blend blend,
- FT_UShort tupleIndex,
- FT_Fixed* tuple_coords,
- FT_Fixed* im_start_coords,
- FT_Fixed* im_end_coords )
- {
- FT_UInt i;
- FT_Fixed apply = 0x10000L;
-
-
- for ( i = 0; i < blend->num_axis; i++ )
- {
- FT_TRACE6(( " axis coordinate %d (%.5f):\n",
- i, blend->normalizedcoords[i] / 65536.0 ));
- if ( !( tupleIndex & GX_TI_INTERMEDIATE_TUPLE ) )
- FT_TRACE6(( " intermediate coordinates %d (%.5f, %.5f):\n",
- i,
- im_start_coords[i] / 65536.0,
- im_end_coords[i] / 65536.0 ));
-
- /* It's not clear why (for intermediate tuples) we don't need */
- /* to check against start/end -- the documentation says we don't. */
- /* Similarly, it's unclear why we don't need to scale along the */
- /* axis. */
-
- if ( tuple_coords[i] == 0 )
- {
- FT_TRACE6(( " tuple coordinate is zero, ignored\n", i ));
- continue;
- }
-
- if ( blend->normalizedcoords[i] == 0 )
- {
- FT_TRACE6(( " axis coordinate is zero, stop\n" ));
- apply = 0;
- break;
- }
-
- if ( blend->normalizedcoords[i] == tuple_coords[i] )
- {
- FT_TRACE6(( " tuple coordinate value %.5f fits perfectly\n",
- tuple_coords[i] / 65536.0 ));
- /* `apply' does not change */
- continue;
- }
-
- if ( !( tupleIndex & GX_TI_INTERMEDIATE_TUPLE ) )
- {
- /* not an intermediate tuple */
-
- if ( blend->normalizedcoords[i] < FT_MIN( 0, tuple_coords[i] ) ||
- blend->normalizedcoords[i] > FT_MAX( 0, tuple_coords[i] ) )
- {
- FT_TRACE6(( " tuple coordinate value %.5f is exceeded, stop\n",
- tuple_coords[i] / 65536.0 ));
- apply = 0;
- break;
- }
-
- FT_TRACE6(( " tuple coordinate value %.5f fits\n",
- tuple_coords[i] / 65536.0 ));
- apply = FT_MulDiv( apply,
- blend->normalizedcoords[i],
- tuple_coords[i] );
- }
- else
- {
- /* intermediate tuple */
-
- if ( blend->normalizedcoords[i] < im_start_coords[i] ||
- blend->normalizedcoords[i] > im_end_coords[i] )
- {
- FT_TRACE6(( " intermediate tuple range [%.5f;%.5f] is exceeded,"
- " stop\n",
- im_start_coords[i] / 65536.0,
- im_end_coords[i] / 65536.0 ));
- apply = 0;
- break;
- }
-
- else if ( blend->normalizedcoords[i] < tuple_coords[i] )
- {
- FT_TRACE6(( " intermediate tuple range [%.5f;%.5f] fits\n",
- im_start_coords[i] / 65536.0,
- im_end_coords[i] / 65536.0 ));
- apply = FT_MulDiv( apply,
- blend->normalizedcoords[i] - im_start_coords[i],
- tuple_coords[i] - im_start_coords[i] );
- }
-
- else
- {
- FT_TRACE6(( " intermediate tuple range [%.5f;%.5f] fits\n",
- im_start_coords[i] / 65536.0,
- im_end_coords[i] / 65536.0 ));
- apply = FT_MulDiv( apply,
- im_end_coords[i] - blend->normalizedcoords[i],
- im_end_coords[i] - tuple_coords[i] );
- }
- }
- }
-
- FT_TRACE6(( " apply factor is %.5f\n", apply / 65536.0 ));
-
- return apply;
- }
-
-
- /* convert from design coordinates to normalized coordinates */
-
- static void
- ft_var_to_normalized( TT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords,
- FT_Fixed* normalized )
- {
- GX_Blend blend;
- FT_MM_Var* mmvar;
- FT_UInt i, j;
- FT_Var_Axis* a;
- GX_AVarSegment av;
-
-
- blend = face->blend;
- mmvar = blend->mmvar;
-
- if ( num_coords > mmvar->num_axis )
- {
- FT_TRACE2(( "ft_var_to_normalized:"
- " only using first %d of %d coordinates\n",
- mmvar->num_axis, num_coords ));
- num_coords = mmvar->num_axis;
- }
-
- /* Axis normalization is a two-stage process. First we normalize */
- /* based on the [min,def,max] values for the axis to be [-1,0,1]. */
- /* Then, if there's an `avar' table, we renormalize this range. */
-
- FT_TRACE5(( "design coordinates:\n" ));
-
- a = mmvar->axis;
- for ( i = 0; i < num_coords; i++, a++ )
- {
- FT_Fixed coord = coords[i];
-
-
- FT_TRACE5(( " %.5f\n", coord / 65536.0 ));
- if ( coord > a->maximum || coord < a->minimum )
- {
- FT_TRACE1((
- "ft_var_to_normalized: design coordinate %.5f\n"
- " is out of range [%.5f;%.5f]; clamping\n",
- coord / 65536.0,
- a->minimum / 65536.0,
- a->maximum / 65536.0 ));
-
- if ( coord > a->maximum)
- coord = a->maximum;
- else
- coord = a->minimum;
- }
-
- if ( coord < a->def )
- normalized[i] = -FT_DivFix( coords[i] - a->def,
- a->minimum - a->def );
- else if ( coord > a->def )
- normalized[i] = FT_DivFix( coords[i] - a->def,
- a->maximum - a->def );
- else
- normalized[i] = 0;
- }
-
- FT_TRACE5(( "\n" ));
-
- for ( ; i < mmvar->num_axis; i++ )
- normalized[i] = 0;
-
- if ( blend->avar_segment )
- {
- FT_TRACE5(( "normalized design coordinates"
- " before applying `avar' data:\n" ));
-
- av = blend->avar_segment;
- for ( i = 0; i < mmvar->num_axis; i++, av++ )
- {
- for ( j = 1; j < (FT_UInt)av->pairCount; j++ )
- {
- if ( normalized[i] < av->correspondence[j].fromCoord )
- {
- FT_TRACE5(( " %.5f\n", normalized[i] / 65536.0 ));
-
- normalized[i] =
- FT_MulDiv( normalized[i] - av->correspondence[j - 1].fromCoord,
- av->correspondence[j].toCoord -
- av->correspondence[j - 1].toCoord,
- av->correspondence[j].fromCoord -
- av->correspondence[j - 1].fromCoord ) +
- av->correspondence[j - 1].toCoord;
- break;
- }
- }
- }
- }
- }
-
-
- /* convert from normalized coordinates to design coordinates */
-
- static void
- ft_var_to_design( TT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords,
- FT_Fixed* design )
- {
- GX_Blend blend;
- FT_MM_Var* mmvar;
- FT_Var_Axis* a;
-
- FT_UInt i, j, nc;
-
-
- blend = face->blend;
-
- nc = num_coords;
- if ( num_coords > blend->num_axis )
- {
- FT_TRACE2(( "ft_var_to_design:"
- " only using first %d of %d coordinates\n",
- blend->num_axis, num_coords ));
- nc = blend->num_axis;
- }
-
- if ( face->doblend )
- {
- for ( i = 0; i < nc; i++ )
- design[i] = coords[i];
- }
- else
- {
- for ( i = 0; i < nc; i++ )
- design[i] = 0;
- }
-
- for ( ; i < num_coords; i++ )
- design[i] = 0;
-
- if ( blend->avar_segment )
- {
- GX_AVarSegment av = blend->avar_segment;
-
-
- FT_TRACE5(( "design coordinates"
- " after removing `avar' distortion:\n" ));
-
- for ( i = 0; i < nc; i++, av++ )
- {
- for ( j = 1; j < (FT_UInt)av->pairCount; j++ )
- {
- if ( design[i] < av->correspondence[j].toCoord )
- {
- design[i] =
- FT_MulDiv( design[i] - av->correspondence[j - 1].toCoord,
- av->correspondence[j].fromCoord -
- av->correspondence[j - 1].fromCoord,
- av->correspondence[j].toCoord -
- av->correspondence[j - 1].toCoord ) +
- av->correspondence[j - 1].fromCoord;
-
- FT_TRACE5(( " %.5f\n", design[i] / 65536.0 ));
- break;
- }
- }
- }
- }
-
- mmvar = blend->mmvar;
- a = mmvar->axis;
-
- for ( i = 0; i < nc; i++, a++ )
- {
- if ( design[i] < 0 )
- design[i] = a->def + FT_MulFix( design[i],
- a->def - a->minimum );
- else if ( design[i] > 0 )
- design[i] = a->def + FT_MulFix( design[i],
- a->maximum - a->def );
- else
- design[i] = a->def;
- }
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MULTIPLE MASTERS SERVICE FUNCTIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- typedef struct GX_FVar_Head_
- {
- FT_Long version;
- FT_UShort offsetToData;
- FT_UShort axisCount;
- FT_UShort axisSize;
- FT_UShort instanceCount;
- FT_UShort instanceSize;
-
- } GX_FVar_Head;
-
-
- typedef struct fvar_axis_
- {
- FT_ULong axisTag;
- FT_Fixed minValue;
- FT_Fixed defaultValue;
- FT_Fixed maxValue;
- FT_UShort flags;
- FT_UShort nameID;
-
- } GX_FVar_Axis;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Get_MM_Var */
- /* */
- /* <Description> */
- /* Check that the font's `fvar' table is valid, parse it, and return */
- /* those data. It also loads (and parses) the `MVAR' table, if */
- /* possible. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* TT_Get_MM_Var initializes the blend structure. */
- /* */
- /* <Output> */
- /* master :: The `fvar' data (must be freed by caller). Can be NULL, */
- /* which makes this function simply load MM support. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- TT_Get_MM_Var( TT_Face face,
- FT_MM_Var* *master )
- {
- FT_Stream stream = face->root.stream;
- FT_Memory memory = face->root.memory;
- FT_ULong table_len;
- FT_Error error = FT_Err_Ok;
- FT_ULong fvar_start;
- FT_UInt i, j;
- FT_MM_Var* mmvar = NULL;
- FT_Fixed* next_coords;
- FT_Fixed* nsc;
- FT_String* next_name;
- FT_Var_Axis* a;
- FT_Fixed* c;
- FT_Var_Named_Style* ns;
- GX_FVar_Head fvar_head;
- FT_Bool usePsName;
- FT_UInt num_instances;
-
- static const FT_Frame_Field fvar_fields[] =
- {
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE GX_FVar_Head
-
- FT_FRAME_START( 16 ),
- FT_FRAME_LONG ( version ),
- FT_FRAME_USHORT ( offsetToData ),
- FT_FRAME_SKIP_SHORT,
- FT_FRAME_USHORT ( axisCount ),
- FT_FRAME_USHORT ( axisSize ),
- FT_FRAME_USHORT ( instanceCount ),
- FT_FRAME_USHORT ( instanceSize ),
- FT_FRAME_END
- };
-
- static const FT_Frame_Field fvaraxis_fields[] =
- {
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE GX_FVar_Axis
-
- FT_FRAME_START( 20 ),
- FT_FRAME_ULONG ( axisTag ),
- FT_FRAME_LONG ( minValue ),
- FT_FRAME_LONG ( defaultValue ),
- FT_FRAME_LONG ( maxValue ),
- FT_FRAME_USHORT( flags ),
- FT_FRAME_USHORT( nameID ),
- FT_FRAME_END
- };
-
-
- /* read the font data and set up the internal representation */
- /* if not already done */
-
- if ( !face->blend )
- {
- FT_TRACE2(( "FVAR " ));
-
- /* both `fvar' and `gvar' must be present */
- if ( FT_SET_ERROR( face->goto_table( face, TTAG_gvar,
- stream, &table_len ) ) )
- {
- /* CFF2 is an alternate to gvar here */
- if ( FT_SET_ERROR( face->goto_table( face, TTAG_CFF2,
- stream, &table_len ) ) )
- {
- FT_TRACE1(( "\n"
- "TT_Get_MM_Var: `gvar' or `CFF2' table is missing\n" ));
- goto Exit;
- }
- }
-
- if ( FT_SET_ERROR( face->goto_table( face, TTAG_fvar,
- stream, &table_len ) ) )
- {
- FT_TRACE1(( "is missing\n" ));
- goto Exit;
- }
-
- fvar_start = FT_STREAM_POS( );
-
- /* the validity of the `fvar' header data was already checked */
- /* in function `sfnt_init_face' */
- if ( FT_STREAM_READ_FIELDS( fvar_fields, &fvar_head ) )
- goto Exit;
-
- usePsName = FT_BOOL( fvar_head.instanceSize ==
- 6 + 4 * fvar_head.axisCount );
-
- FT_TRACE2(( "loaded\n" ));
-
- FT_TRACE5(( "number of GX style axes: %d\n", fvar_head.axisCount ));
-
- if ( FT_NEW( face->blend ) )
- goto Exit;
-
- /* `num_instances' holds the number of all named instances, */
- /* including the default instance which might be missing */
- /* in fvar's table of named instances */
- num_instances = face->root.style_flags >> 16;
-
- /* cannot overflow 32-bit arithmetic because of the size limits */
- /* used in the `fvar' table validity check in `sfnt_init_face' */
- face->blend->mmvar_len =
- sizeof ( FT_MM_Var ) +
- fvar_head.axisCount * sizeof ( FT_Var_Axis ) +
- num_instances * sizeof ( FT_Var_Named_Style ) +
- num_instances * fvar_head.axisCount * sizeof ( FT_Fixed ) +
- 5 * fvar_head.axisCount;
-
- if ( FT_ALLOC( mmvar, face->blend->mmvar_len ) )
- goto Exit;
- face->blend->mmvar = mmvar;
-
- /* set up pointers and offsets into the `mmvar' array; */
- /* the data gets filled in later on */
-
- mmvar->num_axis =
- fvar_head.axisCount;
- mmvar->num_designs =
- ~0U; /* meaningless in this context; each glyph */
- /* may have a different number of designs */
- /* (or tuples, as called by Apple) */
- mmvar->num_namedstyles =
- num_instances;
- mmvar->axis =
- (FT_Var_Axis*)&( mmvar[1] );
- mmvar->namedstyle =
- (FT_Var_Named_Style*)&( mmvar->axis[fvar_head.axisCount] );
-
- next_coords =
- (FT_Fixed*)&( mmvar->namedstyle[num_instances] );
- for ( i = 0; i < num_instances; i++ )
- {
- mmvar->namedstyle[i].coords = next_coords;
- next_coords += fvar_head.axisCount;
- }
-
- next_name = (FT_String*)next_coords;
- for ( i = 0; i < fvar_head.axisCount; i++ )
- {
- mmvar->axis[i].name = next_name;
- next_name += 5;
- }
-
- /* now fill in the data */
-
- if ( FT_STREAM_SEEK( fvar_start + fvar_head.offsetToData ) )
- goto Exit;
-
- a = mmvar->axis;
- for ( i = 0; i < fvar_head.axisCount; i++ )
- {
- GX_FVar_Axis axis_rec;
-
-
- if ( FT_STREAM_READ_FIELDS( fvaraxis_fields, &axis_rec ) )
- goto Exit;
- a->tag = axis_rec.axisTag;
- a->minimum = axis_rec.minValue;
- a->def = axis_rec.defaultValue;
- a->maximum = axis_rec.maxValue;
- a->strid = axis_rec.nameID;
-
- a->name[0] = (FT_String)( a->tag >> 24 );
- a->name[1] = (FT_String)( ( a->tag >> 16 ) & 0xFF );
- a->name[2] = (FT_String)( ( a->tag >> 8 ) & 0xFF );
- a->name[3] = (FT_String)( ( a->tag ) & 0xFF );
- a->name[4] = '\0';
-
- if ( a->minimum > a->def ||
- a->def > a->maximum )
- {
- FT_TRACE2(( "TT_Get_MM_Var:"
- " invalid \"%s\" axis record; disabling\n",
- a->name ));
-
- a->minimum = a->def;
- a->maximum = a->def;
- }
-
- FT_TRACE5(( " \"%s\": minimum=%.5f, default=%.5f, maximum=%.5f\n",
- a->name,
- a->minimum / 65536.0,
- a->def / 65536.0,
- a->maximum / 65536.0 ));
-
- a++;
- }
-
- FT_TRACE5(( "\n" ));
-
- /* named instance coordinates are stored as design coordinates; */
- /* we have to convert them to normalized coordinates also */
- if ( FT_NEW_ARRAY( face->blend->normalized_stylecoords,
- fvar_head.axisCount * num_instances ) )
- goto Exit;
-
- if ( fvar_head.instanceCount && !face->blend->avar_loaded )
- ft_var_load_avar( face );
-
- ns = mmvar->namedstyle;
- nsc = face->blend->normalized_stylecoords;
- for ( i = 0; i < fvar_head.instanceCount; i++, ns++ )
- {
- /* PostScript names add 2 bytes to the instance record size */
- if ( FT_FRAME_ENTER( ( usePsName ? 6L : 4L ) +
- 4L * fvar_head.axisCount ) )
- goto Exit;
-
- ns->strid = FT_GET_USHORT();
- (void) /* flags = */ FT_GET_USHORT();
-
- c = ns->coords;
- for ( j = 0; j < fvar_head.axisCount; j++, c++ )
- *c = FT_GET_LONG();
-
- if ( usePsName )
- ns->psid = FT_GET_USHORT();
-
- ft_var_to_normalized( face,
- fvar_head.axisCount,
- ns->coords,
- nsc );
- nsc += fvar_head.axisCount;
-
- FT_FRAME_EXIT();
- }
-
- if ( num_instances != fvar_head.instanceCount )
- {
- SFNT_Service sfnt = (SFNT_Service)face->sfnt;
-
- FT_Int found, dummy1, dummy2;
- FT_UInt strid = 0xFFFFFFFFUL;
-
-
- /* the default instance is missing in array the */
- /* of named instances; try to synthesize an entry */
- found = sfnt->get_name_id( face,
- TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY,
- &dummy1,
- &dummy2 );
- if ( found )
- strid = TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY;
- else
- {
- found = sfnt->get_name_id( face,
- TT_NAME_ID_FONT_SUBFAMILY,
- &dummy1,
- &dummy2 );
- if ( found )
- strid = TT_NAME_ID_FONT_SUBFAMILY;
- }
-
- if ( found )
- {
- found = sfnt->get_name_id( face,
- TT_NAME_ID_PS_NAME,
- &dummy1,
- &dummy2 );
- if ( found )
- {
- FT_TRACE5(( "TT_Get_MM_Var:"
- " Adding default instance to named instances\n" ));
-
- ns = &mmvar->namedstyle[fvar_head.instanceCount];
-
- ns->strid = strid;
- ns->psid = TT_NAME_ID_PS_NAME;
-
- a = mmvar->axis;
- c = ns->coords;
- for ( j = 0; j < fvar_head.axisCount; j++, a++, c++ )
- *c = a->def;
- }
- }
- }
-
- ft_var_load_mvar( face );
- }
-
- /* fill the output array if requested */
-
- if ( master )
- {
- FT_UInt n;
-
-
- if ( FT_ALLOC( mmvar, face->blend->mmvar_len ) )
- goto Exit;
- FT_MEM_COPY( mmvar, face->blend->mmvar, face->blend->mmvar_len );
-
- mmvar->axis =
- (FT_Var_Axis*)&( mmvar[1] );
- mmvar->namedstyle =
- (FT_Var_Named_Style*)&( mmvar->axis[mmvar->num_axis] );
- next_coords =
- (FT_Fixed*)&( mmvar->namedstyle[mmvar->num_namedstyles] );
-
- for ( n = 0; n < mmvar->num_namedstyles; n++ )
- {
- mmvar->namedstyle[n].coords = next_coords;
- next_coords += mmvar->num_axis;
- }
-
- a = mmvar->axis;
- next_name = (FT_String*)next_coords;
- for ( n = 0; n < mmvar->num_axis; n++ )
- {
- a->name = next_name;
-
- /* standard PostScript names for some standard apple tags */
- if ( a->tag == TTAG_wght )
- a->name = (char*)"Weight";
- else if ( a->tag == TTAG_wdth )
- a->name = (char*)"Width";
- else if ( a->tag == TTAG_opsz )
- a->name = (char*)"OpticalSize";
- else if ( a->tag == TTAG_slnt )
- a->name = (char*)"Slant";
-
- next_name += 5;
- a++;
- }
-
- *master = mmvar;
- }
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- tt_set_mm_blend( TT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords,
- FT_Bool set_design_coords )
- {
- FT_Error error = FT_Err_Ok;
- GX_Blend blend;
- FT_MM_Var* mmvar;
- FT_UInt i, j;
-
- FT_Bool is_default_instance = TRUE;
- FT_Bool all_design_coords = FALSE;
-
- FT_Memory memory = face->root.memory;
-
- enum
- {
- mcvt_retain,
- mcvt_modify,
- mcvt_load
-
- } manageCvt;
-
-
- face->doblend = FALSE;
-
- if ( !face->blend )
- {
- if ( FT_SET_ERROR( TT_Get_MM_Var( face, NULL ) ) )
- goto Exit;
- }
-
- blend = face->blend;
- mmvar = blend->mmvar;
-
- if ( num_coords > mmvar->num_axis )
- {
- FT_TRACE2(( "TT_Set_MM_Blend:"
- " only using first %d of %d coordinates\n",
- mmvar->num_axis, num_coords ));
- num_coords = mmvar->num_axis;
- }
-
- FT_TRACE5(( "normalized design coordinates:\n" ));
-
- for ( i = 0; i < num_coords; i++ )
- {
- FT_TRACE5(( " %.5f\n", coords[i] / 65536.0 ));
- if ( coords[i] < -0x00010000L || coords[i] > 0x00010000L )
- {
- FT_TRACE1(( "TT_Set_MM_Blend: normalized design coordinate %.5f\n"
- " is out of range [-1;1]\n",
- coords[i] / 65536.0 ));
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- if ( coords[i] != 0 )
- is_default_instance = FALSE;
- }
-
- FT_TRACE5(( "\n" ));
-
- if ( !face->is_cff2 && !blend->glyphoffsets )
- if ( FT_SET_ERROR( ft_var_load_gvar( face ) ) )
- goto Exit;
-
- if ( !blend->coords )
- {
- if ( FT_NEW_ARRAY( blend->coords, mmvar->num_axis ) )
- goto Exit;
-
- /* the first time we have to compute all design coordinates */
- all_design_coords = TRUE;
- }
-
- if ( !blend->normalizedcoords )
- {
- if ( FT_NEW_ARRAY( blend->normalizedcoords, mmvar->num_axis ) )
- goto Exit;
-
- manageCvt = mcvt_modify;
-
- /* If we have not set the blend coordinates before this, then the */
- /* cvt table will still be what we read from the `cvt ' table and */
- /* we don't need to reload it. We may need to change it though... */
- }
- else
- {
- manageCvt = mcvt_retain;
-
- for ( i = 0; i < num_coords; i++ )
- {
- if ( blend->normalizedcoords[i] != coords[i] )
- {
- manageCvt = mcvt_load;
- break;
- }
- }
-
- for ( ; i < mmvar->num_axis; i++ )
- {
- if ( blend->normalizedcoords[i] != 0 )
- {
- manageCvt = mcvt_load;
- break;
- }
- }
-
- /* If we don't change the blend coords then we don't need to do */
- /* anything to the cvt table. It will be correct. Otherwise we */
- /* no longer have the original cvt (it was modified when we set */
- /* the blend last time), so we must reload and then modify it. */
- }
-
- blend->num_axis = mmvar->num_axis;
- FT_MEM_COPY( blend->normalizedcoords,
- coords,
- num_coords * sizeof ( FT_Fixed ) );
-
- if ( set_design_coords )
- ft_var_to_design( face,
- all_design_coords ? blend->num_axis : num_coords,
- blend->normalizedcoords,
- blend->coords );
-
- face->doblend = TRUE;
-
- if ( face->cvt )
- {
- switch ( manageCvt )
- {
- case mcvt_load:
- /* The cvt table has been loaded already; every time we change the */
- /* blend we may need to reload and remodify the cvt table. */
- FT_FREE( face->cvt );
- face->cvt = NULL;
-
- error = tt_face_load_cvt( face, face->root.stream );
- break;
-
- case mcvt_modify:
- /* The original cvt table is in memory. All we need to do is */
- /* apply the `cvar' table (if any). */
- error = tt_face_vary_cvt( face, face->root.stream );
- break;
-
- case mcvt_retain:
- /* The cvt table is correct for this set of coordinates. */
- break;
- }
- }
-
- /* check whether the current variation tuple coincides */
- /* with a named instance */
-
- for ( i = 0; i < blend->mmvar->num_namedstyles; i++ )
- {
- FT_Fixed* nsc = blend->normalized_stylecoords + i * blend->num_axis;
- FT_Fixed* ns = blend->normalizedcoords;
-
-
- for ( j = 0; j < blend->num_axis; j++, nsc++, ns++ )
- {
- if ( *nsc != *ns )
- break;
- }
-
- if ( j == blend->num_axis )
- break;
- }
-
- /* adjust named instance index */
- face->root.face_index &= 0xFFFF;
- if ( i < blend->mmvar->num_namedstyles )
- face->root.face_index |= ( i + 1 ) << 16;
-
- face->is_default_instance = is_default_instance;
-
- /* enforce recomputation of the PostScript name; */
- FT_FREE( face->postscript_name );
- face->postscript_name = NULL;
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Set_MM_Blend */
- /* */
- /* <Description> */
- /* Set the blend (normalized) coordinates for this instance of the */
- /* font. Check that the `gvar' table is reasonable and does some */
- /* initial preparation. */
- /* */
- /* <InOut> */
- /* face :: The font. */
- /* Initialize the blend structure with `gvar' data. */
- /* */
- /* <Input> */
- /* num_coords :: The number of available coordinates. If it is */
- /* larger than the number of axes, ignore the excess */
- /* values. If it is smaller than the number of axes, */
- /* use the default value (0) for the remaining axes. */
- /* */
- /* coords :: An array of `num_coords', each between [-1,1]. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- TT_Set_MM_Blend( TT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- return tt_set_mm_blend( face, num_coords, coords, 1 );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Get_MM_Blend */
- /* */
- /* <Description> */
- /* Get the blend (normalized) coordinates for this instance of the */
- /* font. */
- /* */
- /* <InOut> */
- /* face :: The font. */
- /* Initialize the blend structure with `gvar' data. */
- /* */
- /* <Input> */
- /* num_coords :: The number of available coordinates. If it is */
- /* larger than the number of axes, set the excess */
- /* values to 0. */
- /* */
- /* coords :: An array of `num_coords', each between [-1,1]. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- TT_Get_MM_Blend( TT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- FT_Error error = FT_Err_Ok;
- GX_Blend blend;
- FT_UInt i, nc;
-
-
- if ( !face->blend )
- {
- if ( FT_SET_ERROR( TT_Get_MM_Var( face, NULL ) ) )
- return error;
- }
-
- blend = face->blend;
-
- if ( !blend->coords )
- {
- /* select default instance coordinates */
- /* if no instance is selected yet */
- if ( FT_SET_ERROR( tt_set_mm_blend( face, 0, NULL, 1 ) ) )
- return error;
- }
-
- nc = num_coords;
- if ( num_coords > blend->num_axis )
- {
- FT_TRACE2(( "TT_Get_MM_Blend:"
- " only using first %d of %d coordinates\n",
- blend->num_axis, num_coords ));
- nc = blend->num_axis;
- }
-
- if ( face->doblend )
- {
- for ( i = 0; i < nc; i++ )
- coords[i] = blend->normalizedcoords[i];
- }
- else
- {
- for ( i = 0; i < nc; i++ )
- coords[i] = 0;
- }
-
- for ( ; i < num_coords; i++ )
- coords[i] = 0;
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Set_Var_Design */
- /* */
- /* <Description> */
- /* Set the coordinates for the instance, measured in the user */
- /* coordinate system. Parse the `avar' table (if present) to convert */
- /* from user to normalized coordinates. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* Initialize the blend struct with `gvar' data. */
- /* */
- /* <Input> */
- /* num_coords :: The number of available coordinates. If it is */
- /* larger than the number of axes, ignore the excess */
- /* values. If it is smaller than the number of axes, */
- /* use the default values for the remaining axes. */
- /* */
- /* coords :: A coordinate array with `num_coords' elements. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- TT_Set_Var_Design( TT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- FT_Error error = FT_Err_Ok;
- GX_Blend blend;
- FT_MM_Var* mmvar;
- FT_UInt i;
- FT_Memory memory = face->root.memory;
-
- FT_Var_Axis* a;
- FT_Fixed* c;
-
- FT_Fixed* normalized = NULL;
-
-
- if ( !face->blend )
- {
- if ( FT_SET_ERROR( TT_Get_MM_Var( face, NULL ) ) )
- goto Exit;
- }
-
- blend = face->blend;
- mmvar = blend->mmvar;
-
- if ( num_coords > mmvar->num_axis )
- {
- FT_TRACE2(( "TT_Set_Var_Design:"
- " only using first %d of %d coordinates\n",
- mmvar->num_axis, num_coords ));
- num_coords = mmvar->num_axis;
- }
-
- if ( !blend->coords )
- {
- if ( FT_NEW_ARRAY( blend->coords, mmvar->num_axis ) )
- goto Exit;
- }
-
- FT_MEM_COPY( blend->coords,
- coords,
- num_coords * sizeof ( FT_Fixed ) );
-
- a = mmvar->axis + num_coords;
- c = blend->coords + num_coords;
- for ( i = num_coords; i < mmvar->num_axis; i++, a++, c++ )
- *c = a->def;
-
- if ( FT_NEW_ARRAY( normalized, mmvar->num_axis ) )
- goto Exit;
-
- if ( !face->blend->avar_loaded )
- ft_var_load_avar( face );
-
- ft_var_to_normalized( face, num_coords, blend->coords, normalized );
-
- error = tt_set_mm_blend( face, mmvar->num_axis, normalized, 0 );
-
- Exit:
- FT_FREE( normalized );
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Get_Var_Design */
- /* */
- /* <Description> */
- /* Get the design coordinates of the currently selected interpolated */
- /* font. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* num_coords :: The number of design coordinates to retrieve. If it */
- /* is larger than the number of axes, set the excess */
- /* values to~0. */
- /* */
- /* <Output> */
- /* coords :: The design coordinates array. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- TT_Get_Var_Design( TT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- FT_Error error = FT_Err_Ok;
- GX_Blend blend;
- FT_UInt i, nc;
-
-
- if ( !face->blend )
- {
- if ( FT_SET_ERROR( TT_Get_MM_Var( face, NULL ) ) )
- return error;
- }
-
- blend = face->blend;
-
- if ( !blend->coords )
- {
- /* select default instance coordinates */
- /* if no instance is selected yet */
- if ( FT_SET_ERROR( tt_set_mm_blend( face, 0, NULL, 1 ) ) )
- return error;
- }
-
- nc = num_coords;
- if ( num_coords > blend->num_axis )
- {
- FT_TRACE2(( "TT_Get_Var_Design:"
- " only using first %d of %d coordinates\n",
- blend->num_axis, num_coords ));
- nc = blend->num_axis;
- }
-
- if ( face->doblend )
- {
- for ( i = 0; i < nc; i++ )
- coords[i] = blend->coords[i];
- }
- else
- {
- for ( i = 0; i < nc; i++ )
- coords[i] = 0;
- }
-
- for ( ; i < num_coords; i++ )
- coords[i] = 0;
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GX VAR PARSING ROUTINES *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_vary_cvt */
- /* */
- /* <Description> */
- /* Modify the loaded cvt table according to the `cvar' table and the */
- /* font's blend. */
- /* */
- /* <InOut> */
- /* face :: A handle to the target face object. */
- /* */
- /* <Input> */
- /* stream :: A handle to the input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* Most errors are ignored. It is perfectly valid not to have a */
- /* `cvar' table even if there is a `gvar' and `fvar' table. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_vary_cvt( TT_Face face,
- FT_Stream stream )
- {
- FT_Error error;
- FT_Memory memory = stream->memory;
- FT_ULong table_start;
- FT_ULong table_len;
- FT_UInt tupleCount;
- FT_ULong offsetToData;
- FT_ULong here;
- FT_UInt i, j;
- FT_Fixed* tuple_coords = NULL;
- FT_Fixed* im_start_coords = NULL;
- FT_Fixed* im_end_coords = NULL;
- GX_Blend blend = face->blend;
- FT_UInt point_count;
- FT_UShort* localpoints;
- FT_Short* deltas;
-
-
- FT_TRACE2(( "CVAR " ));
-
- if ( !blend )
- {
- FT_TRACE2(( "\n"
- "tt_face_vary_cvt: no blend specified\n" ));
- error = FT_Err_Ok;
- goto Exit;
- }
-
- if ( !face->cvt )
- {
- FT_TRACE2(( "\n"
- "tt_face_vary_cvt: no `cvt ' table\n" ));
- error = FT_Err_Ok;
- goto Exit;
- }
-
- error = face->goto_table( face, TTAG_cvar, stream, &table_len );
- if ( error )
- {
- FT_TRACE2(( "is missing\n" ));
-
- error = FT_Err_Ok;
- goto Exit;
- }
-
- if ( FT_FRAME_ENTER( table_len ) )
- {
- error = FT_Err_Ok;
- goto Exit;
- }
-
- table_start = FT_Stream_FTell( stream );
- if ( FT_GET_LONG() != 0x00010000L )
- {
- FT_TRACE2(( "bad table version\n" ));
-
- error = FT_Err_Ok;
- goto FExit;
- }
-
- FT_TRACE2(( "loaded\n" ));
-
- if ( FT_NEW_ARRAY( tuple_coords, blend->num_axis ) ||
- FT_NEW_ARRAY( im_start_coords, blend->num_axis ) ||
- FT_NEW_ARRAY( im_end_coords, blend->num_axis ) )
- goto FExit;
-
- tupleCount = FT_GET_USHORT();
- offsetToData = FT_GET_USHORT();
-
- /* rough sanity test */
- if ( offsetToData + ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) * 4 >
- table_len )
- {
- FT_TRACE2(( "tt_face_vary_cvt:"
- " invalid CVT variation array header\n" ));
-
- error = FT_THROW( Invalid_Table );
- goto FExit;
- }
-
- offsetToData += table_start;
-
- /* The documentation implies there are flags packed into */
- /* `tupleCount', but John Jenkins says that shared points don't apply */
- /* to `cvar', and no other flags are defined. */
-
- FT_TRACE5(( "cvar: there are %d tuples:\n", tupleCount & 0xFFF ));
-
- for ( i = 0; i < ( tupleCount & 0xFFF ); i++ )
- {
- FT_UInt tupleDataSize;
- FT_UInt tupleIndex;
- FT_Fixed apply;
-
-
- FT_TRACE6(( " tuple %d:\n", i ));
-
- tupleDataSize = FT_GET_USHORT();
- tupleIndex = FT_GET_USHORT();
-
- /* There is no provision here for a global tuple coordinate section, */
- /* so John says. There are no tuple indices, just embedded tuples. */
-
- if ( tupleIndex & GX_TI_EMBEDDED_TUPLE_COORD )
- {
- for ( j = 0; j < blend->num_axis; j++ )
- tuple_coords[j] = FT_GET_SHORT() * 4; /* convert from */
- /* short frac to fixed */
- }
- else
- {
- /* skip this tuple; it makes no sense */
-
- if ( tupleIndex & GX_TI_INTERMEDIATE_TUPLE )
- for ( j = 0; j < 2 * blend->num_axis; j++ )
- (void)FT_GET_SHORT();
-
- offsetToData += tupleDataSize;
- continue;
- }
-
- if ( tupleIndex & GX_TI_INTERMEDIATE_TUPLE )
- {
- for ( j = 0; j < blend->num_axis; j++ )
- im_start_coords[j] = FT_GET_SHORT() * 4;
- for ( j = 0; j < blend->num_axis; j++ )
- im_end_coords[j] = FT_GET_SHORT() * 4;
- }
-
- apply = ft_var_apply_tuple( blend,
- (FT_UShort)tupleIndex,
- tuple_coords,
- im_start_coords,
- im_end_coords );
- if ( /* tuple isn't active for our blend */
- apply == 0 ||
- /* global points not allowed, */
- /* if they aren't local, makes no sense */
- !( tupleIndex & GX_TI_PRIVATE_POINT_NUMBERS ) )
- {
- offsetToData += tupleDataSize;
- continue;
- }
-
- here = FT_Stream_FTell( stream );
-
- FT_Stream_SeekSet( stream, offsetToData );
-
- localpoints = ft_var_readpackedpoints( stream,
- table_len,
- &point_count );
- deltas = ft_var_readpackeddeltas( stream,
- table_len,
- point_count == 0 ? face->cvt_size
- : point_count );
- if ( !localpoints || !deltas )
- ; /* failure, ignore it */
-
- else if ( localpoints == ALL_POINTS )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- int count = 0;
-#endif
-
-
- FT_TRACE7(( " CVT deltas:\n" ));
-
- /* this means that there are deltas for every entry in cvt */
- for ( j = 0; j < face->cvt_size; j++ )
- {
- FT_Long orig_cvt = face->cvt[j];
-
-
- face->cvt[j] = (FT_Short)( orig_cvt +
- FT_MulFix( deltas[j], apply ) );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( orig_cvt != face->cvt[j] )
- {
- FT_TRACE7(( " %d: %d -> %d\n",
- j, orig_cvt, face->cvt[j] ));
- count++;
- }
-#endif
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !count )
- FT_TRACE7(( " none\n" ));
-#endif
- }
-
- else
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- int count = 0;
-#endif
-
-
- FT_TRACE7(( " CVT deltas:\n" ));
-
- for ( j = 0; j < point_count; j++ )
- {
- int pindex;
- FT_Long orig_cvt;
-
-
- pindex = localpoints[j];
- if ( (FT_ULong)pindex >= face->cvt_size )
- continue;
-
- orig_cvt = face->cvt[pindex];
- face->cvt[pindex] = (FT_Short)( orig_cvt +
- FT_MulFix( deltas[j], apply ) );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( orig_cvt != face->cvt[pindex] )
- {
- FT_TRACE7(( " %d: %d -> %d\n",
- pindex, orig_cvt, face->cvt[pindex] ));
- count++;
- }
-#endif
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !count )
- FT_TRACE7(( " none\n" ));
-#endif
- }
-
- if ( localpoints != ALL_POINTS )
- FT_FREE( localpoints );
- FT_FREE( deltas );
-
- offsetToData += tupleDataSize;
-
- FT_Stream_SeekSet( stream, here );
- }
-
- FT_TRACE5(( "\n" ));
-
- FExit:
- FT_FRAME_EXIT();
-
- Exit:
- FT_FREE( tuple_coords );
- FT_FREE( im_start_coords );
- FT_FREE( im_end_coords );
-
- return error;
- }
-
-
- /* Shift the original coordinates of all points between indices `p1' */
- /* and `p2', using the same difference as given by index `ref'. */
-
- /* modeled after `af_iup_shift' */
-
- static void
- tt_delta_shift( int p1,
- int p2,
- int ref,
- FT_Vector* in_points,
- FT_Vector* out_points )
- {
- int p;
- FT_Vector delta;
-
-
- delta.x = out_points[ref].x - in_points[ref].x;
- delta.y = out_points[ref].y - in_points[ref].y;
-
- if ( delta.x == 0 && delta.y == 0 )
- return;
-
- for ( p = p1; p < ref; p++ )
- {
- out_points[p].x += delta.x;
- out_points[p].y += delta.y;
- }
-
- for ( p = ref + 1; p <= p2; p++ )
- {
- out_points[p].x += delta.x;
- out_points[p].y += delta.y;
- }
- }
-
-
- /* Interpolate the original coordinates of all points with indices */
- /* between `p1' and `p2', using `ref1' and `ref2' as the reference */
- /* point indices. */
-
- /* modeled after `af_iup_interp', `_iup_worker_interpolate', and */
- /* `Ins_IUP' */
-
- static void
- tt_delta_interpolate( int p1,
- int p2,
- int ref1,
- int ref2,
- FT_Vector* in_points,
- FT_Vector* out_points )
- {
- int p, i;
-
- FT_Pos out, in1, in2, out1, out2, d1, d2;
-
-
- if ( p1 > p2 )
- return;
-
- /* handle both horizontal and vertical coordinates */
- for ( i = 0; i <= 1; i++ )
- {
- /* shift array pointers so that we can access `foo.y' as `foo.x' */
- in_points = (FT_Vector*)( (FT_Pos*)in_points + i );
- out_points = (FT_Vector*)( (FT_Pos*)out_points + i );
-
- if ( in_points[ref1].x > in_points[ref2].x )
- {
- p = ref1;
- ref1 = ref2;
- ref2 = p;
- }
-
- in1 = in_points[ref1].x;
- in2 = in_points[ref2].x;
- out1 = out_points[ref1].x;
- out2 = out_points[ref2].x;
- d1 = out1 - in1;
- d2 = out2 - in2;
-
- /* If the reference points have the same coordinate but different */
- /* delta, inferred delta is zero. Otherwise interpolate. */
- if ( in1 != in2 || out1 == out2 )
- {
- FT_Fixed scale = in1 != in2 ? FT_DivFix( out2 - out1, in2 - in1 )
- : 0;
-
-
- for ( p = p1; p <= p2; p++ )
- {
- out = in_points[p].x;
-
- if ( out <= in1 )
- out += d1;
- else if ( out >= in2 )
- out += d2;
- else
- out = out1 + FT_MulFix( out - in1, scale );
-
- out_points[p].x = out;
- }
- }
- }
- }
-
-
- /* Interpolate points without delta values, similar to */
- /* the `IUP' hinting instruction. */
-
- /* modeled after `Ins_IUP */
-
- static void
- tt_interpolate_deltas( FT_Outline* outline,
- FT_Vector* out_points,
- FT_Vector* in_points,
- FT_Bool* has_delta )
- {
- FT_Int first_point;
- FT_Int end_point;
-
- FT_Int first_delta;
- FT_Int cur_delta;
-
- FT_Int point;
- FT_Short contour;
-
-
- /* ignore empty outlines */
- if ( !outline->n_contours )
- return;
-
- contour = 0;
- point = 0;
-
- do
- {
- end_point = outline->contours[contour];
- first_point = point;
-
- /* search first point that has a delta */
- while ( point <= end_point && !has_delta[point] )
- point++;
-
- if ( point <= end_point )
- {
- first_delta = point;
- cur_delta = point;
-
- point++;
-
- while ( point <= end_point )
- {
- /* search next point that has a delta */
- /* and interpolate intermediate points */
- if ( has_delta[point] )
- {
- tt_delta_interpolate( cur_delta + 1,
- point - 1,
- cur_delta,
- point,
- in_points,
- out_points );
- cur_delta = point;
- }
-
- point++;
- }
-
- /* shift contour if we only have a single delta */
- if ( cur_delta == first_delta )
- tt_delta_shift( first_point,
- end_point,
- cur_delta,
- in_points,
- out_points );
- else
- {
- /* otherwise handle remaining points */
- /* at the end and beginning of the contour */
- tt_delta_interpolate( cur_delta + 1,
- end_point,
- cur_delta,
- first_delta,
- in_points,
- out_points );
-
- if ( first_delta > 0 )
- tt_delta_interpolate( first_point,
- first_delta - 1,
- cur_delta,
- first_delta,
- in_points,
- out_points );
- }
- }
- contour++;
-
- } while ( contour < outline->n_contours );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Vary_Apply_Glyph_Deltas */
- /* */
- /* <Description> */
- /* Apply the appropriate deltas to the current glyph. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* glyph_index :: The index of the glyph being modified. */
- /* */
- /* n_points :: The number of the points in the glyph, including */
- /* phantom points. */
- /* */
- /* <InOut> */
- /* outline :: The outline to change. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- TT_Vary_Apply_Glyph_Deltas( TT_Face face,
- FT_UInt glyph_index,
- FT_Outline* outline,
- FT_UInt n_points )
- {
- FT_Stream stream = face->root.stream;
- FT_Memory memory = stream->memory;
- GX_Blend blend = face->blend;
-
- FT_Vector* points_org = NULL;
- FT_Vector* points_out = NULL;
- FT_Bool* has_delta = NULL;
-
- FT_Error error;
- FT_ULong glyph_start;
- FT_UInt tupleCount;
- FT_ULong offsetToData;
- FT_ULong here;
- FT_UInt i, j;
- FT_Fixed* tuple_coords = NULL;
- FT_Fixed* im_start_coords = NULL;
- FT_Fixed* im_end_coords = NULL;
- FT_UInt point_count, spoint_count = 0;
- FT_UShort* sharedpoints = NULL;
- FT_UShort* localpoints = NULL;
- FT_UShort* points;
- FT_Short *deltas_x, *deltas_y;
-
-
- if ( !face->doblend || !blend )
- return FT_THROW( Invalid_Argument );
-
- if ( glyph_index >= blend->gv_glyphcnt ||
- blend->glyphoffsets[glyph_index] ==
- blend->glyphoffsets[glyph_index + 1] )
- {
- FT_TRACE2(( "TT_Vary_Apply_Glyph_Deltas:"
- " no variation data for this glyph\n" ));
- return FT_Err_Ok;
- }
-
- if ( FT_NEW_ARRAY( points_org, n_points ) ||
- FT_NEW_ARRAY( points_out, n_points ) ||
- FT_NEW_ARRAY( has_delta, n_points ) )
- goto Fail1;
-
- if ( FT_STREAM_SEEK( blend->glyphoffsets[glyph_index] ) ||
- FT_FRAME_ENTER( blend->glyphoffsets[glyph_index + 1] -
- blend->glyphoffsets[glyph_index] ) )
- goto Fail1;
-
- glyph_start = FT_Stream_FTell( stream );
-
- /* each set of glyph variation data is formatted similarly to `cvar' */
- /* (except we get shared points and global tuples) */
-
- if ( FT_NEW_ARRAY( tuple_coords, blend->num_axis ) ||
- FT_NEW_ARRAY( im_start_coords, blend->num_axis ) ||
- FT_NEW_ARRAY( im_end_coords, blend->num_axis ) )
- goto Fail2;
-
- tupleCount = FT_GET_USHORT();
- offsetToData = FT_GET_USHORT();
-
- /* rough sanity test */
- if ( offsetToData + ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) * 4 >
- blend->gvar_size )
- {
- FT_TRACE2(( "TT_Vary_Apply_Glyph_Deltas:"
- " invalid glyph variation array header\n" ));
-
- error = FT_THROW( Invalid_Table );
- goto Fail2;
- }
-
- offsetToData += glyph_start;
-
- if ( tupleCount & GX_TC_TUPLES_SHARE_POINT_NUMBERS )
- {
- here = FT_Stream_FTell( stream );
-
- FT_Stream_SeekSet( stream, offsetToData );
-
- sharedpoints = ft_var_readpackedpoints( stream,
- blend->gvar_size,
- &spoint_count );
- offsetToData = FT_Stream_FTell( stream );
-
- FT_Stream_SeekSet( stream, here );
- }
-
- FT_TRACE5(( "gvar: there are %d tuples:\n",
- tupleCount & GX_TC_TUPLE_COUNT_MASK ));
-
- for ( j = 0; j < n_points; j++ )
- points_org[j] = outline->points[j];
-
- for ( i = 0; i < ( tupleCount & GX_TC_TUPLE_COUNT_MASK ); i++ )
- {
- FT_UInt tupleDataSize;
- FT_UInt tupleIndex;
- FT_Fixed apply;
-
-
- FT_TRACE6(( " tuple %d:\n", i ));
-
- tupleDataSize = FT_GET_USHORT();
- tupleIndex = FT_GET_USHORT();
-
- if ( tupleIndex & GX_TI_EMBEDDED_TUPLE_COORD )
- {
- for ( j = 0; j < blend->num_axis; j++ )
- tuple_coords[j] = FT_GET_SHORT() * 4; /* convert from */
- /* short frac to fixed */
- }
- else if ( ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) >= blend->tuplecount )
- {
- FT_TRACE2(( "TT_Vary_Apply_Glyph_Deltas:"
- " invalid tuple index\n" ));
-
- error = FT_THROW( Invalid_Table );
- goto Fail2;
- }
- else
- FT_MEM_COPY(
- tuple_coords,
- &blend->tuplecoords[( tupleIndex & 0xFFF ) * blend->num_axis],
- blend->num_axis * sizeof ( FT_Fixed ) );
-
- if ( tupleIndex & GX_TI_INTERMEDIATE_TUPLE )
- {
- for ( j = 0; j < blend->num_axis; j++ )
- im_start_coords[j] = FT_GET_SHORT() * 4;
- for ( j = 0; j < blend->num_axis; j++ )
- im_end_coords[j] = FT_GET_SHORT() * 4;
- }
-
- apply = ft_var_apply_tuple( blend,
- (FT_UShort)tupleIndex,
- tuple_coords,
- im_start_coords,
- im_end_coords );
-
- if ( apply == 0 ) /* tuple isn't active for our blend */
- {
- offsetToData += tupleDataSize;
- continue;
- }
-
- here = FT_Stream_FTell( stream );
-
- FT_Stream_SeekSet( stream, offsetToData );
-
- if ( tupleIndex & GX_TI_PRIVATE_POINT_NUMBERS )
- {
- localpoints = ft_var_readpackedpoints( stream,
- blend->gvar_size,
- &point_count );
- points = localpoints;
- }
- else
- {
- points = sharedpoints;
- point_count = spoint_count;
- }
-
- deltas_x = ft_var_readpackeddeltas( stream,
- blend->gvar_size,
- point_count == 0 ? n_points
- : point_count );
- deltas_y = ft_var_readpackeddeltas( stream,
- blend->gvar_size,
- point_count == 0 ? n_points
- : point_count );
-
- if ( !points || !deltas_y || !deltas_x )
- ; /* failure, ignore it */
-
- else if ( points == ALL_POINTS )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- int count = 0;
-#endif
-
-
- FT_TRACE7(( " point deltas:\n" ));
-
- /* this means that there are deltas for every point in the glyph */
- for ( j = 0; j < n_points; j++ )
- {
- FT_Pos delta_x = FT_MulFix( deltas_x[j], apply );
- FT_Pos delta_y = FT_MulFix( deltas_y[j], apply );
-
-
- if ( j < n_points - 3 )
- {
- outline->points[j].x += delta_x;
- outline->points[j].y += delta_y;
- }
- else
- {
- /* To avoid double adjustment of advance width or height, */
- /* adjust phantom points only if there is no HVAR or VVAR */
- /* support, respectively. */
- if ( j == ( n_points - 3 ) &&
- !( face->variation_support &
- TT_FACE_FLAG_VAR_HADVANCE ) )
- outline->points[j].x += delta_x;
-
- else if ( j == ( n_points - 2 ) &&
- !( face->variation_support &
- TT_FACE_FLAG_VAR_LSB ) )
- outline->points[j].x += delta_x;
-
- else if ( j == ( n_points - 1 ) &&
- !( face->variation_support &
- TT_FACE_FLAG_VAR_VADVANCE ) )
- outline->points[j].y += delta_y;
-
- else if ( j == ( n_points - 0 ) &&
- !( face->variation_support &
- TT_FACE_FLAG_VAR_TSB ) )
- outline->points[j].y += delta_y;
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( delta_x || delta_y )
- {
- FT_TRACE7(( " %d: (%d, %d) -> (%d, %d)\n",
- j,
- outline->points[j].x - delta_x,
- outline->points[j].y - delta_y,
- outline->points[j].x,
- outline->points[j].y ));
- count++;
- }
-#endif
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !count )
- FT_TRACE7(( " none\n" ));
-#endif
- }
-
- else
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- int count = 0;
-#endif
-
-
- /* we have to interpolate the missing deltas similar to the */
- /* IUP bytecode instruction */
- for ( j = 0; j < n_points; j++ )
- {
- has_delta[j] = FALSE;
- points_out[j] = points_org[j];
- }
-
- for ( j = 0; j < point_count; j++ )
- {
- FT_UShort idx = points[j];
-
-
- if ( idx >= n_points )
- continue;
-
- has_delta[idx] = TRUE;
-
- points_out[idx].x += FT_MulFix( deltas_x[j], apply );
- points_out[idx].y += FT_MulFix( deltas_y[j], apply );
- }
-
- /* no need to handle phantom points here, */
- /* since solitary points can't be interpolated */
- tt_interpolate_deltas( outline,
- points_out,
- points_org,
- has_delta );
-
- FT_TRACE7(( " point deltas:\n" ));
-
- for ( j = 0; j < n_points; j++ )
- {
- FT_Pos delta_x = points_out[j].x - points_org[j].x;
- FT_Pos delta_y = points_out[j].y - points_org[j].y;
-
-
- outline->points[j].x += delta_x;
- outline->points[j].y += delta_y;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( delta_x || delta_y )
- {
- FT_TRACE7(( " %d: (%d, %d) -> (%d, %d)\n",
- j,
- outline->points[j].x - delta_x,
- outline->points[j].y - delta_y,
- outline->points[j].x,
- outline->points[j].y ));
- count++;
- }
-#endif
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !count )
- FT_TRACE7(( " none\n" ));
-#endif
- }
-
- if ( localpoints != ALL_POINTS )
- FT_FREE( localpoints );
- FT_FREE( deltas_x );
- FT_FREE( deltas_y );
-
- offsetToData += tupleDataSize;
-
- FT_Stream_SeekSet( stream, here );
- }
-
- FT_TRACE5(( "\n" ));
-
- Fail2:
- if ( sharedpoints != ALL_POINTS )
- FT_FREE( sharedpoints );
- FT_FREE( tuple_coords );
- FT_FREE( im_start_coords );
- FT_FREE( im_end_coords );
-
- FT_FRAME_EXIT();
-
- Fail1:
- FT_FREE( points_org );
- FT_FREE( points_out );
- FT_FREE( has_delta );
-
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_get_var_blend */
- /* */
- /* <Description> */
- /* An extended internal version of `TT_Get_MM_Blend' that returns */
- /* pointers instead of copying data, without any initialization of */
- /* the MM machinery in case it isn't loaded yet. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_get_var_blend( TT_Face face,
- FT_UInt *num_coords,
- FT_Fixed* *coords,
- FT_Fixed* *normalizedcoords,
- FT_MM_Var* *mm_var )
- {
- if ( face->blend )
- {
- if ( num_coords )
- *num_coords = face->blend->num_axis;
- if ( coords )
- *coords = face->blend->coords;
- if ( normalizedcoords )
- *normalizedcoords = face->blend->normalizedcoords;
- if ( mm_var )
- *mm_var = face->blend->mmvar;
- }
- else
- {
- if ( num_coords )
- *num_coords = 0;
- if ( coords )
- *coords = NULL;
- if ( mm_var )
- *mm_var = NULL;
- }
-
- return FT_Err_Ok;
- }
-
-
- static void
- ft_var_done_item_variation_store( TT_Face face,
- GX_ItemVarStore itemStore )
- {
- FT_Memory memory = FT_FACE_MEMORY( face );
- FT_UInt i;
-
-
- if ( itemStore->varData )
- {
- for ( i = 0; i < itemStore->dataCount; i++ )
- {
- FT_FREE( itemStore->varData[i].regionIndices );
- FT_FREE( itemStore->varData[i].deltaSet );
- }
-
- FT_FREE( itemStore->varData );
- }
-
- if ( itemStore->varRegionList )
- {
- for ( i = 0; i < itemStore->regionCount; i++ )
- FT_FREE( itemStore->varRegionList[i].axisList );
-
- FT_FREE( itemStore->varRegionList );
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_done_blend */
- /* */
- /* <Description> */
- /* Free the blend internal data structure. */
- /* */
- FT_LOCAL_DEF( void )
- tt_done_blend( TT_Face face )
- {
- FT_Memory memory = FT_FACE_MEMORY( face );
- GX_Blend blend = face->blend;
-
-
- if ( blend )
- {
- FT_UInt i, num_axes;
-
-
- /* blend->num_axis might not be set up yet */
- num_axes = blend->mmvar->num_axis;
-
- FT_FREE( blend->coords );
- FT_FREE( blend->normalizedcoords );
- FT_FREE( blend->normalized_stylecoords );
- FT_FREE( blend->mmvar );
-
- if ( blend->avar_segment )
- {
- for ( i = 0; i < num_axes; i++ )
- FT_FREE( blend->avar_segment[i].correspondence );
- FT_FREE( blend->avar_segment );
- }
-
- if ( blend->hvar_table )
- {
- ft_var_done_item_variation_store( face,
- &blend->hvar_table->itemStore );
-
- FT_FREE( blend->hvar_table->widthMap.innerIndex );
- FT_FREE( blend->hvar_table->widthMap.outerIndex );
- FT_FREE( blend->hvar_table );
- }
-
- if ( blend->vvar_table )
- {
- ft_var_done_item_variation_store( face,
- &blend->vvar_table->itemStore );
-
- FT_FREE( blend->vvar_table->widthMap.innerIndex );
- FT_FREE( blend->vvar_table->widthMap.outerIndex );
- FT_FREE( blend->vvar_table );
- }
-
- if ( blend->mvar_table )
- {
- ft_var_done_item_variation_store( face,
- &blend->mvar_table->itemStore );
-
- FT_FREE( blend->mvar_table->values );
- FT_FREE( blend->mvar_table );
- }
-
- FT_FREE( blend->tuplecoords );
- FT_FREE( blend->glyphoffsets );
- FT_FREE( blend );
- }
- }
-
-#else /* !TT_CONFIG_OPTION_GX_VAR_SUPPORT */
-
- /* ANSI C doesn't like empty source files */
- typedef int _tt_gxvar_dummy;
-
-#endif /* !TT_CONFIG_OPTION_GX_VAR_SUPPORT */
-
-
-/* END */
diff --git a/src/truetype/ttgxvar.h b/src/truetype/ttgxvar.h
deleted file mode 100644
index 7e81719a3..000000000
--- a/src/truetype/ttgxvar.h
+++ /dev/null
@@ -1,445 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttgxvar.h */
-/* */
-/* TrueType GX Font Variation loader (specification) */
-/* */
-/* Copyright 2004-2017 by */
-/* David Turner, Robert Wilhelm, Werner Lemberg and George Williams. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTGXVAR_H_
-#define TTGXVAR_H_
-
-
-#include <ft2build.h>
-#include "ttobjs.h"
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* GX_AVarCorrespondenceRec */
- /* */
- /* <Description> */
- /* A data structure representing `shortFracCorrespondence' in `avar' */
- /* table according to the specifications from Apple. */
- /* */
- typedef struct GX_AVarCorrespondenceRec_
- {
- FT_Fixed fromCoord;
- FT_Fixed toCoord;
-
- } GX_AVarCorrespondenceRec_, *GX_AVarCorrespondence;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* GX_AVarRec */
- /* */
- /* <Description> */
- /* Data from the segment field of `avar' table. */
- /* There is one of these for each axis. */
- /* */
- typedef struct GX_AVarSegmentRec_
- {
- FT_UShort pairCount;
- GX_AVarCorrespondence correspondence; /* array with pairCount entries */
-
- } GX_AVarSegmentRec, *GX_AVarSegment;
-
-
- typedef struct GX_ItemVarDataRec_
- {
- FT_UInt itemCount; /* number of delta sets per item */
- FT_UInt regionIdxCount; /* number of region indices in this data */
- FT_UInt* regionIndices; /* array of `regionCount' indices; */
- /* these index `varRegionList' */
- FT_Short* deltaSet; /* array of `itemCount' deltas */
- /* use `innerIndex' for this array */
-
- } GX_ItemVarDataRec, *GX_ItemVarData;
-
-
- /* contribution of one axis to a region */
- typedef struct GX_AxisCoordsRec_
- {
- FT_Fixed startCoord;
- FT_Fixed peakCoord; /* zero means no effect (factor = 1) */
- FT_Fixed endCoord;
-
- } GX_AxisCoordsRec, *GX_AxisCoords;
-
-
- typedef struct GX_VarRegionRec_
- {
- GX_AxisCoords axisList; /* array of axisCount records */
-
- } GX_VarRegionRec, *GX_VarRegion;
-
-
- /* item variation store */
- typedef struct GX_ItemVarStoreRec_
- {
- FT_UInt dataCount;
- GX_ItemVarData varData; /* array of dataCount records; */
- /* use `outerIndex' for this array */
- FT_UShort axisCount;
- FT_UInt regionCount; /* total number of regions defined */
- GX_VarRegion varRegionList;
-
- } GX_ItemVarStoreRec, *GX_ItemVarStore;
-
-
- typedef struct GX_DeltaSetIdxMapRec_
- {
- FT_UInt mapCount;
- FT_UInt* outerIndex; /* indices to item var data */
- FT_UInt* innerIndex; /* indices to delta set */
-
- } GX_DeltaSetIdxMapRec, *GX_DeltaSetIdxMap;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* GX_HVVarTableRec */
- /* */
- /* <Description> */
- /* Data from either the `HVAR' or `VVAR' table. */
- /* */
- typedef struct GX_HVVarTableRec_
- {
- GX_ItemVarStoreRec itemStore; /* Item Variation Store */
- GX_DeltaSetIdxMapRec widthMap; /* Advance Width Mapping */
-
-#if 0
- GX_DeltaSetIdxMapRec lsbMap; /* not implemented */
- GX_DeltaSetIdxMapRec rsbMap; /* not implemented */
-
- GX_DeltaSetIdxMapRec tsbMap; /* not implemented */
- GX_DeltaSetIdxMapRec bsbMap; /* not implemented */
- GX_DeltaSetIdxMapRec vorgMap; /* not implemented */
-#endif
-
- } GX_HVVarTableRec, *GX_HVVarTable;
-
-
-#define MVAR_TAG_GASP_0 FT_MAKE_TAG( 'g', 's', 'p', '0' )
-#define MVAR_TAG_GASP_1 FT_MAKE_TAG( 'g', 's', 'p', '1' )
-#define MVAR_TAG_GASP_2 FT_MAKE_TAG( 'g', 's', 'p', '2' )
-#define MVAR_TAG_GASP_3 FT_MAKE_TAG( 'g', 's', 'p', '3' )
-#define MVAR_TAG_GASP_4 FT_MAKE_TAG( 'g', 's', 'p', '4' )
-#define MVAR_TAG_GASP_5 FT_MAKE_TAG( 'g', 's', 'p', '5' )
-#define MVAR_TAG_GASP_6 FT_MAKE_TAG( 'g', 's', 'p', '6' )
-#define MVAR_TAG_GASP_7 FT_MAKE_TAG( 'g', 's', 'p', '7' )
-#define MVAR_TAG_GASP_8 FT_MAKE_TAG( 'g', 's', 'p', '8' )
-#define MVAR_TAG_GASP_9 FT_MAKE_TAG( 'g', 's', 'p', '9' )
-
-#define MVAR_TAG_CPHT FT_MAKE_TAG( 'c', 'p', 'h', 't' )
-#define MVAR_TAG_HASC FT_MAKE_TAG( 'h', 'a', 's', 'c' )
-#define MVAR_TAG_HCLA FT_MAKE_TAG( 'h', 'c', 'l', 'a' )
-#define MVAR_TAG_HCLD FT_MAKE_TAG( 'h', 'c', 'l', 'd' )
-#define MVAR_TAG_HCOF FT_MAKE_TAG( 'h', 'c', 'o', 'f' )
-#define MVAR_TAG_HCRN FT_MAKE_TAG( 'h', 'c', 'r', 'n' )
-#define MVAR_TAG_HCRS FT_MAKE_TAG( 'h', 'c', 'r', 's' )
-#define MVAR_TAG_HDSC FT_MAKE_TAG( 'h', 'd', 's', 'c' )
-#define MVAR_TAG_HLGP FT_MAKE_TAG( 'h', 'l', 'g', 'p' )
-#define MVAR_TAG_SBXO FT_MAKE_TAG( 's', 'b', 'x', 'o' )
-#define MVAR_TAG_SBXS FT_MAKE_TAG( 's', 'b', 'x', 's' )
-#define MVAR_TAG_SBYO FT_MAKE_TAG( 's', 'b', 'y', 'o' )
-#define MVAR_TAG_SBYS FT_MAKE_TAG( 's', 'b', 'y', 's' )
-#define MVAR_TAG_SPXO FT_MAKE_TAG( 's', 'p', 'x', 'o' )
-#define MVAR_TAG_SPXS FT_MAKE_TAG( 's', 'p', 'x', 's' )
-#define MVAR_TAG_SPYO FT_MAKE_TAG( 's', 'p', 'y', 'o' )
-#define MVAR_TAG_SPYS FT_MAKE_TAG( 's', 'p', 'y', 's' )
-#define MVAR_TAG_STRO FT_MAKE_TAG( 's', 't', 'r', 'o' )
-#define MVAR_TAG_STRS FT_MAKE_TAG( 's', 't', 'r', 's' )
-#define MVAR_TAG_UNDO FT_MAKE_TAG( 'u', 'n', 'd', 'o' )
-#define MVAR_TAG_UNDS FT_MAKE_TAG( 'u', 'n', 'd', 's' )
-#define MVAR_TAG_VASC FT_MAKE_TAG( 'v', 'a', 's', 'c' )
-#define MVAR_TAG_VCOF FT_MAKE_TAG( 'v', 'c', 'o', 'f' )
-#define MVAR_TAG_VCRN FT_MAKE_TAG( 'v', 'c', 'r', 'n' )
-#define MVAR_TAG_VCRS FT_MAKE_TAG( 'v', 'c', 'r', 's' )
-#define MVAR_TAG_VDSC FT_MAKE_TAG( 'v', 'd', 's', 'c' )
-#define MVAR_TAG_VLGP FT_MAKE_TAG( 'v', 'l', 'g', 'p' )
-#define MVAR_TAG_XHGT FT_MAKE_TAG( 'x', 'h', 'g', 't' )
-
-
- typedef struct GX_ValueRec_
- {
- FT_ULong tag;
- FT_UShort outerIndex;
- FT_UShort innerIndex;
-
- FT_Short unmodified; /* values are either FT_Short or FT_UShort */
-
- } GX_ValueRec, *GX_Value;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* GX_MVarTableRec */
- /* */
- /* <Description> */
- /* Data from the `MVAR' table. */
- /* */
- typedef struct GX_MVarTableRec_
- {
- FT_UShort valueCount;
-
- GX_ItemVarStoreRec itemStore; /* Item Variation Store */
- GX_Value values; /* Value Records */
-
- } GX_MVarTableRec, *GX_MVarTable;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* GX_BlendRec */
- /* */
- /* <Description> */
- /* Data for interpolating a font from a distortable font specified */
- /* by the GX *var tables ([fgcahvm]var). */
- /* */
- /* <Fields> */
- /* num_axis :: */
- /* The number of axes along which interpolation may happen. */
- /* */
- /* coords :: */
- /* An array of design coordinates (in user space) indicating the */
- /* contribution along each axis to the final interpolated font. */
- /* `normalizedcoords' holds the same values. */
- /* */
- /* normalizedcoords :: */
- /* An array of normalized values (between [-1,1]) indicating the */
- /* contribution along each axis to the final interpolated font. */
- /* `coords' holds the same values. */
- /* */
- /* mmvar :: */
- /* Data from the `fvar' table. */
- /* */
- /* mmvar_len :: */
- /* The length of the `mmvar' structure. */
- /* */
- /* normalized_stylecoords :: */
- /* A two-dimensional array that holds the named instance data from */
- /* `mmvar' as normalized values. */
- /* */
- /* avar_loaded :: */
- /* A Boolean; if set, FreeType tried to load (and parse) the `avar' */
- /* table. */
- /* */
- /* avar_segment :: */
- /* Data from the `avar' table. */
- /* */
- /* hvar_loaded :: */
- /* A Boolean; if set, FreeType tried to load (and parse) the `hvar' */
- /* table. */
- /* */
- /* hvar_checked :: */
- /* A Boolean; if set, FreeType successfully loaded and parsed the */
- /* `hvar' table. */
- /* */
- /* hvar_error :: */
- /* If loading and parsing of the `hvar' table failed, this field */
- /* holds the corresponding error code. */
- /* */
- /* hvar_table :: */
- /* Data from the `hvar' table. */
- /* */
- /* vvar_loaded :: */
- /* A Boolean; if set, FreeType tried to load (and parse) the `vvar' */
- /* table. */
- /* */
- /* vvar_checked :: */
- /* A Boolean; if set, FreeType successfully loaded and parsed the */
- /* `vvar' table. */
- /* */
- /* vvar_error :: */
- /* If loading and parsing of the `vvar' table failed, this field */
- /* holds the corresponding error code. */
- /* */
- /* vvar_table :: */
- /* Data from the `vvar' table. */
- /* */
- /* mvar_table :: */
- /* Data from the `mvar' table. */
- /* */
- /* tuplecount :: */
- /* The number of shared tuples in the `gvar' table. */
- /* */
- /* tuplecoords :: */
- /* A two-dimensional array that holds the shared tuple coordinates */
- /* in the `gvar' table. */
- /* */
- /* gv_glyphcnt :: */
- /* The number of glyphs handled in the `gvar' table. */
- /* */
- /* glyphoffsets :: */
- /* Offsets into the glyph variation data array. */
- /* */
- /* gvar_size :: */
- /* The size of the `gvar' table. */
- /* */
- typedef struct GX_BlendRec_
- {
- FT_UInt num_axis;
- FT_Fixed* coords;
- FT_Fixed* normalizedcoords;
-
- FT_MM_Var* mmvar;
- FT_Offset mmvar_len;
-
- FT_Fixed* normalized_stylecoords;
- /* normalized_stylecoords[num_namedstyles][num_axis] */
-
- FT_Bool avar_loaded;
- GX_AVarSegment avar_segment; /* avar_segment[num_axis] */
-
- FT_Bool hvar_loaded;
- FT_Bool hvar_checked;
- FT_Error hvar_error;
- GX_HVVarTable hvar_table;
-
- FT_Bool vvar_loaded;
- FT_Bool vvar_checked;
- FT_Error vvar_error;
- GX_HVVarTable vvar_table;
-
- GX_MVarTable mvar_table;
-
- FT_UInt tuplecount;
- FT_Fixed* tuplecoords; /* tuplecoords[tuplecount][num_axis] */
-
- FT_UInt gv_glyphcnt;
- FT_ULong* glyphoffsets; /* glyphoffsets[gv_glyphcnt + 1] */
-
- FT_ULong gvar_size;
-
- } GX_BlendRec;
-
-
- /*************************************************************************/
- /* */
- /* <enum> */
- /* GX_TupleCountFlags */
- /* */
- /* <Description> */
- /* Flags used within the `TupleCount' field of the `gvar' table. */
- /* */
- typedef enum GX_TupleCountFlags_
- {
- GX_TC_TUPLES_SHARE_POINT_NUMBERS = 0x8000,
- GX_TC_RESERVED_TUPLE_FLAGS = 0x7000,
- GX_TC_TUPLE_COUNT_MASK = 0x0FFF
-
- } GX_TupleCountFlags;
-
-
- /*************************************************************************/
- /* */
- /* <enum> */
- /* GX_TupleIndexFlags */
- /* */
- /* <Description> */
- /* Flags used within the `TupleIndex' field of the `gvar' and `cvar' */
- /* tables. */
- /* */
- typedef enum GX_TupleIndexFlags_
- {
- GX_TI_EMBEDDED_TUPLE_COORD = 0x8000,
- GX_TI_INTERMEDIATE_TUPLE = 0x4000,
- GX_TI_PRIVATE_POINT_NUMBERS = 0x2000,
- GX_TI_RESERVED_TUPLE_FLAG = 0x1000,
- GX_TI_TUPLE_INDEX_MASK = 0x0FFF
-
- } GX_TupleIndexFlags;
-
-
-#define TTAG_wght FT_MAKE_TAG( 'w', 'g', 'h', 't' )
-#define TTAG_wdth FT_MAKE_TAG( 'w', 'd', 't', 'h' )
-#define TTAG_opsz FT_MAKE_TAG( 'o', 'p', 's', 'z' )
-#define TTAG_slnt FT_MAKE_TAG( 's', 'l', 'n', 't' )
-
-
- FT_LOCAL( FT_Error )
- TT_Set_MM_Blend( TT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
- FT_LOCAL( FT_Error )
- TT_Get_MM_Blend( TT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
- FT_LOCAL( FT_Error )
- TT_Set_Var_Design( TT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
- FT_LOCAL( FT_Error )
- TT_Get_MM_Var( TT_Face face,
- FT_MM_Var* *master );
-
- FT_LOCAL( FT_Error )
- TT_Get_Var_Design( TT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
- FT_LOCAL( FT_Error )
- tt_face_vary_cvt( TT_Face face,
- FT_Stream stream );
-
-
- FT_LOCAL( FT_Error )
- TT_Vary_Apply_Glyph_Deltas( TT_Face face,
- FT_UInt glyph_index,
- FT_Outline* outline,
- FT_UInt n_points );
-
- FT_LOCAL( FT_Error )
- tt_hadvance_adjust( TT_Face face,
- FT_UInt gindex,
- FT_Int *adelta );
-
- FT_LOCAL( FT_Error )
- tt_vadvance_adjust( TT_Face face,
- FT_UInt gindex,
- FT_Int *adelta );
-
- FT_LOCAL( void )
- tt_apply_mvar( TT_Face face );
-
- FT_LOCAL( FT_Error )
- tt_get_var_blend( TT_Face face,
- FT_UInt *num_coords,
- FT_Fixed* *coords,
- FT_Fixed* *normalizedcoords,
- FT_MM_Var* *mm_var );
-
- FT_LOCAL( void )
- tt_done_blend( TT_Face face );
-
-
-FT_END_HEADER
-
-
-#endif /* TTGXVAR_H_ */
-
-
-/* END */
diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c
deleted file mode 100644
index c6605bb92..000000000
--- a/src/truetype/ttinterp.c
+++ /dev/null
@@ -1,8495 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttinterp.c */
-/* */
-/* TrueType bytecode interpreter (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-/* Greg Hitchcock from Microsoft has helped a lot in resolving unclear */
-/* issues; many thanks! */
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-#include FT_TRIGONOMETRY_H
-#include FT_SYSTEM_H
-#include FT_TRUETYPE_DRIVER_H
-#include FT_MULTIPLE_MASTERS_H
-
-#include "ttinterp.h"
-#include "tterrors.h"
-#include "ttsubpix.h"
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include "ttgxvar.h"
-#endif
-
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttinterp
-
-
-#define NO_SUBPIXEL_HINTING \
- ( ((TT_Driver)FT_FACE_DRIVER( exc->face ))->interpreter_version == \
- TT_INTERPRETER_VERSION_35 )
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-#define SUBPIXEL_HINTING_INFINALITY \
- ( ((TT_Driver)FT_FACE_DRIVER( exc->face ))->interpreter_version == \
- TT_INTERPRETER_VERSION_38 )
-#endif
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
-#define SUBPIXEL_HINTING_MINIMAL \
- ( ((TT_Driver)FT_FACE_DRIVER( exc->face ))->interpreter_version == \
- TT_INTERPRETER_VERSION_40 )
-#endif
-
-#define PROJECT( v1, v2 ) \
- exc->func_project( exc, \
- SUB_LONG( (v1)->x, (v2)->x ), \
- SUB_LONG( (v1)->y, (v2)->y ) )
-
-#define DUALPROJ( v1, v2 ) \
- exc->func_dualproj( exc, \
- SUB_LONG( (v1)->x, (v2)->x ), \
- SUB_LONG( (v1)->y, (v2)->y ) )
-
-#define FAST_PROJECT( v ) \
- exc->func_project( exc, (v)->x, (v)->y )
-
-#define FAST_DUALPROJ( v ) \
- exc->func_dualproj( exc, (v)->x, (v)->y )
-
-
- /*************************************************************************/
- /* */
- /* Two simple bounds-checking macros. */
- /* */
-#define BOUNDS( x, n ) ( (FT_UInt)(x) >= (FT_UInt)(n) )
-#define BOUNDSL( x, n ) ( (FT_ULong)(x) >= (FT_ULong)(n) )
-
-
-#undef SUCCESS
-#define SUCCESS 0
-
-#undef FAILURE
-#define FAILURE 1
-
-
- /*************************************************************************/
- /* */
- /* CODERANGE FUNCTIONS */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Goto_CodeRange */
- /* */
- /* <Description> */
- /* Switches to a new code range (updates the code related elements in */
- /* `exec', and `IP'). */
- /* */
- /* <Input> */
- /* range :: The new execution code range. */
- /* */
- /* IP :: The new IP in the new code range. */
- /* */
- /* <InOut> */
- /* exec :: The target execution context. */
- /* */
- FT_LOCAL_DEF( void )
- TT_Goto_CodeRange( TT_ExecContext exec,
- FT_Int range,
- FT_Long IP )
- {
- TT_CodeRange* coderange;
-
-
- FT_ASSERT( range >= 1 && range <= 3 );
-
- coderange = &exec->codeRangeTable[range - 1];
-
- FT_ASSERT( coderange->base );
-
- /* NOTE: Because the last instruction of a program may be a CALL */
- /* which will return to the first byte *after* the code */
- /* range, we test for IP <= Size instead of IP < Size. */
- /* */
- FT_ASSERT( IP <= coderange->size );
-
- exec->code = coderange->base;
- exec->codeSize = coderange->size;
- exec->IP = IP;
- exec->curRange = range;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Set_CodeRange */
- /* */
- /* <Description> */
- /* Sets a code range. */
- /* */
- /* <Input> */
- /* range :: The code range index. */
- /* */
- /* base :: The new code base. */
- /* */
- /* length :: The range size in bytes. */
- /* */
- /* <InOut> */
- /* exec :: The target execution context. */
- /* */
- FT_LOCAL_DEF( void )
- TT_Set_CodeRange( TT_ExecContext exec,
- FT_Int range,
- void* base,
- FT_Long length )
- {
- FT_ASSERT( range >= 1 && range <= 3 );
-
- exec->codeRangeTable[range - 1].base = (FT_Byte*)base;
- exec->codeRangeTable[range - 1].size = length;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Clear_CodeRange */
- /* */
- /* <Description> */
- /* Clears a code range. */
- /* */
- /* <Input> */
- /* range :: The code range index. */
- /* */
- /* <InOut> */
- /* exec :: The target execution context. */
- /* */
- FT_LOCAL_DEF( void )
- TT_Clear_CodeRange( TT_ExecContext exec,
- FT_Int range )
- {
- FT_ASSERT( range >= 1 && range <= 3 );
-
- exec->codeRangeTable[range - 1].base = NULL;
- exec->codeRangeTable[range - 1].size = 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* EXECUTION CONTEXT ROUTINES */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Done_Context */
- /* */
- /* <Description> */
- /* Destroys a given context. */
- /* */
- /* <Input> */
- /* exec :: A handle to the target execution context. */
- /* */
- /* memory :: A handle to the parent memory object. */
- /* */
- /* <Note> */
- /* Only the glyph loader and debugger should call this function. */
- /* */
- FT_LOCAL_DEF( void )
- TT_Done_Context( TT_ExecContext exec )
- {
- FT_Memory memory = exec->memory;
-
-
- /* points zone */
- exec->maxPoints = 0;
- exec->maxContours = 0;
-
- /* free stack */
- FT_FREE( exec->stack );
- exec->stackSize = 0;
-
- /* free call stack */
- FT_FREE( exec->callStack );
- exec->callSize = 0;
- exec->callTop = 0;
-
- /* free glyph code range */
- FT_FREE( exec->glyphIns );
- exec->glyphSize = 0;
-
- exec->size = NULL;
- exec->face = NULL;
-
- FT_FREE( exec );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Init_Context */
- /* */
- /* <Description> */
- /* Initializes a context object. */
- /* */
- /* <Input> */
- /* memory :: A handle to the parent memory object. */
- /* */
- /* <InOut> */
- /* exec :: A handle to the target execution context. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- static FT_Error
- Init_Context( TT_ExecContext exec,
- FT_Memory memory )
- {
- FT_Error error;
-
-
- FT_TRACE1(( "Init_Context: new object at 0x%08p\n", exec ));
-
- exec->memory = memory;
- exec->callSize = 32;
-
- if ( FT_NEW_ARRAY( exec->callStack, exec->callSize ) )
- goto Fail_Memory;
-
- /* all values in the context are set to 0 already, but this is */
- /* here as a remainder */
- exec->maxPoints = 0;
- exec->maxContours = 0;
-
- exec->stackSize = 0;
- exec->glyphSize = 0;
-
- exec->stack = NULL;
- exec->glyphIns = NULL;
-
- exec->face = NULL;
- exec->size = NULL;
-
- return FT_Err_Ok;
-
- Fail_Memory:
- FT_ERROR(( "Init_Context: not enough memory for %p\n", exec ));
- TT_Done_Context( exec );
-
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Update_Max */
- /* */
- /* <Description> */
- /* Checks the size of a buffer and reallocates it if necessary. */
- /* */
- /* <Input> */
- /* memory :: A handle to the parent memory object. */
- /* */
- /* multiplier :: The size in bytes of each element in the buffer. */
- /* */
- /* new_max :: The new capacity (size) of the buffer. */
- /* */
- /* <InOut> */
- /* size :: The address of the buffer's current size expressed */
- /* in elements. */
- /* */
- /* buff :: The address of the buffer base pointer. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- Update_Max( FT_Memory memory,
- FT_ULong* size,
- FT_ULong multiplier,
- void* _pbuff,
- FT_ULong new_max )
- {
- FT_Error error;
- void** pbuff = (void**)_pbuff;
-
-
- if ( *size < new_max )
- {
- if ( FT_REALLOC( *pbuff, *size * multiplier, new_max * multiplier ) )
- return error;
- *size = new_max;
- }
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Load_Context */
- /* */
- /* <Description> */
- /* Prepare an execution context for glyph hinting. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* size :: A handle to the source size object. */
- /* */
- /* <InOut> */
- /* exec :: A handle to the target execution context. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* Only the glyph loader and debugger should call this function. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- TT_Load_Context( TT_ExecContext exec,
- TT_Face face,
- TT_Size size )
- {
- FT_Int i;
- FT_ULong tmp;
- TT_MaxProfile* maxp;
- FT_Error error;
-
-
- exec->face = face;
- maxp = &face->max_profile;
- exec->size = size;
-
- if ( size )
- {
- exec->numFDefs = size->num_function_defs;
- exec->maxFDefs = size->max_function_defs;
- exec->numIDefs = size->num_instruction_defs;
- exec->maxIDefs = size->max_instruction_defs;
- exec->FDefs = size->function_defs;
- exec->IDefs = size->instruction_defs;
- exec->pointSize = size->point_size;
- exec->tt_metrics = size->ttmetrics;
- exec->metrics = *size->metrics;
-
- exec->maxFunc = size->max_func;
- exec->maxIns = size->max_ins;
-
- for ( i = 0; i < TT_MAX_CODE_RANGES; i++ )
- exec->codeRangeTable[i] = size->codeRangeTable[i];
-
- /* set graphics state */
- exec->GS = size->GS;
-
- exec->cvtSize = size->cvt_size;
- exec->cvt = size->cvt;
-
- exec->storeSize = size->storage_size;
- exec->storage = size->storage;
-
- exec->twilight = size->twilight;
-
- /* In case of multi-threading it can happen that the old size object */
- /* no longer exists, thus we must clear all glyph zone references. */
- FT_ZERO( &exec->zp0 );
- exec->zp1 = exec->zp0;
- exec->zp2 = exec->zp0;
- }
-
- /* XXX: We reserve a little more elements on the stack to deal safely */
- /* with broken fonts like arialbs, courbs, timesbs, etc. */
- tmp = (FT_ULong)exec->stackSize;
- error = Update_Max( exec->memory,
- &tmp,
- sizeof ( FT_F26Dot6 ),
- (void*)&exec->stack,
- maxp->maxStackElements + 32 );
- exec->stackSize = (FT_Long)tmp;
- if ( error )
- return error;
-
- tmp = exec->glyphSize;
- error = Update_Max( exec->memory,
- &tmp,
- sizeof ( FT_Byte ),
- (void*)&exec->glyphIns,
- maxp->maxSizeOfInstructions );
- exec->glyphSize = (FT_UShort)tmp;
- if ( error )
- return error;
-
- exec->pts.n_points = 0;
- exec->pts.n_contours = 0;
-
- exec->zp1 = exec->pts;
- exec->zp2 = exec->pts;
- exec->zp0 = exec->pts;
-
- exec->instruction_trap = FALSE;
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Save_Context */
- /* */
- /* <Description> */
- /* Saves the code ranges in a `size' object. */
- /* */
- /* <Input> */
- /* exec :: A handle to the source execution context. */
- /* */
- /* <InOut> */
- /* size :: A handle to the target size object. */
- /* */
- /* <Note> */
- /* Only the glyph loader and debugger should call this function. */
- /* */
- FT_LOCAL_DEF( void )
- TT_Save_Context( TT_ExecContext exec,
- TT_Size size )
- {
- FT_Int i;
-
-
- /* XXX: Will probably disappear soon with all the code range */
- /* management, which is now rather obsolete. */
- /* */
- size->num_function_defs = exec->numFDefs;
- size->num_instruction_defs = exec->numIDefs;
-
- size->max_func = exec->maxFunc;
- size->max_ins = exec->maxIns;
-
- for ( i = 0; i < TT_MAX_CODE_RANGES; i++ )
- size->codeRangeTable[i] = exec->codeRangeTable[i];
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Run_Context */
- /* */
- /* <Description> */
- /* Executes one or more instructions in the execution context. */
- /* */
- /* <Input> */
- /* debug :: A Boolean flag. If set, the function sets some internal */
- /* variables and returns immediately, otherwise TT_RunIns() */
- /* is called. */
- /* */
- /* This is commented out currently. */
- /* */
- /* <Input> */
- /* exec :: A handle to the target execution context. */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- TT_Run_Context( TT_ExecContext exec )
- {
- TT_Goto_CodeRange( exec, tt_coderange_glyph, 0 );
-
- exec->zp0 = exec->pts;
- exec->zp1 = exec->pts;
- exec->zp2 = exec->pts;
-
- exec->GS.gep0 = 1;
- exec->GS.gep1 = 1;
- exec->GS.gep2 = 1;
-
- exec->GS.projVector.x = 0x4000;
- exec->GS.projVector.y = 0x0000;
-
- exec->GS.freeVector = exec->GS.projVector;
- exec->GS.dualVector = exec->GS.projVector;
-
- exec->GS.round_state = 1;
- exec->GS.loop = 1;
-
- /* some glyphs leave something on the stack. so we clean it */
- /* before a new execution. */
- exec->top = 0;
- exec->callTop = 0;
-
- return exec->face->interpreter( exec );
- }
-
-
- /* The default value for `scan_control' is documented as FALSE in the */
- /* TrueType specification. This is confusing since it implies a */
- /* Boolean value. However, this is not the case, thus both the */
- /* default values of our `scan_type' and `scan_control' fields (which */
- /* the documentation's `scan_control' variable is split into) are */
- /* zero. */
-
- const TT_GraphicsState tt_default_graphics_state =
- {
- 0, 0, 0,
- { 0x4000, 0 },
- { 0x4000, 0 },
- { 0x4000, 0 },
-
- 1, 64, 1,
- TRUE, 68, 0, 0, 9, 3,
- 0, FALSE, 0, 1, 1, 1
- };
-
-
- /* documentation is in ttinterp.h */
-
- FT_EXPORT_DEF( TT_ExecContext )
- TT_New_Context( TT_Driver driver )
- {
- FT_Memory memory;
- FT_Error error;
-
- TT_ExecContext exec = NULL;
-
-
- if ( !driver )
- goto Fail;
-
- memory = driver->root.root.memory;
-
- /* allocate object */
- if ( FT_NEW( exec ) )
- goto Fail;
-
- /* initialize it; in case of error this deallocates `exec' too */
- error = Init_Context( exec, memory );
- if ( error )
- goto Fail;
-
- return exec;
-
- Fail:
- return NULL;
- }
-
-
- /*************************************************************************/
- /* */
- /* Before an opcode is executed, the interpreter verifies that there are */
- /* enough arguments on the stack, with the help of the `Pop_Push_Count' */
- /* table. */
- /* */
- /* For each opcode, the first column gives the number of arguments that */
- /* are popped from the stack; the second one gives the number of those */
- /* that are pushed in result. */
- /* */
- /* Opcodes which have a varying number of parameters in the data stream */
- /* (NPUSHB, NPUSHW) are handled specially; they have a negative value in */
- /* the `opcode_length' table, and the value in `Pop_Push_Count' is set */
- /* to zero. */
- /* */
- /*************************************************************************/
-
-
-#undef PACK
-#define PACK( x, y ) ( ( x << 4 ) | y )
-
-
- static
- const FT_Byte Pop_Push_Count[256] =
- {
- /* opcodes are gathered in groups of 16 */
- /* please keep the spaces as they are */
-
- /* SVTCA y */ PACK( 0, 0 ),
- /* SVTCA x */ PACK( 0, 0 ),
- /* SPvTCA y */ PACK( 0, 0 ),
- /* SPvTCA x */ PACK( 0, 0 ),
- /* SFvTCA y */ PACK( 0, 0 ),
- /* SFvTCA x */ PACK( 0, 0 ),
- /* SPvTL // */ PACK( 2, 0 ),
- /* SPvTL + */ PACK( 2, 0 ),
- /* SFvTL // */ PACK( 2, 0 ),
- /* SFvTL + */ PACK( 2, 0 ),
- /* SPvFS */ PACK( 2, 0 ),
- /* SFvFS */ PACK( 2, 0 ),
- /* GPv */ PACK( 0, 2 ),
- /* GFv */ PACK( 0, 2 ),
- /* SFvTPv */ PACK( 0, 0 ),
- /* ISECT */ PACK( 5, 0 ),
-
- /* SRP0 */ PACK( 1, 0 ),
- /* SRP1 */ PACK( 1, 0 ),
- /* SRP2 */ PACK( 1, 0 ),
- /* SZP0 */ PACK( 1, 0 ),
- /* SZP1 */ PACK( 1, 0 ),
- /* SZP2 */ PACK( 1, 0 ),
- /* SZPS */ PACK( 1, 0 ),
- /* SLOOP */ PACK( 1, 0 ),
- /* RTG */ PACK( 0, 0 ),
- /* RTHG */ PACK( 0, 0 ),
- /* SMD */ PACK( 1, 0 ),
- /* ELSE */ PACK( 0, 0 ),
- /* JMPR */ PACK( 1, 0 ),
- /* SCvTCi */ PACK( 1, 0 ),
- /* SSwCi */ PACK( 1, 0 ),
- /* SSW */ PACK( 1, 0 ),
-
- /* DUP */ PACK( 1, 2 ),
- /* POP */ PACK( 1, 0 ),
- /* CLEAR */ PACK( 0, 0 ),
- /* SWAP */ PACK( 2, 2 ),
- /* DEPTH */ PACK( 0, 1 ),
- /* CINDEX */ PACK( 1, 1 ),
- /* MINDEX */ PACK( 1, 0 ),
- /* AlignPTS */ PACK( 2, 0 ),
- /* INS_$28 */ PACK( 0, 0 ),
- /* UTP */ PACK( 1, 0 ),
- /* LOOPCALL */ PACK( 2, 0 ),
- /* CALL */ PACK( 1, 0 ),
- /* FDEF */ PACK( 1, 0 ),
- /* ENDF */ PACK( 0, 0 ),
- /* MDAP[0] */ PACK( 1, 0 ),
- /* MDAP[1] */ PACK( 1, 0 ),
-
- /* IUP[0] */ PACK( 0, 0 ),
- /* IUP[1] */ PACK( 0, 0 ),
- /* SHP[0] */ PACK( 0, 0 ), /* loops */
- /* SHP[1] */ PACK( 0, 0 ), /* loops */
- /* SHC[0] */ PACK( 1, 0 ),
- /* SHC[1] */ PACK( 1, 0 ),
- /* SHZ[0] */ PACK( 1, 0 ),
- /* SHZ[1] */ PACK( 1, 0 ),
- /* SHPIX */ PACK( 1, 0 ), /* loops */
- /* IP */ PACK( 0, 0 ), /* loops */
- /* MSIRP[0] */ PACK( 2, 0 ),
- /* MSIRP[1] */ PACK( 2, 0 ),
- /* AlignRP */ PACK( 0, 0 ), /* loops */
- /* RTDG */ PACK( 0, 0 ),
- /* MIAP[0] */ PACK( 2, 0 ),
- /* MIAP[1] */ PACK( 2, 0 ),
-
- /* NPushB */ PACK( 0, 0 ),
- /* NPushW */ PACK( 0, 0 ),
- /* WS */ PACK( 2, 0 ),
- /* RS */ PACK( 1, 1 ),
- /* WCvtP */ PACK( 2, 0 ),
- /* RCvt */ PACK( 1, 1 ),
- /* GC[0] */ PACK( 1, 1 ),
- /* GC[1] */ PACK( 1, 1 ),
- /* SCFS */ PACK( 2, 0 ),
- /* MD[0] */ PACK( 2, 1 ),
- /* MD[1] */ PACK( 2, 1 ),
- /* MPPEM */ PACK( 0, 1 ),
- /* MPS */ PACK( 0, 1 ),
- /* FlipON */ PACK( 0, 0 ),
- /* FlipOFF */ PACK( 0, 0 ),
- /* DEBUG */ PACK( 1, 0 ),
-
- /* LT */ PACK( 2, 1 ),
- /* LTEQ */ PACK( 2, 1 ),
- /* GT */ PACK( 2, 1 ),
- /* GTEQ */ PACK( 2, 1 ),
- /* EQ */ PACK( 2, 1 ),
- /* NEQ */ PACK( 2, 1 ),
- /* ODD */ PACK( 1, 1 ),
- /* EVEN */ PACK( 1, 1 ),
- /* IF */ PACK( 1, 0 ),
- /* EIF */ PACK( 0, 0 ),
- /* AND */ PACK( 2, 1 ),
- /* OR */ PACK( 2, 1 ),
- /* NOT */ PACK( 1, 1 ),
- /* DeltaP1 */ PACK( 1, 0 ),
- /* SDB */ PACK( 1, 0 ),
- /* SDS */ PACK( 1, 0 ),
-
- /* ADD */ PACK( 2, 1 ),
- /* SUB */ PACK( 2, 1 ),
- /* DIV */ PACK( 2, 1 ),
- /* MUL */ PACK( 2, 1 ),
- /* ABS */ PACK( 1, 1 ),
- /* NEG */ PACK( 1, 1 ),
- /* FLOOR */ PACK( 1, 1 ),
- /* CEILING */ PACK( 1, 1 ),
- /* ROUND[0] */ PACK( 1, 1 ),
- /* ROUND[1] */ PACK( 1, 1 ),
- /* ROUND[2] */ PACK( 1, 1 ),
- /* ROUND[3] */ PACK( 1, 1 ),
- /* NROUND[0] */ PACK( 1, 1 ),
- /* NROUND[1] */ PACK( 1, 1 ),
- /* NROUND[2] */ PACK( 1, 1 ),
- /* NROUND[3] */ PACK( 1, 1 ),
-
- /* WCvtF */ PACK( 2, 0 ),
- /* DeltaP2 */ PACK( 1, 0 ),
- /* DeltaP3 */ PACK( 1, 0 ),
- /* DeltaCn[0] */ PACK( 1, 0 ),
- /* DeltaCn[1] */ PACK( 1, 0 ),
- /* DeltaCn[2] */ PACK( 1, 0 ),
- /* SROUND */ PACK( 1, 0 ),
- /* S45Round */ PACK( 1, 0 ),
- /* JROT */ PACK( 2, 0 ),
- /* JROF */ PACK( 2, 0 ),
- /* ROFF */ PACK( 0, 0 ),
- /* INS_$7B */ PACK( 0, 0 ),
- /* RUTG */ PACK( 0, 0 ),
- /* RDTG */ PACK( 0, 0 ),
- /* SANGW */ PACK( 1, 0 ),
- /* AA */ PACK( 1, 0 ),
-
- /* FlipPT */ PACK( 0, 0 ), /* loops */
- /* FlipRgON */ PACK( 2, 0 ),
- /* FlipRgOFF */ PACK( 2, 0 ),
- /* INS_$83 */ PACK( 0, 0 ),
- /* INS_$84 */ PACK( 0, 0 ),
- /* ScanCTRL */ PACK( 1, 0 ),
- /* SDPvTL[0] */ PACK( 2, 0 ),
- /* SDPvTL[1] */ PACK( 2, 0 ),
- /* GetINFO */ PACK( 1, 1 ),
- /* IDEF */ PACK( 1, 0 ),
- /* ROLL */ PACK( 3, 3 ),
- /* MAX */ PACK( 2, 1 ),
- /* MIN */ PACK( 2, 1 ),
- /* ScanTYPE */ PACK( 1, 0 ),
- /* InstCTRL */ PACK( 2, 0 ),
- /* INS_$8F */ PACK( 0, 0 ),
-
- /* INS_$90 */ PACK( 0, 0 ),
- /* GETVAR */ PACK( 0, 0 ), /* will be handled specially */
- /* GETDATA */ PACK( 0, 1 ),
- /* INS_$93 */ PACK( 0, 0 ),
- /* INS_$94 */ PACK( 0, 0 ),
- /* INS_$95 */ PACK( 0, 0 ),
- /* INS_$96 */ PACK( 0, 0 ),
- /* INS_$97 */ PACK( 0, 0 ),
- /* INS_$98 */ PACK( 0, 0 ),
- /* INS_$99 */ PACK( 0, 0 ),
- /* INS_$9A */ PACK( 0, 0 ),
- /* INS_$9B */ PACK( 0, 0 ),
- /* INS_$9C */ PACK( 0, 0 ),
- /* INS_$9D */ PACK( 0, 0 ),
- /* INS_$9E */ PACK( 0, 0 ),
- /* INS_$9F */ PACK( 0, 0 ),
-
- /* INS_$A0 */ PACK( 0, 0 ),
- /* INS_$A1 */ PACK( 0, 0 ),
- /* INS_$A2 */ PACK( 0, 0 ),
- /* INS_$A3 */ PACK( 0, 0 ),
- /* INS_$A4 */ PACK( 0, 0 ),
- /* INS_$A5 */ PACK( 0, 0 ),
- /* INS_$A6 */ PACK( 0, 0 ),
- /* INS_$A7 */ PACK( 0, 0 ),
- /* INS_$A8 */ PACK( 0, 0 ),
- /* INS_$A9 */ PACK( 0, 0 ),
- /* INS_$AA */ PACK( 0, 0 ),
- /* INS_$AB */ PACK( 0, 0 ),
- /* INS_$AC */ PACK( 0, 0 ),
- /* INS_$AD */ PACK( 0, 0 ),
- /* INS_$AE */ PACK( 0, 0 ),
- /* INS_$AF */ PACK( 0, 0 ),
-
- /* PushB[0] */ PACK( 0, 1 ),
- /* PushB[1] */ PACK( 0, 2 ),
- /* PushB[2] */ PACK( 0, 3 ),
- /* PushB[3] */ PACK( 0, 4 ),
- /* PushB[4] */ PACK( 0, 5 ),
- /* PushB[5] */ PACK( 0, 6 ),
- /* PushB[6] */ PACK( 0, 7 ),
- /* PushB[7] */ PACK( 0, 8 ),
- /* PushW[0] */ PACK( 0, 1 ),
- /* PushW[1] */ PACK( 0, 2 ),
- /* PushW[2] */ PACK( 0, 3 ),
- /* PushW[3] */ PACK( 0, 4 ),
- /* PushW[4] */ PACK( 0, 5 ),
- /* PushW[5] */ PACK( 0, 6 ),
- /* PushW[6] */ PACK( 0, 7 ),
- /* PushW[7] */ PACK( 0, 8 ),
-
- /* MDRP[00] */ PACK( 1, 0 ),
- /* MDRP[01] */ PACK( 1, 0 ),
- /* MDRP[02] */ PACK( 1, 0 ),
- /* MDRP[03] */ PACK( 1, 0 ),
- /* MDRP[04] */ PACK( 1, 0 ),
- /* MDRP[05] */ PACK( 1, 0 ),
- /* MDRP[06] */ PACK( 1, 0 ),
- /* MDRP[07] */ PACK( 1, 0 ),
- /* MDRP[08] */ PACK( 1, 0 ),
- /* MDRP[09] */ PACK( 1, 0 ),
- /* MDRP[10] */ PACK( 1, 0 ),
- /* MDRP[11] */ PACK( 1, 0 ),
- /* MDRP[12] */ PACK( 1, 0 ),
- /* MDRP[13] */ PACK( 1, 0 ),
- /* MDRP[14] */ PACK( 1, 0 ),
- /* MDRP[15] */ PACK( 1, 0 ),
-
- /* MDRP[16] */ PACK( 1, 0 ),
- /* MDRP[17] */ PACK( 1, 0 ),
- /* MDRP[18] */ PACK( 1, 0 ),
- /* MDRP[19] */ PACK( 1, 0 ),
- /* MDRP[20] */ PACK( 1, 0 ),
- /* MDRP[21] */ PACK( 1, 0 ),
- /* MDRP[22] */ PACK( 1, 0 ),
- /* MDRP[23] */ PACK( 1, 0 ),
- /* MDRP[24] */ PACK( 1, 0 ),
- /* MDRP[25] */ PACK( 1, 0 ),
- /* MDRP[26] */ PACK( 1, 0 ),
- /* MDRP[27] */ PACK( 1, 0 ),
- /* MDRP[28] */ PACK( 1, 0 ),
- /* MDRP[29] */ PACK( 1, 0 ),
- /* MDRP[30] */ PACK( 1, 0 ),
- /* MDRP[31] */ PACK( 1, 0 ),
-
- /* MIRP[00] */ PACK( 2, 0 ),
- /* MIRP[01] */ PACK( 2, 0 ),
- /* MIRP[02] */ PACK( 2, 0 ),
- /* MIRP[03] */ PACK( 2, 0 ),
- /* MIRP[04] */ PACK( 2, 0 ),
- /* MIRP[05] */ PACK( 2, 0 ),
- /* MIRP[06] */ PACK( 2, 0 ),
- /* MIRP[07] */ PACK( 2, 0 ),
- /* MIRP[08] */ PACK( 2, 0 ),
- /* MIRP[09] */ PACK( 2, 0 ),
- /* MIRP[10] */ PACK( 2, 0 ),
- /* MIRP[11] */ PACK( 2, 0 ),
- /* MIRP[12] */ PACK( 2, 0 ),
- /* MIRP[13] */ PACK( 2, 0 ),
- /* MIRP[14] */ PACK( 2, 0 ),
- /* MIRP[15] */ PACK( 2, 0 ),
-
- /* MIRP[16] */ PACK( 2, 0 ),
- /* MIRP[17] */ PACK( 2, 0 ),
- /* MIRP[18] */ PACK( 2, 0 ),
- /* MIRP[19] */ PACK( 2, 0 ),
- /* MIRP[20] */ PACK( 2, 0 ),
- /* MIRP[21] */ PACK( 2, 0 ),
- /* MIRP[22] */ PACK( 2, 0 ),
- /* MIRP[23] */ PACK( 2, 0 ),
- /* MIRP[24] */ PACK( 2, 0 ),
- /* MIRP[25] */ PACK( 2, 0 ),
- /* MIRP[26] */ PACK( 2, 0 ),
- /* MIRP[27] */ PACK( 2, 0 ),
- /* MIRP[28] */ PACK( 2, 0 ),
- /* MIRP[29] */ PACK( 2, 0 ),
- /* MIRP[30] */ PACK( 2, 0 ),
- /* MIRP[31] */ PACK( 2, 0 )
- };
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
- /* the first hex digit gives the length of the opcode name; the space */
- /* after the digit is here just to increase readability of the source */
- /* code */
-
- static
- const char* const opcode_name[256] =
- {
- "7 SVTCA y",
- "7 SVTCA x",
- "8 SPvTCA y",
- "8 SPvTCA x",
- "8 SFvTCA y",
- "8 SFvTCA x",
- "8 SPvTL ||",
- "7 SPvTL +",
- "8 SFvTL ||",
- "7 SFvTL +",
- "5 SPvFS",
- "5 SFvFS",
- "3 GPv",
- "3 GFv",
- "6 SFvTPv",
- "5 ISECT",
-
- "4 SRP0",
- "4 SRP1",
- "4 SRP2",
- "4 SZP0",
- "4 SZP1",
- "4 SZP2",
- "4 SZPS",
- "5 SLOOP",
- "3 RTG",
- "4 RTHG",
- "3 SMD",
- "4 ELSE",
- "4 JMPR",
- "6 SCvTCi",
- "5 SSwCi",
- "3 SSW",
-
- "3 DUP",
- "3 POP",
- "5 CLEAR",
- "4 SWAP",
- "5 DEPTH",
- "6 CINDEX",
- "6 MINDEX",
- "8 AlignPTS",
- "7 INS_$28",
- "3 UTP",
- "8 LOOPCALL",
- "4 CALL",
- "4 FDEF",
- "4 ENDF",
- "7 MDAP[0]",
- "7 MDAP[1]",
-
- "6 IUP[0]",
- "6 IUP[1]",
- "6 SHP[0]",
- "6 SHP[1]",
- "6 SHC[0]",
- "6 SHC[1]",
- "6 SHZ[0]",
- "6 SHZ[1]",
- "5 SHPIX",
- "2 IP",
- "8 MSIRP[0]",
- "8 MSIRP[1]",
- "7 AlignRP",
- "4 RTDG",
- "7 MIAP[0]",
- "7 MIAP[1]",
-
- "6 NPushB",
- "6 NPushW",
- "2 WS",
- "2 RS",
- "5 WCvtP",
- "4 RCvt",
- "5 GC[0]",
- "5 GC[1]",
- "4 SCFS",
- "5 MD[0]",
- "5 MD[1]",
- "5 MPPEM",
- "3 MPS",
- "6 FlipON",
- "7 FlipOFF",
- "5 DEBUG",
-
- "2 LT",
- "4 LTEQ",
- "2 GT",
- "4 GTEQ",
- "2 EQ",
- "3 NEQ",
- "3 ODD",
- "4 EVEN",
- "2 IF",
- "3 EIF",
- "3 AND",
- "2 OR",
- "3 NOT",
- "7 DeltaP1",
- "3 SDB",
- "3 SDS",
-
- "3 ADD",
- "3 SUB",
- "3 DIV",
- "3 MUL",
- "3 ABS",
- "3 NEG",
- "5 FLOOR",
- "7 CEILING",
- "8 ROUND[0]",
- "8 ROUND[1]",
- "8 ROUND[2]",
- "8 ROUND[3]",
- "9 NROUND[0]",
- "9 NROUND[1]",
- "9 NROUND[2]",
- "9 NROUND[3]",
-
- "5 WCvtF",
- "7 DeltaP2",
- "7 DeltaP3",
- "A DeltaCn[0]",
- "A DeltaCn[1]",
- "A DeltaCn[2]",
- "6 SROUND",
- "8 S45Round",
- "4 JROT",
- "4 JROF",
- "4 ROFF",
- "7 INS_$7B",
- "4 RUTG",
- "4 RDTG",
- "5 SANGW",
- "2 AA",
-
- "6 FlipPT",
- "8 FlipRgON",
- "9 FlipRgOFF",
- "7 INS_$83",
- "7 INS_$84",
- "8 ScanCTRL",
- "9 SDPvTL[0]",
- "9 SDPvTL[1]",
- "7 GetINFO",
- "4 IDEF",
- "4 ROLL",
- "3 MAX",
- "3 MIN",
- "8 ScanTYPE",
- "8 InstCTRL",
- "7 INS_$8F",
-
- "7 INS_$90",
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- "6 GETVAR",
- "7 GETDATA",
-#else
- "7 INS_$91",
- "7 INS_$92",
-#endif
- "7 INS_$93",
- "7 INS_$94",
- "7 INS_$95",
- "7 INS_$96",
- "7 INS_$97",
- "7 INS_$98",
- "7 INS_$99",
- "7 INS_$9A",
- "7 INS_$9B",
- "7 INS_$9C",
- "7 INS_$9D",
- "7 INS_$9E",
- "7 INS_$9F",
-
- "7 INS_$A0",
- "7 INS_$A1",
- "7 INS_$A2",
- "7 INS_$A3",
- "7 INS_$A4",
- "7 INS_$A5",
- "7 INS_$A6",
- "7 INS_$A7",
- "7 INS_$A8",
- "7 INS_$A9",
- "7 INS_$AA",
- "7 INS_$AB",
- "7 INS_$AC",
- "7 INS_$AD",
- "7 INS_$AE",
- "7 INS_$AF",
-
- "8 PushB[0]",
- "8 PushB[1]",
- "8 PushB[2]",
- "8 PushB[3]",
- "8 PushB[4]",
- "8 PushB[5]",
- "8 PushB[6]",
- "8 PushB[7]",
- "8 PushW[0]",
- "8 PushW[1]",
- "8 PushW[2]",
- "8 PushW[3]",
- "8 PushW[4]",
- "8 PushW[5]",
- "8 PushW[6]",
- "8 PushW[7]",
-
- "8 MDRP[00]",
- "8 MDRP[01]",
- "8 MDRP[02]",
- "8 MDRP[03]",
- "8 MDRP[04]",
- "8 MDRP[05]",
- "8 MDRP[06]",
- "8 MDRP[07]",
- "8 MDRP[08]",
- "8 MDRP[09]",
- "8 MDRP[10]",
- "8 MDRP[11]",
- "8 MDRP[12]",
- "8 MDRP[13]",
- "8 MDRP[14]",
- "8 MDRP[15]",
-
- "8 MDRP[16]",
- "8 MDRP[17]",
- "8 MDRP[18]",
- "8 MDRP[19]",
- "8 MDRP[20]",
- "8 MDRP[21]",
- "8 MDRP[22]",
- "8 MDRP[23]",
- "8 MDRP[24]",
- "8 MDRP[25]",
- "8 MDRP[26]",
- "8 MDRP[27]",
- "8 MDRP[28]",
- "8 MDRP[29]",
- "8 MDRP[30]",
- "8 MDRP[31]",
-
- "8 MIRP[00]",
- "8 MIRP[01]",
- "8 MIRP[02]",
- "8 MIRP[03]",
- "8 MIRP[04]",
- "8 MIRP[05]",
- "8 MIRP[06]",
- "8 MIRP[07]",
- "8 MIRP[08]",
- "8 MIRP[09]",
- "8 MIRP[10]",
- "8 MIRP[11]",
- "8 MIRP[12]",
- "8 MIRP[13]",
- "8 MIRP[14]",
- "8 MIRP[15]",
-
- "8 MIRP[16]",
- "8 MIRP[17]",
- "8 MIRP[18]",
- "8 MIRP[19]",
- "8 MIRP[20]",
- "8 MIRP[21]",
- "8 MIRP[22]",
- "8 MIRP[23]",
- "8 MIRP[24]",
- "8 MIRP[25]",
- "8 MIRP[26]",
- "8 MIRP[27]",
- "8 MIRP[28]",
- "8 MIRP[29]",
- "8 MIRP[30]",
- "8 MIRP[31]"
- };
-
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
-
- static
- const FT_Char opcode_length[256] =
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-
- -1,-2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 3, 4, 5, 6, 7, 8, 9, 3, 5, 7, 9, 11,13,15,17,
-
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- };
-
-#undef PACK
-
-
-#ifndef FT_CONFIG_OPTION_NO_ASSEMBLER
-
-#if defined( __arm__ ) && \
- ( defined( __thumb2__ ) || !defined( __thumb__ ) )
-
-#define TT_MulFix14 TT_MulFix14_arm
-
- static FT_Int32
- TT_MulFix14_arm( FT_Int32 a,
- FT_Int b )
- {
- FT_Int32 t, t2;
-
-
-#if defined( __CC_ARM ) || defined( __ARMCC__ )
-
- __asm
- {
- smull t2, t, b, a /* (lo=t2,hi=t) = a*b */
- mov a, t, asr #31 /* a = (hi >> 31) */
- add a, a, #0x2000 /* a += 0x2000 */
- adds t2, t2, a /* t2 += a */
- adc t, t, #0 /* t += carry */
- mov a, t2, lsr #14 /* a = t2 >> 14 */
- orr a, a, t, lsl #18 /* a |= t << 18 */
- }
-
-#elif defined( __GNUC__ )
-
- __asm__ __volatile__ (
- "smull %1, %2, %4, %3\n\t" /* (lo=%1,hi=%2) = a*b */
- "mov %0, %2, asr #31\n\t" /* %0 = (hi >> 31) */
-#if defined( __clang__ ) && defined( __thumb2__ )
- "add.w %0, %0, #0x2000\n\t" /* %0 += 0x2000 */
-#else
- "add %0, %0, #0x2000\n\t" /* %0 += 0x2000 */
-#endif
- "adds %1, %1, %0\n\t" /* %1 += %0 */
- "adc %2, %2, #0\n\t" /* %2 += carry */
- "mov %0, %1, lsr #14\n\t" /* %0 = %1 >> 16 */
- "orr %0, %0, %2, lsl #18\n\t" /* %0 |= %2 << 16 */
- : "=r"(a), "=&r"(t2), "=&r"(t)
- : "r"(a), "r"(b)
- : "cc" );
-
-#endif
-
- return a;
- }
-
-#endif /* __arm__ && ( __thumb2__ || !__thumb__ ) */
-
-#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */
-
-
-#if defined( __GNUC__ ) && \
- ( defined( __i386__ ) || defined( __x86_64__ ) )
-
-#define TT_MulFix14 TT_MulFix14_long_long
-
- /* Temporarily disable the warning that C90 doesn't support `long long'. */
-#if ( __GNUC__ * 100 + __GNUC_MINOR__ ) >= 406
-#pragma GCC diagnostic push
-#endif
-#pragma GCC diagnostic ignored "-Wlong-long"
-
- /* This is declared `noinline' because inlining the function results */
- /* in slower code. The `pure' attribute indicates that the result */
- /* only depends on the parameters. */
- static __attribute__(( noinline ))
- __attribute__(( pure )) FT_Int32
- TT_MulFix14_long_long( FT_Int32 a,
- FT_Int b )
- {
-
- long long ret = (long long)a * b;
-
- /* The following line assumes that right shifting of signed values */
- /* will actually preserve the sign bit. The exact behaviour is */
- /* undefined, but this is true on x86 and x86_64. */
- long long tmp = ret >> 63;
-
-
- ret += 0x2000 + tmp;
-
- return (FT_Int32)( ret >> 14 );
- }
-
-#if ( __GNUC__ * 100 + __GNUC_MINOR__ ) >= 406
-#pragma GCC diagnostic pop
-#endif
-
-#endif /* __GNUC__ && ( __i386__ || __x86_64__ ) */
-
-
-#ifndef TT_MulFix14
-
- /* Compute (a*b)/2^14 with maximum accuracy and rounding. */
- /* This is optimized to be faster than calling FT_MulFix() */
- /* for platforms where sizeof(int) == 2. */
- static FT_Int32
- TT_MulFix14( FT_Int32 a,
- FT_Int b )
- {
- FT_Int32 sign;
- FT_UInt32 ah, al, mid, lo, hi;
-
-
- sign = a ^ b;
-
- if ( a < 0 )
- a = -a;
- if ( b < 0 )
- b = -b;
-
- ah = (FT_UInt32)( ( a >> 16 ) & 0xFFFFU );
- al = (FT_UInt32)( a & 0xFFFFU );
-
- lo = al * b;
- mid = ah * b;
- hi = mid >> 16;
- mid = ( mid << 16 ) + ( 1 << 13 ); /* rounding */
- lo += mid;
- if ( lo < mid )
- hi += 1;
-
- mid = ( lo >> 14 ) | ( hi << 18 );
-
- return sign >= 0 ? (FT_Int32)mid : -(FT_Int32)mid;
- }
-
-#endif /* !TT_MulFix14 */
-
-
-#if defined( __GNUC__ ) && \
- ( defined( __i386__ ) || \
- defined( __x86_64__ ) || \
- defined( __arm__ ) )
-
-#define TT_DotFix14 TT_DotFix14_long_long
-
-#if ( __GNUC__ * 100 + __GNUC_MINOR__ ) >= 406
-#pragma GCC diagnostic push
-#endif
-#pragma GCC diagnostic ignored "-Wlong-long"
-
- static __attribute__(( pure )) FT_Int32
- TT_DotFix14_long_long( FT_Int32 ax,
- FT_Int32 ay,
- FT_Int bx,
- FT_Int by )
- {
- /* Temporarily disable the warning that C90 doesn't support */
- /* `long long'. */
-
- long long temp1 = (long long)ax * bx;
- long long temp2 = (long long)ay * by;
-
-
- temp1 += temp2;
- temp2 = temp1 >> 63;
- temp1 += 0x2000 + temp2;
-
- return (FT_Int32)( temp1 >> 14 );
-
- }
-
-#if ( __GNUC__ * 100 + __GNUC_MINOR__ ) >= 406
-#pragma GCC diagnostic pop
-#endif
-
-#endif /* __GNUC__ && (__arm__ || __i386__ || __x86_64__) */
-
-
-#ifndef TT_DotFix14
-
- /* compute (ax*bx+ay*by)/2^14 with maximum accuracy and rounding */
- static FT_Int32
- TT_DotFix14( FT_Int32 ax,
- FT_Int32 ay,
- FT_Int bx,
- FT_Int by )
- {
- FT_Int32 m, s, hi1, hi2, hi;
- FT_UInt32 l, lo1, lo2, lo;
-
-
- /* compute ax*bx as 64-bit value */
- l = (FT_UInt32)( ( ax & 0xFFFFU ) * bx );
- m = ( ax >> 16 ) * bx;
-
- lo1 = l + ( (FT_UInt32)m << 16 );
- hi1 = ( m >> 16 ) + ( (FT_Int32)l >> 31 ) + ( lo1 < l );
-
- /* compute ay*by as 64-bit value */
- l = (FT_UInt32)( ( ay & 0xFFFFU ) * by );
- m = ( ay >> 16 ) * by;
-
- lo2 = l + ( (FT_UInt32)m << 16 );
- hi2 = ( m >> 16 ) + ( (FT_Int32)l >> 31 ) + ( lo2 < l );
-
- /* add them */
- lo = lo1 + lo2;
- hi = hi1 + hi2 + ( lo < lo1 );
-
- /* divide the result by 2^14 with rounding */
- s = hi >> 31;
- l = lo + (FT_UInt32)s;
- hi += s + ( l < lo );
- lo = l;
-
- l = lo + 0x2000U;
- hi += ( l < lo );
-
- return (FT_Int32)( ( (FT_UInt32)hi << 18 ) | ( l >> 14 ) );
- }
-
-#endif /* TT_DotFix14 */
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Current_Ratio */
- /* */
- /* <Description> */
- /* Returns the current aspect ratio scaling factor depending on the */
- /* projection vector's state and device resolutions. */
- /* */
- /* <Return> */
- /* The aspect ratio in 16.16 format, always <= 1.0 . */
- /* */
- static FT_Long
- Current_Ratio( TT_ExecContext exc )
- {
- if ( !exc->tt_metrics.ratio )
- {
- if ( exc->GS.projVector.y == 0 )
- exc->tt_metrics.ratio = exc->tt_metrics.x_ratio;
-
- else if ( exc->GS.projVector.x == 0 )
- exc->tt_metrics.ratio = exc->tt_metrics.y_ratio;
-
- else
- {
- FT_F26Dot6 x, y;
-
-
- x = TT_MulFix14( exc->tt_metrics.x_ratio,
- exc->GS.projVector.x );
- y = TT_MulFix14( exc->tt_metrics.y_ratio,
- exc->GS.projVector.y );
- exc->tt_metrics.ratio = FT_Hypot( x, y );
- }
- }
- return exc->tt_metrics.ratio;
- }
-
-
- FT_CALLBACK_DEF( FT_Long )
- Current_Ppem( TT_ExecContext exc )
- {
- return exc->tt_metrics.ppem;
- }
-
-
- FT_CALLBACK_DEF( FT_Long )
- Current_Ppem_Stretched( TT_ExecContext exc )
- {
- return FT_MulFix( exc->tt_metrics.ppem, Current_Ratio( exc ) );
- }
-
-
- /*************************************************************************/
- /* */
- /* Functions related to the control value table (CVT). */
- /* */
- /*************************************************************************/
-
-
- FT_CALLBACK_DEF( FT_F26Dot6 )
- Read_CVT( TT_ExecContext exc,
- FT_ULong idx )
- {
- return exc->cvt[idx];
- }
-
-
- FT_CALLBACK_DEF( FT_F26Dot6 )
- Read_CVT_Stretched( TT_ExecContext exc,
- FT_ULong idx )
- {
- return FT_MulFix( exc->cvt[idx], Current_Ratio( exc ) );
- }
-
-
- FT_CALLBACK_DEF( void )
- Write_CVT( TT_ExecContext exc,
- FT_ULong idx,
- FT_F26Dot6 value )
- {
- exc->cvt[idx] = value;
- }
-
-
- FT_CALLBACK_DEF( void )
- Write_CVT_Stretched( TT_ExecContext exc,
- FT_ULong idx,
- FT_F26Dot6 value )
- {
- exc->cvt[idx] = FT_DivFix( value, Current_Ratio( exc ) );
- }
-
-
- FT_CALLBACK_DEF( void )
- Move_CVT( TT_ExecContext exc,
- FT_ULong idx,
- FT_F26Dot6 value )
- {
- exc->cvt[idx] += value;
- }
-
-
- FT_CALLBACK_DEF( void )
- Move_CVT_Stretched( TT_ExecContext exc,
- FT_ULong idx,
- FT_F26Dot6 value )
- {
- exc->cvt[idx] += FT_DivFix( value, Current_Ratio( exc ) );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* GetShortIns */
- /* */
- /* <Description> */
- /* Returns a short integer taken from the instruction stream at */
- /* address IP. */
- /* */
- /* <Return> */
- /* Short read at code[IP]. */
- /* */
- /* <Note> */
- /* This one could become a macro. */
- /* */
- static FT_Short
- GetShortIns( TT_ExecContext exc )
- {
- /* Reading a byte stream so there is no endianness (DaveP) */
- exc->IP += 2;
- return (FT_Short)( ( exc->code[exc->IP - 2] << 8 ) +
- exc->code[exc->IP - 1] );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Ins_Goto_CodeRange */
- /* */
- /* <Description> */
- /* Goes to a certain code range in the instruction stream. */
- /* */
- /* <Input> */
- /* aRange :: The index of the code range. */
- /* */
- /* aIP :: The new IP address in the code range. */
- /* */
- /* <Return> */
- /* SUCCESS or FAILURE. */
- /* */
- static FT_Bool
- Ins_Goto_CodeRange( TT_ExecContext exc,
- FT_Int aRange,
- FT_Long aIP )
- {
- TT_CodeRange* range;
-
-
- if ( aRange < 1 || aRange > 3 )
- {
- exc->error = FT_THROW( Bad_Argument );
- return FAILURE;
- }
-
- range = &exc->codeRangeTable[aRange - 1];
-
- if ( !range->base ) /* invalid coderange */
- {
- exc->error = FT_THROW( Invalid_CodeRange );
- return FAILURE;
- }
-
- /* NOTE: Because the last instruction of a program may be a CALL */
- /* which will return to the first byte *after* the code */
- /* range, we test for aIP <= Size, instead of aIP < Size. */
-
- if ( aIP > range->size )
- {
- exc->error = FT_THROW( Code_Overflow );
- return FAILURE;
- }
-
- exc->code = range->base;
- exc->codeSize = range->size;
- exc->IP = aIP;
- exc->curRange = aRange;
-
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Direct_Move */
- /* */
- /* <Description> */
- /* Moves a point by a given distance along the freedom vector. The */
- /* point will be `touched'. */
- /* */
- /* <Input> */
- /* point :: The index of the point to move. */
- /* */
- /* distance :: The distance to apply. */
- /* */
- /* <InOut> */
- /* zone :: The affected glyph zone. */
- /* */
- /* <Note> */
- /* See `ttinterp.h' for details on backward compatibility mode. */
- /* `Touches' the point. */
- /* */
- static void
- Direct_Move( TT_ExecContext exc,
- TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
- {
- FT_F26Dot6 v;
-
-
- v = exc->GS.freeVector.x;
-
- if ( v != 0 )
- {
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- ( !exc->ignore_x_mode ||
- ( exc->sph_tweak_flags & SPH_TWEAK_ALLOW_X_DMOVE ) ) )
- zone->cur[point].x = ADD_LONG( zone->cur[point].x,
- FT_MulDiv( distance,
- v,
- exc->F_dot_P ) );
- else
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- /* Exception to the post-IUP curfew: Allow the x component of */
- /* diagonal moves, but only post-IUP. DejaVu tries to adjust */
- /* diagonal stems like on `Z' and `z' post-IUP. */
- if ( SUBPIXEL_HINTING_MINIMAL && !exc->backward_compatibility )
- zone->cur[point].x = ADD_LONG( zone->cur[point].x,
- FT_MulDiv( distance,
- v,
- exc->F_dot_P ) );
- else
-#endif
-
- if ( NO_SUBPIXEL_HINTING )
- zone->cur[point].x = ADD_LONG( zone->cur[point].x,
- FT_MulDiv( distance,
- v,
- exc->F_dot_P ) );
-
- zone->tags[point] |= FT_CURVE_TAG_TOUCH_X;
- }
-
- v = exc->GS.freeVector.y;
-
- if ( v != 0 )
- {
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- if ( !( SUBPIXEL_HINTING_MINIMAL &&
- exc->backward_compatibility &&
- exc->iupx_called &&
- exc->iupy_called ) )
-#endif
- zone->cur[point].y = ADD_LONG( zone->cur[point].y,
- FT_MulDiv( distance,
- v,
- exc->F_dot_P ) );
-
- zone->tags[point] |= FT_CURVE_TAG_TOUCH_Y;
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Direct_Move_Orig */
- /* */
- /* <Description> */
- /* Moves the *original* position of a point by a given distance along */
- /* the freedom vector. Obviously, the point will not be `touched'. */
- /* */
- /* <Input> */
- /* point :: The index of the point to move. */
- /* */
- /* distance :: The distance to apply. */
- /* */
- /* <InOut> */
- /* zone :: The affected glyph zone. */
- /* */
- static void
- Direct_Move_Orig( TT_ExecContext exc,
- TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
- {
- FT_F26Dot6 v;
-
-
- v = exc->GS.freeVector.x;
-
- if ( v != 0 )
- zone->org[point].x = ADD_LONG( zone->org[point].x,
- FT_MulDiv( distance,
- v,
- exc->F_dot_P ) );
-
- v = exc->GS.freeVector.y;
-
- if ( v != 0 )
- zone->org[point].y = ADD_LONG( zone->org[point].y,
- FT_MulDiv( distance,
- v,
- exc->F_dot_P ) );
- }
-
-
- /*************************************************************************/
- /* */
- /* Special versions of Direct_Move() */
- /* */
- /* The following versions are used whenever both vectors are both */
- /* along one of the coordinate unit vectors, i.e. in 90% of the cases. */
- /* See `ttinterp.h' for details on backward compatibility mode. */
- /* */
- /*************************************************************************/
-
-
- static void
- Direct_Move_X( TT_ExecContext exc,
- TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
- {
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY && !exc->ignore_x_mode )
- zone->cur[point].x = ADD_LONG( zone->cur[point].x, distance );
- else
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- if ( SUBPIXEL_HINTING_MINIMAL && !exc->backward_compatibility )
- zone->cur[point].x = ADD_LONG( zone->cur[point].x, distance );
- else
-#endif
-
- if ( NO_SUBPIXEL_HINTING )
- zone->cur[point].x = ADD_LONG( zone->cur[point].x, distance );
-
- zone->tags[point] |= FT_CURVE_TAG_TOUCH_X;
- }
-
-
- static void
- Direct_Move_Y( TT_ExecContext exc,
- TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
- {
- FT_UNUSED( exc );
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- if ( !( SUBPIXEL_HINTING_MINIMAL &&
- exc->backward_compatibility &&
- exc->iupx_called && exc->iupy_called ) )
-#endif
- zone->cur[point].y = ADD_LONG( zone->cur[point].y, distance );
-
- zone->tags[point] |= FT_CURVE_TAG_TOUCH_Y;
- }
-
-
- /*************************************************************************/
- /* */
- /* Special versions of Direct_Move_Orig() */
- /* */
- /* The following versions are used whenever both vectors are both */
- /* along one of the coordinate unit vectors, i.e. in 90% of the cases. */
- /* */
- /*************************************************************************/
-
-
- static void
- Direct_Move_Orig_X( TT_ExecContext exc,
- TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
- {
- FT_UNUSED( exc );
-
- zone->org[point].x = ADD_LONG( zone->org[point].x, distance );
- }
-
-
- static void
- Direct_Move_Orig_Y( TT_ExecContext exc,
- TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
- {
- FT_UNUSED( exc );
-
- zone->org[point].y = ADD_LONG( zone->org[point].y, distance );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Round_None */
- /* */
- /* <Description> */
- /* Does not round, but adds engine compensation. */
- /* */
- /* <Input> */
- /* distance :: The distance (not) to round. */
- /* */
- /* compensation :: The engine compensation. */
- /* */
- /* <Return> */
- /* The compensated distance. */
- /* */
- /* <Note> */
- /* The TrueType specification says very few about the relationship */
- /* between rounding and engine compensation. However, it seems from */
- /* the description of super round that we should add the compensation */
- /* before rounding. */
- /* */
- static FT_F26Dot6
- Round_None( TT_ExecContext exc,
- FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
- FT_UNUSED( exc );
-
-
- if ( distance >= 0 )
- {
- val = ADD_LONG( distance, compensation );
- if ( val < 0 )
- val = 0;
- }
- else
- {
- val = SUB_LONG( distance, compensation );
- if ( val > 0 )
- val = 0;
- }
- return val;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Round_To_Grid */
- /* */
- /* <Description> */
- /* Rounds value to grid after adding engine compensation. */
- /* */
- /* <Input> */
- /* distance :: The distance to round. */
- /* */
- /* compensation :: The engine compensation. */
- /* */
- /* <Return> */
- /* Rounded distance. */
- /* */
- static FT_F26Dot6
- Round_To_Grid( TT_ExecContext exc,
- FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
- FT_UNUSED( exc );
-
-
- if ( distance >= 0 )
- {
- val = FT_PIX_ROUND_LONG( ADD_LONG( distance, compensation ) );
- if ( val < 0 )
- val = 0;
- }
- else
- {
- val = NEG_LONG( FT_PIX_ROUND_LONG( SUB_LONG( compensation,
- distance ) ) );
- if ( val > 0 )
- val = 0;
- }
-
- return val;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Round_To_Half_Grid */
- /* */
- /* <Description> */
- /* Rounds value to half grid after adding engine compensation. */
- /* */
- /* <Input> */
- /* distance :: The distance to round. */
- /* */
- /* compensation :: The engine compensation. */
- /* */
- /* <Return> */
- /* Rounded distance. */
- /* */
- static FT_F26Dot6
- Round_To_Half_Grid( TT_ExecContext exc,
- FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
- FT_UNUSED( exc );
-
-
- if ( distance >= 0 )
- {
- val = ADD_LONG( FT_PIX_FLOOR( ADD_LONG( distance, compensation ) ),
- 32 );
- if ( val < 0 )
- val = 32;
- }
- else
- {
- val = NEG_LONG( ADD_LONG( FT_PIX_FLOOR( SUB_LONG( compensation,
- distance ) ),
- 32 ) );
- if ( val > 0 )
- val = -32;
- }
-
- return val;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Round_Down_To_Grid */
- /* */
- /* <Description> */
- /* Rounds value down to grid after adding engine compensation. */
- /* */
- /* <Input> */
- /* distance :: The distance to round. */
- /* */
- /* compensation :: The engine compensation. */
- /* */
- /* <Return> */
- /* Rounded distance. */
- /* */
- static FT_F26Dot6
- Round_Down_To_Grid( TT_ExecContext exc,
- FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
- FT_UNUSED( exc );
-
-
- if ( distance >= 0 )
- {
- val = FT_PIX_FLOOR( ADD_LONG( distance, compensation ) );
- if ( val < 0 )
- val = 0;
- }
- else
- {
- val = NEG_LONG( FT_PIX_FLOOR( SUB_LONG( compensation, distance ) ) );
- if ( val > 0 )
- val = 0;
- }
-
- return val;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Round_Up_To_Grid */
- /* */
- /* <Description> */
- /* Rounds value up to grid after adding engine compensation. */
- /* */
- /* <Input> */
- /* distance :: The distance to round. */
- /* */
- /* compensation :: The engine compensation. */
- /* */
- /* <Return> */
- /* Rounded distance. */
- /* */
- static FT_F26Dot6
- Round_Up_To_Grid( TT_ExecContext exc,
- FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
- FT_UNUSED( exc );
-
-
- if ( distance >= 0 )
- {
- val = FT_PIX_CEIL_LONG( ADD_LONG( distance, compensation ) );
- if ( val < 0 )
- val = 0;
- }
- else
- {
- val = NEG_LONG( FT_PIX_CEIL_LONG( SUB_LONG( compensation,
- distance ) ) );
- if ( val > 0 )
- val = 0;
- }
-
- return val;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Round_To_Double_Grid */
- /* */
- /* <Description> */
- /* Rounds value to double grid after adding engine compensation. */
- /* */
- /* <Input> */
- /* distance :: The distance to round. */
- /* */
- /* compensation :: The engine compensation. */
- /* */
- /* <Return> */
- /* Rounded distance. */
- /* */
- static FT_F26Dot6
- Round_To_Double_Grid( TT_ExecContext exc,
- FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
- FT_UNUSED( exc );
-
-
- if ( distance >= 0 )
- {
- val = FT_PAD_ROUND_LONG( ADD_LONG( distance, compensation ), 32 );
- if ( val < 0 )
- val = 0;
- }
- else
- {
- val = NEG_LONG( FT_PAD_ROUND_LONG( SUB_LONG( compensation, distance ),
- 32 ) );
- if ( val > 0 )
- val = 0;
- }
-
- return val;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Round_Super */
- /* */
- /* <Description> */
- /* Super-rounds value to grid after adding engine compensation. */
- /* */
- /* <Input> */
- /* distance :: The distance to round. */
- /* */
- /* compensation :: The engine compensation. */
- /* */
- /* <Return> */
- /* Rounded distance. */
- /* */
- /* <Note> */
- /* The TrueType specification says very little about the relationship */
- /* between rounding and engine compensation. However, it seems from */
- /* the description of super round that we should add the compensation */
- /* before rounding. */
- /* */
- static FT_F26Dot6
- Round_Super( TT_ExecContext exc,
- FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
-
- if ( distance >= 0 )
- {
- val = ADD_LONG( distance,
- exc->threshold - exc->phase + compensation ) &
- -exc->period;
- val += exc->phase;
- if ( val < 0 )
- val = exc->phase;
- }
- else
- {
- val = NEG_LONG( SUB_LONG( exc->threshold - exc->phase + compensation,
- distance ) &
- -exc->period );
- val -= exc->phase;
- if ( val > 0 )
- val = -exc->phase;
- }
-
- return val;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Round_Super_45 */
- /* */
- /* <Description> */
- /* Super-rounds value to grid after adding engine compensation. */
- /* */
- /* <Input> */
- /* distance :: The distance to round. */
- /* */
- /* compensation :: The engine compensation. */
- /* */
- /* <Return> */
- /* Rounded distance. */
- /* */
- /* <Note> */
- /* There is a separate function for Round_Super_45() as we may need */
- /* greater precision. */
- /* */
- static FT_F26Dot6
- Round_Super_45( TT_ExecContext exc,
- FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
-
- if ( distance >= 0 )
- {
- val = ( ADD_LONG( distance,
- exc->threshold - exc->phase + compensation ) /
- exc->period ) * exc->period;
- val += exc->phase;
- if ( val < 0 )
- val = exc->phase;
- }
- else
- {
- val = NEG_LONG( ( SUB_LONG( exc->threshold - exc->phase + compensation,
- distance ) /
- exc->period ) * exc->period );
- val -= exc->phase;
- if ( val > 0 )
- val = -exc->phase;
- }
-
- return val;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Compute_Round */
- /* */
- /* <Description> */
- /* Sets the rounding mode. */
- /* */
- /* <Input> */
- /* round_mode :: The rounding mode to be used. */
- /* */
- static void
- Compute_Round( TT_ExecContext exc,
- FT_Byte round_mode )
- {
- switch ( round_mode )
- {
- case TT_Round_Off:
- exc->func_round = (TT_Round_Func)Round_None;
- break;
-
- case TT_Round_To_Grid:
- exc->func_round = (TT_Round_Func)Round_To_Grid;
- break;
-
- case TT_Round_Up_To_Grid:
- exc->func_round = (TT_Round_Func)Round_Up_To_Grid;
- break;
-
- case TT_Round_Down_To_Grid:
- exc->func_round = (TT_Round_Func)Round_Down_To_Grid;
- break;
-
- case TT_Round_To_Half_Grid:
- exc->func_round = (TT_Round_Func)Round_To_Half_Grid;
- break;
-
- case TT_Round_To_Double_Grid:
- exc->func_round = (TT_Round_Func)Round_To_Double_Grid;
- break;
-
- case TT_Round_Super:
- exc->func_round = (TT_Round_Func)Round_Super;
- break;
-
- case TT_Round_Super_45:
- exc->func_round = (TT_Round_Func)Round_Super_45;
- break;
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* SetSuperRound */
- /* */
- /* <Description> */
- /* Sets Super Round parameters. */
- /* */
- /* <Input> */
- /* GridPeriod :: The grid period. */
- /* */
- /* selector :: The SROUND opcode. */
- /* */
- static void
- SetSuperRound( TT_ExecContext exc,
- FT_F2Dot14 GridPeriod,
- FT_Long selector )
- {
- switch ( (FT_Int)( selector & 0xC0 ) )
- {
- case 0:
- exc->period = GridPeriod / 2;
- break;
-
- case 0x40:
- exc->period = GridPeriod;
- break;
-
- case 0x80:
- exc->period = GridPeriod * 2;
- break;
-
- /* This opcode is reserved, but... */
- case 0xC0:
- exc->period = GridPeriod;
- break;
- }
-
- switch ( (FT_Int)( selector & 0x30 ) )
- {
- case 0:
- exc->phase = 0;
- break;
-
- case 0x10:
- exc->phase = exc->period / 4;
- break;
-
- case 0x20:
- exc->phase = exc->period / 2;
- break;
-
- case 0x30:
- exc->phase = exc->period * 3 / 4;
- break;
- }
-
- if ( ( selector & 0x0F ) == 0 )
- exc->threshold = exc->period - 1;
- else
- exc->threshold = ( (FT_Int)( selector & 0x0F ) - 4 ) * exc->period / 8;
-
- /* convert to F26Dot6 format */
- exc->period >>= 8;
- exc->phase >>= 8;
- exc->threshold >>= 8;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Project */
- /* */
- /* <Description> */
- /* Computes the projection of vector given by (v2-v1) along the */
- /* current projection vector. */
- /* */
- /* <Input> */
- /* v1 :: First input vector. */
- /* v2 :: Second input vector. */
- /* */
- /* <Return> */
- /* The distance in F26dot6 format. */
- /* */
- static FT_F26Dot6
- Project( TT_ExecContext exc,
- FT_Pos dx,
- FT_Pos dy )
- {
- return TT_DotFix14( dx, dy,
- exc->GS.projVector.x,
- exc->GS.projVector.y );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Dual_Project */
- /* */
- /* <Description> */
- /* Computes the projection of the vector given by (v2-v1) along the */
- /* current dual vector. */
- /* */
- /* <Input> */
- /* v1 :: First input vector. */
- /* v2 :: Second input vector. */
- /* */
- /* <Return> */
- /* The distance in F26dot6 format. */
- /* */
- static FT_F26Dot6
- Dual_Project( TT_ExecContext exc,
- FT_Pos dx,
- FT_Pos dy )
- {
- return TT_DotFix14( dx, dy,
- exc->GS.dualVector.x,
- exc->GS.dualVector.y );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Project_x */
- /* */
- /* <Description> */
- /* Computes the projection of the vector given by (v2-v1) along the */
- /* horizontal axis. */
- /* */
- /* <Input> */
- /* v1 :: First input vector. */
- /* v2 :: Second input vector. */
- /* */
- /* <Return> */
- /* The distance in F26dot6 format. */
- /* */
- static FT_F26Dot6
- Project_x( TT_ExecContext exc,
- FT_Pos dx,
- FT_Pos dy )
- {
- FT_UNUSED( exc );
- FT_UNUSED( dy );
-
- return dx;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Project_y */
- /* */
- /* <Description> */
- /* Computes the projection of the vector given by (v2-v1) along the */
- /* vertical axis. */
- /* */
- /* <Input> */
- /* v1 :: First input vector. */
- /* v2 :: Second input vector. */
- /* */
- /* <Return> */
- /* The distance in F26dot6 format. */
- /* */
- static FT_F26Dot6
- Project_y( TT_ExecContext exc,
- FT_Pos dx,
- FT_Pos dy )
- {
- FT_UNUSED( exc );
- FT_UNUSED( dx );
-
- return dy;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Compute_Funcs */
- /* */
- /* <Description> */
- /* Computes the projection and movement function pointers according */
- /* to the current graphics state. */
- /* */
- static void
- Compute_Funcs( TT_ExecContext exc )
- {
- if ( exc->GS.freeVector.x == 0x4000 )
- exc->F_dot_P = exc->GS.projVector.x;
- else if ( exc->GS.freeVector.y == 0x4000 )
- exc->F_dot_P = exc->GS.projVector.y;
- else
- exc->F_dot_P =
- ( (FT_Long)exc->GS.projVector.x * exc->GS.freeVector.x +
- (FT_Long)exc->GS.projVector.y * exc->GS.freeVector.y ) >> 14;
-
- if ( exc->GS.projVector.x == 0x4000 )
- exc->func_project = (TT_Project_Func)Project_x;
- else if ( exc->GS.projVector.y == 0x4000 )
- exc->func_project = (TT_Project_Func)Project_y;
- else
- exc->func_project = (TT_Project_Func)Project;
-
- if ( exc->GS.dualVector.x == 0x4000 )
- exc->func_dualproj = (TT_Project_Func)Project_x;
- else if ( exc->GS.dualVector.y == 0x4000 )
- exc->func_dualproj = (TT_Project_Func)Project_y;
- else
- exc->func_dualproj = (TT_Project_Func)Dual_Project;
-
- exc->func_move = (TT_Move_Func)Direct_Move;
- exc->func_move_orig = (TT_Move_Func)Direct_Move_Orig;
-
- if ( exc->F_dot_P == 0x4000L )
- {
- if ( exc->GS.freeVector.x == 0x4000 )
- {
- exc->func_move = (TT_Move_Func)Direct_Move_X;
- exc->func_move_orig = (TT_Move_Func)Direct_Move_Orig_X;
- }
- else if ( exc->GS.freeVector.y == 0x4000 )
- {
- exc->func_move = (TT_Move_Func)Direct_Move_Y;
- exc->func_move_orig = (TT_Move_Func)Direct_Move_Orig_Y;
- }
- }
-
- /* at small sizes, F_dot_P can become too small, resulting */
- /* in overflows and `spikes' in a number of glyphs like `w'. */
-
- if ( FT_ABS( exc->F_dot_P ) < 0x400L )
- exc->F_dot_P = 0x4000L;
-
- /* Disable cached aspect ratio */
- exc->tt_metrics.ratio = 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Normalize */
- /* */
- /* <Description> */
- /* Norms a vector. */
- /* */
- /* <Input> */
- /* Vx :: The horizontal input vector coordinate. */
- /* Vy :: The vertical input vector coordinate. */
- /* */
- /* <Output> */
- /* R :: The normed unit vector. */
- /* */
- /* <Return> */
- /* Returns FAILURE if a vector parameter is zero. */
- /* */
- /* <Note> */
- /* In case Vx and Vy are both zero, `Normalize' returns SUCCESS, and */
- /* R is undefined. */
- /* */
- static FT_Bool
- Normalize( FT_F26Dot6 Vx,
- FT_F26Dot6 Vy,
- FT_UnitVector* R )
- {
- FT_Vector V;
-
-
- if ( Vx == 0 && Vy == 0 )
- {
- /* XXX: UNDOCUMENTED! It seems that it is possible to try */
- /* to normalize the vector (0,0). Return immediately. */
- return SUCCESS;
- }
-
- V.x = Vx;
- V.y = Vy;
-
- FT_Vector_NormLen( &V );
-
- R->x = (FT_F2Dot14)( V.x / 4 );
- R->y = (FT_F2Dot14)( V.y / 4 );
-
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* Here we start with the implementation of the various opcodes. */
- /* */
- /*************************************************************************/
-
-
-#define ARRAY_BOUND_ERROR \
- do \
- { \
- exc->error = FT_THROW( Invalid_Reference ); \
- return; \
- } while (0)
-
-
- /*************************************************************************/
- /* */
- /* MPPEM[]: Measure Pixel Per EM */
- /* Opcode range: 0x4B */
- /* Stack: --> Euint16 */
- /* */
- static void
- Ins_MPPEM( TT_ExecContext exc,
- FT_Long* args )
- {
- args[0] = exc->func_cur_ppem( exc );
- }
-
-
- /*************************************************************************/
- /* */
- /* MPS[]: Measure Point Size */
- /* Opcode range: 0x4C */
- /* Stack: --> Euint16 */
- /* */
- static void
- Ins_MPS( TT_ExecContext exc,
- FT_Long* args )
- {
- if ( NO_SUBPIXEL_HINTING )
- {
- /* Microsoft's GDI bytecode interpreter always returns value 12; */
- /* we return the current PPEM value instead. */
- args[0] = exc->func_cur_ppem( exc );
- }
- else
- {
- /* A possible practical application of the MPS instruction is to */
- /* implement optical scaling and similar features, which should be */
- /* based on perceptual attributes, thus independent of the */
- /* resolution. */
- args[0] = exc->pointSize;
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* DUP[]: DUPlicate the stack's top element */
- /* Opcode range: 0x20 */
- /* Stack: StkElt --> StkElt StkElt */
- /* */
- static void
- Ins_DUP( FT_Long* args )
- {
- args[1] = args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* POP[]: POP the stack's top element */
- /* Opcode range: 0x21 */
- /* Stack: StkElt --> */
- /* */
- static void
- Ins_POP( void )
- {
- /* nothing to do */
- }
-
-
- /*************************************************************************/
- /* */
- /* CLEAR[]: CLEAR the entire stack */
- /* Opcode range: 0x22 */
- /* Stack: StkElt... --> */
- /* */
- static void
- Ins_CLEAR( TT_ExecContext exc )
- {
- exc->new_top = 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* SWAP[]: SWAP the stack's top two elements */
- /* Opcode range: 0x23 */
- /* Stack: 2 * StkElt --> 2 * StkElt */
- /* */
- static void
- Ins_SWAP( FT_Long* args )
- {
- FT_Long L;
-
-
- L = args[0];
- args[0] = args[1];
- args[1] = L;
- }
-
-
- /*************************************************************************/
- /* */
- /* DEPTH[]: return the stack DEPTH */
- /* Opcode range: 0x24 */
- /* Stack: --> uint32 */
- /* */
- static void
- Ins_DEPTH( TT_ExecContext exc,
- FT_Long* args )
- {
- args[0] = exc->top;
- }
-
-
- /*************************************************************************/
- /* */
- /* LT[]: Less Than */
- /* Opcode range: 0x50 */
- /* Stack: int32? int32? --> bool */
- /* */
- static void
- Ins_LT( FT_Long* args )
- {
- args[0] = ( args[0] < args[1] );
- }
-
-
- /*************************************************************************/
- /* */
- /* LTEQ[]: Less Than or EQual */
- /* Opcode range: 0x51 */
- /* Stack: int32? int32? --> bool */
- /* */
- static void
- Ins_LTEQ( FT_Long* args )
- {
- args[0] = ( args[0] <= args[1] );
- }
-
-
- /*************************************************************************/
- /* */
- /* GT[]: Greater Than */
- /* Opcode range: 0x52 */
- /* Stack: int32? int32? --> bool */
- /* */
- static void
- Ins_GT( FT_Long* args )
- {
- args[0] = ( args[0] > args[1] );
- }
-
-
- /*************************************************************************/
- /* */
- /* GTEQ[]: Greater Than or EQual */
- /* Opcode range: 0x53 */
- /* Stack: int32? int32? --> bool */
- /* */
- static void
- Ins_GTEQ( FT_Long* args )
- {
- args[0] = ( args[0] >= args[1] );
- }
-
-
- /*************************************************************************/
- /* */
- /* EQ[]: EQual */
- /* Opcode range: 0x54 */
- /* Stack: StkElt StkElt --> bool */
- /* */
- static void
- Ins_EQ( FT_Long* args )
- {
- args[0] = ( args[0] == args[1] );
- }
-
-
- /*************************************************************************/
- /* */
- /* NEQ[]: Not EQual */
- /* Opcode range: 0x55 */
- /* Stack: StkElt StkElt --> bool */
- /* */
- static void
- Ins_NEQ( FT_Long* args )
- {
- args[0] = ( args[0] != args[1] );
- }
-
-
- /*************************************************************************/
- /* */
- /* ODD[]: Is ODD */
- /* Opcode range: 0x56 */
- /* Stack: f26.6 --> bool */
- /* */
- static void
- Ins_ODD( TT_ExecContext exc,
- FT_Long* args )
- {
- args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 64 );
- }
-
-
- /*************************************************************************/
- /* */
- /* EVEN[]: Is EVEN */
- /* Opcode range: 0x57 */
- /* Stack: f26.6 --> bool */
- /* */
- static void
- Ins_EVEN( TT_ExecContext exc,
- FT_Long* args )
- {
- args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 0 );
- }
-
-
- /*************************************************************************/
- /* */
- /* AND[]: logical AND */
- /* Opcode range: 0x5A */
- /* Stack: uint32 uint32 --> uint32 */
- /* */
- static void
- Ins_AND( FT_Long* args )
- {
- args[0] = ( args[0] && args[1] );
- }
-
-
- /*************************************************************************/
- /* */
- /* OR[]: logical OR */
- /* Opcode range: 0x5B */
- /* Stack: uint32 uint32 --> uint32 */
- /* */
- static void
- Ins_OR( FT_Long* args )
- {
- args[0] = ( args[0] || args[1] );
- }
-
-
- /*************************************************************************/
- /* */
- /* NOT[]: logical NOT */
- /* Opcode range: 0x5C */
- /* Stack: StkElt --> uint32 */
- /* */
- static void
- Ins_NOT( FT_Long* args )
- {
- args[0] = !args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* ADD[]: ADD */
- /* Opcode range: 0x60 */
- /* Stack: f26.6 f26.6 --> f26.6 */
- /* */
- static void
- Ins_ADD( FT_Long* args )
- {
- args[0] = ADD_LONG( args[0], args[1] );
- }
-
-
- /*************************************************************************/
- /* */
- /* SUB[]: SUBtract */
- /* Opcode range: 0x61 */
- /* Stack: f26.6 f26.6 --> f26.6 */
- /* */
- static void
- Ins_SUB( FT_Long* args )
- {
- args[0] = SUB_LONG( args[0], args[1] );
- }
-
-
- /*************************************************************************/
- /* */
- /* DIV[]: DIVide */
- /* Opcode range: 0x62 */
- /* Stack: f26.6 f26.6 --> f26.6 */
- /* */
- static void
- Ins_DIV( TT_ExecContext exc,
- FT_Long* args )
- {
- if ( args[1] == 0 )
- exc->error = FT_THROW( Divide_By_Zero );
- else
- args[0] = FT_MulDiv_No_Round( args[0], 64L, args[1] );
- }
-
-
- /*************************************************************************/
- /* */
- /* MUL[]: MULtiply */
- /* Opcode range: 0x63 */
- /* Stack: f26.6 f26.6 --> f26.6 */
- /* */
- static void
- Ins_MUL( FT_Long* args )
- {
- args[0] = FT_MulDiv( args[0], args[1], 64L );
- }
-
-
- /*************************************************************************/
- /* */
- /* ABS[]: ABSolute value */
- /* Opcode range: 0x64 */
- /* Stack: f26.6 --> f26.6 */
- /* */
- static void
- Ins_ABS( FT_Long* args )
- {
- if ( args[0] < 0 )
- args[0] = NEG_LONG( args[0] );
- }
-
-
- /*************************************************************************/
- /* */
- /* NEG[]: NEGate */
- /* Opcode range: 0x65 */
- /* Stack: f26.6 --> f26.6 */
- /* */
- static void
- Ins_NEG( FT_Long* args )
- {
- args[0] = NEG_LONG( args[0] );
- }
-
-
- /*************************************************************************/
- /* */
- /* FLOOR[]: FLOOR */
- /* Opcode range: 0x66 */
- /* Stack: f26.6 --> f26.6 */
- /* */
- static void
- Ins_FLOOR( FT_Long* args )
- {
- args[0] = FT_PIX_FLOOR( args[0] );
- }
-
-
- /*************************************************************************/
- /* */
- /* CEILING[]: CEILING */
- /* Opcode range: 0x67 */
- /* Stack: f26.6 --> f26.6 */
- /* */
- static void
- Ins_CEILING( FT_Long* args )
- {
- args[0] = FT_PIX_CEIL( args[0] );
- }
-
-
- /*************************************************************************/
- /* */
- /* RS[]: Read Store */
- /* Opcode range: 0x43 */
- /* Stack: uint32 --> uint32 */
- /* */
- static void
- Ins_RS( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_ULong I = (FT_ULong)args[0];
-
-
- if ( BOUNDSL( I, exc->storeSize ) )
- {
- if ( exc->pedantic_hinting )
- ARRAY_BOUND_ERROR;
- else
- args[0] = 0;
- }
- else
- {
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- /* subpixel hinting - avoid Typeman Dstroke and */
- /* IStroke and Vacuform rounds */
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- ( ( I == 24 &&
- ( exc->face->sph_found_func_flags &
- ( SPH_FDEF_SPACING_1 |
- SPH_FDEF_SPACING_2 ) ) ) ||
- ( I == 22 &&
- ( exc->sph_in_func_flags &
- SPH_FDEF_TYPEMAN_STROKES ) ) ||
- ( I == 8 &&
- ( exc->face->sph_found_func_flags &
- SPH_FDEF_VACUFORM_ROUND_1 ) &&
- exc->iup_called ) ) )
- args[0] = 0;
- else
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
- args[0] = exc->storage[I];
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* WS[]: Write Store */
- /* Opcode range: 0x42 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_WS( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_ULong I = (FT_ULong)args[0];
-
-
- if ( BOUNDSL( I, exc->storeSize ) )
- {
- if ( exc->pedantic_hinting )
- ARRAY_BOUND_ERROR;
- }
- else
- exc->storage[I] = args[1];
- }
-
-
- /*************************************************************************/
- /* */
- /* WCVTP[]: Write CVT in Pixel units */
- /* Opcode range: 0x44 */
- /* Stack: f26.6 uint32 --> */
- /* */
- static void
- Ins_WCVTP( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_ULong I = (FT_ULong)args[0];
-
-
- if ( BOUNDSL( I, exc->cvtSize ) )
- {
- if ( exc->pedantic_hinting )
- ARRAY_BOUND_ERROR;
- }
- else
- exc->func_write_cvt( exc, I, args[1] );
- }
-
-
- /*************************************************************************/
- /* */
- /* WCVTF[]: Write CVT in Funits */
- /* Opcode range: 0x70 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_WCVTF( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_ULong I = (FT_ULong)args[0];
-
-
- if ( BOUNDSL( I, exc->cvtSize ) )
- {
- if ( exc->pedantic_hinting )
- ARRAY_BOUND_ERROR;
- }
- else
- exc->cvt[I] = FT_MulFix( args[1], exc->tt_metrics.scale );
- }
-
-
- /*************************************************************************/
- /* */
- /* RCVT[]: Read CVT */
- /* Opcode range: 0x45 */
- /* Stack: uint32 --> f26.6 */
- /* */
- static void
- Ins_RCVT( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_ULong I = (FT_ULong)args[0];
-
-
- if ( BOUNDSL( I, exc->cvtSize ) )
- {
- if ( exc->pedantic_hinting )
- ARRAY_BOUND_ERROR;
- else
- args[0] = 0;
- }
- else
- args[0] = exc->func_read_cvt( exc, I );
- }
-
-
- /*************************************************************************/
- /* */
- /* AA[]: Adjust Angle */
- /* Opcode range: 0x7F */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_AA( void )
- {
- /* intentionally no longer supported */
- }
-
-
- /*************************************************************************/
- /* */
- /* DEBUG[]: DEBUG. Unsupported. */
- /* Opcode range: 0x4F */
- /* Stack: uint32 --> */
- /* */
- /* Note: The original instruction pops a value from the stack. */
- /* */
- static void
- Ins_DEBUG( TT_ExecContext exc )
- {
- exc->error = FT_THROW( Debug_OpCode );
- }
-
-
- /*************************************************************************/
- /* */
- /* ROUND[ab]: ROUND value */
- /* Opcode range: 0x68-0x6B */
- /* Stack: f26.6 --> f26.6 */
- /* */
- static void
- Ins_ROUND( TT_ExecContext exc,
- FT_Long* args )
- {
- args[0] = exc->func_round(
- exc,
- args[0],
- exc->tt_metrics.compensations[exc->opcode - 0x68] );
- }
-
-
- /*************************************************************************/
- /* */
- /* NROUND[ab]: No ROUNDing of value */
- /* Opcode range: 0x6C-0x6F */
- /* Stack: f26.6 --> f26.6 */
- /* */
- static void
- Ins_NROUND( TT_ExecContext exc,
- FT_Long* args )
- {
- args[0] = Round_None(
- exc,
- args[0],
- exc->tt_metrics.compensations[exc->opcode - 0x6C] );
- }
-
-
- /*************************************************************************/
- /* */
- /* MAX[]: MAXimum */
- /* Opcode range: 0x8B */
- /* Stack: int32? int32? --> int32 */
- /* */
- static void
- Ins_MAX( FT_Long* args )
- {
- if ( args[1] > args[0] )
- args[0] = args[1];
- }
-
-
- /*************************************************************************/
- /* */
- /* MIN[]: MINimum */
- /* Opcode range: 0x8C */
- /* Stack: int32? int32? --> int32 */
- /* */
- static void
- Ins_MIN( FT_Long* args )
- {
- if ( args[1] < args[0] )
- args[0] = args[1];
- }
-
-
- /*************************************************************************/
- /* */
- /* MINDEX[]: Move INDEXed element */
- /* Opcode range: 0x26 */
- /* Stack: int32? --> StkElt */
- /* */
- static void
- Ins_MINDEX( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_Long L, K;
-
-
- L = args[0];
-
- if ( L <= 0 || L > exc->args )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- }
- else
- {
- K = exc->stack[exc->args - L];
-
- FT_ARRAY_MOVE( &exc->stack[exc->args - L ],
- &exc->stack[exc->args - L + 1],
- ( L - 1 ) );
-
- exc->stack[exc->args - 1] = K;
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* CINDEX[]: Copy INDEXed element */
- /* Opcode range: 0x25 */
- /* Stack: int32 --> StkElt */
- /* */
- static void
- Ins_CINDEX( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_Long L;
-
-
- L = args[0];
-
- if ( L <= 0 || L > exc->args )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- args[0] = 0;
- }
- else
- args[0] = exc->stack[exc->args - L];
- }
-
-
- /*************************************************************************/
- /* */
- /* ROLL[]: ROLL top three elements */
- /* Opcode range: 0x8A */
- /* Stack: 3 * StkElt --> 3 * StkElt */
- /* */
- static void
- Ins_ROLL( FT_Long* args )
- {
- FT_Long A, B, C;
-
-
- A = args[2];
- B = args[1];
- C = args[0];
-
- args[2] = C;
- args[1] = A;
- args[0] = B;
- }
-
-
- /*************************************************************************/
- /* */
- /* MANAGING THE FLOW OF CONTROL */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* SLOOP[]: Set LOOP variable */
- /* Opcode range: 0x17 */
- /* Stack: int32? --> */
- /* */
- static void
- Ins_SLOOP( TT_ExecContext exc,
- FT_Long* args )
- {
- if ( args[0] < 0 )
- exc->error = FT_THROW( Bad_Argument );
- else
- exc->GS.loop = args[0];
- }
-
-
- static FT_Bool
- SkipCode( TT_ExecContext exc )
- {
- exc->IP += exc->length;
-
- if ( exc->IP < exc->codeSize )
- {
- exc->opcode = exc->code[exc->IP];
-
- exc->length = opcode_length[exc->opcode];
- if ( exc->length < 0 )
- {
- if ( exc->IP + 1 >= exc->codeSize )
- goto Fail_Overflow;
- exc->length = 2 - exc->length * exc->code[exc->IP + 1];
- }
-
- if ( exc->IP + exc->length <= exc->codeSize )
- return SUCCESS;
- }
-
- Fail_Overflow:
- exc->error = FT_THROW( Code_Overflow );
- return FAILURE;
- }
-
-
- /*************************************************************************/
- /* */
- /* IF[]: IF test */
- /* Opcode range: 0x58 */
- /* Stack: StkElt --> */
- /* */
- static void
- Ins_IF( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_Int nIfs;
- FT_Bool Out;
-
-
- if ( args[0] != 0 )
- return;
-
- nIfs = 1;
- Out = 0;
-
- do
- {
- if ( SkipCode( exc ) == FAILURE )
- return;
-
- switch ( exc->opcode )
- {
- case 0x58: /* IF */
- nIfs++;
- break;
-
- case 0x1B: /* ELSE */
- Out = FT_BOOL( nIfs == 1 );
- break;
-
- case 0x59: /* EIF */
- nIfs--;
- Out = FT_BOOL( nIfs == 0 );
- break;
- }
- } while ( Out == 0 );
- }
-
-
- /*************************************************************************/
- /* */
- /* ELSE[]: ELSE */
- /* Opcode range: 0x1B */
- /* Stack: --> */
- /* */
- static void
- Ins_ELSE( TT_ExecContext exc )
- {
- FT_Int nIfs;
-
-
- nIfs = 1;
-
- do
- {
- if ( SkipCode( exc ) == FAILURE )
- return;
-
- switch ( exc->opcode )
- {
- case 0x58: /* IF */
- nIfs++;
- break;
-
- case 0x59: /* EIF */
- nIfs--;
- break;
- }
- } while ( nIfs != 0 );
- }
-
-
- /*************************************************************************/
- /* */
- /* EIF[]: End IF */
- /* Opcode range: 0x59 */
- /* Stack: --> */
- /* */
- static void
- Ins_EIF( void )
- {
- /* nothing to do */
- }
-
-
- /*************************************************************************/
- /* */
- /* JMPR[]: JuMP Relative */
- /* Opcode range: 0x1C */
- /* Stack: int32 --> */
- /* */
- static void
- Ins_JMPR( TT_ExecContext exc,
- FT_Long* args )
- {
- if ( args[0] == 0 && exc->args == 0 )
- {
- exc->error = FT_THROW( Bad_Argument );
- return;
- }
-
- exc->IP += args[0];
- if ( exc->IP < 0 ||
- ( exc->callTop > 0 &&
- exc->IP > exc->callStack[exc->callTop - 1].Def->end ) )
- {
- exc->error = FT_THROW( Bad_Argument );
- return;
- }
-
- exc->step_ins = FALSE;
-
- if ( args[0] < 0 )
- {
- if ( ++exc->neg_jump_counter > exc->neg_jump_counter_max )
- exc->error = FT_THROW( Execution_Too_Long );
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* JROT[]: Jump Relative On True */
- /* Opcode range: 0x78 */
- /* Stack: StkElt int32 --> */
- /* */
- static void
- Ins_JROT( TT_ExecContext exc,
- FT_Long* args )
- {
- if ( args[1] != 0 )
- Ins_JMPR( exc, args );
- }
-
-
- /*************************************************************************/
- /* */
- /* JROF[]: Jump Relative On False */
- /* Opcode range: 0x79 */
- /* Stack: StkElt int32 --> */
- /* */
- static void
- Ins_JROF( TT_ExecContext exc,
- FT_Long* args )
- {
- if ( args[1] == 0 )
- Ins_JMPR( exc, args );
- }
-
-
- /*************************************************************************/
- /* */
- /* DEFINING AND USING FUNCTIONS AND INSTRUCTIONS */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* FDEF[]: Function DEFinition */
- /* Opcode range: 0x2C */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_FDEF( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_ULong n;
- TT_DefRecord* rec;
- TT_DefRecord* limit;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- /* arguments to opcodes are skipped by `SKIP_Code' */
- FT_Byte opcode_pattern[9][12] = {
- /* #0 inline delta function 1 */
- {
- 0x4B, /* PPEM */
- 0x53, /* GTEQ */
- 0x23, /* SWAP */
- 0x4B, /* PPEM */
- 0x51, /* LTEQ */
- 0x5A, /* AND */
- 0x58, /* IF */
- 0x38, /* SHPIX */
- 0x1B, /* ELSE */
- 0x21, /* POP */
- 0x21, /* POP */
- 0x59 /* EIF */
- },
- /* #1 inline delta function 2 */
- {
- 0x4B, /* PPEM */
- 0x54, /* EQ */
- 0x58, /* IF */
- 0x38, /* SHPIX */
- 0x1B, /* ELSE */
- 0x21, /* POP */
- 0x21, /* POP */
- 0x59 /* EIF */
- },
- /* #2 diagonal stroke function */
- {
- 0x20, /* DUP */
- 0x20, /* DUP */
- 0xB0, /* PUSHB_1 */
- /* 1 */
- 0x60, /* ADD */
- 0x46, /* GC_cur */
- 0xB0, /* PUSHB_1 */
- /* 64 */
- 0x23, /* SWAP */
- 0x42 /* WS */
- },
- /* #3 VacuFormRound function */
- {
- 0x45, /* RCVT */
- 0x23, /* SWAP */
- 0x46, /* GC_cur */
- 0x60, /* ADD */
- 0x20, /* DUP */
- 0xB0 /* PUSHB_1 */
- /* 38 */
- },
- /* #4 TTFautohint bytecode (old) */
- {
- 0x20, /* DUP */
- 0x64, /* ABS */
- 0xB0, /* PUSHB_1 */
- /* 32 */
- 0x60, /* ADD */
- 0x66, /* FLOOR */
- 0x23, /* SWAP */
- 0xB0 /* PUSHB_1 */
- },
- /* #5 spacing function 1 */
- {
- 0x01, /* SVTCA_x */
- 0xB0, /* PUSHB_1 */
- /* 24 */
- 0x43, /* RS */
- 0x58 /* IF */
- },
- /* #6 spacing function 2 */
- {
- 0x01, /* SVTCA_x */
- 0x18, /* RTG */
- 0xB0, /* PUSHB_1 */
- /* 24 */
- 0x43, /* RS */
- 0x58 /* IF */
- },
- /* #7 TypeMan Talk DiagEndCtrl function */
- {
- 0x01, /* SVTCA_x */
- 0x20, /* DUP */
- 0xB0, /* PUSHB_1 */
- /* 3 */
- 0x25, /* CINDEX */
- },
- /* #8 TypeMan Talk Align */
- {
- 0x06, /* SPVTL */
- 0x7D, /* RDTG */
- },
- };
- FT_UShort opcode_patterns = 9;
- FT_UShort opcode_pointer[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- FT_UShort opcode_size[9] = { 12, 8, 8, 6, 7, 4, 5, 4, 2 };
- FT_UShort i;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
-
- /* FDEF is only allowed in `prep' or `fpgm' */
- if ( exc->curRange == tt_coderange_glyph )
- {
- exc->error = FT_THROW( DEF_In_Glyf_Bytecode );
- return;
- }
-
- /* some font programs are broken enough to redefine functions! */
- /* We will then parse the current table. */
-
- rec = exc->FDefs;
- limit = rec + exc->numFDefs;
- n = (FT_ULong)args[0];
-
- for ( ; rec < limit; rec++ )
- {
- if ( rec->opc == n )
- break;
- }
-
- if ( rec == limit )
- {
- /* check that there is enough room for new functions */
- if ( exc->numFDefs >= exc->maxFDefs )
- {
- exc->error = FT_THROW( Too_Many_Function_Defs );
- return;
- }
- exc->numFDefs++;
- }
-
- /* Although FDEF takes unsigned 32-bit integer, */
- /* func # must be within unsigned 16-bit integer */
- if ( n > 0xFFFFU )
- {
- exc->error = FT_THROW( Too_Many_Function_Defs );
- return;
- }
-
- rec->range = exc->curRange;
- rec->opc = (FT_UInt16)n;
- rec->start = exc->IP + 1;
- rec->active = TRUE;
- rec->inline_delta = FALSE;
- rec->sph_fdef_flags = 0x0000;
-
- if ( n > exc->maxFunc )
- exc->maxFunc = (FT_UInt16)n;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- /* We don't know for sure these are typeman functions, */
- /* however they are only active when RS 22 is called */
- if ( n >= 64 && n <= 66 )
- rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_STROKES;
-#endif
-
- /* Now skip the whole function definition. */
- /* We don't allow nested IDEFS & FDEFs. */
-
- while ( SkipCode( exc ) == SUCCESS )
- {
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-
- if ( SUBPIXEL_HINTING_INFINALITY )
- {
- for ( i = 0; i < opcode_patterns; i++ )
- {
- if ( opcode_pointer[i] < opcode_size[i] &&
- exc->opcode == opcode_pattern[i][opcode_pointer[i]] )
- {
- opcode_pointer[i] += 1;
-
- if ( opcode_pointer[i] == opcode_size[i] )
- {
- FT_TRACE6(( "sph: Function %d, opcode ptrn: %d, %s %s\n",
- i, n,
- exc->face->root.family_name,
- exc->face->root.style_name ));
-
- switch ( i )
- {
- case 0:
- rec->sph_fdef_flags |= SPH_FDEF_INLINE_DELTA_1;
- exc->face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_1;
- break;
-
- case 1:
- rec->sph_fdef_flags |= SPH_FDEF_INLINE_DELTA_2;
- exc->face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_2;
- break;
-
- case 2:
- switch ( n )
- {
- /* needs to be implemented still */
- case 58:
- rec->sph_fdef_flags |= SPH_FDEF_DIAGONAL_STROKE;
- exc->face->sph_found_func_flags |= SPH_FDEF_DIAGONAL_STROKE;
- }
- break;
-
- case 3:
- switch ( n )
- {
- case 0:
- rec->sph_fdef_flags |= SPH_FDEF_VACUFORM_ROUND_1;
- exc->face->sph_found_func_flags |= SPH_FDEF_VACUFORM_ROUND_1;
- }
- break;
-
- case 4:
- /* probably not necessary to detect anymore */
- rec->sph_fdef_flags |= SPH_FDEF_TTFAUTOHINT_1;
- exc->face->sph_found_func_flags |= SPH_FDEF_TTFAUTOHINT_1;
- break;
-
- case 5:
- switch ( n )
- {
- case 0:
- case 1:
- case 2:
- case 4:
- case 7:
- case 8:
- rec->sph_fdef_flags |= SPH_FDEF_SPACING_1;
- exc->face->sph_found_func_flags |= SPH_FDEF_SPACING_1;
- }
- break;
-
- case 6:
- switch ( n )
- {
- case 0:
- case 1:
- case 2:
- case 4:
- case 7:
- case 8:
- rec->sph_fdef_flags |= SPH_FDEF_SPACING_2;
- exc->face->sph_found_func_flags |= SPH_FDEF_SPACING_2;
- }
- break;
-
- case 7:
- rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL;
- exc->face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL;
- break;
-
- case 8:
-#if 0
- rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL;
- exc->face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL;
-#endif
- break;
- }
- opcode_pointer[i] = 0;
- }
- }
-
- else
- opcode_pointer[i] = 0;
- }
-
- /* Set sph_compatibility_mode only when deltas are detected */
- exc->face->sph_compatibility_mode =
- ( ( exc->face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_1 ) |
- ( exc->face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_2 ) );
- }
-
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- switch ( exc->opcode )
- {
- case 0x89: /* IDEF */
- case 0x2C: /* FDEF */
- exc->error = FT_THROW( Nested_DEFS );
- return;
-
- case 0x2D: /* ENDF */
- rec->end = exc->IP;
- return;
- }
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* ENDF[]: END Function definition */
- /* Opcode range: 0x2D */
- /* Stack: --> */
- /* */
- static void
- Ins_ENDF( TT_ExecContext exc )
- {
- TT_CallRec* pRec;
-
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- exc->sph_in_func_flags = 0x0000;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- if ( exc->callTop <= 0 ) /* We encountered an ENDF without a call */
- {
- exc->error = FT_THROW( ENDF_In_Exec_Stream );
- return;
- }
-
- exc->callTop--;
-
- pRec = &exc->callStack[exc->callTop];
-
- pRec->Cur_Count--;
-
- exc->step_ins = FALSE;
-
- if ( pRec->Cur_Count > 0 )
- {
- exc->callTop++;
- exc->IP = pRec->Def->start;
- }
- else
- /* Loop through the current function */
- Ins_Goto_CodeRange( exc, pRec->Caller_Range, pRec->Caller_IP );
-
- /* Exit the current call frame. */
-
- /* NOTE: If the last instruction of a program is a */
- /* CALL or LOOPCALL, the return address is */
- /* always out of the code range. This is a */
- /* valid address, and it is why we do not test */
- /* the result of Ins_Goto_CodeRange() here! */
- }
-
-
- /*************************************************************************/
- /* */
- /* CALL[]: CALL function */
- /* Opcode range: 0x2B */
- /* Stack: uint32? --> */
- /* */
- static void
- Ins_CALL( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_ULong F;
- TT_CallRec* pCrec;
- TT_DefRecord* def;
-
-
- /* first of all, check the index */
-
- F = (FT_ULong)args[0];
- if ( BOUNDSL( F, exc->maxFunc + 1 ) )
- goto Fail;
-
- /* Except for some old Apple fonts, all functions in a TrueType */
- /* font are defined in increasing order, starting from 0. This */
- /* means that we normally have */
- /* */
- /* exc->maxFunc+1 == exc->numFDefs */
- /* exc->FDefs[n].opc == n for n in 0..exc->maxFunc */
- /* */
- /* If this isn't true, we need to look up the function table. */
-
- def = exc->FDefs + F;
- if ( exc->maxFunc + 1 != exc->numFDefs || def->opc != F )
- {
- /* look up the FDefs table */
- TT_DefRecord* limit;
-
-
- def = exc->FDefs;
- limit = def + exc->numFDefs;
-
- while ( def < limit && def->opc != F )
- def++;
-
- if ( def == limit )
- goto Fail;
- }
-
- /* check that the function is active */
- if ( !def->active )
- goto Fail;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- ( ( exc->iup_called &&
- ( exc->sph_tweak_flags & SPH_TWEAK_NO_CALL_AFTER_IUP ) ) ||
- ( def->sph_fdef_flags & SPH_FDEF_VACUFORM_ROUND_1 ) ) )
- goto Fail;
- else
- exc->sph_in_func_flags = def->sph_fdef_flags;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- /* check the call stack */
- if ( exc->callTop >= exc->callSize )
- {
- exc->error = FT_THROW( Stack_Overflow );
- return;
- }
-
- pCrec = exc->callStack + exc->callTop;
-
- pCrec->Caller_Range = exc->curRange;
- pCrec->Caller_IP = exc->IP + 1;
- pCrec->Cur_Count = 1;
- pCrec->Def = def;
-
- exc->callTop++;
-
- Ins_Goto_CodeRange( exc, def->range, def->start );
-
- exc->step_ins = FALSE;
-
- return;
-
- Fail:
- exc->error = FT_THROW( Invalid_Reference );
- }
-
-
- /*************************************************************************/
- /* */
- /* LOOPCALL[]: LOOP and CALL function */
- /* Opcode range: 0x2A */
- /* Stack: uint32? Eint16? --> */
- /* */
- static void
- Ins_LOOPCALL( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_ULong F;
- TT_CallRec* pCrec;
- TT_DefRecord* def;
-
-
- /* first of all, check the index */
- F = (FT_ULong)args[1];
- if ( BOUNDSL( F, exc->maxFunc + 1 ) )
- goto Fail;
-
- /* Except for some old Apple fonts, all functions in a TrueType */
- /* font are defined in increasing order, starting from 0. This */
- /* means that we normally have */
- /* */
- /* exc->maxFunc+1 == exc->numFDefs */
- /* exc->FDefs[n].opc == n for n in 0..exc->maxFunc */
- /* */
- /* If this isn't true, we need to look up the function table. */
-
- def = exc->FDefs + F;
- if ( exc->maxFunc + 1 != exc->numFDefs || def->opc != F )
- {
- /* look up the FDefs table */
- TT_DefRecord* limit;
-
-
- def = exc->FDefs;
- limit = def + exc->numFDefs;
-
- while ( def < limit && def->opc != F )
- def++;
-
- if ( def == limit )
- goto Fail;
- }
-
- /* check that the function is active */
- if ( !def->active )
- goto Fail;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- ( def->sph_fdef_flags & SPH_FDEF_VACUFORM_ROUND_1 ) )
- goto Fail;
- else
- exc->sph_in_func_flags = def->sph_fdef_flags;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- /* check stack */
- if ( exc->callTop >= exc->callSize )
- {
- exc->error = FT_THROW( Stack_Overflow );
- return;
- }
-
- if ( args[0] > 0 )
- {
- pCrec = exc->callStack + exc->callTop;
-
- pCrec->Caller_Range = exc->curRange;
- pCrec->Caller_IP = exc->IP + 1;
- pCrec->Cur_Count = (FT_Int)args[0];
- pCrec->Def = def;
-
- exc->callTop++;
-
- Ins_Goto_CodeRange( exc, def->range, def->start );
-
- exc->step_ins = FALSE;
-
- exc->loopcall_counter += (FT_ULong)args[0];
- if ( exc->loopcall_counter > exc->loopcall_counter_max )
- exc->error = FT_THROW( Execution_Too_Long );
- }
-
- return;
-
- Fail:
- exc->error = FT_THROW( Invalid_Reference );
- }
-
-
- /*************************************************************************/
- /* */
- /* IDEF[]: Instruction DEFinition */
- /* Opcode range: 0x89 */
- /* Stack: Eint8 --> */
- /* */
- static void
- Ins_IDEF( TT_ExecContext exc,
- FT_Long* args )
- {
- TT_DefRecord* def;
- TT_DefRecord* limit;
-
-
- /* we enable IDEF only in `prep' or `fpgm' */
- if ( exc->curRange == tt_coderange_glyph )
- {
- exc->error = FT_THROW( DEF_In_Glyf_Bytecode );
- return;
- }
-
- /* First of all, look for the same function in our table */
-
- def = exc->IDefs;
- limit = def + exc->numIDefs;
-
- for ( ; def < limit; def++ )
- if ( def->opc == (FT_ULong)args[0] )
- break;
-
- if ( def == limit )
- {
- /* check that there is enough room for a new instruction */
- if ( exc->numIDefs >= exc->maxIDefs )
- {
- exc->error = FT_THROW( Too_Many_Instruction_Defs );
- return;
- }
- exc->numIDefs++;
- }
-
- /* opcode must be unsigned 8-bit integer */
- if ( 0 > args[0] || args[0] > 0x00FF )
- {
- exc->error = FT_THROW( Too_Many_Instruction_Defs );
- return;
- }
-
- def->opc = (FT_Byte)args[0];
- def->start = exc->IP + 1;
- def->range = exc->curRange;
- def->active = TRUE;
-
- if ( (FT_ULong)args[0] > exc->maxIns )
- exc->maxIns = (FT_Byte)args[0];
-
- /* Now skip the whole function definition. */
- /* We don't allow nested IDEFs & FDEFs. */
-
- while ( SkipCode( exc ) == SUCCESS )
- {
- switch ( exc->opcode )
- {
- case 0x89: /* IDEF */
- case 0x2C: /* FDEF */
- exc->error = FT_THROW( Nested_DEFS );
- return;
- case 0x2D: /* ENDF */
- def->end = exc->IP;
- return;
- }
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* PUSHING DATA ONTO THE INTERPRETER STACK */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* NPUSHB[]: PUSH N Bytes */
- /* Opcode range: 0x40 */
- /* Stack: --> uint32... */
- /* */
- static void
- Ins_NPUSHB( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_UShort L, K;
-
-
- L = (FT_UShort)exc->code[exc->IP + 1];
-
- if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) )
- {
- exc->error = FT_THROW( Stack_Overflow );
- return;
- }
-
- for ( K = 1; K <= L; K++ )
- args[K - 1] = exc->code[exc->IP + K + 1];
-
- exc->new_top += L;
- }
-
-
- /*************************************************************************/
- /* */
- /* NPUSHW[]: PUSH N Words */
- /* Opcode range: 0x41 */
- /* Stack: --> int32... */
- /* */
- static void
- Ins_NPUSHW( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_UShort L, K;
-
-
- L = (FT_UShort)exc->code[exc->IP + 1];
-
- if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) )
- {
- exc->error = FT_THROW( Stack_Overflow );
- return;
- }
-
- exc->IP += 2;
-
- for ( K = 0; K < L; K++ )
- args[K] = GetShortIns( exc );
-
- exc->step_ins = FALSE;
- exc->new_top += L;
- }
-
-
- /*************************************************************************/
- /* */
- /* PUSHB[abc]: PUSH Bytes */
- /* Opcode range: 0xB0-0xB7 */
- /* Stack: --> uint32... */
- /* */
- static void
- Ins_PUSHB( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_UShort L, K;
-
-
- L = (FT_UShort)( exc->opcode - 0xB0 + 1 );
-
- if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) )
- {
- exc->error = FT_THROW( Stack_Overflow );
- return;
- }
-
- for ( K = 1; K <= L; K++ )
- args[K - 1] = exc->code[exc->IP + K];
- }
-
-
- /*************************************************************************/
- /* */
- /* PUSHW[abc]: PUSH Words */
- /* Opcode range: 0xB8-0xBF */
- /* Stack: --> int32... */
- /* */
- static void
- Ins_PUSHW( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_UShort L, K;
-
-
- L = (FT_UShort)( exc->opcode - 0xB8 + 1 );
-
- if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) )
- {
- exc->error = FT_THROW( Stack_Overflow );
- return;
- }
-
- exc->IP++;
-
- for ( K = 0; K < L; K++ )
- args[K] = GetShortIns( exc );
-
- exc->step_ins = FALSE;
- }
-
-
- /*************************************************************************/
- /* */
- /* MANAGING THE GRAPHICS STATE */
- /* */
- /*************************************************************************/
-
-
- static FT_Bool
- Ins_SxVTL( TT_ExecContext exc,
- FT_UShort aIdx1,
- FT_UShort aIdx2,
- FT_UnitVector* Vec )
- {
- FT_Long A, B, C;
- FT_Vector* p1;
- FT_Vector* p2;
-
- FT_Byte opcode = exc->opcode;
-
-
- if ( BOUNDS( aIdx1, exc->zp2.n_points ) ||
- BOUNDS( aIdx2, exc->zp1.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return FAILURE;
- }
-
- p1 = exc->zp1.cur + aIdx2;
- p2 = exc->zp2.cur + aIdx1;
-
- A = SUB_LONG( p1->x, p2->x );
- B = SUB_LONG( p1->y, p2->y );
-
- /* If p1 == p2, SPvTL and SFvTL behave the same as */
- /* SPvTCA[X] and SFvTCA[X], respectively. */
- /* */
- /* Confirmed by Greg Hitchcock. */
-
- if ( A == 0 && B == 0 )
- {
- A = 0x4000;
- opcode = 0;
- }
-
- if ( ( opcode & 1 ) != 0 )
- {
- C = B; /* counter clockwise rotation */
- B = A;
- A = -C;
- }
-
- Normalize( A, B, Vec );
-
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* SVTCA[a]: Set (F and P) Vectors to Coordinate Axis */
- /* Opcode range: 0x00-0x01 */
- /* Stack: --> */
- /* */
- /* SPvTCA[a]: Set PVector to Coordinate Axis */
- /* Opcode range: 0x02-0x03 */
- /* Stack: --> */
- /* */
- /* SFvTCA[a]: Set FVector to Coordinate Axis */
- /* Opcode range: 0x04-0x05 */
- /* Stack: --> */
- /* */
- static void
- Ins_SxyTCA( TT_ExecContext exc )
- {
- FT_Short AA, BB;
-
- FT_Byte opcode = exc->opcode;
-
-
- AA = (FT_Short)( ( opcode & 1 ) << 14 );
- BB = (FT_Short)( AA ^ 0x4000 );
-
- if ( opcode < 4 )
- {
- exc->GS.projVector.x = AA;
- exc->GS.projVector.y = BB;
-
- exc->GS.dualVector.x = AA;
- exc->GS.dualVector.y = BB;
- }
-
- if ( ( opcode & 2 ) == 0 )
- {
- exc->GS.freeVector.x = AA;
- exc->GS.freeVector.y = BB;
- }
-
- Compute_Funcs( exc );
- }
-
-
- /*************************************************************************/
- /* */
- /* SPvTL[a]: Set PVector To Line */
- /* Opcode range: 0x06-0x07 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_SPVTL( TT_ExecContext exc,
- FT_Long* args )
- {
- if ( Ins_SxVTL( exc,
- (FT_UShort)args[1],
- (FT_UShort)args[0],
- &exc->GS.projVector ) == SUCCESS )
- {
- exc->GS.dualVector = exc->GS.projVector;
- Compute_Funcs( exc );
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* SFvTL[a]: Set FVector To Line */
- /* Opcode range: 0x08-0x09 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_SFVTL( TT_ExecContext exc,
- FT_Long* args )
- {
- if ( Ins_SxVTL( exc,
- (FT_UShort)args[1],
- (FT_UShort)args[0],
- &exc->GS.freeVector ) == SUCCESS )
- {
- Compute_Funcs( exc );
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* SFvTPv[]: Set FVector To PVector */
- /* Opcode range: 0x0E */
- /* Stack: --> */
- /* */
- static void
- Ins_SFVTPV( TT_ExecContext exc )
- {
- exc->GS.freeVector = exc->GS.projVector;
- Compute_Funcs( exc );
- }
-
-
- /*************************************************************************/
- /* */
- /* SPvFS[]: Set PVector From Stack */
- /* Opcode range: 0x0A */
- /* Stack: f2.14 f2.14 --> */
- /* */
- static void
- Ins_SPVFS( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_Short S;
- FT_Long X, Y;
-
-
- /* Only use low 16bits, then sign extend */
- S = (FT_Short)args[1];
- Y = (FT_Long)S;
- S = (FT_Short)args[0];
- X = (FT_Long)S;
-
- Normalize( X, Y, &exc->GS.projVector );
-
- exc->GS.dualVector = exc->GS.projVector;
- Compute_Funcs( exc );
- }
-
-
- /*************************************************************************/
- /* */
- /* SFvFS[]: Set FVector From Stack */
- /* Opcode range: 0x0B */
- /* Stack: f2.14 f2.14 --> */
- /* */
- static void
- Ins_SFVFS( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_Short S;
- FT_Long X, Y;
-
-
- /* Only use low 16bits, then sign extend */
- S = (FT_Short)args[1];
- Y = (FT_Long)S;
- S = (FT_Short)args[0];
- X = S;
-
- Normalize( X, Y, &exc->GS.freeVector );
- Compute_Funcs( exc );
- }
-
-
- /*************************************************************************/
- /* */
- /* GPv[]: Get Projection Vector */
- /* Opcode range: 0x0C */
- /* Stack: ef2.14 --> ef2.14 */
- /* */
- static void
- Ins_GPV( TT_ExecContext exc,
- FT_Long* args )
- {
- args[0] = exc->GS.projVector.x;
- args[1] = exc->GS.projVector.y;
- }
-
-
- /*************************************************************************/
- /* */
- /* GFv[]: Get Freedom Vector */
- /* Opcode range: 0x0D */
- /* Stack: ef2.14 --> ef2.14 */
- /* */
- static void
- Ins_GFV( TT_ExecContext exc,
- FT_Long* args )
- {
- args[0] = exc->GS.freeVector.x;
- args[1] = exc->GS.freeVector.y;
- }
-
-
- /*************************************************************************/
- /* */
- /* SRP0[]: Set Reference Point 0 */
- /* Opcode range: 0x10 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SRP0( TT_ExecContext exc,
- FT_Long* args )
- {
- exc->GS.rp0 = (FT_UShort)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* SRP1[]: Set Reference Point 1 */
- /* Opcode range: 0x11 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SRP1( TT_ExecContext exc,
- FT_Long* args )
- {
- exc->GS.rp1 = (FT_UShort)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* SRP2[]: Set Reference Point 2 */
- /* Opcode range: 0x12 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SRP2( TT_ExecContext exc,
- FT_Long* args )
- {
- exc->GS.rp2 = (FT_UShort)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* SMD[]: Set Minimum Distance */
- /* Opcode range: 0x1A */
- /* Stack: f26.6 --> */
- /* */
- static void
- Ins_SMD( TT_ExecContext exc,
- FT_Long* args )
- {
- exc->GS.minimum_distance = args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* SCVTCI[]: Set Control Value Table Cut In */
- /* Opcode range: 0x1D */
- /* Stack: f26.6 --> */
- /* */
- static void
- Ins_SCVTCI( TT_ExecContext exc,
- FT_Long* args )
- {
- exc->GS.control_value_cutin = (FT_F26Dot6)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* SSWCI[]: Set Single Width Cut In */
- /* Opcode range: 0x1E */
- /* Stack: f26.6 --> */
- /* */
- static void
- Ins_SSWCI( TT_ExecContext exc,
- FT_Long* args )
- {
- exc->GS.single_width_cutin = (FT_F26Dot6)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* SSW[]: Set Single Width */
- /* Opcode range: 0x1F */
- /* Stack: int32? --> */
- /* */
- static void
- Ins_SSW( TT_ExecContext exc,
- FT_Long* args )
- {
- exc->GS.single_width_value = FT_MulFix( args[0],
- exc->tt_metrics.scale );
- }
-
-
- /*************************************************************************/
- /* */
- /* FLIPON[]: Set auto-FLIP to ON */
- /* Opcode range: 0x4D */
- /* Stack: --> */
- /* */
- static void
- Ins_FLIPON( TT_ExecContext exc )
- {
- exc->GS.auto_flip = TRUE;
- }
-
-
- /*************************************************************************/
- /* */
- /* FLIPOFF[]: Set auto-FLIP to OFF */
- /* Opcode range: 0x4E */
- /* Stack: --> */
- /* */
- static void
- Ins_FLIPOFF( TT_ExecContext exc )
- {
- exc->GS.auto_flip = FALSE;
- }
-
-
- /*************************************************************************/
- /* */
- /* SANGW[]: Set ANGle Weight */
- /* Opcode range: 0x7E */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SANGW( void )
- {
- /* instruction not supported anymore */
- }
-
-
- /*************************************************************************/
- /* */
- /* SDB[]: Set Delta Base */
- /* Opcode range: 0x5E */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SDB( TT_ExecContext exc,
- FT_Long* args )
- {
- exc->GS.delta_base = (FT_UShort)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* SDS[]: Set Delta Shift */
- /* Opcode range: 0x5F */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SDS( TT_ExecContext exc,
- FT_Long* args )
- {
- if ( (FT_ULong)args[0] > 6UL )
- exc->error = FT_THROW( Bad_Argument );
- else
- exc->GS.delta_shift = (FT_UShort)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* RTHG[]: Round To Half Grid */
- /* Opcode range: 0x19 */
- /* Stack: --> */
- /* */
- static void
- Ins_RTHG( TT_ExecContext exc )
- {
- exc->GS.round_state = TT_Round_To_Half_Grid;
- exc->func_round = (TT_Round_Func)Round_To_Half_Grid;
- }
-
-
- /*************************************************************************/
- /* */
- /* RTG[]: Round To Grid */
- /* Opcode range: 0x18 */
- /* Stack: --> */
- /* */
- static void
- Ins_RTG( TT_ExecContext exc )
- {
- exc->GS.round_state = TT_Round_To_Grid;
- exc->func_round = (TT_Round_Func)Round_To_Grid;
- }
-
-
- /*************************************************************************/
- /* RTDG[]: Round To Double Grid */
- /* Opcode range: 0x3D */
- /* Stack: --> */
- /* */
- static void
- Ins_RTDG( TT_ExecContext exc )
- {
- exc->GS.round_state = TT_Round_To_Double_Grid;
- exc->func_round = (TT_Round_Func)Round_To_Double_Grid;
- }
-
-
- /*************************************************************************/
- /* RUTG[]: Round Up To Grid */
- /* Opcode range: 0x7C */
- /* Stack: --> */
- /* */
- static void
- Ins_RUTG( TT_ExecContext exc )
- {
- exc->GS.round_state = TT_Round_Up_To_Grid;
- exc->func_round = (TT_Round_Func)Round_Up_To_Grid;
- }
-
-
- /*************************************************************************/
- /* */
- /* RDTG[]: Round Down To Grid */
- /* Opcode range: 0x7D */
- /* Stack: --> */
- /* */
- static void
- Ins_RDTG( TT_ExecContext exc )
- {
- exc->GS.round_state = TT_Round_Down_To_Grid;
- exc->func_round = (TT_Round_Func)Round_Down_To_Grid;
- }
-
-
- /*************************************************************************/
- /* */
- /* ROFF[]: Round OFF */
- /* Opcode range: 0x7A */
- /* Stack: --> */
- /* */
- static void
- Ins_ROFF( TT_ExecContext exc )
- {
- exc->GS.round_state = TT_Round_Off;
- exc->func_round = (TT_Round_Func)Round_None;
- }
-
-
- /*************************************************************************/
- /* */
- /* SROUND[]: Super ROUND */
- /* Opcode range: 0x76 */
- /* Stack: Eint8 --> */
- /* */
- static void
- Ins_SROUND( TT_ExecContext exc,
- FT_Long* args )
- {
- SetSuperRound( exc, 0x4000, args[0] );
-
- exc->GS.round_state = TT_Round_Super;
- exc->func_round = (TT_Round_Func)Round_Super;
- }
-
-
- /*************************************************************************/
- /* */
- /* S45ROUND[]: Super ROUND 45 degrees */
- /* Opcode range: 0x77 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_S45ROUND( TT_ExecContext exc,
- FT_Long* args )
- {
- SetSuperRound( exc, 0x2D41, args[0] );
-
- exc->GS.round_state = TT_Round_Super_45;
- exc->func_round = (TT_Round_Func)Round_Super_45;
- }
-
-
- /*************************************************************************/
- /* */
- /* GC[a]: Get Coordinate projected onto */
- /* Opcode range: 0x46-0x47 */
- /* Stack: uint32 --> f26.6 */
- /* */
- /* XXX: UNDOCUMENTED: Measures from the original glyph must be taken */
- /* along the dual projection vector! */
- /* */
- static void
- Ins_GC( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_ULong L;
- FT_F26Dot6 R;
-
-
- L = (FT_ULong)args[0];
-
- if ( BOUNDSL( L, exc->zp2.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- R = 0;
- }
- else
- {
- if ( exc->opcode & 1 )
- R = FAST_DUALPROJ( &exc->zp2.org[L] );
- else
- R = FAST_PROJECT( &exc->zp2.cur[L] );
- }
-
- args[0] = R;
- }
-
-
- /*************************************************************************/
- /* */
- /* SCFS[]: Set Coordinate From Stack */
- /* Opcode range: 0x48 */
- /* Stack: f26.6 uint32 --> */
- /* */
- /* Formula: */
- /* */
- /* OA := OA + ( value - OA.p )/( f.p ) * f */
- /* */
- static void
- Ins_SCFS( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_Long K;
- FT_UShort L;
-
-
- L = (FT_UShort)args[0];
-
- if ( BOUNDS( L, exc->zp2.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- K = FAST_PROJECT( &exc->zp2.cur[L] );
-
- exc->func_move( exc, &exc->zp2, L, args[1] - K );
-
- /* UNDOCUMENTED! The MS rasterizer does that with */
- /* twilight points (confirmed by Greg Hitchcock) */
- if ( exc->GS.gep2 == 0 )
- exc->zp2.org[L] = exc->zp2.cur[L];
- }
-
-
- /*************************************************************************/
- /* */
- /* MD[a]: Measure Distance */
- /* Opcode range: 0x49-0x4A */
- /* Stack: uint32 uint32 --> f26.6 */
- /* */
- /* XXX: UNDOCUMENTED: Measure taken in the original glyph must be along */
- /* the dual projection vector. */
- /* */
- /* XXX: UNDOCUMENTED: Flag attributes are inverted! */
- /* 0 => measure distance in original outline */
- /* 1 => measure distance in grid-fitted outline */
- /* */
- /* XXX: UNDOCUMENTED: `zp0 - zp1', and not `zp2 - zp1! */
- /* */
- static void
- Ins_MD( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_UShort K, L;
- FT_F26Dot6 D;
-
-
- K = (FT_UShort)args[1];
- L = (FT_UShort)args[0];
-
- if ( BOUNDS( L, exc->zp0.n_points ) ||
- BOUNDS( K, exc->zp1.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- D = 0;
- }
- else
- {
- if ( exc->opcode & 1 )
- D = PROJECT( exc->zp0.cur + L, exc->zp1.cur + K );
- else
- {
- /* XXX: UNDOCUMENTED: twilight zone special case */
-
- if ( exc->GS.gep0 == 0 || exc->GS.gep1 == 0 )
- {
- FT_Vector* vec1 = exc->zp0.org + L;
- FT_Vector* vec2 = exc->zp1.org + K;
-
-
- D = DUALPROJ( vec1, vec2 );
- }
- else
- {
- FT_Vector* vec1 = exc->zp0.orus + L;
- FT_Vector* vec2 = exc->zp1.orus + K;
-
-
- if ( exc->metrics.x_scale == exc->metrics.y_scale )
- {
- /* this should be faster */
- D = DUALPROJ( vec1, vec2 );
- D = FT_MulFix( D, exc->metrics.x_scale );
- }
- else
- {
- FT_Vector vec;
-
-
- vec.x = FT_MulFix( vec1->x - vec2->x, exc->metrics.x_scale );
- vec.y = FT_MulFix( vec1->y - vec2->y, exc->metrics.y_scale );
-
- D = FAST_DUALPROJ( &vec );
- }
- }
- }
- }
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- /* Disable Type 2 Vacuform Rounds - e.g. Arial Narrow */
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- FT_ABS( D ) == 64 )
- D += 1;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- args[0] = D;
- }
-
-
- /*************************************************************************/
- /* */
- /* SDPvTL[a]: Set Dual PVector to Line */
- /* Opcode range: 0x86-0x87 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_SDPVTL( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_Long A, B, C;
- FT_UShort p1, p2; /* was FT_Int in pas type ERROR */
-
- FT_Byte opcode = exc->opcode;
-
-
- p1 = (FT_UShort)args[1];
- p2 = (FT_UShort)args[0];
-
- if ( BOUNDS( p2, exc->zp1.n_points ) ||
- BOUNDS( p1, exc->zp2.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- {
- FT_Vector* v1 = exc->zp1.org + p2;
- FT_Vector* v2 = exc->zp2.org + p1;
-
-
- A = v1->x - v2->x;
- B = v1->y - v2->y;
-
- /* If v1 == v2, SDPvTL behaves the same as */
- /* SVTCA[X], respectively. */
- /* */
- /* Confirmed by Greg Hitchcock. */
-
- if ( A == 0 && B == 0 )
- {
- A = 0x4000;
- opcode = 0;
- }
- }
-
- if ( ( opcode & 1 ) != 0 )
- {
- C = B; /* counter clockwise rotation */
- B = A;
- A = -C;
- }
-
- Normalize( A, B, &exc->GS.dualVector );
-
- {
- FT_Vector* v1 = exc->zp1.cur + p2;
- FT_Vector* v2 = exc->zp2.cur + p1;
-
-
- A = v1->x - v2->x;
- B = v1->y - v2->y;
-
- if ( A == 0 && B == 0 )
- {
- A = 0x4000;
- opcode = 0;
- }
- }
-
- if ( ( opcode & 1 ) != 0 )
- {
- C = B; /* counter clockwise rotation */
- B = A;
- A = -C;
- }
-
- Normalize( A, B, &exc->GS.projVector );
- Compute_Funcs( exc );
- }
-
-
- /*************************************************************************/
- /* */
- /* SZP0[]: Set Zone Pointer 0 */
- /* Opcode range: 0x13 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SZP0( TT_ExecContext exc,
- FT_Long* args )
- {
- switch ( (FT_Int)args[0] )
- {
- case 0:
- exc->zp0 = exc->twilight;
- break;
-
- case 1:
- exc->zp0 = exc->pts;
- break;
-
- default:
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- exc->GS.gep0 = (FT_UShort)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* SZP1[]: Set Zone Pointer 1 */
- /* Opcode range: 0x14 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SZP1( TT_ExecContext exc,
- FT_Long* args )
- {
- switch ( (FT_Int)args[0] )
- {
- case 0:
- exc->zp1 = exc->twilight;
- break;
-
- case 1:
- exc->zp1 = exc->pts;
- break;
-
- default:
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- exc->GS.gep1 = (FT_UShort)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* SZP2[]: Set Zone Pointer 2 */
- /* Opcode range: 0x15 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SZP2( TT_ExecContext exc,
- FT_Long* args )
- {
- switch ( (FT_Int)args[0] )
- {
- case 0:
- exc->zp2 = exc->twilight;
- break;
-
- case 1:
- exc->zp2 = exc->pts;
- break;
-
- default:
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- exc->GS.gep2 = (FT_UShort)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* SZPS[]: Set Zone PointerS */
- /* Opcode range: 0x16 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SZPS( TT_ExecContext exc,
- FT_Long* args )
- {
- switch ( (FT_Int)args[0] )
- {
- case 0:
- exc->zp0 = exc->twilight;
- break;
-
- case 1:
- exc->zp0 = exc->pts;
- break;
-
- default:
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- exc->zp1 = exc->zp0;
- exc->zp2 = exc->zp0;
-
- exc->GS.gep0 = (FT_UShort)args[0];
- exc->GS.gep1 = (FT_UShort)args[0];
- exc->GS.gep2 = (FT_UShort)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* INSTCTRL[]: INSTruction ConTRoL */
- /* Opcode range: 0x8E */
- /* Stack: int32 int32 --> */
- /* */
- static void
- Ins_INSTCTRL( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_ULong K, L, Kf;
-
-
- K = (FT_ULong)args[1];
- L = (FT_ULong)args[0];
-
- /* selector values cannot be `OR'ed; */
- /* they are indices starting with index 1, not flags */
- if ( K < 1 || K > 3 )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- /* convert index to flag value */
- Kf = 1 << ( K - 1 );
-
- if ( L != 0 )
- {
- /* arguments to selectors look like flag values */
- if ( L != Kf )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
- }
-
- exc->GS.instruct_control &= ~(FT_Byte)Kf;
- exc->GS.instruct_control |= (FT_Byte)L;
-
- if ( K == 3 )
- {
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- /* INSTCTRL modifying flag 3 also has an effect */
- /* outside of the CVT program */
- if ( SUBPIXEL_HINTING_INFINALITY )
- exc->ignore_x_mode = FT_BOOL( L == 4 );
-#endif
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- /* Native ClearType fonts sign a waiver that turns off all backward */
- /* compatibility hacks and lets them program points to the grid like */
- /* it's 1996. They might sign a waiver for just one glyph, though. */
- if ( SUBPIXEL_HINTING_MINIMAL )
- exc->backward_compatibility = !FT_BOOL( L == 4 );
-#endif
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* SCANCTRL[]: SCAN ConTRoL */
- /* Opcode range: 0x85 */
- /* Stack: uint32? --> */
- /* */
- static void
- Ins_SCANCTRL( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_Int A;
-
-
- /* Get Threshold */
- A = (FT_Int)( args[0] & 0xFF );
-
- if ( A == 0xFF )
- {
- exc->GS.scan_control = TRUE;
- return;
- }
- else if ( A == 0 )
- {
- exc->GS.scan_control = FALSE;
- return;
- }
-
- if ( ( args[0] & 0x100 ) != 0 && exc->tt_metrics.ppem <= A )
- exc->GS.scan_control = TRUE;
-
- if ( ( args[0] & 0x200 ) != 0 && exc->tt_metrics.rotated )
- exc->GS.scan_control = TRUE;
-
- if ( ( args[0] & 0x400 ) != 0 && exc->tt_metrics.stretched )
- exc->GS.scan_control = TRUE;
-
- if ( ( args[0] & 0x800 ) != 0 && exc->tt_metrics.ppem > A )
- exc->GS.scan_control = FALSE;
-
- if ( ( args[0] & 0x1000 ) != 0 && exc->tt_metrics.rotated )
- exc->GS.scan_control = FALSE;
-
- if ( ( args[0] & 0x2000 ) != 0 && exc->tt_metrics.stretched )
- exc->GS.scan_control = FALSE;
- }
-
-
- /*************************************************************************/
- /* */
- /* SCANTYPE[]: SCAN TYPE */
- /* Opcode range: 0x8D */
- /* Stack: uint16 --> */
- /* */
- static void
- Ins_SCANTYPE( TT_ExecContext exc,
- FT_Long* args )
- {
- if ( args[0] >= 0 )
- exc->GS.scan_type = (FT_Int)args[0] & 0xFFFF;
- }
-
-
- /*************************************************************************/
- /* */
- /* MANAGING OUTLINES */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* FLIPPT[]: FLIP PoinT */
- /* Opcode range: 0x80 */
- /* Stack: uint32... --> */
- /* */
- static void
- Ins_FLIPPT( TT_ExecContext exc )
- {
- FT_UShort point;
-
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- /* See `ttinterp.h' for details on backward compatibility mode. */
- if ( SUBPIXEL_HINTING_MINIMAL &&
- exc->backward_compatibility &&
- exc->iupx_called &&
- exc->iupy_called )
- goto Fail;
-#endif
-
- if ( exc->top < exc->GS.loop )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Too_Few_Arguments );
- goto Fail;
- }
-
- while ( exc->GS.loop > 0 )
- {
- exc->args--;
-
- point = (FT_UShort)exc->stack[exc->args];
-
- if ( BOUNDS( point, exc->pts.n_points ) )
- {
- if ( exc->pedantic_hinting )
- {
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
- }
- else
- exc->pts.tags[point] ^= FT_CURVE_TAG_ON;
-
- exc->GS.loop--;
- }
-
- Fail:
- exc->GS.loop = 1;
- exc->new_top = exc->args;
- }
-
-
- /*************************************************************************/
- /* */
- /* FLIPRGON[]: FLIP RanGe ON */
- /* Opcode range: 0x81 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_FLIPRGON( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_UShort I, K, L;
-
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- /* See `ttinterp.h' for details on backward compatibility mode. */
- if ( SUBPIXEL_HINTING_MINIMAL &&
- exc->backward_compatibility &&
- exc->iupx_called &&
- exc->iupy_called )
- return;
-#endif
-
- K = (FT_UShort)args[1];
- L = (FT_UShort)args[0];
-
- if ( BOUNDS( K, exc->pts.n_points ) ||
- BOUNDS( L, exc->pts.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- for ( I = L; I <= K; I++ )
- exc->pts.tags[I] |= FT_CURVE_TAG_ON;
- }
-
-
- /*************************************************************************/
- /* */
- /* FLIPRGOFF: FLIP RanGe OFF */
- /* Opcode range: 0x82 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_FLIPRGOFF( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_UShort I, K, L;
-
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- /* See `ttinterp.h' for details on backward compatibility mode. */
- if ( SUBPIXEL_HINTING_MINIMAL &&
- exc->backward_compatibility &&
- exc->iupx_called &&
- exc->iupy_called )
- return;
-#endif
-
- K = (FT_UShort)args[1];
- L = (FT_UShort)args[0];
-
- if ( BOUNDS( K, exc->pts.n_points ) ||
- BOUNDS( L, exc->pts.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- for ( I = L; I <= K; I++ )
- exc->pts.tags[I] &= ~FT_CURVE_TAG_ON;
- }
-
-
- static FT_Bool
- Compute_Point_Displacement( TT_ExecContext exc,
- FT_F26Dot6* x,
- FT_F26Dot6* y,
- TT_GlyphZone zone,
- FT_UShort* refp )
- {
- TT_GlyphZoneRec zp;
- FT_UShort p;
- FT_F26Dot6 d;
-
-
- if ( exc->opcode & 1 )
- {
- zp = exc->zp0;
- p = exc->GS.rp1;
- }
- else
- {
- zp = exc->zp1;
- p = exc->GS.rp2;
- }
-
- if ( BOUNDS( p, zp.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- *refp = 0;
- return FAILURE;
- }
-
- *zone = zp;
- *refp = p;
-
- d = PROJECT( zp.cur + p, zp.org + p );
-
- *x = FT_MulDiv( d, (FT_Long)exc->GS.freeVector.x, exc->F_dot_P );
- *y = FT_MulDiv( d, (FT_Long)exc->GS.freeVector.y, exc->F_dot_P );
-
- return SUCCESS;
- }
-
-
- /* See `ttinterp.h' for details on backward compatibility mode. */
- static void
- Move_Zp2_Point( TT_ExecContext exc,
- FT_UShort point,
- FT_F26Dot6 dx,
- FT_F26Dot6 dy,
- FT_Bool touch )
- {
- if ( exc->GS.freeVector.x != 0 )
- {
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- if ( !( SUBPIXEL_HINTING_MINIMAL &&
- exc->backward_compatibility ) )
-#endif
- exc->zp2.cur[point].x = ADD_LONG( exc->zp2.cur[point].x, dx );
-
- if ( touch )
- exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_X;
- }
-
- if ( exc->GS.freeVector.y != 0 )
- {
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- if ( !( SUBPIXEL_HINTING_MINIMAL &&
- exc->backward_compatibility &&
- exc->iupx_called &&
- exc->iupy_called ) )
-#endif
- exc->zp2.cur[point].y = ADD_LONG( exc->zp2.cur[point].y, dy );
-
- if ( touch )
- exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_Y;
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* SHP[a]: SHift Point by the last point */
- /* Opcode range: 0x32-0x33 */
- /* Stack: uint32... --> */
- /* */
- static void
- Ins_SHP( TT_ExecContext exc )
- {
- TT_GlyphZoneRec zp;
- FT_UShort refp;
-
- FT_F26Dot6 dx, dy;
- FT_UShort point;
-
-
- if ( exc->top < exc->GS.loop )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- goto Fail;
- }
-
- if ( Compute_Point_Displacement( exc, &dx, &dy, &zp, &refp ) )
- return;
-
- while ( exc->GS.loop > 0 )
- {
- exc->args--;
- point = (FT_UShort)exc->stack[exc->args];
-
- if ( BOUNDS( point, exc->zp2.n_points ) )
- {
- if ( exc->pedantic_hinting )
- {
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
- }
- else
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- /* doesn't follow Cleartype spec but produces better result */
- if ( SUBPIXEL_HINTING_INFINALITY && exc->ignore_x_mode )
- Move_Zp2_Point( exc, point, 0, dy, TRUE );
- else
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
- Move_Zp2_Point( exc, point, dx, dy, TRUE );
-
- exc->GS.loop--;
- }
-
- Fail:
- exc->GS.loop = 1;
- exc->new_top = exc->args;
- }
-
-
- /*************************************************************************/
- /* */
- /* SHC[a]: SHift Contour */
- /* Opcode range: 0x34-35 */
- /* Stack: uint32 --> */
- /* */
- /* UNDOCUMENTED: According to Greg Hitchcock, there is one (virtual) */
- /* contour in the twilight zone, namely contour number */
- /* zero which includes all points of it. */
- /* */
- static void
- Ins_SHC( TT_ExecContext exc,
- FT_Long* args )
- {
- TT_GlyphZoneRec zp;
- FT_UShort refp;
- FT_F26Dot6 dx, dy;
-
- FT_Short contour, bounds;
- FT_UShort start, limit, i;
-
-
- contour = (FT_Short)args[0];
- bounds = ( exc->GS.gep2 == 0 ) ? 1 : exc->zp2.n_contours;
-
- if ( BOUNDS( contour, bounds ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- if ( Compute_Point_Displacement( exc, &dx, &dy, &zp, &refp ) )
- return;
-
- if ( contour == 0 )
- start = 0;
- else
- start = (FT_UShort)( exc->zp2.contours[contour - 1] + 1 -
- exc->zp2.first_point );
-
- /* we use the number of points if in the twilight zone */
- if ( exc->GS.gep2 == 0 )
- limit = exc->zp2.n_points;
- else
- limit = (FT_UShort)( exc->zp2.contours[contour] -
- exc->zp2.first_point + 1 );
-
- for ( i = start; i < limit; i++ )
- {
- if ( zp.cur != exc->zp2.cur || refp != i )
- Move_Zp2_Point( exc, i, dx, dy, TRUE );
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* SHZ[a]: SHift Zone */
- /* Opcode range: 0x36-37 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SHZ( TT_ExecContext exc,
- FT_Long* args )
- {
- TT_GlyphZoneRec zp;
- FT_UShort refp;
- FT_F26Dot6 dx,
- dy;
-
- FT_UShort limit, i;
-
-
- if ( BOUNDS( args[0], 2 ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- if ( Compute_Point_Displacement( exc, &dx, &dy, &zp, &refp ) )
- return;
-
- /* XXX: UNDOCUMENTED! SHZ doesn't move the phantom points. */
- /* Twilight zone has no real contours, so use `n_points'. */
- /* Normal zone's `n_points' includes phantoms, so must */
- /* use end of last contour. */
- if ( exc->GS.gep2 == 0 )
- limit = (FT_UShort)exc->zp2.n_points;
- else if ( exc->GS.gep2 == 1 && exc->zp2.n_contours > 0 )
- limit = (FT_UShort)( exc->zp2.contours[exc->zp2.n_contours - 1] + 1 );
- else
- limit = 0;
-
- /* XXX: UNDOCUMENTED! SHZ doesn't touch the points */
- for ( i = 0; i < limit; i++ )
- {
- if ( zp.cur != exc->zp2.cur || refp != i )
- Move_Zp2_Point( exc, i, dx, dy, FALSE );
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* SHPIX[]: SHift points by a PIXel amount */
- /* Opcode range: 0x38 */
- /* Stack: f26.6 uint32... --> */
- /* */
- static void
- Ins_SHPIX( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_F26Dot6 dx, dy;
- FT_UShort point;
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- FT_Int B1, B2;
-#endif
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- FT_Bool in_twilight = FT_BOOL( exc->GS.gep0 == 0 ||
- exc->GS.gep1 == 0 ||
- exc->GS.gep2 == 0 );
-#endif
-
-
-
- if ( exc->top < exc->GS.loop + 1 )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- goto Fail;
- }
-
- dx = TT_MulFix14( args[0], exc->GS.freeVector.x );
- dy = TT_MulFix14( args[0], exc->GS.freeVector.y );
-
- while ( exc->GS.loop > 0 )
- {
- exc->args--;
-
- point = (FT_UShort)exc->stack[exc->args];
-
- if ( BOUNDS( point, exc->zp2.n_points ) )
- {
- if ( exc->pedantic_hinting )
- {
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
- }
- else
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY )
- {
- /* If not using ignore_x_mode rendering, allow ZP2 move. */
- /* If inline deltas aren't allowed, skip ZP2 move. */
- /* If using ignore_x_mode rendering, allow ZP2 point move if: */
- /* - freedom vector is y and sph_compatibility_mode is off */
- /* - the glyph is composite and the move is in the Y direction */
- /* - the glyph is specifically set to allow SHPIX moves */
- /* - the move is on a previously Y-touched point */
-
- if ( exc->ignore_x_mode )
- {
- /* save point for later comparison */
- if ( exc->GS.freeVector.y != 0 )
- B1 = exc->zp2.cur[point].y;
- else
- B1 = exc->zp2.cur[point].x;
-
- if ( !exc->face->sph_compatibility_mode &&
- exc->GS.freeVector.y != 0 )
- {
- Move_Zp2_Point( exc, point, dx, dy, TRUE );
-
- /* save new point */
- if ( exc->GS.freeVector.y != 0 )
- {
- B2 = exc->zp2.cur[point].y;
-
- /* reverse any disallowed moves */
- if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
- ( B1 & 63 ) != 0 &&
- ( B2 & 63 ) != 0 &&
- B1 != B2 )
- Move_Zp2_Point( exc, point, -dx, -dy, TRUE );
- }
- }
- else if ( exc->face->sph_compatibility_mode )
- {
- if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES )
- {
- dx = FT_PIX_ROUND( B1 + dx ) - B1;
- dy = FT_PIX_ROUND( B1 + dy ) - B1;
- }
-
- /* skip post-iup deltas */
- if ( exc->iup_called &&
- ( ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_1 ) ||
- ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ) )
- goto Skip;
-
- if ( !( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) &&
- ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) ||
- ( exc->zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) ||
- ( exc->sph_tweak_flags & SPH_TWEAK_DO_SHPIX ) ) )
- Move_Zp2_Point( exc, point, 0, dy, TRUE );
-
- /* save new point */
- if ( exc->GS.freeVector.y != 0 )
- {
- B2 = exc->zp2.cur[point].y;
-
- /* reverse any disallowed moves */
- if ( ( B1 & 63 ) == 0 &&
- ( B2 & 63 ) != 0 &&
- B1 != B2 )
- Move_Zp2_Point( exc, point, 0, -dy, TRUE );
- }
- }
- else if ( exc->sph_in_func_flags & SPH_FDEF_TYPEMAN_DIAGENDCTRL )
- Move_Zp2_Point( exc, point, dx, dy, TRUE );
- }
- else
- Move_Zp2_Point( exc, point, dx, dy, TRUE );
- }
- else
-#endif
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- if ( SUBPIXEL_HINTING_MINIMAL &&
- exc->backward_compatibility )
- {
- /* Special case: allow SHPIX to move points in the twilight zone. */
- /* Otherwise, treat SHPIX the same as DELTAP. Unbreaks various */
- /* fonts such as older versions of Rokkitt and DTL Argo T Light */
- /* that would glitch severely after calling ALIGNRP after a */
- /* blocked SHPIX. */
- if ( in_twilight ||
- ( !( exc->iupx_called && exc->iupy_called ) &&
- ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) ||
- ( exc->zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) ) ) )
- Move_Zp2_Point( exc, point, 0, dy, TRUE );
- }
- else
-#endif
- Move_Zp2_Point( exc, point, dx, dy, TRUE );
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- Skip:
-#endif
- exc->GS.loop--;
- }
-
- Fail:
- exc->GS.loop = 1;
- exc->new_top = exc->args;
- }
-
-
- /*************************************************************************/
- /* */
- /* MSIRP[a]: Move Stack Indirect Relative Position */
- /* Opcode range: 0x3A-0x3B */
- /* Stack: f26.6 uint32 --> */
- /* */
- static void
- Ins_MSIRP( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_UShort point = 0;
- FT_F26Dot6 distance;
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- FT_F26Dot6 control_value_cutin = 0;
-
-
- if ( SUBPIXEL_HINTING_INFINALITY )
- {
- control_value_cutin = exc->GS.control_value_cutin;
-
- if ( exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 &&
- !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
- control_value_cutin = 0;
- }
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- point = (FT_UShort)args[0];
-
- if ( BOUNDS( point, exc->zp1.n_points ) ||
- BOUNDS( exc->GS.rp0, exc->zp0.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- /* UNDOCUMENTED! The MS rasterizer does that with */
- /* twilight points (confirmed by Greg Hitchcock) */
- if ( exc->GS.gep1 == 0 )
- {
- exc->zp1.org[point] = exc->zp0.org[exc->GS.rp0];
- exc->func_move_orig( exc, &exc->zp1, point, args[1] );
- exc->zp1.cur[point] = exc->zp1.org[point];
- }
-
- distance = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 );
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- /* subpixel hinting - make MSIRP respect CVT cut-in; */
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 &&
- FT_ABS( SUB_LONG( distance, args[1] ) ) >= control_value_cutin )
- distance = args[1];
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- exc->func_move( exc,
- &exc->zp1,
- point,
- SUB_LONG( args[1], distance ) );
-
- exc->GS.rp1 = exc->GS.rp0;
- exc->GS.rp2 = point;
-
- if ( ( exc->opcode & 1 ) != 0 )
- exc->GS.rp0 = point;
- }
-
-
- /*************************************************************************/
- /* */
- /* MDAP[a]: Move Direct Absolute Point */
- /* Opcode range: 0x2E-0x2F */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_MDAP( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_UShort point;
- FT_F26Dot6 cur_dist;
- FT_F26Dot6 distance;
-
-
- point = (FT_UShort)args[0];
-
- if ( BOUNDS( point, exc->zp0.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- if ( ( exc->opcode & 1 ) != 0 )
- {
- cur_dist = FAST_PROJECT( &exc->zp0.cur[point] );
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 )
- distance = Round_None(
- exc,
- cur_dist,
- exc->tt_metrics.compensations[0] ) - cur_dist;
- else
-#endif
- distance = exc->func_round(
- exc,
- cur_dist,
- exc->tt_metrics.compensations[0] ) - cur_dist;
- }
- else
- distance = 0;
-
- exc->func_move( exc, &exc->zp0, point, distance );
-
- exc->GS.rp0 = point;
- exc->GS.rp1 = point;
- }
-
-
- /*************************************************************************/
- /* */
- /* MIAP[a]: Move Indirect Absolute Point */
- /* Opcode range: 0x3E-0x3F */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_MIAP( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_ULong cvtEntry;
- FT_UShort point;
- FT_F26Dot6 distance;
- FT_F26Dot6 org_dist;
- FT_F26Dot6 control_value_cutin;
-
-
- control_value_cutin = exc->GS.control_value_cutin;
- cvtEntry = (FT_ULong)args[1];
- point = (FT_UShort)args[0];
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 &&
- exc->GS.freeVector.y == 0 &&
- !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
- control_value_cutin = 0;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- if ( BOUNDS( point, exc->zp0.n_points ) ||
- BOUNDSL( cvtEntry, exc->cvtSize ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- goto Fail;
- }
-
- /* UNDOCUMENTED! */
- /* */
- /* The behaviour of an MIAP instruction is quite different when used */
- /* in the twilight zone. */
- /* */
- /* First, no control value cut-in test is performed as it would fail */
- /* anyway. Second, the original point, i.e. (org_x,org_y) of */
- /* zp0.point, is set to the absolute, unrounded distance found in the */
- /* CVT. */
- /* */
- /* This is used in the CVT programs of the Microsoft fonts Arial, */
- /* Times, etc., in order to re-adjust some key font heights. It */
- /* allows the use of the IP instruction in the twilight zone, which */
- /* otherwise would be invalid according to the specification. */
- /* */
- /* We implement it with a special sequence for the twilight zone. */
- /* This is a bad hack, but it seems to work. */
- /* */
- /* Confirmed by Greg Hitchcock. */
-
- distance = exc->func_read_cvt( exc, cvtEntry );
-
- if ( exc->GS.gep0 == 0 ) /* If in twilight zone */
- {
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- /* Only adjust if not in sph_compatibility_mode or ignore_x_mode. */
- /* Determined via experimentation and may be incorrect... */
- if ( !( SUBPIXEL_HINTING_INFINALITY &&
- ( exc->ignore_x_mode &&
- exc->face->sph_compatibility_mode ) ) )
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
- exc->zp0.org[point].x = TT_MulFix14( distance,
- exc->GS.freeVector.x );
- exc->zp0.org[point].y = TT_MulFix14( distance,
- exc->GS.freeVector.y ),
- exc->zp0.cur[point] = exc->zp0.org[point];
- }
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- ( exc->sph_tweak_flags & SPH_TWEAK_MIAP_HACK ) &&
- distance > 0 &&
- exc->GS.freeVector.y != 0 )
- distance = 0;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- org_dist = FAST_PROJECT( &exc->zp0.cur[point] );
-
- if ( ( exc->opcode & 1 ) != 0 ) /* rounding and control cut-in flag */
- {
- if ( FT_ABS( distance - org_dist ) > control_value_cutin )
- distance = org_dist;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 )
- distance = Round_None( exc,
- distance,
- exc->tt_metrics.compensations[0] );
- else
-#endif
- distance = exc->func_round( exc,
- distance,
- exc->tt_metrics.compensations[0] );
- }
-
- exc->func_move( exc, &exc->zp0, point, distance - org_dist );
-
- Fail:
- exc->GS.rp0 = point;
- exc->GS.rp1 = point;
- }
-
-
- /*************************************************************************/
- /* */
- /* MDRP[abcde]: Move Direct Relative Point */
- /* Opcode range: 0xC0-0xDF */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_MDRP( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_UShort point = 0;
- FT_F26Dot6 org_dist, distance, minimum_distance;
-
-
- minimum_distance = exc->GS.minimum_distance;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 &&
- !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
- minimum_distance = 0;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- point = (FT_UShort)args[0];
-
- if ( BOUNDS( point, exc->zp1.n_points ) ||
- BOUNDS( exc->GS.rp0, exc->zp0.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- goto Fail;
- }
-
- /* XXX: Is there some undocumented feature while in the */
- /* twilight zone? */
-
- /* XXX: UNDOCUMENTED: twilight zone special case */
-
- if ( exc->GS.gep0 == 0 || exc->GS.gep1 == 0 )
- {
- FT_Vector* vec1 = &exc->zp1.org[point];
- FT_Vector* vec2 = &exc->zp0.org[exc->GS.rp0];
-
-
- org_dist = DUALPROJ( vec1, vec2 );
- }
- else
- {
- FT_Vector* vec1 = &exc->zp1.orus[point];
- FT_Vector* vec2 = &exc->zp0.orus[exc->GS.rp0];
-
-
- if ( exc->metrics.x_scale == exc->metrics.y_scale )
- {
- /* this should be faster */
- org_dist = DUALPROJ( vec1, vec2 );
- org_dist = FT_MulFix( org_dist, exc->metrics.x_scale );
- }
- else
- {
- FT_Vector vec;
-
-
- vec.x = FT_MulFix( SUB_LONG( vec1->x, vec2->x ),
- exc->metrics.x_scale );
- vec.y = FT_MulFix( SUB_LONG( vec1->y, vec2->y ),
- exc->metrics.y_scale );
-
- org_dist = FAST_DUALPROJ( &vec );
- }
- }
-
- /* single width cut-in test */
-
- if ( FT_ABS( org_dist - exc->GS.single_width_value ) <
- exc->GS.single_width_cutin )
- {
- if ( org_dist >= 0 )
- org_dist = exc->GS.single_width_value;
- else
- org_dist = -exc->GS.single_width_value;
- }
-
- /* round flag */
-
- if ( ( exc->opcode & 4 ) != 0 )
- {
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 )
- distance = Round_None(
- exc,
- org_dist,
- exc->tt_metrics.compensations[exc->opcode & 3] );
- else
-#endif
- distance = exc->func_round(
- exc,
- org_dist,
- exc->tt_metrics.compensations[exc->opcode & 3] );
- }
- else
- distance = Round_None(
- exc,
- org_dist,
- exc->tt_metrics.compensations[exc->opcode & 3] );
-
- /* minimum distance flag */
-
- if ( ( exc->opcode & 8 ) != 0 )
- {
- if ( org_dist >= 0 )
- {
- if ( distance < minimum_distance )
- distance = minimum_distance;
- }
- else
- {
- if ( distance > -minimum_distance )
- distance = -minimum_distance;
- }
- }
-
- /* now move the point */
-
- org_dist = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 );
-
- exc->func_move( exc, &exc->zp1, point, SUB_LONG( distance, org_dist ) );
-
- Fail:
- exc->GS.rp1 = exc->GS.rp0;
- exc->GS.rp2 = point;
-
- if ( ( exc->opcode & 16 ) != 0 )
- exc->GS.rp0 = point;
- }
-
-
- /*************************************************************************/
- /* */
- /* MIRP[abcde]: Move Indirect Relative Point */
- /* Opcode range: 0xE0-0xFF */
- /* Stack: int32? uint32 --> */
- /* */
- static void
- Ins_MIRP( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_UShort point;
- FT_ULong cvtEntry;
-
- FT_F26Dot6 cvt_dist,
- distance,
- cur_dist,
- org_dist,
- control_value_cutin,
- minimum_distance;
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- FT_Int B1 = 0; /* pacify compiler */
- FT_Int B2 = 0;
- FT_Bool reverse_move = FALSE;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
-
- minimum_distance = exc->GS.minimum_distance;
- control_value_cutin = exc->GS.control_value_cutin;
- point = (FT_UShort)args[0];
- cvtEntry = (FT_ULong)( args[1] + 1 );
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 &&
- !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
- control_value_cutin = minimum_distance = 0;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- /* XXX: UNDOCUMENTED! cvt[-1] = 0 always */
-
- if ( BOUNDS( point, exc->zp1.n_points ) ||
- BOUNDSL( cvtEntry, exc->cvtSize + 1 ) ||
- BOUNDS( exc->GS.rp0, exc->zp0.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- goto Fail;
- }
-
- if ( !cvtEntry )
- cvt_dist = 0;
- else
- cvt_dist = exc->func_read_cvt( exc, cvtEntry - 1 );
-
- /* single width test */
-
- if ( FT_ABS( cvt_dist - exc->GS.single_width_value ) <
- exc->GS.single_width_cutin )
- {
- if ( cvt_dist >= 0 )
- cvt_dist = exc->GS.single_width_value;
- else
- cvt_dist = -exc->GS.single_width_value;
- }
-
- /* UNDOCUMENTED! The MS rasterizer does that with */
- /* twilight points (confirmed by Greg Hitchcock) */
- if ( exc->GS.gep1 == 0 )
- {
- exc->zp1.org[point].x = exc->zp0.org[exc->GS.rp0].x +
- TT_MulFix14( cvt_dist,
- exc->GS.freeVector.x );
- exc->zp1.org[point].y = exc->zp0.org[exc->GS.rp0].y +
- TT_MulFix14( cvt_dist,
- exc->GS.freeVector.y );
- exc->zp1.cur[point] = exc->zp1.org[point];
- }
-
- org_dist = DUALPROJ( &exc->zp1.org[point], &exc->zp0.org[exc->GS.rp0] );
- cur_dist = PROJECT ( &exc->zp1.cur[point], &exc->zp0.cur[exc->GS.rp0] );
-
- /* auto-flip test */
-
- if ( exc->GS.auto_flip )
- {
- if ( ( org_dist ^ cvt_dist ) < 0 )
- cvt_dist = -cvt_dist;
- }
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.y != 0 &&
- ( exc->sph_tweak_flags & SPH_TWEAK_TIMES_NEW_ROMAN_HACK ) )
- {
- if ( cur_dist < -64 )
- cvt_dist -= 16;
- else if ( cur_dist > 64 && cur_dist < 84 )
- cvt_dist += 32;
- }
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- /* control value cut-in and round */
-
- if ( ( exc->opcode & 4 ) != 0 )
- {
- /* XXX: UNDOCUMENTED! Only perform cut-in test when both points */
- /* refer to the same zone. */
-
- if ( exc->GS.gep0 == exc->GS.gep1 )
- {
- /* XXX: According to Greg Hitchcock, the following wording is */
- /* the right one: */
- /* */
- /* When the absolute difference between the value in */
- /* the table [CVT] and the measurement directly from */
- /* the outline is _greater_ than the cut_in value, the */
- /* outline measurement is used. */
- /* */
- /* This is from `instgly.doc'. The description in */
- /* `ttinst2.doc', version 1.66, is thus incorrect since */
- /* it implies `>=' instead of `>'. */
-
- if ( FT_ABS( cvt_dist - org_dist ) > control_value_cutin )
- cvt_dist = org_dist;
- }
-
- distance = exc->func_round(
- exc,
- cvt_dist,
- exc->tt_metrics.compensations[exc->opcode & 3] );
- }
- else
- {
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- /* do cvt cut-in always in MIRP for sph */
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->GS.gep0 == exc->GS.gep1 )
- {
- if ( FT_ABS( cvt_dist - org_dist ) > control_value_cutin )
- cvt_dist = org_dist;
- }
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- distance = Round_None(
- exc,
- cvt_dist,
- exc->tt_metrics.compensations[exc->opcode & 3] );
- }
-
- /* minimum distance test */
-
- if ( ( exc->opcode & 8 ) != 0 )
- {
- if ( org_dist >= 0 )
- {
- if ( distance < minimum_distance )
- distance = minimum_distance;
- }
- else
- {
- if ( distance > -minimum_distance )
- distance = -minimum_distance;
- }
- }
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY )
- {
- B1 = exc->zp1.cur[point].y;
-
- /* Round moves if necessary */
- if ( exc->ignore_x_mode &&
- exc->GS.freeVector.y != 0 &&
- ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) )
- distance = FT_PIX_ROUND( B1 + distance - cur_dist ) - B1 + cur_dist;
-
- if ( exc->ignore_x_mode &&
- exc->GS.freeVector.y != 0 &&
- ( exc->opcode & 16 ) == 0 &&
- ( exc->opcode & 8 ) == 0 &&
- ( exc->sph_tweak_flags & SPH_TWEAK_COURIER_NEW_2_HACK ) )
- distance += 64;
- }
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- exc->func_move( exc,
- &exc->zp1,
- point,
- SUB_LONG( distance, cur_dist ) );
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY )
- {
- B2 = exc->zp1.cur[point].y;
-
- /* Reverse move if necessary */
- if ( exc->ignore_x_mode )
- {
- if ( exc->face->sph_compatibility_mode &&
- exc->GS.freeVector.y != 0 &&
- ( B1 & 63 ) == 0 &&
- ( B2 & 63 ) != 0 )
- reverse_move = TRUE;
-
- if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
- exc->GS.freeVector.y != 0 &&
- ( B2 & 63 ) != 0 &&
- ( B1 & 63 ) != 0 )
- reverse_move = TRUE;
- }
-
- if ( reverse_move )
- exc->func_move( exc, &exc->zp1, point, -( distance - cur_dist ) );
- }
-
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- Fail:
- exc->GS.rp1 = exc->GS.rp0;
-
- if ( ( exc->opcode & 16 ) != 0 )
- exc->GS.rp0 = point;
-
- exc->GS.rp2 = point;
- }
-
-
- /*************************************************************************/
- /* */
- /* ALIGNRP[]: ALIGN Relative Point */
- /* Opcode range: 0x3C */
- /* Stack: uint32 uint32... --> */
- /* */
- static void
- Ins_ALIGNRP( TT_ExecContext exc )
- {
- FT_UShort point;
- FT_F26Dot6 distance;
-
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->iup_called &&
- ( exc->sph_tweak_flags & SPH_TWEAK_NO_ALIGNRP_AFTER_IUP ) )
- {
- exc->error = FT_THROW( Invalid_Reference );
- goto Fail;
- }
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- if ( exc->top < exc->GS.loop ||
- BOUNDS( exc->GS.rp0, exc->zp0.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- goto Fail;
- }
-
- while ( exc->GS.loop > 0 )
- {
- exc->args--;
-
- point = (FT_UShort)exc->stack[exc->args];
-
- if ( BOUNDS( point, exc->zp1.n_points ) )
- {
- if ( exc->pedantic_hinting )
- {
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
- }
- else
- {
- distance = PROJECT( exc->zp1.cur + point,
- exc->zp0.cur + exc->GS.rp0 );
-
- exc->func_move( exc, &exc->zp1, point, -distance );
- }
-
- exc->GS.loop--;
- }
-
- Fail:
- exc->GS.loop = 1;
- exc->new_top = exc->args;
- }
-
-
- /*************************************************************************/
- /* */
- /* ISECT[]: moves point to InterSECTion */
- /* Opcode range: 0x0F */
- /* Stack: 5 * uint32 --> */
- /* */
- static void
- Ins_ISECT( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_UShort point,
- a0, a1,
- b0, b1;
-
- FT_F26Dot6 discriminant, dotproduct;
-
- FT_F26Dot6 dx, dy,
- dax, day,
- dbx, dby;
-
- FT_F26Dot6 val;
-
- FT_Vector R;
-
-
- point = (FT_UShort)args[0];
-
- a0 = (FT_UShort)args[1];
- a1 = (FT_UShort)args[2];
- b0 = (FT_UShort)args[3];
- b1 = (FT_UShort)args[4];
-
- if ( BOUNDS( b0, exc->zp0.n_points ) ||
- BOUNDS( b1, exc->zp0.n_points ) ||
- BOUNDS( a0, exc->zp1.n_points ) ||
- BOUNDS( a1, exc->zp1.n_points ) ||
- BOUNDS( point, exc->zp2.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- /* Cramer's rule */
-
- dbx = SUB_LONG( exc->zp0.cur[b1].x, exc->zp0.cur[b0].x );
- dby = SUB_LONG( exc->zp0.cur[b1].y, exc->zp0.cur[b0].y );
-
- dax = SUB_LONG( exc->zp1.cur[a1].x, exc->zp1.cur[a0].x );
- day = SUB_LONG( exc->zp1.cur[a1].y, exc->zp1.cur[a0].y );
-
- dx = SUB_LONG( exc->zp0.cur[b0].x, exc->zp1.cur[a0].x );
- dy = SUB_LONG( exc->zp0.cur[b0].y, exc->zp1.cur[a0].y );
-
- discriminant = ADD_LONG( FT_MulDiv( dax, -dby, 0x40 ),
- FT_MulDiv( day, dbx, 0x40 ) );
- dotproduct = ADD_LONG( FT_MulDiv( dax, dbx, 0x40 ),
- FT_MulDiv( day, dby, 0x40 ) );
-
- /* The discriminant above is actually a cross product of vectors */
- /* da and db. Together with the dot product, they can be used as */
- /* surrogates for sine and cosine of the angle between the vectors. */
- /* Indeed, */
- /* dotproduct = |da||db|cos(angle) */
- /* discriminant = |da||db|sin(angle) . */
- /* We use these equations to reject grazing intersections by */
- /* thresholding abs(tan(angle)) at 1/19, corresponding to 3 degrees. */
- if ( MUL_LONG( 19, FT_ABS( discriminant ) ) > FT_ABS( dotproduct ) )
- {
- val = ADD_LONG( FT_MulDiv( dx, -dby, 0x40 ),
- FT_MulDiv( dy, dbx, 0x40 ) );
-
- R.x = FT_MulDiv( val, dax, discriminant );
- R.y = FT_MulDiv( val, day, discriminant );
-
- /* XXX: Block in backward_compatibility and/or post-IUP? */
- exc->zp2.cur[point].x = ADD_LONG( exc->zp1.cur[a0].x, R.x );
- exc->zp2.cur[point].y = ADD_LONG( exc->zp1.cur[a0].y, R.y );
- }
- else
- {
- /* else, take the middle of the middles of A and B */
-
- /* XXX: Block in backward_compatibility and/or post-IUP? */
- exc->zp2.cur[point].x =
- ADD_LONG( ADD_LONG( exc->zp1.cur[a0].x, exc->zp1.cur[a1].x ),
- ADD_LONG( exc->zp0.cur[b0].x, exc->zp0.cur[b1].x ) ) / 4;
- exc->zp2.cur[point].y =
- ADD_LONG( ADD_LONG( exc->zp1.cur[a0].y, exc->zp1.cur[a1].y ),
- ADD_LONG( exc->zp0.cur[b0].y, exc->zp0.cur[b1].y ) ) / 4;
- }
-
- exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_BOTH;
- }
-
-
- /*************************************************************************/
- /* */
- /* ALIGNPTS[]: ALIGN PoinTS */
- /* Opcode range: 0x27 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_ALIGNPTS( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_UShort p1, p2;
- FT_F26Dot6 distance;
-
-
- p1 = (FT_UShort)args[0];
- p2 = (FT_UShort)args[1];
-
- if ( BOUNDS( p1, exc->zp1.n_points ) ||
- BOUNDS( p2, exc->zp0.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- distance = PROJECT( exc->zp0.cur + p2, exc->zp1.cur + p1 ) / 2;
-
- exc->func_move( exc, &exc->zp1, p1, distance );
- exc->func_move( exc, &exc->zp0, p2, -distance );
- }
-
-
- /*************************************************************************/
- /* */
- /* IP[]: Interpolate Point */
- /* Opcode range: 0x39 */
- /* Stack: uint32... --> */
- /* */
-
- /* SOMETIMES, DUMBER CODE IS BETTER CODE */
-
- static void
- Ins_IP( TT_ExecContext exc )
- {
- FT_F26Dot6 old_range, cur_range;
- FT_Vector* orus_base;
- FT_Vector* cur_base;
- FT_Int twilight;
-
-
- if ( exc->top < exc->GS.loop )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- goto Fail;
- }
-
- /*
- * We need to deal in a special way with the twilight zone.
- * Otherwise, by definition, the value of exc->twilight.orus[n] is (0,0),
- * for every n.
- */
- twilight = ( exc->GS.gep0 == 0 ||
- exc->GS.gep1 == 0 ||
- exc->GS.gep2 == 0 );
-
- if ( BOUNDS( exc->GS.rp1, exc->zp0.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- goto Fail;
- }
-
- if ( twilight )
- orus_base = &exc->zp0.org[exc->GS.rp1];
- else
- orus_base = &exc->zp0.orus[exc->GS.rp1];
-
- cur_base = &exc->zp0.cur[exc->GS.rp1];
-
- /* XXX: There are some glyphs in some braindead but popular */
- /* fonts out there (e.g. [aeu]grave in monotype.ttf) */
- /* calling IP[] with bad values of rp[12]. */
- /* Do something sane when this odd thing happens. */
- if ( BOUNDS( exc->GS.rp1, exc->zp0.n_points ) ||
- BOUNDS( exc->GS.rp2, exc->zp1.n_points ) )
- {
- old_range = 0;
- cur_range = 0;
- }
- else
- {
- if ( twilight )
- old_range = DUALPROJ( &exc->zp1.org[exc->GS.rp2], orus_base );
- else if ( exc->metrics.x_scale == exc->metrics.y_scale )
- old_range = DUALPROJ( &exc->zp1.orus[exc->GS.rp2], orus_base );
- else
- {
- FT_Vector vec;
-
-
- vec.x = FT_MulFix( SUB_LONG( exc->zp1.orus[exc->GS.rp2].x,
- orus_base->x ),
- exc->metrics.x_scale );
- vec.y = FT_MulFix( SUB_LONG( exc->zp1.orus[exc->GS.rp2].y,
- orus_base->y ),
- exc->metrics.y_scale );
-
- old_range = FAST_DUALPROJ( &vec );
- }
-
- cur_range = PROJECT( &exc->zp1.cur[exc->GS.rp2], cur_base );
- }
-
- for ( ; exc->GS.loop > 0; exc->GS.loop-- )
- {
- FT_UInt point = (FT_UInt)exc->stack[--exc->args];
- FT_F26Dot6 org_dist, cur_dist, new_dist;
-
-
- /* check point bounds */
- if ( BOUNDS( point, exc->zp2.n_points ) )
- {
- if ( exc->pedantic_hinting )
- {
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
- continue;
- }
-
- if ( twilight )
- org_dist = DUALPROJ( &exc->zp2.org[point], orus_base );
- else if ( exc->metrics.x_scale == exc->metrics.y_scale )
- org_dist = DUALPROJ( &exc->zp2.orus[point], orus_base );
- else
- {
- FT_Vector vec;
-
-
- vec.x = FT_MulFix( SUB_LONG( exc->zp2.orus[point].x,
- orus_base->x ),
- exc->metrics.x_scale );
- vec.y = FT_MulFix( SUB_LONG( exc->zp2.orus[point].y,
- orus_base->y ),
- exc->metrics.y_scale );
-
- org_dist = FAST_DUALPROJ( &vec );
- }
-
- cur_dist = PROJECT( &exc->zp2.cur[point], cur_base );
-
- if ( org_dist )
- {
- if ( old_range )
- new_dist = FT_MulDiv( org_dist, cur_range, old_range );
- else
- {
- /* This is the same as what MS does for the invalid case: */
- /* */
- /* delta = (Original_Pt - Original_RP1) - */
- /* (Current_Pt - Current_RP1) ; */
- /* */
- /* In FreeType speak: */
- /* */
- /* delta = org_dist - cur_dist . */
- /* */
- /* We move `point' by `new_dist - cur_dist' after leaving */
- /* this block, thus we have */
- /* */
- /* new_dist - cur_dist = delta , */
- /* new_dist - cur_dist = org_dist - cur_dist , */
- /* new_dist = org_dist . */
-
- new_dist = org_dist;
- }
- }
- else
- new_dist = 0;
-
- exc->func_move( exc,
- &exc->zp2,
- (FT_UShort)point,
- SUB_LONG( new_dist, cur_dist ) );
- }
-
- Fail:
- exc->GS.loop = 1;
- exc->new_top = exc->args;
- }
-
-
- /*************************************************************************/
- /* */
- /* UTP[a]: UnTouch Point */
- /* Opcode range: 0x29 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_UTP( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_UShort point;
- FT_Byte mask;
-
-
- point = (FT_UShort)args[0];
-
- if ( BOUNDS( point, exc->zp0.n_points ) )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
-
- mask = 0xFF;
-
- if ( exc->GS.freeVector.x != 0 )
- mask &= ~FT_CURVE_TAG_TOUCH_X;
-
- if ( exc->GS.freeVector.y != 0 )
- mask &= ~FT_CURVE_TAG_TOUCH_Y;
-
- exc->zp0.tags[point] &= mask;
- }
-
-
- /* Local variables for Ins_IUP: */
- typedef struct IUP_WorkerRec_
- {
- FT_Vector* orgs; /* original and current coordinate */
- FT_Vector* curs; /* arrays */
- FT_Vector* orus;
- FT_UInt max_points;
-
- } IUP_WorkerRec, *IUP_Worker;
-
-
- static void
- _iup_worker_shift( IUP_Worker worker,
- FT_UInt p1,
- FT_UInt p2,
- FT_UInt p )
- {
- FT_UInt i;
- FT_F26Dot6 dx;
-
-
- dx = SUB_LONG( worker->curs[p].x, worker->orgs[p].x );
- if ( dx != 0 )
- {
- for ( i = p1; i < p; i++ )
- worker->curs[i].x = ADD_LONG( worker->curs[i].x, dx );
-
- for ( i = p + 1; i <= p2; i++ )
- worker->curs[i].x = ADD_LONG( worker->curs[i].x, dx );
- }
- }
-
-
- static void
- _iup_worker_interpolate( IUP_Worker worker,
- FT_UInt p1,
- FT_UInt p2,
- FT_UInt ref1,
- FT_UInt ref2 )
- {
- FT_UInt i;
- FT_F26Dot6 orus1, orus2, org1, org2, cur1, cur2, delta1, delta2;
-
-
- if ( p1 > p2 )
- return;
-
- if ( BOUNDS( ref1, worker->max_points ) ||
- BOUNDS( ref2, worker->max_points ) )
- return;
-
- orus1 = worker->orus[ref1].x;
- orus2 = worker->orus[ref2].x;
-
- if ( orus1 > orus2 )
- {
- FT_F26Dot6 tmp_o;
- FT_UInt tmp_r;
-
-
- tmp_o = orus1;
- orus1 = orus2;
- orus2 = tmp_o;
-
- tmp_r = ref1;
- ref1 = ref2;
- ref2 = tmp_r;
- }
-
- org1 = worker->orgs[ref1].x;
- org2 = worker->orgs[ref2].x;
- cur1 = worker->curs[ref1].x;
- cur2 = worker->curs[ref2].x;
- delta1 = SUB_LONG( cur1, org1 );
- delta2 = SUB_LONG( cur2, org2 );
-
- if ( cur1 == cur2 || orus1 == orus2 )
- {
-
- /* trivial snap or shift of untouched points */
- for ( i = p1; i <= p2; i++ )
- {
- FT_F26Dot6 x = worker->orgs[i].x;
-
-
- if ( x <= org1 )
- x = ADD_LONG( x, delta1 );
-
- else if ( x >= org2 )
- x = ADD_LONG( x, delta2 );
-
- else
- x = cur1;
-
- worker->curs[i].x = x;
- }
- }
- else
- {
- FT_Fixed scale = 0;
- FT_Bool scale_valid = 0;
-
-
- /* interpolation */
- for ( i = p1; i <= p2; i++ )
- {
- FT_F26Dot6 x = worker->orgs[i].x;
-
-
- if ( x <= org1 )
- x = ADD_LONG( x, delta1 );
-
- else if ( x >= org2 )
- x = ADD_LONG( x, delta2 );
-
- else
- {
- if ( !scale_valid )
- {
- scale_valid = 1;
- scale = FT_DivFix( SUB_LONG( cur2, cur1 ),
- SUB_LONG( orus2, orus1 ) );
- }
-
- x = ADD_LONG( cur1,
- FT_MulFix( SUB_LONG( worker->orus[i].x, orus1 ),
- scale ) );
- }
- worker->curs[i].x = x;
- }
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* IUP[a]: Interpolate Untouched Points */
- /* Opcode range: 0x30-0x31 */
- /* Stack: --> */
- /* */
- static void
- Ins_IUP( TT_ExecContext exc )
- {
- IUP_WorkerRec V;
- FT_Byte mask;
-
- FT_UInt first_point; /* first point of contour */
- FT_UInt end_point; /* end point (last+1) of contour */
-
- FT_UInt first_touched; /* first touched point in contour */
- FT_UInt cur_touched; /* current touched point in contour */
-
- FT_UInt point; /* current point */
- FT_Short contour; /* current contour */
-
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- /* See `ttinterp.h' for details on backward compatibility mode. */
- /* Allow IUP until it has been called on both axes. Immediately */
- /* return on subsequent ones. */
- if ( SUBPIXEL_HINTING_MINIMAL &&
- exc->backward_compatibility )
- {
- if ( exc->iupx_called && exc->iupy_called )
- return;
-
- if ( exc->opcode & 1 )
- exc->iupx_called = TRUE;
- else
- exc->iupy_called = TRUE;
- }
-#endif
-
- /* ignore empty outlines */
- if ( exc->pts.n_contours == 0 )
- return;
-
- if ( exc->opcode & 1 )
- {
- mask = FT_CURVE_TAG_TOUCH_X;
- V.orgs = exc->pts.org;
- V.curs = exc->pts.cur;
- V.orus = exc->pts.orus;
- }
- else
- {
- mask = FT_CURVE_TAG_TOUCH_Y;
- V.orgs = (FT_Vector*)( (FT_Pos*)exc->pts.org + 1 );
- V.curs = (FT_Vector*)( (FT_Pos*)exc->pts.cur + 1 );
- V.orus = (FT_Vector*)( (FT_Pos*)exc->pts.orus + 1 );
- }
- V.max_points = exc->pts.n_points;
-
- contour = 0;
- point = 0;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode )
- {
- exc->iup_called = TRUE;
- if ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_IUP )
- return;
- }
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- do
- {
- end_point = exc->pts.contours[contour] - exc->pts.first_point;
- first_point = point;
-
- if ( BOUNDS( end_point, exc->pts.n_points ) )
- end_point = exc->pts.n_points - 1;
-
- while ( point <= end_point && ( exc->pts.tags[point] & mask ) == 0 )
- point++;
-
- if ( point <= end_point )
- {
- first_touched = point;
- cur_touched = point;
-
- point++;
-
- while ( point <= end_point )
- {
- if ( ( exc->pts.tags[point] & mask ) != 0 )
- {
- _iup_worker_interpolate( &V,
- cur_touched + 1,
- point - 1,
- cur_touched,
- point );
- cur_touched = point;
- }
-
- point++;
- }
-
- if ( cur_touched == first_touched )
- _iup_worker_shift( &V, first_point, end_point, cur_touched );
- else
- {
- _iup_worker_interpolate( &V,
- (FT_UShort)( cur_touched + 1 ),
- end_point,
- cur_touched,
- first_touched );
-
- if ( first_touched > 0 )
- _iup_worker_interpolate( &V,
- first_point,
- first_touched - 1,
- cur_touched,
- first_touched );
- }
- }
- contour++;
- } while ( contour < exc->pts.n_contours );
- }
-
-
- /*************************************************************************/
- /* */
- /* DELTAPn[]: DELTA exceptions P1, P2, P3 */
- /* Opcode range: 0x5D,0x71,0x72 */
- /* Stack: uint32 (2 * uint32)... --> */
- /* */
- static void
- Ins_DELTAP( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_ULong nump, k;
- FT_UShort A;
- FT_ULong C, P;
- FT_Long B;
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- FT_UShort B1, B2;
-
-
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->iup_called &&
- ( exc->sph_tweak_flags & SPH_TWEAK_NO_DELTAP_AFTER_IUP ) )
- goto Fail;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- P = (FT_ULong)exc->func_cur_ppem( exc );
- nump = (FT_ULong)args[0]; /* some points theoretically may occur more
- than once, thus UShort isn't enough */
-
- for ( k = 1; k <= nump; k++ )
- {
- if ( exc->args < 2 )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Too_Few_Arguments );
- exc->args = 0;
- goto Fail;
- }
-
- exc->args -= 2;
-
- A = (FT_UShort)exc->stack[exc->args + 1];
- B = exc->stack[exc->args];
-
- /* XXX: Because some popular fonts contain some invalid DeltaP */
- /* instructions, we simply ignore them when the stacked */
- /* point reference is off limit, rather than returning an */
- /* error. As a delta instruction doesn't change a glyph */
- /* in great ways, this shouldn't be a problem. */
-
- if ( !BOUNDS( A, exc->zp0.n_points ) )
- {
- C = ( (FT_ULong)B & 0xF0 ) >> 4;
-
- switch ( exc->opcode )
- {
- case 0x5D:
- break;
-
- case 0x71:
- C += 16;
- break;
-
- case 0x72:
- C += 32;
- break;
- }
-
- C += exc->GS.delta_base;
-
- if ( P == C )
- {
- B = ( (FT_ULong)B & 0xF ) - 8;
- if ( B >= 0 )
- B++;
- B *= 1L << ( 6 - exc->GS.delta_shift );
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-
- if ( SUBPIXEL_HINTING_INFINALITY )
- {
- /*
- * Allow delta move if
- *
- * - not using ignore_x_mode rendering,
- * - glyph is specifically set to allow it, or
- * - glyph is composite and freedom vector is not in subpixel
- * direction.
- */
- if ( !exc->ignore_x_mode ||
- ( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_DO_DELTAP ) ||
- ( exc->is_composite && exc->GS.freeVector.y != 0 ) )
- exc->func_move( exc, &exc->zp0, A, B );
-
- /* Otherwise, apply subpixel hinting and compatibility mode */
- /* rules, always skipping deltas in subpixel direction. */
- else if ( exc->ignore_x_mode && exc->GS.freeVector.y != 0 )
- {
- /* save the y value of the point now; compare after move */
- B1 = (FT_UShort)exc->zp0.cur[A].y;
-
- /* Standard subpixel hinting: Allow y move for y-touched */
- /* points. This messes up DejaVu ... */
- if ( !exc->face->sph_compatibility_mode &&
- ( exc->zp0.tags[A] & FT_CURVE_TAG_TOUCH_Y ) )
- exc->func_move( exc, &exc->zp0, A, B );
-
- /* compatibility mode */
- else if ( exc->face->sph_compatibility_mode &&
- !( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) )
- {
- if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES )
- B = FT_PIX_ROUND( B1 + B ) - B1;
-
- /* Allow delta move if using sph_compatibility_mode, */
- /* IUP has not been called, and point is touched on Y. */
- if ( !exc->iup_called &&
- ( exc->zp0.tags[A] & FT_CURVE_TAG_TOUCH_Y ) )
- exc->func_move( exc, &exc->zp0, A, B );
- }
-
- B2 = (FT_UShort)exc->zp0.cur[A].y;
-
- /* Reverse this move if it results in a disallowed move */
- if ( exc->GS.freeVector.y != 0 &&
- ( ( exc->face->sph_compatibility_mode &&
- ( B1 & 63 ) == 0 &&
- ( B2 & 63 ) != 0 ) ||
- ( ( exc->sph_tweak_flags &
- SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES_DELTAP ) &&
- ( B1 & 63 ) != 0 &&
- ( B2 & 63 ) != 0 ) ) )
- exc->func_move( exc, &exc->zp0, A, -B );
- }
- }
- else
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- {
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- /* See `ttinterp.h' for details on backward compatibility */
- /* mode. */
- if ( SUBPIXEL_HINTING_MINIMAL &&
- exc->backward_compatibility )
- {
- if ( !( exc->iupx_called && exc->iupy_called ) &&
- ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) ||
- ( exc->zp0.tags[A] & FT_CURVE_TAG_TOUCH_Y ) ) )
- exc->func_move( exc, &exc->zp0, A, B );
- }
- else
-#endif
- exc->func_move( exc, &exc->zp0, A, B );
- }
- }
- }
- else
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Invalid_Reference );
- }
-
- Fail:
- exc->new_top = exc->args;
- }
-
-
- /*************************************************************************/
- /* */
- /* DELTACn[]: DELTA exceptions C1, C2, C3 */
- /* Opcode range: 0x73,0x74,0x75 */
- /* Stack: uint32 (2 * uint32)... --> */
- /* */
- static void
- Ins_DELTAC( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_ULong nump, k;
- FT_ULong A, C, P;
- FT_Long B;
-
-
- P = (FT_ULong)exc->func_cur_ppem( exc );
- nump = (FT_ULong)args[0];
-
- for ( k = 1; k <= nump; k++ )
- {
- if ( exc->args < 2 )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Too_Few_Arguments );
- exc->args = 0;
- goto Fail;
- }
-
- exc->args -= 2;
-
- A = (FT_ULong)exc->stack[exc->args + 1];
- B = exc->stack[exc->args];
-
- if ( BOUNDSL( A, exc->cvtSize ) )
- {
- if ( exc->pedantic_hinting )
- {
- exc->error = FT_THROW( Invalid_Reference );
- return;
- }
- }
- else
- {
- C = ( (FT_ULong)B & 0xF0 ) >> 4;
-
- switch ( exc->opcode )
- {
- case 0x73:
- break;
-
- case 0x74:
- C += 16;
- break;
-
- case 0x75:
- C += 32;
- break;
- }
-
- C += exc->GS.delta_base;
-
- if ( P == C )
- {
- B = ( (FT_ULong)B & 0xF ) - 8;
- if ( B >= 0 )
- B++;
- B *= 1L << ( 6 - exc->GS.delta_shift );
-
- exc->func_move_cvt( exc, A, B );
- }
- }
- }
-
- Fail:
- exc->new_top = exc->args;
- }
-
-
- /*************************************************************************/
- /* */
- /* MISC. INSTRUCTIONS */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* GETINFO[]: GET INFOrmation */
- /* Opcode range: 0x88 */
- /* Stack: uint32 --> uint32 */
- /* */
- /* XXX: UNDOCUMENTED: Selector bits higher than 9 are currently (May */
- /* 2015) not documented in the OpenType specification. */
- /* */
- /* Selector bit 11 is incorrectly described as bit 8, while the */
- /* real meaning of bit 8 (vertical LCD subpixels) stays */
- /* undocumented. The same mistake can be found in Greg Hitchcock's */
- /* whitepaper. */
- /* */
- static void
- Ins_GETINFO( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_Long K;
- TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( exc->face );
-
-
- K = 0;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- /********************************/
- /* RASTERIZER VERSION */
- /* Selector Bit: 0 */
- /* Return Bit(s): 0-7 */
- /* */
- if ( SUBPIXEL_HINTING_INFINALITY &&
- ( args[0] & 1 ) != 0 &&
- exc->subpixel_hinting )
- {
- if ( exc->ignore_x_mode )
- {
- /* if in ClearType backward compatibility mode, */
- /* we sometimes change the TrueType version dynamically */
- K = exc->rasterizer_version;
- FT_TRACE6(( "Setting rasterizer version %d\n",
- exc->rasterizer_version ));
- }
- else
- K = TT_INTERPRETER_VERSION_38;
- }
- else
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
- if ( ( args[0] & 1 ) != 0 )
- K = driver->interpreter_version;
-
- /********************************/
- /* GLYPH ROTATED */
- /* Selector Bit: 1 */
- /* Return Bit(s): 8 */
- /* */
- if ( ( args[0] & 2 ) != 0 && exc->tt_metrics.rotated )
- K |= 1 << 8;
-
- /********************************/
- /* GLYPH STRETCHED */
- /* Selector Bit: 2 */
- /* Return Bit(s): 9 */
- /* */
- if ( ( args[0] & 4 ) != 0 && exc->tt_metrics.stretched )
- K |= 1 << 9;
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- /********************************/
- /* VARIATION GLYPH */
- /* Selector Bit: 3 */
- /* Return Bit(s): 10 */
- /* */
- /* XXX: UNDOCUMENTED! */
- if ( (args[0] & 8 ) != 0 && exc->face->blend )
- K |= 1 << 10;
-#endif
-
- /********************************/
- /* BI-LEVEL HINTING AND */
- /* GRAYSCALE RENDERING */
- /* Selector Bit: 5 */
- /* Return Bit(s): 12 */
- /* */
- if ( ( args[0] & 32 ) != 0 && exc->grayscale )
- K |= 1 << 12;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- if ( SUBPIXEL_HINTING_MINIMAL )
- {
- /********************************/
- /* HINTING FOR SUBPIXEL */
- /* Selector Bit: 6 */
- /* Return Bit(s): 13 */
- /* */
- /* v40 does subpixel hinting by default. */
- if ( ( args[0] & 64 ) != 0 )
- K |= 1 << 13;
-
- /********************************/
- /* VERTICAL LCD SUBPIXELS? */
- /* Selector Bit: 8 */
- /* Return Bit(s): 15 */
- /* */
- if ( ( args[0] & 256 ) != 0 && exc->vertical_lcd_lean )
- K |= 1 << 15;
-
- /********************************/
- /* SUBPIXEL POSITIONED? */
- /* Selector Bit: 10 */
- /* Return Bit(s): 17 */
- /* */
- /* XXX: FreeType supports it, dependent on what client does? */
- if ( ( args[0] & 1024 ) != 0 )
- K |= 1 << 17;
-
- /********************************/
- /* SYMMETRICAL SMOOTHING */
- /* Selector Bit: 11 */
- /* Return Bit(s): 18 */
- /* */
- /* The only smoothing method FreeType supports unless someone sets */
- /* FT_LOAD_TARGET_MONO. */
- if ( ( args[0] & 2048 ) != 0 && exc->subpixel_hinting_lean )
- K |= 1 << 18;
-
- /********************************/
- /* CLEARTYPE HINTING AND */
- /* GRAYSCALE RENDERING */
- /* Selector Bit: 12 */
- /* Return Bit(s): 19 */
- /* */
- /* Grayscale rendering is what FreeType does anyway unless someone */
- /* sets FT_LOAD_TARGET_MONO or FT_LOAD_TARGET_LCD(_V) */
- if ( ( args[0] & 4096 ) != 0 && exc->grayscale_cleartype )
- K |= 1 << 19;
- }
-#endif
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->rasterizer_version >= TT_INTERPRETER_VERSION_35 )
- {
-
- if ( exc->rasterizer_version >= 37 )
- {
- /********************************/
- /* HINTING FOR SUBPIXEL */
- /* Selector Bit: 6 */
- /* Return Bit(s): 13 */
- /* */
- if ( ( args[0] & 64 ) != 0 && exc->subpixel_hinting )
- K |= 1 << 13;
-
- /********************************/
- /* COMPATIBLE WIDTHS ENABLED */
- /* Selector Bit: 7 */
- /* Return Bit(s): 14 */
- /* */
- /* Functionality still needs to be added */
- if ( ( args[0] & 128 ) != 0 && exc->compatible_widths )
- K |= 1 << 14;
-
- /********************************/
- /* VERTICAL LCD SUBPIXELS? */
- /* Selector Bit: 8 */
- /* Return Bit(s): 15 */
- /* */
- /* Functionality still needs to be added */
- if ( ( args[0] & 256 ) != 0 && exc->vertical_lcd )
- K |= 1 << 15;
-
- /********************************/
- /* HINTING FOR BGR? */
- /* Selector Bit: 9 */
- /* Return Bit(s): 16 */
- /* */
- /* Functionality still needs to be added */
- if ( ( args[0] & 512 ) != 0 && exc->bgr )
- K |= 1 << 16;
-
- if ( exc->rasterizer_version >= 38 )
- {
- /********************************/
- /* SUBPIXEL POSITIONED? */
- /* Selector Bit: 10 */
- /* Return Bit(s): 17 */
- /* */
- /* Functionality still needs to be added */
- if ( ( args[0] & 1024 ) != 0 && exc->subpixel_positioned )
- K |= 1 << 17;
-
- /********************************/
- /* SYMMETRICAL SMOOTHING */
- /* Selector Bit: 11 */
- /* Return Bit(s): 18 */
- /* */
- /* Functionality still needs to be added */
- if ( ( args[0] & 2048 ) != 0 && exc->symmetrical_smoothing )
- K |= 1 << 18;
-
- /********************************/
- /* GRAY CLEARTYPE */
- /* Selector Bit: 12 */
- /* Return Bit(s): 19 */
- /* */
- /* Functionality still needs to be added */
- if ( ( args[0] & 4096 ) != 0 && exc->gray_cleartype )
- K |= 1 << 19;
- }
- }
- }
-
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- args[0] = K;
- }
-
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-
- /*************************************************************************/
- /* */
- /* GETVARIATION[]: get normalized variation (blend) coordinates */
- /* Opcode range: 0x91 */
- /* Stack: --> f2.14... */
- /* */
- /* XXX: UNDOCUMENTED! There is no official documentation from Apple for */
- /* this bytecode instruction. Active only if a font has GX */
- /* variation axes. */
- /* */
- static void
- Ins_GETVARIATION( TT_ExecContext exc,
- FT_Long* args )
- {
- FT_UInt num_axes = exc->face->blend->num_axis;
- FT_Fixed* coords = exc->face->blend->normalizedcoords;
-
- FT_UInt i;
-
-
- if ( BOUNDS( num_axes, exc->stackSize + 1 - exc->top ) )
- {
- exc->error = FT_THROW( Stack_Overflow );
- return;
- }
-
- for ( i = 0; i < num_axes; i++ )
- args[i] = coords[i] >> 2; /* convert 16.16 to 2.14 format */
- }
-
-
- /*************************************************************************/
- /* */
- /* GETDATA[]: no idea what this is good for */
- /* Opcode range: 0x92 */
- /* Stack: --> 17 */
- /* */
- /* XXX: UNDOCUMENTED! There is no documentation from Apple for this */
- /* very weird bytecode instruction. */
- /* */
- static void
- Ins_GETDATA( FT_Long* args )
- {
- args[0] = 17;
- }
-
-#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
-
-
- static void
- Ins_UNKNOWN( TT_ExecContext exc )
- {
- TT_DefRecord* def = exc->IDefs;
- TT_DefRecord* limit = def + exc->numIDefs;
-
-
- for ( ; def < limit; def++ )
- {
- if ( (FT_Byte)def->opc == exc->opcode && def->active )
- {
- TT_CallRec* call;
-
-
- if ( exc->callTop >= exc->callSize )
- {
- exc->error = FT_THROW( Stack_Overflow );
- return;
- }
-
- call = exc->callStack + exc->callTop++;
-
- call->Caller_Range = exc->curRange;
- call->Caller_IP = exc->IP + 1;
- call->Cur_Count = 1;
- call->Def = def;
-
- Ins_Goto_CodeRange( exc, def->range, def->start );
-
- exc->step_ins = FALSE;
- return;
- }
- }
-
- exc->error = FT_THROW( Invalid_Opcode );
- }
-
-
- /*************************************************************************/
- /* */
- /* RUN */
- /* */
- /* This function executes a run of opcodes. It will exit in the */
- /* following cases: */
- /* */
- /* - Errors (in which case it returns FALSE). */
- /* */
- /* - Reaching the end of the main code range (returns TRUE). */
- /* Reaching the end of a code range within a function call is an */
- /* error. */
- /* */
- /* - After executing one single opcode, if the flag `Instruction_Trap' */
- /* is set to TRUE (returns TRUE). */
- /* */
- /* On exit with TRUE, test IP < CodeSize to know whether it comes from */
- /* an instruction trap or a normal termination. */
- /* */
- /* */
- /* Note: The documented DEBUG opcode pops a value from the stack. This */
- /* behaviour is unsupported; here a DEBUG opcode is always an */
- /* error. */
- /* */
- /* */
- /* THIS IS THE INTERPRETER'S MAIN LOOP. */
- /* */
- /*************************************************************************/
-
-
- /* documentation is in ttinterp.h */
-
- FT_EXPORT_DEF( FT_Error )
- TT_RunIns( TT_ExecContext exc )
- {
- FT_ULong ins_counter = 0; /* executed instructions counter */
- FT_ULong num_twilight_points;
- FT_UShort i;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- FT_Byte opcode_pattern[1][2] = {
- /* #8 TypeMan Talk Align */
- {
- 0x06, /* SPVTL */
- 0x7D, /* RDTG */
- },
- };
- FT_UShort opcode_patterns = 1;
- FT_UShort opcode_pointer[1] = { 0 };
- FT_UShort opcode_size[1] = { 1 };
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- exc->iup_called = FALSE;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- /*
- * Toggle backward compatibility according to what font wants, except
- * when
- *
- * 1) we have a `tricky' font that heavily relies on the interpreter to
- * render glyphs correctly, for example DFKai-SB, or
- * 2) FT_RENDER_MODE_MONO (i.e, monochome rendering) is requested.
- *
- * In those cases, backward compatibility needs to be turned off to get
- * correct rendering. The rendering is then completely up to the
- * font's programming.
- *
- */
- if ( SUBPIXEL_HINTING_MINIMAL &&
- exc->subpixel_hinting_lean &&
- !FT_IS_TRICKY( &exc->face->root ) )
- exc->backward_compatibility = !( exc->GS.instruct_control & 4 );
- else
- exc->backward_compatibility = FALSE;
-
- exc->iupx_called = FALSE;
- exc->iupy_called = FALSE;
-#endif
-
- /* We restrict the number of twilight points to a reasonable, */
- /* heuristic value to avoid slow execution of malformed bytecode. */
- num_twilight_points = FT_MAX( 30,
- 2 * ( exc->pts.n_points + exc->cvtSize ) );
- if ( exc->twilight.n_points > num_twilight_points )
- {
- if ( num_twilight_points > 0xFFFFU )
- num_twilight_points = 0xFFFFU;
-
- FT_TRACE5(( "TT_RunIns: Resetting number of twilight points\n"
- " from %d to the more reasonable value %d\n",
- exc->twilight.n_points,
- num_twilight_points ));
- exc->twilight.n_points = (FT_UShort)num_twilight_points;
- }
-
- /* Set up loop detectors. We restrict the number of LOOPCALL loops */
- /* and the number of JMPR, JROT, and JROF calls with a negative */
- /* argument to values that depend on various parameters like the */
- /* size of the CVT table or the number of points in the current */
- /* glyph (if applicable). */
- /* */
- /* The idea is that in real-world bytecode you either iterate over */
- /* all CVT entries (in the `prep' table), or over all points (or */
- /* contours, in the `glyf' table) of a glyph, and such iterations */
- /* don't happen very often. */
- exc->loopcall_counter = 0;
- exc->neg_jump_counter = 0;
-
- /* The maximum values are heuristic. */
- if ( exc->pts.n_points )
- exc->loopcall_counter_max = FT_MAX( 50,
- 10 * exc->pts.n_points ) +
- FT_MAX( 50,
- exc->cvtSize / 10 );
- else
- exc->loopcall_counter_max = 300 + 8 * exc->cvtSize;
-
- /* as a protection against an unreasonable number of CVT entries */
- /* we assume at most 100 control values per glyph for the counter */
- if ( exc->loopcall_counter_max >
- 100 * (FT_ULong)exc->face->root.num_glyphs )
- exc->loopcall_counter_max = 100 * (FT_ULong)exc->face->root.num_glyphs;
-
- FT_TRACE5(( "TT_RunIns: Limiting total number of loops in LOOPCALL"
- " to %d\n", exc->loopcall_counter_max ));
-
- exc->neg_jump_counter_max = exc->loopcall_counter_max;
- FT_TRACE5(( "TT_RunIns: Limiting total number of backward jumps"
- " to %d\n", exc->neg_jump_counter_max ));
-
- /* set PPEM and CVT functions */
- exc->tt_metrics.ratio = 0;
- if ( exc->metrics.x_ppem != exc->metrics.y_ppem )
- {
- /* non-square pixels, use the stretched routines */
- exc->func_cur_ppem = Current_Ppem_Stretched;
- exc->func_read_cvt = Read_CVT_Stretched;
- exc->func_write_cvt = Write_CVT_Stretched;
- exc->func_move_cvt = Move_CVT_Stretched;
- }
- else
- {
- /* square pixels, use normal routines */
- exc->func_cur_ppem = Current_Ppem;
- exc->func_read_cvt = Read_CVT;
- exc->func_write_cvt = Write_CVT;
- exc->func_move_cvt = Move_CVT;
- }
-
- Compute_Funcs( exc );
- Compute_Round( exc, (FT_Byte)exc->GS.round_state );
-
- do
- {
- exc->opcode = exc->code[exc->IP];
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- {
- FT_Long cnt = FT_MIN( 8, exc->top );
- FT_Long n;
-
-
- /* if tracing level is 7, show current code position */
- /* and the first few stack elements also */
- FT_TRACE6(( " " ));
- FT_TRACE7(( "%06d ", exc->IP ));
- FT_TRACE6(( opcode_name[exc->opcode] + 2 ));
- FT_TRACE7(( "%*s", *opcode_name[exc->opcode] == 'A'
- ? 2
- : 12 - ( *opcode_name[exc->opcode] - '0' ),
- "#" ));
- for ( n = 1; n <= cnt; n++ )
- FT_TRACE7(( " %d", exc->stack[exc->top - n] ));
- FT_TRACE6(( "\n" ));
- }
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
- if ( ( exc->length = opcode_length[exc->opcode] ) < 0 )
- {
- if ( exc->IP + 1 >= exc->codeSize )
- goto LErrorCodeOverflow_;
-
- exc->length = 2 - exc->length * exc->code[exc->IP + 1];
- }
-
- if ( exc->IP + exc->length > exc->codeSize )
- goto LErrorCodeOverflow_;
-
- /* First, let's check for empty stack and overflow */
- exc->args = exc->top - ( Pop_Push_Count[exc->opcode] >> 4 );
-
- /* `args' is the top of the stack once arguments have been popped. */
- /* One can also interpret it as the index of the last argument. */
- if ( exc->args < 0 )
- {
- if ( exc->pedantic_hinting )
- {
- exc->error = FT_THROW( Too_Few_Arguments );
- goto LErrorLabel_;
- }
-
- /* push zeroes onto the stack */
- for ( i = 0; i < Pop_Push_Count[exc->opcode] >> 4; i++ )
- exc->stack[i] = 0;
- exc->args = 0;
- }
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- if ( exc->opcode == 0x91 )
- {
- /* this is very special: GETVARIATION returns */
- /* a variable number of arguments */
-
- /* it is the job of the application to `activate' GX handling, */
- /* this is, calling any of the GX API functions on the current */
- /* font to select a variation instance */
- if ( exc->face->blend )
- exc->new_top = exc->args + exc->face->blend->num_axis;
- }
- else
-#endif
- exc->new_top = exc->args + ( Pop_Push_Count[exc->opcode] & 15 );
-
- /* `new_top' is the new top of the stack, after the instruction's */
- /* execution. `top' will be set to `new_top' after the `switch' */
- /* statement. */
- if ( exc->new_top > exc->stackSize )
- {
- exc->error = FT_THROW( Stack_Overflow );
- goto LErrorLabel_;
- }
-
- exc->step_ins = TRUE;
- exc->error = FT_Err_Ok;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-
- if ( SUBPIXEL_HINTING_INFINALITY )
- {
- for ( i = 0; i < opcode_patterns; i++ )
- {
- if ( opcode_pointer[i] < opcode_size[i] &&
- exc->opcode == opcode_pattern[i][opcode_pointer[i]] )
- {
- opcode_pointer[i] += 1;
-
- if ( opcode_pointer[i] == opcode_size[i] )
- {
- FT_TRACE6(( "sph: opcode ptrn: %d, %s %s\n",
- i,
- exc->face->root.family_name,
- exc->face->root.style_name ));
-
- switch ( i )
- {
- case 0:
- break;
- }
- opcode_pointer[i] = 0;
- }
- }
- else
- opcode_pointer[i] = 0;
- }
- }
-
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- {
- FT_Long* args = exc->stack + exc->args;
- FT_Byte opcode = exc->opcode;
-
-
- switch ( opcode )
- {
- case 0x00: /* SVTCA y */
- case 0x01: /* SVTCA x */
- case 0x02: /* SPvTCA y */
- case 0x03: /* SPvTCA x */
- case 0x04: /* SFvTCA y */
- case 0x05: /* SFvTCA x */
- Ins_SxyTCA( exc );
- break;
-
- case 0x06: /* SPvTL // */
- case 0x07: /* SPvTL + */
- Ins_SPVTL( exc, args );
- break;
-
- case 0x08: /* SFvTL // */
- case 0x09: /* SFvTL + */
- Ins_SFVTL( exc, args );
- break;
-
- case 0x0A: /* SPvFS */
- Ins_SPVFS( exc, args );
- break;
-
- case 0x0B: /* SFvFS */
- Ins_SFVFS( exc, args );
- break;
-
- case 0x0C: /* GPv */
- Ins_GPV( exc, args );
- break;
-
- case 0x0D: /* GFv */
- Ins_GFV( exc, args );
- break;
-
- case 0x0E: /* SFvTPv */
- Ins_SFVTPV( exc );
- break;
-
- case 0x0F: /* ISECT */
- Ins_ISECT( exc, args );
- break;
-
- case 0x10: /* SRP0 */
- Ins_SRP0( exc, args );
- break;
-
- case 0x11: /* SRP1 */
- Ins_SRP1( exc, args );
- break;
-
- case 0x12: /* SRP2 */
- Ins_SRP2( exc, args );
- break;
-
- case 0x13: /* SZP0 */
- Ins_SZP0( exc, args );
- break;
-
- case 0x14: /* SZP1 */
- Ins_SZP1( exc, args );
- break;
-
- case 0x15: /* SZP2 */
- Ins_SZP2( exc, args );
- break;
-
- case 0x16: /* SZPS */
- Ins_SZPS( exc, args );
- break;
-
- case 0x17: /* SLOOP */
- Ins_SLOOP( exc, args );
- break;
-
- case 0x18: /* RTG */
- Ins_RTG( exc );
- break;
-
- case 0x19: /* RTHG */
- Ins_RTHG( exc );
- break;
-
- case 0x1A: /* SMD */
- Ins_SMD( exc, args );
- break;
-
- case 0x1B: /* ELSE */
- Ins_ELSE( exc );
- break;
-
- case 0x1C: /* JMPR */
- Ins_JMPR( exc, args );
- break;
-
- case 0x1D: /* SCVTCI */
- Ins_SCVTCI( exc, args );
- break;
-
- case 0x1E: /* SSWCI */
- Ins_SSWCI( exc, args );
- break;
-
- case 0x1F: /* SSW */
- Ins_SSW( exc, args );
- break;
-
- case 0x20: /* DUP */
- Ins_DUP( args );
- break;
-
- case 0x21: /* POP */
- Ins_POP();
- break;
-
- case 0x22: /* CLEAR */
- Ins_CLEAR( exc );
- break;
-
- case 0x23: /* SWAP */
- Ins_SWAP( args );
- break;
-
- case 0x24: /* DEPTH */
- Ins_DEPTH( exc, args );
- break;
-
- case 0x25: /* CINDEX */
- Ins_CINDEX( exc, args );
- break;
-
- case 0x26: /* MINDEX */
- Ins_MINDEX( exc, args );
- break;
-
- case 0x27: /* ALIGNPTS */
- Ins_ALIGNPTS( exc, args );
- break;
-
- case 0x28: /* RAW */
- Ins_UNKNOWN( exc );
- break;
-
- case 0x29: /* UTP */
- Ins_UTP( exc, args );
- break;
-
- case 0x2A: /* LOOPCALL */
- Ins_LOOPCALL( exc, args );
- break;
-
- case 0x2B: /* CALL */
- Ins_CALL( exc, args );
- break;
-
- case 0x2C: /* FDEF */
- Ins_FDEF( exc, args );
- break;
-
- case 0x2D: /* ENDF */
- Ins_ENDF( exc );
- break;
-
- case 0x2E: /* MDAP */
- case 0x2F: /* MDAP */
- Ins_MDAP( exc, args );
- break;
-
- case 0x30: /* IUP */
- case 0x31: /* IUP */
- Ins_IUP( exc );
- break;
-
- case 0x32: /* SHP */
- case 0x33: /* SHP */
- Ins_SHP( exc );
- break;
-
- case 0x34: /* SHC */
- case 0x35: /* SHC */
- Ins_SHC( exc, args );
- break;
-
- case 0x36: /* SHZ */
- case 0x37: /* SHZ */
- Ins_SHZ( exc, args );
- break;
-
- case 0x38: /* SHPIX */
- Ins_SHPIX( exc, args );
- break;
-
- case 0x39: /* IP */
- Ins_IP( exc );
- break;
-
- case 0x3A: /* MSIRP */
- case 0x3B: /* MSIRP */
- Ins_MSIRP( exc, args );
- break;
-
- case 0x3C: /* AlignRP */
- Ins_ALIGNRP( exc );
- break;
-
- case 0x3D: /* RTDG */
- Ins_RTDG( exc );
- break;
-
- case 0x3E: /* MIAP */
- case 0x3F: /* MIAP */
- Ins_MIAP( exc, args );
- break;
-
- case 0x40: /* NPUSHB */
- Ins_NPUSHB( exc, args );
- break;
-
- case 0x41: /* NPUSHW */
- Ins_NPUSHW( exc, args );
- break;
-
- case 0x42: /* WS */
- Ins_WS( exc, args );
- break;
-
- case 0x43: /* RS */
- Ins_RS( exc, args );
- break;
-
- case 0x44: /* WCVTP */
- Ins_WCVTP( exc, args );
- break;
-
- case 0x45: /* RCVT */
- Ins_RCVT( exc, args );
- break;
-
- case 0x46: /* GC */
- case 0x47: /* GC */
- Ins_GC( exc, args );
- break;
-
- case 0x48: /* SCFS */
- Ins_SCFS( exc, args );
- break;
-
- case 0x49: /* MD */
- case 0x4A: /* MD */
- Ins_MD( exc, args );
- break;
-
- case 0x4B: /* MPPEM */
- Ins_MPPEM( exc, args );
- break;
-
- case 0x4C: /* MPS */
- Ins_MPS( exc, args );
- break;
-
- case 0x4D: /* FLIPON */
- Ins_FLIPON( exc );
- break;
-
- case 0x4E: /* FLIPOFF */
- Ins_FLIPOFF( exc );
- break;
-
- case 0x4F: /* DEBUG */
- Ins_DEBUG( exc );
- break;
-
- case 0x50: /* LT */
- Ins_LT( args );
- break;
-
- case 0x51: /* LTEQ */
- Ins_LTEQ( args );
- break;
-
- case 0x52: /* GT */
- Ins_GT( args );
- break;
-
- case 0x53: /* GTEQ */
- Ins_GTEQ( args );
- break;
-
- case 0x54: /* EQ */
- Ins_EQ( args );
- break;
-
- case 0x55: /* NEQ */
- Ins_NEQ( args );
- break;
-
- case 0x56: /* ODD */
- Ins_ODD( exc, args );
- break;
-
- case 0x57: /* EVEN */
- Ins_EVEN( exc, args );
- break;
-
- case 0x58: /* IF */
- Ins_IF( exc, args );
- break;
-
- case 0x59: /* EIF */
- Ins_EIF();
- break;
-
- case 0x5A: /* AND */
- Ins_AND( args );
- break;
-
- case 0x5B: /* OR */
- Ins_OR( args );
- break;
-
- case 0x5C: /* NOT */
- Ins_NOT( args );
- break;
-
- case 0x5D: /* DELTAP1 */
- Ins_DELTAP( exc, args );
- break;
-
- case 0x5E: /* SDB */
- Ins_SDB( exc, args );
- break;
-
- case 0x5F: /* SDS */
- Ins_SDS( exc, args );
- break;
-
- case 0x60: /* ADD */
- Ins_ADD( args );
- break;
-
- case 0x61: /* SUB */
- Ins_SUB( args );
- break;
-
- case 0x62: /* DIV */
- Ins_DIV( exc, args );
- break;
-
- case 0x63: /* MUL */
- Ins_MUL( args );
- break;
-
- case 0x64: /* ABS */
- Ins_ABS( args );
- break;
-
- case 0x65: /* NEG */
- Ins_NEG( args );
- break;
-
- case 0x66: /* FLOOR */
- Ins_FLOOR( args );
- break;
-
- case 0x67: /* CEILING */
- Ins_CEILING( args );
- break;
-
- case 0x68: /* ROUND */
- case 0x69: /* ROUND */
- case 0x6A: /* ROUND */
- case 0x6B: /* ROUND */
- Ins_ROUND( exc, args );
- break;
-
- case 0x6C: /* NROUND */
- case 0x6D: /* NROUND */
- case 0x6E: /* NRRUND */
- case 0x6F: /* NROUND */
- Ins_NROUND( exc, args );
- break;
-
- case 0x70: /* WCVTF */
- Ins_WCVTF( exc, args );
- break;
-
- case 0x71: /* DELTAP2 */
- case 0x72: /* DELTAP3 */
- Ins_DELTAP( exc, args );
- break;
-
- case 0x73: /* DELTAC0 */
- case 0x74: /* DELTAC1 */
- case 0x75: /* DELTAC2 */
- Ins_DELTAC( exc, args );
- break;
-
- case 0x76: /* SROUND */
- Ins_SROUND( exc, args );
- break;
-
- case 0x77: /* S45Round */
- Ins_S45ROUND( exc, args );
- break;
-
- case 0x78: /* JROT */
- Ins_JROT( exc, args );
- break;
-
- case 0x79: /* JROF */
- Ins_JROF( exc, args );
- break;
-
- case 0x7A: /* ROFF */
- Ins_ROFF( exc );
- break;
-
- case 0x7B: /* ???? */
- Ins_UNKNOWN( exc );
- break;
-
- case 0x7C: /* RUTG */
- Ins_RUTG( exc );
- break;
-
- case 0x7D: /* RDTG */
- Ins_RDTG( exc );
- break;
-
- case 0x7E: /* SANGW */
- Ins_SANGW();
- break;
-
- case 0x7F: /* AA */
- Ins_AA();
- break;
-
- case 0x80: /* FLIPPT */
- Ins_FLIPPT( exc );
- break;
-
- case 0x81: /* FLIPRGON */
- Ins_FLIPRGON( exc, args );
- break;
-
- case 0x82: /* FLIPRGOFF */
- Ins_FLIPRGOFF( exc, args );
- break;
-
- case 0x83: /* UNKNOWN */
- case 0x84: /* UNKNOWN */
- Ins_UNKNOWN( exc );
- break;
-
- case 0x85: /* SCANCTRL */
- Ins_SCANCTRL( exc, args );
- break;
-
- case 0x86: /* SDPvTL */
- case 0x87: /* SDPvTL */
- Ins_SDPVTL( exc, args );
- break;
-
- case 0x88: /* GETINFO */
- Ins_GETINFO( exc, args );
- break;
-
- case 0x89: /* IDEF */
- Ins_IDEF( exc, args );
- break;
-
- case 0x8A: /* ROLL */
- Ins_ROLL( args );
- break;
-
- case 0x8B: /* MAX */
- Ins_MAX( args );
- break;
-
- case 0x8C: /* MIN */
- Ins_MIN( args );
- break;
-
- case 0x8D: /* SCANTYPE */
- Ins_SCANTYPE( exc, args );
- break;
-
- case 0x8E: /* INSTCTRL */
- Ins_INSTCTRL( exc, args );
- break;
-
- case 0x8F: /* ADJUST */
- case 0x90: /* ADJUST */
- Ins_UNKNOWN( exc );
- break;
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- case 0x91:
- /* it is the job of the application to `activate' GX handling, */
- /* this is, calling any of the GX API functions on the current */
- /* font to select a variation instance */
- if ( exc->face->blend )
- Ins_GETVARIATION( exc, args );
- else
- Ins_UNKNOWN( exc );
- break;
-
- case 0x92:
- /* there is at least one MS font (LaoUI.ttf version 5.01) that */
- /* uses IDEFs for 0x91 and 0x92; for this reason we activate */
- /* GETDATA for GX fonts only, similar to GETVARIATION */
- if ( exc->face->blend )
- Ins_GETDATA( args );
- else
- Ins_UNKNOWN( exc );
- break;
-#endif
-
- default:
- if ( opcode >= 0xE0 )
- Ins_MIRP( exc, args );
- else if ( opcode >= 0xC0 )
- Ins_MDRP( exc, args );
- else if ( opcode >= 0xB8 )
- Ins_PUSHW( exc, args );
- else if ( opcode >= 0xB0 )
- Ins_PUSHB( exc, args );
- else
- Ins_UNKNOWN( exc );
- }
- }
-
- if ( exc->error )
- {
- switch ( exc->error )
- {
- /* looking for redefined instructions */
- case FT_ERR( Invalid_Opcode ):
- {
- TT_DefRecord* def = exc->IDefs;
- TT_DefRecord* limit = def + exc->numIDefs;
-
-
- for ( ; def < limit; def++ )
- {
- if ( def->active && exc->opcode == (FT_Byte)def->opc )
- {
- TT_CallRec* callrec;
-
-
- if ( exc->callTop >= exc->callSize )
- {
- exc->error = FT_THROW( Invalid_Reference );
- goto LErrorLabel_;
- }
-
- callrec = &exc->callStack[exc->callTop];
-
- callrec->Caller_Range = exc->curRange;
- callrec->Caller_IP = exc->IP + 1;
- callrec->Cur_Count = 1;
- callrec->Def = def;
-
- if ( Ins_Goto_CodeRange( exc,
- def->range,
- def->start ) == FAILURE )
- goto LErrorLabel_;
-
- goto LSuiteLabel_;
- }
- }
- }
-
- exc->error = FT_THROW( Invalid_Opcode );
- goto LErrorLabel_;
-
-#if 0
- break; /* Unreachable code warning suppression. */
- /* Leave to remind in case a later change the editor */
- /* to consider break; */
-#endif
-
- default:
- goto LErrorLabel_;
-
-#if 0
- break;
-#endif
- }
- }
-
- exc->top = exc->new_top;
-
- if ( exc->step_ins )
- exc->IP += exc->length;
-
- /* increment instruction counter and check if we didn't */
- /* run this program for too long (e.g. infinite loops). */
- if ( ++ins_counter > TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES )
- return FT_THROW( Execution_Too_Long );
-
- LSuiteLabel_:
- if ( exc->IP >= exc->codeSize )
- {
- if ( exc->callTop > 0 )
- {
- exc->error = FT_THROW( Code_Overflow );
- goto LErrorLabel_;
- }
- else
- goto LNo_Error_;
- }
- } while ( !exc->instruction_trap );
-
- LNo_Error_:
- FT_TRACE4(( " %d instructions executed\n", ins_counter ));
- return FT_Err_Ok;
-
- LErrorCodeOverflow_:
- exc->error = FT_THROW( Code_Overflow );
-
- LErrorLabel_:
- if ( exc->error && !exc->instruction_trap )
- FT_TRACE1(( " The interpreter returned error 0x%x\n", exc->error ));
-
- return exc->error;
- }
-
-#else /* !TT_USE_BYTECODE_INTERPRETER */
-
- /* ANSI C doesn't like empty source files */
- typedef int _tt_interp_dummy;
-
-#endif /* !TT_USE_BYTECODE_INTERPRETER */
-
-
-/* END */
diff --git a/src/truetype/ttinterp.h b/src/truetype/ttinterp.h
deleted file mode 100644
index abbecfcee..000000000
--- a/src/truetype/ttinterp.h
+++ /dev/null
@@ -1,539 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttinterp.h */
-/* */
-/* TrueType bytecode interpreter (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTINTERP_H_
-#define TTINTERP_H_
-
-#include <ft2build.h>
-#include "ttobjs.h"
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* Rounding mode constants. */
- /* */
-#define TT_Round_Off 5
-#define TT_Round_To_Half_Grid 0
-#define TT_Round_To_Grid 1
-#define TT_Round_To_Double_Grid 2
-#define TT_Round_Up_To_Grid 4
-#define TT_Round_Down_To_Grid 3
-#define TT_Round_Super 6
-#define TT_Round_Super_45 7
-
-
- /*************************************************************************/
- /* */
- /* Function types used by the interpreter, depending on various modes */
- /* (e.g. the rounding mode, whether to render a vertical or horizontal */
- /* line etc). */
- /* */
- /*************************************************************************/
-
- /* Rounding function */
- typedef FT_F26Dot6
- (*TT_Round_Func)( TT_ExecContext exc,
- FT_F26Dot6 distance,
- FT_F26Dot6 compensation );
-
- /* Point displacement along the freedom vector routine */
- typedef void
- (*TT_Move_Func)( TT_ExecContext exc,
- TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance );
-
- /* Distance projection along one of the projection vectors */
- typedef FT_F26Dot6
- (*TT_Project_Func)( TT_ExecContext exc,
- FT_Pos dx,
- FT_Pos dy );
-
- /* getting current ppem. Take care of non-square pixels if necessary */
- typedef FT_Long
- (*TT_Cur_Ppem_Func)( TT_ExecContext exc );
-
- /* reading a cvt value. Take care of non-square pixels if necessary */
- typedef FT_F26Dot6
- (*TT_Get_CVT_Func)( TT_ExecContext exc,
- FT_ULong idx );
-
- /* setting or moving a cvt value. Take care of non-square pixels */
- /* if necessary */
- typedef void
- (*TT_Set_CVT_Func)( TT_ExecContext exc,
- FT_ULong idx,
- FT_F26Dot6 value );
-
-
- /*************************************************************************/
- /* */
- /* This structure defines a call record, used to manage function calls. */
- /* */
- typedef struct TT_CallRec_
- {
- FT_Int Caller_Range;
- FT_Long Caller_IP;
- FT_Long Cur_Count;
-
- TT_DefRecord *Def; /* either FDEF or IDEF */
-
- } TT_CallRec, *TT_CallStack;
-
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-
- /*************************************************************************/
- /* */
- /* These structures define rules used to tweak subpixel hinting for */
- /* various fonts. "", 0, "", NULL value indicates to match any value. */
- /* */
-
-#define SPH_MAX_NAME_SIZE 32
-#define SPH_MAX_CLASS_MEMBERS 100
-
- typedef struct SPH_TweakRule_
- {
- const char family[SPH_MAX_NAME_SIZE];
- const FT_UInt ppem;
- const char style[SPH_MAX_NAME_SIZE];
- const FT_ULong glyph;
-
- } SPH_TweakRule;
-
-
- typedef struct SPH_ScaleRule_
- {
- const char family[SPH_MAX_NAME_SIZE];
- const FT_UInt ppem;
- const char style[SPH_MAX_NAME_SIZE];
- const FT_ULong glyph;
- const FT_ULong scale;
-
- } SPH_ScaleRule;
-
-
- typedef struct SPH_Font_Class_
- {
- const char name[SPH_MAX_NAME_SIZE];
- const char member[SPH_MAX_CLASS_MEMBERS][SPH_MAX_NAME_SIZE];
-
- } SPH_Font_Class;
-
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
-
- /*************************************************************************/
- /* */
- /* The main structure for the interpreter which collects all necessary */
- /* variables and states. */
- /* */
- typedef struct TT_ExecContextRec_
- {
- TT_Face face;
- TT_Size size;
- FT_Memory memory;
-
- /* instructions state */
-
- FT_Error error; /* last execution error */
-
- FT_Long top; /* top of exec. stack */
-
- FT_Long stackSize; /* size of exec. stack */
- FT_Long* stack; /* current exec. stack */
-
- FT_Long args;
- FT_Long new_top; /* new top after exec. */
-
- TT_GlyphZoneRec zp0, /* zone records */
- zp1,
- zp2,
- pts,
- twilight;
-
- FT_Long pointSize; /* in 26.6 format */
- FT_Size_Metrics metrics;
- TT_Size_Metrics tt_metrics; /* size metrics */
-
- TT_GraphicsState GS; /* current graphics state */
-
- FT_Int curRange; /* current code range number */
- FT_Byte* code; /* current code range */
- FT_Long IP; /* current instruction pointer */
- FT_Long codeSize; /* size of current range */
-
- FT_Byte opcode; /* current opcode */
- FT_Int length; /* length of current opcode */
-
- FT_Bool step_ins; /* true if the interpreter must */
- /* increment IP after ins. exec */
- FT_ULong cvtSize;
- FT_Long* cvt;
-
- FT_UInt glyphSize; /* glyph instructions buffer size */
- FT_Byte* glyphIns; /* glyph instructions buffer */
-
- FT_UInt numFDefs; /* number of function defs */
- FT_UInt maxFDefs; /* maximum number of function defs */
- TT_DefArray FDefs; /* table of FDefs entries */
-
- FT_UInt numIDefs; /* number of instruction defs */
- FT_UInt maxIDefs; /* maximum number of ins defs */
- TT_DefArray IDefs; /* table of IDefs entries */
-
- FT_UInt maxFunc; /* maximum function index */
- FT_UInt maxIns; /* maximum instruction index */
-
- FT_Int callTop, /* top of call stack during execution */
- callSize; /* size of call stack */
- TT_CallStack callStack; /* call stack */
-
- FT_UShort maxPoints; /* capacity of this context's `pts' */
- FT_Short maxContours; /* record, expressed in points and */
- /* contours. */
-
- TT_CodeRangeTable codeRangeTable; /* table of valid code ranges */
- /* useful for the debugger */
-
- FT_UShort storeSize; /* size of current storage */
- FT_Long* storage; /* storage area */
-
- FT_F26Dot6 period; /* values used for the */
- FT_F26Dot6 phase; /* `SuperRounding' */
- FT_F26Dot6 threshold;
-
- FT_Bool instruction_trap; /* If `True', the interpreter will */
- /* exit after each instruction */
-
- TT_GraphicsState default_GS; /* graphics state resulting from */
- /* the prep program */
- FT_Bool is_composite; /* true if the glyph is composite */
- FT_Bool pedantic_hinting; /* true if pedantic interpretation */
-
- /* latest interpreter additions */
-
- FT_Long F_dot_P; /* dot product of freedom and projection */
- /* vectors */
- TT_Round_Func func_round; /* current rounding function */
-
- TT_Project_Func func_project, /* current projection function */
- func_dualproj, /* current dual proj. function */
- func_freeProj; /* current freedom proj. func */
-
- TT_Move_Func func_move; /* current point move function */
- TT_Move_Func func_move_orig; /* move original position function */
-
- TT_Cur_Ppem_Func func_cur_ppem; /* get current proj. ppem value */
-
- TT_Get_CVT_Func func_read_cvt; /* read a cvt entry */
- TT_Set_CVT_Func func_write_cvt; /* write a cvt entry (in pixels) */
- TT_Set_CVT_Func func_move_cvt; /* incr a cvt entry (in pixels) */
-
- FT_Bool grayscale; /* bi-level hinting and */
- /* grayscale rendering */
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- /*
- * FreeType supports ClearType-like hinting of TrueType fonts through
- * the version 40 interpreter. This is achieved through several hacks
- * in the base (v35) interpreter, as detailed below.
- *
- * ClearType is an umbrella term for several rendering techniques
- * employed by Microsoft's various GUI and rendering toolkit
- * implementations, most importantly: subpixel rendering for using the
- * RGB subpixels of LCDs to approximately triple the perceived
- * resolution on the x-axis and subpixel hinting for positioning stems
- * on subpixel borders. TrueType programming is explicit, i.e., fonts
- * must be programmed to take advantage of ClearType's possibilities.
- *
- * When ClearType was introduced, it seemed unlikely that all fonts
- * would be reprogrammed, so Microsoft decided to implement a backward
- * compatibility mode. It employs several simple to complicated
- * assumptions and tricks, many of them font-dependent, that modify the
- * interpretation of the bytecode contained in these fonts to retrofit
- * them into a ClearType-y look. The quality of the results varies.
- * Most (web)fonts that were released since then have come to rely on
- * these hacks to render correctly, even some of Microsoft's flagship
- * fonts (e.g., Calibri, Cambria, Segoe UI).
- *
- * FreeType's minimal subpixel hinting code (interpreter version 40)
- * employs a small list of font-agnostic hacks loosely based on the
- * public information available on Microsoft's compatibility mode[2].
- * The focus is on modern (web)fonts rather than legacy fonts that were
- * made for monochrome rendering. It will not match ClearType rendering
- * exactly. Unlike the `Infinality' code (interpreter version 38) that
- * came before, it will not try to toggle hacks for specific fonts for
- * performance and complexity reasons. It will fall back to version 35
- * behavior for tricky fonts[1] or when monochrome rendering is
- * requested.
- *
- * Major hacks
- *
- * - Any point movement on the x axis is ignored (cf. `Direct_Move' and
- * `Direct_Move_X'). This has the smallest code footprint and single
- * biggest effect. The ClearType way to increase resolution is
- * supersampling the x axis, the FreeType way is ignoring instructions
- * on the x axis, which gives the same result in the majority of
- * cases.
- *
- * - Points are not moved post-IUP (neither on the x nor on the y axis),
- * except the x component of diagonal moves post-IUP (cf.
- * `Direct_Move', `Direct_Move_Y', `Move_Zp2_Point'). Post-IUP
- * changes are commonly used to `fix' pixel patterns which has little
- * use outside monochrome rendering.
- *
- * - SHPIX and DELTAP don't execute unless moving a composite on the
- * y axis or moving a previously y touched point. SHPIX additionally
- * denies movement on the x axis (cf. `Ins_SHPIX' and `Ins_DELTAP').
- * Both instructions are commonly used to `fix' pixel patterns for
- * monochrome or Windows's GDI rendering but make little sense for
- * FreeType rendering. Both can distort the outline. See [2] for
- * details.
- *
- * - The hdmx table and modifications to phantom points are ignored.
- * Bearings and advance widths remain unchanged (except rounding them
- * outside the interpreter!), cf. `compute_glyph_metrics' and
- * `TT_Hint_Glyph'. Letting non-native-ClearType fonts modify spacing
- * might mess up spacing.
- *
- * Minor hacks
- *
- * - FLIPRGON, FLIPRGOFF, and FLIPPT don't execute post-IUP. This
- * prevents dents in e.g. Arial-Regular's `D' and `G' glyphs at
- * various sizes.
- *
- * (Post-IUP is the state after both IUP[x] and IUP[y] have been
- * executed.)
- *
- * The best results are achieved for fonts that were from the outset
- * designed with ClearType in mind, meaning they leave the x axis mostly
- * alone and don't mess with the `final' outline to produce more
- * pleasing pixel patterns. The harder the designer tried to produce
- * very specific patterns (`superhinting') for pre-ClearType-displays,
- * the worse the results.
- *
- * Microsoft defines a way to turn off backward compatibility and
- * interpret instructions as before (called `native ClearType')[2][3].
- * The font designer then regains full control and is responsible for
- * making the font work correctly with ClearType without any
- * hand-holding by the interpreter or rasterizer[4]. The v40
- * interpreter assumes backward compatibility by default, which can be
- * turned off the same way by executing the following in the control
- * program (cf. `Ins_INSTCTRL').
- *
- * #PUSH 4,3
- * INSTCTRL[]
- *
- * [1] Tricky fonts as FreeType defines them rely on the bytecode
- * interpreter to display correctly. Hacks can interfere with them,
- * so they get treated like native ClearType fonts (v40 with
- * backward compatibility turned off). Cf. `TT_RunIns'.
- *
- * [2] Proposed by Microsoft's Greg Hitchcock in
- * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
- *
- * [3] Beat Stamm describes it in more detail:
- * http://www.beatstamm.com/typography/RTRCh4.htm#Sec12
- *
- * [4] The list of `native ClearType' fonts is small at the time of this
- * writing; I found the following on a Windows 10 Update 1511
- * installation: Constantia, Corbel, Sitka, Malgun Gothic, Microsoft
- * JhengHei (Bold and UI Bold), Microsoft YaHei (Bold and UI Bold),
- * SimSun, NSimSun, and Yu Gothic.
- *
- */
-
- /* Using v40 implies subpixel hinting, unless FT_RENDER_MODE_MONO has been
- * requested. Used to detect interpreter */
- /* version switches. `_lean' to differentiate from the Infinality */
- /* `subpixel_hinting', which is managed differently. */
- FT_Bool subpixel_hinting_lean;
-
- /* Long side of a LCD subpixel is vertical (e.g., screen is rotated). */
- /* `_lean' to differentiate from the Infinality `vertical_lcd', which */
- /* is managed differently. */
- FT_Bool vertical_lcd_lean;
-
- /* Default to backward compatibility mode in v40 interpreter. If */
- /* this is false, it implies the interpreter is in v35 or in native */
- /* ClearType mode. */
- FT_Bool backward_compatibility;
-
- /* Useful for detecting and denying post-IUP trickery that is usually */
- /* used to fix pixel patterns (`superhinting'). */
- FT_Bool iupx_called;
- FT_Bool iupy_called;
-
- /* ClearType hinting and grayscale rendering, as used by Universal */
- /* Windows Platform apps (Windows 8 and above). Like the standard */
- /* colorful ClearType mode, it utilizes a vastly increased virtual */
- /* resolution on the x axis. Different from bi-level hinting and */
- /* grayscale rendering, the old mode from Win9x days that roughly */
- /* adheres to the physical pixel grid on both axes. */
- FT_Bool grayscale_cleartype;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL */
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- TT_Round_Func func_round_sphn; /* subpixel rounding function */
-
- FT_Bool subpixel_hinting; /* Using subpixel hinting? */
- FT_Bool ignore_x_mode; /* Standard rendering mode for */
- /* subpixel hinting. On if gray */
- /* or subpixel hinting is on. */
-
- /* The following 6 aren't fully implemented but here for MS rasterizer */
- /* compatibility. */
- FT_Bool compatible_widths; /* compatible widths? */
- FT_Bool symmetrical_smoothing; /* symmetrical_smoothing? */
- FT_Bool bgr; /* bgr instead of rgb? */
- FT_Bool vertical_lcd; /* long side of LCD subpixel */
- /* rectangles is horizontal */
- FT_Bool subpixel_positioned; /* subpixel positioned */
- /* (DirectWrite ClearType)? */
- FT_Bool gray_cleartype; /* ClearType hinting but */
- /* grayscale rendering */
-
- FT_Int rasterizer_version; /* MS rasterizer version */
-
- FT_Bool iup_called; /* IUP called for glyph? */
-
- FT_ULong sph_tweak_flags; /* flags to control */
- /* hint tweaks */
-
- FT_ULong sph_in_func_flags; /* flags to indicate if in */
- /* special functions */
-
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
- /* We maintain two counters (in addition to the instruction counter) */
- /* that act as loop detectors for LOOPCALL and jump opcodes with */
- /* negative arguments. */
- FT_ULong loopcall_counter;
- FT_ULong loopcall_counter_max;
- FT_ULong neg_jump_counter;
- FT_ULong neg_jump_counter_max;
-
- } TT_ExecContextRec;
-
-
- extern const TT_GraphicsState tt_default_graphics_state;
-
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- FT_LOCAL( void )
- TT_Goto_CodeRange( TT_ExecContext exec,
- FT_Int range,
- FT_Long IP );
-
- FT_LOCAL( void )
- TT_Set_CodeRange( TT_ExecContext exec,
- FT_Int range,
- void* base,
- FT_Long length );
-
- FT_LOCAL( void )
- TT_Clear_CodeRange( TT_ExecContext exec,
- FT_Int range );
-
-
- FT_LOCAL( FT_Error )
- Update_Max( FT_Memory memory,
- FT_ULong* size,
- FT_ULong multiplier,
- void* _pbuff,
- FT_ULong new_max );
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_New_Context */
- /* */
- /* <Description> */
- /* Queries the face context for a given font. Note that there is */
- /* now a _single_ execution context in the TrueType driver which is */
- /* shared among faces. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* <Return> */
- /* A handle to the execution context. Initialized for `face'. */
- /* */
- /* <Note> */
- /* Only the glyph loader and debugger should call this function. */
- /* (And right now only the glyph loader uses it.) */
- /* */
- FT_EXPORT( TT_ExecContext )
- TT_New_Context( TT_Driver driver );
-
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- FT_LOCAL( void )
- TT_Done_Context( TT_ExecContext exec );
-
- FT_LOCAL( FT_Error )
- TT_Load_Context( TT_ExecContext exec,
- TT_Face face,
- TT_Size size );
-
- FT_LOCAL( void )
- TT_Save_Context( TT_ExecContext exec,
- TT_Size ins );
-
- FT_LOCAL( FT_Error )
- TT_Run_Context( TT_ExecContext exec );
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_RunIns */
- /* */
- /* <Description> */
- /* Executes one or more instruction in the execution context. This */
- /* is the main function of the TrueType opcode interpreter. */
- /* */
- /* <Input> */
- /* exec :: A handle to the target execution context. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* Only the object manager and debugger should call this function. */
- /* */
- /* This function is publicly exported because it is directly */
- /* invoked by the TrueType debugger. */
- /* */
- FT_EXPORT( FT_Error )
- TT_RunIns( TT_ExecContext exec );
-
-
-FT_END_HEADER
-
-#endif /* TTINTERP_H_ */
-
-
-/* END */
diff --git a/src/truetype/ttobjs.c b/src/truetype/ttobjs.c
deleted file mode 100644
index 4db0f289f..000000000
--- a/src/truetype/ttobjs.c
+++ /dev/null
@@ -1,1403 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttobjs.c */
-/* */
-/* Objects manager (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_INTERNAL_SFNT_H
-#include FT_TRUETYPE_DRIVER_H
-
-#include "ttgload.h"
-#include "ttpload.h"
-
-#include "tterrors.h"
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-#include "ttinterp.h"
-#endif
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include "ttgxvar.h"
-#endif
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttobjs
-
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- /*************************************************************************/
- /* */
- /* GLYPH ZONE FUNCTIONS */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_glyphzone_done */
- /* */
- /* <Description> */
- /* Deallocate a glyph zone. */
- /* */
- /* <Input> */
- /* zone :: A pointer to the target glyph zone. */
- /* */
- FT_LOCAL_DEF( void )
- tt_glyphzone_done( TT_GlyphZone zone )
- {
- FT_Memory memory = zone->memory;
-
-
- if ( memory )
- {
- FT_FREE( zone->contours );
- FT_FREE( zone->tags );
- FT_FREE( zone->cur );
- FT_FREE( zone->org );
- FT_FREE( zone->orus );
-
- zone->max_points = zone->n_points = 0;
- zone->max_contours = zone->n_contours = 0;
- zone->memory = NULL;
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_glyphzone_new */
- /* */
- /* <Description> */
- /* Allocate a new glyph zone. */
- /* */
- /* <Input> */
- /* memory :: A handle to the current memory object. */
- /* */
- /* maxPoints :: The capacity of glyph zone in points. */
- /* */
- /* maxContours :: The capacity of glyph zone in contours. */
- /* */
- /* <Output> */
- /* zone :: A pointer to the target glyph zone record. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_glyphzone_new( FT_Memory memory,
- FT_UShort maxPoints,
- FT_Short maxContours,
- TT_GlyphZone zone )
- {
- FT_Error error;
-
-
- FT_ZERO( zone );
- zone->memory = memory;
-
- if ( FT_NEW_ARRAY( zone->org, maxPoints ) ||
- FT_NEW_ARRAY( zone->cur, maxPoints ) ||
- FT_NEW_ARRAY( zone->orus, maxPoints ) ||
- FT_NEW_ARRAY( zone->tags, maxPoints ) ||
- FT_NEW_ARRAY( zone->contours, maxContours ) )
- {
- tt_glyphzone_done( zone );
- }
- else
- {
- zone->max_points = maxPoints;
- zone->max_contours = maxContours;
- }
-
- return error;
- }
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
-
- /* Compare the face with a list of well-known `tricky' fonts. */
- /* This list shall be expanded as we find more of them. */
-
- static FT_Bool
- tt_check_trickyness_family( FT_String* name )
- {
-
-#define TRICK_NAMES_MAX_CHARACTERS 19
-#define TRICK_NAMES_COUNT 18
-
- static const char trick_names[TRICK_NAMES_COUNT]
- [TRICK_NAMES_MAX_CHARACTERS + 1] =
- {
- /*
- PostScript names are given in brackets if they differ from the
- family name. The version numbers, together with the copyright or
- release year data, are taken from fonts available to the
- developers.
-
- Note that later versions of the fonts might be no longer tricky;
- for example, `MingLiU' version 7.00 (file `mingliu.ttc' from
- Windows 7) is an ordinary TTC with non-tricky subfonts.
- */
-
- "cpop", /* dftt-p7.ttf; version 1.00, 1992 [DLJGyShoMedium] */
- "DFGirl-W6-WIN-BF", /* dftt-h6.ttf; version 1.00, 1993 */
- "DFKaiSho-SB", /* dfkaisb.ttf */
- "DFKaiShu",
- "DFKai-SB", /* kaiu.ttf; version 3.00, 1998 [DFKaiShu-SB-Estd-BF] */
- "DLC", /* dftt-m7.ttf; version 1.00, 1993 [DLCMingBold] */
- /* dftt-f5.ttf; version 1.00, 1993 [DLCFongSung] */
- "DLCHayMedium", /* dftt-b5.ttf; version 1.00, 1993 */
- "DLCHayBold", /* dftt-b7.ttf; version 1.00, 1993 */
- "DLCKaiMedium", /* dftt-k5.ttf; version 1.00, 1992 */
- "DLCLiShu", /* dftt-l5.ttf; version 1.00, 1992 */
- "DLCRoundBold", /* dftt-r7.ttf; version 1.00, 1993 */
- "HuaTianKaiTi?", /* htkt2.ttf */
- "HuaTianSongTi?", /* htst3.ttf */
- "Ming(for ISO10646)", /* hkscsiic.ttf; version 0.12, 2007 [Ming] */
- /* iicore.ttf; version 0.07, 2007 [Ming] */
- "MingLiU", /* mingliu.ttf */
- /* mingliu.ttc; version 3.21, 2001 */
- "MingMedium", /* dftt-m5.ttf; version 1.00, 1993 [DLCMingMedium] */
- "PMingLiU", /* mingliu.ttc; version 3.21, 2001 */
- "MingLi43", /* mingli.ttf; version 1.00, 1992 */
- };
-
- int nn;
-
-
- for ( nn = 0; nn < TRICK_NAMES_COUNT; nn++ )
- if ( ft_strstr( name, trick_names[nn] ) )
- return TRUE;
-
- return FALSE;
- }
-
-
- /* XXX: This function should be in the `sfnt' module. */
-
- /* Some PDF generators clear the checksums in the TrueType header table. */
- /* For example, Quartz ContextPDF clears all entries, or Bullzip PDF */
- /* Printer clears the entries for subsetted subtables. We thus have to */
- /* recalculate the checksums where necessary. */
-
- static FT_UInt32
- tt_synth_sfnt_checksum( FT_Stream stream,
- FT_ULong length )
- {
- FT_Error error;
- FT_UInt32 checksum = 0;
- FT_UInt i;
-
-
- if ( FT_FRAME_ENTER( length ) )
- return 0;
-
- for ( ; length > 3; length -= 4 )
- checksum += (FT_UInt32)FT_GET_ULONG();
-
- for ( i = 3; length > 0; length--, i-- )
- checksum += (FT_UInt32)FT_GET_BYTE() << ( i * 8 );
-
- FT_FRAME_EXIT();
-
- return checksum;
- }
-
-
- /* XXX: This function should be in the `sfnt' module. */
-
- static FT_ULong
- tt_get_sfnt_checksum( TT_Face face,
- FT_UShort i )
- {
-#if 0 /* if we believe the written value, use following part. */
- if ( face->dir_tables[i].CheckSum )
- return face->dir_tables[i].CheckSum;
-#endif
-
- if ( !face->goto_table )
- return 0;
-
- if ( face->goto_table( face,
- face->dir_tables[i].Tag,
- face->root.stream,
- NULL ) )
- return 0;
-
- return (FT_ULong)tt_synth_sfnt_checksum( face->root.stream,
- face->dir_tables[i].Length );
- }
-
-
- typedef struct tt_sfnt_id_rec_
- {
- FT_ULong CheckSum;
- FT_ULong Length;
-
- } tt_sfnt_id_rec;
-
-
- static FT_Bool
- tt_check_trickyness_sfnt_ids( TT_Face face )
- {
-#define TRICK_SFNT_IDS_PER_FACE 3
-#define TRICK_SFNT_IDS_NUM_FACES 19
-
- static const tt_sfnt_id_rec sfnt_id[TRICK_SFNT_IDS_NUM_FACES]
- [TRICK_SFNT_IDS_PER_FACE] = {
-
-#define TRICK_SFNT_ID_cvt 0
-#define TRICK_SFNT_ID_fpgm 1
-#define TRICK_SFNT_ID_prep 2
-
- { /* MingLiU 1995 */
- { 0x05BCF058UL, 0x000002E4UL }, /* cvt */
- { 0x28233BF1UL, 0x000087C4UL }, /* fpgm */
- { 0xA344A1EAUL, 0x000001E1UL } /* prep */
- },
- { /* MingLiU 1996- */
- { 0x05BCF058UL, 0x000002E4UL }, /* cvt */
- { 0x28233BF1UL, 0x000087C4UL }, /* fpgm */
- { 0xA344A1EBUL, 0x000001E1UL } /* prep */
- },
- { /* DFKaiShu */
- { 0x11E5EAD4UL, 0x00000350UL }, /* cvt */
- { 0x5A30CA3BUL, 0x00009063UL }, /* fpgm */
- { 0x13A42602UL, 0x0000007EUL } /* prep */
- },
- { /* DFKaiShu, variant */
- { 0x11E5EAD4UL, 0x00000350UL }, /* cvt */
- { 0xA6E78C01UL, 0x00008998UL }, /* fpgm */
- { 0x13A42602UL, 0x0000007EUL } /* prep */
- },
- { /* HuaTianKaiTi */
- { 0xFFFBFFFCUL, 0x00000008UL }, /* cvt */
- { 0x9C9E48B8UL, 0x0000BEA2UL }, /* fpgm */
- { 0x70020112UL, 0x00000008UL } /* prep */
- },
- { /* HuaTianSongTi */
- { 0xFFFBFFFCUL, 0x00000008UL }, /* cvt */
- { 0x0A5A0483UL, 0x00017C39UL }, /* fpgm */
- { 0x70020112UL, 0x00000008UL } /* prep */
- },
- { /* NEC fadpop7.ttf */
- { 0x00000000UL, 0x00000000UL }, /* cvt */
- { 0x40C92555UL, 0x000000E5UL }, /* fpgm */
- { 0xA39B58E3UL, 0x0000117CUL } /* prep */
- },
- { /* NEC fadrei5.ttf */
- { 0x00000000UL, 0x00000000UL }, /* cvt */
- { 0x33C41652UL, 0x000000E5UL }, /* fpgm */
- { 0x26D6C52AUL, 0x00000F6AUL } /* prep */
- },
- { /* NEC fangot7.ttf */
- { 0x00000000UL, 0x00000000UL }, /* cvt */
- { 0x6DB1651DUL, 0x0000019DUL }, /* fpgm */
- { 0x6C6E4B03UL, 0x00002492UL } /* prep */
- },
- { /* NEC fangyo5.ttf */
- { 0x00000000UL, 0x00000000UL }, /* cvt */
- { 0x40C92555UL, 0x000000E5UL }, /* fpgm */
- { 0xDE51FAD0UL, 0x0000117CUL } /* prep */
- },
- { /* NEC fankyo5.ttf */
- { 0x00000000UL, 0x00000000UL }, /* cvt */
- { 0x85E47664UL, 0x000000E5UL }, /* fpgm */
- { 0xA6C62831UL, 0x00001CAAUL } /* prep */
- },
- { /* NEC fanrgo5.ttf */
- { 0x00000000UL, 0x00000000UL }, /* cvt */
- { 0x2D891CFDUL, 0x0000019DUL }, /* fpgm */
- { 0xA0604633UL, 0x00001DE8UL } /* prep */
- },
- { /* NEC fangot5.ttc */
- { 0x00000000UL, 0x00000000UL }, /* cvt */
- { 0x40AA774CUL, 0x000001CBUL }, /* fpgm */
- { 0x9B5CAA96UL, 0x00001F9AUL } /* prep */
- },
- { /* NEC fanmin3.ttc */
- { 0x00000000UL, 0x00000000UL }, /* cvt */
- { 0x0D3DE9CBUL, 0x00000141UL }, /* fpgm */
- { 0xD4127766UL, 0x00002280UL } /* prep */
- },
- { /* NEC FA-Gothic, 1996 */
- { 0x00000000UL, 0x00000000UL }, /* cvt */
- { 0x4A692698UL, 0x000001F0UL }, /* fpgm */
- { 0x340D4346UL, 0x00001FCAUL } /* prep */
- },
- { /* NEC FA-Minchou, 1996 */
- { 0x00000000UL, 0x00000000UL }, /* cvt */
- { 0xCD34C604UL, 0x00000166UL }, /* fpgm */
- { 0x6CF31046UL, 0x000022B0UL } /* prep */
- },
- { /* NEC FA-RoundGothicB, 1996 */
- { 0x00000000UL, 0x00000000UL }, /* cvt */
- { 0x5DA75315UL, 0x0000019DUL }, /* fpgm */
- { 0x40745A5FUL, 0x000022E0UL } /* prep */
- },
- { /* NEC FA-RoundGothicM, 1996 */
- { 0x00000000UL, 0x00000000UL }, /* cvt */
- { 0xF055FC48UL, 0x000001C2UL }, /* fpgm */
- { 0x3900DED3UL, 0x00001E18UL } /* prep */
- },
- { /* MINGLI.TTF, 1992 */
- { 0x00170003UL, 0x00000060UL }, /* cvt */
- { 0xDBB4306EUL, 0x000058AAUL }, /* fpgm */
- { 0xD643482AUL, 0x00000035UL } /* prep */
- }
- };
-
- FT_ULong checksum;
- int num_matched_ids[TRICK_SFNT_IDS_NUM_FACES];
- FT_Bool has_cvt, has_fpgm, has_prep;
- FT_UShort i;
- int j, k;
-
-
- FT_MEM_SET( num_matched_ids, 0,
- sizeof ( int ) * TRICK_SFNT_IDS_NUM_FACES );
- has_cvt = FALSE;
- has_fpgm = FALSE;
- has_prep = FALSE;
-
- for ( i = 0; i < face->num_tables; i++ )
- {
- checksum = 0;
-
- switch( face->dir_tables[i].Tag )
- {
- case TTAG_cvt:
- k = TRICK_SFNT_ID_cvt;
- has_cvt = TRUE;
- break;
-
- case TTAG_fpgm:
- k = TRICK_SFNT_ID_fpgm;
- has_fpgm = TRUE;
- break;
-
- case TTAG_prep:
- k = TRICK_SFNT_ID_prep;
- has_prep = TRUE;
- break;
-
- default:
- continue;
- }
-
- for ( j = 0; j < TRICK_SFNT_IDS_NUM_FACES; j++ )
- if ( face->dir_tables[i].Length == sfnt_id[j][k].Length )
- {
- if ( !checksum )
- checksum = tt_get_sfnt_checksum( face, i );
-
- if ( sfnt_id[j][k].CheckSum == checksum )
- num_matched_ids[j]++;
-
- if ( num_matched_ids[j] == TRICK_SFNT_IDS_PER_FACE )
- return TRUE;
- }
- }
-
- for ( j = 0; j < TRICK_SFNT_IDS_NUM_FACES; j++ )
- {
- if ( !has_cvt && !sfnt_id[j][TRICK_SFNT_ID_cvt].Length )
- num_matched_ids[j]++;
- if ( !has_fpgm && !sfnt_id[j][TRICK_SFNT_ID_fpgm].Length )
- num_matched_ids[j]++;
- if ( !has_prep && !sfnt_id[j][TRICK_SFNT_ID_prep].Length )
- num_matched_ids[j]++;
- if ( num_matched_ids[j] == TRICK_SFNT_IDS_PER_FACE )
- return TRUE;
- }
-
- return FALSE;
- }
-
-
- static FT_Bool
- tt_check_trickyness( FT_Face face )
- {
- if ( !face )
- return FALSE;
-
- /* For first, check the face name for quick check. */
- if ( face->family_name &&
- tt_check_trickyness_family( face->family_name ) )
- return TRUE;
-
- /* Type42 fonts may lack `name' tables, we thus try to identify */
- /* tricky fonts by checking the checksums of Type42-persistent */
- /* sfnt tables (`cvt', `fpgm', and `prep'). */
- if ( tt_check_trickyness_sfnt_ids( (TT_Face)face ) )
- return TRUE;
-
- return FALSE;
- }
-
-
- /* Check whether `.notdef' is the only glyph in the `loca' table. */
- static FT_Bool
- tt_check_single_notdef( FT_Face ttface )
- {
- FT_Bool result = FALSE;
-
- TT_Face face = (TT_Face)ttface;
- FT_UInt asize;
- FT_ULong i;
- FT_ULong glyph_index = 0;
- FT_UInt count = 0;
-
-
- for( i = 0; i < face->num_locations; i++ )
- {
- tt_face_get_location( face, i, &asize );
- if ( asize > 0 )
- {
- count += 1;
- if ( count > 1 )
- break;
- glyph_index = i;
- }
- }
-
- /* Only have a single outline. */
- if ( count == 1 )
- {
- if ( glyph_index == 0 )
- result = TRUE;
- else
- {
- /* FIXME: Need to test glyphname == .notdef ? */
- FT_Error error;
- char buf[8];
-
-
- error = FT_Get_Glyph_Name( ttface, glyph_index, buf, 8 );
- if ( !error &&
- buf[0] == '.' && !ft_strncmp( buf, ".notdef", 8 ) )
- result = TRUE;
- }
- }
-
- return result;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_init */
- /* */
- /* <Description> */
- /* Initialize a given TrueType face object. */
- /* */
- /* <Input> */
- /* stream :: The source font stream. */
- /* */
- /* face_index :: The index of the TrueType font, if we are opening a */
- /* collection, in bits 0-15. The numbered instance */
- /* index~+~1 of a GX (sub)font, if applicable, in bits */
- /* 16-30. */
- /* */
- /* num_params :: Number of additional generic parameters. Ignored. */
- /* */
- /* params :: Additional generic parameters. Ignored. */
- /* */
- /* <InOut> */
- /* face :: The newly built face object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_init( FT_Stream stream,
- FT_Face ttface, /* TT_Face */
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- FT_Error error;
- FT_Library library;
- SFNT_Service sfnt;
- TT_Face face = (TT_Face)ttface;
-
-
- FT_TRACE2(( "TTF driver\n" ));
-
- library = ttface->driver->root.library;
-
- sfnt = (SFNT_Service)FT_Get_Module_Interface( library, "sfnt" );
- if ( !sfnt )
- {
- FT_ERROR(( "tt_face_init: cannot access `sfnt' module\n" ));
- error = FT_THROW( Missing_Module );
- goto Exit;
- }
-
- /* create input stream from resource */
- if ( FT_STREAM_SEEK( 0 ) )
- goto Exit;
-
- /* check that we have a valid TrueType file */
- FT_TRACE2(( " " ));
- error = sfnt->init_face( stream, face, face_index, num_params, params );
-
- /* Stream may have changed. */
- stream = face->root.stream;
-
- if ( error )
- goto Exit;
-
- /* We must also be able to accept Mac/GX fonts, as well as OT ones. */
- /* The 0x00020000 tag is completely undocumented; some fonts from */
- /* Arphic made for Chinese Windows 3.1 have this. */
- if ( face->format_tag != 0x00010000L && /* MS fonts */
- face->format_tag != 0x00020000L && /* CJK fonts for Win 3.1 */
- face->format_tag != TTAG_true ) /* Mac fonts */
- {
- FT_TRACE2(( " not a TTF font\n" ));
- goto Bad_Format;
- }
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- ttface->face_flags |= FT_FACE_FLAG_HINTER;
-#endif
-
- /* If we are performing a simple font format check, exit immediately. */
- if ( face_index < 0 )
- return FT_Err_Ok;
-
- /* Load font directory */
- error = sfnt->load_face( stream, face, face_index, num_params, params );
- if ( error )
- goto Exit;
-
- if ( tt_check_trickyness( ttface ) )
- ttface->face_flags |= FT_FACE_FLAG_TRICKY;
-
- error = tt_face_load_hdmx( face, stream );
- if ( error )
- goto Exit;
-
- if ( FT_IS_SCALABLE( ttface ) )
- {
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- if ( !ttface->internal->incremental_interface )
-#endif
- {
- error = tt_face_load_loca( face, stream );
-
- /* having a (non-zero) `glyf' table without */
- /* a `loca' table is not valid */
- if ( face->glyf_len && FT_ERR_EQ( error, Table_Missing ) )
- goto Exit;
- if ( error )
- goto Exit;
- }
-
- /* `fpgm', `cvt', and `prep' are optional */
- error = tt_face_load_cvt( face, stream );
- if ( error && FT_ERR_NEQ( error, Table_Missing ) )
- goto Exit;
-
- error = tt_face_load_fpgm( face, stream );
- if ( error && FT_ERR_NEQ( error, Table_Missing ) )
- goto Exit;
-
- error = tt_face_load_prep( face, stream );
- if ( error && FT_ERR_NEQ( error, Table_Missing ) )
- goto Exit;
-
- /* Check the scalable flag based on `loca'. */
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- if ( !ttface->internal->incremental_interface )
-#endif
- {
- if ( ttface->num_fixed_sizes &&
- face->glyph_locations &&
- tt_check_single_notdef( ttface ) )
- {
- FT_TRACE5(( "tt_face_init:"
- " Only the `.notdef' glyph has an outline.\n"
- " "
- " Resetting scalable flag to FALSE.\n" ));
-
- ttface->face_flags &= ~FT_FACE_FLAG_SCALABLE;
- }
- }
- }
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-
- {
- FT_Int instance_index = face_index >> 16;
-
-
- if ( FT_HAS_MULTIPLE_MASTERS( ttface ) &&
- instance_index > 0 )
- {
- error = TT_Get_MM_Var( face, NULL );
- if ( error )
- goto Exit;
-
- if ( face->blend->mmvar->namedstyle )
- {
- FT_Memory memory = ttface->memory;
-
- FT_Var_Named_Style* named_style;
- FT_String* style_name;
-
-
- /* in `face_index', the instance index starts with value 1 */
- named_style = face->blend->mmvar->namedstyle + instance_index - 1;
- error = sfnt->get_name( face,
- (FT_UShort)named_style->strid,
- &style_name );
- if ( error )
- goto Exit;
-
- /* set style name; if already set, replace it */
- if ( face->root.style_name )
- FT_FREE( face->root.style_name );
- face->root.style_name = style_name;
-
- /* finally, select the named instance */
- error = TT_Set_Var_Design( face,
- face->blend->mmvar->num_axis,
- named_style->coords );
- if ( error )
- goto Exit;
-
- tt_apply_mvar( face );
- }
- }
- }
-
-#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
-
- /* initialize standard glyph loading routines */
- TT_Init_Glyph_Loading( face );
-
- Exit:
- return error;
-
- Bad_Format:
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_done */
- /* */
- /* <Description> */
- /* Finalize a given face object. */
- /* */
- /* <Input> */
- /* face :: A pointer to the face object to destroy. */
- /* */
- FT_LOCAL_DEF( void )
- tt_face_done( FT_Face ttface ) /* TT_Face */
- {
- TT_Face face = (TT_Face)ttface;
- FT_Memory memory;
- FT_Stream stream;
- SFNT_Service sfnt;
-
-
- if ( !face )
- return;
-
- memory = ttface->memory;
- stream = ttface->stream;
- sfnt = (SFNT_Service)face->sfnt;
-
- /* for `extended TrueType formats' (i.e. compressed versions) */
- if ( face->extra.finalizer )
- face->extra.finalizer( face->extra.data );
-
- if ( sfnt )
- sfnt->done_face( face );
-
- /* freeing the locations table */
- tt_face_done_loca( face );
-
- tt_face_free_hdmx( face );
-
- /* freeing the CVT */
- FT_FREE( face->cvt );
- face->cvt_size = 0;
-
- /* freeing the programs */
- FT_FRAME_RELEASE( face->font_program );
- FT_FRAME_RELEASE( face->cvt_program );
- face->font_program_size = 0;
- face->cvt_program_size = 0;
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- tt_done_blend( face );
- face->blend = NULL;
-#endif
- }
-
-
- /*************************************************************************/
- /* */
- /* SIZE FUNCTIONS */
- /* */
- /*************************************************************************/
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_size_run_fpgm */
- /* */
- /* <Description> */
- /* Run the font program. */
- /* */
- /* <Input> */
- /* size :: A handle to the size object. */
- /* */
- /* pedantic :: Set if bytecode execution should be pedantic. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_size_run_fpgm( TT_Size size,
- FT_Bool pedantic )
- {
- TT_Face face = (TT_Face)size->root.face;
- TT_ExecContext exec;
- FT_Error error;
-
-
- exec = size->context;
-
- error = TT_Load_Context( exec, face, size );
- if ( error )
- return error;
-
- exec->callTop = 0;
- exec->top = 0;
-
- exec->period = 64;
- exec->phase = 0;
- exec->threshold = 0;
-
- exec->instruction_trap = FALSE;
- exec->F_dot_P = 0x4000L;
-
- exec->pedantic_hinting = pedantic;
-
- {
- FT_Size_Metrics* size_metrics = &exec->metrics;
- TT_Size_Metrics* tt_metrics = &exec->tt_metrics;
-
-
- size_metrics->x_ppem = 0;
- size_metrics->y_ppem = 0;
- size_metrics->x_scale = 0;
- size_metrics->y_scale = 0;
-
- tt_metrics->ppem = 0;
- tt_metrics->scale = 0;
- tt_metrics->ratio = 0x10000L;
- }
-
- /* allow font program execution */
- TT_Set_CodeRange( exec,
- tt_coderange_font,
- face->font_program,
- (FT_Long)face->font_program_size );
-
- /* disable CVT and glyph programs coderange */
- TT_Clear_CodeRange( exec, tt_coderange_cvt );
- TT_Clear_CodeRange( exec, tt_coderange_glyph );
-
- if ( face->font_program_size > 0 )
- {
- TT_Goto_CodeRange( exec, tt_coderange_font, 0 );
-
- FT_TRACE4(( "Executing `fpgm' table.\n" ));
- error = face->interpreter( exec );
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( error )
- FT_TRACE4(( " interpretation failed with error code 0x%x\n",
- error ));
-#endif
- }
- else
- error = FT_Err_Ok;
-
- size->bytecode_ready = error;
-
- if ( !error )
- TT_Save_Context( exec, size );
-
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_size_run_prep */
- /* */
- /* <Description> */
- /* Run the control value program. */
- /* */
- /* <Input> */
- /* size :: A handle to the size object. */
- /* */
- /* pedantic :: Set if bytecode execution should be pedantic. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_size_run_prep( TT_Size size,
- FT_Bool pedantic )
- {
- TT_Face face = (TT_Face)size->root.face;
- TT_ExecContext exec;
- FT_Error error;
-
-
- exec = size->context;
-
- error = TT_Load_Context( exec, face, size );
- if ( error )
- return error;
-
- exec->callTop = 0;
- exec->top = 0;
-
- exec->instruction_trap = FALSE;
-
- exec->pedantic_hinting = pedantic;
-
- TT_Set_CodeRange( exec,
- tt_coderange_cvt,
- face->cvt_program,
- (FT_Long)face->cvt_program_size );
-
- TT_Clear_CodeRange( exec, tt_coderange_glyph );
-
- if ( face->cvt_program_size > 0 )
- {
- TT_Goto_CodeRange( exec, tt_coderange_cvt, 0 );
-
- FT_TRACE4(( "Executing `prep' table.\n" ));
- error = face->interpreter( exec );
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( error )
- FT_TRACE4(( " interpretation failed with error code 0x%x\n",
- error ));
-#endif
- }
- else
- error = FT_Err_Ok;
-
- size->cvt_ready = error;
-
- /* UNDOCUMENTED! The MS rasterizer doesn't allow the following */
- /* graphics state variables to be modified by the CVT program. */
-
- exec->GS.dualVector.x = 0x4000;
- exec->GS.dualVector.y = 0;
- exec->GS.projVector.x = 0x4000;
- exec->GS.projVector.y = 0x0;
- exec->GS.freeVector.x = 0x4000;
- exec->GS.freeVector.y = 0x0;
-
- exec->GS.rp0 = 0;
- exec->GS.rp1 = 0;
- exec->GS.rp2 = 0;
-
- exec->GS.gep0 = 1;
- exec->GS.gep1 = 1;
- exec->GS.gep2 = 1;
-
- exec->GS.loop = 1;
-
- /* save as default graphics state */
- size->GS = exec->GS;
-
- TT_Save_Context( exec, size );
-
- return error;
- }
-
-
- static void
- tt_size_done_bytecode( FT_Size ftsize )
- {
- TT_Size size = (TT_Size)ftsize;
- TT_Face face = (TT_Face)ftsize->face;
- FT_Memory memory = face->root.memory;
-
- if ( size->context )
- {
- TT_Done_Context( size->context );
- size->context = NULL;
- }
-
- FT_FREE( size->cvt );
- size->cvt_size = 0;
-
- /* free storage area */
- FT_FREE( size->storage );
- size->storage_size = 0;
-
- /* twilight zone */
- tt_glyphzone_done( &size->twilight );
-
- FT_FREE( size->function_defs );
- FT_FREE( size->instruction_defs );
-
- size->num_function_defs = 0;
- size->max_function_defs = 0;
- size->num_instruction_defs = 0;
- size->max_instruction_defs = 0;
-
- size->max_func = 0;
- size->max_ins = 0;
-
- size->bytecode_ready = -1;
- size->cvt_ready = -1;
- }
-
-
- /* Initialize bytecode-related fields in the size object. */
- /* We do this only if bytecode interpretation is really needed. */
- static FT_Error
- tt_size_init_bytecode( FT_Size ftsize,
- FT_Bool pedantic )
- {
- FT_Error error;
- TT_Size size = (TT_Size)ftsize;
- TT_Face face = (TT_Face)ftsize->face;
- FT_Memory memory = face->root.memory;
-
- FT_UShort n_twilight;
- TT_MaxProfile* maxp = &face->max_profile;
-
-
- /* clean up bytecode related data */
- FT_FREE( size->function_defs );
- FT_FREE( size->instruction_defs );
- FT_FREE( size->cvt );
- FT_FREE( size->storage );
-
- if ( size->context )
- TT_Done_Context( size->context );
- tt_glyphzone_done( &size->twilight );
-
- size->bytecode_ready = -1;
- size->cvt_ready = -1;
-
- size->context = TT_New_Context( (TT_Driver)face->root.driver );
-
- size->max_function_defs = maxp->maxFunctionDefs;
- size->max_instruction_defs = maxp->maxInstructionDefs;
-
- size->num_function_defs = 0;
- size->num_instruction_defs = 0;
-
- size->max_func = 0;
- size->max_ins = 0;
-
- size->cvt_size = face->cvt_size;
- size->storage_size = maxp->maxStorage;
-
- /* Set default metrics */
- {
- TT_Size_Metrics* tt_metrics = &size->ttmetrics;
-
-
- tt_metrics->rotated = FALSE;
- tt_metrics->stretched = FALSE;
-
- /* set default engine compensation */
- tt_metrics->compensations[0] = 0; /* gray */
- tt_metrics->compensations[1] = 0; /* black */
- tt_metrics->compensations[2] = 0; /* white */
- tt_metrics->compensations[3] = 0; /* reserved */
- }
-
- /* allocate function defs, instruction defs, cvt, and storage area */
- if ( FT_NEW_ARRAY( size->function_defs, size->max_function_defs ) ||
- FT_NEW_ARRAY( size->instruction_defs, size->max_instruction_defs ) ||
- FT_NEW_ARRAY( size->cvt, size->cvt_size ) ||
- FT_NEW_ARRAY( size->storage, size->storage_size ) )
- goto Exit;
-
- /* reserve twilight zone */
- n_twilight = maxp->maxTwilightPoints;
-
- /* there are 4 phantom points (do we need this?) */
- n_twilight += 4;
-
- error = tt_glyphzone_new( memory, n_twilight, 0, &size->twilight );
- if ( error )
- goto Exit;
-
- size->twilight.n_points = n_twilight;
-
- size->GS = tt_default_graphics_state;
-
- /* set `face->interpreter' according to the debug hook present */
- {
- FT_Library library = face->root.driver->root.library;
-
-
- face->interpreter = (TT_Interpreter)
- library->debug_hooks[FT_DEBUG_HOOK_TRUETYPE];
- if ( !face->interpreter )
- face->interpreter = (TT_Interpreter)TT_RunIns;
- }
-
- /* Fine, now run the font program! */
-
- /* In case of an error while executing `fpgm', we intentionally don't */
- /* clean up immediately – bugs in the `fpgm' are so fundamental that */
- /* all following hinting calls should fail. Additionally, `fpgm' is */
- /* to be executed just once; calling it again is completely useless */
- /* and might even lead to extremely slow behaviour if it is malformed */
- /* (containing an infinite loop, for example). */
- error = tt_size_run_fpgm( size, pedantic );
- return error;
-
- Exit:
- if ( error )
- tt_size_done_bytecode( ftsize );
-
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- tt_size_ready_bytecode( TT_Size size,
- FT_Bool pedantic )
- {
- FT_Error error = FT_Err_Ok;
-
-
- if ( size->bytecode_ready < 0 )
- error = tt_size_init_bytecode( (FT_Size)size, pedantic );
- else
- error = size->bytecode_ready;
-
- if ( error )
- goto Exit;
-
- /* rescale CVT when needed */
- if ( size->cvt_ready < 0 )
- {
- FT_UInt i;
- TT_Face face = (TT_Face)size->root.face;
-
-
- /* Scale the cvt values to the new ppem. */
- /* We use by default the y ppem to scale the CVT. */
- for ( i = 0; i < size->cvt_size; i++ )
- size->cvt[i] = FT_MulFix( face->cvt[i], size->ttmetrics.scale );
-
- /* all twilight points are originally zero */
- for ( i = 0; i < (FT_UInt)size->twilight.n_points; i++ )
- {
- size->twilight.org[i].x = 0;
- size->twilight.org[i].y = 0;
- size->twilight.cur[i].x = 0;
- size->twilight.cur[i].y = 0;
- }
-
- /* clear storage area */
- for ( i = 0; i < (FT_UInt)size->storage_size; i++ )
- size->storage[i] = 0;
-
- size->GS = tt_default_graphics_state;
-
- error = tt_size_run_prep( size, pedantic );
- }
- else
- error = size->cvt_ready;
-
- Exit:
- return error;
- }
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_size_init */
- /* */
- /* <Description> */
- /* Initialize a new TrueType size object. */
- /* */
- /* <InOut> */
- /* size :: A handle to the size object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_size_init( FT_Size ttsize ) /* TT_Size */
- {
- TT_Size size = (TT_Size)ttsize;
- FT_Error error = FT_Err_Ok;
-
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- size->bytecode_ready = -1;
- size->cvt_ready = -1;
-#endif
-
- size->ttmetrics.valid = FALSE;
- size->strike_index = 0xFFFFFFFFUL;
-
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_size_done */
- /* */
- /* <Description> */
- /* The TrueType size object finalizer. */
- /* */
- /* <Input> */
- /* size :: A handle to the target size object. */
- /* */
- FT_LOCAL_DEF( void )
- tt_size_done( FT_Size ttsize ) /* TT_Size */
- {
- TT_Size size = (TT_Size)ttsize;
-
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- tt_size_done_bytecode( ttsize );
-#endif
-
- size->ttmetrics.valid = FALSE;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_size_reset */
- /* */
- /* <Description> */
- /* Reset a TrueType size when resolutions and character dimensions */
- /* have been changed. */
- /* */
- /* <Input> */
- /* size :: A handle to the target size object. */
- /* */
- /* only_height :: Only recompute ascender, descender, and height. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_size_reset( TT_Size size,
- FT_Bool only_height )
- {
- TT_Face face;
- FT_Size_Metrics* size_metrics;
-
-
- face = (TT_Face)size->root.face;
-
- /* nothing to do for CFF2 */
- if ( face->is_cff2 )
- return FT_Err_Ok;
-
- size->ttmetrics.valid = FALSE;
-
- size_metrics = &size->hinted_metrics;
-
- /* copy the result from base layer */
- *size_metrics = size->root.metrics;
-
- if ( size_metrics->x_ppem < 1 || size_metrics->y_ppem < 1 )
- return FT_THROW( Invalid_PPem );
-
- /* This bit flag, if set, indicates that the ppems must be */
- /* rounded to integers. Nearly all TrueType fonts have this bit */
- /* set, as hinting won't work really well otherwise. */
- /* */
- if ( face->header.Flags & 8 )
- {
- /* the TT spec always asks for ROUND, not FLOOR or CEIL */
- size_metrics->ascender = FT_PIX_ROUND(
- FT_MulFix( face->root.ascender,
- size_metrics->y_scale ) );
- size_metrics->descender = FT_PIX_ROUND(
- FT_MulFix( face->root.descender,
- size_metrics->y_scale ) );
- size_metrics->height = FT_PIX_ROUND(
- FT_MulFix( face->root.height,
- size_metrics->y_scale ) );
- }
-
- size->ttmetrics.valid = TRUE;
-
- if ( only_height )
- return FT_Err_Ok;
-
- if ( face->header.Flags & 8 )
- {
- /* base scaling values on integer ppem values, */
- /* as mandated by the TrueType specification */
- size_metrics->x_scale = FT_DivFix( size_metrics->x_ppem << 6,
- face->root.units_per_EM );
- size_metrics->y_scale = FT_DivFix( size_metrics->y_ppem << 6,
- face->root.units_per_EM );
-
- size_metrics->max_advance = FT_PIX_ROUND(
- FT_MulFix( face->root.max_advance_width,
- size_metrics->x_scale ) );
- }
-
- /* compute new transformation */
- if ( size_metrics->x_ppem >= size_metrics->y_ppem )
- {
- size->ttmetrics.scale = size_metrics->x_scale;
- size->ttmetrics.ppem = size_metrics->x_ppem;
- size->ttmetrics.x_ratio = 0x10000L;
- size->ttmetrics.y_ratio = FT_DivFix( size_metrics->y_ppem,
- size_metrics->x_ppem );
- }
- else
- {
- size->ttmetrics.scale = size_metrics->y_scale;
- size->ttmetrics.ppem = size_metrics->y_ppem;
- size->ttmetrics.x_ratio = FT_DivFix( size_metrics->x_ppem,
- size_metrics->y_ppem );
- size->ttmetrics.y_ratio = 0x10000L;
- }
-
- size->metrics = size_metrics;
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- size->cvt_ready = -1;
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_driver_init */
- /* */
- /* <Description> */
- /* Initialize a given TrueType driver object. */
- /* */
- /* <Input> */
- /* driver :: A handle to the target driver object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_driver_init( FT_Module ttdriver ) /* TT_Driver */
- {
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- TT_Driver driver = (TT_Driver)ttdriver;
-
- driver->interpreter_version = TT_INTERPRETER_VERSION_35;
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- driver->interpreter_version = TT_INTERPRETER_VERSION_38;
-#endif
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- driver->interpreter_version = TT_INTERPRETER_VERSION_40;
-#endif
-
-#else /* !TT_USE_BYTECODE_INTERPRETER */
-
- FT_UNUSED( ttdriver );
-
-#endif /* !TT_USE_BYTECODE_INTERPRETER */
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_driver_done */
- /* */
- /* <Description> */
- /* Finalize a given TrueType driver. */
- /* */
- /* <Input> */
- /* driver :: A handle to the target TrueType driver. */
- /* */
- FT_LOCAL_DEF( void )
- tt_driver_done( FT_Module ttdriver ) /* TT_Driver */
- {
- FT_UNUSED( ttdriver );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_slot_init */
- /* */
- /* <Description> */
- /* Initialize a new slot object. */
- /* */
- /* <InOut> */
- /* slot :: A handle to the slot object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_slot_init( FT_GlyphSlot slot )
- {
- return FT_GlyphLoader_CreateExtra( slot->internal->loader );
- }
-
-
-/* END */
diff --git a/src/truetype/ttobjs.h b/src/truetype/ttobjs.h
deleted file mode 100644
index cdacee75e..000000000
--- a/src/truetype/ttobjs.h
+++ /dev/null
@@ -1,425 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttobjs.h */
-/* */
-/* Objects manager (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTOBJS_H_
-#define TTOBJS_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* TT_Driver */
- /* */
- /* <Description> */
- /* A handle to a TrueType driver object. */
- /* */
- typedef struct TT_DriverRec_* TT_Driver;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* TT_GlyphSlot */
- /* */
- /* <Description> */
- /* A handle to a TrueType glyph slot object. */
- /* */
- /* <Note> */
- /* This is a direct typedef of FT_GlyphSlot, as there is nothing */
- /* specific about the TrueType glyph slot. */
- /* */
- typedef FT_GlyphSlot TT_GlyphSlot;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_GraphicsState */
- /* */
- /* <Description> */
- /* The TrueType graphics state used during bytecode interpretation. */
- /* */
- typedef struct TT_GraphicsState_
- {
- FT_UShort rp0;
- FT_UShort rp1;
- FT_UShort rp2;
-
- FT_UnitVector dualVector;
- FT_UnitVector projVector;
- FT_UnitVector freeVector;
-
- FT_Long loop;
- FT_F26Dot6 minimum_distance;
- FT_Int round_state;
-
- FT_Bool auto_flip;
- FT_F26Dot6 control_value_cutin;
- FT_F26Dot6 single_width_cutin;
- FT_F26Dot6 single_width_value;
- FT_UShort delta_base;
- FT_UShort delta_shift;
-
- FT_Byte instruct_control;
- /* According to Greg Hitchcock from Microsoft, the `scan_control' */
- /* variable as documented in the TrueType specification is a 32-bit */
- /* integer; the high-word part holds the SCANTYPE value, the low-word */
- /* part the SCANCTRL value. We separate it into two fields. */
- FT_Bool scan_control;
- FT_Int scan_type;
-
- FT_UShort gep0;
- FT_UShort gep1;
- FT_UShort gep2;
-
- } TT_GraphicsState;
-
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- FT_LOCAL( void )
- tt_glyphzone_done( TT_GlyphZone zone );
-
- FT_LOCAL( FT_Error )
- tt_glyphzone_new( FT_Memory memory,
- FT_UShort maxPoints,
- FT_Short maxContours,
- TT_GlyphZone zone );
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
-
-
- /*************************************************************************/
- /* */
- /* EXECUTION SUBTABLES */
- /* */
- /* These sub-tables relate to instruction execution. */
- /* */
- /*************************************************************************/
-
-
-#define TT_MAX_CODE_RANGES 3
-
-
- /*************************************************************************/
- /* */
- /* There can only be 3 active code ranges at once: */
- /* - the Font Program */
- /* - the CVT Program */
- /* - a glyph's instructions set */
- /* */
- typedef enum TT_CodeRange_Tag_
- {
- tt_coderange_none = 0,
- tt_coderange_font,
- tt_coderange_cvt,
- tt_coderange_glyph
-
- } TT_CodeRange_Tag;
-
-
- typedef struct TT_CodeRange_
- {
- FT_Byte* base;
- FT_Long size;
-
- } TT_CodeRange;
-
- typedef TT_CodeRange TT_CodeRangeTable[TT_MAX_CODE_RANGES];
-
-
- /*************************************************************************/
- /* */
- /* Defines a function/instruction definition record. */
- /* */
- typedef struct TT_DefRecord_
- {
- FT_Int range; /* in which code range is it located? */
- FT_Long start; /* where does it start? */
- FT_Long end; /* where does it end? */
- FT_UInt opc; /* function #, or instruction code */
- FT_Bool active; /* is it active? */
- FT_Bool inline_delta; /* is function that defines inline delta? */
- FT_ULong sph_fdef_flags; /* flags to identify special functions */
-
- } TT_DefRecord, *TT_DefArray;
-
-
- /*************************************************************************/
- /* */
- /* Subglyph transformation record. */
- /* */
- typedef struct TT_Transform_
- {
- FT_Fixed xx, xy; /* transformation matrix coefficients */
- FT_Fixed yx, yy;
- FT_F26Dot6 ox, oy; /* offsets */
-
- } TT_Transform;
-
-
- /*************************************************************************/
- /* */
- /* A note regarding non-squared pixels: */
- /* */
- /* (This text will probably go into some docs at some time; for now, it */
- /* is kept here to explain some definitions in the TT_Size_Metrics */
- /* record). */
- /* */
- /* The CVT is a one-dimensional array containing values that control */
- /* certain important characteristics in a font, like the height of all */
- /* capitals, all lowercase letter, default spacing or stem width/height. */
- /* */
- /* These values are found in FUnits in the font file, and must be scaled */
- /* to pixel coordinates before being used by the CVT and glyph programs. */
- /* Unfortunately, when using distinct x and y resolutions (or distinct x */
- /* and y pointsizes), there are two possible scalings. */
- /* */
- /* A first try was to implement a `lazy' scheme where all values were */
- /* scaled when first used. However, while some values are always used */
- /* in the same direction, some others are used under many different */
- /* circumstances and orientations. */
- /* */
- /* I have found a simpler way to do the same, and it even seems to work */
- /* in most of the cases: */
- /* */
- /* - All CVT values are scaled to the maximum ppem size. */
- /* */
- /* - When performing a read or write in the CVT, a ratio factor is used */
- /* to perform adequate scaling. Example: */
- /* */
- /* x_ppem = 14 */
- /* y_ppem = 10 */
- /* */
- /* We choose ppem = x_ppem = 14 as the CVT scaling size. All cvt */
- /* entries are scaled to it. */
- /* */
- /* x_ratio = 1.0 */
- /* y_ratio = y_ppem/ppem (< 1.0) */
- /* */
- /* We compute the current ratio like: */
- /* */
- /* - If projVector is horizontal, */
- /* ratio = x_ratio = 1.0 */
- /* */
- /* - if projVector is vertical, */
- /* ratio = y_ratio */
- /* */
- /* - else, */
- /* ratio = sqrt( (proj.x * x_ratio) ^ 2 + (proj.y * y_ratio) ^ 2 ) */
- /* */
- /* Reading a cvt value returns */
- /* ratio * cvt[index] */
- /* */
- /* Writing a cvt value in pixels: */
- /* cvt[index] / ratio */
- /* */
- /* The current ppem is simply */
- /* ratio * ppem */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Metrics used by the TrueType size and context objects. */
- /* */
- typedef struct TT_Size_Metrics_
- {
- /* for non-square pixels */
- FT_Long x_ratio;
- FT_Long y_ratio;
-
- FT_UShort ppem; /* maximum ppem size */
- FT_Long ratio; /* current ratio */
- FT_Fixed scale;
-
- FT_F26Dot6 compensations[4]; /* device-specific compensations */
-
- FT_Bool valid;
-
- FT_Bool rotated; /* `is the glyph rotated?'-flag */
- FT_Bool stretched; /* `is the glyph stretched?'-flag */
-
- } TT_Size_Metrics;
-
-
- /*************************************************************************/
- /* */
- /* TrueType size class. */
- /* */
- typedef struct TT_SizeRec_
- {
- FT_SizeRec root;
-
- /* we have our own copy of metrics so that we can modify */
- /* it without affecting auto-hinting (when used) */
- FT_Size_Metrics* metrics; /* for the current rendering mode */
- FT_Size_Metrics hinted_metrics; /* for the hinted rendering mode */
-
- TT_Size_Metrics ttmetrics;
-
- FT_ULong strike_index; /* 0xFFFFFFFF to indicate invalid */
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- FT_Long point_size; /* for the `MPS' bytecode instruction */
-
- FT_UInt num_function_defs; /* number of function definitions */
- FT_UInt max_function_defs;
- TT_DefArray function_defs; /* table of function definitions */
-
- FT_UInt num_instruction_defs; /* number of ins. definitions */
- FT_UInt max_instruction_defs;
- TT_DefArray instruction_defs; /* table of ins. definitions */
-
- FT_UInt max_func;
- FT_UInt max_ins;
-
- TT_CodeRangeTable codeRangeTable;
-
- TT_GraphicsState GS;
-
- FT_ULong cvt_size; /* the scaled control value table */
- FT_Long* cvt;
-
- FT_UShort storage_size; /* The storage area is now part of */
- FT_Long* storage; /* the instance */
-
- TT_GlyphZoneRec twilight; /* The instance's twilight zone */
-
- TT_ExecContext context;
-
- /* if negative, `fpgm' (resp. `prep'), wasn't executed yet; */
- /* otherwise it is the returned error code */
- FT_Error bytecode_ready;
- FT_Error cvt_ready;
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
- } TT_SizeRec;
-
-
- /*************************************************************************/
- /* */
- /* TrueType driver class. */
- /* */
- typedef struct TT_DriverRec_
- {
- FT_DriverRec root;
-
- TT_GlyphZoneRec zone; /* glyph loader points zone */
-
- FT_UInt interpreter_version;
-
- } TT_DriverRec;
-
-
- /* Note: All of the functions below (except tt_size_reset()) are used */
- /* as function pointers in a FT_Driver_ClassRec. Therefore their */
- /* parameters are of types FT_Face, FT_Size, etc., rather than TT_Face, */
- /* TT_Size, etc., so that the compiler can confirm that the types and */
- /* number of parameters are correct. In all cases the FT_xxx types are */
- /* cast to their TT_xxx counterparts inside the functions since FreeType */
- /* will always use the TT driver to create them. */
-
-
- /*************************************************************************/
- /* */
- /* Face functions */
- /* */
- FT_LOCAL( FT_Error )
- tt_face_init( FT_Stream stream,
- FT_Face ttface, /* TT_Face */
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params );
-
- FT_LOCAL( void )
- tt_face_done( FT_Face ttface ); /* TT_Face */
-
-
- /*************************************************************************/
- /* */
- /* Size functions */
- /* */
- FT_LOCAL( FT_Error )
- tt_size_init( FT_Size ttsize ); /* TT_Size */
-
- FT_LOCAL( void )
- tt_size_done( FT_Size ttsize ); /* TT_Size */
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- FT_LOCAL( FT_Error )
- tt_size_run_fpgm( TT_Size size,
- FT_Bool pedantic );
-
- FT_LOCAL( FT_Error )
- tt_size_run_prep( TT_Size size,
- FT_Bool pedantic );
-
- FT_LOCAL( FT_Error )
- tt_size_ready_bytecode( TT_Size size,
- FT_Bool pedantic );
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
- FT_LOCAL( FT_Error )
- tt_size_reset( TT_Size size,
- FT_Bool only_height );
-
-
- /*************************************************************************/
- /* */
- /* Driver functions */
- /* */
- FT_LOCAL( FT_Error )
- tt_driver_init( FT_Module ttdriver ); /* TT_Driver */
-
- FT_LOCAL( void )
- tt_driver_done( FT_Module ttdriver ); /* TT_Driver */
-
-
- /*************************************************************************/
- /* */
- /* Slot functions */
- /* */
- FT_LOCAL( FT_Error )
- tt_slot_init( FT_GlyphSlot slot );
-
-
- /* auxiliary */
-#define IS_HINTED( flags ) ( ( flags & FT_LOAD_NO_HINTING ) == 0 )
-
-
-FT_END_HEADER
-
-#endif /* TTOBJS_H_ */
-
-
-/* END */
diff --git a/src/truetype/ttpic.c b/src/truetype/ttpic.c
deleted file mode 100644
index 66bd7e193..000000000
--- a/src/truetype/ttpic.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttpic.c */
-/* */
-/* The FreeType position independent code services for truetype module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "ttpic.h"
-#include "tterrors.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from ttdriver.c */
- FT_Error
- FT_Create_Class_tt_services( FT_Library library,
- FT_ServiceDescRec** output_class );
- void
- FT_Destroy_Class_tt_services( FT_Library library,
- FT_ServiceDescRec* clazz );
- void
- FT_Init_Class_tt_service_gx_multi_masters(
- FT_Service_MultiMastersRec* sv_mm );
- void
- FT_Init_Class_tt_service_truetype_glyf(
- FT_Service_TTGlyfRec* sv_ttglyf );
-
-
- void
- tt_driver_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->truetype )
- {
- TTModulePIC* container = (TTModulePIC*)pic_container->truetype;
-
-
- if ( container->tt_services )
- FT_Destroy_Class_tt_services( library, container->tt_services );
- container->tt_services = NULL;
- FT_FREE( container );
- pic_container->truetype = NULL;
- }
- }
-
-
- FT_Error
- tt_driver_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- TTModulePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->truetype = container;
-
- /* initialize pointer table - this is how the module usually */
- /* expects this data */
- error = FT_Create_Class_tt_services( library,
- &container->tt_services );
- if ( error )
- goto Exit;
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_Init_Class_tt_service_gx_multi_masters(
- &container->tt_service_gx_multi_masters );
-#endif
- FT_Init_Class_tt_service_truetype_glyf(
- &container->tt_service_truetype_glyf );
-
- Exit:
- if ( error )
- tt_driver_class_pic_free( library );
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/truetype/ttpic.h b/src/truetype/ttpic.h
deleted file mode 100644
index 1410cd73c..000000000
--- a/src/truetype/ttpic.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttpic.h */
-/* */
-/* The FreeType position independent code services for truetype module. */
-/* */
-/* Copyright 2009-2017 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTPIC_H_
-#define TTPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define TT_SERVICES_GET tt_services
-#define TT_SERVICE_GX_MULTI_MASTERS_GET tt_service_gx_multi_masters
-#define TT_SERVICE_METRICS_VARIATIONS_GET tt_service_metrics_variations
-#define TT_SERVICE_TRUETYPE_GLYF_GET tt_service_truetype_glyf
-#define TT_SERVICE_PROPERTIES_GET tt_service_properties
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#include FT_MULTIPLE_MASTERS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_METRICS_VARIATIONS_H
-#include FT_SERVICE_TRUETYPE_GLYF_H
-#include FT_SERVICE_PROPERTIES_H
-
-
-FT_BEGIN_HEADER
-
- typedef struct TTModulePIC_
- {
- FT_ServiceDescRec* tt_services;
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_Service_MultiMastersRec tt_service_gx_multi_masters;
- FT_Service_MetricsVariationsRec tt_service_metrics_variations;
-#endif
- FT_Service_TTGlyfRec tt_service_truetype_glyf;
- FT_Service_PropertiesRec tt_service_properties;
-
- } TTModulePIC;
-
-
-#define GET_PIC( lib ) \
- ( (TTModulePIC*)((lib)->pic_container.truetype) )
-#define TT_SERVICES_GET \
- ( GET_PIC( library )->tt_services )
-#define TT_SERVICE_METRICS_VARIATIONS_GET \
- ( GET_PIC( library )->tt_service_metrics_variations )
-#define TT_SERVICE_GX_MULTI_MASTERS_GET \
- ( GET_PIC( library )->tt_service_gx_multi_masters )
-#define TT_SERVICE_TRUETYPE_GLYF_GET \
- ( GET_PIC( library )->tt_service_truetype_glyf )
-#define TT_SERVICE_PROPERTIES_GET \
- ( GET_PIC( library )->tt_service_properties )
-
-
- /* see ttpic.c for the implementation */
- void
- tt_driver_class_pic_free( FT_Library library );
-
- FT_Error
- tt_driver_class_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* TTPIC_H_ */
-
-
-/* END */
diff --git a/src/truetype/ttpload.c b/src/truetype/ttpload.c
deleted file mode 100644
index 70ac15da4..000000000
--- a/src/truetype/ttpload.c
+++ /dev/null
@@ -1,642 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttpload.c */
-/* */
-/* TrueType-specific tables loader (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-
-#include "ttpload.h"
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include "ttgxvar.h"
-#endif
-
-#include "tterrors.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttpload
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_loca */
- /* */
- /* <Description> */
- /* Load the locations table. */
- /* */
- /* <InOut> */
- /* face :: A handle to the target face object. */
- /* */
- /* <Input> */
- /* stream :: The input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_loca( TT_Face face,
- FT_Stream stream )
- {
- FT_Error error;
- FT_ULong table_len;
- FT_Int shift;
-
-
- /* we need the size of the `glyf' table for malformed `loca' tables */
- error = face->goto_table( face, TTAG_glyf, stream, &face->glyf_len );
-
- /* it is possible that a font doesn't have a glyf table at all */
- /* or its size is zero */
- if ( FT_ERR_EQ( error, Table_Missing ) )
- {
- face->glyf_len = 0;
- face->glyf_offset = 0;
- }
- else if ( error )
- goto Exit;
- else
- {
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- if ( face->root.internal->incremental_interface )
- face->glyf_offset = 0;
- else
-#endif
- face->glyf_offset = FT_STREAM_POS();
- }
-
- FT_TRACE2(( "Locations " ));
- error = face->goto_table( face, TTAG_loca, stream, &table_len );
- if ( error )
- {
- error = FT_THROW( Locations_Missing );
- goto Exit;
- }
-
- if ( face->header.Index_To_Loc_Format != 0 )
- {
- shift = 2;
-
- if ( table_len >= 0x40000L )
- {
- FT_TRACE2(( "table too large\n" ));
- table_len = 0x3FFFFL;
- }
- face->num_locations = table_len >> shift;
- }
- else
- {
- shift = 1;
-
- if ( table_len >= 0x20000L )
- {
- FT_TRACE2(( "table too large\n" ));
- table_len = 0x1FFFFL;
- }
- face->num_locations = table_len >> shift;
- }
-
- if ( face->num_locations != (FT_ULong)face->root.num_glyphs + 1 )
- {
- FT_TRACE2(( "glyph count mismatch! loca: %d, maxp: %d\n",
- face->num_locations - 1, face->root.num_glyphs ));
-
- /* we only handle the case where `maxp' gives a larger value */
- if ( face->num_locations <= (FT_ULong)face->root.num_glyphs )
- {
- FT_ULong new_loca_len =
- ( (FT_ULong)face->root.num_glyphs + 1 ) << shift;
-
- TT_Table entry = face->dir_tables;
- TT_Table limit = entry + face->num_tables;
-
- FT_Long pos = (FT_Long)FT_STREAM_POS();
- FT_Long dist = 0x7FFFFFFFL;
- FT_Bool found = 0;
-
-
- /* compute the distance to next table in font file */
- for ( ; entry < limit; entry++ )
- {
- FT_Long diff = (FT_Long)entry->Offset - pos;
-
-
- if ( diff > 0 && diff < dist )
- {
- dist = diff;
- found = 1;
- }
- }
-
- if ( !found )
- {
- /* `loca' is the last table */
- dist = (FT_Long)stream->size - pos;
- }
-
- if ( new_loca_len <= (FT_ULong)dist )
- {
- face->num_locations = (FT_ULong)face->root.num_glyphs + 1;
- table_len = new_loca_len;
-
- FT_TRACE2(( "adjusting num_locations to %d\n",
- face->num_locations ));
- }
- else
- {
- face->root.num_glyphs = face->num_locations
- ? (FT_Long)face->num_locations - 1 : 0;
-
- FT_TRACE2(( "adjusting num_glyphs to %d\n",
- face->root.num_glyphs ));
- }
- }
- }
-
- /*
- * Extract the frame. We don't need to decompress it since
- * we are able to parse it directly.
- */
- if ( FT_FRAME_EXTRACT( table_len, face->glyph_locations ) )
- goto Exit;
-
- FT_TRACE2(( "loaded\n" ));
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_ULong )
- tt_face_get_location( TT_Face face,
- FT_UInt gindex,
- FT_UInt *asize )
- {
- FT_ULong pos1, pos2;
- FT_Byte* p;
- FT_Byte* p_limit;
-
-
- pos1 = pos2 = 0;
-
- if ( gindex < face->num_locations )
- {
- if ( face->header.Index_To_Loc_Format != 0 )
- {
- p = face->glyph_locations + gindex * 4;
- p_limit = face->glyph_locations + face->num_locations * 4;
-
- pos1 = FT_NEXT_ULONG( p );
- pos2 = pos1;
-
- if ( p + 4 <= p_limit )
- pos2 = FT_NEXT_ULONG( p );
- }
- else
- {
- p = face->glyph_locations + gindex * 2;
- p_limit = face->glyph_locations + face->num_locations * 2;
-
- pos1 = FT_NEXT_USHORT( p );
- pos2 = pos1;
-
- if ( p + 2 <= p_limit )
- pos2 = FT_NEXT_USHORT( p );
-
- pos1 <<= 1;
- pos2 <<= 1;
- }
- }
-
- /* Check broken location data. */
- if ( pos1 > face->glyf_len )
- {
- FT_TRACE1(( "tt_face_get_location:"
- " too large offset (0x%08lx) found for glyph index %ld,\n"
- " "
- " exceeding the end of `glyf' table (0x%08lx)\n",
- pos1, gindex, face->glyf_len ));
- *asize = 0;
- return 0;
- }
-
- if ( pos2 > face->glyf_len )
- {
- /* We try to sanitize the last `loca' entry. */
- if ( gindex == face->num_locations - 1 )
- {
- FT_TRACE1(( "tt_face_get_location:"
- " too large offset (0x%08lx) found for glyph index %ld,\n"
- " "
- " truncating at the end of `glyf' table (0x%08lx)\n",
- pos2, gindex + 1, face->glyf_len ));
- pos2 = face->glyf_len;
- }
- else
- {
- FT_TRACE1(( "tt_face_get_location:"
- " too large offset (0x%08lx) found for glyph index %ld,\n"
- " "
- " exceeding the end of `glyf' table (0x%08lx)\n",
- pos2, gindex + 1, face->glyf_len ));
- *asize = 0;
- return 0;
- }
- }
-
- /* The `loca' table must be ordered; it refers to the length of */
- /* an entry as the difference between the current and the next */
- /* position. However, there do exist (malformed) fonts which */
- /* don't obey this rule, so we are only able to provide an */
- /* upper bound for the size. */
- /* */
- /* We get (intentionally) a wrong, non-zero result in case the */
- /* `glyf' table is missing. */
- if ( pos2 >= pos1 )
- *asize = (FT_UInt)( pos2 - pos1 );
- else
- *asize = (FT_UInt)( face->glyf_len - pos1 );
-
- return pos1;
- }
-
-
- FT_LOCAL_DEF( void )
- tt_face_done_loca( TT_Face face )
- {
- FT_Stream stream = face->root.stream;
-
-
- FT_FRAME_RELEASE( face->glyph_locations );
- face->num_locations = 0;
- }
-
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_cvt */
- /* */
- /* <Description> */
- /* Load the control value table into a face object. */
- /* */
- /* <InOut> */
- /* face :: A handle to the target face object. */
- /* */
- /* <Input> */
- /* stream :: A handle to the input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_cvt( TT_Face face,
- FT_Stream stream )
- {
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- FT_Error error;
- FT_Memory memory = stream->memory;
- FT_ULong table_len;
-
-
- FT_TRACE2(( "CVT " ));
-
- error = face->goto_table( face, TTAG_cvt, stream, &table_len );
- if ( error )
- {
- FT_TRACE2(( "is missing\n" ));
-
- face->cvt_size = 0;
- face->cvt = NULL;
- error = FT_Err_Ok;
-
- goto Exit;
- }
-
- face->cvt_size = table_len / 2;
-
- if ( FT_NEW_ARRAY( face->cvt, face->cvt_size ) )
- goto Exit;
-
- if ( FT_FRAME_ENTER( face->cvt_size * 2L ) )
- goto Exit;
-
- {
- FT_Short* cur = face->cvt;
- FT_Short* limit = cur + face->cvt_size;
-
-
- for ( ; cur < limit; cur++ )
- *cur = FT_GET_SHORT();
- }
-
- FT_FRAME_EXIT();
- FT_TRACE2(( "loaded\n" ));
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- if ( face->doblend )
- error = tt_face_vary_cvt( face, stream );
-#endif
-
- Exit:
- return error;
-
-#else /* !TT_USE_BYTECODE_INTERPRETER */
-
- FT_UNUSED( face );
- FT_UNUSED( stream );
-
- return FT_Err_Ok;
-
-#endif
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_fpgm */
- /* */
- /* <Description> */
- /* Load the font program. */
- /* */
- /* <InOut> */
- /* face :: A handle to the target face object. */
- /* */
- /* <Input> */
- /* stream :: A handle to the input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_fpgm( TT_Face face,
- FT_Stream stream )
- {
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- FT_Error error;
- FT_ULong table_len;
-
-
- FT_TRACE2(( "Font program " ));
-
- /* The font program is optional */
- error = face->goto_table( face, TTAG_fpgm, stream, &table_len );
- if ( error )
- {
- face->font_program = NULL;
- face->font_program_size = 0;
- error = FT_Err_Ok;
-
- FT_TRACE2(( "is missing\n" ));
- }
- else
- {
- face->font_program_size = table_len;
- if ( FT_FRAME_EXTRACT( table_len, face->font_program ) )
- goto Exit;
-
- FT_TRACE2(( "loaded, %12d bytes\n", face->font_program_size ));
- }
-
- Exit:
- return error;
-
-#else /* !TT_USE_BYTECODE_INTERPRETER */
-
- FT_UNUSED( face );
- FT_UNUSED( stream );
-
- return FT_Err_Ok;
-
-#endif
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_prep */
- /* */
- /* <Description> */
- /* Load the cvt program. */
- /* */
- /* <InOut> */
- /* face :: A handle to the target face object. */
- /* */
- /* <Input> */
- /* stream :: A handle to the input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_prep( TT_Face face,
- FT_Stream stream )
- {
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- FT_Error error;
- FT_ULong table_len;
-
-
- FT_TRACE2(( "Prep program " ));
-
- error = face->goto_table( face, TTAG_prep, stream, &table_len );
- if ( error )
- {
- face->cvt_program = NULL;
- face->cvt_program_size = 0;
- error = FT_Err_Ok;
-
- FT_TRACE2(( "is missing\n" ));
- }
- else
- {
- face->cvt_program_size = table_len;
- if ( FT_FRAME_EXTRACT( table_len, face->cvt_program ) )
- goto Exit;
-
- FT_TRACE2(( "loaded, %12d bytes\n", face->cvt_program_size ));
- }
-
- Exit:
- return error;
-
-#else /* !TT_USE_BYTECODE_INTERPRETER */
-
- FT_UNUSED( face );
- FT_UNUSED( stream );
-
- return FT_Err_Ok;
-
-#endif
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_hdmx */
- /* */
- /* <Description> */
- /* Load the `hdmx' table into the face object. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: A handle to the input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
-
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_hdmx( TT_Face face,
- FT_Stream stream )
- {
- FT_Error error;
- FT_Memory memory = stream->memory;
- FT_UInt nn, num_records;
- FT_ULong table_size, record_size;
- FT_Byte* p;
- FT_Byte* limit;
-
-
- /* this table is optional */
- error = face->goto_table( face, TTAG_hdmx, stream, &table_size );
- if ( error || table_size < 8 )
- return FT_Err_Ok;
-
- if ( FT_FRAME_EXTRACT( table_size, face->hdmx_table ) )
- goto Exit;
-
- p = face->hdmx_table;
- limit = p + table_size;
-
- /* Given that `hdmx' tables are losing its importance (for example, */
- /* variation fonts introduced in OpenType 1.8 must not have this */
- /* table) we no longer test for a correct `version' field. */
- p += 2;
- num_records = FT_NEXT_USHORT( p );
- record_size = FT_NEXT_ULONG( p );
-
- /* The maximum number of bytes in an hdmx device record is the */
- /* maximum number of glyphs + 2; this is 0xFFFF + 2, thus */
- /* explaining why `record_size' is a long (which we read as */
- /* unsigned long for convenience). In practice, two bytes are */
- /* sufficient to hold the size value. */
- /* */
- /* There are at least two fonts, HANNOM-A and HANNOM-B version */
- /* 2.0 (2005), which get this wrong: The upper two bytes of */
- /* the size value are set to 0xFF instead of 0x00. We catch */
- /* and fix this. */
-
- if ( record_size >= 0xFFFF0000UL )
- record_size &= 0xFFFFU;
-
- /* The limit for `num_records' is a heuristic value. */
- if ( num_records > 255 ||
- ( num_records > 0 &&
- ( record_size > 0x10001L ||
- record_size < 4 ) ) )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- if ( FT_NEW_ARRAY( face->hdmx_record_sizes, num_records ) )
- goto Fail;
-
- for ( nn = 0; nn < num_records; nn++ )
- {
- if ( p + record_size > limit )
- break;
-
- face->hdmx_record_sizes[nn] = p[0];
- p += record_size;
- }
-
- face->hdmx_record_count = nn;
- face->hdmx_table_size = table_size;
- face->hdmx_record_size = record_size;
-
- Exit:
- return error;
-
- Fail:
- FT_FRAME_RELEASE( face->hdmx_table );
- face->hdmx_table_size = 0;
- goto Exit;
- }
-
-
- FT_LOCAL_DEF( void )
- tt_face_free_hdmx( TT_Face face )
- {
- FT_Stream stream = face->root.stream;
- FT_Memory memory = stream->memory;
-
-
- FT_FREE( face->hdmx_record_sizes );
- FT_FRAME_RELEASE( face->hdmx_table );
- }
-
-
- /*************************************************************************/
- /* */
- /* Return the advance width table for a given pixel size if it is found */
- /* in the font's `hdmx' table (if any). */
- /* */
- FT_LOCAL_DEF( FT_Byte* )
- tt_face_get_device_metrics( TT_Face face,
- FT_UInt ppem,
- FT_UInt gindex )
- {
- FT_UInt nn;
- FT_Byte* result = NULL;
- FT_ULong record_size = face->hdmx_record_size;
- FT_Byte* record = face->hdmx_table + 8;
-
-
- for ( nn = 0; nn < face->hdmx_record_count; nn++ )
- if ( face->hdmx_record_sizes[nn] == ppem )
- {
- gindex += 2;
- if ( gindex < record_size )
- result = record + nn * record_size + gindex;
- break;
- }
-
- return result;
- }
-
-
-/* END */
diff --git a/src/truetype/ttpload.h b/src/truetype/ttpload.h
deleted file mode 100644
index 79079f345..000000000
--- a/src/truetype/ttpload.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttpload.h */
-/* */
-/* TrueType-specific tables loader (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTPLOAD_H_
-#define TTPLOAD_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_loca( TT_Face face,
- FT_Stream stream );
-
- FT_LOCAL( FT_ULong )
- tt_face_get_location( TT_Face face,
- FT_UInt gindex,
- FT_UInt *asize );
-
- FT_LOCAL( void )
- tt_face_done_loca( TT_Face face );
-
- FT_LOCAL( FT_Error )
- tt_face_load_cvt( TT_Face face,
- FT_Stream stream );
-
- FT_LOCAL( FT_Error )
- tt_face_load_fpgm( TT_Face face,
- FT_Stream stream );
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_prep( TT_Face face,
- FT_Stream stream );
-
-
- FT_LOCAL( FT_Error )
- tt_face_load_hdmx( TT_Face face,
- FT_Stream stream );
-
-
- FT_LOCAL( void )
- tt_face_free_hdmx( TT_Face face );
-
-
- FT_LOCAL( FT_Byte* )
- tt_face_get_device_metrics( TT_Face face,
- FT_UInt ppem,
- FT_UInt gindex );
-
-FT_END_HEADER
-
-#endif /* TTPLOAD_H_ */
-
-
-/* END */
diff --git a/src/truetype/ttsubpix.c b/src/truetype/ttsubpix.c
deleted file mode 100644
index 1c8cf0110..000000000
--- a/src/truetype/ttsubpix.c
+++ /dev/null
@@ -1,1014 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttsubpix.c */
-/* */
-/* TrueType Subpixel Hinting. */
-/* */
-/* Copyright 2010-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_OUTLINE_H
-#include FT_TRUETYPE_DRIVER_H
-
-#include "ttsubpix.h"
-
-
-#if defined( TT_USE_BYTECODE_INTERPRETER ) && \
- defined( TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY )
-
- /*************************************************************************/
- /* */
- /* These rules affect how the TT Interpreter does hinting, with the */
- /* goal of doing subpixel hinting by (in general) ignoring x moves. */
- /* Some of these rules are fixes that go above and beyond the */
- /* stated techniques in the MS whitepaper on Cleartype, due to */
- /* artifacts in many glyphs. So, these rules make some glyphs render */
- /* better than they do in the MS rasterizer. */
- /* */
- /* "" string or 0 int/char indicates to apply to all glyphs. */
- /* "-" used as dummy placeholders, but any non-matching string works. */
- /* */
- /* Some of this could arguably be implemented in fontconfig, however: */
- /* */
- /* - Fontconfig can't set things on a glyph-by-glyph basis. */
- /* - The tweaks that happen here are very low-level, from an average */
- /* user's point of view and are best implemented in the hinter. */
- /* */
- /* The goal is to make the subpixel hinting techniques as generalized */
- /* as possible across all fonts to prevent the need for extra rules such */
- /* as these. */
- /* */
- /* The rule structure is designed so that entirely new rules can easily */
- /* be added when a new compatibility feature is discovered. */
- /* */
- /* The rule structures could also use some enhancement to handle ranges. */
- /* */
- /* ****************** WORK IN PROGRESS ******************* */
- /* */
-
- /* These are `classes' of fonts that can be grouped together and used in */
- /* rules below. A blank entry "" is required at the end of these! */
-#define FAMILY_CLASS_RULES_SIZE 7
-
- static const SPH_Font_Class FAMILY_CLASS_Rules
- [FAMILY_CLASS_RULES_SIZE] =
- {
- { "MS Legacy Fonts",
- { "Aharoni",
- "Andale Mono",
- "Andalus",
- "Angsana New",
- "AngsanaUPC",
- "Arabic Transparent",
- "Arial Black",
- "Arial Narrow",
- "Arial Unicode MS",
- "Arial",
- "Batang",
- "Browallia New",
- "BrowalliaUPC",
- "Comic Sans MS",
- "Cordia New",
- "CordiaUPC",
- "Courier New",
- "DFKai-SB",
- "David Transparent",
- "David",
- "DilleniaUPC",
- "Estrangelo Edessa",
- "EucrosiaUPC",
- "FangSong_GB2312",
- "Fixed Miriam Transparent",
- "FrankRuehl",
- "Franklin Gothic Medium",
- "FreesiaUPC",
- "Garamond",
- "Gautami",
- "Georgia",
- "Gulim",
- "Impact",
- "IrisUPC",
- "JasmineUPC",
- "KaiTi_GB2312",
- "KodchiangUPC",
- "Latha",
- "Levenim MT",
- "LilyUPC",
- "Lucida Console",
- "Lucida Sans Unicode",
- "MS Gothic",
- "MS Mincho",
- "MV Boli",
- "Mangal",
- "Marlett",
- "Microsoft Sans Serif",
- "Mingliu",
- "Miriam Fixed",
- "Miriam Transparent",
- "Miriam",
- "Narkisim",
- "Palatino Linotype",
- "Raavi",
- "Rod Transparent",
- "Rod",
- "Shruti",
- "SimHei",
- "Simplified Arabic Fixed",
- "Simplified Arabic",
- "Simsun",
- "Sylfaen",
- "Symbol",
- "Tahoma",
- "Times New Roman",
- "Traditional Arabic",
- "Trebuchet MS",
- "Tunga",
- "Verdana",
- "Webdings",
- "Wingdings",
- "",
- },
- },
- { "Core MS Legacy Fonts",
- { "Arial Black",
- "Arial Narrow",
- "Arial Unicode MS",
- "Arial",
- "Comic Sans MS",
- "Courier New",
- "Garamond",
- "Georgia",
- "Impact",
- "Lucida Console",
- "Lucida Sans Unicode",
- "Microsoft Sans Serif",
- "Palatino Linotype",
- "Tahoma",
- "Times New Roman",
- "Trebuchet MS",
- "Verdana",
- "",
- },
- },
- { "Apple Legacy Fonts",
- { "Geneva",
- "Times",
- "Monaco",
- "Century",
- "Chalkboard",
- "Lobster",
- "Century Gothic",
- "Optima",
- "Lucida Grande",
- "Gill Sans",
- "Baskerville",
- "Helvetica",
- "Helvetica Neue",
- "",
- },
- },
- { "Legacy Sans Fonts",
- { "Andale Mono",
- "Arial Unicode MS",
- "Arial",
- "Century Gothic",
- "Comic Sans MS",
- "Franklin Gothic Medium",
- "Geneva",
- "Lucida Console",
- "Lucida Grande",
- "Lucida Sans Unicode",
- "Lucida Sans Typewriter",
- "Microsoft Sans Serif",
- "Monaco",
- "Tahoma",
- "Trebuchet MS",
- "Verdana",
- "",
- },
- },
-
- { "Misc Legacy Fonts",
- { "Dark Courier", "", }, },
- { "Verdana Clones",
- { "DejaVu Sans",
- "Bitstream Vera Sans", "", }, },
- { "Verdana and Clones",
- { "DejaVu Sans",
- "Bitstream Vera Sans",
- "Verdana", "", }, },
- };
-
-
- /* Define this to force natural (i.e. not bitmap-compatible) widths. */
- /* The default leans strongly towards natural widths except for a few */
- /* legacy fonts where a selective combination produces nicer results. */
-/* #define FORCE_NATURAL_WIDTHS */
-
-
- /* Define `classes' of styles that can be grouped together and used in */
- /* rules below. A blank entry "" is required at the end of these! */
-#define STYLE_CLASS_RULES_SIZE 5
-
- static const SPH_Font_Class STYLE_CLASS_Rules
- [STYLE_CLASS_RULES_SIZE] =
- {
- { "Regular Class",
- { "Regular",
- "Book",
- "Medium",
- "Roman",
- "Normal",
- "",
- },
- },
- { "Regular/Italic Class",
- { "Regular",
- "Book",
- "Medium",
- "Italic",
- "Oblique",
- "Roman",
- "Normal",
- "",
- },
- },
- { "Bold/BoldItalic Class",
- { "Bold",
- "Bold Italic",
- "Black",
- "",
- },
- },
- { "Bold/Italic/BoldItalic Class",
- { "Bold",
- "Bold Italic",
- "Black",
- "Italic",
- "Oblique",
- "",
- },
- },
- { "Regular/Bold Class",
- { "Regular",
- "Book",
- "Medium",
- "Normal",
- "Roman",
- "Bold",
- "Black",
- "",
- },
- },
- };
-
-
- /* Force special legacy fixes for fonts. */
-#define COMPATIBILITY_MODE_RULES_SIZE 1
-
- static const SPH_TweakRule COMPATIBILITY_MODE_Rules
- [COMPATIBILITY_MODE_RULES_SIZE] =
- {
- { "Verdana Clones", 0, "", 0 },
- };
-
-
- /* Don't do subpixel (ignore_x_mode) hinting; do normal hinting. */
-#define PIXEL_HINTING_RULES_SIZE 2
-
- static const SPH_TweakRule PIXEL_HINTING_Rules
- [PIXEL_HINTING_RULES_SIZE] =
- {
- /* these characters are almost always safe */
- { "Courier New", 12, "Italic", 'z' },
- { "Courier New", 11, "Italic", 'z' },
- };
-
-
- /* Subpixel hinting ignores SHPIX rules on X. Force SHPIX for these. */
-#define DO_SHPIX_RULES_SIZE 1
-
- static const SPH_TweakRule DO_SHPIX_Rules
- [DO_SHPIX_RULES_SIZE] =
- {
- { "-", 0, "", 0 },
- };
-
-
- /* Skip Y moves that start with a point that is not on a Y pixel */
- /* boundary and don't move that point to a Y pixel boundary. */
-#define SKIP_NONPIXEL_Y_MOVES_RULES_SIZE 4
-
- static const SPH_TweakRule SKIP_NONPIXEL_Y_MOVES_Rules
- [SKIP_NONPIXEL_Y_MOVES_RULES_SIZE] =
- {
- /* fix vwxyz thinness*/
- { "Consolas", 0, "", 0 },
- /* Fix thin middle stems */
- { "Core MS Legacy Fonts", 0, "Regular", 0 },
- /* Cyrillic small letter I */
- { "Legacy Sans Fonts", 0, "", 0 },
- /* Fix artifacts with some Regular & Bold */
- { "Verdana Clones", 0, "", 0 },
- };
-
-
-#define SKIP_NONPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE 1
-
- static const SPH_TweakRule SKIP_NONPIXEL_Y_MOVES_Rules_Exceptions
- [SKIP_NONPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE] =
- {
- /* Fixes < and > */
- { "Courier New", 0, "Regular", 0 },
- };
-
-
- /* Skip Y moves that start with a point that is not on a Y pixel */
- /* boundary and don't move that point to a Y pixel boundary. */
-#define SKIP_NONPIXEL_Y_MOVES_DELTAP_RULES_SIZE 2
-
- static const SPH_TweakRule SKIP_NONPIXEL_Y_MOVES_DELTAP_Rules
- [SKIP_NONPIXEL_Y_MOVES_DELTAP_RULES_SIZE] =
- {
- /* Maintain thickness of diagonal in 'N' */
- { "Times New Roman", 0, "Regular/Bold Class", 'N' },
- { "Georgia", 0, "Regular/Bold Class", 'N' },
- };
-
-
- /* Skip Y moves that move a point off a Y pixel boundary. */
-#define SKIP_OFFPIXEL_Y_MOVES_RULES_SIZE 1
-
- static const SPH_TweakRule SKIP_OFFPIXEL_Y_MOVES_Rules
- [SKIP_OFFPIXEL_Y_MOVES_RULES_SIZE] =
- {
- { "-", 0, "", 0 },
- };
-
-
-#define SKIP_OFFPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE 1
-
- static const SPH_TweakRule SKIP_OFFPIXEL_Y_MOVES_Rules_Exceptions
- [SKIP_OFFPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE] =
- {
- { "-", 0, "", 0 },
- };
-
-
- /* Round moves that don't move a point to a Y pixel boundary. */
-#define ROUND_NONPIXEL_Y_MOVES_RULES_SIZE 2
-
- static const SPH_TweakRule ROUND_NONPIXEL_Y_MOVES_Rules
- [ROUND_NONPIXEL_Y_MOVES_RULES_SIZE] =
- {
- /* Droid font instructions don't snap Y to pixels */
- { "Droid Sans", 0, "Regular/Italic Class", 0 },
- { "Droid Sans Mono", 0, "", 0 },
- };
-
-
-#define ROUND_NONPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE 1
-
- static const SPH_TweakRule ROUND_NONPIXEL_Y_MOVES_Rules_Exceptions
- [ROUND_NONPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE] =
- {
- { "-", 0, "", 0 },
- };
-
-
- /* Allow a Direct_Move along X freedom vector if matched. */
-#define ALLOW_X_DMOVE_RULES_SIZE 1
-
- static const SPH_TweakRule ALLOW_X_DMOVE_Rules
- [ALLOW_X_DMOVE_RULES_SIZE] =
- {
- /* Fixes vanishing diagonal in 4 */
- { "Verdana", 0, "Regular", '4' },
- };
-
-
- /* Return MS rasterizer version 35 if matched. */
-#define RASTERIZER_35_RULES_SIZE 8
-
- static const SPH_TweakRule RASTERIZER_35_Rules
- [RASTERIZER_35_RULES_SIZE] =
- {
- /* This seems to be the only way to make these look good */
- { "Times New Roman", 0, "Regular", 'i' },
- { "Times New Roman", 0, "Regular", 'j' },
- { "Times New Roman", 0, "Regular", 'm' },
- { "Times New Roman", 0, "Regular", 'r' },
- { "Times New Roman", 0, "Regular", 'a' },
- { "Times New Roman", 0, "Regular", 'n' },
- { "Times New Roman", 0, "Regular", 'p' },
- { "Times", 0, "", 0 },
- };
-
-
- /* Don't round to the subpixel grid. Round to pixel grid. */
-#define NORMAL_ROUND_RULES_SIZE 1
-
- static const SPH_TweakRule NORMAL_ROUND_Rules
- [NORMAL_ROUND_RULES_SIZE] =
- {
- /* Fix serif thickness for certain ppems */
- /* Can probably be generalized somehow */
- { "Courier New", 0, "", 0 },
- };
-
-
- /* Skip IUP instructions if matched. */
-#define SKIP_IUP_RULES_SIZE 1
-
- static const SPH_TweakRule SKIP_IUP_Rules
- [SKIP_IUP_RULES_SIZE] =
- {
- { "Arial", 13, "Regular", 'a' },
- };
-
-
- /* Skip MIAP Twilight hack if matched. */
-#define MIAP_HACK_RULES_SIZE 1
-
- static const SPH_TweakRule MIAP_HACK_Rules
- [MIAP_HACK_RULES_SIZE] =
- {
- { "Geneva", 12, "", 0 },
- };
-
-
- /* Skip DELTAP instructions if matched. */
-#define ALWAYS_SKIP_DELTAP_RULES_SIZE 23
-
- static const SPH_TweakRule ALWAYS_SKIP_DELTAP_Rules
- [ALWAYS_SKIP_DELTAP_RULES_SIZE] =
- {
- { "Georgia", 0, "Regular", 'k' },
- /* fix various problems with e in different versions */
- { "Trebuchet MS", 14, "Regular", 'e' },
- { "Trebuchet MS", 13, "Regular", 'e' },
- { "Trebuchet MS", 15, "Regular", 'e' },
- { "Trebuchet MS", 0, "Italic", 'v' },
- { "Trebuchet MS", 0, "Italic", 'w' },
- { "Trebuchet MS", 0, "Regular", 'Y' },
- { "Arial", 11, "Regular", 's' },
- /* prevent problems with '3' and others */
- { "Verdana", 10, "Regular", 0 },
- { "Verdana", 9, "Regular", 0 },
- /* Cyrillic small letter short I */
- { "Legacy Sans Fonts", 0, "", 0x438 },
- { "Legacy Sans Fonts", 0, "", 0x439 },
- { "Arial", 10, "Regular", '6' },
- { "Arial", 0, "Bold/BoldItalic Class", 'a' },
- /* Make horizontal stems consistent with the rest */
- { "Arial", 24, "Bold", 'a' },
- { "Arial", 25, "Bold", 'a' },
- { "Arial", 24, "Bold", 's' },
- { "Arial", 25, "Bold", 's' },
- { "Arial", 34, "Bold", 's' },
- { "Arial", 35, "Bold", 's' },
- { "Arial", 36, "Bold", 's' },
- { "Arial", 25, "Regular", 's' },
- { "Arial", 26, "Regular", 's' },
- };
-
-
- /* Always do DELTAP instructions if matched. */
-#define ALWAYS_DO_DELTAP_RULES_SIZE 1
-
- static const SPH_TweakRule ALWAYS_DO_DELTAP_Rules
- [ALWAYS_DO_DELTAP_RULES_SIZE] =
- {
- { "-", 0, "", 0 },
- };
-
-
- /* Don't allow ALIGNRP after IUP. */
-#define NO_ALIGNRP_AFTER_IUP_RULES_SIZE 1
-
- static const SPH_TweakRule NO_ALIGNRP_AFTER_IUP_Rules
- [NO_ALIGNRP_AFTER_IUP_RULES_SIZE] =
- {
- /* Prevent creation of dents in outline */
- { "-", 0, "", 0 },
- };
-
-
- /* Don't allow DELTAP after IUP. */
-#define NO_DELTAP_AFTER_IUP_RULES_SIZE 1
-
- static const SPH_TweakRule NO_DELTAP_AFTER_IUP_Rules
- [NO_DELTAP_AFTER_IUP_RULES_SIZE] =
- {
- { "-", 0, "", 0 },
- };
-
-
- /* Don't allow CALL after IUP. */
-#define NO_CALL_AFTER_IUP_RULES_SIZE 1
-
- static const SPH_TweakRule NO_CALL_AFTER_IUP_Rules
- [NO_CALL_AFTER_IUP_RULES_SIZE] =
- {
- /* Prevent creation of dents in outline */
- { "-", 0, "", 0 },
- };
-
-
- /* De-embolden these glyphs slightly. */
-#define DEEMBOLDEN_RULES_SIZE 9
-
- static const SPH_TweakRule DEEMBOLDEN_Rules
- [DEEMBOLDEN_RULES_SIZE] =
- {
- { "Courier New", 0, "Bold", 'A' },
- { "Courier New", 0, "Bold", 'W' },
- { "Courier New", 0, "Bold", 'w' },
- { "Courier New", 0, "Bold", 'M' },
- { "Courier New", 0, "Bold", 'X' },
- { "Courier New", 0, "Bold", 'K' },
- { "Courier New", 0, "Bold", 'x' },
- { "Courier New", 0, "Bold", 'z' },
- { "Courier New", 0, "Bold", 'v' },
- };
-
-
- /* Embolden these glyphs slightly. */
-#define EMBOLDEN_RULES_SIZE 2
-
- static const SPH_TweakRule EMBOLDEN_Rules
- [EMBOLDEN_RULES_SIZE] =
- {
- { "Courier New", 0, "Regular", 0 },
- { "Courier New", 0, "Italic", 0 },
- };
-
-
- /* This is a CVT hack that makes thick horizontal stems on 2, 5, 7 */
- /* similar to Windows XP. */
-#define TIMES_NEW_ROMAN_HACK_RULES_SIZE 12
-
- static const SPH_TweakRule TIMES_NEW_ROMAN_HACK_Rules
- [TIMES_NEW_ROMAN_HACK_RULES_SIZE] =
- {
- { "Times New Roman", 16, "Italic", '2' },
- { "Times New Roman", 16, "Italic", '5' },
- { "Times New Roman", 16, "Italic", '7' },
- { "Times New Roman", 16, "Regular", '2' },
- { "Times New Roman", 16, "Regular", '5' },
- { "Times New Roman", 16, "Regular", '7' },
- { "Times New Roman", 17, "Italic", '2' },
- { "Times New Roman", 17, "Italic", '5' },
- { "Times New Roman", 17, "Italic", '7' },
- { "Times New Roman", 17, "Regular", '2' },
- { "Times New Roman", 17, "Regular", '5' },
- { "Times New Roman", 17, "Regular", '7' },
- };
-
-
- /* This fudges distance on 2 to get rid of the vanishing stem issue. */
- /* A real solution to this is certainly welcome. */
-#define COURIER_NEW_2_HACK_RULES_SIZE 15
-
- static const SPH_TweakRule COURIER_NEW_2_HACK_Rules
- [COURIER_NEW_2_HACK_RULES_SIZE] =
- {
- { "Courier New", 10, "Regular", '2' },
- { "Courier New", 11, "Regular", '2' },
- { "Courier New", 12, "Regular", '2' },
- { "Courier New", 13, "Regular", '2' },
- { "Courier New", 14, "Regular", '2' },
- { "Courier New", 15, "Regular", '2' },
- { "Courier New", 16, "Regular", '2' },
- { "Courier New", 17, "Regular", '2' },
- { "Courier New", 18, "Regular", '2' },
- { "Courier New", 19, "Regular", '2' },
- { "Courier New", 20, "Regular", '2' },
- { "Courier New", 21, "Regular", '2' },
- { "Courier New", 22, "Regular", '2' },
- { "Courier New", 23, "Regular", '2' },
- { "Courier New", 24, "Regular", '2' },
- };
-
-
-#ifndef FORCE_NATURAL_WIDTHS
-
- /* Use compatible widths with these glyphs. Compatible widths is always */
- /* on when doing B/W TrueType instructing, but is used selectively here, */
- /* typically on glyphs with 3 or more vertical stems. */
-#define COMPATIBLE_WIDTHS_RULES_SIZE 38
-
- static const SPH_TweakRule COMPATIBLE_WIDTHS_Rules
- [COMPATIBLE_WIDTHS_RULES_SIZE] =
- {
- { "Arial Unicode MS", 12, "Regular Class", 'm' },
- { "Arial Unicode MS", 14, "Regular Class", 'm' },
- /* Cyrillic small letter sha */
- { "Arial", 10, "Regular Class", 0x448 },
- { "Arial", 11, "Regular Class", 'm' },
- { "Arial", 12, "Regular Class", 'm' },
- /* Cyrillic small letter sha */
- { "Arial", 12, "Regular Class", 0x448 },
- { "Arial", 13, "Regular Class", 0x448 },
- { "Arial", 14, "Regular Class", 'm' },
- /* Cyrillic small letter sha */
- { "Arial", 14, "Regular Class", 0x448 },
- { "Arial", 15, "Regular Class", 0x448 },
- { "Arial", 17, "Regular Class", 'm' },
- { "DejaVu Sans", 15, "Regular Class", 0 },
- { "Microsoft Sans Serif", 11, "Regular Class", 0 },
- { "Microsoft Sans Serif", 12, "Regular Class", 0 },
- { "Segoe UI", 11, "Regular Class", 0 },
- { "Monaco", 0, "Regular Class", 0 },
- { "Segoe UI", 12, "Regular Class", 'm' },
- { "Segoe UI", 14, "Regular Class", 'm' },
- { "Tahoma", 11, "Regular Class", 0 },
- { "Times New Roman", 16, "Regular Class", 'c' },
- { "Times New Roman", 16, "Regular Class", 'm' },
- { "Times New Roman", 16, "Regular Class", 'o' },
- { "Times New Roman", 16, "Regular Class", 'w' },
- { "Trebuchet MS", 11, "Regular Class", 0 },
- { "Trebuchet MS", 12, "Regular Class", 0 },
- { "Trebuchet MS", 14, "Regular Class", 0 },
- { "Trebuchet MS", 15, "Regular Class", 0 },
- { "Ubuntu", 12, "Regular Class", 'm' },
- /* Cyrillic small letter sha */
- { "Verdana", 10, "Regular Class", 0x448 },
- { "Verdana", 11, "Regular Class", 0x448 },
- { "Verdana and Clones", 12, "Regular Class", 'i' },
- { "Verdana and Clones", 12, "Regular Class", 'j' },
- { "Verdana and Clones", 12, "Regular Class", 'l' },
- { "Verdana and Clones", 12, "Regular Class", 'm' },
- { "Verdana and Clones", 13, "Regular Class", 'i' },
- { "Verdana and Clones", 13, "Regular Class", 'j' },
- { "Verdana and Clones", 13, "Regular Class", 'l' },
- { "Verdana and Clones", 14, "Regular Class", 'm' },
- };
-
-
- /* Scaling slightly in the x-direction prior to hinting results in */
- /* more visually pleasing glyphs in certain cases. */
- /* This sometimes needs to be coordinated with compatible width rules. */
- /* A value of 1000 corresponds to a scaled value of 1.0. */
-
-#define X_SCALING_RULES_SIZE 50
-
- static const SPH_ScaleRule X_SCALING_Rules[X_SCALING_RULES_SIZE] =
- {
- { "DejaVu Sans", 12, "Regular Class", 'm', 950 },
- { "Verdana and Clones", 12, "Regular Class", 'a', 1100 },
- { "Verdana and Clones", 13, "Regular Class", 'a', 1050 },
- { "Arial", 11, "Regular Class", 'm', 975 },
- { "Arial", 12, "Regular Class", 'm', 1050 },
- /* Cyrillic small letter el */
- { "Arial", 13, "Regular Class", 0x43B, 950 },
- { "Arial", 13, "Regular Class", 'o', 950 },
- { "Arial", 13, "Regular Class", 'e', 950 },
- { "Arial", 14, "Regular Class", 'm', 950 },
- /* Cyrillic small letter el */
- { "Arial", 15, "Regular Class", 0x43B, 925 },
- { "Bitstream Vera Sans", 10, "Regular/Italic Class", 0, 1100 },
- { "Bitstream Vera Sans", 12, "Regular/Italic Class", 0, 1050 },
- { "Bitstream Vera Sans", 16, "Regular Class", 0, 1050 },
- { "Bitstream Vera Sans", 9, "Regular/Italic Class", 0, 1050 },
- { "DejaVu Sans", 12, "Regular Class", 'l', 975 },
- { "DejaVu Sans", 12, "Regular Class", 'i', 975 },
- { "DejaVu Sans", 12, "Regular Class", 'j', 975 },
- { "DejaVu Sans", 13, "Regular Class", 'l', 950 },
- { "DejaVu Sans", 13, "Regular Class", 'i', 950 },
- { "DejaVu Sans", 13, "Regular Class", 'j', 950 },
- { "DejaVu Sans", 10, "Regular/Italic Class", 0, 1100 },
- { "DejaVu Sans", 12, "Regular/Italic Class", 0, 1050 },
- { "Georgia", 10, "", 0, 1050 },
- { "Georgia", 11, "", 0, 1100 },
- { "Georgia", 12, "", 0, 1025 },
- { "Georgia", 13, "", 0, 1050 },
- { "Georgia", 16, "", 0, 1050 },
- { "Georgia", 17, "", 0, 1030 },
- { "Liberation Sans", 12, "Regular Class", 'm', 1100 },
- { "Lucida Grande", 11, "Regular Class", 'm', 1100 },
- { "Microsoft Sans Serif", 11, "Regular Class", 'm', 950 },
- { "Microsoft Sans Serif", 12, "Regular Class", 'm', 1050 },
- { "Segoe UI", 12, "Regular Class", 'H', 1050 },
- { "Segoe UI", 12, "Regular Class", 'm', 1050 },
- { "Segoe UI", 14, "Regular Class", 'm', 1050 },
- { "Tahoma", 11, "Regular Class", 'i', 975 },
- { "Tahoma", 11, "Regular Class", 'l', 975 },
- { "Tahoma", 11, "Regular Class", 'j', 900 },
- { "Tahoma", 11, "Regular Class", 'm', 918 },
- { "Verdana", 10, "Regular/Italic Class", 0, 1100 },
- { "Verdana", 12, "Regular Class", 'm', 975 },
- { "Verdana", 12, "Regular/Italic Class", 0, 1050 },
- { "Verdana", 13, "Regular/Italic Class", 'i', 950 },
- { "Verdana", 13, "Regular/Italic Class", 'j', 950 },
- { "Verdana", 13, "Regular/Italic Class", 'l', 950 },
- { "Verdana", 16, "Regular Class", 0, 1050 },
- { "Verdana", 9, "Regular/Italic Class", 0, 1050 },
- { "Times New Roman", 16, "Regular Class", 'm', 918 },
- { "Trebuchet MS", 11, "Regular Class", 'm', 800 },
- { "Trebuchet MS", 12, "Regular Class", 'm', 800 },
- };
-
-#else
-
-#define COMPATIBLE_WIDTHS_RULES_SIZE 1
-
- static const SPH_TweakRule COMPATIBLE_WIDTHS_Rules
- [COMPATIBLE_WIDTHS_RULES_SIZE] =
- {
- { "-", 0, "", 0 },
- };
-
-
-#define X_SCALING_RULES_SIZE 1
-
- static const SPH_ScaleRule X_SCALING_Rules
- [X_SCALING_RULES_SIZE] =
- {
- { "-", 0, "", 0, 1000 },
- };
-
-#endif /* FORCE_NATURAL_WIDTHS */
-
-
- static FT_Bool
- is_member_of_family_class( const FT_String* detected_font_name,
- const FT_String* rule_font_name )
- {
- FT_UInt i, j;
-
-
- /* Does font name match rule family? */
- if ( strcmp( detected_font_name, rule_font_name ) == 0 )
- return TRUE;
-
- /* Is font name a wildcard ""? */
- if ( strcmp( rule_font_name, "" ) == 0 )
- return TRUE;
-
- /* Is font name contained in a class list? */
- for ( i = 0; i < FAMILY_CLASS_RULES_SIZE; i++ )
- {
- if ( strcmp( FAMILY_CLASS_Rules[i].name, rule_font_name ) == 0 )
- {
- for ( j = 0; j < SPH_MAX_CLASS_MEMBERS; j++ )
- {
- if ( strcmp( FAMILY_CLASS_Rules[i].member[j], "" ) == 0 )
- continue;
- if ( strcmp( FAMILY_CLASS_Rules[i].member[j],
- detected_font_name ) == 0 )
- return TRUE;
- }
- }
- }
-
- return FALSE;
- }
-
-
- static FT_Bool
- is_member_of_style_class( const FT_String* detected_font_style,
- const FT_String* rule_font_style )
- {
- FT_UInt i, j;
-
-
- /* Does font style match rule style? */
- if ( strcmp( detected_font_style, rule_font_style ) == 0 )
- return TRUE;
-
- /* Is font style a wildcard ""? */
- if ( strcmp( rule_font_style, "" ) == 0 )
- return TRUE;
-
- /* Is font style contained in a class list? */
- for ( i = 0; i < STYLE_CLASS_RULES_SIZE; i++ )
- {
- if ( strcmp( STYLE_CLASS_Rules[i].name, rule_font_style ) == 0 )
- {
- for ( j = 0; j < SPH_MAX_CLASS_MEMBERS; j++ )
- {
- if ( strcmp( STYLE_CLASS_Rules[i].member[j], "" ) == 0 )
- continue;
- if ( strcmp( STYLE_CLASS_Rules[i].member[j],
- detected_font_style ) == 0 )
- return TRUE;
- }
- }
- }
-
- return FALSE;
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- sph_test_tweak( TT_Face face,
- const FT_String* family,
- FT_UInt ppem,
- const FT_String* style,
- FT_UInt glyph_index,
- const SPH_TweakRule* rule,
- FT_UInt num_rules )
- {
- FT_UInt i;
-
-
- /* rule checks may be able to be optimized further */
- for ( i = 0; i < num_rules; i++ )
- {
- if ( family &&
- ( is_member_of_family_class ( family, rule[i].family ) ) )
- if ( rule[i].ppem == 0 ||
- rule[i].ppem == ppem )
- if ( style &&
- is_member_of_style_class ( style, rule[i].style ) )
- if ( rule[i].glyph == 0 ||
- FT_Get_Char_Index( (FT_Face)face,
- rule[i].glyph ) == glyph_index )
- return TRUE;
- }
-
- return FALSE;
- }
-
-
- static FT_UInt
- scale_test_tweak( TT_Face face,
- const FT_String* family,
- FT_UInt ppem,
- const FT_String* style,
- FT_UInt glyph_index,
- const SPH_ScaleRule* rule,
- FT_UInt num_rules )
- {
- FT_UInt i;
-
-
- /* rule checks may be able to be optimized further */
- for ( i = 0; i < num_rules; i++ )
- {
- if ( family &&
- ( is_member_of_family_class ( family, rule[i].family ) ) )
- if ( rule[i].ppem == 0 ||
- rule[i].ppem == ppem )
- if ( style &&
- is_member_of_style_class( style, rule[i].style ) )
- if ( rule[i].glyph == 0 ||
- FT_Get_Char_Index( (FT_Face)face,
- rule[i].glyph ) == glyph_index )
- return rule[i].scale;
- }
-
- return 1000;
- }
-
-
- FT_LOCAL_DEF( FT_UInt )
- sph_test_tweak_x_scaling( TT_Face face,
- const FT_String* family,
- FT_UInt ppem,
- const FT_String* style,
- FT_UInt glyph_index )
- {
- return scale_test_tweak( face, family, ppem, style, glyph_index,
- X_SCALING_Rules, X_SCALING_RULES_SIZE );
- }
-
-
-#define TWEAK_RULES( x ) \
- if ( sph_test_tweak( face, family, ppem, style, glyph_index, \
- x##_Rules, x##_RULES_SIZE ) ) \
- loader->exec->sph_tweak_flags |= SPH_TWEAK_##x;
-
-#define TWEAK_RULES_EXCEPTIONS( x ) \
- if ( sph_test_tweak( face, family, ppem, style, glyph_index, \
- x##_Rules_Exceptions, x##_RULES_EXCEPTIONS_SIZE ) ) \
- loader->exec->sph_tweak_flags &= ~SPH_TWEAK_##x;
-
-
- FT_LOCAL_DEF( void )
- sph_set_tweaks( TT_Loader loader,
- FT_UInt glyph_index )
- {
- TT_Face face = loader->face;
- FT_String* family = face->root.family_name;
- FT_UInt ppem = loader->size->metrics->x_ppem;
- FT_String* style = face->root.style_name;
-
-
- /* don't apply rules if style isn't set */
- if ( !face->root.style_name )
- return;
-
-#ifdef SPH_DEBUG_MORE_VERBOSE
- printf( "%s,%d,%s,%c=%d ",
- family, ppem, style, glyph_index, glyph_index );
-#endif
-
- TWEAK_RULES( PIXEL_HINTING );
-
- if ( loader->exec->sph_tweak_flags & SPH_TWEAK_PIXEL_HINTING )
- {
- loader->exec->ignore_x_mode = FALSE;
- return;
- }
-
- TWEAK_RULES( ALLOW_X_DMOVE );
- TWEAK_RULES( ALWAYS_DO_DELTAP );
- TWEAK_RULES( ALWAYS_SKIP_DELTAP );
- TWEAK_RULES( DEEMBOLDEN );
- TWEAK_RULES( DO_SHPIX );
- TWEAK_RULES( EMBOLDEN );
- TWEAK_RULES( MIAP_HACK );
- TWEAK_RULES( NORMAL_ROUND );
- TWEAK_RULES( NO_ALIGNRP_AFTER_IUP );
- TWEAK_RULES( NO_CALL_AFTER_IUP );
- TWEAK_RULES( NO_DELTAP_AFTER_IUP );
- TWEAK_RULES( RASTERIZER_35 );
- TWEAK_RULES( SKIP_IUP );
-
- TWEAK_RULES( SKIP_OFFPIXEL_Y_MOVES );
- TWEAK_RULES_EXCEPTIONS( SKIP_OFFPIXEL_Y_MOVES );
-
- TWEAK_RULES( SKIP_NONPIXEL_Y_MOVES_DELTAP );
-
- TWEAK_RULES( SKIP_NONPIXEL_Y_MOVES );
- TWEAK_RULES_EXCEPTIONS( SKIP_NONPIXEL_Y_MOVES );
-
- TWEAK_RULES( ROUND_NONPIXEL_Y_MOVES );
- TWEAK_RULES_EXCEPTIONS( ROUND_NONPIXEL_Y_MOVES );
-
- if ( loader->exec->sph_tweak_flags & SPH_TWEAK_RASTERIZER_35 )
- {
- if ( loader->exec->rasterizer_version != TT_INTERPRETER_VERSION_35 )
- {
- loader->exec->rasterizer_version = TT_INTERPRETER_VERSION_35;
- loader->exec->size->cvt_ready = -1;
-
- tt_size_ready_bytecode(
- loader->exec->size,
- FT_BOOL( loader->load_flags & FT_LOAD_PEDANTIC ) );
- }
- else
- loader->exec->rasterizer_version = TT_INTERPRETER_VERSION_35;
- }
- else
- {
- if ( loader->exec->rasterizer_version !=
- SPH_OPTION_SET_RASTERIZER_VERSION )
- {
- loader->exec->rasterizer_version = SPH_OPTION_SET_RASTERIZER_VERSION;
- loader->exec->size->cvt_ready = -1;
-
- tt_size_ready_bytecode(
- loader->exec->size,
- FT_BOOL( loader->load_flags & FT_LOAD_PEDANTIC ) );
- }
- else
- loader->exec->rasterizer_version = SPH_OPTION_SET_RASTERIZER_VERSION;
- }
-
- if ( IS_HINTED( loader->load_flags ) )
- {
- TWEAK_RULES( TIMES_NEW_ROMAN_HACK );
- TWEAK_RULES( COURIER_NEW_2_HACK );
- }
-
- if ( sph_test_tweak( face, family, ppem, style, glyph_index,
- COMPATIBILITY_MODE_Rules, COMPATIBILITY_MODE_RULES_SIZE ) )
- loader->exec->face->sph_compatibility_mode = TRUE;
-
-
- if ( IS_HINTED( loader->load_flags ) )
- {
- if ( sph_test_tweak( face, family, ppem, style, glyph_index,
- COMPATIBLE_WIDTHS_Rules, COMPATIBLE_WIDTHS_RULES_SIZE ) )
- loader->exec->compatible_widths |= TRUE;
- }
- }
-
-#else /* !(TT_USE_BYTECODE_INTERPRETER && */
- /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY) */
-
- /* ANSI C doesn't like empty source files */
- typedef int _tt_subpix_dummy;
-
-#endif /* !(TT_USE_BYTECODE_INTERPRETER && */
- /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY) */
-
-
-/* END */
diff --git a/src/truetype/ttsubpix.h b/src/truetype/ttsubpix.h
deleted file mode 100644
index c68f97ff0..000000000
--- a/src/truetype/ttsubpix.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttsubpix.h */
-/* */
-/* TrueType Subpixel Hinting. */
-/* */
-/* Copyright 2010-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTSUBPIX_H_
-#define TTSUBPIX_H_
-
-#include <ft2build.h>
-#include "ttobjs.h"
-#include "ttinterp.h"
-
-
-FT_BEGIN_HEADER
-
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-
- /*************************************************************************/
- /* */
- /* ID flags to identify special functions at FDEF and runtime. */
- /* */
- /* */
-#define SPH_FDEF_INLINE_DELTA_1 0x0000001
-#define SPH_FDEF_INLINE_DELTA_2 0x0000002
-#define SPH_FDEF_DIAGONAL_STROKE 0x0000004
-#define SPH_FDEF_VACUFORM_ROUND_1 0x0000008
-#define SPH_FDEF_TTFAUTOHINT_1 0x0000010
-#define SPH_FDEF_SPACING_1 0x0000020
-#define SPH_FDEF_SPACING_2 0x0000040
-#define SPH_FDEF_TYPEMAN_STROKES 0x0000080
-#define SPH_FDEF_TYPEMAN_DIAGENDCTRL 0x0000100
-
-
- /*************************************************************************/
- /* */
- /* Tweak flags that are set for each glyph by the below rules. */
- /* */
- /* */
-#define SPH_TWEAK_ALLOW_X_DMOVE 0x0000001UL
-#define SPH_TWEAK_ALWAYS_DO_DELTAP 0x0000002UL
-#define SPH_TWEAK_ALWAYS_SKIP_DELTAP 0x0000004UL
-#define SPH_TWEAK_COURIER_NEW_2_HACK 0x0000008UL
-#define SPH_TWEAK_DEEMBOLDEN 0x0000010UL
-#define SPH_TWEAK_DO_SHPIX 0x0000020UL
-#define SPH_TWEAK_EMBOLDEN 0x0000040UL
-#define SPH_TWEAK_MIAP_HACK 0x0000080UL
-#define SPH_TWEAK_NORMAL_ROUND 0x0000100UL
-#define SPH_TWEAK_NO_ALIGNRP_AFTER_IUP 0x0000200UL
-#define SPH_TWEAK_NO_CALL_AFTER_IUP 0x0000400UL
-#define SPH_TWEAK_NO_DELTAP_AFTER_IUP 0x0000800UL
-#define SPH_TWEAK_PIXEL_HINTING 0x0001000UL
-#define SPH_TWEAK_RASTERIZER_35 0x0002000UL
-#define SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES 0x0004000UL
-#define SPH_TWEAK_SKIP_IUP 0x0008000UL
-#define SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES 0x0010000UL
-#define SPH_TWEAK_SKIP_OFFPIXEL_Y_MOVES 0x0020000UL
-#define SPH_TWEAK_TIMES_NEW_ROMAN_HACK 0x0040000UL
-#define SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES_DELTAP 0x0080000UL
-
-
- FT_LOCAL( FT_Bool )
- sph_test_tweak( TT_Face face,
- const FT_String* family,
- FT_UInt ppem,
- const FT_String* style,
- FT_UInt glyph_index,
- const SPH_TweakRule* rule,
- FT_UInt num_rules );
-
- FT_LOCAL( FT_UInt )
- sph_test_tweak_x_scaling( TT_Face face,
- const FT_String* family,
- FT_UInt ppem,
- const FT_String* style,
- FT_UInt glyph_index );
-
- FT_LOCAL( void )
- sph_set_tweaks( TT_Loader loader,
- FT_UInt glyph_index );
-
-
- /* These macros are defined absent a method for setting them */
-#define SPH_OPTION_BITMAP_WIDTHS FALSE
-#define SPH_OPTION_SET_SUBPIXEL TRUE
-#define SPH_OPTION_SET_GRAYSCALE FALSE
-#define SPH_OPTION_SET_COMPATIBLE_WIDTHS FALSE
-#define SPH_OPTION_SET_RASTERIZER_VERSION 38
-
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
-
-FT_END_HEADER
-
-#endif /* TTSUBPIX_H_ */
-
-
-/* END */
diff --git a/src/type1/Jamfile b/src/type1/Jamfile
deleted file mode 100644
index 6c10a31a1..000000000
--- a/src/type1/Jamfile
+++ /dev/null
@@ -1,35 +0,0 @@
-# FreeType 2 src/type1 Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) type1 ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = t1afm
- t1driver
- t1gload
- t1load
- t1objs
- t1parse
- ;
- }
- else
- {
- _sources = type1 ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/type1 Jamfile
diff --git a/src/type1/module.mk b/src/type1/module.mk
deleted file mode 100644
index f299d6fe8..000000000
--- a/src/type1/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 Type1 module definition
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += TYPE1_DRIVER
-
-define TYPE1_DRIVER
-$(OPEN_DRIVER) FT_Driver_ClassRec, t1_driver_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)type1 $(ECHO_DRIVER_DESC)Postscript font files with extension *.pfa or *.pfb$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/type1/rules.mk b/src/type1/rules.mk
deleted file mode 100644
index 97bef288f..000000000
--- a/src/type1/rules.mk
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# FreeType 2 Type1 driver configuration rules
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# Type1 driver directory
-#
-T1_DIR := $(SRC_DIR)/type1
-
-
-# compilation flags for the driver
-#
-T1_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(T1_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# Type1 driver sources (i.e., C files)
-#
-T1_DRV_SRC := $(T1_DIR)/t1parse.c \
- $(T1_DIR)/t1load.c \
- $(T1_DIR)/t1driver.c \
- $(T1_DIR)/t1afm.c \
- $(T1_DIR)/t1gload.c \
- $(T1_DIR)/t1objs.c
-
-# Type1 driver headers
-#
-T1_DRV_H := $(T1_DRV_SRC:%.c=%.h) \
- $(T1_DIR)/t1tokens.h \
- $(T1_DIR)/t1errors.h
-
-
-# Type1 driver object(s)
-#
-# T1_DRV_OBJ_M is used during `multi' builds
-# T1_DRV_OBJ_S is used during `single' builds
-#
-T1_DRV_OBJ_M := $(T1_DRV_SRC:$(T1_DIR)/%.c=$(OBJ_DIR)/%.$O)
-T1_DRV_OBJ_S := $(OBJ_DIR)/type1.$O
-
-# Type1 driver source file for single build
-#
-T1_DRV_SRC_S := $(T1_DIR)/type1.c
-
-
-# Type1 driver - single object
-#
-$(T1_DRV_OBJ_S): $(T1_DRV_SRC_S) $(T1_DRV_SRC) $(FREETYPE_H) $(T1_DRV_H)
- $(T1_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(T1_DRV_SRC_S))
-
-
-# Type1 driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(T1_DIR)/%.c $(FREETYPE_H) $(T1_DRV_H)
- $(T1_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(T1_DRV_OBJ_S)
-DRV_OBJS_M += $(T1_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/type1/t1afm.c b/src/type1/t1afm.c
deleted file mode 100644
index 11a2646fc..000000000
--- a/src/type1/t1afm.c
+++ /dev/null
@@ -1,415 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1afm.c */
-/* */
-/* AFM support for Type 1 fonts (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include "t1afm.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include "t1errors.h"
-
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_t1afm
-
-
- FT_LOCAL_DEF( void )
- T1_Done_Metrics( FT_Memory memory,
- AFM_FontInfo fi )
- {
- FT_FREE( fi->KernPairs );
- fi->NumKernPair = 0;
-
- FT_FREE( fi->TrackKerns );
- fi->NumTrackKern = 0;
-
- FT_FREE( fi );
- }
-
-
- /* read a glyph name and return the equivalent glyph index */
- static FT_Int
- t1_get_index( const char* name,
- FT_Offset len,
- void* user_data )
- {
- T1_Font type1 = (T1_Font)user_data;
- FT_Int n;
-
-
- /* PS string/name length must be < 16-bit */
- if ( len > 0xFFFFU )
- return 0;
-
- for ( n = 0; n < type1->num_glyphs; n++ )
- {
- char* gname = (char*)type1->glyph_names[n];
-
-
- if ( gname && gname[0] == name[0] &&
- ft_strlen( gname ) == len &&
- ft_strncmp( gname, name, len ) == 0 )
- return n;
- }
-
- return 0;
- }
-
-
-#undef KERN_INDEX
-#define KERN_INDEX( g1, g2 ) ( ( (FT_ULong)(g1) << 16 ) | (g2) )
-
-
- /* compare two kerning pairs */
- FT_CALLBACK_DEF( int )
- compare_kern_pairs( const void* a,
- const void* b )
- {
- AFM_KernPair pair1 = (AFM_KernPair)a;
- AFM_KernPair pair2 = (AFM_KernPair)b;
-
- FT_ULong index1 = KERN_INDEX( pair1->index1, pair1->index2 );
- FT_ULong index2 = KERN_INDEX( pair2->index1, pair2->index2 );
-
-
- if ( index1 > index2 )
- return 1;
- else if ( index1 < index2 )
- return -1;
- else
- return 0;
- }
-
-
- /* parse a PFM file -- for now, only read the kerning pairs */
- static FT_Error
- T1_Read_PFM( FT_Face t1_face,
- FT_Stream stream,
- AFM_FontInfo fi )
- {
- FT_Error error = FT_Err_Ok;
- FT_Memory memory = stream->memory;
- FT_Byte* start;
- FT_Byte* limit;
- FT_Byte* p;
- AFM_KernPair kp;
- FT_Int width_table_length;
- FT_CharMap oldcharmap;
- FT_CharMap charmap;
- FT_Int n;
-
-
- start = (FT_Byte*)stream->cursor;
- limit = (FT_Byte*)stream->limit;
-
- /* Figure out how long the width table is. */
- /* This info is a little-endian short at offset 99. */
- p = start + 99;
- if ( p + 2 > limit )
- {
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
- width_table_length = FT_PEEK_USHORT_LE( p );
-
- p += 18 + width_table_length;
- if ( p + 0x12 > limit || FT_PEEK_USHORT_LE( p ) < 0x12 )
- /* extension table is probably optional */
- goto Exit;
-
- /* Kerning offset is 14 bytes from start of extensions table. */
- p += 14;
- p = start + FT_PEEK_ULONG_LE( p );
-
- if ( p == start )
- /* zero offset means no table */
- goto Exit;
-
- if ( p + 2 > limit )
- {
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
-
- fi->NumKernPair = FT_PEEK_USHORT_LE( p );
- p += 2;
- if ( p + 4 * fi->NumKernPair > limit )
- {
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
-
- /* Actually, kerning pairs are simply optional! */
- if ( fi->NumKernPair == 0 )
- goto Exit;
-
- /* allocate the pairs */
- if ( FT_QNEW_ARRAY( fi->KernPairs, fi->NumKernPair ) )
- goto Exit;
-
- /* now, read each kern pair */
- kp = fi->KernPairs;
- limit = p + 4 * fi->NumKernPair;
-
- /* PFM kerning data are stored by encoding rather than glyph index, */
- /* so find the PostScript charmap of this font and install it */
- /* temporarily. If we find no PostScript charmap, then just use */
- /* the default and hope it is the right one. */
- oldcharmap = t1_face->charmap;
- charmap = NULL;
-
- for ( n = 0; n < t1_face->num_charmaps; n++ )
- {
- charmap = t1_face->charmaps[n];
- /* check against PostScript pseudo platform */
- if ( charmap->platform_id == 7 )
- {
- error = FT_Set_Charmap( t1_face, charmap );
- if ( error )
- goto Exit;
- break;
- }
- }
-
- /* Kerning info is stored as: */
- /* */
- /* encoding of first glyph (1 byte) */
- /* encoding of second glyph (1 byte) */
- /* offset (little-endian short) */
- for ( ; p < limit; p += 4 )
- {
- kp->index1 = FT_Get_Char_Index( t1_face, p[0] );
- kp->index2 = FT_Get_Char_Index( t1_face, p[1] );
-
- kp->x = (FT_Int)FT_PEEK_SHORT_LE(p + 2);
- kp->y = 0;
-
- kp++;
- }
-
- if ( oldcharmap )
- error = FT_Set_Charmap( t1_face, oldcharmap );
- if ( error )
- goto Exit;
-
- /* now, sort the kern pairs according to their glyph indices */
- ft_qsort( fi->KernPairs, fi->NumKernPair, sizeof ( AFM_KernPairRec ),
- compare_kern_pairs );
-
- Exit:
- if ( error )
- {
- FT_FREE( fi->KernPairs );
- fi->NumKernPair = 0;
- }
-
- return error;
- }
-
-
- /* parse a metrics file -- either AFM or PFM depending on what */
- /* it turns out to be */
- FT_LOCAL_DEF( FT_Error )
- T1_Read_Metrics( FT_Face t1_face,
- FT_Stream stream )
- {
- PSAux_Service psaux;
- FT_Memory memory = stream->memory;
- AFM_ParserRec parser;
- AFM_FontInfo fi = NULL;
- FT_Error error = FT_ERR( Unknown_File_Format );
- T1_Face face = (T1_Face)t1_face;
- T1_Font t1_font = &face->type1;
-
-
- if ( face->afm_data )
- {
- FT_TRACE1(( "T1_Read_Metrics:"
- " Freeing previously attached metrics data.\n" ));
- T1_Done_Metrics( memory, (AFM_FontInfo)face->afm_data );
-
- face->afm_data = NULL;
- }
-
- if ( FT_NEW( fi ) ||
- FT_FRAME_ENTER( stream->size ) )
- goto Exit;
-
- fi->FontBBox = t1_font->font_bbox;
- fi->Ascender = t1_font->font_bbox.yMax;
- fi->Descender = t1_font->font_bbox.yMin;
-
- psaux = (PSAux_Service)face->psaux;
- if ( psaux->afm_parser_funcs )
- {
- error = psaux->afm_parser_funcs->init( &parser,
- stream->memory,
- stream->cursor,
- stream->limit );
-
- if ( !error )
- {
- parser.FontInfo = fi;
- parser.get_index = t1_get_index;
- parser.user_data = t1_font;
-
- error = psaux->afm_parser_funcs->parse( &parser );
- psaux->afm_parser_funcs->done( &parser );
- }
- }
-
- if ( FT_ERR_EQ( error, Unknown_File_Format ) )
- {
- FT_Byte* start = stream->cursor;
-
-
- /* MS Windows allows versions up to 0x3FF without complaining */
- if ( stream->size > 6 &&
- start[1] < 4 &&
- FT_PEEK_ULONG_LE( start + 2 ) == stream->size )
- error = T1_Read_PFM( t1_face, stream, fi );
- }
-
- if ( !error )
- {
- t1_font->font_bbox = fi->FontBBox;
-
- t1_face->bbox.xMin = fi->FontBBox.xMin >> 16;
- t1_face->bbox.yMin = fi->FontBBox.yMin >> 16;
- /* no `U' suffix here to 0xFFFF! */
- t1_face->bbox.xMax = ( fi->FontBBox.xMax + 0xFFFF ) >> 16;
- t1_face->bbox.yMax = ( fi->FontBBox.yMax + 0xFFFF ) >> 16;
-
- /* no `U' suffix here to 0x8000! */
- t1_face->ascender = (FT_Short)( ( fi->Ascender + 0x8000 ) >> 16 );
- t1_face->descender = (FT_Short)( ( fi->Descender + 0x8000 ) >> 16 );
-
- if ( fi->NumKernPair )
- {
- t1_face->face_flags |= FT_FACE_FLAG_KERNING;
- face->afm_data = fi;
- fi = NULL;
- }
- }
-
- FT_FRAME_EXIT();
-
- Exit:
- if ( fi )
- T1_Done_Metrics( memory, fi );
-
- return error;
- }
-
-
- /* find the kerning for a given glyph pair */
- FT_LOCAL_DEF( void )
- T1_Get_Kerning( AFM_FontInfo fi,
- FT_UInt glyph1,
- FT_UInt glyph2,
- FT_Vector* kerning )
- {
- AFM_KernPair min, mid, max;
- FT_ULong idx = KERN_INDEX( glyph1, glyph2 );
-
-
- /* simple binary search */
- min = fi->KernPairs;
- max = min + fi->NumKernPair - 1;
-
- while ( min <= max )
- {
- FT_ULong midi;
-
-
- mid = min + ( max - min ) / 2;
- midi = KERN_INDEX( mid->index1, mid->index2 );
-
- if ( midi == idx )
- {
- kerning->x = mid->x;
- kerning->y = mid->y;
-
- return;
- }
-
- if ( midi < idx )
- min = mid + 1;
- else
- max = mid - 1;
- }
-
- kerning->x = 0;
- kerning->y = 0;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Get_Track_Kerning( FT_Face face,
- FT_Fixed ptsize,
- FT_Int degree,
- FT_Fixed* kerning )
- {
- AFM_FontInfo fi = (AFM_FontInfo)( (T1_Face)face )->afm_data;
- FT_UInt i;
-
-
- if ( !fi )
- return FT_THROW( Invalid_Argument );
-
- for ( i = 0; i < fi->NumTrackKern; i++ )
- {
- AFM_TrackKern tk = fi->TrackKerns + i;
-
-
- if ( tk->degree != degree )
- continue;
-
- if ( ptsize < tk->min_ptsize )
- *kerning = tk->min_kern;
- else if ( ptsize > tk->max_ptsize )
- *kerning = tk->max_kern;
- else
- {
- *kerning = FT_MulDiv( ptsize - tk->min_ptsize,
- tk->max_kern - tk->min_kern,
- tk->max_ptsize - tk->min_ptsize ) +
- tk->min_kern;
- }
- }
-
- return FT_Err_Ok;
- }
-
-#else /* T1_CONFIG_OPTION_NO_AFM */
-
- /* ANSI C doesn't like empty source files */
- typedef int _t1_afm_dummy;
-
-#endif /* T1_CONFIG_OPTION_NO_AFM */
-
-
-/* END */
diff --git a/src/type1/t1afm.h b/src/type1/t1afm.h
deleted file mode 100644
index 9f62cd013..000000000
--- a/src/type1/t1afm.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1afm.h */
-/* */
-/* AFM support for Type 1 fonts (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef T1AFM_H_
-#define T1AFM_H_
-
-#include <ft2build.h>
-#include "t1objs.h"
-#include FT_INTERNAL_TYPE1_TYPES_H
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( FT_Error )
- T1_Read_Metrics( FT_Face face,
- FT_Stream stream );
-
- FT_LOCAL( void )
- T1_Done_Metrics( FT_Memory memory,
- AFM_FontInfo fi );
-
- FT_LOCAL( void )
- T1_Get_Kerning( AFM_FontInfo fi,
- FT_UInt glyph1,
- FT_UInt glyph2,
- FT_Vector* kerning );
-
- FT_LOCAL( FT_Error )
- T1_Get_Track_Kerning( FT_Face face,
- FT_Fixed ptsize,
- FT_Int degree,
- FT_Fixed* kerning );
-
-FT_END_HEADER
-
-#endif /* T1AFM_H_ */
-
-
-/* END */
diff --git a/src/type1/t1driver.c b/src/type1/t1driver.c
deleted file mode 100644
index c2089947f..000000000
--- a/src/type1/t1driver.c
+++ /dev/null
@@ -1,756 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1driver.c */
-/* */
-/* Type 1 driver interface (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include "t1driver.h"
-#include "t1gload.h"
-#include "t1load.h"
-
-#include "t1errors.h"
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
-#include "t1afm.h"
-#endif
-
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_HASH_H
-
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_GLYPH_DICT_H
-#include FT_SERVICE_FONT_FORMAT_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_SERVICE_POSTSCRIPT_INFO_H
-#include FT_SERVICE_KERNING_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_t1driver
-
- /*
- * GLYPH DICT SERVICE
- *
- */
-
- static FT_Error
- t1_get_glyph_name( T1_Face face,
- FT_UInt glyph_index,
- FT_Pointer buffer,
- FT_UInt buffer_max )
- {
- FT_STRCPYN( buffer, face->type1.glyph_names[glyph_index], buffer_max );
-
- return FT_Err_Ok;
- }
-
-
- static FT_UInt
- t1_get_name_index( T1_Face face,
- FT_String* glyph_name )
- {
- FT_Int i;
-
-
- for ( i = 0; i < face->type1.num_glyphs; i++ )
- {
- FT_String* gname = face->type1.glyph_names[i];
-
-
- if ( !ft_strcmp( glyph_name, gname ) )
- return (FT_UInt)i;
- }
-
- return 0;
- }
-
-
- static const FT_Service_GlyphDictRec t1_service_glyph_dict =
- {
- (FT_GlyphDict_GetNameFunc) t1_get_glyph_name, /* get_name */
- (FT_GlyphDict_NameIndexFunc)t1_get_name_index /* name_index */
- };
-
-
- /*
- * POSTSCRIPT NAME SERVICE
- *
- */
-
- static const char*
- t1_get_ps_name( T1_Face face )
- {
- return (const char*) face->type1.font_name;
- }
-
-
- static const FT_Service_PsFontNameRec t1_service_ps_name =
- {
- (FT_PsName_GetFunc)t1_get_ps_name /* get_ps_font_name */
- };
-
-
- /*
- * MULTIPLE MASTERS SERVICE
- *
- */
-
-#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
- static const FT_Service_MultiMastersRec t1_service_multi_masters =
- {
- (FT_Get_MM_Func) T1_Get_Multi_Master, /* get_mm */
- (FT_Set_MM_Design_Func) T1_Set_MM_Design, /* set_mm_design */
- (FT_Set_MM_Blend_Func) T1_Set_MM_Blend, /* set_mm_blend */
- (FT_Get_MM_Blend_Func) T1_Get_MM_Blend, /* get_mm_blend */
- (FT_Get_MM_Var_Func) T1_Get_MM_Var, /* get_mm_var */
- (FT_Set_Var_Design_Func)T1_Set_Var_Design, /* set_var_design */
- (FT_Get_Var_Design_Func)T1_Get_Var_Design, /* get_var_design */
-
- (FT_Get_Var_Blend_Func) NULL, /* get_var_blend */
- (FT_Done_Blend_Func) T1_Done_Blend /* done_blend */
- };
-#endif
-
-
- /*
- * POSTSCRIPT INFO SERVICE
- *
- */
-
- static FT_Error
- t1_ps_get_font_info( FT_Face face,
- PS_FontInfoRec* afont_info )
- {
- *afont_info = ((T1_Face)face)->type1.font_info;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Error
- t1_ps_get_font_extra( FT_Face face,
- PS_FontExtraRec* afont_extra )
- {
- *afont_extra = ((T1_Face)face)->type1.font_extra;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Int
- t1_ps_has_glyph_names( FT_Face face )
- {
- FT_UNUSED( face );
-
- return 1;
- }
-
-
- static FT_Error
- t1_ps_get_font_private( FT_Face face,
- PS_PrivateRec* afont_private )
- {
- *afont_private = ((T1_Face)face)->type1.private_dict;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Long
- t1_ps_get_font_value( FT_Face face,
- PS_Dict_Keys key,
- FT_UInt idx,
- void *value,
- FT_Long value_len_ )
- {
- FT_ULong retval = 0; /* always >= 1 if valid */
- FT_ULong value_len = value_len_ < 0 ? 0 : (FT_ULong)value_len_;
-
- T1_Face t1face = (T1_Face)face;
- T1_Font type1 = &t1face->type1;
-
-
- switch ( key )
- {
- case PS_DICT_FONT_TYPE:
- retval = sizeof ( type1->font_type );
- if ( value && value_len >= retval )
- *((FT_Byte *)value) = type1->font_type;
- break;
-
- case PS_DICT_FONT_MATRIX:
- if ( idx < sizeof ( type1->font_matrix ) /
- sizeof ( type1->font_matrix.xx ) )
- {
- FT_Fixed val = 0;
-
-
- retval = sizeof ( val );
- if ( value && value_len >= retval )
- {
- switch ( idx )
- {
- case 0:
- val = type1->font_matrix.xx;
- break;
- case 1:
- val = type1->font_matrix.xy;
- break;
- case 2:
- val = type1->font_matrix.yx;
- break;
- case 3:
- val = type1->font_matrix.yy;
- break;
- }
- *((FT_Fixed *)value) = val;
- }
- }
- break;
-
- case PS_DICT_FONT_BBOX:
- if ( idx < sizeof ( type1->font_bbox ) /
- sizeof ( type1->font_bbox.xMin ) )
- {
- FT_Fixed val = 0;
-
-
- retval = sizeof ( val );
- if ( value && value_len >= retval )
- {
- switch ( idx )
- {
- case 0:
- val = type1->font_bbox.xMin;
- break;
- case 1:
- val = type1->font_bbox.yMin;
- break;
- case 2:
- val = type1->font_bbox.xMax;
- break;
- case 3:
- val = type1->font_bbox.yMax;
- break;
- }
- *((FT_Fixed *)value) = val;
- }
- }
- break;
-
- case PS_DICT_PAINT_TYPE:
- retval = sizeof ( type1->paint_type );
- if ( value && value_len >= retval )
- *((FT_Byte *)value) = type1->paint_type;
- break;
-
- case PS_DICT_FONT_NAME:
- retval = ft_strlen( type1->font_name ) + 1;
- if ( value && value_len >= retval )
- ft_memcpy( value, (void *)( type1->font_name ), retval );
- break;
-
- case PS_DICT_UNIQUE_ID:
- retval = sizeof ( type1->private_dict.unique_id );
- if ( value && value_len >= retval )
- *((FT_Int *)value) = type1->private_dict.unique_id;
- break;
-
- case PS_DICT_NUM_CHAR_STRINGS:
- retval = sizeof ( type1->num_glyphs );
- if ( value && value_len >= retval )
- *((FT_Int *)value) = type1->num_glyphs;
- break;
-
- case PS_DICT_CHAR_STRING_KEY:
- if ( idx < (FT_UInt)type1->num_glyphs )
- {
- retval = ft_strlen( type1->glyph_names[idx] ) + 1;
- if ( value && value_len >= retval )
- {
- ft_memcpy( value, (void *)( type1->glyph_names[idx] ), retval );
- ((FT_Char *)value)[retval - 1] = (FT_Char)'\0';
- }
- }
- break;
-
- case PS_DICT_CHAR_STRING:
- if ( idx < (FT_UInt)type1->num_glyphs )
- {
- retval = type1->charstrings_len[idx] + 1;
- if ( value && value_len >= retval )
- {
- ft_memcpy( value, (void *)( type1->charstrings[idx] ),
- retval - 1 );
- ((FT_Char *)value)[retval - 1] = (FT_Char)'\0';
- }
- }
- break;
-
- case PS_DICT_ENCODING_TYPE:
- retval = sizeof ( type1->encoding_type );
- if ( value && value_len >= retval )
- *((T1_EncodingType *)value) = type1->encoding_type;
- break;
-
- case PS_DICT_ENCODING_ENTRY:
- if ( type1->encoding_type == T1_ENCODING_TYPE_ARRAY &&
- idx < (FT_UInt)type1->encoding.num_chars )
- {
- retval = ft_strlen( type1->encoding.char_name[idx] ) + 1;
- if ( value && value_len >= retval )
- {
- ft_memcpy( value, (void *)( type1->encoding.char_name[idx] ),
- retval - 1 );
- ((FT_Char *)value)[retval - 1] = (FT_Char)'\0';
- }
- }
- break;
-
- case PS_DICT_NUM_SUBRS:
- retval = sizeof ( type1->num_subrs );
- if ( value && value_len >= retval )
- *((FT_Int *)value) = type1->num_subrs;
- break;
-
- case PS_DICT_SUBR:
- {
- FT_Bool ok = 0;
-
-
- if ( type1->subrs_hash )
- {
- /* convert subr index to array index */
- size_t* val = ft_hash_num_lookup( (FT_Int)idx,
- type1->subrs_hash );
-
-
- if ( val )
- {
- idx = *val;
- ok = 1;
- }
- }
- else
- {
- if ( idx < (FT_UInt)type1->num_subrs )
- ok = 1;
- }
-
- if ( ok )
- {
- retval = type1->subrs_len[idx] + 1;
- if ( value && value_len >= retval )
- {
- ft_memcpy( value, (void *)( type1->subrs[idx] ), retval - 1 );
- ((FT_Char *)value)[retval - 1] = (FT_Char)'\0';
- }
- }
- }
- break;
-
- case PS_DICT_STD_HW:
- retval = sizeof ( type1->private_dict.standard_width[0] );
- if ( value && value_len >= retval )
- *((FT_UShort *)value) = type1->private_dict.standard_width[0];
- break;
-
- case PS_DICT_STD_VW:
- retval = sizeof ( type1->private_dict.standard_height[0] );
- if ( value && value_len >= retval )
- *((FT_UShort *)value) = type1->private_dict.standard_height[0];
- break;
-
- case PS_DICT_NUM_BLUE_VALUES:
- retval = sizeof ( type1->private_dict.num_blue_values );
- if ( value && value_len >= retval )
- *((FT_Byte *)value) = type1->private_dict.num_blue_values;
- break;
-
- case PS_DICT_BLUE_VALUE:
- if ( idx < type1->private_dict.num_blue_values )
- {
- retval = sizeof ( type1->private_dict.blue_values[idx] );
- if ( value && value_len >= retval )
- *((FT_Short *)value) = type1->private_dict.blue_values[idx];
- }
- break;
-
- case PS_DICT_BLUE_SCALE:
- retval = sizeof ( type1->private_dict.blue_scale );
- if ( value && value_len >= retval )
- *((FT_Fixed *)value) = type1->private_dict.blue_scale;
- break;
-
- case PS_DICT_BLUE_FUZZ:
- retval = sizeof ( type1->private_dict.blue_fuzz );
- if ( value && value_len >= retval )
- *((FT_Int *)value) = type1->private_dict.blue_fuzz;
- break;
-
- case PS_DICT_BLUE_SHIFT:
- retval = sizeof ( type1->private_dict.blue_shift );
- if ( value && value_len >= retval )
- *((FT_Int *)value) = type1->private_dict.blue_shift;
- break;
-
- case PS_DICT_NUM_OTHER_BLUES:
- retval = sizeof ( type1->private_dict.num_other_blues );
- if ( value && value_len >= retval )
- *((FT_Byte *)value) = type1->private_dict.num_other_blues;
- break;
-
- case PS_DICT_OTHER_BLUE:
- if ( idx < type1->private_dict.num_other_blues )
- {
- retval = sizeof ( type1->private_dict.other_blues[idx] );
- if ( value && value_len >= retval )
- *((FT_Short *)value) = type1->private_dict.other_blues[idx];
- }
- break;
-
- case PS_DICT_NUM_FAMILY_BLUES:
- retval = sizeof ( type1->private_dict.num_family_blues );
- if ( value && value_len >= retval )
- *((FT_Byte *)value) = type1->private_dict.num_family_blues;
- break;
-
- case PS_DICT_FAMILY_BLUE:
- if ( idx < type1->private_dict.num_family_blues )
- {
- retval = sizeof ( type1->private_dict.family_blues[idx] );
- if ( value && value_len >= retval )
- *((FT_Short *)value) = type1->private_dict.family_blues[idx];
- }
- break;
-
- case PS_DICT_NUM_FAMILY_OTHER_BLUES:
- retval = sizeof ( type1->private_dict.num_family_other_blues );
- if ( value && value_len >= retval )
- *((FT_Byte *)value) = type1->private_dict.num_family_other_blues;
- break;
-
- case PS_DICT_FAMILY_OTHER_BLUE:
- if ( idx < type1->private_dict.num_family_other_blues )
- {
- retval = sizeof ( type1->private_dict.family_other_blues[idx] );
- if ( value && value_len >= retval )
- *((FT_Short *)value) = type1->private_dict.family_other_blues[idx];
- }
- break;
-
- case PS_DICT_NUM_STEM_SNAP_H:
- retval = sizeof ( type1->private_dict.num_snap_widths );
- if ( value && value_len >= retval )
- *((FT_Byte *)value) = type1->private_dict.num_snap_widths;
- break;
-
- case PS_DICT_STEM_SNAP_H:
- if ( idx < type1->private_dict.num_snap_widths )
- {
- retval = sizeof ( type1->private_dict.snap_widths[idx] );
- if ( value && value_len >= retval )
- *((FT_Short *)value) = type1->private_dict.snap_widths[idx];
- }
- break;
-
- case PS_DICT_NUM_STEM_SNAP_V:
- retval = sizeof ( type1->private_dict.num_snap_heights );
- if ( value && value_len >= retval )
- *((FT_Byte *)value) = type1->private_dict.num_snap_heights;
- break;
-
- case PS_DICT_STEM_SNAP_V:
- if ( idx < type1->private_dict.num_snap_heights )
- {
- retval = sizeof ( type1->private_dict.snap_heights[idx] );
- if ( value && value_len >= retval )
- *((FT_Short *)value) = type1->private_dict.snap_heights[idx];
- }
- break;
-
- case PS_DICT_RND_STEM_UP:
- retval = sizeof ( type1->private_dict.round_stem_up );
- if ( value && value_len >= retval )
- *((FT_Bool *)value) = type1->private_dict.round_stem_up;
- break;
-
- case PS_DICT_FORCE_BOLD:
- retval = sizeof ( type1->private_dict.force_bold );
- if ( value && value_len >= retval )
- *((FT_Bool *)value) = type1->private_dict.force_bold;
- break;
-
- case PS_DICT_MIN_FEATURE:
- if ( idx < sizeof ( type1->private_dict.min_feature ) /
- sizeof ( type1->private_dict.min_feature[0] ) )
- {
- retval = sizeof ( type1->private_dict.min_feature[idx] );
- if ( value && value_len >= retval )
- *((FT_Short *)value) = type1->private_dict.min_feature[idx];
- }
- break;
-
- case PS_DICT_LEN_IV:
- retval = sizeof ( type1->private_dict.lenIV );
- if ( value && value_len >= retval )
- *((FT_Int *)value) = type1->private_dict.lenIV;
- break;
-
- case PS_DICT_PASSWORD:
- retval = sizeof ( type1->private_dict.password );
- if ( value && value_len >= retval )
- *((FT_Long *)value) = type1->private_dict.password;
- break;
-
- case PS_DICT_LANGUAGE_GROUP:
- retval = sizeof ( type1->private_dict.language_group );
- if ( value && value_len >= retval )
- *((FT_Long *)value) = type1->private_dict.language_group;
- break;
-
- case PS_DICT_IS_FIXED_PITCH:
- retval = sizeof ( type1->font_info.is_fixed_pitch );
- if ( value && value_len >= retval )
- *((FT_Bool *)value) = type1->font_info.is_fixed_pitch;
- break;
-
- case PS_DICT_UNDERLINE_POSITION:
- retval = sizeof ( type1->font_info.underline_position );
- if ( value && value_len >= retval )
- *((FT_Short *)value) = type1->font_info.underline_position;
- break;
-
- case PS_DICT_UNDERLINE_THICKNESS:
- retval = sizeof ( type1->font_info.underline_thickness );
- if ( value && value_len >= retval )
- *((FT_UShort *)value) = type1->font_info.underline_thickness;
- break;
-
- case PS_DICT_FS_TYPE:
- retval = sizeof ( type1->font_extra.fs_type );
- if ( value && value_len >= retval )
- *((FT_UShort *)value) = type1->font_extra.fs_type;
- break;
-
- case PS_DICT_VERSION:
- retval = ft_strlen( type1->font_info.version ) + 1;
- if ( value && value_len >= retval )
- ft_memcpy( value, (void *)( type1->font_info.version ), retval );
- break;
-
- case PS_DICT_NOTICE:
- retval = ft_strlen( type1->font_info.notice ) + 1;
- if ( value && value_len >= retval )
- ft_memcpy( value, (void *)( type1->font_info.notice ), retval );
- break;
-
- case PS_DICT_FULL_NAME:
- retval = ft_strlen( type1->font_info.full_name ) + 1;
- if ( value && value_len >= retval )
- ft_memcpy( value, (void *)( type1->font_info.full_name ), retval );
- break;
-
- case PS_DICT_FAMILY_NAME:
- retval = ft_strlen( type1->font_info.family_name ) + 1;
- if ( value && value_len >= retval )
- ft_memcpy( value, (void *)( type1->font_info.family_name ), retval );
- break;
-
- case PS_DICT_WEIGHT:
- retval = ft_strlen( type1->font_info.weight ) + 1;
- if ( value && value_len >= retval )
- ft_memcpy( value, (void *)( type1->font_info.weight ), retval );
- break;
-
- case PS_DICT_ITALIC_ANGLE:
- retval = sizeof ( type1->font_info.italic_angle );
- if ( value && value_len >= retval )
- *((FT_Long *)value) = type1->font_info.italic_angle;
- break;
- }
-
- return retval == 0 ? -1 : (FT_Long)retval;
- }
-
-
- static const FT_Service_PsInfoRec t1_service_ps_info =
- {
- (PS_GetFontInfoFunc) t1_ps_get_font_info, /* ps_get_font_info */
- (PS_GetFontExtraFunc) t1_ps_get_font_extra, /* ps_get_font_extra */
- (PS_HasGlyphNamesFunc) t1_ps_has_glyph_names, /* ps_has_glyph_names */
- (PS_GetFontPrivateFunc)t1_ps_get_font_private, /* ps_get_font_private */
- (PS_GetFontValueFunc) t1_ps_get_font_value, /* ps_get_font_value */
- };
-
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
- static const FT_Service_KerningRec t1_service_kerning =
- {
- T1_Get_Track_Kerning, /* get_track */
- };
-#endif
-
-
- /*
- * SERVICE LIST
- *
- */
-
- static const FT_ServiceDescRec t1_services[] =
- {
- { FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &t1_service_ps_name },
- { FT_SERVICE_ID_GLYPH_DICT, &t1_service_glyph_dict },
- { FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TYPE_1 },
- { FT_SERVICE_ID_POSTSCRIPT_INFO, &t1_service_ps_info },
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
- { FT_SERVICE_ID_KERNING, &t1_service_kerning },
-#endif
-
-#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
- { FT_SERVICE_ID_MULTI_MASTERS, &t1_service_multi_masters },
-#endif
- { NULL, NULL }
- };
-
-
- FT_CALLBACK_DEF( FT_Module_Interface )
- Get_Interface( FT_Module module,
- const FT_String* t1_interface )
- {
- FT_UNUSED( module );
-
- return ft_service_list_lookup( t1_services, t1_interface );
- }
-
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Get_Kerning */
- /* */
- /* <Description> */
- /* A driver method used to return the kerning vector between two */
- /* glyphs of the same face. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* left_glyph :: The index of the left glyph in the kern pair. */
- /* */
- /* right_glyph :: The index of the right glyph in the kern pair. */
- /* */
- /* <Output> */
- /* kerning :: The kerning vector. This is in font units for */
- /* scalable formats, and in pixels for fixed-sizes */
- /* formats. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* Only horizontal layouts (left-to-right & right-to-left) are */
- /* supported by this function. Other layouts, or more sophisticated */
- /* kernings are out of scope of this method (the basic driver */
- /* interface is meant to be simple). */
- /* */
- /* They can be implemented by format-specific interfaces. */
- /* */
- static FT_Error
- Get_Kerning( FT_Face t1face, /* T1_Face */
- FT_UInt left_glyph,
- FT_UInt right_glyph,
- FT_Vector* kerning )
- {
- T1_Face face = (T1_Face)t1face;
-
-
- kerning->x = 0;
- kerning->y = 0;
-
- if ( face->afm_data )
- T1_Get_Kerning( (AFM_FontInfo)face->afm_data,
- left_glyph,
- right_glyph,
- kerning );
-
- return FT_Err_Ok;
- }
-
-
-#endif /* T1_CONFIG_OPTION_NO_AFM */
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Driver_ClassRec t1_driver_class =
- {
- {
- FT_MODULE_FONT_DRIVER |
- FT_MODULE_DRIVER_SCALABLE |
- FT_MODULE_DRIVER_HAS_HINTER,
-
- sizeof ( FT_DriverRec ),
-
- "type1",
- 0x10000L,
- 0x20000L,
-
- NULL, /* module-specific interface */
-
- T1_Driver_Init, /* FT_Module_Constructor module_init */
- T1_Driver_Done, /* FT_Module_Destructor module_done */
- Get_Interface, /* FT_Module_Requester get_interface */
- },
-
- sizeof ( T1_FaceRec ),
- sizeof ( T1_SizeRec ),
- sizeof ( T1_GlyphSlotRec ),
-
- T1_Face_Init, /* FT_Face_InitFunc init_face */
- T1_Face_Done, /* FT_Face_DoneFunc done_face */
- T1_Size_Init, /* FT_Size_InitFunc init_size */
- T1_Size_Done, /* FT_Size_DoneFunc done_size */
- T1_GlyphSlot_Init, /* FT_Slot_InitFunc init_slot */
- T1_GlyphSlot_Done, /* FT_Slot_DoneFunc done_slot */
-
- T1_Load_Glyph, /* FT_Slot_LoadFunc load_glyph */
-
-#ifdef T1_CONFIG_OPTION_NO_AFM
- NULL, /* FT_Face_GetKerningFunc get_kerning */
- NULL, /* FT_Face_AttachFunc attach_file */
-#else
- Get_Kerning, /* FT_Face_GetKerningFunc get_kerning */
- T1_Read_Metrics, /* FT_Face_AttachFunc attach_file */
-#endif
- T1_Get_Advances, /* FT_Face_GetAdvancesFunc get_advances */
-
- T1_Size_Request, /* FT_Size_RequestFunc request_size */
- NULL /* FT_Size_SelectFunc select_size */
- };
-
-
-/* END */
diff --git a/src/type1/t1driver.h b/src/type1/t1driver.h
deleted file mode 100644
index 292786448..000000000
--- a/src/type1/t1driver.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1driver.h */
-/* */
-/* High-level Type 1 driver interface (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef T1DRIVER_H_
-#define T1DRIVER_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-
-
-FT_BEGIN_HEADER
-
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
-
- FT_EXPORT_VAR( const FT_Driver_ClassRec ) t1_driver_class;
-
-
-FT_END_HEADER
-
-#endif /* T1DRIVER_H_ */
-
-
-/* END */
diff --git a/src/type1/t1errors.h b/src/type1/t1errors.h
deleted file mode 100644
index 492dbb4a4..000000000
--- a/src/type1/t1errors.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1errors.h */
-/* */
-/* Type 1 error codes (specification only). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the Type 1 error enumeration constants. */
- /* */
- /*************************************************************************/
-
-#ifndef T1ERRORS_H_
-#define T1ERRORS_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX T1_Err_
-#define FT_ERR_BASE FT_Mod_Err_Type1
-
-#include FT_ERRORS_H
-
-#endif /* T1ERRORS_H_ */
-
-
-/* END */
diff --git a/src/type1/t1gload.c b/src/type1/t1gload.c
deleted file mode 100644
index aaf19b6dc..000000000
--- a/src/type1/t1gload.c
+++ /dev/null
@@ -1,524 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1gload.c */
-/* */
-/* Type 1 Glyph Loader (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include "t1gload.h"
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-
-#include "t1errors.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_t1gload
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /********** *********/
- /********** COMPUTE THE MAXIMUM ADVANCE WIDTH *********/
- /********** *********/
- /********** The following code is in charge of computing *********/
- /********** the maximum advance width of the font. It *********/
- /********** quickly processes each glyph charstring to *********/
- /********** extract the value from either a `sbw' or `seac' *********/
- /********** operator. *********/
- /********** *********/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- static FT_Error
- T1_Parse_Glyph_And_Get_Char_String( T1_Decoder decoder,
- FT_UInt glyph_index,
- FT_Data* char_string )
- {
- T1_Face face = (T1_Face)decoder->builder.face;
- T1_Font type1 = &face->type1;
- FT_Error error = FT_Err_Ok;
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- FT_Incremental_InterfaceRec *inc =
- face->root.internal->incremental_interface;
-#endif
-
-
- decoder->font_matrix = type1->font_matrix;
- decoder->font_offset = type1->font_offset;
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
-
- /* For incremental fonts get the character data using the */
- /* callback function. */
- if ( inc )
- error = inc->funcs->get_glyph_data( inc->object,
- glyph_index, char_string );
- else
-
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
-
- /* For ordinary fonts get the character data stored in the face record. */
- {
- char_string->pointer = type1->charstrings[glyph_index];
- char_string->length = (FT_Int)type1->charstrings_len[glyph_index];
- }
-
- if ( !error )
- error = decoder->funcs.parse_charstrings(
- decoder, (FT_Byte*)char_string->pointer,
- (FT_UInt)char_string->length );
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
-
- /* Incremental fonts can optionally override the metrics. */
- if ( !error && inc && inc->funcs->get_glyph_metrics )
- {
- FT_Incremental_MetricsRec metrics;
-
-
- metrics.bearing_x = FIXED_TO_INT( decoder->builder.left_bearing.x );
- metrics.bearing_y = 0;
- metrics.advance = FIXED_TO_INT( decoder->builder.advance.x );
- metrics.advance_v = FIXED_TO_INT( decoder->builder.advance.y );
-
- error = inc->funcs->get_glyph_metrics( inc->object,
- glyph_index, FALSE, &metrics );
-
- decoder->builder.left_bearing.x = INT_TO_FIXED( metrics.bearing_x );
- decoder->builder.advance.x = INT_TO_FIXED( metrics.advance );
- decoder->builder.advance.y = INT_TO_FIXED( metrics.advance_v );
- }
-
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
-
- return error;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- T1_Parse_Glyph( T1_Decoder decoder,
- FT_UInt glyph_index )
- {
- FT_Data glyph_data;
- FT_Error error = T1_Parse_Glyph_And_Get_Char_String(
- decoder, glyph_index, &glyph_data );
-
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
-
- if ( !error )
- {
- T1_Face face = (T1_Face)decoder->builder.face;
-
-
- if ( face->root.internal->incremental_interface )
- face->root.internal->incremental_interface->funcs->free_glyph_data(
- face->root.internal->incremental_interface->object,
- &glyph_data );
- }
-
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
-
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Compute_Max_Advance( T1_Face face,
- FT_Pos* max_advance )
- {
- FT_Error error;
- T1_DecoderRec decoder;
- FT_Int glyph_index;
- T1_Font type1 = &face->type1;
- PSAux_Service psaux = (PSAux_Service)face->psaux;
-
-
- FT_ASSERT( ( face->len_buildchar == 0 ) == ( face->buildchar == NULL ) );
-
- *max_advance = 0;
-
- /* initialize load decoder */
- error = psaux->t1_decoder_funcs->init( &decoder,
- (FT_Face)face,
- 0, /* size */
- 0, /* glyph slot */
- (FT_Byte**)type1->glyph_names,
- face->blend,
- 0,
- FT_RENDER_MODE_NORMAL,
- T1_Parse_Glyph );
- if ( error )
- return error;
-
- decoder.builder.metrics_only = 1;
- decoder.builder.load_points = 0;
-
- decoder.num_subrs = type1->num_subrs;
- decoder.subrs = type1->subrs;
- decoder.subrs_len = type1->subrs_len;
- decoder.subrs_hash = type1->subrs_hash;
-
- decoder.buildchar = face->buildchar;
- decoder.len_buildchar = face->len_buildchar;
-
- *max_advance = 0;
-
- /* for each glyph, parse the glyph charstring and extract */
- /* the advance width */
- for ( glyph_index = 0; glyph_index < type1->num_glyphs; glyph_index++ )
- {
- /* now get load the unscaled outline */
- (void)T1_Parse_Glyph( &decoder, (FT_UInt)glyph_index );
- if ( glyph_index == 0 || decoder.builder.advance.x > *max_advance )
- *max_advance = decoder.builder.advance.x;
-
- /* ignore the error if one occurred - skip to next glyph */
- }
-
- psaux->t1_decoder_funcs->done( &decoder );
-
- return FT_Err_Ok;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Get_Advances( FT_Face t1face, /* T1_Face */
- FT_UInt first,
- FT_UInt count,
- FT_Int32 load_flags,
- FT_Fixed* advances )
- {
- T1_Face face = (T1_Face)t1face;
- T1_DecoderRec decoder;
- T1_Font type1 = &face->type1;
- PSAux_Service psaux = (PSAux_Service)face->psaux;
- FT_UInt nn;
- FT_Error error;
-
-
- if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
- {
- for ( nn = 0; nn < count; nn++ )
- advances[nn] = 0;
-
- return FT_Err_Ok;
- }
-
- error = psaux->t1_decoder_funcs->init( &decoder,
- (FT_Face)face,
- 0, /* size */
- 0, /* glyph slot */
- (FT_Byte**)type1->glyph_names,
- face->blend,
- 0,
- FT_RENDER_MODE_NORMAL,
- T1_Parse_Glyph );
- if ( error )
- return error;
-
- decoder.builder.metrics_only = 1;
- decoder.builder.load_points = 0;
-
- decoder.num_subrs = type1->num_subrs;
- decoder.subrs = type1->subrs;
- decoder.subrs_len = type1->subrs_len;
- decoder.subrs_hash = type1->subrs_hash;
-
- decoder.buildchar = face->buildchar;
- decoder.len_buildchar = face->len_buildchar;
-
- for ( nn = 0; nn < count; nn++ )
- {
- error = T1_Parse_Glyph( &decoder, first + nn );
- if ( !error )
- advances[nn] = FIXED_TO_INT( decoder.builder.advance.x );
- else
- advances[nn] = 0;
- }
-
- return FT_Err_Ok;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Load_Glyph( FT_GlyphSlot t1glyph, /* T1_GlyphSlot */
- FT_Size t1size, /* T1_Size */
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- T1_GlyphSlot glyph = (T1_GlyphSlot)t1glyph;
- FT_Error error;
- T1_DecoderRec decoder;
- T1_Face face = (T1_Face)t1glyph->face;
- FT_Bool hinting;
- T1_Font type1 = &face->type1;
- PSAux_Service psaux = (PSAux_Service)face->psaux;
- const T1_Decoder_Funcs decoder_funcs = psaux->t1_decoder_funcs;
-
- FT_Matrix font_matrix;
- FT_Vector font_offset;
- FT_Data glyph_data;
- FT_Bool must_finish_decoder = FALSE;
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- FT_Bool glyph_data_loaded = 0;
-#endif
-
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- if ( glyph_index >= (FT_UInt)face->root.num_glyphs &&
- !face->root.internal->incremental_interface )
-#else
- if ( glyph_index >= (FT_UInt)face->root.num_glyphs )
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- FT_TRACE1(( "T1_Load_Glyph: glyph index %d\n", glyph_index ));
-
- FT_ASSERT( ( face->len_buildchar == 0 ) == ( face->buildchar == NULL ) );
-
- if ( load_flags & FT_LOAD_NO_RECURSE )
- load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
-
- if ( t1size )
- {
- glyph->x_scale = t1size->metrics.x_scale;
- glyph->y_scale = t1size->metrics.y_scale;
- }
- else
- {
- glyph->x_scale = 0x10000L;
- glyph->y_scale = 0x10000L;
- }
-
- t1glyph->outline.n_points = 0;
- t1glyph->outline.n_contours = 0;
-
- hinting = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 &&
- ( load_flags & FT_LOAD_NO_HINTING ) == 0 );
-
- t1glyph->format = FT_GLYPH_FORMAT_OUTLINE;
-
- error = decoder_funcs->init( &decoder,
- t1glyph->face,
- t1size,
- t1glyph,
- (FT_Byte**)type1->glyph_names,
- face->blend,
- FT_BOOL( hinting ),
- FT_LOAD_TARGET_MODE( load_flags ),
- T1_Parse_Glyph );
- if ( error )
- goto Exit;
-
- must_finish_decoder = TRUE;
-
- decoder.builder.no_recurse = FT_BOOL(
- ( load_flags & FT_LOAD_NO_RECURSE ) != 0 );
-
- decoder.num_subrs = type1->num_subrs;
- decoder.subrs = type1->subrs;
- decoder.subrs_len = type1->subrs_len;
- decoder.subrs_hash = type1->subrs_hash;
-
- decoder.buildchar = face->buildchar;
- decoder.len_buildchar = face->len_buildchar;
-
- /* now load the unscaled outline */
- error = T1_Parse_Glyph_And_Get_Char_String( &decoder, glyph_index,
- &glyph_data );
- if ( error )
- goto Exit;
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- glyph_data_loaded = 1;
-#endif
-
- font_matrix = decoder.font_matrix;
- font_offset = decoder.font_offset;
-
- /* save new glyph tables */
- decoder_funcs->done( &decoder );
-
- must_finish_decoder = FALSE;
-
- /* now, set the metrics -- this is rather simple, as */
- /* the left side bearing is the xMin, and the top side */
- /* bearing the yMax */
- if ( !error )
- {
- t1glyph->outline.flags &= FT_OUTLINE_OWNER;
- t1glyph->outline.flags |= FT_OUTLINE_REVERSE_FILL;
-
- /* for composite glyphs, return only left side bearing and */
- /* advance width */
- if ( load_flags & FT_LOAD_NO_RECURSE )
- {
- FT_Slot_Internal internal = t1glyph->internal;
-
-
- t1glyph->metrics.horiBearingX =
- FIXED_TO_INT( decoder.builder.left_bearing.x );
- t1glyph->metrics.horiAdvance =
- FIXED_TO_INT( decoder.builder.advance.x );
-
- internal->glyph_matrix = font_matrix;
- internal->glyph_delta = font_offset;
- internal->glyph_transformed = 1;
- }
- else
- {
- FT_BBox cbox;
- FT_Glyph_Metrics* metrics = &t1glyph->metrics;
-
-
- /* copy the _unscaled_ advance width */
- metrics->horiAdvance =
- FIXED_TO_INT( decoder.builder.advance.x );
- t1glyph->linearHoriAdvance =
- FIXED_TO_INT( decoder.builder.advance.x );
- t1glyph->internal->glyph_transformed = 0;
-
- if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
- {
- /* make up vertical ones */
- metrics->vertAdvance = ( face->type1.font_bbox.yMax -
- face->type1.font_bbox.yMin ) >> 16;
- t1glyph->linearVertAdvance = metrics->vertAdvance;
- }
- else
- {
- metrics->vertAdvance =
- FIXED_TO_INT( decoder.builder.advance.y );
- t1glyph->linearVertAdvance =
- FIXED_TO_INT( decoder.builder.advance.y );
- }
-
- t1glyph->format = FT_GLYPH_FORMAT_OUTLINE;
-
- if ( t1size && t1size->metrics.y_ppem < 24 )
- t1glyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION;
-
-#if 1
- /* apply the font matrix, if any */
- if ( font_matrix.xx != 0x10000L || font_matrix.yy != 0x10000L ||
- font_matrix.xy != 0 || font_matrix.yx != 0 )
- {
- FT_Outline_Transform( &t1glyph->outline, &font_matrix );
-
- metrics->horiAdvance = FT_MulFix( metrics->horiAdvance,
- font_matrix.xx );
- metrics->vertAdvance = FT_MulFix( metrics->vertAdvance,
- font_matrix.yy );
- }
-
- if ( font_offset.x || font_offset.y )
- {
- FT_Outline_Translate( &t1glyph->outline,
- font_offset.x,
- font_offset.y );
-
- metrics->horiAdvance += font_offset.x;
- metrics->vertAdvance += font_offset.y;
- }
-#endif
-
- if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 )
- {
- /* scale the outline and the metrics */
- FT_Int n;
- FT_Outline* cur = decoder.builder.base;
- FT_Vector* vec = cur->points;
- FT_Fixed x_scale = glyph->x_scale;
- FT_Fixed y_scale = glyph->y_scale;
-
-
- /* First of all, scale the points, if we are not hinting */
- if ( !hinting || ! decoder.builder.hints_funcs )
- for ( n = cur->n_points; n > 0; n--, vec++ )
- {
- vec->x = FT_MulFix( vec->x, x_scale );
- vec->y = FT_MulFix( vec->y, y_scale );
- }
-
- /* Then scale the metrics */
- metrics->horiAdvance = FT_MulFix( metrics->horiAdvance, x_scale );
- metrics->vertAdvance = FT_MulFix( metrics->vertAdvance, y_scale );
- }
-
- /* compute the other metrics */
- FT_Outline_Get_CBox( &t1glyph->outline, &cbox );
-
- metrics->width = cbox.xMax - cbox.xMin;
- metrics->height = cbox.yMax - cbox.yMin;
-
- metrics->horiBearingX = cbox.xMin;
- metrics->horiBearingY = cbox.yMax;
-
- if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
- {
- /* make up vertical ones */
- ft_synthesize_vertical_metrics( metrics,
- metrics->vertAdvance );
- }
- }
-
- /* Set control data to the glyph charstrings. Note that this is */
- /* _not_ zero-terminated. */
- t1glyph->control_data = (FT_Byte*)glyph_data.pointer;
- t1glyph->control_len = glyph_data.length;
- }
-
-
- Exit:
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- if ( glyph_data_loaded && face->root.internal->incremental_interface )
- {
- face->root.internal->incremental_interface->funcs->free_glyph_data(
- face->root.internal->incremental_interface->object,
- &glyph_data );
-
- /* Set the control data to null - it is no longer available if */
- /* loaded incrementally. */
- t1glyph->control_data = NULL;
- t1glyph->control_len = 0;
- }
-#endif
-
- if ( must_finish_decoder )
- decoder_funcs->done( &decoder );
-
- return error;
- }
-
-
-/* END */
diff --git a/src/type1/t1gload.h b/src/type1/t1gload.h
deleted file mode 100644
index cc4d5e734..000000000
--- a/src/type1/t1gload.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1gload.h */
-/* */
-/* Type 1 Glyph Loader (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef T1GLOAD_H_
-#define T1GLOAD_H_
-
-
-#include <ft2build.h>
-#include "t1objs.h"
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( FT_Error )
- T1_Compute_Max_Advance( T1_Face face,
- FT_Pos* max_advance );
-
- FT_LOCAL( FT_Error )
- T1_Get_Advances( FT_Face face,
- FT_UInt first,
- FT_UInt count,
- FT_Int32 load_flags,
- FT_Fixed* advances );
-
- FT_LOCAL( FT_Error )
- T1_Load_Glyph( FT_GlyphSlot glyph,
- FT_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags );
-
-
-FT_END_HEADER
-
-#endif /* T1GLOAD_H_ */
-
-
-/* END */
diff --git a/src/type1/t1load.c b/src/type1/t1load.c
deleted file mode 100644
index f569d6bec..000000000
--- a/src/type1/t1load.c
+++ /dev/null
@@ -1,2449 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1load.c */
-/* */
-/* Type 1 font loader (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This is the new and improved Type 1 data loader for FreeType 2. The */
- /* old loader has several problems: it is slow, complex, difficult to */
- /* maintain, and contains incredible hacks to make it accept some */
- /* ill-formed Type 1 fonts without hiccup-ing. Moreover, about 5% of */
- /* the Type 1 fonts on my machine still aren't loaded correctly by it. */
- /* */
- /* This version is much simpler, much faster and also easier to read and */
- /* maintain by a great order of magnitude. The idea behind it is to */
- /* _not_ try to read the Type 1 token stream with a state machine (i.e. */
- /* a Postscript-like interpreter) but rather to perform simple pattern */
- /* matching. */
- /* */
- /* Indeed, nearly all data definitions follow a simple pattern like */
- /* */
- /* ... /Field <data> ... */
- /* */
- /* where <data> can be a number, a boolean, a string, or an array of */
- /* numbers. There are a few exceptions, namely the encoding, font name, */
- /* charstrings, and subrs; they are handled with a special pattern */
- /* matching routine. */
- /* */
- /* All other common cases are handled very simply. The matching rules */
- /* are defined in the file `t1tokens.h' through the use of several */
- /* macros calls PARSE_XXX. This file is included twice here; the first */
- /* time to generate parsing callback functions, the second time to */
- /* generate a table of keywords (with pointers to the associated */
- /* callback functions). */
- /* */
- /* The function `parse_dict' simply scans *linearly* a given dictionary */
- /* (either the top-level or private one) and calls the appropriate */
- /* callback when it encounters an immediate keyword. */
- /* */
- /* This is by far the fastest way one can find to parse and read all */
- /* data. */
- /* */
- /* This led to tremendous code size reduction. Note that later, the */
- /* glyph loader will also be _greatly_ simplified, and the automatic */
- /* hinter will replace the clumsy `t1hinter'. */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_CONFIG_CONFIG_H
-#include FT_MULTIPLE_MASTERS_H
-#include FT_INTERNAL_TYPE1_TYPES_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_HASH_H
-
-#include "t1load.h"
-#include "t1errors.h"
-
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
-#define IS_INCREMENTAL (FT_Bool)( face->root.internal->incremental_interface != 0 )
-#else
-#define IS_INCREMENTAL 0
-#endif
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_t1load
-
-
-#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MULTIPLE MASTERS SUPPORT *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static FT_Error
- t1_allocate_blend( T1_Face face,
- FT_UInt num_designs,
- FT_UInt num_axis )
- {
- PS_Blend blend;
- FT_Memory memory = face->root.memory;
- FT_Error error = FT_Err_Ok;
-
-
- blend = face->blend;
- if ( !blend )
- {
- if ( FT_NEW( blend ) )
- goto Exit;
-
- blend->num_default_design_vector = 0;
-
- face->blend = blend;
- }
-
- /* allocate design data if needed */
- if ( num_designs > 0 )
- {
- if ( blend->num_designs == 0 )
- {
- FT_UInt nn;
-
-
- /* allocate the blend `private' and `font_info' dictionaries */
- if ( FT_NEW_ARRAY( blend->font_infos[1], num_designs ) ||
- FT_NEW_ARRAY( blend->privates [1], num_designs ) ||
- FT_NEW_ARRAY( blend->bboxes [1], num_designs ) ||
- FT_NEW_ARRAY( blend->weight_vector, num_designs * 2 ) )
- goto Exit;
-
- blend->default_weight_vector = blend->weight_vector + num_designs;
-
- blend->font_infos[0] = &face->type1.font_info;
- blend->privates [0] = &face->type1.private_dict;
- blend->bboxes [0] = &face->type1.font_bbox;
-
- for ( nn = 2; nn <= num_designs; nn++ )
- {
- blend->font_infos[nn] = blend->font_infos[nn - 1] + 1;
- blend->privates [nn] = blend->privates [nn - 1] + 1;
- blend->bboxes [nn] = blend->bboxes [nn - 1] + 1;
- }
-
- blend->num_designs = num_designs;
- }
- else if ( blend->num_designs != num_designs )
- goto Fail;
- }
-
- /* allocate axis data if needed */
- if ( num_axis > 0 )
- {
- if ( blend->num_axis != 0 && blend->num_axis != num_axis )
- goto Fail;
-
- blend->num_axis = num_axis;
- }
-
- /* allocate the blend design pos table if needed */
- num_designs = blend->num_designs;
- num_axis = blend->num_axis;
- if ( num_designs && num_axis && blend->design_pos[0] == 0 )
- {
- FT_UInt n;
-
-
- if ( FT_NEW_ARRAY( blend->design_pos[0], num_designs * num_axis ) )
- goto Exit;
-
- for ( n = 1; n < num_designs; n++ )
- blend->design_pos[n] = blend->design_pos[0] + num_axis * n;
- }
-
- Exit:
- return error;
-
- Fail:
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Get_Multi_Master( T1_Face face,
- FT_Multi_Master* master )
- {
- PS_Blend blend = face->blend;
- FT_UInt n;
- FT_Error error;
-
-
- error = FT_THROW( Invalid_Argument );
-
- if ( blend )
- {
- master->num_axis = blend->num_axis;
- master->num_designs = blend->num_designs;
-
- for ( n = 0; n < blend->num_axis; n++ )
- {
- FT_MM_Axis* axis = master->axis + n;
- PS_DesignMap map = blend->design_map + n;
-
-
- axis->name = blend->axis_names[n];
- axis->minimum = map->design_points[0];
- axis->maximum = map->design_points[map->num_points - 1];
- }
-
- error = FT_Err_Ok;
- }
-
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* Given a normalized (blend) coordinate, figure out the design */
- /* coordinate appropriate for that value. */
- /* */
- static FT_Fixed
- mm_axis_unmap( PS_DesignMap axismap,
- FT_Fixed ncv )
- {
- int j;
-
-
- if ( ncv <= axismap->blend_points[0] )
- return INT_TO_FIXED( axismap->design_points[0] );
-
- for ( j = 1; j < axismap->num_points; j++ )
- {
- if ( ncv <= axismap->blend_points[j] )
- return INT_TO_FIXED( axismap->design_points[j - 1] ) +
- ( axismap->design_points[j] - axismap->design_points[j - 1] ) *
- FT_DivFix( ncv - axismap->blend_points[j - 1],
- axismap->blend_points[j] -
- axismap->blend_points[j - 1] );
- }
-
- return INT_TO_FIXED( axismap->design_points[axismap->num_points - 1] );
- }
-
-
- /*************************************************************************/
- /* */
- /* Given a vector of weights, one for each design, figure out the */
- /* normalized axis coordinates which gave rise to those weights. */
- /* */
- static void
- mm_weights_unmap( FT_Fixed* weights,
- FT_Fixed* axiscoords,
- FT_UInt axis_count )
- {
- FT_ASSERT( axis_count <= T1_MAX_MM_AXIS );
-
- if ( axis_count == 1 )
- axiscoords[0] = weights[1];
-
- else if ( axis_count == 2 )
- {
- axiscoords[0] = weights[3] + weights[1];
- axiscoords[1] = weights[3] + weights[2];
- }
-
- else if ( axis_count == 3 )
- {
- axiscoords[0] = weights[7] + weights[5] + weights[3] + weights[1];
- axiscoords[1] = weights[7] + weights[6] + weights[3] + weights[2];
- axiscoords[2] = weights[7] + weights[6] + weights[5] + weights[4];
- }
-
- else
- {
- axiscoords[0] = weights[15] + weights[13] + weights[11] + weights[9] +
- weights[7] + weights[5] + weights[3] + weights[1];
- axiscoords[1] = weights[15] + weights[14] + weights[11] + weights[10] +
- weights[7] + weights[6] + weights[3] + weights[2];
- axiscoords[2] = weights[15] + weights[14] + weights[13] + weights[12] +
- weights[7] + weights[6] + weights[5] + weights[4];
- axiscoords[3] = weights[15] + weights[14] + weights[13] + weights[12] +
- weights[11] + weights[10] + weights[9] + weights[8];
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* Just a wrapper around T1_Get_Multi_Master to support the different */
- /* arguments needed by the GX var distortable fonts. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- T1_Get_MM_Var( T1_Face face,
- FT_MM_Var* *master )
- {
- FT_Memory memory = face->root.memory;
- FT_MM_Var *mmvar = NULL;
- FT_Multi_Master mmaster;
- FT_Error error;
- FT_UInt i;
- FT_Fixed axiscoords[T1_MAX_MM_AXIS];
- PS_Blend blend = face->blend;
-
-
- error = T1_Get_Multi_Master( face, &mmaster );
- if ( error )
- goto Exit;
- if ( FT_ALLOC( mmvar,
- sizeof ( FT_MM_Var ) +
- mmaster.num_axis * sizeof ( FT_Var_Axis ) ) )
- goto Exit;
-
- mmvar->num_axis = mmaster.num_axis;
- mmvar->num_designs = mmaster.num_designs;
- mmvar->num_namedstyles = 0; /* Not supported */
- mmvar->axis = (FT_Var_Axis*)&mmvar[1];
- /* Point to axes after MM_Var struct */
- mmvar->namedstyle = NULL;
-
- for ( i = 0; i < mmaster.num_axis; i++ )
- {
- mmvar->axis[i].name = mmaster.axis[i].name;
- mmvar->axis[i].minimum = INT_TO_FIXED( mmaster.axis[i].minimum );
- mmvar->axis[i].maximum = INT_TO_FIXED( mmaster.axis[i].maximum );
- mmvar->axis[i].def = ( mmvar->axis[i].minimum +
- mmvar->axis[i].maximum ) / 2;
- /* Does not apply. But this value is in range */
- mmvar->axis[i].strid = ~0U; /* Does not apply */
- mmvar->axis[i].tag = ~0U; /* Does not apply */
-
- if ( !mmvar->axis[i].name )
- continue;
-
- if ( ft_strcmp( mmvar->axis[i].name, "Weight" ) == 0 )
- mmvar->axis[i].tag = FT_MAKE_TAG( 'w', 'g', 'h', 't' );
- else if ( ft_strcmp( mmvar->axis[i].name, "Width" ) == 0 )
- mmvar->axis[i].tag = FT_MAKE_TAG( 'w', 'd', 't', 'h' );
- else if ( ft_strcmp( mmvar->axis[i].name, "OpticalSize" ) == 0 )
- mmvar->axis[i].tag = FT_MAKE_TAG( 'o', 'p', 's', 'z' );
- }
-
- if ( blend->num_designs == ( 1U << blend->num_axis ) )
- {
- mm_weights_unmap( blend->default_weight_vector,
- axiscoords,
- blend->num_axis );
-
- for ( i = 0; i < mmaster.num_axis; i++ )
- mmvar->axis[i].def = mm_axis_unmap( &blend->design_map[i],
- axiscoords[i] );
- }
-
- *master = mmvar;
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Set_MM_Blend( T1_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- PS_Blend blend = face->blend;
- FT_UInt n, m;
-
-
- if ( !blend )
- return FT_THROW( Invalid_Argument );
-
- if ( num_coords > blend->num_axis )
- num_coords = blend->num_axis;
-
- /* recompute the weight vector from the blend coordinates */
- for ( n = 0; n < blend->num_designs; n++ )
- {
- FT_Fixed result = 0x10000L; /* 1.0 fixed */
-
-
- for ( m = 0; m < blend->num_axis; m++ )
- {
- FT_Fixed factor;
-
-
- /* get current blend axis position; */
- /* use a default value if we don't have a coordinate */
- factor = m < num_coords ? coords[m] : 0x8000;
- if ( factor < 0 )
- factor = 0;
- if ( factor > 0x10000L )
- factor = 0x10000L;
-
- if ( ( n & ( 1 << m ) ) == 0 )
- factor = 0x10000L - factor;
-
- result = FT_MulFix( result, factor );
- }
- blend->weight_vector[n] = result;
- }
-
- return FT_Err_Ok;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Get_MM_Blend( T1_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- PS_Blend blend = face->blend;
-
- FT_Fixed axiscoords[4];
- FT_UInt i, nc;
-
-
- if ( !blend )
- return FT_THROW( Invalid_Argument );
-
- mm_weights_unmap( blend->weight_vector,
- axiscoords,
- blend->num_axis );
-
- nc = num_coords;
- if ( num_coords > blend->num_axis )
- {
- FT_TRACE2(( "T1_Get_MM_Blend: only using first %d of %d coordinates\n",
- blend->num_axis, num_coords ));
- nc = blend->num_axis;
- }
-
- for ( i = 0; i < nc; i++ )
- coords[i] = axiscoords[i];
- for ( ; i < num_coords; i++ )
- coords[i] = 0x8000;
-
- return FT_Err_Ok;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Set_MM_Design( T1_Face face,
- FT_UInt num_coords,
- FT_Long* coords )
- {
- PS_Blend blend = face->blend;
- FT_UInt n, p;
- FT_Fixed final_blends[T1_MAX_MM_DESIGNS];
-
-
- if ( !blend )
- return FT_THROW( Invalid_Argument );
-
- if ( num_coords > blend->num_axis )
- num_coords = blend->num_axis;
-
- /* compute the blend coordinates through the blend design map */
-
- for ( n = 0; n < blend->num_axis; n++ )
- {
- FT_Long design;
- FT_Fixed the_blend;
- PS_DesignMap map = blend->design_map + n;
- FT_Long* designs = map->design_points;
- FT_Fixed* blends = map->blend_points;
- FT_Int before = -1, after = -1;
-
-
- /* use a default value if we don't have a coordinate */
- if ( n < num_coords )
- design = coords[n];
- else
- design = ( designs[map->num_points - 1] - designs[0] ) / 2;
-
- for ( p = 0; p < (FT_UInt)map->num_points; p++ )
- {
- FT_Long p_design = designs[p];
-
-
- /* exact match? */
- if ( design == p_design )
- {
- the_blend = blends[p];
- goto Found;
- }
-
- if ( design < p_design )
- {
- after = (FT_Int)p;
- break;
- }
-
- before = (FT_Int)p;
- }
-
- /* now interpolate if necessary */
- if ( before < 0 )
- the_blend = blends[0];
-
- else if ( after < 0 )
- the_blend = blends[map->num_points - 1];
-
- else
- the_blend = FT_MulDiv( design - designs[before],
- blends [after] - blends [before],
- designs[after] - designs[before] );
-
- Found:
- final_blends[n] = the_blend;
- }
-
- return T1_Set_MM_Blend( face, blend->num_axis, final_blends );
- }
-
-
- /*************************************************************************/
- /* */
- /* Just a wrapper around T1_Set_MM_Design to support the different */
- /* arguments needed by the GX var distortable fonts. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- T1_Set_Var_Design( T1_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- FT_Long lcoords[T1_MAX_MM_AXIS];
- FT_UInt i;
-
-
- if ( num_coords > T1_MAX_MM_AXIS )
- num_coords = T1_MAX_MM_AXIS;
-
- for ( i = 0; i < num_coords; i++ )
- lcoords[i] = FIXED_TO_INT( coords[i] );
-
- return T1_Set_MM_Design( face, num_coords, lcoords );
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Get_Var_Design( T1_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- PS_Blend blend = face->blend;
-
- FT_Fixed axiscoords[4];
- FT_UInt i, nc;
-
-
- if ( !blend )
- return FT_THROW( Invalid_Argument );
-
- mm_weights_unmap( blend->weight_vector,
- axiscoords,
- blend->num_axis );
-
- nc = num_coords;
- if ( num_coords > blend->num_axis )
- {
- FT_TRACE2(( "T1_Get_Var_Design:"
- " only using first %d of %d coordinates\n",
- blend->num_axis, num_coords ));
- nc = blend->num_axis;
- }
-
- for ( i = 0; i < nc; i++ )
- coords[i] = mm_axis_unmap( &blend->design_map[i], axiscoords[i] );
- for ( ; i < num_coords; i++ )
- coords[i] = 0;
-
- return FT_Err_Ok;
- }
-
-
- FT_LOCAL_DEF( void )
- T1_Done_Blend( T1_Face face )
- {
- FT_Memory memory = face->root.memory;
- PS_Blend blend = face->blend;
-
-
- if ( blend )
- {
- FT_UInt num_designs = blend->num_designs;
- FT_UInt num_axis = blend->num_axis;
- FT_UInt n;
-
-
- /* release design pos table */
- FT_FREE( blend->design_pos[0] );
- for ( n = 1; n < num_designs; n++ )
- blend->design_pos[n] = NULL;
-
- /* release blend `private' and `font info' dictionaries */
- FT_FREE( blend->privates[1] );
- FT_FREE( blend->font_infos[1] );
- FT_FREE( blend->bboxes[1] );
-
- for ( n = 0; n < num_designs; n++ )
- {
- blend->privates [n] = NULL;
- blend->font_infos[n] = NULL;
- blend->bboxes [n] = NULL;
- }
-
- /* release weight vectors */
- FT_FREE( blend->weight_vector );
- blend->default_weight_vector = NULL;
-
- /* release axis names */
- for ( n = 0; n < num_axis; n++ )
- FT_FREE( blend->axis_names[n] );
-
- /* release design map */
- for ( n = 0; n < num_axis; n++ )
- {
- PS_DesignMap dmap = blend->design_map + n;
-
-
- FT_FREE( dmap->design_points );
- dmap->num_points = 0;
- }
-
- FT_FREE( face->blend );
- }
- }
-
-
- static void
- parse_blend_axis_types( T1_Face face,
- T1_Loader loader )
- {
- T1_TokenRec axis_tokens[T1_MAX_MM_AXIS];
- FT_Int n, num_axis;
- FT_Error error = FT_Err_Ok;
- PS_Blend blend;
- FT_Memory memory;
-
-
- /* take an array of objects */
- T1_ToTokenArray( &loader->parser, axis_tokens,
- T1_MAX_MM_AXIS, &num_axis );
- if ( num_axis < 0 )
- {
- error = FT_ERR( Ignore );
- goto Exit;
- }
- if ( num_axis == 0 || num_axis > T1_MAX_MM_AXIS )
- {
- FT_ERROR(( "parse_blend_axis_types: incorrect number of axes: %d\n",
- num_axis ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* allocate blend if necessary */
- error = t1_allocate_blend( face, 0, (FT_UInt)num_axis );
- if ( error )
- goto Exit;
-
- blend = face->blend;
- memory = face->root.memory;
-
- /* each token is an immediate containing the name of the axis */
- for ( n = 0; n < num_axis; n++ )
- {
- T1_Token token = axis_tokens + n;
- FT_Byte* name;
- FT_UInt len;
-
-
- /* skip first slash, if any */
- if ( token->start[0] == '/' )
- token->start++;
-
- len = (FT_UInt)( token->limit - token->start );
- if ( len == 0 )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- name = (FT_Byte*)blend->axis_names[n];
- if ( name )
- {
- FT_TRACE0(( "parse_blend_axis_types:"
- " overwriting axis name `%s' with `%*.s'\n",
- name, len, token->start ));
- FT_FREE( name );
- }
-
- if ( FT_ALLOC( blend->axis_names[n], len + 1 ) )
- goto Exit;
-
- name = (FT_Byte*)blend->axis_names[n];
- FT_MEM_COPY( name, token->start, len );
- name[len] = '\0';
- }
-
- Exit:
- loader->parser.root.error = error;
- }
-
-
- static void
- parse_blend_design_positions( T1_Face face,
- T1_Loader loader )
- {
- T1_TokenRec design_tokens[T1_MAX_MM_DESIGNS];
- FT_Int num_designs;
- FT_Int num_axis;
- T1_Parser parser = &loader->parser;
-
- FT_Error error = FT_Err_Ok;
- PS_Blend blend;
-
-
- /* get the array of design tokens -- compute number of designs */
- T1_ToTokenArray( parser, design_tokens,
- T1_MAX_MM_DESIGNS, &num_designs );
- if ( num_designs < 0 )
- {
- error = FT_ERR( Ignore );
- goto Exit;
- }
- if ( num_designs == 0 || num_designs > T1_MAX_MM_DESIGNS )
- {
- FT_ERROR(( "parse_blend_design_positions:"
- " incorrect number of designs: %d\n",
- num_designs ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- {
- FT_Byte* old_cursor = parser->root.cursor;
- FT_Byte* old_limit = parser->root.limit;
- FT_Int n;
-
-
- blend = face->blend;
- num_axis = 0; /* make compiler happy */
-
- for ( n = 0; n < num_designs; n++ )
- {
- T1_TokenRec axis_tokens[T1_MAX_MM_AXIS];
- T1_Token token;
- FT_Int axis, n_axis;
-
-
- /* read axis/coordinates tokens */
- token = design_tokens + n;
- parser->root.cursor = token->start;
- parser->root.limit = token->limit;
- T1_ToTokenArray( parser, axis_tokens, T1_MAX_MM_AXIS, &n_axis );
-
- if ( n == 0 )
- {
- if ( n_axis <= 0 || n_axis > T1_MAX_MM_AXIS )
- {
- FT_ERROR(( "parse_blend_design_positions:"
- " invalid number of axes: %d\n",
- n_axis ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- num_axis = n_axis;
- error = t1_allocate_blend( face,
- (FT_UInt)num_designs,
- (FT_UInt)num_axis );
- if ( error )
- goto Exit;
- blend = face->blend;
- }
- else if ( n_axis != num_axis )
- {
- FT_ERROR(( "parse_blend_design_positions: incorrect table\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* now read each axis token into the design position */
- for ( axis = 0; axis < n_axis; axis++ )
- {
- T1_Token token2 = axis_tokens + axis;
-
-
- parser->root.cursor = token2->start;
- parser->root.limit = token2->limit;
- blend->design_pos[n][axis] = T1_ToFixed( parser, 0 );
- }
- }
-
- loader->parser.root.cursor = old_cursor;
- loader->parser.root.limit = old_limit;
- }
-
- Exit:
- loader->parser.root.error = error;
- }
-
-
- static void
- parse_blend_design_map( T1_Face face,
- T1_Loader loader )
- {
- FT_Error error = FT_Err_Ok;
- T1_Parser parser = &loader->parser;
- PS_Blend blend;
- T1_TokenRec axis_tokens[T1_MAX_MM_AXIS];
- FT_Int n, num_axis;
- FT_Byte* old_cursor;
- FT_Byte* old_limit;
- FT_Memory memory = face->root.memory;
-
-
- T1_ToTokenArray( parser, axis_tokens,
- T1_MAX_MM_AXIS, &num_axis );
- if ( num_axis < 0 )
- {
- error = FT_ERR( Ignore );
- goto Exit;
- }
- if ( num_axis == 0 || num_axis > T1_MAX_MM_AXIS )
- {
- FT_ERROR(( "parse_blend_design_map: incorrect number of axes: %d\n",
- num_axis ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- old_cursor = parser->root.cursor;
- old_limit = parser->root.limit;
-
- error = t1_allocate_blend( face, 0, (FT_UInt)num_axis );
- if ( error )
- goto Exit;
- blend = face->blend;
-
- /* now read each axis design map */
- for ( n = 0; n < num_axis; n++ )
- {
- PS_DesignMap map = blend->design_map + n;
- T1_Token axis_token;
- T1_TokenRec point_tokens[T1_MAX_MM_MAP_POINTS];
- FT_Int p, num_points;
-
-
- axis_token = axis_tokens + n;
-
- parser->root.cursor = axis_token->start;
- parser->root.limit = axis_token->limit;
- T1_ToTokenArray( parser, point_tokens,
- T1_MAX_MM_MAP_POINTS, &num_points );
-
- if ( num_points <= 0 || num_points > T1_MAX_MM_MAP_POINTS )
- {
- FT_ERROR(( "parse_blend_design_map: incorrect table\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- if ( map->design_points )
- {
- FT_ERROR(( "parse_blend_design_map: duplicate table\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* allocate design map data */
- if ( FT_NEW_ARRAY( map->design_points, num_points * 2 ) )
- goto Exit;
- map->blend_points = map->design_points + num_points;
- map->num_points = (FT_Byte)num_points;
-
- for ( p = 0; p < num_points; p++ )
- {
- T1_Token point_token;
-
-
- point_token = point_tokens + p;
-
- /* don't include delimiting brackets */
- parser->root.cursor = point_token->start + 1;
- parser->root.limit = point_token->limit - 1;
-
- map->design_points[p] = T1_ToInt( parser );
- map->blend_points [p] = T1_ToFixed( parser, 0 );
- }
- }
-
- parser->root.cursor = old_cursor;
- parser->root.limit = old_limit;
-
- Exit:
- parser->root.error = error;
- }
-
-
- static void
- parse_weight_vector( T1_Face face,
- T1_Loader loader )
- {
- T1_TokenRec design_tokens[T1_MAX_MM_DESIGNS];
- FT_Int num_designs;
- FT_Error error = FT_Err_Ok;
- T1_Parser parser = &loader->parser;
- PS_Blend blend = face->blend;
- T1_Token token;
- FT_Int n;
- FT_Byte* old_cursor;
- FT_Byte* old_limit;
-
-
- T1_ToTokenArray( parser, design_tokens,
- T1_MAX_MM_DESIGNS, &num_designs );
- if ( num_designs < 0 )
- {
- error = FT_ERR( Ignore );
- goto Exit;
- }
- if ( num_designs == 0 || num_designs > T1_MAX_MM_DESIGNS )
- {
- FT_ERROR(( "parse_weight_vector:"
- " incorrect number of designs: %d\n",
- num_designs ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- if ( !blend || !blend->num_designs )
- {
- error = t1_allocate_blend( face, (FT_UInt)num_designs, 0 );
- if ( error )
- goto Exit;
- blend = face->blend;
- }
- else if ( blend->num_designs != (FT_UInt)num_designs )
- {
- FT_ERROR(( "parse_weight_vector:"
- " /BlendDesignPosition and /WeightVector have\n"
- " "
- " different number of elements\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- old_cursor = parser->root.cursor;
- old_limit = parser->root.limit;
-
- for ( n = 0; n < num_designs; n++ )
- {
- token = design_tokens + n;
- parser->root.cursor = token->start;
- parser->root.limit = token->limit;
-
- blend->default_weight_vector[n] =
- blend->weight_vector[n] = T1_ToFixed( parser, 0 );
- }
-
- parser->root.cursor = old_cursor;
- parser->root.limit = old_limit;
-
- Exit:
- parser->root.error = error;
- }
-
-
- /* e.g., /BuildCharArray [0 0 0 0 0 0 0 0] def */
- /* we're only interested in the number of array elements */
- static void
- parse_buildchar( T1_Face face,
- T1_Loader loader )
- {
- face->len_buildchar = (FT_UInt)T1_ToFixedArray( &loader->parser,
- 0, NULL, 0 );
- return;
- }
-
-
-#endif /* !T1_CONFIG_OPTION_NO_MM_SUPPORT */
-
-
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** TYPE 1 SYMBOL PARSING *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static FT_Error
- t1_load_keyword( T1_Face face,
- T1_Loader loader,
- const T1_Field field )
- {
- FT_Error error;
- void* dummy_object;
- void** objects;
- FT_UInt max_objects;
- PS_Blend blend = face->blend;
-
-
- if ( blend && blend->num_designs == 0 )
- blend = NULL;
-
- /* if the keyword has a dedicated callback, call it */
- if ( field->type == T1_FIELD_TYPE_CALLBACK )
- {
- field->reader( (FT_Face)face, loader );
- error = loader->parser.root.error;
- goto Exit;
- }
-
- /* now, the keyword is either a simple field, or a table of fields; */
- /* we are now going to take care of it */
- switch ( field->location )
- {
- case T1_FIELD_LOCATION_FONT_INFO:
- dummy_object = &face->type1.font_info;
- objects = &dummy_object;
- max_objects = 0;
-
- if ( blend )
- {
- objects = (void**)blend->font_infos;
- max_objects = blend->num_designs;
- }
- break;
-
- case T1_FIELD_LOCATION_FONT_EXTRA:
- dummy_object = &face->type1.font_extra;
- objects = &dummy_object;
- max_objects = 0;
- break;
-
- case T1_FIELD_LOCATION_PRIVATE:
- dummy_object = &face->type1.private_dict;
- objects = &dummy_object;
- max_objects = 0;
-
- if ( blend )
- {
- objects = (void**)blend->privates;
- max_objects = blend->num_designs;
- }
- break;
-
- case T1_FIELD_LOCATION_BBOX:
- dummy_object = &face->type1.font_bbox;
- objects = &dummy_object;
- max_objects = 0;
-
- if ( blend )
- {
- objects = (void**)blend->bboxes;
- max_objects = blend->num_designs;
- }
- break;
-
- case T1_FIELD_LOCATION_LOADER:
- dummy_object = loader;
- objects = &dummy_object;
- max_objects = 0;
- break;
-
- case T1_FIELD_LOCATION_FACE:
- dummy_object = face;
- objects = &dummy_object;
- max_objects = 0;
- break;
-
-#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
- case T1_FIELD_LOCATION_BLEND:
- dummy_object = face->blend;
- objects = &dummy_object;
- max_objects = 0;
- break;
-#endif
-
- default:
- dummy_object = &face->type1;
- objects = &dummy_object;
- max_objects = 0;
- }
-
- if ( *objects )
- {
- if ( field->type == T1_FIELD_TYPE_INTEGER_ARRAY ||
- field->type == T1_FIELD_TYPE_FIXED_ARRAY )
- error = T1_Load_Field_Table( &loader->parser, field,
- objects, max_objects, 0 );
- else
- error = T1_Load_Field( &loader->parser, field,
- objects, max_objects, 0 );
- }
- else
- {
- FT_TRACE1(( "t1_load_keyword: ignoring keyword `%s'"
- " which is not valid at this point\n"
- " (probably due to missing keywords)\n",
- field->ident ));
- error = FT_Err_Ok;
- }
-
- Exit:
- return error;
- }
-
-
- static void
- parse_private( T1_Face face,
- T1_Loader loader )
- {
- FT_UNUSED( face );
-
- loader->keywords_encountered |= T1_PRIVATE;
- }
-
-
- /* return 1 in case of success */
-
- static int
- read_binary_data( T1_Parser parser,
- FT_ULong* size,
- FT_Byte** base,
- FT_Bool incremental )
- {
- FT_Byte* cur;
- FT_Byte* limit = parser->root.limit;
-
-
- /* the binary data has one of the following formats */
- /* */
- /* `size' [white*] RD white ....... ND */
- /* `size' [white*] -| white ....... |- */
- /* */
-
- T1_Skip_Spaces( parser );
-
- cur = parser->root.cursor;
-
- if ( cur < limit && ft_isdigit( *cur ) )
- {
- FT_Long s = T1_ToInt( parser );
-
-
- T1_Skip_PS_Token( parser ); /* `RD' or `-|' or something else */
-
- /* there is only one whitespace char after the */
- /* `RD' or `-|' token */
- *base = parser->root.cursor + 1;
-
- if ( s >= 0 && s < limit - *base )
- {
- parser->root.cursor += s + 1;
- *size = (FT_ULong)s;
- return !parser->root.error;
- }
- }
-
- if( !incremental )
- {
- FT_ERROR(( "read_binary_data: invalid size field\n" ));
- parser->root.error = FT_THROW( Invalid_File_Format );
- }
-
- return 0;
- }
-
-
- /* We now define the routines to handle the `/Encoding', `/Subrs', */
- /* and `/CharStrings' dictionaries. */
-
- static void
- t1_parse_font_matrix( T1_Face face,
- T1_Loader loader )
- {
- T1_Parser parser = &loader->parser;
- FT_Matrix* matrix = &face->type1.font_matrix;
- FT_Vector* offset = &face->type1.font_offset;
- FT_Face root = (FT_Face)&face->root;
- FT_Fixed temp[6];
- FT_Fixed temp_scale;
- FT_Int result;
-
-
- /* input is scaled by 1000 to accommodate default FontMatrix */
- result = T1_ToFixedArray( parser, 6, temp, 3 );
-
- if ( result < 6 )
- {
- parser->root.error = FT_THROW( Invalid_File_Format );
- return;
- }
-
- temp_scale = FT_ABS( temp[3] );
-
- if ( temp_scale == 0 )
- {
- FT_ERROR(( "t1_parse_font_matrix: invalid font matrix\n" ));
- parser->root.error = FT_THROW( Invalid_File_Format );
- return;
- }
-
- /* atypical case */
- if ( temp_scale != 0x10000L )
- {
- /* set units per EM based on FontMatrix values */
- root->units_per_EM = (FT_UShort)FT_DivFix( 1000, temp_scale );
-
- temp[0] = FT_DivFix( temp[0], temp_scale );
- temp[1] = FT_DivFix( temp[1], temp_scale );
- temp[2] = FT_DivFix( temp[2], temp_scale );
- temp[4] = FT_DivFix( temp[4], temp_scale );
- temp[5] = FT_DivFix( temp[5], temp_scale );
- temp[3] = temp[3] < 0 ? -0x10000L : 0x10000L;
- }
-
- matrix->xx = temp[0];
- matrix->yx = temp[1];
- matrix->xy = temp[2];
- matrix->yy = temp[3];
-
- /* note that the offsets must be expressed in integer font units */
- offset->x = temp[4] >> 16;
- offset->y = temp[5] >> 16;
- }
-
-
- static void
- parse_encoding( T1_Face face,
- T1_Loader loader )
- {
- T1_Parser parser = &loader->parser;
- FT_Byte* cur;
- FT_Byte* limit = parser->root.limit;
-
- PSAux_Service psaux = (PSAux_Service)face->psaux;
-
-
- T1_Skip_Spaces( parser );
- cur = parser->root.cursor;
- if ( cur >= limit )
- {
- FT_ERROR(( "parse_encoding: out of bounds\n" ));
- parser->root.error = FT_THROW( Invalid_File_Format );
- return;
- }
-
- /* if we have a number or `[', the encoding is an array, */
- /* and we must load it now */
- if ( ft_isdigit( *cur ) || *cur == '[' )
- {
- T1_Encoding encode = &face->type1.encoding;
- FT_Int count, n;
- PS_Table char_table = &loader->encoding_table;
- FT_Memory memory = parser->root.memory;
- FT_Error error;
- FT_Bool only_immediates = 0;
-
-
- /* read the number of entries in the encoding; should be 256 */
- if ( *cur == '[' )
- {
- count = 256;
- only_immediates = 1;
- parser->root.cursor++;
- }
- else
- count = (FT_Int)T1_ToInt( parser );
-
- /* only composite fonts (which we don't support) */
- /* can have larger values */
- if ( count > 256 )
- {
- FT_ERROR(( "parse_encoding: invalid encoding array size\n" ));
- parser->root.error = FT_THROW( Invalid_File_Format );
- return;
- }
-
- T1_Skip_Spaces( parser );
- if ( parser->root.cursor >= limit )
- return;
-
- /* PostScript happily allows overwriting of encoding arrays */
- if ( encode->char_index )
- {
- FT_FREE( encode->char_index );
- FT_FREE( encode->char_name );
- T1_Release_Table( char_table );
- }
-
- /* we use a T1_Table to store our charnames */
- loader->num_chars = encode->num_chars = count;
- if ( FT_NEW_ARRAY( encode->char_index, count ) ||
- FT_NEW_ARRAY( encode->char_name, count ) ||
- FT_SET_ERROR( psaux->ps_table_funcs->init(
- char_table, count, memory ) ) )
- {
- parser->root.error = error;
- return;
- }
-
- /* We need to `zero' out encoding_table.elements */
- for ( n = 0; n < count; n++ )
- {
- char* notdef = (char *)".notdef";
-
-
- (void)T1_Add_Table( char_table, n, notdef, 8 );
- }
-
- /* Now we need to read records of the form */
- /* */
- /* ... charcode /charname ... */
- /* */
- /* for each entry in our table. */
- /* */
- /* We simply look for a number followed by an immediate */
- /* name. Note that this ignores correctly the sequence */
- /* that is often seen in type1 fonts: */
- /* */
- /* 0 1 255 { 1 index exch /.notdef put } for dup */
- /* */
- /* used to clean the encoding array before anything else. */
- /* */
- /* Alternatively, if the array is directly given as */
- /* */
- /* /Encoding [ ... ] */
- /* */
- /* we only read immediates. */
-
- n = 0;
- T1_Skip_Spaces( parser );
-
- while ( parser->root.cursor < limit )
- {
- cur = parser->root.cursor;
-
- /* we stop when we encounter a `def' or `]' */
- if ( *cur == 'd' && cur + 3 < limit )
- {
- if ( cur[1] == 'e' &&
- cur[2] == 'f' &&
- IS_PS_DELIM( cur[3] ) )
- {
- FT_TRACE6(( "encoding end\n" ));
- cur += 3;
- break;
- }
- }
- if ( *cur == ']' )
- {
- FT_TRACE6(( "encoding end\n" ));
- cur++;
- break;
- }
-
- /* check whether we've found an entry */
- if ( ft_isdigit( *cur ) || only_immediates )
- {
- FT_Int charcode;
-
-
- if ( only_immediates )
- charcode = n;
- else
- {
- charcode = (FT_Int)T1_ToInt( parser );
- T1_Skip_Spaces( parser );
-
- /* protect against invalid charcode */
- if ( cur == parser->root.cursor )
- {
- parser->root.error = FT_THROW( Unknown_File_Format );
- return;
- }
- }
-
- cur = parser->root.cursor;
-
- if ( cur + 2 < limit && *cur == '/' && n < count )
- {
- FT_UInt len;
-
-
- cur++;
-
- parser->root.cursor = cur;
- T1_Skip_PS_Token( parser );
- if ( parser->root.cursor >= limit )
- return;
- if ( parser->root.error )
- return;
-
- len = (FT_UInt)( parser->root.cursor - cur );
-
- parser->root.error = T1_Add_Table( char_table, charcode,
- cur, len + 1 );
- if ( parser->root.error )
- return;
- char_table->elements[charcode][len] = '\0';
-
- n++;
- }
- else if ( only_immediates )
- {
- /* Since the current position is not updated for */
- /* immediates-only mode we would get an infinite loop if */
- /* we don't do anything here. */
- /* */
- /* This encoding array is not valid according to the type1 */
- /* specification (it might be an encoding for a CID type1 */
- /* font, however), so we conclude that this font is NOT a */
- /* type1 font. */
- parser->root.error = FT_THROW( Unknown_File_Format );
- return;
- }
- }
- else
- {
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- return;
- }
-
- T1_Skip_Spaces( parser );
- }
-
- face->type1.encoding_type = T1_ENCODING_TYPE_ARRAY;
- parser->root.cursor = cur;
- }
-
- /* Otherwise, we should have either `StandardEncoding', */
- /* `ExpertEncoding', or `ISOLatin1Encoding' */
- else
- {
- if ( cur + 17 < limit &&
- ft_strncmp( (const char*)cur, "StandardEncoding", 16 ) == 0 )
- face->type1.encoding_type = T1_ENCODING_TYPE_STANDARD;
-
- else if ( cur + 15 < limit &&
- ft_strncmp( (const char*)cur, "ExpertEncoding", 14 ) == 0 )
- face->type1.encoding_type = T1_ENCODING_TYPE_EXPERT;
-
- else if ( cur + 18 < limit &&
- ft_strncmp( (const char*)cur, "ISOLatin1Encoding", 17 ) == 0 )
- face->type1.encoding_type = T1_ENCODING_TYPE_ISOLATIN1;
-
- else
- parser->root.error = FT_ERR( Ignore );
- }
- }
-
-
- static void
- parse_subrs( T1_Face face,
- T1_Loader loader )
- {
- T1_Parser parser = &loader->parser;
- PS_Table table = &loader->subrs;
- FT_Memory memory = parser->root.memory;
- FT_Error error;
- FT_Int num_subrs;
- FT_UInt count;
-
- PSAux_Service psaux = (PSAux_Service)face->psaux;
-
-
- T1_Skip_Spaces( parser );
-
- /* test for empty array */
- if ( parser->root.cursor < parser->root.limit &&
- *parser->root.cursor == '[' )
- {
- T1_Skip_PS_Token( parser );
- T1_Skip_Spaces ( parser );
- if ( parser->root.cursor >= parser->root.limit ||
- *parser->root.cursor != ']' )
- parser->root.error = FT_THROW( Invalid_File_Format );
- return;
- }
-
- num_subrs = (FT_Int)T1_ToInt( parser );
- if ( num_subrs < 0 )
- {
- parser->root.error = FT_THROW( Invalid_File_Format );
- return;
- }
-
- /* we certainly need more than 8 bytes per subroutine */
- if ( parser->root.limit >= parser->root.cursor &&
- num_subrs > ( parser->root.limit - parser->root.cursor ) >> 3 )
- {
- /*
- * There are two possibilities. Either the font contains an invalid
- * value for `num_subrs', or we have a subsetted font where the
- * subroutine indices are not adjusted, e.g.
- *
- * /Subrs 812 array
- * dup 0 { ... } NP
- * dup 51 { ... } NP
- * dup 681 { ... } NP
- * ND
- *
- * In both cases, we use a number hash that maps from subr indices to
- * actual array elements.
- */
-
- FT_TRACE0(( "parse_subrs: adjusting number of subroutines"
- " (from %d to %d)\n",
- num_subrs,
- ( parser->root.limit - parser->root.cursor ) >> 3 ));
- num_subrs = ( parser->root.limit - parser->root.cursor ) >> 3;
-
- if ( !loader->subrs_hash )
- {
- if ( FT_NEW( loader->subrs_hash ) )
- goto Fail;
-
- error = ft_hash_num_init( loader->subrs_hash, memory );
- if ( error )
- goto Fail;
- }
- }
-
- /* position the parser right before the `dup' of the first subr */
- T1_Skip_PS_Token( parser ); /* `array' */
- if ( parser->root.error )
- return;
- T1_Skip_Spaces( parser );
-
- /* initialize subrs array -- with synthetic fonts it is possible */
- /* we get here twice */
- if ( !loader->num_subrs )
- {
- error = psaux->ps_table_funcs->init( table, num_subrs, memory );
- if ( error )
- goto Fail;
- }
-
- /* the format is simple: */
- /* */
- /* `index' + binary data */
- /* */
- for ( count = 0; ; count++ )
- {
- FT_Long idx;
- FT_ULong size;
- FT_Byte* base;
-
-
- /* If we are out of data, or if the next token isn't `dup', */
- /* we are done. */
- if ( parser->root.cursor + 4 >= parser->root.limit ||
- ft_strncmp( (char*)parser->root.cursor, "dup", 3 ) != 0 )
- break;
-
- T1_Skip_PS_Token( parser ); /* `dup' */
-
- idx = T1_ToInt( parser );
-
- if ( !read_binary_data( parser, &size, &base, IS_INCREMENTAL ) )
- return;
-
- /* The binary string is followed by one token, e.g. `NP' */
- /* (bound to `noaccess put') or by two separate tokens: */
- /* `noaccess' & `put'. We position the parser right */
- /* before the next `dup', if any. */
- T1_Skip_PS_Token( parser ); /* `NP' or `|' or `noaccess' */
- if ( parser->root.error )
- return;
- T1_Skip_Spaces ( parser );
-
- if ( parser->root.cursor + 4 < parser->root.limit &&
- ft_strncmp( (char*)parser->root.cursor, "put", 3 ) == 0 )
- {
- T1_Skip_PS_Token( parser ); /* skip `put' */
- T1_Skip_Spaces ( parser );
- }
-
- /* if we use a hash, the subrs index is the key, and a running */
- /* counter specified for `T1_Add_Table' acts as the value */
- if ( loader->subrs_hash )
- {
- ft_hash_num_insert( idx, count, loader->subrs_hash, memory );
- idx = count;
- }
-
- /* with synthetic fonts it is possible we get here twice */
- if ( loader->num_subrs )
- continue;
-
- /* some fonts use a value of -1 for lenIV to indicate that */
- /* the charstrings are unencoded */
- /* */
- /* thanks to Tom Kacvinsky for pointing this out */
- /* */
- if ( face->type1.private_dict.lenIV >= 0 )
- {
- FT_Byte* temp = NULL;
-
-
- /* some fonts define empty subr records -- this is not totally */
- /* compliant to the specification (which says they should at */
- /* least contain a `return'), but we support them anyway */
- if ( size < (FT_ULong)face->type1.private_dict.lenIV )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- /* t1_decrypt() shouldn't write to base -- make temporary copy */
- if ( FT_ALLOC( temp, size ) )
- goto Fail;
- FT_MEM_COPY( temp, base, size );
- psaux->t1_decrypt( temp, size, 4330 );
- size -= (FT_ULong)face->type1.private_dict.lenIV;
- error = T1_Add_Table( table, (FT_Int)idx,
- temp + face->type1.private_dict.lenIV, size );
- FT_FREE( temp );
- }
- else
- error = T1_Add_Table( table, (FT_Int)idx, base, size );
- if ( error )
- goto Fail;
- }
-
- if ( !loader->num_subrs )
- loader->num_subrs = num_subrs;
-
- return;
-
- Fail:
- parser->root.error = error;
- }
-
-
-#define TABLE_EXTEND 5
-
-
- static void
- parse_charstrings( T1_Face face,
- T1_Loader loader )
- {
- T1_Parser parser = &loader->parser;
- PS_Table code_table = &loader->charstrings;
- PS_Table name_table = &loader->glyph_names;
- PS_Table swap_table = &loader->swap_table;
- FT_Memory memory = parser->root.memory;
- FT_Error error;
-
- PSAux_Service psaux = (PSAux_Service)face->psaux;
-
- FT_Byte* cur = parser->root.cursor;
- FT_Byte* limit = parser->root.limit;
- FT_Int n, num_glyphs;
- FT_Int notdef_index = 0;
- FT_Byte notdef_found = 0;
-
-
- num_glyphs = (FT_Int)T1_ToInt( parser );
- if ( num_glyphs < 0 )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- /* we certainly need more than 8 bytes per glyph */
- if ( num_glyphs > ( limit - cur ) >> 3 )
- {
- FT_TRACE0(( "parse_charstrings: adjusting number of glyphs"
- " (from %d to %d)\n",
- num_glyphs, ( limit - cur ) >> 3 ));
- num_glyphs = ( limit - cur ) >> 3;
- }
-
- /* some fonts like Optima-Oblique not only define the /CharStrings */
- /* array but access it also */
- if ( num_glyphs == 0 || parser->root.error )
- return;
-
- /* initialize tables, leaving space for addition of .notdef, */
- /* if necessary, and a few other glyphs to handle buggy */
- /* fonts which have more glyphs than specified. */
-
- /* for some non-standard fonts like `Optima' which provides */
- /* different outlines depending on the resolution it is */
- /* possible to get here twice */
- if ( !loader->num_glyphs )
- {
- error = psaux->ps_table_funcs->init(
- code_table, num_glyphs + 1 + TABLE_EXTEND, memory );
- if ( error )
- goto Fail;
-
- error = psaux->ps_table_funcs->init(
- name_table, num_glyphs + 1 + TABLE_EXTEND, memory );
- if ( error )
- goto Fail;
-
- /* Initialize table for swapping index notdef_index and */
- /* index 0 names and codes (if necessary). */
-
- error = psaux->ps_table_funcs->init( swap_table, 4, memory );
- if ( error )
- goto Fail;
- }
-
- n = 0;
-
- for (;;)
- {
- FT_ULong size;
- FT_Byte* base;
-
-
- /* the format is simple: */
- /* `/glyphname' + binary data */
-
- T1_Skip_Spaces( parser );
-
- cur = parser->root.cursor;
- if ( cur >= limit )
- break;
-
- /* we stop when we find a `def' or `end' keyword */
- if ( cur + 3 < limit && IS_PS_DELIM( cur[3] ) )
- {
- if ( cur[0] == 'd' &&
- cur[1] == 'e' &&
- cur[2] == 'f' )
- {
- /* There are fonts which have this: */
- /* */
- /* /CharStrings 118 dict def */
- /* Private begin */
- /* CharStrings begin */
- /* ... */
- /* */
- /* To catch this we ignore `def' if */
- /* no charstring has actually been */
- /* seen. */
- if ( n )
- break;
- }
-
- if ( cur[0] == 'e' &&
- cur[1] == 'n' &&
- cur[2] == 'd' )
- break;
- }
-
- T1_Skip_PS_Token( parser );
- if ( parser->root.cursor >= limit )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
- if ( parser->root.error )
- return;
-
- if ( *cur == '/' )
- {
- FT_UInt len;
-
-
- if ( cur + 2 >= limit )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- cur++; /* skip `/' */
- len = (FT_UInt)( parser->root.cursor - cur );
-
- if ( !read_binary_data( parser, &size, &base, IS_INCREMENTAL ) )
- return;
-
- /* for some non-standard fonts like `Optima' which provides */
- /* different outlines depending on the resolution it is */
- /* possible to get here twice */
- if ( loader->num_glyphs )
- continue;
-
- error = T1_Add_Table( name_table, n, cur, len + 1 );
- if ( error )
- goto Fail;
-
- /* add a trailing zero to the name table */
- name_table->elements[n][len] = '\0';
-
- /* record index of /.notdef */
- if ( *cur == '.' &&
- ft_strcmp( ".notdef",
- (const char*)(name_table->elements[n]) ) == 0 )
- {
- notdef_index = n;
- notdef_found = 1;
- }
-
- if ( face->type1.private_dict.lenIV >= 0 &&
- n < num_glyphs + TABLE_EXTEND )
- {
- FT_Byte* temp = NULL;
-
-
- if ( size <= (FT_ULong)face->type1.private_dict.lenIV )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- /* t1_decrypt() shouldn't write to base -- make temporary copy */
- if ( FT_ALLOC( temp, size ) )
- goto Fail;
- FT_MEM_COPY( temp, base, size );
- psaux->t1_decrypt( temp, size, 4330 );
- size -= (FT_ULong)face->type1.private_dict.lenIV;
- error = T1_Add_Table( code_table, n,
- temp + face->type1.private_dict.lenIV, size );
- FT_FREE( temp );
- }
- else
- error = T1_Add_Table( code_table, n, base, size );
- if ( error )
- goto Fail;
-
- n++;
- }
- }
-
- if ( !n )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- loader->num_glyphs = n;
-
- /* if /.notdef is found but does not occupy index 0, do our magic. */
- if ( notdef_found &&
- ft_strcmp( ".notdef", (const char*)name_table->elements[0] ) )
- {
- /* Swap glyph in index 0 with /.notdef glyph. First, add index 0 */
- /* name and code entries to swap_table. Then place notdef_index */
- /* name and code entries into swap_table. Then swap name and code */
- /* entries at indices notdef_index and 0 using values stored in */
- /* swap_table. */
-
- /* Index 0 name */
- error = T1_Add_Table( swap_table, 0,
- name_table->elements[0],
- name_table->lengths [0] );
- if ( error )
- goto Fail;
-
- /* Index 0 code */
- error = T1_Add_Table( swap_table, 1,
- code_table->elements[0],
- code_table->lengths [0] );
- if ( error )
- goto Fail;
-
- /* Index notdef_index name */
- error = T1_Add_Table( swap_table, 2,
- name_table->elements[notdef_index],
- name_table->lengths [notdef_index] );
- if ( error )
- goto Fail;
-
- /* Index notdef_index code */
- error = T1_Add_Table( swap_table, 3,
- code_table->elements[notdef_index],
- code_table->lengths [notdef_index] );
- if ( error )
- goto Fail;
-
- error = T1_Add_Table( name_table, notdef_index,
- swap_table->elements[0],
- swap_table->lengths [0] );
- if ( error )
- goto Fail;
-
- error = T1_Add_Table( code_table, notdef_index,
- swap_table->elements[1],
- swap_table->lengths [1] );
- if ( error )
- goto Fail;
-
- error = T1_Add_Table( name_table, 0,
- swap_table->elements[2],
- swap_table->lengths [2] );
- if ( error )
- goto Fail;
-
- error = T1_Add_Table( code_table, 0,
- swap_table->elements[3],
- swap_table->lengths [3] );
- if ( error )
- goto Fail;
-
- }
- else if ( !notdef_found )
- {
- /* notdef_index is already 0, or /.notdef is undefined in */
- /* charstrings dictionary. Worry about /.notdef undefined. */
- /* We take index 0 and add it to the end of the table(s) */
- /* and add our own /.notdef glyph to index 0. */
-
- /* 0 333 hsbw endchar */
- FT_Byte notdef_glyph[] = { 0x8B, 0xF7, 0xE1, 0x0D, 0x0E };
- char* notdef_name = (char *)".notdef";
-
-
- error = T1_Add_Table( swap_table, 0,
- name_table->elements[0],
- name_table->lengths [0] );
- if ( error )
- goto Fail;
-
- error = T1_Add_Table( swap_table, 1,
- code_table->elements[0],
- code_table->lengths [0] );
- if ( error )
- goto Fail;
-
- error = T1_Add_Table( name_table, 0, notdef_name, 8 );
- if ( error )
- goto Fail;
-
- error = T1_Add_Table( code_table, 0, notdef_glyph, 5 );
-
- if ( error )
- goto Fail;
-
- error = T1_Add_Table( name_table, n,
- swap_table->elements[0],
- swap_table->lengths [0] );
- if ( error )
- goto Fail;
-
- error = T1_Add_Table( code_table, n,
- swap_table->elements[1],
- swap_table->lengths [1] );
- if ( error )
- goto Fail;
-
- /* we added a glyph. */
- loader->num_glyphs += 1;
- }
-
- return;
-
- Fail:
- parser->root.error = error;
- }
-
-
- /*************************************************************************/
- /* */
- /* Define the token field static variables. This is a set of */
- /* T1_FieldRec variables. */
- /* */
- /*************************************************************************/
-
-
- static
- const T1_FieldRec t1_keywords[] =
- {
-
-#include "t1tokens.h"
-
- /* now add the special functions... */
- T1_FIELD_CALLBACK( "FontMatrix", t1_parse_font_matrix,
- T1_FIELD_DICT_FONTDICT )
- T1_FIELD_CALLBACK( "Encoding", parse_encoding,
- T1_FIELD_DICT_FONTDICT )
- T1_FIELD_CALLBACK( "Subrs", parse_subrs,
- T1_FIELD_DICT_PRIVATE )
- T1_FIELD_CALLBACK( "CharStrings", parse_charstrings,
- T1_FIELD_DICT_PRIVATE )
- T1_FIELD_CALLBACK( "Private", parse_private,
- T1_FIELD_DICT_FONTDICT )
-
-#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
- T1_FIELD_CALLBACK( "BlendDesignPositions", parse_blend_design_positions,
- T1_FIELD_DICT_FONTDICT )
- T1_FIELD_CALLBACK( "BlendDesignMap", parse_blend_design_map,
- T1_FIELD_DICT_FONTDICT )
- T1_FIELD_CALLBACK( "BlendAxisTypes", parse_blend_axis_types,
- T1_FIELD_DICT_FONTDICT )
- T1_FIELD_CALLBACK( "WeightVector", parse_weight_vector,
- T1_FIELD_DICT_FONTDICT )
- T1_FIELD_CALLBACK( "BuildCharArray", parse_buildchar,
- T1_FIELD_DICT_PRIVATE )
-#endif
-
- { 0, T1_FIELD_LOCATION_CID_INFO, T1_FIELD_TYPE_NONE, 0, 0, 0, 0, 0, 0 }
- };
-
-
- static FT_Error
- parse_dict( T1_Face face,
- T1_Loader loader,
- FT_Byte* base,
- FT_ULong size )
- {
- T1_Parser parser = &loader->parser;
- FT_Byte *limit, *start_binary = NULL;
- FT_Bool have_integer = 0;
-
-
- parser->root.cursor = base;
- parser->root.limit = base + size;
- parser->root.error = FT_Err_Ok;
-
- limit = parser->root.limit;
-
- T1_Skip_Spaces( parser );
-
- while ( parser->root.cursor < limit )
- {
- FT_Byte* cur;
-
-
- cur = parser->root.cursor;
-
- /* look for `eexec' */
- if ( IS_PS_TOKEN( cur, limit, "eexec" ) )
- break;
-
- /* look for `closefile' which ends the eexec section */
- else if ( IS_PS_TOKEN( cur, limit, "closefile" ) )
- break;
-
- /* in a synthetic font the base font starts after a */
- /* `FontDictionary' token that is placed after a Private dict */
- else if ( IS_PS_TOKEN( cur, limit, "FontDirectory" ) )
- {
- if ( loader->keywords_encountered & T1_PRIVATE )
- loader->keywords_encountered |=
- T1_FONTDIR_AFTER_PRIVATE;
- parser->root.cursor += 13;
- }
-
- /* check whether we have an integer */
- else if ( ft_isdigit( *cur ) )
- {
- start_binary = cur;
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- goto Exit;
- have_integer = 1;
- }
-
- /* in valid Type 1 fonts we don't see `RD' or `-|' directly */
- /* since those tokens are handled by parse_subrs and */
- /* parse_charstrings */
- else if ( *cur == 'R' && cur + 6 < limit && *(cur + 1) == 'D' &&
- have_integer )
- {
- FT_ULong s;
- FT_Byte* b;
-
-
- parser->root.cursor = start_binary;
- if ( !read_binary_data( parser, &s, &b, IS_INCREMENTAL ) )
- return FT_THROW( Invalid_File_Format );
- have_integer = 0;
- }
-
- else if ( *cur == '-' && cur + 6 < limit && *(cur + 1) == '|' &&
- have_integer )
- {
- FT_ULong s;
- FT_Byte* b;
-
-
- parser->root.cursor = start_binary;
- if ( !read_binary_data( parser, &s, &b, IS_INCREMENTAL ) )
- return FT_THROW( Invalid_File_Format );
- have_integer = 0;
- }
-
- /* look for immediates */
- else if ( *cur == '/' && cur + 2 < limit )
- {
- FT_UInt len;
-
-
- cur++;
-
- parser->root.cursor = cur;
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- goto Exit;
-
- len = (FT_UInt)( parser->root.cursor - cur );
-
- if ( len > 0 && len < 22 && parser->root.cursor < limit )
- {
- /* now compare the immediate name to the keyword table */
- T1_Field keyword = (T1_Field)t1_keywords;
-
-
- for (;;)
- {
- FT_Byte* name;
-
-
- name = (FT_Byte*)keyword->ident;
- if ( !name )
- break;
-
- if ( cur[0] == name[0] &&
- len == ft_strlen( (const char *)name ) &&
- ft_memcmp( cur, name, len ) == 0 )
- {
- /* We found it -- run the parsing callback! */
- /* We record every instance of every field */
- /* (until we reach the base font of a */
- /* synthetic font) to deal adequately with */
- /* multiple master fonts; this is also */
- /* necessary because later PostScript */
- /* definitions override earlier ones. */
-
- /* Once we encounter `FontDirectory' after */
- /* `/Private', we know that this is a synthetic */
- /* font; except for `/CharStrings' we are not */
- /* interested in anything that follows this */
- /* `FontDirectory'. */
-
- /* MM fonts have more than one /Private token at */
- /* the top level; let's hope that all the junk */
- /* that follows the first /Private token is not */
- /* interesting to us. */
-
- /* According to Adobe Tech Note #5175 (CID-Keyed */
- /* Font Installation for ATM Software) a `begin' */
- /* must be followed by exactly one `end', and */
- /* `begin' -- `end' pairs must be accurately */
- /* paired. We could use this to distinguish */
- /* between the global Private and the Private */
- /* dict that is a member of the Blend dict. */
-
- const FT_UInt dict =
- ( loader->keywords_encountered & T1_PRIVATE )
- ? T1_FIELD_DICT_PRIVATE
- : T1_FIELD_DICT_FONTDICT;
-
- if ( !( dict & keyword->dict ) )
- {
- FT_TRACE1(( "parse_dict: found `%s' but ignoring it"
- " since it is in the wrong dictionary\n",
- keyword->ident ));
- break;
- }
-
- if ( !( loader->keywords_encountered &
- T1_FONTDIR_AFTER_PRIVATE ) ||
- ft_strcmp( (const char*)name, "CharStrings" ) == 0 )
- {
- parser->root.error = t1_load_keyword( face,
- loader,
- keyword );
- if ( parser->root.error )
- {
- if ( FT_ERR_EQ( parser->root.error, Ignore ) )
- parser->root.error = FT_Err_Ok;
- else
- return parser->root.error;
- }
- }
- break;
- }
-
- keyword++;
- }
- }
-
- have_integer = 0;
- }
- else
- {
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- goto Exit;
- have_integer = 0;
- }
-
- T1_Skip_Spaces( parser );
- }
-
- Exit:
- return parser->root.error;
- }
-
-
- static void
- t1_init_loader( T1_Loader loader,
- T1_Face face )
- {
- FT_UNUSED( face );
-
- FT_ZERO( loader );
- }
-
-
- static void
- t1_done_loader( T1_Loader loader )
- {
- T1_Parser parser = &loader->parser;
- FT_Memory memory = parser->root.memory;
-
-
- /* finalize tables */
- T1_Release_Table( &loader->encoding_table );
- T1_Release_Table( &loader->charstrings );
- T1_Release_Table( &loader->glyph_names );
- T1_Release_Table( &loader->swap_table );
- T1_Release_Table( &loader->subrs );
-
- /* finalize hash */
- ft_hash_num_free( loader->subrs_hash, memory );
- FT_FREE( loader->subrs_hash );
-
- /* finalize parser */
- T1_Finalize_Parser( parser );
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Open_Face( T1_Face face )
- {
- T1_LoaderRec loader;
- T1_Parser parser;
- T1_Font type1 = &face->type1;
- PS_Private priv = &type1->private_dict;
- FT_Error error;
-
- PSAux_Service psaux = (PSAux_Service)face->psaux;
-
-
- t1_init_loader( &loader, face );
-
- /* default values */
- face->ndv_idx = -1;
- face->cdv_idx = -1;
- face->len_buildchar = 0;
-
- priv->blue_shift = 7;
- priv->blue_fuzz = 1;
- priv->lenIV = 4;
- priv->expansion_factor = (FT_Fixed)( 0.06 * 0x10000L );
- priv->blue_scale = (FT_Fixed)( 0.039625 * 0x10000L * 1000 );
-
- parser = &loader.parser;
- error = T1_New_Parser( parser,
- face->root.stream,
- face->root.memory,
- psaux );
- if ( error )
- goto Exit;
-
- error = parse_dict( face, &loader,
- parser->base_dict, parser->base_len );
- if ( error )
- goto Exit;
-
- error = T1_Get_Private_Dict( parser, psaux );
- if ( error )
- goto Exit;
-
- error = parse_dict( face, &loader,
- parser->private_dict, parser->private_len );
- if ( error )
- goto Exit;
-
- /* ensure even-ness of `num_blue_values' */
- priv->num_blue_values &= ~1;
-
-#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
-
- if ( face->blend &&
- face->blend->num_default_design_vector != 0 &&
- face->blend->num_default_design_vector != face->blend->num_axis )
- {
- /* we don't use it currently so just warn, reset, and ignore */
- FT_ERROR(( "T1_Open_Face(): /DesignVector contains %u entries "
- "while there are %u axes.\n",
- face->blend->num_default_design_vector,
- face->blend->num_axis ));
-
- face->blend->num_default_design_vector = 0;
- }
-
- /* the following can happen for MM instances; we then treat the */
- /* font as a normal PS font */
- if ( face->blend &&
- ( !face->blend->num_designs || !face->blend->num_axis ) )
- T1_Done_Blend( face );
-
- /* another safety check */
- if ( face->blend )
- {
- FT_UInt i;
-
-
- for ( i = 0; i < face->blend->num_axis; i++ )
- if ( !face->blend->design_map[i].num_points )
- {
- T1_Done_Blend( face );
- break;
- }
- }
-
- if ( face->blend )
- {
- if ( face->len_buildchar > 0 )
- {
- FT_Memory memory = face->root.memory;
-
-
- if ( FT_NEW_ARRAY( face->buildchar, face->len_buildchar ) )
- {
- FT_ERROR(( "T1_Open_Face: cannot allocate BuildCharArray\n" ));
- face->len_buildchar = 0;
- goto Exit;
- }
- }
- }
- else
- face->len_buildchar = 0;
-
-#endif /* !T1_CONFIG_OPTION_NO_MM_SUPPORT */
-
- /* now, propagate the subrs, charstrings, and glyphnames tables */
- /* to the Type1 data */
- type1->num_glyphs = loader.num_glyphs;
-
- if ( loader.subrs.init )
- {
- type1->num_subrs = loader.num_subrs;
- type1->subrs_block = loader.subrs.block;
- type1->subrs = loader.subrs.elements;
- type1->subrs_len = loader.subrs.lengths;
- type1->subrs_hash = loader.subrs_hash;
-
- /* prevent `t1_done_loader' from freeing the propagated data */
- loader.subrs.init = 0;
- loader.subrs_hash = NULL;
- }
-
- if ( !IS_INCREMENTAL )
- if ( !loader.charstrings.init )
- {
- FT_ERROR(( "T1_Open_Face: no `/CharStrings' array in face\n" ));
- error = FT_THROW( Invalid_File_Format );
- }
-
- loader.charstrings.init = 0;
- type1->charstrings_block = loader.charstrings.block;
- type1->charstrings = loader.charstrings.elements;
- type1->charstrings_len = loader.charstrings.lengths;
-
- /* we copy the glyph names `block' and `elements' fields; */
- /* the `lengths' field must be released later */
- type1->glyph_names_block = loader.glyph_names.block;
- type1->glyph_names = (FT_String**)loader.glyph_names.elements;
- loader.glyph_names.block = NULL;
- loader.glyph_names.elements = NULL;
-
- /* we must now build type1.encoding when we have a custom array */
- if ( type1->encoding_type == T1_ENCODING_TYPE_ARRAY )
- {
- FT_Int charcode, idx, min_char, max_char;
- FT_Byte* glyph_name;
-
-
- /* OK, we do the following: for each element in the encoding */
- /* table, look up the index of the glyph having the same name */
- /* the index is then stored in type1.encoding.char_index, and */
- /* the name to type1.encoding.char_name */
-
- min_char = 0;
- max_char = 0;
-
- charcode = 0;
- for ( ; charcode < loader.encoding_table.max_elems; charcode++ )
- {
- FT_Byte* char_name;
-
-
- type1->encoding.char_index[charcode] = 0;
- type1->encoding.char_name [charcode] = (char *)".notdef";
-
- char_name = loader.encoding_table.elements[charcode];
- if ( char_name )
- for ( idx = 0; idx < type1->num_glyphs; idx++ )
- {
- glyph_name = (FT_Byte*)type1->glyph_names[idx];
- if ( ft_strcmp( (const char*)char_name,
- (const char*)glyph_name ) == 0 )
- {
- type1->encoding.char_index[charcode] = (FT_UShort)idx;
- type1->encoding.char_name [charcode] = (char*)glyph_name;
-
- /* Change min/max encoded char only if glyph name is */
- /* not /.notdef */
- if ( ft_strcmp( (const char*)".notdef",
- (const char*)glyph_name ) != 0 )
- {
- if ( charcode < min_char )
- min_char = charcode;
- if ( charcode >= max_char )
- max_char = charcode + 1;
- }
- break;
- }
- }
- }
-
- type1->encoding.code_first = min_char;
- type1->encoding.code_last = max_char;
- type1->encoding.num_chars = loader.num_chars;
- }
-
- Exit:
- t1_done_loader( &loader );
- return error;
- }
-
-
-/* END */
diff --git a/src/type1/t1load.h b/src/type1/t1load.h
deleted file mode 100644
index 2d86984f0..000000000
--- a/src/type1/t1load.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1load.h */
-/* */
-/* Type 1 font loader (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef T1LOAD_H_
-#define T1LOAD_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_MULTIPLE_MASTERS_H
-
-#include "t1parse.h"
-
-
-FT_BEGIN_HEADER
-
-
- typedef struct T1_Loader_
- {
- T1_ParserRec parser; /* parser used to read the stream */
-
- FT_Int num_chars; /* number of characters in encoding */
- PS_TableRec encoding_table; /* PS_Table used to store the */
- /* encoding character names */
-
- FT_Int num_glyphs;
- PS_TableRec glyph_names;
- PS_TableRec charstrings;
- PS_TableRec swap_table; /* For moving .notdef glyph to index 0. */
-
- FT_Int num_subrs;
- PS_TableRec subrs;
- FT_Hash subrs_hash;
- FT_Bool fontdata;
-
- FT_UInt keywords_encountered; /* T1_LOADER_ENCOUNTERED_XXX */
-
- } T1_LoaderRec, *T1_Loader;
-
-
- /* treatment of some keywords differs depending on whether */
- /* they precede or follow certain other keywords */
-
-#define T1_PRIVATE ( 1 << 0 )
-#define T1_FONTDIR_AFTER_PRIVATE ( 1 << 1 )
-
-
- FT_LOCAL( FT_Error )
- T1_Open_Face( T1_Face face );
-
-#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
-
- FT_LOCAL( FT_Error )
- T1_Get_Multi_Master( T1_Face face,
- FT_Multi_Master* master );
-
- FT_LOCAL( FT_Error )
- T1_Get_MM_Var( T1_Face face,
- FT_MM_Var* *master );
-
- FT_LOCAL( FT_Error )
- T1_Set_MM_Blend( T1_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
- FT_LOCAL( FT_Error )
- T1_Get_MM_Blend( T1_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
- FT_LOCAL( FT_Error )
- T1_Set_MM_Design( T1_Face face,
- FT_UInt num_coords,
- FT_Long* coords );
-
- FT_LOCAL( FT_Error )
- T1_Get_Var_Design( T1_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
- FT_LOCAL( FT_Error )
- T1_Set_Var_Design( T1_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
- FT_LOCAL( void )
- T1_Done_Blend( T1_Face face );
-
-#endif /* !T1_CONFIG_OPTION_NO_MM_SUPPORT */
-
-
-FT_END_HEADER
-
-#endif /* T1LOAD_H_ */
-
-
-/* END */
diff --git a/src/type1/t1objs.c b/src/type1/t1objs.c
deleted file mode 100644
index 5ac1292ae..000000000
--- a/src/type1/t1objs.c
+++ /dev/null
@@ -1,607 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1objs.c */
-/* */
-/* Type 1 objects manager (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_IDS_H
-
-#include "t1gload.h"
-#include "t1load.h"
-
-#include "t1errors.h"
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
-#include "t1afm.h"
-#endif
-
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_t1objs
-
-
- /*************************************************************************/
- /* */
- /* SIZE FUNCTIONS */
- /* */
- /*************************************************************************/
-
-
- static PSH_Globals_Funcs
- T1_Size_Get_Globals_Funcs( T1_Size size )
- {
- T1_Face face = (T1_Face)size->root.face;
- PSHinter_Service pshinter = (PSHinter_Service)face->pshinter;
- FT_Module module;
-
-
- module = FT_Get_Module( size->root.face->driver->root.library,
- "pshinter" );
- return ( module && pshinter && pshinter->get_globals_funcs )
- ? pshinter->get_globals_funcs( module )
- : 0;
- }
-
-
- FT_LOCAL_DEF( void )
- T1_Size_Done( FT_Size t1size ) /* T1_Size */
- {
- T1_Size size = (T1_Size)t1size;
-
-
- if ( t1size->internal->module_data )
- {
- PSH_Globals_Funcs funcs;
-
-
- funcs = T1_Size_Get_Globals_Funcs( size );
- if ( funcs )
- funcs->destroy( (PSH_Globals)t1size->internal->module_data );
-
- t1size->internal->module_data = NULL;
- }
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Size_Init( FT_Size t1size ) /* T1_Size */
- {
- T1_Size size = (T1_Size)t1size;
- FT_Error error = FT_Err_Ok;
- PSH_Globals_Funcs funcs = T1_Size_Get_Globals_Funcs( size );
-
-
- if ( funcs )
- {
- PSH_Globals globals;
- T1_Face face = (T1_Face)size->root.face;
-
-
- error = funcs->create( size->root.face->memory,
- &face->type1.private_dict, &globals );
- if ( !error )
- t1size->internal->module_data = globals;
- }
-
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Size_Request( FT_Size t1size, /* T1_Size */
- FT_Size_Request req )
- {
- T1_Size size = (T1_Size)t1size;
- PSH_Globals_Funcs funcs = T1_Size_Get_Globals_Funcs( size );
-
-
- FT_Request_Metrics( size->root.face, req );
-
- if ( funcs )
- funcs->set_scale( (PSH_Globals)t1size->internal->module_data,
- size->root.metrics.x_scale,
- size->root.metrics.y_scale,
- 0, 0 );
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* SLOT FUNCTIONS */
- /* */
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- T1_GlyphSlot_Done( FT_GlyphSlot slot )
- {
- slot->internal->glyph_hints = NULL;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_GlyphSlot_Init( FT_GlyphSlot slot )
- {
- T1_Face face;
- PSHinter_Service pshinter;
-
-
- face = (T1_Face)slot->face;
- pshinter = (PSHinter_Service)face->pshinter;
-
- if ( pshinter )
- {
- FT_Module module;
-
-
- module = FT_Get_Module( slot->face->driver->root.library,
- "pshinter" );
- if ( module )
- {
- T1_Hints_Funcs funcs;
-
-
- funcs = pshinter->get_t1_funcs( module );
- slot->internal->glyph_hints = (void*)funcs;
- }
- }
-
- return 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* FACE FUNCTIONS */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* T1_Face_Done */
- /* */
- /* <Description> */
- /* The face object destructor. */
- /* */
- /* <Input> */
- /* face :: A typeless pointer to the face object to destroy. */
- /* */
- FT_LOCAL_DEF( void )
- T1_Face_Done( FT_Face t1face ) /* T1_Face */
- {
- T1_Face face = (T1_Face)t1face;
- FT_Memory memory;
- T1_Font type1;
-
-
- if ( !face )
- return;
-
- memory = face->root.memory;
- type1 = &face->type1;
-
-#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
- /* release multiple masters information */
- FT_ASSERT( ( face->len_buildchar == 0 ) == ( face->buildchar == NULL ) );
-
- if ( face->buildchar )
- {
- FT_FREE( face->buildchar );
-
- face->buildchar = NULL;
- face->len_buildchar = 0;
- }
-
- T1_Done_Blend( face );
- face->blend = NULL;
-#endif
-
- /* release font info strings */
- {
- PS_FontInfo info = &type1->font_info;
-
-
- FT_FREE( info->version );
- FT_FREE( info->notice );
- FT_FREE( info->full_name );
- FT_FREE( info->family_name );
- FT_FREE( info->weight );
- }
-
- /* release top dictionary */
- FT_FREE( type1->charstrings_len );
- FT_FREE( type1->charstrings );
- FT_FREE( type1->glyph_names );
-
- FT_FREE( type1->subrs );
- FT_FREE( type1->subrs_len );
-
- ft_hash_num_free( type1->subrs_hash, memory );
- FT_FREE( type1->subrs_hash );
-
- FT_FREE( type1->subrs_block );
- FT_FREE( type1->charstrings_block );
- FT_FREE( type1->glyph_names_block );
-
- FT_FREE( type1->encoding.char_index );
- FT_FREE( type1->encoding.char_name );
- FT_FREE( type1->font_name );
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
- /* release afm data if present */
- if ( face->afm_data )
- T1_Done_Metrics( memory, (AFM_FontInfo)face->afm_data );
-#endif
-
- /* release unicode map, if any */
-#if 0
- FT_FREE( face->unicode_map_rec.maps );
- face->unicode_map_rec.num_maps = 0;
- face->unicode_map = NULL;
-#endif
-
- face->root.family_name = NULL;
- face->root.style_name = NULL;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* T1_Face_Init */
- /* */
- /* <Description> */
- /* The face object constructor. */
- /* */
- /* <Input> */
- /* stream :: input stream where to load font data. */
- /* */
- /* face_index :: The index of the font face in the resource. */
- /* */
- /* num_params :: Number of additional generic parameters. Ignored. */
- /* */
- /* params :: Additional generic parameters. Ignored. */
- /* */
- /* <InOut> */
- /* face :: The face record to build. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- T1_Face_Init( FT_Stream stream,
- FT_Face t1face, /* T1_Face */
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- T1_Face face = (T1_Face)t1face;
- FT_Error error;
- FT_Service_PsCMaps psnames;
- PSAux_Service psaux;
- T1_Font type1 = &face->type1;
- PS_FontInfo info = &type1->font_info;
-
- FT_UNUSED( num_params );
- FT_UNUSED( params );
- FT_UNUSED( stream );
-
-
- face->root.num_faces = 1;
-
- FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
- face->psnames = psnames;
-
- face->psaux = FT_Get_Module_Interface( FT_FACE_LIBRARY( face ),
- "psaux" );
- psaux = (PSAux_Service)face->psaux;
- if ( !psaux )
- {
- FT_ERROR(( "T1_Face_Init: cannot access `psaux' module\n" ));
- error = FT_THROW( Missing_Module );
- goto Exit;
- }
-
- face->pshinter = FT_Get_Module_Interface( FT_FACE_LIBRARY( face ),
- "pshinter" );
-
- FT_TRACE2(( "Type 1 driver\n" ));
-
- /* open the tokenizer; this will also check the font format */
- error = T1_Open_Face( face );
- if ( error )
- goto Exit;
-
- /* if we just wanted to check the format, leave successfully now */
- if ( face_index < 0 )
- goto Exit;
-
- /* check the face index */
- if ( ( face_index & 0xFFFF ) > 0 )
- {
- FT_ERROR(( "T1_Face_Init: invalid face index\n" ));
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- /* now load the font program into the face object */
-
- /* initialize the face object fields */
-
- /* set up root face fields */
- {
- FT_Face root = (FT_Face)&face->root;
-
-
- root->num_glyphs = type1->num_glyphs;
- root->face_index = 0;
-
- root->face_flags |= FT_FACE_FLAG_SCALABLE |
- FT_FACE_FLAG_HORIZONTAL |
- FT_FACE_FLAG_GLYPH_NAMES |
- FT_FACE_FLAG_HINTER;
-
- if ( info->is_fixed_pitch )
- root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;
-
- if ( face->blend )
- root->face_flags |= FT_FACE_FLAG_MULTIPLE_MASTERS;
-
- /* The following code to extract the family and the style is very */
- /* simplistic and might get some things wrong. For a full-featured */
- /* algorithm you might have a look at the whitepaper given at */
- /* */
- /* http://blogs.msdn.com/text/archive/2007/04/23/wpf-font-selection-model.aspx */
-
- /* get style name -- be careful, some broken fonts only */
- /* have a `/FontName' dictionary entry! */
- root->family_name = info->family_name;
- root->style_name = NULL;
-
- if ( root->family_name )
- {
- char* full = info->full_name;
- char* family = root->family_name;
-
-
- if ( full )
- {
- FT_Bool the_same = TRUE;
-
-
- while ( *full )
- {
- if ( *full == *family )
- {
- family++;
- full++;
- }
- else
- {
- if ( *full == ' ' || *full == '-' )
- full++;
- else if ( *family == ' ' || *family == '-' )
- family++;
- else
- {
- the_same = FALSE;
-
- if ( !*family )
- root->style_name = full;
- break;
- }
- }
- }
-
- if ( the_same )
- root->style_name = (char *)"Regular";
- }
- }
- else
- {
- /* do we have a `/FontName'? */
- if ( type1->font_name )
- root->family_name = type1->font_name;
- }
-
- if ( !root->style_name )
- {
- if ( info->weight )
- root->style_name = info->weight;
- else
- /* assume `Regular' style because we don't know better */
- root->style_name = (char *)"Regular";
- }
-
- /* compute style flags */
- root->style_flags = 0;
- if ( info->italic_angle )
- root->style_flags |= FT_STYLE_FLAG_ITALIC;
- if ( info->weight )
- {
- if ( !ft_strcmp( info->weight, "Bold" ) ||
- !ft_strcmp( info->weight, "Black" ) )
- root->style_flags |= FT_STYLE_FLAG_BOLD;
- }
-
- /* no embedded bitmap support */
- root->num_fixed_sizes = 0;
- root->available_sizes = NULL;
-
- root->bbox.xMin = type1->font_bbox.xMin >> 16;
- root->bbox.yMin = type1->font_bbox.yMin >> 16;
- /* no `U' suffix here to 0xFFFF! */
- root->bbox.xMax = ( type1->font_bbox.xMax + 0xFFFF ) >> 16;
- root->bbox.yMax = ( type1->font_bbox.yMax + 0xFFFF ) >> 16;
-
- /* Set units_per_EM if we didn't set it in t1_parse_font_matrix. */
- if ( !root->units_per_EM )
- root->units_per_EM = 1000;
-
- root->ascender = (FT_Short)( root->bbox.yMax );
- root->descender = (FT_Short)( root->bbox.yMin );
-
- root->height = (FT_Short)( ( root->units_per_EM * 12 ) / 10 );
- if ( root->height < root->ascender - root->descender )
- root->height = (FT_Short)( root->ascender - root->descender );
-
- /* now compute the maximum advance width */
- root->max_advance_width =
- (FT_Short)( root->bbox.xMax );
- {
- FT_Pos max_advance;
-
-
- error = T1_Compute_Max_Advance( face, &max_advance );
-
- /* in case of error, keep the standard width */
- if ( !error )
- root->max_advance_width = (FT_Short)FIXED_TO_INT( max_advance );
- else
- error = FT_Err_Ok; /* clear error */
- }
-
- root->max_advance_height = root->height;
-
- root->underline_position = (FT_Short)info->underline_position;
- root->underline_thickness = (FT_Short)info->underline_thickness;
- }
-
- {
- FT_Face root = &face->root;
-
-
- if ( psnames )
- {
- FT_CharMapRec charmap;
- T1_CMap_Classes cmap_classes = psaux->t1_cmap_classes;
- FT_CMap_Class clazz;
-
-
- charmap.face = root;
-
- /* first of all, try to synthesize a Unicode charmap */
- charmap.platform_id = TT_PLATFORM_MICROSOFT;
- charmap.encoding_id = TT_MS_ID_UNICODE_CS;
- charmap.encoding = FT_ENCODING_UNICODE;
-
- error = FT_CMap_New( cmap_classes->unicode, NULL, &charmap, NULL );
- if ( error &&
- FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) )
- goto Exit;
- error = FT_Err_Ok;
-
- /* now, generate an Adobe Standard encoding when appropriate */
- charmap.platform_id = TT_PLATFORM_ADOBE;
- clazz = NULL;
-
- switch ( type1->encoding_type )
- {
- case T1_ENCODING_TYPE_STANDARD:
- charmap.encoding = FT_ENCODING_ADOBE_STANDARD;
- charmap.encoding_id = TT_ADOBE_ID_STANDARD;
- clazz = cmap_classes->standard;
- break;
-
- case T1_ENCODING_TYPE_EXPERT:
- charmap.encoding = FT_ENCODING_ADOBE_EXPERT;
- charmap.encoding_id = TT_ADOBE_ID_EXPERT;
- clazz = cmap_classes->expert;
- break;
-
- case T1_ENCODING_TYPE_ARRAY:
- charmap.encoding = FT_ENCODING_ADOBE_CUSTOM;
- charmap.encoding_id = TT_ADOBE_ID_CUSTOM;
- clazz = cmap_classes->custom;
- break;
-
- case T1_ENCODING_TYPE_ISOLATIN1:
- charmap.encoding = FT_ENCODING_ADOBE_LATIN_1;
- charmap.encoding_id = TT_ADOBE_ID_LATIN_1;
- clazz = cmap_classes->unicode;
- break;
-
- default:
- ;
- }
-
- if ( clazz )
- error = FT_CMap_New( clazz, NULL, &charmap, NULL );
- }
- }
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* T1_Driver_Init */
- /* */
- /* <Description> */
- /* Initializes a given Type 1 driver object. */
- /* */
- /* <Input> */
- /* driver :: A handle to the target driver object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- T1_Driver_Init( FT_Module driver )
- {
- FT_UNUSED( driver );
-
- return FT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* T1_Driver_Done */
- /* */
- /* <Description> */
- /* Finalizes a given Type 1 driver. */
- /* */
- /* <Input> */
- /* driver :: A handle to the target Type 1 driver. */
- /* */
- FT_LOCAL_DEF( void )
- T1_Driver_Done( FT_Module driver )
- {
- FT_UNUSED( driver );
- }
-
-
-/* END */
diff --git a/src/type1/t1objs.h b/src/type1/t1objs.h
deleted file mode 100644
index 39d26bf8b..000000000
--- a/src/type1/t1objs.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1objs.h */
-/* */
-/* Type 1 objects manager (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef T1OBJS_H_
-#define T1OBJS_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_TYPE1_TYPES_H
-
-
-FT_BEGIN_HEADER
-
-
- /* The following structures must be defined by the hinter */
- typedef struct T1_Size_Hints_ T1_Size_Hints;
- typedef struct T1_Glyph_Hints_ T1_Glyph_Hints;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* T1_Size */
- /* */
- /* <Description> */
- /* A handle to a Type 1 size object. */
- /* */
- typedef struct T1_SizeRec_* T1_Size;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* T1_GlyphSlot */
- /* */
- /* <Description> */
- /* A handle to a Type 1 glyph slot object. */
- /* */
- typedef struct T1_GlyphSlotRec_* T1_GlyphSlot;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* T1_CharMap */
- /* */
- /* <Description> */
- /* A handle to a Type 1 character mapping object. */
- /* */
- /* <Note> */
- /* The Type 1 format doesn't use a charmap but an encoding table. */
- /* The driver is responsible for making up charmap objects */
- /* corresponding to these tables. */
- /* */
- typedef struct T1_CharMapRec_* T1_CharMap;
-
-
- /*************************************************************************/
- /* */
- /* HERE BEGINS THE TYPE1 SPECIFIC STUFF */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* T1_SizeRec */
- /* */
- /* <Description> */
- /* Type 1 size record. */
- /* */
- typedef struct T1_SizeRec_
- {
- FT_SizeRec root;
-
- } T1_SizeRec;
-
-
- FT_LOCAL( void )
- T1_Size_Done( FT_Size size );
-
- FT_LOCAL( FT_Error )
- T1_Size_Request( FT_Size size,
- FT_Size_Request req );
-
- FT_LOCAL( FT_Error )
- T1_Size_Init( FT_Size size );
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* T1_GlyphSlotRec */
- /* */
- /* <Description> */
- /* Type 1 glyph slot record. */
- /* */
- typedef struct T1_GlyphSlotRec_
- {
- FT_GlyphSlotRec root;
-
- FT_Bool hint;
- FT_Bool scaled;
-
- FT_Int max_points;
- FT_Int max_contours;
-
- FT_Fixed x_scale;
- FT_Fixed y_scale;
-
- } T1_GlyphSlotRec;
-
-
- FT_LOCAL( FT_Error )
- T1_Face_Init( FT_Stream stream,
- FT_Face face,
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params );
-
- FT_LOCAL( void )
- T1_Face_Done( FT_Face face );
-
- FT_LOCAL( FT_Error )
- T1_GlyphSlot_Init( FT_GlyphSlot slot );
-
- FT_LOCAL( void )
- T1_GlyphSlot_Done( FT_GlyphSlot slot );
-
- FT_LOCAL( FT_Error )
- T1_Driver_Init( FT_Module driver );
-
- FT_LOCAL( void )
- T1_Driver_Done( FT_Module driver );
-
-
-FT_END_HEADER
-
-#endif /* T1OBJS_H_ */
-
-
-/* END */
diff --git a/src/type1/t1parse.c b/src/type1/t1parse.c
deleted file mode 100644
index 18dd26434..000000000
--- a/src/type1/t1parse.c
+++ /dev/null
@@ -1,525 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1parse.c */
-/* */
-/* Type 1 parser (body). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* The Type 1 parser is in charge of the following: */
- /* */
- /* - provide an implementation of a growing sequence of objects called */
- /* a `T1_Table' (used to build various tables needed by the loader). */
- /* */
- /* - opening .pfb and .pfa files to extract their top-level and private */
- /* dictionaries. */
- /* */
- /* - read numbers, arrays & strings from any dictionary. */
- /* */
- /* See `t1load.c' to see how data is loaded from the font file. */
- /* */
- /*************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-
-#include "t1parse.h"
-
-#include "t1errors.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_t1parse
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** INPUT STREAM PARSER *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* see Adobe Technical Note 5040.Download_Fonts.pdf */
-
- static FT_Error
- read_pfb_tag( FT_Stream stream,
- FT_UShort *atag,
- FT_ULong *asize )
- {
- FT_Error error;
- FT_UShort tag;
- FT_ULong size;
-
-
- *atag = 0;
- *asize = 0;
-
- if ( !FT_READ_USHORT( tag ) )
- {
- if ( tag == 0x8001U || tag == 0x8002U )
- {
- if ( !FT_READ_ULONG_LE( size ) )
- *asize = size;
- }
-
- *atag = tag;
- }
-
- return error;
- }
-
-
- static FT_Error
- check_type1_format( FT_Stream stream,
- const char* header_string,
- size_t header_length )
- {
- FT_Error error;
- FT_UShort tag;
- FT_ULong dummy;
-
-
- if ( FT_STREAM_SEEK( 0 ) )
- goto Exit;
-
- error = read_pfb_tag( stream, &tag, &dummy );
- if ( error )
- goto Exit;
-
- /* We assume that the first segment in a PFB is always encoded as */
- /* text. This might be wrong (and the specification doesn't insist */
- /* on that), but we have never seen a counterexample. */
- if ( tag != 0x8001U && FT_STREAM_SEEK( 0 ) )
- goto Exit;
-
- if ( !FT_FRAME_ENTER( header_length ) )
- {
- error = FT_Err_Ok;
-
- if ( ft_memcmp( stream->cursor, header_string, header_length ) != 0 )
- error = FT_THROW( Unknown_File_Format );
-
- FT_FRAME_EXIT();
- }
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_New_Parser( T1_Parser parser,
- FT_Stream stream,
- FT_Memory memory,
- PSAux_Service psaux )
- {
- FT_Error error;
- FT_UShort tag;
- FT_ULong size;
-
-
- psaux->ps_parser_funcs->init( &parser->root, NULL, NULL, memory );
-
- parser->stream = stream;
- parser->base_len = 0;
- parser->base_dict = NULL;
- parser->private_len = 0;
- parser->private_dict = NULL;
- parser->in_pfb = 0;
- parser->in_memory = 0;
- parser->single_block = 0;
-
- /* check the header format */
- error = check_type1_format( stream, "%!PS-AdobeFont", 14 );
- if ( error )
- {
- if ( FT_ERR_NEQ( error, Unknown_File_Format ) )
- goto Exit;
-
- error = check_type1_format( stream, "%!FontType", 10 );
- if ( error )
- {
- FT_TRACE2(( " not a Type 1 font\n" ));
- goto Exit;
- }
- }
-
- /******************************************************************/
- /* */
- /* Here a short summary of what is going on: */
- /* */
- /* When creating a new Type 1 parser, we try to locate and load */
- /* the base dictionary if this is possible (i.e., for PFB */
- /* files). Otherwise, we load the whole font into memory. */
- /* */
- /* When `loading' the base dictionary, we only setup pointers */
- /* in the case of a memory-based stream. Otherwise, we */
- /* allocate and load the base dictionary in it. */
- /* */
- /* parser->in_pfb is set if we are in a binary (`.pfb') font. */
- /* parser->in_memory is set if we have a memory stream. */
- /* */
-
- /* try to compute the size of the base dictionary; */
- /* look for a Postscript binary file tag, i.e., 0x8001 */
- if ( FT_STREAM_SEEK( 0L ) )
- goto Exit;
-
- error = read_pfb_tag( stream, &tag, &size );
- if ( error )
- goto Exit;
-
- if ( tag != 0x8001U )
- {
- /* assume that this is a PFA file for now; an error will */
- /* be produced later when more things are checked */
- if ( FT_STREAM_SEEK( 0L ) )
- goto Exit;
- size = stream->size;
- }
- else
- parser->in_pfb = 1;
-
- /* now, try to load `size' bytes of the `base' dictionary we */
- /* found previously */
-
- /* if it is a memory-based resource, set up pointers */
- if ( !stream->read )
- {
- parser->base_dict = (FT_Byte*)stream->base + stream->pos;
- parser->base_len = size;
- parser->in_memory = 1;
-
- /* check that the `size' field is valid */
- if ( FT_STREAM_SKIP( size ) )
- goto Exit;
- }
- else
- {
- /* read segment in memory -- this is clumsy, but so does the format */
- if ( FT_ALLOC( parser->base_dict, size ) ||
- FT_STREAM_READ( parser->base_dict, size ) )
- goto Exit;
- parser->base_len = size;
- }
-
- parser->root.base = parser->base_dict;
- parser->root.cursor = parser->base_dict;
- parser->root.limit = parser->root.cursor + parser->base_len;
-
- Exit:
- if ( error && !parser->in_memory )
- FT_FREE( parser->base_dict );
-
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- T1_Finalize_Parser( T1_Parser parser )
- {
- FT_Memory memory = parser->root.memory;
-
-
- /* always free the private dictionary */
- FT_FREE( parser->private_dict );
-
- /* free the base dictionary only when we have a disk stream */
- if ( !parser->in_memory )
- FT_FREE( parser->base_dict );
-
- parser->root.funcs.done( &parser->root );
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Get_Private_Dict( T1_Parser parser,
- PSAux_Service psaux )
- {
- FT_Stream stream = parser->stream;
- FT_Memory memory = parser->root.memory;
- FT_Error error = FT_Err_Ok;
- FT_ULong size;
-
-
- if ( parser->in_pfb )
- {
- /* in the case of the PFB format, the private dictionary can be */
- /* made of several segments. We thus first read the number of */
- /* segments to compute the total size of the private dictionary */
- /* then re-read them into memory. */
- FT_ULong start_pos = FT_STREAM_POS();
- FT_UShort tag;
-
-
- parser->private_len = 0;
- for (;;)
- {
- error = read_pfb_tag( stream, &tag, &size );
- if ( error )
- goto Fail;
-
- if ( tag != 0x8002U )
- break;
-
- parser->private_len += size;
-
- if ( FT_STREAM_SKIP( size ) )
- goto Fail;
- }
-
- /* Check that we have a private dictionary there */
- /* and allocate private dictionary buffer */
- if ( parser->private_len == 0 )
- {
- FT_ERROR(( "T1_Get_Private_Dict:"
- " invalid private dictionary section\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- if ( FT_STREAM_SEEK( start_pos ) ||
- FT_ALLOC( parser->private_dict, parser->private_len ) )
- goto Fail;
-
- parser->private_len = 0;
- for (;;)
- {
- error = read_pfb_tag( stream, &tag, &size );
- if ( error || tag != 0x8002U )
- {
- error = FT_Err_Ok;
- break;
- }
-
- if ( FT_STREAM_READ( parser->private_dict + parser->private_len,
- size ) )
- goto Fail;
-
- parser->private_len += size;
- }
- }
- else
- {
- /* We have already `loaded' the whole PFA font file into memory; */
- /* if this is a memory resource, allocate a new block to hold */
- /* the private dict. Otherwise, simply overwrite into the base */
- /* dictionary block in the heap. */
-
- /* first of all, look at the `eexec' keyword */
- FT_Byte* cur = parser->base_dict;
- FT_Byte* limit = cur + parser->base_len;
- FT_Pointer pos_lf;
- FT_Bool test_cr;
-
-
- Again:
- for (;;)
- {
- if ( cur[0] == 'e' &&
- cur + 9 < limit ) /* 9 = 5 letters for `eexec' + */
- /* whitespace + 4 chars */
- {
- if ( cur[1] == 'e' &&
- cur[2] == 'x' &&
- cur[3] == 'e' &&
- cur[4] == 'c' )
- break;
- }
- cur++;
- if ( cur >= limit )
- {
- FT_ERROR(( "T1_Get_Private_Dict:"
- " could not find `eexec' keyword\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
- }
-
- /* check whether `eexec' was real -- it could be in a comment */
- /* or string (as e.g. in u003043t.gsf from ghostscript) */
-
- parser->root.cursor = parser->base_dict;
- /* set limit to `eexec' + whitespace + 4 characters */
- parser->root.limit = cur + 10;
-
- cur = parser->root.cursor;
- limit = parser->root.limit;
-
- while ( cur < limit )
- {
- if ( cur[0] == 'e' &&
- cur + 5 < limit )
- {
- if ( cur[1] == 'e' &&
- cur[2] == 'x' &&
- cur[3] == 'e' &&
- cur[4] == 'c' )
- goto Found;
- }
-
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- break;
- T1_Skip_Spaces ( parser );
- cur = parser->root.cursor;
- }
-
- /* we haven't found the correct `eexec'; go back and continue */
- /* searching */
-
- cur = limit;
- limit = parser->base_dict + parser->base_len;
-
- if ( cur >= limit )
- {
- FT_ERROR(( "T1_Get_Private_Dict:"
- " premature end in private dictionary\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- goto Again;
-
- /* now determine where to write the _encrypted_ binary private */
- /* dictionary. We overwrite the base dictionary for disk-based */
- /* resources and allocate a new block otherwise */
-
- Found:
- parser->root.limit = parser->base_dict + parser->base_len;
-
- T1_Skip_PS_Token( parser );
- cur = parser->root.cursor;
- limit = parser->root.limit;
-
- /* According to the Type 1 spec, the first cipher byte must not be */
- /* an ASCII whitespace character code (blank, tab, carriage return */
- /* or line feed). We have seen Type 1 fonts with two line feed */
- /* characters... So skip now all whitespace character codes. */
- /* */
- /* On the other hand, Adobe's Type 1 parser handles fonts just */
- /* fine that are violating this limitation, so we add a heuristic */
- /* test to stop at \r only if it is not used for EOL. */
-
- pos_lf = ft_memchr( cur, '\n', (size_t)( limit - cur ) );
- test_cr = FT_BOOL( !pos_lf ||
- pos_lf > ft_memchr( cur,
- '\r',
- (size_t)( limit - cur ) ) );
-
- while ( cur < limit &&
- ( *cur == ' ' ||
- *cur == '\t' ||
- (test_cr && *cur == '\r' ) ||
- *cur == '\n' ) )
- cur++;
- if ( cur >= limit )
- {
- FT_ERROR(( "T1_Get_Private_Dict:"
- " `eexec' not properly terminated\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- size = parser->base_len - (FT_ULong)( cur - parser->base_dict );
-
- if ( parser->in_memory )
- {
- /* note that we allocate one more byte to put a terminating `0' */
- if ( FT_ALLOC( parser->private_dict, size + 1 ) )
- goto Fail;
- parser->private_len = size;
- }
- else
- {
- parser->single_block = 1;
- parser->private_dict = parser->base_dict;
- parser->private_len = size;
- parser->base_dict = NULL;
- parser->base_len = 0;
- }
-
- /* now determine whether the private dictionary is encoded in binary */
- /* or hexadecimal ASCII format -- decode it accordingly */
-
- /* we need to access the next 4 bytes (after the final whitespace */
- /* following the `eexec' keyword); if they all are hexadecimal */
- /* digits, then we have a case of ASCII storage */
-
- if ( cur + 3 < limit &&
- ft_isxdigit( cur[0] ) && ft_isxdigit( cur[1] ) &&
- ft_isxdigit( cur[2] ) && ft_isxdigit( cur[3] ) )
- {
- /* ASCII hexadecimal encoding */
- FT_ULong len;
-
-
- parser->root.cursor = cur;
- (void)psaux->ps_parser_funcs->to_bytes( &parser->root,
- parser->private_dict,
- parser->private_len,
- &len,
- 0 );
- parser->private_len = len;
-
- /* put a safeguard */
- parser->private_dict[len] = '\0';
- }
- else
- /* binary encoding -- copy the private dict */
- FT_MEM_MOVE( parser->private_dict, cur, size );
- }
-
- /* we now decrypt the encoded binary private dictionary */
- psaux->t1_decrypt( parser->private_dict, parser->private_len, 55665U );
-
- if ( parser->private_len < 4 )
- {
- FT_ERROR(( "T1_Get_Private_Dict:"
- " invalid private dictionary section\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- /* replace the four random bytes at the beginning with whitespace */
- parser->private_dict[0] = ' ';
- parser->private_dict[1] = ' ';
- parser->private_dict[2] = ' ';
- parser->private_dict[3] = ' ';
-
- parser->root.base = parser->private_dict;
- parser->root.cursor = parser->private_dict;
- parser->root.limit = parser->root.cursor + parser->private_len;
-
- Fail:
- Exit:
- return error;
- }
-
-
-/* END */
diff --git a/src/type1/t1parse.h b/src/type1/t1parse.h
deleted file mode 100644
index 3396680d1..000000000
--- a/src/type1/t1parse.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1parse.h */
-/* */
-/* Type 1 parser (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef T1PARSE_H_
-#define T1PARSE_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_TYPE1_TYPES_H
-#include FT_INTERNAL_STREAM_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* T1_ParserRec */
- /* */
- /* <Description> */
- /* A PS_ParserRec is an object used to parse a Type 1 fonts very */
- /* quickly. */
- /* */
- /* <Fields> */
- /* root :: The root parser. */
- /* */
- /* stream :: The current input stream. */
- /* */
- /* base_dict :: A pointer to the top-level dictionary. */
- /* */
- /* base_len :: The length in bytes of the top dictionary. */
- /* */
- /* private_dict :: A pointer to the private dictionary. */
- /* */
- /* private_len :: The length in bytes of the private dictionary. */
- /* */
- /* in_pfb :: A boolean. Indicates that we are handling a PFB */
- /* file. */
- /* */
- /* in_memory :: A boolean. Indicates a memory-based stream. */
- /* */
- /* single_block :: A boolean. Indicates that the private dictionary */
- /* is stored in lieu of the base dictionary. */
- /* */
- typedef struct T1_ParserRec_
- {
- PS_ParserRec root;
- FT_Stream stream;
-
- FT_Byte* base_dict;
- FT_ULong base_len;
-
- FT_Byte* private_dict;
- FT_ULong private_len;
-
- FT_Bool in_pfb;
- FT_Bool in_memory;
- FT_Bool single_block;
-
- } T1_ParserRec, *T1_Parser;
-
-
-#define T1_Add_Table( p, i, o, l ) (p)->funcs.add( (p), i, o, l )
-#define T1_Release_Table( p ) \
- do \
- { \
- if ( (p)->funcs.release ) \
- (p)->funcs.release( p ); \
- } while ( 0 )
-
-
-#define T1_Skip_Spaces( p ) (p)->root.funcs.skip_spaces( &(p)->root )
-#define T1_Skip_PS_Token( p ) (p)->root.funcs.skip_PS_token( &(p)->root )
-
-#define T1_ToInt( p ) (p)->root.funcs.to_int( &(p)->root )
-#define T1_ToFixed( p, t ) (p)->root.funcs.to_fixed( &(p)->root, t )
-
-#define T1_ToCoordArray( p, m, c ) \
- (p)->root.funcs.to_coord_array( &(p)->root, m, c )
-#define T1_ToFixedArray( p, m, f, t ) \
- (p)->root.funcs.to_fixed_array( &(p)->root, m, f, t )
-#define T1_ToToken( p, t ) \
- (p)->root.funcs.to_token( &(p)->root, t )
-#define T1_ToTokenArray( p, t, m, c ) \
- (p)->root.funcs.to_token_array( &(p)->root, t, m, c )
-
-#define T1_Load_Field( p, f, o, m, pf ) \
- (p)->root.funcs.load_field( &(p)->root, f, o, m, pf )
-
-#define T1_Load_Field_Table( p, f, o, m, pf ) \
- (p)->root.funcs.load_field_table( &(p)->root, f, o, m, pf )
-
-
- FT_LOCAL( FT_Error )
- T1_New_Parser( T1_Parser parser,
- FT_Stream stream,
- FT_Memory memory,
- PSAux_Service psaux );
-
- FT_LOCAL( FT_Error )
- T1_Get_Private_Dict( T1_Parser parser,
- PSAux_Service psaux );
-
- FT_LOCAL( void )
- T1_Finalize_Parser( T1_Parser parser );
-
-
-FT_END_HEADER
-
-#endif /* T1PARSE_H_ */
-
-
-/* END */
diff --git a/src/type1/t1tokens.h b/src/type1/t1tokens.h
deleted file mode 100644
index ca0c55f90..000000000
--- a/src/type1/t1tokens.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1tokens.h */
-/* */
-/* Type 1 tokenizer (specification). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PS_FontInfoRec
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_FONT_INFO
-
- T1_FIELD_STRING( "version", version,
- T1_FIELD_DICT_FONTDICT )
- T1_FIELD_STRING( "Notice", notice,
- T1_FIELD_DICT_FONTDICT )
- T1_FIELD_STRING( "FullName", full_name,
- T1_FIELD_DICT_FONTDICT )
- T1_FIELD_STRING( "FamilyName", family_name,
- T1_FIELD_DICT_FONTDICT )
- T1_FIELD_STRING( "Weight", weight,
- T1_FIELD_DICT_FONTDICT )
-
- /* we use pointers to detect modifications made by synthetic fonts */
- T1_FIELD_NUM ( "ItalicAngle", italic_angle,
- T1_FIELD_DICT_FONTDICT )
- T1_FIELD_BOOL ( "isFixedPitch", is_fixed_pitch,
- T1_FIELD_DICT_FONTDICT )
- T1_FIELD_NUM ( "UnderlinePosition", underline_position,
- T1_FIELD_DICT_FONTDICT )
- T1_FIELD_NUM ( "UnderlineThickness", underline_thickness,
- T1_FIELD_DICT_FONTDICT )
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PS_FontExtraRec
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_FONT_EXTRA
-
- T1_FIELD_NUM ( "FSType", fs_type,
- T1_FIELD_DICT_FONTDICT )
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PS_PrivateRec
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_PRIVATE
-
- T1_FIELD_NUM ( "UniqueID", unique_id,
- T1_FIELD_DICT_FONTDICT | T1_FIELD_DICT_PRIVATE )
- T1_FIELD_NUM ( "lenIV", lenIV,
- T1_FIELD_DICT_PRIVATE )
- T1_FIELD_NUM ( "LanguageGroup", language_group,
- T1_FIELD_DICT_PRIVATE )
- T1_FIELD_NUM ( "password", password,
- T1_FIELD_DICT_PRIVATE )
-
- T1_FIELD_FIXED_1000( "BlueScale", blue_scale,
- T1_FIELD_DICT_PRIVATE )
- T1_FIELD_NUM ( "BlueShift", blue_shift,
- T1_FIELD_DICT_PRIVATE )
- T1_FIELD_NUM ( "BlueFuzz", blue_fuzz,
- T1_FIELD_DICT_PRIVATE )
-
- T1_FIELD_NUM_TABLE ( "BlueValues", blue_values, 14,
- T1_FIELD_DICT_PRIVATE )
- T1_FIELD_NUM_TABLE ( "OtherBlues", other_blues, 10,
- T1_FIELD_DICT_PRIVATE )
- T1_FIELD_NUM_TABLE ( "FamilyBlues", family_blues, 14,
- T1_FIELD_DICT_PRIVATE )
- T1_FIELD_NUM_TABLE ( "FamilyOtherBlues", family_other_blues, 10,
- T1_FIELD_DICT_PRIVATE )
-
- T1_FIELD_NUM_TABLE2( "StdHW", standard_width, 1,
- T1_FIELD_DICT_PRIVATE )
- T1_FIELD_NUM_TABLE2( "StdVW", standard_height, 1,
- T1_FIELD_DICT_PRIVATE )
- T1_FIELD_NUM_TABLE2( "MinFeature", min_feature, 2,
- T1_FIELD_DICT_PRIVATE )
-
- T1_FIELD_NUM_TABLE ( "StemSnapH", snap_widths, 12,
- T1_FIELD_DICT_PRIVATE )
- T1_FIELD_NUM_TABLE ( "StemSnapV", snap_heights, 12,
- T1_FIELD_DICT_PRIVATE )
-
- T1_FIELD_FIXED ( "ExpansionFactor", expansion_factor,
- T1_FIELD_DICT_PRIVATE )
- T1_FIELD_BOOL ( "ForceBold", force_bold,
- T1_FIELD_DICT_PRIVATE )
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE T1_FontRec
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_FONT_DICT
-
- T1_FIELD_KEY ( "FontName", font_name, T1_FIELD_DICT_FONTDICT )
- T1_FIELD_NUM ( "PaintType", paint_type, T1_FIELD_DICT_FONTDICT )
- T1_FIELD_NUM ( "FontType", font_type, T1_FIELD_DICT_FONTDICT )
- T1_FIELD_FIXED( "StrokeWidth", stroke_width, T1_FIELD_DICT_FONTDICT )
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE FT_BBox
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_BBOX
-
- T1_FIELD_BBOX( "FontBBox", xMin, T1_FIELD_DICT_FONTDICT )
-
-
-#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE T1_FaceRec
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_FACE
-
- T1_FIELD_NUM( "NDV", ndv_idx, T1_FIELD_DICT_PRIVATE )
- T1_FIELD_NUM( "CDV", cdv_idx, T1_FIELD_DICT_PRIVATE )
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PS_BlendRec
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_BLEND
-
- T1_FIELD_NUM_TABLE( "DesignVector", default_design_vector,
- T1_MAX_MM_DESIGNS, T1_FIELD_DICT_FONTDICT )
-
-
-#endif /* T1_CONFIG_OPTION_NO_MM_SUPPORT */
-
-
-/* END */
diff --git a/src/type1/type1.c b/src/type1/type1.c
deleted file mode 100644
index 81795376e..000000000
--- a/src/type1/type1.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/***************************************************************************/
-/* */
-/* type1.c */
-/* */
-/* FreeType Type 1 driver component (body only). */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "t1afm.c"
-#include "t1driver.c"
-#include "t1gload.c"
-#include "t1load.c"
-#include "t1objs.c"
-#include "t1parse.c"
-
-
-/* END */
diff --git a/src/type42/Jamfile b/src/type42/Jamfile
deleted file mode 100644
index b826bbc46..000000000
--- a/src/type42/Jamfile
+++ /dev/null
@@ -1,32 +0,0 @@
-# FreeType 2 src/type42 Jamfile
-#
-# Copyright 2002-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) type42 ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = t42drivr
- t42objs
- t42parse
- ;
- }
- else
- {
- _sources = type42 ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/type42 Jamfile
diff --git a/src/type42/module.mk b/src/type42/module.mk
deleted file mode 100644
index 2f5280680..000000000
--- a/src/type42/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 Type42 module definition
-#
-
-
-# Copyright 2002-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += TYPE42_DRIVER
-
-define TYPE42_DRIVER
-$(OPEN_DRIVER) FT_Driver_ClassRec, t42_driver_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)type42 $(ECHO_DRIVER_DESC)Type 42 font files with no known extension$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/type42/rules.mk b/src/type42/rules.mk
deleted file mode 100644
index d7e896501..000000000
--- a/src/type42/rules.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-#
-# FreeType 2 Type42 driver configuration rules
-#
-
-
-# Copyright 2002-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# Type42 driver directory
-#
-T42_DIR := $(SRC_DIR)/type42
-
-
-# compilation flags for the driver
-#
-T42_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(T42_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# Type42 driver source
-#
-T42_DRV_SRC := $(T42_DIR)/t42objs.c \
- $(T42_DIR)/t42parse.c \
- $(T42_DIR)/t42drivr.c
-
-# Type42 driver headers
-#
-T42_DRV_H := $(T42_DRV_SRC:%.c=%.h) \
- $(T42_DIR)/t42error.h \
- $(T42_DIR)/t42types.h
-
-
-# Type42 driver object(s)
-#
-# T42_DRV_OBJ_M is used during `multi' builds
-# T42_DRV_OBJ_S is used during `single' builds
-#
-T42_DRV_OBJ_M := $(T42_DRV_SRC:$(T42_DIR)/%.c=$(OBJ_DIR)/%.$O)
-T42_DRV_OBJ_S := $(OBJ_DIR)/type42.$O
-
-# Type42 driver source file for single build
-#
-T42_DRV_SRC_S := $(T42_DIR)/type42.c
-
-
-# Type42 driver - single object
-#
-$(T42_DRV_OBJ_S): $(T42_DRV_SRC_S) $(T42_DRV_SRC) $(FREETYPE_H) $(T42_DRV_H)
- $(T42_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(T42_DRV_SRC_S))
-
-
-# Type42 driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(T42_DIR)/%.c $(FREETYPE_H) $(T42_DRV_H)
- $(T42_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(T42_DRV_OBJ_S)
-DRV_OBJS_M += $(T42_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/type42/t42drivr.c b/src/type42/t42drivr.c
deleted file mode 100644
index 366cfb3a1..000000000
--- a/src/type42/t42drivr.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42drivr.c */
-/* */
-/* High-level Type 42 driver interface (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* Roberto Alameda. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This driver implements Type42 fonts as described in the */
- /* Technical Note #5012 from Adobe, with these limitations: */
- /* */
- /* 1) CID Fonts are not currently supported. */
- /* 2) Incremental fonts making use of the GlyphDirectory keyword */
- /* will be loaded, but the rendering will be using the TrueType */
- /* tables. */
- /* 3) As for Type1 fonts, CDevProc is not supported. */
- /* 4) The Metrics dictionary is not supported. */
- /* 5) AFM metrics are not supported. */
- /* */
- /* In other words, this driver supports Type42 fonts derived from */
- /* TrueType fonts in a non-CID manner, as done by usual conversion */
- /* programs. */
- /* */
- /*************************************************************************/
-
-
-#include "t42drivr.h"
-#include "t42objs.h"
-#include "t42error.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include FT_SERVICE_FONT_FORMAT_H
-#include FT_SERVICE_GLYPH_DICT_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_POSTSCRIPT_INFO_H
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_t42
-
-
- /*
- *
- * GLYPH DICT SERVICE
- *
- */
-
- static FT_Error
- t42_get_glyph_name( T42_Face face,
- FT_UInt glyph_index,
- FT_Pointer buffer,
- FT_UInt buffer_max )
- {
- FT_STRCPYN( buffer, face->type1.glyph_names[glyph_index], buffer_max );
-
- return FT_Err_Ok;
- }
-
-
- static FT_UInt
- t42_get_name_index( T42_Face face,
- FT_String* glyph_name )
- {
- FT_Int i;
-
-
- for ( i = 0; i < face->type1.num_glyphs; i++ )
- {
- FT_String* gname = face->type1.glyph_names[i];
-
-
- if ( glyph_name[0] == gname[0] && !ft_strcmp( glyph_name, gname ) )
- return (FT_UInt)ft_strtol( (const char *)face->type1.charstrings[i],
- NULL, 10 );
- }
-
- return 0;
- }
-
-
- static const FT_Service_GlyphDictRec t42_service_glyph_dict =
- {
- (FT_GlyphDict_GetNameFunc) t42_get_glyph_name, /* get_name */
- (FT_GlyphDict_NameIndexFunc)t42_get_name_index /* name_index */
- };
-
-
- /*
- *
- * POSTSCRIPT NAME SERVICE
- *
- */
-
- static const char*
- t42_get_ps_font_name( T42_Face face )
- {
- return (const char*)face->type1.font_name;
- }
-
-
- static const FT_Service_PsFontNameRec t42_service_ps_font_name =
- {
- (FT_PsName_GetFunc)t42_get_ps_font_name /* get_ps_font_name */
- };
-
-
- /*
- *
- * POSTSCRIPT INFO SERVICE
- *
- */
-
- static FT_Error
- t42_ps_get_font_info( FT_Face face,
- PS_FontInfoRec* afont_info )
- {
- *afont_info = ((T42_Face)face)->type1.font_info;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Error
- t42_ps_get_font_extra( FT_Face face,
- PS_FontExtraRec* afont_extra )
- {
- *afont_extra = ((T42_Face)face)->type1.font_extra;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Int
- t42_ps_has_glyph_names( FT_Face face )
- {
- FT_UNUSED( face );
-
- return 1;
- }
-
-
- static FT_Error
- t42_ps_get_font_private( FT_Face face,
- PS_PrivateRec* afont_private )
- {
- *afont_private = ((T42_Face)face)->type1.private_dict;
-
- return FT_Err_Ok;
- }
-
-
- static const FT_Service_PsInfoRec t42_service_ps_info =
- {
- (PS_GetFontInfoFunc) t42_ps_get_font_info, /* ps_get_font_info */
- (PS_GetFontExtraFunc) t42_ps_get_font_extra, /* ps_get_font_extra */
- (PS_HasGlyphNamesFunc) t42_ps_has_glyph_names, /* ps_has_glyph_names */
- (PS_GetFontPrivateFunc)t42_ps_get_font_private, /* ps_get_font_private */
- /* not implemented */
- (PS_GetFontValueFunc) NULL /* ps_get_font_value */
- };
-
-
- /*
- *
- * SERVICE LIST
- *
- */
-
- static const FT_ServiceDescRec t42_services[] =
- {
- { FT_SERVICE_ID_GLYPH_DICT, &t42_service_glyph_dict },
- { FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &t42_service_ps_font_name },
- { FT_SERVICE_ID_POSTSCRIPT_INFO, &t42_service_ps_info },
- { FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TYPE_42 },
- { NULL, NULL }
- };
-
-
- FT_CALLBACK_DEF( FT_Module_Interface )
- T42_Get_Interface( FT_Module module,
- const FT_String* t42_interface )
- {
- FT_UNUSED( module );
-
- return ft_service_list_lookup( t42_services, t42_interface );
- }
-
-
- const FT_Driver_ClassRec t42_driver_class =
- {
- {
- FT_MODULE_FONT_DRIVER |
- FT_MODULE_DRIVER_SCALABLE |
-#ifdef TT_USE_BYTECODE_INTERPRETER
- FT_MODULE_DRIVER_HAS_HINTER,
-#else
- 0,
-#endif
-
- sizeof ( T42_DriverRec ),
-
- "type42",
- 0x10000L,
- 0x20000L,
-
- NULL, /* module-specific interface */
-
- T42_Driver_Init, /* FT_Module_Constructor module_init */
- T42_Driver_Done, /* FT_Module_Destructor module_done */
- T42_Get_Interface, /* FT_Module_Requester get_interface */
- },
-
- sizeof ( T42_FaceRec ),
- sizeof ( T42_SizeRec ),
- sizeof ( T42_GlyphSlotRec ),
-
- T42_Face_Init, /* FT_Face_InitFunc init_face */
- T42_Face_Done, /* FT_Face_DoneFunc done_face */
- T42_Size_Init, /* FT_Size_InitFunc init_size */
- T42_Size_Done, /* FT_Size_DoneFunc done_size */
- T42_GlyphSlot_Init, /* FT_Slot_InitFunc init_slot */
- T42_GlyphSlot_Done, /* FT_Slot_DoneFunc done_slot */
-
- T42_GlyphSlot_Load, /* FT_Slot_LoadFunc load_glyph */
-
- NULL, /* FT_Face_GetKerningFunc get_kerning */
- NULL, /* FT_Face_AttachFunc attach_file */
- NULL, /* FT_Face_GetAdvancesFunc get_advances */
-
- T42_Size_Request, /* FT_Size_RequestFunc request_size */
- T42_Size_Select /* FT_Size_SelectFunc select_size */
- };
-
-
-/* END */
diff --git a/src/type42/t42drivr.h b/src/type42/t42drivr.h
deleted file mode 100644
index 1ac4a0a1a..000000000
--- a/src/type42/t42drivr.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42drivr.h */
-/* */
-/* High-level Type 42 driver interface (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* Roberto Alameda. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef T42DRIVR_H_
-#define T42DRIVR_H_
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-
-
-FT_BEGIN_HEADER
-
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
-
- FT_EXPORT_VAR( const FT_Driver_ClassRec ) t42_driver_class;
-
-
-FT_END_HEADER
-
-
-#endif /* T42DRIVR_H_ */
-
-
-/* END */
diff --git a/src/type42/t42error.h b/src/type42/t42error.h
deleted file mode 100644
index fda92abf5..000000000
--- a/src/type42/t42error.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42error.h */
-/* */
-/* Type 42 error codes (specification only). */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the Type 42 error enumeration constants. */
- /* */
- /*************************************************************************/
-
-#ifndef T42ERROR_H_
-#define T42ERROR_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX T42_Err_
-#define FT_ERR_BASE FT_Mod_Err_Type42
-
-#include FT_ERRORS_H
-
-#endif /* T42ERROR_H_ */
-
-
-/* END */
diff --git a/src/type42/t42objs.c b/src/type42/t42objs.c
deleted file mode 100644
index 1c4ebd768..000000000
--- a/src/type42/t42objs.c
+++ /dev/null
@@ -1,688 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42objs.c */
-/* */
-/* Type 42 objects manager (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* Roberto Alameda. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "t42objs.h"
-#include "t42parse.h"
-#include "t42error.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_LIST_H
-#include FT_TRUETYPE_IDS_H
-
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_t42
-
-
- static FT_Error
- T42_Open_Face( T42_Face face )
- {
- T42_LoaderRec loader;
- T42_Parser parser;
- T1_Font type1 = &face->type1;
- FT_Memory memory = face->root.memory;
- FT_Error error;
-
- PSAux_Service psaux = (PSAux_Service)face->psaux;
-
-
- t42_loader_init( &loader, face );
-
- parser = &loader.parser;
-
- if ( FT_ALLOC( face->ttf_data, 12 ) )
- goto Exit;
-
- /* while parsing the font we always update `face->ttf_size' so that */
- /* even in case of buggy data (which might lead to premature end of */
- /* scanning without causing an error) the call to `FT_Open_Face' in */
- /* `T42_Face_Init' passes the correct size */
- face->ttf_size = 12;
-
- error = t42_parser_init( parser,
- face->root.stream,
- memory,
- psaux);
- if ( error )
- goto Exit;
-
- error = t42_parse_dict( face, &loader,
- parser->base_dict, parser->base_len );
- if ( error )
- goto Exit;
-
- if ( type1->font_type != 42 )
- {
- FT_ERROR(( "T42_Open_Face: cannot handle FontType %d\n",
- type1->font_type ));
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
-
- /* now, propagate the charstrings and glyphnames tables */
- /* to the Type1 data */
- type1->num_glyphs = loader.num_glyphs;
-
- if ( !loader.charstrings.init )
- {
- FT_ERROR(( "T42_Open_Face: no charstrings array in face\n" ));
- error = FT_THROW( Invalid_File_Format );
- }
-
- loader.charstrings.init = 0;
- type1->charstrings_block = loader.charstrings.block;
- type1->charstrings = loader.charstrings.elements;
- type1->charstrings_len = loader.charstrings.lengths;
-
- /* we copy the glyph names `block' and `elements' fields; */
- /* the `lengths' field must be released later */
- type1->glyph_names_block = loader.glyph_names.block;
- type1->glyph_names = (FT_String**)loader.glyph_names.elements;
- loader.glyph_names.block = NULL;
- loader.glyph_names.elements = NULL;
-
- /* we must now build type1.encoding when we have a custom array */
- if ( type1->encoding_type == T1_ENCODING_TYPE_ARRAY )
- {
- FT_Int charcode, idx, min_char, max_char;
- FT_Byte* glyph_name;
-
-
- /* OK, we do the following: for each element in the encoding */
- /* table, look up the index of the glyph having the same name */
- /* as defined in the CharStrings array. */
- /* The index is then stored in type1.encoding.char_index, and */
- /* the name in type1.encoding.char_name */
-
- min_char = 0;
- max_char = 0;
-
- charcode = 0;
- for ( ; charcode < loader.encoding_table.max_elems; charcode++ )
- {
- FT_Byte* char_name;
-
-
- type1->encoding.char_index[charcode] = 0;
- type1->encoding.char_name [charcode] = (char *)".notdef";
-
- char_name = loader.encoding_table.elements[charcode];
- if ( char_name )
- for ( idx = 0; idx < type1->num_glyphs; idx++ )
- {
- glyph_name = (FT_Byte*)type1->glyph_names[idx];
- if ( ft_strcmp( (const char*)char_name,
- (const char*)glyph_name ) == 0 )
- {
- type1->encoding.char_index[charcode] = (FT_UShort)idx;
- type1->encoding.char_name [charcode] = (char*)glyph_name;
-
- /* Change min/max encoded char only if glyph name is */
- /* not /.notdef */
- if ( ft_strcmp( (const char*)".notdef",
- (const char*)glyph_name ) != 0 )
- {
- if ( charcode < min_char )
- min_char = charcode;
- if ( charcode >= max_char )
- max_char = charcode + 1;
- }
- break;
- }
- }
- }
-
- type1->encoding.code_first = min_char;
- type1->encoding.code_last = max_char;
- type1->encoding.num_chars = loader.num_chars;
- }
-
- Exit:
- t42_loader_done( &loader );
- return error;
- }
-
-
- /***************** Driver Functions *************/
-
-
- FT_LOCAL_DEF( FT_Error )
- T42_Face_Init( FT_Stream stream,
- FT_Face t42face, /* T42_Face */
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- T42_Face face = (T42_Face)t42face;
- FT_Error error;
- FT_Service_PsCMaps psnames;
- PSAux_Service psaux;
- FT_Face root = (FT_Face)&face->root;
- T1_Font type1 = &face->type1;
- PS_FontInfo info = &type1->font_info;
-
- FT_UNUSED( num_params );
- FT_UNUSED( params );
- FT_UNUSED( stream );
-
-
- face->ttf_face = NULL;
- face->root.num_faces = 1;
-
- FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
- face->psnames = psnames;
-
- face->psaux = FT_Get_Module_Interface( FT_FACE_LIBRARY( face ),
- "psaux" );
- psaux = (PSAux_Service)face->psaux;
- if ( !psaux )
- {
- FT_ERROR(( "T42_Face_Init: cannot access `psaux' module\n" ));
- error = FT_THROW( Missing_Module );
- goto Exit;
- }
-
- FT_TRACE2(( "Type 42 driver\n" ));
-
- /* open the tokenizer, this will also check the font format */
- error = T42_Open_Face( face );
- if ( error )
- goto Exit;
-
- /* if we just wanted to check the format, leave successfully now */
- if ( face_index < 0 )
- goto Exit;
-
- /* check the face index */
- if ( ( face_index & 0xFFFF ) > 0 )
- {
- FT_ERROR(( "T42_Face_Init: invalid face index\n" ));
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- /* Now load the font program into the face object */
-
- /* Init the face object fields */
- /* Now set up root face fields */
-
- root->num_glyphs = type1->num_glyphs;
- root->num_charmaps = 0;
- root->face_index = 0;
-
- root->face_flags |= FT_FACE_FLAG_SCALABLE |
- FT_FACE_FLAG_HORIZONTAL |
- FT_FACE_FLAG_GLYPH_NAMES;
-
- if ( info->is_fixed_pitch )
- root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;
-
-#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
- root->face_flags |= FT_FACE_FLAG_HINTER;
-#endif
-
- /* XXX: TODO -- add kerning with .afm support */
-
- /* get style name -- be careful, some broken fonts only */
- /* have a `/FontName' dictionary entry! */
- root->family_name = info->family_name;
- /* assume "Regular" style if we don't know better */
- root->style_name = (char *)"Regular";
- if ( root->family_name )
- {
- char* full = info->full_name;
- char* family = root->family_name;
-
-
- if ( full )
- {
- while ( *full )
- {
- if ( *full == *family )
- {
- family++;
- full++;
- }
- else
- {
- if ( *full == ' ' || *full == '-' )
- full++;
- else if ( *family == ' ' || *family == '-' )
- family++;
- else
- {
- if ( !*family )
- root->style_name = full;
- break;
- }
- }
- }
- }
- }
- else
- {
- /* do we have a `/FontName'? */
- if ( type1->font_name )
- root->family_name = type1->font_name;
- }
-
- /* no embedded bitmap support */
- root->num_fixed_sizes = 0;
- root->available_sizes = NULL;
-
- /* Load the TTF font embedded in the T42 font */
- {
- FT_Open_Args args;
-
-
- args.flags = FT_OPEN_MEMORY | FT_OPEN_DRIVER;
- args.driver = FT_Get_Module( FT_FACE_LIBRARY( face ),
- "truetype" );
- args.memory_base = face->ttf_data;
- args.memory_size = face->ttf_size;
-
- if ( num_params )
- {
- args.flags |= FT_OPEN_PARAMS;
- args.num_params = num_params;
- args.params = params;
- }
-
- error = FT_Open_Face( FT_FACE_LIBRARY( face ),
- &args, 0, &face->ttf_face );
- }
-
- if ( error )
- goto Exit;
-
- FT_Done_Size( face->ttf_face->size );
-
- /* Ignore info in FontInfo dictionary and use the info from the */
- /* loaded TTF font. The PostScript interpreter also ignores it. */
- root->bbox = face->ttf_face->bbox;
- root->units_per_EM = face->ttf_face->units_per_EM;
-
- root->ascender = face->ttf_face->ascender;
- root->descender = face->ttf_face->descender;
- root->height = face->ttf_face->height;
-
- root->max_advance_width = face->ttf_face->max_advance_width;
- root->max_advance_height = face->ttf_face->max_advance_height;
-
- root->underline_position = (FT_Short)info->underline_position;
- root->underline_thickness = (FT_Short)info->underline_thickness;
-
- /* compute style flags */
- root->style_flags = 0;
- if ( info->italic_angle )
- root->style_flags |= FT_STYLE_FLAG_ITALIC;
-
- if ( face->ttf_face->style_flags & FT_STYLE_FLAG_BOLD )
- root->style_flags |= FT_STYLE_FLAG_BOLD;
-
- if ( face->ttf_face->face_flags & FT_FACE_FLAG_VERTICAL )
- root->face_flags |= FT_FACE_FLAG_VERTICAL;
-
- {
- if ( psnames )
- {
- FT_CharMapRec charmap;
- T1_CMap_Classes cmap_classes = psaux->t1_cmap_classes;
- FT_CMap_Class clazz;
-
-
- charmap.face = root;
-
- /* first of all, try to synthesize a Unicode charmap */
- charmap.platform_id = TT_PLATFORM_MICROSOFT;
- charmap.encoding_id = TT_MS_ID_UNICODE_CS;
- charmap.encoding = FT_ENCODING_UNICODE;
-
- error = FT_CMap_New( cmap_classes->unicode, NULL, &charmap, NULL );
- if ( error &&
- FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) )
- goto Exit;
- error = FT_Err_Ok;
-
- /* now, generate an Adobe Standard encoding when appropriate */
- charmap.platform_id = TT_PLATFORM_ADOBE;
- clazz = NULL;
-
- switch ( type1->encoding_type )
- {
- case T1_ENCODING_TYPE_STANDARD:
- charmap.encoding = FT_ENCODING_ADOBE_STANDARD;
- charmap.encoding_id = TT_ADOBE_ID_STANDARD;
- clazz = cmap_classes->standard;
- break;
-
- case T1_ENCODING_TYPE_EXPERT:
- charmap.encoding = FT_ENCODING_ADOBE_EXPERT;
- charmap.encoding_id = TT_ADOBE_ID_EXPERT;
- clazz = cmap_classes->expert;
- break;
-
- case T1_ENCODING_TYPE_ARRAY:
- charmap.encoding = FT_ENCODING_ADOBE_CUSTOM;
- charmap.encoding_id = TT_ADOBE_ID_CUSTOM;
- clazz = cmap_classes->custom;
- break;
-
- case T1_ENCODING_TYPE_ISOLATIN1:
- charmap.encoding = FT_ENCODING_ADOBE_LATIN_1;
- charmap.encoding_id = TT_ADOBE_ID_LATIN_1;
- clazz = cmap_classes->unicode;
- break;
-
- default:
- ;
- }
-
- if ( clazz )
- error = FT_CMap_New( clazz, NULL, &charmap, NULL );
- }
- }
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- T42_Face_Done( FT_Face t42face )
- {
- T42_Face face = (T42_Face)t42face;
- T1_Font type1;
- PS_FontInfo info;
- FT_Memory memory;
-
-
- if ( !face )
- return;
-
- type1 = &face->type1;
- info = &type1->font_info;
- memory = face->root.memory;
-
- /* delete internal ttf face prior to freeing face->ttf_data */
- if ( face->ttf_face )
- FT_Done_Face( face->ttf_face );
-
- /* release font info strings */
- FT_FREE( info->version );
- FT_FREE( info->notice );
- FT_FREE( info->full_name );
- FT_FREE( info->family_name );
- FT_FREE( info->weight );
-
- /* release top dictionary */
- FT_FREE( type1->charstrings_len );
- FT_FREE( type1->charstrings );
- FT_FREE( type1->glyph_names );
-
- FT_FREE( type1->charstrings_block );
- FT_FREE( type1->glyph_names_block );
-
- FT_FREE( type1->encoding.char_index );
- FT_FREE( type1->encoding.char_name );
- FT_FREE( type1->font_name );
-
- FT_FREE( face->ttf_data );
-
-#if 0
- /* release afm data if present */
- if ( face->afm_data )
- T1_Done_AFM( memory, (T1_AFM*)face->afm_data );
-#endif
-
- /* release unicode map, if any */
- FT_FREE( face->unicode_map.maps );
- face->unicode_map.num_maps = 0;
-
- face->root.family_name = NULL;
- face->root.style_name = NULL;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* T42_Driver_Init */
- /* */
- /* <Description> */
- /* Initializes a given Type 42 driver object. */
- /* */
- /* <Input> */
- /* driver :: A handle to the target driver object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- T42_Driver_Init( FT_Module module ) /* T42_Driver */
- {
- T42_Driver driver = (T42_Driver)module;
- FT_Module ttmodule;
-
-
- ttmodule = FT_Get_Module( module->library, "truetype" );
- if ( !ttmodule )
- {
- FT_ERROR(( "T42_Driver_Init: cannot access `truetype' module\n" ));
- return FT_THROW( Missing_Module );
- }
-
- driver->ttclazz = (FT_Driver_Class)ttmodule->clazz;
-
- return FT_Err_Ok;
- }
-
-
- FT_LOCAL_DEF( void )
- T42_Driver_Done( FT_Module module )
- {
- FT_UNUSED( module );
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T42_Size_Init( FT_Size size ) /* T42_Size */
- {
- T42_Size t42size = (T42_Size)size;
- FT_Face face = size->face;
- T42_Face t42face = (T42_Face)face;
- FT_Size ttsize;
- FT_Error error;
-
-
- error = FT_New_Size( t42face->ttf_face, &ttsize );
- t42size->ttsize = ttsize;
-
- FT_Activate_Size( ttsize );
-
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T42_Size_Request( FT_Size t42size, /* T42_Size */
- FT_Size_Request req )
- {
- T42_Size size = (T42_Size)t42size;
- T42_Face face = (T42_Face)t42size->face;
- FT_Error error;
-
-
- FT_Activate_Size( size->ttsize );
-
- error = FT_Request_Size( face->ttf_face, req );
- if ( !error )
- t42size->metrics = face->ttf_face->size->metrics;
-
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T42_Size_Select( FT_Size t42size, /* T42_Size */
- FT_ULong strike_index )
- {
- T42_Size size = (T42_Size)t42size;
- T42_Face face = (T42_Face)t42size->face;
- FT_Error error;
-
-
- FT_Activate_Size( size->ttsize );
-
- error = FT_Select_Size( face->ttf_face, (FT_Int)strike_index );
- if ( !error )
- t42size->metrics = face->ttf_face->size->metrics;
-
- return error;
-
- }
-
-
- FT_LOCAL_DEF( void )
- T42_Size_Done( FT_Size t42size ) /* T42_Size */
- {
- T42_Size size = (T42_Size)t42size;
- FT_Face face = t42size->face;
- T42_Face t42face = (T42_Face)face;
- FT_ListNode node;
-
-
- node = FT_List_Find( &t42face->ttf_face->sizes_list, size->ttsize );
- if ( node )
- {
- FT_Done_Size( size->ttsize );
- size->ttsize = NULL;
- }
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T42_GlyphSlot_Init( FT_GlyphSlot t42slot ) /* T42_GlyphSlot */
- {
- T42_GlyphSlot slot = (T42_GlyphSlot)t42slot;
- FT_Face face = t42slot->face;
- T42_Face t42face = (T42_Face)face;
- FT_GlyphSlot ttslot;
- FT_Error error = FT_Err_Ok;
-
-
- if ( !face->glyph )
- {
- /* First glyph slot for this face */
- slot->ttslot = t42face->ttf_face->glyph;
- }
- else
- {
- error = FT_New_GlyphSlot( t42face->ttf_face, &ttslot );
- slot->ttslot = ttslot;
- }
-
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- T42_GlyphSlot_Done( FT_GlyphSlot t42slot ) /* T42_GlyphSlot */
- {
- T42_GlyphSlot slot = (T42_GlyphSlot)t42slot;
-
-
- FT_Done_GlyphSlot( slot->ttslot );
- }
-
-
- static void
- t42_glyphslot_clear( FT_GlyphSlot slot )
- {
- /* free bitmap if needed */
- ft_glyphslot_free_bitmap( slot );
-
- /* clear all public fields in the glyph slot */
- FT_ZERO( &slot->metrics );
- FT_ZERO( &slot->outline );
- FT_ZERO( &slot->bitmap );
-
- slot->bitmap_left = 0;
- slot->bitmap_top = 0;
- slot->num_subglyphs = 0;
- slot->subglyphs = NULL;
- slot->control_data = NULL;
- slot->control_len = 0;
- slot->other = NULL;
- slot->format = FT_GLYPH_FORMAT_NONE;
-
- slot->linearHoriAdvance = 0;
- slot->linearVertAdvance = 0;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T42_GlyphSlot_Load( FT_GlyphSlot glyph,
- FT_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- FT_Error error;
- T42_GlyphSlot t42slot = (T42_GlyphSlot)glyph;
- T42_Size t42size = (T42_Size)size;
- T42_Face t42face = (T42_Face)size->face;
- FT_Driver_Class ttclazz = ((T42_Driver)glyph->face->driver)->ttclazz;
-
-
- FT_TRACE1(( "T42_GlyphSlot_Load: glyph index %d\n", glyph_index ));
-
- /* map T42 glyph index to embedded TTF's glyph index */
- glyph_index = (FT_UInt)ft_strtol(
- (const char *)t42face->type1.charstrings[glyph_index],
- NULL, 10 );
-
- t42_glyphslot_clear( t42slot->ttslot );
- error = ttclazz->load_glyph( t42slot->ttslot,
- t42size->ttsize,
- glyph_index,
- load_flags | FT_LOAD_NO_BITMAP );
-
- if ( !error )
- {
- glyph->metrics = t42slot->ttslot->metrics;
-
- glyph->linearHoriAdvance = t42slot->ttslot->linearHoriAdvance;
- glyph->linearVertAdvance = t42slot->ttslot->linearVertAdvance;
-
- glyph->format = t42slot->ttslot->format;
- glyph->outline = t42slot->ttslot->outline;
-
- glyph->bitmap = t42slot->ttslot->bitmap;
- glyph->bitmap_left = t42slot->ttslot->bitmap_left;
- glyph->bitmap_top = t42slot->ttslot->bitmap_top;
-
- glyph->num_subglyphs = t42slot->ttslot->num_subglyphs;
- glyph->subglyphs = t42slot->ttslot->subglyphs;
-
- glyph->control_data = t42slot->ttslot->control_data;
- glyph->control_len = t42slot->ttslot->control_len;
- }
-
- return error;
- }
-
-
-/* END */
diff --git a/src/type42/t42objs.h b/src/type42/t42objs.h
deleted file mode 100644
index eb4c5bf69..000000000
--- a/src/type42/t42objs.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42objs.h */
-/* */
-/* Type 42 objects manager (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* Roberto Alameda. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef T42OBJS_H_
-#define T42OBJS_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TYPE1_TABLES_H
-#include FT_INTERNAL_TYPE1_TYPES_H
-#include "t42types.h"
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DRIVER_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-
-
-FT_BEGIN_HEADER
-
-
- /* Type42 size */
- typedef struct T42_SizeRec_
- {
- FT_SizeRec root;
- FT_Size ttsize;
-
- } T42_SizeRec, *T42_Size;
-
-
- /* Type42 slot */
- typedef struct T42_GlyphSlotRec_
- {
- FT_GlyphSlotRec root;
- FT_GlyphSlot ttslot;
-
- } T42_GlyphSlotRec, *T42_GlyphSlot;
-
-
- /* Type 42 driver */
- typedef struct T42_DriverRec_
- {
- FT_DriverRec root;
- FT_Driver_Class ttclazz;
-
- } T42_DriverRec, *T42_Driver;
-
-
- /* */
-
-
- FT_LOCAL( FT_Error )
- T42_Face_Init( FT_Stream stream,
- FT_Face face,
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params );
-
-
- FT_LOCAL( void )
- T42_Face_Done( FT_Face face );
-
-
- FT_LOCAL( FT_Error )
- T42_Size_Init( FT_Size size );
-
-
- FT_LOCAL( FT_Error )
- T42_Size_Request( FT_Size size,
- FT_Size_Request req );
-
-
- FT_LOCAL( FT_Error )
- T42_Size_Select( FT_Size size,
- FT_ULong strike_index );
-
-
- FT_LOCAL( void )
- T42_Size_Done( FT_Size size );
-
-
- FT_LOCAL( FT_Error )
- T42_GlyphSlot_Init( FT_GlyphSlot slot );
-
-
- FT_LOCAL( FT_Error )
- T42_GlyphSlot_Load( FT_GlyphSlot glyph,
- FT_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags );
-
- FT_LOCAL( void )
- T42_GlyphSlot_Done( FT_GlyphSlot slot );
-
-
- FT_LOCAL( FT_Error )
- T42_Driver_Init( FT_Module module );
-
- FT_LOCAL( void )
- T42_Driver_Done( FT_Module module );
-
- /* */
-
-FT_END_HEADER
-
-
-#endif /* T42OBJS_H_ */
-
-
-/* END */
diff --git a/src/type42/t42parse.c b/src/type42/t42parse.c
deleted file mode 100644
index e7c6770bd..000000000
--- a/src/type42/t42parse.c
+++ /dev/null
@@ -1,1299 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42parse.c */
-/* */
-/* Type 42 font parser (body). */
-/* */
-/* Copyright 2002-2017 by */
-/* Roberto Alameda. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include "t42parse.h"
-#include "t42error.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_t42
-
-
- static void
- t42_parse_font_matrix( T42_Face face,
- T42_Loader loader );
- static void
- t42_parse_encoding( T42_Face face,
- T42_Loader loader );
-
- static void
- t42_parse_charstrings( T42_Face face,
- T42_Loader loader );
-
- static void
- t42_parse_sfnts( T42_Face face,
- T42_Loader loader );
-
-
- /* as Type42 fonts have no Private dict, */
- /* we set the last argument of T1_FIELD_XXX to 0 */
- static const
- T1_FieldRec t42_keywords[] =
- {
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE T1_FontInfo
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_FONT_INFO
-
- T1_FIELD_STRING( "version", version, 0 )
- T1_FIELD_STRING( "Notice", notice, 0 )
- T1_FIELD_STRING( "FullName", full_name, 0 )
- T1_FIELD_STRING( "FamilyName", family_name, 0 )
- T1_FIELD_STRING( "Weight", weight, 0 )
- T1_FIELD_NUM ( "ItalicAngle", italic_angle, 0 )
- T1_FIELD_BOOL ( "isFixedPitch", is_fixed_pitch, 0 )
- T1_FIELD_NUM ( "UnderlinePosition", underline_position, 0 )
- T1_FIELD_NUM ( "UnderlineThickness", underline_thickness, 0 )
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE PS_FontExtraRec
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_FONT_EXTRA
-
- T1_FIELD_NUM ( "FSType", fs_type, 0 )
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE T1_FontRec
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_FONT_DICT
-
- T1_FIELD_KEY ( "FontName", font_name, 0 )
- T1_FIELD_NUM ( "PaintType", paint_type, 0 )
- T1_FIELD_NUM ( "FontType", font_type, 0 )
- T1_FIELD_FIXED( "StrokeWidth", stroke_width, 0 )
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE FT_BBox
-#undef T1CODE
-#define T1CODE T1_FIELD_LOCATION_BBOX
-
- T1_FIELD_BBOX("FontBBox", xMin, 0 )
-
- T1_FIELD_CALLBACK( "FontMatrix", t42_parse_font_matrix, 0 )
- T1_FIELD_CALLBACK( "Encoding", t42_parse_encoding, 0 )
- T1_FIELD_CALLBACK( "CharStrings", t42_parse_charstrings, 0 )
- T1_FIELD_CALLBACK( "sfnts", t42_parse_sfnts, 0 )
-
- { 0, T1_FIELD_LOCATION_CID_INFO, T1_FIELD_TYPE_NONE, 0, 0, 0, 0, 0, 0 }
- };
-
-
-#define T1_Add_Table( p, i, o, l ) (p)->funcs.add( (p), i, o, l )
-#define T1_Release_Table( p ) \
- do \
- { \
- if ( (p)->funcs.release ) \
- (p)->funcs.release( p ); \
- } while ( 0 )
-
-#define T1_Skip_Spaces( p ) (p)->root.funcs.skip_spaces( &(p)->root )
-#define T1_Skip_PS_Token( p ) (p)->root.funcs.skip_PS_token( &(p)->root )
-
-#define T1_ToInt( p ) \
- (p)->root.funcs.to_int( &(p)->root )
-#define T1_ToBytes( p, b, m, n, d ) \
- (p)->root.funcs.to_bytes( &(p)->root, b, m, n, d )
-
-#define T1_ToFixedArray( p, m, f, t ) \
- (p)->root.funcs.to_fixed_array( &(p)->root, m, f, t )
-#define T1_ToToken( p, t ) \
- (p)->root.funcs.to_token( &(p)->root, t )
-
-#define T1_Load_Field( p, f, o, m, pf ) \
- (p)->root.funcs.load_field( &(p)->root, f, o, m, pf )
-#define T1_Load_Field_Table( p, f, o, m, pf ) \
- (p)->root.funcs.load_field_table( &(p)->root, f, o, m, pf )
-
-
- /********************* Parsing Functions ******************/
-
- FT_LOCAL_DEF( FT_Error )
- t42_parser_init( T42_Parser parser,
- FT_Stream stream,
- FT_Memory memory,
- PSAux_Service psaux )
- {
- FT_Error error = FT_Err_Ok;
- FT_Long size;
-
-
- psaux->ps_parser_funcs->init( &parser->root, NULL, NULL, memory );
-
- parser->stream = stream;
- parser->base_len = 0;
- parser->base_dict = NULL;
- parser->in_memory = 0;
-
- /*******************************************************************/
- /* */
- /* Here a short summary of what is going on: */
- /* */
- /* When creating a new Type 42 parser, we try to locate and load */
- /* the base dictionary, loading the whole font into memory. */
- /* */
- /* When `loading' the base dictionary, we only set up pointers */
- /* in the case of a memory-based stream. Otherwise, we allocate */
- /* and load the base dictionary in it. */
- /* */
- /* parser->in_memory is set if we have a memory stream. */
- /* */
-
- if ( FT_STREAM_SEEK( 0L ) ||
- FT_FRAME_ENTER( 17 ) )
- goto Exit;
-
- if ( ft_memcmp( stream->cursor, "%!PS-TrueTypeFont", 17 ) != 0 )
- {
- FT_TRACE2(( " not a Type42 font\n" ));
- error = FT_THROW( Unknown_File_Format );
- }
-
- FT_FRAME_EXIT();
-
- if ( error || FT_STREAM_SEEK( 0 ) )
- goto Exit;
-
- size = (FT_Long)stream->size;
-
- /* now, try to load `size' bytes of the `base' dictionary we */
- /* found previously */
-
- /* if it is a memory-based resource, set up pointers */
- if ( !stream->read )
- {
- parser->base_dict = (FT_Byte*)stream->base + stream->pos;
- parser->base_len = size;
- parser->in_memory = 1;
-
- /* check that the `size' field is valid */
- if ( FT_STREAM_SKIP( size ) )
- goto Exit;
- }
- else
- {
- /* read segment in memory */
- if ( FT_ALLOC( parser->base_dict, size ) ||
- FT_STREAM_READ( parser->base_dict, size ) )
- goto Exit;
-
- parser->base_len = size;
- }
-
- parser->root.base = parser->base_dict;
- parser->root.cursor = parser->base_dict;
- parser->root.limit = parser->root.cursor + parser->base_len;
-
- Exit:
- if ( error && !parser->in_memory )
- FT_FREE( parser->base_dict );
-
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- t42_parser_done( T42_Parser parser )
- {
- FT_Memory memory = parser->root.memory;
-
-
- /* free the base dictionary only when we have a disk stream */
- if ( !parser->in_memory )
- FT_FREE( parser->base_dict );
-
- parser->root.funcs.done( &parser->root );
- }
-
-
- static int
- t42_is_space( FT_Byte c )
- {
- return ( c == ' ' || c == '\t' ||
- c == '\r' || c == '\n' || c == '\f' ||
- c == '\0' );
- }
-
-
- static void
- t42_parse_font_matrix( T42_Face face,
- T42_Loader loader )
- {
- T42_Parser parser = &loader->parser;
- FT_Matrix* matrix = &face->type1.font_matrix;
- FT_Vector* offset = &face->type1.font_offset;
- FT_Fixed temp[6];
- FT_Fixed temp_scale;
- FT_Int result;
-
-
- result = T1_ToFixedArray( parser, 6, temp, 0 );
-
- if ( result < 6 )
- {
- parser->root.error = FT_THROW( Invalid_File_Format );
- return;
- }
-
- temp_scale = FT_ABS( temp[3] );
-
- if ( temp_scale == 0 )
- {
- FT_ERROR(( "t42_parse_font_matrix: invalid font matrix\n" ));
- parser->root.error = FT_THROW( Invalid_File_Format );
- return;
- }
-
- /* atypical case */
- if ( temp_scale != 0x10000L )
- {
- temp[0] = FT_DivFix( temp[0], temp_scale );
- temp[1] = FT_DivFix( temp[1], temp_scale );
- temp[2] = FT_DivFix( temp[2], temp_scale );
- temp[4] = FT_DivFix( temp[4], temp_scale );
- temp[5] = FT_DivFix( temp[5], temp_scale );
- temp[3] = temp[3] < 0 ? -0x10000L : 0x10000L;
- }
-
- matrix->xx = temp[0];
- matrix->yx = temp[1];
- matrix->xy = temp[2];
- matrix->yy = temp[3];
-
- /* note that the offsets must be expressed in integer font units */
- offset->x = temp[4] >> 16;
- offset->y = temp[5] >> 16;
- }
-
-
- static void
- t42_parse_encoding( T42_Face face,
- T42_Loader loader )
- {
- T42_Parser parser = &loader->parser;
- FT_Byte* cur;
- FT_Byte* limit = parser->root.limit;
-
- PSAux_Service psaux = (PSAux_Service)face->psaux;
-
-
- T1_Skip_Spaces( parser );
- cur = parser->root.cursor;
- if ( cur >= limit )
- {
- FT_ERROR(( "t42_parse_encoding: out of bounds\n" ));
- parser->root.error = FT_THROW( Invalid_File_Format );
- return;
- }
-
- /* if we have a number or `[', the encoding is an array, */
- /* and we must load it now */
- if ( ft_isdigit( *cur ) || *cur == '[' )
- {
- T1_Encoding encode = &face->type1.encoding;
- FT_Int count, n;
- PS_Table char_table = &loader->encoding_table;
- FT_Memory memory = parser->root.memory;
- FT_Error error;
- FT_Bool only_immediates = 0;
-
-
- /* read the number of entries in the encoding; should be 256 */
- if ( *cur == '[' )
- {
- count = 256;
- only_immediates = 1;
- parser->root.cursor++;
- }
- else
- count = (FT_Int)T1_ToInt( parser );
-
- /* only composite fonts (which we don't support) */
- /* can have larger values */
- if ( count > 256 )
- {
- FT_ERROR(( "t42_parse_encoding: invalid encoding array size\n" ));
- parser->root.error = FT_THROW( Invalid_File_Format );
- return;
- }
-
- T1_Skip_Spaces( parser );
- if ( parser->root.cursor >= limit )
- return;
-
- /* PostScript happily allows overwriting of encoding arrays */
- if ( encode->char_index )
- {
- FT_FREE( encode->char_index );
- FT_FREE( encode->char_name );
- T1_Release_Table( char_table );
- }
-
- /* we use a T1_Table to store our charnames */
- loader->num_chars = encode->num_chars = count;
- if ( FT_NEW_ARRAY( encode->char_index, count ) ||
- FT_NEW_ARRAY( encode->char_name, count ) ||
- FT_SET_ERROR( psaux->ps_table_funcs->init(
- char_table, count, memory ) ) )
- {
- parser->root.error = error;
- return;
- }
-
- /* We need to `zero' out encoding_table.elements */
- for ( n = 0; n < count; n++ )
- {
- char* notdef = (char *)".notdef";
-
-
- (void)T1_Add_Table( char_table, n, notdef, 8 );
- }
-
- /* Now we need to read records of the form */
- /* */
- /* ... charcode /charname ... */
- /* */
- /* for each entry in our table. */
- /* */
- /* We simply look for a number followed by an immediate */
- /* name. Note that this ignores correctly the sequence */
- /* that is often seen in type42 fonts: */
- /* */
- /* 0 1 255 { 1 index exch /.notdef put } for dup */
- /* */
- /* used to clean the encoding array before anything else. */
- /* */
- /* Alternatively, if the array is directly given as */
- /* */
- /* /Encoding [ ... ] */
- /* */
- /* we only read immediates. */
-
- n = 0;
- T1_Skip_Spaces( parser );
-
- while ( parser->root.cursor < limit )
- {
- cur = parser->root.cursor;
-
- /* we stop when we encounter `def' or `]' */
- if ( *cur == 'd' && cur + 3 < limit )
- {
- if ( cur[1] == 'e' &&
- cur[2] == 'f' &&
- t42_is_space( cur[3] ) )
- {
- FT_TRACE6(( "encoding end\n" ));
- cur += 3;
- break;
- }
- }
- if ( *cur == ']' )
- {
- FT_TRACE6(( "encoding end\n" ));
- cur++;
- break;
- }
-
- /* check whether we have found an entry */
- if ( ft_isdigit( *cur ) || only_immediates )
- {
- FT_Int charcode;
-
-
- if ( only_immediates )
- charcode = n;
- else
- {
- charcode = (FT_Int)T1_ToInt( parser );
- T1_Skip_Spaces( parser );
-
- /* protect against invalid charcode */
- if ( cur == parser->root.cursor )
- {
- parser->root.error = FT_THROW( Unknown_File_Format );
- return;
- }
- }
-
- cur = parser->root.cursor;
-
- if ( cur + 2 < limit && *cur == '/' && n < count )
- {
- FT_UInt len;
-
-
- cur++;
-
- parser->root.cursor = cur;
- T1_Skip_PS_Token( parser );
- if ( parser->root.cursor >= limit )
- return;
- if ( parser->root.error )
- return;
-
- len = (FT_UInt)( parser->root.cursor - cur );
-
- parser->root.error = T1_Add_Table( char_table, charcode,
- cur, len + 1 );
- if ( parser->root.error )
- return;
- char_table->elements[charcode][len] = '\0';
-
- n++;
- }
- else if ( only_immediates )
- {
- /* Since the current position is not updated for */
- /* immediates-only mode we would get an infinite loop if */
- /* we don't do anything here. */
- /* */
- /* This encoding array is not valid according to the */
- /* type42 specification (it might be an encoding for a CID */
- /* type42 font, however), so we conclude that this font is */
- /* NOT a type42 font. */
- parser->root.error = FT_THROW( Unknown_File_Format );
- return;
- }
- }
- else
- {
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- return;
- }
-
- T1_Skip_Spaces( parser );
- }
-
- face->type1.encoding_type = T1_ENCODING_TYPE_ARRAY;
- parser->root.cursor = cur;
- }
-
- /* Otherwise, we should have either `StandardEncoding', */
- /* `ExpertEncoding', or `ISOLatin1Encoding' */
- else
- {
- if ( cur + 17 < limit &&
- ft_strncmp( (const char*)cur, "StandardEncoding", 16 ) == 0 )
- face->type1.encoding_type = T1_ENCODING_TYPE_STANDARD;
-
- else if ( cur + 15 < limit &&
- ft_strncmp( (const char*)cur, "ExpertEncoding", 14 ) == 0 )
- face->type1.encoding_type = T1_ENCODING_TYPE_EXPERT;
-
- else if ( cur + 18 < limit &&
- ft_strncmp( (const char*)cur, "ISOLatin1Encoding", 17 ) == 0 )
- face->type1.encoding_type = T1_ENCODING_TYPE_ISOLATIN1;
-
- else
- parser->root.error = FT_ERR( Ignore );
- }
- }
-
-
- typedef enum T42_Load_Status_
- {
- BEFORE_START,
- BEFORE_TABLE_DIR,
- OTHER_TABLES
-
- } T42_Load_Status;
-
-
- static void
- t42_parse_sfnts( T42_Face face,
- T42_Loader loader )
- {
- T42_Parser parser = &loader->parser;
- FT_Memory memory = parser->root.memory;
- FT_Byte* cur;
- FT_Byte* limit = parser->root.limit;
- FT_Error error;
- FT_Int num_tables = 0;
- FT_Long count;
-
- FT_ULong n, string_size, old_string_size, real_size;
- FT_Byte* string_buf = NULL;
- FT_Bool allocated = 0;
-
- T42_Load_Status status;
-
-
- /* The format is */
- /* */
- /* /sfnts [ <hexstring> <hexstring> ... ] def */
- /* */
- /* or */
- /* */
- /* /sfnts [ */
- /* <num_bin_bytes> RD <binary data> */
- /* <num_bin_bytes> RD <binary data> */
- /* ... */
- /* ] def */
- /* */
- /* with exactly one space after the `RD' token. */
-
- T1_Skip_Spaces( parser );
-
- if ( parser->root.cursor >= limit || *parser->root.cursor++ != '[' )
- {
- FT_ERROR(( "t42_parse_sfnts: can't find begin of sfnts vector\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- T1_Skip_Spaces( parser );
- status = BEFORE_START;
- string_size = 0;
- old_string_size = 0;
- count = 0;
-
- while ( parser->root.cursor < limit )
- {
- FT_ULong size;
-
-
- cur = parser->root.cursor;
-
- if ( *cur == ']' )
- {
- parser->root.cursor++;
- goto Exit;
- }
-
- else if ( *cur == '<' )
- {
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- goto Exit;
-
- /* don't include delimiters */
- string_size = (FT_ULong)( ( parser->root.cursor - cur - 2 + 1 ) / 2 );
- if ( !string_size )
- {
- FT_ERROR(( "t42_parse_sfnts: invalid data in sfnts array\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
- if ( FT_REALLOC( string_buf, old_string_size, string_size ) )
- goto Fail;
-
- allocated = 1;
-
- parser->root.cursor = cur;
- (void)T1_ToBytes( parser, string_buf, string_size, &real_size, 1 );
- old_string_size = string_size;
- string_size = real_size;
- }
-
- else if ( ft_isdigit( *cur ) )
- {
- FT_Long tmp;
-
-
- if ( allocated )
- {
- FT_ERROR(( "t42_parse_sfnts: "
- "can't handle mixed binary and hex strings\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- tmp = T1_ToInt( parser );
- if ( tmp < 0 )
- {
- FT_ERROR(( "t42_parse_sfnts: invalid string size\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
- else
- string_size = (FT_ULong)tmp;
-
- T1_Skip_PS_Token( parser ); /* `RD' */
- if ( parser->root.error )
- return;
-
- string_buf = parser->root.cursor + 1; /* one space after `RD' */
-
- if ( (FT_ULong)( limit - parser->root.cursor ) <= string_size )
- {
- FT_ERROR(( "t42_parse_sfnts: too much binary data\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
- else
- parser->root.cursor += string_size + 1;
- }
-
- if ( !string_buf )
- {
- FT_ERROR(( "t42_parse_sfnts: invalid data in sfnts array\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- /* A string can have a trailing zero (odd) byte for padding. */
- /* Ignore it. */
- if ( ( string_size & 1 ) && string_buf[string_size - 1] == 0 )
- string_size--;
-
- if ( !string_size )
- {
- FT_ERROR(( "t42_parse_sfnts: invalid string\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- /* The whole TTF is now loaded into `string_buf'. We are */
- /* checking its contents while copying it to `ttf_data'. */
-
- size = (FT_ULong)( limit - parser->root.cursor );
-
- for ( n = 0; n < string_size; n++ )
- {
- switch ( status )
- {
- case BEFORE_START:
- /* load offset table, 12 bytes */
- if ( count < 12 )
- {
- face->ttf_data[count++] = string_buf[n];
- continue;
- }
- else
- {
- num_tables = 16 * face->ttf_data[4] + face->ttf_data[5];
- status = BEFORE_TABLE_DIR;
- face->ttf_size = 12 + 16 * num_tables;
-
- if ( (FT_Long)size < face->ttf_size )
- {
- FT_ERROR(( "t42_parse_sfnts: invalid data in sfnts array\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- if ( FT_REALLOC( face->ttf_data, 12, face->ttf_size ) )
- goto Fail;
- }
- /* fall through */
-
- case BEFORE_TABLE_DIR:
- /* the offset table is read; read the table directory */
- if ( count < face->ttf_size )
- {
- face->ttf_data[count++] = string_buf[n];
- continue;
- }
- else
- {
- int i;
- FT_ULong len;
-
-
- for ( i = 0; i < num_tables; i++ )
- {
- FT_Byte* p = face->ttf_data + 12 + 16 * i + 12;
-
-
- len = FT_PEEK_ULONG( p );
- if ( len > size ||
- face->ttf_size > (FT_Long)( size - len ) )
- {
- FT_ERROR(( "t42_parse_sfnts:"
- " invalid data in sfnts array\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- /* Pad to a 4-byte boundary length */
- face->ttf_size += (FT_Long)( ( len + 3 ) & ~3U );
- }
-
- status = OTHER_TABLES;
-
- if ( FT_REALLOC( face->ttf_data, 12 + 16 * num_tables,
- face->ttf_size + 1 ) )
- goto Fail;
- }
- /* fall through */
-
- case OTHER_TABLES:
- /* all other tables are just copied */
- if ( count >= face->ttf_size )
- {
- FT_ERROR(( "t42_parse_sfnts: too much binary data\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
- face->ttf_data[count++] = string_buf[n];
- }
- }
-
- T1_Skip_Spaces( parser );
- }
-
- /* if control reaches this point, the format was not valid */
- error = FT_THROW( Invalid_File_Format );
-
- Fail:
- parser->root.error = error;
-
- Exit:
- if ( allocated )
- FT_FREE( string_buf );
- }
-
-
- static void
- t42_parse_charstrings( T42_Face face,
- T42_Loader loader )
- {
- T42_Parser parser = &loader->parser;
- PS_Table code_table = &loader->charstrings;
- PS_Table name_table = &loader->glyph_names;
- PS_Table swap_table = &loader->swap_table;
- FT_Memory memory = parser->root.memory;
- FT_Error error;
-
- PSAux_Service psaux = (PSAux_Service)face->psaux;
-
- FT_Byte* cur;
- FT_Byte* limit = parser->root.limit;
- FT_Int n;
- FT_Int notdef_index = 0;
- FT_Byte notdef_found = 0;
-
-
- T1_Skip_Spaces( parser );
-
- if ( parser->root.cursor >= limit )
- {
- FT_ERROR(( "t42_parse_charstrings: out of bounds\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- if ( ft_isdigit( *parser->root.cursor ) )
- {
- loader->num_glyphs = T1_ToInt( parser );
- if ( parser->root.error )
- return;
- if ( loader->num_glyphs < 0 )
- {
- FT_ERROR(( "t42_parse_encoding: invalid number of glyphs\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- /* we certainly need more than 4 bytes per glyph */
- if ( loader->num_glyphs > ( limit - parser->root.cursor ) >> 2 )
- {
- FT_TRACE0(( "t42_parse_charstrings: adjusting number of glyphs"
- " (from %d to %d)\n",
- loader->num_glyphs,
- ( limit - parser->root.cursor ) >> 2 ));
- loader->num_glyphs = ( limit - parser->root.cursor ) >> 2;
- }
-
- }
- else if ( *parser->root.cursor == '<' )
- {
- /* We have `<< ... >>'. Count the number of `/' in the dictionary */
- /* to get its size. */
- FT_Int count = 0;
-
-
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- return;
- T1_Skip_Spaces( parser );
- cur = parser->root.cursor;
-
- while ( parser->root.cursor < limit )
- {
- if ( *parser->root.cursor == '/' )
- count++;
- else if ( *parser->root.cursor == '>' )
- {
- loader->num_glyphs = count;
- parser->root.cursor = cur; /* rewind */
- break;
- }
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- return;
- T1_Skip_Spaces( parser );
- }
- }
- else
- {
- FT_ERROR(( "t42_parse_charstrings: invalid token\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- if ( parser->root.cursor >= limit )
- {
- FT_ERROR(( "t42_parse_charstrings: out of bounds\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- /* initialize tables */
-
- /* contrary to Type1, we disallow multiple CharStrings arrays */
- if ( swap_table->init )
- {
- FT_ERROR(( "t42_parse_charstrings:"
- " only one CharStrings array allowed\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- error = psaux->ps_table_funcs->init( code_table,
- loader->num_glyphs,
- memory );
- if ( error )
- goto Fail;
-
- error = psaux->ps_table_funcs->init( name_table,
- loader->num_glyphs,
- memory );
- if ( error )
- goto Fail;
-
- /* Initialize table for swapping index notdef_index and */
- /* index 0 names and codes (if necessary). */
-
- error = psaux->ps_table_funcs->init( swap_table, 4, memory );
- if ( error )
- goto Fail;
-
- n = 0;
-
- for (;;)
- {
- /* We support two formats. */
- /* */
- /* `/glyphname' + index [+ `def'] */
- /* `(glyphname)' [+ `cvn'] + index [+ `def'] */
- /* */
- /* The latter format gets created by the */
- /* LilyPond typesetting program. */
-
- T1_Skip_Spaces( parser );
-
- cur = parser->root.cursor;
- if ( cur >= limit )
- break;
-
- /* We stop when we find an `end' keyword or '>' */
- if ( *cur == 'e' &&
- cur + 3 < limit &&
- cur[1] == 'n' &&
- cur[2] == 'd' &&
- t42_is_space( cur[3] ) )
- break;
- if ( *cur == '>' )
- break;
-
- T1_Skip_PS_Token( parser );
- if ( parser->root.cursor >= limit )
- {
- FT_ERROR(( "t42_parse_charstrings: out of bounds\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
- if ( parser->root.error )
- return;
-
- if ( *cur == '/' || *cur == '(' )
- {
- FT_UInt len;
- FT_Bool have_literal = FT_BOOL( *cur == '(' );
-
-
- if ( cur + ( have_literal ? 3 : 2 ) >= limit )
- {
- FT_ERROR(( "t42_parse_charstrings: out of bounds\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- cur++; /* skip `/' */
- len = (FT_UInt)( parser->root.cursor - cur );
- if ( have_literal )
- len--;
-
- error = T1_Add_Table( name_table, n, cur, len + 1 );
- if ( error )
- goto Fail;
-
- /* add a trailing zero to the name table */
- name_table->elements[n][len] = '\0';
-
- /* record index of /.notdef */
- if ( *cur == '.' &&
- ft_strcmp( ".notdef",
- (const char*)(name_table->elements[n]) ) == 0 )
- {
- notdef_index = n;
- notdef_found = 1;
- }
-
- T1_Skip_Spaces( parser );
-
- if ( have_literal )
- T1_Skip_PS_Token( parser );
-
- cur = parser->root.cursor;
-
- (void)T1_ToInt( parser );
- if ( parser->root.cursor >= limit )
- {
- FT_ERROR(( "t42_parse_charstrings: out of bounds\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- len = (FT_UInt)( parser->root.cursor - cur );
-
- error = T1_Add_Table( code_table, n, cur, len + 1 );
- if ( error )
- goto Fail;
-
- code_table->elements[n][len] = '\0';
-
- n++;
- if ( n >= loader->num_glyphs )
- break;
- }
- }
-
- loader->num_glyphs = n;
-
- if ( !notdef_found )
- {
- FT_ERROR(( "t42_parse_charstrings: no /.notdef glyph\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- /* if /.notdef does not occupy index 0, do our magic. */
- if ( ft_strcmp( (const char*)".notdef",
- (const char*)name_table->elements[0] ) )
- {
- /* Swap glyph in index 0 with /.notdef glyph. First, add index 0 */
- /* name and code entries to swap_table. Then place notdef_index */
- /* name and code entries into swap_table. Then swap name and code */
- /* entries at indices notdef_index and 0 using values stored in */
- /* swap_table. */
-
- /* Index 0 name */
- error = T1_Add_Table( swap_table, 0,
- name_table->elements[0],
- name_table->lengths [0] );
- if ( error )
- goto Fail;
-
- /* Index 0 code */
- error = T1_Add_Table( swap_table, 1,
- code_table->elements[0],
- code_table->lengths [0] );
- if ( error )
- goto Fail;
-
- /* Index notdef_index name */
- error = T1_Add_Table( swap_table, 2,
- name_table->elements[notdef_index],
- name_table->lengths [notdef_index] );
- if ( error )
- goto Fail;
-
- /* Index notdef_index code */
- error = T1_Add_Table( swap_table, 3,
- code_table->elements[notdef_index],
- code_table->lengths [notdef_index] );
- if ( error )
- goto Fail;
-
- error = T1_Add_Table( name_table, notdef_index,
- swap_table->elements[0],
- swap_table->lengths [0] );
- if ( error )
- goto Fail;
-
- error = T1_Add_Table( code_table, notdef_index,
- swap_table->elements[1],
- swap_table->lengths [1] );
- if ( error )
- goto Fail;
-
- error = T1_Add_Table( name_table, 0,
- swap_table->elements[2],
- swap_table->lengths [2] );
- if ( error )
- goto Fail;
-
- error = T1_Add_Table( code_table, 0,
- swap_table->elements[3],
- swap_table->lengths [3] );
- if ( error )
- goto Fail;
-
- }
-
- return;
-
- Fail:
- parser->root.error = error;
- }
-
-
- static FT_Error
- t42_load_keyword( T42_Face face,
- T42_Loader loader,
- T1_Field field )
- {
- FT_Error error;
- void* dummy_object;
- void** objects;
- FT_UInt max_objects = 0;
-
-
- /* if the keyword has a dedicated callback, call it */
- if ( field->type == T1_FIELD_TYPE_CALLBACK )
- {
- field->reader( (FT_Face)face, loader );
- error = loader->parser.root.error;
- goto Exit;
- }
-
- /* now the keyword is either a simple field or a table of fields; */
- /* we are now going to take care of it */
-
- switch ( field->location )
- {
- case T1_FIELD_LOCATION_FONT_INFO:
- dummy_object = &face->type1.font_info;
- break;
-
- case T1_FIELD_LOCATION_FONT_EXTRA:
- dummy_object = &face->type1.font_extra;
- break;
-
- case T1_FIELD_LOCATION_BBOX:
- dummy_object = &face->type1.font_bbox;
- break;
-
- default:
- dummy_object = &face->type1;
- }
-
- objects = &dummy_object;
-
- if ( field->type == T1_FIELD_TYPE_INTEGER_ARRAY ||
- field->type == T1_FIELD_TYPE_FIXED_ARRAY )
- error = T1_Load_Field_Table( &loader->parser, field,
- objects, max_objects, 0 );
- else
- error = T1_Load_Field( &loader->parser, field,
- objects, max_objects, 0 );
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- t42_parse_dict( T42_Face face,
- T42_Loader loader,
- FT_Byte* base,
- FT_Long size )
- {
- T42_Parser parser = &loader->parser;
- FT_Byte* limit;
- FT_Int n_keywords = (FT_Int)( sizeof ( t42_keywords ) /
- sizeof ( t42_keywords[0] ) );
-
-
- parser->root.cursor = base;
- parser->root.limit = base + size;
- parser->root.error = FT_Err_Ok;
-
- limit = parser->root.limit;
-
- T1_Skip_Spaces( parser );
-
- while ( parser->root.cursor < limit )
- {
- FT_Byte* cur;
-
-
- cur = parser->root.cursor;
-
- /* look for `FontDirectory' which causes problems for some fonts */
- if ( *cur == 'F' && cur + 25 < limit &&
- ft_strncmp( (char*)cur, "FontDirectory", 13 ) == 0 )
- {
- FT_Byte* cur2;
-
-
- /* skip the `FontDirectory' keyword */
- T1_Skip_PS_Token( parser );
- T1_Skip_Spaces ( parser );
- cur = cur2 = parser->root.cursor;
-
- /* look up the `known' keyword */
- while ( cur < limit )
- {
- if ( *cur == 'k' && cur + 5 < limit &&
- ft_strncmp( (char*)cur, "known", 5 ) == 0 )
- break;
-
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- goto Exit;
- T1_Skip_Spaces ( parser );
- cur = parser->root.cursor;
- }
-
- if ( cur < limit )
- {
- T1_TokenRec token;
-
-
- /* skip the `known' keyword and the token following it */
- T1_Skip_PS_Token( parser );
- T1_ToToken( parser, &token );
-
- /* if the last token was an array, skip it! */
- if ( token.type == T1_TOKEN_TYPE_ARRAY )
- cur2 = parser->root.cursor;
- }
- parser->root.cursor = cur2;
- }
-
- /* look for immediates */
- else if ( *cur == '/' && cur + 2 < limit )
- {
- FT_UInt len;
-
-
- cur++;
-
- parser->root.cursor = cur;
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- goto Exit;
-
- len = (FT_UInt)( parser->root.cursor - cur );
-
- if ( len > 0 && len < 22 && parser->root.cursor < limit )
- {
- int i;
-
-
- /* now compare the immediate name to the keyword table */
-
- /* loop through all known keywords */
- for ( i = 0; i < n_keywords; i++ )
- {
- T1_Field keyword = (T1_Field)&t42_keywords[i];
- FT_Byte *name = (FT_Byte*)keyword->ident;
-
-
- if ( !name )
- continue;
-
- if ( cur[0] == name[0] &&
- len == ft_strlen( (const char *)name ) &&
- ft_memcmp( cur, name, len ) == 0 )
- {
- /* we found it -- run the parsing callback! */
- parser->root.error = t42_load_keyword( face,
- loader,
- keyword );
- if ( parser->root.error )
- return parser->root.error;
- break;
- }
- }
- }
- }
- else
- {
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- goto Exit;
- }
-
- T1_Skip_Spaces( parser );
- }
-
- Exit:
- return parser->root.error;
- }
-
-
- FT_LOCAL_DEF( void )
- t42_loader_init( T42_Loader loader,
- T42_Face face )
- {
- FT_UNUSED( face );
-
- FT_ZERO( loader );
- loader->num_glyphs = 0;
- loader->num_chars = 0;
-
- /* initialize the tables -- simply set their `init' field to 0 */
- loader->encoding_table.init = 0;
- loader->charstrings.init = 0;
- loader->glyph_names.init = 0;
- }
-
-
- FT_LOCAL_DEF( void )
- t42_loader_done( T42_Loader loader )
- {
- T42_Parser parser = &loader->parser;
-
-
- /* finalize tables */
- T1_Release_Table( &loader->encoding_table );
- T1_Release_Table( &loader->charstrings );
- T1_Release_Table( &loader->glyph_names );
- T1_Release_Table( &loader->swap_table );
-
- /* finalize parser */
- t42_parser_done( parser );
- }
-
-
-/* END */
diff --git a/src/type42/t42parse.h b/src/type42/t42parse.h
deleted file mode 100644
index 7a68606f2..000000000
--- a/src/type42/t42parse.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42parse.h */
-/* */
-/* Type 42 font parser (specification). */
-/* */
-/* Copyright 2002-2017 by */
-/* Roberto Alameda. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef T42PARSE_H_
-#define T42PARSE_H_
-
-
-#include "t42objs.h"
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-
-
-FT_BEGIN_HEADER
-
- typedef struct T42_ParserRec_
- {
- PS_ParserRec root;
- FT_Stream stream;
-
- FT_Byte* base_dict;
- FT_Long base_len;
-
- FT_Bool in_memory;
-
- } T42_ParserRec, *T42_Parser;
-
-
- typedef struct T42_Loader_
- {
- T42_ParserRec parser; /* parser used to read the stream */
-
- FT_Int num_chars; /* number of characters in encoding */
- PS_TableRec encoding_table; /* PS_Table used to store the */
- /* encoding character names */
-
- FT_Int num_glyphs;
- PS_TableRec glyph_names;
- PS_TableRec charstrings;
- PS_TableRec swap_table; /* For moving .notdef glyph to index 0. */
-
- } T42_LoaderRec, *T42_Loader;
-
-
- FT_LOCAL( FT_Error )
- t42_parser_init( T42_Parser parser,
- FT_Stream stream,
- FT_Memory memory,
- PSAux_Service psaux );
-
- FT_LOCAL( void )
- t42_parser_done( T42_Parser parser );
-
-
- FT_LOCAL( FT_Error )
- t42_parse_dict( T42_Face face,
- T42_Loader loader,
- FT_Byte* base,
- FT_Long size );
-
-
- FT_LOCAL( void )
- t42_loader_init( T42_Loader loader,
- T42_Face face );
-
- FT_LOCAL( void )
- t42_loader_done( T42_Loader loader );
-
-
- /* */
-
-FT_END_HEADER
-
-
-#endif /* T42PARSE_H_ */
-
-
-/* END */
diff --git a/src/type42/t42types.h b/src/type42/t42types.h
deleted file mode 100644
index 2306ab6c7..000000000
--- a/src/type42/t42types.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42types.h */
-/* */
-/* Type 42 font data types (specification only). */
-/* */
-/* Copyright 2002-2017 by */
-/* Roberto Alameda. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef T42TYPES_H_
-#define T42TYPES_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TYPE1_TABLES_H
-#include FT_INTERNAL_TYPE1_TYPES_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-
-
-FT_BEGIN_HEADER
-
-
- typedef struct T42_FaceRec_
- {
- FT_FaceRec root;
- T1_FontRec type1;
- const void* psnames;
- const void* psaux;
-#if 0
- const void* afm_data;
-#endif
- FT_Byte* ttf_data;
- FT_Long ttf_size;
- FT_Face ttf_face;
- FT_CharMapRec charmaprecs[2];
- FT_CharMap charmaps[2];
- PS_UnicodesRec unicode_map;
-
- } T42_FaceRec, *T42_Face;
-
-
-FT_END_HEADER
-
-#endif /* T42TYPES_H_ */
-
-
-/* END */
diff --git a/src/type42/type42.c b/src/type42/type42.c
deleted file mode 100644
index ae8ac2678..000000000
--- a/src/type42/type42.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/***************************************************************************/
-/* */
-/* type42.c */
-/* */
-/* FreeType Type 42 driver component. */
-/* */
-/* Copyright 2002-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
-
-#include "t42drivr.c"
-#include "t42objs.c"
-#include "t42parse.c"
-
-
-/* END */
diff --git a/src/winfonts/Jamfile b/src/winfonts/Jamfile
deleted file mode 100644
index 52aa7f936..000000000
--- a/src/winfonts/Jamfile
+++ /dev/null
@@ -1,16 +0,0 @@
-# FreeType 2 src/winfonts Jamfile
-#
-# Copyright 2001-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) winfonts ;
-
-Library $(FT2_LIB) : winfnt.c ;
-
-# end of src/winfonts Jamfile
diff --git a/src/winfonts/fnterrs.h b/src/winfonts/fnterrs.h
deleted file mode 100644
index 4251021a7..000000000
--- a/src/winfonts/fnterrs.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/***************************************************************************/
-/* */
-/* fnterrs.h */
-/* */
-/* Win FNT/FON error codes (specification only). */
-/* */
-/* Copyright 2001-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is used to define the Windows FNT/FON error enumeration */
- /* constants. */
- /* */
- /*************************************************************************/
-
-#ifndef FNTERRS_H_
-#define FNTERRS_H_
-
-#include FT_MODULE_ERRORS_H
-
-#undef FTERRORS_H_
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX FNT_Err_
-#define FT_ERR_BASE FT_Mod_Err_Winfonts
-
-#include FT_ERRORS_H
-
-#endif /* FNTERRS_H_ */
-
-
-/* END */
diff --git a/src/winfonts/module.mk b/src/winfonts/module.mk
deleted file mode 100644
index ffc53a19f..000000000
--- a/src/winfonts/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 Windows FNT/FON module definition
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-FTMODULE_H_COMMANDS += WINDOWS_DRIVER
-
-define WINDOWS_DRIVER
-$(OPEN_DRIVER) FT_Driver_ClassRec, winfnt_driver_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)winfnt $(ECHO_DRIVER_DESC)Windows bitmap fonts with extension *.fnt or *.fon$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/src/winfonts/rules.mk b/src/winfonts/rules.mk
deleted file mode 100644
index 73e825d9a..000000000
--- a/src/winfonts/rules.mk
+++ /dev/null
@@ -1,68 +0,0 @@
-#
-# FreeType 2 Windows FNT/FON driver configuration rules
-#
-
-
-# Copyright 1996-2017 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-# Windows driver directory
-#
-FNT_DIR := $(SRC_DIR)/winfonts
-
-
-FNT_COMPILE := $(CC) $(ANSIFLAGS) \
- $I$(subst /,$(COMPILER_SEP),$(FNT_DIR)) \
- $(INCLUDE_FLAGS) \
- $(FT_CFLAGS)
-
-
-# Windows driver sources (i.e., C files)
-#
-FNT_DRV_SRC := $(FNT_DIR)/winfnt.c
-
-# Windows driver headers
-#
-FNT_DRV_H := $(FNT_DRV_SRC:%.c=%.h) \
- $(FNT_DIR)/fnterrs.h
-
-
-# Windows driver object(s)
-#
-# FNT_DRV_OBJ_M is used during `multi' builds
-# FNT_DRV_OBJ_S is used during `single' builds
-#
-FNT_DRV_OBJ_M := $(FNT_DRV_SRC:$(FNT_DIR)/%.c=$(OBJ_DIR)/%.$O)
-FNT_DRV_OBJ_S := $(OBJ_DIR)/winfnt.$O
-
-# Windows driver source file for single build
-#
-FNT_DRV_SRC_S := $(FNT_DIR)/winfnt.c
-
-
-# Windows driver - single object
-#
-$(FNT_DRV_OBJ_S): $(FNT_DRV_SRC_S) $(FNT_DRV_SRC) $(FREETYPE_H) $(FNT_DRV_H)
- $(FNT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(FNT_DRV_SRC_S))
-
-
-# Windows driver - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(FNT_DIR)/%.c $(FREETYPE_H) $(FNT_DRV_H)
- $(FNT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(FNT_DRV_OBJ_S)
-DRV_OBJS_M += $(FNT_DRV_OBJ_M)
-
-
-# EOF
diff --git a/src/winfonts/winfnt.c b/src/winfonts/winfnt.c
deleted file mode 100644
index 5cdb85a36..000000000
--- a/src/winfonts/winfnt.c
+++ /dev/null
@@ -1,1200 +0,0 @@
-/***************************************************************************/
-/* */
-/* winfnt.c */
-/* */
-/* FreeType font driver for Windows FNT/FON files */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* Copyright 2003 Huw D M Davies for Codeweavers */
-/* Copyright 2007 Dmitry Timoshkov for Codeweavers */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_WINFONTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_TRUETYPE_IDS_H
-
-#include "winfnt.h"
-#include "fnterrs.h"
-#include FT_SERVICE_WINFNT_H
-#include FT_SERVICE_FONT_FORMAT_H
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_winfnt
-
-
- static const FT_Frame_Field winmz_header_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE WinMZ_HeaderRec
-
- FT_FRAME_START( 64 ),
- FT_FRAME_USHORT_LE ( magic ),
- FT_FRAME_SKIP_BYTES( 29 * 2 ),
- FT_FRAME_ULONG_LE ( lfanew ),
- FT_FRAME_END
- };
-
- static const FT_Frame_Field winne_header_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE WinNE_HeaderRec
-
- FT_FRAME_START( 40 ),
- FT_FRAME_USHORT_LE ( magic ),
- FT_FRAME_SKIP_BYTES( 34 ),
- FT_FRAME_USHORT_LE ( resource_tab_offset ),
- FT_FRAME_USHORT_LE ( rname_tab_offset ),
- FT_FRAME_END
- };
-
- static const FT_Frame_Field winpe32_header_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE WinPE32_HeaderRec
-
- FT_FRAME_START( 248 ),
- FT_FRAME_ULONG_LE ( magic ), /* PE00 */
- FT_FRAME_USHORT_LE ( machine ), /* 0x014C - i386 */
- FT_FRAME_USHORT_LE ( number_of_sections ),
- FT_FRAME_SKIP_BYTES( 12 ),
- FT_FRAME_USHORT_LE ( size_of_optional_header ),
- FT_FRAME_SKIP_BYTES( 2 ),
- FT_FRAME_USHORT_LE ( magic32 ), /* 0x10B */
- FT_FRAME_SKIP_BYTES( 110 ),
- FT_FRAME_ULONG_LE ( rsrc_virtual_address ),
- FT_FRAME_ULONG_LE ( rsrc_size ),
- FT_FRAME_SKIP_BYTES( 104 ),
- FT_FRAME_END
- };
-
- static const FT_Frame_Field winpe32_section_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE WinPE32_SectionRec
-
- FT_FRAME_START( 40 ),
- FT_FRAME_BYTES ( name, 8 ),
- FT_FRAME_SKIP_BYTES( 4 ),
- FT_FRAME_ULONG_LE ( virtual_address ),
- FT_FRAME_ULONG_LE ( size_of_raw_data ),
- FT_FRAME_ULONG_LE ( pointer_to_raw_data ),
- FT_FRAME_SKIP_BYTES( 16 ),
- FT_FRAME_END
- };
-
- static const FT_Frame_Field winpe_rsrc_dir_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE WinPE_RsrcDirRec
-
- FT_FRAME_START( 16 ),
- FT_FRAME_ULONG_LE ( characteristics ),
- FT_FRAME_ULONG_LE ( time_date_stamp ),
- FT_FRAME_USHORT_LE( major_version ),
- FT_FRAME_USHORT_LE( minor_version ),
- FT_FRAME_USHORT_LE( number_of_named_entries ),
- FT_FRAME_USHORT_LE( number_of_id_entries ),
- FT_FRAME_END
- };
-
- static const FT_Frame_Field winpe_rsrc_dir_entry_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE WinPE_RsrcDirEntryRec
-
- FT_FRAME_START( 8 ),
- FT_FRAME_ULONG_LE( name ),
- FT_FRAME_ULONG_LE( offset ),
- FT_FRAME_END
- };
-
- static const FT_Frame_Field winpe_rsrc_data_entry_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE WinPE_RsrcDataEntryRec
-
- FT_FRAME_START( 16 ),
- FT_FRAME_ULONG_LE( offset_to_data ),
- FT_FRAME_ULONG_LE( size ),
- FT_FRAME_ULONG_LE( code_page ),
- FT_FRAME_ULONG_LE( reserved ),
- FT_FRAME_END
- };
-
- static const FT_Frame_Field winfnt_header_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE FT_WinFNT_HeaderRec
-
- FT_FRAME_START( 148 ),
- FT_FRAME_USHORT_LE( version ),
- FT_FRAME_ULONG_LE ( file_size ),
- FT_FRAME_BYTES ( copyright, 60 ),
- FT_FRAME_USHORT_LE( file_type ),
- FT_FRAME_USHORT_LE( nominal_point_size ),
- FT_FRAME_USHORT_LE( vertical_resolution ),
- FT_FRAME_USHORT_LE( horizontal_resolution ),
- FT_FRAME_USHORT_LE( ascent ),
- FT_FRAME_USHORT_LE( internal_leading ),
- FT_FRAME_USHORT_LE( external_leading ),
- FT_FRAME_BYTE ( italic ),
- FT_FRAME_BYTE ( underline ),
- FT_FRAME_BYTE ( strike_out ),
- FT_FRAME_USHORT_LE( weight ),
- FT_FRAME_BYTE ( charset ),
- FT_FRAME_USHORT_LE( pixel_width ),
- FT_FRAME_USHORT_LE( pixel_height ),
- FT_FRAME_BYTE ( pitch_and_family ),
- FT_FRAME_USHORT_LE( avg_width ),
- FT_FRAME_USHORT_LE( max_width ),
- FT_FRAME_BYTE ( first_char ),
- FT_FRAME_BYTE ( last_char ),
- FT_FRAME_BYTE ( default_char ),
- FT_FRAME_BYTE ( break_char ),
- FT_FRAME_USHORT_LE( bytes_per_row ),
- FT_FRAME_ULONG_LE ( device_offset ),
- FT_FRAME_ULONG_LE ( face_name_offset ),
- FT_FRAME_ULONG_LE ( bits_pointer ),
- FT_FRAME_ULONG_LE ( bits_offset ),
- FT_FRAME_BYTE ( reserved ),
- FT_FRAME_ULONG_LE ( flags ),
- FT_FRAME_USHORT_LE( A_space ),
- FT_FRAME_USHORT_LE( B_space ),
- FT_FRAME_USHORT_LE( C_space ),
- FT_FRAME_ULONG_LE ( color_table_offset ),
- FT_FRAME_BYTES ( reserved1, 16 ),
- FT_FRAME_END
- };
-
-
- static void
- fnt_font_done( FNT_Face face )
- {
- FT_Memory memory = FT_FACE( face )->memory;
- FT_Stream stream = FT_FACE( face )->stream;
- FNT_Font font = face->font;
-
-
- if ( !font )
- return;
-
- if ( font->fnt_frame )
- FT_FRAME_RELEASE( font->fnt_frame );
- FT_FREE( font->family_name );
-
- FT_FREE( font );
- face->font = NULL;
- }
-
-
- static FT_Error
- fnt_font_load( FNT_Font font,
- FT_Stream stream )
- {
- FT_Error error;
- FT_WinFNT_Header header = &font->header;
- FT_Bool new_format;
- FT_UInt size;
-
-
- /* first of all, read the FNT header */
- if ( FT_STREAM_SEEK( font->offset ) ||
- FT_STREAM_READ_FIELDS( winfnt_header_fields, header ) )
- goto Exit;
-
- /* check header */
- if ( header->version != 0x200 &&
- header->version != 0x300 )
- {
- FT_TRACE2(( " not a Windows FNT file\n" ));
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
-
- new_format = FT_BOOL( font->header.version == 0x300 );
- size = new_format ? 148 : 118;
-
- if ( header->file_size < size )
- {
- FT_TRACE2(( " not a Windows FNT file\n" ));
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
-
- /* Version 2 doesn't have these fields */
- if ( header->version == 0x200 )
- {
- header->flags = 0;
- header->A_space = 0;
- header->B_space = 0;
- header->C_space = 0;
-
- header->color_table_offset = 0;
- }
-
- if ( header->file_type & 1 )
- {
- FT_TRACE2(( "[can't handle vector FNT fonts]\n" ));
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
- }
-
- /* this is a FNT file/table; extract its frame */
- if ( FT_STREAM_SEEK( font->offset ) ||
- FT_FRAME_EXTRACT( header->file_size, font->fnt_frame ) )
- goto Exit;
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- fnt_face_get_dll_font( FNT_Face face,
- FT_Int face_instance_index )
- {
- FT_Error error;
- FT_Stream stream = FT_FACE( face )->stream;
- FT_Memory memory = FT_FACE( face )->memory;
- WinMZ_HeaderRec mz_header;
- FT_Long face_index;
-
-
- face->font = NULL;
-
- face_index = FT_ABS( face_instance_index ) & 0xFFFF;
-
- /* does it begin with an MZ header? */
- if ( FT_STREAM_SEEK( 0 ) ||
- FT_STREAM_READ_FIELDS( winmz_header_fields, &mz_header ) )
- goto Exit;
-
- error = FT_ERR( Unknown_File_Format );
- if ( mz_header.magic == WINFNT_MZ_MAGIC )
- {
- /* yes, now look for an NE header in the file */
- WinNE_HeaderRec ne_header;
-
-
- FT_TRACE2(( "MZ signature found\n" ));
-
- if ( FT_STREAM_SEEK( mz_header.lfanew ) ||
- FT_STREAM_READ_FIELDS( winne_header_fields, &ne_header ) )
- goto Exit;
-
- error = FT_ERR( Unknown_File_Format );
- if ( ne_header.magic == WINFNT_NE_MAGIC )
- {
- /* good, now look into the resource table for each FNT resource */
- FT_ULong res_offset = mz_header.lfanew +
- ne_header.resource_tab_offset;
- FT_UShort size_shift;
- FT_UShort font_count = 0;
- FT_ULong font_offset = 0;
-
-
- FT_TRACE2(( "NE signature found\n" ));
-
- if ( FT_STREAM_SEEK( res_offset ) ||
- FT_FRAME_ENTER( ne_header.rname_tab_offset -
- ne_header.resource_tab_offset ) )
- goto Exit;
-
- size_shift = FT_GET_USHORT_LE();
-
- /* Microsoft's specification of the executable-file header format */
- /* for `New Executable' (NE) doesn't give a limit for the */
- /* alignment shift count; however, in 1985, the year of the */
- /* specification release, only 32bit values were supported, thus */
- /* anything larger than 16 doesn't make sense in general, given */
- /* that file offsets are 16bit values, shifted by the alignment */
- /* shift count */
- if ( size_shift > 16 )
- {
- FT_TRACE2(( "invalid alignment shift count for resource data\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
-
- for (;;)
- {
- FT_UShort type_id, count;
-
-
- type_id = FT_GET_USHORT_LE();
- if ( !type_id )
- break;
-
- count = FT_GET_USHORT_LE();
-
- if ( type_id == 0x8008U )
- {
- font_count = count;
- font_offset = FT_STREAM_POS() + 4 +
- (FT_ULong)( stream->cursor - stream->limit );
- break;
- }
-
- stream->cursor += 4 + count * 12;
- }
-
- FT_FRAME_EXIT();
-
- if ( !font_count || !font_offset )
- {
- FT_TRACE2(( "this file doesn't contain any FNT resources\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* loading `winfnt_header_fields' needs at least 118 bytes; */
- /* use this as a rough measure to check the expected font size */
- if ( font_count * 118UL > stream->size )
- {
- FT_TRACE2(( "invalid number of faces\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- face->root.num_faces = font_count;
-
- if ( face_instance_index < 0 )
- goto Exit;
-
- if ( face_index >= font_count )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- if ( FT_NEW( face->font ) )
- goto Exit;
-
- if ( FT_STREAM_SEEK( font_offset + (FT_ULong)face_index * 12 ) ||
- FT_FRAME_ENTER( 12 ) )
- goto Fail;
-
- face->font->offset = (FT_ULong)FT_GET_USHORT_LE() << size_shift;
- face->font->fnt_size = (FT_ULong)FT_GET_USHORT_LE() << size_shift;
-
- stream->cursor += 8;
-
- FT_FRAME_EXIT();
-
- error = fnt_font_load( face->font, stream );
- }
- else if ( ne_header.magic == WINFNT_PE_MAGIC )
- {
- WinPE32_HeaderRec pe32_header;
- WinPE32_SectionRec pe32_section;
- WinPE_RsrcDirRec root_dir, name_dir, lang_dir;
- WinPE_RsrcDirEntryRec dir_entry1, dir_entry2, dir_entry3;
- WinPE_RsrcDataEntryRec data_entry;
-
- FT_ULong root_dir_offset, name_dir_offset, lang_dir_offset;
- FT_UShort i, j, k;
-
-
- FT_TRACE2(( "PE signature found\n" ));
-
- if ( FT_STREAM_SEEK( mz_header.lfanew ) ||
- FT_STREAM_READ_FIELDS( winpe32_header_fields, &pe32_header ) )
- goto Exit;
-
- FT_TRACE2(( "magic %04lx, machine %02x, number_of_sections %u, "
- "size_of_optional_header %02x\n"
- "magic32 %02x, rsrc_virtual_address %04lx, "
- "rsrc_size %04lx\n",
- pe32_header.magic, pe32_header.machine,
- pe32_header.number_of_sections,
- pe32_header.size_of_optional_header,
- pe32_header.magic32, pe32_header.rsrc_virtual_address,
- pe32_header.rsrc_size ));
-
- if ( pe32_header.magic != WINFNT_PE_MAGIC /* check full signature */ ||
- pe32_header.machine != 0x014C /* i386 */ ||
- pe32_header.size_of_optional_header != 0xE0 /* FIXME */ ||
- pe32_header.magic32 != 0x10B )
- {
- FT_TRACE2(( "this file has an invalid PE header\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- face->root.num_faces = 0;
-
- for ( i = 0; i < pe32_header.number_of_sections; i++ )
- {
- if ( FT_STREAM_READ_FIELDS( winpe32_section_fields,
- &pe32_section ) )
- goto Exit;
-
- FT_TRACE2(( "name %.8s, va %04lx, size %04lx, offset %04lx\n",
- pe32_section.name, pe32_section.virtual_address,
- pe32_section.size_of_raw_data,
- pe32_section.pointer_to_raw_data ));
-
- if ( pe32_header.rsrc_virtual_address ==
- pe32_section.virtual_address )
- goto Found_rsrc_section;
- }
-
- FT_TRACE2(( "this file doesn't contain any resources\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
-
- Found_rsrc_section:
- FT_TRACE2(( "found resources section %.8s\n", pe32_section.name ));
-
- if ( FT_STREAM_SEEK( pe32_section.pointer_to_raw_data ) ||
- FT_STREAM_READ_FIELDS( winpe_rsrc_dir_fields, &root_dir ) )
- goto Exit;
-
- root_dir_offset = pe32_section.pointer_to_raw_data;
-
- for ( i = 0; i < root_dir.number_of_named_entries +
- root_dir.number_of_id_entries; i++ )
- {
- if ( FT_STREAM_SEEK( root_dir_offset + 16 + i * 8 ) ||
- FT_STREAM_READ_FIELDS( winpe_rsrc_dir_entry_fields,
- &dir_entry1 ) )
- goto Exit;
-
- if ( !(dir_entry1.offset & 0x80000000UL ) /* DataIsDirectory */ )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- dir_entry1.offset &= ~0x80000000UL;
-
- name_dir_offset = pe32_section.pointer_to_raw_data +
- dir_entry1.offset;
-
- if ( FT_STREAM_SEEK( pe32_section.pointer_to_raw_data +
- dir_entry1.offset ) ||
- FT_STREAM_READ_FIELDS( winpe_rsrc_dir_fields, &name_dir ) )
- goto Exit;
-
- for ( j = 0; j < name_dir.number_of_named_entries +
- name_dir.number_of_id_entries; j++ )
- {
- if ( FT_STREAM_SEEK( name_dir_offset + 16 + j * 8 ) ||
- FT_STREAM_READ_FIELDS( winpe_rsrc_dir_entry_fields,
- &dir_entry2 ) )
- goto Exit;
-
- if ( !(dir_entry2.offset & 0x80000000UL ) /* DataIsDirectory */ )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- dir_entry2.offset &= ~0x80000000UL;
-
- lang_dir_offset = pe32_section.pointer_to_raw_data +
- dir_entry2.offset;
-
- if ( FT_STREAM_SEEK( pe32_section.pointer_to_raw_data +
- dir_entry2.offset ) ||
- FT_STREAM_READ_FIELDS( winpe_rsrc_dir_fields, &lang_dir ) )
- goto Exit;
-
- for ( k = 0; k < lang_dir.number_of_named_entries +
- lang_dir.number_of_id_entries; k++ )
- {
- if ( FT_STREAM_SEEK( lang_dir_offset + 16 + k * 8 ) ||
- FT_STREAM_READ_FIELDS( winpe_rsrc_dir_entry_fields,
- &dir_entry3 ) )
- goto Exit;
-
- if ( dir_entry2.offset & 0x80000000UL /* DataIsDirectory */ )
- {
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- if ( dir_entry1.name == 8 /* RT_FONT */ )
- {
- if ( FT_STREAM_SEEK( root_dir_offset + dir_entry3.offset ) ||
- FT_STREAM_READ_FIELDS( winpe_rsrc_data_entry_fields,
- &data_entry ) )
- goto Exit;
-
- FT_TRACE2(( "found font #%lu, offset %04lx, "
- "size %04lx, cp %lu\n",
- dir_entry2.name,
- pe32_section.pointer_to_raw_data +
- data_entry.offset_to_data -
- pe32_section.virtual_address,
- data_entry.size, data_entry.code_page ));
-
- if ( face_index == face->root.num_faces )
- {
- if ( FT_NEW( face->font ) )
- goto Exit;
-
- face->font->offset = pe32_section.pointer_to_raw_data +
- data_entry.offset_to_data -
- pe32_section.virtual_address;
- face->font->fnt_size = data_entry.size;
-
- error = fnt_font_load( face->font, stream );
- if ( error )
- {
- FT_TRACE2(( "font #%lu load error 0x%x\n",
- dir_entry2.name, error ));
- goto Fail;
- }
- else
- FT_TRACE2(( "font #%lu successfully loaded\n",
- dir_entry2.name ));
- }
-
- face->root.num_faces++;
- }
- }
- }
- }
- }
-
- if ( !face->root.num_faces )
- {
- FT_TRACE2(( "this file doesn't contain any RT_FONT resources\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- if ( face_index >= face->root.num_faces )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
- }
-
- Fail:
- if ( error )
- fnt_font_done( face );
-
- Exit:
- return error;
- }
-
-
- typedef struct FNT_CMapRec_
- {
- FT_CMapRec cmap;
- FT_UInt32 first;
- FT_UInt32 count;
-
- } FNT_CMapRec, *FNT_CMap;
-
-
- static FT_Error
- fnt_cmap_init( FNT_CMap cmap,
- FT_Pointer pointer )
- {
- FNT_Face face = (FNT_Face)FT_CMAP_FACE( cmap );
- FNT_Font font = face->font;
-
- FT_UNUSED( pointer );
-
-
- cmap->first = (FT_UInt32) font->header.first_char;
- cmap->count = (FT_UInt32)( font->header.last_char - cmap->first + 1 );
-
- return 0;
- }
-
-
- static FT_UInt
- fnt_cmap_char_index( FNT_CMap cmap,
- FT_UInt32 char_code )
- {
- FT_UInt gindex = 0;
-
-
- char_code -= cmap->first;
- if ( char_code < cmap->count )
- /* we artificially increase the glyph index; */
- /* FNT_Load_Glyph reverts to the right one */
- gindex = (FT_UInt)( char_code + 1 );
- return gindex;
- }
-
-
- static FT_UInt32
- fnt_cmap_char_next( FNT_CMap cmap,
- FT_UInt32 *pchar_code )
- {
- FT_UInt gindex = 0;
- FT_UInt32 result = 0;
- FT_UInt32 char_code = *pchar_code + 1;
-
-
- if ( char_code <= cmap->first )
- {
- result = cmap->first;
- gindex = 1;
- }
- else
- {
- char_code -= cmap->first;
- if ( char_code < cmap->count )
- {
- result = cmap->first + char_code;
- gindex = (FT_UInt)( char_code + 1 );
- }
- }
-
- *pchar_code = result;
- return gindex;
- }
-
-
- static const FT_CMap_ClassRec fnt_cmap_class_rec =
- {
- sizeof ( FNT_CMapRec ),
-
- (FT_CMap_InitFunc) fnt_cmap_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)fnt_cmap_char_index,
- (FT_CMap_CharNextFunc) fnt_cmap_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- };
-
- static FT_CMap_Class const fnt_cmap_class = &fnt_cmap_class_rec;
-
-
- static void
- FNT_Face_Done( FT_Face fntface ) /* FNT_Face */
- {
- FNT_Face face = (FNT_Face)fntface;
- FT_Memory memory;
-
-
- if ( !face )
- return;
-
- memory = FT_FACE_MEMORY( face );
-
- fnt_font_done( face );
-
- FT_FREE( fntface->available_sizes );
- fntface->num_fixed_sizes = 0;
- }
-
-
- static FT_Error
- FNT_Face_Init( FT_Stream stream,
- FT_Face fntface, /* FNT_Face */
- FT_Int face_instance_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- FNT_Face face = (FNT_Face)fntface;
- FT_Error error;
- FT_Memory memory = FT_FACE_MEMORY( face );
- FT_Int face_index;
-
- FT_UNUSED( num_params );
- FT_UNUSED( params );
-
-
- FT_TRACE2(( "Windows FNT driver\n" ));
-
- face_index = FT_ABS( face_instance_index ) & 0xFFFF;
-
- /* try to load font from a DLL */
- error = fnt_face_get_dll_font( face, face_instance_index );
- if ( !error && face_instance_index < 0 )
- goto Exit;
-
- if ( FT_ERR_EQ( error, Unknown_File_Format ) )
- {
- /* this didn't work; try to load a single FNT font */
- FNT_Font font;
-
- if ( FT_NEW( face->font ) )
- goto Exit;
-
- fntface->num_faces = 1;
-
- font = face->font;
- font->offset = 0;
- font->fnt_size = stream->size;
-
- error = fnt_font_load( font, stream );
-
- if ( !error )
- {
- if ( face_instance_index < 0 )
- goto Exit;
-
- if ( face_index > 0 )
- error = FT_THROW( Invalid_Argument );
- }
- }
-
- if ( error )
- goto Fail;
-
- /* sanity check */
- if ( !face->font->header.pixel_height )
- {
- FT_TRACE2(( "invalid pixel height\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- /* we now need to fill the root FT_Face fields */
- /* with relevant information */
- {
- FT_Face root = FT_FACE( face );
- FNT_Font font = face->font;
- FT_ULong family_size;
-
-
- root->face_index = face_index;
-
- root->face_flags |= FT_FACE_FLAG_FIXED_SIZES |
- FT_FACE_FLAG_HORIZONTAL;
-
- if ( font->header.avg_width == font->header.max_width )
- root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;
-
- if ( font->header.italic )
- root->style_flags |= FT_STYLE_FLAG_ITALIC;
-
- if ( font->header.weight >= 800 )
- root->style_flags |= FT_STYLE_FLAG_BOLD;
-
- /* set up the `fixed_sizes' array */
- if ( FT_NEW_ARRAY( root->available_sizes, 1 ) )
- goto Fail;
-
- root->num_fixed_sizes = 1;
-
- {
- FT_Bitmap_Size* bsize = root->available_sizes;
- FT_UShort x_res, y_res;
-
-
- bsize->width = (FT_Short)font->header.avg_width;
- bsize->height = (FT_Short)( font->header.pixel_height +
- font->header.external_leading );
- bsize->size = font->header.nominal_point_size << 6;
-
- x_res = font->header.horizontal_resolution;
- if ( !x_res )
- x_res = 72;
-
- y_res = font->header.vertical_resolution;
- if ( !y_res )
- y_res = 72;
-
- bsize->y_ppem = FT_MulDiv( bsize->size, y_res, 72 );
- bsize->y_ppem = FT_PIX_ROUND( bsize->y_ppem );
-
- /*
- * this reads:
- *
- * the nominal height is larger than the bbox's height
- *
- * => nominal_point_size contains incorrect value;
- * use pixel_height as the nominal height
- */
- if ( bsize->y_ppem > ( font->header.pixel_height << 6 ) )
- {
- FT_TRACE2(( "use pixel_height as the nominal height\n" ));
-
- bsize->y_ppem = font->header.pixel_height << 6;
- bsize->size = FT_MulDiv( bsize->y_ppem, 72, y_res );
- }
-
- bsize->x_ppem = FT_MulDiv( bsize->size, x_res, 72 );
- bsize->x_ppem = FT_PIX_ROUND( bsize->x_ppem );
- }
-
- {
- FT_CharMapRec charmap;
-
-
- charmap.encoding = FT_ENCODING_NONE;
- /* initial platform/encoding should indicate unset status? */
- charmap.platform_id = TT_PLATFORM_APPLE_UNICODE;
- charmap.encoding_id = TT_APPLE_ID_DEFAULT;
- charmap.face = root;
-
- if ( font->header.charset == FT_WinFNT_ID_MAC )
- {
- charmap.encoding = FT_ENCODING_APPLE_ROMAN;
- charmap.platform_id = TT_PLATFORM_MACINTOSH;
-/* charmap.encoding_id = TT_MAC_ID_ROMAN; */
- }
-
- error = FT_CMap_New( fnt_cmap_class,
- NULL,
- &charmap,
- NULL );
- if ( error )
- goto Fail;
- }
-
- /* set up remaining flags */
-
- if ( font->header.last_char < font->header.first_char )
- {
- FT_TRACE2(( "invalid number of glyphs\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
-
- /* reserve one slot for the .notdef glyph at index 0 */
- root->num_glyphs = font->header.last_char -
- font->header.first_char + 1 + 1;
-
- if ( font->header.face_name_offset >= font->header.file_size )
- {
- FT_TRACE2(( "invalid family name offset\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Fail;
- }
- family_size = font->header.file_size - font->header.face_name_offset;
- /* Some broken fonts don't delimit the face name with a final */
- /* NULL byte -- the frame is erroneously one byte too small. */
- /* We thus allocate one more byte, setting it explicitly to */
- /* zero. */
- if ( FT_ALLOC( font->family_name, family_size + 1 ) )
- goto Fail;
-
- FT_MEM_COPY( font->family_name,
- font->fnt_frame + font->header.face_name_offset,
- family_size );
-
- font->family_name[family_size] = '\0';
-
- if ( FT_REALLOC( font->family_name,
- family_size,
- ft_strlen( font->family_name ) + 1 ) )
- goto Fail;
-
- root->family_name = font->family_name;
- root->style_name = (char *)"Regular";
-
- if ( root->style_flags & FT_STYLE_FLAG_BOLD )
- {
- if ( root->style_flags & FT_STYLE_FLAG_ITALIC )
- root->style_name = (char *)"Bold Italic";
- else
- root->style_name = (char *)"Bold";
- }
- else if ( root->style_flags & FT_STYLE_FLAG_ITALIC )
- root->style_name = (char *)"Italic";
- }
- goto Exit;
-
- Fail:
- FNT_Face_Done( fntface );
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- FNT_Size_Select( FT_Size size,
- FT_ULong strike_index )
- {
- FNT_Face face = (FNT_Face)size->face;
- FT_WinFNT_Header header = &face->font->header;
-
- FT_UNUSED( strike_index );
-
-
- FT_Select_Metrics( size->face, 0 );
-
- size->metrics.ascender = header->ascent * 64;
- size->metrics.descender = -( header->pixel_height -
- header->ascent ) * 64;
- size->metrics.max_advance = header->max_width * 64;
-
- return FT_Err_Ok;
- }
-
-
- static FT_Error
- FNT_Size_Request( FT_Size size,
- FT_Size_Request req )
- {
- FNT_Face face = (FNT_Face)size->face;
- FT_WinFNT_Header header = &face->font->header;
- FT_Bitmap_Size* bsize = size->face->available_sizes;
- FT_Error error = FT_ERR( Invalid_Pixel_Size );
- FT_Long height;
-
-
- height = FT_REQUEST_HEIGHT( req );
- height = ( height + 32 ) >> 6;
-
- switch ( req->type )
- {
- case FT_SIZE_REQUEST_TYPE_NOMINAL:
- if ( height == ( ( bsize->y_ppem + 32 ) >> 6 ) )
- error = FT_Err_Ok;
- break;
-
- case FT_SIZE_REQUEST_TYPE_REAL_DIM:
- if ( height == header->pixel_height )
- error = FT_Err_Ok;
- break;
-
- default:
- error = FT_THROW( Unimplemented_Feature );
- break;
- }
-
- if ( error )
- return error;
- else
- return FNT_Size_Select( size, 0 );
- }
-
-
- static FT_Error
- FNT_Load_Glyph( FT_GlyphSlot slot,
- FT_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- FNT_Face face = (FNT_Face)FT_SIZE_FACE( size );
- FNT_Font font;
- FT_Error error = FT_Err_Ok;
- FT_Byte* p;
- FT_UInt len;
- FT_Bitmap* bitmap = &slot->bitmap;
- FT_ULong offset;
- FT_Bool new_format;
-
-
- if ( !face )
- {
- error = FT_THROW( Invalid_Face_Handle );
- goto Exit;
- }
-
- font = face->font;
-
- if ( !font ||
- glyph_index >= (FT_UInt)( FT_FACE( face )->num_glyphs ) )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- FT_TRACE1(( "FNT_Load_Glyph: glyph index %d\n", glyph_index ));
-
- if ( glyph_index > 0 )
- glyph_index--; /* revert to real index */
- else
- glyph_index = font->header.default_char; /* the `.notdef' glyph */
-
- new_format = FT_BOOL( font->header.version == 0x300 );
- len = new_format ? 6 : 4;
-
- /* get glyph width and offset */
- offset = ( new_format ? 148 : 118 ) + len * glyph_index;
-
- if ( offset >= font->header.file_size - 2 - ( new_format ? 4 : 2 ) )
- {
- FT_TRACE2(( "invalid FNT offset\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- p = font->fnt_frame + offset;
-
- bitmap->width = FT_NEXT_USHORT_LE( p );
-
- /* jump to glyph entry */
- if ( new_format )
- offset = FT_NEXT_ULONG_LE( p );
- else
- offset = FT_NEXT_USHORT_LE( p );
-
- if ( offset >= font->header.file_size )
- {
- FT_TRACE2(( "invalid FNT offset\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- bitmap->rows = font->header.pixel_height;
- bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
-
- slot->bitmap_left = 0;
- slot->bitmap_top = font->header.ascent;
- slot->format = FT_GLYPH_FORMAT_BITMAP;
-
- /* now set up metrics */
- slot->metrics.width = (FT_Pos)( bitmap->width << 6 );
- slot->metrics.height = (FT_Pos)( bitmap->rows << 6 );
- slot->metrics.horiAdvance = (FT_Pos)( bitmap->width << 6 );
- slot->metrics.horiBearingX = 0;
- slot->metrics.horiBearingY = slot->bitmap_top << 6;
-
- ft_synthesize_vertical_metrics( &slot->metrics,
- (FT_Pos)( bitmap->rows << 6 ) );
-
- if ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY )
- goto Exit;
-
- /* jump to glyph data */
- p = font->fnt_frame + /* font->header.bits_offset */ + offset;
-
- /* allocate and build bitmap */
- {
- FT_Memory memory = FT_FACE_MEMORY( slot->face );
- FT_UInt pitch = ( bitmap->width + 7 ) >> 3;
- FT_Byte* column;
- FT_Byte* write;
-
-
- bitmap->pitch = (int)pitch;
- if ( !pitch ||
- offset + pitch * bitmap->rows > font->header.file_size )
- {
- FT_TRACE2(( "invalid bitmap width\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* note: since glyphs are stored in columns and not in rows we */
- /* can't use ft_glyphslot_set_bitmap */
- if ( FT_ALLOC_MULT( bitmap->buffer, pitch, bitmap->rows ) )
- goto Exit;
-
- column = (FT_Byte*)bitmap->buffer;
-
- for ( ; pitch > 0; pitch--, column++ )
- {
- FT_Byte* limit = p + bitmap->rows;
-
-
- for ( write = column; p < limit; p++, write += bitmap->pitch )
- *write = *p;
- }
-
- slot->internal->flags = FT_GLYPH_OWN_BITMAP;
- }
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- winfnt_get_header( FT_Face face,
- FT_WinFNT_HeaderRec *aheader )
- {
- FNT_Font font = ((FNT_Face)face)->font;
-
-
- *aheader = font->header;
-
- return 0;
- }
-
-
- static const FT_Service_WinFntRec winfnt_service_rec =
- {
- winfnt_get_header /* get_header */
- };
-
- /*
- * SERVICE LIST
- *
- */
-
- static const FT_ServiceDescRec winfnt_services[] =
- {
- { FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_WINFNT },
- { FT_SERVICE_ID_WINFNT, &winfnt_service_rec },
- { NULL, NULL }
- };
-
-
- static FT_Module_Interface
- winfnt_get_service( FT_Module module,
- const FT_String* service_id )
- {
- FT_UNUSED( module );
-
- return ft_service_list_lookup( winfnt_services, service_id );
- }
-
-
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Driver_ClassRec winfnt_driver_class =
- {
- {
- FT_MODULE_FONT_DRIVER |
- FT_MODULE_DRIVER_NO_OUTLINES,
- sizeof ( FT_DriverRec ),
-
- "winfonts",
- 0x10000L,
- 0x20000L,
-
- NULL, /* module-specific interface */
-
- NULL, /* FT_Module_Constructor module_init */
- NULL, /* FT_Module_Destructor module_done */
- winfnt_get_service /* FT_Module_Requester get_interface */
- },
-
- sizeof ( FNT_FaceRec ),
- sizeof ( FT_SizeRec ),
- sizeof ( FT_GlyphSlotRec ),
-
- FNT_Face_Init, /* FT_Face_InitFunc init_face */
- FNT_Face_Done, /* FT_Face_DoneFunc done_face */
- NULL, /* FT_Size_InitFunc init_size */
- NULL, /* FT_Size_DoneFunc done_size */
- NULL, /* FT_Slot_InitFunc init_slot */
- NULL, /* FT_Slot_DoneFunc done_slot */
-
- FNT_Load_Glyph, /* FT_Slot_LoadFunc load_glyph */
-
- NULL, /* FT_Face_GetKerningFunc get_kerning */
- NULL, /* FT_Face_AttachFunc attach_file */
- NULL, /* FT_Face_GetAdvancesFunc get_advances */
-
- FNT_Size_Request, /* FT_Size_RequestFunc request_size */
- FNT_Size_Select /* FT_Size_SelectFunc select_size */
- };
-
-
-/* END */
diff --git a/src/winfonts/winfnt.h b/src/winfonts/winfnt.h
deleted file mode 100644
index 884b645a2..000000000
--- a/src/winfonts/winfnt.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/***************************************************************************/
-/* */
-/* winfnt.h */
-/* */
-/* FreeType font driver for Windows FNT/FON files */
-/* */
-/* Copyright 1996-2017 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* Copyright 2007 Dmitry Timoshkov for Codeweavers */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef WINFNT_H_
-#define WINFNT_H_
-
-
-#include <ft2build.h>
-#include FT_WINFONTS_H
-#include FT_INTERNAL_DRIVER_H
-
-
-FT_BEGIN_HEADER
-
-#ifdef FT_CONFIG_OPTION_PIC
-#error "this module does not support PIC yet"
-#endif
-
- typedef struct WinMZ_HeaderRec_
- {
- FT_UShort magic;
- /* skipped content */
- FT_UShort lfanew;
-
- } WinMZ_HeaderRec;
-
-
- typedef struct WinNE_HeaderRec_
- {
- FT_UShort magic;
- /* skipped content */
- FT_UShort resource_tab_offset;
- FT_UShort rname_tab_offset;
-
- } WinNE_HeaderRec;
-
-
- typedef struct WinPE32_HeaderRec_
- {
- FT_ULong magic;
- FT_UShort machine;
- FT_UShort number_of_sections;
- /* skipped content */
- FT_UShort size_of_optional_header;
- /* skipped content */
- FT_UShort magic32;
- /* skipped content */
- FT_ULong rsrc_virtual_address;
- FT_ULong rsrc_size;
- /* skipped content */
-
- } WinPE32_HeaderRec;
-
-
- typedef struct WinPE32_SectionRec_
- {
- FT_Byte name[8];
- /* skipped content */
- FT_ULong virtual_address;
- FT_ULong size_of_raw_data;
- FT_ULong pointer_to_raw_data;
- /* skipped content */
-
- } WinPE32_SectionRec;
-
-
- typedef struct WinPE_RsrcDirRec_
- {
- FT_ULong characteristics;
- FT_ULong time_date_stamp;
- FT_UShort major_version;
- FT_UShort minor_version;
- FT_UShort number_of_named_entries;
- FT_UShort number_of_id_entries;
-
- } WinPE_RsrcDirRec;
-
-
- typedef struct WinPE_RsrcDirEntryRec_
- {
- FT_ULong name;
- FT_ULong offset;
-
- } WinPE_RsrcDirEntryRec;
-
-
- typedef struct WinPE_RsrcDataEntryRec_
- {
- FT_ULong offset_to_data;
- FT_ULong size;
- FT_ULong code_page;
- FT_ULong reserved;
-
- } WinPE_RsrcDataEntryRec;
-
-
- typedef struct WinNameInfoRec_
- {
- FT_UShort offset;
- FT_UShort length;
- FT_UShort flags;
- FT_UShort id;
- FT_UShort handle;
- FT_UShort usage;
-
- } WinNameInfoRec;
-
-
- typedef struct WinResourceInfoRec_
- {
- FT_UShort type_id;
- FT_UShort count;
-
- } WinResourceInfoRec;
-
-
-#define WINFNT_MZ_MAGIC 0x5A4D
-#define WINFNT_NE_MAGIC 0x454E
-#define WINFNT_PE_MAGIC 0x4550
-
-
- typedef struct FNT_FontRec_
- {
- FT_ULong offset;
-
- FT_WinFNT_HeaderRec header;
-
- FT_Byte* fnt_frame;
- FT_ULong fnt_size;
- FT_String* family_name;
-
- } FNT_FontRec, *FNT_Font;
-
-
- typedef struct FNT_FaceRec_
- {
- FT_FaceRec root;
- FNT_Font font;
-
- FT_CharMap charmap_handle;
- FT_CharMapRec charmap; /* a single charmap per face */
-
- } FNT_FaceRec, *FNT_Face;
-
-
- FT_EXPORT_VAR( const FT_Driver_ClassRec ) winfnt_driver_class;
-
-
-FT_END_HEADER
-
-
-#endif /* WINFNT_H_ */
-
-
-/* END */
diff --git a/version.sed b/version.sed
deleted file mode 100644
index c281ff506..000000000
--- a/version.sed
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /usr/bin/sed -nf
-
-s/^#define *FREETYPE_MAJOR *\([^ ][^ ]*\).*$/freetype_major="\1" ;/p
-s/^#define *FREETYPE_MINOR *\([^ ][^ ]*\).*$/freetype_minor=".\1" ;/p
-s/^#define *FREETYPE_PATCH *\([^ ][^ ]*\).*$/freetype_patch=".\1" ;/p
diff --git a/vms_make.com b/vms_make.com
deleted file mode 100644
index ea5631826..000000000
--- a/vms_make.com
+++ /dev/null
@@ -1,1286 +0,0 @@
-$! make Freetype2 under OpenVMS
-$!
-$! Copyright 2003-2017 by
-$! David Turner, Robert Wilhelm, and Werner Lemberg.
-$!
-$! This file is part of the FreeType project, and may only be used, modified,
-$! and distributed under the terms of the FreeType project license,
-$! LICENSE.TXT. By continuing to use, modify, or distribute this file you
-$! indicate that you have read the license and understand and accept it
-$! fully.
-$!
-$!
-$! External libraries (like Freetype, XPM, etc.) are supported via the
-$! config file VMSLIB.DAT. Please check the sample file, which is part of this
-$! distribution, for the information you need to provide
-$!
-$! This procedure currently does support the following commandline options
-$! in arbitrary order
-$!
-$! * DEBUG - Compile modules with /noopt/debug and link shareable image
-$! with /debug
-$! * LOPTS - Options to be passed to the link command
-$! * CCOPT - Options to be passed to the C compiler
-$!
-$! In case of problems with the install you might contact me at
-$! zinser@zinser.no-ip.info (preferred) or
-$! zinser@sysdev.deutsche-boerse.com (work)
-$!
-$! Make procedure history for Freetype2
-$!
-$!------------------------------------------------------------------------------
-$! Version history
-$! 0.01 20040401 First version to receive a number
-$! 0.02 20041030 Add error handling, Freetype 2.1.9
-$!
-$ on error then goto err_exit
-$ true = 1
-$ false = 0
-$ tmpnam = "temp_" + f$getjpi("","pid")
-$ tt = tmpnam + ".txt"
-$ tc = tmpnam + ".c"
-$ th = tmpnam + ".h"
-$ its_decc = false
-$ its_vaxc = false
-$ its_gnuc = false
-$!
-$! Setup variables holding "config" information
-$!
-$ Make = ""
-$ ccopt = "/name=as_is/float=ieee"
-$ lopts = ""
-$ dnsrl = ""
-$ aconf_in_file = "config.hin"
-$ name = "Freetype2"
-$ mapfile = name + ".map"
-$ optfile = name + ".opt"
-$ s_case = false
-$ liblist = ""
-$!
-$ whoami = f$parse(f$environment("Procedure"),,,,"NO_CONCEAL")
-$ mydef = F$parse(whoami,,,"DEVICE")
-$ mydir = f$parse(whoami,,,"DIRECTORY") - "]["
-$ myproc = f$parse(whoami,,,"Name") + f$parse(whoami,,,"type")
-$!
-$! Check for MMK/MMS
-$!
-$ If F$Search ("Sys$System:MMS.EXE") .nes. "" Then Make = "MMS"
-$ If F$Type (MMK) .eqs. "STRING" Then Make = "MMK"
-$!
-$! Which command parameters were given
-$!
-$ gosub check_opts
-$!
-$! Create option file
-$!
-$ open/write optf 'optfile'
-$!
-$! Pull in external libraries
-$!
-$ create libs.opt
-$ open/write libsf libs.opt
-$ gosub check_create_vmslib
-$!
-$! Create objects
-$!
-$ if libdefs .nes. ""
-$ then
-$ ccopt = ccopt + "/define=(" + f$extract(0,f$length(libdefs)-1,libdefs) + ")"
-$ endif
-$!
-$ if f$locate("AS_IS",f$edit(ccopt,"UPCASE")) .lt. f$length(ccopt) -
- then s_case = true
-$ gosub crea_mms
-$!
-$ 'Make' /macro=(comp_flags="''ccopt'")
-$ purge/nolog [...]descrip.mms
-$!
-$! Add them to options
-$!
-$FLOOP:
-$ file = f$edit(f$search("[...]*.obj"),"UPCASE")
-$ if (file .nes. "")
-$ then
-$ if f$locate("DEMOS",file) .eqs. f$length(file) then write optf file
-$ goto floop
-$ endif
-$!
-$ close optf
-$!
-$!
-$! Alpha gets a shareable image
-$!
-$ If f$getsyi("HW_MODEL") .gt. 1024
-$ Then
-$ write sys$output "Creating freetype2shr.exe"
-$ call anal_obj_axp 'optfile' _link.opt
-$ open/append optf 'optfile'
-$ if s_case then WRITE optf "case_sensitive=YES"
-$ close optf
-$ LINK_/NODEB/SHARE=[.lib]freetype2shr.exe -
- 'optfile'/opt,libs.opt/opt,_link.opt/opt
-$ endif
-$!
-$ exit
-$!
-$
-$ERR_LIB:
-$ write sys$output "Error reading config file vmslib.dat"
-$ goto err_exit
-$FT2_ERR:
-$ write sys$output "Could not locate Freetype 2 include files"
-$ goto err_exit
-$ERR_EXIT:
-$ set message/facil/ident/sever/text
-$ close/nolog optf
-$ close/nolog out
-$ close/nolog libdata
-$ close/nolog in
-$ close/nolog atmp
-$ close/nolog xtmp
-$ write sys$output "Exiting..."
-$ exit 2
-$!
-$!------------------------------------------------------------------------------
-$!
-$! If MMS/MMK are available dump out the descrip.mms if required
-$!
-$CREA_MMS:
-$ write sys$output "Creating descrip.mms files ..."
-$ write sys$output "... Main directory"
-$ create descrip.mms
-$ open/append out descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 build system -- top-level Makefile for OpenVMS
-#
-
-
-# Copyright 2001 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-$ EOD
-$ write out "CFLAGS = ", ccopt
-$ copy sys$input: out
-$ deck
-
-
-all :
- define freetype [--.include]
- define psaux [-.psaux]
- define autofit [-.autofit]
- define autohint [-.autohint]
- define base [-.base]
- define cache [-.cache]
- define cff [-.cff]
- define cid [-.cid]
- define pcf [-.pcf]
- define psnames [-.psnames]
- define raster [-.raster]
- define sfnt [-.sfnt]
- define smooth [-.smooth]
- define truetype [-.truetype]
- define type1 [-.type1]
- define winfonts [-.winfonts]
- if f$search("lib.dir") .eqs. "" then create/directory [.lib]
- set default [.builds.vms]
- $(MMS)$(MMSQUALIFIERS)
-# set default [--.src.autofit]
-# $(MMS)$(MMSQUALIFIERS)
- set default [--.src.autohint]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.base]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.bdf]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.cache]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.cff]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.cid]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.gzip]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.lzw]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.otvalid]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.pcf]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.pfr]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.psaux]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.pshinter]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.psnames]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.raster]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.sfnt]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.smooth]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.truetype]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.type1]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.type42]
- $(MMS)$(MMSQUALIFIERS)
- set default [-.winfonts]
- $(MMS)$(MMSQUALIFIERS)
- set default [--]
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.builds.vms] directory"
-$ create [.builds.vms]descrip.mms
-$ open/append out [.builds.vms]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 system rules for VMS
-#
-
-
-# Copyright 2001 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([],[--.include],[--.src.base])
-
-OBJS=ftsystem.obj
-
-all : $(OBJS)
- library/create [--.lib]freetype.olb $(OBJS)
-
-ftsystem.obj : ftsystem.c ftconfig.h
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.autofit] directory"
-$ create [.src.autofit]descrip.mms
-$ open/append out [.src.autofit]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 auto-fit module compilation rules for VMS
-#
-
-
-# Copyright 2002 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.autofit])
-
-OBJS=afangles.obj,afhints.obj,aflatin.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.autohint] directory"
-$ create [.src.autohint]descrip.mms
-$ open/append out [.src.autohint]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 auto-hinter module compilation rules for VMS
-#
-
-
-# Copyright 2001, 2002 Catharon Productions Inc.
-#
-# This file is part of the Catharon Typography Project and shall only
-# be used, modified, and distributed under the terms of the Catharon
-# Open Source License that should come with this file under the name
-# `CatharonLicense.txt'. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-#
-# Note that this license is compatible with the FreeType license.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/incl=([--.include],[--.src.autohint])
-
-OBJS=autohint.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.base] directory"
-$ create [.src.base]descrip.mms
-$ open/append out [.src.base]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 base layer compilation rules for VMS
-#
-
-
-# Copyright 2001, 2003 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.builds.vms],[--.include],[--.src.base])
-
-OBJS=ftbase.obj,ftinit.obj,ftglyph.obj,ftdebug.obj,ftbdf.obj,ftmm.obj,\
- fttype1.obj,ftfntfmt.obj,ftpfr.obj,ftstroke.obj,ftwinfnt.obj,ftbbox.obj,\
- ftbitmap.obj,ftlcdfil.obj,ftgasp.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.bdf] directory"
-$ create [.src.bdf]descrip.mms
-$ open/append out [.src.bdf]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 BDF driver compilation rules for VMS
-#
-
-
-# Copyright 2002 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.bdf])
-
-OBJS=bdf.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.cache] directory"
-$ create [.src.cache]descrip.mms
-$ open/append out [.src.cache]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 Cache compilation rules for VMS
-#
-
-
-# Copyright 2001, 2002, 2003, 2004 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.cache])
-
-OBJS=ftcache.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-ftcache.obj : ftcache.c ftcbasic.c ftccache.c ftccmap.c ftcglyph.c ftcimage.c \
- ftcmanag.c ftcmru.c ftcsbits.c
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.cff] directory"
-$ create [.src.cff]descrip.mms
-$ open/append out [.src.cff]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 OpenType/CFF driver compilation rules for VMS
-#
-
-
-# Copyright 2001, 2002 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.cff])
-
-OBJS=cff.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.cid] directory"
-$ create [.src.cid]descrip.mms
-$ open/append out [.src.cid]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 CID driver compilation rules for VMS
-#
-
-
-# Copyright 2001 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.cid])
-
-OBJS=type1cid.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.gzip] directory"
-$ create [.src.gzip]descrip.mms
-$ open/append out [.src.gzip]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 GZip support compilation rules for VMS
-#
-
-
-# Copyright 2002 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-$EOD
-$ if libincs .nes. "" then write out "LIBINCS = ", libincs - ",", ","
-$ write out "COMP_FLAGS = ", ccopt
-$ copy sys$input: out
-$ deck
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=($(LIBINCS)[--.include],[--.src.gzip])
-
-OBJS=ftgzip.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.lzw] directory"
-$ create [.src.lzw]descrip.mms
-$ open/append out [.src.lzw]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 LZW support compilation rules for VMS
-#
-
-
-# Copyright 2004 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-$EOD
-$ if libincs .nes. "" then write out "LIBINCS = ", libincs - ",", ","
-$ write out "COMP_FLAGS = ", ccopt
-$ copy sys$input: out
-$ deck
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=($(LIBINCS)[--.include],[--.src.lzw])
-
-OBJS=ftlzw.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.otlayout] directory"
-$ create [.src.otlayout]descrip.mms
-$ open/append out [.src.otlayout]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 OT layout compilation rules for VMS
-#
-
-
-# Copyright 2004 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.otlayout])
-
-OBJS=otlbase.obj,otlcommn.obj,otlgdef.obj,otlgpos.obj,otlgsub.obj,\
- otljstf.obj,otlparse.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.otvalid] directory"
-$ create [.src.otvalid]descrip.mms
-$ open/append out [.src.otvalid]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 OpenType validation module compilation rules for VMS
-#
-
-
-# Copyright 2004 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.otvalid])
-
-OBJS=otvalid.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.pcf] directory"
-$ create [.src.pcf]descrip.mms
-$ open/append out [.src.pcf]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 pcf driver compilation rules for VMS
-#
-
-
-# Copyright (C) 2001, 2002 by
-# Francesco Zappa Nardelli
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.pcf])
-
-OBJS=pcf.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.pfr] directory"
-$ create [.src.pfr]descrip.mms
-$ open/append out [.src.pfr]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 PFR driver compilation rules for VMS
-#
-
-
-# Copyright 2002 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.pfr])
-
-OBJS=pfr.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.psaux] directory"
-$ create [.src.psaux]descrip.mms
-$ open/append out [.src.psaux]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 PSaux driver compilation rules for VMS
-#
-
-
-# Copyright 2001, 2002 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.psaux])
-
-OBJS=psaux.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.pshinter] directory"
-$ create [.src.pshinter]descrip.mms
-$ open/append out [.src.pshinter]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 PSHinter driver compilation rules for OpenVMS
-#
-
-
-# Copyright 2001, 2002 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.psnames])
-
-OBJS=pshinter.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.psnames] directory"
-$ create [.src.psnames]descrip.mms
-$ open/append out [.src.psnames]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 PSNames driver compilation rules for VMS
-#
-
-
-# Copyright 2001, 2002 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.psnames])
-
-OBJS=psnames.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.raster] directory"
-$ create [.src.raster]descrip.mms
-$ open/append out [.src.raster]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 renderer module compilation rules for VMS
-#
-
-
-# Copyright 2001 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.raster])
-
-OBJS=raster.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.sfnt] directory"
-$ create [.src.sfnt]descrip.mms
-$ open/append out [.src.sfnt]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 SFNT driver compilation rules for VMS
-#
-
-
-# Copyright 2001, 2002 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.sfnt])
-
-OBJS=sfnt.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.smooth] directory"
-$ create [.src.smooth]descrip.mms
-$ open/append out [.src.smooth]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 smooth renderer module compilation rules for VMS
-#
-
-
-# Copyright 2001 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.smooth])
-
-OBJS=smooth.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.truetype] directory"
-$ create [.src.truetype]descrip.mms
-$ open/append out [.src.truetype]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 TrueType driver compilation rules for VMS
-#
-
-
-# Copyright 2001, 2002 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.truetype])
-
-OBJS=truetype.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.type1] directory"
-$ create [.src.type1]descrip.mms
-$ open/append out [.src.type1]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 Type1 driver compilation rules for VMS
-#
-
-
-# Copyright 1996-2000, 2002 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.type1])
-
-OBJS=type1.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-type1.obj : type1.c t1parse.c t1load.c t1objs.c t1driver.c t1gload.c t1afm.c
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.type42] directory"
-$ create [.src.type42]descrip.mms
-$ open/append out [.src.type42]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 Type 42 driver compilation rules for VMS
-#
-
-
-# Copyright 2002 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.type42])
-
-OBJS=type42.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.winfonts] directory"
-$ create [.src.winfonts]descrip.mms
-$ open/append out [.src.winfonts]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 Windows FNT/FON driver compilation rules for VMS
-#
-
-
-# Copyright 2001, 2002 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.winfonts])
-
-OBJS=winfnt.obj
-
-all : $(OBJS)
- library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ return
-$!------------------------------------------------------------------------------
-$!
-$! Check command line options and set symbols accordingly
-$!
-$ CHECK_OPTS:
-$ i = 1
-$ OPT_LOOP:
-$ if i .lt. 9
-$ then
-$ cparm = f$edit(p'i',"upcase")
-$ if cparm .eqs. "DEBUG"
-$ then
-$ ccopt = ccopt + "/noopt/deb"
-$ lopts = lopts + "/deb"
-$ endif
-$ if f$locate("CCOPT=",cparm) .lt. f$length(cparm)
-$ then
-$ start = f$locate("=",cparm) + 1
-$ len = f$length(cparm) - start
-$ ccopt = ccopt + f$extract(start,len,cparm)
-$ endif
-$ if cparm .eqs. "LINK" then linkonly = true
-$ if f$locate("LOPTS=",cparm) .lt. f$length(cparm)
-$ then
-$ start = f$locate("=",cparm) + 1
-$ len = f$length(cparm) - start
-$ lopts = lopts + f$extract(start,len,cparm)
-$ endif
-$ if f$locate("CC=",cparm) .lt. f$length(cparm)
-$ then
-$ start = f$locate("=",cparm) + 1
-$ len = f$length(cparm) - start
-$ cc_com = f$extract(start,len,cparm)
- if (cc_com .nes. "DECC") .and. -
- (cc_com .nes. "VAXC") .and. -
- (cc_com .nes. "GNUC")
-$ then
-$ write sys$output "Unsupported compiler choice ''cc_com' ignored"
-$ write sys$output "Use DECC, VAXC, or GNUC instead"
-$ else
-$ if cc_com .eqs. "DECC" then its_decc = true
-$ if cc_com .eqs. "VAXC" then its_vaxc = true
-$ if cc_com .eqs. "GNUC" then its_gnuc = true
-$ endif
-$ endif
-$ if f$locate("MAKE=",cparm) .lt. f$length(cparm)
-$ then
-$ start = f$locate("=",cparm) + 1
-$ len = f$length(cparm) - start
-$ mmks = f$extract(start,len,cparm)
-$ if (mmks .eqs. "MMK") .or. (mmks .eqs. "MMS")
-$ then
-$ make = mmks
-$ else
-$ write sys$output "Unsupported make choice ''mmks' ignored"
-$ write sys$output "Use MMK or MMS instead"
-$ endif
-$ endif
-$ i = i + 1
-$ goto opt_loop
-$ endif
-$ return
-$!------------------------------------------------------------------------------
-$!
-$! Take care of driver file with information about external libraries
-$!
-$! Version history
-$! 0.01 20040220 First version to receive a number
-$! 0.02 20040229 Echo current procedure name; use general error exit handler
-$! Remove xpm hack -> Replaced by more general dnsrl handling
-$CHECK_CREATE_VMSLIB:
-$!
-$ if f$search("VMSLIB.DAT") .eqs. ""
-$ then
-$ type/out=vmslib.dat sys$input
-!
-! This is a simple driver file with information used by vms_make.com to
-! check if external libraries (like t1lib and freetype) are available on
-! the system.
-!
-! Layout of the file:
-!
-! - Lines starting with ! are treated as comments
-! - Elements in a data line are separated by # signs
-! - The elements need to be listed in the following order
-! 1.) Name of the Library (only used for informative messages
-! from vms_make.com)
-! 2.) Location where the object library can be found
-! 3.) Location where the include files for the library can be found
-! 4.) Include file used to verify library location
-! 5.) CPP define to pass to the build to indicate availability of
-! the library
-!
-! Example: The following lines show how definitions
-! might look like. They are site specific and the locations of the
-! library and include files need almost certainly to be changed.
-!
-! Location: All of the libraries can be found at the following addresses
-!
-! ZLIB: http://zinser.no-ip.info/vms/sw/zlib.htmlx
-!
-ZLIB # sys$library:libz.olb # sys$library: # zlib.h # FT_CONFIG_OPTION_SYSTEM_ZLIB
-$ write sys$output "New driver file vmslib.dat created."
-$ write sys$output "Please customize library locations for your site"
-$ write sys$output "and afterwards re-execute ''myproc'"
-$ goto err_exit
-$ endif
-$!
-$! Init symbols used to hold CPP definitions and include path
-$!
-$ libdefs = ""
-$ libincs = ""
-$!
-$! Open data file with location of libraries
-$!
-$ open/read/end=end_lib/err=err_lib libdata VMSLIB.DAT
-$LIB_LOOP:
-$ read/end=end_lib libdata libline
-$ libline = f$edit(libline, "UNCOMMENT,COLLAPSE")
-$ if libline .eqs. "" then goto LIB_LOOP ! Comment line
-$ libname = f$edit(f$element(0,"#",libline),"UPCASE")
-$ write sys$output "Processing ''libname' setup ..."
-$ libloc = f$element(1,"#",libline)
-$ libsrc = f$element(2,"#",libline)
-$ testinc = f$element(3,"#",libline)
-$ cppdef = f$element(4,"#",libline)
-$ old_cpp = f$locate("=1",cppdef)
-$ if old_cpp.lt.f$length(cppdef) then cppdef = f$extract(0,old_cpp,cppdef)
-$ if f$search("''libloc'").eqs. ""
-$ then
-$ write sys$output "Can not find library ''libloc' - Skipping ''libname'"
-$ goto LIB_LOOP
-$ endif
-$ libsrc_elem = 0
-$ libsrc_found = false
-$LIBSRC_LOOP:
-$ libsrcdir = f$element(libsrc_elem,",",libsrc)
-$ if (libsrcdir .eqs. ",") then goto END_LIBSRC
-$ if f$search("''libsrcdir'''testinc'") .nes. "" then libsrc_found = true
-$ libsrc_elem = libsrc_elem + 1
-$ goto LIBSRC_LOOP
-$END_LIBSRC:
-$ if .not. libsrc_found
-$ then
-$ write sys$output "Can not find includes at ''libsrc' - Skipping ''libname'"
-$ goto LIB_LOOP
-$ endif
-$ if (cppdef .nes. "") then libdefs = libdefs + cppdef + ","
-$ libincs = libincs + "," + libsrc
-$ lqual = "/lib"
-$ libtype = f$edit(f$parse(libloc,,,"TYPE"),"UPCASE")
-$ if f$locate("EXE",libtype) .lt. f$length(libtype) then lqual = "/share"
-$ write optf libloc , lqual
-$ if (f$trnlnm("topt") .nes. "") then write topt libloc , lqual
-$!
-$! Nasty hack to get the freetype includes to work
-$!
-$ ft2def = false
-$ if ((libname .eqs. "FREETYPE") .and. -
- (f$locate("FREETYPE2",cppdef) .lt. f$length(cppdef)))
-$ then
-$ if ((f$search("freetype:freetype.h") .nes. "") .and. -
- (f$search("freetype:[internal]ftobjs.h") .nes. ""))
-$ then
-$ write sys$output "Will use local definition of freetype logical"
-$ else
-$ ft2elem = 0
-$FT2_LOOP:
-$ ft2srcdir = f$element(ft2elem,",",libsrc)
-$ if f$search("''ft2srcdir'''testinc'") .nes. ""
-$ then
-$ if f$search("''ft2srcdir'internal.dir") .nes. ""
-$ then
-$ ft2dev = f$parse("''ft2srcdir'",,,"device","no_conceal")
-$ ft2dir = f$parse("''ft2srcdir'",,,"directory","no_conceal")
-$ ft2conc = f$locate("][",ft2dir)
-$ ft2len = f$length(ft2dir)
-$ if ft2conc .lt. ft2len
-$ then
-$ ft2dir = f$extract(0,ft2conc,ft2dir) + -
- f$extract(ft2conc+2,ft2len-2,ft2dir)
-$ endif
-$ ft2dir = ft2dir - "]" + ".]"
-$ define freetype 'ft2dev''ft2dir','ft2srcdir'
-$ ft2def = true
-$ else
-$ goto ft2_err
-$ endif
-$ else
-$ ft2elem = ft2elem + 1
-$ goto ft2_loop
-$ endif
-$ endif
-$ endif
-$ goto LIB_LOOP
-$END_LIB:
-$ close libdata
-$ return
-$!------------------------------------------------------------------------------
-$!
-$! Analyze Object files for OpenVMS AXP to extract Procedure and Data
-$! information to build a symbol vector for a shareable image
-$! All the "brains" of this logic was suggested by Hartmut Becker
-$! (Hartmut.Becker@compaq.com). All the bugs were introduced by me
-$! (zinser@zinser.no-ip.info), so if you do have problem reports please do not
-$! bother Hartmut/HP, but get in touch with me
-$!
-$! Version history
-$! 0.01 20040006 Skip over shareable images in option file
-$!
-$ ANAL_OBJ_AXP: Subroutine
-$ V = 'F$Verify(0)
-$ SAY := "WRITE_ SYS$OUTPUT"
-$
-$ IF F$SEARCH("''P1'") .EQS. ""
-$ THEN
-$ SAY "ANAL_OBJ_AXP-E-NOSUCHFILE: Error, inputfile ''p1' not available"
-$ goto exit_aa
-$ ENDIF
-$ IF "''P2'" .EQS. ""
-$ THEN
-$ SAY "ANAL_OBJ_AXP: Error, no output file provided"
-$ goto exit_aa
-$ ENDIF
-$
-$ open/read in 'p1
-$ create a.tmp
-$ open/append atmp a.tmp
-$ loop:
-$ read/end=end_loop in line
-$ if f$locate("/SHARE",f$edit(line,"upcase")) .lt. f$length(line)
-$ then
-$ write sys$output "ANAL_SKP_SHR-i-skipshare, ''line'"
-$ goto loop
-$ endif
-$ if f$locate("/LIB",f$edit(line,"upcase")) .lt. f$length(line)
-$ then
-$ write libsf line
-$ write sys$output "ANAL_SKP_LIB-i-skiplib, ''line'"
-$ goto loop
-$ endif
-$ f= f$search(line)
-$ if f .eqs. ""
-$ then
-$ write sys$output "ANAL_OBJ_AXP-w-nosuchfile, ''line'"
-$ goto loop
-$ endif
-$ def/user sys$output nl:
-$ def/user sys$error nl:
-$ anal/obj/gsd 'f /out=x.tmp
-$ open/read xtmp x.tmp
-$ XLOOP:
-$ read/end=end_xloop xtmp xline
-$ xline = f$edit(xline,"compress")
-$ write atmp xline
-$ goto xloop
-$ END_XLOOP:
-$ close xtmp
-$ goto loop
-$ end_loop:
-$ close in
-$ close atmp
-$ if f$search("a.tmp") .eqs. "" -
- then $ exit
-$ ! all global definitions
-$ search a.tmp "symbol:","EGSY$V_DEF 1","EGSY$V_NORM 1"/out=b.tmp
-$ ! all procedures
-$ search b.tmp "EGSY$V_NORM 1"/wind=(0,1) /out=c.tmp
-$ search c.tmp "symbol:"/out=d.tmp
-$ def/user sys$output nl:
-$ edito/edt/command=sys$input d.tmp
-sub/symbol: "/symbol_vector=(/whole
-sub/"/=PROCEDURE)/whole
-exit
-$ ! all data
-$ search b.tmp "EGSY$V_DEF 1"/wind=(0,1) /out=e.tmp
-$ search e.tmp "symbol:"/out=f.tmp
-$ def/user sys$output nl:
-$ edito/edt/command=sys$input f.tmp
-sub/symbol: "/symbol_vector=(/whole
-sub/"/=DATA)/whole
-exit
-$ sort/nodupl d.tmp,f.tmp 'p2'
-$ delete a.tmp;*,b.tmp;*,c.tmp;*,d.tmp;*,e.tmp;*,f.tmp;*
-$ if f$search("x.tmp") .nes. "" -
- then $ delete x.tmp;*
-$!
-$ close libsf
-$ EXIT_AA:
-$ if V then set verify
-$ endsubroutine